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 * * * 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 * * * 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