Screen 0 not modified     
 0 \\ Printer Interface                                     08Nov86
 1                                                                 
 2 Dieses File enthaelt das Printer Interface zwischen volksFORTH  
 3 und dem Drucker.                                                
 4                                                                 
 5 Damit ist es moeglich Source-Texte auf bequeme Art und Weise    
 6 in uebersichtlicher Form auszudrucken (6 auf eine Seite).       
 7                                                                 
 8 In Verbindung mit dem Multitasker ist es moeglich, auch Texte im
 9 Hintergrund drucken zu lassen und trotztdem weiterzuarbeiten.   
10                                                                 
11                                                                 
12                                                                 
13                                                                 
14                                                                 
15                                                                 
Screen 1 not modified     
 0 \ Printer Interface Epson RX80                           18Aug86
 1 \ angepasst auf M 130i                                 07dec85we
 2                                                                 
 3 Onlyforth                                                       
 4                                                                 
 5 Variable shadow         capacity 2/ shadow !   \ s. Editor      
 6                                                                 
 7 Vocabulary Printer   Printer definitions also                   
 8 | Variable printsem   printsem off                              
 9                                                                 
10      01 +load  04 0C +thru        \ M 130i - Printer            
11 \ 01 03 +thru  06 0C +thru        \ Fujitsu - Printer           
12                                                                 
13 Onlyforth                                                       
14                                                                 
15                                                                 
Screen 2 not modified     
 0 \ Printer  p! and controls                            UH 02Nov87
 1                                                                 
 2 | : ready? ( -- f ) [ Dos ]  0 &15 biosa 0= not ;               
 3                                                                 
 4 : p!  ( n --)   BEGIN  pause                                    
 5    stop? IF printsem unlock true abort" stopped! " THEN         
 6    ready?  UNTIL  [ Dos ]  5 bios ;                             
 7                                                                 
 8 | : ctrl:  ( 8b --)   Create c,   Does>  ( --)   c@ p! ;        
 9                                                                 
10 07   ctrl: BEL       7F | ctrl: DEL        0D | ctrl: RET       
11 1B | ctrl: ESC       0A   ctrl: LF         0C   ctrl: FF        
12 0F | ctrl: (+17cpi   12 | ctrl: (-17cpi                         
13                                                                 
14                                                                 
15                                                                 
Screen 3 not modified     
 0 \ Printer Escapes                                        24dec85
 1                                                                 
 2 | : esc:  ( 8b --)   Create c,   does>  ( --)   ESC c@ p! ;     
 3                                                                 
 4 Ascii 0   esc: 1/8"       Ascii 1   esc: 1/10"                  
 5 Ascii 2   esc: 1/6"       Ascii T   esc: suoff                  
 6 Ascii N   esc: +jump      Ascii O   esc: -jump                  
 7 Ascii G   esc: +dark      Ascii H   esc: -dark                  
 8 \ Ascii 4   esc: +cursive   Ascii 5   esc: -cursive             
 9                                                                 
10                                                                 
11 | : ESC2  ( 8b0 8b1 --)   ESC p! p! ;                           
12                                                                 
13 | : on:  ( 8b --)  Create c,  does>  ( --)  ESC c@ p!  1 p! ;   
14 | : off: ( 8b --)  Create c,  does>  ( --)  ESC c@ p!  0 p! ;   
15                                                                 
Screen 4 not modified     
 0 \ Printer Escapes                                        29jan86
 1                                                                 
 2 Ascii W   on:  +wide    Ascii W   off: -wide                    
 3 Ascii -   on:  +under   Ascii -   off: -under                   
 4 Ascii S   on:  sub      Ascii S   off: super                    
 5 Ascii P   on:  (10cpi   Ascii P   off: (12cpi                   
 6                                                                 
 7 : 10cpi     (-17cpi  (10cpi  ;                                  
 8 : 12cpi     (-17cpi  (12cpi  ;                                  
 9 : 17cpi     (10cpi   (+17cpi ;                                  
10                                                                 
11 : lines  ( #.of.lines --)   Ascii C ESC2 ;                      
12 : "long  ( inches --)   0 lines p! ;                            
13 : american   0 Ascii R ESC2 ;                                   
14 : german   2 Ascii R ESC2 ;                                     
15 : normal   12cpi  american  suoff 1/6" 0C "long RET ;           
Screen 5 not modified     
 0 \ Printer Escapes                                        16Jul86
 1                                                                 
 2 | : esc:  ( 8b --)   Create c,   does>  ( --)   ESC c@ p! ;     
 3                                                                 
 4 Ascii 0   esc: 1/8"       Ascii 1   esc: 1/10"                  
 5 Ascii 2   esc: 1/6"       Ascii T   esc: suoff                  
 6 Ascii N   esc: +jump      Ascii O   esc: -jump                  
 7 Ascii G   esc: +dark      Ascii H   esc: -dark                  
 8 Ascii 4   esc: +cursive   Ascii 5   esc: -cursive               
 9 Ascii M   esc: 12cpi      Ascii P | esc: (-12cpi                
10                                                                 
11 : 10cpi   (-12cpi (-17cpi ;                                     
12 : 17cpi   (-12cpi (+17cpi ;                                     
13                                                                 
14 ' 10cpi   Alias pica      ' 12cpi   Alias elite                 
15                                                                 
Screen 6 not modified     
 0 \ Printer Escapes                                        16Jul86
 1                                                                 
 2 | : ESC2  ( 8b0 8b1 --)   ESC p! p! ;                           
 3                                                                 
 4 | : on:  ( 8b --)  Create c,  does>  ( --)  ESC c@ p!  1 p! ;   
 5 | : off: ( 8b --)  Create c,  does>  ( --)  ESC c@ p!  0 p! ;   
 6                                                                 
 7 Ascii W   on:  +wide    Ascii W   off: -wide                    
 8 Ascii -   on:  +under   Ascii -   off: -under                   
 9 Ascii S   on:  sub      Ascii S   off: super                    
10 Ascii p   on:  +prop    Ascii p   off: -prop                    
11 : lines  ( #.of.lines --)   Ascii C ESC2 ;                      
12 : "long  ( inches --)   0 lines p! ;                            
13 : american   0 Ascii R ESC2 ;                                   
14 : german     2 Ascii R ESC2 ;                                   
15 : normal   12cpi  american  suoff 1/6" 0C "long RET ;           
Screen 7 not modified     
 0 \ Printer Output                                         04Jul86
 1                                                                 
 2 : prinit ;  \ initializing Printer                              
 3                                                                 
 4 | Variable pcol   pcol off      | Variable prow   prow off      
 5 | : pemit  ( 8b --)   p!  1 pcol +! ;                           
 6 | : pcr  ( --)   RET LF  1 prow +!  pcol off ;                  
 7 | : pdel  ( --)   DEL  pcol @ 1- 0 max pcol ! ;                 
 8 | : ppage  ( --)   FF  prow off  pcol off ;                     
 9 | : pat  ( row col --)   over  prow @ <  IF  ppage  THEN        
10    swap  prow @ -  0 ?DO  pcr  LOOP                             
11    dup  pcol @ <  IF  RET  pcol off  THEN  pcol @ - spaces ;    
12 | : pat?  ( -- row col)   prow @  pcol @ ;                      
13 | : ptype  ( adr len --)                                        
14  dup pcol +!  bounds ?DO  I c@ p!  LOOP ;                       
15                                                                 
Screen 8 not modified     
 0 \ Printer output                                         28Jun86
 1                                                                 
 2 | Output: >printer   pemit pcr ptype pdel ppage pat pat? ;      
 3                                                                 
 4 Forth definitions                                               
 5                                                                 
 6 : print   >printer  normal ;                                    
 7                                                                 
 8 : printable?  ( char -- f)   bl  Ascii ~  uwithin ;             
 9                                                                 
10                                                                 
11                                                                 
12                                                                 
13                                                                 
14                                                                 
15                                                                 
Screen 9 not modified     
 0 \ Variables and Setup                                    23Oct86
 1                                                                 
 2 Printer definitions                                             
 3                                                                 
 4 $00 | Constant logo   | Variable pageno                         
 5 | Create scr#s   $0E allot  \ enough room for 6 screens         
 6                                                                 
 7 | : header  ( -- )                                              
 8  12cpi  4 spaces   ." Page No " +dark pageno @ 2 .r             
 9  $0D spaces  ."  volksFORTH83 der FORTH-Gesellschaft eV "       
10  5 spaces  file?  -dark 1 pageno +! 17cpi ;                     
11                                                                 
12                                                                 
13                                                                 
14                                                                 
15                                                                 
Screen 10 not modified     
 0 \ Print 2 screens across on a page                       03dec85
 1                                                                 
 2 | : text?  ( scr# -- f)   block  dup c@  printable?             
 3   IF  b/blk -trailing  nip  0=  THEN  0=  ;                     
 4                                                                 
 5 | : pr  ( scr# --)    dup  capacity 1- u>  IF  drop logo  THEN  
 6  1 scr#s +!  scr#s dup @ 2* + ! ;                               
 7                                                                 
 8 | : 2pr  ( scr#1 scr#2 line# --)  cr  dup 2 .r space  c/l * >r  
 9  pad $101 bl fill  swap block  r@ +  pad c/l cmove              
10  block r> + pad c/l + 1+ c/l cmove  pad $101 -trailing type ;   
11                                                                 
12 | : 2scr  ( scr#1 scr#2 --)    cr cr  $1E spaces                
13  +wide +dark over 4 .r  $1C spaces  dup 4 .r  -wide -dark       
14  cr  l/s 0 DO  2dup  I 2pr  LOOP  2drop ;                       
15                                                                 
Screen 11 not modified     
 0 \ Printer 6 screens on a page                            03dec85
 1                                                                 
 2 | : pr-start  ( --)   scr#s off  1 pageno ! ;                   
 3                                                                 
 4 | : pagepr  ( --)   header  scr#s off  scr#s 2+                 
 5  3 0 DO  dup @  over 6 + @  2scr  2+  LOOP  drop  page ;        
 6                                                                 
 7 | : shadowpr  ( --)   header  scr#s off  scr#s 2+               
 8  3 0 DO  dup @  over 2+ @  2scr  4 +  LOOP  drop  page ;        
 9                                                                 
10 | : pr-flush  ( -- f)   scr#s @  dup   \ any screens left over? 
11  IF  BEGIN  scr#s @ 5 <  WHILE  -1 pr  REPEAT  logo pr  THEN    
12  0<> ;                                                          
13                                                                 
14                                                                 
15                                                                 
Screen 12 not modified     
 0 \ Printer 6 screens on a page                            23Nov86
 1 Forth definitions                                               
 2                                                                 
 3 : pthru  ( first last --)                                       
 4  printsem lock  output push  print  pr-start  1+ swap           
 5  ?DO  I text?  IF  I pr  THEN  scr#s @ 6 = IF  pagepr  THEN     
 6  LOOP  pr-flush IF  pagepr  THEN  printsem unlock ;             
 7                                                                 
 8 : document  ( first last --)                                    
 9    isfile@ IF capacity 2/ shadow ! THEN                         
10    printsem lock  output push  print  pr-start  1+ swap         
11    ?DO  I text?  IF  I pr  I shadow @ + pr  THEN                
12         scr#s @ 6 = IF  shadowpr  THEN  LOOP                    
13    pr-flush  IF  shadowpr  THEN  printsem unlock ;              
14                                                                 
15 : listing  ( --)  0  capacity 2/ 1- document ;                  
Screen 13 not modified     
 0 \ Printerspool                                           03Nov86
 1                                                                 
 2 \needs Task \\                                                  
 3                                                                 
 4 | Input: noinput    0  false  drop  2drop  ;                    
 5                                                                 
 6                                                                 
 7 $100 $200  noinput Task spooler                                 
 8                                                                 
 9 keyboard                                                        
10                                                                 
11 : spool   ( from to -- )                                        
12    isfile@  spooler 3 pass  isfile !  pthru  stop ;             
13                                                                 
14                                                                 
15                                                                 
Screen 14 not modified     
 0                                                                 
 1                                                                 
 2                                                                 
 3                                                                 
 4                                                                 
 5                                                                 
 6                                                                 
 7                                                                 
 8                                                                 
 9                                                                 
10                                                                 
11                                                                 
12                                                                 
13                                                                 
14                                                                 
15                                                                 
Screen 15 not modified     
 0                                                                 
 1                                                                 
 2                                                                 
 3                                                                 
 4                                                                 
 5                                                                 
 6                                                                 
 7                                                                 
 8                                                                 
 9                                                                 
10                                                                 
11                                                                 
12                                                                 
13                                                                 
14                                                                 
15                                                                 
