*DECK ASCTODC 
USETEXT COMCBEG 
FUNC ASCTODC((ASCIIDATA),(NUMCHARS)) C(10); 
# TITLE ASCTODC - CONVERT ASCII TO DISPLAY CODE. #
  
      BEGIN  # ASCTODC #
  
# 
**    ASCTODC - CONVERT ASCII TO DISPLAY CODE.
* 
*     USES A PACKED CONVERSION TABLE TO CONVERT ASCII TO DISPLAY CODE.
* 
*     FUNC ASCTODC((ASCIIDATA),(NUMCHARS)) C(10). 
* 
*     ENTRY   -  ASCIIDATA IS A RIGHT JUSTIFIED FIELD OF PACKED 8-BIT 
*                ASCII DATA.
*                NUMCHARS IS THE COUNT OF CHARACTERS TO CONVERT.  AS
*                ASCIIDATA IS ONE WORD, THE MAXIMUM VALUE FOR NUMCHARS
*                IS 7.
* 
*     EXIT    -  THE FUNCTION RESULT IS A LEFT-JUSTIFIED CHARACTER VALUE
* 
*     PROCESS -  FOR EACH ASCII CHARACTER STARTING FROM THE RIGHT:  
*                  FOLD CHARACTER TO 6-BIT ASCII
*                  USE FOLDED CHARACTER TO LOOK UP DISPLAY CODE VALUE 
*                    IN PACKED ARRAY. 
*                  ADD IN AS LEFT-MOST CHAR OF FUNCTION RESULT
*                                  ACCUMULATOR. 
*                RETURN 
* 
* 
# 
  
  
      ITEM ASCIIDATA I;              # ASCII WORD OF INPUT #
      ITEM NUMCHARS  I;              # NUMBER OF CHARACTERS TO CONVERT #
  
      ITEM INDX I;                   # INDEX FOR CONVERSION LOOP #
  
      ARRAY [0:0] S(1); 
        BEGIN  # ASCII CHAR BIT DEFINITIONS # 
        ITEM ASCIINUM   I(00,00,60);
        ITEM ASCBIT7    U(00,53,01);
        ITEM ASCLOWER5  U(00,55,05);
        END 
  
      ARRAY [0:7] S(1); 
        BEGIN  # CONVERSION TABLE # 
        ITEM DCCHARS    I(00,00,60) = [O"5566646053636770", 
                                       O"5152474556465750", 
                                       O"3334353637404142", 
                                       O"4344007772547371", 
                                       O"7401020304050607", 
                                       O"1011121314151617", 
                                       O"2021222324252627", 
                                       O"3031326175627665"];
        END 
  
      ARRAY [0:0] S(1); 
        BEGIN  # ARRAY TO CALCULATE WORD AND CHARACTER OFFSETS #
        ITEM FLDEDASCII I(00,00,60);
        ITEM FLDWORDNUM U(00,54,03);
        ITEM FLDCHARNUM U(00,57,03);
        END 
  
      ARRAY [0:0] S(1); 
        BEGIN  # ARRAY TO EQUATE DISPLAY NUMBER AND CHAR #
        ITEM DISPLNUM  I(00,00,60); 
        ITEM DISPLCODE C(00,00,10); 
        END 
  
CONTROL EJECT;
  
      DISPLNUM = 0; 
      ASCIINUM = ASCIIDATA; 
  
      FASTFOR INDX = 1 STEP 1 UNTIL NUMCHARS
      DO
        BEGIN  # CONVERT CHAR BY CHAR # 
        FLDEDASCII = ASCLOWER5 + ASCBIT7 * 2**5;
        ASCIINUM = ASCIINUM / 2**8; 
        DISPLNUM = (DISPLNUM + (DCCHARS[FLDWORDNUM]/2**(42-6*FLDCHARNUM)
                                LAN O"77" )) * 2**54; 
        END 
  
      ASCTODC = DISPLCODE;
      RETURN; 
      END  # ASCTODC #
  
      TERM
