home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib27a.dsk / JANUARY.1986 / NIB.CALC.ORIG.bas < prev    next >
BASIC Source File  |  2023-02-26  |  19KB  |  454 lines

  1. 10  REM **********************
  2. 20  REM *    NIBBLE.CALC     *
  3. 30  REM *  BY NEWTON S. LEE  *
  4. 40  REM * COPYRIGHT (C) 1986 *
  5. 50  REM * BY MICROSPARC, INC *
  6. 60  REM * CONCORD, MA  01742 *
  7. 70  REM **********************
  8. 80 D$ =  CHR$(4):UL$ =  CHR$(95):LB$ =  CHR$(91)
  9. 90  DIM A$(100),LA%(5),UA%(5),P%(5),T$(5),M(6)
  10. 100 LA%(1) = 3310:UA%(1) = 3510:LA%(2) = 3550:UA%(2) = 3750:LA%(3) = 3790:UA%(3) = 3990:LA%(4) = 4030:UA%(4) = 4230:LA%(5) = 4270:UA%(5) = 4470
  11. 110  GOSUB 4850: REM  - READ INFO -
  12. 120  GOSUB 4990: REM  - READ MEMORY -
  13. 130  GOSUB 5210: REM  - DISPLAY -
  14. 140 M% = 0
  15. 150 PI = 3.141592654
  16. 160  GOSUB 5590: GOTO 1410
  17. 170  REM 
  18. 180  REM  - BEGIN -
  19. 190  REM 
  20. 200  GOSUB 1520: GOSUB 1730: REM  -GET TV$-
  21. 210  IF  LEN(TV$) >0  THEN DV$ = TV$
  22. 220 K% = 0: ONERR  GOTO 4580
  23. 230  IF C$ = "V"  THEN  GOSUB 1490: GET C$: GOTO 720
  24. 240  IF C$ = "S"  THEN 460
  25. 250  IF C$ = "C"  THEN 480
  26. 260  IF C$ = "T"  THEN 500
  27. 270  IF C$ = "I"  THEN 520
  28. 280  IF C$ = "R"  THEN 530
  29. 290  IF C$ = "A"  THEN 540
  30. 300  IF C$ = "Q"  THEN 550
  31. 310  IF C$ = "X"  THEN 560
  32. 320  IF C$ = "L"  THEN 570
  33. 330  IF C$ = "M"  THEN 580
  34. 340  IF C$ = "N"  THEN 630
  35. 350  IF C$ = "O"  THEN 660
  36. 360  IF C$ = "H"  THEN 690
  37. 370  IF C$ = "D"  THEN 1210
  38. 380  IF C$ = "K"  THEN 1240
  39. 390  IF C$ = "P"  THEN  GOSUB 5110: GOSUB 1930: GOSUB 5210: GOTO 1410
  40. 400  IF C$ = "#"  THEN  GOSUB 5110: GOSUB 2140: GOSUB 5210: GOTO 1410
  41. 410  IF C$ = "+"  OR C$ = "-"  OR C$ = "*"  OR C$ = "/"  THEN 1290
  42. 420  IF C$ = "="  OR C$ =  CHR$(13)  THEN 200
  43. 430  IF C$ =  CHR$(27)  THEN 5100
  44. 440  IF C$ = "@"  THEN M% = M% +1:M% =  INT((M%/2 - INT(M%/2)) *2 +.05)
  45. 450  PRINT  CHR$(7): GOTO 200
  46. 460  IF M% = 0  THEN DV$ =  STR$( VAL(DV$) *PI/180)
  47. 470 DV$ =  STR$( SIN( VAL(DV$))): GOTO 1410
  48. 480  IF M% = 0  THEN DV$ =  STR$( VAL(DV$) *PI/180)
  49. 490 DV$ =  STR$( COS( VAL(DV$))): GOTO 1410
  50. 500  IF M% = 0  THEN DV$ =  STR$( VAL(DV$) *PI/180)
  51. 510 DV$ =  STR$( TAN( VAL(DV$))): GOTO 1410
  52. 520 DV$ =  STR$( INT( VAL(DV$))): GOTO 1410
  53. 530 DV$ =  STR$( RND( VAL(DV$))): GOTO 1410
  54. 540 DV$ =  STR$( ABS( VAL(DV$))): GOTO 1410
  55. 550 DV$ =  STR$( SQR( VAL(DV$))): GOTO 1410
  56. 560 DV$ =  STR$( EXP( VAL(DV$))): GOTO 1410
  57. 570 DV$ =  STR$( LOG( VAL(DV$))): GOTO 1410
  58. 580  GOSUB 1730: IF  LEN(TV$) = 0  THEN TV$ = DV$
  59. 590  IF C$ = "K"  THEN  GOSUB 1610
  60. 600 DV =  VAL(DV$):TV =  VAL(TV$):DV$ =  STR$( INT((DV/TV - INT(DV/TV)) *TV +.05) * SGN(DV/TV))
  61. 610  IF K% = 1  THEN  GOSUB 1680: GOTO 1410
  62. 620  GOTO 1450
  63. 630 DV =  VAL(DV$)
  64. 640 DV$ =  STR$(( EXP(DV) - EXP( -DV))/2)
  65. 650  GOTO 1410
  66. 660 DV =  VAL(DV$)
  67. 670 DV$ =  STR$(( EXP(DV) + EXP( -DV))/2)
  68. 680  GOTO 1410
  69. 690 DV =  VAL(DV$)
  70. 700 DV$ =  STR$( - EXP( -DV)/( EXP(DV) + EXP( -DV)) *2 +1)
  71. 710  GOTO 1410
  72. 720  IF C$ = "S"  THEN 860
  73. 730  IF C$ = "C"  THEN 900
  74. 740  IF C$ = "T"  THEN 940
  75. 750  IF C$ = "I"  THEN 960
  76. 760  IF C$ = "R"  THEN 970
  77. 770  IF C$ = "A"  THEN 990
  78. 780  IF C$ = "Q"  THEN 1040
  79. 790  IF C$ = "X"  THEN 1050
  80. 800  IF C$ = "L"  THEN 1060
  81. 810  IF C$ = "M"  THEN 1070
  82. 820  IF C$ = "N"  THEN 1120
  83. 830  IF C$ = "O"  THEN 1150
  84. 840  IF C$ = "H"  THEN 1180
  85. 850  GOTO 200
  86. 860 DV =  VAL(DV$): IF DV = 1  THEN DV$ =  STR$(1.570796327): GOTO 880
  87. 870 DV$ =  STR$( ATN(DV/ SQR( -DV *DV +1)))
  88. 880  IF M% = 0  THEN DV$ =  STR$( VAL(DV$) *180/PI)
  89. 890  GOTO 1410
  90. 900 DV =  VAL(DV$): IF DV = 1  THEN DV$ =  STR$(0): GOTO 920
  91. 910 DV$ =  STR$( - ATN(DV/ SQR( -DV *DV +1)) +1.5708)
  92. 920  IF M% = 0  THEN DV$ =  STR$( VAL(DV$) *180/PI)
  93. 930  GOTO 1410
  94. 940 DV$ =  STR$( ATN( VAL(DV$))): IF M% = 0  THEN DV$ =  STR$( VAL(DV$) *180/PI)
  95. 950  GOTO 1410
  96. 960 DV$ =  STR$(1/ VAL(DV$)): GOTO 1410
  97. 970 DV = 1: FOR I = 1 TO  VAL(DV$):DV = DV *I: NEXT :DV$ =  STR$(DV)
  98. 980  GOTO 1410
  99. 990  GOSUB 1730: IF  LEN(TV$) = 0  THEN TV$ = DV$
  100. 1000  IF C$ = "K"  THEN  GOSUB 1610
  101. 1010 DV$ =  STR$( VAL(DV$) ^ VAL(TV$))
  102. 1020  IF K% = 1  THEN  GOSUB 1680: GOTO 1410
  103. 1030  GOTO 1450
  104. 1040 DV$ =  STR$( VAL(DV$) * VAL(DV$)): GOTO 1410
  105. 1050 DV$ =  STR$( LOG( VAL(DV$))/ LOG(10)): GOTO 1410
  106. 1060 DV$ =  STR$(10 ^ VAL(DV$)): GOTO 1410
  107. 1070  GOSUB 1730: IF  LEN(TV$) = 0  THEN TV$ = DV$
  108. 1080  IF C$ = "K"  THEN  GOSUB 1610
  109. 1090 DV$ =  STR$( VAL(DV$) ^(1/ VAL(TV$)))
  110. 1100  IF K% = 1  THEN  GOSUB 1680: GOTO 1410
  111. 1110  GOTO 1450
  112. 1120 DV =  VAL(DV$)
  113. 1130 DV$ =  STR$( LOG(DV + SQR(DV *DV +1)))
  114. 1140  GOTO 1410
  115. 1150 DV =  VAL(DV$)
  116. 1160 DV$ =  STR$( LOG(DV + SQR(DV *DV -1)))
  117. 1170  GOTO 1410
  118. 1180 DV =  VAL(DV$)
  119. 1190 DV$ =  STR$( LOG((1 +DV)/(1 -DV))/2)
  120. 1200  GOTO 1410
  121. 1210  HTAB 22: FOR I = 1 TO 15: PRINT " ";: NEXT 
  122. 1220  HTAB 22: PRINT "0";:DV$ = "0"
  123. 1230  GOTO 200
  124. 1240 COL% =  POS(0): VTAB 14: HTAB 28: FLASH : PRINT "K";: NORMAL : VTAB 11: HTAB COL% +1: GET C$:COL% =  POS(0): VTAB 14: HTAB 28: INVERSE : PRINT "K";: NORMAL : VTAB 11: HTAB COL% +1: IF C$ < >"S"  AND C$ < >"R"  THEN  PRINT  CHR$(7);: GOTO 200
  125. 1250 COL% =  POS(0): VTAB 14: HTAB 30 +4 *(C$ = "R"): FLASH : PRINT C$;: NORMAL : VTAB 11: HTAB COL% +1: GET N$: VTAB 14: HTAB 30 +4 *(C$ = "R"): INVERSE : PRINT C$;: NORMAL : VTAB 11: HTAB COL% +1: IF N$ <"1"  OR N$ >"6"  THEN  PRINT  CHR$(7);: GOTO 200
  126. 1260  IF C$ = "S"  THEN M( VAL(N$)) =  VAL(DV$)
  127. 1270  IF C$ = "R"  THEN DV$ =  STR$(M( VAL(N$)))
  128. 1280  GOSUB 5520: GOTO 1410
  129. 1290 TC$ = C$: GOSUB 1730: IF  LEN(TV$) = 0  THEN TV$ = DV$
  130. 1300  IF C$ = "K"  THEN  GOSUB 1610
  131. 1310  IF TC$ = "+"  THEN DV$ =  STR$( VAL(DV$) + VAL(TV$))
  132. 1320  IF TC$ = "-"  THEN DV$ =  STR$( VAL(DV$) - VAL(TV$))
  133. 1330  IF TC$ = "*"  THEN DV$ =  STR$( VAL(DV$) * VAL(TV$))
  134. 1340  IF TC$ = "/"  THEN DV$ =  STR$( VAL(DV$)/ VAL(TV$))
  135. 1350  IF K% = 1  THEN  GOSUB 1680: GOTO 1410
  136. 1360  GOTO 1450
  137. 1370  CALL  -3288: POKE 216,0: HOME : VTAB 12: PRINT "ERROR #" PEEK(222)" IN LINE " PEEK(218) +256 * PEEK(219): PRINT : INPUT "DO YOU WANT TO TRY AGAIN? ";YN$: ON (YN$ = "Y") GOTO 5110: RETURN 
  138. 1380  REM 
  139. 1390  REM  - DISPLAY DV$ -
  140. 1400  REM 
  141. 1410 PC% = 0:EC% = 0: VTAB 11: HTAB 22: PRINT DV$;
  142. 1420  IF  LEN(DV$) = 15  THEN 200
  143. 1430  FOR I = 1 TO 15 - LEN(DV$): PRINT " ";: NEXT 
  144. 1440  GOTO 200
  145. 1450 PC% = 0:EC% = 0: VTAB 11: HTAB 22: PRINT DV$;
  146. 1460  IF  LEN(DV$) = 15  THEN 220
  147. 1470  FOR I = 1 TO 15 - LEN(DV$): PRINT " ";: NEXT 
  148. 1480  HTAB 22: GOTO 220
  149. 1490 COL% =  POS(0)
  150. 1500  VTAB 4: HTAB 2: PRINT "  ";: HTAB 7: FLASH : PRINT ">>";: NORMAL : VTAB 11: HTAB COL% +1
  151. 1510  RETURN 
  152. 1520 COL% =  POS(0)
  153. 1530  VTAB 4: HTAB 2: INVERSE : PRINT "<<";: NORMAL : HTAB 7: PRINT "  ";
  154. 1540  IF M% = 0  THEN  VTAB 23: HTAB 28: INVERSE : PRINT "DEG";: NORMAL : PRINT " RAD";
  155. 1550  IF M% = 1  THEN  VTAB 23: HTAB 28: NORMAL : PRINT "DEG ";: INVERSE : PRINT "RAD";
  156. 1560  NORMAL : VTAB 11: HTAB COL% +1
  157. 1570  RETURN 
  158. 1580  REM 
  159. 1590  REM  - HANDLE K STO/RCL REQ -
  160. 1600  REM 
  161. 1610 COL% =  POS(0): VTAB 14: HTAB 28: FLASH : PRINT "K";: NORMAL : VTAB 11: HTAB COL% +1: GET C$:COL% =  POS(0): VTAB 14: HTAB 28: INVERSE : PRINT "K";: NORMAL : VTAB 11: HTAB COL% +1: IF C$ < >"R"  AND C$ < >"S"  THEN  PRINT  CHR$(7);:K% = 0: RETURN 
  162. 1620 COL% =  POS(0): VTAB 14: HTAB 30 +4 *(C$ = "R"): FLASH : PRINT C$;: NORMAL : VTAB 11: HTAB COL% +1: GET N$: VTAB 14: HTAB 30 +4 *(C$ = "R"): INVERSE : PRINT C$;: NORMAL : VTAB 11: HTAB COL% +1: IF N$ <"1"  OR N$ >"6"  THEN  PRINT  CHR$(7);:K% = 0: RETURN 
  163. 1630  IF C$ = "S"  THEN K% = 1:C$ =  CHR$(13): RETURN 
  164. 1640  IF C$ = "R"  THEN TV$ =  STR$(M( VAL(N$))):K% = 0:C$ =  CHR$(13): RETURN 
  165. 1650  REM 
  166. 1660  REM  - HANDLE K STO -
  167. 1670  REM 
  168. 1680 M( VAL(N$)) =  VAL(DV$): GOSUB 5520
  169. 1690  RETURN 
  170. 1700  REM 
  171. 1710  REM  - GET TV$ -
  172. 1720  REM 
  173. 1730  VTAB 11: HTAB 22:TV$ = "":PC% = 0:EC% = 0
  174. 1740  GET C$
  175. 1750  IF (C$ <"0"  OR C$ >"9")  AND C$ < >"."  AND C$ < > CHR$(8)  AND C$ < >"E"  AND C$ < >"U"  THEN  RETURN 
  176. 1760  IF  LEN(TV$) = 15  THEN 1810
  177. 1770  IF (C$ > = "0"  AND C$ < = "9")  OR (C$ = "."  AND PC% = 0  AND EC% = 0)  OR (C$ = "E"  AND EC% = 0)  THEN  PRINT C$;:TV$ = TV$ +C$: IF  POS(0) = 22  THEN  GOSUB 1880:TV$ = C$: PRINT C$;
  178. 1780  IF C$ = "U"  AND ( LEN(TV$) = 0  OR  RIGHT$(TV$,1) = "E")  THEN  PRINT "-";:TV$ = TV$ +"-": IF  POS(0) = 22  THEN  GOSUB 1880:TV$ = "-": PRINT "-";
  179. 1790  IF C$ = "E"  AND EC% = 0  THEN EC% = 1
  180. 1800  IF C$ = "."  AND EC% = 0  AND PC% = 0  THEN PC% = 1
  181. 1810  IF C$ < > CHR$(8)  OR  LEN(TV$) = 0  THEN 1740
  182. 1820  PRINT  CHR$(8);: PRINT " ";: PRINT  CHR$(8);
  183. 1830  IF  RIGHT$(TV$,1) = "E"  THEN EC% = 0
  184. 1840  IF  RIGHT$(TV$,1) = "."  THEN PC% = 0
  185. 1850  IF  LEN(TV$) = 1  THEN TV$ = ""
  186. 1860  IF  LEN(TV$) >1  THEN TV$ =  LEFT$(TV$, LEN(TV$) -1)
  187. 1870  GOTO 1740
  188. 1880  FOR I = 1 TO 15: PRINT " ";: NEXT : HTAB 22
  189. 1890  RETURN 
  190. 1900  REM 
  191. 1910  REM  - RUN PROGRAM -
  192. 1920  REM 
  193. 1930  HOME : VTAB 2: HTAB 15: INVERSE : PRINT " RUN PROGRAM ": NORMAL 
  194. 1940 J = 1
  195. 1950  FOR I = 1 TO 5
  196. 1960 J = J +3: VTAB J: HTAB 1
  197. 1970  IF P%(I) = 1  THEN  INVERSE : PRINT " ";: NORMAL 
  198. 1980  IF P%(I) = 0  THEN  PRINT " ";
  199. 1990  PRINT " PROGRAM ";I
  200. 2000  PRINT "  TAG = ";T$(I)
  201. 2010  NEXT 
  202. 2020  PRINT : INVERSE : PRINT " ";: NORMAL : PRINT " <ESC> TO QUIT"
  203. 2030  VTAB 22: HTAB 1: PRINT "  PROGRAM";LB$;"1-5]: ";: GET N$: PRINT N$;
  204. 2040  IF N$ =  CHR$(27)  THEN  RETURN 
  205. 2050 N =  VAL(N$): IF N <1  OR N >5  THEN  PRINT  CHR$(7);: GOTO 2030
  206. 2060  IF P%(N) = 0  THEN 2090
  207. 2070  HOME : ONERR  GOTO 4550
  208. 2080  ON N GOTO 3300,3540,3780,4020,4260
  209. 2090  VTAB 22: HTAB 2: FLASH : PRINT  CHR$(7);" PROGRAM ";N;" IS EMPTY ": NORMAL 
  210. 2100  FOR I = 1 TO 500: NEXT I: RETURN 
  211. 2110  REM 
  212. 2120  REM  - PROGRAMMING ROUTINE -
  213. 2130  REM 
  214. 2140  HOME : INVERSE : VTAB 1: HTAB 15: PRINT " PROGRAMMING ": NORMAL 
  215. 2150 J = 1
  216. 2160  FOR I = 1 TO 5
  217. 2170 J = J +3: VTAB J: HTAB 1
  218. 2180  IF P%(I) = 1  THEN  INVERSE : PRINT " ";: NORMAL 
  219. 2190  IF P%(I) = 0  THEN  PRINT " ";
  220. 2200  PRINT " PROGRAM ";I
  221. 2210  PRINT "  TAG = ";T$(I)
  222. 2220  NEXT 
  223. 2230  PRINT : INVERSE : PRINT " ";: NORMAL : PRINT " <ESC> TO QUIT"
  224. 2240  VTAB 22: HTAB 1: PRINT "  PROGRAM";LB$;"1-5]: ";: GET N$: PRINT N$;
  225. 2250  IF N$ =  CHR$(27)  THEN  RETURN 
  226. 2260 N =  VAL(N$): IF N <1  OR N >5  THEN  PRINT  CHR$(7);: GOTO 2240
  227. 2270  IF P%(N) = 0  THEN  GOSUB 2320: GOTO 3030
  228. 2280  IF P%(N) = 1  THEN  GOSUB 2460: RETURN 
  229. 2290  REM 
  230. 2300  REM  - ENTER NEW PROGRAM -
  231. 2310  REM 
  232. 2320  HOME : INPUT "TAG = ";T$(N): IF  LEN(T$(N)) >70  THEN T$(N) =  LEFT$(T$(N),70)
  233. 2330  HOME : INVERSE : PRINT "ENTER YOUR PROGRAM #";N;": ";LB$;"";LA%(N);"-";UA%(N);"]"
  234. 2340  PRINT LB$;" BLANK LINE = FINISH; Q = QUIT ]": NORMAL 
  235. 2350 I = 1:P%(N) = 1
  236. 2360  INPUT "";A$(I)
  237. 2370  IF  LEFT$(A$(I),1) = "Q"  THEN  RUN 
  238. 2380  IF  LEN(A$(I)) = 0  THEN  RETURN 
  239. 2390  IF  VAL(A$(I)) <LA%(N)  OR  VAL(A$(I)) >UA%(N)  THEN  PRINT  CHR$(7);"LINE NUM OUT OF RANGE ";LB$;"";LA%(N);"-";UA%(N);"]": PRINT "RETYPE LINE:":I = I -1
  240. 2400  IF I = 100  THEN  RETURN 
  241. 2410 I = I +1
  242. 2420  GOTO 2360
  243. 2430  REM 
  244. 2440  REM  - EDIT OLD PROGRAM -
  245. 2450  REM 
  246. 2460  HOME 
  247. 2470  VTAB 1: HTAB 1: INVERSE : PRINT "EDIT> L(IST T(AG C(HANGE E(RASE Q(UIT ";: NORMAL : GET C$: PRINT C$;
  248. 2480  IF C$ < >"L"  THEN 2560
  249. 2490  HOME 
  250. 2500  ON N GOTO 2510,2520,2530,2540,2550
  251. 2510  LIST 3310,3510: GOTO 2470
  252. 2520  LIST 3550,3750: GOTO 2470
  253. 2530  LIST 3790,3990: GOTO 2470
  254. 2540  LIST 4030,4230: GOTO 2470
  255. 2550  LIST 4270,4470: GOTO 2470
  256. 2560  IF C$ < >"C"  THEN 2760
  257. 2570  HOME : INVERSE : PRINT "CHANGE> ENTER LINE(S): ";LB$;"";LA%(N);"-";UA%(N);"]"
  258. 2580  PRINT LB$;" BLANK LINE = FINISH; Q = QUIT ]": NORMAL 
  259. 2590  GOSUB 2350
  260. 2600  PRINT D$;"OPEN CAL." +N$
  261. 2610  PRINT D$;"CLOSE CAL." +N$: PRINT D$;"DELETE CAL." +N$
  262. 2620  PRINT D$;"OPEN CAL." +N$
  263. 2630  PRINT D$;"WRITE CAL." +N$
  264. 2640  PRINT "DEL " + STR$(LA%(N)) +"," + STR$(UA%(N))
  265. 2650  IF N = 1  THEN  LIST 3310,3510
  266. 2660  IF N = 2  THEN  LIST 3550,3750
  267. 2670  IF N = 3  THEN  LIST 3790,3990
  268. 2680  IF N = 4  THEN  LIST 4030,4230
  269. 2690  IF N = 5  THEN  LIST 4270,4470
  270. 2700  FOR J = 1 TO I
  271. 2710  PRINT A$(J)
  272. 2720  NEXT 
  273. 2730  PRINT "RUN"
  274. 2740  PRINT D$;"CLOSE CAL." +N$
  275. 2750  GOTO 3220
  276. 2760  IF C$ < >"E"  THEN 2910
  277. 2770  HOME : PRINT "ERASE> READY TO ERASE PROGRAM #";N: PRINT "PRESS <RETURN> TO CONFIRM DELETION": PRINT "   OR <ESC> TO REJECT DELETION"
  278. 2780  GET C$
  279. 2790  IF C$ < > CHR$(13)  AND C$ < > CHR$(27)  THEN  PRINT  CHR$(7);: GOTO 2770
  280. 2800  PRINT C$;
  281. 2810  IF C$ =  CHR$(27)  THEN  HOME : GOTO 2470
  282. 2820 D$ =  CHR$(4)
  283. 2830  PRINT D$;"OPEN CAL." +N$
  284. 2840  PRINT D$;"CLOSE CAL." +N$: PRINT D$;"DELETE CAL." +N$
  285. 2850 P%( VAL(N$)) = 0:T$( VAL(N$)) = ""
  286. 2860  PRINT D$;"OPEN CAL.INFO"
  287. 2870  PRINT D$;"WRITE CAL.INFO"
  288. 2880  FOR I = 1 TO 5: PRINT P%(I): PRINT T$(I): NEXT 
  289. 2890  PRINT D$;"CLOSE CAL.INFO"
  290. 2900  RUN 
  291. 2910  IF C$ < >"Q"  THEN 2930
  292. 2920  RETURN 
  293. 2930  IF C$ < >"T"  THEN  PRINT  CHR$(7);: GOTO 2470
  294. 2940  HOME : INPUT "TAG = ";T$(N)
  295. 2950  PRINT D$;"OPEN CAL.INFO"
  296. 2960  PRINT D$;"WRITE CAL.INFO"
  297. 2970  FOR L = 1 TO 5: PRINT P%(L): PRINT T$(L): NEXT 
  298. 2980  PRINT D$;"CLOSE CAL.INFO"
  299. 2990  GOTO 2470
  300. 3000  REM 
  301. 3010  REM  - SAVE PROGRAM -
  302. 3020  REM 
  303. 3030  PRINT D$;"OPEN CAL." +N$
  304. 3040  PRINT D$;"CLOSE CAL." +N$: PRINT D$;"DELETE C<CTRL-A>AL." +N$
  305. 3050  PRINT D$;"OPEN CAL." +N$
  306. 3060  PRINT D$;"WRITE CAL." +N$
  307. 3070  PRINT "DEL " + STR$(LA%(N)) +"," + STR$(UA%(N))
  308. 3080  FOR J = 1 TO I -1
  309. 3090  PRINT A$(J)
  310. 3100  NEXT 
  311. 3110  PRINT "RUN"
  312. 3120  PRINT D$;"CLOSE CAL." +N$
  313. 3130  PRINT D$;"OPEN CAL.INFO"
  314. 3140  PRINT D$;"WRITE CAL.INFO"
  315. 3150  FOR J = 1 TO 5
  316. 3160  PRINT P%(J): PRINT T$(J)
  317. 3170  NEXT 
  318. 3180  PRINT D$;"CLOSE CAL.INFO"
  319. 3190  REM 
  320. 3200  REM  -- SCHEDULE EXEC --
  321. 3210  REM 
  322. 3220  PRINT D$;"EXEC CAL." +N$
  323. 3230  END 
  324. 3270  REM 
  325. 3280  REM  - BUFFER AREA BEGINS -
  326. 3290  REM  -1-
  327. 3300 N =  VAL(DV$): GOSUB 5620: CLEAR : GOSUB 5590
  328. 3520  GOTO 4490
  329. 3530  REM  -2-
  330. 3540 N =  VAL(DV$): GOSUB 5620: CLEAR : GOSUB 5590
  331. 3760  GOTO 4490
  332. 3770  REM  -3-
  333. 3780 N =  VAL(DV$): GOSUB 5620: CLEAR : GOSUB 5590
  334. 4000  GOTO 4490
  335. 4010  REM  -4-
  336. 4020 N =  VAL(DV$): GOSUB 5620: CLEAR : GOSUB 5590
  337. 4240  GOTO 4490
  338. 4250  REM  -5-
  339. 4260 N =  VAL(DV$): GOSUB 5620: CLEAR : GOSUB 5590
  340. 4480  GOTO 4490
  341. 4490  PRINT : PRINT "PRESS ANY KEY TO CONTINUE ";: GET K$
  342. 4500  PRINT K$;
  343. 4510  POKE 216,0: GOSUB 5620: RUN 
  344. 4520  REM 
  345. 4530  REM  - HANDLE ERROR -
  346. 4540  REM 
  347. 4550 L =  PEEK(218) + PEEK(219) *256
  348. 4560  PRINT  CHR$(7);"ERROR IN LINE NUMBER ";L
  349. 4570  GOSUB 4600: PRINT E$: GOTO 4790
  350. 4580  HTAB 21: GOSUB 4600: PRINT  CHR$(7); LEFT$(E$,16);: GET C$
  351. 4590  HTAB 21: FOR I = 1 TO 16: PRINT " ";: NEXT : HTAB 22: CALL  -3288: GOTO 160
  352. 4600 E =  PEEK(222)
  353. 4610  IF E = 0  THEN E$ = "NEXT WITHOUT FOR"
  354. 4620  IF E = 16  THEN E$ = "SYNTAX ERROR     "
  355. 4630  IF E = 22  THEN E$ = "RETURN WITHOUT GOSUB"
  356. 4640  IF E = 42  THEN E$ = "OUT OF DATA      ": REM  6 SPACES
  357. 4650  IF E = 53  THEN E$ = "ILLEGAL QUANTITY"
  358. 4660  IF E = 69  THEN E$ = "OVERFLOW        ": REM  8 SPACES
  359. 4670  IF E = 77  THEN E$ = "OUT OF MEMORY   "
  360. 4680  IF E = 90  THEN E$ = "UNDEFINED STATEMENT"
  361. 4690  IF E = 107  THEN E$ = "BAD SUBSCRIPT  "
  362. 4700  IF E = 120  THEN E$ = "REDIMENSIONED ARRAY"
  363. 4710  IF E = 133  THEN E$ = "DIVISION BY ZERO"
  364. 4720  IF E = 163  THEN E$ = "TYPE MISMATCH  "
  365. 4730  IF E = 176  THEN E$ = "STRING TOO LONG"
  366. 4740  IF E = 191  THEN E$ = "FORMULA TOO COMPLEX"
  367. 4750  IF E = 224  THEN E$ = "UNDEFINED FUNCTION"
  368. 4760  IF E = 254  THEN E$ = "BAD RESPONSE TO AN INPUT STATEMENT"
  369. 4770  POKE 216,0
  370. 4780  RETURN 
  371. 4790  PRINT : PRINT : PRINT "PRESS ANY KEY TO CONTINUE ";: GET K$
  372. 4800  PRINT K$
  373. 4810  RUN 
  374. 4820  REM 
  375. 4830  REM  - READ INFO -
  376. 4840  REM 
  377. 4850  ONERR  GOTO 4940
  378. 4860  PRINT D$;"OPEN CAL.INFO"
  379. 4870  PRINT D$;"READ CAL.INFO"
  380. 4880  FOR J = 1 TO 5
  381. 4890  INPUT P%(J)
  382. 4900  INPUT T$(J)
  383. 4910  NEXT 
  384. 4920  PRINT D$;"CLOSE CAL.INFO"
  385. 4930  RETURN 
  386. 4940  CALL  -3288: POKE 216,0: PRINT D$"CLOSE CAL.INFO": PRINT D$"DELETE CAL.INFO": IF  PEEK(222) = 5  THEN  PRINT D$"OPEN CAL.INFO": PRINT D$"WRITE CAL.INFO": FOR I = 1 TO 5: PRINT 0: PRINT "": NEXT : PRINT D$"CLOSE CAL.INFO": GOTO 4850
  387. 4950  HOME : VTAB 12: PRINT "ERROR #" PEEK(222)" IN LINE " PEEK(218) + PEEK(219) *256: END 
  388. 4960  REM 
  389. 4970  REM  - READ MEMORY -
  390. 4980  REM 
  391. 4990  ONERR  GOTO 5050
  392. 5000  PRINT D$;"OPEN CAL.MEMORY"
  393. 5010  PRINT D$;"READ CAL.MEMORY"
  394. 5020  FOR I = 1 TO 6: INPUT M(I): NEXT 
  395. 5030  PRINT D$;"CLOSE CAL.MEMORY"
  396. 5040  RETURN 
  397. 5050  CALL  -3288: POKE 216,0: PRINT D$"CLOSE CAL.MEMORY": PRINT D$"DELETE CAL.MEMORY": IF  PEEK(222) = 5  THEN  PRINT D$"OPEN CAL.MEMORY": PRINT D$"WRITE CAL.MEMORY": FOR I = 1 TO 6: PRINT 0: NEXT : PRINT D$"CLOSE CAL.MEMORY": GOTO 4990
  398. 5060  HOME : VTAB 12: PRINT "ERROR #" PEEK(222)" IN LINE " PEEK(218) +256 * PEEK(219): END 
  399. 5070  REM 
  400. 5080  REM  -SAVE MEMORY & PROGS-
  401. 5090  REM 
  402. 5100  HOME : VTAB 10: INPUT "ARE YOU SURE YOU WANT TO QUIT? ";YN$: ON YN$ < >"Y" GOTO 130: GOSUB 5110: GOTO 5170
  403. 5110  ONERR  GOTO 1370
  404. 5120  PRINT : PRINT D$;"OPEN CAL.MEMORY"
  405. 5130  PRINT D$;"WRITE CAL.MEMORY"
  406. 5140  FOR I = 1 TO 6: PRINT M(I): NEXT 
  407. 5150  PRINT D$;"CLOSE CAL.MEMORY"
  408. 5160  PRINT D$;"SAVE NIBBLE.CALC": POKE 216,0: RETURN 
  409. 5170  HOME : END 
  410. 5180  REM 
  411. 5190  REM  - CALC DISPLAY -
  412. 5200  REM 
  413. 5210  HOME 
  414. 5220  PRINT " ";: INVERSE : PRINT " NIBBLE CALCULATOR ";: NORMAL : PRINT " BY NEWTON S. LEE": PRINT "** COPYRIGHT 1986 BY MICROSPARC, INC **"
  415. 5230  PRINT : INVERSE : HTAB 5: PRINT "V";: NORMAL 
  416. 5240  PRINT : INVERSE : PRINT "S";: NORMAL : PRINT "IN   ";LB$;"ARCSIN]"
  417. 5250  INVERSE : PRINT "C";: NORMAL : PRINT "OS   ";LB$;"ARCCOS]"
  418. 5260  INVERSE : PRINT "T";: NORMAL : PRINT "AN   ";LB$;"ARCTAN]"
  419. 5270  PRINT "E";: INVERSE : PRINT "X";: NORMAL : PRINT "P   ";LB$;"LOG10]"
  420. 5280  INVERSE : PRINT "L";: NORMAL : PRINT "OG   ";LB$;"10^X]"
  421. 5290  PRINT "S";: INVERSE : PRINT "Q";: NORMAL : PRINT "RT  ";LB$;"X^2]"
  422. 5300  INVERSE : PRINT "A";: NORMAL : PRINT "BS   ";LB$;"X^Y]"
  423. 5310  INVERSE : PRINT "M";: NORMAL : PRINT "OD   ";LB$;"X^1/Y]"
  424. 5320  INVERSE : PRINT "I";: NORMAL : PRINT "NT   ";LB$;"1/X]"
  425. 5330  INVERSE : PRINT "R";: NORMAL : PRINT "ND   ";LB$;"X!]"
  426. 5340  PRINT "SI";: INVERSE : PRINT "N";: NORMAL : PRINT "H  ";LB$;"ARCSINH]"
  427. 5350  PRINT "C";: INVERSE : PRINT "O";: NORMAL : PRINT "SH  ";LB$;"ARCCOSH]"
  428. 5360  PRINT "TAN";: INVERSE : PRINT "H";: NORMAL : PRINT "  ";LB$;"ARCTANH]"
  429. 5370  PRINT : PRINT : INVERSE : PRINT "U";: NORMAL : PRINT "NARY MINUS"
  430. 5380  PRINT : PRINT "CLEAR DISPLAY:";: INVERSE : PRINT "D";: NORMAL 
  431. 5390  PRINT : PRINT "<ESC> TO QUIT"
  432. 5400  VTAB 4: HTAB 20: PRINT "PROGRAM: ";: INVERSE : PRINT "P";: NORMAL : PRINT " ";: INVERSE : PRINT "#";: NORMAL 
  433. 5410  VTAB 6: HTAB 20
  434. 5420  FOR I = 1 TO 5: PRINT "";I;
  435. 5430  IF P%(I) = 1  THEN  INVERSE : PRINT " ";: NORMAL 
  436. 5440  IF P%(I) = 0  THEN  PRINT UL$;
  437. 5450  PRINT " ";: NEXT 
  438. 5460  VTAB 8: HTAB 20: PRINT "DISPLAY:": PRINT 
  439. 5470  INVERSE : HTAB 20: FOR I = 20 TO 38: PRINT " ";: NEXT : PRINT 
  440. 5480  HTAB 20: PRINT " ";: HTAB 38: PRINT " "
  441. 5490  HTAB 20: FOR I = 20 TO 38: PRINT " ";: NEXT : PRINT : NORMAL 
  442. 5500  PRINT : HTAB 20: PRINT "MEMORY:";
  443. 5510  HTAB 28: INVERSE : PRINT "K";: HTAB 30: PRINT "S";: NORMAL : PRINT "TO ";: INVERSE : PRINT "R";: NORMAL : PRINT "CL"
  444. 5520  VTAB 16: FOR I = 1 TO 6: HTAB 20: PRINT "";I;
  445. 5530  FOR II = 1 TO 15: PRINT UL$;: NEXT 
  446. 5540  IF M(I) < >0  THEN  HTAB 22: PRINT M(I);
  447. 5550  PRINT : NEXT 
  448. 5560  PRINT : HTAB 20: INVERSE : PRINT "@";: NORMAL : PRINT " MODE: DEG RAD";
  449. 5570  RETURN 
  450. 5580  REM  READ DV$ VALUE FROM PAGE 3
  451. 5590 DV$ = "":L =  PEEK(768): IF L <1  OR L >13  OR L < > PEEK(769 +L)  THEN N = 0:DV$ = "0": RETURN 
  452. 5600  FOR I = 1 TO L:DV$ = DV$ + CHR$( PEEK(768 +I)): NEXT : POKE 768,255:N =  VAL(DV$): RETURN 
  453. 5610  REM  STORE DV$ ON PAGE 3
  454. 5620 DV$ =  STR$(N):L =  LEN(DV$): POKE 768,L: FOR I = 1 TO L: POKE 768 +I, ASC( MID$ (DV$,I,1)): NEXT : POKE 769 +L,L: RETURN