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 ber Controltasten bedienen,  
 9                                                                 
10 Die Dauerhilfe-Funktion macht eine Funktionsbeschreibung ber-  
11 flssig. Solange im HILFE-Menu Dauerhilfe gew„hlt ist, erscheint
12 vor der Ausfhrumg 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 fr 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 - fr die Suchfunktionen.                                       
 9 - falls kein File-Interface vorhanden ist.                      
10 - fr das Fenster                                               
11 Labels fr 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 fr markierten Screen                                      
 4                                                                 
 5 Alle folgenden Definitionen werden headerless compiliert.       
 6                                                                 
 7 Flag fr Ž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. rckw„rts.             
 3  Wird der Cursor ber Anfang oder Ende des Screens hinausbewegt,
 4  stehen zwei M”glichkeiten zur Wahl:                            
 5  - Kommando wird nicht ausgefhrt.                              
 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. rckw„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 zurck (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 Rckw„rtstabs:                                                  
15 -       -       -       -       -       -       -       -       
Screen 53 not modified     
 0 \ buffers                                              24aug86we
 1                                                                 
 2 markiert einen ge„nderten Block zum Zurckschreiben auf Disk    
 3  setzt Flag fr ?stamp und l”scht Flag fr .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 fr die Statuszeile    
11  'find enth„lt den Suchstring und 'insert den Replacestring.    
12 n2 ist n1 zuzglich der L„nge des Findbuffers.                  
13                                                                 
14                                                                 
15                                                                 
Screen 54 not modified     
 0 \ Errorchecking                                        17aug86we
 1                                                                 
 2 bricht ab, wenn beim Einfgen einer Zeile kein Platz mehr ist.  
 3                                                                 
 4                                                                 
 5 bricht ab, wenn beim Einfgen 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 fgt 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 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 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 bergeben.                 
 6                                                                 
 7 berechnet die Speicheradresse von Zeile line#,                  
 8  setzt Cursor und bereitet die Parameter fr 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 rechtsbndig (!) in die erste Zeile.                   
 6 setzt ID, wenn der aktuelle Screen ver„ndert wurde.             
 7                                                                 
 8                                                                 
 9 gibt einen Screen im Editorfenster aus. Flags fr ?stamp und    
10  vertikaler Slider wird auf richtige Gr”že und Position gesetzt 
11  .edistate werden zurckgesetzt.                                
12                                                                 
13 l”scht den aktuellen Buffer und erzwingt so Neueinlesen von Disk
14  Der Blockzugriff ist fr 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 fr ?clearbuffer.                
 3 Obergrenze fr 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  fr ?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 ber dem Cursor und zieht Rest des Bildschirms nach
10  oben.                                                          
11 fgt 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 prft, 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, prft vorher, ob Zeilen im Buffer sind.          
12  Fr die neue Zeile wird zuerst eine Leerzeile eingefgt.       
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 fgt an der Cursorposition ein Zeichen im Buffer ein.           
 6 benutzt inst1, um ein Leerzeichen einzufgen.                   
 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, prft vorher, ob Zeichen im Buffer sind.         
15  Fr das neue Zeichen wird zuerst ein Leerzeichen eingefgt.    
Screen 63 not modified     
 0 \ from Screen to Screen ...                            24aug86we
 1                                                                 
 2 prft, 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 mitbercksichtigt. 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  eingefgten Zeile. Dazu wird erst eine komplette leere Zeile   
 4  eingefgt und dann von Cursorspalte bis Anfang der neuen       
 5  Zeile gel”scht.                                                
 6                                                                 
 7 fgt 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 einfgen            
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 rckw„rts.    
11  solange bis fscreen erreicht ist oder Esc oder CTRL-C gedrckt,
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 fr 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 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 fr Ersetzen des Find-Strings durch den Insert-String      
 3                                                                 
 4 O Schreck und Graus !!!                                         
 5  Die Replace-Box soll natrlich nicht den gefundenen String     
 6  verdecken; die von form_center gelieferten Werte sind also     
 7  unbrauchbar. X- und Y-Position mssen 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 gedrckt 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 fr repfind, ob bereits eine Suche stattgefunden hat.      
 3                                                                 
 4 fhrt 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 ausfhren.                             
 8                                                                 
 9 Das ist das aufrufende Wort; im CANCEL-Fall abbrechen,          
10  sonst Flag fr 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 zurck, wird erst sp„ter definiert.            
 3                                                                 
 4 gemeinsame Routine fr alle Exits                               
 5 l”scht (und restauriert) das Fenster, setzt Mausvector zurck   
 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 zurckzuschreiben.         
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 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 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 bliche form-handling                                      
15  Screen-Nr. fr setscreen 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 fr do_view                                           
 3  Findbuffer wird nach PAD gebracht und fr 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 bliche form-handling        
11  String in Findbuffer 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 ntzlich, 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 gedrckten 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 vernnftig umgehen kann.                                 
10                                                                 
11                                                                 
12 Zusatzvorschlag:                                                
13  Alternate-Shift-Control bei gleichzeitig gedrckter 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 berein, um die šbersicht zu behalten.
 5  Dies gilt auch fr die folgenden Screens.                      
 6                                                                 
 7                                                                 
 8                                                                 
 9                                                                 
10                                                                 
11                                                                 
12                                                                 
13                                                                 
14 prft, ob Anzahl der Funktionen mit Anzahl der Tasten 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 ber die Menleiste als auch 
 4  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 fr 
10  dieses hervorragende Produkt. Nur ca. 80 Systemabstrze 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 Fr den Multi-Event mssen 17 (!) Parameter bergeben werden.   
 5  timer, message, mouse, button + keyboard events zulassen.      
 6  1 Tastendruck auf linke Maustaste, event bei gedrckter 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  zurck)                                                        
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 prfen 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 fr 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 ausfh- 
10  ren, Fehlerpiep erm”glichen, Status ausgeben                   
11  und - darauf bin ich ganz stolz - alle weiteren Tastendrcke   
12  l”schen!! Dadurch l„uft auch bei schnellem Tastenrepeat keine  
13  Funktion 'nach', wird aber trotzdem schnellstm”lich ausgefhrt.
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 gewnschte 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 fr Dauerhilfe bei jeder Menfunktion                      
 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 fr sich selbst.      
10                                                                 
11 Dauerhilfe-Box anzeigen; je nach gew„hltem Knopf                
12  H„kchen bei Menu Help setzen oder l”schen                      
13  dito fr Flag                                                  
14                                                                 
15                                                                 
Screen 83 not modified     
 0 \ Message events from menuline                         24aug86we
 1                                                                 
 2 Funktion, die nicht in actiontable steht, ausfhren             
 3  mit case? die passende Funktion ausw„hlen                      
 4  Tabelle lohnt hier nicht.                                      
 5                                                                 
 6                                                                 
 7                                                                 
 8 Menauswahl verarbeiten                                         
 9  Mentitel 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 ausfhren, 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 zurckgibt.       
 3  wenn ein Menpunkt angeklickt wird, menu-message ausfhren.    
 4  alle anderen Messages betreffen die Window-Attribute und       
 5  werden entsprechend ausgefhrt.                                
 6                                                                 
 7  Wenn ein Desk-Accessory ausgefhrt 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 ausgefhrt.                 
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 Geschwindigkeitsgrnden in Assembler                        
 9                                                                 
10 „ndert den Mausvektor.                                          
11                                                                 
12 Mausvektor auf neuen Wert, alter Wert nach savevec.             
13 Mausvektor auf alten Wert (muž unbedingt ausgefhrt 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 fr UNTIL durch done gesetzt wird.                    
 5                                                                 
 6 Fehlerpiep, nur einmal ausfhren, sonst klingelts dauernd.      
 7                                                                 
 8 Errorhandler fr 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 Rcksprung 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 zurckgreifen. Dies        
 4  vereinfacht die Parameterbergabe 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 mssen 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 fr 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 Menzeile 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 ausfhrt.      
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  mssen die entsprechenden Parameter ermittelt und in die       
 4  beiden Arrays, die fr die Zwischenspeicherung des Bildschirms 
 5  verantwortlich sind, gepatched werden.                         
 6  Fr 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 (!) ausgefhrt werden, 
 3  setzt die Variablen fr die GEM-Routinen des Editors           
 4  und fr die beiden Speicherdefinitions-Arrays                  
 5  wird daher nach  drvinit  gepatched, klinkt sich selbst aus.   
 6                                                                 
 7 savesystem muž eine Reihe von Variablen zurcksetzen, damit     
 8  das System mit 'vernnftigen' Werten hochkommt.                
 9  drvinit wird mit edistart gepatched.                           
10  FORTH-83.SCR als File fr markierten Screen.                   
11  ge„nderte Bl”cke auf Diskette zurckschreiben                  
12  und altes savesystem ausfhren.                                
13 Neues bye muž zus„tzlich ein  GREXIT  ausfhren.  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  mssen die entsprechenden Parameter ermittelt und in die       
 4  beiden Arrays, die fr die Zwischenspeicherung des Bildschirms 
 5  verantwortlich sind, gepatched werden.                         
 6  Fr 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                                                                 
