*DECK FORMALT 
USETEXT TCLFN 
USETEXT TCMMDEF 
USETEXT TCRMDEF 
USETEXT TFIT
USETEXT TREPORT 
USETEXT TXSTD 
      PROC FORMALT; 
  
#----------------------------------------------------------------------#
#                                                                      #
#  THE FOLLOWING PROCS ARE XDEF"D WITHIN THIS DECK:                    #
#                                                                      #
#     ALTEREX                      EXECUTION OF *ALTER*                #
#     FORMATEX                     EXECUTION OF *FORMAT*               #
#                                                                      #
#----------------------------------------------------------------------#
  
      BEGIN 
  
      XREF ITEM CDCSCAT  B;        # TRUE IF IN CDCS CATALOG MODE      #
      XREF ITEM DEFCAT       B;    # TRUE IF DEFAULT CATALOG EXISTS    #
      ITEM I            I;         # SCRATCH TEMPORARY                 #
      ITEM KEY          C(10);     # TEMPORARY KEY STORAGE FOR GET     #
      XREF ITEM RA0          I;    # LOCATION OF ZERO FOR PARAM LISTS  #
      ITEM RC           I;         # RETURN CODE USED IN AF$OPN CALL   #
       DEF DFTRPWD #O"40000000000001000000"#;  #DEFAULT VALUE FOR 
                                                REPORTLIST WORD 1,
                                                BEYOND IS ON, 
                                                LINE NB IS 1# 
         DEF DFTRPWD2 #O"04010000000000000000"#;
  
      BASED ARRAY SCRATCH;;        # SCRATCH WSA                       #
  
      XREF PROC CATCHK;            # CALL PROPER CATALOG-ACCESSING PROC#
      XREF PROC DIAG;              # ISSUE DIAGNOSTIC MESSAGE TO USER  #
      XREF PROC GET;
      XREF PROC OPNCAT;            # OPEN CATALOG FILE IF NOT YET      #
  
  
  
  
#----------------------------------------------------------------------#
#                                                                      #
#     A F $ O P N                                                      #
#                                                                      #
#      THIS ROUTINE DOES THE OPENING OF THE CATALOG FILE FOR *ALTER*   #
# AND *FORMAT*. IT ALSO DOES A *GET* BY MAJOR KEY TO SEE IF THE SPECI- #
# FIED REPORT NAME EXISTS. THE RETURN CODE PARAMETER, *AF$RC*, IS SET  #
# TO ZERO IF THE REPORT NAME IS KNOWN IN THE CURRENT CATALOG, SET TO 1 #
# IF IT IS NOT KNOWN, AND SET TO 2 IF SOME CRM OR OTHER ERROR OCCURRED #
# (DIAGNOSED BEFORE RETURNING).                                        #
  
      XDEF PROC AF$OPN; 
      PROC AF$OPN(AF$RC); 
      BEGIN 
      ITEM AF$RC        I;         # RETURN CODE FROM AF$OPN           #
                                   #   0 - CURREPT EXISTS              #
                                   #   1 - CURREPT IS UNKNOWN          #
                                   #   2 - CRM OR OTHER ERROR          #
  
      IF NOT PFCATAL               # IF NO *VERSION* CATALOG           #
        AND NOT DEFCAT             # AND NO DEFAULT CATALOG            #
      THEN
        BEGIN 
        AF$RC = 1;                 # UNKNOWN REPORT NAME               #
        RETURN; 
        END 
  
      IF NOT PERMI                 # IF WRITING ON CATALOG NOT ALLOWED #
      THEN
        BEGIN 
        DIAG(87);                  # DIAGNOSE PRIVACY VIOLATION        #
        AF$RC = 2;                 # RETURN CODE - PRIVACY ERROR       #
        RETURN; 
        END 
  
      OPNCAT(CATAFIT, PD$IO, AF$RC);  # TRY TO OPEN FOR I/O            #
      IF AF$RC NQ 0                # IF SOME ERROR PREVENTED OPENING   #
      THEN
        BEGIN 
        RETURN; 
        END 
  
      P<SCRATCH> = CMM$ALF((CATAFITMRL + 9) / 10, FIXED$LWA, 0);
      KEY = CURREPT;               # REPORT NAME IS THE KEY            #
      CATAFITWSA = P<SCRATCH>;
      CATAFITKA = LOC(KEY); 
      CATAFITKP = 0;
      CATAFITMKL = 7; 
      CATCHK (CGET, LOC(CATAFIT), CDCSCAT);  # *GET* WITH 7 CHAR KEY   #
      CMM$FRF(LOC(SCRATCH));       # FREE THE SCRATCH SPACE FOR THE GET#
      IF CATAFITES EQ 0            # IF REPORT NAME FOUND              #
      THEN
        BEGIN 
        AF$RC = 0;                 # RETURN CODE - NAME FOUND          #
        RETURN; 
        END 
  
      IF CATAFITES EQ UNKNOWNKEY   # IF REPORT NAME NOT FOUND          #
      THEN
        BEGIN 
        AF$RC = 1;                 # RETURN CODE - UNKNOWN REPORT NAME #
        RETURN; 
        END 
  
      P<FIT> = LOC(CATAFIT);       # POSITION FOR DIAGNOSTIC           #
      DIAG(105, FITES, C<0,7>FITLFN);  # DIAGNOSE CRM ERROR            #
      AF$RC = 2;                   # RETURN CODE - CRM ERROR           #
      RETURN; 
      END 
  
  
  
  
#----------------------------------------------------------------------#
#                                                                      #
#     A L T E R E X                                                    #
#                                                                      #
#      EXECUTION OF THE *ALTER* DIRECTIVE. IF THE REPORT NAME DOES NOT #
# EXIST ON THE CURRENT CATALOG, A DIAGNOSTIC IS ISSUED AND RETURN IS   #
# THROUGH STDNO. IF A CRM ERROR OCCURS, RETURN THROUGH STDNO. IF THE   #
# REPORT NAME DOES EXIST ON THE CURRENT CATALOG, RETURN IS THROUGH     #
# STDYES.                                                              #
  
      XDEF PROC ALTEREX;
      PROC ALTEREX; 
      BEGIN 
      CURREPT = ILFN[IALT];        # CURRENT REPORT NAME. TAKEN FROM   #
                                   # THE *ALTER* DIRECTIVE.            #
      AF$OPN(RC);                  # OPEN CATALOG. SEE IF REPORT EXISTS#
      IF RC EQ 0                   # IF REPORT NAME FOUND              #
      THEN
        BEGIN 
        STDYES;                    # GOOD RETURN                       #
        END 
  
      IF RC EQ 1                   # IF UNKNOWN REPORT NAME            #
      THEN
        BEGIN 
        DIAG(103);                 # DIAGNOSE UNKNOWN REPORT NAME      #
        CURREPT = " ";             # CLEAR CURRENT REPORT NAME         #
        STDNO;                     # BAD RETURN                        #
        END 
  
      IF RC EQ 2                   # IF SOME OTHER ERROR OCCURRED      #
      THEN
        BEGIN 
        CURREPT = " ";             # CLEAR CURRENT REPORT NAME         #
        STDNO;                     # BAD RETURN                        #
        END 
      END 
  
  
  
  
#----------------------------------------------------------------------#
#                                                                      #
#     F O R M A T E X                                                  #
#                                                                      #
#      EXECUTION OF THE *FORMAT* DIRECTIVE. IF THE REPORT NAME IS KNOWN#
# IN THE CURRENT CATALOG, RETURN THROUGH STDNO. IF THERE WAS A CRM     #
# ERROR, RETURN THROUGH STDNO. IF THE REPORT NAME IS NOT KNOWN IN THE  #
# CURRENT CATALOG, RETURN IS THROUGH STDYES.                           #
  
      XDEF PROC FORMATEX; 
      PROC FORMATEX;
      BEGIN 
      CURREPT = ILFN[IFOR];        # CURRENT REPORT NAME. TAKEN FROM   #
                                   # THE *FORMAT* DIRECTIVE.           #
      AF$OPN(RC);                  # OPEN CATALOG. SEE IF REPORT EXISTS#
      IF RC EQ 0                   # IF REPORT NAME FOUND              #
      THEN
        BEGIN 
        DIAG(102);                 # DIAGNOSE DUPLICATE REPORT NAME    #
        CURREPT = " ";             # CLEAR CURRENT REPORT NAME         #
        STDNO;                     # BAD RETURN                        #
        END 
  
      IF RC EQ 1                   # IF REPORT NAME NOT FOUND          #
      THEN
        BEGIN 
        STDYES;                    # GOOD RETURN                       #
        END 
  
      IF RC EQ 2                   # IF SOME OTHER ERROR OCCURRED      #
      THEN
        BEGIN 
        CURREPT = " ";             # CLEAR CURRENT REPORT NAME         #
        STDNO;                     # BAD RETURN                        #
        END 
      END 
  
  
  
  
  
  
  
  
#----------------------------------------------------------------------#
  
  
      END 
      TERM
