*DECK PAGECL
USETEXT DNTEXT
USETEXT RPTEXT
PROC PAGECL;
          BEGIN 
  
          #X# 
          #PAGE CLAUSE RT#
          #THIS ROUTINE#
          #- CHECKS PAGE CLAUSE RULES 6.30.3.2 AND 6.30.3.3 THRU# 
          #6.30.3.7#
          #- IMPLEMENTS PAGE CLAUSE RULE 6.30.4.2#
          #- CALLS IPCT$RT  IF NECESSARY# 
  
          XREF   PROC         IPCT$RT;
  
          ITEM   DIAGNO,
                 DIAGSEV, 
                 T1,
                 PLTPTR,
                 CHARTEMP  C(10); 
  
          #DIAGNOSTIC NUMBERS  DIAGNOSED IN THIS RT#
          DEF    M08          #08#; 
          DEF    M09          #09#; 
          DEF    M10         #10#;
          DEF    M11         #11#;
          DEF    M12         #12#;
          DEF    M13         #13#;
          DEF    M14         #14#;
          DEF    M15         #15#;
          DEF    M16          #16#; 
          DEF    M17          #17#; 
          DEF    M18          #18#; 
          DEF    M19         #19#;
          #A SERIOUS ERROR# 
          DEF    M20         #20#;
          #A SERIOUS ERROR# 
          DEF    M21         #21#;
          #A SERIOUS ERROR# 
          DEF    M22         #22#;
          #A SERIOUS ERROR# 
          #END OF DIAGNOSTIC NUMBERS# 
          ITEM   PREVIOUSVALU,
                 CODEAUXINDX ,
                 PAGEAUXINDX ;
  
  
          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 GETSET
*CALL PLT1
*CALL PLTVALS 
*CALL TABLNAMES 
  
  
  
  
          CONTROL EJECT;
  
          #ROUTINE PROCEDURES -#
  
          #BASIC SOURCE OF INFORMATION IS THE RD-PAGE-ENTRY OF# 
          #THE REPORT-AUX-TABLE -ALSO PART OF THE RD-CODE-ENTRY#
          #WHICH CONTAINS "OVERFLOW" PAGE CLAUSE INFO. BECAUSE# 
          #THERE ARE NOT ENUF BITS FOR ALL PAGE CLAUSE INFO#
          #TO BE CONTAINED IN THE RD PAGE ENTRY.# 
          CONTROL EJECT;
FUNC VALUFUNCTION;
          BEGIN 
          ITEM
          VALUE         I,
          VINDEX       I; 
  
          #INITIALIZE STRING VALUE# 
          VALUE = PLTCNVRT(PLTPTR); 
          #CALCULATES STRING VALUE# 
          IF
              VALUE EQ 0
          THEN
              BEGIN 
              VALUFUNCTION = 0; 
              RETURN; 
              END 
          #INTEGER HAS VALUE OF 0#
          IF
              VALUE LS  PREVIOUSVALU
              #VIOLATION OF 6.30.3  SYNTAX# 
              #RULES 3,4,5,6, OR 7# 
          THEN
              BEGIN 
              VALUFUNCTION = 1; 
              RETURN; 
              END 
          PREVIOUSVALU = VALUE; 
          VALUFUNCTION = 2; 
          RETURN; 
          END #VALUFUNCTION#
          CONTROL EJECT;
PROC CKCL(PLTDSCR,PLTAUX,BITDSCR,MES1,MES2,MES3); 
          BEGIN 
          ITEM   PLTDSCR, 
                 PLTAUX,
                 BITDSCR, 
                 MES1,
                 MES2,
                 MES3;
  
          #CHECK A CLAUSE.  ERROR MES1 IF LITERAL IS SIGNED, MES2 IF #
          #LITERAL IS 0, MES3 IF LITERAL IS LT PREVIOUS LITERAL.  # 
  
          IF RWGET(BITDSCR,PAGEAUXINDX) EQ 0
          THEN
              RETURN;     # CLAUSE DID NOT OCCUR #
  
          PLTPTR = RWGET(PLTDSCR,PLTAUX); 
          IF GETQ(PL$TYPE,PLT$,PLTPTR) NQ PLTUNSGNILIT
          THEN
              DIAGNO = MES1;
          ELSE
              BEGIN 
              T1 = VALUFUNCTION;
              IF T1 EQ 2
              THEN
                  RETURN;     #ITS ALL OK # 
              IF T1 EQ 0
              THEN
                  DIAGNO = MES2;    #VALUE IS 0#
              ELSE
                  DIAGNO = MES3;
              END 
  
          IF DIAGNO EQ 0
          THEN
              RETURN;    #MES1-3 MITE BE 0 IN SOME CASES# 
          INTERCEPT(0,GETQ(DN$LINE,DNAT$,DNATPOINTER),DIAGNO,DIAGSEV);
  
          #SOMETHING IS WRONG SO DELETE PLTPTR #
  
          RWSET(PLTDSCR,PLTAUX,0);
          RETURN; 
          END #CKCL#
          CONTROL EJECT;
  
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  # * #   EPTRACE("PAGECL ")                                       # * #
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  
          #MAINLINE.  IF NO PAGE LIMIT CLAUSE, JUST RETURN. # 
          PAGEAUXINDX = 1 + RP$AUXPTR(DNATPOINTER); 
          IF RWGET(PAGELIMITBIT,PAGEAUXINDX) EQ 0 
          THEN
              GOTO ENDPAGECLAUS;
  
          PREVIOUSVALU = 0; 
          CODEAUXINDX = PAGEAUXINDX - 1;
          DIAGSEV = TRIVIAL;     #FIRST FEW ERRORS ARE TRIVIAL# 
  
          #CHECK HEADING, FIRST DETAIL, LAST DETAIL, FOOTING, AND PAGE #
          #LIMIT INTEGERS ACCORDING TO SYNTAX RULES.                   #
  
          CKCL(HEADINGPLT,CODEAUXINDX,HEADINGBIT,M08,M09,0);
          CKCL(F1STDTAILPLT,CODEAUXINDX,FIRDETAILBIT,M10,M11,M12);
          CKCL(LASTDTAILPLT,PAGEAUXINDX,LASTDTAILBIT,M13,M14,M15);
          CKCL(FOOTINGPLT,PAGEAUXINDX,FOOTINGBIT,M16,M17,M18);
  
          # FROM NOW ON, ERRORS ARE DEFINITION TYPES #
          # SET DIAGNO TO 0 SO WE CAN TELL IF PAGE-  #
          # LIMIT CLAUSE WAS OK OR NO.               #
  
          DIAGSEV = DEFINITION; 
          DIAGNO = 0; 
          CKCL(PAGELIMITPLT,PAGEAUXINDX,PAGELIMITBIT,M19,M20,M21);
          IF DIAGNO NQ 0
          THEN
              BEGIN 
              INHIBITABLDF = 1; 
              GOTO ENDPAGECLAUS;
              END 
          IF PREVIOUSVALU GQ 1000 
          THEN
              # ERROR, CAN BE 3 DIGITS MAX. # 
  
              BEGIN 
              INTERCEPT(0,GETQ(DN$LINE,DNAT$,DNATPOINTER),M22,
                      DEFINITION);
              GOTO ENDPAGECLAUS;
              END 
  
  
          #SUBSTITUTE IMPLICIT VALUES ACCORDING TO# 
          #RULE 6.30.4.2# 
          IF RWGET(HEADINGPLT,CODEAUXINDX) EQ 0 
          THEN
              BEGIN 
              #BUILD PLT ENTRY OF VALUE INTEGER  1# 
              SET(PL$LENGTH,PLT$,RPPLTOFFSET,1);
              SET(PL$TYPE,PLT$,RPPLTOFFSET,PLTUNSGNILIT); 
              SET(PL$LINE,PLT$,RPPLTOFFSET,0);
              SET(PL$COLUMN,PLT$,RPPLTOFFSET,0);
              CHARTEMP = "1"; 
              SETPLST(RPPLTOFFSET,LOC(CHARTEMP)); 
              RWSET(HEADINGPLT,CODEAUXINDX,RPPLTOFFSET);
              RPPLTOFFSET = RPPLTOFFSET + 1;
  
              GOTO CHECKFD; 
              END 
CHECKFD:  
          IF RWGET(F1STDTAILPLT,CODEAUXINDX)  EQ  0 
          THEN
              BEGIN 
              $TEMP$ = RWGET(HEADINGPLT,CODEAUXINDX); 
              RWSET(F1STDTAILPLT,CODEAUXINDX,$TEMP$); 
              END 
          IF RWGET(LASTDTAILPLT,PAGEAUXINDX) EQ 0 
              AND 
              RWGET(FOOTINGPLT,PAGEAUXINDX)  EQ  0
          THEN
              BEGIN 
              $TEMP$ = RWGET(PAGELIMITPLT,PAGEAUXINDX); 
              RWSET(LASTDTAILPLT,PAGEAUXINDX,$TEMP$); 
              $TEMP$ = RWGET(PAGELIMITPLT,PAGEAUXINDX); 
              RWSET(FOOTINGPLT,PAGEAUXINDX,$TEMP$); 
              GOTO  CALLIPCTR;
              END 
          IF RWGET(FOOTINGPLT,PAGEAUXINDX)  NQ  0 
              AND 
              RWGET(LASTDTAILPLT,PAGEAUXINDX)  EQ  0
          THEN
              BEGIN 
              $TEMP$ = RWGET(FOOTINGPLT,PAGEAUXINDX); 
              RWSET(LASTDTAILPLT,PAGEAUXINDX,$TEMP$); 
              $TEMP$ = RWGET(FOOTINGPLT,PAGEAUXINDX); 
              RWSET(LASTDTAILPLT,PAGEAUXINDX,$TEMP$); 
              END 
          IF RWGET(LASTDTAILPLT,PAGEAUXINDX) NQ   0 
              AND 
              RWGET(FOOTINGPLT,PAGEAUXINDX)  EQ  0
          THEN
              BEGIN 
              $TEMP$ = RWGET(LASTDTAILPLT,PAGEAUXINDX); 
              RWSET(FOOTINGPLT,PAGEAUXINDX,$TEMP$); 
              END 
          #A WORKABLE PAGE CLAUSE EXISTS  SO WILL#
          #BUILD IF-PAGE-CLAUSE-TABLE#
CALLIPCTR:  
          IF NOFDFLAG EQ 0
          THEN
              IPCT$RT;
ENDPAGECLAUS: 
  
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  # * #   EXTRACE("PAGECL ")                                       # * #
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  
          END #PAGECL#
          TERM
