Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-02 - 43,50232/cobque.mac
There are no other files named cobque.mac in the archive.
TITLE	********** ROUTINE TO ENTER QUEUES VIA COBOL **********		
SUBTTL			*** WORDS OF WISDOM ***
















;********************************************************************
;*                                                                  *
;*	AS FOR MAN, HIS DAYS ARE AS GRASS, AS A FLOWER OF           *
;*	THE FIELD, SO HE FLOURISHETH. FOR THE WIND PASSETH OVER     *
;*	IT, AND IT IS GONE; AND THE PLACE THEREOF SHALL KNOW        *
;*	IT NO MORE.                                                 *
;*                                                                  *
;********************************************************************













SUBTTL		*** INSTRUCTIONS ***

COMMENT @	"COBQUE" -- QUEUE SUBROUTINE FOR COBOL
		--------------------------------------

	THIS SUBROUTINE IS ENTERED FROM COBOL WITH A PARAMETER AREA SET
UP INDICATING THE QUEUE ENTRY AND OPERATION THAT IS TO BE PERFORMED.
COBQUE WILL THEN MAKE THE ENTRY INTO THE SYSTEM QUEUE STRUCTURE
PROVIDED THE ENTRY PASSES A FEW CHECKS. COBQUE MAKES THE FOLLOWING
CHECKS ON THE ENTRY BEFORE CALLING THE SYSTEM QMANGR:

	1.) TEST TO BE SURE THAT THE OPTION SPECIFIED IS A LEGAL
	    ONE [I.E. "QUE", "FIND", ABORT"]

	2.) TEST TO MAKE SURE THAT THE FILE SPECIFIED FOR A "QUE"
	    OPERATION IS CURRENTLY SAVED.

	3.) TEST TO MAKE SURE THAT THE QUEUE SPECIFIED IS A LEGAL
	    ONE [I.E. "LPT", "PTP", "INP"]

	4.) TEST TO MAKE SURE THAT THE REQUEST SPECIFIED FOR AN "ABORT"
	    OPERATION IS CURRENTLY IN THE SYSTEM QUEUES AND NOT ON A
	    DEVICE.

	COBQUE EXPECTS THE FOLLOWING TYPE OF PARAMETER AREA TO BE SET
UP BEFORE ENTRY INTO THE SUBROUTINE.

	01	QUE-ARGUMENTS.
		02	QUE-FLAG	PIC X(12).
		02	QUE-OP		PIC X(6).
		02	QUE-NAME	PIC X(6).
		02	QUE-FILE	PIC X(6).
		02	QUE-EXT		PIC X(6).
		02	QUE-PROJ	PIC X(6).
		02	QUE-PROG	PIC X(6).
		02	QUE-PRIORITY	PIC S9(2)	COMP.

	COBQUE IS THEN ENTERED FROM COBOL WITH THE FOLLOWING
COBOL STATEMENT:

	ENTER MACRO COBQUE USING QUE-ARGUMENTS.
	RETURN FROM THE SUBROUTINE WILL THEN BE TO THE NEXT COBOL
STATEMENT FOLLOWING THE ABOVE. ON RETURN QUE-FLAG IN THE
PARAMETER AREA WILL HOLD THE RESULT OF THE OPERATION. THE FOLLOWING
EXPLAINS THE MEANING OF THE VALUES RETURNED IN QUE-FLAG:

	ERROR		EITHER THE QUE-OP OR THE QUE-NAME WAS
			INCORRECT, THE JOB SPECIFIED FOR AN "ABORT"
			OPERATION WAS NOT FOUND, OR AN ERROR WAS
			ENCOUNTERED WHILE TRYING TO GET THE QMANGR.

	ON DEVICE	THE REQUESTED "FIND" OPERATION HAS FOUND THE
			JOB AND IT IS CURRENTLY BEING PROCESSED.

	PENDING		THE REQUESTED "FIND" OPERATION HAS FOUND THE
			JOB AND IT IS PENDING EXECUTION.

	NOT PENDING	THE REQUESTED "FIND" OPERATION DID NOT FIND
			THE REQUEST IN THE SYSTEM QUEUES.

	QUEUED		THE REQUESTED "QUE" OPERATION SPECIFIED HAS
			BEEN DONE.

	NOT SAVED	THE FILE SPECIFIED FOR A "QUE" OPERATION WAS
			NOT SAVED.

	KILLED		THE REQUESTED "ABORT" OPERATION HAS REMOVED THE
			REQUEST FORM THE SYSTEM QUEUES.

	INTERLOCKED	THE REQUESTED "ABORT" OPERATION HAS FOUND THE
			JOB SPECIFIED ON A DEVICE AND INTERLOCKED IN THE
			SYSTEM QUEUES. THE JOB WAS NOT REMOVED.

	FAILURE		INFORMATION CONCERNING THE CURRENT HIGH SEGMENT
			COULD NOT BE OBTAINED AND THE REQUEST WAS
			ABORTED.

	COBQUE WILL STOP THE PROGRAM AND PRINT THE ERROR MESSAGE
"***JOB ABORTED" IF COBQUE IS UNABLE TO RESTORE THE ORIGINAL
HIGH SEGMENT UPON RETURN FROM QMANGR. OTHERWISE ALL MESSAGES TYPED
OUT WILL COME FROM QMANGR AND WILL DENOTE SOME TYPE OF SYSTEM
FAILURE.
	THE FOLLOWING IS AN EXPLAINATION OF THE PARAMETER AREA THAT
COBQUE MUST BE CALLED WITH FROM COBOL:

	QUE-FLAG	STATUS OF THE OPERATION UPON RETURN.

	QUE-OP		HOLDS THE DESIRED OPERATION. LEGAL OPERATIONS
			ARE AS FOLLOWS:

			QUE	MAKE A REQUEST IN THE SYSTEM QUEUES.
			FIND	FIND A REQUEST IN THE SYSTEM QUEUES.
			ABORT	ABORT A REQUEST IN THE SYSTEM QUEUES.

	QUE-NAME	NAME OF THE QUEUE THAT THIS REQUEST IS TO BE
			MADE ON.

	QUE-FILE	NAME OF THE FILE TO BE ENTERED OR THE NAME OF
			THE JOB TO BE FOUND OR ABORTED. [NOTE--JOB NAME
			IS SET EQUAL TO FILE NAME WHEN THE REQUEST IS
			MADE.]

	QUE-EXT		FILE EXTENSION OF THE FILE TO BE ENTERED INTO
			THE QUEUES. [NOTE--THIS DOES NOT HAVE TO BE
			SPECIFIED FOR AN "ABORT" OR "FIND" REQUEST.

	QUE-PROJ	THIS ARGUMENT HOLDS THE PROJECT NUMBER OF
			THE FILE TO BE QUEUED.

	QUE-PROG	THIS ARGUMENT HOLDS THE PROGRAM NUMBER OF
			THE FILE TO BE QUEUED. [NOTE IF BOTH
			QUE-PROJ AND QUE-PROG ARE SPACES THEN THE
			CURRENT PPN WILL BE USED.]

	QUE-PRIORITY	PRIORITY OF THE REQUEST TO BE ENTERED. DEFAULTS
			TO 10 IF UNSPECIFIED.

	COBQUE IS LOADED ALONG WITH THE COBOL PROGRAM THAT IS TO
EXECUTE IT. THE FOLLOWING "CCL" COMMAND CAN BE USED TO LOAD COBQUE
PROVIDED COBQUE.REL IS IN THE SYSTEM LIBRARY [1,4].

	LOAD "COBOL PROGRAM NAME",SYS:COBQUE

	THE JOB CAN THEN BE SAVED WITH THE MONITOR COMMAND "SSAVE JOBNAME"
OR "SAVE JOBNAME". NOTE THAT COBQUE WILL WORK WITH A JOB THAT DOES NOT
HAVE A HIGH SEGMENT AS WELL AS WITH ONE THAT DOES. IF THE JOB HAS A
HIGH SEGMENT IT SHOULD BE A SHARABLE ONE AND WILL THEN BE 
RESTORED UPON RETURN FROM COBQUE.

*** TO ISSUE THE "FIND" OR "ABORT" OPERATION COBQUE MUST RUN WITH JACCT SET ***
@
SUBTTL			*** DEFINITIONS ***

	;	ACCUMULATOR DEFINITIONS.

	S=0				;STATUS AC.
	T1=1				;TEMPORARY AC.
	T2=2				;TEMPORARY AC.
	T3=3				;TEMPORARY AC.
	OP=4				;USED TO HOLD QUE OPERATION OR QUE DEVICE.
	QP=5				;USED TO HOLD POINTER TO ARGUMENTS.
	G1=6				;GENERAL USE ACUMULATORS FOR QUEUER
	G2=7				;ROUTINE THAT CALLS QMANGR.
	G3=10
	G4=11
	G5=12
	G6=13
	G7=14
	G8=15
	G9=16
	PDP=17

	;	FLAGS.

	L.PHYS==1B0			;PHYSICAL MME.

	;	JOB TABLE INDICES.

	JBTNM1==31			;FIRST HALF OF USER NAME.
	JBTNM2==32			;SECON HALF OF USER NAME.
	JBTSGN==14			;POINTER TO HI-SEG FOR THIS JOB.
	JBTDEV==24			;NAME OF DEVICE FOR HI-SEG.
	JBTPPN==02			;DIRECTORY FOR HI-SEG.
	JBTPRG==03			;NAME OF THIS HI-SEG.

	;	DEFINITIONS FOR I/O HANDLING.

	DSK==17				;CHANNEL FOR THE DISK.
	A==0				;ASCII MODE FOR THE DISK FILE.
	;	OPCODE DEFINITIONS.

	OPDEF	MME	[XWD 47000,0]	;MASTER MODE ENTRY.
	OPDEF	PJRST	[JRST]		;PUSHJ/POPJ PAIR.
	OPDEF	NOP	[JFCL]		;NO OPERATION.

	;	MASTER MODE ENTRY SYMBOLS.

	.PPN==24			;RETURNS CURRENT PPN IN AC.
	.TABLE==41			;RETURNS TABLE ENTRY FROM EXEC.
	.CORE==11			;ASK EXEC FOR CORE.
	.SEG==40			;ASK EXEC FOR NEW SEGMENT.
	.CNFTBL==11			;ASK FOR SOME CONFIGURATION.
	.STATES==17			;ASD ABOUT FEATURES.
	.TERM==12			;TERMINATE JOB.

	;	CONSTANTS.

	FLAG==0				;QUE-FLAG IN QUE-ARGUMENTS.
	OPR==2				;QUE-OP IN QUE-ARGUMENTS.
	NAME==3				;QUE-NAME IN QUE-ARGUMENTS.
	FILE==4				;QUE-FILE IN QUE-ARGUMENTS.
	EXT==5				;QUE-EXT IN QUE-ARGUMENTS.
	PROJ==6				;QUE-PROJ IN QUE-ARGUMENTS.
	PROG==7				;QUE-PROG IN QUE ARGUMENTS.
	PRI==10				;QUE-PRIORITY IN QUE-ARGUMENTS.
	CREATE==1			;CREATE OPTION FOR QMANGR.
	LIST==4				;LIST OPTION FOR QMANGR.
	KILL==6				;KILL OPTION FOR QMANGR.
	QMANGR==400010			;WHERE TO GO IN QMANGR.
	ZERO==0				;ARGUMENT FOR "RETURN".
	ONE==1				;ARGUMENT FOR "RETURN".
	TWO==2				;ARGUMENT FOR "RETURN".
	FIND==1				;SAYS WE ARE IN A FIND MODE.
	ABORT==2			;SAYS WE ARE KILLING REQUEST.
	MAKE==4				;SAYS WE ARE CREATING A REQUEST.
	HERE==10			;SET IF REQUEST IS IN QUEUE.
	ONDEV==20			;SET IF REQUEST IS ON A DEVICE.
	;	DEFAULTS FOR QMANGR.

		RADIX	10
	IFNDEF	%PRI,	<%PRI==10>	;PRIORITY OF THIS JOB.
	IFNDEF	%CORE,	<%CORE==25>	;CORE LIMIT FOR BATCH.
	IFNDEF	%CPU,	<%CPU==300>	;CPU TIME LIMIT FOR BATCH.
	IFNDEF	%PAPER,	<%PAPER==200>	;PAGE LIMIT FOR PRINTER.
	IFNDEF	%CARDS,	<%CARDS==0>	;CARD LIMIT FOR CARD PUNCH.
	IFNDEF	%TAPE,	<%TAPE==200>	;TAPE LIMIT FOR TAPE PUNCH.
	IFNDEF	%PLOT,	<%PLOT==0>	;PLOTTER TIME LIMIT.
	IFNDEF	%PAGES,	<%PAGES==200>	;LIMIT OF PAGES FOR PRINTER.
		RADIX	8

	;	THINGS WHICH HAVE NO OTHER PLACE TO LIVE.

	EXTERNAL	JOBSA,JOBREN	;START AND REENTER ADDRESSES.
	ENTRY		COBQUE		;ENTRY POINT.

	;	STACK MACROS.

		SALL

	DEFINE	RETURN	(LOC)
		<IFE	LOC,<POPJ PDP,>
		IFN	LOC,<PJRST RET0-LOC>>

	DEFINE	SEEK	(LOC)
		<PUSHJ	PDP,LOC>
SUBTTL			*** INITIAL CONTROL ***

;HERE TO MAKE A REQUEST IN THE SYSTEM QUEUES. COBQUE WILL
;EITHER CREATE, FIND, OR ABORT A JOB IN THE SYSTEM QUE STRUCTURE.
;COBQUE ASSUMES THAT IT WAS CALLED FROM COBOL WITH A POINTER
;TO THE FOLLOWING TYPE OF PARAMETER BLOCK:
;
;	01	QUE-ARGUMENTS.
;		02	QUE-FLAG	PIC	X(12).
;		02	QUE-OP		PIC	X(6).
;		02	QUE-NAME	PIC	X(6).
;		02	QUE-FILE	PIC	X(6).
;		02	QUE-EXT		PIC	X(6).
;		02	QUE-PROJ	PIC	X(6).
;		02	QUE-PROG	PIC	X(6).
;		02	QUE-PRIORITY	PIC	S9(2)	COMP.
;
;COBQUE IS THEN ENTERED FROM COBOL WITH THE FOLLOWING STATEMENT:
;
;ENTER MACRO COBQUE USING QUE-ARGUMENTS.

COBQUE:	SETZM	Q.FST			;ZERO FIRST WORD OF STORAGE.
	MOVE	T1,[XWD Q.FST,Q.FST+1]	;SET BLT POINTER TO CLEAR.
	BLT	T1,Q.LST		;ZAP -- WIPED OUT!
	SETZM	S			;CLEAR FLAG REGISTER.
	MOVE	QP,ZERO(PDP)		;GET COBOL'S BYTE POINTER.
	MOVE	QP,@ZERO(QP)		;GET WHAT WE WANT.
	MOVE	OP,OPR(QP)		;PICK UP QUE-OPERATION.
	HRLZI	T1,-OP.CNT		;SET COUNT OF LEGAL OPERATIONS.
OP.FND:	CAME	OP,OP.TAB(T1)		;TEST CURRENT OPCODES.
	AOBJN	T1,OP.FND		;CHECK THE WHOLE LIST.
	SEEK	@OP.DIS(T1)		;DISPATCH TO ROUTINE TO HANDLE QUE-OP.
	MOVEI	T1,Q.ERR		;ERROR -- PICK UP POINTER TO ERROR STATUS.
	MOVE	T2,ZERO(T1)		;GET FIRST WORD OF STATUS.
	MOVEM	T2,ZERO(QP)		;STORE FOR COBOL.
	MOVE	T2,ONE(T1)		;GET SECOND HALF.
	MOVEM	T2,ONE(QP)		;MOVE INTO QUE-FLAG.
	RETURN	ONE			;BACK TO COBOL.

OP.TAB:	SIXBIT	"QUE"			;OPERATION TABLE.
	SIXBIT	"FIND"
	SIXBIT	"ABORT"
OP.CNT==.-OP.TAB			;TABLE LENGTH.

OP.DIS:	XWD	0,Q.QUE			;OPERATION TABLE DISPATCH.
	XWD	0,Q.FND
	XWD	0,Q.ABT
	XWD	0,RET0			;ERROR RETURN.

RET2:	AOS	(PDP)			;STACK MANIPULATORS.
RET1:	AOS	(PDP)
RET0:	POPJ	PDP,COBQUE
SUBTTL		*** CREATE AN ENTRY IN THE QUEUES ***

;COMES HERE ON A QUE CREATE REQUEST. WE ARE EITHER
;GOING TO MAKE AN "INP", "LPT", OR "PTP" ENTRY.
;THIS ROUTINE SETS UP THE COMMON USER INFORMATION
;AND THEN DISPATCHES TO QUE DEPENDENT CODE TO SET UP
;QUE SPECIFIC INFORMATION.

Q.QUE:	TRO	S,MAKE			;SET FLAG TO INDICATE CREATE REQUEST.
	AOS	Q.OPR			;TELL QMANGR THIS IS A NEW ONE.
	MOVE	OP,NAME(QP)		;PICK UP THE QUE-NAME.
	MOVEM	OP,Q.DEV		;ASSUME FOR NOW IT IS A LEGAL ONE.
Q.SET:	SEEK	SETNUM			;SET UP USER NUMBER.
	MOVE	T1,FILE(QP)		;GET NAME OF FILE.
	MOVEM	T1,Q.JOB		;JOB NAME=FIRST FILE NAME.
	SKIPN	T1,PRI(QP)		;GET PRIORITY IF SPECIFIED.
	MOVEI	T1,%PRI			;DEFAULT TO TEN -- STANDARD.
	ANDI	T1,77			;DON'T GET SCREWED.
	MOVEM	T1,Q.PRI		;SET THE PRIORITY IN PLACE.
	HRROI	T1,JBTNM1		;SET UP TABLE ENTRY TO GET THE
	MME	T1,.TABLE		;USER'S NAME.
	SETZM	T1			;NO NAME IF NO TELL.
	MOVEM	T1,Q.USER		;SAVE THE FIRST WORD.
	HRROI	T1,JBTNM2		;SET TABLE ENTRY FOR OTHER HALF.
	MME	T1,.TABLE		;GET THE ENTRY.
	SETZM	T1			;NO NAME IF NO TELL.
	MOVEM	T1,Q.USER+1		;SAVE IT.
	HRLZI	T1,-Q.CNT		;NEGATIVE COUNT OF LEGAL QUEUES.
Q.LOOK:	CAME	OP,Q.TAB(T1)		;CHECK FOR A MATCH.
	AOBJN	T1,Q.LOOK		;DO THE WHOLE LIST.
	PJRST	@Q.DISP(T1)		;DISPATCH TO QUE DEPENDENT CODE.

Q.TAB:	SIXBIT	"INP"			;QUE TABLE.
	SIXBIT	"LPT"
	SIXBIT	"PTP"
	SIXBIT	"FND"
Q.CNT==.-Q.TAB				;TABLE LENGTH.

Q.DISP:	XWD	0,Q.INP			;QUE TABLE DISPATCH.
	XWD	0,Q.OUT
	XWD	0,Q.OUT
	XWD	0,Q.LIST
	XWD	0,RET0			;ERROR RETURN.
SUBTTL		*** CREATE AN ENTRY IN THE INPUT QUEUE ***

;HERE ON A REQUEST TO ENTER A BATCH JOB INTO
;THE SYSTEM QUEUES. ENTERS HERE WHEN THE USER
;INFORMATION IS SET UP IN THE QUE AREA.

Q.INP:	MOVE	T1,I.LEN		;LENGTH OF THINGS.
	MOVEM	T1,Q.LEN		;SAVE IN BLOCK.
	MOVE	T1,CORCPU		;CORE SIZE AND CPU TIME ALLOWED.
	MOVEM	T1,I.ILIM		;SAVE IN BATCH AREA.
	MOVE	T1,PAPCDS		;LIMITS FOR PAPER AND CARDS.
	MOVEM	T1,I.ILIM+1		;SAVE IN THE LIST.
	MOVE	T1,TAPPLT		;LIMITS FOR TAPE AND PLOT TIME.
	MOVEM	T1,I.ILIM+2		;SAVE IN PARAMTER AREA.
	HRLZI	T1,'DSK'		;SET UP FILE STRUCTURE.
	MOVEM	T1,I.FSTR		;SO BATCON WILL FIND IT.
	MOVE	T1,USENUM		;GET THE PPN OF THE FILE.
	MOVEM	T1,I.IDDI		;SET UP DEFAULT DIRECTORY.
	MOVEM	T1,I.FDIR		;DIRECTORY WHERE CTL FILE IS.
	HRRZI	T1,I.FNAM		;CALL FNDFIL TO SEE IT THE FILE
	SEEK	FNDFIL			;REALLY IS ON THE DISK.
	AOS	I.FBIT			;MAGIC BIT TO TELL BATCON WHERE TO START.
	MOVE	T1,I.CTL		;ALL SORTS OF GOOD THINGS
	MOVEM	T1,I.FMOD		;FOR BATCON TO DO.
	MOVE	T1,[XWD I.FSTR,L.FSTR]	;COPY CTL FILE STUFF TO LOG AREA.
	BLT	T1,L.FBIT		;SOCK -- DONE!!
	HRLZI	T1,'LOG'		;BUT CHANGE THE THINGS THAT ARE
	MOVEM	T1,L.FEXT		;DIFFERENT.
	MOVE	T1,I.LOG		;MORE GOOD THINGS TO
	MOVEM	T1,L.FMOD		;TO DO TO ALL THESE FILES.
	MOVE	T1,I.PTR		;POINTER FOR QMANGR.
	PJRST	CALL			;CALL QMANGR.

I.LEN:	EXP	<I.FSTR-Q.OPR>B8!<I.FMOD-I.FSTR+1>B17!<TWO>B35
I.CTL:	EXP	1B5!1B20!1B23!1B26!1B29!1B35
I.LOG:	EXP	1B2!1B5!1B20!1B23!1B26!1B29!1B35
I.PTR:	XWD	<L.FMOD-Q.FST+1>,Q.FST
CORCPU:	XWD	%CORE*2000,%CPU
PAPCDS:	XWD	%PAPER,%CARDS
TAPPLT:	XWD	%TAPE,%PLOT
SUBTTL		*** CREATE AN ENTRY IN THE OUTPUT QUEUE ***

;HERE TO ENTER A REQUEST INTO THE OUTPUT QUEUES.
;ENTERS HERE WITH THE QUE AREA SET UP FOR ALL
;USER INFORMATION THAT IS REQUIRED.

Q.OUT:	MOVE	T1,O.LEN		;SET LENGTH OF REQUEST.
	MOVEM	T1,Q.LEN		;SET LENGTH OF REQEST.
	MOVE	T1,O.SIZE		;SET PAGES ALLOWED.
	MOVEM	T1,O.OSIZ		;SAVE IN QUEUE AREA.
	HRLZI	T1,'DSK'		;GET THE FILE STRUCTURE.
	MOVEM	T1,O.FSTR		;SAVE IN PLACE.
	MOVE	T1,USENUM		;GET USER NUMBER OF FILE.
	MOVEM	T1,O.FDIR		;SET IN FILE BLOCK.
	HRRZI	T1,O.FNAM		;NOW MAKE SURE THAT THE FILE
	SEEK	FNDFIL			;SPECIFIED IS THERE.
	AOS	O.FBIT			;TELL SPOOLERS WHERE TO START.
	MOVE	T1,O.STAT		;ALL GOOD THINGS
	MOVEM	T1,O.FMOD		;AND NO EVIL THINGS.
	MOVE	T1,O.PTR		;POINTER FOR QMANGR.
	PJRST	CALL			;CALL QMANGR.

O.LEN:	EXP	<O.FSTR-Q.OPR>B8!<O.FMOD-O.FSTR+1>B17!<ONE>B35
O.SIZE:	XWD	%PAGES,0
O.STAT:	EXP	1B5!1B20!1B23!1B26!1B29!1B35
O.PTR:	XWD	<O.FMOD-Q.FST+1>,Q.FST
SUBTTL		*** FIND AN ENTRY IN THE QUEUES ***

;COMES HERE TO SEARCH THE QUEUES FOR THE SPECIFIED
;ENTRY. RETURNS IN QUE-FLAG "PENDING" IF STILL
;IN THE QUEUES, "NOT PENDING" IF THE ENTRY
;WASN'T FOUND, AND "ON DEVICE" IF REQUEST IS IN
;PROGRESS.

Q.FND:	TRO	S,FIND			;SET FLAG TO SAY WE ARE IN FIND.
	MOVE	OP,NAME(QP)		;PICK UP QUE-NAME.
	EXCH	OP,[SIXBIT "FND"]	;SO WE WILL COME BACK HERE.
	PJRST	Q.SET			;SET UP THE USER AREA.
Q.LIST:	TRNN	S,FIND			;MAKE SURE WE GOT HERE THE RIGHT WAY.
	RETURN	ZERO			;BAD WAY TO GET HERE.
	EXCH	OP,[SIXBIT "FND"]	;GET THE REAL OP-CODE BACK.
	MOVE	T1,Q.PPN		;GET PPN FOR LATER.
	MOVEM	T1,NUM			;SAVE IN STORAGE.
	MOVE	T1,Q.JOB		;SAVE JOB NAME ALSO.
	MOVEM	T1,JOB			;SAVE IN STORAGE.
	HRLZI	T1,-Q.CNT+1		;COUNT OF LEGAL Q.NAMES.
Q.CHK:	CAME	OP,Q.TAB(T1)		;TEST FOR A MATCH.
	AOBJN	T1,Q.CHK		;TEST THE WHOLE LIST.
	JUMPG	T1,RET0			;NO MATCH -- BAD QUE-NAME.
	MOVEM	OP,Q.DEV		;SAVE QUE-NAME IN PARAMETER LIST.
	MOVE	T1,F.SCH		;TELL QMANGR WE WANT A LIST OF THE QUEUES.
	MOVEM	T1,Q.OPR		;SAVE IN QUE-BLOCK.
	MOVE	T1,F.LEN		;LENGTH OF THINGS.
	MOVEM	T1,Q.LEN		;SAVE IN QUE-BLOCK.
	MOVEM	S,FLAGS			;SAVE IN CASE REALLY ABORT.
	MOVE	T1,F.PTR		;POINTER FOR QMANGR.
	SEEK	QUEUER			;GO CALL QMANGR.
	MOVE	S,FLAGS			;GET THE FLAGS BACK.
	MOVEI	T1,Q.NONE		;ASSUME FOR NOW WE DIDN'T FIND IT.
	TRNN	S,HERE			;IS REQUEST PRESENT.
	RETURN	ONE			;NO GIVE "NOT PENDING".
	MOVEI	T1,Q.ODEV		;ASSUME IT IS ON DEVICE.
	TRNN	S,ONDEV			;CHECK TO MAKE SURE.
	MOVEI	T1,Q.PEN		;NOT ON DEVICE BUT THERE.
	RETURN	ONE			;BACK TO SENDER.
;HERE FROM QMANGR TO SEE IF THE REQUEST
;IS IN THE QUE SPECIFIED.

Q.SEE:	PUSH	PDP,T1			;SAVE AN ACCUMULATOR.
	EXCH	S,FLAGS			;GET THE FLAGS BACK.
	MOVE	T1,NUM			;GET THE CURRENT PPN.
	CAME	T1,Q.PPN		;SEE IF THIS IS THE RIGHT ONE.
	JRST	Q.RET			;WRONG USER.
	MOVE	T1,Q.JOB		;SEE IF JOB NAME IS THE SAME.
	CAME	T1,JOB			;TEST IT FOR A MATCH.
	JRST	Q.RET			;WRONG JOB NAME.
	TRO	S,HERE			;REQUEST IS HERE.
	SKIPE	Q.PDEV			;IS IT ON DEVICE.
	TRO	S,ONDEV			;SET THAT TOO.
Q.RET:	POP	PDP,T1			;RESTORE THE ACCUMULATOR.
	EXCH	S,FLAGS			;RESTORE THIS FOR QMANGR.
	RETURN	ZERO			;BACK TO QMANGR.

NUM:	000000000000
JOB:	000000000000
FLAGS:	000000000000
F.SCH:	XWD	Q.SEE,LIST
F.LEN:	EXP	<I.FSTR-Q.OPR>B8!<I.FMOD-I.FSTR+1>B17!<ONE>B35
F.PTR:	XWD	<L.FMOD-Q.FST+1>,Q.FST
SUBTTL		*** REMOVE AN ENTRY FORM THE QUEUES ***

;COMES HERE TO REMOVE A REQUEST FORM THE QUEUES THAT
;HAS ALREADY BEEN ENTERED.

Q.ABT:	TRO	S,ABORT			;SET FLAG FOR ABORT.
	SEEK	Q.FND			;GO FIND THIS ONE.
	NOP				;TREAT ALL RETURNS THE SAME.
	MOVEI	T1,Q.INT		;ASSUME ON DEVICE AND INTERLOCKED.
	TRNE	S,ONDEV			;IS IT ON A DEVICE.
	RETURN	ONE			;GIVE INDICATION OF WHAT HAPPENED.
	TRNN	S,HERE			;OR IS IT NOT PRESENT.
	RETURN	ZERO			;GIVE ERROR RETURN.
	SETZM	Q.FST			;SET UP STORAGE.
	MOVE	T1,[XWD Q.FST,Q.FST+1]	;SET BLT POINTER.
	BLT	T1,Q.LST		;DESTROIED....
	MOVEI	T1,KILL			;TELL QMANGR THIS IS A KILL REQUEST.
	MOVEM	T1,Q.OPR		;SET IN PLACE FOR QMANGR.
	MOVE	OP,NAME(QP)		;PICK UP THE QUEUE NAME.
	MOVEM	OP,Q.DEV		;SAVE NAME OF DEVICE.
	MOVE	T1,NUM			;GET THE PPN.
	MOVEM	T1,Q.PPN		;SAVE FOR QMANGR.
	SETOM	Q.TIME			;SET THE THINGS WE DON'T KNOW ABOUT TO -1.
	MOVE	T1,[XWD Q.TIME,Q.CREA]	;FIX UP SOME THINGS.
	BLT	T1,Q.CNO		;FIXED...
	HRROI	T1,JBTNM1		;GET THE USER'S NAME BACK.
	MME	T1,.TABLE		;GET IT.
	SETZM	T1			;NO TELL NO CAN SET UP.
	MOVEM	T1,Q.USER		;SET IN PLACE.
	HRROI	T1,JBTNM2		;GET THE OTHER HALF.
	MME	T1,.TABLE		;GET IT.
	SETZM	T1			;CAN'T HAVE IT FOR SOME REASON.
	MOVEM	T1,Q.USER+1		;SAVE IT.
	CAME	OP,Q.TAB		;SEE IF THIS IS AN INPUT ABORT.
	SEEK	A.OUT			;SET UP THE REST OF THE OUTPUT REQUEST.
	SEEK	A.INP			;SET UP THE REST OF THE INPUT REQUEST.
	SEEK	QUEUER			;CALL QMANGR.
	MOVEI	T1,Q.BYE		;ASSUME WE GOT IT.
	RETURN	ONE			;FOR WE REALLY CAN'T TELL.
;HERE FROM ABORT ROUTINE TO SET UP THE QUE
;SPECIFIC INFORMATION FOR AN OUTPUT QUEUE.

A.OUT:	SETOM	O.OFRM			;MINUS ONE TO THINGS WE DON'T KNOW ABOUT.
	MOVE	T1,[XWD O.OFRM,O.OSIZ]	;SET UP POINTER.
	BLT	T1,O.NOT-1		;THINGS WE DON'T CARE ABOUT.
	MOVE	T1,USENUM		;GET USER NUMBER OF FILE.
	MOVEM	T1,O.FDIR		;SET UP DIRECTORY.
	MOVE	T1,FILE(QP)		;GET FILE NAME.
	MOVEM	T1,O.FNAM		;SET IN PLACE.
	HRLZI	T1,200000		;GOOD THINGS IN THE MOD BITS.
	MOVEM	T1,O.FMOD		;SAVED.
	MOVE	T1,O.LEN		;PICK UP LENGTH OF ENTRY.
	MOVEM	T1,Q.LEN		;SAVE FOR QMANGR.
	MOVE	T1,O.PTR		;GET POINTER TO REQUEST.
	RETURN	ONE			;SKIP OVER CALL TO INPUT SET UP.

;HERE FROM ABORT ROUTINE TO SET UP THE QUE
;SPECIFIC INFORMATION FOR AN INPUT REQUEST.

A.INP:	SETOM	I.IDEP			;MINUS ONE TO THINGS WE DON'T CARE ABOUT.
	MOVE	T1,[XWD I.IDEP,I.ILIM]	;SET POINTER TO SET THEM.
	BLT	T1,I.IDDI-1		;THERE SET UP.
	HRRI	T1,7000			;CHANGE A FEW THINGS.
	HRLM	T1,I.IDEP		;SET IT UP SORT OF RIGHT.
	HRRI	T1,-2000		;SOME MORE THINGS.
	HRLM	T1,I.ILIM		;THERE.
	MOVE	T1,USENUM		;GET PPN OF FILE.
	MOVEM	T1,I.IDDI		;SET UP DEFAULT DIRECTORY.
	MOVEM	T1,I.FDIR		;THIS DIRECTORY.
	MOVE	T1,FILE(QP)		;GET JOB NAME.
	MOVEM	T1,I.FNAM		;SAVE IN PLACE.
	HRLZI	T1,200000		;GET THE MOD BITS.
	MOVEM	T1,I.FMOD		;SET IN PLACE.
	MOVE	T1,I.LEN		;GET LENGTH OF ENTRY.
	MOVEM	T1,Q.LEN		;SAVE IN PLACE.
	MOVE	T1,I.PTR		;GET POINTER TO BLOCK.
	RETURN	ZERO			;AND RETURN TO EXECUTE IT.
SUBTTL		*** CHECK FOR BAD ENTRIES ***

;COMES HERE TO SEE IF THE FILE SPECIFIED FOR AN
;OPERATION IS SAVED.
;
;CALL:	MOVE	T1,[POINTER TO FILE NAME BLOCK]
;	SEEK	FNDFIL
;	RETURN IF O.K.

FNDFIL:	INIT	DSK,A			;SET DISK ON CHANNEL 17.
	SIXBIT	"DSK"			;DEVICE NAME.
	XWD	0,0			;NO BUFFERS.
	JRST	NOSAVE			;CAN'T FIND IT IF CAN'T LOOK.
	MOVE	T2,FILE(QP)		;GET FILE NAME.
	MOVEM	T2,ZERO(T1)		;SAVE IN QUE BLOCK.
	MOVEM	T2,SPEC			;SAVE FOR LOOKUP.
	MOVE	T2,EXT(QP)		;PICK UP EXTENSION.
	MOVEM	T2,ONE(T1)		;SAVE IN QUE BLOCK.
	MOVEM	T2,SPEC+1		;SAVE FOR LOOKUP.
	SETZM	SPEC+2			;ZERO OUT TIME DATE PROTECTION WORD.
	MOVE	T1,USENUM		;GET THE USER NUMBER.
	MOVEM	T1,SPEC+3		;SAVE IN FILE BLOCK.
	LOOKUP	DSK,SPEC		;SEE IF IT IS THERE.
	SKIPA				;FALL INTO ERROR.
	RETURN	ZERO			;GIVE A GOOD RETURN.
NOSAVE:	POP	PDP,T1			;POP OFF CALLING RETURN.
	MOVEI	T1,Q.SAVE		;PICK UP POINTER TO ERROR MESSAGE.
	RETURN	ONE			;RETURN TO START.

SPEC:	000000000000			;FILE NAME.
	000000000000			;FILE EXTENSION.
	000000000000			;DATE-TIME-PROTECTION.
	000000000000			;PPN.
SUBTTL			*** EXTRACT THE USER NUMBER ***

;HERE TO PICK UP THE USER NUMBER OF THE FILE
;AND TO SET THIS GUY'S PPN UP.

SETNUM:	MOVE	T3,PROJ(QP)		;PICK UP PROJECT NUMBER.
	SEEK	MAKNUM			;MAKE A HALF WORD OUT OF IT.
	HRLZM	T1,USENUM		;SAVE IT.
	MOVE	T3,PROG(QP)		;PICK UP PROGRAM NUMBER.
	SEEK	MAKNUM			;MAKE A HALF WORD.
	HRRM	T1,USENUM		;PPN NOW IN USENUM.
	MME	T1,.PPN			;GET THE PPN WE'RE UNDER.
	NOP				;IN CASE IT IS PRIV.
	MOVEM	T1,Q.PPN		;SAVE FOR QMANGR.
	SKIPN	T1,USENUM		;WAS THERE A PPN SPECIFIED.
	MOVE	T1,Q.PPN		;NO GET THE ONE WE'RE UNDER.
	MOVEM	T1,USENUM		;USENUM HAS THIS PPN OR ONE SPECIFIED.
	RETURN	ZERO			;BACK TO SENDER.

MAKNUM:	SKIPN	T3			;CHECK FOR NO PPN.
	RETURN	ZERO			;RETURN A PPN OF ZERO.
	SETZM	T1			;CLEAR TARGET.
NXTDIG:	SETZM	T2			;CLEAR STORAGE.
	LSHC	T2,6			;PICK UP A DIGIT.
	CAIL	T2,'0'			;MUST BE A DIGIT.
	CAILE	T2,'7'			;MUST BE OCTAL.
	JRST	NUMERR			;ERROR****
	IMULI	T1,^D8			;SHIFT IT OVER A DIGIT.
	ADDI	T1,-'0'(T2)		;ADD IN NEW DIGIT.
	JUMPN	T3,NXTDIG		;JUMP IF STILL HAVE MORE.
	RETURN	ZERO			;BACK TO SENDER.

NUMERR:	POP	PDP,T1			;POP OFF CALL HERE.
	POP	PDP,T1			;POP OFF CALL TO ABOVE.
	RETURN	ZERO			;GIVE ERROR RETURN.

USENUM:	000000000000			;USER NUMBER SPECIFIED.
SUBTTL		*** CALL THE SYSTEM QUE-MANGER ***

;HERE WITH QUE-BLOCK SET UP WITH A REQUEST.
;CALL QMANGR AND RETURN "QUEUED" IN QUE-FLAG
;IF REQUEST WAS DONE.

CALL:	SEEK	QUEUER			;CALL QMANGR.
	MOVEI	T1,Q.QUED		;ASSUME WE MADE IT.
	RETURN	ONE			;FOR WE REALLY CAN'T TELL.

;HERE TO SAVE THE CURRENT HIGH SEGMENT IF ANY
;SET UP A PDL AND GETSEG QMANGR. ON RETURN
;THE OLD HIGH SEGMENT AND PDL IS RESTORED AND
;CONTROL IS RETURNED.

QUEUER:	MOVEM	T1,SAVPTR		;SAVE CALLING ARGUMENT.
	PUSH	PDP,QP			;SAVE POINTER TO ARGUMENTS.
	PUSH	PDP,S			;SAVE STATUS REGISTER.
	MOVEM	PDP,SAVPSH		;SAVE OLD PUSH-DOWN POINTER.
	MOVE	PDP,[IOWD 70,STACK]	;SET UP NEW POINTER.
	PUSH	PDP,JOBSA		;SAVE START ADDRESS.
	PUSH	PDP,JOBREN		;SAVE REENTER ADDRESS.
	SETZM	G2,G3			;CLEAR IN CASE NO HIGH-SEGMENT.
	HRROI	G1,JBTSGN		;GET HIGH-SEGMENT INDEX.
	MME	G1,.TABLE		;CALL EXECUTIVE.
	JRST	Q.MERR			;CAUSE ERROR IF CAN'T FIND.
	JUMPLE	G1,SVHISG		;IF NO HI-SEG PROCEED.
	HRLZ	G2,G1			;GET HI-SEG DEVICE.
	HRRI	G2,JBTDEV		;SET UP FOR MME.
	MME	G2,.TABLE		;ENTER MASTER MODE.
	MOVSI	G2,'DSK'		;IN CASE TABLE IS ABSENT.
	HRLZ	G3,G1			;GET HI-SEG DIRECTORY.
	HRRI	G3,JBTPPN		;SET UP OTHER HALF.
	MME	G3,.TABLE		;CALL EXEC.
	JRST	Q.MERR			;FORCE AN ABORT.
	HRLZ	G4,G1			;SET UP TO GET HI-SEG NAME.
	HRRI	G4,JBTPRG		;SET UP OTHER HALF.
	MME	G4,.TABLE		;CALL EXEC.
	JRST	Q.MERR			;FORCE ERROR CONDITION.
	JUMPGE	G3,SVHISG		;IF JBTDEV TABLE ABSENT, IT IS IN PPN.
	CAMN	G2,[SIXBIT "DSK"]	;IF PPN<0 AND DEV=DSK
	MOVE	G2,G3			;THEN DEV WAS IN PPN.
	MOVEI	G3,0			;SO SHIFT IT THERE.
;HERE WHEN THE CURRENT HIGH-SEGMENT HAS BEEN DETERMINED
;TO SAVE THE DEVICE, DIRECTORY, AND FILE NAME.

SVHISG:	MOVEM	G2,SAVDEV		;SAVE THE DEVICE.
	MOVEM	G3,SAVDIR		;SAVE DIRECTORY.
	MOVEM	G4,SAVNAM		;SAVE THE NAME.

;HERE TO SWITCH STARTING ADDRESS TO ALLOW GETSEG BACK.

	MOVEI	G1,FAKSA		;ESTABLISH TEMPORARY START ADDRESS.
	HRRM	G1,JOBSA		;TO COME TO FIXUP ROUTINE.
	MOVEI	G1,FAKREN		;ESTABLISH TEMPORARY REENTER
	HRRZ	G2,JOBREN		;BUT ONLY IF THERE IS ONE.
	SKIPE	G2			;OTHERWISE LET THE MONITOR
	HRRM	G1,JOBREN		;TYPE "?NO START ADDR".

;HERE WHEN ALL IS SET UP AND HI-SEG NAME IS SAVED.
;CALL QMANGR AND GO TO HIM.

	MOVEI	G1,G2			;SET GETSEG POINTER TO BLOCK.
	MOVSI	G2,'SYS'		;GET FROM DEVICE "SYS:".
	MOVE	G3,[SIXBIT "QMANGR"]	;GET FILE QMANGR.SHR.
	SETZB	G4,G5			;CLEAR THE REST OF THE AREA.
	SETZB	G6,G7			;DITTO.
	MOVEM	PDP,SAVEP		;SAVE PDP AROUND MME CALL.
	SEEK	PHYSICAL		;SEE IF PHYSICAL I/O POSSIBLE.
	MME	G1,.SEG			;CALL EXEC TO GET NEW HI-SEG.
	JRST	G.ERR			;DIE IF FAILURE.
	MOVE	PDP,SAVEP		;RESTORE PUSH-DOWN POINTER.
	MOVE	T1,SAVPTR		;RESTORE CALLING ARGUMENT.
	TLZ	T1,ZERO(L.PHYS)		;CLEAR PHYSICAL BIT FROM ARGS.
	SEEK	QMANGR			;GO TO QMANGR.
	JRST	BACK			;GET OLD SEGMENT BACK.

;HERE WHEN AN ERROR OCCURRS WHILE TRING
;TO GET THE NAME AND ASORTED OTHER THINGS ABOUT THE CURRENT
;HIGH-SEGMENT.

Q.MERR:	MOVE	PDP,SAVPSH		;GET OLD PUSH-DOWN POINTER BACK.
	POP	PDP,QP			;RESTORE POINTER TO ARGUMENTS.
	POP	PDP,T1			;POP OFF CALLING RETURN.
	MOVEI	T1,Q.FAIL		;TELL HIM WE FAILED.
	RETURN	ONE			;GIVE SKIP RETURN.
;HERE ON RETURN FROM QMANGR TO RESTORE THE PREVIOUS
;HIGH-SEGMENT IF ANY AND RETURN CONTROL.

BACK:	MOVE	G3,SAVNAM		;PICK UP SAVED NAME.
	MOVE	G6,SAVDIR		;PICK UP DIRECTORY.
	MOVE	G2,SAVDEV		;PICK UP DEVICE.
	SETZB	G4,G5			;ZERO UNWANTED PARTS.
	SETZM	G7			;DITTO.
	MOVSI	G1,ONE			;RELEASE QMANGR.
	MME	G1,.CORE		;ASK FOR ZERO CORE UP THERE.
	NOP				;IGNORE ERRORS.
	JUMPE	G2,NOGET		;IF NO HI-SEG FORGET IT.
	MOVEI	G1,G2			;SETUP POINTER TO BLOCK.
	MOVEM	PDP,SAVEP		;SAVE PDP AROUND MME CALL.
	SEEK	PHYSICAL		;DO PHYSICAL GETSEG.
	MME	G1,.SEG			;RECLAIM OLD SEGMENT.
	JRST	G.ERR			;HOPELESS IF FAILURE.
	MOVE	PDP,SAVEP		;RESTORE PDP.
NOGET:	POP	PDP,JOBREN		;RESTORE REENTER ADDRESS.
	POP	PDP,JOBSA		;RESTORE STARTING ADDRESS.
	MOVE	PDP,SAVPSH		;RESTORE OLD PUSH-DOWN POINTER.
	POP	PDP,S			;RESTORE STATUS REGISTER.
	POP	PDP,QP			;RESTORE POINTER TO ARGUMENTS.
	RETURN	ZERO			;BACK TO SENDER.

;HERE WHEN WE ARE UNABLE TO GET THE OLD HIGH-SEGMENT
;BACK.

G.ERR:	OUTSTR	CRLF			;SKIP A LINE.
	OUTSTR	BOMB			;"***JOB ABORTED"
	OUTSTR	CRLF			;NEXT LINE.
	MME	T1,.TERM		;TERMINATE.
	JRST	.-1			;INCASE OF "CONTINUE".

BOMB:	ASCIZ	"***JOB ABORTED"
CRLF:	BYTE	(7)15,12,0
SAVPTR:	000000000000
SAVPSH:	000000000000
SAVDEV:	000000000000
SAVDIR:	000000000000
SAVNAM:	000000000000
SAVEP:	000000000000
STACK:	BLOCK	70
;HERE WHEN THE USER TYPES ^C .START OR .REENTER
;WHEN THE WRONG HI-SEG IS IN CORE.

FAKREN:
FAKSA:	MOVE	PDP,SAVEP		;RESTORE PDP.
	JRST	BACK			;GET HI-SEG BACK.

;HERE TO CAUSE PHYSICAL MME.
;
;CALL:	SEEK	PHYSICAL
;	MME TO EXECUTE.

PHYSICAL:
	MOVSI	T2,.STATES		;PREPARE TO SEE WHICH MONITOR
	HRRI	T2,.CNFTBL		;IS RUNNING.
	MME	T2,.TABLE		;ASK THE EXEC WHO HE IS.
	RETURN	ZERO			;RETURN NOT IMPLEMENTED.
	MOVEI	T3,1B19			;PREPARE PHYSICAL BIT.
	TLNE	T2,ZERO(6B9)		;5.03 IS DISK TYPE 2 OR BETTER.
	IORM	T3,@ZERO(PDP)		;SET PHYSICAL BIT.
	RETURN	ZERO			;BACK TO SENDER.
SUBTTL		*** THE QUEUE PARAMETER AREA ***

;WHAT FOLLOWS IS THE QUE PARAMETER AREA FOR THE USER
;INFORMATION.

Q.FST=.					;FIRST LOCATION OF BLOCK.

Q.MEM:	000000000000			;MEMORY FOR QMANGR.
Q.OPR:	000000000000			;QUE-OPERATION.
Q.LEN:	000000000000			;LENGTH OF QUE BLOCKS.
Q.DEV:	000000000000			;QUE DEVICE.
Q.PPN:	000000000000			;PPN OF CREATOR.
Q.JOB:	000000000000			;NAME OF THIS JOB.
Q.SEQ:	000000000000			;SEQUENCE NUMBER OF REQUEST.
Q.PRI:	000000000000			;PRIORITY OF THIS JOB.
Q.PDEV:	000000000000			;DEVICE PROCESSING REQUEST.
Q.TIME:	000000000000			;START TIME.
Q.CREA:	000000000000			;TIME REQUEST CREATED.
Q.AFTR:	000000000000			;TIME TO WAIT TO PROCESS REQUEST.
Q.DEAD:	000000000000			;TIME TO PROCESS BEFORE.
Q.CNO:	000000000000			;NUMBER TO CHARGE.
Q.USER:	000000000000			;USER'S NAME.
	000000000000

;WHAT FOLLOWS IS THE QUE PARAMETER AREA FOR THE REQUEST
;PENDING EXECUTION.

I.IDEP:					;RESERVED FOR DEC.
O.OFRM:	000000000000			;FORMS REQUESTED.
I.ILIM:					;BATCH LIMITS.
O.OSIZ:	000000000000			;OUTPUT LIMITS.
O.NOT:	000000000000			;NOTATION FOR OUTPUT REQUEST.
	000000000000
I.IDDI:					;PATH TO DEFAULT DIRECTORY.
O.FSTR:	000000000000			;STRUCTURE FOR OUTPUT REQUEST.
O.FDIR:	000000000000			;PATH TO DIRECTORY.
	000000000000
	000000000000
	000000000000
	000000000000
I.FSTR:	000000000000			;STRUCTURE FOR INPUT REQUEST.
I.FDIR:					;PATH TO DIRECTORY.
O.FNAM:	000000000000			;OUTPUT FILE NAME.
O.FEXT:	000000000000			;OUTPUT EXTENSION.
O.FRNM:	000000000000			;RENAMED NAME.
O.FBIT:	000000000000			;PLACE TO START.
O.FMOD:	000000000000			;GOOD AND BAD THINGS TO DO.
	000000000000
I.FNAM:	000000000000			;CONTROL FILE NAME.
I.FEXT:	000000000000			;CONTROL FILE EXTENSION.
I.FRNM:	000000000000			;RENAMED NAME.
I.FBIT:	000000000000			;PLACE TO START.
I.FMOD:	000000000000			;GOOD AND BAD THINFS TO DO.
L.FSTR:	000000000000			;LOG FILE STRUCTURE.
L.FDIR:	000000000000			;PATH TO FOLLOW.
	000000000000
	000000000000
	000000000000
	000000000000
	000000000000
L.FNAM:	000000000000			;LOG FILE NAME.
L.FEXT:	000000000000			;LOG FILE EXTENSION.
L.FRNM:	000000000000			;RENAMED NAME.
L.FBIT:	000000000000			;PLACE TO START.
L.FMOD:	000000000000			;GOOD AND BAD THINGS.

Q.LST=.-1				;LAST WORD OF TABLE.
SUBTTL		*** GOOD AND BAD MESSAGES ***

Q.ERR:	SIXBIT	"ERROR       "		;ERROR WHILE PROCESSING REQUEST.
Q.NONE:	SIXBIT	"NOT PENDING "		;REQUEST NOT FOUND IN QUE.
Q.SAVE:	SIXBIT	"NOT SAVED   "		;FILE SPECIFIED IS NOT SAVED.
Q.QUED:	SIXBIT	"QUEUED      "		;FILE WAS QUEUED.
Q.PEN:	SIXBIT	"PENDING     "		;REQUEST IS STILL PENDING.
Q.BYE:	SIXBIT	"KILLED      "		;REQUEST WAS ABORTED.
Q.FAIL:	SIXBIT	"FAILURE     "		;ERROR WHILE CALLING QMANGR.
Q.ODEV:	SIXBIT	"ON DEVICE   "		;REQUEST IS ON DEVICE.
Q.INT:	SIXBIT	"INTERLOCKED "		;REQUEST IS ON DEVICE AND CAN'T BE REMOVED.

	LIT

PRGLEN==.-COBQUE			;PROGRAM LENGTH IN OCTAL.

	END