ASMB,Q,C  G1CDS  DISPLAY SPOOL STATUS 
      HED G1CDS 
*     NAME:   G1CDS G1CCS 
*     SOURCE: 92067-18435 
*     RELOC:  92067-16425 
*     PGMR:   G.A.A.,S.K. 
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.  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.       *
*  ***************************************************************
* 
      NAM G1CDS,8 92067-16425 REV.2013 800102 
* 
      ENT G1CDS,G1CCS 
      ENT G1U.G,G1CUG,G0U.G,G0UG1,G1FLU,G1SLU 
      ENT G0SWD,G1OLK,G0JRN 
* 
      EXT .ENTR,G1OMS,KCVT,CNUMD,$SMVE,SESSN,$LUAV,PARSN
      EXT .MVW,.DRCT,.CACT,.UNAM,IPRSN
      EXT G0DCB,G0BUF,G0WD1,G0WD2,G0WD3,G0WD4 
      EXT G0WD8,G0WD9,G0W10,G0W11,G0W15 
      EXT G0SPF,G0JBF,G0CHR,G0RTN,G0ACT 
      EXT G1OPN,READF,WRITF,POST,RNRQ 
      EXT EXEC,G1KLG,G1CAP,G1CHK
* 
A     EQU 0 
B     EQU 1 
XEQT  EQU 1717B 
      SUP 
* 
PBUF1 NOP 
PLEN1 NOP 
IERR  NOP 
* 
G1CDS NOP 
      JSB .ENTR     FETCH PARAMETERS
       DEF PBUF1
      CLA 
      STA SPLU      INITIALIZE SPOOL LU#
      STA G0RTN     SET NONE PRINTED FLAG 
      LDA DBLNK 
      STA SPSTM+3   FILL LU# WITH BLANKS
      LDB PBUF1     GET ADDR OF PARAM LIST
      ADB D2        POINT TO SECOND WORD OF OPCODE
      LDA B,I 
      CLE 
      CPA "AL"      DSAL? 
      JMP STWHO     THEN INDICATE SO IN WHO? FLAG 
      CPA DBLNK     DS? 
      CCE,RSS 
      CPA "NP"      NO PRINT? 
      CCE,RSS       TREAT DSNP LIKE DS
      JMP BADCM     BAD COMMAND 
* 
STWHO CLA,SEZ,INA   IF E REG SET WHO? IS -1 
      CCA 
      STA WHO?      -1=CURRENT SESS, 1=ALL SPOOLS, 0=USER.GROUP 
      CLA,INA 
      CPA PLEN1,I   SEE IF MORE THAN 1 PARM 
      JMP BLDUG        NO, DEFAULT TO ALL LUS 
* 
      ADB D2        SKIP "DS" COMMAND 
      LDA B,I       GET LU IF ANY GIVEN 
      SZA            IF NULL OR NUMERIC 
      CPA D1         THEN OK
      INB,RSS 
      JMP ILPM1     ILLEGAL PARAMETER 
      LDA B,I       SET REQUESTED LU #
      STA TEMP1     SAVE IT 
      STA SPLU
      LDA SPLU      YES, FIND TRUE OUTSPOOL LU
      SZA,RSS       OUTLU DEFINED?
      JMP BLDUG     NO
      JSB G1SLU     YES 
      SZA           DEFINED?
      SSA           IN SESSION? 
      JMP EXIT      NO
* 
      STA SPLU
BLDUG LDA WHO?      IS ID DSAL? 
      CPA D1
      JMP NOPR1     YES, SKIP CHECK FOR USER.GROUP
      JSB G1U.G     BUILD USER .GROUP TABLE 
      SSA           USER .GROUP DEFINED?
      JMP GTAC#     NO
      SZA           ERROR?
      JMP ILPM1     YES, THEN ILLEGAL PARAMETER 
      STA WHO?      INDICATE USER.GROUP TO MATCH
      JMP NOPR1 
* 
GTAC# JSB .CACT     GET ACCOUNT # OF CURRENT SESSION
      SSA           SESSION DEFINED?
      CLA           NO, THEN ACCOUNT # IS 0 
      STA ACCT# 
* 
NOPR1 JSB G1OPN       OPEN SPLCON 
       DEF *+4       NO NEED TO LOCK RN 
       DEF G0DCB     SO SPOOL SYSTEM CAN
       DEF IERR,I    RUN FASTER 
       DEF G0SPF
      SSA 
      JMP EXIT1     EXIT IF ERROR 
      CLA,INA       READ 1ST REC
      JSB RD
      LDA G0BUF     GET THE RN NUMBER 
      STA G0JRN     AND SAVE IT 
* 
      LDA G0WD1     GET #SPOOL CONTROL RECS 
      CMA,INA,SZA,RSS 
      JMP DSNOS     NO SPOOLS 
* 
      STA RCONT     SAVE THE COUNT
      LDA G0WD3     GET RECORD NUMBER OF
      STA RCNO      FIRST CONTROL RECORD
      LDB D20 
      LDA WHO?
      SSA,RSS       U.G GOING TO BE PRINTED 
      LDB D26 
      STB SPSH2     SET THE LENGTH FOR HEADING
      JSB G1OMS     SEND HEAD 
      DEF *+2 
      DEF SPSH2 
* 
      JSB G1OMS     SEND A SPACE
      DEF *+2 
      DEF SPACE 
* 
      LDA M31       BLANK THE SPOOL STATUS
      STA TEMP      SAVE NEGATIVE COUNTER 
      LDA DBLNK     "  "
      LDB ASPST 
CLRLP STA B,I 
      INB 
      ISZ TEMP      INCREMENT NEGATIVE COUNTER
      JMP CLRLP 
* 
* 
GTSLU LDA RCNO      SET TO READ THE RECORD
      JSB RD        READ IT 
CHCKN LDA G0BUF     GET USAGE FLAG
      SSA           IF NOT IN USE 
      JMP GTNRC     GO GET THE NEXT ONE 
* 
* 
PURG? LDA G0W15     GET OUTSPOOL LU 
      AND B377
      STA OUTLU 
      JSB G1KLG     GO SCAN THE $LUAV FOR 
      DEF RCNO      THIS RECORD 
      SZA           IF SOME ENTRIES OK SO 
      JMP NOPU      JUST CONTINUE 
* 
      JSB CKPU      CHECK FURTHER 
      JMP CHCKN     LOOK OK NOW 
* 
      JSB EXEC      CALL JOB TO SEE IF IT OWNS IT 
      DEF *+4 
      DEF D9        DON'T WAIT(IF BUSY THEN NOT HIS)
      DEF JOB 
      DEF MD1       SEND -1 TO JUST CLEAN UP
* 
      JSB CKPU      OK NOW??
      JMP CHCKN     YES GO PROCESS
* 
      LDA OUTLU     GET OUTSPOOL LU 
      SZA,RSS       DEFINED?
      JMP KILFL     NO, THEN JUST KILL SPOOL FILE 
* 
      LDA G0W10     GET STATUS WORD 
      CPA "W"       WAIT STATUS?
      JMP RDRC1     READ THE FIRST RECORD IN SPLCON 
* 
      CPA "H"       IF HOLD THEN REMOVE HO BIT
      JMP CLRHO 
* 
      JMP NOPU      IF ACTIVE OR ACTIVE HELD DO NOT PURGE 
* 
RDRC1 CLA,INA 
      JSB RD        READ RECORD # 1 
      LDA M10       - (MAX POSSIBLE OUTSPOOL LU'S)
      STA TEMP      USE AS COUNTER
      LDA D9        START RECORD FOR OUTSPOOL LU QUEUE
      STA QRCNO 
      LDA AG0BF 
      ADA D6        POINT TO FIRST OUTSPOOL LU #
QLOOP LDB A,I 
      CPB OUTLU     FOUND IT? 
      JMP LUFND     YES 
* 
      LDB QRCNO     POINT TO NEXT OUTSPOOL LU'S QUEUE 
      ADB D8
      STB QRCNO 
      INA 
      ISZ TEMP
      JMP QLOOP 
* 
      JMP KILFL     LU NOT FOUND, JUST KILL SPOOL FILE
* 
LUFND LDA M8        GET READY TO READ THE OUTSPOOL QUEUE
      STA TEMP
      LDA QRCNO     START REC# OF OUTSPOOL QUEUE'S
      STA NORC
      LDB AG0BF     START OF BUFFER TO HOLD QUEUE 
      STB TEMP3 
READQ JSB READF     READ A RECORD FROM THE OUTSPOOL QUEUE 
      DEF *+7 
      DEF G0DCB 
      DEF IERR,I    ERROR 
      DEF TEMP3,I   BUFFER ADDRESS
      DEF D16       RECORD LENGTH 
      DEF TEMP2     # OF WORDS ACTUALLY READ
      DEF NORC      RECORD # TO BE READ 
      SSA           ERROR?
      JMP EXIT1     YES 
* 
      ISZ NORC      READ NEXT REC IN QUEUE
      LDB TEMP3 
      ADB D16       INCREMENT BUFFER ADDRESS
      STB TEMP3 
      ISZ TEMP
      JMP READQ     NOT DONE YET
* 
      LDA G0WD1     # OF ENTRIES IN THE QUEUE 
      SZA,RSS       QUEUE EMPTY?
      JMP HOLD      YES, THEN CHANGE TO HOLD STATUS 
* 
      CMA,INA       NEGATIVE
      STA TEMP      # OF ENTRIES IN QUEUE FOR A COUNTER 
      LDA AG0BF 
      ADA D2        POINT TO FIRST ENTRY IN QUEUE 
INQ?  LDB A,I 
      CPB RCNO      IN THIS THE SPOOL FILE ENTRY? 
      JMP NOPU0     YES, DO NOT PURGE SPOOL FILE
* 
      ADA D2        POINT TO NEXT ENTRY IN QUEUE
      ISZ TEMP      MORE ENTRIES? 
      JMP INQ?      YES, TRY AGAIN
* 
*   CHANGE SPOOL FILE STATUS TO HOLD
* 
HOLD  LDA RCNO      SPOOL FILE RCORD #
      JSB RD        READ THE SPLCON RECORD
      LDA "H"       SET STATUS TO HOLD
      STA G0W10 
      LDA "W" 
      STA OSTAT     SET THE OLD STATUS
CLRHO LDA G0WD8     GET THE DISPOSITION FLAGS 
      RAR,CLE,RAR   CLEAR THE HOLD BIT
      ELA,RAL 
      STA G0WD8 
      JSB WRITF     WRITE THE SPLCON RECORD 
      DEF *+6 
      DEF G0DCB 
      DEF IERR,I
AG0BF DEF G0BUF+0   DIRECT ADDRESS FOR BUFFER 
      DEF D16 
      DEF RCNO
      SSA           ERROR?
      JMP EXIT1     YES, THEN QUIT
* 
      JSB UNLOK     UNLOCK RN FOR SPLCON
      NOP 
      LDB D14       CALL SMP TO CHANGE STATUS 
      JSB SMPR
      JMP NOSMP     SMP CANNOT BE SCHDULED
* 
      JMP NOPU      DO NOT PURGE THE FILE 
* 
KILFL JSB EXEC      NO CALL SMP TO KILL IT
      DEF *+5 
      DEF S23       WAIT FOR IT 
      DEF SMP 
      DEF D13       KILL CODE 
      DEF RCNO      THIS IS THE BAD GUY 
* 
      JMP NOSMP     SMP NOT FOUND 
* 
      JMP GTNRC     GET THE NEXT RECORD 
* 
NOSMP LDA MD48      SMP CANNOT BE SCHEDULED 
      JMP EXIT1     GET OUT 
* 
NOPU0 LDA RCNO      READ THE SPOOL RECORD 
      JSB RD
* 
NOPU  LDB SPLU      GET THE REQUEST LU
      SZB           IF NO REQUEST LU
      CPB OUTLU     OR THIS IS IT 
      RSS             THEN DISPLAY STATUS 
      JMP GTNRC     ELSE SKIP TO NEXT RC
* 
      JSB CNUMD     PREPARE HEADING 
       DEF *+3       BY CONVERTING LU # 
       DEF OUTLU
       DEF TEMP      ADDRESS FOR CONVERTED #
      LDB TEMP+2
      CPB AB0       IF RESULT IS ZERO 
      LDB ADM       GET "--"
      LDA TEMP+1
      DST SPSTM+5 
      LDA G0W15     GET SYSTEM OUTSPOOL LU
      AND B377
      CMA,INA,SZA,RSS 
      JMP STMNS 
* 
      JSB G1SLU     FIND CORRESPONDING SESSION LU 
      SZA 
      SSA           DEFINED?
      JMP STMNS     NO
      STA TEMP      YES, SAVE 
      JSB KCVT      CONVERT 
      DEF *+2 
      DEF TEMP
      RSS 
STMNS LDA ADM 
      STA SPSTM+3   SET UP LU IN BUFFER 
* 
      JSB CNUMD     CONVERT PRIORITY TO ASCII 
      DEF *+3 
      DEF G0WD9 
      DEF SPSTM+11  STATUS MESSAGE
* 
      LDA G0WD2     MOVE NAM1,NAM2
      STA SPSTM+8 
      LDA G0WD3     MOVE NAM3,NAM4
      STA SPSTM+9 
      LDA G0WD4     MOVE NAM5,NAM6
      STA SPSTM+10
      LDA G0W10     PICK UP SPOOL STATUS
      AND B377       FROM WORD 10 
      CPA G0W10     IF SAME 
      IOR B20K       MERGE IN BLANK 
      IOR G0W10     IF NOT MIRGE IN HIGH CHAR TOO 
      CPA B20K      IF UPPER BLANK ONLY 
      LDA ADM       USE "--"
      STA SPSTM+18
* 
      LDA G0W11 
      SSA,RSS       IN BATCH? 
      JMP NOTBA     NO
      ELA,CLE,ERA   IN BATCH , CLEAR SIGN BIT 
      STA G0W11     SAVE
      ADA MD18      GET JOB # 
      STA TEMP
      JSB KCVT      CONVERT TO ASCII FOR PRINTING 
      DEF *+2 
      DEF TEMP
      STA SPSTM+16
* 
      JSB GTACT     GET ACCOUNT # 
      SSA           ERROR?
      JMP EXIT1     YES 
* 
      JMP DECID 
* 
NOTBA LDB ADM       INSERT -- 
      STB SPSTM+16    IN SPOOL STATUS BUFFER
* 
DECID LDB WHO?
      SSB,RSS 
      JMP CMPUG     COMPARE USER.GROUP
* 
      LDA D19       SET SPOOL STATUS MESSAGE TO PRINT 
      STA SPSTM     A SHORT MESSAGE 
      LDA G0W11     GET ACCOUNT # 
      CPA ACCT#     SAME AS THAT FOR CURRENT SESSION? 
      JMP PRNT      YES, THEN PRINT 
      JMP GTNRC     NO, GET NEXT RECORD 
* 
CMPUG LDB D40       # OF CHARS IN LONG MESSAGE
      STB SPSTM 
      LDA G0W11     GET ACCT# 
      JSB G1CUG     COMPARE USER.GROUP
      LDB WHO?
      CPB D1        ALL SPOOLS? 
      JMP CHKSE     YES, THEN CHECK IF IN SESSION 
      SSA           COMPARES? 
      JMP GTNRC     NO, GET NEXT RECORD 
      JMP MVU.G 
* 
CHKSE LDA G0W11     GET ACCT #
      SZA           IN SESSION? 
      JMP MVU.G     YES, MOVE USER.GROUP
      LDA D19       NO, PRINT SHORT MESSAGE 
      STA SPSTM 
      JMP PRNT
* 
MVU.G JSB IPRSN     MOVE THE USER.GROUP INTO MESSAGE BUFFER 
      DEF *+4 
      DEF G0UG1     11 WORD SOURCE TABLE
ASPST DEF SPSTM+1 
      DEF SPSTM     CHARACTER OFFSET
      LDA SPSTM     SET SPOOL STATUS MESSAGE LENGTH TO
      CMA,INA 
      STA SPSTM       PRINT LONG MESSAGE
* 
PRNT  JSB G1OMS     PRINT SPOOL STATUS MESSAGE
       DEF *+2
       DEF SPSTM
* 
      ISZ G0RTN     COUNT THE PRINTED SPOOLS
* 
GTNRC ISZ RCNO      STEP THE RECORD NUMBER
      ISZ RCONT     BUMP RC COUNT 
      JMP GTSLU 
* 
EXIT  LDA G0RTN     IF NONE PRINTED 
      SZA,RSS       THEN SO 
      JSB NOSP      STATE 
      LDA D3        READ SPLCON REC #3
      JSB RD
      LDA G0BUF     CHECK IF SHUT DOWN
      CPA "D"        IS IN EFFECT 
      RSS 
      JMP DSDN       NO, NOT DOWN 
      JSB G1OMS      YES, PRINT "SHUT DOWN" 
       DEF *+2
       DEF DOWN 
* 
DSDN  CLA 
      LDB SPLU      IF NO LU SPECIFIED
      SZB,RSS        THEN NO ERROR
      JMP EXIT1      IF CAN'T FIND ANY
      LDB SPSTM+3   GET LU# 
      CPB DBLNK      STILL BLANKS?
      LDA D6        IF NO LU FOUND, ERR 6 
EXIT1 STA IERR,I
      JMP G1CDS,I   RETURN
* 
BADCM LDA D5
      JMP EXIT1     BAD COMMAND ERROR 
* 
ILPM1 LDA D56       ILLEGAL PARAMETER 
      JMP EXIT1 
* 
DSNOS JSB NOSP      PRINT "NO SPOOLS" 
      JMP DSDN       DONE 
* 
NOSP  NOP 
      JSB G1OMS     SEND A SPACE
      DEF *+2 
      DEF SPACE     FIRST 
      JSB G1OMS     PRINT NO SPOOLS MESSAGE 
       DEF *+2
       DEF NOSPM
      JMP NOSP,I
* 
* 
ADM   ASC 1,--
AB0   ASC 1, 0
"NP"  ASC 1,NP
"AL"  ASC 1,AL
WHO?  NOP 
ACCT# NOP 
OUTLU NOP 
M10   DEC -10 
QRCNO NOP 
M8    DEC -8
D8    DEC 8 
D40   DEC 40
M31   DEC -31 
D20   DEC 20
D19   DEC 19
D26   DEC 26
D2    DEC 2 
B377  OCT 377 
* 
RD    NOP           READ A RECORD FROM THE CURRENT FILE 
      STA NORC      SET THE RECORD NUMBER 
      JSB READF     GO READ IT
      DEF *+7 
      DEF G0DCB 
      DEF IERR,I
      DEF G0BUF 
      DEF D16 
      DEF TEMP
      DEF NORC
      JMP RD,I      RETURN
* 
NORC  NOP 
RCNO  NOP 
RCONT NOP 
B77   OCT 77
LU#   NOP 
LUFLG NOP 
ZERO  DEC 0 
SST   BSS 71
D71   DEC 71
* 
* 
*  GTACT - ROUTINE GETS ACCOUNT # FROM JOB FILE RECORD
*            G0W11 MUST CONTAIN THE JOB RECORD #
*   CALLING SEQUENCE:  JSB GTACT
*   RETURNS         :  A REG = ACCT # 
*                            = 0 IF NOT IN SESSION
*                            = -ERROR # 
* 
* 
GTACT NOP 
      JSB G1OPN 
      DEF *+4 
      DEF G0DCB 
      DEF IERR,I
      DEF G0JBF     OPEN JOBFIL 
      SSA           ERRORS? 
      JMP GTACT,I   YES 
      LDA G0W11     GET JOB RECORD# 
      JSB RD        READ THE JOB RECORD 
      SSA           ERRORS? 
      JMP GTACT,I   RETURN
      LDA G0WD1     GET DIRECTORY ENTRY # FOR SPOOL FILE
      STA G0W11     SAVE IT 
      JSB G1OPN     OPEN SPOOL FILE 
      DEF *+4 
      DEF G0DCB 
      DEF IERR,I
      DEF G0SPF 
      SSA,RSS       ERROR?
      LDA G0W11     NO, RETURN WITH ACCT# 
      JMP GTACT,I   RETURN
* 
*  G1SLU - ROUTINE TO FIND SESSION WORD OF CURRENT USER 
*          AND CALL G1FLU TO FIND SESSION OR SYSTEM LU
* 
*  CALLING SEQUENCE:  A REG = SESSION LU
*                           OR -(SYSTEM LU) 
*                     JSB G1SLU 
*  RETURNS:           A REG = -1 IF NOT IN SESSION
*                           =  0 IF LU NOT FOUND IN SST 
*                           =  SESSION OR SYSTEM LU 
*                     B REG =  OFFSET FOR LU ENTRY IN SST IF
*                                LU WAS FOUND IN SST
*                           =  MEANINGLESS OTHERWISE
* 
* 
G1SLU NOP 
      STA LUFLG     SAVE THE A REG FOR NOW
      JSB SESSN     GET SESSION WORD
      DEF *+2 
      DEF XEQT      SMP'S ID SEGMENT ADDRESS
      STB G0SWD     SAVE THE SESSION WORD 
      CCA,SEZ       IN SESSION? 
      JMP G1SLU,I   NO, THEN RETURN 
* 
      LDA LUFLG     YES, THEN CALL G1FLU TO FIND
      JSB G1FLU       CORRESPONDING LU IN SST 
      JMP G1SLU,I   RETURN
* 
G0SWD NOP 
* 
* 
* 
*  G1FLU - ROUTINE TO FIND SESSION LU CORRESPONDING TO
*          GIVEN SYSTEM OR SESSION LU 
*  CALLING SEQUENCE:  G0SWD IS ASSUMED TO HAVE THE SESSION WORD 
*                     A REG = SESSION LU
*                           OR -(SYSTEM LU) 
*                     JSB G1FLU 
*  RETURNS:           A REG =  0 IF LU NOT FOUND IN SST 
*                           = SESSION OR SYSTEM LU OTHERWISE
*                     B REG = IF LU FOUND IN SST, OFFSET TO THE 
*                                LU ENTRY FROM SST LENGTH WORD
*                           = IF LU NOT FOUND, MEANINGLESS
* 
*  NOTE:  IF GIVEN LU IS A SESSION LU, THEN CORRESPONDING SYSTEM LU 
*         WILL BE A NON-SPOOL LU
* 
* 
* 
G1FLU NOP 
      CLB,CLE 
      SSA 
      CMA,CCE,INA 
      STA LU#       SAVE LU # 
      SEZ           SET FLAG TO INDICATE WHICH LU TO LOOK FOR 
      CCB           IF FLAG = -1 THEN SYSTEM LU IS GIVEN
      STB LUFLG 
      JSB $SMVE     READ SST
      DEF *+6 
      DEF D1
      DEF G0SWD     SESSION WORD
      DEF ZERO      OFFSET FROM LENGTH WORD OF SST
ASST  DEF SST 
      DEF D71       # OF WORDS TO READ
* 
      LDA SST 
      STA TEMP      NEGATIVE LENGTH 
      LDA ASST
      INA 
      STA TEMP1     POINTER INTO SST
      LDB LUFLG 
SSTLP LDA TEMP1,I   GET AN ENTRY FROM SST 
      SSB           GIVEN SYSTEM LU?
      ALF,ALF       YES, THEN BRING SYS LU IN LOW HALF
      INA 
      AND B377
      CPA LU#       SAME AS LU # SPECIFIED? 
      JMP FNDLU 
ENSST ISZ TEMP1 
      ISZ TEMP      INCREMENT NEGATIVE LENGTH 
      JMP SSTLP 
      CLA           DID NOT FIND LU ENTRY IN SST
      JMP G1FLU,I    RETURN 
* 
FNDLU LDA SST       GET THE NEGATIVE LENGTH OF SST
      CMA,INA 
      ADA TEMP      A REG HAS OFFSET INTO SST FOR THIS ENTRY
      INA 
      STA FTMP2     SAVE THE OFFSET VALUE FOR NOW 
      LDA TEMP1,I 
      SSB,RSS       SYSTEM LU TO FIND FROM SST? 
      ALF,ALF       YES 
      INA 
      AND B377
      SSB 
      JMP FLUEX      RETURN 
* 
      STA TEMP2     SAVE THIS SYSTEM LU#
      JSB .DRCT     GET DIRECT ADDRESS FOR $LUAV
      DEF $LUAV 
      STA FTEMP     SAVE THIS ADDRESS 
      LDA A,I 
      SZA,RSS       END OF $LUAV TABLE? 
      JMP LUEXT     YES, SYSTEM LU NOT A SPOOL LU 
      STA FTMP1     SAVE NEGATIVE LENGTH WORD 
LUAV  ISZ FTEMP     LOOK AT NEXT ENTRY
      LDA FTEMP,I 
      AND B377
      CPA TEMP2     SAME AS LU # FOUND? 
      JMP ENSST     YES, THEN LOOK FOR ANOTHER ENTRY IN SST 
      ISZ FTEMP     POINT TO SECOND WORD OF ENTRY IN LUAV 
      ISZ FTMP1 
      JMP LUAV      LOOK AT NEXT ENTRY IN $LUAV 
LUEXT LDA TEMP2     FOUND THE SYSTEM LU# FOR OUTLU
FLUEX LDB FTMP2     OFFSET TO THE LU ENTRY
      JMP G1FLU,I    RETURN 
* 
FTEMP NOP 
FTMP1 NOP 
FTMP2 NOP 
* 
* 
      HED ROUTINE TO PARSE USER.GROUP FROM RUN/COMMAND STRING 
*   CALLING SEQUENCE: 
*      CALL G1U.G 
*      RETURNS:    A REG =  -1 = USER.GROUP NOT SPECIFIED 
*                            0 = O.K. 
*                            1 = NAME TOO LONG
*                            2 = INVALID CHARACTER(S) IN NAME 
* 
* 
*  THE FORMAT OF THE 11 WORD G0U.G TABLE IS:
*      WORD  1:    BITS 0-7   = CHARS IN GROUP NAME 
*                  BITS 8-15  = CHARS IN USER NAME
*      WORDS 2-6:  USER NAME,  PADDED WITH BLANKS 
*      WORDS 7-11: GROUP NAME, PADDED WITH BLANKS 
* 
* 
G0U.G BSS 11
* 
* 
G1U.G NOP 
      LDA G0CHR     # OF CHARACTERS IN STRING 
      SSA           RUN STRING? 
      JMP RUNST     YES 
      CMA,INA       NO, COMMAND STRING
      LDB N2        DISCARD FIRST 2 COMMAS
      RSS 
RUNST LDB N4        RUN STRING -- DISCARD FIRST 4 COMMAS
      STB TEMP2 
      STA TEMP      CHARACTER COUNT 
      CMA,INA       POSITIVE # CHARS IN STRING
      STA TEMP1 
      LDA D2        INITIALIZE TO NEXT CHAR POSITION
      STA G1CUG     TEMP LOC FOR NOW
      LDA AGBUF 
      STA TEMP3 
CHRLP LDA TEMP3,I   GET A WORD FROM THE STRING
      ALF,ALF 
      JSB COMA?     IS IT A COMMA?
      LDA TEMP3,I   GET THE SAME WORD AND 
      JSB COMA?       TEST THE LOWER BYTE FOR A COMA
      ISZ TEMP3     POINT TO NEXT WORD IN STRING
      JMP CHRLP 
* 
* 
COMA? NOP 
      AND B377      GET LOW BYTE OF WORD
      CPA COMMA     COMMA?
      ISZ TEMP2     YES, INCREMENT # OF COMAS TO SKIP 
      RSS 
      JMP PRSUG     USER.GROUP INFO NEXT IN STRING
      ISZ G1CUG     ADVANCE CHAR POSITION 
      ISZ TEMP      ADVANCE CHARACTER COUNT 
      JMP COMA?,I   RETURN
      CCA           -1 FOR USER.GROUP NOT SPECIFIED 
      JMP G1U.G,I   RETURN
* 
*  PARSE USER.GROUP INFORMATION 
* 
PRSUG JSB PARSN     ROUTINE TO PARSE USER.GROUP 
      DEF *+6 
AG0UG DEF G0U.G     TABLE ADDRESS FOR PARSED INFO 
AGBUF DEF G0BUF+0   START OF STRING 
      DEF TEMP1     # OF CHARACTERS IN STRING 
      DEF G1CUG     POSITION TO START SCANNING IN STRING
      DEF TEMP2     ERROR RETURN
* 
      LDA G0U.G     GET FIRST WORD OF PARSED STRING 
      AND B377      GET # OF CHARS IN GROUP 
      SZA           GROUP WAS SPECIFIED?
      JMP EXGUG     YES, RETURN 
      LDA G0U.G 
      IOR D7        INSERT 7 CHARS FOR GROUP
      STA G0U.G 
      LDA AGNRL     INSERT "GENERAL" FOR GROUP NAME 
      LDB AG0UG 
      ADB D6
      JSB .MVW
      DEF D5
      NOP 
EXGUG LDA TEMP2 
      JMP G1U.G,I   RETURN
* 
AGNRL DEF GENRL 
GENRL ASC 10,GENERAL
N2    DEC -2
N4    DEC -4
D5    DEC 5 
D7    DEC 7 
TEMP3 NOP 
COMMA OCT 54
* 
      HED COMPARE ROUTINE FOR USER.GROUP
*   CALLING SEQUENCE: 
*       A REG = DIRECTORY ENTRY # FOR SPLCON RECORD 
*       CALL G1CUG
*   RETURNS:  A REG = -1 NO COMPARE 
*                   =  0 O.K. 
* 
* 
AGUG1 DEF G0UG1 
G0UG1 BSS 11
* 
G1CUG NOP 
      LDB AGUG1     11 WORD BUFFER
      JSB .UNAM 
      DEF G0W15+1   ERROR MESSAGE BUFFER
      SSA           ERROR?
      JMP G1CUG,I   YES, RETURN 
* 
      LDA AG0UG     ADDRESS OF USER SUPPLIED TABLE
      INA 
      STA TEMP1     SAVE ADDRESS
      LDA AGUG1     ADDRESS OF TABLE FROM SCB 
      INA 
      STA TEMP2 
      JSB CMPAR     COMPARE USER NAME 
* 
*  COMPARE GROUP NAME 
* 
      LDA AG0UG 
      ADA D6        POINT TO GROUP NAME 
      STA TEMP1 
      LDA AGUG1 
      ADA D6
      STA TEMP2 
      JSB CMPAR 
      CLA 
      JMP G1CUG,I   RETURN
* 
*  ROUTINE TO COMPARE A FIVE WORD USER/GROUP NAME 
* 
CMPAR NOP 
      LDB TEMP2,I   GET FIRST WORD
      ELB,CLE,ERB   REMOVE SIGN BIT -- IN CASE
      STB TEMP2,I      SET BY ACCTS PROGRAM 
      LDA TEMP1,I   GET THE FIRST WORD OF NAME
      CPA "@"       IS IT "@ " ?
      JMP CMPAR,I   YES, THEN ANY CORRESP NAME IS OK
      LDA M5
      STA TEMP      WORD COUNT
      CCA 
CMPLP LDB TEMP2,I 
      CPB TEMP1,I 
      RSS           COMPARES
      JMP G1CUG,I   NO COMPARE, RETURN
* 
      ISZ TEMP1 
      ISZ TEMP2 
      ISZ TEMP
      JMP CMPLP 
      CLA 
      JMP CMPAR,I   NAME COMPARES 
* 
* 
M5    DEC -5
TEMP  NOP 
TEMP1 NOP 
TEMP2 NOP 
WRDCN NOP 
"@"   ASC 1,@ 
* 
* 
* 
* 
CKPU  NOP           RETURN P+2 IF SHOULD PURGE
      JSB POST      POST THE BUFFER 
      DEF *+2       THE DCB 
      DEF G0DCB 
      JSB RNRQ      AND LOCK THE RN 
      DEF *+4 
      DEF RNLOK 
      DEF G0JRN 
      DEF RNSTT 
      LDA RCNO      NOW 
      JSB RD        AND READ THE RECORD AGAIN 
      LDA G0BUF     NOW MAKE SURE NOTHING 
      SSA           HAS CHANGED 
      JMP FG        ALREADY CLEARED SO FORGET IT
* 
      JSB G1KLG     GO GET THE COUNT
      DEF RCNO      IF STILL ZERO 
      SZA           CONTINUE
      JMP FG        ELSE FORGET IT
* 
      ISZ CKPU      SET TO TAKE THE PU EXIT 
FG    JSB UNLOK     UNLOCK THE RN 
      NOP           IGNOR ERROR 
      JMP CKPU,I    RETURN
* 
* 
      HED G1CCS    CHANGE SPOOL STATUS
PBUF2 NOP 
PLEN2 NOP 
IERR2 NOP 
* 
G1CCS NOP           CHANGE SPOOL STATUS ROUTINE 
      JSB .ENTR     FETCH PARAMETERS
       DEF PBUF2
      LDA PLEN2,I   GET NUMBER OF PARAMS
      ADA MD3        MAKE SURE NO LESS THAN 3 
      SSA 
      JMP CSMPR 
* 
      LDB PBUF2     INCRE TO PARAM 2
      ADB D4         SINCE FIRST IS "CS"
      LDA B,I 
      CPA D2        CHECK PARAM 2 FOR 
      RSS            ASCII NAME 
      JMP CSBPR     IF NOT, THEN ERROR 56 
      INB 
      STB SPNM      SAVE ADDR OF SPOOL NAME 
      ADB D3        INCRE TO PARAM 3
      STB PBUF2 
* 
      JSB G1CAP     GET USER CAPABILITY AND ACCT# 
      DEF *+2 
      DEF IERR2,I   ERROR 
      SEZ 
      JMP EXIT3     ERROR RETURN
* 
      JSB G1OLK     OPEN SPLCON, LOCK RN
       DEF G0SPF
       JMP EXIT2    EXIT IF ERRORS
* 
      LDA G0WD1     GET # SPOOL CONTROL RECS
      CMA,INA,SZA,RSS   IF NONE,
      JMP NOSP2      THEN ERROR 6 
      STA SPCNT 
      LDA G0WD3      GET SPOOL REC # OFFSET 
      STA SPOFS 
      STA RCNO
* 
      LDA D3        READ REC 3 FROM SPLCON FILE 
      JSB RDREC 
      LDA G0WD2     GET THE PRIVILEGED COMMAND CAPABILITY 
      STA TEMP1     SAVE FOR NOW
* 
CSRDS LDA RCNO      READ A SPOOL RECORD 
      JSB RDREC 
* 
      CCA 
      CPA G0BUF     IS THIS SPOOL REC UNUSED? 
      JMP CSNXS      YES, SO LOOK SOME MORE 
* 
      LDA SPNM      GET SPOOL NAME TO UPDATE
      STA TEMP
      LDA G0WD2 
      CPA TEMP,I    COMPARE NAM1,NAM2 
      RSS 
      JMP CSNXS 
      ISZ TEMP
      LDA G0WD3 
      CPA TEMP,I    COMPARE NAM3,NAM4 
      RSS 
      JMP CSNXS 
      ISZ TEMP
      LDA G0WD4 
      CPA TEMP,I    COMPARE NAM5,NAM6 
      JMP CSFDS     NAME MATCHES
* 
CSNXS ISZ RCNO      BUMP SPOOL REC #
      ISZ SPCNT     BUMP COUNT, DONE? 
      JMP CSRDS      NO, READ NEXT SPOOL REC
NOSP2 LDA D6        CANT FIND SPOOL REQ.
      JMP EXIT2 
* 
CSFDS LDA G0W11     GET ACCOUNT # FOR THIS SPOOL FILE 
      SSA,RSS       IS IT A JOB #?
      JMP FACT#     NO, THEN FOUND ACCOUNT# 
* 
      ELA,CLE,ERA   CLEAR SIGN BIT
      STA G0W11     SAVE THE JOB #
      JSB GTACT     GET ACCT# 
      SSA           ERROR?
      JMP EXIT2     YES 
      STA TEMP3     SAVE ACCT # 
      LDA RCNO      READ THE SPOOL RECORD 
      JSB RDREC 
      LDA TEMP3 
FACT# CPA G0ACT     SAME AS THAT FOR USER?
      JMP CAPOK     YES, THEN USER OK 
* 
      JSB G1CHK     CHECK USER CAPABILITY 
      DEF *+2 
      DEF IERR2,I 
      SEZ 
      JMP EXIT3     ERROR RETURN
CAPOK LDA PBUF2,I   YEH, WE FOUND IT. 
      ISZ PBUF2 
      CPA D1        CHECK IF PARAM 3 IS # 
      JMP CSPRI      YES, PRIORITY CHANGE 
      CPA D2        CHECK IF PARAM 3 IS ASCII 
      JMP CSSTA      YES, STATUS CHANGE 
CSBPR LDA D56       BAD PARAMETER 
EXIT2 STA IERR2,I 
EXIT3 JSB UNLOK     UNLOCK RN, POST FILE
       NOP          IGNORE ERROR
      LDA IERR2,I 
      JMP G1CCS,I   RETURN
* 
CSILS LDA D4        ILLEGAL STATUS
      JMP EXIT2 
* 
CSMPR LDA D55       MISSING PARAMETER 
      JMP EXIT2 
* 
* 
* 
CSSTA LDB G0W10     GET OLD SPOOL STATUS
      STB OSTAT 
      LDA PBUF2,I   GET NEW STATUS IN A 
      ALF,ALF       MOVE CHAR TO LOW BITS 
      AND B377       KEEP ONLY 1 CHAR 
      CPA "H"       MUST EITHER BE "H"
      JMP CSH        OR 
      CPA "R"        "R"
      JMP CSR 
      JMP CSBPR     ELSE BAD PARAM
* 
CSH   CPB "W"       IF SPOOL WAITING
      JMP SMSET      JUST SET HOLD
      CPB "H"       IF ALREADY HELD 
      JMP ALSET      NO ERROR TO DO AGAIN 
      CPB "AH"
      JMP ALSET 
      LDA "AH"
      CPB "A"       IF ACTIVE 
      JMP SMSET      THEN SET "AH"
      JMP CSBPR     ANYTHING ELSE IS BAD
* 
CSR   LDA "W"       RELEASE SPOOL 
      CPB "W"       IF IN WAIT
      JMP ALSET      ALREADY DONE 
      CPB "H"       IF IN HOLD
      JMP CSSET      RELEASE TO WAIT
      LDA "A" 
      CPB "AH"      IF IN ACTIVE-HOLD 
      JMP CSSET      THEN MAKE ACTIVE 
      JMP CSBPR     ANYTHING ELSE IS BAD
* 
CSSET LDB D15       SET FOR A RELEASE CALL AND
      RSS           SKIP TO THE CALL
SMSET LDB D14       SET FOR A HOLD CALL 
      JSB WRSMP     WRITE THE RECORD AND CALL SMP 
ALSET CLA 
      JMP EXIT2 
* 
WRSMP NOP 
      STB SMPR      SAVE THE SMP CALL WORD
      STA G0W10     SET NEW STATUS
      JSB WR        WRITE UPDATED RECORD BACK 
      LDB SMPR      RESET SMP CALL PRAM 
      JSB SMPR      GO TELL SMP 
      JMP SMPER     SMP CANNOT BE SCHEDULED 
* 
      JMP WRSMP,I   EXIT
* 
* 
* SMPR - CALLING SEQUENCE: B REG = CALL PARM FOR SMP
*                          JSB SMPR 
*        RETURN: P IF SMP CANNOT BE SCHEDULED 
*                P+1 NORMAL RETURN
* 
SMPR  NOP 
      STB TEMP      SET CALL PRAM 
      JSB EXEC      CALL SMP TO PUT SPOOL 
       DEF *+8       INTO ANY QUEUE IT
       DEF S23       SHOULD BE IN 
       DEF SMP
       DEF TEMP 
       DEF RCNO 
       DEF G0W15
       DEF MD1
       DEF OSTAT
      JMP SMPR,I    CANNOT SCHEDULE SMP RETURN TO P 
      ISZ SMPR      RETURN TO P+1 
      JMP SMPR,I    EXIT
* 
* 
* 
CSPRI LDA G0W10     GET CURRENT STATUS
      STA OSTAT      OF SPOOL FILE
      CPA "W"       IS IT WAITING OR
      RSS 
      CPA "H"       IN HOLD?
      RSS           YES  SO OK
      JMP CSILS     ELSE ILLEGAL STATUS 
* 
      LDB PBUF2,I   GET THE NEW PRIORITY
      STB G0WD9     AND SET IT
      CPA "H"       IF IN HOLD GO 
      JMP CSPRH     GO WRITE THE RECORD 
* 
      LDA G0W10     ELSE PICK UP THE STATUS 
      LDB D14       AND GO PUT IN HOLD
      JSB WRSMP 
      LDB D15       NOW RELEASE TO NEW QUEUE
      JSB SMPR
      JMP SMPER     SMP CANNOT BE SCHEDULED 
* 
      JMP ALSET     DONE GO EXIT
* 
* 
CSPRH JSB WR        WRITE THE NEW PRIORITY
      JMP ALSET     AND EXIT
* 
SMPER LDA MD48      SMP CANNOT BE SCHEDULED 
      JMP EXIT2 
* 
* 
WR    NOP 
      JSB WRITF     WRITE UPDATED RECORD BACK 
       DEF *+6
       DEF G0DCB
       DEF IERR2,I
       DEF G0BUF
       DEF D16
       DEF RCNO 
      SSA 
      JMP EXIT2 
      JSB UNLOK     UNLOCK RN AND POST FILE 
       NOP
      JMP WR,I      EXIT
* 
* 
RDREC NOP 
      JSB RD
      SSA 
      JMP EXIT2 
      JMP RDREC,I 
* 
* 
      HED COMMON ROUTINES AND CONSTANTS TO DS,CS
* 
*                   JSB G1OLK 
*                    DEF FILENAME 
*                    <ERROR RETURN, (A)=ERROR CODE> 
*                   <GOOD RETURN, (A)=MEANINGLESS>
* 
G1OLK NOP           OPEN FILE AND LOCK RN 
      LDA G1OLK,I   GET ADDR OF FILE NAME 
      STA FNAME 
      ISZ G1OLK 
      JSB G1OPN      OPEN FILE
       DEF *+4       USING GLOBAL DCB 
       DEF G0DCB
       DEF UNLOK
FNAME  DEF *
      SSA           ANY ERRORS? 
      JMP OPLKE      YES, BUG OUT 
* 
      JSB READF     READ FIRST RECORD 
       DEF *+4       FROM FILE
       DEF G0DCB     INTO GLOBAL BUFFER 
       DEF UNLOK
       DEF G0BUF
      SSA            ANY ERRORS?
      JMP OPLKE      YES
      LDA G0BUF     GET FIRST WORD OF RECORD
      STA G0JRN      WHICH SHOULD BE RN LOCK WORD 
      JSB POST      MAKE SURE READS 
      DEF *+2       ARE CLEAN.
      DEF G0DCB 
* 
      JSB RNRQ      LOCAL LOCK RN TO US 
       DEF *+4
       DEF RNLOK
       DEF G0JRN
       DEF RNSTT
* 
      ISZ G1OLK     INCRE ADDR FOR GOOD RETURN
OPLKE JMP G1OLK,I   RETURN
* 
* 
* 
* 
*                   JSB UNLOK 
*                    <ERROR RETURN> 
*                   <GOOD RETURN> 
* 
UNLOK NOP           UNLOCK RN, POST FILE DCB
      LDA RNSTT     MAKE SURE RN IS NOT 
      CPA D1        ALREADY UNLOCKED. 
      JMP ULOK1     IF SO - DON'T TRY IT. 
      JSB POST      POST FILE BUFFER
       DEF *+2
       DEF G0DCB
      JSB RNRQ      UNLOCK RN 
       DEF *+4
       DEF RNULK
       DEF G0JRN
       DEF RNSTT
ULOK1 ISZ UNLOK 
      JMP UNLOK,I   RETURN
* 
* 
B20K  OCT 20000 
D1    DEC 1 
D3    DEC 3 
D4    DEC 4 
D6    DEC 6 
D9    DEC 9 
D13   DEC 13
D14   DEC 14
D15   DEC 15
D16   DEC 16
D55   DEC 55
D56   DEC 56
S23   OCT 100027
MD1   DEC -1
MD3   DEC -3
MD18  DEC -18 
MD48  DEC -48 
* 
RNSTT DEC 1 
ADDR  NOP 
CNTR  NOP 
SPLU  NOP 
SPCNT NOP 
SPNM  NOP 
SPOFS NOP 
G0JRN NOP 
OSTAT NOP 
RNLOK OCT 1 
RNULK OCT 4 
"A"   OCT 101 
"AH"  ASC 1,AH
"D"   OCT 104 
"H"   OCT 110 
"R"   OCT 122 
"W"   OCT 127 
SMP   ASC 3,SMP 
JOB   ASC 3,JOB 
SPSH2 NOP 
      ASC 26,  SESLU SYSLU NAME  PRIORITY JOB# STATUS USER.GROUP
SPSTM NOP 
      BSS 31     LL   LLL  NNNNNN  PPPP    JJ  SSSS  UUUUUUUUUU.GGGGGGGGGG
NOSPM DEC 6 
      ASC 6,  NO SPOOLS 
DOWN  DEC 5 
      ASC 5, SHUT DOWN
SPACE DEC 1 
DBLNK ASC 1,
* 
      BSS 0         SIZE
      END 
                                                                                                                            