*DECK XFORM 
USETEXT DNTEXT
USETEXT RPTEXT
PROC XFORM; 
          BEGIN 
  
          #TRANSFORM DNATS ROUTINE# 
          #THIS ROUTINE#
          #- IS CALLED BY LEVEL01PROCG# 
          #- TRANSFORMS SUM COUNTER DNATS TO CONFORM TO RULES#
          #6.39A.4.1  AND 6.39A.4.2#
          #- TRANSFORMS DNATS OF PRINTABLE  ELEMENTARY ITEMS# 
          #WITHIN A GIVEN REPORT GROUP INTO A REDEFINITION# 
          #OF PRINT-LINE-REC-NAME-1  BY ASSIGNING THE PROPER# 
          #MSECS AND OFFSETS ASSOCIATED WITH THE GENERATED# 
          #RECORD AREA# 
  
          ITEM
                 PLTPTR       I,
                 RGDNATPTR    I,
                 AUXINDEX     I,
                 DSM          I,
                 TDINDEX      I,
                 INTVALUE     I,
                 INTINDEX     I,
                 TYPETEMP     I,
                 POINTTEMP    I,
                 NUMLENTEMP   I,
                 FDRDINDEX    I;
  
  
          ITEM   $TEMP$,
                $DUMMY$;
  
          XREF   PROC         INTERCEPT;
          XREF   FUNC         PLTCNVRT I; 
          XREF   PROC         RWSET    ;
          XREF   PROC         RWSET1   ;
          XREF   PROC         GETNEXT  ;
          XREF   FUNC         RP$AUXPTR;
          XREF   FUNC         RWGET    ;
          XREF   FUNC         RWGET1   ;
  
          DEF    GET          #GETFIELD#; 
          DEF    SET          #SETFIELD#; 
          DEF    GETQ         #GETQUICK#; 
  
*CALL RPCOMM
*CALL DNATVALS
*CALL FDRDT1
*CALL GETSET
*CALL TABLNAMES 
  
  
          CONTROL EJECT;
  
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  # * #   EPTRACE("XFORM  ")                                       # * #
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  
          #THIS ROUTINE SETS UP THE MSEC AND BYTE OFFSET FIELDS#
           #FOR ITEMS IN THE PRINT LINE AND SETS UP THE DNATS   # 
           #FOR SUMCOUNTERS.  THE DNAT IN THE REPORT SECTION IS # 
           #THE SUMCOUNTER DNAT AND A NEW DNAT IS ALLOCATED FOR # 
           #THE AREA IN THE PRINT LINE TO BE OCCUPIED BY THE    # 
           #VALUE OF THE SUM COUNTER.                           # 
          #START  OF TRANSFORM-DNAT  PROCEDURE# 
  
          #MUST TRANSFORM SUM COUNTER DNATS EVEN IF ANALONLYRGRP =1#
          #AS ANY SUM COUNTER COULD BE REFERENCED IN ANOTHER REPORT#
          #GROUP.#
          IF ANALONLYREPT EQ 0
              AND 
              ANALONLYRGRP EQ 0 
          THEN
              FOR RGDNATPTR = FIRSTF3OR4DE STEP 1 UNTIL LASTRGDNAT DO 
              BEGIN 
              AUXINDEX = RP$AUXPTR(RGDNATPTR);
              IF RWGET(RASUMCNTRBIT,AUXINDEX) EQ 1
              THEN
                  BEGIN 
                  #W.R.T.  RULES 6.39A.4.1  + 6.39A.4.2, MUST INSURE# 
                  #THAT SUM COUNTER IS A NUMERIC DATA ITEM WITH AN# 
                  #OPERATIONAL SIGN, AND THAT THE SIZE OF SUM#
                  #COUNTER = NUMBER OF RECEIVING CHARACTER   #
                  #POSITIONS SPECIFIED   #
                  #IN THE PICTURE CLAUSE.  IF THE PICTURE STRING DOESNT#
                  #DEFINE A NUMERIC ITEM, THEN LEGALLY IT CAN ONLY BE  #
                  #ALPHANUMERIC OR ALPHANUMERIC EDITED (WHY WOULD YOU  #
                  #DO THIS\)  IF THIS IS THE CASE, THE NUMBER OF REC   #
                  #EIVING CHARACTER POSITIONS COULD BE GR 18 WHICH IS  #
                  #THE MAX NUMERIC LENGTH.  WE WILL USE THE MINIMUM OF #
                  #18 AND THE ITEM LENGTH (IF ALPHANUMERIC) OR THE REP #
                  #COUNT (IF ALPHANUMERIC EDITED).  IF THE PICTURE DE- #
                  #FINES AN ITEM THAT A COMP-1 INTEGER ITEM CANNOT BE  #
                  #MOVED TO, WE WILL USE 18 AS THE NUMERIC LENGTH OF   #
                  #THE SUM COUNTER.                                    #
  
                  TYPETEMP = GETQ ( DN$TYPE, DNAT$, RGDNATPTR );
                  $TEMP$ = 18;
                  IF TYPETEMP EQ ALPHNUM
                  THEN
                      $TEMP$ = GETQ ( DN$ITMLEN, DNAT$, RGDNATPTR );
                  IF TYPETEMP EQ ALPHNUMED
                  THEN
                      $TEMP$ = GETQ ( DN$REPCOUNT, DNAT$, RGDNATPTR );
  
                  POINTTEMP = GETQ ( DN$POINT, DNAT$, RGDNATPTR );
                  NUMLENTEMP = GETQ ( DN$NUMLEN, DNAT$, RGDNATPTR );
  
                  #ZERO OUT DNAT #
                  SET ( DN$WORD1, DNAT$, RGDNATPTR, 0 );
                  SET ( DN$WORD2, DNAT$, RGDNATPTR, 0 );
         SET(DN$WORD0,DNAT$,RGDNATPTR,0); 
         SET(DN$WORD3,DNAT$,RGDNATPTR,0); 
  
                  #ALLOCATE SPACE FOR THE SUMCOUNTER IN RDMSEC# 
  
                  RDLBYTOFFSET = ( ( RDLBYTOFFSET + 9 ) / 10 ) * 10;
                  SET ( DN$BYTEOFFS, DNAT$, RGDNATPTR, RDLBYTOFFSET );
                  SET ( DN$ITMLEN, DNAT$, RGDNATPTR, 10 );
                  SET ( DN$MAJMSEC, DNAT$, RGDNATPTR, RDMSEC ); 
                  RDLBYTOFFSET = RDLBYTOFFSET + 10; 
                  IF TYPETEMP LS LOWNUMRESULT 
                  THEN
                      BEGIN 
                      SET ( DN$POINT, DNAT$, RGDNATPTR, 0 );
                      IF $TEMP$ GR 18 
                      THEN
                          $TEMP$ = 18;
                      SET ( DN$NUMLEN, DNAT$, RGDNATPTR, $TEMP$ );
                      END 
                  ELSE
                      BEGIN 
                      SET ( DN$POINT, DNAT$, RGDNATPTR, POINTTEMP );
                      SET ( DN$NUMLEN, DNAT$, RGDNATPTR, NUMLENTEMP );
                      END 
  
                  SET ( DN$TYPE, DNAT$, RGDNATPTR, COMP1 ); 
                  SET ( DN$LEVEL, DNAT$, RGDNATPTR, 77 ); 
                  SET ( DN$SIGNBIT, DNAT$, RGDNATPTR, 1 );
                  SET ( DN$LSIGN, DNAT$, RGDNATPTR, 1 );
                  END 
              END 
          #PHASE II#
          #TRANSFORM DNATS OF ELEMENTARY ITEMS OF THE REPORT GROUP INTO#
          #REDEFINITIONS OF PRINT-LINE-REC-NAME-1. (IF IT IS A CF#
          #REPORT GROUP, AND IF SUM CLAUSE BIT = 1, TRANS-# 
          #FORM THE DNAT THAT WAS GENERATED TO SERVE AS THE PRINTABLE#
          #ITEM), NOTE--F1OFFSETPRNT WOAS SET UP IN IRT$RT. # 
          # IT = 1 IF NO CODE CLAUSE, = 3 IF VALID CODE CLAUSE)#
          #SO CAN USE DIRECTLY WITHOUT CHECKING FOR EXISTENCE#
          #OF CODE CLAUSE.# 
          IF ANALONLYREPT EQ 0
              AND 
              ANALONLYRGRP EQ 0 
          THEN
              BEGIN 
              #LOOK IN FD-RD-TABLE  TO FIND MSEC TO USE FOR#
              #DNAT-SUB-MSEC# 
  
              FOR FDRDINDEX = 1  STEP 1 UNTIL LASTFDRDNTRY DO 
                  BEGIN 
                  IF GETQ(FR$REPTNAME,FDRDT$,FDRDINDEX) EQ CURRDDNAT
                  THEN
                      BEGIN 
                      DSM = GETQ(FR$FILEMSEC,FDRDT$,FDRDINDEX); 
                      GOTO CPHASEII;
                      END 
                  END 
CPHASEII: 
              FOR RGDNATPTR = FIRSTF3OR4DE STEP 1 UNTIL LASTRGDNAT DO 
                  BEGIN 
                  AUXINDEX = RP$AUXPTR(RGDNATPTR);
                  IF RWGET(RAPRINTABLEB,AUXINDEX)EQ 1 
                  THEN
                      BEGIN 
                      IF RWGET(RASUMBIT,AUXINDEX) EQ 1
                      THEN
                          BEGIN 
                          TDINDEX = RWGET(RAPLDNAT4SUM,AUXINDEX + 1); 
                          GOTO TRNSFRM; 
                          END 
                      TDINDEX = RGDNATPTR;
TRNSFRM:  
                      SET(DN$MAJMSEC,DNAT$,TDINDEX,1);
                      SET(DN$SUBMSEC,DNAT$,TDINDEX,DSM);
  
                      #TRANSLATE COLUMN NUMBER TO AN INTEGER VALUE# 
  
                      PLTPTR = RWGET(RACOLNUMPLT,AUXINDEX); 
                      INTVALUE = PLTCNVRT(PLTPTR);
                      SET(DN$BYTEOFFS,DNAT$,TDINDEX,
                          F1OFFSETPRNT + INTVALUE - 1); 
                      END 
                  END 
              END 
          #THIS LOOP WILL HANDLE THINGS FOR ANY CASE OF#
          #LINE NUMBER SPECS. (IE. NO LINE NUMBER SPEC. AT ALL# 
          #TO N DIFFERENT  LINE NUMBER SPECS.)# 
  
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  # * #   EXTRACE("XFORM  ")                                       # * #
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  
  
          END #XFORM# 
          TERM
