*DECK PRINTIT 
USETEXT CCTTEXT 
USETEXT SSTEXT
          PROC PRINTIT(PLINDEX);
  
#**       PRINTIT -  PRINT A LINE                                      #
#                                                                      #
#     CALLING SEQUENCE-                                                #
#         PRINTIT(PLINDEX):                                            #
#                                                                      #
#     GIVEN-                                                           #
#         PLINDEX = INDEX TO PL$ ARRAY                                 #
#         CCTPSQ = TRUE IFF USER SOURCE LINE NUMBERS.                  #
#                    (OUTPUT CONNECTED TO TERMINAL)                    #
#                                                                      #
#     DOES-                                                            #
#         PRINTS THE LINE.                                             #
  
  
          BEGIN 
          ITEM  PLINDEX      I;        # INDEX TO PL$ ARRAY            #
  
  
  
  
*CALL LISTCTL 
  
          XREF
              BEGIN 
              PROC  CBLIST;            # COBOL LISTING ROUTINE         #
              PROC  DBDIAG;            # DEBUG DIAGNOS                 #
              FUNC  DEC          C(10);# INTEGER TO DECIMAL DISPLAY    #
              PROC  INTERCEPTOR;       # ISSUE DIAGNOSTIC              #
              ITEM  NOSHIFT B;     # CBLIST PARAM FOR NO SHIFT OF LINE #
              END 
  
          DEF  DIAGNOS(SEV, NUM, LIN, COL)
#$BEGIN DBDIAG(SEV,NUM,LIN,COL);$END INTERCEPTOR(COL,LIN,NUM-1000,SEV)#;
  
          ARRAY  [0:3]; 
              ITEM  LISTOPTION C(0,0,10) = ["ONSOURCE  ", "ONALLLIST ", 
                                           "OFFSOURCE ", "OFFALLLIST"]; 
  
          ITEM BUF$          C(140);   # SOURCE LINE LISTING BUFFER    #
          ITEM  COL7         C(1);     # COLUMN 7 CHARACTER            #
          ITEM  I            I;        # SCRATCH                       #
          ITEM  K  I;     #SCRATCH# 
          ITEM  LISTWORD  C(10);
          ITEM  TEMP         C(10);     # SCRATCH                      #
CONTROL EJECT;
          PROC  LISTPROC(I);
          ITEM  I;
          SWITCH  LISTCONTROL  ONSOURCE, ONALLLIST, OFFSOURCE,
                               OFFALLLIST;
          BEGIN 
          GOTO  LISTCONTROL[I]; 
ONSOURCE: 
          SRCLISTLINE = PL$LINE[PLINDEX]; 
          SRCLISTFLAG = TRUE; 
          RETURN; 
ONALLLIST:  
          SRCLISTLINE = PL$LINE[PLINDEX]; 
          SRCLISTFLAG = TRUE; 
          RETURN; 
OFFSOURCE:  
          SRCLISTLINE = PL$LINE[PLINDEX] + 1; 
          SRCLISTFLAG = FALSE;
          RETURN; 
OFFALLLIST: 
          SRCLISTLINE = PL$LINE[PLINDEX] + 1; 
          SRCLISTFLAG = FALSE;
          RETURN; 
          END 
CONTROL EJECT;
  
#     IF ILLEGAL COLUMN 7 CHARACTER, DIAGNOSE                          #
  
          TEMP = C<6,10>PL$10CHARS[PLINDEX];
          COL7 = C<0,1>TEMP;
          IF COL7 NQ " "
           AND COL7 NQ "*"
           AND COL7 NQ "-"
           AND COL7 NQ "D"
           AND COL7 NQ "/"  THEN
              BEGIN 
              # (THIS CHARACTER MAY NOT BE USED IN COLUMN 7.           #
              #  A SPACE IS ASSUMED.)                                  #
              DIAGNOS("W", 1005, PL$LINE[PLINDEX], 7);
              END 
          IF COL7 EQ "-"
           AND C<1,4>TEMP NQ "    "  THEN 
              BEGIN 
              IF C<1,1>TEMP NQ " "  THEN
                  I = 8;
              ELSE
              IF C<2,1>TEMP NQ " "  THEN
                  I = 9;
              ELSE
              IF C<3,1>TEMP NQ " "  THEN
                  I = 10; 
              ELSE
                  I = 11; 
              # (THE FIRST NON BLANK CHARACTER AFTER A CONTINUATION    #
              # INDICATOR OCCURS IN THE A AREA. IT IS ACCEPTED ANYWAY) #
              DIAGNOS("W", 1006, PL$LINE[PLINDEX], I);
              END 
  
#     IF NO LISTING IS DESIRED, RETURN                                 #
  
          IF NOT CCTSOURCLIST  THEN 
#***#         RETURN; 
          IF (COL7 EQ "*" OR COL7 EQ "/" OR (COL7 EQ "D" AND
            (CCTDEBUGLINE OR CCTDEBUGMODE)))
            AND C<7,1>PL$10CHARS[PLINDEX] EQ "O" THEN 
              BEGIN 
              FOR I = 7 STEP 1 WHILE
                                C<I,1>PL$10CHARS[PLINDEX] NQ " "
              DO
                  K = I + 1;   # FIND 1ST BLANK  #
              I = K - 7;
              IF I LS 11 THEN 
                  BEGIN 
                  C<0,I>LISTWORD = C<7,I>PL$10CHARS[PLINDEX]; 
                  IF I NQ 10 THEN 
                      C<I,10-I>LISTWORD = " ";
                  FOR I = 0 STEP 1 UNTIL 3 DO 
                      IF LISTWORD EQ LISTOPTION[I] THEN 
                          BEGIN 
                          SOURCELIST = TRUE;
                          LISTPROC(I);
                          END 
                  END 
               END
          IF  PL$LINE[PLINDEX] EQ SRCLISTLINE 
          THEN  SOURCELIST = SRCLISTFLAG; 
          IF  NOT SOURCELIST  THEN RETURN;
          IF PL$NOLIST[PLINDEX]  THEN 
#***#         RETURN; 
  
#     PERHAPS EJECT TO NEW PAGE                                        #
  
          IF COL7 EQ "/"  THEN
              BEGIN 
              CBLIST(LISTCTL"FORCEEJECT");
              END 
  
#     PRINT THE LINE ACCORDING TO THE SPECIFIED FORMAT                 #
  
  
          IF CCTPSQ  THEN 
              BEGIN                    # OUTPUT TO TERMINAL            #
              C<0,90>BUF$ = C<0,90>PL$10CHARS[PLINDEX]; 
              CBLIST(LISTCTL"LINE", BUF$, 90);
              END 
          ELSE
              BEGIN                    # FULL OUTPUT                   #
              DEF  C10  #BUF$#; 
              C10 = "          "; 
              I = PL$LINE[PLINDEX]; 
              IF I NQ 0  THEN 
                  BEGIN 
                  TEMP = DEC(I);
                  C<1,5>C10 = C<0,5>TEMP; 
                  END 
  
              IF PL$FLAG7[PLINDEX]  THEN
                  C<7,1>C10 = "7";               # COLUMN 7 CHANGED    #
              IF PL$FLAGR[PLINDEX]  THEN
                  C<8,1>C10 = "R";               # REPLACEMENT         #
              IF PL$FLAGN[PLINDEX]  THEN
                  C<7,2>C10 = " +";              # NEW LINE            #
              IF PL$FLAGI[PLINDEX]  THEN
                  C<7,2>C10 = "--";              # IGNORED             #
  
              C<10,100>BUF$ = C<0,100>PL$10CHARS[PLINDEX];
  
              NOSHIFT = TRUE;   # SET TO NOT SHIFT PRINT LINES RIGHT #
              CBLIST(LISTCTL"LINE", BUF$, 110); 
              NOSHIFT = FALSE;  # SET TO SHIFT LINES IF NEEDED #
              END 
          END 
          TERM
