'===========================================================================
' Subject: HEX TO DECIMAL CONVERSION          Date: 03-19-00 (10:56)       
'  Author: Wayne Henderson                    Code: QB, QBasic, PDS        
'  Origin: whenders@becon.org               Packet: BINARY.ABC
'===========================================================================
'Hex to Decimal conversion. By Wayne Henderson March 18, 2000 2:00pm EST
DEFINT A-Z: DIM Bin$(15)
cL$ = LTRIM$(RTRIM$(COMMAND$)): PRINT
IF cL$ = "" THEN PRINT "Enter a HEX number > 0 and <= $7FFFFFFF": SYSTEM
FOR c = 0 TO 15: READ Bin$(c): NEXT
L = LEN(cL$): test$ = SPACE$(8): e = 0
IF L > 8 THEN e$ = "Overflow": GOTO errer
FOR c = 1 TO L
   a = ASC(MID$(cL$, c, 1))
   IF a < 48 OR a > 70 OR (a > 57 AND a < 65) THEN
      e = e + 1: e$ = "Invalid hex digit"
      IF e > 1 THEN e$ = e$ + "s"
   END IF
NEXT
IF e THEN GOTO errer
RSET test$ = cL$
IF test$ > "7FFFFFFF" THEN e$ = "Overflow": GOTO errer
cL$ = LTRIM$(cL$)
s& = 0: k& = 1
FOR c = L TO 2 STEP -1
   a = ASC(MID$(cL$, c, 1))
   a = a - 48 + 7 * (a > 57)
   s& = s& + a * k&
   k& = k& * 16
NEXT
a = ASC(cL$): a = a - 48 + 7 * (a > 57): s& = s& + k& * a
IF s& < 1 THEN e$ = "Underflow": GOTO errer
comma = 1: IF s& >= 999 THEN comma = comma + 1
IF s& >= 999999 THEN comma = comma + 1
IF s& >= 999999999 THEN comma = comma + 1
u$ = STRING$(comma + INT(LOG(s&) / LOG(10)), "#") + ","
PRINT "$"; cL$; " ="; USING u$; s&; : PRINT " = %";
IF LEN(cL$) MOD 2 = 1 THEN PRINT "0000";
FOR c = 1 TO LEN(cL$)
   a = ASC(MID$(cL$, c, 1))
   a = a - 48 + 7 * (a > 57): PRINT Bin$(a);
   IF (LEN(cL$) - c) MOD 2 = 0 THEN PRINT " ";
NEXT
PRINT
errer: IF e$ <> "" THEN PRINT "ERROR: "; e$
SYSTEM
DATA 0000,0001,0010,0011,0100,0101,0110,0111
DATA 1000,1001,1010,1011,1100,1101,1110,1111
