home *** CD-ROM | disk | FTP | other *** search
/ Softdisk G-S 140 / SGDS 140.2mg / SDGS.140 / B / LARGE.NUMBERS (.txt) < prev    next >
Encoding:
Applesoft BASIC Source Code  |  1993-04-19  |  14.0 KB  |  196 lines  |  [FC] Applesoft BASIC Program (0x0801)

  1. 10 I1 = 10:I2 = 7:I3 = 9:I4 = 9:I5 = 7:W = 1:T = 10:DE$ = ".": GOSUB 1480:K = 101:G = 255: DIM A$(G),L(K),L$(G),LE(K),LN(K),R$(G),RI(K),S(K),X$(K):Z2$ =  CHR$(8): FOR I = 1 TO 255:Z3$ = Z3$ +" ": NEXT : GOTO 140: REM G=255,K=101
  2. 20  PRINT "<CTRL-0x04>SAVE LARGE.NUMBERS": END : REM <CTRL-0x0f>L/LX=LENGTH.OF.LONGEST.A$(I)/X$(I)<CTRL-0x0e>
  3. 30  POKE  -16368,0
  4. 40 G =  PEEK(49152): IF G <128  THEN 40
  5. 50  IF G = 155  THEN 1240
  6. 60 G = G -128: POKE  -16368,0: RETURN 
  7. 70  FOR I = W TO X:L$(I) = "": FOR J = W TO L(I): IF  MID$ (X$(I),J,W) = DE$  THEN L$(I) =  MID$ (X$(I),W,J -W):R$(I) =  MID$ (X$(I),J +W):LE(I) =  LEN(L$(I)):RI(I) =  LEN(R$(I)):ML = ML *(ML > = LE(I)) +LE(I) *(ML <LE(I)):MR = MR *(MR > = RI(I)) +RI(I) *(MR <RI(I)): GOTO 90
  8. 80  NEXT :L$(I) = X$(I):R$(I) = "":LE(I) = L(I):RI(I) = 0:ML = ML *(ML > = LE(I)) +LE(I) *(ML <LE(I)):MR = MR *(MR > = RI(I)) +RI(I) *(MR <RI(I))
  9. 90  NEXT I: FOR I = W TO X: IF LE(I) = ML  THEN 110
  10. 100  FOR J = W TO ML -LE(I):L$(I) = "0" +L$(I):X$(I) = " " +X$(I): NEXT 
  11. 110  NEXT : FOR I = W TO X: IF RI(I) = MR  THEN 130
  12. 120  FOR J = W TO MR -RI(I):R$(I) = R$(I) +"0": NEXT 
  13. 130  NEXT : FOR I = W TO X:A$(I) = L$(I) +R$(I):L(I) = ML +MR +W: NEXT :L = ML +MR: GOSUB 870:M =  LEN(N$):L = L +W:N$ =  MID$ (N$,W,M -MR) +"." + MID$ (N$,M -MR +W): GOTO 910
  14. 140  GOSUB 1490: ONERR  GOTO 1930
  15. 150  PRINT "This program will add, multiply, divide, and raise to a positive integral power numbers from 1 to 250 digits long without going into scientific notation.": PRINT "The numbers can be positive or negative, integer or decimal.": PRINT 
  16. 160  PRINT "The answers will be exact. They will not be rounded off. In the case of": PRINT "division, you will determine the degree of accuracy by choosing the number of   decimal places the division will be carried out.": GOSUB 1490
  17. 170  VTAB 18: GOSUB 1490: PRINT " Use the following word processing aids when entering data:": PRINT "-<Ctrl>P: Push text from under the cursor to the right ->.": PRINT "-<Ctrl>Y: Erase everything under and to the right of the cursor."
  18. 180  PRINT "-Delete Key: Pull text to the left and delete at the same time.": GOSUB 1490:M$(1) = "Add numbers together":M$(2) = "Multiply numbers together":M$(3) = "Divide one number into another":M$(5) = "Find N! (N factorial)"
  19. 190 M$(4) = "Raise to a positive integral power": VTAB 16: PRINT "*To subtract a number, simply add the negative of that number.":N = 5:V = I1:E = 9:H = 30: GOSUB 1300:D$ = M$(V -E):I1 = V:F$ = "Add": ON V -E GOTO 460,450,440,200,240
  20. 200 MU = W: VTAB 1: GOSUB 1490: PRINT "This program will raise a decimal number to a positive integral power < 101.": GOSUB 1490: POKE 34,3:F$ = "Raise to a positive integral power"
  21. 210  VTAB 4: PRINT "Enter the number which you want raised to a power.":I = W: GOSUB 1640: VTAB 13: PRINT "To what positive integral power do you want the above number raised? "PO$;:W2$ = PO$:Z3 = 69:LL = 3: GOSUB 1710: CALL  -958:PO =  VAL(W1$)
  22. 220  IF PO <2  OR PO < > INT(PO)  OR PO >100  THEN  PRINT : INVERSE : PRINT "The power must be a positive integer < 101.<CTRL-0x07><CTRL-0x07>": NORMAL : GOTO 210
  23. 230  TEXT : HOME :X = PO:XX = X:PO$ = W1$: FOR I = 2 TO PO:X$(I) = X$(W): NEXT : GOTO 520
  24. 240 FA = W:MU = W: GOSUB 1490: PRINT "This program will calculate N! (N Factorial) for any positive integral value of N up to 257. N! is defined to be 1 if N=0, and in general, N!=1x2x3x...xN.": GOSUB 1490: POKE 34,4:F$ = "Find N! (N factorial)"
  25. 250  VTAB 5: POKE 1403,36: INVERSE : PRINT "Enter N": NORMAL :I = W:X$(I) = FA$: GOSUB 1640:X =  VAL(W1$):FA$ = W1$: IF X = 0  OR X = W  THEN  HOME : VTAB 10: POKE 1403,36: PRINT X"! = 1": GOSUB 1440: GOTO 250
  26. 260  IF X >257  OR X <0  OR X < > INT(X)  THEN  VTAB 10: POKE 1403,19: PRINT "N must be a positive integer less than 258!<CTRL-0x07><CTRL-0x07>": GOSUB 1440: GOTO 250
  27. 270 E = 146:L$ = "0": IF X <146  THEN 370
  28. 280 N$ = "1174997204390910823947958271638517164580596260950950899863328110328788502065523921259841703544565887872061375416236415928927138003611428942975764749736493099899158001222749504661325288247670265918680290838478221656195072"
  29. 290  TEXT : HOME : VTAB 6: POKE 1403,21: PRINT "It will take a while to calculate "X"!": PRINT : GOSUB 1500: GOSUB 1500: FOR I = W TO 35:N$ = N$ +"0": NEXT :N =  LEN(N$): REM  <CTRL-0x0f>N$=146!<CTRL-0x0e>
  30. 300  VTAB 9: POKE 1403,0: INVERSE : PRINT  SPC( 80 *(E -146)/(X -146 +(X = 146))): NORMAL :E = E +W:G$ =  STR$(E): IF E >X  THEN  HOME :AF = 9: GOSUB 1460: GOTO 1120: REM   <CTRL-0x0f>E!=L$+N$/EACH.PRODUCT.MID$(G$,I,1)*E!=A$(I)+X$(I)<CTRL-0x0e>
  31. 310  FOR I = W TO 3:X$(I) = "":G =  VAL( MID$ (G$,4 -I,W)):D = 0: FOR J = N TO W  STEP  -W:C = G * VAL( MID$ (N$,J,W)) +D:D =  INT(C/T):X$(I) =  STR$(C -D *T) +X$(I): NEXT 
  32. 320 A$(I) = "": FOR J =  LEN(L$) TO W  STEP  -W:C = G * VAL( MID$ (L$,J,W)) +D:D =  INT(C/T):A$(I) =  STR$(C -D *T) +A$(I): NEXT : IF D  THEN A$(I) =  STR$(D) +A$(I)
  33. 330  NEXT I:A$(2) = A$(2) + LEFT$(X$(2),W):X$(2) =  MID$ (X$(2),2) +"0":A$(3) = A$(3) + LEFT$(X$(3),2):X$(3) =  MID$ (X$(3),3) +"00":M = 0: FOR I = W TO 3:G =  LEN(A$(I)):M = M *(M > = G) +G *(M <G): NEXT : FOR I = W TO 3: IF  LEN(A$(I)) <M  THEN  FOR J = 1 TO M - LEN(A$(I)):A$(I) = "0" +A$(I): NEXT 
  34. 340  NEXT :D = 0:N$ = "": FOR J = N TO W  STEP  -W:C = D: FOR I = W TO 3:C = C + VAL( MID$ (X$(I),J,W)): NEXT :D =  INT(C/T):N$ =  STR$(C -D *T) +N$: NEXT 
  35. 350 L$ = "": FOR J = M TO W  STEP  -W:C = D: FOR I = W TO 3:C = C + VAL( MID$ (A$(I),J,W)): NEXT :D =  INT(C/T):L$ =  STR$(C -D *T) +L$: NEXT : IF D  THEN L$ =  STR$(D) +L$
  36. 360  GOTO 300
  37. 370 N = 2:G = 0:X$(W) = "1": IF X >24  THEN X$(W) = "15511210043330985984":G = 6:N = 26: REM <CTRL-0x0f>X$(W)=25!<CTRL-0x0e>
  38. 380  IF X >49  THEN X$(W) = "30414093201713378043612608166064768844377641568960512":G = 12:N = 51: REM <CTRL-0x0f>X$(W)=50!<CTRL-0x0e>
  39. 390  IF X >74  THEN X$(W) = "24809140811395398091946477116594033660926243886570122837795894512655842677572867409443815424":G = 18:N = 76: REM <CTRL-0x0f>X$(W)=75!<CTRL-0x0e>
  40. 400  IF X >99  THEN X$(W) = "93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864":G = 24:N = 101: REM <CTRL-0x0f>X$(W)=100!<CTRL-0x0e>
  41. 410  IF X >124  THEN X$(W) = "18826771768889260997437677024916008575954036487149242588759823150835315633161359886688293288949592313364640544593005774063016191934138059781888345755854705552432637556500713177088":G = 31:N = 126: REM X$(W)=125!
  42. 420  IF G  THEN  FOR I = W TO G:X$(W) = X$(W) +"0": NEXT : IF N = X +W  THEN N$ = X$(W): HOME : GOSUB 1460: GOTO 1120
  43. 430  FOR I = N TO X:X$(I -N +2) =  STR$(I): NEXT :X = X -N +2: TEXT : HOME :XX = X: GOTO 540
  44. 440 F$ = "Divide (the 1st by the 2nd)":MU = 2:X = 2: POKE 1403,27: PRINT F$: POKE 1403,37: PRINT "A/B": GOSUB 1490: POKE 34,3: POKE 1403,35: PRINT "Enter A":I = W: GOSUB 1640: VTAB 4: POKE 1403,35: PRINT "Enter B":I = 2: GOSUB 1640: GOTO 480
  45. 450 F$ = "Multiply":MU = W
  46. 460  VTAB T: PRINT "How many numbers do you want to "F$" together? "LE$;:W2$ = LE$:Z3 = 43 + LEN(F$):LL = 3: GOSUB 1710:LE$ = W1$:X =  INT( VAL(LE$)): HOME : IF X <2  OR X >100  THEN  VTAB 16: POKE 1403,21:LE$ = W2$: PRINT "Your number must be between 2 & 100.<CTRL-0x07><CTRL-0x07>": GOTO 460
  47. 470  VTAB W: POKE 1403,29: PRINT "Enter the "X" numbers.": GOSUB 1490: FOR I = 1 TO X: VTAB 4: POKE 1403,W: INVERSE : PRINT "Number #"I: NORMAL : GOSUB 1670: GOSUB 1640: NEXT : TEXT : HOME :X = X +(RP = W):XX = X: IF RP = W  THEN X$(X) = N$: IF MU = 2  AND I4 = 10  THEN X$(X) = X$(W):X$(W) = N$
  48. 480 RP = 0: TEXT : HOME :M$(2) = "Review/correct the " + STR$(X) +" numbers":M$(1) = "Proceed with the operation":N = 2:V = 7:E = 6:H = 26: GOSUB 1290: IF V = 8  THEN 470
  49. 490  FOR I = 1 TO X:W1$ = X$(I): GOSUB 1910:X$(I) = W1$: NEXT : IF MU <2  THEN 520
  50. 500  HOME : VTAB 5: PRINT "For how many places(P) after the decimal point do you want the division carried?": VTAB 12: POKE 1403,16: PRINT "Note:This program will not round off the answer."
  51. 510  VTAB 8: POKE 1403,34: PRINT "P = "PL$;:Z3 = 38:W2$ = PL$:LL = 3: GOSUB 1710: HOME :P =  VAL(W1$):PL$ = W1$: IF P <0  OR P >250  OR P < > INT(P)  THEN  VTAB 12: POKE 1403,20: PRINT "P must be a positive integer < 251.<CTRL-0x07><CTRL-0x07>": GOTO 510
  52. 520  FOR I = 1 TO X: IF  LEN(X$(I)) >250  THEN  VTAB 7: PRINT "Number #"I" is longer than 250 digits. No number can be longer than 250 digits.<CTRL-0x07><CTRL-0x07>": GOSUB 1440:I = X +W: GOTO 470
  53. 530  NEXT : IF MU < >W  THEN 570
  54. 540 G = 0: FOR I = W TO X:E =  LEN(X$(I)): IF  MID$ (X$(I),W,W) = "-"  THEN E = E -W
  55. 550  FOR J = W TO  LEN(X$(I)): IF  MID$ (X$(I),J,W) = DE$  THEN E = E -W:J = 999
  56. 560  NEXT :G = G +E: NEXT : IF G >255  AND FA = 0  THEN  VTAB 7: PRINT "The product of these "X" numbers might exceed the longest allowable length": PRINT "of 250 digits.<CTRL-0x07><CTRL-0x07>": GOSUB 1440: GOTO 1240
  57. 570 J = W: FOR I = W TO X:S(I) = W:L$(I) = "1": IF  LEFT$(X$(I),W) = "-"  THEN X$(I) =  RIGHT$(X$(I), LEN(X$(I)) -W):S(I) =  -W: IF MU = W  THEN L$(I) = "-1"
  58. 580 J = J *S(I): NEXT :S$ = "":A = S(1):B = S(2): IF MU  AND J =  -W  THEN S$ = "-"
  59. 590  INVERSE : FOR I = 0 TO 2: VTAB 8 +I: POKE 1403,29: PRINT  SPC( 23): NEXT : NORMAL : VTAB 9: POKE 1403,30: PRINT " please be patient ":L = 0: FOR I = 1 TO X:L(I) =  LEN(X$(I)):L = L *(L > = L(I)) +L(I) *(L <L(I)): NEXT :LX = L:A$ = X$(W):B$ = X$(2):CZ = 2: IF MU  THEN 630
  60. 600 F = W: FOR I = W TO X: FOR J = W TO L(I): IF  MID$ (X$(I),J,W) = DE$  THEN 70
  61. 610  NEXT : NEXT :F = 0: GOTO 840
  62. 620  REM <CTRL-0x0d><CTRL-0x0f>REMOVE.DECIMAL.&.COUNT.PLACES.FOR.MU>0:DC=DEC.COUNT.FOR.N$:L$/G$=L/R.OF.DEC.PT.OF.X$(I):R$(I)=L$+G$:LE(I)/RI(I)=LENGTH.OF.L$/G$:L(I)/LN(I)=LENGTH.OF.X$(I)/R$(I)<CTRL-0x0e>
  63. 630  FOR I = W TO 2:LN(I) = L(I):C = 0:L$ = X$(I):R$(I) = X$(I): FOR J = W TO L(I): IF  MID$ (X$(I),J,W) = DE$  THEN L$ =  MID$ (X$(I),W,J -W):G$ =  MID$ (X$(I),J +W): GOSUB 1580:R$(I) = L$ +G$:LN(I) =  LEN(R$(I)):J = 300
  64. 640  NEXT :RI(I) = C:LE(I) =  LEN(L$): NEXT I: IF MU = 2  THEN 740
  65. 650  REM <CTRL-0x0d><CTRL-0x0f>MULTIPLY<CTRL-0x0e>
  66. 660 L1 = LN(1):L2 = LN(2): IF L1 >L2  THEN L1 = LN(2):L2 = LN(1):G$ = R$(1):R$(1) = R$(2):R$(2) = G$
  67. 670  FOR I = L1 TO W  STEP  -W:A$(I) = "":S(I) = W:G =  VAL( MID$ (R$(W),I,W)):D = 0: FOR J = L2 TO W  STEP  -W:C = G * VAL( MID$ (R$(2),J,W)) +D:D =  INT(C/T):A$(I) =  STR$(C -D *T) +A$(I): NEXT : IF D  THEN A$(I) =  STR$(D) +A$(I)
  68. 680  NEXT : IF L1 = W  THEN 700
  69. 690  FOR I = W TO L1 -W: FOR J = W TO L1 -I:A$(I) = A$(I) +"0": NEXT : NEXT 
  70. 700 L =  LEN(A$(W)): FOR I = W TO L1: IF L =  LEN(A$(I))  THEN 720
  71. 710  FOR J = W TO L - LEN(A$(I)):A$(I) = "0" +A$(I): NEXT 
  72. 720  NEXT I:X = L1: GOTO 870
  73. 730  REM <CTRL-0x0d><CTRL-0x0f>DIVIDE:R$(I)=X$(I)WITHOUT".":RI(I)=#DIGITS.TO.R.OF.DEC.PT.IN.R$(I):P=#INTEGERS.R.OF.DEC.PT.IN.N$.Z=#INTEGERS.LEFT.OF.DEC.PT.IN.N$<CTRL-0x0e>
  74. 740  IF R$(2) = "0"  OR R$(2) = ""  THEN  HOME : VTAB 10: POKE 1403,26: PRINT "Your divisor can't be zero!<CTRL-0x07><CTRL-0x07>": POKE 1403,32: PRINT "Please correct.": GOSUB 1440: GOTO 440
  75. 750 P$ = R$(2):Q$ = R$(W):Z = LE(W) +RI(2):L$ = P$: GOSUB 1520:P$ = L$: FOR I = 1 TO 250 - LEN(Q$):Q$ = Q$ +"0": NEXT :P1$ = "0" +P$:LM =  LEN(P1$):N$ = "":LIM = Z +P:LIM = LIM *(LIM <251) +250 *(LIM >250):Z$ = "": FOR I = W TO LM:Z$ = Z$ +"0": NEXT :I = LM:CT = 0:QD$ =  MID$ (Q$,W,LM): IF P1$ >QD$  THEN 770
  76. 760 CT = CT +W: GOSUB 1660:QD$ = RD$: IF P1$ =  <RD$  THEN 760
  77. 770 W3$ =  STR$(CT):N$ =  MID$ (Z$,W,LM - LEN(W3$)) +W3$:RD$ = QD$
  78. 780 I = I +W: IF I >LIM  OR  LEN(N$) > = 250  THEN 830
  79. 790 RD$ =  MID$ (RD$,2,LM -W) + MID$ (Q$,I,W): IF RD$ = Z$  AND  LEN(N$) > LEN(R$(W))  THEN ID = W: FOR I = W TO Z +W - LEN(N$):N$ = N$ +"0": NEXT : GOTO 830
  80. 800 QD$ = RD$:CT = 0: IF P1$ >QD$  THEN 820
  81. 810 CT = CT +W: GOSUB 1660:QD$ = RD$: IF P1$ =  <RD$  THEN 810
  82. 820 N$ = N$ + STR$(CT): GOTO 780
  83. 830 M =  LEN(N$):N$ =  MID$ (N$,W,Z) +DE$ + MID$ (N$,Z +W,(M -Z) *(M > = Z)): GOTO 910
  84. 840  FOR I = W TO X:A$(I) = X$(I): IF L = L(I)  THEN 860
  85. 850  FOR J = W TO L -L(I):A$(I) = "0" +A$(I): NEXT 
  86. 860  NEXT 
  87. 870 N$ = "":D = 0: FOR I = L TO W  STEP  -W:C = 0: FOR K = W TO X:C = C +S(K) * VAL( MID$ (A$(K),I,W)): NEXT :C = C +D:D =  INT(C/T):N$ =  STR$(C -T *D) +N$: NEXT : IF D > = 0  THEN N$ =  STR$(D) +N$: GOTO 890
  88. 880 M =  LEN(N$):G$ = "":S$ = "-":S =  ABS(D): FOR I = W TO M:G$ = G$ + STR$(9 - VAL( MID$ (N$,I,W))): NEXT :D = W:N$ = "": FOR I = M TO W  STEP  -W:C =  VAL( MID$ (G$,I,W)) +D:D = (C = T):N$ =  STR$(C -T *D) +N$: NEXT :N$ =  STR$(S -W) +N$
  89. 890 X = XX:M =  LEN(N$):S(1) = A:S(2) = B: IF F = W  THEN  RETURN 
  90. 900 DC = RI(W) +RI(2): IF MU = W  AND DC  THEN N$ =  MID$ (N$,W,M -DC) +DE$ + MID$ (N$,M -DC +W)
  91. 910 W1$ = N$: GOSUB 1900:N$ = W1$
  92. 920 M =  LEN(N$): IF  MID$ (N$,W,W) = "0"  AND M >W  THEN N$ =  MID$ (N$,2): GOTO 920: REM <CTRL-0x0f>REMOVE.L.ZEROS<CTRL-0x0e>
  93. 930 N$ =  LEFT$(N$, LEN(N$) -( ASC( RIGHT$(N$,W)) <48))
  94. 940 G$ = N$: GOSUB 1580:N$ = G$:M =  LEN(N$): IF  MID$ (N$,M,W) = DE$  THEN N$ =  MID$ (N$,W,M -W): REM <CTRL-0x0f>REMOVE.R.0'S.&.DEC.PT.<CTRL-0x0e>
  95. 950  IF N$ = ""  THEN N$ = "0"
  96. 960  IF MU = W  AND CZ <XX  THEN CZ = CZ +W:X$(W) = X$(CZ):X$(2) = N$:L(W) =  LEN(X$(W)):L(2) =  LEN(N$): GOTO 630
  97. 970  IF MU = W  THEN X$(W) = A$:X$(2) = B$: FOR I = W TO XX:L(I) =  LEN(X$(I)):S(I) =  VAL(L$(I)): NEXT 
  98. 980  HOME :LX = 0: FOR I = W TO XX:W1$ = X$(I): GOSUB 1900:X$(I) = W1$: NEXT : FOR I = W TO X: REM <CTRL-0x0f>REMOVE.ALL.SPACES<CTRL-0x0e>
  99. 990 G$ = X$(I): GOSUB 1580:X$(I) = G$:M =  LEN(X$(I)): IF  MID$ (X$(I),M,W) = DE$  THEN X$(I) =  MID$ (X$(I),W,M -W): REM <CTRL-0x0f>REMOVE.R.DEC.PT.&.ZEROS<CTRL-0x0e>
  100. 1000  IF X$(I) = ""  THEN X$(I) = "0"
  101. 1010 G =  LEN(X$(I)):LX = LX *(G =  <LX) +G *(G >LX): NEXT :N$ = S$ +N$: GOSUB 1460: IF PO  THEN X = W
  102. 1020  FOR I = 1 TO X: IF S(I) =  -W  THEN X$(I) = "-" +X$(I)
  103. 1030  NEXT : IF (LX <80  AND MU)  OR FA = W  OR PO  THEN 1120
  104. 1040  IF MU  THEN 1100
  105. 1050 X$(X +W) = N$:MR = 0:LX = 0: FOR I = W TO X +W:RI(I) = 0:LE(I) = 0:W1$ = X$(I): GOSUB 1900:X$(I) =  MID$ (W1$,W, LEN(W1$) -( RIGHT$(W1$,W) = DE$)):LX =  LEN(X$(I)): FOR J = W TO LX: IF  MID$ (X$(I),J,W) = DE$  THEN RI(I) = LX -J:MR = MR *(MR > = RI(I)) +RI(I) *(RI(I) >MR):LE(I) = W:J = 999
  106. 1060  NEXT : NEXT : FOR I = W TO X +W: IF RI(I) = MR  THEN 1080
  107. 1070  FOR J = W TO MR -RI(I):X$(I) = X$(I) +" ": NEXT 
  108. 1080  NEXT : FOR I = W TO X +W: IF MR  AND LE(I) = 0  THEN X$(I) = X$(I) +" "
  109. 1090 G =  LEN(X$(I)):LX = LX *(G =  <LX) +G *(G >LX): NEXT :N$ = X$(X +W): IF LX <80  THEN 1120
  110. 1100  VTAB W: INVERSE : POKE 1403,40 - LEN(F$)/2: PRINT F$: NORMAL : GOSUB 1490: POKE 34,2: FOR I = 1 TO X:W1$ = X$(I): GOSUB 1900: PRINT I"]"W1$: IF  PEEK(37) > = 18  AND I <X  THEN  GOSUB 1440
  111. 1110  NEXT :M = 0: GOTO 1180
  112. 1120  VTAB W: INVERSE : POKE 1403,40 - LEN(F$)/2: PRINT F$: NORMAL : GOSUB 1490: POKE 34,2: IF PO  THEN  POKE 36,71 - LEN( STR$(PO)): PRINT "Power = "PO
  113. 1130  IF FA = W  THEN  VTAB 3: POKE 1403,37: PRINT FA$"!": GOTO 1160
  114. 1140  FOR I = 1 TO X: POKE 36,79 - LEN(X$(I)): PRINT X$(I): IF  PEEK(37) > = 19  AND I <X  THEN  GOSUB 1440
  115. 1150  NEXT 
  116. 1160 M =  LEN(N$): IF  MID$ (N$,W,W) = " "  THEN N$ =  MID$ (N$,2): GOTO 1160
  117. 1170 M = (79 -M) *(M <78)
  118. 1180  GOSUB 1500: POKE 36,M: IF AF = 9  AND L$ < >"0"  THEN  GOSUB 1520: PRINT L$;N$: GOSUB 1440:FA = 0: FOR I = 1 TO 3:X$(I) = "": NEXT : GOTO 1240
  119. 1190  PRINT N$: IF MU = 2  AND ID = W  THEN  VTAB 21: POKE 1403,21: PRINT "The answer above is the exact answer.": PRINT "  There are no additional non-zero integers to the right of the decimal point.":ID = 0
  120. 1200 FA = 0:PO = 0:I$ = "":F = 0:MU = 0:PO = 0:I$ = "": GOSUB 1440: GOSUB 1480: IF AF = 9  THEN 1240
  121. 1210 M$(2) = "Operate on the last result":M$(1) = "Go to the final menu":N = 2:H = 28:V = I2:E = 6: GOSUB 1290:I2 = V: IF V = 7  THEN 1240
  122. 1220 W1$ = N$: GOSUB 1910:N$ = W1$: GOSUB 1480: INVERSE : VTAB 7: POKE 1403,26: PRINT "Given the last result*": NORMAL : GOSUB 1700:M$(1) = "Add it to new numbers":RP = W:M$(2) = "Multiply it by new numbers":M$(3) = "Divide it by/into a new number":N = 4:V = I3:E = 8
  123. 1230 M$(4) = "Raise it to a power":H = 26: CALL 54915: GOSUB 1290:I3 = V:D$ = M$(V -E): ON V -E GOTO 1370,1380,1420,1360
  124. 1240  CALL 54915: GOSUB 1480:ID = 0:MU = 0:PO = 0:M$(1) = "Repeat 'LARGE.NUMBERS'":M$(2) = "Return to the disk menu*": VTAB 21: POKE 1403,12: PRINT "*You can insert any 'MATH WORKHORSE' disk at this point."
  125. 1250 AF = 0:N = 2:V = 7:E = 6:H = 29:D$ = "FINAL MENU": GOSUB 1290: IF V = 8  THEN  PRINT : PRINT "<CTRL-0x04>-WORKHORSE"
  126. 1260  FOR I = W TO X *(X <101) +100 *(X >100)
  127. 1270  IF  MID$ (X$(I),W,W) = " "  THEN X$(I) =  MID$ (X$(I),2): GOTO 1270
  128. 1280  NEXT : CALL 54915: IF ER  THEN  CALL 54892: GOTO 10
  129. 1285  GOTO 140
  130. 1290  VTAB 1: POKE 1403,0: PRINT "LARGE.NUMBERS";: POKE 1403,65: PRINT "Esc=Final Menu": GOSUB 1490: POKE 1403,40 - LEN(D$)/2: PRINT D$: GOSUB 1490: PRINT "Highlight your option with arrow keys or a number from 1 to "N"...then hit Return"
  131. 1300  FOR I = W TO N: VTAB E +I: POKE 1403,H -3: PRINT I"."M$(I);: NEXT 
  132. 1310  VTAB V: POKE 1403,H -1: INVERSE : PRINT M$(V -E);: NORMAL : GOSUB 30: IF G >48  AND G <49 +N  THEN  VTAB V: POKE 1403,H -1: PRINT M$(V -E);:V = G +E -48: GOTO 1310
  133. 1320  IF G = 13  THEN  HOME : RETURN 
  134. 1330  VTAB V: POKE 1403,H -1: PRINT M$(V -E);: IF G = 21  OR G = T  THEN V = V +W: IF V = E +W +N  THEN V = E +W
  135. 1340  IF G = 8  OR G = 11  THEN V = V -W: IF V = E  THEN V = E +N
  136. 1350  GOTO 1310
  137. 1360 X$(W) = N$: GOTO 200
  138. 1370 MU = 0:F$ = "Add": VTAB 3: PRINT "How many numbers do you want to add to "N$"?": GOTO 1390
  139. 1380 MU = W:F$ = "Multiply": VTAB 3: PRINT "How many numbers do you want to multiply by "N$"?"
  140. 1390  VTAB 10: CALL  -868: POKE 1403,37: PRINT X$;:Z3 = 37:W2$ = X$:LL = 2: GOSUB 1710:X$ = W1$:X =  VAL(W1$): IF X <W  OR X < > INT(X)  THEN 1390
  141. 1400  IF X = 1  THEN X$(1) = X$(2)
  142. 1410  HOME : GOTO 470
  143. 1420 MU = 2:F$ = "Divide (the 1st by the 2nd)":X = W:M$(1) = "divide it into a new number":M$(2) = "divide it by a new number": VTAB 7: POKE 1403,28: INVERSE : PRINT "Given the last result*": NORMAL : GOSUB 1700:V = I4:E = 8:N = 2:H = 28: GOSUB 1290: IF V = 10  THEN X$(W) = X$(2)
  144. 1430 D$ = M$(V -E):I4 = V: VTAB 12: PRINT "Enter the NEW number above.": GOSUB 1700: GOTO 470
  145. 1440  IF PR = 0  THEN  VTAB 24: POKE 1403,19: INVERSE : PRINT "Hit Return to continue <Esc = final menu>";: NORMAL : GOSUB 30: HOME 
  146. 1450  RETURN 
  147. 1460  GOSUB 1480:M$(1) = "Display on the screen":M$(2) = "Print on the printer":N = 2:V = I5:E = 6:H = 20 +T: GOSUB 1290:I5 = V: IF V = 7  THEN  RETURN 
  148. 1470  VTAB 12: POKE 1403,30: PRINT "Set up the printer": GOSUB 1440:PR = W: PRINT : PRINT "<CTRL-0x04>PR#1": PRINT  CHR$(9)"80N": RETURN 
  149. 1480  PRINT : PRINT "<CTRL-0x04>PR#0":PR = 0: PRINT "<CTRL-0x04>PR#3": TEXT : HOME : PRINT : VTAB W: RETURN 
  150. 1490  FOR G = 1 TO 78: PRINT "-";: NEXT : PRINT "-": RETURN 
  151. 1500  FOR G = 1 TO 78: PRINT "_";: NEXT : PRINT "_": RETURN 
  152. 1510  REM <CTRL-0x0d><CTRL-0x0f>REMOVE.L.0'S.FROM.L$:L$->L$.C=CARDINALITY.OF.1ST.NON-0.INTEGER<CTRL-0x0e>
  153. 1520 A1$ = "": IF  MID$ (L$,W,W) = "-"  THEN L$ =  MID$ (L$,2):A1$ = "-"
  154. 1530 G =  LEN(L$): IF G = 0  THEN L$ = "0":C = W: RETURN 
  155. 1540  FOR K = W TO G:C = K: IF  MID$ (L$,K,W) < >"0"  THEN K = 300
  156. 1550  NEXT :C = C +(K <300):L$ =  MID$ (L$,C): IF L$ = ""  THEN L$ = "0"
  157. 1560 L$ = A1$ +L$: RETURN 
  158. 1570  REM <CTRL-0x0d><CTRL-0x0f>REMOVE.RIGHT.0'S.FROM.G$<CTRL-0x0e>
  159. 1580 C =  LEN(G$): IF C = 0  THEN  RETURN 
  160. 1590  FOR G = W TO C: IF  MID$ (G$,G,W) = DE$  THEN 1610
  161. 1600  NEXT : RETURN 
  162. 1610  IF  RIGHT$(G$,W) = "0"  THEN G$ =  MID$ (G$,W,C -W): GOTO 1580
  163. 1620  RETURN 
  164. 1630  REM <CTRL-0x0d><CTRL-0x0f>INPUT.ROUTINE<CTRL-0x0e>
  165. 1640  VTAB 6: POKE 1403,W -1: PRINT  SPC( 255): VTAB 6: POKE 1403,0: PRINT X$(I):W2$ = X$(I): VTAB 6:Z3 = 0:LL = 250: GOSUB 1710:X$(I) = W1$: RETURN 
  166. 1650  REM <CTRL-0x0d><CTRL-0x0f>(QD$-P1$)->RD$(WHERE.QD$>=P$)<CTRL-0x0e>
  167. 1660 RD$ = "":D = 0: FOR S = LM TO W  STEP  -W:C =  VAL( MID$ (QD$,S,W)) - VAL( MID$ (P1$,S,W)) -D:D = (C <0):C = C +T *D:RD$ =  STR$(C) +RD$: NEXT : RETURN 
  168. 1670  IF MU <2  OR RP < >W  THEN  RETURN 
  169. 1680 I$ = "Divide the result* into a new number": IF V = 10  THEN I$ = "Divide the result* by a new number"
  170. 1690  VTAB W: POKE 1403,40 - LEN(I$)/2: PRINT I$: GOSUB 1490: POKE 34,2
  171. 1700  VTAB 16: GOSUB 1490: PRINT : PRINT "*The result of your last calculation is "N$;: RETURN 
  172. 1710  POKE 1403,Z3:W1$ = "":W2$ = W2$ + MID$ (Z3$,1,LL - LEN(W2$)):Z3 = 0: POKE  -16368,0: REM   <CTRL-0x0f>W1$=STRICTLY.L.OF.CURSOR/W2$=UNDER+R.OF.CURSOR<CTRL-0x0e>
  173. 1720  GET Z1$:Z3 =  LEN(W1$):Z1 =  ASC(Z1$): IF Z1 = 13  THEN W1$ = W1$ +W2$: GOSUB 1890: PRINT : RETURN 
  174. 1730  IF Z1 = 27  THEN 1240
  175. 1740  IF Z1 = 8  OR Z1 = 16  OR Z1 = 21  OR Z1 = 25  OR Z1 = 127  OR Z1 = 45  OR (Z1 >47  AND Z1 <58)  THEN 1750
  176. 1745  GOTO 1720
  177. 1750  IF Z1 = 16  OR Z1 = 127  THEN 1830
  178. 1760  IF Z1 < >8  THEN 1790
  179. 1770  IF Z3 = 0  THEN 1720
  180. 1780  PRINT Z1$;:W2$ =  RIGHT$(W1$,1) +W2$:W1$ =  MID$ (W1$,1,Z3 -1): GOTO 1720
  181. 1790  IF Z3 = LL  THEN 1720
  182. 1800  IF Z1 = 25  THEN W2$ =  MID$ (Z3$,1,LL -Z3): PRINT  MID$ (Z3$,1,LL -Z3);: FOR Z2 = 1 TO LL -Z3: PRINT Z2$;: NEXT : GOTO 1720
  183. 1810  IF Z1 = 21  THEN Z1$ =  LEFT$(W2$,1)
  184. 1820 W2$ =  MID$ (W2$,2,LL -Z3 -1): PRINT Z1$;:W1$ = W1$ +Z1$: GOTO 1720
  185. 1830  IF Z1 < >16  THEN 1860
  186. 1840  IF Z3 = LL  OR W2$ =  MID$ (Z3$,1,LL -Z3)  THEN 1720
  187. 1850 W2$ = " " + MID$ (W2$,1,LL -Z3 -1): PRINT W2$;: FOR Z2 = 1 TO LL -Z3: PRINT Z2$;: NEXT : GOTO 1720
  188. 1860  IF Z3 = 0  THEN 1720
  189. 1870 W1$ =  MID$ (W1$,1,Z3 -1):W2$ = W2$ +" ": PRINT Z2$;W2$;: FOR Z2 = 1 TO LL -Z3 +1: PRINT Z2$;: NEXT : GOTO 1720
  190. 1880  REM <CTRL-0x0d><CTRL-0x0f>OMIT.LEADING/TRAILING.SPACES<CTRL-0x0e>
  191. 1890 Z2 =  LEN(W1$): IF W1$ =  MID$ (Z3$,1,Z2)  THEN W1$ = "0": RETURN 
  192. 1900  IF  MID$ (W1$,1,1) = " "  THEN W1$ =  MID$ (W1$,2): GOTO 1900
  193. 1910 Z2 =  LEN(W1$): IF  MID$ (W1$,Z2) = " "  THEN W1$ =  MID$ (W1$,1,Z2 -1): GOTO 1910
  194. 1920  RETURN 
  195. 1930  GOSUB 1480:XX =  PEEK(222): VTAB 7: IF XX = 176  OR XX = 191  THEN  PRINT "Some string during calculation was too long. Please enter shorter numbers, or   fewer numbers at a time.<CTRL-0x07><CTRL-0x07>": PRINT 
  196. 1940  PRINT "Error code "XX" in line #" PEEK(218) + PEEK(219) *256:ER = 1: GOSUB 1440: GOTO 1240