home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib14.dsk / ORACLE.bas < prev    next >
BASIC Source File  |  2023-02-26  |  23KB  |  844 lines

  1. 10  REM ************************
  2. 20  REM *                      *
  3. 30  REM *  THE ORACLE          *
  4. 40  REM *  BY JEFF G. COX      *
  5. 50  REM *  COPYRIGHT (C) 1983  *
  6. 60  REM *  BY MICROSPARC, INC. *
  7. 70  REM *  LINCOLN, MA. 01773  *
  8. 80  REM *                      *
  9. 90  REM ************************
  10. 100  GOTO 6700
  11. 110  REM * UTILITIY ROUTINES ****
  12. 120  REM * UPDATE ALT. RESULTS *
  13. 130  GOSUB 5440: PRINT "*** UPDATING SCORES ***"
  14. 140  IF PSUM% < >0  THEN 160
  15. 150 VLOC% = 2: FOR J = 1 TO ANUM%:ARES(J) = 0.0:VLOC% = VLOC% +1:NUMB = ARES(J): GOSUB 180: NEXT : RETURN 
  16. 160  FOR J = 1 TO ANUM%:GSUM(J) = 0: NEXT : FOR J = 1 TO FACT%: FOR K = 1 TO ANUM%:GSUM(K) = GSUM(K) +PDES%(J) *GDES%(K,J): NEXT : NEXT :VLOC% = 2: FOR J = 1 TO ANUM%:ARES(J) = GSUM(J)/PSUM%:VLOC% = VLOC% +1:NUMB = ARES(J): GOSUB 180: NEXT : RETURN 
  17. 170  REM * PRINT A REAL *******
  18. 180 A =  INT(NUMB) + INT((NUMB - INT(NUMB)) *10 +0.5)/10:A% = 8: IF A =  INT(NUMB)  OR A -1 =  INT(NUMB)  THEN A% = 6
  19. 190  IF PAGE% = 0  THEN  VTAB VLOC%: HTAB 2
  20. 200  PRINT  TAB( A% - LEN( STR$(A)));A;
  21. 210  IF A% = 6  THEN  PRINT ".0";
  22. 220  RETURN 
  23. 230  REM * PRINT A NAME ***
  24. 240  HTAB 10: PRINT INPT$;
  25. 250  IF PAGE% < >0  THEN  PRINT 
  26. 260  RETURN 
  27. 270  REM * CLEAR WINDOW ***
  28. 280  IF WNDW% <0  OR WNDW% >4  THEN  RETURN 
  29. 290  IF WNDW% = 0  THEN 390
  30. 300  ON WNDW% GOTO 310,330,350,370
  31. 310 VFIR% = 1:VBOT% = 24
  32. 320  GOTO 390
  33. 330 VFIR% = 1:VBOT% = 8
  34. 340  GOTO 390
  35. 350 VFIR% = 9:VBOT% = 20
  36. 360  GOTO 390
  37. 370 VFIR% = 21:VBOT% = 24
  38. 380  GOTO 390
  39. 390  VTAB VFIR%
  40. 400  POKE 34,VFIR% -1
  41. 410  POKE 35,VBOT%
  42. 420  HOME 
  43. 430  RETURN 
  44. 440  REM * DISP ALT. & RESULTS *
  45. 450  IF PAGE% < >0  THEN 480
  46. 460 WNDW% = 2: GOSUB 280
  47. 470 VLOC% = VFIR% +1
  48. 480  PRINT "ANALYSIS:  ";NAME$
  49. 490  PRINT " RESULT  ALTERNATIVE"
  50. 500  IF ANUM% <1  THEN  RETURN 
  51. 510  FOR J = 1 TO ANUM%
  52. 520 NUMB = ARES(J)
  53. 530 VLOC% = VLOC% +1
  54. 540  GOSUB 180
  55. 550 INPT$ = ADES$(J): GOSUB 240
  56. 560  NEXT 
  57. 570  RETURN 
  58. 580  REM * DISP FACTORS & PRIORITIES
  59. 590  IF PAGE% < >0  THEN 620
  60. 600 WNDW% = 3: GOSUB 280
  61. 610 VLOC% = VFIR% +1
  62. 620  PRINT 
  63. 630  PRINT "PRIORITY FACTOR"
  64. 640  IF FACT% <1  THEN  RETURN 
  65. 650 A% = FCUR% +FLNG% -1: IF A% >FACT%  THEN A% = FACT%
  66. 660  FOR J = FCUR% TO A%
  67. 670 NUMB = PDES%(J)
  68. 680 VLOC% = VLOC% +1
  69. 690  GOSUB 180
  70. 700 INPT$ = FDES$(J): GOSUB 240
  71. 710  NEXT 
  72. 720  RETURN 
  73. 730  REM * DISP FACS & GRADES *
  74. 740 WNDW% = 3: GOSUB 280
  75. 750 VLOC% = VFIR% +1
  76. 760  PRINT "ALTERNATIVE: ";ADES$(ACUR%)
  77. 770  PRINT "  GRADE  FACTOR"
  78. 780  IF FACT% <1  THEN  RETURN 
  79. 790 A% = FCUR% +FLNG% -1: IF A% >FACT%  THEN A% = FACT%
  80. 800  FOR J = FCUR% TO A%
  81. 810 NUMB = GDES%(ACUR%,J)
  82. 820 VLOC% = VLOC% +1
  83. 830  GOSUB 180
  84. 840 INPT$ = FDES$(J): GOSUB 240
  85. 850  NEXT 
  86. 860  RETURN 
  87. 870  REM * DISP ALT. & GRADES *
  88. 880  IF PAGE% < >0  THEN 910
  89. 890 WNDW% = 3: GOSUB 280
  90. 900 VLOC% = VFIR% +1
  91. 910  PRINT "FACTOR: ";FDES$(FCUR%)
  92. 920  PRINT "  GRADE  ALTERNATIVE"
  93. 930 A% = ACUR% +ALNG% -1: IF A% >ANUM%  THEN A% = ANUM%
  94. 940  FOR J = ACUR% TO A%
  95. 950 NUMB = GDES%(J,FCUR%)
  96. 960 VLOC% = VLOC% +1
  97. 970  GOSUB 180
  98. 980 INPT$ = ADES$(J): GOSUB 240
  99. 990  NEXT 
  100. 1000  RETURN 
  101. 1010  REM * GET A NAME ***
  102. 1020  POKE 51,191
  103. 1030 INPT$ = ""
  104. 1040  CALL  -662
  105. 1050  FOR J = 512 TO 767
  106. 1060 A% =  PEEK(J) -128
  107. 1070  IF A% = 13  THEN 1100
  108. 1080 INPT$ = INPT$ + CHR$(A%)
  109. 1090  NEXT 
  110. 1100  IF  LEN(INPT$) = 0  THEN INPT$ = ALPH$
  111. 1110 ALPH$ =  LEFT$(INPT$,WLNG%)
  112. 1120  RETURN 
  113. 1130  REM * SELECT FILE NAME ***
  114. 1140 WNDW% = 4: GOSUB 280
  115. 1150  PRINT A$
  116. 1160  PRINT "ENTER ANALYSIS NAME ('C' FOR CATALOG;": PRINT "'M' FOR MENU;"
  117. 1170  PRINT "  <RETURN> FOR ";NAME$;")";"   ";
  118. 1180 ALPH$ = NAME$
  119. 1190  GOSUB 1020
  120. 1200  IF ALPH$ < >"C"  THEN 1250
  121. 1210 WNDW% = 1: GOSUB 280
  122. 1220  PRINT CD$;"CATALOG"
  123. 1230  GOSUB 5510
  124. 1240  GOTO 1140
  125. 1250 NAME$ = ALPH$: IF ALPH$ = "M"  THEN  CALL  -10621: HOME : GOTO 6820
  126. 1260 WNDW% = 1: GOSUB 280
  127. 1270  RETURN 
  128. 1280  REM * WRITE DATA BASE **
  129. 1290  IF SFLG% < >1  THEN  RETURN 
  130. 1300 A$ = "SAVE ANALYSIS TO DISC -"
  131. 1310  GOSUB 5690
  132. 1320  IF INPT% < >1  THEN  RETURN 
  133. 1330 A$ = "TO SAVE ANALYSIS,"
  134. 1340  GOSUB 1140
  135. 1350  GOSUB 5440
  136. 1360  PRINT "*** SAVING ";NAME$;" ***"
  137. 1370  PRINT CD$;"OPEN ";NAME$
  138. 1380  PRINT CD$;"WRITE ";NAME$
  139. 1390  PRINT ANUM%;",";FACT%;",";PHI%;",";PLOW%;",";GHI%;",";GLOW%
  140. 1400  FOR J = 1 TO ANUM%
  141. 1410  PRINT ADES$(J)
  142. 1420  PRINT ARES(J)
  143. 1430  NEXT 
  144. 1440  FOR J = 1 TO FACT%
  145. 1450  PRINT FDES$(J)
  146. 1460  PRINT PDES%(J)
  147. 1470  NEXT 
  148. 1480  FOR J = 1 TO ANUM%
  149. 1490  FOR K = 1 TO FACT%
  150. 1500  PRINT GDES%(J,K)
  151. 1510  NEXT 
  152. 1520  NEXT 
  153. 1530  PRINT CD$;"CLOSE ";NAME$
  154. 1540  PRINT CD$;"LOCK ";NAME$
  155. 1550 SFLG% = 0
  156. 1560 WNDW% = 4: GOSUB 280
  157. 1570  RETURN 
  158. 1580  REM * READ DATA BASE
  159. 1590 WNDW% = 1: GOSUB 280
  160. 1600  GOSUB 1290
  161. 1610 WNDW% = 4: GOSUB 280
  162. 1620 A$ = "TO RETRIEVE ANALYSIS FROM DISC,"
  163. 1630  GOSUB 1140
  164. 1640  GOSUB 5440
  165. 1650  PRINT "*** RETRIEVING ";NAME$;" ***"
  166. 1660 PSUM% = 0
  167. 1670  PRINT CD$;"UNLOCK ";NAME$
  168. 1680  PRINT CD$;"OPEN ";NAME$
  169. 1690  GOSUB 5440
  170. 1700  PRINT "*** RETRIEVING ";NAME$;" ***"
  171. 1710  PRINT CD$;"READ ";NAME$
  172. 1720  INPUT ANUM%,FACT%,PHI%,PLOW%,GHI%,GLOW%
  173. 1730  FOR J = 1 TO ANUM%
  174. 1740 ADES$(J) = ""
  175. 1750  GET INPT$
  176. 1760  IF INPT$ = RET$  THEN 1790
  177. 1770 ADES$(J) = ADES$(J) +INPT$
  178. 1780  GOTO 1750
  179. 1790  INPUT ARES(J)
  180. 1800  NEXT 
  181. 1810  FOR J = 1 TO FACT%
  182. 1820 FDES$(J) = ""
  183. 1830  GET INPT$
  184. 1840  IF INPT$ = RET$  THEN 1870
  185. 1850 FDES$(J) = FDES$(J) +INPT$
  186. 1860  GOTO 1830
  187. 1870  INPUT PDES%(J)
  188. 1880 PSUM% = PSUM% +PDES%(J)
  189. 1890  NEXT 
  190. 1900  FOR J = 1 TO ANUM%
  191. 1910  FOR K = 1 TO FACT%
  192. 1920  INPUT GDES%(J,K)
  193. 1930  NEXT 
  194. 1940  NEXT 
  195. 1950  PRINT  CHR$(1): REM * NOMON FIX
  196. 1960  PRINT RET$;CD$;"CLOSE ";NAME$: REM *NOMONFIX
  197. 1970  PRINT CD$;"LOCK ";NAME$
  198. 1980 WNDW% = 4: GOSUB 280
  199. 1990  GOSUB 450
  200. 2000  RETURN 
  201. 2010  REM * CHANGE A NAME *
  202. 2020 WNDW% = 4: GOSUB 280
  203. 2030  PRINT A$
  204. 2040  PRINT "PRESS <RETURN> FOR "
  205. 2050  PRINT ALPH$
  206. 2060  PRINT "OR ENTER NEW NAME.";
  207. 2070  VTAB VLOC%: HTAB 10
  208. 2080  PRINT " "; SPC( 27);" ";: HTAB 9
  209. 2090  GOSUB 1020
  210. 2100  VTAB VLOC%: HTAB 9: PRINT " ";ALPH$
  211. 2110 SFLG% = 1
  212. 2120  RETURN 
  213. 2130  REM * CHANGE A VALUE *
  214. 2140  IF MFLG% < >1  THEN 2200
  215. 2150 WNDW% = 4: GOSUB 280
  216. 2160  PRINT A$
  217. 2170  PRINT "  CHANGE VALUE (ARROW KEYS TO START,"
  218. 2180  PRINT "  ANY OTHER KEY TO STOP), MOVE TO NEXT"
  219. 2190  PRINT "  VALUE <SPACE KEY>, OR FINISH <RETURN>";
  220. 2200  VTAB VLOC%: HTAB 1
  221. 2210  FLASH : PRINT " ";: NORMAL 
  222. 2220 SPD% = 0:CFLG% = 0
  223. 2230 INPT% =  PEEK( -16384) -128: POKE  -16368,0
  224. 2240  IF INPT% <0  THEN 2330
  225. 2250  IF INPT% = EXEC%  THEN 2390
  226. 2260  IF INPT% = SKIP%  THEN 2400
  227. 2270 SFLG% = 1
  228. 2280 A% = 0
  229. 2290  IF INPT% = ICR%  AND SPD% > -1  THEN A% = 1
  230. 2300  IF INPT% = DEC%  AND SPD% <1  THEN A% =  -1
  231. 2310 SPD% = SPD% +A%
  232. 2320  IF A% = 0  THEN SPD% = 0
  233. 2330  IF NUMB +SPD% >HI%  THEN SPD% = HI% -NUMB
  234. 2340  IF NUMB +SPD% <LOW%  THEN SPD% = LOW% -NUMB
  235. 2350 NUMB = NUMB +SPD%
  236. 2360  GOSUB 180
  237. 2370 A% = 250: GOSUB 5490
  238. 2380  GOTO 2230
  239. 2390 CFLG% = 1
  240. 2400  VTAB VLOC%: HTAB 1: PRINT " "
  241. 2410  RETURN 
  242. 2420  REM * SET ALT.'S GRADES *
  243. 2430  IF FACT% <1  THEN  RETURN 
  244. 2440 MFLG% = 1:A$ = "TO RANK THIS ALTERNATIVE,"
  245. 2450 FCUR% = 1
  246. 2460 VFIR% = 9
  247. 2470  GOSUB 740
  248. 2480 VLOC% = VFIR% +1
  249. 2490 NUMB = GDES%(ACUR%,FCUR%)
  250. 2500 VLOC% = VLOC% +1
  251. 2510 HI% = GHI%
  252. 2520 LOW% = GLOW%
  253. 2530  GOSUB 2140
  254. 2540 MFLG% = 0
  255. 2550 GDES%(ACUR%,FCUR%) = NUMB
  256. 2560  IF CFLG% = 1  THEN 2610
  257. 2570 FCUR% = FCUR% +1
  258. 2580  IF FCUR% >FACT%  THEN 2450
  259. 2590  IF VLOC% >19  THEN 2460
  260. 2600  GOTO 2490
  261. 2610  GOSUB 130
  262. 2620  RETURN 
  263. 2630  REM * ADD ALTERNATIVE *
  264. 2640 WNDW% = 3: GOSUB 280
  265. 2650 WNDW% = 4: GOSUB 280
  266. 2660  IF ANUM% <AMAX%  THEN 2720
  267. 2670 A% = 2: GOSUB 5550
  268. 2680  PRINT "I'M SORRY, BUT YOU CANNOT HAVE MORE"
  269. 2690  PRINT "  THAN ";AMAX%;" ALTERNATIVES."
  270. 2700  GOSUB 5510
  271. 2710  RETURN 
  272. 2720 ANUM% = ANUM% +1
  273. 2730 VLOC% = 2 +ANUM%
  274. 2740 ALPH$ = "ALTERNATIVE #" + STR$(ANUM%)
  275. 2750 A$ = "TO SET THE NEW ALTERNATIVE'S NAME,"
  276. 2760  GOSUB 2020
  277. 2770 ADES$(ANUM%) = ALPH$
  278. 2780  IF FACT% <1  THEN  RETURN 
  279. 2790 ACUR% = ANUM%
  280. 2800 A% = (GHI% +GLOW%)/2
  281. 2810  FOR J = 1 TO FACT%
  282. 2820 GDES%(ACUR%,J) = A%
  283. 2830  NEXT 
  284. 2840  GOSUB 2430
  285. 2850  RETURN 
  286. 2860  REM * DELETE ALT. *
  287. 2870  IF ANUM% >2  THEN 2940
  288. 2880 WNDW% = 4: GOSUB 280
  289. 2890 A% = 2: GOSUB 5550
  290. 2900  PRINT "I'M SORRY, BUT YOU CANNOT HAVE LESS"
  291. 2910  PRINT "  THAN 2 ALTERNATIVES."
  292. 2920  GOSUB 5510
  293. 2930  RETURN 
  294. 2940 A$ = "TO CHOOSE ALTERNATIVE TO BE DELETED,": GOSUB 5600
  295. 2950  IF ACUR% <1  THEN  RETURN 
  296. 2960 WNDW% = 4: GOSUB 280
  297. 2970 A$ = "DELETE " +ADES$(ACUR%) +" - "
  298. 2980 VLOC% = VFIR% +1
  299. 2990  GOSUB 5690
  300. 3000  IF INPT% < >1  THEN  RETURN 
  301. 3010  GOSUB 5440
  302. 3020  IF ACUR% = ANUM%  THEN 3100
  303. 3030  FOR J = ACUR% TO ANUM% -1
  304. 3040 ADES$(J) = ADES$(J +1)
  305. 3050 ARES(J) = ARES(J +1)
  306. 3060  FOR K = 1 TO FACT%
  307. 3070 GDES%(J,K) = GDES%(J +1,K)
  308. 3080  NEXT 
  309. 3090  NEXT 
  310. 3100 ANUM% = ANUM% -1
  311. 3110  GOSUB 450
  312. 3120  RETURN 
  313. 3130  REM * CHANGE ALT. NAME *
  314. 3140 A$ = "TO CHANGE ALTERNATIVE'S NAME,": GOSUB 5600
  315. 3150  IF ACUR% <1  THEN  RETURN 
  316. 3160 ALPH$ = ADES$(ACUR%)
  317. 3170 VLOC% = 2 +ACUR%
  318. 3180  GOSUB 2020
  319. 3190 ADES$(ACUR%) = ALPH$
  320. 3200  RETURN 
  321. 3210  REM * SET FACTOR'S GRADES *
  322. 3220 MFLG% = 1:A$ = "TO RANK ALTERNATIVES FOR THIS FACTOR,"
  323. 3230 ACUR% = 1
  324. 3240  GOSUB 880
  325. 3250 VLOC% = VFIR% +1
  326. 3260 NUMB = GDES%(ACUR%,FCUR%)
  327. 3270 VLOC% = VLOC% +1
  328. 3280 HI% = GHI%
  329. 3290 LOW% = GLOW%
  330. 3300  GOSUB 2140
  331. 3310 MFLG% = 0
  332. 3320 GDES%(ACUR%,FCUR%) = NUMB
  333. 3330  IF CFLG% = 1  THEN 3370
  334. 3340 ACUR% = ACUR% +1
  335. 3350  IF ACUR% >ANUM%  THEN 3230
  336. 3360  GOTO 3260
  337. 3370  GOSUB 130
  338. 3380  RETURN 
  339. 3390  REM * ADD FACTOR *
  340. 3400 WNDW% = 4: GOSUB 280
  341. 3410  IF FACT% <FMAX%  THEN 3470
  342. 3420 A% = 2: GOSUB 5550
  343. 3430  PRINT "I'M SORRY, BUT YOU CANNOT HAVE MORE"
  344. 3440  PRINT "  THAN ";FMAX%;" FACTORS."
  345. 3450  GOSUB 5510
  346. 3460  RETURN 
  347. 3470 FCUR% = 1
  348. 3480  IF FACT% +1 >FCUR% +FLNG% -1  THEN FCUR% = FCUR% +FLNG%
  349. 3490  GOSUB 590
  350. 3500 FACT% = FACT% +1
  351. 3510 VLOC% = VFIR% +2 +FACT% -FCUR%
  352. 3520 ALPH$ = "FACTOR #" + STR$(FACT%)
  353. 3530 A$ = "TO SET THE NEW FACTOR'S NAME,"
  354. 3540  GOSUB 2020
  355. 3550 FDES$(FACT%) = ALPH$
  356. 3560 PDES%(FACT%) = (PHI% +PLOW%)/2
  357. 3570 HI% = PHI%:LOW% = PLOW%
  358. 3580 NUMB = PDES%(FACT%)
  359. 3590 MFLG% = 1:A$ = "TO SET FACTOR'S PRIORITY,"
  360. 3600  GOSUB 2140
  361. 3610 PDES%(FACT%) = NUMB
  362. 3620 PSUM% = PSUM% +PDES%(FACT%)
  363. 3630  IF ANUM% <1  THEN  RETURN 
  364. 3640 FCUR% = FACT%
  365. 3650 A% = (GHI% +GLOW%)/2
  366. 3660  FOR J = 1 TO ANUM%
  367. 3670 GDES%(J,FCUR%) = A%
  368. 3680  NEXT 
  369. 3690  GOSUB 3220
  370. 3700  RETURN 
  371. 3710  REM * DELETE A FACTOR *
  372. 3720 WNDW% = 4: GOSUB 280
  373. 3730  IF FACT% >1  THEN 3790
  374. 3740 A% = 2: GOSUB 5550
  375. 3750  PRINT "I'M SORRY, BUT YOU CANNOT HAVE LESS"
  376. 3760  PRINT "  THAN 1 FACTOR."
  377. 3770  GOSUB 5510
  378. 3780  RETURN 
  379. 3790 A$ = "TO DELETE A FACTOR,": GOSUB 5850
  380. 3800  IF FCUR% <1  THEN  RETURN 
  381. 3810 A$ = "DELETE " +FDES$(FCUR%) +" - "
  382. 3820  GOSUB 5690
  383. 3830  IF INPT% < >1  THEN  RETURN 
  384. 3840 PSUM% = PSUM% -PDES%(FCUR%)
  385. 3850  IF FCUR% = FACT%  THEN 3930
  386. 3860  FOR J = FCUR% TO FACT% -1
  387. 3870 FDES$(J) = FDES$(J +1)
  388. 3880 PDES%(J) = PDES%(J +1)
  389. 3890  FOR K = 1 TO ANUM%
  390. 3900 GDES%(K,J) = GDES%(K,J +1)
  391. 3910  NEXT 
  392. 3920  NEXT 
  393. 3930 FACT% = FACT% -1
  394. 3940  GOSUB 130
  395. 3950  RETURN 
  396. 3960  REM * CHANGE PRIORITY *
  397. 3970  IF FACT% <1  THEN  RETURN 
  398. 3980 MFLG% = 1:A$ = "TO CHANGE A FACTOR'S PRIORITY,"
  399. 3990 FCUR% = 1
  400. 4000 VFIR% = 9
  401. 4010  GOSUB 590
  402. 4020 VLOC% = VFIR% +1
  403. 4030 NUMB = PDES%(FCUR%)
  404. 4040 HI% = PHI%:LOW% = PLOW%
  405. 4050 VLOC% = VLOC% +1
  406. 4060  GOSUB 2140
  407. 4070 MFLG% = 0
  408. 4080 PSUM% = PSUM% -PDES%(FCUR%) +NUMB
  409. 4090 PDES%(FCUR%) = NUMB
  410. 4100  IF CFLG% = 1  THEN 4150
  411. 4110 FCUR% = FCUR% +1
  412. 4120  IF FCUR% >FACT%  THEN 3990
  413. 4130  IF VLOC% >19  THEN 4000
  414. 4140  GOTO 4030
  415. 4150  GOSUB 130
  416. 4160  RETURN 
  417. 4170  REM * CHANGE FACT NAME *
  418. 4180 A$ = "TO CHANGE A FACTOR'S NAME,": GOSUB 5850
  419. 4190  IF FCUR% <1  THEN  RETURN 
  420. 4200 ALPH$ = FDES$(FCUR%)
  421. 4210 VLOC% = 10 +FCUR%
  422. 4220  IF VLOC% >19  THEN VLOC% = VLOC% -FLNG%
  423. 4230  GOSUB 2020
  424. 4240 FDES$(FCUR%) = ALPH$
  425. 4250  RETURN 
  426. 4260  REM * INITIALIZE DATA BASE *
  427. 4270 WNDW% = 1: GOSUB 280
  428. 4280  GOSUB 1290
  429. 4290 NAME$ = "TRADE STUDY"
  430. 4300 A$ = "TO START A NEW ANALYSIS,"
  431. 4310  GOSUB 1140
  432. 4320 WNDW% = 1: GOSUB 280
  433. 4330  PRINT "ANALYSIS:  ";NAME$
  434. 4340  PRINT "  VALUE  PARAMETERS"
  435. 4350 AHI% = 2
  436. 4360 FHI% = 1
  437. 4370 PHI% = 100
  438. 4380 PLOW% = 1
  439. 4390 GHI% = 100
  440. 4400 GLOW% = 1
  441. 4410 AFLG% = 0
  442. 4420 NUMB = AHI%:VLOC% = 3: GOSUB 180
  443. 4430  PRINT "  NUMBER OF ALTERNATIVES"
  444. 4440 NUMB = FHI%:VLOC% = 4: GOSUB 180
  445. 4450  PRINT "  NUMBER OF FACTORS"
  446. 4460 NUMB = PHI%:VLOC% = 5: GOSUB 180
  447. 4470  PRINT "  HIGHEST FACTOR PRIORITY"
  448. 4480 NUMB = PLOW%:VLOC% = 6: GOSUB 180
  449. 4490  PRINT "  LOWEST FACTOR PRIORITY"
  450. 4500 NUMB = GHI%:VLOC% = 7: GOSUB 180
  451. 4510  PRINT "  HIGHEST POSSIBLE SCORE"
  452. 4520 NUMB = GLOW%:VLOC% = 8: GOSUB 180
  453. 4530  PRINT "  LOWEST POSSIBLE SCORE"
  454. 4540 NUMB = AFLG%:VLOC% = 9: GOSUB 180
  455. 4550  PRINT "  SET ALTERNATIVES FIRST (0)"
  456. 4560  PRINT  SPC( 7);"    OR FACTORS FIRST (1)";
  457. 4570 MFLG% = 1:A$ = "TO CHANGE A PARAMETER,"
  458. 4580 VLOC% = 3
  459. 4590 NUMB = AHI%:HI% = AMAX%:LOW% = 2
  460. 4600  GOSUB 2140
  461. 4610 AHI% = NUMB
  462. 4620 MFLG% = 0
  463. 4630  IF CFLG% = 1  THEN 4990
  464. 4640 VLOC% = VLOC% +1
  465. 4650 NUMB = FHI%:HI% = FMAX%:LOW% = 1
  466. 4660  GOSUB 2140
  467. 4670 FHI% = NUMB
  468. 4680  IF CFLG% = 1  THEN 4990
  469. 4690 VLOC% = VLOC% +1
  470. 4700 NUMB = PHI%:HI% = 100:LOW% = PLOW% +1
  471. 4710  GOSUB 2140
  472. 4720 PHI% = NUMB
  473. 4730  IF CFLG% = 1  THEN 4990
  474. 4740 VLOC% = VLOC% +1
  475. 4750 NUMB = PLOW%:HI% = PHI% -1:LOW% = 1
  476. 4760  GOSUB 2140
  477. 4770 PLOW% = NUMB
  478. 4780  IF CFLG% = 1  THEN 4990
  479. 4790 VLOC% = VLOC% +1
  480. 4800 NUMB = GHI%:HI% = 100:LOW% = GLOW% +1
  481. 4810  GOSUB 2140
  482. 4820 GHI% = NUMB
  483. 4830  IF CFLG% = 1  THEN 4990
  484. 4840 VLOC% = VLOC% +1
  485. 4850 NUMB = GLOW%:HI% = GHI% -1:LOW% = 1
  486. 4860  GOSUB 2140
  487. 4870 GLOW% = NUMB
  488. 4880  IF CFLG% = 1  THEN 4990
  489. 4890 VLOC% = VLOC% +1
  490. 4900 NUMB = AFLG%:HI% = 1:LOW% = 0
  491. 4910  GOSUB 2140
  492. 4920 AFLG% = NUMB
  493. 4930  IF CFLG% = 1  THEN 4990
  494. 4940  GOTO 4570
  495. 4950 SFLG% = 1
  496. 4960 WNDW% = 1: GOSUB 280
  497. 4970  GOSUB 450
  498. 4980  GOSUB 130
  499. 4990 WNDW% = 1: GOSUB 280
  500. 5000 FACT% = 0:ANUM% = 0:PSUM% = 0
  501. 5010  IF AFLG% < >1  THEN 5100
  502. 5020  FOR J1 = 1 TO FHI%
  503. 5030  GOSUB 3400
  504. 5040  NEXT 
  505. 5050  GOSUB 450
  506. 5060  FOR J1 = 1 TO AHI%
  507. 5070  GOSUB 2640
  508. 5080  NEXT 
  509. 5090  GOTO 5170
  510. 5100  GOSUB 450
  511. 5110  FOR J1 = 1 TO AHI%
  512. 5120  GOSUB 2640
  513. 5130  NEXT 
  514. 5140  FOR J1 = 1 TO FHI%
  515. 5150  GOSUB 3400
  516. 5160  NEXT 
  517. 5170  RETURN 
  518. 5180  REM * HANDLE MENU *
  519. 5190 WNDW% = 4: GOSUB 280
  520. 5200  PRINT A$
  521. 5210  PRINT "  MOVE TO NEXT ITEM <SPACE BAR>,"
  522. 5220  PRINT "  SELECT ITEM <RETURN>, OR EXIT <ESC>.";
  523. 5230 VCUR% = M1%
  524. 5240  VTAB VCUR%
  525. 5250  HTAB 2
  526. 5260  FLASH : PRINT " ";: NORMAL 
  527. 5270  GOSUB 5800
  528. 5280  IF INPT% = CNCL%  THEN INPT% = 0: GOTO 5390
  529. 5290  IF INPT% = EXEC%  THEN INPT% = VCUR% -M1% +1: GOTO 5390
  530. 5300  IF INPT% = SKIP%  THEN 5330
  531. 5310 A% = 1: GOSUB 5550
  532. 5320  GOTO 5270
  533. 5330  VTAB VCUR%: HTAB 2
  534. 5340  PRINT " ";
  535. 5350 VCUR% = VCUR% +1
  536. 5360  IF VCUR% < = M2%  THEN 5240
  537. 5370  IF PFLG% < >1  THEN 5230
  538. 5380 INPT% =  -1
  539. 5390 WNDW% = 4: GOSUB 280
  540. 5400  VTAB VCUR%: HTAB 2
  541. 5410  PRINT " ";
  542. 5420  RETURN 
  543. 5430  REM * PRINT BUSY ***
  544. 5440 WNDW% = 4
  545. 5450  GOSUB 280
  546. 5460  PRINT "*** PLEASE STAND BY ***"
  547. 5470  RETURN 
  548. 5480  REM * DELAY *
  549. 5490  IF A% >0  THEN  FOR J = 1 TO A%: NEXT : RETURN 
  550. 5500  REM * PAUSE ***
  551. 5510  PRINT 
  552. 5520  INPUT "PRESS <RETURN> TO CONTINUE.";INPT$
  553. 5530  RETURN 
  554. 5540  REM * PLAY A SOUND *
  555. 5550  IF A% <1  OR A% >4  THEN A% = 1
  556. 5560  FOR J = 1 TO A%: FOR K = 1 TO 10
  557. 5570 X =  PEEK( -16336) + PEEK( -16336)
  558. 5580  NEXT K: NEXT J: RETURN 
  559. 5590  REM * SELECT AN ALT. *
  560. 5600 VFIR% = 3
  561. 5610 M1% = VFIR%
  562. 5620 VBOT% = VFIR% +ANUM% -1
  563. 5630 M2% = VBOT%
  564. 5640 PFLG% = 0
  565. 5650  GOSUB 5190
  566. 5660 ACUR% = INPT%
  567. 5670  RETURN 
  568. 5680  REM * CONFIRM CHOICE ***
  569. 5690 WNDW% = 4: GOSUB 280
  570. 5700  PRINT A$
  571. 5710  PRINT "  EXECUTE <RETURN> OR CANCEL <ESC>? ";
  572. 5720  FLASH : PRINT " ": NORMAL 
  573. 5730  GOSUB 5800
  574. 5740  IF INPT% = EXEC%  THEN INPT% = 1: GOTO 5770
  575. 5750  IF INPT% = CNCL%  THEN INPT% = 0: GOTO 5770
  576. 5760  GOTO 5730
  577. 5770 WNDW% = 4: GOSUB 280
  578. 5780  RETURN 
  579. 5790  REM * GET KEYSTROKE ***
  580. 5800 INPT% =  PEEK( -16384) -128: POKE  -16368,0
  581. 5810  IF INPT% > -1  THEN  RETURN 
  582. 5820 A% = 100: GOSUB 5490
  583. 5830  GOTO 5800
  584. 5840  REM * SELECT FACTOR *
  585. 5850 FCUR% = 1:PFLG% = 1
  586. 5860  GOSUB 590
  587. 5870 VLOC% = VFIR% +2
  588. 5880 M1% = VLOC%
  589. 5890 M2% = VBOT%: IF M2% >M1% +FACT% -FCUR%  THEN M2% = M1% +FACT% -FCUR%
  590. 5900  GOSUB 5190
  591. 5910  IF INPT% = 0  THEN FCUR% = 0: RETURN 
  592. 5920  IF INPT% >0  THEN FCUR% = INPT% +FCUR% -1: RETURN 
  593. 5930 FCUR% = FCUR% +FLNG%
  594. 5940  IF FCUR% >FACT%  THEN 5850
  595. 5950  GOTO 5860
  596. 5960  REM   * PRINT ANALYSIS * 
  597. 5970 WNDW% = 4: GOSUB 280
  598. 5980  PRINT "ENTER PRINTER SLOT NUMBER (1 TO 5 OR 7;"
  599. 5990  PRINT "  PRESS <RETURN> FOR ";SLOT%;")";
  600. 6000  INPUT "? ";INPT$
  601. 6010  IF  LEN(INPT$) = 0  THEN 6050
  602. 6020 INPT% =  VAL(INPT$)
  603. 6030  IF INPT% <1  OR INPT% >7  OR INPT% = 6  THEN 5970
  604. 6040 SLOT% = INPT%
  605. 6050 WNDW% = 4: GOSUB 280
  606. 6060  PRINT "PREPARE PRINTER FOR OUTPUT."
  607. 6070  GOSUB 5510
  608. 6080  GOSUB 5440
  609. 6090  PRINT "*** PRESS ANY KEY TO INTERRUPT ***"
  610. 6100 PAGE% = 0
  611. 6110  PRINT CD$;"PR#";SLOT%
  612. 6120  GOSUB 6440
  613. 6130 VLOC% = LINE%
  614. 6140  GOSUB 450
  615. 6150 LINE% = LINE% +2 +ANUM%
  616. 6160  GOSUB 6540
  617. 6170  IF INPT% = 1  THEN 6380
  618. 6180  PRINT :LINE% = LINE% +1
  619. 6190 VLOC% = LINE% +2
  620. 6200 FCUR% = 1:TEMP% = FLNG%:FLNG% = FMAX%
  621. 6210  GOSUB 590
  622. 6220 FLNG% = TEMP%
  623. 6230  PRINT 
  624. 6240 LINE% = LINE% +3 +FACT%
  625. 6250 FCUR% = 0
  626. 6260  GOSUB 6540: IF INPT% = 1  THEN 6380
  627. 6270 FCUR% = FCUR% +1
  628. 6280  IF FCUR% >FACT%  THEN 6380
  629. 6290  IF LINE% +3 +ANUM% <62  THEN 6320
  630. 6300  GOSUB 6650
  631. 6310  GOSUB 6440
  632. 6320 ACUR% = 1
  633. 6330 VLOC% = LINE% +2
  634. 6340  GOSUB 880
  635. 6350  PRINT 
  636. 6360 LINE% = LINE% +3 +ANUM%
  637. 6370  GOTO 6260
  638. 6380  GOSUB 6650
  639. 6390  PRINT CD$;"PR#0"
  640. 6400 WNDW% = 4: GOSUB 280
  641. 6410 PAGE% = 0
  642. 6420  RETURN 
  643. 6430  REM * PRINT HEADER *
  644. 6440  PRINT "."
  645. 6450  PRINT 
  646. 6460 PAGE% = PAGE% +1
  647. 6470  PRINT 
  648. 6480  PRINT NAME$; SPC( 65 - LEN(NAME$));"PAGE ";PAGE%
  649. 6490  PRINT 
  650. 6500  PRINT 
  651. 6510 LINE% = 7
  652. 6520  RETURN 
  653. 6530  REM * CHECK FOR LISTING ABORT *
  654. 6540 INPT% =  PEEK( -16384) -128: POKE  -16368,0
  655. 6550  IF INPT% <0  THEN  RETURN 
  656. 6560  PRINT CD$;"PR#0"
  657. 6570 A$ = "ABORT ANALYSIS LISTING -"
  658. 6580  GOSUB 5690
  659. 6590  IF INPT% = 1  THEN 6620
  660. 6600  GOSUB 5440
  661. 6610  PRINT "*** PRESS ANY KEY TO INTERRUPT ***"
  662. 6620  PRINT CD$;"PR#";SLOT%
  663. 6630  RETURN 
  664. 6640  REM * PRINT FOOTER *
  665. 6650  IF LINE% >0  THEN  FOR J = LINE% TO 66
  666. 6660  PRINT 
  667. 6670  NEXT 
  668. 6680  RETURN 
  669. 6690  REM * MAIN ROUTINE ******
  670. 6700  ONERR  GOTO 8430
  671. 6710  NOTRACE : SPEED= 255: PRINT  CHR$(4);"NOMON C,I,O"
  672. 6720  TEXT : HOME 
  673. 6730  DATA  169,16,141,242,3,169,3,141,243,3,73,165,141,244,3,96,32,234,3,76,18,212,104,168,104,166,223,154,72,152,72,96
  674. 6740  FOR J = 768 TO 799
  675. 6750  READ K: POKE J,K
  676. 6760  NEXT 
  677. 6770  CALL 768
  678. 6780  ONERR  GOTO 7650
  679. 6790 ERCNT = 0
  680. 6800  REM * INTRODUCE PROGRAM *
  681. 6810  DIM GSUM(5),GDES%(5,20),ARES(5),ADES$(5),FDES$(20),PDES%(20)
  682. 6820 WNDW% = 1: GOSUB 280
  683. 6830  PRINT "             THE ORACLE"
  684. 6840  PRINT 
  685. 6850  PRINT "            BY JEFF G. COX             "
  686. 6860  PRINT "     STARFIRE CONCEPTS OF COLORADO     "
  687. 6870  PRINT "  COPYRIGHT 1983 BY MICROSPARC, INC."
  688. 6880  PRINT 
  689. 6890  REM * DECLARE VARIABLES *
  690. 6900  REM * DECLARE CONSTANTS *
  691. 6910 ALNG% = 5
  692. 6920 AMAX% = 5
  693. 6930 CD$ =  CHR$(4)
  694. 6940 WLNG% = 25
  695. 6950 CNCL% = 27
  696. 6960 DEC% = 8
  697. 6970 EXEC% = 13
  698. 6980 FLNG% = 10
  699. 6990 FMAX% = 20
  700. 7000 ICR% = 21
  701. 7010 RET$ =  CHR$(13)
  702. 7020 SKIP% = 32
  703. 7030  REM * DECLARE VARIABLES *
  704. 7040 SFLG% = 0
  705. 7050 NAME$ = "TRADE STUDY"
  706. 7060 PAGE% = 0
  707. 7070 SLOT% = 1
  708. 7080 BFLG% = 1
  709. 7090  REM * HANDLE MAIN MENU *
  710. 7100 WNDW% = 3: GOSUB 280
  711. 7110 ERCNT = 0
  712. 7120 VBOT% = VFIR% +1
  713. 7130  PRINT "   START A NEW ANALYSIS"
  714. 7140  PRINT "   RETRIEVE AN ANALYSIS FROM DISC"
  715. 7150  IF BFLG% = 1  THEN 7260
  716. 7160  PRINT "   ADD AN ALTERNATIVE"
  717. 7170  PRINT "   DELETE AN ALTERNATIVE"
  718. 7180  PRINT "   CHANGE AN ALTERNATIVE'S NAME"
  719. 7190  PRINT "   ADD A FACTOR"
  720. 7200  PRINT "   DELETE A FACTOR"
  721. 7210  PRINT "   CHANGE A FACTOR'S PRIORITY"
  722. 7220  PRINT "   CHANGE A FACTOR'S NAME"
  723. 7230  PRINT "   CHANGE AN ALTERNATIVE'S GRADE"
  724. 7240  PRINT "   PRINT ANALYSIS";
  725. 7250 VBOT% = VFIR% +10
  726. 7260 M1% = VFIR%:M2% = VBOT%
  727. 7270 A$ = "DO YOU WANT TO":PFLG% = 0
  728. 7280  GOSUB 5190
  729. 7290  IF INPT% <1  THEN 7580
  730. 7300 WNDW% = 3: GOSUB 280
  731. 7310  ON INPT% GOTO 7330,7350,7370,7390,7410,7430,7450,7470,7490,7510,7540
  732. 7320  GOTO 7100
  733. 7330  GOSUB 4270
  734. 7340  GOTO 7560
  735. 7350  GOSUB 1590
  736. 7360  GOTO 7560
  737. 7370  GOSUB 2640
  738. 7380  GOTO 7560
  739. 7390  GOSUB 2870
  740. 7400  GOTO 7560
  741. 7410  GOSUB 3140
  742. 7420  GOTO 7560
  743. 7430  GOSUB 3400
  744. 7440  GOTO 7560
  745. 7450  GOSUB 3720
  746. 7460  GOTO 7560
  747. 7470  GOSUB 3970
  748. 7480  GOTO 7560
  749. 7490  GOSUB 4180
  750. 7500  GOTO 7560
  751. 7510 A$ = "TO CHOOSE AN ALTERNATIVE TO BE CHANGED,": GOSUB 5600
  752. 7520  IF ACUR% >0  THEN  GOSUB 2430
  753. 7530  GOTO 7560
  754. 7540  GOSUB 5970
  755. 7550  GOTO 7560
  756. 7560 BFLG% = 0
  757. 7570  GOTO 7100
  758. 7580  GOSUB 1290
  759. 7590 A$ = "EXIT PROGRAM -": GOSUB 5690
  760. 7600  IF INPT% < >1  THEN 7100
  761. 7610 WNDW% = 1: GOSUB 280
  762. 7620  PRINT "BYE . . ."
  763. 7630  GOTO 8430
  764. 7640  REM * ERROR PROCESSING **
  765. 7650  ONERR  GOTO 8310
  766. 7660  CALL 790
  767. 7670  IF PAGE% < >0  THEN  PRINT CD$;"PR#0"
  768. 7680 WNDW% = 4: GOSUB 280
  769. 7690 A% = 3: GOSUB 5550
  770. 7700  ON  PEEK(222) GOTO 8310,8310,8310,7740,8310,7800,8310,7880,7960,8030,8110,8310,8110
  771. 7710  IF  PEEK(222) = 56  OR  PEEK(222) = 255  THEN  HOME : CALL  -10621: GOTO 6820
  772. 7720  GOTO 8310
  773. 7730  REM  * WRITE-PROTECTED DISC
  774. 7740  FLASH : PRINT "WARNING";
  775. 7750  NORMAL : PRINT ":  DISC HAS WRITE PROTECT"
  776. 7760  PRINT "TAB.  REMOVE TAB OR GET ANOTHER DISC."
  777. 7770  GOSUB 5510
  778. 7780  GOTO 8260
  779. 7790  REM  * FILE NOT FOUND
  780. 7800  REM 
  781. 7810  PRINT "I CAN'T FIND THAT NAME ON THIS DISC."
  782. 7820  PRINT "TRY A DIFFERENT NAME OR CHANGE DISCS."
  783. 7830  GOSUB 5510
  784. 7840 A$ = "TO CHANGE ANALYSIS NAME,"
  785. 7850  GOSUB 1140
  786. 7860  GOTO 8260
  787. 7870  REM  * I/O ERROR
  788. 7880 ERCNT = ERCNT +1
  789. 7890  IF ERCNT >3  THEN 8310
  790. 7900  FLASH : PRINT "WARNING";
  791. 7910  NORMAL : PRINT ":  DISC DRIVER ERROR; VERIFY"
  792. 7920  PRINT "DISC IS INSERTED AND DOOR IS CLOSED."
  793. 7930  GOSUB 5510
  794. 7940  GOTO 8260
  795. 7950  REM  * FULL DISC
  796. 7960  PRINT CD$;"DELETE ";NAME$
  797. 7970  FLASH : PRINT "WARNING";
  798. 7980  NORMAL : PRINT ":  DISC IS FULL.  PLEASE"
  799. 7990  PRINT "INSERT ANOTHER DISC."
  800. 8000  GOSUB 5510
  801. 8010  GOTO 8260
  802. 8020  REM  * FILE LOCKED
  803. 8030  FLASH : PRINT "WARNING";
  804. 8040  NORMAL : PRINT ":  FILE ALREADY EXISTS."
  805. 8050  INPUT "OK TO OVERWRITE (Y/N)? ";INPT$
  806. 8060  IF INPT$ < >"Y"  AND INPT$ < >"N"  THEN 8030
  807. 8070  IF INPT$ = "N"  THEN A$ = "TO CHANGE ANALYSIS NAME,": GOSUB 1140
  808. 8080  PRINT CD$;"UNLOCK ";NAME$
  809. 8085  PRINT CD$;"WRITE ";NAME$
  810. 8090  GOTO 8260
  811. 8100  REM   * FILE TYPE MISMATCH OR CTRL-C
  812. 8110  PRINT "THAT NAME IS NOT A SOUND TABLE."
  813. 8120  PRINT "PLEASE TRY A DIFFERENT NAME OR DISC."
  814. 8130  GOSUB 5510
  815. 8140 A$ = "TO CHANGE ANALYSIS NAME,"
  816. 8150  GOSUB 1140
  817. 8160  GOTO 8260
  818. 8170  REM  * RESET OR CTRL-C STOP
  819. 8180  FLASH : PRINT "WARNING";
  820. 8190  NORMAL : PRINT ":  DO NOT PRESS CTRL-C OR"
  821. 8200  PRINT "RESET.  DO YOU WISH TO ABORT THE"
  822. 8210  INPUT "PROGRAM (Y/N)? ";INPT$
  823. 8220  IF INPT$ = "!"  THEN  END 
  824. 8230  IF INPT$ < >"Y"  AND INPT$ < >"N"  THEN 8180
  825. 8240  IF INPT$ = "Y"  THEN 8310
  826. 8250  GOTO 8260
  827. 8260 WNDW% = 4: GOSUB 280
  828. 8270  IF PAGE% < >0  THEN  PRINT CD$;"PR#";SLOT%
  829. 8280  ONERR  GOTO 7650
  830. 8290  RESUME 
  831. 8300  REM * NON-RECOVERABLE ERRORS
  832. 8310  ONERR  GOTO 8410
  833. 8320  TEXT : HOME : IF  PEEK(222) = 56  OR  PEEK(222) = 255  THEN  CALL  -10621: GOTO 6820
  834. 8330  FLASH : PRINT "WARNING";
  835. 8340  NORMAL : PRINT ":  PROGRAM HAS BEEN ABORTED"
  836. 8350  PRINT "DUE TO ONERR CODE "; PEEK(222);" ON LINE "; PEEK(218) + PEEK(219) *256;"."
  837. 8360  PRINT 
  838. 8370  PRINT "I WILL TRY TO SAVE YOUR ANALYSIS"
  839. 8380  PRINT "UNDER THE NAME OF 'ADUMP'."
  840. 8390 NAME$ = "ADUMP"
  841. 8400  PRINT CD$;"UNLOCK ";NAME$
  842. 8410  ONERR  GOTO 8430
  843. 8420 SFLG% = 1: GOSUB 1290
  844. 8430  END