'===========================================================================
' Subject: CONVERT HEX STRINGS TO DECIMAL     Date: 03-11-98 (16:45)       
'  Author: John Nobles                        Code: QB, QBasic, PDS        
'  Origin: johnnobles@worldnet.att.net      Packet: ALGOR.ABC
'===========================================================================
'===========================================================================
'                   Source code snippet: QuickBasic for DOS
'
'           Author: John Nobles. (aganime@hotmail.com)
' Copyright status: Public Domain
'
' A function that will return the decimal equivalent of a hex value.
' The Value must not be more than 8 positions big however and is input
' in the form.  FFFFFFFF.  Where F is a hex value 0-F.
' An example would be:  FE returns 254.  There is really bad error checking
' To make sure the form is right but its really sloppy just like the code is
' very sloppy and probably could be done in half the space.  But I needed
' this routine and thought someone else might too as I haven't found it
' anywhere else
'
'===========================================================================

'HEXIE$ is the value sent to the function for conversion

FUNCTION DEC (HEXIE$)
LENG = LEN(HEXIE$)
IF LENG = 0 THEN PRINT "invalid string": END
IF LENG > 8 THEN PRINT "string too big": END
FOR I = LENG TO 1 STEP -1
IF LENG = 8 THEN
   IF I = 8 THEN SPOT = 1
   IF I = 7 THEN SPOT = 16
   IF I = 6 THEN SPOT = 256
   IF I = 5 THEN SPOT = 4096
   IF I = 4 THEN SPOT = 65536
   IF I = 3 THEN SPOT = 1048576
   IF I = 2 THEN SPOT = 16777216
   IF I = 1 THEN SPOT = 268435456
END IF
IF LENG = 7 THEN
   IF I = 7 THEN SPOT = 1
   IF I = 6 THEN SPOT = 16
   IF I = 5 THEN SPOT = 256
   IF I = 4 THEN SPOT = 4096
   IF I = 3 THEN SPOT = 65536
   IF I = 2 THEN SPOT = 1048576
   IF I = 1 THEN SPOT = 16777216
END IF
IF LENG = 6 THEN
   IF I = 6 THEN SPOT = 1
   IF I = 5 THEN SPOT = 16
   IF I = 4 THEN SPOT = 256
   IF I = 3 THEN SPOT = 4096
   IF I = 2 THEN SPOT = 65536
   IF I = 1 THEN SPOT = 1048576
END IF
IF LENG = 5 THEN
   IF I = 5 THEN SPOT = 1
   IF I = 4 THEN SPOT = 16
   IF I = 3 THEN SPOT = 256
   IF I = 2 THEN SPOT = 4096
   IF I = 1 THEN SPOT = 65536
END IF
IF LENG = 4 THEN
   IF I = 4 THEN SPOT = 1
   IF I = 3 THEN SPOT = 16
   IF I = 2 THEN SPOT = 256
   IF I = 1 THEN SPOT = 4096
END IF
IF LENG = 3 THEN
   IF I = 3 THEN SPOT = 1
   IF I = 2 THEN SPOT = 16
   IF I = 1 THEN SPOT = 256
END IF
IF LENG = 2 THEN
   IF I = 2 THEN SPOT = 1
   IF I = 1 THEN SPOT = 16
END IF
IF LENG = 1 THEN
   IF I = 1 THEN SPOT = 1
END IF
CHAR$ = MID$(HEXIE$, I, 1)
IF CHAR$ = "1" THEN NUM = 1: GOTO CHECK
IF CHAR$ = "0" THEN NUM = 0: GOTO CHECK
IF CHAR$ = "2" THEN NUM = 2: GOTO CHECK
IF CHAR$ = "3" THEN NUM = 3: GOTO CHECK
IF CHAR$ = "4" THEN NUM = 4: GOTO CHECK
IF CHAR$ = "5" THEN NUM = 5: GOTO CHECK
IF CHAR$ = "6" THEN NUM = 6: GOTO CHECK
IF CHAR$ = "7" THEN NUM = 7: GOTO CHECK
IF CHAR$ = "8" THEN NUM = 8: GOTO CHECK
IF CHAR$ = "9" THEN NUM = 9: GOTO CHECK
IF CHAR$ = "A" THEN NUM = 10: GOTO CHECK
IF CHAR$ = "B" THEN NUM = 11: GOTO CHECK
IF CHAR$ = "C" THEN NUM = 12: GOTO CHECK
IF CHAR$ = "D" THEN NUM = 13: GOTO CHECK
IF CHAR$ = "E" THEN NUM = 14: GOTO CHECK
IF CHAR$ = "F" THEN NUM = 15: GOTO CHECK
PRINT "DATA NOT IN HEX": END
CHECK:
t = NUM * SPOT
TOTAL = TOTAL + t
NEXT I
DEC = TOTAL
END FUNCTION
