mirror of
https://github.com/forth-ev/VolksForth.git
synced 2024-09-07 04:54:30 +00:00
1599 lines
102 KiB
Plaintext
1599 lines
102 KiB
Plaintext
Screen 0 not modified
|
||
0 \\ *** Screen-Editor *** 10aug86we
|
||
1
|
||
2 Dieses File enth„lt den volksFORTH - Editor.
|
||
3 Er basiert auf dem Editor im F83 von Laxen/Perry, besitzt aber
|
||
4 erheblich erweiterte Funktionen (Zeichen- und Zeilenstack) und
|
||
5 ist ein vollst„ndig in GEM integrierter Fullscreen-Editor.
|
||
6
|
||
7 Obwohl die Steuerung mit Maus und Menuzeile erfolgt, k”nnen
|
||
8 ihn die 'Profis' auch vollst„ndig <20>ber Controltasten bedienen,
|
||
9
|
||
10 Die Dauerhilfe-Funktion macht eine Funktionsbeschreibung <20>ber-
|
||
11 fl<66>ssig. Solange im HILFE-Menu Dauerhilfe gew„hlt ist, erscheint
|
||
12 vor der Ausf<73>hrumg jeder Editor-Funktion ein erl„uternder Text
|
||
13 mit der M”glichkeit zum Abbruch. Dies gilt jedoch nicht, wenn
|
||
14 die Funktion per Tastendruck aufgerufen wurde.
|
||
15
|
||
Screen 1 not modified
|
||
0 \ Load Screen for the Editor cas20130105
|
||
1
|
||
2 Onlyforth GEM also
|
||
3 include ediicon.fb
|
||
4
|
||
5 | Variable (dx 2 (dx ! | Variable (dy 4 (dy !
|
||
6 | : dx (dx @ ; | : dy (dy @ ;
|
||
7
|
||
8 \needs -text .( strings needed !!) abort
|
||
9 \needs file? .( Filesystem needed !!) abort
|
||
10 include gem\supergem.fb
|
||
11 include gem\gemdefs.fb
|
||
12 include edwindow.fb
|
||
13
|
||
14 Forth definitions
|
||
15 1 $2C +thru
|
||
Screen 2 not modified
|
||
0 \ Editor Variable 10sep86we
|
||
1
|
||
2 Variable 'scr 1 'scr ! Variable 'r# 'r# off
|
||
3 Variable 'edifile
|
||
4
|
||
5 ?head @ 1 ?head !
|
||
6
|
||
7 Variable changed Variable edistate
|
||
8 Variable edifile
|
||
9 Variable ycur
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 3 not modified
|
||
0 \ Edi move cursor with position-checking or cyclic 30aug86we
|
||
1
|
||
2 : c ( n -- ) \ checks the cursor position
|
||
3 r# @ + dup 0 b/blk uwithin 0= abort" Border!" r# ! ;
|
||
4
|
||
5 \ : c ( n -- ) \ moves cyclic thru the screen
|
||
6 \ r# @ + b/blk mod r# ! ;
|
||
7
|
||
8
|
||
9
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 4 not modified
|
||
0 \ Move the Editor's cursor around 08aug86we
|
||
1
|
||
2 : top ( -- ) r# off ;
|
||
3 : cursor ( -- n ) r# @ ;
|
||
4 : t ( n -- ) c/l * cursor - c ;
|
||
5 : line# ( -- n ) cursor c/l / ;
|
||
6 : col# ( -- n ) cursor c/l mod ;
|
||
7 : +t ( n -- ) line# + t ;
|
||
8 : 'start ( -- addr ) scr @ block ;
|
||
9 : 'cursor ( -- addr ) 'start cursor + ;
|
||
10 : 'line ( -- addr ) 'cursor col# - ;
|
||
11 : #after ( -- n ) c/l col# - ;
|
||
12 : #remaining ( -- n ) b/blk cursor - ;
|
||
13 : #end ( -- n ) #remaining col# + ;
|
||
14
|
||
15
|
||
Screen 5 not modified
|
||
0 \ Move the Editors cursor 08aug86we
|
||
1
|
||
2 : curup c/l negate c ;
|
||
3 : curdown c/l c ;
|
||
4 : curleft -1 c ;
|
||
5 : curright 1 c ;
|
||
6 : +tab cursor $10 / 1+ $10 * cursor - c ;
|
||
7 : -tab cursor 8 mod negate dup 0= 8 * + c ;
|
||
8 : >""end 'start b/blk -trailing nip b/blk 1- min r# ! ;
|
||
9 : <cr> line# t curdown ;
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 6 not modified
|
||
0 \ buffers 14sep86we
|
||
1
|
||
2 : modified ( -- ) scr @ block drop update
|
||
3 changed @ ?exit edistate off changed on ;
|
||
4
|
||
5 &84 Constant c/pad
|
||
6 &42 Constant c/buf
|
||
7
|
||
8 : 'work ( -- work-buf ) pad c/pad + ;
|
||
9 : 'insert ( -- ins-buf ) 'work c/pad + ;
|
||
10 : 'find ( -- find-buf ) 'insert c/buf + ;
|
||
11
|
||
12 : 'find+ ( n1 -- n2 ) 'find c@ + ;
|
||
13
|
||
14
|
||
15
|
||
Screen 7 not modified
|
||
0 \ Errorchecking 09sep86we
|
||
1
|
||
2 : ?bottom ( -- ) 'start b/blk + c/l - c/l -trailing nip
|
||
3 abort" You would lose a line" ;
|
||
4
|
||
5 : ?end ( -- ) 'line c/l + 1- c@ bl -
|
||
6 abort" You would lose a char" ;
|
||
7
|
||
8 : ?range ( n -- n ) dup 0 capacity uwithin not
|
||
9 abort" Out of range!" ;
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 8 not modified
|
||
0 \ Graphics for display 23aug86we
|
||
1
|
||
2 : lineclr ( line# -- )
|
||
3 wi_x swap cheight * wi_y +
|
||
4 over wi_width + over cheight + fbox ;
|
||
5
|
||
6 : lineinsert ( line# -- )
|
||
7 wi_x over cheight * wi_y +
|
||
8 wi_width over l/s 1- cheight * wi_y + swap -
|
||
9 2over cheight + scr>scr lineclr ;
|
||
10
|
||
11 : linedelete ( line# -- )
|
||
12 wi_x swap 1+ cheight * wi_y +
|
||
13 wi_width over l/s cheight * wi_y + swap -
|
||
14 2over cheight - scr>scr l/s 1- lineclr ;
|
||
15
|
||
Screen 9 not modified
|
||
0 \ Editor-Window Title and Status-Line cas20130105
|
||
1
|
||
2 : 'workblank
|
||
3 'work dup $sum ! dup off dup 1+ c/l blank c/l + off ;
|
||
4
|
||
5
|
||
6 : update$ ( -- string )
|
||
7 scr @ updated? not IF " not updated" exit THEN " updated" ;
|
||
8
|
||
9 : .edistate edistate @ ?exit edistate on 'workblank
|
||
10 " Scr # " count $add scr @ extend <# # # # #> $add
|
||
11 'work c@ 2+ 'work c! update$ count $add
|
||
12 'work 1+ wi_status ;
|
||
13
|
||
14
|
||
15
|
||
Screen 10 not modified
|
||
0 \ screen display 30aug86we
|
||
1
|
||
2 : .edifile 'workblank 1 'work c!
|
||
3 isfile@ ?dup 0= IF " DIRECT" ELSE 2- >name THEN
|
||
4 count $add 'work count + 1+ c/l min off
|
||
5 'work 1+ wi_title ;
|
||
6
|
||
7 : 'line# ( line# -- addr count )
|
||
8 dup dy + dx at c/l * 'start + c/l ;
|
||
9
|
||
10 : .line ( line# -- ) dup lineclr 'line# -trailing type ;
|
||
11 : redisplay ( line# -- ) 'line# type ;
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 11 not modified
|
||
0 \ screen display 14sep86we
|
||
1
|
||
2 &18 Constant id-len
|
||
3 Create id id-len allot id id-len erase
|
||
4
|
||
5 : stamp id 1+ count 'start c/l + over - swap cmove ;
|
||
6 : ?stamp changed @ IF stamp THEN ;
|
||
7
|
||
8
|
||
9 : edilist edistate off changed off
|
||
10 vslide_size scr @ vslide
|
||
11 .edifile .edistate l/s 0 DO I .line LOOP ;
|
||
12
|
||
13 : undo scr @ block drop prev @ emptybuf edilist ;
|
||
14
|
||
15 : do_redraw hide_c wi_clear redraw_screen edilist ;
|
||
Screen 12 not modified
|
||
0 \ Edi Variables, 23aug86we
|
||
1
|
||
2 Variable (pad (pad off
|
||
3 : memtop ( -- addr ) sp@ $100 - ;
|
||
4
|
||
5 Variable chars Variable #chars
|
||
6 : 'chars ( -- addr ) chars @ #chars @ + ;
|
||
7
|
||
8 Variable lines Variable #lines
|
||
9 : 'lines ( -- addr ) lines @ #lines @ + ;
|
||
10
|
||
11 Variable (key
|
||
12
|
||
13 Variable imode imode off
|
||
14
|
||
15
|
||
Screen 13 not modified
|
||
0 \ Edi line handling 09aug86we
|
||
1
|
||
2 : linemodified modified line# redisplay ;
|
||
3
|
||
4 : clrline 'line c/l blank linemodified ;
|
||
5 : clrright 'cursor #after blank linemodified ;
|
||
6
|
||
7 : delline 'line #end c/l delete
|
||
8 line# linedelete modified ;
|
||
9 : backline curup delline ;
|
||
10
|
||
11 : instline ?bottom 'line c/l over #end insert
|
||
12 line# lineinsert clrline ;
|
||
13
|
||
14
|
||
15
|
||
Screen 14 not modified
|
||
0 \ Edi line handling 09aug86we
|
||
1
|
||
2 : @line 'lines memtop u> abort" line buffer full"
|
||
3 'line 'lines c/l cmove c/l #lines +! ;
|
||
4
|
||
5 : copyline @line curdown ;
|
||
6 : line>buf @line delline ;
|
||
7
|
||
8 : !line c/l negate #lines +! 'lines 'line c/l cmove
|
||
9 linemodified ;
|
||
10
|
||
11 : buf>line #lines @ 0= abort" line buffer empty"
|
||
12 ?bottom instline !line ;
|
||
13
|
||
14
|
||
15
|
||
Screen 15 not modified
|
||
0 \ Edi char handling 09aug86we
|
||
1
|
||
2 : delchar 'cursor #after 1 delete linemodified ;
|
||
3 : backspace curleft delchar ;
|
||
4
|
||
5 : inst1 ?end 'cursor 1 over #after insert ;
|
||
6 : instchar inst1 bl 'cursor c! linemodified ;
|
||
7
|
||
8 : @char 'chars 1- lines @ u> abort" char buffer full"
|
||
9 'cursor c@ 'chars c! 1 #chars +! ;
|
||
10 : copychar @char curright ;
|
||
11 : char>buf @char delchar ;
|
||
12
|
||
13 : !char -1 #chars +! 'chars c@ 'cursor c! ;
|
||
14 : buf>char #chars @ 0= abort" char buffer empty"
|
||
15 inst1 !char linemodified ;
|
||
Screen 16 not modified
|
||
0 \ from Screen to Screen ... 22oct86we
|
||
1
|
||
2 : setscreen ( n -- ) ?stamp ?range scr ! edilist ;
|
||
3 : n scr @ 1+ setscreen ;
|
||
4 : b scr @ 1- setscreen ;
|
||
5
|
||
6 : >shadow ( n1 -- n2 ) capacity 2/ 2dup < IF + ELSE - THEN ;
|
||
7 : w scr @ >shadow setscreen ;
|
||
8
|
||
9 : (mark scr @ 'scr ! r# @ 'r# ! isfile@ 'edifile ! ;
|
||
10 : mark (mark true abort" marked !" ;
|
||
11
|
||
12 : a ?stamp 'edifile @ [ Dos ] dup searchfile drop
|
||
13 isfile@ 'edifile ! !files
|
||
14 'r# @ r# @ 'r# ! r# !
|
||
15 'scr @ scr @ 'scr ! ?range scr ! edilist ;
|
||
Screen 17 not modified
|
||
0 \ splitting a line, replace 17aug86we
|
||
1
|
||
2 : split ?bottom pad c/l 2dup blank
|
||
3 'cursor #remaining insert linemodified
|
||
4 col# <cr> line# lineinsert
|
||
5 'start cursor + c/l rot delete linemodified ;
|
||
6
|
||
7 : ins 'insert count under 'cursor #after insert c ;
|
||
8
|
||
9 : r
|
||
10 c/l 'line over -trailing nip -
|
||
11 'insert c@ 'find c@ - < abort" not enough room"
|
||
12 'find c@ dup negate c 'cursor #after rot delete ins
|
||
13 linemodified ;
|
||
14
|
||
15
|
||
Screen 18 not modified
|
||
0 \ find und search 30aug86we
|
||
1
|
||
2 : >last? ( -- f ) :dfright state_gaddr l@ 1 and ;
|
||
3 : >last :dfright select :dfleft deselect ;
|
||
4 : >1st :dfleft select :dfright deselect ;
|
||
5
|
||
6 Variable fscreen
|
||
7
|
||
8 : find? ( - n f ) 'find count 'cursor #remaining search ;
|
||
9
|
||
10 : s BEGIN find? IF 'find+ c edilist exit THEN drop
|
||
11 fscreen @ scr @ - ?dup stop? 0= and
|
||
12 WHILE 0< IF -1 ELSE 1 THEN scr +! top scr @ vslide
|
||
13 REPEAT :sfind tree!
|
||
14 >last? IF >1st :df1st ELSE >last :dflast THEN
|
||
15 getnumber drop fscreen ! edilist true abort" not found" ;
|
||
Screen 19 not modified
|
||
0 \ Search-Findbox auswerten 24aug86we
|
||
1
|
||
2 : initfind ( -- )
|
||
3 :dfmatch select :dfignore deselect >last
|
||
4 1 extend :df1st putnumber
|
||
5 capacity 1- extend :dflast putnumber ;
|
||
6
|
||
7 : getfind ( -- n )
|
||
8 :dfignore state_gaddr l@ 1 and caps !
|
||
9 >last? IF :dflast ELSE :df1st THEN getnumber drop
|
||
10 capacity 1- min
|
||
11 :dffstrin 'find getstring :dfrstrin 'insert getstring ;
|
||
12
|
||
13 : do_fbox ( -- button ) :sfind tree!
|
||
14 edifile @ isfile@ - IF isfile@ edifile ! initfind THEN
|
||
15 show_object :dffstrin form_do dup deselect hide_object ;
|
||
Screen 20 not modified
|
||
0 \ Replacing ... 24aug86we
|
||
1
|
||
2 Variable ?replace
|
||
3
|
||
4 : show_replace ( -- )
|
||
5 &320 &200 &10 &10 little 4!
|
||
6 col# dx + 2- cwidth * line# dy + 1+ cheight *
|
||
7 2dup 0 objc_setpos 0 objc_getwh big 4!
|
||
8 big 4@ scr>mem1 1 little 4@ big 4@ form_dial
|
||
9 0 ( install) 3 ( depth) big 4@ objc_draw show_c ;
|
||
10
|
||
11 : replace ( -- )
|
||
12 :fbox tree! BEGIN
|
||
13 show_replace 0 form_do dup deselect hide_object
|
||
14 dup :fboxcanc - WHILE :fboxyes = IF r THEN s
|
||
15 REPEAT drop ;
|
||
Screen 21 not modified
|
||
0 \ Editor's find and replace 24aug86we
|
||
1
|
||
2 Variable (findbox (findbox off
|
||
3
|
||
4 : repfind ( -- )
|
||
5 (findbox @ 'find c@ and 0= abort" use find first"
|
||
6 ?stamp fscreen @ capacity 1- min fscreen !
|
||
7 s ?replace @ IF replace THEN ;
|
||
8
|
||
9 : edifind ( -- )
|
||
10 do_fbox :dfcancel case? ?exit
|
||
11 :dfreplac = ?replace swap IF on ELSE off THEN
|
||
12 :edimenu tree! :repeat 1 menu_ienable (findbox on
|
||
13 :sfind tree! getfind fscreen ! repfind ;
|
||
14
|
||
15
|
||
Screen 22 not modified
|
||
0 \ exiting the Editor 30aug86we
|
||
1
|
||
2 Defer resetmouse
|
||
3
|
||
4 : done ( ff addr -- tf )
|
||
5 :edimenu tree! 0 menu_bar resetmouse hide_c
|
||
6 wi_close ycur @ 0 at cr ." Scr #" scr @ 3 .r 2 spaces
|
||
7 count type true ;
|
||
8
|
||
9 : cdone ( ff -- tf ) prev @ emptybuf " canceled" done ;
|
||
10 : sdone ( ff -- tf ) ?stamp save-buffers " saved" done ;
|
||
11 : xdone ( ff -- tf ) ?stamp update$ done ;
|
||
12 : ldone ( ff -- tf ) drop true
|
||
13 ?stamp save-buffers " loading" done ;
|
||
14
|
||
15
|
||
Screen 23 not modified
|
||
0 \ get User's ID, jump to screen 24aug86we
|
||
1
|
||
2 : do_getid
|
||
3 :sgetid tree! id 1+ :idtext putstring
|
||
4 show_object :idtext form_do dup deselect hide_object
|
||
5 :idcancel case? ?exit
|
||
6 :noid = IF id off exit THEN
|
||
7 :idtext id 1+ getstring ;
|
||
8
|
||
9 : get-id
|
||
10 id c@ ?exit 1 id c! do_getid ;
|
||
11
|
||
12 : jumpscreen :sgetscr tree!
|
||
13 pad dup off :scrnr putstring
|
||
14 show_object :scrnr form_do dup deselect hide_object
|
||
15 :sgcancel = ?exit :scrnr getnumber drop setscreen ;
|
||
Screen 24 not modified
|
||
0 \ insert- and overwrite-mode 24aug86we
|
||
1
|
||
2 : mark_item ( item# -- ) 1 menu_icheck ;
|
||
3 : clr_item ( item# -- ) 0 menu_icheck ;
|
||
4
|
||
5 : setimode imode on :edimenu tree!
|
||
6 :imode mark_item :omode clr_item ;
|
||
7 : clrimode imode off :edimenu tree!
|
||
8 :omode mark_item :imode clr_item ;
|
||
9
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 25 not modified
|
||
0 \ viewing words 24aug86we
|
||
1
|
||
2 : >view ( -- )
|
||
3 'find count pad place pad capitalize bl pad count + c!
|
||
4 find 0= abort" Haeh?"
|
||
5 >name ?dup 0= abort" no view-field"
|
||
6 4- @ ?dup 0= abort" hand made"
|
||
7 (view scr ! top curdown find? 0= IF drop exit THEN
|
||
8 'find+ c ;
|
||
9
|
||
10 : do_view ( -- )
|
||
11 :sview tree! pad dup off :svword putstring
|
||
12 show_object :svword form_do dup deselect hide_object
|
||
13 :idcancel case? ?exit
|
||
14 :svword 'find getstring :svmark = IF (mark THEN
|
||
15 >view edilist ;
|
||
Screen 26 not modified
|
||
0 \ Table of keystrokes 10aug86we
|
||
1
|
||
2 Create keytable
|
||
3 $4800 0 , , $4B00 0 , , $5000 0 , , $4D00 0 , ,
|
||
4 $4838 1 , , $4B34 1 , , $5032 1 , , $4D36 1 , ,
|
||
5 $5000 2 , , $7400 2 , ,
|
||
6 $0E08 0 , , $537F 0 , , $5200 0 , , $240A 2 , ,
|
||
7 $0E08 1 , , $537F 1 , , $5230 1 , , $6100 0 , ,
|
||
8 $1709 2 , , $180F 2 , , $1205 2 , , $531F 2 , ,
|
||
9 $1C0D 0 , , $1C0D 1 , , $0F09 0 , , $0F09 1 , ,
|
||
10 $4700 0 , , $4737 1 , , $2207 2 , , $2F16 2 , ,
|
||
11 $2106 2 , , $1312 2 , , $320D 2 , ,
|
||
12 $011B 0 , , $1F13 2 , , $2D18 2 , , $260C 2 , ,
|
||
13 $310E 2 , , $3002 2 , , $1E01 2 , , $1117 2 , ,
|
||
14
|
||
15 here keytable - 2/ 2/ Constant #keys
|
||
Screen 27 not modified
|
||
0 \ Table of actions 11aug86we
|
||
1
|
||
2 Create actiontable ]
|
||
3 curup curleft curdown curright
|
||
4 line>buf char>buf buf>line buf>char
|
||
5 copyline copychar
|
||
6 backspace delchar instchar jumpscreen
|
||
7 backline delline instline undo
|
||
8 setimode clrimode clrline clrright
|
||
9 <cr> split +tab -tab
|
||
10 top >""end do_getid do_view
|
||
11 edifind repfind mark
|
||
12 cdone sdone xdone ldone
|
||
13 n b a w
|
||
14
|
||
15 [ here actiontable - 2/ #keys - abort( # of actions)
|
||
Screen 28 not modified
|
||
0 \ Table of Menuevents 24aug86we
|
||
1
|
||
2 Create menutable
|
||
3 $FF c, $FF c, $FF c, $FF c,
|
||
4 :cutline c, :cutchar c, :pastelin c, :pastecha c,
|
||
5 :copyline c, :copychar c,
|
||
6 $FF c, $FF c, $FF c, :jump c,
|
||
7 :backline c, :delline c, :insline c, :undo c,
|
||
8 :imode c, :omode c, :eraselin c, :erasrest c,
|
||
9 $FF c, :split c, :tab c, :backtab c,
|
||
10 :home c, :toend c, :getid c, :view c,
|
||
11 :search c, :repeat c, :mark c,
|
||
12 :canceled c, :flushed c, :updated c, :loading c,
|
||
13 :next c, :back c, :alternat c, :shadow c,
|
||
14
|
||
15 here menutable - #keys - abort( # of menuitems)
|
||
Screen 29 not modified
|
||
0 \ Table of Help-Boxes 24aug86we
|
||
1
|
||
2 Create helptable
|
||
3 $FF c, $FF c, $FF c, $FF c,
|
||
4 :hlicut c, :hchcut c, :hlipaste c, :hchpaste c,
|
||
5 :hlicopy c, :hchcopy c,
|
||
6 $FF c, $FF c, $FF c, :hjump c,
|
||
7 :hliback c, :hlidel c, :hliins c, :hexundo c,
|
||
8 :hspins c, :hspover c, :hlierase c, :hlirest c,
|
||
9 $FF c, :hlisplit c, :hcutabr c, :hcutabl c,
|
||
10 :hcuhome c, :hcuend c, :hspgetid c, :hview c,
|
||
11 :hspfind c, :hsprepea c, :hscmark c,
|
||
12 :hexcancl c, :hexsave c, :hexupdat c, :hexload c,
|
||
13 :hscnext c, :hscback c, :hscalter c, :hscshado c,
|
||
14
|
||
15 here helptable - #keys - abort( # of menuitems)
|
||
Screen 30 not modified
|
||
0 \ Prepare multi-event 09sep86we
|
||
1
|
||
2 Variable mflag mflag off
|
||
3
|
||
4 : ediprepare
|
||
5 %00110111
|
||
6 1 1 1
|
||
7 mflag @
|
||
8 dx cwidth * dy cheight * c/l cwidth * l/s cheight *
|
||
9 0 0 0 0 0
|
||
10 0 0
|
||
11 intin $10 array! message >absaddr addrin 2! ;
|
||
12
|
||
13 ' pause | Alias ev-timer
|
||
14 : ev-r1 1 mflag 1+ ctoggle ;
|
||
15
|
||
Screen 31 not modified
|
||
0 \ Button Event 24aug86we
|
||
1
|
||
2 Variable ?cursor ?cursor off
|
||
3
|
||
4 : curon ?cursor @ ?exit ?cursor on
|
||
5 3 swr_mode 1 sf_color 1 sf_interior 0 sf_perimeter
|
||
6 at? cwidth * swap cheight *
|
||
7 over cwidth 1- + over cheight + 1- bar ;
|
||
8
|
||
9 : curoff ?cursor off curon ?cursor off ;
|
||
10
|
||
11 : ev-button mflag @ 0= ?exit
|
||
12 intout 4+ @ cheight / dy - c/l *
|
||
13 intout 2+ @ cwidth / dx - + r# ! hide_c curoff ;
|
||
14
|
||
15
|
||
Screen 32 not modified
|
||
0 \ Key event 17aug86we
|
||
1
|
||
2 : visible? ( key -- f ) $FF and ;
|
||
3
|
||
4 : putchar ( -- )
|
||
5 (key @ dup visible? 0= abort" What?"
|
||
6 imode @ IF inst1 THEN 'cursor c! linemodified curright ;
|
||
7
|
||
8 : findkey ( d_key -- addr )
|
||
9 ['] putchar -rot
|
||
10 #keys 0 DO 2dup keytable I 2* 2* + 2@ d=
|
||
11 IF rot drop actiontable I 2* + @ -rot LEAVE THEN
|
||
12 LOOP 2drop ;
|
||
13
|
||
14
|
||
15
|
||
Screen 33 not modified
|
||
0 \ Key event 23aug86we
|
||
1
|
||
2 Variable jingle jingle on
|
||
3 Variable ?mouse
|
||
4
|
||
5 : edit-at cursor c/l /mod dy + swap dx + at ;
|
||
6
|
||
7 : ev-key ?mouse off
|
||
8 intout &10 + dup @ dup (key ! hide_c edit-at curoff
|
||
9 swap 2- @ dup 1 and + 2/ findkey execute
|
||
10 jingle on .edistate BEGIN getkey 0= UNTIL ;
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 34 not modified
|
||
0 \ Message events for window 30aug86we
|
||
1
|
||
2 : getmessage ( n -- n' ) 2* message + @ ;
|
||
3
|
||
4 : wm_arrowed
|
||
5 4 getmessage 1 and IF n exit THEN b ;
|
||
6
|
||
7 : wm_vslide
|
||
8 4 getmessage capacity 1- &1000 */ setscreen ;
|
||
9
|
||
10 : wm_moved
|
||
11 4 getmessage cwidth / 1 max &14 min (dx !
|
||
12 5 getmessage cheight / 1 max 5 min 3 + (dy !
|
||
13 wi_handle @ 5 wi_size wind_set redraw_screen ;
|
||
14
|
||
15
|
||
Screen 35 not modified
|
||
0 \ Message events (the menuline) 02sep86we
|
||
1
|
||
2 Variable ?help ?help on
|
||
3
|
||
4 : do_help ( n -- )
|
||
5 helptable + c@ alert 1 = ?exit
|
||
6 true abort" Dann eben nicht !!" ;
|
||
7
|
||
8 : do_copyr :copyr tree!
|
||
9 show_object 0 form_do deselect hide_object ;
|
||
10
|
||
11 : do_menuhelp show_c :hhemenu alert hide_c
|
||
12 :edimenu tree! 1 and :menuhelp over menu_icheck
|
||
13 ?help ! ;
|
||
14
|
||
15
|
||
Screen 36 not modified
|
||
0 \ Message events from menuline 02sep86we
|
||
1
|
||
2 : do_other ( -- ) 4 getmessage
|
||
3 :menuhelp case? IF do_menuhelp exit THEN
|
||
4 :hmouse case? IF :hhemouse alert drop exit THEN
|
||
5 :hfuncts case? IF :hhef1f10 alert drop exit THEN
|
||
6 drop do_copyr ;
|
||
7
|
||
8 : menu-message ( -- ) message @ :mn_selected - ?exit
|
||
9 :edimenu tree! 3 getmessage 1 menu_tnormal
|
||
10 ['] do_other 4 getmessage
|
||
11 #keys 0 DO dup menutable I + c@ =
|
||
12 IF ?help @ IF I do_help THEN
|
||
13 nip actiontable I 2* + @ swap LEAVE THEN
|
||
14 LOOP drop execute jingle on .edistate ;
|
||
15
|
||
Screen 37 not modified
|
||
0 \ Handle message-event 24aug86we
|
||
1
|
||
2 : ev-message hide_c edit-at curoff
|
||
3 message @ :mn_selected case? IF menu-message exit THEN
|
||
4 :wm_arrowed case? IF wm_arrowed exit THEN
|
||
5 :wm_vslid case? IF wm_vslide exit THEN
|
||
6 :wm_moved case? IF wm_moved exit THEN
|
||
7 :wm_redraw case? IF do_redraw exit THEN
|
||
8 drop ;
|
||
9
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 38 not modified
|
||
0 \ Handle all events 30aug86we
|
||
1
|
||
2 Create ev-flag
|
||
3 :mu_mesag c, :mu_m1 c, :mu_button c,
|
||
4 :mu_keybd c, :mu_timer c,
|
||
5
|
||
6 Create: event-actions
|
||
7 ev-message ev-r1 ev-button ev-key ev-timer ;
|
||
8
|
||
9 : handle-events ( which -- )
|
||
10 5 0 DO ev-flag I + c@ over and IF drop I LEAVE THEN LOOP
|
||
11 2* event-actions + perform ;
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 39 not modified
|
||
0 \ Change mouse-movement Vector 10sep86we
|
||
1
|
||
2 2Variable savevec
|
||
3
|
||
4 Create newvector Assembler
|
||
5 ?mouse pcrel) A0 lea true # A0 ) move
|
||
6 .l savevec pcrel) A0 move A0 ) jmp end-code
|
||
7
|
||
8 Code ?show_c ?mouse R#) tst 0= IF Next THEN ;c: show_c ;
|
||
9
|
||
10 : ex_motv ( pusrcode -- )
|
||
11 contrl &14 + 2! &126 0 0 VDI contrl &18 + 2@ savevec 2! ;
|
||
12
|
||
13 : setmousevec newvector >absaddr ex_motv ;
|
||
14 : resetmousevec savevec 2@ ex_motv ;
|
||
15 ' resetmousevec Is resetmouse
|
||
Screen 40 not modified
|
||
0 \ The Editor's LOOP 02sep86we
|
||
1
|
||
2 : ediloop r0 @ rp!
|
||
3 BEGIN edit-at curon ?show_c false
|
||
4 ediprepare evnt_multi handle-events UNTIL ;
|
||
5
|
||
6 : alarm bell jingle off ;
|
||
7
|
||
8 : edierror ( string -- )
|
||
9 jingle @ 0= IF drop ediloop THEN alarm
|
||
10 'workblank c/l 2/ 'work c! count c/l 2/ min $add
|
||
11 'work 1+ wi_status edistate off ediloop ;
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 41 not modified
|
||
0 \ Installing the Editor 20nov86we
|
||
1
|
||
2 Create ediresource &12 allot
|
||
3 Variable edihandle
|
||
4
|
||
5 : setediresource ediresource ap_ptree &12 cmove ;
|
||
6
|
||
7 : ?clearbuffer
|
||
8 pad (pad @ = ?exit pad (pad !
|
||
9 'find b/blk + dup chars ! c/l 2* + lines !
|
||
10 #chars off #lines off 'find off 'insert off (findbox off ;
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 42 not modified
|
||
0 \ Installing the Editor 20nov86we
|
||
1
|
||
2 : finstall ( -- )
|
||
3 pad memtop u> abort" No room for buffers!"
|
||
4 get-id changed off row ycur ! setmousevec
|
||
5 ?clearbuffer ?cursor off
|
||
6 ap_ptree &12 cpush setediresource
|
||
7 grhandle push edihandle @ grhandle !
|
||
8 wi_open :edimenu tree! 1 menu_bar
|
||
9 errorhandler push ['] edierror errorhandler !
|
||
10 r0 push rp@ r0 ! ediloop ;
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 43 not modified
|
||
0 \ Entering the Editor 11sep86we
|
||
1
|
||
2 Forth definitions ?head !
|
||
3
|
||
4 | : ?load 0= ?exit scr @ r# @ (load ;
|
||
5
|
||
6 : v ( -- ) scr @ ?range drop finstall ?load ;
|
||
7
|
||
8 : l ( scr -- ) 1 arguments ?range scr ! top v ;
|
||
9
|
||
10 | : >find bl word count 'find place ;
|
||
11
|
||
12 : view ( -- ) >find >view v ;
|
||
13
|
||
14
|
||
15
|
||
Screen 44 not modified
|
||
0 \ Init the Editor for different resolutions 18sep86we
|
||
1
|
||
2 | : q_extnd ( info_flag -- ) intin ! &102 0 1 VDI ;
|
||
3
|
||
4 | : setMFDB ( addr_of_MFDB -- ) >r
|
||
5 0 q_extnd intout 2@ r@ 4+ 2! intout @ $10 / r@ 6 + !
|
||
6 1 q_extnd intout 8 + @ r> &12 + ! ;
|
||
7
|
||
8
|
||
9
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 45 not modified
|
||
0 \ save-system for Editor cas20130105
|
||
1
|
||
2 | : edistart grinit rsrc_load" ediicon.rsc" 0 graf_mouse
|
||
3 grhandle @ edihandle ! ap_ptree ediresource &12 cmove
|
||
4 memMFDB1 setMFDB memMFDB2 setMFDB
|
||
5 ['] noop [ ' drvinit >body ] Literal ! ;
|
||
6
|
||
7 : bye grexit bye ; grinit
|
||
8
|
||
9 : save-system id off r# off 1 scr ! 'r# off 1 'scr !
|
||
10 (findbox off (pad off
|
||
11 ['] edistart [ ' drvinit >body ] Literal !
|
||
12 [ ' forth83.fb >body ] Literal 'edifile !
|
||
13 flush save-system bye ;
|
||
14
|
||
15
|
||
Screen 46 not modified
|
||
0
|
||
1
|
||
2
|
||
3
|
||
4
|
||
5
|
||
6
|
||
7
|
||
8
|
||
9
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 47 not modified
|
||
0 \\ *** Screen-Editor *** 17aug86we
|
||
1
|
||
2 In den Editor gelangt man mit l ( Screen-Nr. -- ), mit v oder
|
||
3 view. view verlangt als weitere Eingabe ein FORTH-Wort und
|
||
4 sucht dann den Screen, auf dem das Wort definiert wurde.
|
||
5
|
||
6 Alle Eingaben werden unmittelbar in den Blockbuffer geschrieben,
|
||
7 der den aktuellen Screen enth„lt.
|
||
8
|
||
9 Die Position des Cursors h„ngt von 2 Variablen ab:
|
||
10 scr enth„lt die Nummer des aktuellen Screens;
|
||
11 r# bestimmt die Position des Cursors.
|
||
12 Beides sind Systemvariable, die auch beim Compilieren benutzt
|
||
13 werden. Bei Abbruch wegen eines Fehlers ruft man den Editor mit
|
||
14 v auf. Der Cursor steht hinter dem Wort, das den Abbruch
|
||
15 ausgel”st hat.
|
||
Screen 48 not modified
|
||
0 \ Load Screen for the Editor 24aug86we
|
||
1
|
||
2 bindet Vocabulary GEM mit in die Suchreihenfolge ein.
|
||
3 Labels f<>r Editor-Resource
|
||
4
|
||
5 (dx und (dy sind Variable, die die Lage des Editorfensters
|
||
6 relativ zur linken oberen Ecke des Bildschirms angeben.
|
||
7 Der Editor ben”tigt einige Definitionen aus anderen Files.
|
||
8 - f<>r die Suchfunktionen.
|
||
9 - falls kein File-Interface vorhanden ist.
|
||
10 - f<>r das Fenster
|
||
11 Labels f<>r Gem-Aufrufe
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 49 not modified
|
||
0 \ Editor Variable 26oct86we
|
||
1
|
||
2 Screen-Nr. und Cursorposition vom markierten Screen
|
||
3 File f<>r markierten Screen
|
||
4
|
||
5 Alle folgenden Definitionen werden headerless compiliert.
|
||
6
|
||
7 Flag f<>r Žnderungen am Screen; Flag, ob Statuszeile neu ge-
|
||
8 File, das editiert wird schrieben werden muž
|
||
9 ycur ist die Cursorposition beim Aufruf des Editors
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 50 not modified
|
||
0 \ Edi move cursor with position-checking or cyclic 30aug86we
|
||
1
|
||
2 bewegt den Cursor um n Stellen vor- bzw. r<>ckw„rts.
|
||
3 Wird der Cursor <20>ber Anfang oder Ende des Screens hinausbewegt,
|
||
4 stehen zwei M”glichkeiten zur Wahl:
|
||
5 - Kommando wird nicht ausgef<65>hrt.
|
||
6 - Der Screen wird zyklisch durchlaufen.
|
||
7
|
||
8 W„hlen Sie durch 'Wegkommentieren' und Neucompilieren des
|
||
9 Editors.
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 51 not modified
|
||
0 \ Move the Editor's cursor around 05aug86we
|
||
1
|
||
2 setzt Cursor in die obere linke Ecke (Home).
|
||
3 n ist die aktuelle Position des Cursors (Offset von Home)
|
||
4 setzt Cursor auf Beginn der Zeile n.
|
||
5 n ist die Zeile, in der der Cursor steht.
|
||
6 n ist die Spalte, in der der Cursor steht.
|
||
7 bewegt Cursor um n Zeilen vor- bzw. r<>ckw„rts auf Zeilenanfang.
|
||
8 addr ist die Anfangsadresse des aktuellen Blocks im Speicher.
|
||
9 addr ist die der Cursorposition entsprechende Speicheradresse.
|
||
10 addr ist die Speicheradresse des Beginns der Cursorzeile.
|
||
11 n ist die Stellenanzahl zwischen Cursorposition und Zeilenende.
|
||
12 n ist die Stellenanzahl zwischen Cursorposition und Blockende.
|
||
13 n ist die Stellenanzahl zwischen Cursorzeile und Blockende.
|
||
14
|
||
15
|
||
Screen 52 not modified
|
||
0 \ Move the Editors cursor 07aug86we
|
||
1
|
||
2 setzt Cursor um eine Zeile nach oben.
|
||
3 setzt Cursor um eine Zeile nach unten.
|
||
4 setzt Cursor um ein Zeichen nach links.
|
||
5 setzt Cursor um ein Zeichen nach rechts.
|
||
6 setzt Cursor um eine Tabulatorposition nach vorn (s.unten).
|
||
7 setzt Cursor um eine Tabulatorposition zur<75>ck (s.unten).
|
||
8 setzt Cursor auf das letzte Zeichen des Screens.
|
||
9 setzt Cursor auf Beginn der n„chsten Zeile.
|
||
10
|
||
11
|
||
12 Vorw„rtstabs:
|
||
13 + + + +
|
||
14 R<>ckw„rtstabs:
|
||
15 - - - - - - - -
|
||
Screen 53 not modified
|
||
0 \ buffers 24aug86we
|
||
1
|
||
2 markiert einen ge„nderten Block zum Zur<75>ckschreiben auf Disk
|
||
3 setzt Flag f<>r ?stamp und l”scht Flag f<>r .edistate
|
||
4
|
||
5 Byteanzahl in PAD (min. &84 nach 83-Standard!).
|
||
6 Byteanzahl in einem Buffer (&40 durch Resource vorgegeben).
|
||
7
|
||
8 'work, 'insert und 'find sind Buffer, die beim Aufruf des
|
||
9 Editors oberhalb von PAD eingerichtet werden.
|
||
10 'work dient zur Aufbreitung von Strings f<>r die Statuszeile
|
||
11 'find enth„lt den Suchstring und 'insert den Replacestring.
|
||
12 n2 ist n1 zuz<75>glich der L„nge des Findbuffers.
|
||
13
|
||
14
|
||
15
|
||
Screen 54 not modified
|
||
0 \ Errorchecking 17aug86we
|
||
1
|
||
2 bricht ab, wenn beim Einf<6E>gen einer Zeile kein Platz mehr ist.
|
||
3
|
||
4
|
||
5 bricht ab, wenn beim Einf<6E>gen eines Zeichens kein Platz mehr ist
|
||
6
|
||
7
|
||
8 bricht ab, wenn ein Screen aužerhalb des aktuellen Files edi-
|
||
9 tiert werden soll.
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 55 not modified
|
||
0 \ Graphics for display 23aug86we
|
||
1
|
||
2 l”scht Zeile n durch šberschreiben mit einem weižen Rechteck
|
||
3 x - und y - Koordinate der linken oberen Ecke
|
||
4 x - und y - Koordinate der rechten unteren Ecke
|
||
5
|
||
6 f<>gt auf dem Bildschirm an der Cursorposition eine Leerzeile ein
|
||
7 x - und y - Koordinate des zu verschiebenden Rechtecks
|
||
8 Breite setzen und H”he berechnen
|
||
9 x - und y - Koordinate des Zielrechtecks ( 1 Zeile tiefer )
|
||
10 das ganze mit Pixelmove (schnell) verschieben und Zeile l”schen
|
||
11 l”scht auf dem Bildschirm die Cursorzeile
|
||
12 x - und y - Koordinate des zu verschiebenden Rechtecks
|
||
13 Breite setzen und H”he berechnen
|
||
14 x - und y - Koordinate des Zielrechtecks ( 1 Zeile h”her )
|
||
15 das ganze mit Pixelmove verschieben und unterste Zeile l”schen
|
||
Screen 56 not modified
|
||
0 \ Editor-Window Title and Status-Line 30aug86we
|
||
1
|
||
2 setzt 'work als Arbeitsspeicher und l”scht ihn; 0 als Abschluž
|
||
3
|
||
4
|
||
5 f ist true, wenn der aktuelle Screen als updated markiert ist.
|
||
6
|
||
7 <20>bergibt in Abh„ngigkeit vom Updatezustand den richtigen String.
|
||
8
|
||
9
|
||
10 Statuszeile wird nur beschrieben, wenn sich etwas ver„ndert hat.
|
||
11 Screennummer wird in 'work zusammengestellt,
|
||
12 2 Leerzeichen und dann die Updatemeldung.
|
||
13 das Ganze wird an .wi_state als 0-terminated String <20>bergeben.
|
||
14
|
||
15
|
||
Screen 57 not modified
|
||
0 \ screen display 30aug86we
|
||
1
|
||
2 gibt den Filenamen in der Titelzeile aus; 'work l”schen
|
||
3 Adresse des Strings, der den Filenamen enth„lt, ermitteln
|
||
4 und nach 'work bringen, maximal eine Zeile, Leerzeichen am Ende
|
||
5 als 0-terminated String an wi_title <20>bergeben.
|
||
6
|
||
7 berechnet die Speicheradresse von Zeile line#,
|
||
8 setzt Cursor und bereitet die Parameter f<>r type auf.
|
||
9
|
||
10 l”scht Zeile line# und gibt sie dann aus (schnell!!).
|
||
11 gibt Zeile line# neu aus (langsam, aber ohne Flackern).
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 58 not modified
|
||
0 \ screen display 14sep86we
|
||
1
|
||
2 maximale L„nge der User-ID, die automatisch in die obere rechte
|
||
3 Ecke des Screens gesetzt wird, wenn dieser ge„ndert wurde.
|
||
4
|
||
5 setzt ID rechtsb<73>ndig (!) in die erste Zeile.
|
||
6 setzt ID, wenn der aktuelle Screen ver„ndert wurde.
|
||
7
|
||
8
|
||
9 gibt einen Screen im Editorfenster aus. Flags f<>r ?stamp und
|
||
10 vertikaler Slider wird auf richtige Gr”že und Position gesetzt
|
||
11 .edistate werden zur<75>ckgesetzt.
|
||
12
|
||
13 l”scht den aktuellen Buffer und erzwingt so Neueinlesen von Disk
|
||
14 Der Blockzugriff ist f<>r Multitasking n”tig.
|
||
15 zeichnet den gesamten Bildschirm neu (nach Accessory-Aufruf).
|
||
Screen 59 not modified
|
||
0 \ Edi Variables, putchar 17aug86we
|
||
1
|
||
2 Adresse von PAD beim Editieren f<>r ?clearbuffer.
|
||
3 Obergrenze f<>r Zeichen- (128 Zeichen) und Zeilenbuffer, der
|
||
4 oberhalb von PAD bis zur Speichergrenze reicht
|
||
5 Adresse des Zeichenbuffers Anzahl der Zeichen im Buffer
|
||
6 liefert die n„chste freie Adresse im Zeichenbuffer.
|
||
7
|
||
8 Adresse des Zeilenbuffers Anzahl der Zeilen im Buffer
|
||
9 liefert die n„chste freie Adresse im Zeilenbuffer.
|
||
10
|
||
11 speichert das zuletzt eingegebene Zeichen.
|
||
12
|
||
13 Insertmodus, voreingestellt aus
|
||
14
|
||
15
|
||
Screen 60 not modified
|
||
0 \ Edi line handling 17aug86we
|
||
1
|
||
2 erneuert gerade bearbeitete Zeile auf dem Bildschirm; setzt Flag
|
||
3 f<>r ?stamp.
|
||
4 l”scht die Cursorzeile.
|
||
5 l”scht vom Cursor bis zum Zeilenende.
|
||
6
|
||
7 l”scht Cursorzeile und zieht Rest des Bildschirms nach oben.
|
||
8
|
||
9 l”scht Zeile <20>ber dem Cursor und zieht Rest des Bildschirms nach
|
||
10 oben.
|
||
11 f<>gt an der Cursorposition eine Leerzeile ein; Rest des Bild-
|
||
12 schirms wird nach unten geschoben.
|
||
13
|
||
14
|
||
15
|
||
Screen 61 not modified
|
||
0 \ Edi line handling 17aug86we
|
||
1
|
||
2 pr<70>ft, ob Platz im Zeilenbuffer vorhanden ist, und kopiert
|
||
3 eine Zeile in den Zeilenbuffer.
|
||
4
|
||
5 kopiert eine Zeile in den Buffer, setzt Cursor auf die n„chste.
|
||
6 kopiert eine Zeile in den Buffer und l”scht sie.
|
||
7
|
||
8 setzt aus dem Zeilenbuffer eine Zeile in der Cursorzeile ein.
|
||
9
|
||
10
|
||
11 benutzt !line, pr<70>ft vorher, ob Zeilen im Buffer sind.
|
||
12 F<>r die neue Zeile wird zuerst eine Leerzeile eingef<65>gt.
|
||
13
|
||
14
|
||
15
|
||
Screen 62 not modified
|
||
0 \ Edi char handling 17aug86we
|
||
1
|
||
2 l”scht Zeichen unter dem Cursor.
|
||
3 l”scht Zeichen links neben dem Cursor.
|
||
4
|
||
5 f<>gt an der Cursorposition ein Zeichen im Buffer ein.
|
||
6 benutzt inst1, um ein Leerzeichen einzuf<75>gen.
|
||
7
|
||
8 analog zu @line, kopiert ein Zeichen in den Zeichenbuffer.
|
||
9
|
||
10 kopiert ein Zeichen in den Buffer, setzt Cursor auf das n„chste.
|
||
11 kopiert ein Zeichen in den Buffer und l”scht es.
|
||
12
|
||
13 analog zu !line, setzt ein Zeichen aus dem Buffer bei Cursor ein
|
||
14 benutzt !char, pr<70>ft vorher, ob Zeichen im Buffer sind.
|
||
15 F<>r das neue Zeichen wird zuerst ein Leerzeichen eingef<65>gt.
|
||
Screen 63 not modified
|
||
0 \ from Screen to Screen ... 24aug86we
|
||
1
|
||
2 pr<70>ft, ob der angeforderte Screen vorhanden ist und gibt ihn aus
|
||
3 geht auf den n„chsten Screen.
|
||
4 geht auf den vorherigen Screen.
|
||
5
|
||
6 berechnet zu Screen n1 den Shadow-Screen n2 oder umgekehrt.
|
||
7 schaltet zwischen Original und Shadow hin und her.
|
||
8
|
||
9 markiert den aktuellen Screen mit File und Cursorposition.
|
||
10 s.o., jedoch mit Meldung.
|
||
11
|
||
12 vertauscht aktuellen und markierten Screen. Dabei wird auch das
|
||
13 File mitber<65>cksichtigt. Dies erlaubt es, nach VIEW einen mar-
|
||
14 kierten Screen wieder zu benutzen.
|
||
15
|
||
Screen 64 not modified
|
||
0 \ splitting a line, replace 17aug86we
|
||
1
|
||
2 setzt den Rest der Zeile ab Cursor auf den Anfang einer neu
|
||
3 eingef<65>gten Zeile. Dazu wird erst eine komplette leere Zeile
|
||
4 eingef<65>gt und dann von Cursorspalte bis Anfang der neuen
|
||
5 Zeile gel”scht.
|
||
6
|
||
7 f<>gt den Insert-Buffer an der Cursorposition ein.
|
||
8
|
||
9 ersetzt den gefundenen String durch den Insert-Buffer.
|
||
10 berechnet Anzahl der Leerzeichen am Ende der Zeile.
|
||
11 Abbruch, wenn weniger als Differenz zwischen Find und Insert,
|
||
12 sonst Findstring l”schen und Insert-Buffer einf<6E>gen
|
||
13
|
||
14
|
||
15
|
||
Screen 65 not modified
|
||
0 \ find und search 30aug86we
|
||
1
|
||
2 f ist 1, wenn in Richtung last Screen gesucht wird, sonst 1.
|
||
3 schaltet Button in der Findbox auf Suche Richtung last screen.
|
||
4 schaltet Button in der Findbox auf Suche Richtung 1st screen.
|
||
5
|
||
6 Der Screen, bis zu dem gesucht werden soll
|
||
7
|
||
8 sucht von Cursor bis Screenende; n ist Offset zu Cursorposition.
|
||
9
|
||
10 sucht von Cursor bis Screen fscreen vorw„rts oder r<>ckw„rts.
|
||
11 solange bis fscreen erreicht ist oder Esc oder CTRL-C gedr<64>ckt,
|
||
12 wird der n„chste Screen aufgerufen.
|
||
13 Abbruch, falls nicht gefunden und Umschalten der Suchrichtung
|
||
14 in der Box und in fscreen.
|
||
15 Screen auflisten und Abbruchmeldung ausgeben.
|
||
Screen 66 not modified
|
||
0 \ Search-Findbox auswerten 17aug86we
|
||
1
|
||
2 Vorbelegung der Buttons und Screennummern in der Find-box:
|
||
3 Grož-Kleinschreibung unterscheiden.
|
||
4 Aufsteigend suchen bis Fileende.
|
||
5 1 f<>r 1st Screen, letzten Screen im File als Last Screen
|
||
6
|
||
7 Filebox auswerten:
|
||
8 Variable caps entsprechend setzen.
|
||
9 Suchrichtung bestimmt, ob der erste oder letzte Screen
|
||
10 als Endscreen benutzt wird.
|
||
11 Strings in die entsprechenden Buffer <20>bernehmen.
|
||
12
|
||
13 Falls das File gewechselt wurde, neu initialisieren, geschieht
|
||
14 auch automatisch, wenn sich PAD und damit Find- und Insert-
|
||
15 buffer ver„ndert haben.
|
||
Screen 67 not modified
|
||
0 \ Replacing ... 17aug86we
|
||
1
|
||
2 Flag f<>r Ersetzen des Find-Strings durch den Insert-String
|
||
3
|
||
4 O Schreck und Graus !!!
|
||
5 Die Replace-Box soll nat<61>rlich nicht den gefundenen String
|
||
6 verdecken; die von form_center gelieferten Werte sind also
|
||
7 unbrauchbar. X- und Y-Position m<>ssen von Hand berechnet werden
|
||
8 und zwar so, daž die linke obere Ecke der Box auf den Such-
|
||
9 string zeigt; zeichnen des Objects wie in show_object.
|
||
10
|
||
11 ersetzt solange den Suchstring durch den Insertstring, bis
|
||
12 CANCEL gedr<64>ckt oder der Suchstring nicht gefunden wird.
|
||
13 Abbruch auch, wenn der Insertstring sich nicht einsetzen l„žt.
|
||
14 Sonst wie bei Find Abbruch mit Esc. oder CTRL-C m”glich.
|
||
15
|
||
Screen 68 not modified
|
||
0 \ Editor's find and replace 17aug86we
|
||
1
|
||
2 Flag f<>r repfind, ob bereits eine Suche stattgefunden hat.
|
||
3
|
||
4 f<>hrt erneute Suche (und Ersetzen) durch ohne Find-Box.
|
||
5 Abbruch, wenn noch kein Aufruf der Find-Box oder Findbuffer
|
||
6 leer; sonst sicherstellen, daž fscreen innerhalb des Files
|
||
7 liegt und s bzw replace ausf<73>hren.
|
||
8
|
||
9 Das ist das aufrufende Wort; im CANCEL-Fall abbrechen,
|
||
10 sonst Flag f<>r replace setzen, wenn :dfreplac gew„hlt wurde
|
||
11 Im Menubalken Repeatfind enable'n
|
||
12 Screennummer merken; suchen und ggf. ersetzen mit repfind.
|
||
13
|
||
14
|
||
15
|
||
Screen 69 not modified
|
||
0 \ exiting the Editor 30aug86we
|
||
1
|
||
2 Setzt Mausvector zur<75>ck, wird erst sp„ter definiert.
|
||
3
|
||
4 gemeinsame Routine f<>r alle Exits
|
||
5 l”scht (und restauriert) das Fenster, setzt Mausvector zur<75>ck
|
||
6 gibt an der alten Cursorpositione eine Meldung aus
|
||
7 und setzt Flag zum Verlassen von ediloop.
|
||
8
|
||
9 wirft alle Žnderungen weg, falls man sich 'vereditiert' hat.
|
||
10 speichert den Screen auf Disk, falls er ver„ndert wurde.
|
||
11 markiert den Screen, ohne ihn direkt zur<75>ckzuschreiben.
|
||
12 speichert den Screen auf Disk, falls er ver„ndert wurde
|
||
13 und compiliert ab Cursorposition.
|
||
14
|
||
15
|
||
Screen 70 not modified
|
||
0 \ get User's ID, jump to screen 17aug86we
|
||
1
|
||
2 User-ID holen
|
||
3 bisherige ID im Fenster ausgeben
|
||
4 das <20>bliche form-handling
|
||
5 bei Cancel nichts wie raus!
|
||
6 bei NO-ID wird sie gel”scht; die Box erscheint dann bei n„ch-
|
||
7 ster Gelegenheit wieder; sonst ID <20>bernehmen (auch Leerstring)
|
||
8
|
||
9 User-ID nur holen, wenn noch keine vorhanden ist.
|
||
10 Wird beim Eintritt in den Editor benutzt.
|
||
11
|
||
12 springt auf beliebigen Screen im File.
|
||
13 Leerstring in die Box setzen.
|
||
14 das <20>bliche form-handling
|
||
15 Screen-Nr. f<>r setscreen <20>bernehmen und Screen ausgeben
|
||
Screen 71 not modified
|
||
0 \ insert- and overwrite-mode 11aug86we
|
||
1
|
||
2 setzt im Pulldownmenu ein H„kchen.
|
||
3 wie oben, nur umgekehrt.
|
||
4
|
||
5 Insert-Modus setzen und Pulldownmenu entsprechend „ndern.
|
||
6
|
||
7 Overwrite-Modus setzen und Pulldownmenu entsprechend „ndern.
|
||
8
|
||
9
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 72 not modified
|
||
0 \ viewing words 17aug86we
|
||
1
|
||
2 Hilfswort f<>r do_view
|
||
3 Findbuffer wird nach PAD gebracht und f<>r find aufbereitet.
|
||
4 sucht CFA des Wortes im Findbuffer, um
|
||
5 das zugeh”rige Name- und damit das View-Feld zu finden.
|
||
6 setzt File und Screen-Nr. und sucht auf dem Screen nach dem
|
||
7 Wort; falls gefunden, wird der Cursor dahinter positioniert.
|
||
8
|
||
9
|
||
10 l”scht den String in der Box; das <20>bliche form-handling
|
||
11 String in Findbuffer <20>bernehmen, falls nicht Cancel gew„hlt;
|
||
12 aktuellen Screen markieren, wenn MARK
|
||
13 angeklickt wurde, und gesuchten Screen aufrufen
|
||
14 Danach kann mit CTRL-A wieder auf den anderen Screen gewechselt
|
||
15 werden. Sehr n<>tzlich, um Zeilen aus anderen Files zu 'klauen'.
|
||
Screen 73 not modified
|
||
0 \ Table of keystrokes 17aug86we
|
||
1
|
||
2 Diese Tabelle enth„lt alle Tasten, die irgendwelche Sonder-
|
||
3 funktionen haben. Das jeweils erste Wort ist der Scancode der
|
||
4 Taste, das zweite die zus„tzlich gedr<64>ckten Tasten:
|
||
5 1 = linke oder rechte SHIFT-Taste
|
||
6 2 = CONTROL-Taste
|
||
7 4 = ALTERNATE-Taste ( wird nicht benutzt )
|
||
8 Auf die Funktionstasten wurde bewužt verzichtet, weil man damit
|
||
9 nicht vern<72>nftig umgehen kann.
|
||
10
|
||
11
|
||
12 Zusatzvorschlag:
|
||
13 Alternate-Shift-Control bei gleichzeitig gedr<64>ckter Enter- und
|
||
14 F10-Taste ---> l”scht den Bildschirm.
|
||
15
|
||
Screen 74 not modified
|
||
0 \ Table of actions 17aug86we
|
||
1
|
||
2 Tabelle aller Editorfunktionen
|
||
3 Die Position eines Tabelleneintrags stimmt mit der des
|
||
4 zugeh”rigen Tastendrucks <20>berein, um die šbersicht zu behalten.
|
||
5 Dies gilt auch f<>r die folgenden Screens.
|
||
6
|
||
7
|
||
8
|
||
9
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14 pr<70>ft, ob Anzahl der Funktionen mit Anzahl der Tasten <20>berein-
|
||
15 stimmt. Wird nur w„hrend der Compilation gebraucht.
|
||
Screen 75 not modified
|
||
0 \ Table of Menuevents 17aug86we
|
||
1
|
||
2 Tabelle der Menueintr„ge.
|
||
3 Alle Editorfunktionen sind sowohl <20>ber die Men<65>leiste als auch
|
||
4 <20>ber Tastendruck zu erreichen.
|
||
5 Bei allen Worten mit : am Anfang handelt es sich um 'kopflose'
|
||
6 Konstanten aus dem Resource-Definitionen-File (EDIICON.SCR),
|
||
7 das mit dem Programm CONVH.SCR aus EDIICON.H erzeugt wurde.
|
||
8 EDIICON.H wird vom 'Resource Construction Set' ausgegeben.
|
||
9 An dieser Stelle unser herzlicher Dank an Digital Research f<>r
|
||
10 dieses hervorragende Produkt. Nur ca. 80 Systemabst<73>rze gab es
|
||
11 bei der Entwicklung, weil Icons bisweilen auf ungeraden Spei-
|
||
12 cheradressen abgelegt werden. Aužerdem war bei knapp 10 kByte
|
||
13 L„nge der Resource mein Speicher (1024 kByte!!!) grunds„tzlich
|
||
14 voll bis absturzvoll. Dann bleibt das Programm stehen, nicht
|
||
15 ohne vorher die letzte lauff„hige Resource zu l”schen....
|
||
Screen 76 not modified
|
||
0 \ Table of Help-Boxes 17aug86we
|
||
1
|
||
2 Tabelle der Help-Boxen.
|
||
3 Zu jeder Editorfunktion gibt es eine Box, die die Funktion
|
||
4 beschreibt. W„hlt man Dauerhilfe, erscheinen solche Boxen
|
||
5 immer, wenn ein Befehl aus der Menuleiste abgerufen wird.
|
||
6 Soll beim Einarbeiten in den Editor Hilfe leisten. Die Idee
|
||
7 dazu stammt aus 1st Word.
|
||
8 Gibt es zu einer Funktion keine Box (z.B. Cursortasten), ist
|
||
9 der entsprechende Eintrag mit $FF gekennzeichnet.
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 77 not modified
|
||
0 \ Prepare multi-event 24aug86we
|
||
1
|
||
2 Flag, ob Maus innerhalb oder aužerhalb von Rechteck1
|
||
3
|
||
4 F<>r den Multi-Event m<>ssen 17 (!) Parameter <20>bergeben werden.
|
||
5 timer, message, mouse, button + keyboard events zulassen.
|
||
6 1 Tastendruck auf linke Maustaste, event bei gedr<64>ckter Taste
|
||
7 1, wenn Maus im Fensterbereich
|
||
8 Rechteck 1 (Žnderung der Mausfunktion) umfažt Editor-Fenster
|
||
9 Rechteck 2 gibts nicht
|
||
10 Timer auf 0 Millisekunden (sonst kommt der Multi-Event nicht
|
||
11 zur<75>ck)
|
||
12
|
||
13 Wenn nichts anderes zu tun ist, kann eine andere Task ran.
|
||
14 schaltet Flag um.
|
||
15
|
||
Screen 78 not modified
|
||
0 \ Button Event 17aug86we
|
||
1
|
||
2 Flag, das anzeigt, ob der Cursor sichtbar ist (1 = sichtbar)
|
||
3
|
||
4 schaltet Cursor ein, wenn er noch nicht eingeschaltet ist;
|
||
5 die Funktion arbeitet im EXOR-Modus, daher dieser Aufwand.
|
||
6 baut an der aktuellen Cursorposition ein schwarzes Rechteck
|
||
7 in der Gr”že eines Zeichens.
|
||
8
|
||
9 kann curon benutzen wegen EXOR-Modus, muž aber das Flag setzen.
|
||
10
|
||
11 Mausknopfereignis dann, wenn die Maus im Editorfenster steht.
|
||
12 die Position der Maus (in Pixel) wird in Zeile und Spalte umge-
|
||
13 rechnet und nach r# gespeichert. Maus abschalten und alten
|
||
14 Cursor l”schen (in dieser Reihenfolge!)
|
||
15
|
||
Screen 79 not modified
|
||
0 \ Key event 17aug86we
|
||
1
|
||
2 Steuertasten erzeugen keinen ASCII-Code, sondern eine Null.
|
||
3
|
||
4 gibt ein Zeichen auf dem Bildschirm aus und schreibt es in den
|
||
5 Blockbuffer. Abbruch, wenn kein druckbares Zeichen vorliegt.
|
||
6 Auf Insert-Modus pr<70>fen und Zeichen ausgeben.
|
||
7
|
||
8 ermittelt die Adresse der zu einer Taste geh”renden Funktion.
|
||
9 d_key enth„lt im oberen Wort den Status von Shift, Control usw.
|
||
10 putchar ist voreingestellt, keytable wird auf d_key abgesucht
|
||
11 wenn gefunden, wird die Adresse von putchar entfernt und statt-
|
||
12 dessen die zugeh”rige Adresse aus actiontable hinterlegt.
|
||
13
|
||
14
|
||
15
|
||
Screen 80 not modified
|
||
0 \ Key event 17aug86we
|
||
1
|
||
2 Flag f<>r Fehlerpiep
|
||
3 Flag, ob die Maus sichtbar ist
|
||
4
|
||
5 positioniert den Cursor auf die Position in r#.
|
||
6
|
||
7 Tasten-Event schaltet Mausflag ab
|
||
8 Tastencode holen und Maus und Cursor abschalten.
|
||
9 Status der Sondertasten aufbereiten und Tastenfunktion ausf<73>h-
|
||
10 ren, Fehlerpiep erm”glichen, Status ausgeben
|
||
11 und - darauf bin ich ganz stolz - alle weiteren Tastendr<64>cke
|
||
12 l”schen!! Dadurch l„uft auch bei schnellem Tastenrepeat keine
|
||
13 Funktion 'nach', wird aber trotzdem schnellstm”lich ausgef<65>hrt.
|
||
14 Funktioniert allerdings dann nicht, wenn das lahme GEM was zu
|
||
15 tun hat, also beim Screenwechsel (CTRL-B und CTRL-N)
|
||
Screen 81 not modified
|
||
0 \ Message events for window 30aug86we
|
||
1
|
||
2 holt Wort n aus dem AES-message Buffer.
|
||
3
|
||
4 bei Anklicken des Sliders oder der Pfeile
|
||
5 wird der n„chste oder vorherige Screen aufgerufen.
|
||
6
|
||
7 beim Verschieben des Sliders
|
||
8 wird aus der Position die Screennummer berechnet.
|
||
9
|
||
10 beim Verschieben des ganzen Fensters
|
||
11 wird die vom User gew<65>nschte Position berechnet
|
||
12 und in ganze Zeile bzw. Spalten umgewandelt; aužerhalb des
|
||
13 Screens kann nicht positioniert werden, sonst k”nnte man
|
||
14 ohne Sichtkontrolle weiter editieren. šber den Sinn dieser
|
||
15 Funktion kann man streiten, aber ich wollte zeigen, daž es geht
|
||
Screen 82 not modified
|
||
0 \ Message events (the menuline) 17aug86we
|
||
1
|
||
2 Flag f<>r Dauerhilfe bei jeder Men<65>funktion
|
||
3
|
||
4 Hilfsbox Nr. n ausgeben
|
||
5 passende Hilfsbox aus Tabelle suchen und anzeigen, bei OK Ende.
|
||
6 sonst Funktion abbrechen.
|
||
7 Es folgen die Funktionen, die nicht in der helptable auftauchen.
|
||
8 Info-, Werbe- und Prunk-Box
|
||
9 braucht nur angezeigt zu werden, spricht f<>r sich selbst.
|
||
10
|
||
11 Dauerhilfe-Box anzeigen; je nach gew„hltem Knopf
|
||
12 H„kchen bei Menu Help setzen oder l”schen
|
||
13 dito f<>r Flag
|
||
14
|
||
15
|
||
Screen 83 not modified
|
||
0 \ Message events from menuline 24aug86we
|
||
1
|
||
2 Funktion, die nicht in actiontable steht, ausf<73>hren
|
||
3 mit case? die passende Funktion ausw„hlen
|
||
4 Tabelle lohnt hier nicht.
|
||
5
|
||
6
|
||
7
|
||
8 Men<65>auswahl verarbeiten
|
||
9 Men<65>titel von revers auf normal schalten
|
||
10 voreingestellt ist do_other, Nummer des angeklickten Items
|
||
11 holen, menutable wird auf Item-Nr. abgesucht
|
||
12 wenn gefunden, wird die Adresse von do_other entfernt und
|
||
13 stattdessen die zugeh”rige Adresse aus actiontable hinterlegt.
|
||
14 Funktion ausf<73>hren, Fehlerpiep erm”glichen und Status ausgeben.
|
||
15
|
||
Screen 84 not modified
|
||
0 \ Handle message-event 24aug86we
|
||
1
|
||
2 hier werden die Messages ausgewertet, die AES zur<75>ckgibt.
|
||
3 wenn ein Men<65>punkt angeklickt wird, menu-message ausf<73>hren.
|
||
4 alle anderen Messages betreffen die Window-Attribute und
|
||
5 werden entsprechend ausgef<65>hrt.
|
||
6
|
||
7 Wenn ein Desk-Accessory ausgef<65>hrt wurde, erh„lt man lediglich
|
||
8 die Meldung, daž neu gezeichnet werden muž, und dies auch nur
|
||
9 dann, wenn ein Fenster aktiv ist.
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 85 not modified
|
||
0 \ Handle all events 24aug86we
|
||
1
|
||
2 Tabelle der m”glichen Events (werden als gesetztes Bit gemeldet)
|
||
3 in der Reihenfolge ihrer Priorit„t, sonst kommt z.B. der Timer
|
||
4 immer
|
||
5
|
||
6 und der zugeh”rigen Funktionen
|
||
7
|
||
8
|
||
9 Das ist der Event-Handler
|
||
10 gemeldeter Event wird mit Liste verglichen (Priorit„t !!)
|
||
11 und die entsprechende Event-Aktion ausgef<65>hrt.
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 86 not modified
|
||
0 \ Change mouse-movement Vector 17aug86we
|
||
1
|
||
2 Variable, um den alten Mausvektor zu speichern.
|
||
3
|
||
4 Die neue Mausroutine soll zus„tzlich das Flag ?mouse setzen,
|
||
5 wenn die Maus bewegt wurde. So wird die Maus bei jedem Tasten-
|
||
6 druck ausgeschaltet und erst wieder eingeschaltet bei Bewegung.
|
||
7 Schick, gell?!
|
||
8 Aus Geschwindigkeitsgr<67>nden in Assembler
|
||
9
|
||
10 „ndert den Mausvektor.
|
||
11
|
||
12 Mausvektor auf neuen Wert, alter Wert nach savevec.
|
||
13 Mausvektor auf alten Wert (muž unbedingt ausgef<65>hrt werden, das
|
||
14 Betriebssystem erledigt das beim Verlassen von FORTH nicht !!
|
||
15 resetmousevec l”st das deffered word in done auf.
|
||
Screen 87 not modified
|
||
0 \ The Editor's LOOP 30aug86we
|
||
1
|
||
2 ediloop r„umt den Returnstack auf, falls mit abort" abgebrochen.
|
||
3 Das ist die Endlos-Schleife, die erst verlassen wird, wenn
|
||
4 das Flag f<>r UNTIL durch done gesetzt wird.
|
||
5
|
||
6 Fehlerpiep, nur einmal ausf<73>hren, sonst klingelts dauernd.
|
||
7
|
||
8 Errorhandler f<>r Editor
|
||
9 falls Fehlermeldung bereits erfolgt, sofort nach ediloop
|
||
10 piepen, 'work vorbereiten
|
||
11 in der Statuszeile rechts Fehlertext ausgeben, soweit Platz ist
|
||
12 und R<>cksprung in ediloop ;
|
||
13
|
||
14
|
||
15
|
||
Screen 88 not modified
|
||
0 \ Installing the Editor 26oct86we
|
||
1
|
||
2 Alle Routinen in der GEM-Library sind so geschrieben, daž sie
|
||
3 implizit auf eine Variable grhandle zur<75>ckgreifen. Dies
|
||
4 vereinfacht die Parameter<65>bergabe erheblich.
|
||
5 Sollen verschiedene Grafik-Applikationen aktiviert werden, darf
|
||
6 trotzdem nur eine Appliktion angemeldet werden. Dies geschieht
|
||
7 bereits beim Laden des FORTH-Systems.
|
||
8 Beim Laden eines Resource-Files mit rsrc_load wird die Adresse
|
||
9 der zugeh”rigen Baumstruktur im Global-Array unter ap_ptree
|
||
10 abgelegt. Diese Adresse kann man zum Umschalten auf verschie-
|
||
11 dene Resources benutzen.
|
||
12 Wenn PAD sich ver„ndert hat (durch neue Worte oder forget)
|
||
13 sind Find- und Insert-Buffer verschoben und m<>ssen neu initia-
|
||
14 lisiert werden. Ebenso Zeichen und Zeilenbuffer.
|
||
15 (findbox wird gel”scht, damit die Findbox initialisiert wird.
|
||
Screen 89 not modified
|
||
0 \ Installing the Editor 26oct86we
|
||
1
|
||
2 initialisiert den Editor beim Aufruf.
|
||
3 Abbruch, wenn kein Platz f<>r die Editor-Buffer ist (s.u...)
|
||
4 aktuelle Cursorposition merken, Mausvector initialisieren
|
||
5 Buffer bei Bedarf initialisieren
|
||
6 Editor-Resource und Grafik-Handle installieren.
|
||
7 Fenster ”ffnen und Men<65>zeile ausgeben
|
||
8 Errorhandler auf Editor umschalten, alten merken.
|
||
9
|
||
10
|
||
11 ...das Dictionary ist zu voll. Entweder man 'vergižt' einige
|
||
12 Worte oder schafft mit z.B. 'save 4 buffers' mehr Raum. Mit
|
||
13 BUFFERS l„žt sich die Anzahl der Diskbuffer festlegen. Dabei
|
||
14 steht mehr Platz im Dictionary gegen Arbeitskomfort beim Edi-
|
||
15 tieren. Beachten Sie auch, daž BUFFERS ein COLD ausf<73>hrt.
|
||
Screen 90 not modified
|
||
0 \ Entering the Editor 17aug86we
|
||
1
|
||
2 Es folgen die Forth-Worte zum Aufruf des Editors.
|
||
3
|
||
4 Flag entscheidet, ob compiliert werden soll (ldone).
|
||
5
|
||
6 Screen mit Nummer in scr und Cursor in r# wird aufgerufen.
|
||
7 Diese Systemvariablen werden auch bei Fehlern gesetzt, also
|
||
8 kann man bei einem Compilationsfehler auf den richtigen Screen
|
||
9 gelangen; Cursor steht dann hinter dem Wort, das den Fehler
|
||
10 ausgel”st hat.
|
||
11 l editiert Screen-Nr. n
|
||
12 view erwartet ein Wort und editiert den Screen, auf dem das
|
||
13 Wort definiert wurde (s.a. >view)
|
||
14
|
||
15
|
||
Screen 91 not modified
|
||
0 \ savesystem for Editor 17aug86we
|
||
1
|
||
2 Damit der Editor auf Schwarz-Weiž und Farbmonitoren l„uft,
|
||
3 m<>ssen die entsprechenden Parameter ermittelt und in die
|
||
4 beiden Arrays, die f<>r die Zwischenspeicherung des Bildschirms
|
||
5 verantwortlich sind, gepatched werden.
|
||
6 F<>r die Zwischenspeicherung werden 2 Buffer benutzt, die ober-
|
||
7 halb des Systems liegen. Nur dadurch kann der Bildschirminhalt
|
||
8 so schnell restauriert werden, wenn Alertboxen oder andere
|
||
9 aufgerufen wurden.
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
Screen 92 not modified
|
||
0 \ savesystem for Editor 30aug86we
|
||
1
|
||
2 Diese Routine muž beim Start des Systems (!) ausgef<65>hrt werden,
|
||
3 setzt die Variablen f<>r die GEM-Routinen des Editors
|
||
4 und f<>r die beiden Speicherdefinitions-Arrays
|
||
5 wird daher nach drvinit gepatched, klinkt sich selbst aus.
|
||
6
|
||
7 savesystem muž eine Reihe von Variablen zur<75>cksetzen, damit
|
||
8 das System mit 'vern<72>nftigen' Werten hochkommt.
|
||
9 drvinit wird mit edistart gepatched.
|
||
10 FORTH-83.SCR als File f<>r markierten Screen.
|
||
11 ge„nderte Bl”cke auf Diskette zur<75>ckschreiben
|
||
12 und altes savesystem ausf<73>hren.
|
||
13 Neues bye muž zus„tzlich ein GREXIT ausf<73>hren. GRINIT bei
|
||
14 Neukompilation n”tig wegen GREXIT in BYE .
|
||
15
|
||
Screen 93 not modified
|
||
0 \ savesystem for Editor 17aug86we
|
||
1
|
||
2 Damit der Editor auf Schwarz-Weiž und Farbmonitoren l„uft,
|
||
3 m<>ssen die entsprechenden Parameter ermittelt und in die
|
||
4 beiden Arrays, die f<>r die Zwischenspeicherung des Bildschirms
|
||
5 verantwortlich sind, gepatched werden.
|
||
6 F<>r die Zwischenspeicherung werden 2 Buffer benutzt, die ober-
|
||
7 halb des Systems liegen. Nur dadurch kann der Bildschirminhalt
|
||
8
|
||
9
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|