ASMB,Q,C * HED SMP ROUTINE * NAME: SMP * SOURCE: 92067-18351 * RELOC: 92067-16350 * PGMR: A.M.G.,S.K. * * *************************************************************** * * (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. * * *************************************************************** * NAM SMP,130,30 92067-16350 REV.1940 790802 * * * * SSTAT STATES * * 0 NORMAL * 1 SPOUT IS WORKING ON A MENU * * * IFN EXT DBUGR XIF EXT .DFER THREE WORD MOVE ROUTINE EXT REIO I-O ROUTINE EXT .MVW MOVE WORDS ROUTINE EXT $CVT3 CONVERT NUMBER TO ASCII EXT RMPAR RETRIEVE PARAMETERS EXT $SPCL SPOUT CLASS ID EXT $SPCR JOBFIL, SPLCON DISC CR EXT $LUAV SPOOL LU TABLE EXT $IS43 IN $SPCL HAS ADDR OF IS43 IN DVS43 EXT .DRCT PICK UP DIRECT ADDRESS EXT $LIBR GO PRIVILEGED EXT $LIBX SUSPEND PRIVILEGED OPERATION EXT READF FMGR READ EXT WRITF FMGR WRITE EXT EXEC SYSTEM CALLS EXT XLUEX EXTENDED SYSTEM CALLS EXT PRTN PASS PARAMETERS TO CALLER EXT RNRQ RESOURCE NUMBER CONTROL EXT POST POST FILE BUFFERS * EXT SESSN CHECK IF UNDER SESSION EXT $SMVE MOVE SESSION SWITCH TABLE EXT LUTRU FIND CORRESP LU IN BATCH OR SESS SW TABLE EXT .CACT GET DIRECTORY # OF CURRENT SESSION EXT DTACH DETACH PROGRAM FROM SESSION A EQU 0 B EQU 1 XEQT EQU 1717B DRT EQU 1652B SUP HED SMP CALL PRAMS * PRAMS P1 THRU P5 DESCRIBE THE FUNCTION TO PREFORM * AS FOLLOWS: * * P1 =0 SET UP CALL REQUIRES A 16 WORD CLASS BUFFER * P2 =CLASS NUMBER * P3 =BATCH CHECK FLAG (ID ADDRESS OF PRIV. PROGRAM OR ZERO) * * P1 =1 CHANGE PURGE TO SAVE ON AN EXISTING FILE * P2 =LU ASSIGNED LU OR IF BATCH THE SWITCHED LU MAY BE USED * * P1 =2 CHANGE SAVE TO PURGE * P2 =LU ASSIGNED LU OR IF BATCH THE SWITCHED LU * * * P1 =3 PASS THE FILE TO OUT SPOOL * P2 =LU ASSIGNED OR SWITCH IF IN BATCH * * * P1 =4 CLOSE AND PASS THE FILE * P2 =LU ASSIGNED OR SWITCH IF IN BATCH * * * P1 =5 CHANGE LU AND OR PRIORITY OF OUT SPOOL * P2 =LU ASSIGNED OR SWITCHED IF IN BATCH * P3 =NEW OUT LU * P4 =NEW PRIORITY * * * P1 =6 SET BUFFERED FLAG * P2 =LU ASSIGNED OR SWITCHED * * * P1 =7 CLEAR BUFFERRED FLAG * P2 =LU ASSIGNED OR SWITCHED * * * P1 =8 GET CURRENT POSITION OF FILE * P2 =LU ASSIGNED OR SWITCHED * * * P1 =9 CHANGE POSITION OF FILE * P2 =LU ASSIGNED OR SWITCHED * P3 =POSITION PRAMETER 1 * P4 =POSITION PRAMETER 2 * P5 =POSITION PRAMETER 3 * * * P1 =10 SPOUT CAN NOT OUT SPOOL BECAUSE OF FAILURE * OF LULOCK REQUEST * * * * P1 =11 SPOUT CAN BEGIN OUT SPOOL * P2 =LU SELECTED FOR OUT PUT * * * P1 =12 DEQUEUE OUT SPOOL (SPOUT IS DONE) * P2 =LU ASSIGNED LU OF FILE * P3 = #0 IF A BAD EOF FOUND ELSE 0 * * * P1 =13 KILL SPOOL * P2 =SPLCON RECORD NUMBER OF FILE TO KILL * P3 =LU ASSIGNED FROM WORD 1 OF RECORD * P4 =0 * P5 =CURRENT STATUS OF FILE * * * P1 =14 HOLD A OUTSPOOL FILE * P2 =SPLCON RECORD NUMBER OF FILE * P3 =OUTSPOOL LU (CURRENT) * P4 =0 * P5 =CURRENT STATUS SPLCON RECORD WILL SHOW 'H' * * * P1 =15 RELEASE A HOLD * P2 =SPLCON RECORD NUMBER OF FILE * P3 =CURRENT OUT SPOOL LU * P4 =NEW LU OR 0 CAN CHANGE LU ON RELEASE * P5 =CURRENT STATUS OF FILE * * * P1 =16 SHUT DOWN OUTSPOOLING * * * P1 =17 START UP OUT SPOOLING * * * P1 =18 CALL FROM SPOUT A LU IS DOWN * P2 =LU CURRENT ASSIGNED LU * * * P1 =19 CLOSE ALL SPOOL FILES FOR A SESSION * P2 =DIRECTORY # OF SESSION * P3 =ADDRESS OF SESSION SWITCH TABLE * P4 =# WORDS IN SESSION SWITCH TABLE * * * P1 =20 OUTSPOOL RECORD LENGTH TOO LONG * P2 =LU CURRENT ASSIGNED LU HED SMP COMMANDS SKP DTAB DEF CPTS 1 CHANGE PURGE TO SAVE. DEF CSTP 2 CHANGE SAVE TO PURGE. DEF PASS 3 PASS NOW DEF CSAP 4 CLOSE SPOOL AND PASS DEF MPI 5 MODIFY PASS INFORMATION DEF SBF 6 SET BUFFER FLAG DEF CBF 7 CLEAR BUFFER FLAG DEF GCDP 8 GET CURRENT DISK POSITION DEF CSRP 9 CHANGE STARTING RECORD POSITION DEF LULOK 10 LU LOCK CONDITION IN SPOUT DEF SPSEL 11 SPOOL SELECTION BY SPOUT DEF DEQUX 12 DEQUEUE OUTSPOOL. DEF KILL 13 KILL SPOOL DEF HOLD 14 HOLD A SPOOL FILE DEF RELSE 15 RELEASE A HOLD. DEF SHUT 16 SHUT DOWN OUTSPOOLING. DEF STUP 17 START UP OUTSPOOLING. DEF DVCDN 18 I/O DEVICE DOWN SET HOLD DEF CSPAL 19 CLOSE & PASS ALL SPOOLS FOR SESSION DEF LONG 20 OUTSPOOL RECORD TOO LONG * * JOBFL BSS 2 HOLDS FIRST 16 WORDS OF JOBFIL DCB OCT 2 BSS 3 DEC 16 OCT 100210 BSS 5 OCT 0,200,0 SPLFL BSS 2 HOLDS FIRST 16 WORDS OF SPLCON DCB OCT 2 BSS 3 DEC 16 OCT 100210 UP DATE WRITE OK 128 WORD DCB BSS 5 OCT 0,200,0 * DCB1 BSS 144 BUF21 BSS 16 HOLDS SPLCON #1 MOSTLY BUF22 BSS 16 HOLDS SPLCON #2 AND #3 MOSTLY BUF23 BSS 16 HOLDS CURRENT SPLCON FILE RECORD MOSTLY BUF24 BSS 16 HOLDS JOB RECORD #17 AND USED TO CHECK Q BLOCKS BUF25 BSS 62 HOLDS JOB RECORD FROM JOBFIL ALSO MENU MOSTLY LIMIT BSS 2 * * ALL BUFFERS ARE USED TO HOLD THE LU Q AT TIMES * * ORG DCB1 INITIALIZE CODE IS IN THE BUFFERS HED SMP INITIALIZE (IN BUFFER CODE) * SMP JSB RMPAR DEF *+2 DEF PARM1 LDA $SPCR GET DISC CR FOR JOBFIL & SPLCON SZA,RSS SPOOL INITIALIZED? JMP NOSPL NO, EXIT * STA SPCR LDA MSIGN SET OVERRIDE BIT TO SEARCH LDA XEQT GET MY ID ADDRESS STA JOBFL+9 SET THE OPEN FLAGS STA SPLFL+9 IN THE DCB SAVE AREAS CCE SET THE SIGN BIT RAL,ERA AND STA IID,I AND SAVE FOR NOW AND LATER JSB EXEC CALL D.RTR TO OPEN UP JOB FILE DEF *+10 DEF D23 DEF D.RTR IID DEF ID DEF MSIGN OVERRIDE OPTION -- SEARCH ALL DISCS DEF SPCR CARTRIDGE # FOR JOBFIL DEF SECCD SECURITY CODE DEF ZERO DEF JOBNA FILE NAME (NON-EXCLUSIVE) DEF D3 LENGTH OF FILE NAME BUFFER LDA B,I IF ERROR SSA THEN JMP BAIL GO BAIL OUT * INB STEP TO THE DIRECTORY ADDRESS WORDS LDA B,I AND SET THEM STA JOBFL INB LDA B,I IN STA JOBFL+1 IN THE DCB IMAGE INB NOW THE TRACK ADDRESS LDA B,I STA JOBFL+3 INB NOW THE LDA B,I SECTOR AND X377 STA JOBFL+4 XOR B,I ALF,ALF STA JOBFL+8 SET THE SEC/TRACK WORD JSB EXEC GET STRING PASSED BY D.RTR DEF *+5 DEF D14 REQUEST CODE DEF D1 RETRIEVE STRING DEF SST USE AS TEMPORARY BUFFER DEF D4 LENGTH OF BUFFER NEEDED LDA SST+3 FILE SIZE STA JOBFL+5 SAVE IN DCB IMAGE * JSB EXEC CALL D.RTR TO OPEN UP SPOL FILE DEF *+10 DEF D23 DEF D.RTR DEF ID DEF MSIGN OVERRIDE OPTION -- SEARCH ALL DISCS DEF SPCR CARTRIDGE # FOR SPLCON DEF SECCD DEF ZERO DEF SPLNA FILE NAME (NON-EXCLUSIVE) DEF D3 LENGTH OF FILE NAME BUFFER LDA B,I IF ERROR SSA THEN JMP BAIL GO BAIL OUT * INB STEP TO THE DIRECTORY ADDRESS WORDS LDA B,I AND SET THEM STA SPLFL INB LDA B,I IN STA SPLFL+1 IN THE DCB IMAGE INB NOW THE TRACK ADDRESS LDA B,I STA SPLFL+3 INB NOW THE LDA B,I SECTOR AND X377 STA SPLFL+4 XOR B,I ALF,ALF STA SPLFL+8 SET THE SEC/TRACK WORD JSB EXEC GET STRING PASSED BY D.RTR DEF *+5 DEF D14 REQ. CODE DEF D1 RETRIEVE STRING DEF SST USE AS TEMPORARY BUFFER DEF D4 # WORDS TO RETRIEVE LDA SST+3 FILE SIZE STA SPLFL+5 SET IN DCB IMAGE FOR SPOOL FILE JMP SMP0 GO CONTINUE THE SET UP * BAIL JSB FILER REPORT THE ERROR AND JMP RETN4 EXIT * NOSPL LDA M48 SPOOL SYSTEM NOT INITIALIZED STA TEMP1 SAVE FOR PARAMETER RETURN JMP RETN5 * X377 OCT 377 M48 DEC -48 * TS EQU BUF21-* IF ERROR WE RAN OUT OF THE DCB * ORG BUF21 GET OUT OF THE DCB SO IT CAN BE USED * * SMP0 LDB DDCB1 LDA PTRJ SET UP TO ACCESS THE JOB FILE JSB .MVW DEF D16 NOP LDB X17 GET THE JOB FILE RN LDA PTX21 JMP SMP00 BAIL OUT OF THIS BUFFER * ORG BUF22 SAFE GROUND * SMP00 JSB RDREC READ JOBFILE RECORD 17 JMP RETN4 IF ERROR GET OUT * LDA BUF21 GET THE RN STA DJRN,I SAVE IT JSB .DRCT GET IS43 ADDRESS FOR DEF $IS43 FOR FUTURE EQT CHECKING. LDA A,I STA IS43A SAVE THE ADDRESS. JSB .DRCT GET ADDRESS OF DEF $LUAV $LUAV TABLE AND SAVE. STA LUAVA LDB DDCB1 SET UP TO ACCESS THE SPOOL CONTROL FILE LDA PTRS JSB .MVW DEF D16 NOP * LDA PTX21 GET FIRST SPLCON RECORD. CLB,INB TS1 EQU *-BUF21-16 IF ERROR THEN CODE WILL BE OVERLAYED JSB RDREC JMP RETN4 ERROR EXIT * LDA PTX23 LDB X3 JMP SMP01 GET TO HIGH GROUND * ORG BUF24 GET OUT OF THE BUFFER * SMP01 JSB RDREC READ SHUT DOWN WORD. JMP RETN4 EXIT IF ERROR * LDA BUF21 STA SRN SAVE SPLCON RESOURCE #. LDA BUF23 SAVE CURRENT SHUT DOWN CONDITION. STA SHUTX,I LDA BUF23+1 SAVE HOLD RN. STA WRN JSB .DRCT INITIALIZE THE MENU. DEF BUF21+6 POINTER TO LU AREA STA TEMX1 LDA MPTRX POINTER TO MENU STA TEMX2 CONTAINS LU-#FILES ON QUE LDA X9 SMP2 STA TEMX3 LDA TEMX2,I SZA,RSS MUST GO THROUGH ALL THE OUTSPOOL JMP SMP4 QUEUES PICKING UP THE NUMBER * LDB TEMX1,I OF OUTSPOOLS WAITING ON EACH STB TEMX2,I ONE. THIS WILL ENABLE A SZB,RSS START-UP TO PICK THEM UP JMP SMP5 OUTSPOOL LU IS 0 * LDA PTX23 LDB TEMX3 READ IN THE BEGINNING JSB RDREC OF A QUEUE BLOCK. JMP RETN4 * LDB BUF23+1 GET COUNT OF OUTSPOOLS. SZB,RSS ANY IN QUEUE? JMP SMP5 NO * LDA BUF23+3 GET PRIORITY OF FIRST SPOOL IN QUEUE SZA IF 0 SPOUT MAY BE WORKING ON IT JMP SMP5 SPOUT NOT WORKING ON THIS SPOOL FILE * STB TEMP1 SAVE THE # OF OUTSPOOLS IN QUEUE LDB BUF23+2 GET THE SPLCON REC # OF FIRST FILE IN QUEUE LDA PTX23 ADDRESS OF BUFFER JSB RDREC READ SPLCON RECORD JMP RETN4 ERROR * CLE LDA BUF23+10 GET THE STATUS OF SPOOL FILE CPA "A" ACTIVE? CCE YES CPA "AH" CCE LDB TEMP1 GET THE SAVE # OF OUTSPOOLS IN QUEUE RBL,ERB SET SIGN BIT IF SPOUT ALREADY WORKING ON IT SMP5 ISZ TEMX2 STB TEMX2,I ISZ TEMX2 STEP MENU ADDRESS ISZ TEMX1 STEP LU LIST ADDRESS LDA TEMX3 STEP RECORD ADDRESS ADA X8 BY 8 JMP SMP2 AROUND WE GO * SMP4 LDA $SPCL CHECK IF CLASS HAS BEEN AND B377 SZA ALLOCATED FOR SPOUT. IF SO, JMP SETCL DON'T DO IT AGAIN. * JSB EXEC ALLOCATE CLASS FOR DEF *+5 SPOUT REQUESTS. DEF X19 DEF ZERO DEF ZERO DEF SP.CL LDA SP.CL GET THE CLASS AND IOR B20K SET THE DON'T RELEASE JSB $LIBR NOP STA $SPCL BIT JSB $LIBX DEF *+1 DEF *+1 SETCL LDA $SPCL GET THE SPOOL CLASS # STA SP.CL AND SAVE IT LOCALLY JMP SMP1 * X3 DEC 3 DDCB1 DEF DCB1 B20K OCT 20000 SHUTX DEF SHUTD X8 DEC 8 X19 DEC 19 X17 DEC 17 X9 DEC 9 JOBNA ASC 3,JOBFIL SPLNA ASC 3,SPLCON PTRJ DEF JOBFL PTRS DEF SPLFL PTX21 DEF BUF21 PTX23 DEF BUF23 MPTRX DEF .MENU TEMX1 NOP TEMX2 NOP TEMX3 NOP DJRN DEF JRN HED SMP COMMAND DECODE SMP1 JSB POST MAKE SURE WE'RE SET DEF *+2 FOR NEW RECORDS TO BE DEF DCB1 READ CLEAN FROM DISK. JSB LOCK LOCK THE SPLCON RN. DEF SRN LDA PTR21 CLB,INB JSB RDREC NOP ********************************************** LDA BUF21+3 GET START OF SPOOL CONTROL RECORDS STA SPREC SAVE IT JSB SESSN UNDER SESSION? DEF *+2 DEF XEQT PROGRAM ID SEGMENT ADDRESS CLA ERA STA SESNF SESSION FLAG--UNDER SESSN IF BIT15 ZERO STB SESID SESSION ID LDA PARM1 WHAT TYPE OF REQUEST? SZA,RSS JMP SETUP NEW SETUP. * CPA D18 IF DOWN DEVICE JMP USEOR GO GET THE RECORD * CPA D20 IF OUTSPOOL RECORD TOO LONG JMP USEOR GO GET THE SPLCON RECORD * CPA D12 JMP USEOR DEQUEUE. * ADA M10 SSA,RSS JMP CJUMP REQ.PARM. >=10 -- GASP OR SPOUT REQUEST. * JSB LUTRU TRANSLATE SPOOL LU THRU DEF *+3 BATCH SWITCH TABLE DEF PARM2 OR THRU SESSION SWITCH TABLE DEF TEMP2 LDA TEMP2 IF SESSION INSTALLED, SSA,RSS LU IN SESSION SWITCH TABLE? JMP USERL YES ERM40 LDA M40 NO, SEND ERROR BACK STA TEMP1 JMP MENU LU NOT DEFINED * USERL LDB PARM2 SAVE ORIGINAL LU# ADB M1 STB SESLU SESSION LU - 1 FOR SST SCAN STA PARM2 USEOR JSB FLU SEARCH LU AVAILABILITY JMP ERM22 * * LDB TEMP1,I SAVE CORRESPONDING RECORD SZB JMP STREC RECORD ASSIGNED, SET REC # LDA SESLU SESSION SPOOL LU - 1 JSB FSELU NO RECORD, FREE SPOOL LU FROM SST JMP MENU SKIP OUT * STREC STB RECNO # OF SPLCON RECORD. LDA PTR23 JSB RDREC READ THE APPROPRIATE RECORD. JMP RETRN READ ERROR. * CJUMP CCA IS THE REQUEST ADA PARM1 PARAMETER VALID? SSA JMP MENU ILLEGAL REQUEST PARAMETER. * STA B ADB M20 SSB,RSS JMP MENU ILLEGAL REQUEST PARAMETER. * ADA RTAB BRANCH TO APPROPRIATE JMP A,I SERVICE ROUTINE * FLU NOP ROUTINE TO FIND LU IN LUAV LDB LUAVA SEARCH LU AVAILABILITY LDA B,I SZA,RSS JMP FLU,I CAN'T FIND. * STA TEMP2 LOOP5 INB LDA B,I AND B377 INB CPA PARM2 DOES THE LU MATCH JMP FOUND THE ONE GIVEN? * ISZ TEMP2 JMP LOOP5 * JMP FLU,I NOT FOUND * FOUND ISZ FLU FOUND STEP ADDRESS STB TEMP1 SET ADDRESS FOR LATER JMP FLU,I AND EXIT * SP.CL NOP SPCR NOP SESNF NOP SESID NOP SESLU NOP M40 DEC -40 RTAB DEF DTAB,I REQUEST TABLE. LUAVA BSS 1 D14 DEC 14 D20 DEC 20 M10 DEC -10 D18 DEC 18 D70 DEC 70 D71 DEC 71 M70 DEC -70 S24 OCT 100030 HED SMP SA TO PU TO SA & PASS CSTP CLE,RSS CHANGE SAVE TO PURGE. * CPTS CCE CHANGE PURGE TO SAVE. LDA BUF23+8 ERA,RAL STA BUF23+8 WRTRC JSB WRT23 WRITE OUT SPOOL CONTROL JMP MENU * * PASS LDB BUF23+8 BATCH INPUT? RBL SSB JMP MENU YES - ILLEGAL REQUEST. * LDA BUF23+15 IF NO LU SZA,RSS THEN JMP MENU IGNOR * LDB BUF23+8 WAS THE FILE BEING RBR,SLB HELD UNTIL CLOSE. RSS JMP MENU NO - FILE WILL HAVE BEEN PASSED. * LDA BUF23+8 REMOVE HOLD BIT IOR D2 SET JUST IN CASE XOR D2 STA BUF23+8 JSB QUEUE QUEUE THE FILE JMP MENU * HED SMP CLOSE AND PASS ALL CSPAL LDA PARM2 CLOSE ALL SPOOL FILES FOR STA TEMPC GIVEN ACCOUNT # LDA PARM3 SESSION ID STA SESID JSB $SMVE GET SESSION SWITCH TABLE DEF *+6 DEF D1 READ SST DEF SESID ADDRESS OF SST DEF D1 ONE WORD OFFSET INTO SST DEF SST DEF D70 MAX SIZE OF SST * LDA M70 STA TEMPD LDA ASST ADDRESS OF SST STA TEMPE CLSLP LDA TEMPE,I GET SST ENTRY AND B377 MASK SESSION LU CPA ZERO SESSION TERMINAL LU? JMP MENU YES, THEN NO MORE FILES LEFT LDA TEMPE,I GET SST ENTRY ALF,ALF INA AND B377 GET SYSTEM LU STA PARM2 SAVE IT JSB FLU FIND LU IN $LUAV TABLE? JMP CLSEN CANNOT FIND -- SHOULD NOT HAPPEN JMP SPLLU YES CLSEN ISZ TEMPE ISZ TEMPD INCREMENT COUNTER JMP CLSLP NOT DONE YET JMP MENU NO MORE SPOOL FILES LEFT TO CLOSE * SPLLU LDA TEMPE,I GET SST ENTRY AND B377 GET SESSION LU# STA SESLU SAVE IT LDB TEMP1,I GET RECORD # SZB,RSS IF NOT ASSIGNED SKIP JMP CLSEN STB RECNO SAVE RECORD # LDA PTR23 JSB RDREC READ SPLCON RECORD JMP RETRN FILE NOT FOUND LDA BUF23+11 CLOSE THE FILE SSA IN BATCH? JMP CLSPS YES, SKIP CHECK ELA,CLE,ERA CLEAR SIGN BIT CPA TEMPC DIRECTORY # MATCHING? CLSPS JSB CSPAS YES, THEN CLOSE AND PASS FILE JMP CLSEN NO, LOOK AT NEXT SST ENTRY HED SMP CLOSE AND PASS GIVEN FILE * * CLOSE AND PASS THE SPOOL FILE * CSAP JSB CSPAS JMP MENU * * * CSPAS NOP LDA BUF23+12 SZA,RSS JMP CKSES WORD 12 NOT SPECIFIED JSB EXEC SCHEDULE PROG IN WORDS 12-14 OF BUFFER DEF *+10 DEF S24 =100030B DEF BUF23+12 DEF ZERO DEF ZERO DEF ZERO DEF ZERO DEF ZERO DEF BUF23 DEF D16 JMP CKSES LDA BUF23+8 CCE RAR,ELA SET BIT TO SAVE FILE STA BUF23+8 AFTER OUTSPOOL * CKSES LDB SESNF GET SESSION FLAG LDA SESLU SESSION LU - 1 SSB,RSS IN SESSION? JSB FSELU YES, FREE SPOOL LU FROM SST * LDA BUF23+15 IS FILE TO BE PASSED?? SZA WELL? JMP PCHK YES GO PASS IT * JSB PRGEX CLOSE THE FILE JMP CSPAS,I RETURN * * PCHK LDB TEMP1 GET LUAV ADDRESS JSB FRELU FREE THE LU AND EQT LDA BUF23+8 WAS IT PASSED BEFORE? RAR,SLA IS HOLD BIT SET? RSS JMP CSPAS,I NO, DO NOT PASS NOW (DONE ALREADY) * LDA BUF23+8 REMOVE HOLD BIT. IOR D2 SET JUST IN CASE XOR D2 NOW CLEAR IT STA BUF23+8 JSB QUEUE GO SET IT UP JMP CSPAS,I * * * "W" OCT 127 HED SMP MODIFY PASS INFO MPI LDA PARM4 SAVE NEW PRIORITY IF SZA,RSS IF GIVEN. JMP MPI1 * SSA,RSS STA BUF23+9 MPI1 LDA BUF23+15 SAVE OLD LU. STA TEMP2 LDA PARM3 GET NEW LU STA PARM4 IF GIVEN. SZA,RSS SKIP IF NOT GIVEN JMP CKVAL STA BUF23+15 AND B77 ISOLATE NEW LU# STA TEMP6 LDB SESNF GET SESSION FLAG SSB,RSS IN SESSION? JSB TROLU YES,GET THE TRUE OUTSPOOL LU JSB STOLU SET OUTSPOOL LU IN BUF23+15 STA PARM4 SAVE FOR USE LATER LDB "W" SET STATUS TO WAIT LDA BUF23+10 IF NONE WAS DEFINED SZA,RSS PREVIOUSLY STB BUF23+10 CKVAL JSB SMENU CHECK VALIDITY. JMP MPIER NEW LU NOT GOOD. * LDB BUF23+10 IF SPOOL IS ACTIVE, CPB "A" WE CAN PERFORM JMP MPIER THIS OPERATION. * CLB STB TEMP1 LDA TEMP2 IF NO OLD LU, SZA,RSS WRITE RECORD AND JMP MI4 QUEUE IF NEEDED NOW. * LDB BUF23+8 REQUEUE UNLESS THE RBR,SLB FILE IS BEING HELD JMP MI4 FROM THE QUEUE * STA BUF23+15 JSB WRT23 WRITE THE CURRENT RECORD CCE SET TO SHOW NOT ACTIVE JMP DEQ18 UNTIL IT IS CLOSED. * MI4 JSB QUEUE WRITE RECORD AND Q IF NEEDED JMP MENU GO OUT THE STANDARD WAY * MPIER LDA TEMP2 STA BUF23+15 LDA M21 STA TEMP1 JMP WRTRC * SBF JSB FEQT SET BUFFERED FLAG IN EQT. ADB D3 LDA BUFRD JSB PUTM JMP MENU * PTR21 DEF BUF21 PTR23 DEF BUF23 D3 DEC 3 D12 DEC 12 BUFRD OCT 40000 * CBF JSB FEQT CLEAR BUFFERED FLAG IN EQT. ADB D3 LDA BUFRD SET BIT TO BE CLEARED CLE SET THE CLEAR FLAG JSB PUTM CLEAR THE BIT JMP MENU * SETEQ NOP SUB TO SET EQT ADDRESSES JSB FEQT GET CURRENT DISK POSITION. ADA D2 ADDRESS OF EQT18 (CURRENT TRACK) STA TEMP5 SAVE IT ADA D2 STEP TO EQT20 (EXTENSION NUMBER) STA TEMP2 AND SAVE IT INA NOW EQT21 (CURRENT SECTOR) STA TEMP1 SAVE IT ADA D3 EQT24 (FIRST TRACK OF EXTENT) STA TEMP3 SAVE IT INA EQT25 (FIRST SECTOR OF EXTENT) STA TEMP4 SAVE IT INA EQT26 (FILE SIZE) STA DFSIZ SAVE ADDRESS OF FILE SIZE ADA D4 EQT30 (# SECTORS/TRACK) STA D#PTR SAVE IT JMP SETEQ,I RETURN HED SMP GET CURRENT DISC POSITION GCDP JSB SETEQ SET THE EQT ADDRESSES LDA TEMP3,I GET THE BASE TRACK CMA,INA SUBTRACT FROM ADA TEMP5,I CURRENT TRACK MPY D#PTR,I TIMES #/TRACK D#PTR EQU *-1 LDB TEMP4,I GET BASE SECTOR CMB,INB AND SUBTRACT ADA B IT THEN ADA TEMP1,I ADD CURRENT SECTOR A=SECTOR OFFSET STA TEMP1 IN CURRENT EXTENT LDA TEMP2,I GET EXTENT MPY DFSIZ,I TIMES EXTENT SIZE = SECTOR OFFSET OF DFSIZ EQU *-1 THIS EXTENT CLE NOW ADD THE TWO ADA TEMP1 DO DOUBLE WORD SEZ,CLE INB ADD STA TEMP1 SET FOR STB TEMP2 RETURN ISZ TEMP5 GET THE OFFSET LDA TEMP5,I AND STA TEMP3 SET IT FOR RETURN JMP SRSEX EXIT SMP (SST #4236) * CSRP JSB SETEQ SET UP THE EQT ADDRESSES ADB D10 ADDRESS OF EQT11 STB SETEQ SAVE IT FOR LATER LDA DFSIZ SET ADDRESSES INA SET UP TO GET THE EXTENT STA DIRCT IN ALL CASES INA STA DIRCT+1 LDA PARM3 GET THE DOUBLE WORD LDB PARM4 SECTOR OFFSET DIV DFSIZ,I DIVIDE BY FILE SIZE STA PARM1 SET EXTENT NUMBER FOR D.RTR CALL STB PARM2 SAVE THE REST * JSB EXEC SCHEDULE D.RTR TO OPEN DEF *+8 THE EXTENT. DEF D23 DEF D.RTR DEF XEQT ID SEGMENT ADDRESS. DEF D6 READ DIRCT BSS 2 DEF PARM1 EXTENSION # JSB RMPAR DEF *+2 DEF D.1 LDA D.1 SSA JMP RETRN * LDA D.5 AND B377 JSB $LIBR GO PRIV TO SET THE EQT NOP STA TEMP4,I STORE BEGINNING SECTOR (EQT25). CLB,CLE SET UP THE ADA PARM2 OFFSET SEZ INB NOW DIV D#PTR,I GET TRACK OFFSET AND SECTOR ADDRESS STB TEMP1,I SET CURRENT SECTOR ADA D.4 SET CURRENT TRACK STA TEMP5,I IN EQT 18 LDA D.4 STA TEMP3,I STORE BEGINNING TRACK (EQT24). LDA PARM5 IOR DM128 MAKE SURE RANGE IS RIGHT ISZ TEMP5 STEP TO EQT19 STA TEMP5,I STORE CURRENT OFFSET (EQT19). LDA PARM1 STA TEMP2,I STORE CURRENT EXTENT (EQT20). LDA SETEQ,I GET EQT11 AND AND NTEOF CLEAR THE EOF FLAGS STA SETEQ,I RESTORE IT JSB $LIBX GO TEST MENU DEF *+1 DEF MENU * "A" OCT 101 C377 OCT 177400 NTEOF OCT 117777 MASK TO CLEAR EOF FLAGS M26 DEC -26 M22 DEC -22 D4 DEC 4 B3700 OCT 3700 B377 OCT 377 B77 OCT 77 BMASK OCT 137777 BPAT NOP ADDR1 NOP RECNO NOP D2 DEC 2 M1 DEC -1 M2 DEC -2 M4 DEC -4 M16 DEC -16 PARM1 BSS 1 PARM2 BSS 1 PARM3 BSS 1 PARM4 BSS 1 PARM5 BSS 1 SECCD OCT 123456 RRR OCT 101100 ROTATE RIGHT INSTRUCTION RRL OCT 100100 ROTATE LEFT INSTRUCTION * ERM26 LDA M26 JMP NOGO1 HED SMP SET UP INITIAL FILE SETUP CLA SET FLAG TO INDICATE FIRST TIME STA TEMPC THRU CLASS READ FOR SETUP BUFFER STUP1 LDA PTR22 HAVE RECORD 1. STA ADDR1 SAVE FOR LATER LDB D2 GET RECORD 2. JSB RDREC JMP NOGO1 READ ERROR. * * FIND IF THERE IS AN AVAILABLE SPLCON RECORD. * LDA M16 SET UP STA TEMP1 COUNTER LDA BUF21+3 GET REC. # OF FIRST REC STA RECNO SAVE IT LDA BUF21+1 GET NUMBER OF RECORDS CMA,INA SET FOR COUNTER STA TEMP3 IN TEMP3 LOOP1 LDA M16 SET UP STA TEMP2 COUNTER TWO CLB,INB SET INITIAL BIT MASK LOOP2 LDA ADDR1,I TRY AND B ONE SZA,RSS AVAILABLE?? JMP HAVIT YES USE IT * ISZ TEMP3 ANY RECORDS LEFT? RSS YES SKIP JMP NOGO NO SO SORRY! * RBL NO ADVANCE BIT MASK ISZ RECNO SEP RECORD NUMBER ISZ TEMP2 AND COUNT WORD EXHAUSTED?? JMP LOOP2 NO TRY NEXT BIT * ISZ ADDR1 YES TRY NEXT WORD ISZ TEMP1 IS THERE A NEXT WORD?? JMP LOOP1 YES TRY IT. * JMP NOGO NO AVAILABLE RECORD. * HAVIT LDA ADDR1,I SAVE NEW BIT PATTERN XOR B IN A TEMPORARY. STA BPAT LDA BUF21+4 CMA,INA SET NEGATIVE STA PARM5 SAVE MAX. # PENDING OUTSPOOLS. * * FIND OUT WHETHER ANY OUTPUT QUEUES ARE FULL * OR TOTAL PENDING OUTSPOOLS MATCH THE MAXIMUM. * LDB MPTR GET THE MENU ADDRESS LOOP3 LDA B,I GET ENTRY SZA,RSS END OF LIST? JMP SMP3 YES * INB NO STEP TO COUNT LDA B,I GET COUNT RAL,CLE,ERA CLEAR THE SIGN CPA D63 FULL?? JMP ERM26 YES SENT BACK ERROR * ADA PARM5 ADD TO TOTAL STA PARM5 RESET TOTAL SSA,RSS IF NEG. THEN JMP ERM26 TOO MANY * INB NEXT JMP LOOP3 AROUND AGAIN * * * FIND AN AVAILABLE LU #. * * SMP3 CLA,RSS CLEAR TEMP1 FOR NOW NOGO LDA M22 * NOGO1 STA TEMP1 LDA PARM2 SET OPTION TO NOT RELEASE JSB EXEC DO A CLASS GET TO RETRIEVE DEF *+5 THE SETUP BUFFER. DEF D21 DEF PARM2 DEF BUF23 DEF D16 CHKER LDA TEMP1 SSA ERROR SET? JMP SRSEX YES,THEN DON'T LOOK FOR SPOOL LU * * LOOK FOR SPOOL LU * LDA BUF23+15 GET OUTSPOOL LU AND B77 ISOLATE LU # LDB SESNF GET SESSION FLAG SSB IN SESSION? JMP NOSES NO STA TEMP5 SZA JSB TROLU GET TRUE OUTSPOOL LU JSB STOLU SET OUTSPOOL LU IN SETUP BUFFER * LDA BUF23+1 GET WORD ONE OF SETUP BUFFER CPA M1 DIRECT MAPPING REQUESTED? JMP SMP7 YES * SZA,RSS LU GIVEN? JMP NOLU SESSION LU FOR SPOOL FILE NOT GIVEN * CPA D1 LU SPECIFIED IS LU 1? JMP ERM20 YES, THEN ERROR * ADA M64 GREATER THAN 63? SSA,RSS JMP ERM20 YES, ERROR * JSB EXEC GET STATUS WORD OF LU DEF *+4 DEF S13 =100015B NO ABORT RETURN DEF BUF23+1 LU SPECIFIED IN SETUP BUFFER DEF TEMP4 GET EQT WORD 5 JMP LUOK LU NOT IN SST, THEN OK * LDA TEMP4 EQT WORD 5 AND B36K =36000B CPA B14K EQUIPMENT TYPE CODE > 30B? JMP ERM20 YES, DISC LU -- ERROR * LUOK LDA BUF23+1 LU IS OK, SET IT UP IN SST JMP SETLU * * ERM20 LDA M20 NO, THEN ERROR STA TEMP1 ILLEGAL ACCESS LU JMP SRSEX EXIT * NOLU CLA CLEAR THE LU TABLE USED TO LDB LUTBL REMEMBER THE SESSION LU #'S CLRLU STA B,I ENCOUNTERED IN THE SST CPB LUTBE DONE? JMP SCNST YES INB NEXT WORD IN LU TABLE JMP CLRLU * SCNST JSB $SMVE READ THE SST DEF *+6 DEF D1 DEF SESID SESSION WORD DEF ZERO DEF SST DEF D71 LDA SST GET THE NEGATIVE LENGTH WORD FOR SST STA TEMP3 SAVE FOR COUNTER LDA ASST INA STA TEMP4 POINTER FOR THE SST SRCHL LDA TEMP4,I GET AN ENTRY FROM SST AND B377 ISOLATE SESSION LU INA STA TEMP6 SAVE FOR NOW ADA M64 > 63? SSA,RSS JMP NXTLU YES,THEN IGNORE THIS ENTRY * LDA TEMP6 SESSION LU FROM SST ENTRY CLB RRR 4 DIVIDE LU # BY 16 ADA LUTBL QUOTIENT GIVES THE WORD INDEX IN LUTBL STA TEMP6 SAVE THIS ADDRESS BLF GET THE REMAINDER STB TEMP5 REMAINDER INDICATES BIT POSITION TO SET ADB RRR CONFIGURE THE RRR INSTRUCTION WITH STB RRRIN THE NUMBER OF ROTATES TO PERFORM LDB RRL CONFIGURE ROTATE LEFT INSTR ADB TEMP5 TO RESTORE THE LUTBL WORD STB RRLIN LDA A,I GET CONTENTS OF LUTBL WORD RRRIN NOP RRR INSTRUCTION SETUP ONLINE IOR D1 SET THE BIT RRLIN NOP RRL INSTRUCTION SETUP ONLINE STA TEMP6,I RESTORE THE WORD IN LUTBL NXTLU ISZ TEMP4 POINT TO NEXT ENTRY IN SST ISZ TEMP3 INCREMENT NEGATIVE COUNT JMP SRCHL SET THE BITS FOR THE NEXT SESSION LU * * LDB LUTBE GET THE ADDR OF LAST WORD IN LUTBL STB TEMP3 SAVE ADDRESS LDB D63 LARGEST POSSIBLE SESSION LU# WRDLP LDA M16 COUNTER FOR # OF BITS IN ONE WORD STA TEMP4 LDA TEMP3,I GET A WORD FROM LUTBL BITLP SSA,RSS HIGH BIT SET? JMP SESPL NO, SESSION LU # FOR SPOOL IS FOUND * RAL MOVE THE NEXT BIT IN HIGH POSITION ADB M1 NEXT LU# SZB,RSS ALL LU #'S USED UP? JMP ERM47 NO AVAILABLE SESSION LU FOR SPOOL FILE * ISZ TEMP4 INCREMENT BIT COUNTER JMP BITLP CHECK NEXT BIT * LDA TEMP3 POINT TO NEXT WORD ADA M1 STA TEMP3 JMP WRDLP * SESPL SWP SESSION LU # FOR SPOOL SETLU STA TEMP4 SESSION LU JSB HIGHL FIND AVAIL LU FROM BOTTOM OF $LUAV JMP ERM22 NO AVAILABLE LU - ERROR STA TEMP3 SYSTEM SPOOL LU * LDA TEMP4 SET TEMP1 FOR RETURNING SPOOL LU JMP SMP11 * SMP7 JSB FINDU FIND AVAIL LU TO AVOID CONFLICT IN SST JMP ERM22 NO LU FOUND STA TEMP3 SET SYSTEM LU SMP11 STA TEMP1 USE THIS LU AS SESSION LU LDA BUF23+11 SSA,RSS IN BATCH? JSB .CACT NO, FIND DIRECTORY ENTRY # OF SESSION STA BUF23+11 JMP SMP9 * * NOSES STA TEMP6 SAVE LU # IF NOT IN SESSION JSB STOLU SET OTSPOOL LU IN SETUP BUFFER JSB FINDL FIND AVAILABLE LU IN $LUAV JMP ERM22 LU NOT FOUND, SEND ERROR STA TEMP3 SAVE LU STA TEMP1 SPOOL LU TO PASS BACK ADA M64 LU > 63(10)? SSA,RSS JMP ERM22 YES, ERROR * SMP9 JSB SMENU JMP ERM21 * LDA TEMP3 STA BUF23+1 SAVE LU# IN SETUP BUFFER. SSA IF NO LU THEN TAKE GAS! JMP ERMES * LDA BUF23+5 GET THE SECURITY CODE CPA SECCD 123456B? JMP SETOV YES, COMING FROM JOB, SET OVVERRIDE BIT * LDB BUF23+8 IS THIS A SPOOL POOL FILE? LSR 3 CLA DO NOT USE ANY OVERRIDE OPTIONS IF NOT SLB A SPOOL POOL FILE SETOV LDA MSIGN SPOOL POOL FILE - SEARCH ALL CARTRIDGES JSB OPNSP TRY TO OPEN THE SPOOL FILE. SSA JMP ERMES COULDN'T OPEN THE FILE? LDA S.1 GET THE FILE TYPE ELA,CLE,ERA CLEAR SIGN BIT SZA,RSS TYPE 0 FILE? JMP ERM16 TYPE 0 FILE ILLEGAL * LDA D.2 GET DISC CARTRIDGE OF FILE AND B77 CMA,INA STA BUF23+6 NEGATIVE LU# * *********** CHECK SECURITY FLAG AGAINST W/R FLAGS ************ LDA SESNF UNDER SESSION? SSA JMP SMP8 NO * * INSERT LU IN SESSION SWITCH TABLE * CLA STA TEMP5 INITIALIZE SST OFFSET WORD CCA ADA TEMP3 LU'S IN SST ARE LU#-1 STA TEMP3 CCB ADB TEMP1 STB TEMP1 ALF,ALF SYSTEM LU IN UPPER BYTE IOR B SESSION LU IN LOWER BYTE STA TEMP SAVE FOR NOW JSB $LIBR TURN OFF INTERRUPTS TO NOP MODIFY SESSION SWITCH TABLE JSB $SMVE READ SPARE ENTRIES IN SST DEF *+6 DEF D1 READ DEF SESID SESSION ID DEF D1 OFFSET FROM SST LENGTH WORD DEF SST BUFFER TO HOLD THESE SST ENTRIES DEF D70 MAX SIZE OF SST IS 70 WORDS LDB ASST ADDRESS OF BUFFER #SPRS LDA B,I FIND THE ADDRESS OF LAST SPARE ENTRY AND B377 MASK SESSION LU CPA ZERO SESSION TERMINAL? JMP PKSST YES, THEN PACK SST * CPA TEMP1 SESSION SPOOL LU? RSS YES JMP INC#S NO, INCREMENT COUNTER * LDA B,I GET THE SST ENTRY ALF,ALF AND B377 SYSTEM SPOOL LU CPA D254 IS IT 254? CCA,RSS YES, SPOOL FILE USING THIS LU WAS KILLED JMP INC#S NO * STA B,I RELEASE ENTRY FROM SST INC#S ISZ TEMP5 INCREMENT COUNTER FOR # OF SPARES INB NO, LOOK MORE JMP #SPRS * PKSST CPB ASST ARE THERE ANY SPARE ENTRIES? JMP NOSPC NO, THEN ERROR * ADB M1 YES, THEN ADDRESS OF LAST SPARE ENTRY STB TEMP4 POINTER POINTS TO FIRST AVAILABLE SPARE ENTRY PCKLP LDA B,I GET CONTENTS OF SPARE ENTRY IN SST CPA M1 IS IT EMPTY? JMP EMPTY YES * CPB TEMP4 NO, ALL SPARE ENTRIES PACKED SO FAR? JMP NOMV YES LDA B,I NO, MOVE CURRENT SPARE ENTRY STA TEMP4,I TO THE FIRST AVAILABLE EMPTY SLOT CCA MAKE CURRENT SPARE ENTRY EMPTY STA B,I NOMV LDA TEMP4 POINT TO NEXT SPARE ENTRY IN THE PACKED LIST ADA M1 STA TEMP4 EMPTY CPB ASST REACHED THE TOP OF SPARE ENTRY LIST? JMP SSTDN YES * ADB M1 NO, POINT TO NEXT ENTRY JMP PCKLP * SSTDN CMB,INB IF CURRENT SPARE POINTER IS ADB TEMP4 LOWER THAN START OF SST THEN NO MORES SPARES SSB ARE AVAILABLE JMP NOSPC NO EMPTY SLOTS LEFT IN SST, ERROR LDA TEMP SET UP THE NEW SST ENTRY STA TEMP4,I FOR SPOOL LU JSB $SMVE INSERT SYS & SESS LU WORD IN SST DEF *+6 DEF D2 WRITE DEF SESID SESSION ID DEF D1 START OF SST DEF SST WRITE ALL SPARE ENTRIES DEF TEMP5 # OF SPARE ENTRIES ISZ TEMP1 JSB $LIBX TURN ON INTERRUPTS DEF *+1 DEF *+1 * SMP8 LDA BUF23+8 IF BATCH INPUT RAL,ELA THEN CLA,SEZ CLEAR STA BUF23+15 OUTSPOOL LU. LDA BUF23+9 IF PRIORITY IS NEG SSA THEN CLA SET ZERO STA BUF23+9 TO AVOID Q PROBLEMS * LDB BUF23+15 GET OUTSPOOL LU SZB,RSS DEFINED? JMP SETST NO, THEN SET STATUS TO 0 * LDB BUF23+10 GET STATUS CPB "H" IF NOT HOLD JMP SSEQ * LDB "W" SET TO WAIT SETST STB BUF23+10 SSEQ JSB SSEQT SET UP THE EQT LDA BUF23+8 IF A WRITE ONLY ALF,ALF ACCESS CCE,SLA,RSS JMP SS5 NOT WRIT ONLY * LDA BUF23+1 GET THE LU RAL,ERA SET SIGN BIT TO USE TRUE LU. STA TEMP5 LDA B100 SET UP A EOF REQUEST STA TEMP6 JSB XLUEX DO EOF DEF *+3 DEF D3 DEF TEMP5 LDA B200 STA TEMP6 JSB XLUEX NOW BACKSPACE DEF *+3 DEF D3 DEF TEMP5 * SS5 LDA BUF23+8 FIX THE STD. FLAG CMA AS REQUIRED AND D16 ISOLATE THE BIT XOR CLSPT,I CLEAR IT IF NEED BE LDB CLSPT JSB PUT SET THE WORD BACK IN EQT11 JSB QUEUE QUEUE THE FILE IF NEEDED JMP MENU * S13 OCT 100015 B36K OCT 36000 B14K OCT 14000 M20 DEC -20 HED SMP SET UP EQT ROUTINE * SET UP SPOOL EQT ENTRY. * SSEQT NOP EQT SET UP SUB ROUTINE JSB FEQT FIND ADDRESS OF EQT. INB MAKE SURE THAT THIS IS LDA B,I REALLY A SPOOL EQT. CPA IS43A DO THIS BY CHECKING JMP SS3 EQT2 AGAINST THE INIT. * JMP ERM39 ENTRY POINT OF DVS43. * SS3 ADB D2 HAVE EQT ADDRESS. STB TEMP3 GET EQT4 ADDRESS. JSB $LIBR GO PRIVILEGED TO BE ABLE NOP TO STUFF THE EQT. LDA TEMP3,I SET OR CLEAR BUFFERING AND BMASK FLAG. LDB BUF23+8 SSB XOR BUFRD STA TEMP3,I ISZ TEMP3 LDA BUF23+7 GET DRIVER TYPE AND PUT ALF,ALF AND POSITION CORRECTLY STA TEMP3,I IN EQT5. LDB TEMP3 ADB D6 SET UP REMAINDER OF STB CLSPT SAVE ADDRESS OF EQT 11 LDA PARM1 IF THIS CMA,CLE,INA IS A SET UP FOR SPOUT CLEAR E LDA D16 SET THE STANDARD BIT AT ALL TIMES SEZ IF SPOUT USE ONLY THE STD. BIT IOR BUF23+8 DISPOSITION FLAGS. AND DMASK EQT11. STA B,I ADB D2 INDEX TO EQT EXTENSION. LDB B,I ADB D2 SAVE ADDRESS OF CURRENT STB TEMP3 TRACK/SECTOR. ADB D8 LDA S.4 SAVE FILE SIZE IN EQT26. STA B,I SAVE MASTER DIRECTORY ENTRY INB IN EQT27 AND EQT28. LDA D.2 STA B,I INB LDA D.3 STA B,I ADB M4 LDA D.4 STA B,I SAVE BEGINNING TRACK (EQT24). STA TEMP3,I SAVE CURRENT TRACK (EQT18). ISZ TEMP3 LDA DM128 SET STA TEMP3,I OFFSET ISZ TEMP3 CLA CLEAR THE STA TEMP3,I EXTENT #. ISZ TEMP3 LDA D.5 SAVE CURRENT SECTOR. AND B377 STA TEMP3,I INB STA B,I SAVE BEGINNING SECTOR. ADB D4 LDA BUF23+8 SET BATCH CHECK FLAG RAL,ELA IN E LDA PARM1 SETUP FOR SPOUT? SEZ IF NOT BATCH IN CHECK USE ZERO SZA ALSO FOR SPOUT CLA,RSS BATCH CHECKING DOESN'T APPLY. LDA PARM3 PUT BATCH CHECKING INFO. STA B,I INTO EQT29. INB LDA D.5 ALF,ALF AND B377 STA B,I SAVE # SECTORS TRACK. INB CLA INITIALIZE RECORD COUNT. STA B,I INB STA B,I INITIALIZE CLASS PARAMETER INB WORDS. STA B,I JSB $LIBX DEF SSEQT RETURN * NOSPC JSB $LIBX TURN ON INTERRUPTS DEF *+1 DEF *+1 LDA M41 NO FREE SPACE IN SST JMP CLNUP * ERM39 LDA TEMP1 SESSION SPOOL LU ADA M1 MINUS 1 JSB FSELU FREE LU FROM SST LDA M39 SPOOL LU NOT MAPPED TO DVS43 JMP CLNUP CLOSE SPOOL FILE * ERM16 LDA M16 TYPE 0 FILE ILLEGAL RSS ERM47 LDA M47 NO AVAILABLE SESSION LU FOR SPOOL FILE CLNUP STA TEMP1 JSB CLSFL CLOSE THE SPOOL POOL FILE JMP MENU * MSIGN OCT 100000 M41 DEC -41 M47 DEC -47 M39 DEC -39 IS43A BSS 1 DVS43 ENTRY POINT SAVE. DM128 DEC -128 M64 DEC -64 D6 DEC 6 D63 DEC 63 D8 DEC 8 D254 DEC 254 D.1 NOP D.2 NOP D.3 NOP D.4 NOP D.5 NOP S.1 NOP S.2 NOP S.3 NOP S.4 NOP S.5 NOP PTR22 DEF BUF22 PTR24 DEF BUF24 RECRD NOP DMASK OCT 630 "H" OCT 110 B200 OCT 200 LUTBL DEF *+1 BSS 4 LUTBE DEF *-1 * HED SMP QUEUE FILE FOR OUTSPOOL * THE FOLLOWING QUEUES A FILE FOR OUTSPOOLING. * QUEUE NOP JSB WRT23 WRITE OUT THE CONTROL RECORD LDA BUF23+15 IS THIS FILE TO SZA,RSS OUTSPOOLED? JMP SET10 NO. * AND B377 STA TEMP6 SAVE OUTSPOOL LU #. LDA BUF23+9 SAVE SPOOL PRIORITY. STA TEMP5 JSB SMENU GET SET TO PASS THIS JMP QUE1 SPOOL FOR OUTSPOOLING. * INB SAVE THE ADDRESS OF THE COUNT WORD STB SMENU FOR LATER LDB BUF23+8 CHECK IF THERE IS RBR,SLB A HOLD ON THIS FILE. JMP SET10 YES. * LDB BUF23+10 MUST ALSO BE IN "W" STATUS CPB "W" WELL RSS YES CONTINUE JMP SET10 NO DO NOT QUEUE * JSB RDLUQ GET THE LU QUEUE TO CORE JSB .DRCT SETTING UP HERE TO SEARCH DEF BUF21+3 THE QUEUE AND FIND OUT STA TEMP4 WHERE THE NEW ENTRY ADA M1 SET A FOR SCAN SET2 LDB A,I CAN BE PUT. INA STEP TO PRIORITY SZB,RSS END OF QUEUE? JMP SET1 YES. * LDB A,I GET PRIORITY CMB,INB WE HAVE A PRIORITY. ADB TEMP5 COMPARE WITH PRIORITY SSB OF NEW ENTRY. JMP SET1 NEW ENTRY IS LESS. * INA KEEP LOOKING FOR A JMP SET2 SPOT TO PUT NEW ENTRY. * SET1 ADA M1 HAVE A PLACE. STA TEMP3 SAVE A POINTER. LDA BUF21+1 FIND THE END OF ALS THE LIST. THE LIST FROM ADA TEMP4 POINT OF NEW ENTRY INA WILL BE SHIFTED TO MAKE SET4 STA TEMP6 ROOM FOR NEW ENTRY. ADA M2 SET UP SHIFT POINTERS. STA TEMP4 DLD TEMP4,I DO A SHIFT ON A DST TEMP6,I TWO-WORD ENTRY. LDA TEMP4 DECREMENT POINTERS. CPA TEMP3 JUST MOVED LAST ONE? RSS YES SKIP JMP SET4 NO - BACK THROUGH LOOP. * LDA RECNO PUT THE NEW ENTRY LDB TEMP5 IN THE VACATED SPACE. DST TEMP4,I ISZ BUF21+1 INCREMENT THE ENTRY COUNT. JSB WRLUQ WRITE OUT THE LU QUEUE LDA SMENU,I UPDATE THE MENU. ELA SAVE THE SIGN BIT LDA BUF21+1 GET THE NEW COUNT RAL,ERA SET SIGN IF NEEDED STA SMENU,I RESET THE COUNT SET10 LDA PARM1 SETUP PROCESSING? SZA IF NOT, BYPASS BIT SETTING. JMP QUEUE,I * LDA PTR22 READ AVAILABILITY BITS. LDB D2 JSB RDREC NOP *********************************************** LDB BPAT RESET AVAILABILITY BITS. STB ADDR1,I LDA PTR22 WRITE OUT AVAILABILITY RECORD. LDB D2 JSB WTREC LDB TEMP2 LDA B,I FIX UP $LUAV. CCE MAKE THE LU UNAVAILABLE. ELA,RAR JSB PUT INB LDA RECNO JSB PUT JMP QUEUE,I RETURN HED SMP MENU SET UP AND PASS TO SPOUT MENU LDA SHUTD IS THERE A SHUT DOWN SZA IN EFFECT? JMP RETRN * LDA SSTAT IS SPOUT ALREADY WORKING CPA D1 ON A MENU? JMP SRSEX YES - RETURN. * JSB HIGHL IS THERE AN AVAILABLE LU JMP SRSEX NO LU FOUND --- FOR SPOUT? * STA RESLU MENU1 LDA PTR25 MAKE UP A NEW MENU TO SEND STA TEMP3 TO SPOUT. PUT ONLY LU'S CLB SET TO CLEAR THE BUFFER STB A,I SET SEED LDB A INB JSB .MVW MAKE IT GROW DEF D15 NOP LDA MPTR IN THE MENU THAT ARE NOT STA TEMP4 IN USE AND ALSO HAVE A QUEUE MENU2 LDB TEMP4,I OF FILES TO BE OUTSPOOLED. STB TEMP3,I SZB,RSS END OF .MENU? JMP MENU3 YES. * ISZ TEMP4 NO - GO AHEAD AND CHECK IF LDB TEMP4,I IF THE LU IS IN USE BY ISZ TEMP4 SPOUT. SSB JMP MENU2 SPOUT IS ALREADY USING THE LU. * SZB IS ANYTHING ON THIS QUEUE. ISZ TEMP3 YES - SAVE THE ENTRY JUST MADE. JMP MENU2 * MENU3 LDA BUF25 SZA,RSS IS THERE ANYTHING TO SEND SPOUT? JMP SRSEX NO. * CLB,INB SET STATUS TO SHOW STB SSTAT SPOUT WORKING ON MENU LDA D2 SEND CLASS REQUEST STA TEMP5 TO SPOUT WITH A MENU. CLA,CCE STA TEMP6 LDA RESLU RESERVE THE LU ELA,RAR FOR SPOUT LDB TEMP2 JSB PUT MENU4 JSB CLSPT JMP MENU GIVE SPOUT ALL IT CAN TAKE. * CLSPT NOP JSB EXEC DEF *+8 DEF D20 WRITE-READ REQUEST DEF ZERO LU #. PTR25 DEF BUF25 MENU BUFFER. DEF D12 DEF TEMP5 CLASS PARAMETER 1. DEF TEMP6 CLASS PARAMETER 2. DEF SP.CL CLASS ID. JMP CLSPT,I * * D1 DEC 1 D11 DEC 11 M21 DEC -21 SST BSS 71 TEMP BSS 1 TEMP1 BSS 1 TEMP2 BSS 1 TEMP3 BSS 1 TEMP4 BSS 1 TEMP5 BSS 1 TEMP6 BSS 1 MPTR DEF .MENU SHUTD NOP RESLU NOP SSTAT NOP HED SMP ERROR AND EXIT ROUTINES NTRDY CLA ERMES STA TEMP1 JMP MENU * QUE1 CCA OUTSPOOL LU NOT LEGAL. STA BUF23 JSB PTR23 CLEAR THE RECORD ERM21 LDA M21 JMP ERMES * ERM22 LDA M22 JMP ERMES * RETRN LDA MPTR THEN DO A COMPLETE RETN3 LDB A,I TERMINATION SO AS TO SZB,RSS ALLOW ACCESS TO THE JMP RETN2 SPLCON FILE FOR A * INA USER PACK, ETC. LDB A,I IF SPOUT IS NOT ACTIVE SSB AND THERE IS A SHUTDOWN JMP SRSEX IN EFFECT. * INA JMP RETN3 * RETN2 CLA,RSS OK TO SHUT DOWN SRSEX CLA,INA SAVE RESOURCES SHUT DOWN STA EXIT,I SAVE FOR EXIT * JSB POST MAKE SURE SPLCON BUFFERS DEF *+2 ARE POSTED. DEF DCB1 JSB UNLOK CLEAR SPLCON RN #. DEF SRN JSB DTACH IF UNDER SESSION - DETACH DEF *+2 NOP ****** DUMMY PARAMETER ********* JSB EXEC SCHEDULE SPOUT WITH QUEUE DEF *+3 DEF D10 DEF SPOUT RETN5 JSB PRTN PASS BACK PARAMETERS DEF *+2 TO THE CALLER. DEF TEMP1 CCB SET B AS INDICATOR RETN4 JSB EXEC COMPLETION RETURN. DEF *+4 DEF D6 DEF ZERO INDICATE CALLER. EXIT DEF WRLUQ SAVE RESOURCES TERMINATION. SSB IF TIME ENTRY JMP TRYAG GO TRY THE MENU AGAIN * JSB RMPAR THIS ENABLES US TO SAVE DEF *+2 INDICATORS AND KEEP SPLCON DEF PARM1 OPEN ALL THE TIME. JMP SMP1 * LULOK CLB SPOUT HAS LU LOCK CONDITION. STB SSTAT JSB SPS RELEASE THE RESERVED LU SWP JSB PUT JSB EXEC SCHEDULE SMP WITH OFFSET DEF *+6 AND CHECK THE HOW WE GOT TO THIS DEF D12 POINT OF SUSPENSION WHEN WE DEF SMPNA ARRIVE. IF ORDINARY SCHEDULE DEF D2 DEF ZERO DEF M8 REQUEST, PROCESS NORMALLY. JMP SRSEX GO EXIT HED SMP SUBS (RDLUQ,WRLUQ,UNLOK,LOCK,BITFX,FEQT) RDLUQ NOP ROUTINE TO READ THE LU QUEUE LDA PTR21 SET UP TO READ 8 RECORDS. LDB M8 THIS IS ONE LU QUEUE. STB TEMP3 LDB LUREC READ THE APPROPRIATE SET6 JSB RDREC BLOCK. JMP ERMES READ ERROR. * LDB RECRD CLB SET FOR AUTO REC. INCREMENT LDA BUFSP FOR NEXT RECORD. ADA D16 ISZ TEMP3 FINISHED READING BLOCK? JMP SET6 * JMP RDLUQ,I YES RETURN * LUREC NOP M8 DEC -8 * WRLUQ NOP WRITE OUT THE LU Q LDA PTR21 SET UP TO WRITE LDB M8 OUT THE LU QUEUE. STB TEMP3 8 - 16 WORD RECORDS. LDB LUREC SET7 JSB WTREC WRITE A 16 WORD RECORD. LDA BFSP1 UPDATE BUFFER POINTER ADA D16 TO NEXT RECORD. CLB ISZ TEMP3 JMP SET7 * JMP WRLUQ,I DONE SO EXIT * * TRYAG JSB LOCK DEF SRN JMP MENU GO TRY THE MENU * UNLOK NOP LDA UNLOK,I STA RESNO ISZ UNLOK JSB RNRQ DEF *+4 DEF D4 RESNO BSS 1 DEF IERR JMP UNLOK,I * LOCK NOP LDA LOCK,I STA RESNU ISZ LOCK JSB RNRQ DEF *+4 DEF D1 RESNU BSS 1 DEF IERR JMP LOCK,I * * BITFX NOP STB A AND D15 CMA STA FEQT CLA,INA ISZ FEQT JMP *+4 * BRS,BRS BRS,BRS JMP BITFX,I * RAL JMP *-6 * * * SUBROUTINE TO FIND EQT ADDRESS CORRESPONDING * TO A GIVEN LU #. * FEQT NOP CCA,CCE FIND ADDRESS OF EQT CORRESPONDING ADA DRT TO THE AVAILABLE LU #. ADA BUF23+1 LDA A,I AND B77 GET EQT NUMBER AND INDEX ADA M1 TO THE PROPER ENTRY. MPY D15 ADA EQTA STA B ADA D12 SET EXTENSION LDA A,I ADDRESS IN A JMP FEQT,I HED SMP SUBS (CLSFL,FINDU,HIGHL,TROLU,STOLU,SPS) * CLSFL - ROUTINE TO CLOSE THE SPOOL FILE DUE TO ERROR IN SETUP PROCESS * CALLING SEQUENCE: JSB CLSFL * CLSFL NOP CLA CLB DST WTREB SIMPLE CLOSE JSB EXEC SCHEDULE D.RTR TO CLOSE SPOOL FILE DEF *+10 DEF D23 DEF D.RTR DEF XEQT DEF ZERO DEF D.2 DEF D.3 DEF ZERO DEF WTREB DEF D2 * JMP CLSFL,I RETURN * * * FINDU - ROUTINE FINDS AN AVAILABLE LU IN $LUAV TABLE * SUCH THAT LU < 64, LU IN NOT DEFINED ON THE SESSION * SIDE IN SST * * FINDL - FINDS AN AVAILABLE LU IN $LUAV TABLE STARTING FROM TOP * END OF THE TABLE * FINDU NOP LDA FINDU STA FINDL SET UP RETURN ADDRESS CCA SET FLAG TO INDICATE COMING FROM FINDU JMP FIND0 * FINDL NOP FIND AVAILABLE LU. CLA FIND0 STA TEMPA LDA LUAVA STA TEMP2 LDA TEMP2,I STA FEQT FIND1 ISZ TEMP2 LDA TEMP2,I SSA,RSS JMP FIND2 * ISZ TEMP2 ISZ FEQT JMP FIND1 * JMP FINDL,I RETURN TO P * FIND2 LDB TEMPA COMING FROM FINDU? SSB,RSS JMP FIND3 NO, RETURN TO P+1 STA TEMP3 YES ADA M64 >63? SSA,RSS JMP FIND1 YES, THEN TRY NEXT ONE * JSB LUTRU DEF *+3 DEF TEMP3 IS THIS LU DEFINED DEF TEMP1 ON SESSION SIDE IN SST? LDA TEMP1 SSA,RSS JMP FIND1 LU IS DEFINED, LOOK FOR ANOTHER LU LDA TEMP3 LU# FIND3 ISZ FINDL LU NOT DEFINED JMP FINDL,I * * HIGHL - ROUTINE FINDS AN AVAILABLE LU IN $LUAV STARTING * FROM THE BOTTOM END OF THE TABLE * HIGHL NOP LDB LUAVA,I -VE LENGTH OF $LUAV STB FEQT SAVE CMB BLS GET (#WORDS-2) IN TABLE INB ADB LUAVA ADDRESS OF LAST LU # IN $LUAV HIGH1 LDA B,I GET CONTENTS OF ENTRY IN $LUAV SSA,RSS BUSY BIT SET? JMP HIGH2 NO, THEN FOUND IT ADB M2 POINT TO LOWER ADDRESS IN $LUAV ISZ FEQT JMP HIGH1 * JMP HIGHL,I NO LU IS AVAILABLE HIGH2 STB TEMP2 ISZ HIGHL JMP HIGHL,I RETURN * * * TROLU - ROUTINE TO FIND TRUE SYSTEM LU CORRESPONDING * TO SESSION OUTSPOOL LU * CALLING SEQUENCE: A REG = SESSION OUTSPOOL LU * JSB TROLU * RETURNS: JMPS TO ERM40 IF NO LU FOUND * TEMP5 IS SESSION LU * TEMP6 IS SYSTEM LU * * TROLU NOP ADA M1 DECREASE BY 1 TO MATCH LU IN SST STA TEMP5 SAVE SESSION LU# JSB $SMVE GET SST DEF *+6 DEF D1 DEF SESID DEF ZERO NO OFFSET DEF SST DEF D71 71 WORDS MAX IN SST LDA SST GET -VE LENGTH WORD STA TEMP LDA ASST INA POINT TO FIRST ENTRY IN SST STA TEMPA SPLLP LDA TEMPA,I GET CONTENTS OF ENTRY IN SST AND B377 IS IT THE SAME AS SESSION CPA TEMP5 OUTSPOOL LU? JMP FNDLU YES,CHECK IF CORRESP SYS LU IS A SPOOL LU ENLP ISZ TEMPA ISZ TEMP INCREMENT -VE LENGTH JMP SPLLP JMP ERM40 ERROR * FNDLU LDA TEMPA,I GET SST ENTRY ALF,ALF GET UPPER BYTE INA AND B377 SYSTEM LU CPA B377 IS IT 255? RSS JMP CKSPL NO, CHECK IF SPOOL LU LDA TEMP5 GET SESSION OUTSPOOL LU - 1 JSB FSELU FREE LU FROM SST JMP ENLP LOOK FOR ANOTHER ENTRY OF OUTSPOOL LU * CKSPL LDB PARM2 SAVE PARM2 STB TEMPB STA PARM2 SYSTEM LU IS SPOOL LU? JSB FLU RSS LU NOT SPOOL LU, THEN TRUE LU FOR OUTSPOOL JMP ENLP SPOOL LU, LOOK FOR NEXT ONE ISZ TEMP5 LDA PARM2 STA TEMP6 SYSTEM LU LDA TEMPB STA PARM2 JMP TROLU,I RETURN * * * STOLU - SET TRUE OUTSPOOL LU IN BITS 0-7 OF BUF23+15 * STOLU NOP LDA BUF23+15 SZA,RSS OUTSPOOL LU SPECIFIED? JMP STOLU,I NO, RETURN AND B3700 ISOLATE FUNCTION CODE ALS,ALS MOVE TO BITS 8-12 IOR TEMP6 MERGE WITH OUTSPOOL LU STA BUF23+15 SAVE JMP STOLU,I RETURN * * * SPS NOP LDA LUAVA GET ADDRESS OF $LUAV. SPS0 INA STEP TO FIRST ENTRY LDB A,I GET THE LU INA STEP TO THE RECORD NUMBER SSB IF BUSY, LDB A,I GET THE RECORD NUMBER SZB IF ZERO THEN THIS IS IT JMP SPS0 ELSE TRY NEXT ONE * STA TEMP2 SAVE THE RECORD NO. ADDRESS ADA M1 AND THE LU ADDRESS LDB A,I GET THE LU RBL,CLE,ERB CLEAR THE BUSY BIT STB RESLU AND SAVE THE LU JMP SPS,I HED SMP SPOUT SELECT A FILE ROUTINE SPSEL CLA CLEAR WORK (SPOUT HAS SELECTED) STA SSTAT IN PROGRESS FLAG LDA PARM2 GET THE LU AND SET IN CASE WE NEED TO STA BUF23+15 CALL OFF SPOUT JSB SPS SEARCH $LUAV FOR A RESERVED LU. JSB SMENU GET THE MENU ENTRY JMP KILL3 CAN'T FIND?? SHOULD NEVER HAPPEN * INB STB TEMP6 SAVE THE POINTER LDB A RECORD NUMBER TO B LDA PTR24 READ THE TOP OF THE JSB RDREC LU QUEUE AND PICK NOP ******************************************* CLA SET THE Q ENTRY PRIORITY TO STA BUF24+3 TO ZERO TO INDICATE LDA PTR24 IT AS ACTIVE (PREVENTS LDB LUREC INSERTS AHEAD OF IT) JSB WTREC WRITE IT BACK OUT LDB BUF24+2 UP THE FIRST ENTRY. STB RECNO SAVE SPLCON RECORD # OF FILE. LDA PTR23 READ SPLCON RECORD. JSB RDREC NOP ********************************************** LDA RECNO SET THE RECORD NUMBER LDB TEMP2 IN THE LUAV TABLE JSB PUT LDA RESLU AND THE LU STA BUF23+1 IN THE RECORD LDA MSIGN OVERRIDE OPTION TO SEARCH ALL CARTRIDGES JSB OPNSP TRY TO OPEN THE FILE. SSA,RSS JMP SPS1 NO. JSB FILER YES - SEND ERROR MESSAGE JMP KILL3 KILL SPOOL * SPS1 LDB "A" SET FILE TO ACTIVE - STB BUF23+10 IT WILL BE OUTSPOOLED. JSB WRT23 UPDATE THE FILE JSB SSEQT SET UP EQT ENTRY. CLA,CCE,INA COME HERE AFTER SETTING STA TEMP5 UP SPOOL EQT. LDA TEMP6,I GET POSITION OF LU IN ELA,RAR MENU AND MARK IT TO STA TEMP6,I SHOW THAT SPOUT IS SPS7 LDB BUF23+8 IS BUSY WITH THAT LU. CCE POTENTIAL OVERLAP PROBLEM? RBR,SLB IF SO, SET SIGN BIT IN CME CLASS PARAMETER TO BE PASSED LDA BUF23+15 TO SPOUT. ELA,RAR STA TEMP6 RBR,CLE,RBR RBR,SLB CCE LDA BUF24 GET # QUEUED LINES. AND C377 ISOLATE IOR RESLU INDICATE LU AND FILE TYPE. ELA,RAR STA BUF25 JMP MENU4 HED SMP SUBS (SMENU) * SMENU NOP LDA BUF23+15 IF NO LU AND B377 SZA,RSS THEN JMP SM2 JUST EXIT * STA FINDL SAVE THE REQUESTED LU LDB MPTR SEARCH MENU FOR DEQ4 LDA B,I OUTSPOOL LU. CPA FINDL THIS IT?? JMP SM1 YES GO EXIT FOUND * SZA,RSS IF END OF TABLE JMP SMENU,I TAKE NOT FOUND EXIT * ADB D2 JMP DEQ4 * SM1 LDA MPTR COMPUTE THE LU QUEUE CMA,INA RECORD NUMBER ADA B FOR THIS LU ALS,ALS ADA D9 STA LUREC AND SAVE IT FOR RDLUQ SM2 ISZ SMENU STEP TO FOUND EXIT JMP SMENU,I AND RETURN * D9 DEC 9 P21.2 DEF BUF21+2 HED SMP DEQUEUE ROUTINES (SUP DQ) DEQUX LDA PARM3 IF NO ERROR CMA,INA,SZA,RSS JUST D Q JMP DEQUE * JSB MSFIX FIX UP THE MESSAGE ASC 3,EOF ER STRING FOR MESSAGE DEC 13 * DEQUE JSB PRGEX RELEASE THE SPLCON RECORD JSB DQ DEQUE THE FILE JMP NTRDY EXIT * DQ NOP DEQUE SUBROUTINE ENTER WITH E=0 IF JSB SMENU FIND THE LU FOR THIS FILE JMP ERM21 DIDN'T FIND - ERROR. * INB SAVE THE ADDRESS FOR UPDATE STB PRGEX JSB RDLUQ GET THE LU QUEUE TO CORE LDA PTR21 DEQ11 ADA D2 FIND THE POSITION IN LDB A,I THE QUEUE. CPB RECNO JMP DEQ10 FOUND IT * CPA LIM END OF QUEUE? JMP DQ,I YES - LEAVE. * JMP DEQ11 KEEP LOOKING * DEQ10 LDB PRGEX,I GET THE # OF ENTRIES FLAG ADB M1 DECREMENT IT CPA P21.2 IF FIRST ENTRY RBL,CLE,ERB CLEAR THE BUSY FLAG STB PRGEX,I SET IT BACK DEQ12 STA TEMP2 HAVE IT. ADA D2 STA TEMP3 CMA,INA ADA PTR21 ADA D127 SSA END OF BLOCK? JMP DEQ13 YES. * DLD TEMP3,I NO - MOVE UP NEXT ENTRY. DST TEMP2,I LDA TEMP3 JMP DEQ12 * DEQ13 CLA CLB DST TEMP2,I CCA ADA BUF21+1 DECREASE # OF ENTRIES. STA BUF21+1 JSB WRLUQ WRITE OUT THE LU QUEUE JMP DQ,I ELEMENT DEQUED SO EXIT * * CLRAV NOP CLEAR THE LUAVA ENTRY USING RECNO LDB LUAVA FIND THE SPOOL LU LDA B,I SET THE COUNT STA PUT INCASE NOT FOUND DEQ16 ADB D2 INDEX TO THE NEXT RECORD ENTRY LDA B,I CPA RECNO THIS THE ONE?? JMP DEQ15 YES GO DO IT * ISZ PUT MORE?? JMP DEQ16 YES TRY NEXT ONE * CCE INDICATE NOT FOUND JMP CLRAV,I RETURN * DEQ15 JSB FRELU FREE THE LU JMP CLRAV,I RETURN HED SMP SUBS (FRELU,FSELU) * FRELU - CALLING SEQUENCE: B REG = ENTRY # IN $LUAV * JSB FRELU * FRELU NOP FREE LU AND ITS EQT IF ONE CLA CLEAR THE RECORD # SLOT JSB PUT IN THE LUAV ADB M1 BACK TO THE LU NUMBER LDA B,I GET THE NUMBER STA TEMPA RAL,CLE,ERA CLEAR THE SIGN STA BUF23+1 SET FOR POSSIBLE FURTURE USE JSB PUT RESET WORD SEZ,CME,RSS IF NOT BUSY OR NOT FOUND JMP FRELU,I EXIT WITH E = 1 * LDA B3700 STA TEMPB JSB XLUEX CALL SMD TO POST ANY REMAINING BUFFERS DEF *+5 DEF S1 =100001B DEF TEMPA DEF BUF21 DEF D16 NOP IGNORE ERROR RETURN * JSB FEQT GET THE EQT ADDRESS STA B SET TO ADB D11 CLEAR EQT27 TO STOP LDA B,I SAVE IT FOR CLOSE STA D.2 FIRST CLA,CLE ANY ACCESSES JSB PUT DO IT JSB UNLOK CLEAR THE HOLD RN DEF WRN CLE CLEAR E TO INDICATE FOUND JMP FRELU,I RETURN * S1 OCT 100001 TEMPA NOP TEMPB NOP TEMPC NOP TEMPD NOP TEMPE NOP * * * FSELU - ROUTINE TO FREE SPOOL LU FROM THE SST * CALLING SEQUENCE: A REG = SESSION SPOOL LU - 1 * = -(SYSTEM SPOOL LU -1) * * FSELU NOP STA FSTMP SAVE FOR NOW SSA IS IT A SYSTEM SPOOL LU? CMA,INA YES, MAKE IT POSITIVE STA FSTM1 CLA,INA STA TEMP4 OFFSET TO POINT TO LU IN SST JSB $LIBR TURN OFF INTERRUPTS TO MODIFY SST NOP JSB $SMVE MOVE SST INTO SMP'S BUFFER DEF *+6 DEF D1 READ DEF SESID SESSION WORD DEF ZERO ASST DEF SST BUFFER TO READ IN SST DEF D71 MAX SIZE OF SST * LDB FSTMP SESSION LU OR -(SYSTEM LU) LDA M70 USE AS COUNTER STA FSTMP LDA ASST ADDRESS OF SESSION SWITCH TABLE STA SST SAVE SST ADDRESS LULP ISZ SST POINT TO NEXT SST ENTRY LDA SST,I GET SST ENTRY SSB SYSTEM SPOOL LU? ALF,ALF YES, MOVE SYSTEM LU IN SST TO LOW BYTE AND B377 MASK SPOOL LU CPA FSTM1 MATCHES SPOOL LU? JMP LUFND YES * LDA SST,I GET SST ENTRY AND B377 GET SESSION LU CPA ZERO LU 1? JMP LUEX YES, LU NOT IN SST * ISZ TEMP4 INCREMENT OFFSET ISZ FSTMP INCREMENT COUNTER JMP LULP NOT DONE YET, GET NEXT SST ENTRY JMP LUEX LU NOT DEFINED IN SST - ERROR * LUFND JSB $SMVE WRITE BACK MODIFIED SST DEF *+6 DEF D2 WRITE DEF SESID SESSION ID DEF TEMP4 OFFSET INTO SST DEF M1 BUFFER ADDRESS DEF D1 MODIFY ONE WORD IN SST * LUEX JSB $LIBX TURN ON INTERRUPTS DEF FSELU RETURN * FSTMP NOP FSTM1 NOP HED SMP RELEASE A HOLD ROUTINE * RELSE LDA PTR23 LDB PARM2 STB RECNO JSB RDREC NOP ********************************************** LDA BUF23+1 NEED TO SAVE IN CASE STA PARM2 OF RESTART. LDB PARM4 LOOK AT REL/RES FLAG. LDA PARM5 CPA "AH" ACTIVE FILE? JMP RELS1 YES. * SSB RELEASE? JMP REQUE YES - REQUEUE. * SZB POSSIBLE LU CHANGE. STB BUF23+15 SAVE NEW LU. REQUE JSB QUEUE JMP MENU * RELS1 SSB,RSS A RELEASE? JMP RELS2 NO MUST RESTART. * JSB FEQT ADB D10 CLE SET TO CLEAR THE BIT LDA HMASK SET THE BIT TO BE CLEARED JSB PUTM GO CLEAR IT LDA BUF23+1 STA RESLU JSB SMENU JMP KILL3 INB STB TEMP6 SAVE SPLCON REC# FOR LU LDB A LDA PTR24 JSB RDREC NOP LDA PARM3 STA PARM2 CLA,INA STA TEMP5 JMP SPS7 * RELS2 JSB SPTUN JSB FLU FIND THE LU RSS IF NONE SKIP JSB FRELU FREE IT DEQ18 JSB DQ DEQUE THE FILE LDA PTR23 RELEASING AN ACTIVE LDB RECNO FILE AND RESTARTING IT - JSB RDREC MUST QUEUE IT UP. NOP ********************************************** LDA PARM4 NEW LU? SZA WELL?? STA BUF23+15 YES - SAVE IT. LDA PTR21 READ IN 1ST RECORD CLB,INB FOR QUEUE. JSB RDREC NOP ********************************************** JMP REQUE * LIM DEF LIMIT D127 DEC 127 D15 DEC 15 HED SMP KILL SPOOL ROUTINE KILL LDB PARM2 STB RECNO SAVE SPLCON RECORD #. LDA PTR23 READ THE SPLCON RECORD JSB RDREC FOR THIS FILE. NOP *********************************************** LDA PARM5 IS THIS AN ACTIVE CPA "A" FILE (BEING OUTSPOOLED)? RSS YES TREAT AS IF ACTIVE HOLD * CPA "AH" ACTIVE HOLD? KILL3 JSB SPTUN YES. JSB DTACH DETACH FROM SESSION SO THAT A SPOOL DEF *+2 FILE OUTSIDE YOUR SESSION CAN BE CLOSED NOP *****DUMMY PARAMETER******** JMP DEQUE GO DO IT. * B100 OCT 100 "AH" ASC 1,AH HED SMP SUBS (PUTM,SPUTN) SHUT DOWN/ START UP HED SMP SUBS (PUT,OPNSP,PRGEX) PUTM NOP ROUTINE TO SET OR CLEAR BIT SET IN A JSB $LIBR AND ADDRESSED BY 'B' 'E'=1 TO SET NOP 'E'=0 TO CLEAR THE BIT STA FEQT SAVE THE BIT(S) IOR B,I SET THE BIT IN ANY CASE SEZ,RSS IF CLEAR REQUEST XOR FEQT CLEAR THE BIT STA B,I RESET AND JSB $LIBX DEF PUTM EXIT * * SPTUN NOP JSB FEQT SET HOLD BIT TO STOP SPOUT ADB D10 LDA HMASK HOLD BIT TO EQT11 JSB PUTM GO SET IT CLA MAKE SURE AND CALL STA BUF25 SPOUT SO THAT IT LDA D3 WILL UNLOCK THE LU STA TEMP5 BEING USED TO LDA BUF23+15 DUMP THIS FILE AND B377 STA TEMP6 JSB CLSPT JMP SPTUN,I * "D" OCT 104 * SHUT LDA "D" STA SHUTD JMP RETRN * STUP EQU * IFN JSB DBUGR DEF *+1 XIF CLA STA SHUTD JSB UNLOK RELEASE JOB HOLD JUST IN CASE DEF WRN JMP MENU HED SMP DEVICE DOWN & HOLD ROUTINES DVCDN JSB MSFIX DEVICE WENT DOWN WHILE ASC 3,DOWN OUT SPOOLING D16 DEC 16 LENGTH OF MESSAGE (WORDS) JMP HOLD1 GO HOLD THE FILE * HOLD LDB PARM2 PICK UP AND SAVE RECORD STB RECNO NUMBER OF FILE IN SPLCON. LDA PTR23 READ IN APPROPRIATE FILE JSB RDREC RECORD IN SPLCON. NOP *********************************************** LDA PARM5 HOLDING AN ACTIVE FILE? CPA "A" JMP HOLD1 * JSB DQ NO - DEQUEUE THE FILE. JMP NTRDY AND EXIT * HOLD1 JSB FEQT SET A BIT IN SPOOL EQT ADB D10 FOR SMD. LDA HMASK JSB PUTM GO SET THE HOLD BIT LDA "AH" SET HOLD FLAG STA BUF23+10 JSB WRT23 WRITE THE RECORD JMP NTRDY * WRT23 NOP WRITE REC RECNO FROM BUF23 LDA PTR23 SET BUFFER ADDRESS LDB RECNO AND RECORD NUMBER JSB WTREC WRITE THE RECORD JMP WRT23,I AND RETURN * D10 DEC 10 HMASK OCT 10000 OPTN NOP HED SMP OUTSPOOL RECORD TOO LONG ROUTINE LONG LDA BUF23+15 GET OUSPOOL LU AND B377 CCE JSB $CVT3 CONVERT TO ASCII DECIMAL INA GET THE LAST 3 DIGITS DLD A,I DST LUNO SET UP THE MESSAGE JSB .DFER MOVE FILE NAME INTO MESSAGE DEF FILNM DEF BUF23+2 SOURCE BUFFER WITH FILE NAME JSB PRINT PRINT MESSAGE DEF RECMS ADDRESS OF BUFFER DEF D26 JMP MENU RETURN * RECMS ASC 3,SMP:LU LUNO ASC 3, 3 DIGIT LU PLUS 2 BLANKS FILNM ASC 3, OUTSPOOL FILE NAME ASC 17, RECORD(S) TRUNCATED TO 128 WORDS D26 DEC 26 HED SMP SUBS (PUT,OPNSP,PRGEX) PUT NOP JSB $LIBR NOP STA B,I JSB $LIBX DEF PUT * * OPNSP NOP STA OPTN SET OPEN OPTION LDA BUF23+2 SET SIGN BIT ON 1ST CCE WORD OF FILE NAME. ELA,RAR STA BUF23+2 SAVE IT. JSB EXEC TRY TO OPEN THE FILE. DEF *+10 DEF D23 SCHEDULE WITH WAIT. DEF D.RTR D.RTR. DEF ID ID SEGMENT ADDRESS. DEF OPTN OPEN OPTION DEF BUF23+6 CARTRIDGE ID. DEF BUF23+5 SECURITY CODE DEF ZERO DEF BUF23+2 DEF D3 NAME STRING LENGTH JSB RMPAR DEF *+2 GET PARAMETERS BACK DD.1 DEF D.1 FROM D.RTR. JSB EXEC GET STRING PASSED BY D.RTR DEF *+5 DEF D14 DEF D1 DEF S.1 DEF D5 GET ALL 5 WORDS PASSED LDA BUF23+2 CLEAR SIGN BIT ELA,CLE,ERA STA BUF23+2 LDA D.1 SUCCESSFUL OPEN? JMP OPNSP,I * D5 DEC 5 * SPREC NOP * PRGEX NOP LDA PTR22 LDB D2 READ SPLCON AVAILABILITY BITS. JSB RDREC NOP ************************************************ LDB SPREC GET SPLCON RECORD # CMB,INB RELATIVE TO THE BEGINNING ADB RECNO OF THE FILE DESCRIPTOR JSB BITFX RECORDS. ADB PTR22 STA BITFX IOR B,I CLEAR THE BIT. XOR BITFX STA B,I LDA PTR22 LDB D2 JSB WTREC WRITE AVAILABILITY RECORD. CCA STA BUF23 JSB WRT23 WRITE FILE DESCRIPTOR RECORD. JSB CLRAV CLEAR ANY LU ASSOCIATED WITH THIS FILE SEZ WAS THERE A CURRENT ONE? JMP PRNLU NO, MUST OPEN TO CLOSE * JSB FEQT YES LU WAS SET FOR FEQT ADA D10 GET ADDRESS OF FILE PRAMS PRPU LDB A,I GET THE FILE SIZE PRPU1 CMB,INB SET NEGATIVE FOR PURGE ADA D2 STEP TO THE DIR. ADDRESS WORD STA TEMP4 LDA BUF23+8 GET THE OPTION WORD SLA IF SAVE IN EFFECT CLB CHANGE TO SIMPLE CLOSE AND D8 ISOLATE SPOOL POOL FILE BIT SZA IF POOL FILE LDB A CHANGE TO PURGE EXTENTS STB WTREC SET THE PRAMETER CLA SET HIGH BITS OF DOUBLE WORD SSB CCA STA WTREB JSB EXEC SCHEDULE D.RTR DEF *+10 DEF D23 WITH WAIT TO DEF D.RTR CLOSE A FILE DEF XEQT AND PURGE EXTENTS. DEF ZERO DEF D.2 DEF TEMP4,I DEF ZERO DEF WTREB DEF D2 PRNFL LDA BUF23+8 GET SPOOL POOL FLAG AND D8 CPA D8 IF SPOOL POOL JMP PRG0 GO SET UP * JMP PREX ELSE JUST RETURN * PRNLU LDA MSIGN OVERRIDE OPTION TO SEARCH ALL DISCS JSB OPNSP OPEN THE FILE SO CAN PURGE SSA WAS IT FOUND?? JMP PRNFL NO * LDA DD.1 YES SET THE ADDRESSES LDB S.4 FILE SIZE JMP PRPU1 AND GO PURGE THE FILE * PRG0 JSB POST MUST ACCESS JOB FILE DEF *+2 DDCB DEF DCB1 LDA PTRJF SET UP THE JOB FILE LDB DDCB JSB .MVW DEF D16 BY MOVING IN THE DCB NOP JSB LOCK DEF JRN LDA PTR24 READ IN SPOOL POOL FILE LDB D17 AVAILABILITY BITS. JSB RDREC NOP ********************************************* LDA BUF23+4 CONVERT POOL FILE # AND D15 STA TEMP4 LDA BUF23+4 ALF,ALF AND D15 MPY D10 ADA TEMP4 CCB SET NUMBER LESS 1 ADB A IN B JSB BITFX FIND AVAILABILITY BIT. STB TEMP4 SET OFFSET ADDRESS ADB PTR24 ADB D4 CMA MAKE AN ANDING MASK STA TEMP5 AND SAVE IT IN CASE A JOB AND B,I CLEAR THE BIT AND STORE. STA B,I LDA PTR24 WRITE OUT JOBFIL RECORD 17. LDB D17 JSB WTREC SPOOL FILE IS RETURNED TO POOL LDA PTR25 LDB BUF23+11 IF SPOOL NOT CONNECTED SSB,RSS WITH A JOB, FORGET THIS STUFF. JMP DEQ7 ELB,CLE,ERB REMOVE SIGN BIT * JSB RDREC ELSE READ IN THE JOB RECORD NOP *************************************** LDB P2511 GET ADDRESS OF POOL BITS STB TEMP6 SAVE FOR RELEASE CHECK ADB TEMP4 INDEX INTO AND LDA TEMP5 CLEAR AND B,I THE FREEDED BIT STA B,I FIX OWNED SPOOL BITS OF THE JOB. LDA BUF25+2 GET THE JOB STATUS CPA "CS" IF NOT CS RSS THEN JMP DEQ6 DO NOT CLEAR THE ENTRY * LDB M5 CHECK IF ALL OWNED FILES ARE CLOSED? DEQ8 LDA TEMP6,I SZA ANY HERE? JMP DEQ6 YES DO NOT FREE THE RECORD * ISZ TEMP6 STEP THE COUNT INB,SZB ALL TESTED? JMP DEQ8 NO TRY NEXT ONE * CCA ALL OWNED SPOOLS ARE CLEAR. STA BUF25 DEALLOCATE THE RECORD. DEQ6 LDA PTR25 LDB BUF23+11 WRITE OUT THE RECORD. ELB,CLE,ERB REMOVE SIGN BIT JSB WTREC DEQ7 JSB POST DEF *+2 PDCB DEF DCB1 JSB UNLOK DEF JRN JSB UNLOK DEF WRN LDA PTRSF RESET UP THE SPOLCON FILE LDB PDCB JSB .MVW DEF D16 NOP PREX JSB CLRAV CLEAR ANY ADDITIONAL SEZ,RSS LU'S ASSIGNED TO THIS JMP PREX FILE * JMP PRGEX,I EXIT TO CALLER * JRN NOP SRN NOP WRN NOP D17 DEC 17 M5 DEC -5 P2511 DEF BUF25+11 "CS" ASC 1,CS HED SMP SUBS (WTREC,RDRED,FILER,CVTNO,PRINT,MSFIX) WTREB NOP THESE TWO WORDS WTREC NOP MUST BE SEQUENTIAL STA BFSP1 STB RECRD JSB WRITF DEF *+6 DEF DCB1 DEF IERR BFSP1 BSS 1 DEF D16 DEF RECRD JSB FILER REPORT FILE ERROR IF ANY JMP WTREC,I * RDREC NOP STA BUFSP STB RECRD JSB READF DEF *+7 DEF DCB1 DEF IERR BUFSP BSS 1 DEF D16 DEF FILER DUMMY PLACE HOLDER DEF RECRD SSA,RSS IF NO ERROR ISZ RDREC TAKE OK EXIT ELSE P+1 JSB FILER REPORT FILE ERROR IF ANY JMP RDREC,I * FILER NOP TEST FOR ERROR AND PRINT IF ONE CMA,SSA,INA SET NEGATIVE ERROR + JMP FILER,I IF NONE JUST EXIT * JSB CVTNO CONVERT THE NUMBER STA MESS SET IN THE MESSAGE JSB PRINT PRINT IT DEF SMPER DEF D6 JMP FILER,I RETURN TO CALLER * CVTNO NOP TWO DIGIT NUMBER CONVERTER CLB SET FOR DIVIDE DIV D10 A HAS HIGH DIGIT, B LOW ALF,ALF ROTATE TO HIGH ADA B PUT TOGETHER ADA "00" ADD THE ASCII OFFSETS JMP CVTNO,I RETURN NUMBER IN A * "00" ASC 1,00 * PRINT NOP PRINT TO LU 1 DLD PRINT,I GET THE BUFFER AND COUNT ADDRESSES DST BUFAD SET IN CALL ISZ PRINT ADVANCE THE RETURN ADDRESS ISZ PRINT ADVANCE THE RETURN ADDRESS JSB REIO SENT THE WORD TO THE SYSTEM TTY DEF RTN DEF D2 DEF D1 BUFAD NOP SET TO THE BUFFER ADDRESSES NOP ALSO SET RTN JMP PRINT,I EXIT BACK TO CALLER * MSFIX NOP FIX UP THE MESSAGE LDA BUF23+15 FIRST GET THE AND B377 CCE LU AND CONVERT TO ASCII DECIMAL JSB $CVT3 INA POINT TO LAST 3 DIGITS DLD A,I DST LUXX SET IN THE MESSAGE JSB .DFER NOW MOVE IN THE STRING DEF DNEOF DEF MSFIX,I RETURNS A POINTS TO NEXT SOURCE SO STA MSFIX SAVE AS LENGTH ADDRESS JSB .DFER MOVE IN THE DEF FILEN FILE DEF BUF23+2 NAME JSB PRINT NOW PRINT THE MESSAGE DEF SVERF DEF MSFIX,I POINT TO LENGTH ISZ MSFIX STEP TO RETURN ADDRESS JMP MSFIX,I AND RETURN * PTRSF DEF SPLFL PTRJF DEF JOBFL SMPER ASC 5,SMP: FMP -XX ERORR MESSAGE MESS NOP HOLDS XX FROM MESSAGE SVERF ASC 3,SMP:LU LU DOWN AND BAD EOF TEMPLATE LUXX ASC 3, LU PLUS 2 BLANKS DNEOF ASC 4,EOR ER OR DOWN PLUS 2 BLANKS FILEN ASC 6,XXXXXX HELD. SMPNA ASC 3,SMP .MENU DEC 1 SUP REP 19 DEC 1 DEC 0 D21 DEC 21 D23 DEC 23 SPOUT ASC 3,SPOUT D.RTR ASC 3,D.RTR IERR NOP EQTA EQU 1650B ZERO DEC 0 ID NOP * END SMP