100 DIG$ = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ":MB% = LEN(DIG$): REM INIT POSSIBLE DIGITS & MAX BASE
110 GOSUB 360: REM DIPLAY LOGO
120 PRINT "Do you want instructions?N"; CHR$(8);: GET C$: PRINT C$: IF C$ = CHR$(13) THEN C$ = "N"
130 IF C$ < >"Y" AND C$ < >"N" THEN CALL -1059: GOTO 120
140 IF C$ = "Y" THEN HOME : GOSUB 360: GOSUB 390
150 HOME
160 INPUT "Number To Be Changed?";NB$:F$ = LEFT$(NB$,1): ON F$ = "" GOTO 220: ON NB$ = "#" GOTO 150: ON NB$ = "$" GOTO 150: ON (F$ = "$" OR F$ = "#") GOTO 170: ON F$ >"Z" GOTO 150: ON F$ <"0" GOTO 150: ON (F$ >"9" AND F$ <"A") GOTO 150
170 IF LEFT$(NB$,1) = "#" THEN NB$ = RIGHT$(NB$, LEN(NB$) -1):OB% = 10:NB% = 16: GOTO 210
180 IF LEFT$(NB$,1) = "$" THEN NB$ = RIGHT$(NB$, LEN(NB$) -1):OB% = 16:NB% = 10: GOTO 210: REM BASE 16 TO BASE 10 ASSUMED
190 INPUT "ORIG BASE ?";OB%: IF OB% <2 OR OB% >MB% THEN : CALL -1059: PRINT "BASE INVALID": NORMAL : GOTO 190
200 INPUT "NEW BASE ?";NB%: IF NB% <2 OR NB% >MB% THEN : CALL -1059: PRINT "BASE INVALID": NORMAL : GOTO 200
210 GOSUB 250: GOTO 160: REM CONVERT NUMBER
220 TEXT : HOME : GOSUB 360: VTAB 10: PRINT "DO YOU WANT TO QUIT?";: GET ZZ$: IF ZZ$ = "Y" OR ZZ$ = "y" THEN TEXT : HOME : END
230 IF ZZ$ = "N" OR ZZ$ = "n" THEN HOME : GOSUB 370: GOTO 160
240 GOTO 220
250 REM *****CONVERT NUMBER*****
260 DEC = 0:B = 1:LN% = LEN(NB$): FOR I = LN% TO 1 STEP -1: FOR J = 1 TO OB%: REM LOCATE ORDINAL VALUE OF ORIG NMBR
270 IF MID$ (NB$,I,1) < > MID$ (DIG$,J,1) THEN 290
280 D% = J:J = 99
290 NEXT : IF J <90 THEN I = -1: GOTO 310: REM INVALID CHARACTER
300 DEC = DEC +(D% -1) *B:B = B *OB%: REM ACCUMULATE BASE TEN NMBR
310 NEXT : IF I <0 THEN 350: REM ERROR
320 NN$ = "": REM CONVERTED NUMBER
330 Q = INT(DEC/NB%):NN$ = MID$ (DIG$,DEC -Q *NB% +1,1) +NN$:DEC = Q: IF Q >0 THEN 330
340 PRINT NB$;" ";: INVERSE : PRINT "BASE ";OB%;: NORMAL : PRINT " IS ";NN$;" ";: INVERSE : PRINT "BASE ";NB%: NORMAL : PRINT : RETURN
350 CALL -1059: PRINT ">>INVALID DIGIT(S), MUST BE FOLLOWING<< ";: INVERSE : FOR I = 1 TO OB%: PRINT MID$ (DIG$,I,1);: NEXT : NORMAL : PRINT : RETURN
360 REM *****DISPLAY LOGO*****
370 TEXT : HOME : HTAB 9: PRINT "UNIVERSAL NUMBER CONVERTER": HTAB 14: PRINT "BY GARTH A. PERRY": HTAB 14: PRINT "COPYRIGHT(C) 1989": HTAB 12: PRINT "MINDCRAFT PUBL. CORP."
380 NORMAL : POKE 34,5: PRINT : RETURN
390 REM *****DISPLAY INSTRUCTIONS*****
400 HOME : PRINT "This program can be used to convert a": PRINT : PRINT "number from any base in the range of two": PRINT "through 36 to its equivalent value in a": PRINT : PRINT "new base of the same range. Enter the": PRINT
410 PRINT "number and its base then the new base.": PRINT : PRINT "Any blank number will stop the program."
420 PRINT : INVERSE : HTAB (6): PRINT "PRESS RETURN TO CONTINUE";: NORMAL : GET C$: HOME
430 PRINT "If the 1st chacacter is '#', decimal to": PRINT : PRINT "hexadecimal is assumed; if it is a '$'": PRINT : PRINT "hex to decimal is assumed.": PRINT : INVERSE : HTAB (6): PRINT "PRESS RETURN TO CONTINUE";: NORMAL : GET C$: HOME