dsforth: added "NIP" and "TUCK"
[urasm.git] / dsforth / main_vlist.zas
blob79892dd2ea20a560c63483b077a11888a2d76716
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;; "WORDS"
3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5 $FORTH_WORD KEY-WAIT-CR-SPACE
6 ;; k8
7 ;; ( -- )
8 key_wait_cr_space_loop:
9   KEY
10   DUP CHCR = SWAP BL = OR
11   0BRANCH key_wait_cr_space_loop
12   ;S
13 $FORTH_END_WORD KEY-WAIT-CR-SPACE
15 $FORTH_WORD KEY-SCROLL-MSG-WAIT
16 ;; k8
17 ;; ( -- )
18   (.") "\r<press ENTER...>"  ;;"
19   KEY-WAIT-CR-SPACE
20   EMITCR CONWIDTH 1- SPACES EMITCR
21   ;S
22 $FORTH_END_WORD KEY-SCROLL-MSG-WAIT
24 ;; k8
25 $FORTH_VAR (SCROLL-CRCOUNT)  0
26 $FORTH_VAR (SCROLL-CRMAX)    20
28 $FORTH_WORD (SCROLL-CR-RESET)
29 ;; k8
30 ;; ( -- )
31   (SCROLL-CRCOUNT) 0! ;S
32 $FORTH_END_WORD (SCROLL-CR-RESET)
34 $FORTH_WORD (SCROLL-CR)
35 ;; k8
36 ;; ( -- )
37   ENDCR
38   (SCROLL-CRCOUNT) @ 1+
39   DUP (SCROLL-CRMAX) @ >= 0BRANCH words_cr_nowait
40   KEY-SCROLL-MSG-WAIT
41   DROP 0
42 words_cr_nowait:
43   (SCROLL-CRCOUNT) !
44   ;S
45 $FORTH_END_WORD (SCROLL-CR)
48 $FORTH_WORD WORDS NOTURNKEY
49 ;; AberSoft, k8
50 ;; ( -- )
51   CONTEXT @ @
52   (SCROLL-CR-RESET) ENDCR
54 vlist0:
55   ;; ( nfa )
56   (SHIDDEN?) @ TBRANCH vlist_hidden_allowed
57   ;; check for hidden word
58   DUP 1+ C@ [CHAR] ( = TBRANCH vlist_next_word
60 vlist_hidden_allowed:
61   ;; check width
62   DUP (ID-LENGTH)  ;; ( nfa len )
63   WHEREX +  ;; ( nfa nextpos )
64   DUP CONWIDTH = 0BRANCH vlist_not_exact_width
65     ;; exact width
66     ;; ( nfa nextpos )
67     DROP DUP (ID.) (SCROLL-CR)
68     BRANCH vlist_next_word
70 vlist_not_exact_width:
71   1+ CONWIDTH < TBRANCH vlist_fits_in_line
72     ;; doesn't fit in line with a space
73     (SCROLL-CR)
75 vlist_fits_in_line:
76   DUP (ID.) SPACE
78 vlist_next_word:
79   ;; ( nfa )
80   NFA->CFA CFA->LFA @ DUP 0= ?BREAK OR
81   0BRANCH vlist0
82   DROP
84   ;; final CR
85   WHEREX @ 0BRANCH vlist_exit
86     (SCROLL-CR)
87 vlist_exit:
88   ;S
89 $FORTH_END_WORD WORDS