-
Notifications
You must be signed in to change notification settings - Fork 2
/
block-020.fth
32 lines (28 loc) · 1.18 KB
/
block-020.fth
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
(Blocks 20:26 - A simple block editor)
3 load(strings)
4 load(case/switch)
5 load(screen)
10 load(vars)
32 const rows 100 const cols rows cols * const block-sz
block-sz var block block-sz var work
rows 1- const max-row cols 1- const max-col
blk 40 wc@ ; >blk 40 wc! ;
row 43 wc@ ; >row 43 wc! ; row++row 1+ >row ;
col 44 wc@ ; >col 44 wc! ; col++col 1+ >col ;
ed-mode 45 wc@ ; >ed-mode 45 wc! ;
show? 46 wc@ ; show! 1 46 wc! ; shown 0 46 wc! ;
dirty? 47 wc@ ; dirtyshow! 1 47 wc! ; clean 0 47 wc! ;
>row/col(r c--)>col >row ;
>pos(r c--a)swap cols * + block + ;
rc>pos(--a)row col >pos ;
nt-line(r--) 0 swap max-col >pos c! ;
nt-linesrows for i nt-line next ;
->cur col 2+ row 2+ ->cr cur-on ;
->foot 1 rows 3 + ->cr ;
->cmd ->foot cr clr-eol ;
norm-row(x--) row + 0 max max-row min >row ;
norm-col(x--) col + 0 max max-col 1- min >col ;
mv (r c--)norm-col norm-row row nt-line ;
mv-lt0 0 1- mv ; mv-rt0 1 mv ; mv-up0 1- 0 mv ; mv-dn1 0 mv ;
mv-home0 >col ; mv-home! 0 0 >row/col ;
21 26 thru