*DECK RECORDING 
USETEXT TCLFN 
USETEXT TCRMDEF 
USETEXT TENVIRN 
USETEXT TFIT
USETEXT TOPTION 
USETEXT TXSTD 
      PROC RECORDING; 
  
#----------------------------------------------------------------------#
#                                                                      #
#  THE FOLLOWING PROCS ARE XDEF"D WITHIN THIS DECK:                    #
#                                                                      #
#     RECOFF                       TURNS OFF RECORDING                 #
#     RECORDING                    FINAL SET UP OF RECORDING           #
#     SESSCHK                      CHECKS THAT NAME IS LESS THAN 7 CHAR#
#     SESSREC                      INITIALIZATION. SAVING OF SESSION NM#
#     TRXMID                       CHECK FOR LEGAL TRANSMISSION ID     #
#                                                                      #
#----------------------------------------------------------------------#
  
      BEGIN 
  
      XREF ARRAY AINCREM[0:1];     # HOLDS INCREMENTS FOR RECORDING AND#
                                   # DUPLICATE.                        #
        BEGIN 
        ITEM INCREMENT    C(00,00,10);  # DISPLAY CODE INCREMENT, RIGHT#
                                        # JUSTIFIED.                   #
        END 
      ITEM CTR1         I;         # SCRATCH USED IN CALC OF HOW MANY  #
                                   # DIRECTIVES CAN BE RECORDED        #
      ITEM CTR2         I;         # SCRATCH USED IN CALC OF HOW MANY  #
                                   # DIRECTIVES CAN BE RECORDED        #
      XREF ITEM CDCSCAT  B;        # TRUE IF IN CDCS CATALOG MODE      #
      XREF ITEM DEFCAT       B;    # TRUE IF DEFAULT CATALOG EXISTS    #
      XREF ITEM FORWHICHDIR  I;    # INDICATES TO *INCREM* FOR WHICH   #
                                   # DIRECTIVE (0 FOR RECORDING, 1 FOR #
                                   # DUPLICATE) INCREMENTING SHOULD BE #
                                   # DONE.                             #
      ITEM I            I;         # SCRATCH TEMPORARY                 #
      ITEM INCSIZE      I;         # SCRATCH USED IN CALC OF HOW MANY  #
                                   # DIRECTIVES CAN BE RECORDED        #
      ITEM J            I;         # SCRATCH TEMPORARY                 #
      ITEM K            I;         # SCRATCH TEMPORARY                 #
      XREF ITEM RA0          I;    # LOCATION OF ZERO FOR PARAM LISTS  #
      ITEM TRMID        B;         # TRUE IF TANSM ID SPECIFIED        #
  
      XREF PROC CATCHK;            # CALL PROPER CATALOG-ACCESSING PROC#
      XREF PROC CLRBSCFLGS;        # CLEAR BASIC TABLE FLAGS           #
      XREF PROC DIAG;              # ISSUE DIAGNOSTIC MESSAGE TO USER  #
      XREF PROC GET;               # GET A SPECIFIC RECORD             #
      XREF PROC GETN;              # GET NEXT RECORD                   #
      XREF FUNC INCRDIS I;         # ADDS TWO DISPLAY CODE INTEGERS    #
      XREF PROC OPNCAT;            # OPENS CATALOG IF NOT OPEN YET     #
      XREF PROC SKIPB1;            # USED TO FIND HIGHEST TRANSMISSION #
                                   # IN THIS SESSION                   #
      XREF PROC STARTM;            # CRM ROUTINE TO POSITION TO A KEY  #
  
  
  
  
#----------------------------------------------------------------------#
  
  
  
  
          XDEF PROC RECOFF;    #TO TURN RECORDING OFF#
      PROC RECOFF;  BEGIN 
           IF NOT RECORDFLAG THEN STDNO;
          RECORDFLAG = FALSE; 
      PROMPDIR = NEXTDIR; 
      C<0,6>I = C<4,6>CURRSESS; 
      DIAG(1001,I);   #END OF SESSION NNNNNN# 
      CLRBSCFLGS;                  # CLEAR BASIC TABLE FLAGS           #
                 STDNO; 
      END 
  
  
  
  
#----------------------------------------------------------------------#
  
  
  
  
#     BEGINNING OF EXECUTABLE CODE FOR  R E C O R D I N G              #
      BEGIN 
           NOTRMX = 2000; 
      CATAFITES = 0;
      B<24,36>CURRSESS = B<6,36>KEYAREA[0]; 
      P<FIT> = LOC(CATAFIT);       # POSITION FIT FOR ACCESSING CATAFIT#
      I = 1;                       # PRESET FOR *NO CATALOG*           #
      IF PFCATAL                   # IF *VERSION* CATALOG AVAILABLE    #
        OR DEFCAT                  # OR DEFAULT CATALOG INITIALIZED    #
      THEN
        BEGIN 
        IF NOT PERMI               # IF NO CATALOG MODIFICATION ALLOWED#
        THEN
          BEGIN 
          DIAG(87);                # DIAGNOSE PRIVACY VIOLATION        #
          STDNO;                   # BAD RETURN                        #
          END 
  
        OPNCAT(CATAFIT, PD$IO, I);  # OPEN THE CATALOG FOR I/O         #
        END 
  
      IF I EQ 2                    # IF SOME ERROR OCCURRED            #
      THEN
        BEGIN 
        STDNO;                     # BAD RETURN                        #
        END 
  
      RECORDFLAG = TRUE;           # FLAG WE ARE RECORDING             #
      IF I EQ 1                    # IF NO CATALOG FILE                #
      THEN
        BEGIN 
        IF NOT TRMID               # IF NO STARTING ID WAS SPECIFIED   #
        THEN
          BEGIN 
          CURRDIR = INCREMENT[0];  # INITIAL ID OF SESSION IS INCREMENT#
          END 
        END 
  
      ELSE
        BEGIN 
      CATAFITWSA = P<KEYWSA>; 
      CATAFITKA = CATAFITWSA; 
      CATAFITKP = 0;
      CATAFITMKL = 7; 
      CATCHK (CGET, LOC(CATAFIT), CDCSCAT); 
      IF CATAFITES NQ UNKNOWNKEY   # IF SESSION EXISTS                 #
        OR TRMID                   # IF TRANSMISSION-ID SPECIFIED      #
      THEN
           BEGIN
           IF TRMID THEN BEGIN
                         B<42,18>KEYAREA[0] = B<42,18>CURRDIR;
           CATAFITWSA = P<KEYWSA>;
           CATAFITKA = CATAFITWSA;
           CATAFITKP = 0; 
           CATAFITMKL = 10; 
           CATCHK (CGET, LOC(CATAFIT), CDCSCAT);
           IF CATAFITES NQ UNKNOWNKEY THEN
                             BEGIN
                             DIAG(218, C<7,3>KEYAREA[0]); 
                             TRMID = FALSE;  # GIVE THE DEFAULT ID     #
                             GOTO DEFAULTID; # SET UP THE DEFAULT ID   #
                             END
                         C<7,3>CURRDIR = C<7,3>KEYAREA[0];
           FITREL = RELGT;         # SET TO FIND NEXT HIGHEST KEY      #
                                   # START AT POSITION GT THIS FULL KEY#
           CATCHK (STARTT, LOC(CATAFIT), CDCSCAT);
                                   # FIND NEXT OCCURRING RECORD        #
           CATCHK (CGETN, LOC(CATAFIT), CDCSCAT); 
           CTR1 = 0;
           CTR2 = 0;         # INITIALIZE...   #
           INCSIZE = 0; 
           IF B<6,36>KEYAREA[0] NQ B<24,36>CURRSESS THEN
             BEGIN    # TREAT AS IF THE NEXT DIRECTIVE HAD A TRANS-ID  #
             B<42,18>KEYAREA[0] = "999";  # OF 1000. SAY IT HAS 999 AND#
             CTR1 = 1;   # OFFSET THE COUNTER FOR CONVERSION.  #
             END
           FOR I=2 STEP -1 UNTIL 0 DO 
           BEGIN
                K=1;
                FOR J=1 STEP 1 UNTIL I DO K=K*10; 
                CTR1 = CTR1 + (B<60 -(I+1) * 6, 6>KEYAREA[0] - O"33") * 
                  K;
                CTR2=CTR2+(B<60-(I+1)*6,6>CURRDIR-O"33")*K; 
                INCSIZE = INCSIZE+(B<60-(I+1)*6,6>INCREMENT[0]-O"33")*K;
           END
           CTR2 = CTR1 - CTR2;
           NOTRMX = (CTR2-1) / INCSIZE + 1 ;
           DIAG (1002, NOTRMX); 
           END
DEFAULTID: IF NOT TRMID THEN
                         BEGIN
            FITREL = RELGT;        # SET FOR FINDING NEXT HIGHEST KEY  #
            FITMKL = 7;            # POSITION ON SESSION NAME ONLY     #
                                   # POSN TO START OF NEXT SESSION     #
            CATCHK (STARTT, LOC(CATAFIT), CDCSCAT); 
                                   # BACK UP ONE RECORD TO THE LAST    #
                                   # RECORD IN THIS SESSION            #
            CATCHK (SKIPB, LOC(CATAFIT), CDCSCAT);
                                   # PICK UP LAST RECORD THIS SESSION  #
            CATCHK (CGETN, LOC(CATAFIT), CDCSCAT);
                         C<7,3>CURRDIR = C<7,3>KEYAREA[0];
                         CURRDIR = INCRDIS(INCREMENT[0],CURRDIR); 
                         IF B<36,6>CURRDIR NQ O"33" THEN
                           BEGIN
                           DIAG (244,C<6,4>CURRDIR);
                           RECOFF;
                           END
                         C<7,3>KEYAREA[0] = C<7,3>CURRDIR;
                         END
           END
          ELSE BEGIN
            CURRDIR = INCREMENT[0]; 
            END 
        END 
  
           TRMID = FALSE; 
      B<24,12>PROMPDIR = NEXTDIR;  # CHANGE PROMPT TO INCLUDE # 
      B<6,18>PROMPDIR = B<42,18>CURRDIR;   # DIRECTIVE ID # 
      STDYES; 
      END 
  
  
  
  
#----------------------------------------------------------------------#
  
  
  
  
      XDEF PROC SESSCHK;
 # THIS PROC CHECKS THAT A SESSION NAME IS LT 6 CHARACTERS LONG # 
      PROC SESSCHK;  BEGIN
      IF CURLENG GR 6  THEN  STDNO; 
      STDYES;   END 
  
  
  
  
#----------------------------------------------------------------------#
  
  
  
  
      XDEF PROC SESSREC;
 # THE SESSION ID IS SAVED IN  KEYAREA #
      PROC SESSREC;  BEGIN
      KEYAREA[0] = "0      001";
      C<1,CURLENG>KEYAREA[0] = C<0,CURLENG>ICW[0];
      CURRDIR = "0000000001"; 
      FORWHICHDIR = 0;
      INCREMENT[0] = "0000000001";
      STDNO;   END
  
  
  
  
#----------------------------------------------------------------------#
  
  
  
  
       XDEF PROC TRXMID;
       PROC TRXMID;   # CHECK FOR TRANSMISSION LEGAL OR NOT # 
       BEGIN
           IF ICW[5] GR 0 AND ICW[5] LQ 999 THEN
             BEGIN
             C<10-CURLENG,CURLENG>CURRDIR = C<0,CURLENG>ICW[0]; 
             TRMID = TRUE;
             STDYES;
             END
           TRMID = FALSE; 
           STDNO; 
       END
  
  
  
  
#----------------------------------------------------------------------#
  
  
      END 
      TERM
