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

  1. 10 W = 1:I1 = 7:B1 = 10:B2 = 10:B3 = B1: FOR I = 1 TO 35:Z3$ = Z3$ +" ": NEXT :Z2$ =  CHR$(8):MQ = .05: GOSUB 830: GOTO 110
  2. 30  POKE  -16368,0
  3. 40 G =  PEEK(49152): IF G <128  THEN 40
  4. 50  IF G = 155  THEN 340
  5. 60 G = G -128: POKE  -16368,0: RETURN 
  6. 70 YO =  ABS(YY):YE =  INT(YO):YU = YO -YE: IF YU =  <MQ  OR W -YU =  <MQ  THEN YY = YE +(YU >MQ)
  7. 80  RETURN 
  8. 90  IF T <10  THEN T$ =  STR$(T): RETURN 
  9. 100 T$ =  CHR$(T +55): RETURN 
  10. 110 Q$ = "Print Option": GOSUB 460: PRINT "This program will convert an integer or decimal number in one base into the samenumber represented in another base.": PRINT : ONERR  GOTO 840
  11. 120  PRINT "The limit as to base size will be 36.": PRINT : PRINT "This is because the 26 letters of the alphabet will be used to represent any    integer greater than 9.": PRINT : PRINT "Thus, A=10, B=11, C=12, ..., and Z=35."
  12. 130  PRINT : PRINT "For example, the number 465879 (Base 10) would be expressed as 9ZH3 (Base 36)   because 465879=9x(36x36x36) + 35x(36x36) + 17x(36) + 3, and Z=35 and H=17.": GOSUB 460: PRINT "Decimal results will not be rounded off."
  13. 140  VTAB 18: GOSUB 460: 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."
  14. 150  PRINT "-Delete Key: Pull text to the left and delete at the same time.": GOSUB 460: GOSUB 440
  15. 160  PRINT "In what base B1 do you wish to enter your number?": PRINT :Z = B1:B$ = "B1":B1 = 10: GOSUB 540:B1 = Z: GOSUB 570: IF B1 < >B3  THEN NR$ = ""
  16. 170  GOSUB 500: VTAB 10: PRINT "In what base B2 will you want to express the above number?" SPC( 12): PRINT : PRINT 
  17. 175 TT = B1:B1 = 10:Z = B2:B$ = "B2": GOSUB 540:B1 = TT:B2 = Z:B3 = 0: IF B1 = B2  THEN AN$ = N$: GOTO 310
  18. 180  IF DE$ = ""  THEN 190
  19. 190 L =  LEN(IR$): IF L = 0  THEN 250
  20. 200  FOR I = 1 TO L:G$ =  MID$ (IR$,I,W):G =  VAL(G$):G2 =  ASC(G$): IF G2 >64  THEN G = G2 -55
  21. 210 YY =  INT(B1 ^(L -I) +.5): GOSUB 70:IR = IR +G *YY: NEXT :I = 1
  22. 220 YY =  INT(B2 ^I +.5): GOSUB 70: IF  INT(IR/YY) = 0  THEN 240
  23. 230 I = I +W: GOTO 220
  24. 240 I = I -W:YY =  INT(B2 ^I +.5): GOSUB 70:T =  INT(IR/YY): GOSUB 90:ML$ = ML$ +T$:YY = IR -T *( INT(B2 ^I +.5)): GOSUB 70:IR = YY: IF I >0  THEN 240
  25. 250 L =  LEN(DE$): IF L = 0  THEN AN$ = ML$: GOTO 310
  26. 260  FOR I = 1 TO L:G$ =  MID$ (DE$,I,W):G =  VAL(G$):G2 =  ASC(G$): IF G2 >64  THEN G = G2 -55
  27. 270 YY =  INT(B1 ^I +.5): GOSUB 70:DE = DE +G/YY: NEXT : FOR I = 1 TO 50: IF MR = DE  THEN ID = I -1: GOTO 300
  28. 280  FOR J = 1 TO B2:YY =  INT(B2 ^I +.5): GOSUB 70: IF MR +J/YY >DE  THEN T = J -W: GOSUB 90:MR$ = MR$ +T$:YY =  INT(B2 ^I +.5): GOSUB 70:MR = MR +T/YY:J = 40
  29. 290  NEXT : NEXT 
  30. 300 AN$ = ML$: IF MR$ < >""  THEN AN$ = AN$ +"." +MR$
  31. 310 AN$ = S$ +AN$: IF   NOT B3  THEN B3 = B1:B4 = B2:B1 = B2:B2 = B3:LO = L:RI$ = IR$:IR$ = ML$:OA$ = AN$:NN$ = N$:DI = ID:LM$ = ML$: IF ML$ < >""  THEN ML$ = "":DE$ = "": GOTO 190
  32. 312  GOSUB 470: GOSUB 560:N$ = S$ +N$: VTAB 1: GOSUB 460
  33. 316 B1 = B3:B2 = B4:B3 = (RI$ = ML$):AN$ = OA$:A$ = " ":N$ = NN$:ID = DI:L = LO: IF   NOT B3  THEN A$ = " approximately "
  34. 317  PRINT S$N$" in base "B1: PRINT : PRINT "is"A$"equal to": PRINT : PRINT AN$" in base "B2: GOSUB 460: IF L >0  THEN  PRINT "(The above result is not 'rounded off')"
  35. 320  PRINT : PRINT : IF ID >0  THEN  VTAB 12: POKE 1403,W -1: PRINT "This program would attain no additional accuracy by continuing the calculation": PRINT "beyond the "ID" places shown above."
  36. 330  GOSUB 440
  37. 340  GOSUB 830:M$(1) = "Repeat 'BASES'":M$(2) = "Return to the disk menu*": VTAB 21: POKE 1403,12: PRINT "*You can insert any 'MATH WORKHORSE' disk at this point."
  38. 350 NN = 2:KK = 7:HH = 28:Q$ = "Final Menu": GOSUB 370: IF VV = 8  THEN  PRINT : PRINT "<CTRL-0x04>RUNWORKHORSE"
  39. 360 NR$ = N$:AN$ = "":DE$ = "":DE = 0:IR$ = "":IR = 0:ML$ = "":MR = 0:MR$ = "":N$ = "":S$ = "":T$ = "":B3 = B1: CALL 54915: GOTO 110
  40. 370  VTAB 1: POKE 1403,0: PRINT "BASES";: POKE 1403,65: PRINT "Esc=Final Menu": GOSUB 460: POKE 1403,41 - LEN(Q$)/2 -1: PRINT Q$: GOSUB 460: PRINT "Highlight your option with arrow keys or a number from 1 to "NN"...then hit Return"
  41. 380 VV = KK:FF = KK -W: FOR G = W TO NN: VTAB FF +G: POKE 1403,HH -3: PRINT G"."M$(G): NEXT 
  42. 390  VTAB VV: POKE 1403,HH -1: INVERSE : PRINT M$(VV -FF);: NORMAL : GOSUB 30: IF G >48  AND G <49 +NN  THEN  VTAB VV: POKE 1403,HH -1: PRINT M$(VV -FF);:VV = G +FF -48: GOTO 390
  43. 400  IF G = 13  THEN  HOME : RETURN 
  44. 410  VTAB VV: POKE 1403,HH -1: PRINT M$(VV -FF);: IF G = 21  OR G = 10  THEN VV = VV +W: IF VV = KK +NN  THEN VV = KK
  45. 420  IF G = 8  OR G = 11  THEN VV = VV -W: IF VV = FF  THEN VV = FF +NN
  46. 430  GOTO 390
  47. 440  IF PR = 0  THEN  VTAB 24: POKE 1403,19: INVERSE : PRINT "Hit Return to continue <Esc = final menu>";: NORMAL : GOSUB 30: HOME 
  48. 450  RETURN 
  49. 460  POKE 1403,W -1: FOR I = 1 TO 78: PRINT "=";: NEXT : PRINT "=": RETURN 
  50. 470  TEXT : HOME :M$(1) = "Display on the screen":M$(2) = "Print on the printer":NN = 2:KK = I1:HH = 30: GOSUB 370: IF VV = 7  THEN  RETURN 
  51. 480  VTAB 12: POKE 1403,30: PRINT "Set up the Printer": GOSUB 440:PR = W: PRINT : PRINT "<CTRL-0x04>PR#1": PRINT  CHR$(9)"80N": RETURN 
  52. 490 :
  53. 500  VTAB 5: INVERSE : PRINT "Enter your number in base "B1: VTAB 10: FOR I = 4 TO 35: IF B1 ^I <1E9  THEN  NEXT 
  54. 501 J = I -2:I = 35: NEXT : PRINT "If more than "J" places before the decimal, result may be approximate."
  55. 505  NORMAL : VTAB 7: PRINT "N = "NR$;:W2$ = NR$:Z3 = 4:LL = 35: GOSUB 600:N$ = W1$: IF  MID$ (N$,W,W) = "-"  THEN N$ =  MID$ (N$,2, LEN(N$) -W):S$ = "-"
  56. 510  VTAB 7: POKE 1403,3: CALL  -868: PRINT " "S$;N$:N =  VAL(N$): FOR I = 1 TO  LEN(N$): IF  MID$ (N$,I,W) = "."  THEN IR$ =  MID$ (N$,W,I -W):DE$ =  MID$ (N$,I +W, LEN(N$) -I): GOTO 530
  57. 520  NEXT :IR$ = N$:DE$ = ""
  58. 530  VTAB 5: POKE 1403,W -1: CALL  -868: RETURN 
  59. 540  POKE 1403,13: CALL  -868: PRINT B$" = "Z;:W2$ =  STR$(Z):Z3 = 18:LL = 2: GOSUB 600:Z =  VAL(W1$): CALL  -958: IF Z < > INT(Z)  OR Z <2  OR Z >36  THEN  PRINT "This must be an integer from 2 to 36.<CTRL-0x07><CTRL-0x07>";: CALL  -998:Z = 10: GOTO 540
  60. 550  CALL  -998: POKE 1403,17: CALL  -868: PRINT " "Z: RETURN 
  61. 560  IF B1 >10  OR B2 >10  THEN 580
  62. 570  IF B1 <11  THEN  RETURN 
  63. 580  VTAB 17: POKE 1403,34: INVERSE : PRINT "For reference": NORMAL : GOSUB 460: PRINT " A=10  B=11  C=12  D=13  E=14  F=15  G=16  H=17  I=18  J=19  K=20  L=21  M=22<CTRL-0x0d> N=23  O=24  P=25  Q=26  R=27  S=28  T=29  U=30  V=31  W=32  X=33  Y=34  Z=35": GOSUB 460
  64. 590  POKE 35,17: RETURN 
  65. 600  POKE 1403,Z3:W1$ = "":W2$ = W2$ + MID$ (Z3$,1,LL - LEN(W2$)):Z3 = 0: POKE  -16368,0: REM  W1$=STRICTLY.L.OF.CURSOR/W2$=UNDER+R.OF.CURSOR
  66. 610  GET Z1$:Z3 =  LEN(W1$):Z1 =  ASC(Z1$): IF Z1 = 13  THEN W1$ = W1$ +W2$: GOSUB 790: PRINT : RETURN 
  67. 620  IF Z1 = 27  THEN 340
  68. 630  IF Z1 = 16  OR Z1 = 127  THEN 730
  69. 640 Z1 = (Z1 -32) *(96 <Z1  AND Z1 <123) +Z1 *(Z1 <97  OR 122 <Z1):Z1$ =  CHR$(Z1): IF (Z1 <65  AND Z1 -48 > = B1)  OR (Z1 >64  AND Z1 -55 > = B1)  THEN 610
  70. 650  IF Z1 <32  AND Z1 < >8  AND Z1 < >16  AND Z1 < >21  AND Z1 < >25  THEN 610
  71. 660  IF Z1 < >8  THEN 690
  72. 670  IF Z3 = 0  THEN 610
  73. 680  PRINT Z1$;:W2$ =  RIGHT$(W1$,1) +W2$:W1$ =  MID$ (W1$,1,Z3 -1): GOTO 610
  74. 690  IF Z3 = LL  THEN 610
  75. 700  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 610
  76. 710  IF Z1 = 21  THEN Z1$ =  LEFT$(W2$,1)
  77. 720 W2$ =  MID$ (W2$,2,LL -Z3 -1): PRINT Z1$;:W1$ = W1$ +Z1$: GOTO 610
  78. 730  IF Z1 < >16  THEN 760
  79. 740  IF Z3 = LL  OR W2$ =  MID$ (Z3$,1,LL -Z3)  THEN 610
  80. 750 W2$ = " " + MID$ (W2$,1,LL -Z3 -1): PRINT W2$;: FOR Z2 = 1 TO LL -Z3: PRINT Z2$;: NEXT : GOTO 610
  81. 760  IF Z3 = 0  THEN 610
  82. 770 W1$ =  MID$ (W1$,1,Z3 -1):W2$ = W2$ +" ": PRINT Z2$;W2$;: FOR Z2 = 1 TO LL -Z3 +1: PRINT Z2$;: NEXT : GOTO 610
  83. 780 :
  84. 790 Z2 =  LEN(W1$): IF W1$ =  MID$ (Z3$,1,Z2)  THEN W1$ = "0": RETURN 
  85. 800  IF  MID$ (W1$,1,1) = " "  THEN W1$ =  MID$ (W1$,2): GOTO 800
  86. 810 Z2 =  LEN(W1$): IF  MID$ (W1$,Z2) = " "  OR  MID$ (W1$,Z2) = "."  THEN W1$ =  MID$ (W1$,1,Z2 -1): GOTO 810
  87. 811 Z2 =  LEN(W1$): FOR QX = 1 TO Z2: IF  MID$ (W1$,QX,1) < >"."  THEN  NEXT : RETURN 
  88. 812 QQ = QX:QX = Z2: NEXT : FOR QX = QQ +1 TO Z2: IF  MID$ (W1$,QX,1) < >"."  THEN  NEXT : RETURN 
  89. 813 W1$ =  LEFT$(W1$,QX -1) +"0" + RIGHT$(W1$,Z2 -QX): NEXT 
  90. 820  RETURN 
  91. 830  PRINT "<CTRL-0x04>PR#0":PR = 0: PRINT "<CTRL-0x04>PR#3": TEXT : HOME : PRINT : VTAB 1: RETURN 
  92. 840  GOSUB 830: VTAB 7: POKE 1403,33: PRINT "Error Code " PEEK(222): PRINT : PRINT "The size of some number may be beyond the range of the computer. The calculationcould not be continued.<CTRL-0x07><CTRL-0x07>": GOTO 330