10 REM *** UNIVERSAL BASE CONVERTER *** 20 REM *** VERSION 2.0 090194 *** 30 REM *** BY MICHAEL J. GULYAS *** 40 : 50 CLR:DV=PEEK(186):IF DV<8 THEN DV=8 60 POKE788,52:GOSUB 270:GOSUB 870 70 POKE214,16:POKE211,2:SYS58732:PRINTC0$S0$(0) 80 POKE214,16:POKE211,21:SYS58732:PRINTC0$S0$(0) 90 POKE214,19:POKE211,2:SYS58732:PRINTC0$S0$(1) 100 POKE214,22:POKE211,2:SYS58732:PRINTC0$S0$(1):X=0:Y=0 110 POKE214,16+Y0*3:POKE211,2-19*X0*(Y0=0):SYS58732 120 PRINTC0$S0$(Y0)NV$(3*Y0-(Y0=0)*(1+X0)); 130 POKE214,16+Y*3:POKE211,2-19*X*(Y=0):SYS58732 140 PRINTC0$S0$(Y)NV$(3*Y-(Y=0)*(1+X)); 150 POKE214,16+Y*3:POKE211,2-19*X*(Y=0):SYS58732:CT=0:Y0=Y:X0=X 160 GOSUB 460:FOR N=1 TO 50 170 GET A$:IF A$="" THEN NEXT:GOTO 160 180 N=50:NEXT:GOSUB 490:IF MO THEN MO=0:MG=0:GOSUB 2140 190 FOR N=1TOLEN(PC$):IF A$=MID$(PC$,N,1) THEN CO=N:N=LEN(PC$):NEXT:GOTO 210 200 NEXT:GOSUB 1180:GOTO 160 210 ON CO GOSUB 1140,1150,1140,1150,2330,1890 220 ON CO GOTO 110,110,110,110,160,160 230 GOTO 160 240 PRINT" 250 [161] A$:[139] A$[178]"" [167] 250 260 [128]:[138] 270 [143] *** LOAD FILES *** 280 [141] 500 290 [158]57812"NUMCON.FONT",DV,0:[151]780,0:[151]781,0:[151]782,224:[158]65493 300 [158]57812"NUMCON.OBJ",DV,0:[151]780,0:[151]781,0:[151]782,192:[158]65493 310 [158] AD[170]21,1 320 [153]"LOAD":[151] 53280,11:[151] 53281,0:[151] 53265,([194](53265)[175]191) 330 [151] 56578,[194](56578)[176]3 340 [151] 56576,([194](56576)[175]252)[176]0 350 [151] 53272,([194](53272)[175]15)[176]32 360 [151] 648,200 370 [151] 53272,([194](53272)[175]240)[176]8 380 [142] 390 [143] 400 [129] I[178]0 [164] 15 410 [158]AD[170]30,8,32,22,24,32,I[170]8,1 420 [158]AD[170]30,9,31,23,23,32,I,1 430 [129] J[178]1 [164] 10:[161] A$:[139] A$[178]"" [167] [130]:[130]:[137] 400 440 J[178]10:I[178]15:[130]:[130]:[142] 450 WD$[178]"":DP[178]0:[142] 460 Z[178]51200[170]40[172][194](214)[170][194](211) 470 CT[178]1[171]CT:[145] CT[170]1 [137] 490,480 480 [151] Z,[194](Z)[176]128:[142] 490 [151] Z,[194](Z)[175] 127:[142] 500 [143] *** LOADING SCREEN *** 510 [141] 730 520 [151]53265,[194](53265)[176]64 530 [151] 53280,6:[151] 53281,14:[151] 53282,0:[151]53283,1:[151]53284,6 540 TB[178]7 550 [153]"LOADRETURN"[163]TB[170]1)"SYS+++++++++++++++++++++++++ 560 PRINTTAB(TB)"[158][160][146][170] [146][170] 570 [153][163]TB)"SYSCLOSEWAIT+ STOPUNIVERSAL BASE SYSWAIT+ 580 PRINTTAB(TB)"[158][160][146][170] [144]CONVERTER [158][146][170] 590 [153][163]TB)"SYSCLOSEWAIT+ SYSWAIT+ 600 PRINTTAB(TB)"[158][160][146][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170] 610 [153][163]TB)"SYSCLOSEWAIT+ SYSWAIT+ 620 PRINTTAB(TB)"[158][160][146][170] [144]VERSION 2.0 090194 [158][146][170] 630 [153][163]TB)"SYSCLOSEWAIT+ WAIT+ 640 PRINTTAB(TB)"[158][160][146][170] [144]BY MICHAEL J. GULYAS [146][158][170] 650 [153][163]TB)"SYSCLOSEWAIT+ WAIT+ 660 PRINTTAB(TB)"[158][160][146][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170] 670 [153][163]TB)"SYSCLOSEWAIT+ WAIT+ 680 PRINTTAB(TB)"[158][160][146][170] [144]LOADING... [146][158][170] 690 [153][163]TB)"SYSCLOSEWAIT+ WAIT+ 700 PRINTTAB(TB)"[158][160][146][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170][170] 710 [153][163]TB)"SYSCLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSE 720 RETURN 730 REM *** VARIABLES *** 740 DIM A,AD,A$,B,B0,B1,B%,B$,C,CO,CP,CT,C0$,C1$,DP,FR,I,IN 750 DIM J,LN,LO,MG,MO,N,NU$,PC$,S,TB,TM,WD$,X,X0,XP,Y,Y0,YP,Z 760 DIM NV$(3),S0$(1),MG$(10) 770 REM RESERVED FOR DIMMING 780 S0$(0)=" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]" 790 S0$(1)=" " 800 S0$(1)=S0$(1)+"[157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]" 810 C0$="[158]":C1$="[129]" 820 NU$="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" 830 PC$="[145][157][133][136]" 840 FOR N=0 TO 10:READ MG$(N):NEXT 850 AD=49152:S=54272 860 RETURN 870 REM *** PRINT SCREEN *** 880 PRINT"[147][151] [184][188][188][188][188][188][188][188]"; 890 PRINT"[188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][185][190][146] [153]*** [213][206][201][214][197][210][211][193][204]"; 900 PRINT" [194][193][211][197] [195][207][206][214][197][210][212][197][210] [153]***[151] [191][181][182][182][182][182][182][182][182][182][182][182][182][182][182][182][182][182][182][182][182][182][182]"; 910 PRINT"[182][182][182][182][182][182][182][182][182][182][182][182][182][182][182][182][182][183][190][146] [201]NSTRUCTIONS [152]"; 920 PRINT" [151][191][190][152][146]  [152] "; 930 PRINT" [151][191][190][152][146] [154]1. [197]NTER [154][198][210][207][205] BASE IN DECIMAL. [152]"; 940 PRINT" [151][191][190][152][146] [154]2. [197]NTER [154][212][207] BASE IN DECIMAL. [152] "; 950 PRINT" [151][191][190][152][146] [154]3. [197]NTER NUMERAL TO BE CONVERTED. [152] "; 960 PRINT"[151][191][190][146] [154]4.[152] [154][210]EAD CONVERTED NUMERAL AT BOTTOM[152] [151]"; 970 PRINT"[191][190][152][146] WINDOW.[152] [151][191][190][152][146]"; 980 PRINT" [151][191][186][189][189][189][189][189][189][189][189]"; 990 PRINT"[189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][187] "; 1000 PRINT" [198][210][207][205]: [212][207]: "; 1010 PRINT" [184][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][185][184][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][185]"; 1020 PRINT" [190][152][146] [151][191][190][152][146] [151]"; 1030 PRINT"[191] [186][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][187][186][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][187] [184][188][188][188][188][188]"; 1040 PRINT"[188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][185] [190][152][146] "; 1050 PRINT" [151][191] [186][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189]"; 1060 PRINT"[189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][187] [184][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188][188]"; 1070 PRINT"[188][188][188][188][188][188][188][188][188][185] [190][152][146] "; 1080 PRINT" [151][191] [186][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][189][187] "; 1090 PRINT" [146]"; 1100 POKE53280,11:POKE53281,00:POKE52199,160:POKE56295,11 1110 POKE53282,02:POKE53283,03:POKE53284,04 1120 SYS AD+6:RETURN 1130 REM *** CURSORS *** 1140 Y=1-Y:GOSUB 450:RETURN 1150 IFY=0THENX=1-X:GOSUB 450:RETURN 1160 CO=5:RETURN 1170 REM 1180 REM *** HANDLE DIGITS *** 1190 ON -1*(A$=CHR$(13))-2*(A$=".")-3*(A$=CHR$(20))GOTO 1330,1830,2010 1200 IF LEN(WD$)=0 AND A$="0" THEN RETURN:REM NO LEADING ZEROS 1210 IF Y=1 THEN 1260 1220 IF A$<"0" OR A$>"9" THEN 1320 1230 IF LEN(WD$)=2 THEN RETURN 1240 IF WD$="" THEN PRINTC0$S0$(Y); 1250 WD$=WD$+A$:PRINTA$;:RETURN 1260 A=ASC(A$)-48:IF A>9 THEN A=A-7:IF A=<9 THEN 1320 1270 IF (A+1)>VAL(NV$(1)) OR A<0 THEN 1320 1280 IF LEN(WD$)>34 THEN RETURN 1290 IF VAL(NV$(1))=0 OR VAL(NV$(2))=0 THEN 1320 1300 IFWD$=""THEN POKE214,19:POKE211,2:SYS58732:PRINTC0$S0$(1); 1310 GOTO 1250 1320 MG=4:GOSUB 2140:MO=1:RETURN 1330 REM *** RETURN *** 1340 IF Y=1 THEN 1430 1350 IF WD$="" THEN RETURN 1360 IF VAL(WD$)>36 THEN 1480 1370 IFVAL(WD$)=0ORVAL(WD$)=1THEN NV$(1+X)="":GOTO 1480 1380 REM IFVAL(WD$)=VAL(NV$(2-X))THEN 1480 1390 IF WD$="" THEN RETURN 1400 NV$(3*Y-(Y=0)*(1+X))=WD$:POKE214,16:POKE211,2+19*X:SYS58732 1410 IF X=0 THEN NV$(3)="" 1420 GOTO 450 1430 REMIFNV$(3)=""THEN POKE214,19:POKE211,2:SYS58732:PRINTC0$S0$(1); 1440 IF WD$="0" THEN NV$(3)="" 1450 IF NV$(3)<>"" AND WD$="" THEN 1510 1460 IF WD$="" THEN RETURN 1470 NV$(3)=WD$:POKE 214,19:POKE211,2:SYS58732:GOSUB 450:GOTO 1510 1480 POKE 214,16+Y*3:POKE 211,2-19*X*(Y=0):SYS58732:PRINTC0$S0$(Y); 1490 PRINTNV$(3*Y-(Y=0)*(1+X));:POKE214,16+Y*3:POKE211,2-19*X*(Y=0):SYS 58732 1500 GOTO 450 1510 REM *** CONVERT *** 1520 MG=1:GOSUB 2140:YP=PEEK(214):XP=PEEK(211):CP=PEEK(646) 1530 B0=VAL(NV$(1)):B1=VAL(NV$(2)):IN=0:FR=0:LN=LEN(NV$(3)) 1540 FOR N=1 TO LN 1550 IF MID$(NV$(3),N,1)="." THEN N=LN:NEXT:GOTO 1590 1560 A=ASC(MID$(NV$(3),N,1))-48:IF A>9 THEN A=A-7 1570 IF IN>10000000 THEN 1820 1580 IN=B0*IN+A:NEXT:GOTO 1630 1590 FOR N=LN TO 1 STEP -1 1600 IF MID$(NV$(3),N,1)="." THEN N=1:NEXT:GOTO 1630 1610 A=ASC(MID$(NV$(3),N,1))-48:IF A>9 THEN A=A-7 1620 FR=(FR+A)/B0:NEXT 1630 A$="":B$=".":N=0 1640 IF FR>=1 THEN FR=FR-1:IN=IN+1:GOTO 1640 1650 IF IN=0 THEN A$="0":GOTO 1700 1660 IF IN=0 THEN 1700 1670 A=IN/B1:B=INT(A):A=IN-B*B1:IN=B 1680 A$=MID$(NU$,A+1,1)+A$ 1690 GOTO 1660 1700 IF FR=0 THEN 1760 1710 IF FR=0 OR N=9 THEN 1750 1720 A=FR*B1:B=INT(A):FR=A-B 1730 B$=B$+MID$(NU$,B+1,1):N=N+1 1740 GOTO 1710 1750 A$=A$+B$ 1760 POKE 214,22:POKE 211,2:SYS58732:PRINTC0$S0$(1)LEFT$(A$,36):GOSUB 2240 1770 POKE 214,YP:POKE 211,XP:SYS 58732 1780 MG=0:GOSUB 2140:RETURN 1790 POKE 214,22:POKE 211,2:SYS58732:PRINTC0$S0$(1)IN+FR 1800 POKE 214,YP:POKE 211,XP:SYS 58732 1810 MG=0:GOTO 2140 1820 MG=2:GOSUB 2140:GOSUB 2260:MO=1:POKE 214,YP:POKE 211,XP:SYS58732:RETURN 1830 REM *** DECIMAL POINT *** 1840 IF Y=0 THEN RETURN 1850 IF DP THEN RETURN 1860 IF LEN(WD$)>34 THEN RETURN 1870 IF LEN(WD$)=0 THEN POKE214,19:POKE211,2:SYS58732:PRINTC0$S0$(1); 1880 DP=1:WD$=WD$+A$:PRINTA$;:RETURN 1890 REM *** QUIT PROGRAM *** 1900 MG=3:GOSUB 2140:POKE 198,0:WAIT197,64,64:GET A$ 1910 IF A$="Y" OR A$="[217]" THEN 1930 1920 MG=0:GOTO 2140 1930 MG=5:GOSUB 2140:POKE198,0:WAIT197,64,64:GET A$ 1940 IF A$="[204]" OR A$="L" THEN GOSUB2810:GOTO 40000 1950 IF A$="B" OR A$="[194]" THEN PRINT"[147]":GOSUB 2810:END:RUN 2010 REM *** DELETE *** 2020 IF LEN(WD$)=0 THEN RETURN 2030 IF RIGHT$(WD$,1)="." THEN DP=0 2040 WD$=LEFT$(WD$,LEN(WD$)-1) 2050 PRINT"[157] [157]";:RETURN 2060 REM *** STRING DATA *** 2070 DATA "[155]*** [213][206][201][214][197][210][211][193][204] [194][193][211][197] [195][207][206][214][197][210][212][197][210] [155]***32 2080 [131] "FOR(null)ORKING...10 2090 DATA "[129][207]VERFLOW ERROR.15 2100 [131] "FOR(null)UIT!? ATNRE YOU SURE? ((null)/(null))27 2110 DATA "[129] [198]1 [146]-[200]ELP [129] [198]7 [146]-[209]UIT20 2120 [131] "DEF(null)WAITFOR(null)ATNSTR$(null)(null)ATN(null) OR DEFPEEKWAITFORATN(null)RIGHT$LEN17 2130 DATA END,END,END,END,END,END,END,END 2140 REM *** DISPLAY MESSAGE *** 2150 XP=PEEK(211):YP=PEEK(214):CP=PEEK(646) 2160 TB=20-VAL(RIGHT$(MG$(MG),2))/2 2170 POKE214,2:POKE 211,2:SYS58732:PRINTS0$(1); 2180 POKE214,2:POKE211,TB:SYS58732:PRINTLEFT$(MG$(MG),LEN(MG$(MG))-2); 2190 POKE 214,YP:POKE211,XP:SYS58732:POKE646,CP:RETURN 2200 REM *** PRESS DELAY *** 2210 REM *** SOUND F/X *** 2220 REM *** CLEAR CHIP *** 2230 FOR N=0 TO 24:POKE S+N,0:NEXT:RETURN 2240 REM *** BELL TONE *** 2250 SYSAD+24:POKES+1,090:POKES+4,16:POKES+5,11:POKES+24,15:POKES+4,17:RETURN 2260 REM *** BUZZER *** 2270 SYSAD+24:POKES+1,19:POKES,200:POKES+4,32:POKES+6,240:POKES+24,15 2280 :POKES+4,33:TM=100:GOSUB 2290:POKES+4,32:RETURN 2290 REM *** USER-CANCELED DELAY *** 2300 POKE 198,0:FOR I=1 TO TM 2310 GET A$:IF A$="" THEN NEXT:RETURN 2320 I=TM:NEXT:RETURN 2330 REM *** HELP SCREENS *** 2340 SYS AD+9,0:SYS AD+15,0:A=PEEK(53280):B=PEEK(53281) 2350 C=PEEK(646):SYSAD+18,1,1,0:YP=PEEK(214):XP=PEEK(211) 2360 PRINT"[147][155]*** [213][206][201][214][197][210][211][193][204][160][194][193][211][197][160][195][207][206][214][197][210][212][197][210] [155]***" 2370 PRINT" [154][213][194][195] WILL CONVERT ANY POSITIVE 2380 [153]"NUMERICAL BASE IN THE RANGE CONT2-36 TO 2390 PRINT"ANY OTHER BASE IN THAT RANGE. [213]NLIKE 2400 [153]"OTHER CONVERTERS YOU MIGHT HAVE USED, 2410 PRINT"[154][213][194][195] WILL ALSO CONVERT THE FRACTIONAL 2420 [153]"PART OF THE NUMERAL! 2430 PRINT" [198]OR EXAMPLE, WHAT WOULD PI: 2440 [153]" CONT3.14159265 (BASE TEN) 2450 PRINT"LOOK LIKE IN HEXIDECIMAL? [213]SE THE 2460 [153]"CONTLEN(null)(null)(null)(null)(null)(null) TO MOVE TO THE WINDOW UNDER 2470 PRINT"THE LABEL [154][198][210][207][205]:. [197]NTER [154]'10' AND PRESS 2480 [153]"CONT(null)VAL(null)(null)(null)(null). (null)OVE TO THE CONT(null)(null): WINDOW AND 2490 PRINT"ENTER [154]'16'. [206]OW MOVE DOWN TO THE LONG 2500 [153]"WINDOW AND ENTER CONT3.14159265. ATNS SOON 2510 PRINT"AS YOU PRESS [154][210][197][212][213][210][206], THE 64 CONVERTS 2520 [153]"AND ANSWERS IN THE BOTTOM WINDOW: 2530 PRINT" [154]3.243F6A794 (BASE SIXTEEN) 2540 [141] 2760 2550 [158]AD[170]15,0 2560 [153]"LOADLIST*** (null)(null)RIGHT$(null)VAL(null)(null)ATN(null)CLOSEPEEKATN(null)VALCLOSELEN(null)(null)(null)VAL(null)(null)VAL(null) LIST***" 2570 [153]"CONT(null)PEEKLEN WILL CONVERT ANY NUMERAL LESS 2580 PRINT"THAN [154]100000000 (DECIMAL), AND CONVERT 2590 [153]"UP TO CONT9 FRACTIONAL PLACES. (null)ALID KEY 2600 PRINT"ENTRIES ARE THE NUMBERS [154]0-9 AND ALSO 2610 [153]"THE LETTERS CONTA-Z FOR BASES HIGHER THAN 2620 PRINT"BASE 10. [211]INCE A CONVERSION FROM A 2630 [153]"BASE TO THE SAME BASE IS TRIVIAL, CONT(null)PEEKLEN 2640 PRINT"WILL NOT ALLOW THE [154][198][210][207][205] BASE TO EQUAL 2650 [153]"THE CONT(null)(null) BASE. 2660 PRINT" [211]EE THE DOCS FOR MORE DETAILED 2670 [153]"INSTRUCTIONS AND AN EXPLANATION OF 2680 PRINT"HOW TO CONVERT DECIMAL BASES. 2690 [153]" CONT(null)(null)(null)VAL: STR$O NOT CONFUSE THE NUMBER 2700 PRINT"ONE [154](1) WITH THE 12TH LETTER [154](L)." 2710 PRINT"WHEN CONVERTING BASES HIGHER THAN " 2720 PRINT"[154]21. 2730 [153]"FOR ASC1 WAIT-(null)HESE SCREENS FOR ASC7 WAIT-(null)UIT":[141] 2760 2740 [158]AD[170]15,0:[151]53280,A:[151]53281,B:[151] 646,C:[158]AD[170]12,0 2750 [151]214,YP:[151]211,XP:[158] 58732:[158] AD[170]15,1:[142] 2760 [143] *** KEY PRESS *** 2770 [153]" *NEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWRND" 2780 [153]" SGNSYS >>> (null)(null)VAL(null)(null)CLOSEATN(null)(null)CLOSE(null)VAL(null) <<< WAITGET" 2790 [153]" LOGNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWNEWWAITCOS"; 2800 [158]AD[170]15,1:[151] 198,0:[146]197,64,64:[161] A$:[142] 2810 [143] *** RESET COMPUTER *** 2820 [151] 56578,[194](56578)[176]3 2830 [151] 56576,([194](56576)[175]252)[176]3 2840 [151] 53272,([194](53272)[175]15)[176]16 2850 [151] 648,4 2860 [151] 53272,([194](53272)[175]240)[176]4 2870 [158]AD[170]21,0:[151] 788,49 2880 [142] 10000 DV[178][194](186):[159]15,DV,15,"S0:NUMCON":[160]15:[148]"NUMCON",DV:[128] 40000 [129]I[178]0[164]21:[151]828[170]I,8[170]I:[130] 40010 [139]DV[179]8[176]DV[177]29[176]DV[178]8[167]40030 40020 A[178][194](828):B[178][194](828[170]DV[171]8):[151]828,B:[151]828[170]DV[171]8,A 40030 A$[178]"HELLO CONNECT":[129]J[178]8[164]29:I[178][194](828[170]J[171]8):[139]I[178]14[167][130] 40040 [160]2:[159]2,I,2:[160]2:[139]ST[167]40060 40050 [160]15:[159]15,I,15,"R0:"[170]A$[170]"="[170]A$:[132]15,ER:[160]15:[139]ER[178]63[167]40070 40060 [130]:[153]"LOAD":[151]53272,23:[151]186,8:[128] 40070 Q$[178][199](34):[151]646,[194](53281):[153]"LOAD":[151]53272,23 40080 [153]"LOADP(null)2048,0:P(null)44,8:P(null)43,1:P(null)56,160:P(null)55,0:CLR:L(null)"Q$A$Q$","I 40090 [153]"RUN:":[151]631,13:[151]632,13:[151]198,2:[128]