       SPL,L,O
!     NAME:   G1CDJ 
!     SOURCE: 92067-18432 
!     RELOC:  92067-16425 
!     PGMR:   A.M.G.
! 
!  ***************************************************************
!  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  ALL RIGHTS     *
!  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
!  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
!  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
!  ***************************************************************
! 
       NAME G1CDJ(8) "92067-16425 REV.1903 780607"
! 
       LET PRINT                            \SELECTIVE PRINT ROUTINE
                 BE SUBROUTINE,DIRECT 
       LET G1RDF                            \LOCAL READ FROM JOBFILE
                 BE SUBROUTINE
! 
       LET G1OMS,                           \MESSAGE OUTPUT ROUTINE 
           EXEC,                            \WHAT! AGAIN! 
           G1OPN,                           \GASP OPEN FILE ROUTINE 
           READF                            \FILE READ ROUTINE (FMP)
                 BE SUBROUTINE,EXTERNAL 
! 
       LET G1U.G                            \PARSE USER.GROUP ROUTINE 
                 BE FUNCTION,EXTERNAL,DIRECT
! 
       LET G1CUG                            \COMPARE USER.GROUP ROUTINE 
                 BE PSEUDO,EXTERNAL,DIRECT
! 
       LET .CACT                            \ROUTINE TO GET CURRENT ACCT. 
                  BE FUNCTION,EXTERNAL,DIRECT 
       LET G1STM,                           \FORMAT MESSAGE ROUTINE 
           .DFER                            \MOVE THREE WORDS ROUTINE 
                 BE SUBROUTINE,EXTERNAL,DIRECT
! 
       LET G0BUF,                           \BUFFER FOR READ ROUTINE
           G0WD1,                           \WORD 1 OF ABOVE BUFFER 
           G0WD2,                           \WORD 2 OF ABOVE BUFFER 
           G0WD7,                           \WORD 7 OF ABOVE BUFFER 
           G0WD8,                           \WORD 8 OF ABOVE BUFFER 
           G0WD9,                           \WORD 9 OF ABOVE BUFFER 
           G0W15,                           \WORD 15 OF ABOVE BUFFER
           G0TTY,                           \TTY LU 
           G0DCB,                           \DCB FOR FILE ACCESS
           G0RTN,                           \# OF JOBS PRINTED (FOR EXIT) 
           G0JBF                            \JOBFILE REFERENCE FOR OPEN 
                 BE INTEGER,EXTERNAL
! 
       LET DOWN(6) BE INTEGER 
       INITIALIZE DOWN TO 5," SHUT DOWN"
       LET HL,HEAD(10),US(11),SPOOL(3) BE INTEGER 
       INITIALIZE HL,HEAD,US,SPOOL TO       \SET UP THE HEAD
       24,"JO# NAME   STATUS   USER.GROUP            SPOOLS"
       LET USER(3) BE INTEGER 
       INITIALIZE USER TO "USER.G"
       LET NOJO(5) BE INTEGER 
       INITIALIZE NOJO TO 4," NO JOBS"
       LET SPACE BE REAL
       INITIALIZE SPACE TO 1,"  " 
! 
       LET CNWD BE CONSTANT(1100K)
! 
! 
! 
G1CDJ: SUBROUTINE(PBUFR,PCNT,ERR) GLOBAL
       LET PBUFR,PCNT,ERR BE INTEGER
       BEGIN _ 19 
       NAM3_[NAM2_[NAM1_[TYP_[AL_@PBUFR+2]+2]+1]+1]+1 
       ICNWD _ CNWD + G0TTY                 !SET UP I/O DEVICE. 
! 
! 
!      FOR DJ ROUTINE THE FOLLOWING CONVENTIONS HOLD
! 
!      THE JOB RECORD IS PRINTED IF:
! 
!      1) THE COMMAND IS 'DJAL' AND THE JOB NAME MATCHES (IF GIVEN) 
!      OR 
!      2) <USER.GROUP> IS GIVEN AND THE USER MATCHES AND THE JOB NAME MATCHES 
!      OR 
!      3) <USER.GROUP> IS NOT GIVEN AND THE CURRENT USER MATCHES AND THE JOB
!         NAME IF GIVEN MATCHES.
! 
!      NOTE THE THE CURRENT USER IF OUTSIDE OF SESSION IS JOBS OUTSIDE OF SESSION 
!      THE ONLY WAY TO MIX BOTH SESSION AND NON SESSION JOBS IS WITH
!      THE 'DJAL' OPTION.  THE <USER.GROUP> MATCH ROUTINE WILL MATCH '@.@'
!      WITH ANY SESSION USER BUT NOT WITH USERS OUTSIDE OF SESSION. 
! 
! 
!      NOW SET ALL OF THIS UP 
! 
       IF [U_G1U.G()] > 0 THEN[             \IF ERROR IN SUPPLIED <U.G> 
          ERR _ 56;                         \REPORT IT AND
          RETURN]                           !EXIT 
! 
       IF U < 0 THEN[                       \IF NOT SUPPLIED THEN 
          IF [AC _ .CACT()] < 0 THEN AC _ 0]!USE CURRENT USER (0 IF NO SESS)
! 
       U.G_0                                !SET DEFAULT U.G FLAG 
       IF $AL = "AL" THEN GO TO U.GF        !IF "AL" OPTION OR
       IFNOT U THEN[                        \U.G PROVIDED THEN
U.GF:     U.G _ 1]                          !SET THE U.G FLAG 
! 
       IF $AL = "NP" THEN GO TO NXPRT       !IF NP OPTION SKIP PRINT
       CALL EXEC(3,ICNWD,-1)
! 
!      SET UP THE HEAD BASED ON WHAT WE NEED TO PRINT 
! 
       IF U.G THEN[                         \IF FULL HEAD THEN
          CALL .DFER(US,USER);              \MAKE SURE USER IS RIGHT
          HL_24],                           \AND SET THE FULL LENGTH
       ELSE[                                \OTHER WISE SET UP
          CALL .DFER(US,SPOOL);             \THE SHORT HEAD 
          HL_13]
       CALL G1OMS(HL)                       !PRINT THE HEAD 
       CALL G1OMS(SPACE)
       CALL EXEC(3,ICNWD,1) 
NXPRT: CALL G1OPN(G0DCB,ERR,G0JBF)          !OPEN THE JOB FILE
       IF ERR < 0 THEN RETURN 
       CALL G1RDF(17,ERR)?[RETURN]          !GET SPEC RECORD
       ENDR_G0WD1                           !SAVE THE END RECORD
       G0RTN _ 0                            !CLEAR THE RETURN COUNT FLAG
! 
! 
!      IF JOB NUMBER GIVEN THEN ONLY THE GIVEN JOB IS PRINTED 
! 
       IF $TYP = 1 THEN[                    \IF SO THEN 
          JONO _ 18+$NAM1;                  \CACULATE THE NUMBER
          IF JONO > ENDR THEN[              \IF TOO LARGE 
             ERR _ 3;                       \SET THE ERROR AND
             RETURN];                       \EXIT 
          FLAG _ 2;                         \SET THE PROPER FLAG
          CALL PRINT;                       \AND PRINT THE RECORD 
          GO TO ENDJ]                       !GO CLEAN UP AND EXIT 
! 
! 
!      JOBS ARE PRINTED IN THE ORDER IN WHICH THEY WILL EXIT THE SYSTEM 
!      (AS NEAR AS WE CAN TELL) I.E. IN THE FOLLOWING ORDER:
! 
!      ALL JOBS IN "CS" STATUS
!      ALL JOBS IN THE ACTIVE AND WAITING QUQUE 
!      ALL OTHER JOBS  I.E. INPUT, HELD, ECT. 
! 
! 
       FLAG _ 1                             !SET FLAG TO PICK ONLY "CS" JOBS
       FOR JONO _ 19 TO ENDR DO CALL PRINT  !PRINT ALL "CS" JOBS
! 
!      NOW DO THE JOB QUEUE 
! 
       FLAG _ 2                             !SET FLAG TO PICK ANY WE GIVE IT
       AD _ @G0BUF                          !SET ADDRESS OF THE BUFFER
       PTR _ 1                              !INITIALIZE THE Q POINTER 
! 
QPRNT: CR _ (PTR/16) + 1                    !CACULATE THE RECORD NUMBER 
       CAD _ .B. + AD                       !AND OFFSET IN THE RECORD 
       CALL G1RDF(CR,ERR)?[RETURN]          !READ THE Q RECORD
       JONO_[ PTR _ $CAD AND 377K]+17       !GET THE JOB NUMBER 
       IFNOT PTR THEN GO TO QDONE           !IF NONE THEN END OF Q
! 
       CALL PRINT                           !ELSE PRINT THE RECORD
       GO TO QPRNT                          !AND AROUND WE GO 
QDONE:                                      !END OF Q PRINT 
! 
!      NOW DO JOB OF STATUS OTHER THAN THE ABOVE
!      NOTE THAT SINCE WE DID NOT LOCK THE JOBFIL A 
!      JOB CAN GO BY WITH OUT OUR REPORTING IT.  BECAUSE OF THE ORDER 
!      HOWEVER WE SHOULD NOT REPORT THE SAME JOB TWICE (UNLESS OF 
!      COURSE SOME OTHER USER IS HOLDING A JOB) 
! 
       FLAG _ 3                             !SET FLAG TO PRINT OTHERS 
       FOR JONO _ 19 TO ENDR DO CALL PRINT  !PRINT THEM OUT 
! 
!      NOW DO THE CLEAN UP WORK 
! 
ENDJ:  IF $AL = "NP" THEN RETURN;!IF NO PRINT RETURN
       IFNOT G0RTN THEN CALL G1OMS(NOJO)    !IF NO JOBS SAY SO
       CALL G1RDF(17,ERR)?[RETURN]
       IF G0W15 = "D" THEN CALL G1OMS(DOWN) !IF SHUT DOWN SAY SO
       RETURN 
       END
! 
!  PRINT ROUTINE  A LOT OF THE FILTERING OF JOBS GOES ON HERE.
! 
!  CALLING CONVENTIONS: 
! 
!      FLAG = 1  PRINT "CS" ONLY
!      FLAG = 2  PRINT INDEPENDENTLY OF JOB STATUS
!      FLAG = 3  PRINT IF STATUS IS NOT "CS","A",OR "R" 
! 
!      NAM1,NAM2,AND NAM2 POINT AT THE JOB NAME IF $TYP IS 2
! 
!      JONO IS THE JOB RECORD NUMBER (JOB # IS JONO-18) 
! 
!      ACCOUNT FLAGS ARE SET  I.E. U#0 THEN USER.GROUP CHECK TO BE DONE 
!        AND IF NOT THEN AC MUST MATCH JOB ACCOUNT FLAG 
!        IF $AL = "AL" THEN ALL ACCOUNTS ARE TO BE PRINTED. 
! 
!      IN THE CASE OF "AL" OR U > 0 THE ACCOUNT INFO WILL BE
!      PRINTED OTHER WISE IT IS NOT.
! 
PRINT: SUBROUTINE DIRECT
       CALL G1RDF(JONO,ERR)?[RETURN]        !READ THE JOB RECORD
       IF G0BUF < 0 THEN RETURN             !IF NO JOB HERE THEN RETURN 
! 
       IF FLAG = 1 THEN[                    \IF "CS" SCAN THEN
          IF G0WD2 # "CS" THEN RETURN,      \IF NOT CS RETURN 
           ELSE GO TO NAMCK]
! 
       IF FLAG = 2 THEN GO TO NAMCK         !IF NO ST FILTER GO TO NAME CK
! 
       IF G0WD2 = "A" THEN RETURN           !FLAG MUST BE 3 SO DO THE TESTS 
       IF G0WD2 = "R" THEN RETURN           !FLAG MUST BE 3 SO DO THE TESTS 
       IF G0WD2 ="CS" THEN RETURN           !FLAG MUST BE 3 SO DO THE TESTS 
! 
NAMCK: IF $TYP # 2 THEN GO TO U.GTS         !IF NO NAME GO TO U.G TESTS 
! 
       IF G0WD7 # $NAM1 THEN RETURN         !IF NAME DOES NOT MATCH 
       IF G0WD8 # $NAM2 THEN RETURN         !THEN JUST EXIT 
       IF G0WD9 # $NAM3 THEN RETURN 
! 
U.GTS: IF $AL = "AL" THEN[                  \IF AL OPTION 
          G1CUG()_ G0WD1;                   \GET ACCOUNT INFO 
          GO TO PRI]                        !AND THEN GO PRINT IT 
! 
       IFNOT U  THEN[                       \IF USER.GROUP PROVIDED 
          G1CUG(),FAIL _ G0WD1;             \CALL G1CUG TO TEST IT
          IFNOT FAIL THEN GO TO PRI;        \IF OK GO PRINT IT
          RETURN]                           !ELSE RETURN
       IF AC #  G0WD1 THEN RETURN           !IF NOT RIGHT ACCOUNT RETURN
! 
PRI:   CALL G1STM(JONO,U.G)                 !PRINT THE DATUM
       G0RTN_G0RTN+1                        !STEP THE COUNT OF PRINTED
       RETURN                               !RETURN ALL DONE
       END
! 
! 
! 
G1RDF: SUBROUTINE(NUM,ERROR) GLOBAL,FEXIT 
       LET NUM,ERROR BE INTEGER 
       CALL READF(G0DCB,ERROR,G0BUF,16,LEN,NUM) 
       IF ERROR THEN FRETURN
       RETURN 
       END
       END
       END$ 
                                                                                                                                                                                    