! CONVER.BAS does conversions of one number base to another.
! Written by
MAP1 NUMBER,S,16
MAP1 X,S,16
MAP1 VL(36),S,1
FOR I = 1 TO 36
READ VL(I)
NEXT I
NEW'BASE:
?TAB(-1,0)
CALL HEADER
INPUT "SELECT INPUT BASE (UP TO 36)? ",BASE
INPUT "VALUE FOR CONVERTION (- FOR NEW BASE)? ",X
FLAG = 0
?TAB(-1,0)
CALL HEADER
DECIMAL'VALUE:
IF X < 0 GOTO NEW'BASE
X = UCS(X)
Y = LEN(X)
DEC = 0
IF BASE = 10 DEC = X : GOTO NEXT'SECTION
FOR I = 1 TO Y
IF ASC(X[I;1]) > 57 NUM = ASC(X[I;1]) - 55 ELSE NUM = X[I;1]
IF NUM > BASE - 1 ? "ERROR IN INPUT DIGIT(S)." : GOTO NEW'NO
DEC = DEC + NUM * BASE^(Y - I)
NEXT
NEXT'SECTION:
IF FLAG = 0 ? "VALUE(";BASE;")","DECIMAL","HEX","OCTAL","BINARY"
FLAG = 1
? X,DEC,
HOLD = DEC
IF DEC >= 16^9 ? "HEX OVERFLOW" : GOTO NEW'NO
NEWBASE = 16 : BV = 8 : CALL COMPUTE'VALUE
DEC = HOLD
IF DEC >= 8^12 ? "OCTAL OVERFLOW" : GOTO NEW'NO
NEWBASE = 8 : BV = 11 : CALL COMPUTE'VALUE
DEC = HOLD
IF DEC >= 2^16 ? "BINARY OVERFLOW" : GOTO NEW'NO
NEWBASE = 2 : BV = 15 : CALL COMPUTE'VALUE
DEC = HOLD
NEW'NO:
X = SPACE(16)
INPUT "VALUE FOR CONVERTION (- FOR NEW BASE)? ",X
? TAB (-1,3);
GOTO DECIMAL'VALUE
COMPUTE'VALUE:
FOR I = BV TO 0 STEP -1
FOR J = NEWBASE - 1 TO 0 STEP -1
IF J * NEWBASE^I <= DEC DEC = DEC - J * NEWBASE^I : &
NUMBER[BV + 1 - I;1] = VL(J + 1) : J = 0
NEXT J
NEXT I
FOR I = 1 TO BV
IF NUMBER[I;1] = 0 NEXT I
? NUMBER[I;16],
NUMBER = SPACE(16)
RETURN
HEADER:
? "C O A X I A L A N A L Y S T S I N C ~ PROGRAMMER'S CALCULATER";
? " ~ 1/24/80" : ?
RETURN
DATA 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z