home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib28a.dsk / APRIL.1986 / MCS.bas < prev    next >
BASIC Source File  |  2023-02-26  |  19KB  |  329 lines

  1. 10  REM  **********************
  2. 20  REM  * MOVIE CONSTRUCTION *
  3. 30  REM  * BY MIKE LINKOVICH  *
  4. 40  REM  * COPYRIGHT (C) 1986 *
  5. 50  REM  * BY MICROSPARC, INC *
  6. 60  REM  * CONCORD, MA  01742 *
  7. 70  REM  **********************
  8. 80  IF  PEEK(104) < >16  THEN  POKE 103,129: POKE 104,16: POKE 4224,0: PRINT  CHR$(4)"RUN MCS"
  9. 90  PRINT  CHR$(4)"BLOAD MCS.BIN"
  10. 100 LOWMEM = 97: IF  PEEK(48896) < >76  THEN  HIMEM: 16384
  11. 110  GOSUB 2550: XDRAW S AT X,Y
  12. 120  XDRAW OS AT OX,OY: XDRAW S AT X,Y
  13. 130 OX = X:OY = Y:OS = S
  14. 140 S = 1: IF X >10  AND Y >10  AND X <176  AND Y <176  THEN S = TL
  15. 150  IF CT = 3  THEN  GET A$:K =  ASC(A$): IF K = 3  OR K = 4  THEN  CALL BEEP: GOTO 150
  16. 160  GOSUB 2350: IF BT  THEN  GOSUB 180
  17. 170  ON (CT = 3) GOTO 120: GOTO 160
  18. 180 BT = 0: IF S < >TL  THEN 210
  19. 190  XDRAW OS AT OX,OY: XDRAW 4 AT  INT((X -10)/4) *4 +10, INT((Y -10)/4) *4 +10
  20. 200  XDRAW OS AT OX,OY: XDRAW 5 AT (X -10)/4 +231,(Y -10)/4 +10: RETURN 
  21. 210  IF X <210  OR Y <70  OR Y >81  OR X >266  THEN 280
  22. 220  IF X <228  THEN HR = 31:HL = 30:GF = 1
  23. 230  IF X <249  AND X >227  THEN HR = 34:HL = 33:GF = 2
  24. 240  IF X <266  AND X >248  THEN HR = 37:HL = 36:GF = 3
  25. 250  POKE 251,14: POKE DRW +1,56: POKE 252,70: POKE 253,81: POKE 254,HR: POKE 255,HL: CALL DRW
  26. 260  ON GF GOSUB 1300,1530,1540
  27. 270  POKE 251,14: POKE DRW +1,56: POKE 252,70: POKE 253,81: POKE 254,HR: POKE 255,HL: CALL DRW
  28. 280  IF X <210  OR X >265  OR Y <85  OR Y >96  THEN 360
  29. 290  IF X <228  THEN HR = 31:HL = 30:GF = 1
  30. 300  IF X <249  AND X >227  THEN HR = 34:HL = 33:GF = 2
  31. 310  IF X >248  THEN HR = 37:HL = 36:GF = 3
  32. 320  POKE 251,14: POKE DRW +1,56: POKE 252,85: POKE 253,96: POKE 254,HR: POKE 255,HL
  33. 330  CALL DRW: ON GF GOSUB 1720,1770,800
  34. 340  POKE 254,HR: POKE 255,HL: POKE 251,14: POKE DRW +1,56: POKE 252,85: POKE 253,96: CALL DRW
  35. 350  RETURN 
  36. 360  IF X <210  OR X >244  OR Y <100  OR Y >111  THEN 420
  37. 370  IF X <228  THEN HR = 31:HL = 30:GF = 1
  38. 380  IF X >227  THEN HR = 34:HL = 33:GF = 2
  39. 390  POKE 251,14: POKE DRW +1,56: POKE 252,100: POKE 253,111: POKE 254,HR: POKE 255,HL: CALL DRW: ON GF GOSUB 1810,1090
  40. 400  IF HR  THEN  POKE 251,14: POKE DRW +1,56: POKE 252,100: POKE 253,111: POKE 254,HR: POKE 255,HL: CALL DRW
  41. 410  RETURN 
  42. 420  IF X <252  OR X >265  OR Y <100  OR Y >111  THEN 480
  43. 430  POKE 251,14: POKE DRW +1,56: POKE 252,100: POKE 253,111: POKE 254,37: POKE 255,36: CALL DRW
  44. 440 TL =   NOT (TL -2) +2: HCOLOR= 3 *(TL = 2) +4
  45. 450  XDRAW 2 +(TL = 2) AT 255 +3 *(TL = 2),102 +3 *(TL = 2): XDRAW TL AT 255 +3 *(TL = 3),102 +3 *(TL = 3)
  46. 460  POKE 757,37: IF TL = 3  THEN  POKE 757,51
  47. 470  POKE 251,14: POKE DRW +1,56: POKE 252,100: POKE 253,111: POKE 254,37: POKE 255,36: CALL DRW: RETURN 
  48. 480  IF X <203  OR X >217  OR Y <5  OR Y >56  THEN  RETURN 
  49. 490  IF Y <18  THEN  POKE 252,5: POKE 253,16:G = 1
  50. 500  IF Y >17  AND Y <46  THEN  RETURN 
  51. 510  IF Y >45  THEN  POKE 252,45: POKE 253,56:G = 2
  52. 520  POKE 251,14: POKE DRW +1,56: POKE 254,30: POKE 255,29
  53. 530  CALL DRW: FOR D = 1 TO 40: NEXT D: CALL DRW
  54. 540  IF (AD = LOWMEM +1  AND G = 1)  OR (AD = MX  AND G = 2)  THEN  CALL BEEP: ON ( PEEK( -16286) >127) GOTO 680: RETURN 
  55. 550  POKE 252,10: POKE 253,51: POKE 254,38: POKE 255,33: IF AD <B +1  THEN  POKE 251,AD
  56. 560  IF AD >B  THEN  POKE 251,LOWMEM
  57. 570  CALL SCAN: IF AD >B  THEN  GOSUB 690
  58. 580  IF G = 1  THEN AD = AD -1
  59. 590  IF G = 2  THEN AD = AD +1
  60. 600  IF AM <AD  THEN AM = AD
  61. 610  IF AD >B  THEN  GOSUB 700
  62. 620  POKE MD,234: POKE MD +1,234
  63. 630  GOSUB 720: IF AD >B  THEN  POKE 251,LOWMEM
  64. 640  POKE 252,10: POKE 253,51: POKE 254,38: POKE 255,33: POKE DRW +1,0: IF AD <B +1  THEN  POKE 251,AD
  65. 650  CALL DRW
  66. 660  POKE MD,81: POKE MD +1,38
  67. 670  IF  PEEK( -16286) >127  AND AD <AM  AND LN$ < >"!"  THEN  ON CT GOTO 480,480,540
  68. 680  CALL XFR: HCOLOR= 3 *(TL = 2) +4: RETURN 
  69. 690  POKE 60,0: POKE 61,LOWMEM: POKE 62,255: POKE 63,LOWMEM: POKE 66,0: POKE 67,AD -(MAXMEM -7): POKE AUXMV,56: CALL AUXMV: RETURN 
  70. 700  POKE 60,0: POKE 61,AD -(MAXMEM -7): POKE 62,255: POKE 63,AD -(MAXMEM -7): POKE 66,0: POKE 67,LOWMEM: POKE AUXMV,24: CALL AUXMV: RETURN 
  71. 710  REM 
  72. 720 AD$ =  STR$(AD -LOWMEM): IF  LEN(AD$) <3  THEN AD$ = "0" +AD$: IF  LEN(AD$) <3  THEN AD$ = "0" +AD$
  73. 730  FOR C = 1 TO 3: POKE 251,14: POKE 252,27: POKE 253,33: POKE 254,27 +C: POKE 255,27 +C: POKE DRW +1, VAL( MID$ (AD$,C,1)) *7 +90: CALL DRW: NEXT 
  74. 740  RETURN 
  75. 750  HOME : FOR C = 6 TO 34: VTAB 6: HTAB C: PRINT U$: VTAB 19: HTAB C: PRINT U$: NEXT : FOR C = 7 TO 19: VTAB C: HTAB 5: PRINT LN$;: HTAB 35: PRINT LN$: NEXT : POKE 33,25: POKE 32,7: POKE 34,6: POKE 35,18: RETURN 
  76. 760 AC = 512:A$ = ""
  77. 770  IF  PEEK(AC) = 141  THEN  RETURN 
  78. 780  IF  PEEK(AC) <160  THEN AC = AC +1: GOTO 770
  79. 790 A$ = A$ + CHR$( PEEK(AC) -128):AC = AC +1: GOTO 770
  80. 800  GOSUB 750: POKE  -16300,0: POKE  -16303,0
  81. 810  HOME : INVERSE : VTAB 8: PRINT " FILM EDIT MENU          ": NORMAL 
  82. 820  VTAB 10: PRINT "(1) FILM SPEED (";256 -DL;")"
  83. 830  VTAB 11: PRINT "(2) REPEAT     (";: IF RP = 1  THEN  PRINT "Y";
  84. 840  IF RP = 0  THEN  PRINT "N";
  85. 850  PRINT ")"
  86. 860  VTAB 12: PRINT "(3) GOTO FRAME..."
  87. 870  VTAB 13: PRINT "(4) DIRECTION  (";: IF   NOT DN  THEN  PRINT ">)"
  88. 880  IF DN  THEN  PRINT "<)"
  89. 890  VTAB 15: PRINT "ESC LEAVE"
  90. 900  VTAB 18: PRINT "TYPE A NUMBER - ";
  91. 910  GET A$: IF A$ < >ESC$  AND (A$ <"1"  OR A$ >"4")  THEN  CALL BEEP: GOTO 910
  92. 920  IF A$ = ESC$  THEN  TEXT : POKE  -16304,0: POKE  -16299,0: HOME : RETURN 
  93. 930  ON  VAL(A$) GOSUB 940,970,980,1080: GOTO 810
  94. 940  VTAB 18: HTAB 1: PRINT "FILM SPEED (1-255) - ";
  95. 950  POKE 255,3: CALL INPT: GOSUB 760: ON (A$ = "") GOTO 960: ON ( VAL(A$) <1  OR  VAL(A$) >255) GOTO 940:DL = 256 - VAL(A$)
  96. 960  RETURN 
  97. 970 RP =   NOT RP: RETURN 
  98. 980  VTAB 18: HTAB 1: PRINT "GOTO FRAME (1-";AM -LOWMEM;") - ";: POKE 255, LEN( STR$(AM -LOWMEM)): CALL INPT: GOSUB 760
  99. 990  IF A$ = ""  THEN  RETURN 
  100. 1000  IF  VAL(A$) <1  OR  VAL(A$) >AM -LOWMEM  THEN  CALL BEEP: GOTO 980
  101. 1010  POKE 251,(AD <B +1) *AD: POKE 252,10: POKE 253,51: POKE 254,38: POKE 255,33: IF AD >B  THEN  POKE 251,LOWMEM
  102. 1020  CALL SCAN: IF AD >B  THEN  GOSUB 690
  103. 1030 AD =  VAL(A$) +LOWMEM: TEXT : POKE  -16304,0: POKE  -16299,0: HOME : POKE DRW +1,0: POKE MD,234: POKE MD +1,234
  104. 1040  IF AD >B  THEN  GOSUB 700: POKE 251,LOWMEM: GOTO 1060
  105. 1050  POKE 251,AD
  106. 1060  POKE 252,10: POKE 253,51: POKE 254,38: POKE 255,33: CALL DRW: CALL XFR: HCOLOR= 3 *(TL = 2) +4
  107. 1070  GOSUB 720: POKE MD,81: POKE MD +1,38: POP : RETURN 
  108. 1080 DN =   NOT DN: RETURN 
  109. 1090  POKE DRW +1,0: POKE 252,10: POKE 253,51: POKE 254,38: POKE 255,33
  110. 1100  IF AD <B +1  THEN  POKE 251,AD
  111. 1110  IF AD >B  THEN  POKE 251,LOWMEM
  112. 1120  CALL SCAN: IF AD >B  THEN  GOSUB 690
  113. 1130  POKE 252,10: POKE 253,51: POKE 254,38: POKE 255,33
  114. 1140  POKE MD,234: POKE MD +1,234
  115. 1150  IF DN  THEN 1210
  116. 1160  POKE 751,LOWMEM +1: POKE 764,8: POKE 765,DL: POKE 759,0: IF AM >B  THEN  POKE 759,AM -(MAXMEM -8): POKE 750,B +1
  117. 1170  POKE PZ,96: POKE PZ -11,238: IF AM <B +1  THEN  POKE 750,AM +1
  118. 1180  CALL PLAYER
  119. 1190  IF  PEEK( -16384) = 155  THEN  POKE  -16368,0: GOTO 1270
  120. 1200  ON RP GOTO 1160: GOTO 1270
  121. 1210  POKE 765,DL: POKE 759,0: POKE 750,LOWMEM: IF AM <B +1  THEN  POKE 751,AM
  122. 1220  IF AM >B  THEN  POKE 751,B: POKE 759,7: POKE 764,AM -(MAXMEM -7)
  123. 1230  POKE PZ -11,206: POKE PZ,234: IF AM <B +1  THEN  CALL PZ +1
  124. 1240  IF AM >B  THEN  CALL PZ -54
  125. 1250  IF  PEEK( -16384) = 155  THEN  POKE  -16368,0: GOTO 1270
  126. 1260  IF RP  THEN 1210
  127. 1270  IF AD >B  THEN  POKE 251,LOWMEM: GOSUB 700
  128. 1280  IF AD <B +1  THEN  POKE 251,AD
  129. 1290  CALL DRW: POKE MD,81: POKE MD +1,38: RETURN 
  130. 1300  POKE 251,96: POKE 252,10: POKE 253,51: POKE 254,38: POKE 255,33: CALL SCAN
  131. 1310  IF AD = AM  THEN AD = AD -(AD >LOWMEM +1): GOTO 1430
  132. 1320 G = AD: FOR C = AD +1 TO AM
  133. 1330  IF C >B  THEN 1380
  134. 1340  POKE 60,0: POKE 61,C
  135. 1350  POKE 62,255: POKE 63,C
  136. 1360  POKE 66,0: POKE 67,C -1: CALL MOVE
  137. 1370  NEXT : GOTO 1430
  138. 1380  IF C = B +1  THEN 1400
  139. 1390 AD = C: GOSUB 700:AD = C -1: GOSUB 690: NEXT :AD = G: GOTO 1430
  140. 1400 AD = B +1: GOSUB 700: POKE 60,0: POKE 61,LOWMEM
  141. 1410  POKE 62,255: POKE 63,LOWMEM: POKE 66,0: POKE 67,B: CALL MOVE
  142. 1420  GOTO 1370
  143. 1430  POKE 252,140: POKE 253,181: IF AM <B +1  THEN  POKE 251,AM
  144. 1440  IF AM >B  THEN  POKE 251,LOWMEM
  145. 1450  CALL SCAN: IF AM >B  THEN G = AD:AD = AM: GOSUB 690
  146. 1460  POKE 252,10: POKE 253,51
  147. 1470  IF AM >B  THEN AD = G
  148. 1480 AM = AM -(AM >LOWMEM +1)
  149. 1490  POKE MD,234: POKE MD +1,234: POKE DRW +1,0: IF AD <B +1  THEN  POKE 251,AD
  150. 1500  IF AD >B  THEN  GOSUB 700: POKE 251,LOWMEM
  151. 1510  CALL DRW: GOSUB 720: POKE MD,81: POKE MD +1,38
  152. 1520  CALL XFR: HCOLOR= 3 *(TL = 2) +4: RETURN 
  153. 1530  POKE 251,96: POKE 252,10: POKE 253,51: POKE 254,38: POKE 255,33: CALL SCAN: RETURN 
  154. 1540  IF AM <MX  THEN 1590
  155. 1550  CALL BEEP: CALL BEEP: TEXT : HOME : VTAB 10: PRINT "MEMORY IS FULL -- DO YOU WISH TO DELETE THE LAST FRAME (Y/N) - ";
  156. 1560  GET A$: IF A$ < >"Y"  AND A$ < >"N"  AND A$ < >ESC$  THEN  CALL BEEP: GOTO 1560
  157. 1570  POKE  -16299,0: POKE  -16304,0: IF A$ = ESC$  OR A$ = "N"  THEN  RETURN 
  158. 1580 AM = AM -(AM >LOWMEM +1)
  159. 1590 G = AD: FOR C = AM TO G  STEP  -1
  160. 1600  IF C >B -1  THEN 1640
  161. 1610  POKE 60,0: POKE 61,C
  162. 1620  POKE 62,255: POKE 63,C: POKE 66,0: POKE 67,C +1
  163. 1630  CALL MOVE: NEXT : GOTO 1670
  164. 1640  ON (C = B) GOTO 1650:AD = C: GOSUB 700:AD = C +1: GOSUB 690: NEXT : GOTO 1670
  165. 1650  POKE 60,0: POKE 61,B: POKE 62,255: POKE 63,B: POKE 66,0: POKE 67,LOWMEM: CALL MOVE
  166. 1660 AD = B +1: GOSUB 690: NEXT 
  167. 1670 AD = G: POKE MD,234: POKE MD +1,234
  168. 1680  POKE 251,96: POKE DRW +1,0: POKE 252,10: POKE 253,51: POKE 254,38: POKE 255,33: CALL DRW
  169. 1690  POKE MD,81: POKE MD +1,38
  170. 1700  CALL XFR: HCOLOR= 3 *(TL = 2) +4:AM = AM +(AM <MX)
  171. 1710  RETURN 
  172. 1720  POKE 251,96: POKE DRW +1,0
  173. 1730  POKE 252,10: POKE 253,51: POKE 254,38: POKE 255,33
  174. 1740  POKE MD,17: CALL DRW: POKE MD,81
  175. 1750  CALL XFR: HCOLOR= 3 *(TL = 2) +4: RETURN 
  176. 1760  REM 
  177. 1770  POKE 251,96: POKE DRW +1,0
  178. 1780  POKE 252,10: POKE 253,51: POKE 254,38: POKE 255,33
  179. 1790  POKE MD,234: POKE MD +1,234: CALL DRW: POKE MD,81: POKE MD +1,38
  180. 1800  CALL XFR: HCOLOR= 3 *(TL = 2) +4: RETURN 
  181. 1810  POKE 251,(AD <B +1) *AD: POKE 252,10: POKE 253,51: POKE 254,38: POKE 255,33: IF AD >B  THEN  POKE 251,LOWMEM
  182. 1820  CALL SCAN: IF AD >B  THEN  GOSUB 690
  183. 1830  HOME : GOSUB 750
  184. 1840  HOME : INVERSE : VTAB 8: PRINT " FILE MENU               ": NORMAL : IF FQ  THEN AM = LOWMEM +1:FQ = 0
  185. 1850  VTAB 10: IF AM >LOWMEM +1  THEN  PRINT "( )";
  186. 1860  IF AM = LOWMEM +1  THEN  PRINT "(1)";
  187. 1870  PRINT " LOAD..."
  188. 1880  VTAB 11: PRINT "(2) SAVE AS...": PRINT "(3) NEW FILM": PRINT "(4) DRIVE (";DV;")": PRINT "(5) QUIT"
  189. 1890  VTAB 16: PRINT "ESC LEAVE"
  190. 1900  POKE  -16300,0: POKE  -16303,0: VTAB 18: PRINT "TYPE A NUMBER - ";
  191. 1910  GET A$:G =  VAL(A$): IF (G <1  OR G >5)  AND A$ < >ESC$  OR G = 1  AND AM >LOWMEM +1  THEN  CALL BEEP: GOTO 1910
  192. 1920  IF G < >4  THEN  TEXT : HOME 
  193. 1930  IF G >2  THEN 2020
  194. 1940  IF A$ = ESC$  THEN 2030
  195. 1950  VTAB 22: HTAB 3: PRINT "FILENAME - FLM.";: POKE 255,21: CALL INPT: GOSUB 760:F$ = A$
  196. 1960  IF  LEN(F$) = 0  THEN 1810
  197. 1970  IF  LEFT$(F$,1) < >"?"  THEN 2010
  198. 1980  POKE 35,21: HOME : PRINT : IF  PEEK(48896) = 76  THEN  PRINT D$"CAT,D"DV: GOTO 2000
  199. 1990  PRINT D$"CATALOG",D"DV
  200. 2000  POKE 35,24: GOTO 1950
  201. 2010 FZ = G
  202. 2020  ON G GOSUB 2040,2160,2260,2300,2310: IF G = 4  THEN 1840
  203. 2030  TEXT : POKE  -16304,0: POKE  -16299,0: HOME : RETURN 
  204. 2040  VTAB 23: HTAB 3: PRINT "LOADING FILE... PLEASE WAIT.": PRINT D$"VERIFY FLM."F$",D"DV: PRINT D$"OPEN FLM."F$: PRINT D$"READ FLM."F$
  205. 2050  INPUT G
  206. 2060  IF  PEEK(48896) = 76  THEN  GOSUB 3200: GOTO 2120
  207. 2070  POKE RE +18,LOWMEM +1: IF G <B +2  THEN  POKE 751,G
  208. 2080  IF G >B +1  THEN  POKE 751,B +1
  209. 2090  CALL RE
  210. 2100  ON (G <B +2  OR MX = B) GOTO 2110: POKE 751,LOWMEM +1: FOR C = B +1 TO G -1: POKE RE +18,LOWMEM: CALL RE:AD = C: GOSUB 690: NEXT 
  211. 2110  PRINT : PRINT D$"CLOSE FLM."F$
  212. 2120 AD = LOWMEM +1:AM = G -1: IF AM >MX  THEN AM = MX
  213. 2130  ON (CT < >3) GOSUB 400: POKE DRW +1,0: POKE 251,AD: POKE 252,10: POKE 253,51: POKE 254,38: POKE 255,33
  214. 2140  POKE MD,234: POKE MD +1,234: CALL DRW: POKE MD,81: POKE MD +1,38: IF CT = 3  THEN  GOSUB 2540
  215. 2150  CALL XFR: HCOLOR= 3 *(TL = 2) +4: RETURN 
  216. 2160  VTAB 23: HTAB 3: PRINT "SAVING FILE... PLEASE WAIT.": PRINT : PRINT D$"OPEN FLM."F$",D"DV: PRINT D$"CLOSE FLM."F$: PRINT D$"DELETE FLM."F$: PRINT D$"OPEN FLM."F$: PRINT D$"WRITE FLM."F$
  217. 2170  PRINT AM +1
  218. 2180  POKE WR +13,LOWMEM +1: IF AM <B +1  THEN  POKE 751,AM +1
  219. 2190  IF AM >B  THEN  POKE 751,B +1
  220. 2200  CALL WR
  221. 2210  ON (AM <B +1) GOTO 2230
  222. 2220  POKE 751,LOWMEM +1: FOR AD = B +1 TO AM1: POKE WR +13,LOWMEM: GOSUB 700: CALL WR: NEXT 
  223. 2230 AD = LOWMEM +1: GOSUB 720: PRINT : PRINT D$"CLOSE FLM."F$
  224. 2240  GOSUB 3220: GOSUB 2130
  225. 2250  RETURN 
  226. 2260  VTAB 23: HTAB 1: PRINT "ERASES MEMORY; ARE YOU SURE? (Y/N) - ";: POKE 255,1: CALL INPT:A$ =  CHR$( PEEK(512) -128)
  227. 2270  IF A$ < >"Y"  AND A$ < >"N"  AND A$ < > CHR$(13)  THEN  CALL BEEP: GOTO 2260
  228. 2280  ON (A$ < >"Y") GOTO 2290: GOSUB 2760
  229. 2290 G = 20: RETURN 
  230. 2300 DV =   NOT (DV -1) +1: RETURN 
  231. 2310  VTAB 23: HTAB 1: PRINT "QUIT - ARE YOU SURE? (Y/N) - ";: POKE 255,1: CALL INPT:A$ =  CHR$( PEEK(512) -128)
  232. 2320  IF A$ < >"Y"  AND A$ < >"N"  AND A$ < > CHR$(13)  THEN  CALL BEEP: GOTO 2310
  233. 2330  IF A$ = "Y"  THEN  TEXT : HOME : POKE 216,0: END 
  234. 2340  RETURN 
  235. 2350 G =  FRE(9): ON CT GOTO 2360,2370,2380
  236. 2360  CALL CURS:BT =  PEEK( -16287) >127:X =  PEEK(752) + PEEK(753) *256:Y =  PEEK(754): RETURN 
  237. 2370  CALL CURS:BT = 1:X =  PEEK(752) + PEEK(753) *256:Y =  PEEK(754): RETURN 
  238. 2380  IF K = 8  OR K = 74  THEN X = X -4: IF X <0  THEN X = 0
  239. 2390  IF K = 21  OR K = 75  THEN X = X +4: IF X >279  THEN X = 279
  240. 2400  IF K = 10  OR K = 77  THEN Y = Y +4: IF Y >191  THEN Y = 191
  241. 2410  IF K = 11  OR K = 73  THEN Y = Y -4: IF Y <0  THEN Y = 0
  242. 2420  IF K = 32  THEN BT = 1
  243. 2430  IF K = 60  OR K = 62  THEN K = K -16
  244. 2440  IF K = 44  OR K = 46  THEN G = (K = 46) +1: GOSUB 2540: GOSUB 540: GOSUB 2540
  245. 2450  IF K = 5  THEN  GOSUB 2540: GOSUB 800: GOSUB 2540
  246. 2460  IF K = 13  THEN  GOSUB 1090
  247. 2470  IF K = 22  THEN  GOSUB 2540: GOSUB 1530: GOSUB 2540
  248. 2480  IF K = 24  THEN  GOSUB 2540: GOSUB 1300: GOSUB 2540
  249. 2490  IF K = 16  THEN  GOSUB 2540: GOSUB 1540: GOSUB 2540
  250. 2500  IF K = 20  THEN  GOSUB 2540: GOSUB 1720: GOSUB 2540
  251. 2510  IF K = 15  THEN  GOSUB 2540: GOSUB 1770: GOSUB 2540
  252. 2520  IF K = 6  THEN  GOSUB 2540: GOSUB 1810: IF G < >20  THEN  GOSUB 2540:G = 0
  253. 2530  RETURN 
  254. 2540  XDRAW OS AT OX,OY: RETURN 
  255. 2550  TEXT : HOME : NORMAL 
  256. 2560 MAXMEM = 149: IF  PEEK(48896) = 76  THEN MAXMEM = 143
  257. 2570  POKE 8,MAXMEM +1
  258. 2580  ONERR  GOTO 3040
  259. 2590 DRW = 2940:SCAN = 2990:XFR = 2263:BEEP = 3273:MOVE = 3287:CLRMEM = 2124:INPT = 2048:MD = 2957:RMOUSE = 2649:PRD = 2743:CURS = 2415:YNIT = 3060:VEC = 3088:WR = 3190:RE = 3228:AUXMV = 3268
  260. 2600 PLAYER = 2151:PZ = 2236:FXSTAK = 3307:IMOUSE = 3137:S = 1:OS = 1
  261. 2610 D$ =  CHR$(4):ESC$ =  CHR$(27):U$ =  CHR$(95):LN$ = "!": IF  PEEK(64435) = 6  THEN LN$ =  CHR$(124)
  262. 2620 OX = 0:X = 0:OY = 0:Y = 0:DL = 206:TL = 2:DV = 1
  263. 2630  FOR C = 1 TO 40: PRINT U$;: NEXT : VTAB 4: HTAB 1: FOR C = 1 TO 40: PRINT "=";: NEXT : VTAB 3
  264. 2640  PRINT "MOVIE CONSTRUCTION SET-BY MIKE LINKOVICH": HTAB 7: PRINT "COPYRIGHT 1986 MICROSPARC, INC";: POKE 34,5
  265. 2650  GOSUB 750: VTAB 8: INVERSE : PRINT " CONTROL MENU            ": NORMAL 
  266. 2660  VTAB 10: PRINT "(1) JOYSTICK": PRINT "(2) MOUSE": PRINT "(3) KEYBOARD"
  267. 2670  VTAB 18: PRINT "TYPE A NUMBER - ";
  268. 2680  GET A$:CT =  VAL(A$): IF CT <1  OR CT >3  THEN  CALL BEEP: GOTO 2680
  269. 2690  IF CT = 1  THEN  POKE 2416,183: POKE 2417,10
  270. 2700  IF CT = 2  THEN  POKE 2416,89: POKE 2417,10: CALL IMOUSE
  271. 2710  FOR C = 752 TO 765: POKE C,0: NEXT : POKE 756,28
  272. 2720  HOME : VTAB 8: INVERSE : PRINT " SYSTEM MENU             ": NORMAL 
  273. 2730  VTAB 10: PRINT "(1) 48 OR 64K SYSTEM": PRINT "(2) 128K SYSTEM": VTAB 18: PRINT "TYPE A NUMBER - ";
  274. 2740  GET A$: IF A$ <"1"  OR A$ >"2"  THEN  CALL BEEP: GOTO 2740
  275. 2750  TEXT :FW = 1:B = MAXMEM:MX = MAXMEM: IF A$ = "2"  THEN MX = 324
  276. 2760  HCOLOR= 4: HGR2 : HPLOT 0,0: CALL 62454: HCOLOR= 7
  277. 2770 AD = LOWMEM +1
  278. 2780  CALL 3060: GOSUB 2800: GOSUB 2990: IF FW  THEN  XDRAW S AT X,Y:FW = 0
  279. 2790  RETURN 
  280. 2800  HPLOT 8,8 TO 178,8 TO 178,178 TO 8,178 TO 8,8
  281. 2810  HPLOT 7,7 TO 179,7 TO 179,179 TO 7,179 TO 7,7
  282. 2820  HPLOT 5,5 TO 181,5 TO 181,181 TO 5,181 TO 5,5
  283. 2830  POKE 232,16: POKE 233,12: SCALE= 1: ROT= 0
  284. 2840  HPLOT 229,8 TO 274,8 TO 274,53 TO 229,53 TO 229,8: HPLOT 228,7 TO 275,7 TO 275,54 TO 228,54 TO 228,7
  285. 2850  HPLOT 226,5 TO 277,5 TO 277,56 TO 226,56 TO 226,5
  286. 2860  POKE 251,14: POKE DRW +1,0: POKE 252,45: POKE 253,56: POKE 254,30: POKE 255,29: CALL DRW
  287. 2870  POKE 251,14: POKE DRW +1,28: POKE 252,5: POKE 253,16: POKE 254,30: POKE 255,29: CALL DRW
  288. 2880  GOSUB 720
  289. 2890  HPLOT 194,24 TO 218,24 TO 218,36 TO 194,36 TO 194,24
  290. 2900  HPLOT 193,23 TO 219,23 TO 219,37 TO 193,37 TO 193,23
  291. 2910  REM 
  292. 2920  FOR C = 0 TO 56  STEP 28: POKE 251,13: POKE DRW +1,C: POKE 252,70: POKE 253,81: POKE 254,C/28 *3 +31: POKE 255,C/28 *3 +30: CALL DRW: NEXT 
  293. 2930  FOR C = 84 TO 140  STEP 28: POKE 251,13: POKE DRW +1,C: POKE 252,85: POKE 253,96: POKE 254,C/28 *3 +22: POKE 255,C/28 *3 +21: CALL DRW: NEXT 
  294. 2940  FOR C = 168 TO 196  STEP 28: POKE 251,13: POKE DRW +1,C: POKE 252,100: POKE 253,111: POKE 254,C/28 *3 +13: POKE 255,C/28 *3 +12: CALL DRW: NEXT 
  295. 2950  XDRAW TL AT 255 +3 *(TL = 3),102 +3 *(TL = 3)
  296. 2960  FOR C = 68 TO 113  STEP 15: HPLOT 207,C TO 270,C: NEXT : FOR C = 207 TO 270  STEP 21: HPLOT C,68 TO C,113: HPLOT C -1,68 TO C -1,113: HPLOT C -2,68 TO C -2,113: NEXT 
  297. 2970  HPLOT 205,67 TO 270,67: HPLOT 205,114 TO 270,114: HPLOT 203,65 TO 272,65 TO 272,116 TO 203,116 TO 203,65
  298. 2980  RETURN 
  299. 2990  CALL CLRMEM: IF MX = B  THEN 3020
  300. 3000  POKE AUXMV,56: FOR C = 8 TO 191
  301. 3010  POKE 60,0: POKE 61,96: POKE 62,255: POKE 63,96: POKE 66,0: POKE 67,C: CALL AUXMV: NEXT 
  302. 3020  DRAW S AT X,Y:HR = 0:HL = 0: POKE 757,37: IF TL = 3  THEN  POKE 757,51
  303. 3030 AD = LOWMEM +1:AM = LOWMEM +1: HCOLOR= 7 *(TL = 2): RETURN 
  304. 3040 ER =  PEEK(222):EL =  PEEK(218) + PEEK(219) *256:FQ = 0
  305. 3050  TEXT : HOME : CALL BEEP: GOSUB 750: INVERSE : VTAB 8: PRINT " ERROR": NORMAL 
  306. 3060  CALL  -3288
  307. 3070  IF ER >15  OR ER = 0  THEN  PRINT "APPLESOFT ERROR "ER: PRINT "LINE "EL: GOTO 3160
  308. 3080  PRINT "DOS ERROR :": PRINT : IF ER = 4  THEN  PRINT "WRITE PROTECTED"
  309. 3090  IF ER = 5  THEN  PRINT "I/O ERR"
  310. 3100  IF ER = 6  THEN  PRINT "NOT FOUND":FQ = 1
  311. 3110  IF ER = 8  THEN  PRINT "CHECK DRIVE"
  312. 3120  IF ER = 9  THEN  PRINT "FULL"
  313. 3130  IF ER = 10  THEN  PRINT "LOCKED"
  314. 3140  IF ER = 11  THEN  PRINT "BAD NAME"
  315. 3150  IF ER = 13  THEN  PRINT "TYPE MISMATCH"
  316. 3160  VTAB 18: PRINT "PRESS <RETURN>";: GET A$: CALL YNIT
  317. 3170  IF FZ = 1  THEN  GOSUB 2760: ON FQ GOSUB 2540:AD = LOWMEM +1:AM = AD +1: GOTO 2030
  318. 3180  IF ER >0  AND ER <14  THEN  GOSUB 3220: GOSUB 2130: IF FQ  THEN  GOSUB 2540
  319. 3190  GOTO 1840
  320. 3200  PRINT D$"CLOSE": IF G >B +1  THEN 3240
  321. 3210  PRINT D$"BLOAD FLM."F$",A"(LOWMEM +1) *256",B4,E"G *256",TTXT": CALL 4128
  322. 3220  HCOLOR= 4: HGR2 : HPLOT 0,0: CALL 62454: HCOLOR= 7: GOSUB 2800: XDRAW S AT X,Y
  323. 3230  RETURN 
  324. 3240  PRINT D$"BLOAD FLM."F$",A"(LOWMEM +1) *256",B4,E"(B +1) *256",            TTXT": CALL 4128
  325. 3250  IF MX = MAXMEM GOTO 3290
  326. 3260  POKE 751,LOWMEM +1: FOR C = B +1 TO G -1
  327. 3270  PRINT D$"BLOAD FLM."F$",A"LOWMEM *256",B"(C -(LOWMEM +1)) *256 +4",L256,TTXT": CALL 4164
  328. 3280 AD = C: GOSUB 690: NEXT 
  329. 3290 AD = LOWMEM +1: GOTO 3220