home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0020 - 0029 / ibm0020-0029 / ibm0028.tar / ibm0028 / CAKE.ZIP / PCMULT.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1980-01-01  |  11.3 KB  |  158 lines

  1. 1  DEF SEG=0: IF PEEK(&H1F2)<> 80  OR PEEK(&H1F3)<> 7  THEN NEW
  2. 10  COMMON GAME%: GOTO 10000
  3. 20  IF NOT PCJR THEN DEF SEG=0: POKE &H417,PEEK(&H417) OR &H20: DEF SEG
  4. 30  KB%=-1: RRND=RND: KB$=INKEY$: GOSUB 80: IF KB$="" THEN RETURN ELSE KB%=ASC(KB$)
  5. 40  KB$=INKEY$: IF KB$<>"" THEN GOSUB 80: GOTO 40 ELSE RETURN
  6. 50  KB.SPACE=FRE(" "): GOSUB 40
  7. 60  KB.I%=INT(KB.SEC*18.2)
  8. 70  RRND=RND: DEF SEG=0: KB.II%=PEEK(&H46C): WHILE KB.II%=PEEK(&H46C): WEND: GOSUB 20: IF KB%<>-1 THEN RETURN ELSE KB.I%=KB.I%-1: IF KB.I%>0 THEN 70 ELSE RETURN
  9. 80  IF KB$="" THEN RETURN ELSE IF ASC(KB$)<>19 OR PCJR THEN RETURN
  10. 90  KB$="": SND.MODE=(SND.MODE+1) MOD 2: DEF SEG=0: POKE &H40F,((PEEK(&H40F) AND &HFC) OR ((SND.MODE+1) AND 3)): DEF SEG: RETURN
  11. 100  DRAW "C=C.C%;BM=C.X%;,=C.Y%;BR2R19F2D4L23U4E2": PAINT (C.X%+2,C.Y%+1),C.C%,C.C%: RETURN
  12. 110  CC.Y%=C.Y%-8*(C.N%-1): GET (C.X%,CC.Y%)-STEP(23,C.N%*8-1),CAKE.V%: PUT (C.X%,CC.Y%),CAKE.V%,XOR: PUT (C.X%+C.DX%,CC.Y%+C.DY%),CAKE.V%,XOR: RETURN
  13. 120  DSP.L%=LEN(DSP.CS$): IF DSP.L%<=0 THEN RETURN ELSE FOR DSP.CI%=1 TO DSP.L%: DSP.C$=MID$(DSP.CS$,DSP.CI%,1): GOSUB 130: DSP.X%=DSP.X%+16: NEXT DSP.CI%: RETURN
  14. 130  LINE (DSP.X%,DSP.Y%)-STEP(15,15),0,BF: DSP.I%=INSTR(DSP.FCS$,DSP.C$): IF DSP.I%<=0 THEN LOCATE (DSP.Y%+7)\8+1,(DSP.X%+7)\8+1: PRINT DSP.C$;: RETURN
  15. 140  DSP.T%=(DSP.C%-1)*9+(DSP.I%-1)*27: DSP.VI#(0)=DSP.V#(DSP.T%+0): DSP.VI#(1)=DSP.V#(DSP.T%+1): DSP.VI#(2)=DSP.V#(DSP.T%+2): DSP.VI#(3)=DSP.V#(DSP.T%+3)
  16. 150  DSP.VI#(4)=DSP.V#(DSP.T%+4): DSP.VI#(5)=DSP.V#(DSP.T%+5): DSP.VI#(6)=DSP.V#(DSP.T%+6): DSP.VI#(7)=DSP.V#(DSP.T%+7): DSP.VI#(8)=DSP.V#(DSP.T%+8): PUT (DSP.X%,DSP.Y%),DSP.VI#: RETURN
  17. 8000  IF SND.MODE=0 THEN RETURN ELSE SOUND 400,0.2: RETURN
  18. 8010  IF SND.MODE=0 THEN RETURN ELSE SOUND 400+24*I,0.3: RETURN
  19. 8020  IF SND.MODE=0 THEN RETURN ELSE SOUND 200+C.I%*50,0.2: RETURN: IF SND.MODE=0 THEN RETURN ELSE SOUND 200+C.I%*50,0.2: RETURN
  20. 8030  IF SND.MODE=0 THEN RETURN ELSE SOUND 4000-C.I%*200-C.II%*50,0.05: RETURN
  21. 8040  IF SND.MODE=0 THEN RETURN ELSE SOUND 4000-C.I%*200-ROP%*50,0.2: RETURN
  22. 8050  IF SND.MODE=0 THEN RETURN ELSE SOUND 2000,0.2: RETURN
  23. 8060  IF SND.MODE=0 THEN RETURN ELSE SOUND 1000,0.2: RETURN
  24. 8070  IF SND.MODE=0 THEN RETURN ELSE SOUND 3200-C.I%*100-C.II%*100,0.2: RETURN
  25. 8080  IF SND.MODE=0 THEN RETURN ELSE SOUND DSP.F%,0.1: RETURN
  26. 8090  IF SND.MODE=0 THEN RETURN ELSE SOUND 1000,0.4: RETURN
  27. 8100  IF SND.MODE=0 THEN RETURN ELSE SOUND 200+C.I%*50,0.2: RETURN
  28. 8110  IF SND.MODE=0 THEN RETURN ELSE SOUND 200+C.I%*50,0.2: RETURN
  29. 8120  IF SND.MODE=0 THEN RETURN ELSE PLAY "T120L16MSO2CP64DP64EP64F.": RETURN
  30. 8130  IF SND.MODE=0 THEN RETURN ELSE PLAY "T120L16MSO2CP64DP64EP64F.P16CP64F2.": RETURN
  31. 9000  IF SND.MODE=0 THEN RETURN ELSE FOR I=1 TO 2: FOR J=0 TO 6: SOUND 2000-J*100,0.2: SOUND 32767,0.4: NEXT J: SOUND 1200,0.2: SOUND 32767,0.4: FOR J=0 TO 6: SOUND 1200+J*100,0.2: SOUND 32767,0.4: NEXT J: SOUND 2000,0.2: SOUND 32767,0.4: NEXT I: RETURN
  32. 9010  IF SND.MODE=0 THEN RETURN ELSE SOUND 200,12: RETURN
  33. 9020  IF SND.MODE=0 THEN RETURN ELSE FOR SND.I%=1 TO 3: SOUND 600+RND*600,0.5: SOUND 32767,0.5: NEXT SND.I%: SOUND 1200+RND*600,0.5: RETURN
  34. 9030  IF SND.MODE=0 THEN RETURN ELSE SOUND 1000,0.5: SOUND 32767,3: SOUND 3000,0.5: SOUND 32767,3: RETURN
  35. 9040  IF SND.MODE>0 THEN SOUND 2500,0.5: RETURN ELSE RETURN
  36. 9050  IF SND.MODE=0 THEN RETURN ELSE SOUND 1000+I*20,0.2: SOUND 32767,0.4: RETURN
  37. 9060  IF SND.MODE=0 THEN RETURN ELSE SOUND 3000-C.I%*8,0.2: RETURN
  38. 9070  IF SND.MODE=0 THEN RETURN ELSE SOUND 1000+24*(CC.I%+CNT.FREQ%),0.4: RETURN
  39. 10000  DEF SEG=&HF000: PCJR=PEEK(&HFFFE)=&HFD: SND.MODE=1: DEF SEG=0: I=PEEK(&H40F) AND 3: IF I>0 THEN SND.MODE=I-1: IF SND.MODE=2 THEN SOUND ON ELSE IF PCJR THEN SOUND OFF
  40. 10010  ON ERROR GOTO 62000: GOSUB 62120: GOSUB 11020: GOSUB 10340: KEY OFF: OP%=4: OP$="/": GAME%=3: DEF SEG=0: IF (PEEK(&H417)AND &HF0)<>&HF0 THEN GAME%=2: OP%=3: OP$="x"
  41. 10020  POKE &H417,&H60+PCJR*&H20: DEF SEG: LVL=1
  42. 10030  RANK%=1
  43. 10040  TRY%=0: CORRECT%=0: CORRECT.IN.ROW%=0: CLS: LOCATE ,,0: SCREEN 1,0: COLOR 0,-(OP%=3)
  44. 10050  GOSUB 10600: CLS: C.X%=144: CL.X%=144: C.Y%=80-((LOP%+1)\2)*8: CL.Y%=96-((LOP%+1)\2)*16: GOSUB 11000: IF OP%=4 THEN 10100
  45. 10060  ANS%=PROD%: DSP.CS$="If a cake has"+STR$(LOP%)+" slices": IF LOP%=1 THEN DSP.CS$=LEFT$(DSP.CS$,LEN(DSP.CS$)-1)
  46. 10070  DSP.Y%=20*8: DSP.X%=2*8: DSP.F%=1000: GOSUB 10890
  47. 10080  DSP.Y%=22*8: DSP.X%=10*8: DSP.F%=3000: IF ROP%=1 THEN DSP.CS$="," ELSE DSP.CS$="s,"
  48. 10090  DSP.CS$="and each slice has"+STR$(ROP%)+" piece"+DSP.CS$: GOSUB 10910: QUEST.CAP%=0: DSP.ANS.ONLY%=0: GOSUB 10210: GOTO 10140
  49. 10100  ANS%=ROP%: IF PROD%=1 THEN DSP.CS$="" ELSE DSP.CS$="s"
  50. 10110  DSP.CS$="The bakers have"+STR$(PROD%)+" piece"+DSP.CS$+" of cake.": DSP.Y%=20*8: DSP.X%=2*8: DSP.F%=1000: GOSUB 10940
  51. 10120  DSP.Y%=22*8: DSP.X%=10*8: DSP.F%=3000: IF LOP%=1 THEN DSP.CS$=".": ARE$="is" ELSE DSP.CS$="s.": ARE$="are"
  52. 10130  DSP.CS$="There "+ARE$+STR$(LOP%)+" customer"+DSP.CS$: GOSUB 10910: QUEST.CAP%=0: DSP.ANS.ONLY%=0: GOSUB 10210
  53. 10140  GOSUB 10360: TRY%=TRY%+1: IF OK% THEN CORRECT%=CORRECT%+1: CORRECT.IN.ROW%=CORRECT.IN.ROW%+1: IF CORRECT.IN.ROW%<5 THEN 10190 ELSE CORRECT.IN.ROW%=0: IF LVL<3 THEN GOSUB 10620: GOTO 10190 ELSE 10190
  54. 10150  CORRECT.IN.ROW%=0: GOSUB 10200: ANS.S%=ANS%: DSP.ANS.ONLY%=0: ANS%=-1: GOSUB 10500: GOSUB 9020: KB.SEC=0.5: GOSUB 60: ANS%=ANS.S%: QUEST.CAPS%=0: DSP.ANS.ONLY%=-1: GOSUB 10210: GOSUB 10360: IF OK% THEN 10190
  55. 10160  GOSUB 10200: GOSUB 10960: KB.SEC=0.5: GOSUB 60: GOSUB 10980: QUEST.CAPS%=0: DSP.ANS.ONLY%=-1: GOSUB 10210: GOSUB 10360: IF OK% THEN 10190
  56. 10170  GOSUB 10200: GOSUB 10670: QUEST.CAP%=-1: DSP.ANS.ONLY%=-1: GOSUB 10210: GOSUB 10360: IF OK% THEN 10190
  57. 10180  GOSUB 10200: DSP.ANS.ONLY%=0: GOSUB 10750: CORRECT%=0: GOSUB 10620: GOTO 10050
  58. 10190  GOSUB 8120: GOSUB 10500: KB.SEC=1.5: GOSUB 60: GOSUB 10240: RANK%=RANK%+1: IF RANK%<11 THEN 10050 ELSE RANK%=1: GOSUB 10480
  59. 10200  KB.SEC=0.3: GOSUB 60: LOCATE 25,26-(OP%=4)*9: PRINT "?  ";: GOSUB 9010: KB.SEC=1: GOSUB 60: RETURN
  60. 10210  LINE (0,184)-(319,199),0,BF: IF OP%=3 THEN DSP.CS$="how many pieces in all   " ELSE DSP.CS$="How many does each customer get   "
  61. 10220  IF QUEST.CAP% THEN MID$(DSP.CS$,1,1)="H"
  62. 10230  DSP.Y%=24*8: DSP.X%=2*8: DSP.F%=2000: GOSUB 10890: RETURN
  63. 10240  CLS: LOCATE ,,0: KB.SEC=0.3: GOSUB 60: SCREEN 0,1: LOCATE 1,1,0: KB.SEC=0.3: GOSUB 60: IF RANK%<1 OR RANK%>10 THEN RANK%=1
  64. 10250  COLOR 14,0: LOCATE 2,13,0: PRINT "YOUR RANK SO FAR";: COLOR 11: LOCATE 3,3: PRINT STRING$(36,205)
  65. 10260  FOR I=1 TO 10: IF I=RANK% THEN COLOR 5 ELSE COLOR 2
  66. 10270  LOCATE 25-I*2,13,0: PRINT LEVEL$(I);: NEXT I
  67. 10280  FOR I=1 TO 4: GOSUB 8000: COLOR 15: LOCATE 25-RANK%*2,13,0: PRINT LEVEL$(RANK%);: KB.SEC=0.5: GOSUB 60: GOSUB 8000
  68. 10290  COLOR 4: LOCATE 25-RANK%*2,13,0: PRINT LEVEL$(RANK%): KB.SEC=0.5: GOSUB 60: NEXT I
  69. 10300  IF RANK%<10 THEN CLS: KB.SEC=0.3: GOSUB 60: SCREEN 1,0: COLOR 0,-(OP%=3): LOCATE 1,1,0: KB.SEC=0.3: GOSUB 60: RETURN
  70. 10310  LOCATE 25-RANK%*2,13,0: COLOR 2: PRINT LEVEL$(RANK%)
  71. 10320  FOR I = 1 TO 10: GOSUB 8010: COLOR 4: LOCATE 25-I*2,13,0: PRINT LEVEL$(I): KB.SEC=0.4: GOSUB 60: NEXT I
  72. 10330  RANK%=1: GOTO 10480
  73. 10340  RESTORE 10350: DIM LEVEL$(10): FOR I=1 TO 10: READ LEVEL$(I): NEXT I: RETURN
  74. 10350  DATA "BEGINNER","NOVICE","CLEANUP CREW","CUTTER'S HELPER", "APPRENTICE","CAKER SECOND CLASS","CUTTER", "CAKER FIRST CLASS","EXPERT","MASTER CAKER"
  75. 10360  FLASH.CNT%=2400: DSP.L%=25: DSP.P%=26-(OP%=4)*9: FLASH%=0
  76. 10370  LOCATE DSP.L%,DSP.P%,0: PRINT MID$("? ",FLASH%+1,1);: KB.SEC=FRE(" "): KB.SEC=0.3: GOSUB 60: FLASH%=(FLASH%+1) MOD 2: IF KB%<>-1 THEN 10380 ELSE FLASH.CNT%=FLASH.CNT%-1: IF FLASH.CNT%>0 THEN 10370 ELSE 11050
  77. 10380  GOSUB 10460: IF KB%<48 OR KB%>57 THEN 10370 ELSE LOCATE DSP.L%,DSP.P%,0: PRINT CHR$(KB%);: IF KB%<>ASC(MID$(STR$(ANS%),2,1)) THEN 10450
  78. 10390  IF ANS%<10 THEN 10440
  79. 10400  ANS.S$=STR$(ANS%): DIG%=3
  80. 10410  KB.SEC=1200: GOSUB 60: IF KB%=-1 THEN 11050 ELSE GOSUB 10460: IF KB%<48 OR KB%>57 THEN 10410
  81. 10420  LOCATE DSP.L%,DSP.P%+DIG%-2: PRINT CHR$(KB%);: IF KB%<>ASC(MID$(ANS.S$,DIG%,1)) THEN 10450
  82. 10430  DIG%=DIG%+1: IF DIG%<=LEN(ANS.S$) THEN 10410
  83. 10440  OK%=-1: RETURN
  84. 10450  OK%=0: RETURN
  85. 10460  IF KB%=10 THEN IF LVL>=3 THEN RETURN ELSE LVL=LVL+1: RETURN 10030
  86. 10470  IF KB%=27 THEN 10480 ELSE RETURN
  87. 10480  CLS: KB.SEC=0.3: GOSUB 60: LOCATE ,,0: SCREEN 0,1,0,0: LOCATE ,,0: KB.SEC=0.3: GOSUB 60: LOCATE 12,16: COLOR 14: PRINT "Do you want";: LOCATE 14,15: PRINT "more practice";: LOCATE 16,16: PRINT "(Y or N) ?";: GOSUB 9020: GOSUB 10620
  88. 10490  KB.SEC=1500: GOSUB 60: IF KB%=-1 THEN 11050 ELSE A$=CHR$(KB%): IF A$="Y" OR A$="y" THEN RETURN 10040 ELSE IF A$="N" OR A$="n" THEN 11050 ELSE 10490
  89. 10500  IF OP%=4 THEN 10560
  90. 10510  IF DSP.ANS.ONLY% THEN 10530 ELSE DSP.X%=32: DSP.Y%=16: DSP.C%=1: DSP.CS$=RIGHT$(SPACE$(2)+STR$(LOP%),2): GOSUB 120
  91. 10520  DSP.X%=16: DSP.Y%=32: DSP.CS$=RIGHT$(OP$+RIGHT$(SPACE$(2)+STR$(ROP%),2),3): GOSUB 120: LINE (32,55)-STEP(31,2),1,BF
  92. 10530  DSP.ANS.ONLY%=0: DSP.QX%=32: DSP.QY%=64: DSP.X%=32: DSP.Y%=64: DSP.CS$=" ?": IF ANS%>=0 THEN DSP.CS$=RIGHT$("  "+STR$(ANS%),2)
  93. 10540  IF ANS%=100 THEN DSP.CS$="100": DSP.X%=16
  94. 10550  GOSUB 120: RETURN
  95. 10560  IF DSP.ANS.ONLY% THEN 10580 ELSE DSP.CS$=RIGHT$("   "+STR$(LOP%)+ RIGHT$("  "+STR$(PROD%),4),6): DSP.X%=16: DSP.Y%=128: DSP.QX%=80: DSP.QY%=96: DSP.C%=1: GOSUB 120
  96. 10570  LINE (63,119)-STEP(48,2),1,BF: LINE (63,119)-STEP(2,24),1,BF
  97. 10580  DSP.ANS.ONLY%=0: DSP.X%=80: DSP.Y%=96: DSP.CS$=" ?": IF ANS%>=0 THEN DSP.CS$=RIGHT$("  "+STR$(ANS%),2)
  98. 10590  GOSUB 120: RETURN
  99. 10600  MAX.R%=5-2*(LVL=2)-5*(LVL>=3): LOP%=FNRN%(2,MAX.R%): ROP%=FNRN%(2,MAX.R%): PROD%=LOP%*ROP%: IF PROD%>100 THEN 10600 ELSE IF LOP%=LOP.LST% OR ROP%=ROP.LST% OR PROD%=PROD.LST% THEN 10600
  100. 10610  PROD.LST%=PROD%: LOP.LST%=LOP%: ROP.LST%=ROP%: RETURN
  101. 10620  IF TRY%<=0 THEN RETURN
  102. 10630  CF=CORRECT%/TRY%: IF LVL=1 THEN IF CF>=0.6 THEN LVL=2: RETURN
  103. 10640  IF LVL=2 THEN IF CF<0.5 THEN LVL=1: RETURN ELSE IF CF>=0.7 THEN LVL=3: RETURN
  104. 10650  IF LVL>=3 THEN IF CF<0.5 THEN LVL=2
  105. 10660  RETURN
  106. 10670  C.L%=CL.Y%\8+1: C.XP%=CL.X%\8-2
  107. 10680  LINE (120,0)-(319,159),0,BF: LINE (0,160)-(319,199),0,BF
  108. 10690  FOR C.I%=1 TO LOP%: C.YT%=CL.Y%+C.I%*16-16: GOSUB 8020: KB.SEC=0.1: GOSUB 60: LOCATE C.L%+C.I%*2-2,C.XP%: PRINT RIGHT$("  "+STR$(C.I%),2);
  109. 10700  LINE (CL.X%-2,C.YT%-2)-STEP(ROP%*16-1,11),2,BF: FOR C.II%=1 TO 30: NEXT C.II%: NEXT C.I%
  110. 10710  LOCATE C.L%-2,CL.X%\8: FOR C.I%=1 TO ROP%: GOSUB 8030: IF OP%=3 THEN PRINT STR$(C.I%); ELSE PRINT " ?";
  111. 10720  KB.SEC=0.2: GOSUB 60: NEXT C.I%
  112. 10730  FOR C.I%=1 TO LOP%: C.YT%=CL.Y%+C.I%*16-16: FOR C.II%=1 TO ROP%: GOSUB 8030
  113. 10740  LINE (CL.X%+C.II%*16-6,C.YT%-2)-STEP(3,11),0,BF: NEXT C.II%: GOSUB 8040: KB.SEC=0.2: GOSUB 60: NEXT C.I%: RETURN
  114. 10750  DSP.CSL$="????": IF OP%=4 THEN 10800
  115. 10760  GOSUB 10840
  116. 10770  DSP.CS$=RIGHT$(STR$(LOP%),LEN(STR$(LOP%))-1)+"x"+ RIGHT$(STR$(ROP%),LEN(STR$(ROP%))-1)+" =": LOCATE 14,9-LEN(DSP.CS$): PRINT DSP.CS$;: DSP.Y%=96: DSP.C%=3
  117. 10780  FOR C.I%=1 TO 8: DSP.CS$=MID$(RIGHT$("  "+STR$(ANS%),3)+"   ",(C.I% MOD 2)*3+1,3): DSP.X%=72: GOSUB 120: KB.SEC=0.3: GOSUB 60
  118. 10790  NEXT C.I%: RETURN
  119. 10800  OP%=3: OP$="x": ANS.T%=ANS%: ANS%=0: GOSUB 10500: OP%=4: OP$="/": ANS%=ANS.T%: GOSUB 10840
  120. 10810  IF ANSV.D%<=0 THEN ANSV.D%=300: DIM ANSV%(ANSV.D%)
  121. 10820  GET (32,32)-(63,47),ANSV%: FOR DSP.X%=33 TO 80: PUT (DSP.X%-1,32),ANSV%: GOSUB 8050: PUT (DSP.X%,32),ANSV%: NEXT DSP.X%
  122. 10830  FOR DSP.Y%=33 TO 96: LINE (80,DSP.Y%+15)-STEP(31,0),0: PUT (80,DSP.Y%-1),ANSV%: GOSUB 8060: PUT (80,DSP.Y%),ANSV%: NEXT DSP.Y%: KB.SEC=1: GOSUB 60: RETURN
  123. 10840  FOR C.I%=1 TO LOP%: DSP.X%=32: DSP.Y%=16: DSP.CS$=RIGHT$(" "+STR$(C.I%),2): GOSUB 120
  124. 10850  FOR C.II%=1 TO ROP%: DSP.CS$=RIGHT$("  "+STR$(ROP%*(C.I%-1)+C.II%),3): DSP.X%=16: DSP.Y%=64: DSP.C%=2
  125. 10860  FOR C.III%=1 TO LEN(DSP.CS$): DSP.C$=MID$(DSP.CS$,C.III%,1): IF DSP.C$<>MID$(DSP.CSL$,C.III%,1) THEN GOSUB 130
  126. 10870  DSP.X%=DSP.X%+16: NEXT C.III%: DSP.CSL$=DSP.CS$
  127. 10880  LOCATE (C.I%-1)*2+CL.Y%\8+1,(C.II%*2+17),0: PRINT MID$(STR$(C.II%),2,LEN(STR$(C.II%))-1);: GOSUB 8070: KB.SEC=0.1: GOSUB 60: NEXT C.II%: NEXT C.I%: RETURN
  128. 10890  DSP.L%=DSP.Y%\8+1: DSP.P%=DSP.X%\8+1: FOR DSP.I%=1 TO LEN(DSP.CS$): GOSUB 8080: DSP.C$=MID$(DSP.CS$,DSP.I%,1): LOCATE DSP.L%,DSP.P%: PRINT DSP.C$;: LOCATE DSP.L%,DSP.P%+DSP.I%-1: PRINT DSP.C$;
  129. 10900  NEXT DSP.I%: LOCATE DSP.L%,DSP.P%: PRINT DSP.CS$;: RETURN
  130. 10910  DSP.L%=DSP.Y%\8+1: DSP.P%=DSP.X%\8+1: DSP.PL%=DSP.P%+LEN(DSP.CS$)-1: FOR DSP.I%=LEN(DSP.CS$) TO 1 STEP -1: GOSUB 8080
  131. 10920  DSP.C$=MID$(DSP.CS$,DSP.I%,1): LOCATE DSP.L%,DSP.PL%: PRINT DSP.C$;: LOCATE DSP.L%,DSP.P%+DSP.I%-1: PRINT DSP.C$;
  132. 10930  NEXT DSP.I%: LOCATE DSP.L%,DSP.P%: PRINT DSP.CS$;: RETURN
  133. 10940  DSP.L%=DSP.Y%\8+1: DSP.P%=DSP.X%\8+1: DSP.LEN%=LEN(DSP.CS$): FOR DSP.I%=25 TO DSP.L% STEP -1: LOCATE DSP.I%,DSP.P%,0: PRINT DSP.CS$;: GOSUB 8090
  134. 10950  KB.SEC=0.3: GOSUB 60: LOCATE DSP.I%,DSP.P%: PRINT SPACE$(DSP.LEN%);: NEXT DSP.I%: LOCATE DSP.L%,DSP.P%: PRINT DSP.CS$;: RETURN
  135. 10960  C.XP%=(C.X%\8)-2: FOR C.I%= 1 TO LOP%: LOCATE C.Y%\8+C.I%-1,C.XP%: PRINT SPACE$(2);: LOCATE C.Y%\8+C.I%,C.XP%: PRINT RIGHT$(" "+STR$(C.I%),2);
  136. 10970  LINE (C.X%,C.Y%+C.I%*8-1)- STEP(ROP%*8,1),0,BF: GOSUB 8100: KB.SEC=0.3: GOSUB 60: NEXT C.I%: RETURN
  137. 10980  C.YL%=(C.Y%\8)-1: FOR C.I%= 1 TO ROP%: LOCATE C.YL%,C.X%\8+C.I%-1: DSP.CS$=STR$(C.I%): IF OP%=4 THEN DSP.CS$=" ?"
  138. 10990  PRINT DSP.CS$;: LINE (C.X%+C.I%*8-1,C.Y%)- STEP(1,LOP%*8),0,BF: GOSUB 8110: KB.SEC=0.3: GOSUB 60: NEXT C.I%: RETURN
  139. 11000  LINE (C.X%,C.Y%)-STEP(ROP%*8-1,LOP%*8-1),2,BF: RETURN
  140. 11010  RETURN
  141. 11020  DIM CAKE.V%(1000): DSP.T%=0: DSP.X%=0: DSP.Y%=0: DSP.C%=0: DSP.I%=0: DSP.C$=""
  142. 11030  OPEN "FONTCS.DS" FOR INPUT AS #1: LINE INPUT#1,DSP.FCS$: CLOSE 1: DSP.NFCS%=LEN(DSP.FCS$)
  143. 11040  DIM DSP.V#(DSP.NFCS%*27),DSP.VI#(9): DSP.I=0: DSP.V#(0)=0: DEF SEG: DSP.I=VARPTR(DSP.V#(0)): BLOAD "DBLFONT.BSV",DSP.I: RETURN
  144. 11050  CLS: LOCATE 1,1,0: KB.SEC=0.1: GOSUB 60: SCREEN 1,0: COLOR 0,FNRN%(0,1): DSP.C%=FNRN%(1,3): DSP.X%=48: DSP.Y%=96: DSP.CS$="Piece of Cake": GOSUB 120: RUN "PCMENU.BAS
  145. 62000  SCREEN 0,1,0,0: LOCATE ,,0: COLOR 7: CLS: X$="": IF ERR=53 THEN X$="DISK WITH PROGRAMS NEEDED"
  146. 62010  IF ERR=72 OR ERR=71 THEN X$="DISK ERROR OR NOT READY"
  147. 62020  IF ERR=5 THEN X$="LIST AND SAVE COMMANDS ARE ILLEGAL"
  148. 62030  IF X$="" THEN 62080
  149. 62040  GOSUB 62090
  150. 62050  RESUME 62060
  151. 62060  ON ERROR GOTO 62000
  152. 62070  KB.SEC=20: GOSUB 50: CLS: IF KB%=27 THEN RUN "PCMENU.BAS" ELSE  RUN
  153. 62080  SCREEN 0,1,0,0: LOCATE ,,0: COLOR 7,0: CLS: RUN
  154. 62090  GOSUB 62120: IF X$="" THEN X$="  "
  155. 62100  XL%=LEN(X$): IF XL%>36 THEN XL%=36
  156. 62110  LOCATE 25,2,0: PRINT SPACE$((38-XL%)\2)+LEFT$(X$,XL%) +SPACE$(38-XL%-(38-XL%)\2);: RETURN
  157. 62120  DEF FNC%(I%)=I%: DEF FNP(I)=I+(20 AND W80F%): DEF FNRN%(F%,L%)=INT(RND*(L%-F%+1) MOD (L%-F%+1))+F%: RANDOMIZE VAL(RIGHT$(TIME$,2)): RETURN
  158.