*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 = C<I,1>INW;
        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
