'===========================================================================
' Subject: CONVERT NUMBER FROM ANY BASE       Date: 05-11-00 (00:37)       
'  Author: Dieter Folger                      Code: QB, QBasic, PDS, PB    
'  Origin: folger@bnv-bamberg.de            Packet: BINARY.ABC
'===========================================================================
'-------------------------------------
'NSYS.BAS for QBasic or Powerbasic
'Convert number from any base (2..16)
'to all other bases (2..16)
'-------------------------------------
CLS
Again:
INPUT "Number to convert: ", Num$
120:
INPUT "Base of number (2..16): ", Basis
IF Basis < 2 OR Basis > 16 THEN
   PRINT "Illegal base";Basis
   GOTO Again
END IF
'Convert any input number to decimal
Factor = 1
FOR I = LEN(Num$) TO 1 STEP -1
    n = ASC(UCASE$(MID$(Num$, I, 1)))
    IF n > 64 THEN n = n - 55  'A..F
    IF n > 47 THEN n = n - 48  '0..9
    IF n > 15 THEN
       Print "Illegal number:";Num$
       GOTO Again
    END IF
    IF n >= Basis THEN
       PRINT "Base";Basis;"doesn't match ";Num$
       GOTO Again
    END IF
    nn = nn + (n * Factor)
    Factor = Factor * Basis
NEXT I
' **** Convert to all bases
n = nn: ' Save decimal
FOR I = 2 TO 16
    nn = n: Nstr$ = ""
Convert:
    IF nn MOD i < 10 THEN ADD = 48 ELSE ADD = 55
    'Convert to string 0 - F
    Nstr$ = CHR$(nn MOD i + ADD) + Nstr$
    nn = nn \ i
    IF nn > 0 THEN GOTO Convert
    'Format output
    IF i = 2 THEN L = LEN(Nstr$): 'Maximum string length
    Nstr$ = STRING$(L - LEN(Nstr$), ".") + Nstr$
    PRINT "Base "; : PRINT USING "##"; i; : PRINT ": "; Nstr$
NEXT I
END
