1 ! ! CHSBRD V1-1 ! ! AUTHOR - WILLIAM KANE ! DIGITAL EQUIPMENT CORP. WESTMINISTER, MASS ! EXT 2220 ! 2 ! ! THIS PROGRAM CANNOT YET VALIDATE CHECK OR ! CHECKMATE SITUATIONS. IT WILL LET YOU MOVE ! YOUR KING INTO CHECK. ! 10 DIM B%(8%,8%): DIM M$(12%): DIM B$(18%): DIM W$(18%): DIM #12%, H$(150%)=32%: B%(X%,Y%)=0% FOR X%=0% TO 8% FOR Y%=0% TO 8%: M$(X%)="" FOR X%=0% TO 12%: B$(X%)="" FOR X%=0% TO 18%: W$(X%)="" FOR X%=0% TO 18% 15 INPUT "SET";X$: I%=1% IF X$="PW": I%=0% IF X$="PS": I%=-1% IF X$="PB": O8%=-1% IF X$="CP": GOTO 20 IF X$="": IF INSTR(1%,"PWPSPBCP",X$) THEN 15 ELSE IF LEFT(X$,2%)<>"L " THEN 19 ELSE X$=RIGHT(X$,3%) 16 IF LEFT(X$,1%)<>"L" THEN 15 ELSE & 'SORRY, NO "L" COMMAND AS YET': GOTO 15!: ON ERROR GOTO 18: L1%=VAL(LEFT(X$,X%-1%)): L2%=VAL(RIGHT(X$,X%+1%)): ON ERROR GOTO 0: GOTO 15 ! 18 RESUME 19 19 PRINT "COMMANDS ARE: PW, PB, PS, CP, L X:Y TRY AGAIN!!": GOTO 15 20 GOSUB 10900: OPEN "GAME.PLA" FOR OUTPUT AS FILE 12%: H$(0%)=" M # WHITE BLACK": H$(X%)=""+"" FOR X%=1% TO 150% 25 F$="LP0:": IF O8% THEN F$=FNB$: OPEN F$ FOR OUTPUT AS FILE 2%, MODE 2% 30 E%,E8%,C9%=0%: H9%=1%: OPEN "KB:" AS FILE 11%: GOSUB 1000: GOSUB 40: GOTO 50 40 H8$=FNB1$(H9%): IF G%<1% THEN G%=1% ELSE G%=-1% 45 RETURN 50 ! ********************************************* PLAYER INPUTS HERE 55 X$=" WHITE'S MOVE # " IF G%=1%: X$=" BLACK'S MOVE # " IF G%=-1%: PRINT #11%, CHR$(14%);CHR$(32%+0%);CHR$(32%+37%);X$;H8$;: X$=FNV1$("") 60 Z$=FNV1$(""): X$="_": GOSUB 30280: IF E%=2% THEN 14900 ELSE IF E%=1% THEN 50 ELSE E%=0%: X$=FNI1$: IF E%=1% THEN 50 ELSE IF E% THEN 800 ELSE M%=FNM%(M1$): IF E% THEN 800 ELSE M1%=0%: M1%=FNM%(M2$) IF C9%: IF E% THEN 800 70 GOSUB 700: GOTO 800 IF E%: GOSUB 900: GOSUB 40: GOTO 20000 100 ! ************************************************ FOR THE MOVEMENT OF PAWNS 110 E%=0%: GOSUB 730: E%=-1% IF X1%>1% UNLESS R0%=2% OR R0%=7%: GOTO 999 IF E%: GOSUB 150 IF E8%: GOTO 999 IF E%: GOSUB 130 IF C9%=-1% AND E8%=0%: GOTO 999 IF E%: GOSUB 120 IF NOT C9%: GOTO 999 IF E% 115 Q%=-1% IF RIGHT(C2$,LEN(C2$))="8": GOTO 999 120 D%=-1% IF D%=1% : D%=1% IF D%=5% : E%=-1% IF ABS(D%)<>1% : GOSUB 720 : E%=-1% IF X1%>2% : E%=-1% IF Y3%-X3%<1% : RETURN IF E% : GOSUB 750 : GOSUB 180 : RETURN 130 E%=-1% IF (Y3%-X3%<>1% OR Y1%<>1%) 140 GOSUB 720 : E%=-1% IF Y2%=0% : RETURN IF E% : GOSUB 750 : RETURN 150 IF M2% THEN E%=-1% IF E6%(F1%)=0% : GOTO 170 160 E%=-1% IF E7%(F1%)=0% 170 E%=-1% IF (Y3%-X3%<>0% OR Y1%<>1%) : GOTO 140 180 RETURN IF E% OR X1%<2% OR Y3%<>4% :X2%=0%: X2%=B%(R1%,F1%-1%) UNLESS F1%=1% :P%=-1% IF X2%=0% :GOSUB 720 :X2%=X2% AND 14% :P%=-1% IF X2%<>2% :IF M2% THEN E7%(F1%)=E7%(F1%) OR -1% IF P%=0% ELSE E6%(F1%)=E6%(F1%) OR -1% IF P%=0% 190 P%,X2%=0% : X2%=B%(R1%,F1%+1%) UNLESS F1%=8% : P%=-1% IF X2%=0% : GOSUB 720 : X2%=X2% AND 14% : P%=-1% IF X2%<>2% : IF M2% THEN E7%(F1%)=E7%(F1%) OR -1% IF P%=0% ELSE E6%(F1%)=E6%(F1%) OR -1% IF P%=0% 199 P%=0%: RETURN 200 ! *********************************************** FOR THE MOVEMENT OF ROOKS 210 E%=0%: GOSUB 730: GOSUB 720: D%=D% AND 1%: E%=-1% IF D%=0%: IF E% THEN 999 ELSE GOSUB 750: X%=4%: X%=2% IF LEFT(C1$,1%)="K": K0%=K0% OR X% IF G%=-1%: K1%=K1% OR X% IF G%= 1%: GOTO 999 300 ! ************************************************ FOR THE MOVEMENT OF KNIGHTS 310 E%=0% : GOSUB 730: GOSUB 720: E%=-1% IF X1%=2% AND Y1%<>1%: E%=-1% IF Y1%=2% AND X1%<>1%: E%=-1% IF Y2% UNLESS C9%: E%=-1% IF X1%>2%: E%=-1% IF Y1%>2%: E%=-1% IF X1%=1% AND Y1%=1%: GOTO 999 400 ! ************************************************ FOR THE MOVEMENT OF BISHOPS 410 E%=0%: GOSUB 730: GOSUB 720: D%=D% AND 1%: E%=-1% IF D%: IF E% THEN 999 ELSE GOSUB 750: GOTO 999 500 ! ************************************************ FOR THE MOVEMENT OF QUEENS 510 E%=0%: GOSUB 730: GOSUB 720: IF E% THEN 999 ELSE GOSUB 750: GOTO 999 600 ! ************************************************ FOR THE MOVEMENT OF KINGS 610 E%=0%: GOSUB 730: GOSUB 720: E%=-1% IF X1%>1% OR Y1%>1%: IF E% THEN 999 ELSE GOSUB 750: GOTO 999 700 ! ************************************** GENERAL SUBROUTINES 710 ON M%/2% GOSUB 100,200,300,400,500,600: RETURN 720 RETURN IF E%: E%=((X2% XOR Y2%) AND 1%)-1%: E%=0% IF (E%=-1% AND Y2%=0%) UNLESS C9%: E%=-1% IF (G%=-1% AND M1%-1%<>Y2%) IF C9%: E%=-1% IF (G%= 1% AND M1%+1%<>Y2%) IF C9%: RETURN 730 X%=R1%-R0%: Y%=F1%-F0%: X1%=ABS(X%): Y1%=ABS(Y%): X2%=B%(R0%,F0%): Y2%=B%(R1%,F1%): X3%=VAL(RIGHT(C1$,LEN(C1$))): Y3%=VAL(RIGHT(C2$,LEN(C2$))): M2%=X2% AND 1%: D%=0%: D%=FNE%(X%,Y%) UNLESS (M% OR 1%)=7%: RETURN 750 E6%(X%)=0% FOR X%=0% TO 8% IF M2% : E7%(X%)=0% FOR X%=0% TO 8% IF NOT M2% : GOTO 999 800 GOSUB 810: GOTO 60 ! *************************************** COMMON ERROR PRINT ROUTINE 810 X$=FNV1$("INVALID COMMAND - "+C$+" - TRY AGAIN!!!"): E%=0%: RETURN 820 RETURN IF O7%: H6$=STRING$(16%,ASCII(" ")): H5$=M1$+"/"+C1$+" - "+C2$ IF C9%=0%: H5$=M1$+"/"+C1$+" X "+M2$+"/"+C2$ IF C9%=-1%: H5$=H5$+"EP" IF E8%=-1%: H5$=H5$+H6$+"": H5$=LEFT(H5$,16%): IF G%=1% THEN H9$=H5$ ELSE H$(H9%)=H9$+H5$ 825 H9%=H9%+1% IF G%=-1%: GOTO 899 830 H5$=C$+STRING$(16%,ASCII(" ")): H5$=LEFT(H5$,16%): IF G%=1% THEN H9$=H5$ ELSE H$(H9%)=H9$+H5$: H9%=H9%+1% 835 RETURN 899 RETURN ! GENERAL RETURN FOR 800 SERIES 900 ! *************************************** PRINT OUT THE MOVES 905 IF E8%=-1% THEN C9$=C$ 910 GOTO 999 IF T%: B%(R0%,F0%)=0%: B%(R1%,F1%)=M%: R%=R0%: F%=F0%: X$=FNV$: R%=R1%: F%=F1%: X$=FNV$: GOSUB 1020 IF C9%: IF E8%=0% THEN GOSUB 820 ELSE IF E8%=1% THEN X$=C9$: X$=FNI1$: E8%=-1%: GOSUB 820: E%,E8%=0% 920 IF E8% THEN X$="P/"+C2$+"-"+LEFT(C2$,LEN(C2$)-1%)+ CVT$$(NUM$(VAL(RIGHT(C2$,LEN(C2$)))+1%),2%): X$=FNI1$: E8%=1%: GOTO 900 930 IF Q% THEN X$=FNV1$(""): X$="WHICH PIECE DO YOU WANT TO EXCHANGE: ? ": GOSUB30280:IFE%=2%THEN 14900 ELSE IF E%=1% THEN X$="Q" ELSE E%=0%: X$=LEFT(X$,1%): M%=FNM%(X$): IF E% THEN E%=0%: X$=FNV1$("TRY ONE OF THESE: P, R, N, B, Q"): GOTO 930 940 IF Q% THEN IF X$="K" THEN X$=FNV1$("SORRY, YOU CAN'T HAVE ANOTHER KING!!!"): GOTO 930 950 IF Q% THEN Q%=0%: M%=M% OR 1% IF G% XOR I%: B%(R1%,F1%)=M%: R%=R1%: F%=F1%: X$=FNV$ 960 IF O8% THEN X$="PB": X$=FNI1$: E%=0%: GOTO 999 999 RETURN ! GENERAL SUBROUTINE RETURN 1000 ! BEGIN UTILITY COMMANDS **************************************************** X$="CS" REFRESH SCREEN FUNCTION 1010 Z$="I------I------I------I------I------I------I------I------I": PRINT CHR$(29%);CHR$(31%);"CHSBRD V1 "; RIGHT(SYS(CHR$(6%)+CHR$(9%)+CHR$(0%)),3%);H8$;TAB(58%); "WHITE I BLACK": PRINT Z$;"I------I------I": FOR R%=1% TO 8%: X$=FNV$ FOR F%=1% TO 8%: PRINT: PRINT Z$: NEXT R%: GOSUB 1070: X$=FNV1$(""): RETURN 1020 X$=" "+FNB1$(H9%)+" "+M2$+" I": IF G%=-1% THEN 1030 ELSE W9%=W9%+1%: W$(W9%)=X$: S%=W9%: GOTO 1040 1030 X$="I"+LEFT(X$,LEN(X$)-1%): B9%=B9%+1%: B$(B9%)=X$: S%=B9%: GOTO 1050 1040 PRINT CHR$(14%);CHR$(32%+(S%+1%));CHR$(32%+57%);W$(S%);: GOTO 1060 1050 PRINT CHR$(14%);CHR$(32%+(S%+1%));CHR$(32%+64%);B$(S%); 1060 RETURN 1070 GOSUB 1040 FOR S%=0% TO W9%: GOSUB 1050 FOR S%=0% TO B9%: RETURN ! STATUS BOARD SETUP 2000 ! ***************************** RESET 2010 IF NOT O8% THEN CHAIN "$CHSBRD" ELSE 14900 3000 ! ******************************* FOR CASTLING TO THE KING'S SIDE 3010 X%=K0% AND 3% IF G%=-1%: X%=K1% AND 3% IF G%=1%: IF X%>0% THEN E%=-1%: C$="O-O": GOSUB 810: E%=0%: RETURN 3020 O7%=-1%: X$="R/KR1-KB1": E%=0%: X$=FNI1$: M%=FNM%(M1$): M%=M% OR 1% IF G%=-1% UNLESS I%=-1%: T%=-1%: GOSUB 700: T%=0%: IF E% THEN C$="O-O": GOSUB 810: E%=0%: RETURN 3030 E%=1%: GOSUB 900: E%=0%: X$="K/K1-KN1": X$=FNI1$: M%=FNM%(M1$): M%=M% OR 1% IF G%=-1% UNLESS I%=-1%: E%=1%: GOSUB 900: C$="O-O": GOSUB 830: O7%,E%=0%: GOSUB 960: K0%=7% IF G%=-1%: K1%=7% IF G%=1%: GOSUB 40: RETURN 4000 ! ******************************* CASTLES TO THE QUEEN SIDE 4010 X%=K0% AND 5% IF G%=-1%: X%=K1% AND 5% IF G%=1%: IF X%>0% THEN E%=-1%: C$="O-O-O": GOSUB 810: E%=0%: RETURN 4020 O7%=-1%: X$="R/QR1-Q1": E%=0%: X$=FNI1$: M%=FNM%(M1$): M%=M% OR 1% IF G%=-1% UNLESS I%=-1%: T%=-1%: GOSUB 700: T%=0%: IF E% THEN C$="O-O-O": GOSUB 810: E%=0%: RETURN 4030 E%=1%: GOSUB 900: E%=0%: X$="K/K1-QB1": X$=FNI1$: M%=FNM%(M1$): M%=M% OR 1% IF G%=-1% UNLESS I%=-1%: E%=1%: GOSUB 900: C$="O-O-O": GOSUB 830: O7%,E%=0%: GOSUB 960: K0%=7% IF G%=-1%: K1%=7% IF G%=1%: GOSUB 40: RETURN 5000 ! ************************************ PRINT THE GAME PLAN 5010 X$=FNV1$(""): X$="WHERE DO YOU WANT IT: ( 1=KB:, 2=LP0: ) ? ": GOSUB 30280: IF E%=2% THEN 14900 ELSE IF E%=1% THEN X$="1" ELSE E%=-1% 5015 H8%=H9%-1% 5020 ON ERROR GOTO 5030: X%=VAL(X$): ON ERROR GOTO 0: X$="KB:" IF X%=1%: X$="LP0:" IF X%=2%: GOTO 5030 IF X%>2%: ON X% GOTO 5050,5060 5030 IF ERR>0% THEN RESUME 5040 5040 E%=-1%: C$=X$: GOSUB 810: GOTO 5010 5050 PRINT #11% H$(0%): PRINT #11%: PRINT #11% " ";FNB1$(Y%);" ";H$(Y%) FOR Y%=1% TO H9%-1%: PRINT #11% " ";FNB1$(H9%);" ";H9$ IF G%=-1%: PRINT #11%: GOTO 5099 5060 ON ERROR GOTO 5070: OPEN "LP0:" AS FILE 10%: PRINT #10% H$(0%): PRINT #10%: PRINT #10% " ";FNB1$(Y%);" ";H$(Y%) FOR Y%=1% TO H9%-1%: PRINT #10% " ";FNB1$(H9%);" ";H9$ IF G%=-1%: PRINT #10% CHR$(12%): CLOSE 10% 5065 X$="LP0:": ON ERROR GOTO 0: GOTO 5099 5070 X$=FNV1$("HAVING TROUBLE WITH PRINTER"): SLEEP 10%: RESUME 5060 5099 E%=-1%: E%=0% IF X$="LP0:": SLEEP 10% IF E%: RETURN 6000 ! ****************************** PRINT THE BOARD LAYOUT 6005 RETURN IF O7%: ON ERROR GOTO 6050: GOSUB 6010: ON ERROR GOTO 0: E%=0%: RETURN 6010 OPEN F$ FOR OUTPUT AS FILE 2% UNLESS O8%: Z$="I------I------I------I------I------I------I------I------II------I------I": X$=" WHITE'S MOVE # ": X$=" BLACK'S MOVE # " IF G%=-1%: X$=X$+H8$+" WHITE I BLACK" 6020 PRINT #2% "CHSBRD V1 "; RIGHT(SYS(CHR$(6%)+CHR$(9%)+CHR$(0%)),3%);X$: PRINT #2% Z$: Z$=LEFT(Z$,57%): O9%=-1% 6025 PRINT #2% 6030 S%=0%: FOR R%=1% TO 8% STEP 1%: X$=""+"": FOR F%=1% TO 8% STEP 1%: X$=X$+FNS$: NEXT F%: GOSUB 6080: PRINT #2% X$: PRINT #2%: X$=""+"": GOSUB 6080: PRINT #2% Z$;X$: PRINT #2%: NEXT R%: PRINT #2%: PRINT #2% "_ ";FNB1$(H9%);" ";H5$: PRINT #2% CHR$(12%): CLOSE 2% UNLESS O8%: O9%=0%: RETURN 6050 X$="HAVING TROUBLE WITH "+F$: X$=FNV1$(X$): SLEEP 10%: RESUME 6010 6080 S%=S%+1%: IF S%>18% THEN RETURN ELSE X$=X$+W$(S%)+RIGHT(B$(S%),2%): RETURN 7000 ! ******************** HELP 7010 OPEN "$CHESS.HLP" FOR INPUT AS FILE 4%: ON ERROR GOTO 7030 7020 INPUT LINE #4% X$: PRINT #11% X$;: GOTO 7020 7030 RESUME 7040 7040 CLOSE 4%: E%=-1%: SLEEP 10%: RETURN 10000 ! ******************************************* USER DEFINED FUNCTIONS 10001 ! ******************************************* TO VALIDATE A MOVE: A%= DIRECTION: 1% 8%\ I /2% 7%---I---3% 6%/ I \4% 5% 10010 DEF FNE%(X%,Y%): A%=0%: GOTO 10060 IF E%: IF X%<0% THEN IF Y%<0% THEN A%=8% ELSE IF Y%=0% THEN A%=1% ELSE A%=2% ELSE IF X%>0% THEN IF Y%<0% THEN A%=6% ELSE IF Y%=0% THEN A%=5% ELSE A%=4% ELSE IF Y%>0% THEN A%=3% ELSE A%=7% 10020 A1%,A2%,A3%,A4%=0%: A1%=-1% IF X%<0%: A1%=1% IF X%>0%: A2%=-1% IF Y%<0%: A2%=1% IF Y%>0%: A3%=R0%: A4%=F0%: E%=-1% IF X2%<>M%: E%=-1% IF Y2% UNLESS C9% 10030 E%=-1% IF (X1%=0% AND Y1%=0%): GOTO 10040 IF (X1%=0% OR Y1%=0%): X=X1%: Y=Y1%: X=(X/Y)-1.: IF X<>0% THEN E%=-1%: GOTO 10060 10040 ON ERROR GOTO 10050: GOTO 10060 IF E%: A3%=A3%+A1%: A4%=A4%+A2%: GOTO 10060 IF (A3%=R1% AND A4%=F1%): E%=-1% IF B%(A3%,A4%)<>0%: GOTO 10040 10050 E%=-1%: X$=FNV1$("ERROR OCCURRED DURING COMMAND DECODE SEQUENCE"): X$=FNV1$("PLEASE TAKE MOVE AGAIN"): X$=FNV1$(C$): RESUME 10060 10060 FNE%=A%: ON ERROR GOTO 0: FNEND 10070 DEF FNB1$(A%): A=A%: X$=FNB0$(A): X$="0"+X$ IF LEN(X$)<3%: FNB1$=X$: FNEND 10100 ! ******************************************* BUILD THE PROPER STRING: IF O9% IN 'ON' THEN LP0: IS OUTPUT ELSE GOTO THE TTY 10110 DEF FNS$: A%=B%(R%,F%) AND 15%: X$="W": IF (A% AND 1%) THEN X$="B": A%=A%-1% 10120 IF A%=0% THEN X$="======": X$=" " IF ((R%+F%) AND 1%)>0% UNLESS O9%: GOTO 10140 UNLESS O9%: X$=" " IF ((R%+F%) AND 1%)=0% UNLESS O9%=0%: GOTO 10140 10130 X$=X$+M$(A%): IF NOT O9% THEN IF ((R%+F%) AND 1%) THEN X$=" "+X$+" " ELSE X$="=="+X$+"==" ELSE IF O9% THEN IF ((R%+F%) AND 1%) THEN X$="=="+X$+"==" ELSE X$=" "+X$+" " 10140 IF F%=1% THEN X$="I"+X$ 10150 FNS$=X$+"I"+"": X$=""+"": FNEND 10160 ! ******************************************** OUTPUT THE STRING TO THE TERMINAL 10170 DEF FNV$: J%=1%: J%=0% IF F%=1%: PRINT #11%,CHR$(14%);CHR$(32%+(R%*2%));CHR$(32%+(((F%*7%)+J%)-7%)); FNS$;: FNEND 10180 ! ********************************************* OUTPUT AN ERROR MESSAGE TO THE TERMINAL 10190 DEF FNV1$(X$): PRINT #11% CHR$(14%);CHR$(32%+18%);CHR$(32%+0%); CHR$(30%);X$;: SLEEP 4% UNLESS X$="": PRINT #11%,CHR$(14%); CHR$(32%+18%);CHR$(32%+0%);CHR$(30%);: FNEND 10200 ! ************************************************ INPUT A LINE AND PARSE C$=ORIGINAL COMMAND C1$=LEFT HALF C2$=RIGHT HALF 10210 DEF FNI1$: X%,E%,E8%,C9%=0%: C1$,C2$=""+"": C$=X$: X$=MID(X$,5%,R%) 10212 IF C$="O-O" OR C$="O-O-O" THEN 10217 10215 X%=INSTR(1%,X$,"-") OR INSTR(1%,X$," ") OR INSTR(1%,X$,"*") OR INSTR(1%,X$,"X"): C9%=-1% IF INSTR(1%,X$,"*") OR INSTR(1%,X$,"X"): E8%=-1% IF MID(C$,LEN(C$)-1%,1%)="E": IF X% THEN GOTO 10290 UNLESS LEFT(C$,1%)="O" 10217 RESTORE 10220 READ X$: IF X$="" THEN 10270 ELSE IF X$<>C$ THEN 10220 ELSE READ Y%: E%=0%: ON Y% GOSUB 1000,2000,3000,4000,5000,6000,7000, 8000,9000: IF E% THEN 10260 ELSE E%=1%: GOTO 10299 10260 X$,C$="CS": SLEEP 5%: GOTO 10215 10270 X$=FNV1$('INVALID COMMAND... TYPE "HELP" FOR HELP'): E%=1%: GOTO 10299 10290 C1$=LEFT(C$,3%+X%): C2$=RIGHT(C$,5%+X%): M1$=LEFT(C1$,1%): C1$=RIGHT(C1$,3%): M2$=LEFT(C2$,INSTR(1%,C2$,"/")-1%): C2$=RIGHT(C2$,3%) IF LEN(M2$)>0%: E%=-1% IF LEN(C1$)=0% OR (C9% = -1% AND LEN(M2$)=0%) 10295 IF E8%=-1% THEN C9%=-1%: C2$=LEFT(C2$,LEN(C2$)-2%) 10299 X%=FNC% UNLESS E%: FNI1$=""+"": FNEND 10300 ! ************************************** GET A SET OF COORDINATES 10310 DEFFNC%:ONERRORGOTO10330:X$=LEFT(C1$,LEN(C1$)-1%): X1$=RIGHT(C1$,LEN(C1$)):GOSUB10320IFI%>-1%:GOSUB10321IFI%=-1%: F0%=X%:GOSUB10325:R0%=X%:X$=LEFT(C2$,LEN(C2$)-1%):X1$=RIGHT(C2$,LEN(C2$)) 10311 GOSUB 10320 IF I%>-1%: GOSUB 10321 IF I%=-1%: F1%=X%: GOSUB 10325: R1%=X%: GOTO 10340 10320 X%=0%: X%=1% IF X$="KR": X%=2% IF X$="KN": X%=3% IF X$="KB": X%=4% IF X$="K": X%=5% IF X$="Q": X%=6% IF X$="QB": X%=7% IF X$="QN": X%=8% IF X$="QR": E%=-1% IF X%=0%: RETURN 10321 X%=0%: X%=1% IF X$="QR": X%=2% IF X$="QN": X%=3% IF X$="QB": X%=4% IF X$="Q": X%=5% IF X$="K": X%=6% IF X$="KB": X%=7% IF X$="KN": X%=8% IF X$="KR": E%=-1% IF X%=0%: RETURN 10325 X%=VAL(X1$): X%=9%-X% IF (G%=-1% AND I%>-1%) OR (G%=1% AND I%=-1%): RETURN 10330 R0%,F0%,R1%,F1%=0% 10340 E%=-1% IF R0%=0% OR R1%=0% OR F0%=0% OR F1%=0%: FNEND 10350 ! ********************************* EQUATE THE MAN WITH A NUMBER 10360 DEF FNM%(A$): GOTO 10370 IF A$=M$(X%) FOR X%=2% TO 12% STEP 2%: E%=-1%: X$=FNV1$("NO PIECE BY THAT NAME"): GOTO 10380 10370 X%=X%+1% IF G%=-1% 10380 FNM%=X%: FNEND 10900 ! ***************************************** LOAD UP THE GAME BOARD 10905 GOSUB 10911 IF I%=-1%: GOSUB 10910 IF I%>-1%: RETURN 10910 RESTORE: READ X$ UNTIL X$="INIT G B" : READ B%(X%,Y%) FOR Y%=1% TO 8% FOR X%=1% TO 8% : READ M$(X%) FOR X%=2% TO 12% STEP 2%: RETURN 10911 RESTORE: READ X$ UNTIL X$="INIT G B" : READ B%(X%,Y%) FOR Y%=8% TO 1% STEP -1% FOR X%=8% TO 1% STEP -1% : READ M$(X%) FOR X%=2% TO 12% STEP 2%: RETURN 10920 DATA "INIT G B" 10930 DATA 04,06,08,12,10,08,06,04,02,02,02,02,02,02,02,02 ,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 10940 DATA 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 ,03,03,03,03,03,03,03,03,05,07,09,13,11,09,07,05 10950 DATA P,R,N,B,Q,K 10960 DATA "UTILITY COMMANDS" 10970 DATA "CS",1,"RE",2,"O-O",3,"O-O-O",4,"GP",5,"PB",6 10980 DATA "HELP",7 10990 DATA "",0 14900 ! *********************** QUIT! 14910 IF NOT O8% THEN 32767 ELSE PRINT #2% H$(0%): PRINT #2%: FOR Y%=1% TO (H9%+G%) STEP 1%: PRINT #2% " ";FNB1$(Y%);" ";H$(Y%): NEXT Y%: PRINT #2% " ";FNB1$(H9%);" ";H9$ IF G%=-1%: PRINT #2% CHR$(12%): CLOSE X% FOR X%=1% TO 12% 14920 X$="#": X$="CHSBRD" IF C$="RE": X$=X$+CHR$(13%)+CVT%$(0%)+ "Q LP0:CHSBRD="+F$: X$=SYS(CHR$(8%)+X$): CHAIN "$QUE" 31000% 20000 ! ************************************************* RESERVED FOR MOVEMENT BY COMPUTER 20010 GOTO 50 30200 ! ******************************************************** GET INPUT FROM OPERATOR IF HE WAITS TOO LONG, QUIT 30210 DEF FNI$(A%,A$) 30220 E%=0%: PRINT A$;: ON ERROR GOTO 30250: WAIT A%: INPUT LINE #11%,X$ 30230 GOTO 30240 IF MID(X$,X%,1%)>SPACE$(1%) FOR X%=LEN(X$) TO 1% STEP -1%: FNI$="": GOTO 30270 30240 FNI$=LEFT(X$,X%): GOTO 30270 30250 IF ERR=15% THEN RESUME 30260 ELSE IF ERR<>11% THEN RESUME 32766 ELSE FNI$="STOP": RESUME 30270 30260 E%=-1% 30270 ON ERROR GOTO 0: WAIT 0: FNEND 30280 ! GET SOME INPUT 30290 X$=FNI$(180%,X$): IF E% THEN 14900 ELSE IF X$="" THEN E%=1% ELSE IF X$="STOP" THEN E%=2% ELSE E%=3% 30299 RETURN 30900 ! ********************************************************* DEFINE FILE NAME FROM JOB, DATE & TIME 30910 DEF FNB$ ! CHANGED FROM ORIGINAL FNS$ 30915 X%=ASCII(LEFT(SYS(CHR$(6%)+CHR$(9%)+CHR$(0%)),1%))/2% 30920 X$=DATE$(0%): X$=CVT$$(MID(X$,INSTR(1%,X$,"-")+1%,3%), 32%): X1=INSTR(1%," JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC",X$)/3%: X$=CHR$(X1+55): X$=CVT$$(NUM$(X1),2%) IF X1<10%: X1=X%: X$=FNB0$(X1)+X$ 30925 X3=VAL(LEFT(DATE$(0%),2%)): IF X3<10% THEN X$=X$+CVT$$(NUM$(INT(X3)),2%) ELSE X3=X3+55: X$=X$+CHR$(INT(X3)) 30930 X=TIME(0%): X1=INT(X/3600): X=X-X1*3600: X2=INT(X/60) 30950 FNB$=X$+FNB0$(X1)+"."+FNB0$(X2)+LEFT(FNB0$(X-X2*60),1%) 30959 FNEND 30960 DEF FNB0$(A): X2$=NUM$(A): X%=LEN(X2$)-2%: FNB0$=RIGHT("0"+MID(X2$,2%,X%),X%) 30999 FNEND 32767 END X$=CHR$(X1+55): X$=CVT$$(NUM$(X1),2%) IF X1<10%: X1=X%: X$=FNB0$(X1)+X$ 30925 X3=VAL(LEFT(DATE$(0%),2%)): IF X3<10% THEN X$=X$+CVT$$(NUM$(INT(X3)),2%) ELSE X3=X3+55: X$=X$+CHR$(INT(X3)) 30930 X=TIME(0%): X1=INT(X/3600): X=X-X1*3600: X2=INT(X/60) 30950 FNB$=X$+FNB0$(X1)+"."+FNB0$(X2)+LEFT(FNB0$(X-X2*60),1%) 30959 FNEND 30960 DEF FNB0$(A): X2$=NUM$(A): X%=LEN(X2$)-2%: FNB0$=RIGHT("0"+MID(X2$,2%,X%),X%) 30999 FNEND 32767 END U"3,