*DECK STKOUT
USETEXT TCLFN 
USETEXT TCRMDEF 
USETEXT TENVIRN 
USETEXT TFIT
USETEXT TREPORT 
USETEXT TXSTD 
      PROC STKOUT;
  
#----------------------------------------------------------------------#
#                                                                      #
#  THE FOLLOWING PROCS ARE XDEF"D WITHIN THIS DECK:                    #
#                                                                      #
#     STKOUT                       RECORD A REPORT SPECIFICATION OR A  #
#                                  DIRECTIVE (PART/FULL TRANSMISSION)  #
#                                                                      #
#----------------------------------------------------------------------#
  
      BEGIN 
  
      XREF ITEM CDCSCAT  B;        # TRUE IF IN CDCS CATALOG MODE      #
      XREF ITEM MODCAT       B;    # TRUE IF CATALOG FILE WAS MODIFIED #
                                   # SINCE LAST CLOSE                  #
      XREF ITEM RA0         ;      # LOCATION OF ZERO FOR PARAM LISTS  #
  
      XREF PROC CATCHK;            # CALL PROPER CATALOG-ACCESSING PROC#
      XREF PROC DIAG;              # ISSUE DIAGNOSTIC MESSAGE TO USER  #
      XREF PROC OPNCAT;            # ENSURE CATALOG FILE IS OPEN       #
      XREF PROC PUT;               # CRM ROUTINE TO WRITE ON CATALOG   #
      XREF PROC WRTSESS;           # HANDLES FULL TRANSMISSION RECORDNG#
  
  
  
  
#----------------------------------------------------------------------#
  
  
  
  
      BEGIN 
      ITEM I            I;         # TEMPORARY                         #
      ITEM J            I;         # TEMPORARY                         #
      ITEM K            I;         # TEMPORARY                         #
      ITEM L            I;         # TEMPORARY                         #
      ITEM M            I;         # TEMPORARY                         #
      ITEM SAVANY       I;         # PTR TO END OF DIRECTIVE IN BUFFER #
      ITEM SAVBEGIN     C(10);     # TO HOLD WORD DIRECTIVE STARTS IN  #
      ITEM SAVEND       C(10);     # TO HOLD WORD DIRECTIVE ENDS IN    #
      ITEM TEMPWORD     C(10);     # TO HOLD WORD OVERWRITTEN BY KEY   #
      BASED ARRAY WDIRECT [0:0] ; ; 
      CATAFITES = 0;                                                     FORMALT
                IF STKFLAG THEN 
              BEGIN 
                 IF CURREPT EQ "          " THEN DIAG(88);
                 ELSE   BEGIN 
                         IF NOT PERMI THEN BEGIN
                                               DIAG(87);  STDNO;
                                           END
      OPNCAT(CATAFIT, PD$IO, I);   # OPEN THE CATALOG FOR I/O          #
      IF I EQ 2                    # IF SOME CRM ERROR OCCURRED        #
      THEN
        BEGIN 
        STDNO;                     # BAD RETURN                        #
        END 
  
      SAVANY = CT100 + LEXPTR - NEXLENG - 1;
                                   # POSITION IN 100-CHAR BUFFER PLUS  #
                                   # THE NUMBER OF CHARS SCANNED BEFORE#
                                   # THE CURRENT BUFFER OF 100.        #
      IF NEXLENG EQ 0              # IF LAST DIRECTIVE IN XMISSN       #
      THEN
        BEGIN 
        J = SAVANY / 10;
        K = SAVANY - J * 10;
        IF C<K,1>INWORD[J] EQ ")"  # IF LAST CHAR WAS ")"              #
        THEN
          BEGIN 
          SAVANY = SAVANY + 1;     # LEXSCAN COMPUTED LEXPTR 1 CHAR TOO#
                                   # SMALL, SO KLUDGE TO INCREMENT     #
                                   # SAVANY BY 1                       #
          END 
        END 
      I = LXBEGIN / 10; 
      J = SAVANY / 10;
      L = LXBEGIN -  I * 10;
      K = SAVANY - J * 10;
      SAVBEGIN = INWORD [I];
      IF L NQ 0  THEN 
      C<0,L> INWORD [I] = BLK;
      SAVEND = INWORD [J];
      IF K LS 10  THEN
      C<K,10-K> INWORD [J] = BLK; 
      IF LXBEGIN LQ 9 THEN P<WDIRECT> = P<KEYWSA>;                       FEAT157
        ELSE BEGIN
        TEMPWORD = INWORD[I - 1];  # SAVE IN TEMP. -- WILL BE RESTORED #
        INWORD[I - 1] = KEYAREA[0];                                      FEAT157
        P<WDIRECT> = LOC (INWORD [I - 1] ); 
        END 
      M = (J - I + 1) * 10  + 10; 
      CATAFITWSA = P<WDIRECT>;
      CATAFITRL = M;
      CATAFITKA = P<KEYWSA>;
      CATCHK (CPUT, LOC(CATAFIT), CDCSCAT); 
      INWORD [J] = SAVEND;
      INWORD [I] = SAVBEGIN;
      IF LXBEGIN GR 9              # IF WE OVERWROTE AN EXTRA WORD...  #
      THEN
        BEGIN 
        INWORD[I - 1] = TEMPWORD;  # RESTORE ORIGINAL CONTENTS         #
        END 
      LXBEGIN = SAVANY; 
        IF CATAFITES EQ DUPLICATEKEY                                     FORMALT
        THEN                                                             FORMALT
          BEGIN                                                          FORMALT
          DIAG(132);                                                     FORMALT
          END                                                            FORMALT
                                                                         FORMALT
        ELSE                                                             FORMALT
          BEGIN                                                          FORMALT
          IF CATAFITES NQ 0                                              FORMALT
          THEN                                                           FORMALT
            BEGIN                                                        FORMALT
            P<FIT> = LOC(CATAFIT);                                       FORMALT
            DIAG(105, FITES, C<0,7>FITLFN);                              FORMALT
            END                                                          FORMALT
  
          MODCAT = TRUE;           # CATALOG WAS MODIFIED              #
          END                                                            FORMALT
        END                                                              FORMALT
                                                                         FORMALT
              END 
      ELSE  WRTSESS;
          STDNO;
      END 
  
  
  
  
#----------------------------------------------------------------------#
  
  
      END 
      TERM
