10 REM **************************** 12 REM * A NEW EXPERT SYSTEM PROG * 14 REM **************************** 16 CD$="" 18 CD$(1)=LEFT$(CD$,5) 20 CD$(2)=LEFT$(CD$,11) 22 CD$(3)=LEFT$(CD$,19) 24 IT$=" THE ADVISOR [146]" 26 PRINT"[147]";TAB(12);IT$ 29 PRINT"";TAB(7);" BOB GARNER APRIL 1990 ":GOSUB482 30 PRINT"[147]";CD$(2);TAB(7);" SETTING THE DIMENSIONS [146]" 32 DIM T(10,10,10),A$(15),V$(15,15),C$(20),VT(10) 34 S1=1065:S2=S1+37:S3=1982:S4=S3-37 36 DE$(6)="UNKNOWN FACTOR" 38 GOSUB518 40 GOSUB 390 42 POKE 53281,6:GOSUB466 44 REM ************ 46 REM * THE MENU * 48 REM ************ 50 PRINT"";TAB(11);IT$ 52 PRINT""TAB(13)"**THE MENU**" 54 PRINTTAB(10);"1. INPUT DATA" 56 PRINTTAB(10);"2. VIEW THE DATA" 58 PRINTTAB(10);"3. SAVE DATA" 60 PRINTTAB(10);"4. RETRIEVE THE DATA" 62 PRINTTAB(10);"5. CHANGE THE DATA" 64 PRINTTAB(10);"6. ANALYSE DATA" 66 PRINTTAB(10);"7. SCRATCH DATA" 68 PRINTTAB(10);"8. DISK DIRECTORY" 70 PRINTTAB(10);"9. RANK DATA" 72 PRINTTAB(10);"0. QUIT" 74 PRINTTAB(10)" TYPE THE NUMBER [146]" 76 GET M$:IF M$="" THEN 76 78 M=ASC(M$):IF M<48 OR M>57 THEN GOSUB 516:M=0:GOTO76 80 ON M-47 GOSUB88,92,202,272,320,354,536,402,484,232 82 GOTO86 84 GOTO50 86 GOTO42 88 SYS 64760 90 REM ********************* 92 REM * NAMING THE SYSTEM * 94 REM ********************* 96 PRINT"[147]";TAB(11);IT$ 98 PRINTTAB(10);" NAMING THE SYSTEM [146]" 100 ZZ=1:PRINT"WHAT WILL YOU CALL THE SYSTEM" 102 PRINT"BEING CREATED":PRINT"";:INPUT NA$ 104 REM ******************** 106 REM * THE ATTRIBUTES * 108 REM ******************** 110 PRINT"[147]";TAB(11);IT$ 112 PRINTTAB(9);" CREATING ATTRIBUTES [146]" 114 FOR T=1TO6 116 PRINT"ATTRIBUTE ";T; 118 PRINT"";:INPUT A$(T) 120 NEXT 122 PRINT"[147]" 124 REM ************** 126 REM * THE VALUES * 128 REM ************** 130 PRINT"[147]";TAB(11);IT$ 132 PRINTTAB(11);" CREATING VALUES [146]" 134 FOR T=1TO6 136 PRINT"ATTRIBUTE - ";A$(T) 138 FOR S=1TO3 140 PRINT "VALUE ";S; 142 PRINT"";:INPUT V$(T,S) 144 NEXT:PRINT"":NEXT:PRINT:PRINT:GOSUB390 146 REM ***************** 148 REM * THE DECISIONS * 150 REM ***************** 152 X=1 154 PRINT"[147]";TAB(11);IT$ 156 PRINTTAB(11);" THE DECISIONS [146]" 158 PRINT"WHAT IF YOU HAVE ALL THESE" 160 FORT=1TO6 162 PRINT 164 FORS=XTO3STEP3 166 PRINTTAB(5);S;"[157]. ";V$(T,S) 168 NEXT:NEXT 170 PRINT"";:INPUT "YOUR DECISION :";DE$(X) 172 X=X+1:IF X>3 THEN 176 174 GOTO154 176 PRINT"[147]";TAB(11);IT$ 178 PRINTTAB(11);" THE DECISIONS [146]" 180 PRINT"WHAT IF ";DE$(1);"[146] AND " 182 PRINT"";DE$(2);"[146] ARE MIXED" 184 PRINT"";:INPUT "YOUR DECISION :";DE$(X) 186 X=X+1 188 PRINT"[147]";TAB(11);IT$ 190 PRINTTAB(11);" THE DECISIONS [146]" 192 PRINT"WHAT IF ";DE$(2);"[146] AND " 194 PRINT"";DE$(3);"[146] ARE MIXED" 196 PRINT"";:INPUT "YOUR DECISION :";DE$(X) 198 RETURN 200 REM *********************** 202 REM * SCREEN VIEW OF DATA * 204 REM *********************** 206 X=1:Y=3 208 IF Y>6THEN 226 210 PRINT"[147]";TAB(8);NA$ 212 FOR T=XTOY 214 PRINT"ATTRIBUTE ";T;"-  ";A$(T) 216 PRINT 218 FOR S=1TO3 220 PRINTTAB(5);"VALUE";S;"-  ";V$(T,S) 222 NEXT:NEXT:PRINT:PRINT:PRINT 224 GOSUB390:Y=Y+3:X=X+3:GOTO208 226 PRINT"[147]";TAB(5)"THESE ARE YOUR DECISIONS" 228 PRINT"":FORG=1TO5:PRINTTAB(6);DE$(G):PRINT"":PRINT:NEXT:GOSUB390:RETURN 230 REM ******************** 232 REM * RANKING THE DATA * 234 REM ******************** 236 PRINT"[147]";TAB(11);IT$ 238 FORT=1TO6 240 PRINT" VALUES FOR ATTRIBUTE '";A$(T);"'" 242 FORS=1TO3 244 PRINT""S;V$(T,S):NEXT 246 PRINT"":FOR R=1TO3 248 IFR=1THENS$="FIRST ":GOTO254 250 IFR=2THENS$="SECOND":GOTO254 252 IFR=3THENS$="THIRD " 254 IF S>1THEN PRINTTAB(10);"[145][145][145][145] ":GOTO 258 256 PRINT"" 258 PRINT" WHICH WOULD YOU PUT ";S$ 260 PRINTTAB(10)"";:INPUTC(R) 262 B$(T,R)=V$(T,C(R)):NEXT 264 PRINTTAB(10)" "; 266 FOR S=1TO3:V$(T,S)=B$(T,S):NEXTS 268 PRINT"[147]":NEXTT:GOSUB390:RETURN 270 REM ***************** 272 REM * SAVE THE DATA * 274 REM ***************** 276 PRINT"[147]";TAB(12);IT$ 278 PRINT"ARE YOU SURE (Y/N)" 280 GET B$:IF B$="" THEN 280 282 IF B$="N" THEN RETURN 284 PRINT"OK - I HAVE THE NAME FILE  "NA$" " 286 PRINT"IS THIS CORRECT (Y/N)" 288 GET B$:IF B$="" THEN 288 290 IF B$="Y" AND LEN(NA$)>=3 THEN 302 292 IF B$="N" THEN 296 294 : 296 PRINTTAB(7);" TYPE IN THE CORRECT NAME [146]" 297 PRINTTAB(12);" THEN [RETURN] [146]" 298 PRINT:PRINTTAB(7);:INPUT NA$ 300 IF LEN(NA$)<3 THEN PRINTCD$(3);TAB(11);" INVALID ENTRY [146]":GOSUB390:RETURN 302 PRINTTAB(4);"CREATING ";NA$;" DISK FILE" 304 OPEN 15,8,15 306 OPEN4,8,4,NA$+",S,W":GOSUB444 308 PRINT#4,NA$ 310 FOR T=1TO6:PRINT#4,A$(T):NEXT 312 FORT=1TO6:FOR S=1TO3:PRINT#4,V$(T,S):NEXT:NEXT 314 FOR T=1TO5:PRINT#4,DE$(T):NEXT 316 CLOSE15:CLOSE4:PRINT:PRINTTAB(4);"FILE SAVED":GOSUB 390:RETURN 318 REM ********************* 320 REM * RETRIEVE THE DATA * 322 REM ********************* 324 PRINT"[147]";TAB(11);IT$ 326 PRINT"WHICH FILE IS TO BE RETRIEVED" 328 PRINT"";:INPUT NA$ 330 IF LEN(NA$)<3 THEN PRINTCD$(3);TAB(11);"INVALID INPUT":GOSUB390:RETURN 332 TA3=INT((19-(LEN(NA$)))/2) 334 PRINTTAB(TA3);"RETRIEVING ";NA$;"[146] DATA FILE" 336 OPEN 15,8,15 338 OPEN4,8,4,NA$+",S" 340 INPUT#4,NA$ 342 FOR T=1TO6:INPUT#4,A$(T):NEXT 344 FORT=1TO6:FOR S=1TO3:INPUT#4,V$(T,S):NEXT:NEXT:GOSUB 444 346 FOR T=1TO5:INPUT#4,DE$(T):NEXT 348 CLOSE15:CLOSE4:ZZ=1 350 PRINT"";TAB(TA3);"DATA FILE ";NA$;"[146] RETRIEVED":GOSUB390:RETURN 352 REM ******************* 354 REM * CHANGE THE DATA * 356 REM ******************* 358 PRINT"[147]";TAB(11);IT$ 360 PRINT"SYSTEM NAME IS ",NA$;:INPUT NA$ 362 FOR T=1TO6 364 PRINT"ATTRIBUTE ";T;"-  ";A$(T);:INPUT A$(T) 366 PRINT 368 FOR S=1TO3 370 PRINT"VALUE";S;"-  ";V$(T,S);:INPUTV$(T,S) 372 NEXT:NEXT 374 PRINT:PRINT:PRINT 376 PRINT"THESE ARE YOUR DECISIONS" 378 FOR U=1TO5 380 PRINT"";U". ";DE$(U):PRINT:INPUT"";DE$(U) 382 NEXT:PRINT"":GOSUB390:RETURN 384 REM **************** 386 REM * PAGE CONTROL * 388 REM **************** 390 PRINTCD$;TAB(6);" SPACE=CONTINUE [146]  _ = ABORT [146]" 392 GET SP$:IF SP$=""THEN 392 394 IF SP$=CHR$(32) THEN RETURN 396 IF SP$="_" AND ZZ>0 THEN TT=0:X=6:GOTO42 398 GOSUB516:GOTO392 400 REM ********************* 402 REM * SCRATCH DATA FILE * 404 REM ********************* 406 OPEN15,8,15 408 PRINT"[147]EXPERT SYSTEMS" 410 PRINT"CONTINUE AND THE DATA FILE WILL BE" 412 PRINT"SCRATCHED !" 414 PRINT:PRINT" [SPACE] TO CONTINUE - '_' TO ABORT [146]" 416 GET K$:IF K$="" THEN 416 418 IF K$=CHR$(32) THEN 422 420 PRINT:PRINT:PRINTTAB(10)" SCRATCH ABORTED !! ":GOSUB482:GOTO434 422 PRINT"WHICH FILE TO BE SCRATCHED" 424 PRINT"";:INPUT NA$ 426 PRINT"ARE YOU SURE [Y/N]" 428 GET A$:IF A$="" THEN 428 430 IF A$="Y" THEN PRINT#15,"S:";NA$ 432 PRINT"OK ! BACK TO THE MENU":GOSUB 482 434 CLOSE15:RETURN 436 : 438 : 440 : 442 REM *************** 444 REM * DISK ERRORS * 446 REM *************** 448 INPUT#15,EN,EM$,ET,ES 450 IF EN<20 THEN RETURN 452 PRINT"[147][158] DISK ERROR HAS OCCURRED " 454 PRINT"ERROR NUMBER ";EN 456 PRINT"ERROR MESSAGE ";EM$ 458 PRINT"TRACK NUMBER ";ET 460 PRINT"SECTOR NUMBER ";ES 462 CLOSE 15 464 REM ***************** 466 REM * SCREEN EDGING * 468 REM ***************** 470 PRINT"[147]":POKE53281,1:POKE53280,6 472 FOR K=S1TOS2:POKE K,102:NEXT 474 FOR K=S2TOS3STEP40:POKE K,102:NEXT 476 FOR K=S3TOS4STEP-1:POKE K,102:NEXT 478 FOR K=S4TOS1STEP-40:POKE K,102:NEXT 480 RETURN 482 FOR Y=1TO2500:NEXT:RETURN 484 REM ********************** 486 REM * READ THE DIRECTORY * 488 REM ********************** 490 GOSUB466 492 PRINT" THIS IS THE DISK DIRECTORY " 494 OPEN 1,8,0,"$" 496 GET#1,X$,X$ 498 GET#1,X$,X$,X$,X$ 500 IF ST THEN CLOSE 1:GOSUB390:RETURN 502 GET#1,X$:IF X$="" THEN PRINTTAB(5);CHR$(34):GOTO498 504 IF X$=CHR$(34) THEN Q=NOT Q 506 IF Q THEN PRINTTAB(5);X$; 508 GOTO502 510 REM ******************* 512 REM * SCREEN REVERSER * 514 REM ******************* 516 FOR L=1TO10:SYS 52992:GOSUB532: NEXT:RETURN 518 FORJ=52992TO53018:READK:POKEJ,K:NEXT 520 DATA 169,000,133,251,169,004,133,252 522 DATA 162,004,160,000,177,251,073,128 524 DATA 145,251,200,208,247,230,252,202 526 DATA 208,240,096 528 : 530 RETURN 532 FOR K=1TO80:NEXT:RETURN 534 REM **************** 536 REM * THE ANALYSIS * 538 REM **************** 540 : 542 X=1:Q=1 544 : 546 : 548 : 550 : 552 IF TT>0 THEN 556 554 FORT=1TO6:C$(T)="UNKNOWN":NEXT 556 : 558 IFZZ=1THENGOTO574 560 A$(1)="ATTRIBUTE HERE" 562 T=1:FOR S=1TO3 564 V$(T,S)="VALUE HERE" 566 NEXT 568 DE$(F)="DECISION HERE" 570 : 572 PRINT"[147]" 574 FOR T=1TO6 576 GOSUB636:REM *PRINT BOXES* 578 PRINTCD$(1);TAB(9);A$(T):PRINTCD$(2); 580 FOR S=1TO3:PRINTTAB(5);S;"[157]. ";V$(T,S):NEXT 582 : 584 IF ZZ=0 THEN PRINTCD$(3);DE$(T):GOSUB390:RETURN 586 REM *********** 588 REM * SCORING * 590 REM *********** 592 : 594 PRINTCD$; 596 GET B$:IF B$="" THEN 596 598 IF B$="1" THEN VT(T)=3:GOTO606 600 IF B$="2" THEN VT(T)=2:GOTO606 602 IF B$="3" THEN VT(T)=1:GOTO606 604 GOSUB516:GOTO596 606 T(Q,T,S)=VT(T) 608 : 610 IF Q>1 THEN TT=TT-T(Q-1,T,S) 612 TT=TT+VT(T) 614 V=VAL(B$):C$(T)=V$(T,V):TT(Q,T,S)=TT 616 IF TT=X*3 THEN F=1:GOTO626 618 IF TT=>(X*2)+1 AND TT<=(X*3)-1 THEN F=4:GOTO626 620 IF TT=X*2 THEN F=2:GOTO626 622 IF TT=>X+1 AND TT<=(X*2)-1 THEN F=5:GOTO626 624 IF TT=X THEN F=3:GOTO626 626 IF X<=5 THEN F=6 628 GOSUB668 630 IF Q=>2 THEN X=6:NEXT:GOTO634 632 X=X+1:NEXT 634 Q=Q+1:GOTO572 636 PRINT"[147]";TAB(11);IT$ 638 PRINTTAB(7);"[176][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][174] 640 [153][163]7);"PEEK PEEK 642 PRINTTAB(7);"[173][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][189] 644 [153]:[153] 646 [153][163]4);"ORLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLEN^ 648 PRINTTAB(4);"[194] [194] 650 [153][163]4);"PEEK PEEK 652 PRINTTAB(4);"[194] [194] 654 [153][163]4);"PEEK PEEK 656 PRINTTAB(4);"[194] [194] 658 [153][163]4);"/LENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENLENEXP 660 IF ZZ=0 THEN RETURN 662 PRINT"TYPE THE NUMBER OF YOUR CHOICE" 664 RETURN 666 REM ********************* 668 REM * THE 'WHY' FACTORS * 670 REM ********************* 672 GOSUB466 674 PRINT"";TAB(11);IT$ 676 TA1=INT((37-(LEN(NA$)))/2) 678 PRINT"";TAB(TA1);NA$;" SAYS " 680 TA1=INT((40-LEN(DE$(F)))/2) 682 PRINT"";TAB(TA1)DE$(F) 684 PRINT"";TAB(15)" BECAUSE :" 686 FOR G=1TO6 688 TA2=INT((36-(LEN(A$(G))+LEN(C$(G))))/2) 690 PRINTTAB(TA2);A$(G);" IS ";C$(G) 692 NEXT 694 GOSUB390:RETURN 696 REM *********