Google
 

Trailing-Edge - PDP-10 Archives - bb-d868c-bm_tops20_v4_2020_distr - language-sources/qsrmac.mac
There are 45 other files named qsrmac.mac in the archive. Click here to see a list.
	UNIVER	QSRMAC  --  Parameter File for QUASAR

;
;
;                COPYRIGHT (c) 1975,1976,1977,1978,1979
;                    DIGITAL EQUIPMENT CORPORATION
;
;     THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY  BE  USED
;     AND COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE
;     AND WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE.   THIS
;     SOFTWARE  OR ANY OTHER COPIES THEREOF MAY NOT BE PROVIDED OR
;     OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON.  NO  TITLE  TO
;     AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.
;
;     THE INFORMATION  IN  THIS  SOFTWARE  IS  SUBJECT  TO  CHANGE
;     WITHOUT  NOTICE  AND SHOULD NOT BE CONSTRUED AS A COMMITMENT
;     BY DIGITAL EQUIPMENT CORPORATION.
;
;     DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY
;     OF  ITS  SOFTWARE  ON  EQUIPMENT  WHICH  IS  NOT SUPPLIED BY
;     DIGITAL.

	SEARCH	GALCNF		;GET CONFIGURATION DATA
	SEARCH	GLXMAC		;GET GALAXY SYMBOLS
	SEARCH	ORNMAC		;GET OPERATOR SYMBOLS
	SEARCH	D60UNV		;DN60 SYMBOLS

	.DIRECT	.NOBIN		;NO REL FILE...

IFN FTUUOS,<IF1,<PRINTX	Building a GALAXY-10 System>
		SEARCH UUOSYM	;GET TOPS10-UUO SYMBOLS
>  ;END OF IFN FTUUOS

IFN FTJSYS,<IF1,<PRINTX	Building a GALAXY-20 System>
		SEARCH MONSYM	;GET TOPS20-JSYS SYMBOLS
>  ;END OF IFN FTJSYS

	SALL			;SUPPRESS MACRO EXPANSIONS

%%.QSR==36			;MAJOR CHANGE NUMBER OF QSRMAC


QSRVER==4			;MAJOR VERSION NUMBER
QSRMIN==0			;MINOR VERSION NUMBER
QSRWHO==0			;LAST EDITOR
QSREDT==350			;EDIT NUMBER
SUBTTL	Table of Contents

;               TABLE OF CONTENTS FOR QSRMAC
;
;
;                        SECTION                                   PAGE
;    1. Table of Contents.........................................   2
;    2. Revision History..........................................   3
;    3. Accumulator Definitions...................................  11
;    4. Symbols derived from GALCNF...............................  12
;    5. Changable System Parameters...............................  13
;    6. Abbreviations Used in QUASAR-10...........................  14
;    7. RDB  --  Request Descriptor Block.........................  15
;    8. ROB  --  Requested Object Block...........................  17
;    9. QH   --  Queue Header Definitions.........................  18
;   10. QE   --  Queue Entry Definitions..........................  19
;   11. OBJ  --  Object Queue.....................................  21
;   12. PSB  --  Processor Status Block...........................  23
;   13. SPL  --  Spool Queue Definition...........................  24
;   14. CSM  --  Canonical SPOOL Message..........................  25
;   15. CLM  --  Canonical LOGOUT Message.........................  26
;   16. The Messages and their respective codes...................  27
;   17. The HELLO Message -- Function 1...........................  28
;   18. The RELEASE Message -- Function 2.........................  29
;   19. The CHECKPOINT and REQUEUE messages -- Functions 3 and 4..  30
;   20. The NEXTJOB and CREATE Messages -- Functions 5 and 7......  31
;   21. EQ   --  The External Queue Entry.........................  32
;   22. The ABORT Message -- Function 6...........................  40
;   23. The LIST Message -- Function 10...........................  41
;   24. The MODIFY Message -- Function 11.........................  42
;   25. The KILL Message -- Function 12...........................  44
;   26. The LIST ANSWER Message -- Function 13....................  45
;   27. The REQUEST FOR CHECKPOINT Message  --  Function 15.......  47
;   28. The DEFER Message  --  Function 16........................  48
;   30. Event Counters............................................  50
;   31. The COUNT Message  --  Function 20........................  52
;   32. The COUNTANSWER Message  --  Function 21..................  53
;   33. The SETUP/SHUTDOWN Message  --  Function 22...............  54
;   34. The RESPONSE-TO-SETUP Message  --  Function 23............  55
;   35. The OPERATOR-ACTION Message  --  Function 24..............  56
;   36. The HOLD/RELEASE Message  --  Function 25.................  57
;   37. The SPOOL Message - Function 26 (sent by IPCC)............  58
;   38. The LOGOUT Message - Function 27 (sent by IPCC)...........  60
;   39. IPCF Parameters...........................................  61
;   40. Common Parameters.........................................  62
;   41. Prolog macro for generating common header.................  63
;   42. Random Macros.............................................  64
;   43. Failsoft System Definitions...............................  65
;   44. QUASAR Fatal Error Codes..................................  66
;   45. Definition of the Known Queues............................  67
SUBTTL	Revision History

	COMMENT	\

Edit	Module	Explanation

   1	ALL	First System Version Of QUASAR-10 February, 1975

   2	QSRSCH	Operator NEXT Command Caused Batch Job Tables To Get Out Of Sync

   3	QSRMEM	Add New Routine For Cusp Version (CSPMEM) To Clean Core When
		Cusp Is Going Dormant.  Call It M$CLNC

   4	QSRMAC	Invent High Availability Queues
		The Pages Belonging To Them Remain Even If The Queue Is Empty
		Define QH.HAQ In The Queue Header Flags, Include In QUEUES Macro
	QSRMEM	Have M$GCOL Collect Empty Pages That Are Not High Availability
		Remove Some Checks From M$PFRE

   5	QSRSCH	Clean up some code in SCHSTR to remove an extra
		call to I$VSTR.
	QSRIPC	Have SNDFAI save the correct address of a requeued message
		in the IPS entry, and also have it requeue "all"
		messages to SYSINF whether the error was recoverable
		or not.
	QSRQUE	Q$KLPD clobbers H and AP causing a great deal of trouble.
		Preserve both of them.  Also take check out of Q$RTMS for
		the message type, and call Q$KLPD for all returned messages.

   6	QSRFSS	Move index-SAT words into the index itself.
		Start integrating code for multiple sections.
	QSRINT	Start moving code to open the master queue files into QSRINT
		from QSRFSS.

   7	QSRFSS	Fully integrate code for multiple sections.
	QSRINT	On TOPS10 whenever master queue file is extended,
		force the RIBs to be written.  On fatal STOPCDs,
		store away acs so they can be found easily.
		Call M$IPRM when an IPCF receive failed with error IPCUP%.
	QSRMEM	Install M$IPRM

  10	QSRMAC	Define the TEXT Message as an acknowledgement of an operation.
	QUASAR	Implement the global string routines to build the TEXT message.
		Give TEXT message as a return if the caller sets MS.ACK non-zero.
	QSRINT	Invent I$WHEEL to check if caller is an operator of some flavor.
	QSRQUE	Call I$WHEEL in HELLO message processor.
		Send explicit TEXT acknowledgements after KILL, MODIFY, LIST.
	QSRSCH	Call I$WHEEL during default processing if (.EQDIR .NE. G$DIR)
  11	ALL	Insert code for the 6.02 device names.
	QSRQUE	Move changable data from the internal queue to the external
		queue request during Q$NEXTJOB.
	QSRSCH	Insure the Batch job limits for cards, paper tape, etc...,
		get applied to the spooled requests.
	QSRINT	Complete moving code to open master files from QSRFSS.

  12	QSRSCH	Broadcast TEXT message with TX.NMS set now that it has been defined
	QSRQUE	Remove the old Q$SYNC code.
	CSPQSR	Watch for in-coming TEXT messages

  13	ALL	This is the version of QUASAR-10 sent to Field Test, June, 1975.

  14	QSRMAC	Eliminate most of edit 12 and instead invent the Request For Checkpoint
		message.  Every SPLMBC minutes, ask the component to Checkpoint itself.
		Add a word to the PSB to contain the next time to request a checkpoint.
		Define ABO.DI in the ABORT message as the directory of the requestor.
	QSRSCH	Keep track of the Checkpoint time, send during the scheduling loop.
		The Request for Checkpoint message serves a dual purpose.
		  1)  The individual spoolers don't need to watch the time for Checkpoints
		  2)  The message is used to determine if the component is still alive
		Therefore, dead interlock recovery is done every SPLMBC minutes.
	QSRMEM	Have ANYOUT look for pages to destroy first.
	QSRQUE	Install Q$RCK to actually send out the Request for Checkpoint message.
		Include directory of sender in ABORT message.

  15	QSRMAC	Define the Canonical SPOOL Message.
	QSRINT	Invent a new class of routines, the FD Manipulaters.
	QSRQUE	Use the Canonical SPOOL Message throughout the spooling subroutines.
		Generalize SPLINC to include based on the Canonical SPOOL Message,
			call it Q$INCL.
	QSRSCH	Build a Canonical SPOOL Message in S$RELE, call Q$INCL for the Log File.

  16	ALL	Major Change of QSRMAC (#27).
	QSRMAC	Include /REPORT FP areas in all requests.
		This adds 2 words to the minimum FP size.
	QSRQUE	Set and check the Request Doesn't Exist bit instead of the old ones.
	QSRSCH	Set RDE in the external request during SCHDEF if all files are /REMOVEd.
	QSRINT	Monitor change to 6.02. The extension of a spooled LL or LU is LPT.

  17	GALGEN	Ask for Automatic Forms Change Threshold.
	QSRMAC	Define FRMTHR = the answer from GALGEN.
		Add definition of the DEFER Message.
		Define the Canonical LOGOUT Message.
	QSRQUE	Include Q$DEFER to operate on the Defer Message.
		Implement File-Specific Modifies.
		Use the Canonical LOGOUT Message in Q$LOGOUT.
	QSRMEM	Define co-routine ".SAVAP" to save/restore AP.
		Add ".CALLn" to save/restore the preserved acs.
	QSRSCH	Use FRMTHR instead of the absolute 100.
		Build a Canonical LOGOUT Message in S$RELE.
	QSRINT	Add I$FMCH to compare 2 FDs with masks.
  20	GALGEN	Add question for enforcing the jobs core limit.
		If the answer is YES, ask for the default value of /CORE.
		If the answer is NO, define the default = 0.
	QSRMAC	Extract INPCOR = G.ICOR (the GALGEN value).
	QSRSCH	Insert code in INPSCH to use the core values.

  21	ALL	Become version 1A

  22	ALL	Major Change of QSRMAC (#30).
	QSRINT	Get the maximum IPCF packet size from the operating system during
		initialization and store it in G$MPS.
		Install I$CSM for TOPS20.
	QSRQUE	Determine the entry size for the IPC and IPS queues at runtime using
			the maximum packet size in G$MPS.
		Include the number of files in File-Specific Modify, re-work
			Q$MODIFY, Q$KILL, Q$DEFER, BLDKMS, FILMOD.
	QUASAR	Use G$MPS whenever a check must be made for the maximum IPCF packet size.

  23	QSRMAC	Define the Universal Directory Specification
	QUASAR	Remove G$LOCS, G$SDIR, and G$FFAD
	QSRINT	Add more TOPS20 routines

  24	ALL	Make consistent use of connected and logged in
		directories in TOPS20.

  25	QSRIPC	If C$GET does a query which returns false, clear IPCPND.
	QSRINT	Add I$READ and I$WRIT for TOPS20.
		Add I$CRIP routine.
	QSRFSS	Call I$CRIP in the appropriate places.

  26	**NOTE	[SYSTEM]QUASAR no longer requires [SYSTEM]INFO
	QSRMAC	Add a bit in the external queue to indicate that the creator
		of a request was privileged at the time of creation.
		This will reduce the number of CHKACC's required in the spoolers.
	QSRSCH	Set the Privilege bit appropriately.
	QUASAR	Dispatch messages from [SYSTEM]IPCC independently.
	QSRIPC	Move code to establish a PID into QSRINT.
		Remove C$ISM since QUASAR handles the dispatch.
	QSRINT	Add I$EPID and associated routines for acquiring a PID.
	CSPQSR	Remove code for [SYSTEM]INFO, call [SYSTEM]IPCC instead.

  27	ALL	Major Change of QSRMAC (#31).
	QSRMAC	Make .EQPAT optional and TOPS10 only.
	QUASAR	Lay the groundwork for handling multiple PIDs.
		Add G$SFAL to notify all concerned of an invalid PID.
		Isolate dispatch for messages directed to [SYSTEM]QUASAR (G$QPID).
	QSRQUE	Remove Q$RTMS, G$SFAL directly calls Q$KLPD.
	QSRIPC	Add C$GIPC to get a specific response from [SYSTEM]IPCC.
		Re-arrange SNDFAI to call G$SFAL.
	QSRMEM	Define co-routine ".SAVEH" to save/restore H.
  30	QSRINT	Break up QSRINT into the appropriate modules.
		Name the new ones QSRT10 & QSRT20.

  31	QSRQUE	Have CHKMCH just check for matching owner field
		rather than complete directory.
	QSRSCH	If the request protection field is 0 fill in a default
		protection using the contents of G$SPRT.

  32	QSRMAC	Define TX.MOR indicating another ACK to follow.
	QUASAR	If TX.MOR is set at G$MSND, don't clear G$ACK.
		Add G$CSIX for sixbit conversions.
		Add G$CCHR for a Single Characters.
	QSRQUE	Have Q$CREATE send an explicit acknowledgement indicating:
		    Quename:Jobname=/SEQUENCE:s, n Files

  33	QSRSCH	Could ask for Forms Change for non-existant (EQ.RDE) requests,
			Override Forms Type for those requests.

  34	GALGEN	Ask Questions about conversions from Blocks to "Units".
	QSRMAC	Extract the answers.  Define EQ.NBL in .EQLM2 for Output Queues.
	QSRQUE	Replace code that deals with Spooled Limits with some that counts blocks.
	QSRSCH	Convert blocks to limit appropriately during default filling.

  35	QSRMAC	Invent the "listable" bit (QH.LST) in the queue header.
		Put in CLQ message.
		Add new bit to batch release message to flag that the
		log file is to be printed.
	QSRQUE	Check "listable" bit on LIST requests.
		ACK for CREATE in 'INP' with an after parameter was wrong
		because H pointed to 'AFT'.
	QSRSCH	Zero copies field for log file if RL.PRL is off.

  36	QSRSCH	Default the /OUTPUT field in SCHDEF('INP').

  37	ALL	Become version 2.
		Major change of QSRMAC (#32).
	QUASAR	Provide LUUO handler for new STOPCD calls.
	QSRMAC	Remove definitions now found in SBSMAC, Search it.
		Make the same change to the PROLOGUE Macro.
		Re-arrange CHECKPOINT and REQUEUE messages so that the
			entire block is available for CHECKPOINT information.
	QSRT20	Have I$KSYS return seconds to shutdown minus 1 minute.
		Set up IPCF quotas during I$EPID.
		Change I$STCD to accept standard calls.
	QSRT10	Change I$STCD to accept standard calls.
	QSRSCH	Ask for checkpoint from all components after KSYS has expired.
	QSRQUE	Don't give extended "ACK" during create of "RDE" requests.
		Change Q$CHECKPOINT and Q$REQUEUE to account for
			the changes to those messages.
	CSPQSR	Accept indicator in call to CSPINI as:
		  0 = old style call
		 -1 = caller will handle interrupt system.
  40	QSRQUE	Deferred requests recovered from the failsoft file had
			/LIMIT:0 sent to the spooler.
		Move Q$CDIN to inline code in KILPSB.
	QUASAR	Add G$MCOR as minimum system value of /CORE.
	QSRT10	Fill in G$MCOR with %CNMMX.
		If IO.BKT is set on Master file, use SETSTS to clear it.
	QSRT20	Set G$MCOR = 0, there is no system minimum.
	QSRSCH	Check value of G$MCOR after defaulting /CORE.
		Use G$MCOR in input scheduling as PSB minimum.
	QSRIPC	PDL used during IPCF interrupts was too short.
		Could miss a call to I$POST.

  41	QSRQUE	Report words not being cleared during Q$INCL.
		Could MODIFY a file if it had been /REMOVEd previously.
	QUASAR	Wrong ac loaded on returned packets.

  42	QSRMEM	Re-define free space management to optimize size and paging.
		Add M$MOVE for moving entries between queues.
	QSRMAC	Define the "route" message (function 17) to change the routing
		  of output from one station to another.
		Include S$USE as scheduling vector for the USE queue.
	QUASAR	Add dispatch entry 17 to S$ROUTE.
	QSRSCH	Install S$ROUTE and tables required, convert station
		  numbers in OUTREJ.
		Assume forms are frozen if "NO OPERATOR ON DUTY".
		Apply the bias (SPLLIM) on a per file basis.
		Add linking dispatch for the USE Queue (S$USE).
	QSRT10
	QSRT20	Install I$OPER to check if an operator is present.
	QSRQUE	Call M$MOVE during Q$REQUEUE, Q$NEXTJOB, Q$CKAF, and KILPSB.

   43	GALGEN	Don't convert LPT limit factor from pages/page to
		pages/block.  Add a question for the number of minutes before
		system shutdown to stop scheduling automatic forms changes.
	QSRMAC	Extract new symbol from GALCNF.
	QSRSCH	If KSYS is set and is less than FRMKSY minutes away,
		don't schedule a forms change.
		PRIO:0 now means default.  Default it in SCHDEF, and change
		link-in routines to make PRIO:1 do fifo linking.
	QSRT20	Maintain spooled file-sizes in pages on -20.

   44	QSRADM	Add new module QSRADM  to handle system 
		administrative functions.  Move all the routing routines
		from QSRSCH to QSRADM.
	QSRMAC	Include .REQUIRE for QSRADM in PROLOGUE  macro.
	QUASAR	Call A$INIT, and dispatch to A$ORTE on a
		ROUTE message.
	QSRSCH	Remove routing code and put in QSRADM.

   45	ALL	Cleanup accumulator conventions in all QUASAR modules.
		P registers "must" be saved by ALL routines which use them.
   46	ALL	Major change of QSRMAC (#33).
		Start rearranging code and data-structures to allow for
		new user and directory number format on TOPS20.
	QSRMAC	Add account string block to the EQ.
		Define the Request Descriptor Block (RDB).
		Invent new CBL error code.
	QSRT10	Invent I$EQQE, I$QELA, I$SMEQ, I$RMCH, I$DFEQ.
		Make I$VSTR much smarter.
		Remove I$DCHK.
	QSRT20	Invent I$EQQE, I$QELA, I$SMEQ, I$RMCH, I$DFEQ.
		Write I$VSTR.
		Remove I$DCHK.
		Start removing/changing JSYSes which are non-
		existant or different in TOPS20 release 2.
	QSRMEM	Invent M$PCNT to determine whether a given
		number of pages can be acquired.
	QSRQUE	On LISTANSWER keep track of the number of pages
		needed to build the listing and if the number of pages needed
		to build the last listing are not available give the new
		CBL error.

   47	ALL	Start putting in event counters.
	QSRQUE	Remove all PSB handling routines, Q$RCK, Q$HELLO, and Q$KLPD.
		Move the ACK call from Q$LIST and move it to Q$LANSWER
		after check for %CBL since otherwise user never gets CBL error.
	QSRADM	Insert all PSB handlers and routines removed from QSRQUE.
		Invent COUNT and CNTANSWER messages.
	QSRT20	Put in STGWLD routine to compare a "wild"
		string against a base string.
		Uninvent I$MSTR, it wasn't useful on -20.
	QSRT10	Uninvent I$MSTR and have I$VSTR do its work.

   50	QSRMAC	Define flags for calling C$SEND.
	QSRMEM	In M$MOVE, if moving to a queue with no scheduling
		vector defined, use M$ELNK to link the entry in.
	QSRSCH	Remove scheduling vector for USE QUEUE.
	QSRIPC	Modify calling sequence to C$SEND to optionally
		allow specification of additional action to be performed.
	QSRT10	Cleanup I$EPID a little.
		Add some more debugging aids, i.e. the CRASH routine.
	QSRT20	Change I$CHAC to allow access only if caller
		is a wheel or the request owner.
		Add some more debugging aids, i.e. the CRASH routine.

    51	QSRMEM	Call new routine I$MFFP to find first free page in
		my address space during initialization.
	QSRT10	Add new routine I$MFFP.
	QSRT20	Add new routine I$MFFP.
   52	QSRMAC	Add QUASAR job number to COUNTANSWER.
	QSRT10	Set job number in COUNTANSWER.
	QSRT20	Set job number in COUNTANSWER and fix problems with I$VSTR.

   53	QSRMEM	Incorporate performance improvements in garbage collection
		and free page searching.
	QSRT10	GETTAB directories for prime and redundant queues at
		initialization time on -10.

   54	QSRT10	Make I$GTAB into a local routine.
	QSRT20	Extract structure from spooled file name and store it
		in the CSM so FTSPLIT works on the -20.
	QSRIPC	Set "truncate if too long" on all receives.
	CSPQSR	Set "truncate if too long" on all receives.
	GALGEN	Ask about FTSPLIT on the -20.

   55	QSRSCH	Call routines in operating system interface to handle
		/UNIQUE checking of directories.
	QSRT10
	QSRT20	Add I$UQST, I$UQCL, I$UQCH to worry about /UNIQUE directory
		checking for batch requests.

;;First field-test release of GALAXY release 2, Jan, 1977

   56	QSRMAC	Invent the RDE queue.
	QSRQUE	Place jobs which get the RDE bit set into a
		separate queue, the RDE queue.
	QSRSCH	If a known component has said that it can handle RDE jobs,
		try to schedule it one before checking the processing queue.
	QSRT10	Make the maximum IPCF packet size equal to the
		MAX(SPL.SZ,monitor supplied maximum).

   57	QSRSCH	Add the "bias" to the limit for each copy of each file
		rather than each file.
200	QSRMAC	Begin release 3 development.  Major change of QSRMAC (#34).
		Take length of FD out of the FP and add a length field to the FD.
		Define two new queues, XFR and BIN.
	ALL	Use new FD/FP format.  This change affects the format
		of the CSM, FP, MODIFY message.
	QSRSCH	Add a release entry to scheduling vectors (SCHREL).
		Add vectors for the new queues.
	QSRQUE	Call the SCHREL entry instead of S$RELE.

201	QSRT20	Fix some problems with edit 200.

202	QSR???	Change all QUASAR modules to use the new GLXLIB conventions,
		routines and symbols. Also add some debugging code.
203	QSR???	Integrate more of GLXLIB

204	QSR???	Change to use the new GLXLIB segment

205	QSR???	Begin adding QSROPR, ORION-QUASAR interface

206	QSRMAC	Remove file-specific modify symbols.
		Remove FP.IGN field from the FP.
	QSRSCH
	QSRQUE	Remove group 2 (file-specific) modify, and make the various
		parameters part of the group 1 (queue-specific) modify parameters.
	QSRT10
	QSRT20	Remove I$FMCH.

207	QSR???	Make use of the GLXLIB module GLXINT for interrupt handling
		and common operating system tasks.

210	QSR???	Move TEXT message to GLXMAC

211	QSRMAC	Major change 35 to %%.QSR, message format change (.MSxxx)

212	QSRMAC	Make /UNIQUE values 1 and 2 rather than 0 and 1 so that it can be default.
		Make /RESTART a 2 bit field with values 1 and 2 for the same reason.
	QSRSCH	Default the /UNIQUE and /RESTART fields.

213	QSRMAC	Add canonical device types
	QSRADM	Add new object queue creation code
	QSRTx0	Add I$NLDV for finding number of local devices of type 'xxx'

214	QSRMAC	Insert new definitions for the PSB and the HELLO message.
		Insert definitions for new SETUP and RESPONSE-TO-SETUP messages.
	QSRSCH	Re-write entire module from scratch to implement new scheduling
		algorithms.
	QSRADM	Re-write A$HELLO and KILPSB to keep up with all the other changes.

215	ALL	Due to interim release on the -20 called version 3,
		make this version 4 of GALAXY.  Continue with new
		scheduling changes.

216	QSRMAC	Change ROUTE message to use full words for nodes, to allow
	QSRADM	TOPS20 style node names

217	QSRMAC	Add symbol for file spooler XFRSPL OBJect type.
		Add mask symbol for flags in flags word of HELLO message.

220	QSRMAC	Get rid of the AFT queue and keep AFT jobs in the
	QSRQUE	appropriate external queue.
	QSRSCH

221	QSRMAC	Add new Table of Contents.

222	QSRQUE
	QSRSCH	Make jobs which have been scheduled and checkpointed at
		least once get restarted sooner after a system crash by
		invisibly bumping its priority.

223	ALL	Remove FTSPLIT conditional in preparation of new general
		dependency list.

224	QSRMAC	Define new data-structures (and re-define old ones) for new
		dependency list.

225	QSRMAC	Create the QSRMDA module which will contain all the routines
	QSRMDA	which do things with file-structures.  Include the .REQUIRE
		for QSRMDA in the PROLOGUE macro.

226	QSRMAC	Invent the RDR queue for Readers (card).  Take the structure
	QSRSCH	word out of the LISTANSWER message and just include a bit
	QSRQUE	which indicates waiting for structure.

227	QSRT10	Add a routine to validate objects.
	QSRADM	Add the hooks to call the object validation routine.
	QSRMAC	Add INPMAX which defines the maximum number of Batch
		streams which can be started.
230	QSRMAC	Change PROLOGUE macro to .REQUIRE QSRSHO if QUASAR is defined.
	QSRSHO	Add a new QUASAR module for display messages.

231	QSRMAC	Remove .REQUIRE Statements for all Modules
		and Create a Separate Command file QUASAR.CMD
		to load the module.

232	ALL	Remove PROLOGUE macro from QSRMAC. Use PROLOGUE in GLXMAC.

233	ALL	Changed DEFLIM OUTP to be compatible with QMANGR
234	QSRADM	Modified The route processor for the new
		message types.
	QSRDSP	Added the SHOW ROUTE TABLE message processor.

235	QSRMAC	Modified INPMAX so as to get its value as a GALGEN parm.
	QUASAR	Added G$NBAT as a global parm. Used to keep track
		of the number of batch streams started.
	QSRT10	Modified I$VOBJ to use G$NBAT
	QSRSCH	Modified the SHUTDOWN code to Update G$NBAT.

236	QSRMAC	Define  a  symbol representing the number of
                words used for the .EQLIM block.  Also,  get 
                rid of the old .EQ??? and EQ.??? symbols.
237	QSRMAC	Add IBM and Card Reader queues
	QSRSCH	Add Card Reader scheduling code. IBM is the same as card punch.

240	QSRMAC	Add the new Network data base structure.
	QSRSCH	Modify all calls to network subrutines to use the new routines
	QSRADM	Deleted all network support from this module
	QSRNET	Added this new QUASAR module in support of Networks.

241	QSRDSP	Modified the queues display to its new format.
	QSRSCH	Modified the scheduler so that network devices get shutdown
		when the queue is empty.

242	QSRT10	Fixed I$LGFD so that it generates ledgible file names
	QSRMDA	Fixed a bug in D$ESTR which allowed null structure names.

243	QSRADM	Added support for SET LIMIT-EXCEEDED commands.
	QSRMAC	Here also
	QSRMAC	Added support for DISP:RENAME

244	QSRMAC	Modify the Spool Msg structure for DISP:RENAME
	QSRT10	Add more DISP:RENAME code

245	QSRT10	Complete the DISP:RENAME coding

246	QSRQUE	Fix a bug which caused create's with bad structure names
		to be fail-softed. This caused QUASAR to stopcode
		if it was restarted since when Q$CREATE rejected the
		entry the second time, QSRFSS couldnt handle it.

247	QSRMAC	Add .FPINF to the EQ for the card reader
	QSRSCH	Add defaults for the SPRINT queue
	QSRT10	Fix I$CSM for DISP:RENAME

250	QSRMAC	Changed a duplicate definition of SP.DFR under SPL.SF
		to SP.FLG.
	QSRT10	Changed I$CSM to use the new definition.

251	QSRT20	Fix a bug in I$CSM so that device numbers specified
		in the spool message FD are parsed.

252	QSRMAC	Expand EQ limit block to 6 words.
		Define a Device Status Update msg (Function 31).
		Change the Object queue entry OBJSTS to 1 word which
		will contain a code describing the Object status.
		Define the object status codes.
		Add operator intervention symbols, DEFLIM it, and add
		to the Object queue parameter words
		Add RSU.CD to the Response-to-Setup message. This
		contains an optional reason why the device count not
		be started.

253	QSRQUE	Fix the Request-Id logic so that RIDs are maintained
		after queue modification
	QSRSCH	Add code to INPFJB so that it checks the opr intrvn
		status before scheduling a job for a stream.
		Add code to default the opr intrvn status for batch jobs.

254	QSRIPC	Fix C$GET so that oversize packets are recieved properly.

255	QSRADM	Remove Set Job Priority - make it a Modify Command.
		Add code for Set OPr/NO-OPR Intrvn.
		Change A$OREQ, A$OHLD, A$OREL to use Req Id instead of
		Jobname & Seq number.
		Add A$DELETE to remove jobs from the queues
		Add A$STATUS to update the Object status via a device 
		status update message

256	QSRT10	Fix I$LGFD so that it generates unique funny-name
		log file-specs

257	QSRDSP	Re-write the Show Status and Show Parameters routines
		to display the data in a different format

260	QSRSCH	Add code
	QSRT10	     to support
	QSRQUE		 the /NOTIFY option

261	QSRMAC	Add %READN to object status code list.
	QSRADM	Fix A$OBST so the Free running objects are always set 'IDLE'
	QSRDSP	Fix DMPSTS so that the call to CHKSPC for the /AFTER parm
		is made after we're sure that there is a /AFTER parm
	QSRQUE	Modify NOTIFY routine to put out a crlf first.

262	QSRMAC	Delete Function 24, operator action message (Now obsolete)
	QUASAR	Add G$RMTE for remote operator queue requests
		It contains the node at which the operator is located.
	QSRQUE	Fix Q$CREATE so that the correct number of limit words
		are BLT'd from the EQ to the QE
		Modify FNDREQ so that if its checking an operator request,
		it looks at G$RMTE and only wins if the queue entry is
		destined for that operators remote station
	QSRSCH	Fixed LNKPRI so that priority 1 jobs are always linked
		to the end of the queue, regardless of limit specifications.
	QSRADM	Added a DOSCHD to the SET message processing routine
		Added code in A$MODIFY, A$OHLD, A$OREL, A$ODEL
		and GENRDB to support the .ORNOD block in operator msgs.
	QSRNET	Make QUASAR completly Node number/Node name knowledgable.
		Ie., make it so that it understands either an
		octal node number or a sixbit node name in all cases where
		a node value is referenced.

263	QSRMAC	Add symbols for /BATLOG: switch
	QSRSCH	Add code for /BATLOG: support

264	QSRMAC	Add %REQUE to the list of object status codes
	QSRSCH	Fix scheduling bug in batch for opr intrvn allowed
		Also add defaulting code for batch log type

265	QSRMAC	Change .QEJBN so that it contains 2 values:
		QE.UJN==0,,-1  ;Users Job Number
		QE.BJN==-1,,0  ;Batch Job Number
		Also change CHE.FL, adding CH.JBN which is the
		job number of the checkpointed batch job.
	QSRQUE	Modify Q$CHECKPOINT so that it save the batch job number.
		Add routine Q$NOTIFY to setup /NOTIFY parameters.
	QSRT10	Delete routine I$NOTF
	QSRT20	Delete routine I$NOTF

266	QUASAR	Deleted G$OLNK hack.
	QSRSCH	Deleted references to G$OLNK.

267	QSRMAC	Delete .OTBIN and .OTXFR symbols. Define them in GLXMAC.

270	QSRSCH	Add processing code for XFR queue.  Simple first come
		first serve scheduling.

271	QSRMAC	Add symbols QE.AVO, QE.AVI to redefine .QEITN for
		account verification (-10 only)
	QSRSCH	Add hooks for Account Verification
	QSRT10	Add routines I$VACT, I$ACCT. These two routines
	QSRT20	   are used for Account Verification. I$ACCT is
		   a no-op on the -20.

272	QSRMAC	Delete OBSNLP 
	QSRSCH	Delete code supporting OBSNLP. This modifies the
		scheduler such that it does not shut down objects
		just because there are no jobs in the queue AND
		there is another object which needs to be started.
		Remote objects will still be shut down when the
		Queue go empty.

273	QSRMAC	Add QH.INV to queue header flag.
		Add OBSINV to object flags
		Add node block to list queues request message (function 10)
		Add QH.INV to QUEUES macro.
	QSRADM	Add support for initializing invisible objects when the
		object gets started.
	QSRDSP	Add support in D$SHST and D$SHPR so that invisible objects
		are not displayed in status/parameters requests.

274	QSRMAC	Delete SPRINT .EQLIM definitions for CMOD, CSIZ, NCRDS.
		Add %EQUFT for file retrieval
		Add new object scheduling bit OBSINT (internal shutdown)
	QSRSCH	Modify CHKOBJ so that it shutsdown the object if its 
		remote or if OBSINT is lit.
	QSRT20	Modify I$DFEQ so that if the job name in the EQ is
		null,,it gets defaulted to the first 6 chars of the filename.
	QSRQUE	Rewrote Q$ARCHIVE so that it conforms to GALAXY standards.
	QSRADM	Changed GETOBJ so that the right field is checked when
		looking to see if the object is free running. (QH.TYP)
	QSRDSP	Changed DEPRET to fix a few bugs. (Wrong ac's, a PUSH and
		no POP, etc.)

275	QSRMAC	Add new message type .QONWA and description (function 36).
		Add FP.RCD to the BIN queue FP description.
	QSRNET	Add NODE Jsys to GETNODE routine.
		Modify N$INTR so that when a node goes offline, it
		searches the object queue looking for objects started
		and setup for that node. If it finds one, it sends a
		node went away message to the controlling spooler.
		When done, it sends ORION the same message.
	QSRT20	Change I$RDEF so that it picks up the tape info from
		the limit words instead of the checkpoint words.
	QSRQUE	Change Q$ARCHIVE so that it saves the tape info in
		the limit words instead of the checkpoint words.

276	QSRMAC	Move EQHSIZ to the end of the EQ header definition (where
		its supposed to be)

277	QSRMAC	Put all ARCHIVE definitions under TOPS20 conditional.
	QSRQUE	Move Q$ARCHIVE to QSRT20.
	QUASAR	Change Archive message entry point to I$ARCHIVE.

300	QSRMAC	Add a redefinition of the RDB for ARCHIVE requests.
		Delete the ARCHIVE definition's in the KILL msg.
		Add an ARCHIVE msg Create code (.QIRET) so that
		creates wont fail if Queue Creates are disabled.
	QSRQUE	Delete routine FNDFRR and make it work with FNDREQ.
	QSRT20	Delete all Archive notification routines (they
		were terribly written) and replace them with code
		that works.

301	QSRMAC	Change .EQUSR to .EQOWN (Just to be consistant)
		Add symbol EQNMSZ which is the length of .EQOWN.
		Add .QOCQE (Short Create message) to msg type table
	QSRQUE	Add Support code for .QOCQE (Short Create Message)
	QUASAR	Add .QOCQE to the QUASAR message Dispatch Table.

302	QSRMAC	Change .EQTIM to .EQSPR (SPARE)
	QSRADM	Delete 'Requeue' from Request-Id error message
	QSRQUE	Change create ack to put out # of files if greater then 1.

303	QSRT20	Change Archeive Notify to put flag on in .OFLAG and to
		use .CMDIR for the Directory

304	QSRMAC	Add SUP.PL for DN60 PORT,,LINE #'s to SETUP message

305	QSRMAC	Add SUP.ST For remote network status/flag bits in SETUP msg.

306	QSRMAC	Add .OOTAP to OBJPRM definition and OBDTAP to 
		line printer attributes for spooling to mag tape
	QSRADM	Modify A$OSTA to support spooling to mag tape
	QSRSCH	Modify SETUP to support spooling to mag tape

307	QSRMAC	Add NETBPM to network data base (Bytes Per Message)
	QSRADM	Add DN60 CALL11 Support

310	QSRMAC	Change INPMAX to default to 30 streams total
		Add INPLOG to default /OUTPUT:(LOG,NOLOG,ERROR)
		Change INPOIP to default to 1 (opr intrvn required)
	QSRSCH	Change INPDEF to use INPLOG to default the /OUTPUT: switch

311	QSRMAC	Add a new limit word to the card reader inperpreter .QE
		queue. This new field is CNOD which is the node where the
		card deck origionated.

312	QSRMAC	Remove error DRN - Duplicate Mount Request Name - from
		the QUASAR error list.
	QSRT20	Remove the code from U$MNT which checks for duplicate
		mount request names.
	QSRSCH	Modify LPTFJB so that if spooling to tape, it skips the
		device check

313	QSRMAC	Add a new queue for DBMS (DBM)
	QSRSCH	Add scheduling control vector for DBMS

314	QSRMAC	Add %OPRWT to list of Object status codes for DN60
		Add error code WFM (waiting for tape/structure mount) for
		R.ACE and Co.
	QSRT20	Have U$MNT always return through E$WFM.

315	QSRADM	Make A$OBST set remote stations which are internally
		shutdown show up as IDLE instead of NOT AVAILABLE
	QSRDSP	Fix a bug in PADLIN so that the correct byte count
		is calculated even if the count is negative.
	QSRNET	Fix a bug so that TOPS-10 603A and non-decnet
		TOPS-20 monitors will run. The bug fix is just to
		make sure that the central site status bits
		are not set to indicate that the node is offline.
	QSRQUE	Fix a bug - make sure that if a BIN (SPRINT) request
		is processed, that no NOTIFY takes place.

316	QSRADM	In the DEFINE command processor, start a batch stream for
		Emulation.
	QSRDSP	In the list file archiving code, if the user specified
		/ALL, list the archived file name (From .QECON)
	QSRT20	In the File Archiving defaulting code, stash the archived
		file name in the connected directory area (.EQCON)

317	QSRMAC	Add response to setup code %RSUNC for 
		'Port/Line not conditioned'
		Add another word to the network data base for port/line handles
		Add another word to the setup message for port/line handles
	QSRADM	Add code to A$DEFINE so that it generates a handle for
		that port/line number by which the front end and spoolers
		can identify one another. Use the UDT and save in net DB.
	QSRSCH	Modify the setup message processor so that it sends the
		port/line handle along if setuping up a DN60 remote station
		Modify the Response to setup code so that, if the line/port
		handles do not match(%RSUNC) we will re-define the port/line
		and retry the device setup.

320	QSRDSP	Add code to D$DMNT (Show Mount Queues) to support
		'INFO MOUNT/USER:xxxx'

*********** Start MDA Modifications/Additions **************

321	QSRMAC	Remove the TOPS20 conditional from the MOUNT structures.
	QSRT20	Remove The MOUNT message processor from the U$MNT code
		and make it D$CMDR to create the MDA MDR queue. Put it
		into QSRMDA.
		Add I$DFMR to default the system dependent data for the MDR.
	QSRDSP	Change all MNTQUE references to MDRQUE
	QSRMDA	Add D$INIT to initialize the MDA system
		Add D$CMDR to create an entry in the MDR queue.

322	QSRMAC	Change the disk mount block type codes so that they fall in
		line with the tape block codes.
		Add 2 new block types, .MDNAM, .MDACT for the user
		number, the user name, and the users account string.
	QSRMDA	Add the block processors for the new codes.

323	QSRMAC	Impliment Base Level -3 of MDA . Make Mucho changes/refinements
		to the MDA structures. Update all the Pictures for all QUASAR
		structures. Delete the File Retrieval cancel msg Structure.
	QSRT10	Add code for Initialization to build the UCB chain.
		Add routine I$OMNT to parse operator mount messages and
		send them off to the correct msg processor.
		Delete all U$xxxx routines and/or modify them to be I$xxxx.
	QSRQUE	Make Q$LOGOUT exit through the MDA logout processor D$LOGOUT.
	QSRMDA	Add mucho code to support base level -3 of MDA. This base level
		supports tape mounts (no AVR) and replaces the UMOUNT/OMOUNT
		interface for tapes.
	QSRDSP	Cleanup/fix the tape/disk mount queue display routine to use
		the MDA structures.

324	QSRMAC	Add Volume status (on-line/offline) message block definitions

325	QSRMAC	Delete the file archiving cancel message decsriptions
	QSRT20	Delete the code in I$RMCH for matching file archiving
		requests since the cancel message is going to look just
		like all other cancel messages.

326	QSRMAC	Add /NOTE:, /BEGIN:, and /PRIORITY: to the list of short
		create blocks.
	QSRADM	Make D60CND set the IBM node offline. Make A$OSND send
		the message if the destination node is an IBM station.
	QSRSCH	Make RSETUP set an IBM node Online if the setup is %RSUOK.
		Make RSETUP set the IBM node offline if the response if
		%RSUDE and we were setup prior to getting the response to
		setup.
	QSRMDA	Make some mods to get MDA code running on the -20.
	QSRDSP	Delete/Change D$SHRT (Show route tables) so that it dumps
		the network data base.
		Make D$SMNT dump the remarks if /ALL is specified.
		Add code for /SCRATCH in D$SMNT.
	QSRQUE	Add processing routines CRQNTE, CRQBGN, and CRQPRI for new
		short create message blocks.

327	QSRT20	Make I$CACV get the user number from the EQ.
		Re-arrange some code in I$DFEQ to make sure .EQOID is
		defaulted before account validation

330	QSRT20 	Fix a bug in the file archiving notification code which
		caused a DTL stopcode. Must asve AP across the NSNDIT
		subroutine call.

331	QSRMDA	Add finishing touches on volume switch support (tape).
		Put up latest version for everyone to use.
	QSRDSP	Add REMARK and LABEL TYPE on tape Q display

332	QSRMAC	Add error code CIU.
	QSRMDA	Fix a bug in MDA Identify code to prevent OPR from identifying
		the users current tape as the user next tape in volume switch.
	QSRT10	Delete temporary code for setting/clearing DVCMDA.

333	QSRMAC	Add new Message type .QOREW for MDA Tape Rewind
	QSRMDA	Add code to support the new rewind function
	QSRT10	Fix a bug (MDA) so that if the device is not available,
		we don't lite the AVR bit on startup.

334	QSRMAC	Add Error Code ICD, Illegal Connected Directory Specified.
		Modify the setup msg block for passing DN60 line conditioning
		block
	QSRT20	Return Error ICD if Connected directory error
		Add a WTO for a File Retrieval Request.
	QSRNET	Remove IBM check from N$NODE and only return TRUE is online
	QSRSCH	Re-Work S$RSETUP and remove the old DN60 crocks and add some
		new ones
		Delete routine CHKNODE and put the node online/offline checking
		in the scheduler and the object validation in GETOBJ(QSRADM).
		Modify SETUP to pass a correct DN60 line conditioning block
		to the spoolers.
	QSRADM	Delete the DN60 line conditioning routines (They're moving to
		the spoolers) and re-work the DN60 support code.
		Add some more object validation to GETOBJ.
	QSRMDA	Move the PUSHJ P,UNLOAD from CHKVOL to the device status msg
		processing routine.

335	QSRMAC	Expand the node went away message so that we can stuff the
		port,,line number in .OFLAG and lite %ONLINE in .MSFLG to
		make it a Node Online Message.
	QSRADM	Add code in KILPSB so that if we are killing a processor for
		an IBM remote, we set the node offline
	QSRNET	Add entry points N$NONL (online) and N$NOFF (offline) for IBM
		online/offline processing. Have it send a node-went-away or
		node-came-online message to Orion.
	QSRSCH	Make the RSETUP routines call N$NONL & N$NOFF for IBM remotes.

336	QSRMAC	Add .FPF8B for 8 bit files
	QSRSCH	Add DN60 Node offline call to the shutdown code.
		Also, send the setup msg to DN60 devices regardless of
		requests in the queue.
	QSRADM	Delete the code to set an IBM node offline in SHUTDOWN NODE

337	QSRDSP	Add support to the show status processor for the emulation
		spooler. If the emulation spooler is running, send the status
		message to it so that it can generate the ack back to the OPR.

340	QSRT10	Modify I$IPS so that it works the same on both the -10 and 
		-20. That is, if the message being sent is greater then the
		maximum packet size, then allow it to be sent anyway. We
		did this by allocating a page for the message and sending
		a page instead of a packet. This allows for GALAXY debugging
		where IP.CFL would not.

341	QSRSCH	TOPS20 QAR (20-00605) Delete the spooling to tape check
		in OUTFJB.

342	QSRADM	Add DN60 Signon support to DEFINE and SET NODE commands.
	QSRMAC	Add Node Status Bit NETSGN for Node Signon Required.
	QSRDSP	Modify D$NPRM to display Signon Required info

343	QSRMAC	Add a new status bit to the EQ for account validation required.
		Delete OBJECT status bit OBSAVW.
	QSRT10	Start adding code to support disk units in MDA. Build the
		UCB's and VOL's for disk drives in I$INIT.
		Make I$SACV always return true.
	QSRSCH	Delete the JUMPF .RETF following the call to I$SACV
		in NEXTJB. 
		Delete the JUMPF SCHD.4 following the PUSHJ P,SCHSCH(P2)
		in SCHD.2
		Change the PUSHJ P,EQDFLT at BINDEF to PUSHJ P,INPDEF
	QSRNET	In N$NONL, change the check for .OTIBM to .OTBAT
		Also, only send the Node online/node offline message to
		ORION if the node is termination
	QSRADM	In A$HELLO, $LOG the processor signon event.
		In KILPSB, $LOG the deletion of a PSB.
	QUASAR	Add support for account validation response from ACTDAE,
		so that we dispatch to the correct routine.

344	QSRSCH	Add OBSSIP to S$SHUT code to check if setup in progress for
		shutting down an object
	QSRADM	Add OBSSIP to A$SHUT to check for setup in progress when
		shutting down an object
	QSRDSP	Remove label type from /ALL Mount Queue Listing

345	QSRADM	Change A$OSHT to remove the OBSSIP bit check added above. 
		Instead, make A$OSHT call S$SHUT to shut down the object.
		Also, change SHUTNO to call S$SHUT to shut down an object.
	QSRT20	Zero the VL.SCR (chkp.5-2) bit if MOUNTR passes back a 
		Volume ID

346	QSRSCH	Add a hack (should be removed asap) to correct a problem
		in BINDEF where the CNOD limit word can get trashed by
		the call to INPDEF. Save the CNOD limit word across the call.

347	QSRT20	Modify I$AGE so that it always returns a value. If the
		calculated time difference is 0, then return 1 second.
	QSRT10	Same as Above.

350	QSRT20	Change the file archiving message processor so that it fills
		in the node name in the ROB and includes the object block in
		the $WTO that gets sent to the OPR. This will enable an 
		operator to screen out file retrieval messages.

	\	;End Of Revision History
SUBTTL	Accumulator Definitions


	AP==13			;ARGUMENTS FOR ALL M$xxxx ROUTINES

	E==14			;QUEUE ENTRY POINTER

	H==15			;QUEUE HEADER POINTER

	M==16			;MESSAGE POINTER
SUBTTL	Symbols derived from GALCNF

; DEFINE FEATURE TESTS SO THAT EACH MODULE NEED ONLY SEARCH QSRMAC

	XP	FTRQUE,FTRQUE		; ON = KEEP A REDUNDANT MASTER QUEUE
	XP	FTRJE,FTRJE		; ON = ADD RJE SUPPORT TO SPOOLERS
	XP	FTDN60,FTDN60		; ON = ADD DN60 SUPPORT TO SPOOLERS

; DEFINE BATCH JOB PARAMETERS

	XP	INPMAX,^D30		;DEFAULT MAX BATCH STREAMS STARTED.
	XP	INPTIM,G.ITIM		;DEFAULT BATCH JOB TIME LIMIT
	XP	INPCOR,G.ICOR		;DEFAULT BATCH JOB CORE LIMIT
	XP	INPPGS,G.ILPT		;DEFAULT PAGE LIMIT
	XP	INPCDS,G.ICDP		;DEFAULT PUNCHED CARD LIMIT
	XP	INPPTP,G.IPTP		;DEFAULT PAPER TAPE LIMIT
	XP	INPPLT,G.IPLT		;DEFAULT PLOTTER TIME
	XP	INPOIP,1		;OPERATOR INTERVENTION PARAMETER
	XP	INPLOG,G.ILOG		;BATCH /OUTPUT: DEFAULT

; DEFINE SPOOLING SYSTEM PARAMETERS

	XP	SPLPRI,G.DPRI		;PRIORITY FOR SPOOLED REQUESTS
	XP	MXUPRI,G.SPRI		;MAXIMUM USER PRIORITY
	XP	SPLMBC,G.NMBC		;NUMBER OF MINUTES BETWEEN CHECKPOINTS

	XP	FRMNOR,G.DNOR		;NAME OF "NORMAL" FORMS
	XP	FRMUNI,G.DNUC		;NUMBER OF UNIQUE CHARACTERS IN THE NAME
	XP	FLEACT,G.FLEA		;FORMS LIMIT EXCEEDED ACTION

		FRMSK1==MASK.(6*FRMUNI,6*FRMUNI-1)	;ANDX, LOAD MASK
		FRMSK2==MASK.(^D36-6*FRMUNI,^D35)	;TXZ STYLE MASK

	XP	LPTDIV,G.LPTD		;DIVISOR FOR CNVRTNG DSK BLKS TO PAGES
	XP	LPTMUL,G.LPTM		;MULTIPR FOR CNVRTNG DSK BLKS TO PAGES

	XP	CDPDIV,G.CDPD		;DIVISOR FOR CNVRTNG DSK BLKS TO CARDS
	XP	CDPMUL,G.CDPM		;MULTIPR FOR CNVRTNG DSK BLKS TO CARDS

	XP	PTPDIV,G.PTPD		;DIVISOR FOR CNVRTNG DSK BLKS TO FEET
	XP	PTPMUL,G.PTPM		;MULTIPR FOR CNVRTNG DSK BLKS TO FEET

	XP	PLTDIV,G.PLTD		;DIVISOR FOR CNVRTNG DSK BLKS TO FEET
	XP	PLTMUL,G.PLTM		;MULTIPR FOR CNVRTNG DSK BLKS TO FEET

;FAILSOFT SYSTEM PARAMETERS

	XP	FSSSTR,G.QSTR		;FILE-STRUCTURE FOR MASTER QUEUES
SUBTTL	Changable System Parameters

DEFINE PARAM(SYM,VAL,MIN,MAX),<
	IFDEF SYM,<
		IFL <SYM-MIN>,<PRINTX VALUE OF SYM IS TOO SMALL>
		IFG <SYM-MAX>,<PRINTX VALUE OF SYM IS TOO LARGE>
	>  ;END IFDEF SYM
	IFNDEF SYM,<SYM==VAL>
>  ;END DEFINE PARAM

	PARAM(EQLMSZ,6,1,20)		;EQ LIMITS WORDS
	PARAM(EQCKSZ,5,5,200)		;SIZE OF REQUEST CHECKPOINT AREA
	SYSPRM	EQNMSZ,2,10		;.EQOWN SIZE IN WORDS
	SYSPRM	VSNLEN,10,2		;VOLUME SET NAME LENGTH IN WORDS
	PARAM(STSSIZ,21,21,200)		;SIZE OF STATUS AREA IN OBJ AND CHKPNT
	PARAM(TIMONA,3,1,74)		;MINUTES TO WAIT FOR OBJ NOT AVAIL
	PARAM(OBPRSZ,5,5,200)		;NUMBER OF WORDS OF OBJECT PARAMS
SUBTTL	Abbreviations Used in QUASAR-10

COMMENT \

Abbreviation	Meaning
------------	-------

    ITN		Internal Task Name
    PDB		Packet Data Block (for IPCF)
    PSB		Program Status Block
    RQP		Relative Queue Pointer
    NJP		Number of Jobs being Processed
    DPA		Disk Page Address
    IDS		Internal Device Specifier
    CSM		Canonical SPOOL Message
    CLM		Canonical LOGOUT Message
    RDB		Request Descriptor Block

\
	SUBTTL	RDB  --  Request Descriptor Block

;THE REQUEST DESCRIPTOR BLOCK IS THE DATA-STRUCTURE USED TO REPRESENT
;	A REQUEST OR SET OF REQUESTS.  IT CONSISTS OF A JOBNAME WITH
;	WILDCARDS AND A POSITIVE MASK, A SEQUENCE NUMBER (WHICH IF 0
;	IMPLIES ALL JOBS WHICH FIT THE REST OF THE CRITERIA), AND AN
;	OPERATING SYSTEM DEPENDENT OWNER SPECIFIER WITH WILDCARDS.

;	!-------------------------------------------------------!
;	!                  SPECIFIED JOB NAME                   !
;	!-------------------------------------------------------!
;	!                     JOB NAME MASK                     !
;	!-------------------------------------------------------!
;	!               EXTERNAL SEQUENCE NUMBER                !
;	!-------------------------------------------------------!
;	!                 REQUEST ID NUMBER                     !
;	!-------------------------------------------------------!
;	                                                       
;	                 -----  TOPS10  -----                  
;	!                                                       !
;	!-------------------------------------------------------!
;	!              OWNER IDENTIFICATION (PPN)               !
;	!-------------------------------------------------------!
;	!                     OWNER ID MASK                     !
;	!-------------------------------------------------------!
;	
;	                 -----  TOPS20  -----                  
;	!                                                       !
;	!-------------------------------------------------------!
;	!                                                       !
;	/            SPECIFICATION OF REQUEST OWNER             /
;	/                                                       /
;	/                                                       /
;	!                                                       !
;	!=======================================================!

	PHASE	0

.RDBJB:! BLOCK	1			;JOB NAME (SIXBIT)
.RDBJM:! BLOCK	1			;JOB NAME MASK
.RDBES:! BLOCK	1			;EXTERNAL SEQUENCE NUMBER
.RDBRQ:! BLOCK	1			;REQUEST ID NUMBER

TOPS10 <
.RDBOI:! BLOCK	1			;OWNER ID
.RDBOM:! BLOCK	1			;OWNER ID MASK
>  ;END TOPS10 CONDITIONAL

TOPS20 <
.RDBOW:! BLOCK	10			;REQUEST OWNER SPEC
>  ;END TOPS20 CONDITIONAL

RDBSIZ:!
	DEPHASE
	SUBTTL	ROB  --  Requested Object Block

;The ROB is used in any context where an object and
;	some attributes (or a particular object) must be specified.

;	!=======================================================!
;	!                      OBJECT TYPE                      !
;	!-------------------------------------------------------!
;	!     DEVICE ATTRIBUTES     !   PHYSICAL UNIT NUMBER    !
;	!-------------------------------------------------------!
;	!                       NODE NAME                       !
;	!-------------------------------------------------------!
;	!              CUSTOMER DEFINED ATTRIBUTES              !
;	!=======================================================!

	PHASE	0

.ROBTY:! BLOCK	1			;OBJECT TYPE
.ROBAT:! BLOCK	1			;ATTRIBUTES (DEC)
	RO.PHY==1B0			;PHYSICAL UNIT SPECIFIED

	RO.ATR==-1,,0			;DEVICE ATTRIBUTES (SHORT CREATE ONLY)
	  %LOWER==1			;LOWER CASE DEVICE (SHORT CREATE ONLY)
	  %UPPER==2			;UPPER CASE DEVICE (SHORT CREATE ONLY)
	  %PHYCL==3			;PHYSICAL DEVICE   (SHORT CREATE ONLY) 
	  %GENRC==4			;GENERIC DEVICE    (SHORT CREATE ONLY) 

	RO.UNI==0,,-1			;PHYSICAL UNIT NUMBER
					;OTHER ATTRIBUTES ARE DEFINED
					; WITH THE OBJ DEFINITIONS
.ROBND:! BLOCK	1			;NODE NAME
.ROBUA:! BLOCK	1			;CUSTOMER DEFINED ATTRIBUTES

ROBSIZ:!

	DEPHASE
SUBTTL	DIB  --  Dependency Information Block

;Each job has a Dependency List associated with it.  Each entry in the
;	list is a DIB which describes one dependency which the job has.

	PHASE	0

.DIBDS:! BLOCK	1			;DEPENDENCY STATUS
	DI.SAT==1B0			;SATISFIED LAST PASS (FOR LIST MOSTLY)
	DI.TYP==0,,-1			;DEPENDENCY TYPE

.DIBDT:! BLOCK 1			;DEPENDENCY DATA

DIBSIZ:!

	DEPHASE


;Currently defined dependencies

;	Symbol		Value		Data
;	------		-----		-------------------------------

	.DTSTR==	1		;Adr of STR queue entry for structure
SUBTTL	QH   --  Queue Header Definitions

;	!=======================================================!
;	!        QUEUE NAME         !    FLAGS    ! QUEUE TYPE  !
;	!    3 SIXBIT CHARACTERS    !             !             !
;	!-------------------------------------------------------!
;	!      POINTER TO LAST      !     POINTER TO FIRST      !
;	!    ENTRY IN THIS QUEUE    !    ENTRY IN THIS QUEUE    !
;	!-------------------------------------------------------!
;	!    BASE OF SCHEDULING     ! SIZE OF AN  !# OF LIST PGS!
;	!   AND LINKING ALGORITHM   !    ENTRY    !  LAST TIME  !
;	!-------------------------------------------------------!
;	!   PTR TO FIRST ENTRY      !    PTR TO LAST ENTRY      !
;	!-------------------------------------------------------!
;	!                 SIZE OF EACH ENTRY                    !
;	!=======================================================!

	PHASE	0

.QHTYP:! BLOCK	1		;QUEUE TYPE WORD
	QH.NAM==-1,,0		;3 CHARACTER QUE NAME
	QH.FLG==777B26		;FLAGS
		QH.IPC==1B18	;QUEUE FOR IPCF, ADD IN G$MPS TO SIZE
		QH.INV==1B19	;OBJECT IS INVISIBLE
	QH.TYP==777B35		;QUEUE TYPE
		.QHTQS==0	;INTERNAL TO QUASAR
		.QHTOU==1	;AN OUTPUT QUEUE
		.QHTIP==2	;AN INPUT QUEUE
		.QHTMD==3	;MOUNTABLE DEVICE QUEUE
		.QHFRR==4	;FREE RUNNING DEVICE QUEUE
		.QHTAR==5	;ARCHIVE SYSTEM QUEUE

.QHLNK:! BLOCK	1		;LINK WORD
	QH.PTL==-1,,0		;POINTER TO LAST ENTRY
	QH.PTF==0,,-1		;POINTER TO FIRST ENTRY

.QHPAG:! BLOCK	1		;STORAGE INFORMATION
	QH.SCH==-1,,0		;SCHEDULER ENTRY VECTOR
		SCHLNK==0	;   LINK IN
		SCHSCH==1	;   SCHEDULE
		SCHDEF==2	;   FILL IN DEFAULTS FOR CREATE
		SCHMOD==3	;   PREFORM QUEUE DEPENDENT MODIFY
		SCHRJI==4	;   RELEASE JOB-OBJECT INTERLOCK
		SCHFJB==5	;   FIND A JOB FOR AN OBJECT

	QH.SIZ==777B26		;SIZE OF EACH ENTRY

.QHLIS:! BLOCK	1	;LIST FLAG (LIQxxx)
.QHAFT:! BLOCK	1	;AFTER TIME OF BEST AFTER JOB

QHSIZE:!			;SIZE OF A QUEUE HEADER

	DEPHASE
SUBTTL	QE   --  Queue Entry Definitions

;	!=======================================================!
;	!     LINK TO PREVIOUS      !       LINK TO NEXT        !
;	!  0 IF THIS IS THE FIRST   !  0 IF THIS IS THE FIRST   !
;	!=======================================================!
;	!  CREATION TIME OF ENTRY (INTERNAL DATE/TIME FORMAT)   !
;	!-------------------------------------------------------!
;	!      POINTER TO OBJECT QUEUE ENTRY FOR THIS REQ       !
;	!-------------------------------------------------------!
;	!                  INTERNAL TASK NAME                   !
;	!-------------------------------------------------------!
;	/                                                       /
;	/                REQUESTED OBJECT BLOCK                 /
;	/                                                       /
;	!-------------------------------------------------------!
;	/                                                       /
;	/                 JOB INFORMATION BLOCK                 /
;	/                                                       /
;	!-------------------------------------------------------!
;	!                           !  DEPENDENCY LIST NUMBER   !
;	!-------------------------------------------------------!
;	!                   ENTRANCE PRIORITY                   !
;	!-------------------------------------------------------!
;	!   THE PROTECTION FIELD    !                           !
;	!-------------------------------------------------------!
;	!    DEADLINE PARAMETER (INTERNAL DATE/TIME FORMAT)     !
;	!-------------------------------------------------------!
;	!                                                       !
;	!               REQUEST LIMIT INFORMATION               !
;	!             CONTENTS ARE QUEUE DEPENDENT              !
;	!                        5 WORDS                        !
;	!                                                       !
;	!-------------------------------------------------------!
;	!                       NOTIFY ID                       !
;	!-------------------------------------------------------!
;	!     BATCH JOB NUMBER      !     USER'S JOB NUMBER     !
;	!-------------------------------------------------------!
;	!     DISK PAGE ADDRESS     !                           !
;	!-------------------------------------------------------!
;	
;	!                 -----  TOPS 20  -----                 !
;	!                                                       !
;	!-------------------------------------------------------!
;	!                OWNER (LOGGED IN USER)                 !
;	!                      (10 WORDS)                       !
;	!-------------------------------------------------------!
;	!             CREATOR'S CONNECTED DIRECTORY             !
;	!                      (12 WORDS)                       !
;	!=======================================================!
	PHASE	0

.QELNK:! BLOCK	1		;LINK WORD
	QE.PTP==-1,,0		;POINTER TO PREVIOUS ENTRY
	QE.PTN==0,,-1		;POINTER TO NEXT ENTRY

QEHSIZ:!			;SIZE OF QUEUE-ENTRY-HEADER

.QECRE:! BLOCK	1		;INTERNAL CREATION TIME OF THIS ENTRY
.QEOBJ:! BLOCK	1		;POINTER TO OBJECT SERVICING THIS REQUEST
.QEITN:! BLOCK	1		;INTERNAL TASK NAME
	QE.AVO==770000,,00	;ACCT VALIDATION OBJECT TYPE (-10 ONLY)
	QE.AVI==007777,,-1	;ACCT VALIDATION ITN (-10 ONLY)
.QEROB:! BLOCK	ROBSIZ		;REQUESTED OBJECT BLOCK
.QEJBB:! BLOCK	JIBSIZ		;JOB INFORMATION BLOCK
.QEDIN:! BLOCK	1		;DEPENDENCY INFORMATION
	QE.DLN==0,,-1		;DEPENDENCY LIST NUMBER
.QEIPR:! BLOCK	1		;ENTRANCE PRIORITY FOR THIS ENTRY
.QEPRT:! BLOCK	1		;REQUEST PROTECTION
	QE.PRO==-1,,0		;THE PROTECTION FIELD
.QEDED:! BLOCK	1		;DEADLINE PARAMETER
.QELIM:! BLOCK	EQLMSZ		;LIMITS WORDS
.QENID:! BLOCK	1		;/NOTIFY ID (LOGIN TIME, PID, DIRECTRY NBR)
.QEJBN:! BLOCK	1		;JOB NUMBERS (For /NOTIFY)
	QE.UJN==0,,-1		;USERS JOB NUMBER (ORIGIONAL JOB NUMBER)
	QE.BJN==-1,,0		;BATCH JOB NUMBER
.QESTN:! BLOCK	1		;REMOTE INFORMATION
	QE.DPA==-1,,0		;DISK PAGE ADDRESS
TOPS20 <
.QEOWN:! BLOCK	10		;REQUEST OWNER
.QECON:! BLOCK	12		;CONNECTED DIRECTORY
> ;END TOPS20

QNTSIZ:!			;SIZE OF THE QUEUE ENTRY
	SUBTTL JOB INFORMATION BLOCK (.QEJBB) DESCRIPTION




		.QEJOB==.QEJBB+JIB.JN	;EXTERNAL JOB NAME
		.QESEQ==.QEJBB+JIB.SQ	;EXTERNAL VALUES
		   QE.SEQ==-1,,0	;EXTERNAL SEQUENCE NUMBER
		   QE.ACT==1B21		;REQUEST REQUIRES ACCOUNT VALIDATION
		   QE.IAS==1B22		;REQUEST CONTAINS IN INVALID ACCT STRING
		   QE.NOT==3B24		;JOB REQUESTED /NOTIFY
		      %NOTTY==1		;NOTIFY VIA USERS TTY
		      %notml==2		;NOTIFY USER VIA MAIL
		      %notjb==3		;NOTIFY USERS JOB
		   QE.JBC==1B25		;JOB HAS BEEN CHECKPOINTED
		   QE.HBO==1B26		;JOB HELD BY OPERATOR
		   QE.PRV==1B27		;REQUEST CREATOR WAS PRIVILEGED
		   QE.SPL==1B28		;THIS REQUEST CONTAINS SPOOLED FILES
		   QE.RDE==1B29		;THIS REQUEST DOESN'T EXIST (CLEAN-UP)
		   QE.PRI==77B35	;EXTERNAL PRIORITY
		.QEOID==.QEJBB+JIB.US	;OWNER IDENTIFIER
		.QERID==.QEJBB+JIB.ID	;REQUEST ID.
TOPS10 <
		.QEUSR==.QEJBB+JIB.NM	;USER'S NAME (2 WORDS)
>

	DEPHASE
SUBTTL	OBJ  --  Object Queue

;For each object on the system, known to QUASAR, an entry in the OBJ queue
;	is made.  This queue is used for scheduling and for interfacing with
;	the operator control.

;	!=======================================================!
;	!                   Object type code                    !
;	!-------------------------------------------------------!
;	!               Unit number of this type                !
;	!-------------------------------------------------------!
;	!                  Node name in SIXBIT                  !
;	!-------------------------------------------------------!
;	!              PID which has object setup               !
;	!-------------------------------------------------------!
;	!   	    ITN of request currently on OBJect     	!
;	!-------------------------------------------------------!
;	!SCHEDULER STATE INFORMATION!  QUEUE HEADER FOR OBJECT  !
;	!-------------------------------------------------------!
;	!                   OBJect Timer Word                   !
;	!-------------------------------------------------------!
;	!            OBJect Attributes (DEC defined)            !
;	!-------------------------------------------------------!
;	!         OBJect Attributes (Customer defined)          !
;	!-------------------------------------------------------!
;	\           5 Word Object specific parameter            \
;	\                         area                          \
;	!-------------------------------------------------------!
;	!              CURRENT DEVICE STATUS CODE               !
;	!       (FILLED IN BY QUASAR, UPDATED BY SPOOLER)       !
;	!-------------------------------------------------------!
;	\               Current status, expressed               \
;	\                 in as an ASCIZ string                 \
;	!=======================================================!

;Define a macro which will allow a mapping between an object type
;	and various object-type specific data like the queue in
;	which jobs for that object reside, initial object parameters
;	etc.
;
;Format for each line is:
;	X	obj,que,<p1,p2,p3,p4,p5>
;
;where		obj is the object type specified as the XXX in .OTXXX
;		que is the queue in which jobs reside for this object
;		p1 - p5 are the initial contents of the 5 parameter
;			words when an object entry is created.
;			These are a single macro argument.

DEFINE	MAPOBJ,<
	X	BAT,INP,<<1,,77>,<0,,^D3600>,0,<INPOIP,,0>,<1,,^D512>>
	X	LPT,LPT,<<1,,77>,<1,,^D500>,<FRMNOR>,<FLEACT,,0>,0>
	X	PTP,PTP,<<1,,77>,<1,,^D500>,<FRMNOR>,<FLEACT,,0>,0>
	X	CDP,CDP,<<1,,77>,<1,,^D500>,<FRMNOR>,<FLEACT,,0>,0>
	X	PLT,PLT,<<1,,77>,<1,,^D500>,<FRMNOR>,<FLEACT,,0>,0>
	X	RDR,RDR,<0,0,0,0,0>
	X	BIN,BIN,<0,0,0,0,0>
	X	DBM,DBM,<0,0,0,0,0>

   TOPS20 <
	X	XFR,XFR,<0,0,0,0,0>
	X	RET,RET,<0,0,0,0,0>
	X	NOT,NOT,<0,0,0,0,0>
          > ;END TOPS20

>  ;END DEFINE MAPOBJ

;OBJ definitions are on the following page
	PHASE	QEHSIZ		;APPEND TO QUEUE ENTRY HEADER

OBJTYP:! BLOCK	1			;OBJECT TYPE
OBJUNI:! BLOCK	1			;UNIT NUMBER OF THIS TYPE
OBJNOD:! BLOCK	1			;NODE THAT THIS UNIT IS ON
OBJPID:! BLOCK	1			;PID WHICH HAS THIS OBJ SETUP
OBJITN:! BLOCK	1			;ITN OF CURRENT REQUEST ON OBJECT
OBJSCH:! BLOCK	1			;SCHEDULER STATE INFORMATION
	OBSSTA==1B0			;OBJECT IS STARTED
	OBSSUP==1B1			;OBJECT IS SETUP
	OBSBUS==1B2			;OBJECT IS BUSY
	OBSSIP==1B3			;SETUP IN PROGRESS
	OBSIGN==1B4			;IGNORE THIS FOR A WHILE
	OBSDAA==1B5			;DEVICE (DEC) ATTRIBUTES AVAILABLE
	OBSSEJ==1B6			;SHUTDOWN AT END-OF-JOB
	OBSINV==1B7			;OBJECT IS INVISIBLE
	OBSINT==1B8			;DO AN INTERNAL SHTDWN WHEN QUEUE EMPTYS
	OBSHUT==1B9			;OBJECT IS INTERNALLY SHUTDOWN
	OBSFRR==1B10			;A FREE RUNNING DEVICE.
	OBSSTP==1B11			;STOPPED BY THE OPERATOR
	OBSSPL==1B13			;OBJECT IS SPOOLING TO TAPE
	OBSQUH==0,,-1			;ADDRESS OF QUEUE HEADER FOR OBJECT
OBJTIM:! BLOCK	1			;OBJECT TIMER
OBJDAT:! BLOCK	1			;DEC-DEFINED ATTRIBUTES
OBJCAT:! BLOCK	1			;CUSTOMER-DEFINED ATTRIBUTES
OBJPRM:! BLOCK	OBPRSZ			;DEPENDENT PARAMETERS
OBJSTS:! BLOCK  1			;CURRENT DEVICE STATUS CODE 
					;FILLED IN BY QUASAR, UPDTED BY SPOOLER
OBJST1:! BLOCK	STSSIZ			;CURRENT JOB STATUS IN ASCIZ
					;UPDATED BY THE SPOOLER

OBJSIZ:!				;SIZE OF AN OBJ QUEUE ENTRY


;DEFINITIONS OF WORDS WITHIN THE OBJPRM BLOCK

;COMMON MASKS
	OBPMIN==-1,,0			;MINIMUM VALUE
	OBPMAX==0,,-1			;MAXIMUM VALUE

;OUTPUT PARAMETERS (PRINTERS, PAPERTAPE, CARDPUNCH, PLOTTER)

	.OOPRI==0			;MIN AND MAX EXTERNAL PRIORITY
	.OOLIM==1			;MIN AND MAX OUTPUT LIMITS
	.OOFRM==2			;FORMS TYPE
	.OOFLG==3			;OUTPUT FLAGS
	   .OFLEA==-1,,0		;FORMS LIMIT EXCEEDED ACTION
	.OOTAP==4			;SIXBIT DEVICE NAME FOR SPOOLING TO TAPE
	;CONTINUED FROM THE PREVIOUS PAGE

;BATCH-STREAM PARAMETERS

	.OBPRI==0			;MIN AND MAX EXTERNAL PRIORITY
	.OBTIM==1			;MIN AND MAX RUNTIME LIMITS
	.OBFLG==3			;BATCH STREAM FLAGS
	   .OPRIN==-1,,0		;OPERATOR INTERVENTION FLAG
	       .OPINY==1		;ALLOW OPERATOR INTERVENTION JOBS
	       .OPINN==2		;NO OPERATOR INTERVENTION JOBS
	.OBCOR==4			;MIN AND MAX CORE LIMITS

;Retrieve-stream parameters

	.OBSTM==0			;Time stamp and flag
	.OBTAP==1			;Tape ID
	.OBSSN==2			;Saveset,,tape file #
	  OB.SSN==-1,,0			;Saveset
	  OB.TFN==0,,-1			;Tape file number
;OBJECT ATTRIBUTES (DEC)
;	(RESERVE BIT  0 FOR "PHYSICAL UNIT" SPECIFICATION BY THE USER)

;PRINTERS
	OBDLLC==1B1			;LOWERCASE PRINTER
	OBDLUC==1B2			;UPPERCASE PRINTER


	DEFINE	STATUS,<
	XLIST
		X	<Invalid>,%INVLD,100
		X	<Idle>,%IDLE,0
		X	<Active>,%ACTIV,0
		X	<Stopped>,%STOPD,0
		X	<Not Started>,%NSTRT,0
		X	<Not Available>,%NAVAL,0
		X	<No Ptys>,%NPTYS,.OTBAT
		X	<Offline>,%OFLNE,<.OTLPT,.OTPTP,.OTCDP,.OTPLT,.OTRDR>
		X	<System Full>,%SFULL,.OTBAT
		X	<Shutting Down>,%SHTDN,0
		X	<Aborting>,%CNCLG,0
		X	<Opr Resp Wait>,%OREWT,0
		X	<Aligning Forms>,%ALIGN,.OTLPT
		X	<>,%RESET,0
		X	<Reading>,%READN,.OTRDR
		X	<Requeing>,%REQUE,0
		X	<Shutting Down>,%SHUTD,0
		X	<Opr Output Wait>,%OPRWT,.OTLPT
	LIST
	>  ;END STATUS MACRO


	XXXX==0

	DEFINE X(A,SYM,VAL),<
	   SYM==XXXX
	XXXX==XXXX+1
	>


	;DEFINE THE OBJECT STATUS CODES

		STATUS

	;DEFINE THE HIGHEST STATUS CODE

		%STMAX==XXXX-1
SUBTTL	PSB  --  Processor Status Block

;	!=======================================================!
;	\                                                       \
;	\                The Queue Entry Header                 \
;	\                                                       \
;	!=======================================================!
;	!                   Process ID  (PID)                   !
;	!-------------------------------------------------------!
;	!                     Program Name                      !
;	!-------------------------------------------------------!
;	!  Current number of jobs   !  Maximum number of jobs   !
;	!-------------------------------------------------------!
;	!           Flags           !  Number of OBJect types   !
;	!-------------------------------------------------------!
;	!                                                       !
;	\                 List of object types                  \
;	\                                                       \
;	\                  Maximum of 5 types                   \
;	!                                                       !
;	!=======================================================!


	PHASE	QEHSIZ			;APPEND TO THE QUEUE ENTRY HEADER
PSBPID:! BLOCK	1			;PROGRAM'S PID
PSBNAM:! BLOCK	1			;PROGRAM NAME
PSBLIM:! BLOCK	1			;CURRENT AND MAX NUMBER OF JOBS
	PSLCUR==-1,,0			;CURRENT NUMBER OF JOBS
	PSLMAX==0,,-1			;MAXIMUM NUMBER OF JOBS
PSBFLG:! BLOCK	1			;FLAGS AND NUMBER OF OBJ TYPES
	PSFNOT==0,,-1			;NUMBER OF OBJECT TYPES
PSBOBJ:! BLOCK	OBPRSZ			;LIST OF OBJECTS (UP TO OBPRSZ)

PSBSIZ:!				;SIZE OF A PSB

	DEPHASE
SUBTTL	SPL  --  Spool Queue Definition

;	!=======================================================!
;	/                                                       /
;	/                THE QUEUE ENTRY HEADER                 /
;	/                                                       /
;	!=======================================================!
;	\                                                       \
;	\                REQUESTED OBJECT BLOCK                 \
;	\                                                       \
;	!-------------------------------------------------------!
;	!        JOB NUMBER         !     RETRIEVAL POINTER     !
;	!-------------------------------------------------------!
;	!                      FORMS TYPE                       !
;	!-------------------------------------------------------!
;	!                    AFTER PARAMETER                    !
;	!-------------------------------------------------------!
;	!                      NOTE FIELD                       !
;	!                       (2 WORDS)                       !
;	!-------------------------------------------------------!
;	!                           !      REQUEST LENGTH       !
;	!=======================================================!

	PHASE	QEHSIZ		;APPEND TO THE QUEUE ENTRY HEADER

SPLOID:! BLOCK	1		;OWNER'S ID
SPLROB:! BLOCK	ROBSIZ		;REQUESTED OBJECT BLOCK
SPLJOB:! BLOCK	1		;JOB INFORMATION
	SPYJOB==-1,,0		;THE JOB NUMBER
	SPYDPA==0,,-1		;THE RETRIEVAL POINTER

SPLFRM:! BLOCK	1		;FORMS TYPE
SPLAFT:! BLOCK	1		;AFTER PARAMETER
SPLNOT:! BLOCK	2		;NOTE FIELD
SPLRQZ:! BLOCK	1		;SIZE OF CURRENT REQUEST
	SPYLEN==0,,-1		;THE LENGTH (FROM .MSTYP)

SPLSIZ:!			;SIZE OF THE SPOOL QUEUE ENTRIES

	DEPHASE

;DURING Q$FSPL, THE SPL QUEUE IS SCANNED TO COMPRESS MULTIPLE SPOOL REQUESTS INTO A
;	SINGLE REQUEST.  THE FOLLOWING DECISIONS ARE MADE WITH THE INPUT BEING
;	THE CURRENT SPOOL MESSAGE FROM THE MONITOR AND THAT QUEUE AND STATION TESTS
;	HAVE SUCCEEDED.

;	  INPUT		CURRENT QUEUE	ACTION

;	STN. GENERIC	STN. GENERIC	APPEND
;	REAL DEVICE	STN. GENERIC	APPEND AND CHANGE TO REAL DEVICE
;	LL:/LU:		STN. GENERIC	APPEND AND CHANGE TO LL: OR LU:

;	STN. GENERIC	REAL DEVICE	APPEND
;	REAL DEVICE	REAL DEVICE	APPEND IF DEVICES MATCH
;	LL:/LU:		REAL DEVICE	NEVER APPEND

;	STN. GENERIC	LL:/LU:		APPEND
;	REAL DEVICE	LL:/LU:		NEVER APPEND
;	LL:/LU:		LL:/LU:		APPEND IF BOTH FOR LL: OR FOR LU:
SUBTTL	STR  --  Structure Queue Definition

	PHASE	QEHSIZ			;APPEND TO QUEUE ENTRY HEADER

IFN FTUUOS,<
STRNAM:! BLOCK	2			;STRUCTURE NAME
>  ;END IFN FTUUOS

IFN FTJSYS,<
STRNAM:! BLOCK	^D16			;STRUCTURE NAME (TOPS-20) MAX 79 CHARS
>  ;END IFN FTJSYS

STRSTS:! BLOCK	1			;STRUCTURE STATUS
	STSSSV==1B0			;STRUCTURE STATUS VALID
	STSONL==1B1			;STRUCTURE IS ONLINE

STRSIZ:!				;SIZE OF THE STR QUEUE ENTRY

	DEPHASE
SUBTTL	NETWORK DATA BASE STRUCTURE


;	!=======================================================!
;	/							/
;	/		THE QUEUE ENTRY HEADER			/
;	/							/
;	!-------------------------------------------------------!
;	!		SIXBIT NODE (NETWORK) NAME		!
;	!-------------------------------------------------------!
;	!		   NODE (NETWORK) NUMBER		!
;	!-------------------------------------------------------!
;	!		ONLINE/OFFLINE STATUS			!
;	!-------------------------------------------------------!
;	!                   ROUTE ENTRY NAME                    !
;	!-------------------------------------------------------!
;	\                                                       \
;	\                ASCIZ NETWORK NODE NAME                \
;	\                                                       \
;	!-------------------------------------------------------!
;	!                  CLEAR TO SEND DELAY                  !
;	!-------------------------------------------------------!
;	!                  RECORDS PER MESSAGE                  !
;	!-------------------------------------------------------!
;	!                   BYTES PER MESSAGE                   !
;	!-------------------------------------------------------!
;	!                  SILO WARNING LEVEL                   !
;	!-------------------------------------------------------!
;	!     NODE PORT NUMBER      !     NODE LINE NUMBER      !
;	!-------------------------------------------------------!
;	!         PORT/LINE HANDLE (FOR DN60 FRONT END)         !
;	!=======================================================!

		PHASE	QEHSIZ
TOPS20 <
	NETCOL:!			;-20 COLLATING SEQ BY NAME
>  ;END TOPS20 CONDITIONAL
	
	NETNAM:! BLOCK	1		;SIXBIT NODE NAME

TOPS10 <
	NETCOL:!			;-10 COLLATING SEQ BY NUMBER
>  ;END TOPS10 CONDITIONAL

	NETNBR:! BLOCK	1		;NODE NUMBER

	NETSTS:! BLOCK	1		;FLAG WORD
	   NT.FLG==770000,,0		;NETWORK FLAG BITS
		NETNSV==1B0		;  ONLINE/OFFLINE STATUS BIT IS VALID
		NETONL==1B1		;  ONLINE
		NETADD==1B2		;  THIS NODE ADDED LAST PASS
		NETIBM==1B3		;  NODE IS DN60 DRIVEN
		NETSHT==1B4		;  NETWORK SHUTDOWN IS IN PROGRESS
		NETSGN==1B5		;  NODE REQUIRES SIGNON PROCESSING
	   NT.TYP==7000,,0		;NETWORK TYPE
		DF.DEC==0		;  'DEC' NODE
		DF.378==1		;  3780 NODE
		DF.278==2		;  2780 NODE
		DF.HSP==3		;  HASP NODE
	   NT.MOD==700,,0		;NETWORK MODE
		DF.TRM==1		;  TERMINATION MODE
		DF.EMU==2		;  EMULATION MODE
	   NT.TOU==70,,0		;PROTOCOL TIMEOUT CATAGORY
		ST.PRI==1		;  PRIMARY
		ST.SEC==2		;  SECONDARY
	   NT.DTR==7,,0			;DATA TERMINAL READY
		ST.ON==1		;  ON
		ST.OFF==2		;  OFF

	;CONTINUED ON THE NEXT PAGE
	;CONTINUED FROM THE PREVIOUS PAGE

	   NT.TRA==700000		;TRANSPARENCY
;		ST.ON==1		;  ON
;		ST.OFF==2		;  OFF
	   NT.XTA==77777		;EXTRA BITS

	NETRTE:! BLOCK	1		;ROUTE ENTRY NAME
	NETASC:! BLOCK	3		;ASCIZ NETWORK NODE NAME
	NETCSD:! BLOCK	1		;CLEAR TO SEND DELAY
	NETRPM:! BLOCK	1		;RECORDS PER MESSAGE
	NETBPM:! BLOCK	1		;BYTES PER MESSAGE
	NETSWL:! BLOCK	1		;SILO WARNING LEVEL
	NETPTL:! BLOCK	1		;PORT,,LINE NUMBER
	   NT.PRT==-1,,0		;NODE PORT NUMBER
	   NT.LIN==0,,-1		;NODE LINE NUMBER
	NETIDN:! BLOCK	1		;PORT/LINE HANDLE (FOR DN60 FRONT END)

	NETSIZ:!

		DEPHASE
SUBTTL	CSM  --  Canonical SPOOL Message

;	!=======================================================!
;	!        JOB NUMBER         !  STATION #  !    FLAGS    !
;	!-------------------------------------------------------!
;	!                      OWNER'S ID                       !
;	!-------------------------------------------------------!
;	\                                                       \
;	\                REQUESTED OBJECT BLOCK                 \
;	\                                                       \
;	!-------------------------------------------------------!
;	!              ENTERED (GTJFN'ED) FILENAME              !
;	!-------------------------------------------------------!
;	!                   SIZE OF THE FILE                    !
;	!-------------------------------------------------------!
;	!           FLAGS FOR .FPINF OF INCLUDED FILE           !
;	!-------------------------------------------------------!
;	!                      FORMS TYPE                       !
;	!-------------------------------------------------------!
;	!                     OUTPUT LIMIT                      !
;	!-------------------------------------------------------!
;	!                AFTER PARAMETER FOR JOB                !
;	!-------------------------------------------------------!
;	!                      NOTE FIELD                       !
;	!                       (2 WORDS)                       !
;	!-------------------------------------------------------!
;	!                           !     ADDRESS OF THE FD     !
;	!=======================================================!
;	
;	!                 -----  TOPS 10  -----                 !
;	!                                                       !
;	!-------------------------------------------------------!
;	!                 USER'S NAME IN SIXBIT                 !
;	!                       (2 WORDS)                       !
;	!=======================================================!


	PHASE	0

CSM.JB:! BLOCK	1		;JOB INFORMATION
	CS.JOB==-1,,0		;JOB NUMBER
	CS.LOC==777000		;NODE NUMBER (20-ONLY)
	CS.LOC==777000		;STATION NUMBER.
	CS.FLG==000777		;FLAGS
		CS.DFR==1B27	;DEFERRED MODE SPOOLING

CSM.OI:! BLOCK	1		;OWNER'S ID
CSM.RO:! BLOCK	ROBSIZ		;REQUESTED OBJECT
CSM.EN:! BLOCK	1		;ENTER'ED (GTJFN'ED) FILENAME
CSM.FS:! BLOCK	1		;SIZE OF THE FILE
CSM.FP:! BLOCK	1		;FLAGS FOR .FPINF OF INCLUDED FILE
CSM.FM:! BLOCK	1		;FORMS TYPE
CSM.LM:! BLOCK	1		;OUTPUT LIMIT
CSM.AF:! BLOCK	1		;AFTER PARAMETER FOR JOB
CSM.NT:! BLOCK	2		;NOTE FIELD
CSM.FD:! BLOCK	1		;FILE DESCRIPTOR INFORMATION
	CS.FDA==0,,-1		;ADDRESS OF THE FD TO INCLUDE

IFN FTUUOS,<
CSM.US:! BLOCK	2		;USER NAME (2 WORDS)
>  ;END IFN FTUUOS

CSMSIZ:!			;LENGTH OF THE CANONICAL SPOOL MESSAGE

	DEPHASE
SUBTTL	CLM  --  Canonical LOGOUT Message

;	!=======================================================!
;	!                     FUNCTION CODE                     !
;	!-------------------------------------------------------!
;	!         JOB NUMBER        !       FLAG SETTINGS       !
;	!=======================================================!


	PHASE	0

CLM.FC:! BLOCK	1			;FUNCTION CODE - CONTAINS:
					;	 .IPCSL IF FROM MONITOR
					;        .QIFNC IF INTERNAL
CLM.JB:! BLOCK	1			;JOB INFORMATION
	CL.JOB==-1,,0			;JOB NUMBER
	CL.BAT==1B18			;JOB IS A BATCH JOB
	CL.BQE==0,,-1			;THIS FIELD CONTAINS THE ADDRESS
					; OF THE BATCH JOB REQUEST (.QExxx)
					; IF IT IS AN INTERNAL CALL


CLMSIZ:!				;LENGTH OF THE CANONICAL LOGOUT MESSAGE

	DEPHASE
SUBTTL	The Messages and their respective codes

;THE FOLLOWING PAGES CONTAIN THE FORMAT OF THE VARIOUS MESSAGES WHICH
;	ARE SENT TO OR BY QUASAR TO VARIOUS SYSTEM COMPONENTS.

	   ;EXTERNAL OPERATIONS

		.QOHEL==1	;HELLO - ESTABLISH CONTACT
		.QOREL==2	;RELEASE - FINISHED A REQUEST
		.QOCHE==3	;CHECKPOINT - FAILSOFT A REQUEST
		.QOREQ==4	;REQUEUE - RETURN A REQUEST
		.QONEX==5	;NEXTJOB - REQUEST GIVEN TO A COMPONENT
		.QOABO==6	;ABORT - STOP PROCESSING THAT REQUEST
		.QOCRE==7	;CREATE - MAKE A REQUEST
		.QOLIS==10	;LIST - GET A CROSS SECTION OF THE QUEUES
		.QOMOD==11	;MODIFY - CHANGE THE PARAMETERS OF A REQUEST
		.QOKIL==12	;KILL - REMOVE A REQUEST
		.QOLAN==13	;ANSWER MESSAGE TO LIST REQUEST
		;       14	;FUNCTION 14 OBSOLETE TEXT MSG (.QOOBS)
		.QORCK==15	;CHECKPOINT-REQUEST MESSAGE
		.QODFR==16	;DEFER MESSAGE
		.QOROU==17	;ROUTING CHANGE
		.QOCOU==20	;COUNT MESSAGE
		.QOCAN==21	;COUNT ANSWER MESSAGE
		.QOSUP==22	;SETUP MESSAGE
		.QORSU==23	;RESPONSE-TO-SETUP MESSAGE
		;       24	;FUNCTION 24 OBSOLETE OPR ACTION MSG (.QOOAC)
		.QOHBO==25	;HOLD/RELEASE MESSAGE
		;	26	;MONITOR SPOOL MESSAGE
		;	27	;MONITOR LOGOUT MESSAGE

		.QOMNT==30	;TAPE MOUNT REQUEST (USER TO QUASAR)
		.QOSTU==31	;DEVICE STATUS UPDATE MESSAGE
		.QOMTR==32	;TAPE MOUNT RELEASE MSG (SAME AS .QOREL)
		.QOMTC==33	;TAPE MOUNT CHKPNT MSG (SAME AS .QOCHE)
		.QOMTA==34	;TAPE MOUNT ABORT MSG (QUASAR TO MTCON)
		.QOMAT==35	;TAPE MOUNT ATTRIBUTES REQUEST
		.QONWA==36	;NODE-WENT-AWAY NOTIFICATION MESSAGE
		.QOCQE==37	;CREATE QUEUE ENTRY (SHORT CREATE MSG)
		.QOREC==40	;TAPE RECOGNIZE MESSAGE (QUASAR TO TAPE LABELER)
		.QOTST==41	;TAPE STATUS MESSAGE (TAPE LABELLER TO QUASAR)
		.QOUNL==42	;TAPE UNLOAD MESSAGE (QUASAR TO TAPE LABELLER)
		.QOVMN==43	;TAPE VOLUME IN USE (REASSIGNED)
				;	(QUASAR TO TAPE LABELLER)
		.QOVDM==44	;TAPE VOLUME DEASSIGNED (QUASAR TO TAPE LAB)
		.QOVSR==45	;VOLUME SWITCH REQUEST (TAPE LAB TO QUASAR)
		.QOVSD==46	;VOLUME SWITCH DIRECTIVE (QUASAR TO TAPE LAB)
		.QOREW==47	;TAPE REWIND MESSAGE (QUASAR 2 TAPE LABELER)


	   ;INTERNAL OPERATIONS

		.QIFNC==1B18	;IF BIT 18 IS SET, THE CALL IS INTERNAL
				; AND THE REQUEST MAY BE INTERPRETED
				; DIFFERENTLY THAN EXTERNAL CALLS
		.QIRET==1B19	;If bit 18 is set, this is a
				;monitor archive request, so
				;dont bomb it if queue entry
				;is disabled.
SUBTTL	The HELLO Message -- Function 1

;	!=======================================================!
;	\                                                       \
;	\                  The Message Header                   \
;	\                                                       \
;	!=======================================================!
;	!                     Program Name                      !
;	!-------------------------------------------------------!
;	!  QUASAR Internal Version  !           Flags           !
;	!-------------------------------------------------------!
;	!  Number of OBJect Types   !  Max no. concurrent jobs  !
;	!-------------------------------------------------------!
;	!                                                       !
;	\                 List of object types                  \
;	\                                                       \
;	\           From 1 to 5 object types allowed            \
;	!                                                       !
;	!=======================================================!

	PHASE	MSHSIZ			;APPEND TO THE MESSAGE HEADER

HEL.NM:! BLOCK	1			;PROGRAM NAME
HEL.FL:! BLOCK	1			;INTERNAL VERSION AND FLAGS
	HEFVER==-1,,0			;INTERNAL VERSION NUMBER (%%.QSR)
	HEFFLG==0,,-1			;MASK FOR FLAGS
	HEFBYE==1B18			;PROCESSOR SAYING "GOOD BYE"
HEL.NO:! BLOCK	1			;NUMBER OF OBJ TYPES AND MAX NO JOBS
	HENNOT==-1,,0			;NUMBER OF OBJECT TYPES
	HENMAX==0,,-1			;MAXIMUM NUMBER OF JOBS
HEL.OB:! BLOCK	OBPRSZ			;LIST OF OBJECTS (UP TO OBPRSZ)

HEL.SZ:!				;SIZE OF THE HELLO MESSAGE

	DEPHASE
SUBTTL The RELEASE Message -- Function 2

;	!=======================================================!
;	/                                                       /
;	/                THE MESSAGE HEADER                     /
;	/                                                       /
;	!=======================================================!
;	!                  INTERNAL TASK NAME                   !
;	!=======================================================!

; EXTRA INFORMATION IS RETURNED BY BATCON DURING ITS RELEASE MESSAGE

;	!=======================================================!
;	!       FLAG SETTINGS       !      THE JOB NUMBER       !
;	!-------------------------------------------------------!
;	/                                                       /
;	/       STANDARD FD AREA DESCRIBING THE LOG FILE        /
;	/  THE LENGTH IS DERIVED FROM THE RELEASE MESSAGE SIZE  /
;	/                                                       /
;	!=======================================================!

	PHASE	MSHSIZ

REL.IT:! BLOCK	1		;INTERNAL TASK NAME

REL.SZ:!			;SIZE OF THE RELEASE MESSAGE

REL.BJ:! BLOCK	1		;BATCH JOB INFORMATION
	RL.DLG==1B0		;DELETE THE LOG FILE AFTER PRINTING
	RL.SPL==1B1		;LOG FILE IS SPOOLED
	RL.JOB==0,,-1		;THE JOB NUMBER

REL.FD:! BLOCK	FDXSIZ		;RESERVE SPACE FOR THE MAXIMUM FD RETURNED

REL.BL:!			;MAXIMUM LENGTH OF A BATCON RELEASE

	DEPHASE
SUBTTL	The CHECKPOINT and REQUEUE messages -- Functions 3 and 4

;	!=======================================================!
;	/                                                       /
;	/                  THE MESSAGE HEADER                   /
;	/                                                       /
;	!=======================================================!
;	!                  INTERNAL TASK NAME                   !
;	!-------------------------------------------------------!
;	!                                                       !
;	/            CHECKPOINT/REQUEUE INFORMATION             /
;	/                                                       /
;	/                       (5 WORDS)                       /
;	!                                                       !
;	!-------------------------------------------------------!
;	!                  AFTER TIMER (REQ)                    !
;	!=======================================================!

	PHASE	MSHSIZ

REQ.IT:! BLOCK	1		;INTERNAL TASK NAME
REQ.FL:! BLOCK	1		;REQUEUE FLAGS
	RQ.HBO==1B0		;HOLD BY OPR
	RQ.RLC==1B1		;RESTART AT LAST CHECKPOINT
				;I.E. DONT UPDATE CHECKPOINT INFO
REQ.IN:! BLOCK	EQCKSZ		;CHECKPOINTING INFORMATION

REQ.SZ:!

	DEPHASE

	PHASE	MSHSIZ

CHE.IT:! BLOCK	1		;INTERNAL TASK NAME
CHE.FL:! BLOCK	1		;FLAG WORD
	CH.FCH==1B0		;DO A CHECKPOINT
	CH.FST==1B1		;UPDATE STATUS
	CH.JBN==0,,-1		;BATCH JOB NUMBER

CHE.MS:!			;MINIMUM SIZE OF CHECKPOINT MESSAGE

CHE.IN:! BLOCK	EQCKSZ		;CHECKPOINT INFORMATION
CHE.ST:! BLOCK	STSSIZ		;SPOOLER STATUS

CHE.SZ:!

	DEPHASE
;Definition of the request limit words for each object type

DEFINE DEFLIM(NAME,WORD,SIZE,POS),<
	RADIX 5+5
	IF1,<IFDEF L.'NAME,<PRINTX Mult. defined limit parameter NAME>>
	IFL <36-SIZE>,<PRINTX Illegal size for limit NAME>
	IFL <35-POS>,<PRINTX Illegal position for limit NAME>
	IFLE <EQLMSZ-WORD>,<PRINTX Illegal word for limit NAME>
	L.'NAME==<BYTE (18) WORD (9) SIZE,POS>
	RADIX 4+4
>  ;END DEFINE DEFLIM

;Batch job parameters
	DEFLIM	UNIQ,0,2,1		;/UNIQUE
	DEFLIM	REST,0,2,3		;/RESTART
	DEFLIM	OINT,0,2,5		;/OPRINT (OPR INTERVENTION)
	DEFLIM	OUTP,0,3,8		;/OUTPUT
	DEFLIM	DEPN,0,18,35		;/DEPENDENCY
	DEFLIM	CORE,1,18,17		;/CORE
	DEFLIM	TIME,1,18,35		;/TIME
	DEFLIM	SLPT,2,18,17		;SPOOLED LPT LIMIT
	DEFLIM	SCDP,2,18,35		;SPOOLED CDP LIMIT
	DEFLIM	SPTP,3,18,17		;SPOOLED PTP LIMIT
	DEFLIM	SPLT,3,18,35		;SPOOLED PLT LIMIT
	DEFLIM	ONOD,4,36,35		;BATCH OUTPUT DESTINATION NODE
	DEFLIM	BLOG,5,2,1		;/BATLOG

;Output job parameters
	DEFLIM	FORM,0,36,35		;FORMS
	DEFLIM	NBLK,1,18,17		;NUMBER OF BLOCKS
	DEFLIM	OLIM,1,18,35		;OUTPUT LIMIT
	DEFLIM	NOT1,2,36,35		;FIRST HALF OF NOTE
	DEFLIM	NOT2,3,36,35		;SECOND HALF OF NOTE
	DEFLIM	FLEA,4,2,1		;FORMS-LIMIT-EXCEEDED ACTION (SET BY OPR)

;Batch input parameters
	DEFLIM	CJOB,1,18,17		;NUMBER OF JOBS
	DEFLIM	CTIM,2,36,35		;START TIME
	DEFLIM	CNOD,3,36,35		;NODE AT WHICH READER IS LOCATED

TOPS20 <
;Archive tape parameters
	DEFLIM TDTD,0,36,35		;DUMPER timestamp
	DEFLIM TUFT,0,1,0		;Use 1st tape rather than 2nd if on
	DEFLIM TDAT,0,35,35		;Actual time stamp
	DEFLIM TID1,1,36,35		;Tape 1 ID
	DEFLIM TTN1,2,36,35		;Saveset and tape file #
	DEFLIM TTS1,2,18,17		; Saveset 1
	DEFLIM TTF1,2,18,35		;Tape file # 1
	DEFLIM TID2,3,36,35		;Tape 2 ID
	DEFLIM TTN2,4,36,35		;Saveset and tape file # 2
	DEFLIM TTS2,4,18,17		;Saveset 2
	DEFLIM TTF2,4,18,35		;Tape file # 2
> ;END TOPS20 CONDITIONAL
DEFINE GETLIM(AC,BLOCK,NAME),<
	IFNDEF L.'NAME,<PRINTX Undefined limit parameter NAME>
	..Z==BLOCK
	..O==<L.'NAME&777777000000>_-^D18
	..Z==..Z+..O
	..S==<L.'NAME&777000>_-^D9
	..P==<L.'NAME&777>
	..P==^D35-..P
	..Z==..Z+<..S>B11+<..P>B5
	LDB	AC,[EXP ..Z]
>  ;END DEFINE GETLIM

DEFINE STOLIM(AC,BLOCK,NAME),<
	IFNDEF L.'NAME,<PRINTX Undefined limit parameter NAME>
	..Z==BLOCK
	..O==<L.'NAME&777777000000>_-^D18
	..Z==..Z+..O
	..S==<L.'NAME&777000>_-^D9
	..P==<L.'NAME&777>
	..P==^D35-..P
	..Z==..Z+<..S>B11+<..P>B5
	DPB	AC,[EXP ..Z]
>  ;END DEFINE STOLIM
SUBTTL The NEXTJOB and CREATE Messages -- Functions 5 and 7


; The NEXTJOB Message, Function 5, is  the  message  which  instructs  a
; known  component to process a job.  The CREATE Message, Function 7, is
; sent to QUASAR by an unknown component as a request to create a job in
; one of the external queues.  Both of these messages are in the form of
; the External Queue Entry (EQ).
; 
; The External Queue Entry (EQ) consists of a header section followed by
; a list of file-specifications.
; 
; The header section has three (3) parts:
; 
;      1.  The operating system independent header which is required and
;          is the same on both operating systems.
; 
;      2.  The  operating  system  dependent  header  which  immediately
;          follows  the  operating  system  independent  header.   It is
;          required and is different for each operating system.
; 
;     The above parts comprise the minimum header size EQHSIZ.
; 
; 
;      3.  The operating system dependent optional parameters which when
;          present  immediately  follow  the  operating system dependent
;          part of the header.
; 
;
; The length of the entire header for a given request is stored  in  the
; header in .EQLEN<EQ.LOH>.
; 
; Following  the  header  sections  is   a   list   of   one   or   more
; file-specifications.  Each file-spec consists of a File-Parameter area
; (FP) followed by the standard File Descriptor area (FD).
SUBTTL	EQ   --  The External Queue Entry

;	!=======================================================!
;	\                                                       \
;	\                  THE MESSAGE HEADER                   \
;	\                                                       \
;	!=======================================================!
;	!               INTERNAL TASK NAME (ITN)                !
;	!-------------------------------------------------------!
;	! INTERNAL REQUEST VERSION  !     LENGTH OF HEADER      !
;	!-------------------------------------------------------!
;	\                                                       \
;	\                REQUESTED OBJECT BLOCK                 \
;	\                                                       \
;	!-------------------------------------------------------!
;	\                                                       \
;	\                 JOB INFORMATION BLOCK                 \
;	\                                                       \
;	!-------------------------------------------------------!
;	!  REQUEST PROTECTION CODE  !NUMBER OF FILES IN REQUEST !
;	!-------------------------------------------------------!
;	!                    SPARE EQ FIELD                     !
;	!-------------------------------------------------------!
;	!      AFTER PARAMETER (INTERNAL DATE/TIME FORMAT)      !
;	!-------------------------------------------------------!
;	!       DEADLINE TIME (INTERNAL DATE/TIME FORMAT)       !
;	!-------------------------------------------------------!
;	!                                                       !
;	\               REQUEST LIMIT INFORMATION               \
;	\             CONTENTS ARE QUEUE DEPENDENT              \
;	\                        5 WORDS                        \
;	!                                                       !
;	!-------------------------------------------------------!
;	!                                                       !
;	\            REQUEST CHECKPOINT INFORMATION             \
;	\            MAINTAINED BY KNOWN COMPONENTS             \
;	\                     EQCKSZ WORDS                      \
;	!                                                       !
;	!-------------------------------------------------------!
;	!                                                       !
;	\                    ACCOUNT STRING                     \
;	\                                                       \
;	\                        8 WORDS                        \
;	!                                                       !
;	!-------------------------------------------------------!
;	!                                                       !
;	!         THE LAST FEW WORDS OF THE "EQ" HEADER         !
;	!       ARE OPERATING SYSTEM DEPENDENT AS FOLLOWS       !
;	
;	
;	!                 -----  TOPS 10  -----                 !
;	!                                                       !
;	!-------------------------------------------------------!
;	!                  USER NAME IN SIXBIT                  !
;	!                       (2 WORDS)                       !
;	!=======================================================!
;	!                                                       !
;	\                  PATH SPECIFICATION                   \
;	\                      (OPTIONAL)                       \
;	\                       SIX WORDS                       \
;	!                                                       !
;	!=======================================================!
;	
;	!                 -----  TOPS 20  -----                 !
;	!                                                       !
;	!-------------------------------------------------------!
;	!                                                       !
;	\              REQUEST OWNER SPECIFICATION              \
;	\                                                       \
;	\                      (10 WORDS)                       \
;	!                                                       !
;	!-------------------------------------------------------!
;	!                                                       !
;	\        CONNECTED DIRECTORY OF REQUEST CREATOR         \
;	\                                                       \
;	\                      (12 WORDS)                       \
;	!                                                       !
;	!=======================================================!
;	!               SPOOLED INPUT SET HANDLE                !
;	!=======================================================!
	PHASE	MSHSIZ

.EQITN:! BLOCK	1		;INTERNAL TASK NAME
.EQLEN:! BLOCK	1		;LENGTH WORD
	EQ.VRS==-1,,0		;VERSION NUMBER OF REQUEST (%%.QSR)
	EQ.LOH==0,,-1		;LENGTH OF THE HEADER ( e.g. EQHSIZ)

.EQROB:! BLOCK	ROBSIZ		;REQUESTED OBJECT BLOCK
.EQJBB:! BLOCK	JIBSIZ		;JOB INFORMATION BLOCK
.EQSPC:! BLOCK	1		;FILE SPECIFICATION WORD
	EQ.PRO==-1,,0		;REQUEST PROTECTION
	EQ.NUM==0,,-1		;NUMBER OF FILES IN THE REQUEST

.EQSPR:! BLOCK	1		;SPARE EQ FIELD
.EQAFT:! BLOCK	1		;AFTER PARAMETER (INTERNAL FORMAT)
.EQDED:! BLOCK	1		;DEADLINE TIME (INTERNAL FORMAT)
.EQLIM:! BLOCK	EQLMSZ		;NOTE THAT EQLMSZ IS DEFINED IN 
				;THE OVERALL STRUCTURE DEFINITION
.EQCHK:! BLOCK	EQCKSZ		;CHECKPOINT/REQUEUE INFORMATION

.EQACT:! BLOCK	10		;ACCOUNT STRING

EQISIZ:!

;END OF OPERATING SYSTEM INDEPENDENT HEADER  -  MORE OF CREATE MESSAGE FOLLOWS

	;THIS IS THE JOB INFORMATION BLOCK STRUCTURE DESCRIPTION

	.EQJOB==.EQJBB+JIB.JN	;JOB NAME (SIXBIT)
	.EQSEQ==.EQJBB+JIB.SQ	;EXTERNAL VALUES
	    EQ.SEQ==-1,,0	;EXTERNAL SEQUENCE NUMBER
	    EQ.ACT==1B21	;REQUEST REQUIRES ACCOUNT VALIDATION
	    EQ.IAS==1B22	;REQUEST CONTAINS AN INVALID ACCT STRING
	    EQ.NOT==3B24	;JOB REQUESTED /NOTIFY
	    EQ.JBC==1B25	;JOB HAS BEEN CHECKPOINTED
	    EQ.HBO==1B26	;JOB HELD BY OPERATOR
	    EQ.PRV==1B27	;REQUEST CREATOR WAS PRIVILEGED
	    EQ.SPL==1B28	;REQUEST CONTAINS SPOOLED FILES
	    EQ.RDE==1B29	;THIS REQUEST DOESN'T EXIST (CLEAN-UP)
	    EQ.PRI==77B35	;EXTERNAL PRIORITY
	.EQOID==.EQJBB+JIB.US	;-10(PPN), -20(USER NUMBER)
	.EQRID==.EQJBB+JIB.ID	;REQUEST ID
TOPS10 <
	.EQOWN==.EQJBB+JIB.NM	;TOPS-10 USER NAME IN SIXBIT (2 WORDS)
>
;BEGINNING OF OPERATING SYSTEM DEPENDENT HEADER


TOPS20 <
.EQOWN:! BLOCK	EQNMSZ		;EXTERNAL OWNER SPECIFICATION
.EQCON:! BLOCK	12		;CONNECTED DIRECTORY
>  ;END TOPS20 CONDITIONAL


;END OF OPERATING SYSTEM DEPENDENT HEADER


;BEGINNING OF OPERATING SYSTEM DEPENDENT OPTIONAL PARAMETERS

TOPS10 <			;MAKE ROOM FOR THE INPUT QUEUE PATH SPEC
.EQPAT:! BLOCK	6		;PATH
.EQPSZ:!			;SIZE OF HEADER WITH PATH
> ;END TOPS10 CONDITIONAL

TOPS20 <
.EQSIS:! BLOCK	1		;HANDLE FOR SPOOLED INPUT SET
> ;END TOPS20 CONDITIONAL

EQHSIZ:!			;TO DEFINE THE EQ HEADER SIZE


EQXSIZ:!			;MAXIMUM "DEFINED" SIZE OF AN EQ
				;THIS MAXIMUM SHOULD NOT BE ENFORCED SINCE
				; VARIOUS USER APPLICATIONS MAY PASS MORE

	DEPHASE
;	!=======================================================!
;	! LENGTH OF FILE-PARAM AREA !				!
;	!-------------------------------------------------------!
;	!FILE FMT !PAPR FMT!SPACING !    FLAGS    !   COPIES    !
;	!-------------------------------------------------------!
;	!         STARTING INFORMATION (CUSP DEPENDENT)         !
;	!-------------------------------------------------------!
;	!                    /REPORT WORD 1                     !
;	!-------------------------------------------------------!
;	!                    /REPORT WORD 2                     !
;	!-------------------------------------------------------!
;	!RCRD FMT!                                ! RECORD LGTH !
;	!-------------------------------------------------------!
;	!                     RECORD COUNT                      !
;	!=======================================================!

	PHASE	0

.FPLEN:! BLOCK	1		;SIZE WORD
	FP.LEN==-1,,0		;SIZE OF THE FP

	PHASE	1		;OUTPUT QUEUES

.FPINF:! BLOCK	1		;FILE PARAMETER INFORMATION
	FP.FFF==77B5		;FILE FORMAT
		.FPFAS==1	;ASCII
		.FPFFO==2	;FORTRAN
		.FPFCO==3	;COBOL
		.FPFAI==4	;AUGMENTED IMAGE (FOR BIN QUEUE)
		.FPFSA==5	;STREAM ASCII (FOR BIN QUEUE)
		.FPF11==6	;ELEVEN
		.FPFIM==7	;IMAGE (FOR XFR QUEUE)
		.FPF8B==10	;8 BIT ASCII FILE
		.FPMAX==.FPF8B	;MAX FP VALUE DEFINED

	FP.FPF==77B11		;PAPER FORMAT (SEE THE NEXT PAGE)
	FP.FSP==77B17		;SPACING CODE
	FP.DEL==1B18		;ON = DELETE THIS FILE
	FP.FLG==1B19		;THIS IS THE LOG FILE
	FP.NFH==1B20		;NO FILE HEADERS
	FP.SPL==1B21		;THIS IS A SPOOLED FILE
	FP.PCR==1B22		;SPOOLED CARD READER FILE
	FP.XXX==17B26		;EXTRA FLAG BITS
	FP.FCY==777B35		;COPY COUNT

.FPFST:! BLOCK	1		;STARTING POINT INFORMATION
.FPFR1:! BLOCK	1		;/REPORT WORD 1
.FPFR2:! BLOCK	1		;/REPORT WORD 2

FPMSIZ:!			;MINUMUM FP AREA SIZE

FPXSIZ:!			;MAXIMUM FP AREA SIZE

	PHASE	1		;BIN QUEUE

.FPINF:! BLOCK	1		;FP INFORMATION (SEE NEXT PAGE)
	FP.RCF==77B5		;RECORD FORMAT
	FP.RCL==777B35		;RECORD LENGTH (FOR FIXED FORMAT)
.FPRCD:! BLOCK	1		;RECORD COUNT

	DEPHASE
;PAPER FORMATS FOR LPT QUEUE (/PRINT)
	%FPLAR==1		;ARROW FORMAT
	%FPLAS==2		;ASCII FORMAT
	%FPLOC==3		;OCTAL FORMAT
	%FPLSU==4		;SUPPRESS FORMAT


;PAPER FORMATS FOR PTP QUEUE (/TAPE)
	%FPTAS==1		;ASCII FORMAT
	%FPTIM==2		;IMAGE FORMAT
	%FPTIB==3		;IMAGE BINARY FORMAT
	%FPTBI==4		;BINARY FORMAT


;PAPER FORMATS FOR CDP QUEUE (/PUNCH)
	%FPCAS==1		;ASCII FORMAT
	%FPCBC==2		;026 (BCD) FORMAT
	%FPCBI==3		;BINARY FORMAT
	%FPCIM==5		;IMAGE FORMAT


;PAPER FORMAT FOR PLT QUEUE  (/PLOT)
	%FPPIM==1		;IMAGE FORMAT
	%FPPAS==2		;ASCII FORMAT
	%FPPBI==3		;BINARY FORMAT

;VALUES FOR .EQLM1<EQ.OUT> (/OUTPUT FIELD)
	%EQONL==1		;NO LOG
	%EQOLG==2		;LOG FILE ALWAYS
	%EQOLE==3		;LOG FILE ON ERROR ONLY

;VALUES FOR .EQLM1<EQ.UNI> (/UNIQUE FIELD)
	%EQUNO==1		;/UNIQUE:NO
	%EQUYE==2		;/UNIQUE:YES

;VALUES FOR .EQLM1<EQ.RST> (/RESTART FIELD)
	%EQRNO==1		;/RESTART:NO
	%EQRYE==2		;/RESTART:YES

;VALUES FOR .EQLIM WORD 6 (BATCH ONLY)  (/BATLOG: FIELD)
	%BAPND==1		;APPEND OUTPUT LOG
	%BSCDE==2		;SUPERSEDE OUTPUT LOG
	%BSPOL==3		;SPOOL OUTPUT LOG

	;CONTINUED ON THE NEXT PAGE
	;CONTINUED FROM THE PREVIOUS PAGE


;DEFINITIONS FOR XFR QUE FP

	FP.RFM==FP.FPF		;RECORD FORMAT INSTEAD OF PAPER FORMAT
	FP.MRS==FP.FCY		;MAXIMUM RECORD SIZE INSTEAD OF COPIES

    ;VALUES FOR RECORD FORMAT (FP.RFM)

	%FPXFI==1		;FIXED LENGTH RECORDS
	%FPXVA==2		;VARIABLE LENGTH RECORDS

;VALUE FOR FILE RETREIVAL .EQLM1<EQ.UFT> 

	%EQUFT==1B0		;USE FIRST TAPE NOT SECOND IF LIT
	SUBTTL The ABORT Message -- Function 6

;	!=======================================================!
;	/                                                       /
;	/                  THE MESSAGE HEADER                   /
;	/                                                       /
;	!=======================================================!
;	!                  INTERNAL TASK NAME                   !
;	!-------------------------------------------------------!
;	!                      OBJECT TYPE                      !
;	!-------------------------------------------------------!
;	!                      UNIT NUMBER                      !
;	!-------------------------------------------------------!
;	!                         NODE                          !
;	!-------------------------------------------------------!
;	!                      REASON CODE                      !
;	!-------------------------------------------------------!
;	!          ID OF PERSON REQUESTING THE CANCEL           !
;	!=======================================================!

	PHASE	MSHSIZ

ABO.IT:! BLOCK	1		;INTERNAL TASK NAME
ABO.TY:! BLOCK	1		;OBJECT TYPE
ABO.UN:! BLOCK	1		;UNIT NUMBER
ABO.NO:! BLOCK	1		;NODE
ABO.CD:! BLOCK	1		;CODE INDICATING CAUSE OF MESSAGE
	ABOUSR==1		; BY USER REQUEST
ABO.ID:! BLOCK	1		;ID OF PERSON REQUESTING THE KILL

ABO.SZ:!			;SIZE OF THE ABORT MESSAGE

	DEPHASE
SUBTTL	The LIST Message -- Function 10

;	!=======================================================!
;	/                                                       /
;	/                  THE MESSAGE HEADER                   /
;	/                                                       /
;	!=======================================================!
;	!		   	FLAG WORD			!
;	!-------------------------------------------------------!
;	!		      ARGUMENT COUNT			!
;	!=======================================================!

;			ARGUMENT DATA BLOCK

;	!-------------------------------------------------------!
;	! LENGTH OF ARGUMENT BLOCK  !     TYPE OF ARGUMENT	!
;	!-------------------------------------------------------!
;	\							\
;	\		   DATA FOR THE ARGUMENT		\
;	\							\
;	!=======================================================!

	;THE FLAG WORD (.OFLAG) CAN HAVE THE FOLLOWING BITS LIT:

		LS.FST==1B1	;YOU WANT A QUICK QUEUES LISTING.
		LS.ALL==1B2	;YOU WANT TO SEE EVERYTHING !!!


	;THE LIST QUEUES MESSAGE CONTAINS 2 BLOCKS.

		.LSQUE==0	;THE QUEUES YOU WANT TO LIST.
		.LSUSR==1	;THE USER ID FOR THE QUEUE ENTRYS YOU WANT.
		; .ORNOD	;THE NODE WHOSE QUEUE ENTRIES YOU WANT

	;THE .LSQUE BLOCK AND ITS POSSIBLE VALUES IS DEFINED BELOW.

		LIQBAT==1B0	;LIST THE BATCH QUEUE
		LIQLPT==1B1	;LIST THE PRINTER QUEUE
		LIQCDP==1B2	;LIST THE CARD-PUNCH QUEUE
		LIQPTP==1B3	;LIST THE PAPER-TAPE PUNCH QUEUE
		LIQPLT==1B4	;LIST THE PLOTTER QUEUE
		LIQMNT==1B6	;LIST THE TAPE MOUNT QUEUE
		LIQRET==1B7	;LIST THE RETRIEVAL QUEUE

		LIQOUT==LIQLPT+LIQCDP+LIQPTP+LIQPLT ;LIST ALL OUTPUT QUEUES.

		LIQALL==LIQOUT+LIQBAT+LIQRET+LIQMNT  ;LIST ALL THE QUEUES.

	;CONTINUED ON THE NEXT PAGE
	;CONTINUED FROM THE PREVIOUS PAGE


;	!=======================================================!
;	!		2	!		.LSQUE		!
;	!-------------------------------------------------------!
;	!	THE QUEUE(S) YOU WANT TO LIST			!
;	!=======================================================!

	;THE .LSUSR BLOCK IS DEFINED BELOW.

;	!=======================================================!
;	!		2	!		.LSUSR		!
;	!-------------------------------------------------------!
;	!	THE USER ID (PPN ON THE -10) OF THE		!
;	!		QUEUE ENTRYS YOU WANT			!
;	!=======================================================!

	;THE .ORNOD BLOCK IS DEFINED BELOW

;	!=======================================================!
;	!		2	!		.ORNOD		!
;	!-------------------------------------------------------!
;	!	    SIXBIT NODE NAME or OCTAL NODE #		!
;	!=======================================================!
	SUBTTL	The MODIFY Message -- Function 11

;	!=======================================================!
;	/                                                       /
;	/                  THE MESSAGE HEADER                   /
;	/                                                       /
;	!=======================================================!
;	!                      QUEUE NAME                       !
;	!-------------------------------------------------------!
;	!                                                       !
;	\            REQUEST DESCRIPTOR BLOCK (RDB)             \
;	\                                                       \
;	\              TO DESCRIBE MODIFY REQUEST               \
;	!                                                       !
;	!-------------------------------------------------------!

; THE FOLLOWING BLOCK IS DUPLICATED FOR EACH "GROUP" TO BE MODIFIED
; THE LENGTH OF THE BLOCK IS DEPENDENT ON THE GROUP.
;  IF AN ELEMENT IS NOT TO BE CHANGED, SPECIFY -1 AS THE VALUE.

; ELEMENTS ARE POSITIONAL WITHIN A GROUP AND NO ENDING INDICATION IS NECESSARY
; AS THE VARIOUS LENGTH FIELDS DETERMINE THE NEXT OR END OF THE MESSAGE

; FOR DESCRIPTIONS OF THE GROUP ELEMENTS AND POSITIONS THE READER IS DIRECTED TO:
;	QSRQUE - MAJMOD FOR MAJOR REQUEST GROUP 0
;	QSRSCH - MODIFIERS FOR QUEUE DEPENDENT GROUP 1

;	!=======================================================!
;	!       GROUP NUMBER        !        WORD COUNT         !
;	!=======================================================!
	PHASE	MSHSIZ

MOD.OT:! BLOCK	1		;OBJECT TYPE

MOD.RQ:! BLOCK	RDBSIZ		;REQUEST DESCRIPTOR BLOCK

MOD.SZ:!			;MINIMUM SIZE OF A MODIFY REQUEST
MOD.FG:!			;FIRST GROUP WORD IN MODIFY REQUEST

	PHASE	0		;RELATIVE OFFSET

MOD.GN:! BLOCK	1		;GROUP WORD
	MODGPN==-1,,0		;THE GROUP NUMBER
		.GPMAJ==0	;MAJOR PARAMETERS (AFTER, PRIORITY, etc...)
		.GPQUE==1	;QUEUE DEPENDENT (FORMS, TIME LIMIT, etc...)

	MODGLN==0,,-1		;THE NUMBER OF ELEMENTS (INCLUDING THIS WORD)
MOD.GE:!			;THE FIRST GROUP ELEMENT TO BE MODIFIED
	DEPHASE


;IF MODIFYING /DEPENDENCY COUNT FOR INPUT QUEUES, 3 FORMS ARE RECOGNIZED

	.MODAB==0	;NEW VALUE IS ABSOLUTE CHANGE
	.MODPL==1	;NEW VALUE IS ADDITIVE
	.MODMI==2	;NEW VALUE IS SUBTRACTIVE
SUBTTL	The KILL Message -- Function 12

;	!=======================================================!
;	/                                                       /
;	/                  THE MESSAGE HEADER                   /
;	/                                                       /
;	!=======================================================!
;	!                      QUEUE NAME                       !
;	!-------------------------------------------------------!
;	!                                                       !
;	\            REQUEST DESCRIPTOR BLOCK (RDB)             \
;	\                                                       \
;	\               TO DESCRIBE KILL REQUEST                \
;	!                                                       !
;	!-------------------------------------------------------!

	PHASE	MSHSIZ

KIL.OT:! BLOCK	1		;OBJECT TYPE

KIL.RQ:! BLOCK	RDBSIZ		;REQUEST DESCRIPTOR BLOCK

KIL.SZ:!			;SIZE OF KILL ENTRY
	DEPHASE
	SUBTTL	THE LIST ANSWER MESSAGE.

	;THE LIST ANSWER MESSAGE IS CONSTRUCTED AS FOLLOWS:

;	!=======================================================!
;	\							\
;	\		THE MESSAGE HEADER			\
;	\							\
;	!=======================================================!
;	!		   FLAG WORD				!
;	!-------------------------------------------------------!
;	!		ARGUMENT COUNT				!
;	!=======================================================!
;	! HEADER LENGTH		!  HEADER BLOCK TYPE (.WTTYP)	!
;	!-------------------------------------------------------!
;	\							\
;	\		THE MESSAGE HEADER			\
;	\							\
;	!-------------------------------------------------------!
;	! ANSWER LENGTH		!  ANSWER BLOCK TYPE (.WTTXT)	!
;	!-------------------------------------------------------!
;	\							\
;	\	THE QUEUES LISTING IN ASCIZ			\
;	\							\
;	!=======================================================!


	;THE FLAG WORD CAN CONTAIN THE FOLLOWING BITS:

		WT.MOR==WT.MOR		;MORE DISPLAY PAGES COMMING.
					;THIS IS ORIGIONALLY DEFINED IN ORNMAC.
SUBTTL	The REQUEST FOR CHECKPOINT Message  --  Function 15

;	!=======================================================!
;	/                                                       /
;	/                  THE MESSAGE HEADER                   /
;	/                                                       /
;	!=======================================================!
;	!                 INTERNAL TASK NUMBER                  !
;	!-------------------------------------------------------!
;	!                      OBJECT TYPE                      !
;	!-------------------------------------------------------!
;	!                      UNIT NUMBER                      !
;	!-------------------------------------------------------!
;	!                         NODE                          !
;	!=======================================================!

	PHASE	MSHSIZ

RCK.IT:! BLOCK	1		;THE ITN
RCK.TY:! BLOCK	1		;THE OBJECT TYPE
RCK.UN:! BLOCK	1		;THE UNIT NUMBER
RCK.NO:! BLOCK	1		;THE NODE

RCK.SZ:!			;THE SIZE OF THE REQUEST FOR CHECKPOINT MESSAGE

	DEPHASE
SUBTTL The DEFER Message  --  Function 16

;	!=======================================================!
;	/                                                       /
;	/                  THE MESSAGE HEADER                   /
;	/                                                       /
;	!=======================================================!
;	!         QUEUE NAME FOR THE REQUEST (0 IF ALL)         !
;	!-------------------------------------------------------!
;	!    FLAGS     !  FUNCTION   !        JOB NUMBER        !
;	!=======================================================!

	PHASE	MSHSIZ

DFR.OT:! BLOCK	1		;THE OBJECT TYPE ( 0 IF ALL)
DFR.JB:! BLOCK	1		;JOB INFORMATION
	DF.FNC==777B17		;THE FUNCTION REQUESTED
		.DFREL==0	;RELEASE ALL DEFERRED FILES
		.DFKIL==1	;KILL ALL DEFERRED FILES

	DF.JOB==0,,-1		;THE JOB NUMBER

DFR.SZ:!			;SIZE OF THE DEFER MESSAGE

	DEPHASE
SUBTTL	Event Counters

;QUASAR MAINTAINS A SET OF EVENT COUNTERS FOR VARIOUS EVENTS THAT
;	MIGHT BE OF INTEREST.  THESE COUNTERS ARE PRIMARILY FOR THE
;	USE OF SOFTWARE DEVELOPMENT PEOPLE TO HELP KEEP A HANDLE ON
;	WHAT IS REALLY HAPPENING INSIDE OF QUASAR.
;
;TWO MESSAGES EXIST TO HANDLE THESE COUNTERS:
;	COUNT		FUNCTION 20	SENT TO REQUEST CURRENT COUNTS
;	CNTANSWER	FUNCTION 21	SENT AS RESPONSE TO COUNT MESSAGE

;FOLLOWING ARE THE MACROS USED TO MANIPULATE THE COUNTERS:

DEFINE	X(A,B),<
	XLIST
	INTERN	$$'A
	$$'A==$$
	$$==$$+1
	LIST
	SALL
>  ;END DEFINE X

DEFINE	$COUNT(A),<
	IFNDEF $$'A,<
		PRINTX UNDEFINED COUNTER A USED
	>
	AOS	G$ITEM##+$$'A
>  ;END DEFINE $COUNT

DEFINE	$SITEM(AC,A),<
	IFNDEF $$'A,<
		PRINTX UNDEFINED COUNTER A USED
	>
	STORE	AC,G$ITEM##+$$'A
>  ;END DEFINE $SITEM


;THE COUNTERS ARE DEFINE ON THE NEXT PAGE
;THE COUNTERS

DEFINE $ITEM,<
	XLIST
	X	(NOW,CURRENT TIME OF DAY)
	X	(STAR,QUASAR START TIME)
	X	(QJOB,QUASARS JOB NUMBER)
	X	(IPCI,TOTAL NUMBER OF IPCF INTERRUPTS RECEIVED)
	X	(RIPC,IPCF MESSAGES RECEIVED)
	X	(SIPC,IPCF MESSAGES SENT)
	X	(IPCF,IPCF SEND FAILURES)
	X	(IPCU,UNRECOVERABLE IPCF SEND FAILURES)
	X	(MREL,RELEASE MESSAGES RECEIVED)
	X	(MCHK,CHECKPOINT MESSAGES RECEIVED)
	X	(MREQ,REQUEUE MESSAGES RECEIVED)
	X	(MNXT,NEXTJOB MESSAGES SENT)
	X	(MABO,ABORT MESSAGES SENT)
	X	(MLST,LIST MESSAGES RECEIVED)
	X	(NLAP,LISTANSWER PAGES SENT)
	X	(SCRE,SUCCESSFUL CREATES DONE)
	X	(MMOD,MODIFY MESSAGES RECEIVED)
	X	(MKIL,KILL MESSAGES RECEIVED)
	X	(MDEF,DEFER MESSAGES RECEIVED)
	X	(ISPL,IMMEDIATE SPOOL MESSAGES RECEIVED)
	X	(DSPL,DEFFERED SPOOL MESSAGES RECEIVED)
	X	(MCAN,COUNTANSWER MESSAGES SENT)
	X	(SLCD,SCHEDULER LOOP COUNTDOWNS)
	LIST
	SALL
>  ;END DEFINE $ITEM

	$$=0				;START CLEAN
	$ITEM				;NOW CALL IT

	NITEMS=$$			;TOTAL NUMBER OF ITEMS
SUBTTL	The COUNT Message  --  Function 20

	PHASE	MSHSIZ

COU.SZ:!			;SIZE OF COUNT MESSAGE
	DEPHASE
SUBTTL	The COUNTANSWER Message  --  Function 21

	PHASE	MSHSIZ

CAN.BL:! BLOCK	NITEMS		;BLOCK OF ITEMS

CAN.SZ:!			;SIZE OF COUNTANSWER MESSAGE
	DEPHASE
SUBTTL The SETUP/SHUTDOWN Message  --  Function 22

;The SETUP message is sent to cause a component to service an object for
;	which we have a job..  The SHUTDOWN message is sent to cause a
;	component to give up control of a object.


;	!=======================================================!
;	\                                                       \
;	\                  The Message Header                   \
;	\                                                       \
;	!=======================================================!
;	!                         Flags                         !
;	!-------------------------------------------------------!
;	!               Type of OBJect to set up                !
;	!-------------------------------------------------------!
;	!            Unit number of OBJect to set up            !
;	!-------------------------------------------------------!
;	!               Node to set up OBJect at                !
;	!-------------------------------------------------------!
;	!	 Port Number	!	Line Number		!
;	!-------------------------------------------------------!
;	!		Network Status Bits			!
;	!-------------------------------------------------------!
;	!		Port/Line Handle			!
;	!=======================================================!


		PHASE MSHSIZ		;START WITH STD. MESSAGE HEADER

SUP.FL:! BLOCK	1			;FLAGS
	SUFSHT==1B0			;SHUTDOWN INSTEAD OF SETUP
	SPLTAP==1B1			;BIT FOR PRINTER SPOOLER (SPOOL TO TAPE)
SUP.TY:! BLOCK	1			;TYPE OF OBJECT TO SET UP FOR
SUP.UN:! BLOCK	1			;UNIT NUMBER, OF THIS TYPE, TO SET UP
SUP.NO:! BLOCK	1			;SIXBIT NODE AT WHICH TO SET UP OBJ
SUP.CN:! BLOCK	CN$SIZ			;DN60 LINE CONDITIONING BLOCK
SUP.ST:! BLOCK	1			;NETWORK STATUS/FLAG BITS
					;SEE 'NETSTS' BIT VALUES

SUP.SZ:!				;SIZE OF THE SETUP MESSAGE

		DEPHASE
SUBTTL	The RESPONSE-TO-SETUP Message  --  Function 23

;The RESPONSE-TO-SETUP message is sent to QUASAR by a known component
;	after the component receives a SETUP message for an object.

;	!=======================================================!
;	\                                                       \
;	\                  The Message Header                   \
;	\                                                       \
;	!=======================================================!
;	!                    The OBJect Type                    !
;	!-------------------------------------------------------!
;	!                The OBJect Unit Number                 !
;	!-------------------------------------------------------!
;	!         The NODE at which the OBJect Resides          !
;	!-------------------------------------------------------!
;	!                   The RESPONSE Code                   !
;	!-------------------------------------------------------!
;	!                    RESPONSE REASON                    !
;	!-------------------------------------------------------!
;	!              The DEC Device Attributes                !
;	!=======================================================!

	PHASE	MSHSIZ			;STANDARD MESSAGE HEADER

RSU.TY:! BLOCK	1			;OBJECT TYPE
RSU.UN:! BLOCK	1			;UNIT NUMBER
RSU.NO:! BLOCK	1			;NODE
RSU.CO:! BLOCK	1			;RESPONSE CODE
	%RSUOK==0			;SETUP OK
	%RSUNA==1			;OBJECT NOT AVAILABLE (TRY AGAIN LATER)
	%RSUDE==2			;OBJECT DOESNT EXIST (DONT TRY AGAIN)
	%RSUNC==3			;OBJECT PORT/LINE NOT CONDITIONED
RSU.CD:! BLOCK	1			;RESPONSE REASON
					;SEE OBJECT STATUS CODES IN OBJECT
					;    QUEUE DESCRIPTION
RSU.DA:! BLOCK	1			;DEC DEVICE ATTRIBUTES

RSU.SZ:!

	DEPHASE
	SUBTTL	The HOLD/RELEASE Message  --  Function 25

;	!=======================================================!
;	\                                                       \
;	\                  THE MESSAGE HEADER                   \
;	\                                                       \
;	!=======================================================!
;	!                   THE OBJECT QUEUE                    !
;	!-------------------------------------------------------!
;	!                         FLAGS                         !
;	!-------------------------------------------------------!
;	\                                                       \
;	\               REQUEST DESCRIPTOR BLOCK                \
;	\                                                       \
;	!=======================================================!


	PHASE	MSHSIZ			;STANDARD MESSAGE HEADER

HBO.OT:! BLOCK	1			;OBJECT TYPE (QUEUE)
HBO.FL:! BLOCK	1			;FLAGS
	HB.FRL==1B0			;RELEASE FLAG
HBO.RQ:! BLOCK	RDBSIZ			;THE RDB SPECIFIED

HBO.SZ:!				;SIZE OF THE HBO MESSAGE

	DEPHASE
	SUBTTL	The SPOOL Message - Function 26 (sent by IPCC)

IFN FTUUOS,<
;	!=======================================================!
;	!          LENGTH           !    FUNCTION 26 - SPOOL    !
;	!-------------------------------------------------------!
;	!        JOB NUMBER         !  JBTLOC(J)  !    FLAGS    !
;	!-------------------------------------------------------!
;	!                      USERS NAME                       !
;	!                    2 SIXBIT WORDS                     !
;	!-------------------------------------------------------!
;	!              DEVICE INIT'ED BY THE USER               !
;	!-------------------------------------------------------!
;	!             STRUCTURE CONTAINING THE FILE             !
;	!-------------------------------------------------------!
;	!              MONITOR GENERATED FILE NAME              !
;	!-------------------------------------------------------!
;	!                   ENTERED FILE NAME                   !
;	!-------------------------------------------------------!
;	!                       FILE SIZE                       !
;	!-------------------------------------------------------!
;	!      FILE EXTENSION       !                           !
;	!-------------------------------------------------------!
;	!                   NUMBER OF COPIES                    !
;	!-------------------------------------------------------!
;	!                      FORMS NAME                       !
;	!-------------------------------------------------------!
;	!                     OUTPUT LIMIT                      !
;	!-------------------------------------------------------!
;	!SFL!                  FLAGS                  !DEV TYPE !
;	!-------------------------------------------------------!
;	!                   DEVICE ATTRIBUTES                   !
;	!-------------------------------------------------------!
;	!                         NODE                          !
;	!-------------------------------------------------------!
;	!                    AFTER PARAMETER                    !
;	!=======================================================!

	PHASE	0

SPL.HD:! BLOCK	1		;THE HEADER FROM IPCC
SPL.JB:! BLOCK	1		;USERS JOB NUMBER
	SP.JOB==-1,,0		;THE JOB NUMBER CLOSING THE SPOOLED FILE
	SP.LOC==777B26		;CURRENT REMOTE STATION (.LOCATE n)
	SP.BAT==1B27		;THIS IS FOR A BATCH JOB
	SP.DFR==1B28		;DEFERRED MODE SPOOLING

SPL.US:! BLOCK	2		;THE USERS NAME (2 SIXBIT WORDS)
SPL.DV:! BLOCK	1		;DEVICE INIT'ed BY THE USER (e.g. LPT0:)
SPL.ST:! BLOCK	1		;STRUCTURE CONTAINING THIS FILE
SPL.FN:! BLOCK	1		;MONITOR GENERATED FILE NAME
SPL.EN:! BLOCK	1		;ENTERED FILE NAME
SPL.FS:! BLOCK	1		;FILE SIZE (IN BLOCKS)
SPL.EX:! BLOCK	1		;FILE EXTENSION
	SP.EXT==-1,,0		;IN LEFT HALF
SPL.CP:! BLOCK	1		;# COPIES
SPL.FM:! BLOCK	1		;FORMS NAME
SPL.LM:! BLOCK	1		;OUTPUT LIMIT
SPL.SF:! BLOCK	1		;SPOOLING FLAGS
	SP.FLG==3B2		;SPOOLING FLAG LOCATION
	   .SPDFD==1		;DEFERED SPOOLING
	   .SPDFI==2		;IMMEDIATE SPOOLING
	SP.TYP==77		;TYPE OF EDVICE
SPL.DA:! BLOCK	1		;DEVICE ATTRIBUTES
SPL.ND:! BLOCK	1		;NODE
SPL.AF:! BLOCK	1		;AFTER PARM

SPL.SZ:!			;SIZE OF THE SPOOL MESSAGE
	DEPHASE

>  ;END IFN FTUUOS
IFN FTJSYS,<

;	!=======================================================!
;	!                  FUNCTION 26 - SPOOL                  !
;	!-------------------------------------------------------!
;	!      # HEADER WORDS       !        JOB NUMBER         !
;	!-------------------------------------------------------!
;	!           FLAGS           !      STATION NUMBER       !
;	!-------------------------------------------------------!
;	!                     PROGRAM NAME                      !
;	!-------------------------------------------------------!
;	!         BYTE SIZE         !  NUMBER OF PAGES IN FILE  !
;	!-------------------------------------------------------!
;	!          BYTE COUNT WHICH WOULD ADDRESS EOF           !
;	!-------------------------------------------------------!
;	!                                                       !
;	/               FILESPEC FOR SPOOLED FILE               /
;	!                                                       !
;	!=======================================================!

	PHASE	0
SPL.HD:! BLOCK	1		;HEADER FROM IPCC
SPL.JB:! BLOCK	1		;JOB INFORMATION
	SP.NHW==-1,,0		;NUMBER OF HEADER WORDS
	SP.JOB==0,,-1		;JOB NUMBER
SPL.FL:! BLOCK	1		;FLAGS
	SP.BAT==1B0		;JOB MAKE REQUEST IS A BATCH JOB
	SP.DFR==1B1		;REQUEST IS DEFERED
	SP.LOC==0,,-1		;STATION NUMBER
SPL.PG:! BLOCK	1		;NAME OF PROGRAM WRITING FILE
SPL.BV:! BLOCK	1		;CONTENTS OF FDBBYV
	SP.SIZ==0,,-1		;NUMBER OF PAGES IN FILE
SPL.EF:! BLOCK	1		;BYTE COUNT WHICH ADDRESSES TO EOF
SPL.FI:!			;BEGINNING OF FILESPEC FOR SPOOLED FILE

SPL.SZ:!			;SPOOL MSG SIZE

	DEPHASE

>  ;END IFN FTJSYS
SUBTTL	The LOGOUT Message - Function 27 (sent by IPCC)

IFN FTUUOS,<

;	!=======================================================!
;	!          LENGTH           !   FUNCTION 27 - LOGOUT    !
;	!-------------------------------------------------------!
;	!        JOB NUMBER         !  JBTLOC(J)  !    FLAGS    !
;	!=======================================================!

	PHASE	0

LGO.HD:! BLOCK	1		;THE HEADER FROM IPCC
LGO.JB:! BLOCK	1		;USERS JOB NUMBER
	LG.JOB==-1,,0		;THE JOB NUMBER OF THE USER LOGGING OUT
	LG.LOC==777B26		;THE CURRENT REMOTE STATION NUMBER OF THIS JOB
	LG.BAT==1B27		;THIS IS A BATCH JOB
	LG.DFR==1B28		;DEFERRED MODE SPOOLING

LGO.SZ:!			;SIZE OF THE LOGOUT MESSAGE

	DEPHASE

>  ;END IFN FTUUOS

IFN FTJSYS,<

;	!=======================================================!
;	!                 FUNCTION 27 - LOGOUT                  !
;	!-------------------------------------------------------!
;	!    NO. OF HEADER WORDS    !        JOB NUMBER         !
;	!-------------------------------------------------------!
;	!           FLAGS           !      STATION NUMBER       !
;	!=======================================================!

	PHASE 0

LGO.HD:! BLOCK	1		;HEADER FROM IPCC
LGO.JB:! BLOCK	1		;JOB INFORMATION
	LG.NHW==-1,,0		;NUMBER OF HEADER WORDS
	LG.JOB==0,,-1		;JOB NUMBER

LGO.FL:! BLOCK	1		;FLAG WORD
	LG.BAT==1B0		;THIS WAS A BATCH JOB
	LG.DFR==1B1		;DEFERRED MODE SPOOLING
	LG.LOC==0,,-1		;JOBS STATION NUMBER

LGO.SZ:!			;SIZE OF THE LOGOUT MESSAGE

	DEPHASE

>  ;END IFN FTJSYS
	SUBTTL	TAPE ONLINE MESSAGE Function 31 (sent by IPCC)


TOPS10 <

;	!=======================================================!
;	!	Length		!	Function code		!
;	!-------------------------------------------------------!
;	!		Device Name (Sixbit)			!
;	!-------------------------------------------------------!
;	!					!Device Type	!
;	!=======================================================!


		PHASE	0

	.TONHD:! BLOCK	1		;TAPE ONLINE MESSAGE HEADER
	.TONDV:! BLOCK	1		;TAPE ONLINE DEVICE
	.TONST:! BLOCK	1		;TAPE ONLINE DEVICE TYPE
	    TON.TY==77			;DEVICE TYPE

		DEPHASE
>
	SUBTTL	THE DEVICE STATUS UPDATE MESSAGE - FUNCTION 31


;	!======================================================	!
;	\							\
;	\		THE MESSAGE HEADER			\
;	\							\
;	!=======================================================!
;	\							\
;	\		THE REQUESTED OBJECT BLOCK		\
;	\							\
;	!=======================================================!
;	!		THE DEVICE STATUS CODE			!
;	!=======================================================!


		PHASE	MSHSIZ		;STANDARD MESSAGE HEADER

	STU.RB:! BLOCK	OBJ.SZ		;THE OBJECT BLOCK YOU WANT
	STU.CD:! BLOCK	1		;THE DEVICE STATUS CODE

	STU.SZ:!

		DEPHASE
	SUBTTL	TAPE DEASSIGN/DISMOUNT MESSAGE (IPCC FUNCTION 34)



;	!=======================================================!
;	!	3		!	     34			!
;	!-------------------------------------------------------!
;	!	        SIXBIT DEVICE NAME			!
;	!-------------------------------------------------------!
;	!		   DEVICE TYPE				!
;	!-------------------------------------------------------!
;	!		     JOB NUMBER				!
;	!=======================================================!


		PHASE	0

	.TDHDR:! BLOCK	1		;HEADER
	.TDDEV:! BLOCK	1		;SIXBIT DEVICE NAME
	.TDDVT:! BLOCK	1		;DEVICE TYPE
	.TDJBN:! BLOCK	1		;USER JOB NUMBER

		DEPHASE
	SUBTTL	NODE-WENT-AWAY NOTIFICATION MESSAGE (FUNCTION 36)



;	!=======================================================!
;	!							!
;	!		MESSAGE HEADER				!
;	!							!
;	!-------------------------------------------------------!
;	!		   FLAG WORD				!
;	!-------------------------------------------------------!
;	!		ARGUMENT COUNT				!
;	!-------------------------------------------------------!


;	THE ONLY BLOCK DEFINED FOR THIS MESSAGE IS .OROBJ
;	IT DEFINES THE NODE WHICH WENT OFFLINE

;	The .OFLAG word will contain a port,,line # if the node was
;	an IBM remote. It will be zero otherwise.

;	Also: If the %ONLINE bit is lit in .MSFLG then this msg
;	      is a Node-Online Message

	%ONLINE==1B3		;MAKE THIS A NODE ONLINE MESSAGE
	SUBTTL	.QOCQE - CREATE QUEUE ENTRY MESSAGE (FUNCTION 37)

;	!=======================================================!
;	!							!
;	!		MESSAGE HEADER				!
;	!							!
;	!-------------------------------------------------------!
;	!		   FLAG WORD				!
;	!-------------------------------------------------------!
;	!		ARGUMENT COUNT				!
;	!-------------------------------------------------------!

	;NOTE::: THE QUEUE TYPE BLOCK (.QCQUE) MUST PRECEED THE 
	;DEFINITIONS OF THE QUEUE DEPENDANT BLOCKS

	;THE MESSAGE BLOCK TYPES ARE:

	.QCFIL==10		;FILE SPEC BLOCK

	;This block is the Standard Galaxy FD with .QCFIL put in 
	;the right half of the .FDLEN word.

	.QCCOP==11		;NUMBER OF COPIES BLOCK

;	!-------------------------------------------------------!
;	!   BLOCK LENGTH (2)	!	.QCCOP			!
;	!-------------------------------------------------------!
;	!	THE NUMBER OF COPIES OF THE FILE TO		!
;	!		   BE OUTPUT				!
;	!-------------------------------------------------------!

	.QCFRM==12		;FORMS TYPE BLOCK

;	!-------------------------------------------------------!
;	!   BLOCK LENGTH (2)	!	.QCFRM			!
;	!-------------------------------------------------------!
;	!	THE FORMS TYPE YOU WANT (SIXBIT)		!
;	!-------------------------------------------------------!

	.QCPTP==13		;FILE FORMAT BLOCK (ASCII, FORTRAN, ETC)

;	!-------------------------------------------------------!
;	!   BLOCK LENGTH (2)	!	.QCPTP			!
;	!-------------------------------------------------------!
;	!  THE FILE FORMAT TYPE (SEE .FPINF - FP.FFF)		!
;	!-------------------------------------------------------!

	;CONTINUED ON THE NEXT PAGE
	;CONTINUED FROM THE PREVIOUS PAGE

	.QCODP==14		;/DISP: OUTPUT DISPOSITION BLOCK

;	!-------------------------------------------------------!
;	!   BLOCK LENGTH (2)	!	.QCODP			!
;	!-------------------------------------------------------!
;	!  OUTPUT FILE DISPOSITION - MUST BE 1 (FOR DELETE)	!
;	!-------------------------------------------------------!

	.QCUNT==15		;UNIT TYPE (/UNIT:, /LOWER, /UPPER)

;	!-------------------------------------------------------!
;	!   BLOCK LENGTH (2)	!	.QCUNT			!
;	!-------------------------------------------------------!
;	!     DEVICE ATTRUBUTES ( %LOWER,%UPPER,%GENRC,%PHYCL)	!
;	!-------------------------------------------------------!

	.QCAFT==16		;/AFTER BLOCK

;	!-------------------------------------------------------!
;	!   BLOCK LENGTH (2)	!	.QCAFT			!
;	!-------------------------------------------------------!
;	!	/AFTER TIME (IN UDT FORMAT)			!
;	!-------------------------------------------------------!

	.QCLIM==17		;LIMIT BLOCK (/TIME:, /PAGES:, ETC)

;	!-------------------------------------------------------!
;	!   BLOCK LENGTH (2)	!	.QCLIM			!
;	!-------------------------------------------------------!
;	!   LIMIT BLOCK (# OF PAGES,ETC or TIME IN SECS)	!
;	!-------------------------------------------------------!

	.QCUNI==20		;/UNIQUE BLOCK

;	!-------------------------------------------------------!
;	!   BLOCK LENGTH (2)	!	.QCUNI			!
;	!-------------------------------------------------------!
;	!	/UNIQUE: VALUE (%EQUNO or %EQUYE)		!
;	!-------------------------------------------------------!

	.QCRES==21		;/RESTART BLOCK

;	!-------------------------------------------------------!
;	!   BLOCK LENGTH (2)	!	.QCRES			!
;	!-------------------------------------------------------!
;	!	/RESTART: VALUE (%EQRNO or %EQRNY)		!
;	!-------------------------------------------------------!

	;CONTINUED ON THE NEXT PAGE
	;CONTINUED FROM THE PREVIOUS PAGE

	.QCLOG==22		;/OUTPUT: (LOG,NOLOG,ERROR)

;	!-------------------------------------------------------!
;	!   BLOCK LENGTH (2)	!	.QCLOG			!
;	!-------------------------------------------------------!
;	!   /OUTPUT: VALUE (%EQONL or %EQOLG or %EQOLE)		!
;	!-------------------------------------------------------!

	.QCACT==23		;/ACCOUNT: ACCOUNT STRING BLOCK

;	!-------------------------------------------------------!
;	!   BLOCK LENGTH 	!	.QCACT			!
;	!-------------------------------------------------------!
;	\							\
;	\	USERS ACCOUNT STRING IN ASCIZ			\
;	\							\
;	!-------------------------------------------------------!

	.QCQUE==24		;QUEUE TYPE BLOCK

;	!-------------------------------------------------------!
;	!   BLOCK LENGTH (2)	!	.QCQUE			!
;	!-------------------------------------------------------!
;	!   QUEUE TYPE (SEE GLXMAC OBJ.TY FIELD)		!
;	!-------------------------------------------------------!

	.QCNOD==25		;/NODE: DESTINATION NODE BLOCK

;	!-------------------------------------------------------!
;	!   BLOCK LENGTH (2)	!	.QCNOD			!
;	!-------------------------------------------------------!
;	!   DESTINATION NODE NUMBER OR SIXBIT NODE NAME		!
;	!-------------------------------------------------------!

	.QCNAM==26		;USERS NAME BLOCK

;	!-------------------------------------------------------!
;	!  BLOCK LENGTH 	   !	.QCNAM			!
;	!-------------------------------------------------------!
;	\							\
;	\   USERS NAME (ASCIZ ON -20, SIXBIT ON THE -10)	\
;	\							\
;	!-------------------------------------------------------!

	;CONTINUED ON THE NEXT PAGE
	;CONTINUED FROM THE PREVIOUS PAGE

	.QCOID==27		;USERS NUMBER BLOCK

;	!-------------------------------------------------------!
;	!   BLOCK LENGTH (2)	!	.QCOID			!
;	!-------------------------------------------------------!
;	! USERS ID (36 BIT USER ID ON -20, PPN ON -10)		!
;	!-------------------------------------------------------!

	.QCNOT==30		;/NOTIFY BLOCK

;	!-------------------------------------------------------!
;	!   BLOCK LENGTH (2)	!	.QCNOT			!
;	!-------------------------------------------------------!
;	!	/NOTIFY VALUE (%NOTTY, %NOTML, %NOTJB)		!
;	!-------------------------------------------------------!

	.QCBLT==31		;/BATLOG: BLOCK

;	!-------------------------------------------------------!
;	!   BLOCK LENGTH (2)	!	.QCBLT			!
;	!-------------------------------------------------------!
;	!  /BATLOG VALUE (%BAPND or %BSCDE or %BSPOL)		!
;	!-------------------------------------------------------!

	.QCJBN==32		;JOB NAME

;	!-------------------------------------------------------!
;	!   BLOCK LENGTH (2)	!	.QCJBN			!
;	!-------------------------------------------------------!
;	!		SIXBIT JOB NAME				!
;	!-------------------------------------------------------!

	.QCCDI==33		;CONNECTED DIRECTORY BLOCK (-20 ONLY)

;	!-------------------------------------------------------!
;	!   BLOCK LENGTH (2)	!	.QCCDI			!
;	!-------------------------------------------------------!
;	!	36 BIT CONNECTED DIRECTORY NUMBER		!
;	!-------------------------------------------------------!

	.QCNTE==34		;/NOTE: BLOCK

;	!-------------------------------------------------------!
;	!  BLOCK LENGTH 1-2	!	.QCNTE			!
;	!-------------------------------------------------------!
;	\							\
;	\		1 TO 12 SIXBIT CHARACTERS		\
;	\							\
;	!-------------------------------------------------------!

	;CONTINUED ON THE NEXT PAGE
	;CONTINUED FROM THE PREVIOUS PAGE


	.QCBGN==35		;/BEGIN: BLOCK

;	!-------------------------------------------------------!
;	!  BLOCK LENGTH (2)	!	.QCBGN			!
;	!-------------------------------------------------------!
;	!	BEGINNING PAGE NUMBER FOR STARTING OUTPUT	!
;	!-------------------------------------------------------!


	.QCPRI==36		;/PRIORITY: BLOCK

;	!-------------------------------------------------------!
;	!  BLOCK LENGTH (2)	!	.QCPRI			!
;	!-------------------------------------------------------!
;	!		PRIORITY (1 TO 20 OR 1 TO 77)		!
;	!-------------------------------------------------------!
	SUBTTL	RECOGNIZE MESSAGE (FUNCTION .QOREC - 40)

TOPS10<

;	!=======================================================!
;	/							/
;	/		MESSAGE HEADER				/
;	/							/
;	!-------------------------------------------------------!
;	!		BLOCK COUNT (1)				!
;	!-------------------------------------------------------!
;	!		   FLAG WORD				!
;	!-------------------------------------------------------!


	;THE ONLY BLOCK DEFINED IS .RECDV WHICH CONTAINS THE
	;SIXBIT DEVICE NAME 

	.RECDV==3		;DEFINE THE DEVICE NAME BLOCK TYPE

;	!-------------------------------------------------------!
;	!	2		!	.RECDV			!
;	!-------------------------------------------------------!
;	!		SIXBIT DEVICE NAME			!
;	!=======================================================!

	PHASE	0

.RECDN:! BLOCK	1		;SIXBIT DEVICE NAME
.RECSZ:!			;SIZE OF THE BLOCK

	DEPHASE

>;END TOPS10
	SUBTTL	Tape status message (.QOTST functions 41)

TOPS10<
;	!=======================================================!
;	/							/
;	/		MESSAGE HEADER				/
;	/							/
;	!-------------------------------------------------------!
;	!		BLOCK COUNT (1)				!
;	!-------------------------------------------------------!
;	!		   FLAG WORD				!
;	!-------------------------------------------------------!

;The only legal block type in this message is .TLVOL, described below

;	!-------------------------------------------------------!
;	!	4		!	.TLVOL			!
;	!-------------------------------------------------------!
;	!		SIXBIT DEVICE NAME			!
;	!-------------------------------------------------------!
;	!OFL!WLK!DEN!LAB!                                       !
;	!-------------------------------------------------------!
;	!                 SIXBIT VOLUME ID                      !
;	!=======================================================!

	PHASE	0

.TLDRV:!BLOCK	1			;SIXBIT DEVICE NAME

.TLSTS:!BLOCK	1			;STATUS BITS
	TS.OFL==1B0			;ON IF UNIT IS OFF-LINE
	TS.LOK==1B1			;ON IF UNIT IS WRITE-LOCKED
	TS.DEN==77B8			;ACTUAL DENSITY OF TAPE (SEE UUOSYM)
	TS.LAB==77B14			;LABEL TYPE (SEE UUOSYM)

.TLVOL:!BLOCK	1			;SIXBIT VOLUME ID
.TLSIZ:!

	DEPHASE
>;END TOPS10
	SUBTTL	TAPE DRIVE UNLOAD MESSAGE (FUNCTION .QOUNL - 42)

	;ALSO	TAPE DRIVE REWIND MESSAGE (FUNCTION .QOREW - 47)


;	!=======================================================!
;	/							/
;	/		MESSAGE HEADER				/
;	/							/
;	!-------------------------------------------------------!
;	!		BLOCK COUNT (1)				!
;	!-------------------------------------------------------!
;	!		   FLAG WORD				!
;	!-------------------------------------------------------!


	;THE ONLY BLOCK DEFINED IS .RECDV WHICH CONTAINS THE
	;SIXBIT DEVICE NAME 

;	!-------------------------------------------------------!
;	!	2		!	.RECDV			!
;	!-------------------------------------------------------!
;	!		SIXBIT DEVICE NAME			!
;	!=======================================================!
SUBTTL	Volume Mounted message to tape labeller (.QOVMN = 43)

TOPS10<

;	!=======================================================!
;	/							/
;	/		MESSAGE HEADER				/
;	/							/
;	!-------------------------------------------------------!
;	!		BLOCK COUNT (2)				!
;	!-------------------------------------------------------!
;	!		   FLAG WORD				!
;	!-------------------------------------------------------!

	;ONE BLOCK IS .RECDV WHICH CONTAINS THE
	;SIXBIT DEVICE NAME 

;	!-------------------------------------------------------!
;	!	2		!	.RECDV			!
;	!-------------------------------------------------------!
;	!		SIXBIT DEVICE NAME			!
;	!=======================================================!

	;THERE IS ONE VOLUME (SET) BLOCK ATTACHED TO THE MESSAGE
	;THIS BLOCK DESCRIBE THE INITIAL VOLUME BEING GIVEN TO THE
	;USER AND THE FIRST VOLUME IN THE VOLUME SET

	.VOLMN==4		;BLOCK TYPE FOR THE VOLUME BLOCK

;	!-------------------------------------------------------!
;	!         SIXBIT VOLUME ID FOR MOUNTED VOLUME		!
;	!-------------------------------------------------------!
;	!        SIXBIT VOLUME ID FOR FIRST VOLUME IN SET	!
;	!-------------------------------------------------------!
;	!LABEL TYPE!WLOCK!JOB #!				!
;	!-------------------------------------------------------!

	PHASE	0		;DEFINE THE CONTENTS OF THE BLOCK

.VMNIV:! BLOCK	1		;SIXBIT NAME OF INITIAL VOLUME
.VMNFV:! BLOCK	1		;SIXBIT NAME OF FIRST VOL IN SET
.VMNIN:! BLOCK	1		;INFORMATION ABOUT THE VOL SET
	VI.LTY==77B5		;LABEL TYPE
	VI.WLK==1B6		;WRITE LOCKED IF 1
	VI.JOB==777B17		;JOB NUMBER OF REQUESTOR
.VMNSZ:!			;SIZE OF THE BLOCK (WITHOUT HEADER)

>;END TOPS10
SUBTTL	Volume dismounted message to tape labeller (.QOVDS = 44)

TOPS10<

;	!=======================================================!
;	/							/
;	/		MESSAGE HEADER				/
;	/							/
;	!-------------------------------------------------------!
;	!		BLOCK COUNT (1)				!
;	!-------------------------------------------------------!
;	!		   FLAG WORD				!
;	!-------------------------------------------------------!

	;THE ONLY BLOCK DEFINED IS .RECDV WHICH CONTAINS THE
	;SIXBIT DEVICE NAME 

;	!-------------------------------------------------------!
;	!	2		!	.RECDV			!
;	!-------------------------------------------------------!
;	!		SIXBIT DEVICE NAME			!
;	!=======================================================!
>;END TOPS10
SUBTTL	Volume switch request from tape labeller (.QOVSR = 45)

TOPS10<

;	!=======================================================!
;	/							/
;	/		MESSAGE HEADER				/
;	/							/
;	!-------------------------------------------------------!
;	!		BLOCK COUNT (2)				!
;	!-------------------------------------------------------!
;	!		   FLAG WORD				!
;	!-------------------------------------------------------!

	;ONE BLOCK IS A .RECDV BLOCK WHICH HAS THE
	;SIXBIT DEVICE NAME OF THE DRIVE NEEDING A NEW VOLUME

;	!-------------------------------------------------------!
;	!	2		!	.RECDV			!
;	!-------------------------------------------------------!
;	!		SIXBIT DEVICE NAME			!
;	!=======================================================!

	;THE OTHER BLOCK DESCRIBES WHICH VOLUME OF THE SET IS
	;NEEDED BY THE USER ON THAT DRIVE

;	!-------------------------------------------------------!
;	!	2		!	.RLVOL			!
;	!-------------------------------------------------------!
;	!WRT!		RELATIVE VOLUME CODE			!
;	!=======================================================!

	.RLVOL=4

	PHASE	0

.RLVCD:! BLOCK	1			;SPACE FOR THE RELATIVE VOLUME CODE
	%VWRT==1B0			;WANT TO USE 'NEXT' VOLUME FOR WRITING
	RLV.CD==7			;WHERE THE CODE GOES
	  %RLNXT==1			;GET THE NEXT VOLUME
	  %RLPRV==2			;GET THE PREVIOUS VOLUME
	  %RLFIR==3			;GET THE FIRST VOLUME OF THE SET

.RLVSZ:!				;SIZE OF THIS BLOCK

	DEPHASE

>;END TOPS10
	SUBTTL Volume Switch Directive From MDA to Tape Labeler (.QOVSD - 46)

TOPS10<

;This message is sent by MDA in response to a volume switch request
;	message from the tape labeller.  It directs the labeller
;	to continue the labelling process on the same drive
;	or on another drive which the OPR/MDA has chosen

;	!=======================================================!
;	/							/
;	/		MESSAGE HEADER				/
;	/							/
;	!-------------------------------------------------------!
;	!		BLOCK COUNT (1)				!
;	!-------------------------------------------------------!
;	!		   FLAG WORD				!
;	!-------------------------------------------------------!

	;Flags for this message
	%VEOF==1B0			;There are no more volumes in the set
					;give EOT to the requestor
	%VABT==1B1			;OPR has aborted the volume
					;switch request

	;There are two blocks passed on this message
	;One is the Volume set directive block which describes
	;the two drives being swapped, and the other is a Volume
	;info block describing the new volume in use, its label type,
	;and its write enable/lock status


	.VSDBL==12		;VOLUME SET DIRECTIVE BLOCK

;	!-------------------------------------------------------!
;	!	4		!	.VSDBL			!
;	!-------------------------------------------------------!
;	!	INITIAL DRIVE NAME IN SIXBIT			!
;	!-------------------------------------------------------!
;	!	CURRENT DRIVE NAME IN SIXBIT			!
;	!-------------------------------------------------------!
;	!		CURRENT VOLUME NAME			!
;	!=======================================================!


		PHASE	0

	.VSDID:! BLOCK	1		;INITIAL DRIVE NAME
	.VSDCD:! BLOCK	1		;CURRENT DRIVE NAME

	VSDLEN:!			;BLOCK LENGTH

		DEPHASE

>;END TOPS10
SUBTTL	IPCF Parameters

;	!=======================================================!
;	\                                                       \
;	\                  QUEUE ENTRY HEADER                   \
;	\                                                       \
;	!=======================================================!
;	!                         FLAGS                         !
;	!-------------------------------------------------------!
;	!                     SENDER'S PID                      !
;	!-------------------------------------------------------!
;	!                    RECEIVER'S PID                     !
;	!-------------------------------------------------------!
;	!      COUNT OF WORDS       !    ADDRESS OF MESSAGE     !
;	!-------------------------------------------------------!
;	!                      SENDER'S ID                      !
;	!-------------------------------------------------------!
;	!             SENDER'S CAPABILITIES (PRIVS)             !
;	!-------------------------------------------------------!
;	!                                                       !
;	\                SENDER'S ACCOUNT STRING                \
;	\                      (10 WORDS)                       \
;	!                                                       !
;	!-------------------------------------------------------!
;	
;	!                 -----  TOPS 20  -----                 !
;	!                                                       !
;	!-------------------------------------------------------!
;	!             CONNECTED DIRECTORY OF SENDER             !
;	!-------------------------------------------------------!
;	\                                                       \
;	\                      END TOPS 20                      \
;	
;	!-------------------------------------------------------!
;	!                SENDER'S SPECIAL INDEX                 !
;	!=======================================================!


	PHASE	QEHSIZ		;APPEND TO THE QUEUE-ENTRY-HEADER

IPCFLG:! BLOCK	1		;FLAGS (SEE UUOSYM.MAC FOR DEFINITIONS)
IPCSDR:! BLOCK	1		;SENDERS PID
IPCRCR:! BLOCK	1		;RECEIVERS PID
IPCMES:! BLOCK	1		;MESSAGE INFORMATION
	IPM.CT==-1,,0		;COUNT OF WORDS
	IPM.AD==0,,-1		;ADDRESS OF THE MESSAGE

IPCHSZ==.-IPCFLG		;SIZE OF THE PDB FOR SEND

IPCSID:! BLOCK	1		;SENDERS ID
IPCPRV:! BLOCK	1		;SENDERS CAPABILITIES (PRIVS)

IPCACT:! BLOCK	10		;SENDERS ACCOUNT STRING.

IFN FTUUOS,<
	IPCCDI==IPCSID		;CONNECTED DIR=SENDER'S ID
>  ;END IFN FTUUOS

IFN FTJSYS,<
IPCCDI:! BLOCK	1		;CONNECTED DIRECTORY OF SENDER
>  ;END IFN FTJSYS

IPCRSZ==.-IPCFLG		;SIZE OF THE PDB FOR RECEIVE

IPCIDX:! BLOCK	1		;SENDER'S SPECIAL INDEX
	IPS.FL==SI.FLG		;GLXMAC SYMBOLS, FLAG FOR VALIDITY
	IPS.IX==SI.IDX		; AND INDEX WHEN IPS.FL IS ON

IPCDAT:!
IPCSIZ:!			;SIZE OF AN IPCF ENTRY (NOT COUNTING
				; THE MESSAGE)

	DEPHASE


;WHEN CALLING C$SEND FOR IPCF SENDS, BITS LIT IN AP ARE:

	IPS.TF==1B0		;TRY FIRST (IGNORE SCAN OF IPS QUEUE)
	IPS.ID==1B1		;IGNORE DUPLICATE (REQUESTED PID IN IPS)
	IPS.IF==1B2		;IGNORE FAILURE (THROW AWAY PACKET)
SUBTTL	Common Parameters

;THE PARAMETERS DEFINED HERE ARE ONES THAT ARE NEEDED BY QUASAR BUT ARE
;SYSTEM DEPENDENT.  TO MINIMIZE FEATURE TESTS AND DUPLICATION OF ROUTINES,
;QUASAR PARAMETERS ARE USED AND EQUATED TO THE CORRECT SYSTEM VALUE.

;**NOTE: THESE VALUES ARE NOT TO BE CONSTRUED AS 'OPTIONS' AND ANY CHANGES
;		WILL CAUSE UNPREDICTABLE RESULTS.


	SYSPRM	ACC.KM,.ACREN,.CKAWT		;KILL/MODIFY ACCESS CODE
	SYSPRM	INT.PI,0,0			;IPCF INTERRUPT CHANNEL OR OFFSET
	SYSPRM	INT.PL,1,1			;IPCF PRIORITY INTERRUPT LEVEL
	SYSPRM	FSSBKS,200,1000			;STANDARD BLOCKSIZE
	SYSPRM	FSSFIB,2,1			;BLK. # OF 1ST INDEX BLK
SUBTTL	Random Macros

;DOSCHD is a macro which may be called to flag that something has
;	happened which might allow a scheduling pass to bear fruit.

DEFINE DOSCHD,<
	IFN <%%.MOD-<SIXBIT /QUASAR/>>,<EXTERN G$SCHD>
	SETOM	G$SCHD
>  ;END DEFINE DOSCHD
SUBTTL	Failsoft System Definitions

;I/O CHANNELS
	ND	CMQ1,10			;FIRST MASTER QUEUE CHANNEL
	ND	CMQ2,11			;SECOND MASTER QUEUE CHANNEL

;OTHER SYMBOLS
	XP	FSSSTR,FSSSTR		;STRUCTURE FOR MASTER QUEUES
	ND	FSSPRT,277		;PROTECTION FOR MASTER QUEUES

;FILE FORMAT AND INDEX DEFINITIONS
	XP	FSSQFV,%%.QSR		;QUEUE FILE VERSION
	XP	FSSMRS,1000		;MAXIMUM REQUEST SIZE
	XP	FSSBPR,<FSSMRS/FSSBKS>	;MAXIMUM BLOCKS/REQUEST
	XP	FSSWPI,1000		;NUMBER OF WORDS/INDEX
	XP	FSSNIB,<FSSWPI/FSSBKS>	;NUMBER OF INDEX BLOCKS/SECTION
	XP	FSSFDB,<FSSFIB+FSSNIB>	;BLK. NO.  OF FIRST DATA BLOCK
	XP	FSSBPS,FSSWPI		;BLOCKS PER SECTION
	XP	FSSMNS,5		;MAXIMUM NUMBER OF SECTIONS

;MASTER FILE NAMES

IFN FTUUOS,<
	DEFINE	MQFNM1,<SIXBIT\QSRMS1\>	;THE PRIMARY MASTER
	DEFINE	MQFNM2,<SIXBIT\QSRMS2\>	;    REDUNDANT MASTER
	ND	DFSSTR,<SIXBIT /DSK/>	;STRUCTURE TO USE IF DEBUGGING
	ND	SPLSTR,<SIXBIT/DSK/>	;SPOOL STRUCTURE
>  ;END OF IFN FTUUOS

IFN FTJSYS,<
	DEFINE	MQFNAM,<ASCIZ\DSK:<SPOOL>PRIMARY-MASTER-QUEUE-FILE.QUASAR\>
	DEFINE	DMQFNM,<ASCIZ \DSK:PRIVATE-MASTER-QUEUE-FILE.QUASAR\>
	ND	SPLSTR,<ASCII/DSK:/>	;SPOOL STRUCTURE
>  ;END OF IFN FTJSYS


;REBUILD CODES
;	A REBUILD CODE IS STORED IN THE FILE INDEX ENTRY FOR EACH REQUEST
;	IN THE MASTER QUEUE FILE.  AT QUASAR INITIALIZATION THE CORRECT
;	ROUTINE IS CALLED WITH THE ENTRY BASED ON THE REBUILD CODE.

	%RBBAT==1			;BATCH JOB (INP, LPT, PLT, ...)
	%RBDEL==2			;DELETED FILES 
SUBTTL	QUASAR Fatal Error Codes

;ARGUMENTS USED ARE

;	X	'SUFFIX' , 'TEXT' , 'ERROR SEVERITY'

;THE EXPANDER IS TO DEFINE THE CORRECT 'X' MACRO

DEFINE	ERRCDS,<
	XLIST

	X	BMG,<Bad MODIFY Group>,MF.FAT
	X	ICM,<Illegal CREATE Message>,MF.FAT
	X	IFS,<Illegal File Specification>,MF.FAT
	X	ILM,<Illegal LIST Message>,MF.FAT
	X	IFD,<Illegally Formatted Device Name>,MF.FAT
	X	IMT,<Illegal Message Type>,MF.FAT
	X	INF,<Illegal Number of Files>,MF.FAT
	X	IPE,<Insufficient Privileges Enabled>,MF.FAT
	X	MTL,<Message Too Long>,MF.FAT
	X	MTS,<Message is Too Short>,MF.FAT
	X	NKC,<Not a Known Component>,MF.FAT
	X	NOR,<Number Out of Range>,MF.FAT
	X	NYO,<Not Your Object>,MF.FAT
	X	SNY,<Specified request is Not Yours>,MF.FAT
	X	UQS,<Unknown Queue Specified>,MF.FAT
	X	UOS,<Unknown Object Specified>,MF.FAT
	X	WVN,<Wrong Version Number>,MF.FAT
	X	IAS,<Invalid Account String Specified>,MF.FAT
	X	OHR,<Operator Has Restricted Queue Entry Commands>,MF.FAT
	X	IMM,<Illegal MOUNT Message>,MF.FAT
	X	MPN,<MOUNT Request Processor Not Running>,MF.FAT
	X	CDU,<Can't Default User Name>,MF.FAT
	X	CDD,<Can't Default Connected Directory>,MF.FAT
	X	NVM,<No Volume Mounted On Drive>,MF.FAT
	X	VAU,<Volume is Already in Use>,MF.FAT
	X	DAU,<Drive is Already in Use>,MF.FAT
	X	VIL,<Volume on Drive is Labeled>,MF.FAT
	X	URB,<User Requested Bypass Label Volumes>,MF.FAT
	X	URL,<User Requested Labeled Volumes>,MF.FAT
	X	URW,<User Requested Write-Locked Volumes>,MF.FAT
	X	URE,<User Requested Write-Enabled Volumes>,MF.FAT
	X	RDD,<Requested Density Does not Match Volume Density>,MF.FAT
	X	VND,<Requested Volume not on this Device>,MF.FAT
	X	IUD,<Illegal For UNAVAILABLE Device>,MF.FAT
	X	NSD,<No Such Device>,MF.FAT
	X	RLD,<Request Label Type Doesn't Match Volume Label Type>,MF.FAT
	X	DAD,<Drive is already available>,MF.FAT
	X	CDA,<Can't Delete an Allocated request>,MF.FAT
	X	CNI,<Command Not Yet Implemented>,MF.FAT
	X	IMO,<Invalid Message from ORION>,MF.FAT
	X	PRB,<Privileges Required for Bypass Label Processing>,MF.FAT
	X	NVI,<VOLID Required for This Volume>,MF.FAT
	X	CIU,<Cannot IDENTIFY the Users Current Volume>,MF.FAT
	X	ICD,<Illegal Connected Directory Specified>,MF.FAT

	LIST
	SALL
>  ;END OF DEFINE ERRCDS

DEFINE X(CODE,STRING,FLAGS),<
	ER$'CODE==..XX
	..XX=..XX+1
>;END DEFINE X

	..XX==1
	ERRCDS				;DEFINE THE ERROR OFFSETS
SUBTTL	Definition of the Known Queues

;ARGUMENTS USED ARE

;	X	'QUENAME' , 'ENTRYSIZE' , 'TYPE' , 'FLAGS' , 'SCHEDULER'

DEFINE	QUEUES,<

	XLIST

	X	INP,QNTSIZ,.QHTIP,0,S$INPT,LIQBAT
	X	LPT,QNTSIZ,.QHTOU,0,S$LPT,LIQLPT
	X	PTP,QNTSIZ,.QHTOU,0,S$PTP,LIQPTP
	X	CDP,QNTSIZ,.QHTOU,0,S$CDP,LIQCDP
	X	PLT,QNTSIZ,.QHTOU,0,S$PLT,LIQPLT
	X	RET,QNTSIZ,.QHTAR,QH.INV,S$RET,LIQRET
	X	NOT,QNTSIZ,.QHTAR,QH.INV,S$NOT,0
	X	BIN,QNTSIZ,.QHTIP,QH.INV,S$BIN,0
	X	XFR,QNTSIZ,.QHTOU,QH.INV,S$XFR,0
	X	DBM,QNTSIZ,.QHTOU,QH.INV,S$DBM,0
	X	RDR,QNTSIZ,.QHFRR,0,S$RDR,0
	X	IPC,IPCSIZ,.QHTQS,QH.IPC!QH.INV,0,0
	X	IPS,IPCSIZ,.QHTQS,QH.IPC!QH.INV,0,0
	X	SPL,SPLSIZ,.QHTQS,QH.INV,0,0
	X	PSB,PSBSIZ,.QHTQS,QH.INV,0,0
	X	OBJ,OBJSIZ,.QHTQS,QH.INV,0,0
	X	USE,USESIZ,.QHTQS,QH.INV,0,0
	X	STR,STRSIZ,.QHTQS,QH.INV,0,0
	X	NET,NETSIZ,.QHTQS,QH.INV,0,0

	LIST

>  ;END OF DEFINE QUEUES

	;DEFINE THOSE QUEUES WHICH ARE DEVICES.

DEFINE	DEVQUE,<
	X	BAT
	X	LPT
	X	CDP
	X	PTP
	X	PLT
	X	MNT
	X	RET
> ;END OF DEVICE QUEUES MACRO

	MAX	<QNTSIZ>	;INCLUDE ANY QUEUE THAT CAN HAVE AFTER OR INUSE
USESIZ==MAXSIZ			;DEFINE LARGEST ENTRY IN USE QUEUE
RDESIZ==MAXSIZ		;DEFINE LARGEST ENTRY IN RDE QUEUE


DEFINE	QUEHDR,<  ;MACRO TO GENERATE THE QUEUE HEADERS FROM THE QUEUES MACRO
	DEFINE	X(A,B,C,D,E,F),<	;DEFINE X FOR THE LATER EXPANSION OF QUEUES
HDR'A::	INSVL.(<SIXBIT\   A\>,QH.NAM)!INSVL.(C,QH.TYP)!D
	EXP	0
	IFDIF	<E> <0> ,<GLOB(E)>
	XWD	E,INSVL.(B,QH.SIZ)
	EXP	F
	EXP	0
	>  ;END OF DEFINE X
	QUEUES			;NOW EXPAND QUEUES
>  ;END OF DEFINE QUEHDR
	SUBTTL	MTCON MOUNT STRUCTURES

	;MOUNT REQUEST (SENT BY USER TO QUASAR)

;	!=======================================================!  /+\
;	\                                                       \   !
;	\                  THE MESSAGE HEADER                   \   !
;	\                                                       \   !
;	!=======================================================!   !
;	!        FLAGS THAT APPLY TO THE ENTIRE MESSAGE         !   !
;	!-------------------------------------------------------!   LM
;	!             SIXBIT NAME OF MOUNT REQUEST              !   !
;	!-------------------------------------------------------!   !
;	!        MOUNT ENTRY COUNT (MUST BE 1 FOR RLS 4)        !   !
;	!=======================================================!   !
;	!                 -----  TOPS 10  -----                 !   !
;	!                                                       !   !
;	!-------------------------------------------------------!   !
;	!                   SIXBIT USER NAME                    !   !
;	!                       (2 WORDS)                       !   !
;	!-------------------------------------------------------!   !
;	!                                                       !   !
;	\                  USER ACCOUNT STRING                  \   !
;	\                       IN ASCIZ                        \   !
;	\                      (10 WORDS)                       \   !
;	!                                                       !   !
;	!=======================================================!  \./

        PHASE MSHSIZ
.MMFLG:! BLOCK  1               ;FLAG WORD FOR MOUNT MESSAGE
	MM.WAT==1B0		;USER IS WAITING FOR IPCF ACK WHEN DONE
	MM.NOT==1B1		;USER WANTS NOTIFICATION VIA TRMOP.
.MMNAM:! BLOCK  1               ;SIXBIT NAME OF MOUNT REQUEST
.MMARC:! BLOCK  1               ;ARGUMENT COUNT FOR MOUNT MESSAGE

TOPS10 <
.MMUSR:! BLOCK	EQNMSZ		;SIXBIT USER NAME
.MMUAS:! BLOCK	10		;ASCIZ USER ACCOUNT STRING
>

.MMHSZ:!                        ;SIZE OF MOUNT MESSAGE HEADER
        DEPHASE
	SUBTTL	MOUNT REQUESTS (WITHIN THE MESSAGE)

;!=======================================================!  /+\
;!     ENTRY LENGTH (LE)     !         TYPE CODE         !   !
;!-------------------------------------------------------!   !
;!                REQUEST-SPECIFIC FLAGS                 !   !
;!-------------------------------------------------------!   !
;!                    SUBENTRY COUNT                     !   !
;!-------------------------------------------------------!   !
;!                     SUBENTRY # 1                      !   !
;!-------------------------------------------------------!   LE
;!                     SUBENTRY # 2                      !   !
;!-------------------------------------------------------!   !
;!                           .                           !   !
;!                           .                           !   !
;!                           .                           !   !
;!-------------------------------------------------------!   !
;!                     SUBENTRY # n                      !   !
;!=======================================================!  \./


        PHASE 0
.MEHDR:! BLOCK  1               ;MOUNT ENTRY HEADER WORD
	  .MNTTP==1		  ;Tape Mount Request Code
	  .MNTST==2		  ;Disk Mount Request Code
	  .DSMST==3		  ;Disk Dismount Request Code
.MEFLG:! BLOCK  1               ;FLAG WORD FOR ENTRY
.MECNT:! BLOCK  1               ;SUBENTRY COUNT
.MEHSZ:!                        ;SIZE OF HEADER
        DEPHASE


        PHASE 0
ARG.HD:! BLOCK  1               ;SUBENTRY HEADER WORD
        AR.LEN=-1,,0            ;LENGTH OF SUBENTRY
        AR.TYP=0,,-1            ;TYPE OF SUBENTRY
ARG.DA:!                        ;START OF DATA AREA
        DEPHASE
	SUBTTL	TAPE MOUNT REQUEST BLOCKS

	.MDINV==0		;BLOCK TYPE 0 IS INVALID

	.TMDEN==1		;MAG TAPE DENSITY CODE (.SJDxx)

;	!-------------------------------------------------------!
;	!	2		!	.TMDEN			!
;	!-------------------------------------------------------!
;	!		The Tape Density Code			!
;	!-------------------------------------------------------!

	.TMDRV==2		;MAG TAPE DRIVE TYPE

;	!-------------------------------------------------------!
;	!	2		!	.TMDRV			!
;	!-------------------------------------------------------!
;	!		.TMDR9 or .TMDR7			!
;	!-------------------------------------------------------!

		.TMDR9==1	;Nine Track Drive
		.TMDR7==2	;Seven Track Drive
		.TMDMX==2	; ?


	.TMLT==3		;Mag TAPE LABEL TYPE

;	!-------------------------------------------------------!
;	!	2		!	.TMLT			!
;	!-------------------------------------------------------!
;	!	.LTUNL or .LTANS or .LTEBC or .LTT20		!
;	!-------------------------------------------------------!


	.TMSET==4		;MAG TAPE SET NAME

;	!-------------------------------------------------------!
;	!	2		!	.TMSET			!
;	!-------------------------------------------------------!
;	!		sixbit Volume Set Name			!
;	!-------------------------------------------------------!


	.TMRMK==5		;Asciz Remark for the Operator

;	!-------------------------------------------------------!
;	!	length		!	.TMRMK			!
;	!-------------------------------------------------------!
;	\							\
;	\		An Asciz remark for the OPR		\
;	\							\
;	!-------------------------------------------------------!


	;CONTINUED ON THE NEXT PAGE
	;CONTINUED FROM THE PREVIOUS PAGE


	.TMSTV==6		;Mag Tape Starting Volume

;	!-------------------------------------------------------!
;	!	2 or 3		!	.TMSTV			!
;	!-------------------------------------------------------!
;	!		Index into Volume set if length = 2	!
;	!-------------------------------------------------------!
;	!	Sixbit volume Id (Length = 3 & word 2 = 0)	!
;	!-------------------------------------------------------!



	.TMVOL==7		;Volume List

;	!-------------------------------------------------------!
;	!	Length		!				!
;	!-------------------------------------------------------!
;	\							\
;	\		Sixbit list of volumes			\
;	\							\
;	!-------------------------------------------------------!


	.TMVPR==10		;Volume Protection code For new volumes

;	!-------------------------------------------------------!
;	!	2		!	.TMVPR			!
;	!-------------------------------------------------------!
;	!	0		!	Protection Code		!
;	!-------------------------------------------------------!


	.TMINI==11		;Volume Initialization Parms

;	!-------------------------------------------------------!
;	!	2 or 3		!	.TMINI			!
;	!-------------------------------------------------------!
;	!		Tape Label Type				!
;	!-------------------------------------------------------!
;	!		User Number (Optional)			!
;	!-------------------------------------------------------!


	;CONTINUED ON THE NEXT PAGE
	;CONTINUED FROM THE PREVIOUS PAGE


	.SMNAM==12		;Disk Structure Name in sixbit

;	!-------------------------------------------------------!
;	!	2		!	.SMNAM			!
;	!-------------------------------------------------------!
;	!		Sixbit Structure Name			!
;	!-------------------------------------------------------!


	.SMALI==13		;Disk Structure Alias Name in sixbit

;	!-------------------------------------------------------!
;	!	2		!	.SMALI			!
;	!-------------------------------------------------------!
;	!		Sixbit Structure Alias			!
;	!-------------------------------------------------------!



	.TMLNM==14		;VOLUME SET LOGICAL NAME

;	!-------------------------------------------------------!
;	!	2		!	.TMLNM			!
;	!-------------------------------------------------------!
;	!		The Logical Volume Set name		!
;	!-------------------------------------------------------!


	%MDMAX==14		;Maximum block number allocated
	SUBTTL	.MEFLG BIT DEFINITIONS


;The following flags may be 
;present in the .MEFLG word of a tape-mount request:

;FLAG  BIT     MEANING
;----  ---     -------
TM%SCR==1B0      ; Request to access temporary volume set.
                 ; Implies TM%NEW, TM%NOV, TM%WEN
                 ; TM%OSV is ignored if set
TM%NEW==1B1      ; Creating new volume set.
                 ; Implies TM%NOV, TM%WEN
TM%VFY==1B2      ; Verify that user-supplied setname
                 ; matches setname of volume(s) being mounted.
                 ; Meaningful for labeled tapes only.
TM%OSV==1B3      ; Operator will be asked to key in list of
                 ; volume identifiers.
TM%WEN==1B4      ; Volume(s) must be mounted write-enabled.
                 ; If reset, must be mounted write-protected.
TM%BYP==1B5      ; If label-type is unlabeled, bypass any label
                 ; security checks.
TM%NUL==1B6      ; Do not unload volumes at volume-switch or
                 ; when DISMOUNT TAPE command given.
	SUBTTL	MOUNT REQUEST

;                   TAPE MOUNT REQUEST
;          IPCF MESSAGE SENT FROM QUASAR TO MTCON
;!=======================================================!
;!   MESSAGE LENGTH (512)    !   MESSAGE TYPE (.QOMNT)   !
;!-------------------------------------------------------!
;!           FLAGS           !       SIXBIT SUFFIX       !
;!-------------------------------------------------------!
;!                  ACKNOWLEDGMENT CODE                  !
;!=======================================================!
;!                                                       !
;\      UNMODIFIED USER IPCF MESSAGE (MINUS HEADER)      \
;!                                                       !
;!-------------------------------------------------------!
;!                                                       !
;\                           0                           \
;!                                                       !
;!-------------------------------------------------------!
;!               INTERNAL TASK NAME (ITN)                !
;!-------------------------------------------------------!
;!                      USER'S PID                       !
;!-------------------------------------------------------!
;!             SIZE OF USER'S MOUNT MESSAGE              !
;!-------------------------------------------------------!
;!         ACK CODE FROM USER'S MESSAGE HANDLER          !
;!-------------------------------------------------------!
;!                  USER'S USER NUMBER                   !
;!-------------------------------------------------------!
;!              USER'S ENABLED CAPABILITIES              !
;!-------------------------------------------------------!
;!                                                       !
;\              USER'S ASCIZ ACCOUNT STRING              \
;!                                                       !
;!=======================================================!

	PHASE	762
.MMUMX:!                        ;MAXIMUM LENGTH OF USER MOUNT MESSAGE
.MMITN:! BLOCK  1               ;INTERNAL TASK NAME ASSIGNED BY QUASAR
.MMPID:! BLOCK  1               ;USER'S PID
.MMUMS:! BLOCK  1               ;SIZE OF USER'S MOUNT MESSAGE
.MMUCD:! BLOCK  1               ;ACK CODE FROM USER'S MESSAGE HEADER
.MMUNO:! BLOCK  1               ;USER'S USER NUMBER
.MMCAP:! BLOCK  1               ;USER'S ENABLED CAPABILITIES
.MMACT:! BLOCK  10              ;USER'S ASCIZ ACCOUNT STRING
        DEPHASE
	SUBTTL	Response to User Tape Mount Request

;After the user process has sent an IPCF message  to  QUASAR  to
;request  a  tape  mount, it will typically wait for a response,
;which will be sent when:
;     1.  QUASAR finds an error while parsing and validating the
;         user request;  the request is aborted.
;     2.  MTCON encounters  a  problem  trying  to  satisfy  the
;         request;  the request is aborted.
;     3.  MTCON  mounts  the  first  volume   of   the   request
;         successfully;   the  response  indicates  a successful
;         mount.

;The mount response message sent by MTCON or QUASAR to the  user
;will have the following format:

;!=======================================================!
;!      MESSAGE LENGTH       !   MESSAGE TYPE (.QOMNA)   !
;!-------------------------------------------------------!
;!           FLAGS           !       SIXBIT SUFFIX       !
;!-------------------------------------------------------!
;!     ACKNOWLEDGMENT CODE FROM USER'S MOUNT REQUEST     !
;!=======================================================!
;!                 FLAGS (NONE DEFINED)                  !
;!-------------------------------------------------------!
;!                      ENTRY COUNT                      !
;!-------------------------------------------------------!
;!                        ENTRY 1                        !
;!-------------------------------------------------------!
;!                           .                           !
;!                           .                           !
;!                           .                           !
;!-------------------------------------------------------!
;!                        ENTRY n                        !
;!=======================================================!


	;DEFINE THE MESSAGE TYPE

	.QOMNA==1		;TAPE MOUNT REQUEST ANSWER


;Either of two responses is conveyed:
;     1.  The request was completed successfully.  The  response
;         contains one .MNRDV and one .MNRTX.
;     2.  The request was aborted.  The  response  contains  one
;         .MNREC and possibly one .MNRTX.
	SUBTTL	MOUNT RESPONSES

;Mount response entry formats are described below:

	.MNREC==2		;Error Code

;     !=======================================================!
;     !        LENGTH (2)         !          .MNREC           !
;     !-------------------------------------------------------!
;     !             0             !    TOPS-20 ERROR CODE     !
;     !=======================================================!

	.MNRDV==1		;Device block

;     !=======================================================!
;     !      LENGTH (2 OR 3)      !          .MNRDV           !
;     !-------------------------------------------------------!
;     !           VOLUME SET NAME OR STRUCTURE NAME           !
;     !-------------------------------------------------------!
;     !       MT DEVICE DESIGNATOR (TAPE REQUESTS ONLY)       !
;     !=======================================================!

	.MNRTX==3		;Asciz Text

;     !=======================================================!
;     !          LENGTH           !          .MNRTX           !
;     !-------------------------------------------------------!
;     !                                                       !
;     \                      ASCIZ TEXT                       \
;     !                                                       !
;     !=======================================================!

	.MNSDV==4		;Sixbit Structure Alias

;	!=======================================================!
;	!	LENGTH		!	   .MNSDV		!
;	!-------------------------------------------------------!
;	!	SIXBIT STRUCTURE NAME				!
;	!=======================================================!

	.MNRNM==5		;Sixbit Mount Request Name

;	!=======================================================!
;	!	LENGTH		1	   .MNRNM		!
;	!-------------------------------------------------------!
;	!	SIXBIT MOUNT REQUEST NAME			!
;	!=======================================================!
	SUBTTL	CANCELING TAPE MOUNT REQUESTS


;Response to User Cancel Request

;MTCON will send the following message to the user PID to convey
;the actions taken as a result of the cancel request:

;!=======================================================!
;!      MESSAGE LENGTH       !   MESSAGE TYPE (.QOMCA)   !
;!-------------------------------------------------------!
;!           FLAGS           !       SIXBIT SUFFIX       !
;!-------------------------------------------------------!
;!     ACKNOWLEDGMENT CODE FROM USER'S MOUNT REQUEST     !
;!=======================================================!
;!                 FLAGS (NONE DEFINED)                  !
;!-------------------------------------------------------!
;!                   ENTRY COUNT                         !
;!=======================================================!

        PHASE MSHSIZ
.OFLAG:! BLOCK  1               ;FLAG WORD
.OARGC:! BLOCK  1               ;ENTRY COUNT
.OHDRS:!                        ;SIZE OF RESPONSE MESSAGE HEADER
        DEPHASE
	SUBTTL	ABORT MSG FROM QUASAR TO MTCON


	;THIS MESSAGE IS SENT BY QUASAR TO MTCON WHEN A USER
	;CANCELS 1 OR MORE OF HIS MOUNT REQUESTS


;!=====================================================	!
;!   MESSAGE LENGTH	!  MESSAGE TYPE (.QOMTA)	!
;!------------------------------------------------------!
;!	FLAGS		!	SUFFIX			!
;!------------------------------------------------------!
;!	    ACKNOWLEDGEMENT CODE			!
;!------------------------------------------------------!
;!		FLAG WORD (NONE)			!
;!------------------------------------------------------!
;!		ARGUMENT COUNT				!
;!------------------------------------------------------!
;!    ENTRY LENGTH	!   ENTRY TYPE (.MTPID)		!
;!------------------------------------------------------!
;!		    USERS PID				!
;!------------------------------------------------------!
;!    ENTRY LENGTH	!   ENTRY TYPE (.MTITN)		!
;!------------------------------------------------------!
;!		      ITN				!
;!------------------------------------------------------!
;!		      ITN				!
;!------------------------------------------------------!

;			ETC


;	THE MESSAGE BLOCK TYPES ARE:

	.MTPID==1	;USERS PID
	.MTITN==2	;A LIST OF ITN'S TO CANCEL
	SUBTTL	MOUNT RELEASE MESSAGE
;When  a  request  completes,  MTCON  notifies  the   user   (if
;appropriate)  and  sends  a  RELEASE message to QUASAR for that
;request.

;           RELEASE MESSAGE FROM MTCON TO QUASAR

;!=======================================================!
;!      MESSAGE LENGTH       !   MESSAGE TYPE (.QOREL)   !
;!-------------------------------------------------------!
;!           FLAGS           !       SIXBIT SUFFIX       !
;!-------------------------------------------------------!
;!                  ACKNOWLEDGMENT CODE                  !
;!=======================================================!
;!             INTERNAL TASK NAME OF REQUEST             !
;!=======================================================!




	;CHECKPOINT MESSAGE DEFINITIONS

	;THESE DEFINE THE OFFSETS INTO THE CHE.IN BLOCK OF THE
	;TAPE/DISK CHECKPOINT MESSAGE

	.MTSTA==0		;CHECKPOINT STATUS INFORMATION
	.MTVOL==1		;CHECKPOINT VOLUME INFORMATION
	  %VOLBL==0		;NO VOLUME PRESENT
	  %VOLSC==1		;SCRATCH VOLUME
	  			;WORD MAY ALSO CONTAIN A SIXBIT VOLUME ID
	.MTTYP==2		;CHECKPOINT VOLUME TYPE
				;SEE THE MOUNT REQUEST BLOCK CODES FOR TYPES
	SUBTTL	QUASAR TAPE MOUNT REQUEST QUEUE STRUCTURE

;	!=======================================================!
;	!		36 BIT USER ID				!
;	!-------------------------------------------------------!
;	/		ASCIZ USER NAME				/
;	/							/
;	!-------------------------------------------------------!
;	!	FLAGS		!	USERS JOB NUMBER	!
;	!-------------------------------------------------------!
;	!		SIXBIT REQUEST NAME			!
;	!-------------------------------------------------------!
;	/							/
;	/		USERS ASCIZ ACCOUNT STRING		/
;	/							/
;	!-------------------------------------------------------!
;	!		   USERS PID #				!
;	!-------------------------------------------------------!
;	!	# OF VSL'S	!	REQUEST ID		!
;	!-------------------------------------------------------!
;	/							/
;	/		POINTERS TO THE VOLUME			/
;	/		     SET LISTS				/
;	/							/
;	!-------------------------------------------------------!




		PHASE	0

	.MRUSR:! BLOCK	1	;36 BIT USER ID OR PPN (-10)
	.MRNAM:! BLOCK	EQNMSZ	;USER NAME (ASCIZ -20, SIXBIT -10)
	.MRJOB:! BLOCK	1	;USERS JOB NUMBER,,CAPABILITIES (IPCF MDB.PV)
	.MRREQ:! BLOCK	1	;SIXBIT REQUEST NAME
	.MRACT:! BLOCK	10	;USERS ACCOUNT STRING
	.MRPID:! BLOCK	1	;REQUESTORS PID
	.MRFLG:! BLOCK	1	;FLAG BITS FOR THIS MDR
	  MR.WAT==1B0		;SENDER IS WAITING FOR IPCF ACK WHEN DONE
	  MR.NOT==1B1		;SENDER WANTS NOTIFICATION BY TRMOP.
	.MRLOG:! BLOCK	1	;UNIVERSAL TIME OF LOGIN
	.MRRID:! BLOCK	1	;VOL SET COUNT,,REQUEST ID
	  MR.RID==0,,-1		  ;REQUEST-ID IN THE RIGHT HALF
	  MR.CNT==-1,,0		  ;VOLUME SET COUNT IN THE LEFT HALF
	.MRVSL:! BLOCK	1	;POINTERS TO THE VOLUME SET LISTS (MINIMUM 1)

	MDRLEN:!		;MINIMUM MDR QUEUE LENGTH

		DEPHASE
	SUBTTL	VOLUME SET LIST (VSL) STRUCTURE

;	!-------------------------------------------------------!
;	!                    POINTER TO MDR                     !
;	!-------------------------------------------------------!
;	!                       FLAG WORD                       !
;	!-------------------------------------------------------!
;	!         # TRACKS          !          DENSITY          !
;	!-------------------------------------------------------!
;	!                    VOLUME SET NAME                    !
;	!-------------------------------------------------------!
;	/                                                       /
;	/                 USER'S ASCIZ REMARKS                  /
;	/                                                       /
;	!-------------------------------------------------------!
;	!                VOLUME SET LOGICAL NAME                !
;	!-------------------------------------------------------!
;	!       VOLUME COUNT        !       VOLUME OFFSET       !
;	!-------------------------------------------------------!
;	!                POINTERS TO VOLUME LIST                !
;	!-------------------------------------------------------!

		PHASE	0

	.VSMDR:! BLOCK	1	;POINTER TO THE CONTROLLING MDR
	.VSFLG:! BLOCK	1	;MOUNT FLAG WORD 
	   VS.TMP==1B1		  ;THIS IS A TEMPORARY VOLUME SET
	   VS.NEW==1B2		  ;THIS IS A NEW VOLUME SET
	   VS.VFY==1B3		  ;WANT TO VERIFY VOLUME SET NAMES
	   VS.OPR==1B4		  ;OPR WILL BE ASKED FOR VOLUME SET LIST
	   VS.WLK==1B5		  ;0=WRITE ENABLED, 1=WRITE LOCKED
	   VS.NUL==1B6		  ;DONT UNLOAD TAPE ON DISMOUNT/VOL SWITCH
	   VS.TYP==7B9		  ;VOLUME TYPE 1=TAPE, 2=STRUCTURE, 3=DECTAPE
	     %TAPE==1		    ;THIS IS A TAPE MOUNT REQUEST
	     %DISK==2		    ;THIS IS A STRUCTURE MOUNT REQUEST
	     %DTAP==3		    ;THIS IS A DECTAPE MOUNT REQUEST
	     %DSMT==4		    ;THIS IS A DISMOUNT REQUEST
	   VS.LBT==17B13	  ;VOLUME LABEL TYPE FOR LABEL PROCESSING
	   VS.VSW==1B14		  ;Volume Switch in Progress
	.VSATR:! BLOCK	1	;MOUNT REQUEST ATTRIBUTES
	   VS.TRK==-1,,0	   ;TRACKS
	   VS.DEN==0,,-1	   ;DENSITY
	.VSVSN:! BLOCK	VSNLEN	;ASCIZ VOLUME SET NAME
	.VSREM:! BLOCK	^D12	;ASCIZ USER REMARKS (59 CHARS MAX)
	.VSLNM:! BLOCK	1	;VOLUME SET LOGICAL NAME (-10 ONLY)
	.VSUCB:! BLOCK	1	;POINTER TO LAST DEVICE ALLOCATED TO THIS VSL
	.VSCVL:! BLOCK	1	;VOL COUNT,,OFFSET TO THE CURRENT VOLUME
	   VS.OFF==0,,777000	  ;OFFSET TO THE CURRENT VOLUME
	   VS.LVL==0,,000777	  ;OFFSET TO LAST VOLUME USED
	   VS.CNT==-1,,0	  ;VOLUME COUNT
	.VSVOL:! BLOCK	1	;POINTERS TO THE VOLUME LIST

	VSLLEN:!		;MINIMUM LENGTH OF A VSL

		DEPHASE
	SUBTTL	VOLUME LIST STRUCTURE (VOL)



;	!-------------------------------------------------------!
;	!		SIXBIT VOLUME NAME			!
;	!-------------------------------------------------------!
;	!		VOLUME FLAG BITS			!
;	!-------------------------------------------------------!
;	!       MOUNT COUNT         !       OWNER OFFSET        !
;	!-------------------------------------------------------!
;	!		POINTER TO THE UCB			!
;	!-------------------------------------------------------!
;	/							/
;	/		POINTER(S) TO THE VSL(S)                /
;	/							/
;	!-------------------------------------------------------!

		PHASE	0

	.VLNAM:! BLOCK	1		;VOLUME NAME
	.VLFLG:! BLOCK	1		;VOLUME FLAG BITS
	   VL.STA==7B2			  ;VOLUME STATUS
	     %STAWT==0			    ;VOLUME IS WAITING
	     %STAAB==1			    ;VOLUME USE HAS BEEN ABORTED
	     %STAMN==2			    ;VOLUME IS MOUNTED
	     %STADM==3			    ;VOLUME IS TO BE DISMOUNTED
	   VL.SCR==1B3			  ;VOLUME IS A SCRATCH VOLUME
	   VL.SHR==1B4			  ;VOLUME IS TO BE SHARED (DISK ONLY)
	   VL.DEN==7B7			  ;VOLUME DENSITY
	   VL.LBT==17B11		  ;VOLUME LABEL TYPE
	.VLOWN:! BLOCK	1		;COUNT OF REQUESTORS,,OFFSET TO OWNER
	   VL.OFF==0,,-1		  ;OFFSET INTO .VLVSL FOR CURRENT OWNER
	   VL.CNT==-1,,0		  ;NUMBER OF REQUESTORS FOR THIS VOLUME
	.VLUCB:! BLOCK	1		;POINTER TO THE UCB
	.VLVSL:! BLOCK	1		;POINTER(S) TO THE VSL(S)

	VOLLEN:!			;MINIMUM VOLUME ENTRY LENGTH

		DEPHASE
	SUBTTL	UNIT CONTROL BLOCK STRUCTURE


;	!===============================================================!
;	!		    Device Name (Sixbit)			!
;	!---------------------------------------------------------------!
;	!		    Device Status Bits				!
;	!---------------------------------------------------------------!
;	!		     User Mount Count				!
;	!---------------------------------------------------------------!
;	!		      Volume Pointer				!
;	!===============================================================!



		PHASE	0

	.UCBNM:! BLOCK	1		;DEVICE NAME IN SIXBIT
	.UCBST:! BLOCK	1		;DEVICE STATUS BITS
	    UC.TRK==1B1			  ;TRACK STATUS 0=7TRK, 1=9TRK
	    UC.200==1B2			  ;DEVICE SUPPORTS 200 BPI
	    UC.556==1B3			  ;DEVICE SUPPORTS 556 BPI
	    UC.800==1B4			  ;DEVICE SUPPORTS 800 BPI
	    UC.1600==1B5		  ;DEVICE SUPPORTS 1600 BPI
	    UC.6250==1B6		  ;DEVICE SUPPORTS 6250 BPI
	    UC.AVR==1B7			  ;AVR BIT 1=ENABLED
	    UC.WLK==1B8			  ;UNIT WRITE LOCKED 1=LOCKED
	    UC.OFL==1B9			  ;UNIT IS OFFLINE 1=OFFLINE
	    UC.DVT==7B12		  ;UNIT DEV TYPE (%TAPE, %DISK, %DTAPE)
	    UC.KTP==7B15		  ;UNIT CONTROLLER TYPE
	    UC.AVA==1B16		  ;UNIT IS AVAILABLE FOR USE BY MDA
	    UC.VSW==1B17		  ;Ucb is in Volume Switch State
	.UCBCN:! BLOCK	1		;USER MOUNT COUNT
	.UCBVL:! BLOCK	1		;PTR TO VOLUME MOUNTED ON THIS DEVICE
	.UCBVS:! BLOCK	1		;POINTER TO THE VSL WHICH OWNS THIS UCB

	UCBLEN:!			;A UCB LENGTH

		DEPHASE
	SUBTTL  REQUEST FOR MOUNT ATTRIBUTES

;THIS IS A REQUEST TO QUASAR (ACTUALLY MTCON) FROM A USER TO RETURN
;ATTRIBUTES OF A MOUNTED DEVICE.  THE MESSAGE SENT BY THE USER
;CONTAINS ONLY THE HEADER AND THE DEVICE DESIGNATOR.  QUASAR
;ADDS THE PID AND CAPABILITIES WORDS AND PASSES THE MESSAGE TO
;MTCON, WHO THEN SENDS A REPLY TO THE USER'S PID.

;!=======================================================!
;!      MESSAGE LENGTH       !     MSG TYPE (.QOMAT)     !
;!-------------------------------------------------------!
;!                         FLAGS                         !
;!-------------------------------------------------------!
;!              USER'S ACKNOWLEDGMENT CODE               !
;!=======================================================!
;!                   DEVICE DESIGNATOR                   !
;!-------------------------------------------------------!
;!                      USER'S PID                       !
;!-------------------------------------------------------!
;!     USER CAPABILITIES     !        USER JOB #         !
;!=======================================================!

	PHASE MSHSIZ

.MATDV:! BLOCK	1		;DEVICE DESIGNATOR
.MATUS:!			;SIZE OF USER ATTRIBUTE REQUEST MESSAGE
.MATPD:! BLOCK	1		;USER'S PID
.MATCP:! BLOCK	1		;USER'S CAPABILITIES AND JOB NUMBER
.MATQS:! 			;SIZE OF QUASAR-TO-MTCON MESSAGE

	DEPHASE
	SUBTTL  RESPONSE TO REQUEST FOR MOUNT ATTRIBUTES

;!=======================================================!
;!      MESSAGE LENGTH       !   MESSAGE TYPE (.QOMAR)   !
;!-------------------------------------------------------!
;!                         FLAGS                         !
;!-------------------------------------------------------!
;!              USER'S ACKNOWLEDGMENT CODE               !
;!=======================================================!
;!                 FLAGS (NONE DEFINED)                  !
;!-------------------------------------------------------!
;!                      ENTRY COUNT                      !
;!-------------------------------------------------------!
;!                        ENTRY 1                        !
;!-------------------------------------------------------!
;!                           .                           !
;!                           .                           !
;!                           .                           !
;!-------------------------------------------------------!
;!                        ENTRY n                        !
;!=======================================================!


	;DEFINE THE MESSAGE TYPE

	.QOMAR==2		;TAPE MOUNT ATTRIBUTES ANSWER


;EACH ENTRY CONSISTS OF A 1-WORD HEADER (LENGTH IN LEFT HALF, TYPE
;IN RIGHT HALF) FOLLOWED BY THE ENTRY-SPECIFIC INFORMATION. THE
;FOLLOWING ENTRIES ARE RETURNED FOR MAGTAPE DEVICES:

;.TMVOL		LIST OF SIXBIT VOLIDS

;.TMSET		SIXBIT SETNAME

;.MATDD		DESIGNATOR OF MT DEVICE

.MATDD==100
SUBTTL  The ARCHIVE Message - Function 41 (sent by IPCC)

TOPS20 <

	PHASE 0
ARC.HD:!BLOCK	1		; Header

ARC.FN:!BLOCK	1		; Function and reason for message
	AR.FNC==0,,-1		; Function code
	AR.MOD==-1,,0		; Function modifier (reason)

ARC.PR:!BLOCK	1		; Protection of file
	AR.PRT==0,,-1		; LH is unused

ARC.T1:!BLOCK	1		; Tape ID #1

ARC.N1:!BLOCK	1		; Further tape #1 info
	AR.TSN==-1,,0		; Tape saveset number
	AR.TFN==0,,-1		; Tape file number

ARC.T2:!BLOCK	1		; Tape ID #2

ARC.N2:!BLOCK	1		; Saveset and file nos. for tape #2

ARC.TT:!BLOCK	1		; TAD file written to tape

ARC.AS:!BLOCK	10		; Account string

ARC.FL:!			; File name begins here

ARC.SZ:!			; Minimum size of ARCHIVE msg

	DEPHASE

>  ;END TOPS20 CODE
	END