home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib39b.dsk / EDIT.MACROS.bas < prev    next >
BASIC Source File  |  2023-02-26  |  12KB  |  198 lines

  1. 10  REM *******************************
  2. 20  REM *          AppleMate          *
  3. 30  REM *   The Complete Keyboard     *
  4. 40  REM *        Macro System         *
  5. 50  REM *                             *
  6. 60  REM *     By  Chris Chapman       *
  7. 70  REM *     Copyright 1990 by       *
  8. 80  REM *    MindCraft Publ. Corp.    *
  9. 90  REM *******************************
  10. 100  REM ------- Set-Up Section
  11. 110  TEXT : PRINT  CHR$(21): HOME : DIM MA$(19): ONERR  GOTO 1820
  12. 120 D$ =  CHR$(4):LA = 16384: REM  $4000
  13. 130  FOR L = 1 TO 27: READ D: POKE 767 +L,D: NEXT 
  14. 140  DATA  169,4,32,245,190,133,7,96,162,2,160,0,177,8,145,6,200,208,249,230,9,230,7,202,16,242,96
  15. 150  IF  PEEK(64435) < >6  THEN 1980: REM  ][+
  16. 160  IF  PEEK(977)  THEN 290: REM  DOS 3.3
  17. 170  REM ------- MacroMate installer for ProDOS
  18. 180  REM  Make sure prefix is the same as the one where EDIT.MACROS lives.
  19. 190  IF  PEEK(640)  THEN  FOR I = 1 TO  PEEK(640):P$ = P$ + CHR$( PEEK(640 +I)): NEXT : FOR N = I TO 2  STEP  -1: IF  MID$ (P$,N,1) < >"/"  THEN  NEXT 
  20. 200  IF  PEEK(640)  AND N >3  THEN P$ =  LEFT$(P$,N -1): PRINT D$"PREFIX"P$
  21. 210  GOSUB 430: IF BF  THEN F = 1:S = 1: GOTO 520: REM  AppleMate installed
  22. 220  GOSUB 460: REM  BLOAD AppleMate
  23. 230  CALL 768:BF =  PEEK(7): REM  Allocate buffer
  24. 240  GOSUB 470: REM  Poke in Ampersand vectors
  25. 250  GOSUB 490: REM  Poke in relocated address
  26. 260  GOSUB 500: CALL 776: REM  Set up for relocate, do it
  27. 270  & MAC: GOTO 520: REM  Continue with loading/saving/editing
  28. 280  REM ------- MacroMate installer for DOS 3.3
  29. 290  GOSUB 430: IF BF  THEN F = 1:S = 1:D$ =  CHR$(13) + CHR$(4): GOTO 520: REM    AppleMate installed
  30. 300  IF  PEEK(40193) < >149  THEN  PRINT : PRINT  CHR$(4)"MAXFILES4": POKE 40192,218: POKE 40193,149: PRINT : PRINT  CHR$(4)"MAXFILES3"
  31. 310 D$ =  CHR$(13) + CHR$(4):LA = 16384:BF = 150: POKE 7,BF
  32. 320  GOSUB 460: REM  BLOAD AppleMate
  33. 330  GOSUB 470: REM  Poke in Ampersand vectors
  34. 340  GOSUB 490: REM  Poke in relocated address
  35. 350  REM  Patch for DOS 3.3
  36. 360  POKE LA +55,85: POKE LA +56,170: POKE LA +71,85: POKE LA +72,170
  37. 370  POKE LA +77,86: POKE LA +78,170: POKE LA +84,56: POKE LA +85,0
  38. 380  POKE LA +89,57: POKE LA +90,0
  39. 390  POKE LA +98,32: POKE LA +99,234: POKE LA +100,3
  40. 400  GOSUB 500: CALL 776: REM  Set up for relocate, do it
  41. 410  & MAC: GOTO 520: REM  Continue with loading/saving/editing
  42. 420  REM ------- Subroutines for installation
  43. 430  FOR I =  PEEK(116) TO 150
  44. 440  IF  PEEK((I *256) +1) < >165  AND  PEEK((I *256) +2) < >184  THEN  NEXT : RETURN 
  45. 450  & MAC:BF =  PEEK(7): RETURN 
  46. 460  PRINT D$"BLOAD APPLEMATE,A"LA: RETURN 
  47. 470  POKE LA +48, PEEK(1014): POKE LA +49, PEEK(1015)
  48. 480  POKE 1014,0: POKE 1015,BF: RETURN 
  49. 490  POKE LA +51,BF: RETURN 
  50. 500  POKE 9,LA/256: POKE 8,LA -( PEEK(9) *256): POKE 6,0: RETURN 
  51. 510  REM ------- Main Menu 
  52. 520 F$ = "NEW":BF = BF +1:RB = BF *256
  53. 530 UE = 1: IF  PEEK(64448) < >234  THEN UE = 0: POKE 49167,0
  54. 540  HOME : POKE 36,15: PRINT "AppleMate": POKE 36,12: PRINT "By Chris Chapman"
  55. 550  POKE 36,3: PRINT "The Complete Keyboard Macro System"
  56. 560  PRINT " Copyright 1990 by MindCraft Publ. Corp."
  57. 570  FOR I = 1 TO 40: PRINT "_";: NEXT : POKE 34,6
  58. 580  HOME : POKE 33,29: POKE 32,11: VTAB 9: PRINT "1. Load Macro File": PRINT "2. Edit Current File": PRINT "3. Print Current File": PRINT "4. Save Macro File": PRINT "5. Exit"
  59. 590  VTAB 15: PRINT " . Choice";: POKE 36,0: POKE 49168,0: GET CH$
  60. 600  IF CH$ <"0"  OR CH$ >"5"  THEN  PRINT  CHR$(7): GOTO 590
  61. 610  PRINT CH$: POKE 32,0: POKE 33,40
  62. 620  ON  VAL(CH$) GOTO 640,730,880,1060,1740
  63. 630  REM ------- Load File
  64. 640  IF F = 1  THEN  PRINT : PRINT : PRINT : PRINT  SPC( 5)"Replace file in memory (Y/N): ";: GET YN$: IF YN$ < >"Y"  AND YN$ < >"y"  THEN 580
  65. 650 CM$ = "LOAD": GOSUB 1250
  66. 660  PRINT D$"BLOAD"F$",A"LA:F = 1:S = 1
  67. 670  POKE 9,LA/256: POKE 8,LA -( PEEK(9) *256): POKE 6,0: POKE 7,BF
  68. 680  CALL 776: REM  Relocate table to protected buffer
  69. 690  GOSUB 1140: GOTO 730
  70. 700  REM ------- Edit Macros
  71. 710  REM         in memory
  72. 720  POKE 35,24: POKE 34,21: HOME : VTAB 22: PRINT "Type number to edit, SPACE for next pg.,";: POKE 36,9: PRINT "or <ESC> for Main Menu": POKE 35,21: POKE 34,6: RETURN 
  73. 730  IF   NOT F  THEN  PRINT : PRINT : POKE 36,12: PRINT "No file in memory": GOTO 1970
  74. 740  IF MA$(0) = ""  THEN  GOSUB 1140
  75. 750  GOSUB 720
  76. 760  HOME : PRINT "Open Apple Commands           ": PRINT 
  77. 770  FOR I = 0 TO 9: IF UE  THEN  PRINT " ";: GOTO 790
  78. 780  FLASH : PRINT "A";: NORMAL 
  79. 790  PRINT I" ";MA$(I); SPC( 35 - LEN(MA$(I))): PRINT 
  80. 800  NEXT :P = 1: GOSUB 1170
  81. 810  HOME : PRINT "Closed Apple (Option) Commands": PRINT 
  82. 820  FOR I = 10 TO 19: IF UE  THEN  PRINT " ";: GOTO 840
  83. 830  FLASH : PRINT "@";: NORMAL 
  84. 840  PRINT I -10" ";MA$(I); SPC( 35 - LEN(MA$(I))): PRINT 
  85. 850  NEXT :P = 2: GOSUB 1170: GOTO 760
  86. 860  REM ------- Print Macros
  87. 870  REM         in memory
  88. 880  IF   NOT F  THEN  PRINT : PRINT : POKE 36,12: PRINT "No file in memory": GOTO 1970
  89. 890  IF MA$(0) = ""  THEN  GOSUB 1140
  90. 900  HOME : PRINT "Enter slot printer is in, RETURN to": PRINT "accept, or <ESC> to exit."
  91. 910 SL = 1: PRINT : PRINT "Slot: "SL; CHR$(8);: GET SL$
  92. 920  ON SL$ =  CHR$(27) GOTO 580: IF SL$ =  CHR$(13)  THEN 950
  93. 930  IF SL$ <"1"  OR SL$ >"7"  THEN 910
  94. 940 SL =  VAL(SL$)
  95. 950  HOME : PRINT D$"PR#"SL: PRINT  CHR$(9)"80N"
  96. 960  PRINT "AppleMate Macro Commands";
  97. 970  IF F$ < >"NEW"  THEN  PRINT " for file "F$;
  98. 980  PRINT : PRINT 
  99. 990  PRINT "  Open Apple Commands" SPC( 20)"Closed Apple Commands"
  100. 1000  PRINT "  ---- ----- --------" SPC( 20)"------ ----- --------"
  101. 1010  FOR I = 0 TO 9
  102. 1020  PRINT "  "I" "MA$(I); SPC( 37 - LEN(MA$(I)));: PRINT I" "MA$(I +10)
  103. 1030  NEXT : PRINT  CHR$(12)
  104. 1040  PRINT D$"PR#0": GOTO 570
  105. 1050  REM ------- Save File
  106. 1060  IF   NOT F  THEN  PRINT : PRINT : POKE 36,12: PRINT "No file in memory": GOTO 1970
  107. 1070  GOSUB 1380
  108. 1080  POKE 7,LA/256: POKE 6,LA -( PEEK(7) *256): POKE 8,0: POKE 9,BF
  109. 1090  CALL 776: REM  Relocate table to $4000
  110. 1100 CM$ = "SAVE": GOSUB 1250
  111. 1110  PRINT D$"BSAVE"T$F$",A"LA",L";L:S = 1: ON   NOT XT GOTO 580: RETURN 
  112. 1120  REM ------- Initialize 
  113. 1130  REM         macro arrays
  114. 1140  VTAB 22: POKE 36,14: PRINT "Please Wait.";:L = RB: FOR I = 0 TO 19:MA$(I) = ""
  115. 1150  GOSUB 1690:X =  PEEK(L):MA$(I) = MA$(I) + CHR$(X -(X >127) *128):L = L +1: ON X <128 GOTO 1150: NEXT : RETURN 
  116. 1160  REM ------- Edit Macro
  117. 1170  POKE 49168,0: WAIT 49152,128:X =  PEEK(49152) -128: IF X = 32  THEN  RETURN 
  118. 1180  IF X = 27  THEN  POP : POKE 35,24: GOTO 580
  119. 1190  IF X <48  OR X >57  THEN 1170
  120. 1200  POKE 35,24: POKE 34,21: HOME : VTAB 22: PRINT " Enter macro and press RETURN when you  ";: POKE 36,3: PRINT "are finished, or <ESC> to go back.": POKE 34,6: POKE 35,21
  121. 1210 X = X -48:X = X +(P = 2) *10
  122. 1220  VTAB 9 +X -10 *(P = 2): POKE 36,3: POKE 49168,0:Y = 0:Y$ = MA$(X): GOSUB 1430:MA$(X) = Z$:S = 0:PK = 0
  123. 1230  POP : GOSUB 720: ON P GOTO 760,810
  124. 1240  REM ------- Get Filename
  125. 1250  HOME : POKE 49168,0: PRINT "Type '?' to catalog, type file name to  "CM$;
  126. 1260  IF CM$ = "LOAD"  THEN  PRINT ", or 'NEW' for a new file"
  127. 1270  VTAB 10: PRINT "Enter Filename: ";:Y$ = F$:Y = 1: GOSUB 1430
  128. 1280  IF  LEFT$(Z$,1) < >"?"  THEN 1330
  129. 1290  IF  LEN(Z$) >1  THEN Z$ = "CAT" + RIGHT$(Z$, LEN(Z$) -1)
  130. 1300  ON  LEN(Z$) <4  OR  PEEK(48896) < >76 GOTO 1320:ZZ$ =  RIGHT$(Z$, LEN(Z$) -3)
  131. 1310  PRINT D$"PREFIX"ZZ$
  132. 1320  PRINT D$ LEFT$("CATALOG",7 -4 *( PEEK(48896) = 76)): PRINT : PRINT "Press Return to continue.": POKE 49168,0: WAIT 49152,128:F$ = "": GOTO 1250
  133. 1330  IF CM$ = "LOAD"  AND Z$ = "NEW"  THEN MA$(0) = "": FOR I = 0 TO 19: POKE RB +I,160: NEXT :F = 1: POP : GOTO 730
  134. 1340  IF Z$ = ""  THEN  POP : GOTO 580
  135. 1350 F$ = Z$: RETURN 
  136. 1360  REM ------- Poke Macros
  137. 1370  REM         into place 
  138. 1380  IF PK  THEN  RETURN 
  139. 1390  VTAB 22: POKE 36,14: PRINT "Please Wait.";:L = RB: FOR I = 0 TO 19: FOR X = 1 TO  LEN(MA$(I)): GOSUB 1690
  140. 1400  POKE L, ASC( MID$ (MA$(I),X,1)):L = L +1: NEXT : POKE L -1, PEEK(L -1) +128: NEXT :L = L -RB:PK = 1
  141. 1410  RETURN 
  142. 1420  REM ------- Input Subroutine
  143. 1430 H =  PEEK(36) +1:V =  PEEK(37) +1
  144. 1440  HTAB H: VTAB V:Z$ = Y$:Z = 0: PRINT Y$; SPC( 35 - LEN(Y$));: VTAB V
  145. 1450  HTAB H +Z: GET G$:G =  ASC(G$):YY = 1: IF Y  AND  LEFT$(Z$,1) = "?"  THEN YY = 12/22
  146. 1460  ON G < >127 GOTO 1510: IF  LEN(Z$) = 1  AND Z  THEN Z$ = "":Z = 0: HTAB H: PRINT  SPC( 35 -Y *YY *22);: GOTO 1450
  147. 1470  IF  LEN(Z$) = Z  AND Z  THEN Z = Z -1:Z$ =  LEFT$(Z$,Z): HTAB H: PRINT Z$" ";: GOTO 1450
  148. 1480  IF Z >1  THEN Z = Z -1:Z$ =  LEFT$(Z$,Z) + RIGHT$(Z$, LEN(Z$) -Z -1): HTAB H: PRINT Z$ SPC( 35 -Y *YY *22 - LEN(Z$));: GOTO 1450
  149. 1490  IF Z  THEN Z = Z -1:Z$ =  RIGHT$(Z$, LEN(Z$) -1): HTAB H: PRINT Z$ SPC( 35 -Y *YY *22 - LEN(Z$));: GOTO 1450
  150. 1500  GOTO 1450
  151. 1510  ON (G = 13  AND Z) GOTO 1670: IF G = 13  THEN Z$ = Y$:Z =  LEN(Z$): GOTO 1670
  152. 1520  IF G = 21  AND Z < LEN(Z$)  THEN Z = Z +1: GOTO 1450
  153. 1530  IF G = 27  AND Z$ < >Y$  THEN 1440
  154. 1540  IF G = 27  AND Y  THEN Z$ = "": RETURN 
  155. 1550  IF G = 27  THEN Z$ = Y$: RETURN 
  156. 1560  IF G = 25  AND Z = 0  THEN Z$ = "": PRINT  SPC( 35 -Y *YY *22);: GOTO 1450
  157. 1570  IF G = 25  THEN Z$ =  LEFT$(Z$,Z): HTAB H: PRINT Z$; SPC( 35 -Y *22 -Z);: GOTO 1450
  158. 1580  IF G = 24  THEN G = 25:Z = 0: HTAB H: GOTO 1560
  159. 1590  ON G = 8  AND   NOT Z GOTO 1450: IF G = 8  THEN Z = Z -1: GOTO 1450
  160. 1600  IF G <31  OR Z = 35 -Y *YY *22  THEN  PRINT  CHR$(7);: GOTO 1450
  161. 1610  IF Z =  LEN(Z$)  THEN Z$ = Z$ +G$: GOTO 1660
  162. 1620  IF Z = 0  AND  LEN(Z$) = 1  THEN Z$ = G$: GOTO 1660
  163. 1630  IF Z = 0  THEN Z$ = G$ + RIGHT$(Z$, LEN(Z$) -1): GOTO 1660
  164. 1640  IF Z =  LEN(Z$) -1  THEN Z$ =  LEFT$(Z$, LEN(Z$) -1) +G$: GOTO 1660
  165. 1650 Z$ =  LEFT$(Z$,Z) +G$ + RIGHT$(Z$, LEN(Z$) -Z -1)
  166. 1660 Z = Z +1: PRINT G$;: GOTO 1450
  167. 1670  HTAB H:Z$ =  LEFT$(Z$,Z): PRINT Z$; SPC( 35 -Y *YY *22 -Z);: RETURN 
  168. 1680  REM ------- Pinwheel routine
  169. 1690  IF PW = 0  THEN  POKE 36,12: PRINT "!";: POKE 36,27: PRINT "!";:PW = 1: RETURN 
  170. 1700  IF PW = 1  THEN  POKE 36,12: PRINT  CHR$(92);: POKE 36,27: PRINT "/";:PW = 2: RETURN 
  171. 1710  IF PW = 2  THEN  POKE 36,12: PRINT "-";: POKE 36,27: PRINT "-";:PW = 3: RETURN 
  172. 1720  POKE 36,12: PRINT "/";: POKE 36,27: PRINT  CHR$(92);:PW = 0: RETURN 
  173. 1730  REM ------- Exit routine
  174. 1740  PRINT : PRINT : POKE 36,10: PRINT "ARE YOU SURE(Y/N)? ";: GET YN$: PRINT YN$: IF YN$ < >"Y"  AND YN$ < >"y"  THEN 580
  175. 1750  IF F = 1  AND S < >1  THEN  PRINT : PRINT : POKE 36,4: PRINT "FILE NOT SAVED. SAVE NOW(Y/N)? ";: GET YN$: PRINT YN$: IF YN$ < >"N"  AND YN$ < >"n"  THEN XT = 1: GOSUB 1070
  176. 1760  ON   NOT F GOTO 1770: ON   NOT S GOSUB 1380
  177. 1770  PRINT  CHR$(21): TEXT : HOME : ON   NOT F GOTO 1790
  178. 1780  HOME : PRINT D$"PR#3": PRINT : HOME : & MAC: PRINT "AppleMate Installed": NEW 
  179. 1790  END 
  180. 1800  REM ------- Error Trap
  181. 1810  REM         routine 
  182. 1820  TEXT : POKE 34,6: HOME :ER =  PEEK(222)
  183. 1830 R$ = "APPLESOFT": IF ER >0  AND ER <22  THEN ER$ = "DISK"
  184. 1840 ER$ = ER$ +" ERROR": IF ER = 0  OR ER >21  THEN ER$ = ER$ +" # " + STR$(ER) +" AT LINE " + STR$( PEEK(218) + PEEK(219) *256): GOTO 1960
  185. 1850  IF ER = 4  THEN ER$ = ER$ +", DISK WRITE PROTECTED": GOTO 1960
  186. 1860  IF ER = 6  THEN ER$ = ER$ +", FILE NOT FOUND":F$ = "": GOTO 1960
  187. 1870  IF ER = 8  THEN ER$ = ER$ +", CHECK DISK IN DRIVE": GOTO 1960
  188. 1880  IF ER = 9  THEN ER$ = ER$ +", THIS DISK IS FULL": GOTO 1960
  189. 1890  IF ER = 10  THEN ER$ = ER$ +", THAT FILE IS LOCKED": GOTO 1960
  190. 1900  IF ER = 13  THEN ER$ = ER$ +", NOT A MACRO FILE": GOTO 1960
  191. 1910  IF ER = 16  OR ER = 11  THEN ER$ = ER$ +", DOS/PRODOS SYNTAX ERROR":F$ = "": GOTO 1960
  192. 1920 ER$ = ER$ +", UNKNOWN PROBLEM": GOTO 1960
  193. 1930  VTAB 15: PRINT "ERROR IN SETUP SECTION.  Check to see"
  194. 1940  PRINT "that all files have been correctly"
  195. 1950  PRINT "saved and all lines correctly keyed in.": END 
  196. 1960  VTAB 15: POKE 36,20 - LEN(ER$)/2 -.5: PRINT ER$"."
  197. 1970  VTAB 24: POKE 36,8: PRINT "Press RETURN to continue.";: POKE 49168,0: WAIT 49152,128: GOTO 580
  198. 1980  HOME : PRINT "THIS COMPUTER CANNOT RUN APPLEMATE"