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) IS GIVEN AND THE USER MATCHES AND THE JOB NAME MATCHES ! OR ! 3) 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 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 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$