about summary refs log tree commit diff stats
path: root/translate_subx
blob: 6d08e971435ee87f99e49223ed8a0bcbe21b25eb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/sh
# Translate given SubX files by running the self-hosted translator natively on
# Linux.

set -e

./build

cat $*          |apps/braces      > a.braces

cat a.braces    |apps/calls       > a.calls

cat a.calls     |apps/sigils      > a.sigils

cat a.sigils    |apps/tests       > a.tests

cat a.tests     |apps/assort      > a.assort

cat a.assort    |apps/dquotes     > a.dquotes

# A little hack. We want translate_subx to always emit identical binaries to
# the C++ translator. The C++ translator assorts segments before it processes
# string literals, so we follow the same order above.
#
# However, dquotes currently emits a separate data segment for string literals.
# So we need to run assort a second time to clean up after it.
#
# Potential solutions:
#   a) modify C++ translator to process string literals before assorting.
#   b) clean up dquotes to assume assorted segments, and append to the
#   existing data segment.
cat a.dquotes   |apps/assort      > a.assort2

cat a.assort2   |apps/pack        > a.pack

cat a.pack      |apps/survey_elf  > a.survey

cat a.survey    |apps/hex         > a.elf

chmod +x a.elf
='n8' href='#n8'>8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37


                                            
                             
                                                                     

                                                                   
                                       
                                  



                                                                                                      
 


                                                 
                            
 

                                                         







                                                                                              
                                                                        
                                                                                         
                                                                                                     
                                                                          


                                                                                                                  
                                                                   
file load:
  cursor_line = 1
  first line is a drawing -> cursor_line = 2
click on text -> cursor moves
click on first character of text -> cursor on first character of text
click to right of text -> cursor past end of line
click to right of wrapped text -> cursor on final character of line
click on drawing -> cursor doesn't move
cursor past end of line -> renders
create drawing -> cursor bumps down below drawing
backspace
  cursor_pos == 0, previous line is a drawing -> delete drawing, cursor still visible at start of line
  cursor_pos == 0, previous line is text -> join lines, cursor still at same character

drawing
  draw a line, circle, rectangle, square, polygon
  select a point and move it
  select a point and name it

enter
  cursor_pos == 0 -> insert empty line above current line

scrolling:
  given moby dick, a file containing all text:
  page up moves top line on screen to bottom
  page down moves bottom line on screen to top
  cursor remains on screen
  cursor remains on text line
  'up' arrow with cursor at top of screen scrolls up one line (drawings still fully in or out)
    if cursor line wrapped before, it scrolls up by only one screen line
    if previous line (above top of screen) wrapped, it scrolls up by only one screen line
  'down' arrow with cursor at bottom of screen scrolls down one line (drawings still fully in or out)
    if cursor line wrapped before, it scrolls down by only one screen line

persistence:
  draw a line, circle, rectangle, square, polygon, quit, restart. All the shapes you drew should still be visible.
  select a point and name it, quit, restart. Name is still visible.