home *** CD-ROM | disk | FTP | other *** search
/ Set of Apple II Hard Drive Images / hard.hdv / HARD / FORTH / SOURCE / FORTHPRO.WRD < prev    next >
Encoding:
Text File  |  1995-05-25  |  12.9 KB  |  226 lines  |  [04] ASCII Text (0x0000)

  1. CONFIGURATION OF FORTH SYSTEM:
  2.  
  3. 1) ORIGINAL FILES: MAF.PRO - no editor, MAF.ED - editing capabilities
  4.    The following are procedures for creating FORTH.PRO & FORTH.ED
  5.  
  6. 2) Start up forth, then put in utilities disk.  Then look at screen #3.
  7.    This will load additional utilities:
  8.  
  9.     - CASE structure
  10.     - MLI support
  11.     - SAVE" for saving a clone of the system
  12.     - TYPE" and EXEC" to allow interpretation from text files
  13.  
  14. 3) Type: 3 LOAD to bring in these utilities.
  15.  
  16. 4) Type EXEC" DUMP.WRD" to add a dump and stack print command
  17.  
  18. 5) Type SAVE" followed by the filename of the system to be created.
  19.    (FORTH.PRO, FORTH.EXE)
  20.  
  21. THE FOLLOWING ARE DUMPS OF SCREENS FROM THE UTILITY DISK:
  22.  
  23. (SCREENS 1-3)
  24.  
  25. \ System directory (sort of)                                    
  26.                                                                 
  27. \ AID: An Interactive Decompiler       6   8 THRU               
  28. \ File Access                          9  11 THRU               
  29. \ Aztec C Unarc                       12  14 THRU               
  30. \ Forth Configure                     15  17 THRU               
  31. \ Forth Prodos Catalog                18  22 THRU               
  32. \ Save Forth Image                    23  24 THRU               
  33. \ Alarm                               25  26 THRU               
  34. \ Forth Decompiler                    27  34 THRU               
  35. \ Case Structure                          36 LOAD               
  36. \ Forth Low Level Prodos Access           37 LOAD               
  37. \ Show Stack                              39 LOAD               
  38. \ ABORT"                                  42 LOAD               
  39. \ Debugging tool                          43 LOAD               
  40.                                                                 
  41. \    System directory (sort of)                                 
  42.                                                                 
  43. \ Apple ][ output: UC only                45 LOAD               
  44. \ Apple ][ input: New chars: \ [ _        46 LOAD               
  45. \ Terminal program                    48  49 THRU               
  46. \ Clock demon                             51 LOAD               
  47. \ Prodos and MLI access (2nd shot)    54  60 THRU               
  48. \ Prodos File Fix                     63  67 THRU               
  49. \ argc/argv implementation            69  70 THRU               
  50. \ DOER/MAKE construct                     72 LOAD               
  51. \ File-oriented block control        120 125 THRU               
  52. \ Smart Open                         129 130 THRU               
  53. \ Text-file conversions              129 132 THRU               
  54.                                                                 
  55.                                                                 
  56.                                                                 
  57. \ ERIC RANGELL'S SYSTEM CONFIGURATION                           
  58.                                                                 
  59. \   START WITH MAF.PRO OR MAF.ED                                
  60. \   LOAD CASE STRUCTURE FROM SCR#36                             
  61. \   LOAD MLI SUPPORT FROM SCRS #54-60                           
  62. \   LOAD UPDATED SAVE" FROM SCRS #23-24                         
  63. \   LOAD TEXTFILE SUPPORT FROM SCRS #90-91                      
  64. \   TYPE RESET TO ALLOCATE MLI BUFFER                           
  65. \   TYPE REBOOT TO UPDATE THE "COLD" WORD                       
  66. \   THEN USE SAVE" TO SAVE YOUR SYSTEM                          
  67.                                                                 
  68.   36 LOAD   54 60 THRU   23 24 THRU   90 91 THRU                
  69.     RESET  REBOOT                                               
  70.  
  71. ( SCREEN 36 )
  72.  
  73. \ Case structure                                                
  74.                                                                 
  75. : CASE  ( n -- )  ?COMP CSP @ SP@ CSP ! 4 ; IMMEDIATE           
  76. : OF  ( n1 n2 -- n1 )  4 ?PAIRS  COMPILE OVER  COMPILE =        
  77.      COMPILE 0BRANCH  HERE 0 , COMPILE DROP  5 ; IMMEDIATE      
  78. : ENDOF   5 ?PAIRS  COMPILE BRANCH HERE 0 , SWAP 2              
  79.       [COMPILE] ENDIF 4 ; IMMEDIATE                             
  80. : DEFAULT  DUP ;                                                
  81. : ENDCASE 4 ?PAIRS COMPILE DROP BEGIN                           
  82.      SP@ CSP @ = NOT                                            
  83.   WHILE                                                         
  84.      2 [COMPILE] ENDIF                                          
  85.   REPEAT CSP ! ; IMMEDIATE                                      
  86.                                                                 
  87.  
  88. ( SCREENS 54-60 )
  89.  
  90. \ Forth File access (2nd shot)                                  
  91.                                                                 
  92. CR INVERSE ." Warning: move LIMIT down $400 for file buffer "   
  93. NORMAL CR ." Type RESET to move buffer down $400 " CR           
  94.                                                                 
  95. : RESET LIMIT 1024 - ' LIMIT ! ;                                
  96. : ?DERR  ( err# -- )  ?DUP IF  DERR THEN ;      HEX             
  97. : (OPENF)   \  fname  -- fd err#  .... err# eq 0 is allok       
  98.      PAD 1+ !  3 PAD C!  LIMIT 1+ PAD 3+ !   \ setup parm list  
  99.      PAD C8 MLI   PAD 5 + C@ SWAP ;   \ return file ref#        
  100. DEC                                                                                                             
  101. \    Forth File Access (2nd shot)                               
  102.                                                                 
  103. HEX                                                             
  104. : (CLOSEF)  ( f# -- err# )  1 PAD C!  PAD 1+ C!  PAD CC MLI ;   
  105. : (SEEKF)  PAD 1+ C!  \ mark.d ref# -- err#                     
  106.      PAD 4 + C!  PAD 2+ !   \ save 24bit data                   
  107.      2 PAD C!  PAD CE MLI ;                                     
  108. DEC                                                                                            
  109.                                                                 
  110. \    Forth File Access (2nd shot)                               
  111.                                                                 
  112. HEX                                                             
  113. : (CREATEF)  \  fname type auxtype -- err#                      
  114.       PAD 5 + !  PAD 4 + C!  PAD 1+ !   \ all arguments stored  
  115.       7 PAD C!  0C3 PAD 3+ C!  1 PAD 7 + C!   \ flesh out..     
  116.       \ time and date stamp file......                          
  117.       0 82 MLI DROP  BF90 @ PAD 8 + !  BF92 @ PAD 0A + !        
  118.       PAD C0 MLI  ;   \ returns err#                            
  119. DEC                                                                                                             
  120. \    Forth File Access (2nd shot)                               
  121.                                                                 
  122. HEX   \ GO-RW is setup for file read or write                   
  123. : GO-RW  ( addr bytes fd -- )  4 PAD C!  PAD 1+ C!              
  124.      SWAP PAD 2+ !  PAD 4 + !  ;                                
  125. : (READF)   ( addr bytes fd -- err# ) GO-RW  PAD 0CA MLI ;      
  126. : (WRITEF)  ( addr bytes fd -- err# ) GO-RW  PAD 0CB MLI ;      
  127. : (FLUSHF)  ( ref# -- err# )  1 PAD C!  PAD 1+ C!               
  128.        0CD MLI ;                                                
  129. : (EOF)  ( ref# -- eof.d err# )  2 PAD C!  PAD 1+ C!            
  130.       PAD 2+ !0 PAD 3+ !0  \ === WE CHEATED!! notice?           
  131.       PAD 0D1 MLI  PAD 2+ @  PAD 4 + C@  ROT ;   DEC                                           
  132. \    Forth File Access (2nd shot)                               
  133.                                                                 
  134. \ use of (GETINFO) before (SETINFO) is STRONGLY encouraged      
  135. HEX                                                             
  136. : (GETINFO)  ( fname -- err# )  0A PAD C!  PAD 1+ !             
  137.       PAD 0C4 MLI ;                                             
  138. : (SETINFO)  ( -- err# )  7 PAD C!  PAD 0C3 MLI ;  DEC                                                          
  139.                                                                 
  140. \    Forth File Access (2nd shot)                               
  141.                                                                 
  142. HEX                                                             
  143. : (TIME)  \ -- date.compact time.compact (1byte each)           
  144.      0 82 MLI DROP  BF90 @  BF92 @ ;                            
  145.                                                                 
  146. \ could use (SETINFO) and (GETINFO) in (TOUCH),                 
  147. \   but want to maintain routine independence                   
  148.                                                                 
  149. : (TOUCH)  ( fname -- err# )  0A PAD C!  PAD 1+ !               
  150.       PAD 0C4 MLI  ?DUP 0= IF   \ get info                      
  151.          PAD 0A + !0  PAD 0C + !0   \ use current date/time     
  152.          7 PAD C!  PAD 0C3 MLI   \ do set info                  
  153.       THEN  ;  \ error could be from getinfo or setinfo         
  154. DEC                                                             
  155.                                                                 
  156. \    Forth File Access (2nd shot)                               
  157.                                                                 
  158. HEX                                                             
  159. : (SET-EOF)  \ set-eof call      eof.d ref# -- ?                
  160.       2 PAD C!  PAD 1+ C!  \ store count, ref#                  
  161.       PAD 3+ !  PAD 2+ C!  \ store eof (24b)                    
  162.       PAD 0D0 MLI ;                                             
  163. : (POSF)  \ get current file position                           
  164.      2 PAD C!  PAD 1+ C!  PAD 0CF  MLI                          
  165.      PAD 2+ @  PAD 4 + C@  ROT ;        DEC                     
  166.  
  167. ( SCREENS 23-24 )
  168.  
  169. \ SAVE FORTH IN BINARY IMAGE - PART 1                           
  170.                                                                 
  171. \ REBOOT UPDATES "COLD" BEFORE SAVING IMAGE                     
  172. DEC                                                             
  173. : REBOOT                                                        
  174.    DEFINITIONS HERE 48 +ORIGIN !                                
  175.    VOC-LINK @ DUP 50 +ORIGIN !                                  
  176.    BEGIN                                                        
  177.      DUP 4 - @ OVER 2 + ! @                                     
  178.      ?DUP 0=                                                    
  179.    UNTIL                                                        
  180. ;                                                                                                              
  181. \ Save-forth in binary image                                    
  182.                                                                 
  183. CR ." Strongly recommend you update cold before using"          
  184. CR ." this word: COLD executes on startup"                      
  185. : SAVE"  ( -- ) REBOOT  ASCII " WORD DUP  6 ( BIN )  0 +ORIGIN  
  186.      (CREATEF) ?DERR   \ create new file (returns fd)           
  187.      (OPENF) ?DERR   \ open file #fd...                         
  188.      0 +ORIGIN  HERE OVER - ROT  (WRITEF) ?DERR                 
  189.      0 (CLOSEF) ?DERR ;  \ close the file                       
  190.  
  191.  
  192. ( SCREENS 90-91 )
  193.  
  194. \ EXEC FORTH WORDS FROM TEXT FILE                               
  195. DEC                                                             
  196. : (NEWLINE)                                                     
  197.     3 PAD C!  PAD 1+ C!  PAD 2 + C!  PAD 3 + C!  \ STORE PARMS  
  198.     PAD 201 MLI                                                 
  199. ;                                                               
  200. VARIABLE PAD2  128 ALLOT                                        
  201.                                                                 
  202. : PAD2EXE                                                       
  203.     TIB @ 128 0 FILL                                            
  204.     PAD2 TIB @ 80 CMOVE                                         
  205.     0 BLK !   0 >IN !                                           
  206.     INTERPRET                                                   
  207. ;                                                               
  208.                                                                 
  209.                                                                 
  210. \ EXEC FORTH WORDS FROM TEXTFILE                                
  211. VARIABLE REF#  \ FILE REF # FOR MLI                             
  212. VARIABLE EXEC?  \ 0=TYPE  1=EXECUTE                             
  213. VARIABLE RCODE \ RETURN CODE FROM MLI                           
  214. : TEXTFILE                                                      
  215.    ASCII " WORD    (OPENF) ?DERR                                
  216.    DUP 13 127 ROT (NEWLINE) ?DERR  REF# !                       
  217.    CR  BEGIN                                                    
  218.      REF# @  PAD2 128 0 FILL PAD2   80 ROT (READF) RCODE !      
  219.           PAD2 80 TYPE EXEC? @ IF PAD2EXE THEN                  
  220.        RCODE @ 76 = UNTIL                                       
  221.        REF# @ (CLOSEF)  ?DERR                                   
  222. ;                                                               
  223.                                                                 
  224. : TYPE"  0 EXEC? ! TEXTFILE ;                                   
  225. : EXEC"  1 EXEC? ! TEXTFILE ;                                   
  226.