home *** CD-ROM | disk | FTP | other *** search
/ The CIA World Factbook 1992 / k3bimage.iso / sel / 04 / 0057 / add.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1991-12-02  |  13.0 KB  |  302 lines

  1. 1   REM ===========================================================
  2. 2   REM  "ADD.BAS"       ADDING DECIMALS
  3. 3   REM              By Kevin Vessio - 10/19/84
  4. 5   REM          Copyright 1984 - MICROCOMPUTER WORKSHOPS
  5. 6   REM       IBM PC,PC-JR VERSION - ROSS, BRANDON & REID, INC.
  6. 7   REM ===========================================================
  7. 10   DEFSTR A-B,F-I
  8. 11   DEFINT C,E,L,N-P,W-Z
  9. 12   DIM A(11),PF(11),ET(11),EF(11),FE(11),FL(11),FM(12)
  10. 13   COMMON GN,CJ,CBS,JC
  11. 14   REM   CBS=32:REM  WIDTH 40:CJ=1
  12. 15   IF CBS < 32 THEN CHAIN "CBS.BAS
  13. 20   IF GN = "" THEN 50000 ELSE 50032
  14. 25   GOSUB 30100
  15. 26   I=INKEY$:IF I="" OR I="%" OR I=CHR$(13) THEN 26 ELSE RETURN
  16. 50   GOSUB 30100: LOCATE 23,7,0:PRINT F1;
  17. 55   I=INKEY$:IF I <> CHR$(13) THEN 55 ELSE RETURN
  18. 99   REM ********** MAIN MENU *************
  19. 100   CZ=0: PC=1: FOR X= 1 TO 3: ET(X)=0: EF(X)=0: NEXT
  20. 120   CLS:LOCATE 3,15,0:PRINT "Main Menu"
  21. 121   LOCATE 7,9:PRINT "You can do the following :";:LOCATE 10,5:PRINT "1) See the general instructions,"
  22. 122  LOCATE 12,5:PRINT "2) Practice the line-up stage,":LOCATE 14,5:PRINT  "3) Try a set of problems, or"
  23. 124  LOCATE 16,5:PRINT "4) Leave the program."
  24. 126  LOCATE 19,1,0:GOSUB 30100: PRINT "Your choice, ";GN;"?";
  25. 130  I=INKEY$:IF I="" THEN 130
  26. 131  X=VAL(I): IF X<1 OR X>4 THEN 130
  27. 140   ON X GOTO 160,170,200,150
  28. 150   CLS:LOCATE 12,5:PRINT "I hope you enjoyed this program!":FOR X=1 TO 3000:NEXT:CHAIN "CBS.BAS"
  29. 160   CLS:LOCATE 12,10: PRINT "Please wait, ";GN;".";:CHAIN "INSTR.BAS"
  30. 170   CLS:LOCATE 12,10: PRINT "Please wait, ";GN;".";:CHAIN "ADDLNUP.BAS"
  31. 199  REM *******  PROBLEM PROMPTS *********
  32. 200   CLS
  33. 201   LOCATE 4,1:PRINT"Now we're ready to begin, ";GN;".";
  34. 202   GOSUB 30100:LOCATE 8,1: PRINT "How many problems (1 to 9)? ";
  35. 203  FOR X=1 TO 6:A(X)="0":NEXT
  36. 204   I=INKEY$: IF I="" THEN 204
  37. 205   NP=VAL(I): IF NP=0 THEN 204 ELSE PRINT I
  38. 210   GOSUB 30100:LOCATE 10,1: PRINT "How many digits in a number (2 to 5)? ";
  39. 212   I=INKEY$:IF I="" THEN 212
  40. 213   ND=VAL(I):IF ND<1 OR ND>5 THEN 210 ELSE PRINT I
  41. 214   IF ND=5 THEN X=4:GOTO 218
  42. 215   IF ND=4 THEN X=5 ELSE X=6
  43. 218   GOSUB 30100:LOCATE 12,1:PRINT "How many numbers to add (2 to";STR$(X);")? ";
  44. 223   I=INKEY$:IF I ="" THEN 223
  45. 230   NN=VAL(I): IF NN<2 OR NN>X THEN 218 ELSE PRINT I
  46. 240   FOR X=1 TO 900:NEXT
  47. 299   REM **** COMPUTE PROBLEM ****
  48. 300   FOR X=1 TO 6: ET(X)=0: A(X)="": NEXT: EN$=""
  49. 305   X= VAL(RIGHT$(TIME$,2)): RANDOMIZE X
  50. 310   FOR X = 1 TO NN: FOR Y = 1 TO ND
  51. 320   Z=INT(RND*10): IF Y=1 AND Z=0 THEN 320
  52. 325   A(X)=A(X) + RIGHT$(STR$(Z),1):NEXT
  53. 330   Z=INT(RND*(LEN(A(X))+1)): IF Z=LEN(A(X))+1 THEN A(X) = "." + A(X):GOTO 345
  54. 340   IF Z<> LEN(A(X)) THEN A(X)=LEFT$(A(X),Z) + "." + RIGHT$(A(X),LEN(A(X))-Z)
  55. 345   NEXT
  56. 350   FOR X=1 TO NN: Y=INSTR(A(X),"."): IF Y = 0 THEN 359
  57. 352   FOR Z=LEN(A(X)) TO Y STEP -1: IF MID$(A(X),Z,1) <> "0" THEN Z=Y: GOTO 358
  58. 355   A(X)=LEFT$(A(X),Z-1): IF MID$(A(X),Z-1,1)="." THEN A(X)=LEFT$(A(X),Z-2)
  59. 358   NEXT
  60. 359   NEXT
  61. 360   I=A(1): FOR X = 2 TO NN: I=I+" + "+A(X): NEXT: PN=INT((40-LEN(I))/2):LL=PN
  62. 370   XA(1)=PN:XB=PN:FOR X=2 TO NN:XA(X)=XB+3+LEN(A(X-1)):XB=XA(X):NEXT
  63. 395   GOTO 1000
  64. 399  REM  **** INKEY$ ROUTINE FOR ADDITION ANSWERS ****
  65. 400  GOSUB 30100
  66. 410  I=INKEY$:IF I= "" OR I= CHR$(13) OR I="%" THEN 410
  67. 411  IF I="S" THEN 48000
  68. 412  IF ASC(I) < 48 OR ASC(I)> 57 THEN 410
  69. 420  LOCATE ,POS(0)-1:PRINT I;
  70. 430  IF XDSP=0 THEN LOCATE 15,1:PRINT "                                     ";:XDSP=1
  71. 440  RETURN
  72. 499  '***** MOVE #'S MENU
  73. 500  GOSUB 30400:RETURN
  74. 599  '***** MOVE #'S INKEY$ ROUTINE
  75. 600   B=STRING$(LEN(A(ZZ)),32)
  76. 615   X=0:Y=0
  77. 620   GOSUB 30100: GOSUB 30201: COLOR CJ,7: PRINT A(ZZ);:COLOR 7,CJ
  78. 621   S$=INKEY$:IF S$="" THEN 621 ELSE IF MSG=1 THEN MSG=0:GOSUB 30400
  79. 622   LOCATE R1,C1+LEN(A(ZZ)):L1=ASC(S$):IF L1=0 THEN GOSUB 56000
  80. 623   IF L1=50 OR L1=52 OR L1=54 OR L1=56 OR L1=65 OR L1=67 OR L1=83 THEN 624 ELSE 621
  81. 624   IF L1=65 OR L1=67 OR L1=83 THEN 630 ELSE L1 = (L1-48)/2
  82. 625   ON L1 GOTO 730,760,780,700
  83. 630   IF L1=65 THEN 900
  84. 631   IF L1=67 THEN 800
  85. 632   IF L1=83 THEN 48000
  86. 640   IF Y>=5 THEN IF X=1 THEN X=0:Y=0:ELSE X=1:Y=0
  87. 650   IF X=1 THEN GOSUB 30201: PRINT B;:Y=Y+1:GOTO 620
  88. 660   GOSUB 30201:PRINT A(ZZ);:Y=Y+1:GOTO 620
  89. 699  '*** UP ARROW
  90. 700  Z=1:IF LP<2 THEN BEEP:GOTO 640
  91. 705  IF PF(LP-Z)=1 THEN Z=Z+1:IF LP-Z<1 THEN 640 ELSE 705
  92. 710  GOSUB 30201: PRINT B;:IF LP=NN THEN LOCATE PLR,PLC: PRINT "+";
  93. 712  P=P-(Z*64):LP=LP-Z:GOTO 615
  94. 729  '*** DOWN ARROW
  95. 730  Z=1:IF LP=NN THEN BEEP:GOTO 640
  96. 735  IF LP=0 THEN GOSUB 30201:PRINT B;:PN=POS(0)-1:GOSUB 500
  97. 740  IF PF(LP+Z)=1 THEN Z=Z+1:IF LP+Z > NN THEN 640 ELSE 740
  98. 745  GOSUB 30201:PRINT B;:P=P+(Z*64):LP=LP+Z:GOTO 615
  99. 759  '*** LEFT ARROW
  100. 760  IF LP=0 OR POS(0)-LEN(A(ZZ))=LL THEN BEEP:GOTO 640
  101. 765  GOSUB 30201:PRINT B;:LOCATE PLR,PLC:PRINT "+";
  102. 770  P=P-1:GOTO 615
  103. 779  '*** RIGHT ARROW
  104. 780  IF LP=0 OR POS(0)=LR THEN BEEP:GOTO 640
  105. 785  GOSUB 30201:PRINT B;:LOCATE PLR,PLC:PRINT "+";
  106. 790  P=P+1:GOTO 615
  107. 799  '*** CHECK LINE-UP
  108. 800  GOSUB 30201:PRINT A(ZZ);:IF INSTR(A(ZZ),".") > 0 AND POS(0)-( LEN(A(ZZ)) - INSTR(A(ZZ),".")+1 ) = 20 THEN XF(ZZ)=1:PF(LP) = 1:XN=XN+1:RETURN
  109. 805  IF INSTR(A(ZZ),".")=0 AND POS(0)=20 THEN XF(ZZ)=1:PF(LP)=1:XN=XN+1:RETURN
  110. 810  ET(1)=ET(1)+1
  111. 813  LOCATE 13,1:PRINT "Your line-up is wrong."
  112. 814  LOCATE 15,1:PRINT "Press any key to get an explanation.";
  113. 815   I=INKEY$:IF I="" THEN 815
  114. 816   GOSUB 30400:LOCATE 13,1:PRINT"All decimal points must be in a line. If";
  115. 817   LOCATE 15,1:PRINT"a number does not have one, pretend it";
  116. 818   LOCATE 17,1:PRINT"follows the number. Please try again.";
  117. 820   MSG=1:GOTO 640
  118. 900   GOSUB 30201:PRINT B;:P23=XA(ZZ):GOSUB 30200:PRINT A(ZZ);:LOCATE NN+1,20-ND-3:PRINT "+";:RETURN
  119. 999  '***** BEGIN A PROBLEM
  120. 1000   CLS:XN=0:P23=PN:GOSUB 30200: PRINT I;:LR=POS(0):LH=LR:LV=CSRLIN: FOR X=1 TO 6:PF(X)=1:XF(X)=1:NEXT: FOR X=1 TO NN:PF(X)=0:XF(X)=0:NEXT:LOCATE 18,30:PRINT"Problem #";RIGHT$(STR$(PC),1);
  121. 1005   PLR=NN+1:PLC=20-ND-3
  122. 1010  LOCATE PLR,PLC:PRINT "+";:X=POS(0):LOCATE NN+2,X-2:PRINT STRING$(2*ND+6,"-"):LOCATE NN+3,20:PRINT ".":LOCATE NN+5,20:COLOR CJ,7:PRINT CHR$(24):COLOR 7,CJ:LOCATE 19,1:PRINT STRING$(39,220);
  123. 1012  LOCATE 20,1:PRINT"                                   ";
  124. 1013  LOCATE 21,1:PRINT"S = Stop program with evaluation   ";CHR$(24);
  125. 1014  LOCATE 22,1:PRINT"A = Advance to next number       ";CHR$(27);"   ";CHR$(26);
  126. 1015  LOCATE 23,1:PRINT"C = Check number line-up           ";CHR$(25);
  127. 1016  REM LOCATE 22,1:PRINT"1016 OKAY":INPUT A$:IF A$="Y" THEN 1030
  128. 1017  REM GOTO 300
  129. 1030   ZZ=1: LP=0: P=PN: PH=LH:PV=LV
  130. 1040   REM
  131. 1041  GOSUB 600
  132. 1042  IF XN < NN THEN GOSUB 4000 ELSE GOTO 1056
  133. 1045  IF L1 = 65 THEN 1041
  134. 1050  GOSUB 30400:IF ET(1)> NN THEN X=4 ELSE X=INT((RND*8)+1)
  135. 1052  LOCATE 15,1:PRINT FL(X);", "GN".";
  136. 1054  LOCATE 17,1:PRINT "Now try another number.";
  137. 1055  GOTO 1041
  138. 1056  GOSUB 30400:IF ET(1)> NN THEN X=4 ELSE X=INT((RND*8)+1)
  139. 1057  LOCATE 15,1:PRINT FL(X);", ";GN;".";:FOR X=1 TO 1200:NEXT
  140. 1059  '***** DONE WITH THE LINE-UP
  141. 1060  GOSUB 30400:LOCATE 13,1:PRINT "The line-up stage is completed.  It is":PRINT:PRINT "now time to add these numbers.":PRINT:PRINT "Press any key to continue.";:GOSUB 30100
  142. 1061   I=INKEY$:IF I="" THEN 1061
  143. 1062   LOCATE 1,1:PRINT STRING$(36,32);"#";RIGHT$(STR$(PC),1);:LOCATE NN+5,20:PRINT" ";:FOR X=13 TO 23:LOCATE X,1:PRINT STRING$(40,32);:NEXT:LOCATE 15,1:PRINT"Press ";:COLOR CJ,7:PRINT"Z";
  144. 1063   COLOR 7,CJ:PRINT" to fill in the zeroes.  Press";:LOCATE 17,1:COLOR CJ,7:PRINT"enter";:COLOR 7,CJ:PRINT" to continue without them.";
  145. 1064  I=INKEY$:IF I="" THEN 1064
  146. 1065  IF I="Z" THEN IZRO="0":GOTO 1068
  147. 1066  IF I=CHR$(13) THEN IZRO=" ":GOTO 1068
  148. 1067  GOTO 1064
  149. 1068  XDSP=0:IDSP="      You must now add these numbers."
  150. 1069  GOSUB 40000
  151. 1070  P=NN*64+20+ND
  152. 1074  '*** FILL ZEROS
  153. 1075  Y=P-64*(NN-1):GOSUB 30190:GOSUB 30191:FOR X=PR TO YR STEP-1:IF SCREEN(X,PK)=32 THEN NEXT:P=P-1:GOSUB 30191:IF PK=20 THEN 1090 ELSE 1075
  154. 1079  IF IZRO=" " THEN XZROP=P:GOTO 1090
  155. 1080  FOR X=PR TO YR STEP-1
  156. 1081  IF SCREEN(X,PK)=32 THEN LOCATE X,PK:PRINT IZRO;
  157. 1082  NEXT X
  158. 1085  P=P-1:GOSUB 30191:IF PK <> 20 THEN 1075
  159. 1089  '*** FILL DECIMAL POINTS
  160. 1090  GOSUB 30190:GOSUB 30191:FOR X=PR TO YR STEP-1 :LOCATE X,20:PRINT ".";:NEXT
  161. 1091  GOSUB 30400:LOCATE 19,1:PRINT STRING$(39,220);
  162. 1099  '***** DO ADDITION
  163. 1100  LOCATE NN+5,20:PRINT " ";:P=NN*64+212: P=P-64+ND:GOSUB 30191
  164. 1101  IF IZRO=" " THEN P=XZROP+128:GOSUB 30191:GOTO 2020
  165. 1110  IF SCREEN(PR-2,PK)=32 OR SCREEN(PR-2,PK)=46 THEN P=P-1:GOSUB 30191:GOTO 1110
  166. 2020  GOSUB 30400:LL=0:WR=0:EL=0:EC=0:ED=0:Y=P-64*(NN-1)-192
  167. 2025  FOR X= P-128 TO Y STEP-64
  168. 2026  GOSUB 30192
  169. 2029  IF XR<1 THEN I="Z":GOTO 1065
  170. 2030  IF SCREEN(XR,XC) <> 32 THEN EL=EL+VAL(CHR$(SCREEN(XR,XC))):LL=1
  171. 2035  NEXT:IF LL=0 THEN 3000
  172. 2040  IF EL > 9 THEN I=RIGHT$(STR$(EL),LEN(STR$(EL))-1):EC=VAL(LEFT$(I,1)):ED=VAL(RIGHT$(I,1)):GOTO 2100
  173. 2050  ED=EL
  174. 2080  '***** ENTER UNITS DIGIT
  175. 2100  GOSUB 30400:IF XDSP=0 THEN LOCATE 15,1:PRINT IDSP;
  176. 2101  LOCATE 21,1:PRINT"S = Stop program with evaluation";
  177. 2105  GOSUB 30191:LOCATE PR,PK:PRINT CHR$(219);:GOSUB 400:IF VAL(I)=ED THEN 2150
  178. 2110  IF WR=2 THEN 2105 ELSE ET(2)=ET(2)+1:IF WR=0 THEN WR=1:GOSUB 30400:LOCATE 17,1:PRINT "Wrong, try again.":GOTO 2100
  179. 2120  WR=2:GOSUB 30400:Z=Y
  180. 2121  REM  GOSUB 30193:I=CHR$(SCREEN(ZR,ZC)):IF I =" " THEN Z=Z+64:GOTO 2121
  181. 2122  REM  PRINT I;: Z=Z+64: GOSUB 30193:P23=P-128:GOSUB 30194:FOR X= ZR TO R1 STEP 1:I=CHR$(SCREEN(X,ZC)):IF I >" " THEN PRINT " + "I;
  182. 2125  REM  IF X=R1 THEN PRINT " =" EL
  183. 2130  REM  NEXT:PRINT:PRINT "the units digit,"ED;:LOCATE ,POS(XX)-1:PRINT ", is the correct":PRINT"answer.  When you understand this,":PRINT"type it in.":WR=2:GOTO 2105
  184. 2131  LOCATE 13,1:PRINT"The numbers in the column add up to"EL;".";:LOCATE 15,1:PRINT"Enter the units digit,"ED".  When you";:LOCATE 17,1:PRINT"understand why, type it in.":WR=2:GOTO 2105
  185. 2149  '*** CHECK FOR DECIMAL POINT & LEFTMOST DIGIT
  186. 2150  P=P-1:GOSUB 30191:IF SCREEN(PR,PK)=46 THEN P=P-1:Y=Y-1
  187. 2160  LOCATE ,,0:FOR X=Y-1 TO P-128 STEP 64:GOSUB 30192:IF SCREEN(XR,XC) = 32 THEN NEXT:IF EC <> 0 THEN Y=P+1 ELSE 3000
  188. 2199  '***** DO CARRY
  189. 2200  WR=0
  190. 2210  GOSUB 30400
  191. 2220  P23=Y-1:GOSUB 30194:LOCATE R1,C1,0:PRINT CHR$(219);:GOSUB 400:IF VAL(I)=EC THEN IF Y <> P+1 THEN GOSUB 30190:LOCATE YR,YC,0:PRINT "  ";:GOTO 2020:ELSE 2020
  192. 2230  IF WR=2 THEN 2220 ELSE ET(3)=ET(3)+1:IF WR=0 THEN WR=1:GOSUB 30400:LOCATE 17,1:PRINT "Wrong, try again, ";GN;".":GOTO 2220
  193. 2240  WR=2:GOSUB 30400:LOCATE 13,1:PRINT"The previous column added up to"EL;".";
  194. 2250  LOCATE 15,1:PRINT "The tens digit,";EC;", is the carry.  When";:LOCATE 17,1:PRINT "you understand why, enter it.";:GOTO 2220
  195. 2999  '***** COMPLETE THE ADDITION
  196. 3000  LOCATE 1,1,0:PRINT STRING$(30,32);:GOSUB 30400
  197. 3010  LOCATE 21,1:PRINT"Press ";:COLOR CJ,7:PRINT"E";:COLOR 7,CJ:PRINT" to continue with evaluation.";
  198. 3020  I=INKEY$:IF I <> "E" THEN 3020
  199. 3030  FOR X=19 TO 21:LOCATE X,1:PRINT STRING$(40,32);:NEXT:GOTO 9000
  200. 3999   '*** find the next number for option 'A' ***
  201. 4000   ZZ=ZZ+1: IF ZZ > NN THEN ZZ = 1
  202. 4005   IF XF(ZZ) = 1 THEN 4000
  203. 4010   P=XA(ZZ):LP=0:RETURN
  204. 8999  '*****  END A PROBLEM
  205. 9000  Z=0
  206. 9010  FOR X=1 TO 3:LOCATE X*2+11,1:PRINT FE(X);USING"###";ET(X):Z=Z+ET(X):EF(X)=EF(X)+ET(X):NEXT:LOCATE 19,1:PRINT "Total number of errors.......";USING"###";Z
  207. 9020  REM  IF Z=0 THEN X=RND(4) ELSE IF Z=1 THEN X=RND(4)+4 ELSE X=RND(4)+8
  208. 9025  REM  PRINT:PRINT TAB((40-LEN(FM(X)))/2)FM(X)
  209. 9026  IF Z=0 THEN CZ=CZ+1
  210. 9030   LOCATE 22,7:PRINT"Press ";:COLOR CJ,7:PRINT"space bar";:COLOR 7,CJ:PRINT" to continue.";
  211. 9035  I=INKEY$:IF I <> " " THEN 9035
  212. 9090  EN$="Y":IF PC=NP THEN 48000 ELSE PC=PC+1:EN$="":GOTO 300
  213. 30100  DEF SEG=0: POKE 1050,PEEK(1052): DEF SEG=64: POKE 23,96: DEF SEG: RETURN
  214. 30190   YR=FNROW(Y): YC=FNCOL(Y): RETURN
  215. 30191   PR=FNROW(P): PK=FNCOL(P): RETURN
  216. 30192   XR=FNROW(X): XC=FNCOL(X): RETURN
  217. 30193   ZR=FNROW(Z): ZC=FNCOL(Z): RETURN
  218. 30194   R1=FNROW(P23): C1=FNCOL(P23): RETURN
  219. 30195   PLR=FNROW(PL): PLC=FNCOL(PL):RETURN
  220. 30200   R1=FNROW(P23): C1=FNCOL(P23): LOCATE R1,C1: RETURN
  221. 30201   R1=FNROW(P): C1=FNCOL(P): LOCATE R1,C1: RETURN
  222. 30202   P23=NN*64+(20-ND-4):R1=FNROW(P23): C1=FNCOL(P23): LOCATE R1,C1: RETURN
  223. 30300   DEF SEG: SCREEN 0: CJ=0:COLOR 7,CJ,CJ: CLS: WIDTH 80: RETURN
  224. 30400   IF CJ=1 THEN LOCATE 13,1,0:FOR X=1 TO 5:PRINT STRING$(40,32);:NEXT:LOCATE 18,1:PRINT STRING$(29,32);:RETURN
  225. 30401   LOCATE 13,1,0:FOR X=1 TO 5:PRINT STRING$(40,32);:NEXT:LOCATE 17,1:PRINT STRING$(39,32);:RETURN
  226. 39999  STOP
  227. 40000  REM PATCH FOR TWO INTEGERS
  228. 40030  FOR XX=1 TO 6
  229. 40035  IF INT(VAL(A(XX)))<>VAL(A(XX)) THEN RETURN
  230. 40038  NEXT XX
  231. 40040  I="Z":IZRO="0"
  232. 40060  RETURN
  233. 47999  '*****  QUIT ROUTINE
  234. 48000  CLS:IF EN$<>"Y" THEN PC=PC-1:IF PC=0 THEN 48080
  235. 48005  PR$="###.##":LOCATE 2,1:PRINT "Total Evaluation for ";GN;":";
  236. 48010  LOCATE 4,1:PRINT "Problems completed...............";PC;
  237. 48012  LOCATE  6,1:PRINT"Avg. number of lining-up errors..";USING PR$;EF(1)/PC;
  238. 48015  LOCATE  8,1:PRINT"Avg. number of adding errors.....";USING PR$;EF(2)/PC;
  239. 48020  LOCATE 10,1:PRINT"Avg. number of carrying errors...";USING PR$;EF(3)/PC;
  240. 48040  XX=0:FOR X=1 TO 3:XX=XX+EF(X):NEXT
  241. 48050  LOCATE 12,1:PRINT"Avg. number of errors per problem";USING PR$;XX/PC;
  242. 48051  LOCATE 22,7:PRINT"Press ";:COLOR CJ,7:PRINT"space bar";:COLOR 7,CJ:PRINT" to continue.";:GOSUB 30100
  243. 48052   I=INKEY$:IF I <> " " THEN 48052
  244. 48053   CLS:LOCATE 10,1:PRINT"Thank you for trying this program.";:GOTO 48090
  245. 48060   GOTO 48090
  246. 48080  LOCATE 10,1,0:PRINT"You have not completed any problems.  As";:LOCATE 12,1:PRINT"a result, no evaluation can be made.";
  247. 48090  LOCATE 22,7:PRINT"Press ";:COLOR CJ,7:PRINT"space bar";:COLOR 7,CJ:PRINT" to continue.";:GOSUB 30100
  248. 48091   I=INKEY$:IF I <> " " THEN 48091
  249. 48100   GOSUB 30100:GOTO 100
  250. 48990  '*****  INPUT NAME
  251. 49000   CLS:LOCATE 3,1:PRINT"Hi, I will be helping you with the";:LOCATE 5,1:PRINT "addition of decimals. Let's get";:LOCATE 7,1:PRINT "acquainted."
  252. 49002   LOCATE 10,1:PRINT"Type your first name and press ";:COLOR CJ,7:PRINT "enter";:COLOR 7,CJ:PRINT".";
  253. 49004   LOCATE 12,1:PRINT"There is a limit of twelve letters."
  254. 49009   PRINT:PRINT "Name:  ";:X=0
  255. 49010   GOSUB 30100
  256. 49020   I=INKEY$: IF I="" THEN 49020
  257. 49021   IF I=CHR$(13) THEN 49060
  258. 49022   IF I=CHR$(8) THEN 49050
  259. 49023   IF ASC(I) > 64 AND ASC(I) < 91 THEN 49030
  260. 49024   IF ASC(I) > 96 AND ASC(I) < 123 THEN 49030 ELSE 49010
  261. 49025   GOTO 49010
  262. 49030   Y=ASC(I): IF X=0 AND Y > 90 THEN I=CHR$(Y-32)
  263. 49040   IF X=12 THEN 49010 ELSE PRINT I;:GN = GN+I:X=X+1:GOTO 49010
  264. 49050   IF X=0 THEN GN = "":GOTO 49010  ELSE LOCATE ,POS(X)-1:PRINT CHR$(32);:LOCATE ,POS(X)-1:Z=LEN(GN): GN=MID$(GN,1,Z-1):X=X-1:GOTO 49010
  265. 49060   IF GN="" THEN 49010 ELSE RETURN
  266. 49999   REM  *****  INTRO
  267. 50000   CLS: LOCATE 1,1,0:PRINT STRING$(40,219);:A$ = STRING$(3,219)+STRING$(34,32)+STRING$(3,219)
  268. 50005   FOR J = 2 TO 22:LOCATE J,1: PRINT A$;:NEXT J: LOCATE 23,1:PRINT STRING$(40,219);
  269. 50010   LOCATE 6,9: PRINT "Microcomputer Workshops";
  270. 50011   LOCATE 8,16:PRINT "Presents";
  271. 50012   LOCATE 10,10:PRINT "Addition of Decimals";
  272. 50013   LOCATE 12,6:PRINT "By David & Joseph Stampleman";
  273. 50020   LOCATE 14,10:PRINT "Designed by Don Ross";:LOCATE 16,13:PRINT "Copyright 1985";
  274. 50025   FOR X = 1 TO 5000:NEXT
  275. 50032   X= VAL(MID$(TIME$,7,2)): RANDOMIZE X
  276. 50040   FM(1)="Very impressive":FM(2)="I see you've been doing your homework!":FM(3)="Too bad your teacher can't see this!":FM(4)="The math department is proud of you!":FM(5)="Well, we can't all be perfect."
  277. 50050   FM(6)="You almost made it on that one.":FM(7)="That was a good try.":FM(8)="Keep trying.  You're doing well.":FM(9)="Keep trying.  You'll get it.":FM(10)="You'll do better on the next one."
  278. 50060   FM(11)="These problems are not so easy.":FM(12)="Try again.  Practice makes perfect."
  279. 50061  FE(1)="Number of lining-up errors..."
  280. 50062  FE(2)="Number of adding errors......"
  281. 50063  FE(3)="Number of carrying errors...."
  282. 50070   REM  FE(1)="Lineup":FE(2)="Addition":FE(3)="Carry"
  283. 50075   FL(1)="That is correct":FL(2)="Okay":FL(3)="You've got it":FL(4)="That's it":FL(5)="Nice work":FL(6)="Well done":FL(7)="Good job":FL(8)="Excellent"
  284. 50080  F1="Press <ENTER> to continue.":DEF FNF1="Sorry, "+GN+". "+I+" is incorrect.":IQ="Press <*> to quit."
  285. 50082   DEF FNROW(X23) = INT((X23/64+1))
  286. 50084   DEF FNCOL(X23) = INT((X23-(INT(X23/64)*64))+1)
  287. 50085   REM  DEF FNCOL(X23) = INT((X23-(INT(X23/64)*64))/1.6+1)
  288. 50100   IF GN <> "" THEN 100
  289. 50104   FOR X=1 TO 1500:NEXT:GOSUB 49000: GOTO 100
  290. 50105   REM LOCATE 1,1: FOR X = 1 TO 23: PRINT STRING$(40,219):NEXT:LOCATE 1,1:FOR X=1 TO 23:PRINT STRING$(40,32):NEXT: GOSUB 49000: GOTO 100
  291. 54999  STOP
  292. 55000   DEF FNROW(X23) = INT((X23/64+1))
  293. 55002   DEF FNCOL(X23) = INT((X23-(INT(X23/64)*64))+1)
  294. 55010   INPUT Z23: GOSUB 55030: STOP:GOTO 55010
  295. 55030   R1=FNROW(Z23): C1=FNCOL(Z23): PRINT"LOCATE ";R1,C1: RETURN
  296. 56000  REM CHECK ARROW KEYS HIT
  297. 56002  IF RIGHT$(S$,1)="P" THEN L1=50: REM 2
  298. 56004  IF RIGHT$(S$,1)="K" THEN L1=52: REM 4
  299. 56006  IF RIGHT$(S$,1)="M" THEN L1=54: REM 6
  300. 56008  IF RIGHT$(S$,1)="H" THEN L1=56: REM 8
  301. 56010  RETURN
  302.