! 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