*DECK DLCONVH USETEXT DLFPDEF PROC DLCONVH(INW,OUTW,ERR,DGTS); # CONVERT HEX DC TO BINARY. # *IF DEF,IMS # *1DC DLCONVH * * 1. PROC NAME AUTHOR DATE. * DLCONVH P.C.TAM 78/11/07. * * 2. FUNCTIONAL DESCRIPTION. * CONVERT HEXADECIMAL DISPLAY CODED FIELD TO * BINARY. * * 3. METHOD USED. * FOR EACH DIGIT, IF BETWEEN 33B AND 44B, GET * TRUE VALUE BY SUBTRACTING 33B, * IF BETWEEN 01B AND 06B, GET TRUE VALUE BY * ADDING 9. * * 4. ENTRY PARAMETERS. * INW INPUT WORD IN DISPLAY CODE. * * 5. EXIT PARAMETERS. * OUTW OUTPUT BINARY RESULT * ERR ERROR RETURN CODE * DGTS NUMBER OF DIGITS CONVERTED. * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * DLFPDEF * * 7. ROUTINES CALLED. * NONE. * * 8. DAYFILE MESSAGES. * NONE. * # *ENDIF ITEM INW U, # INPUT WORD # OUTW I, # OUTPUT RESULT # ERR I, # CONVERSION OK FLAG # DGTS I, # NUMBER OF DIGITS CONVERTED. # COMPLETE B, # TEMP VARIABLE # DIGIT I, # TEMP VARIABLE # I I, # TEMP VARIABLE # SUM I; # TEMP VARIABLE # # ******************************************************************** # BEGIN ERR = 0; # PRESET RETURN CODE # COMPLETE = FALSE; # SET TEMP VARIABLES # SUM = 0; FOR I = 0 STEP 1 WHILE I LS WC AND NOT COMPLETE DO BEGIN DIGIT = CINW; IF 1 LQ DIGIT AND DIGIT LQ 6 # DIGIT IS BETWEEN A AND F # THEN DIGIT = DIGIT + 9; ELSE IF O"33" LQ DIGIT AND DIGIT LQ O"44" # DIGIT IS BETWEEN 0/9 # THEN DIGIT = DIGIT - O"33"; ELSE BEGIN # DIGIT IS NOT A VALID HEX SYMBOL # COMPLETE = TRUE; DGTS = I; # SET NUMBER OF DIGITS FOUND. # IF DIGIT NQ 0 THEN # NOT END OF FIELD, SOMETHING IS WRONG # ERR = 1; END IF NOT COMPLETE THEN SUM = SUM * 16 + DIGIT; END OUTW = SUM; END TERM