38080 IF PPRT > 1 THEN LPRINT P4;TAB(6)"SOLUTION ";S1$;" SUCCESS ";SS
38085 IF PPRT = 3 THEN GOSUB 34000
38200 RETURN
38218 S2H = S2
39000 REM CONT
39010 IF NBRT = 250 THEN PRINT " THERE ARE TOO MANY PROBLEMS TO DO A SEARCH "
39020 IF NBRT = 250 THEN PRINT " A SEARCH MAY ONLY BE CONDUCTED ON 249 OR LESS PROBLEMS "
39100 PRINT "DO YOU WANT TO CONDUCT A SEARCH FOR ALL AND MULTIPLE SOLUTIONS ?"
39110 PRINT " 1 - YES SEARCH "
39120 PRINT " 2 - NO "
39130 GOSUB 60000
39140 IF DT# < 1 OR DT# > 2 THEN 39100
39150 IF DT# = 2 THEN 20000
39200 REM **** START SEARCH
39210 FOR S = 1 TO MRN3
39215 NPRT = 1
39217 RN = S
39220 GOSUB 54427
39225 IF S2 < 1 THEN 39290
39230 FOR N = 1 TO NBRT
39235 IF ABS(S2H) > 1 THEN RN = S
39237 IF ABS(S2H) > 1 THEN GOSUB 54427
39240 T = PBM(N)
39250 SS = 0
39260 GOSUB 40000
39270 IF ABS(SS) > 0 THEN GOSUB 39500
39280 NEXT N
39290 NEXT S
39300 PRINT "******* PRESS ANY KEY TO CONTINUE *******"
39310 IF INKEY$ = "" THEN 39310
39480 GOTO 20000
39500 REM PRINT PROBLEM
39502 RN = S
39504 GOSUB 54427
39510 RN = T
39520 GOSUB 54200
39530 IF NPRT = 1 THEN PRINT S;"SOLUTION ";S1$;" SOLVES :"
39535 IF NPRT = 1 AND PPRT > 1 THEN LPRINT S;"SOLUTION ";S1$;" SOLVES :"
39540 PRINT T;TAB(6) P1$;" SUCCESS RATE";SS
39545 IF PPRT > 1 THEN LPRINT T;TAB(6) P1$;" SUCCESS RATE";SS
39550 NPRT = 0
39560 RETURN
39980 GOTO 20000
40000 REM * DETERMINE PROBABILIYTY OF SUCCESS
40100 IF T = S4 THEN SS = S5
40110 IF T = S6 THEN SS = S7
40120 IF T = S8 THEN SS = S9
40130 IF T = S10 THEN SS = S11
40140 IF T = S12 THEN SS = S13
40145 IF ABS(S2) > 1 THEN GOTO 40200
40150 RETURN
40200 REM *** SOLUTIONS CONTINUED
40210 RN = ABS(S2)
40215 S2H = S2
40220 GOSUB 54427
40230 GOTO 40000
41000 REM ** PRINT OUT QUESTIONS
41100 GOSUB 500
41110 PRINT " DO YOU WANT "
41120 PRINT " 1 - ONLY QUESTIONS ANSWERED SHOWN"
41130 PRINT " 2 - ALL QUESTIONS SHOWN "
41140 GOSUB 60000
41150 IF DT# < 0 OR DT# > 2 THEN 41000
41155 IF DT# = 0 THEN 20000
41160 QT = DT#
41170 PRINT " DO YOU WANT "
41180 PRINT " 1 - SHOWN ON THE SCREEN ONLY "
41190 PRINT " 2 - SHOWN ON THE SCREEN AND PRINTED ON PAPER"
41195 PRINT " MAKE SURE YOUR PRINTER IS ON "
41200 GOSUB 60000
41210 IF DT# < 1 OR DT# > 2 THEN 41170
41220 PRTFLG = DT#
41300 REM *** START LOOP
41310 FOR T = 1 TO MRN1
41315 IF INKEY$ >< "" THEN GOSUB 42000
41320 IF ANS(T) = -999 AND QT = 1 THEN 41700
41330 RN = T
41340 GOSUB 54000
41345 IF Q3 < 0 THEN 41700
41350 PRINT T;TAB(5);Q$;
41355 IF ANS(T) = -999 THEN PRINT TAB(60) "NA" ELSE PRINT TAB(60) ANS(T)
41360 IF PRTFLG = 2 THEN LPRINT T;TAB(5);Q$;
41362 IF PRTFLG = 2 THEN GOSUB 41800
41364 GOSUB 17000
41365 REM IF PRTFLG = 2 THEN GOSUB 17200
41700 NEXT T
41710 PRINT " PRESS ANY KEY TO CONTINUE "
41720 IF INKEY$ = "" THEN 41720
41730 GOTO 20000
41800 IF ANS(T) = -999 THEN LPRINT TAB(60) "NA" ELSE LPRINT TAB(60) ANS(T)
41810 RETURN
42000 REM ****** PAUSE SUBROUTINE
42100 PRINT " PRESS ANY KEY TO CONTINUE "
42110 IF INKEY$ = "" THEN 42110
42120 RETURN
50000 REM ********** INTRO
50010 GOSUB 500
50100 PRINT " E X P E R T S Y S T E M P R O G R A M 1.0 "
50105 PRINT ""
50110 PRINT " Copyright 1984 by Potomac Pacific Engineering Inc."
50120 PRINT ""
50130 PRINT "This program is licensed FREE to all users with some restrictions"
50165 PRINT " See the manual for more information on the license."
50167 PRINT ""
50950 PRINT "*********************** DO YOU WANT TO ************************"
50960 PRINT " 1 - START A NEW PROBLEM "
50970 PRINT " 2 - CONTINUE WITH A PROIR ANALYSIS "
50975 PRINT "*************** ENTER THE NUMBER THEN PRESS RETURN *************"
50980 GOSUB 60000
50985 IF DT# <1 OR DT# > 2 THEN 50000
50990 RETURN
51000 REM ***** EXIT TO SYSTEM
51010 GOTO 51200
51100 GOSUB 500
51110 CLOSE
51120 PRINT " -BYE, Have a nice day"
51130 END
51200 REM WANRING
51210 GOSUB 500
51220 PRINT " YOU WILL LOSE YOUR ANSWERS UNLESS YOU HAVE PREVIOUSLY SAVED THEM"
51230 PRINT ""
51240 PRINT " DO YOU WANT TO :"
51250 PRINT " 1 - EXIT THE PROGRAM "
51260 PRINT " 2 - RETURN TO OPTIONS "
51270 PRINT " ENTER THE NUMBER THEN PRESS RETURN "
51280 GOSUB 60000
51290 IF DT# < 1 OR DT# > 2 THEN 51280
51300 ON DT# GOTO 51100,19000
52000 REM ***** INTRO 1
52010 GOSUB 500
52100 PRINT " Put the Expert System disk the default disk drive "
52110 PRINT ""
52120 PRINT " ***** THEN PRESS ANY KEY TO CONTINUE *****"
52130 PRINT ""
52140 PRINT " The Expert System ONLY uses the Expert System Disk "
52150 PRINT "Keep it in the default disk drive at all times during this program."
52200 IF INKEY$ = "" GOTO 52200
52210 RETURN
53000 REM OPEN AND FIELD FILES
53100 OPEN "R",#1,"QUESTION",56
53110 FIELD #1, 50 AS Q$,2 AS Q2$,2 AS Q3$,2 AS Q4$
53200 OPEN "R",#2,"PROBLEMS",120
53210 FIELD #2, 50 AS P1$,2 AS P2$,2 AS P3$,2 AS P4$,2 AS P5$,2 AS P6$, 2 AS P7$, 2 AS P8$,4 AS P9$,4 AS P10$,2 AS P11$,2 AS P12$,4 AS P13$,4 AS P14$,2 AS P15$,2 AS P16$
53220 FIELD #2,88 AS DY$,4 AS P17$,4 AS P18$,2 AS P19$,2 AS P20$,4 AS P21$,4 AS P22$,2 AS P23$,2 AS P24$,4 AS P25$,4 AS P26$
53300 OPEN "R",#3,"SOLUTION",74
53310 FIELD #3, 50 AS S1$, 2 AS S2$,2 AS S3$,2 AS S4$,2 AS S5$,2 AS S6$,2 AS S7$,2 AS S8$,2 AS S9$,2 AS S10$,2 AS S11$,2 AS S12$,2 AS S13$
53350 REM GET MAXIMUM NUMBER OF RECORDS
53360 MRN1 = LOF(1) / 56
53370 MRN2 = LOF(2) / 120
53380 MRN3 = LOF(3) / 74
53400 RETURN
54000 REM get and convert files
54010 KTQ = KTQ + 1
54100 REM question file
54105 GET #1,RN
54110 Q2 = CVI(Q2$)
54120 Q3 = CVI(Q3$)
54130 Q4 = CVI(Q4$)
54140 ACT(KTQ) = RN
54160 IF KTQ > 24 THEN KTQ = 1
54170 RETURN
54200 REM PROBLEM FILE
54203 GET #2,RN
54205 P2 = CVI(P2$)
54210 P3 = CVI(P3$)
54220 P4 = CVI(P4$)
54230 P5 = CVI(P5$)
54240 P6 = CVI(P6$)
54250 P7 = CVI(P7$)
54260 P8 = CVI(P8$)
54270 P9!= CVS(P9$)
54280 P10 = CVS(P10$)
54290 P11 = CVI(P11$)
54300 P12 = CVI(P12$)
54310 P13!= CVS(P13$)
54320 P14 = CVS(P14$)
54330 P15 = CVI(P15$)
54340 P16 = CVI(P16$)
54350 P17!= CVS(P17$)
54360 P18 = CVS(P18$)
54370 P19 = CVI(P19$)
54380 P20 = CVI(P20$)
54390 P21!= CVS(P21$)
54400 P22 = CVS(P22$)
54410 P23 = CVI(P23$)
54420 P24 = CVI(P24$)
54422 P25!= CVS(P25$)
54424 P26 = CVS(P26$)
54426 RETURN
54427 GET #3, RN
54428 S2 = CVI(S2$)
54430 S3 = CVI(S3$)
54440 S4 = CVI(S4$)
54450 S5 = CVI(S5$)
54460 S6 = CVI(S6$)
54470 S7 = CVI(S7$)
54480 S8 = CVI(S8$)
54490 S9 = CVI(S9$)
54500 S10 = CVI(S10$)
54510 S11 = CVI(S11$)
54520 S12 = CVI(S12$)
54530 S13 = CVI(S13$)
54540 RETURN
60000 REM ******* INTEGER LESS THEN 100 CHECK ********
60010 MAX = 2
60020 ACT$ = "1234567890=<>^"
60030 IF NE = 0 THEN ACT$ = "1234567890"
60040 PRINT ">__<";
60050 GOTO 60240
60060 REM ******* INTEGER *******
60070 MAX = 8
60080 ACT$ = "1234567890-+,=<>^"
60090 IF NE = 0 THEN ACT$ = "1234567890-+,"
60100 PRINT ">________<";
60110 GOTO 60240
60120 REM ******* SINGLE PRECISION *******
60130 MAX = 10
60140 ACT$ = "1234567890-+,.%$=<>^"
60150 IF NE = 0 THEN ACT$ = "1234567890+-,.%$"
60160 PRINT ">__________<";
60170 GOTO 60240
60180 REM ******* DOUBLE PRECISION *******
60190 MAX = 20
60200 ACT$ = "1234567890-+,.%$=<>^"
60210 IF NE = 0 THEN ACT$ = "1234567890+-,.%$"
60220 PRINT ">____________________<";
60230 GOTO 60240
60240 REM ********** NUMBER CHECK **********
60245 NFLG = 0
60250 A$ = ""
60260 K$(20) = " "
60270 KTMAX = 0
60280 FOR T9 = 1 TO MAX
60290 K$(T9) = " "
60300 NEXT T9
60310 DIG$ = "1234567890."
60320 DOTFLG = 0
60330 T2 = MAX + 1
60340 FOR T6 = 1 TO T2
60350 PRINT CHR$(CH);
60360 NEXT T6
60370 IF INKEY$ = "" GOTO 60380 ELSE GOTO 60370
60380 KT = 0
60390 REM *********** CHECK ALFANUMERIC INPUT FOR LENGTH ***********
60400 KT = KT + 1
60410 REM
60420 W$ = INKEY$
60425 IF W$ = "N" OR W$ = "n" THEN GOTO 63100
60430 IF W$ = "" GOTO 60420
60440 C = ASC(W$)
60450 IF C = 0 THEN GOSUB 61900
60460 IF C = 13 GOTO 60580
60470 IF C = 17 OR C = 8 GOTO 61150
60480 IF C = 19 GOTO 60670
60490 IF C = 4 GOTO 60720
60500 IF C = 6 GOTO 60780
60510 IF C = 1 GOTO 60960
60520 IF KT > MAX GOTO 60410
60530 IF INSTR(ACT$,W$) = 0 GOTO 61230
60540 K$(KT) = W$
60550 PRINT K$(KT);
60560 IF KT > KTMAX THEN KTMAX = KT
60570 GOTO 60400
60580 REM ********** RETURN **********
60590 FOR T9 = 1 TO KTMAX
60600 A$ = A$ + K$(T9)
60610 NEXT T9
60620 IF KTMAX = 0 THEN PRINT "1"
60630 IF KTMAX = 0 THEN DT# = 1
60640 IF KTMAX = 0 THEN RETURN
60650 IF SPRT >< 5 THEN PRINT ""
60655 SPRT = 0
60660 GOTO 61260
60670 REM ********* MOVE CURSE BACK ********
60680 IF KT = 1 GOTO 60410
60690 KT = KT - 1
60700 PRINT CHR$(CH);
60710 GOTO 60410
60720 REM ********* MOVE CURSER FORWARD *********
60730 IF KT >= MAX GOTO 60410
60740 IF KT > (KTMAX + 1) GOTO 60410
60750 PRINT K$(KT);
60760 KT = KT + 1
60770 GOTO 60410
60780 REM ********** INSERT ***********
60790 IF KT > KTMAX GOTO 60410
60800 X9 = MAX
60810 WHILE X9 > KT
60820 X9 = X9 - 1
60830 K$(X9 + 1) = K$(X9)
60840 WEND
60850 K$(KT) = " "
60860 KTMAX = KTMAX + 1
60870 IF KTMAX > MAX THEN KTMAX = MAX
60880 FOR T9 = KT TO KTMAX
60890 PRINT K$(T9);
60900 NEXT T9
60910 T6 = (KTMAX - KT) + 1
60920 FOR T7 = 1 TO T6
60930 PRINT CHR$(CH);
60940 NEXT T7
60950 GOTO 60410
60960 REM ********** DELETE ***********
60970 IF KT > KTMAX GOTO 60410
60980 IF KTMAX = 1 GOTO 60410
60990 K$(MAX + 1) = ""
61000 X9 = KT
61010 WHILE X9 <= MAX
61020 K$(X9) = K$(X9 + 1)
61030 X9 = X9 + 1
61040 WEND
61050 KTMAX = KTMAX - 1
61060 FOR T9 = KT TO KTMAX
61070 PRINT K$(T9);
61080 NEXT T9
61090 PRINT "_";
61100 T7 = (KTMAX - KT) + 2
61110 FOR T8 = 1 TO T7
61120 PRINT CHR$(CH);
61130 NEXT T8
61140 GOTO 60410
61150 REM ********* BACKSPACE ********
61160 IF KT = 1 GOTO 60410
61170 KT = KT - 1
61180 PRINT CHR$(CH);
61190 K$(KT) = " "
61200 PRINT "_";
61210 PRINT CHR$(CH);
61220 GOTO 60410
61230 REM ******* INPUT NOT ACCEPTABLE ********
61240 PRINT CHR$(7);
61250 GOTO 60420
61260 REM ********* CLEAR STRINGS ********
61270 MAX = LEN(A$)
61280 D2$ = ""
61290 D1$ = ""
61300 DFLG = 0
61310 FOR Q93 = 1 TO MAX
61320 R$ = MID$(A$,Q93,1)
61330 IF INSTR(DIG$,R$) = 0 GOTO 61400
61340 IF R$ = "." OR DFLG = 1 GOTO 61380
61350 IF DFLG = 1 GOTO 61380
61360 D2$ = D2$ + R$
61370 GOTO 61400
61380 D1$ = D1$ + R$
61390 DFLG = 1
61400 NEXT Q93
61410 DA# = VAL(D2$)
61420 D1# = VAL(D1$)
61430 DT# = DA# + D1#
61440 IF K$(1) = "-" THEN DT# = -DT#
61450 RETURN
61900 REM ****** CHECK FOR ASC0
61910 SS4$ = INKEY$
61915 IF SS4$ = "" THEN RETURN
61920 C2 = ASC(SS4$)
61930 IF C2 = 83 THEN C = 1
61940 IF C2 = 82 THEN C = 6
61950 IF C2 = 75 THEN C = 19
61960 IF C2 = 77 THEN C = 4
61970 RETURN
62000 REM ********** ALPHANUMERIC CHECK **************
62010 REM MAX = FL(A,Q)
62020 GOTO 62040
62030 REM ******** MAX SET IN PROGRAM ********
62040 A$ = ""
62050 PRINT ">";
62060 FOR N9 = 1 TO MAX
62070 K$(N9) = ""
62080 PRINT "_";
62090 NEXT N9
62100 PRINT "<";
62110 T2 = MAX + 1
62120 FOR T4 = 1 TO T2
62130 PRINT CHR$(CH);
62140 NEXT T4
62150 KT = 0
62160 KTMAX = 1
62170 REM *********** CHECK ALFANUMERIC INPUT FOR LENGTH ***********