*DECK FFSUCDB 
      PROC FFSUCDB(INW,OUTW1,OUTW2,ERR);
*CALL COPYRITE
# TITLE FFSUCDB - CONVERT DISPLAY CODE DECIMAL TO BINARY               #
      BEGIN  # FFSUCDB #
# 
**    FFSUCDB - CONVERT DECIMAL TO BINARY.
* 
*     J.C. LEE     82/01/02 
* 
*     THIS PROCEDURE CONVERTS A LEFT JUSTIFIED DISPLAY CODE VALUE TO
*     BINARY.  IF THE VALUE IS NOT A DECIMAL NUMBER THEN AN ERROR 
*     STATUS IS RETURNED. 
* 
*     PROC FFSUCDB
* 
*     ENTRY        1. INW = INPUT WORD, LEFT JUSTIFIED. 
* 
*     EXIT         1. OUTW1 = OUTPUT BINARY VALUE.
*                  2. OUTW2 = OUTPUT RIGHT JUSTIFIED DC.
*                  3. ERR   = ERROR INDICATOR.
* 
*     METHOD
* 
*     FOR EACH CHARACTER BEGINNING ON THE LEFT, IF IT IS A CHARACTER
*     CHARACTER CONVERT IT TO BINARY ELSE, SET COMPLETE FLAG AND IF 
*     CHARACTER IS NOT A ZERO BYTE THEN SET ERROR FLAG.  IF THE 
*     COMPLETE FLAG IS NOT SET THEN, ADD CURRENT DIGIT TO VALUE.
* 
# 
      DEF DC$0       #O"33"#;          # DISPLAY-CODED 0               #
      DEF DC$9       #O"44"#;          # DISPLAY-CODED 9               #
  
      ITEM INW        U;               # INPUT WORD, LEFT-JUSTIFIED    #
      ITEM OUTW1      I;               # OUTPUT BINARY VALUE           #
      ITEM OUTW2      I;               # OUTPUT RIGHT-JUSTIFIED DC     #
      ITEM ERR        B;               # ERROR INDICATOR               #
      ITEM COMPLETE   B;               # CONVERSION DONE INDICATOR     #
      ITEM DIGIT      I;               # ONE DISPLAY-CODED CHARACTER   #
      ITEM I          I;               # TEMPORARY VARIABLE            #
  
      CONTROL EJECT;
  
#     START MAIN PROCEDURE.                                            #
  
      ERR = FALSE;
      OUTW1 = 0;
      OUTW2 = 0;
      COMPLETE = FALSE;                # CONVERSION NOT DONE YET       #
  
      FOR I=0 STEP 1 WHILE I LS 10
                     AND NOT COMPLETE 
      DO
        BEGIN                          # PROCESS A DISPLAY-CODED CHAR  #
        DIGIT = C<I,1>INW;
  
        IF DIGIT GQ DC$0
          AND DIGIT LQ DC$9 
        THEN                           # DIGIT IS BETWEEN 0 AND 9      #
          DIGIT = DIGIT - O"33";
  
        ELSE                           # NOT A DECIMAL NUMBER          #
          BEGIN 
          COMPLETE = TRUE;
          IF (DIGIT NQ 0) AND (DIGIT NQ O"55")
          THEN                         # ERROR IF NOT END OF FIELD     #
            ERR = TRUE; 
          END 
  
        IF NOT COMPLETE 
        THEN
          BEGIN 
          OUTW2 = OUTW2*O"100" + DIGIT ;  # DECIMAL VALUE IN CHAR      #
          OUTW1 = OUTW1*10 + DIGIT;    # CONVERT TO BINARY VALUE       #
          END 
        END 
      RETURN; 
  
      END  # FFSUCDB #
  
      TERM
