! 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