Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-08 - 43,50512/ipcf.req
There are no other files named ipcf.req in the archive.
!FTIPC will control the compilation of the extra four IPC-added
!	words of the external queue entry.
!	The default compilation is FTIPC = 0 (off).
!Compile with /VARIANT:4 for IPC features
%IF (%VARIANT AND %O'4') EQL %O'4' %THEN COMPILETIME FTIPC=1; %FI
%IF NOT %DECLARED (FTIPC) %THEN COMPILETIME  FTIPC = 0 %FI ;

!FTUUOS and FTJSYS will control the compilation of operating-system
!	dependant portions of the QUASAR message blocks
!	Only ONE of them will be non-zero at any time.
%IF NOT %DECLARED (FTUUOS) %THEN COMPILETIME FTUUOS = 1 %FI ;
%IF NOT %DECLARED (FTJSYS) %THEN COMPILETIME FTJSYS = 0 %FI ;
%IF (FTUUOS AND FTJSYS) %THEN
	%ERROR 'COMPILATION WITH BOTH FTUUOS AND FTJSYS ON' %FI ;
%IF (%VARIANT AND %O'400') EQL 0
	%THEN %IF FTIPC %THEN %INFORM ('IPCF.REQ with IPC modifications')
	%FI
%FI
LITERAL IPCF_VARIANT=%VARIANT;
	!So we can make sure we got the right set of conditionals

!The TENBITS MACRO allows easy referencing of unsigned PDP-10 bit fields
!	The X,Y are PDP-10 bit numbers (0-35, left to right)
!	If Y is omitted, a 1 bit field on bit X is assumed
MACRO TENBITS(X,Y)=%IF %NULL (Y) %THEN 35-X, 1 %ELSE 35-Y, Y-X+1 %FI ,0 %;

!The fields for a packet header follow
PHASE (0);
FIELD IPCF$FIELD = SET
DFF [IPCF$FLAGS,THISWORD,WRD],			!The whole flags word
 DFF [IPCF$NON_BLOCK,THISWORD,TENBITS(0)],	!Don't block if input Q is empty on RECIEVE
 DFF [IPCF$IND_PID_S,THISWORD,TENBITS(1)],	!SEND_PID is adrs of PID
 DFF [IPCF$IND_PID_R,THISWORD,TENBITS(2)],	!RECV_PID is adrs of PID
 DFF [IPCF$SEND_MORE,THISWORD,TENBITS(3)],	!Allow 1 more send over quota
 DFF [IPCF$TRUNC,THISWORD,TENBITS(4)],		!Truncate recieve if not enough room
 DFF [IPCF$SEN_LARGE,THISWORD,TENBITS(5)],	!Priv process may send larger than max message
 DFF [IPCF$RES_DEC_1,THISWORD,TENBITS(6,17)],	!Reserved for DEC
 DFF [IPCF$PRV_PACK,THISWORD,TENBITS(18)],	!Priveledged info in this packet
 DFF [IPCF$PAGE_PACK,THISWORD,TENBITS(19)],	!This packet is a page of data
 DFF [IPCF$ZERO_LEN,THISWORD,TENBITS(20)],	!No data, (zero length packet)
 DFF [IPCF$ANSWER_ME,THISWORD,TENBITS(21)],	!Request receiver to ack this msg
 DFF [IPCF$RES_DEC_2,THISWORD,TENBITS(22,23)],	!Reserved for DEC
 DFF [IPCF$PROC_ERR,THISWORD,TENBITS(24,29)],	!Error code from priveledged process
 DFF [IPCF$SYS_SENDER,THISWORD,TENBITS(30,32)],	!Who sent this message
 DFF [IPCF$CFM,THISWORD,TENBITS(33,35)],	!???
DFF [IPCF$SEND_PID,NEXTWORD,WRD],		!Sender's PID
DFF [IPCF$RECV_PID,NEXTWORD,WRD],		!Receiver's PID
DFF [IPCF$MSG_LEN,NEXTWORD,LH],			!Length of message (words)
 DFF [IPCF$MSG_ADR,THISWORD,RH],		!Adrs of message (adrs or page)
 DFF [IPCF$MSG_NWAIT,THISWORD,RH],		!Alternate, number of msgs in Q on query
DFF [IPCF$PPN,NEXTWORD,WRD],			!PPN of sender
DFF [IPCF$CAPA,NEXTWORD,WRD],			!Capabilities of sender
 DFF [IPCF$JACCT,THISWORD,TENBITS(0)],		!Sender is privd
 DFF [IPCF$LOGGED_IN,THISWORD,TENBITS(1)],	!Sender is logged in
 DFF [IPCF$XCT_ONLY,THISWORD,TENBITS(2)],	!Sender is execute only job
 DFF [IPCF$POKE,THISWORD,TENBITS(3)],		!Sender has POKE. privs
 DFF [IPCF$IPC_PRIV,THISWORD,TENBITS(4)],	!Sender has IPCF global privs
 DFF [IPCF$RES_DEC_3,THISWORD,TENBITS(5,17)],	!Reserved
 DFF [IPCF$JOB_NUM,THISWORD,RH]			!Senders job number
TES;
DLIT (IPCF$HEADER_LEN, NEXTWORD);		!Length of the block
MACRO IPCF_HEADER = BLOCK [IPCF$HEADER_LEN] FIELD (IPCF$FIELD) %;

!*** End of IPCF definitions

!*** start of QUASAR definitions

!The first thing we define is the version of the request block
!	that we will deal with
DLIT (QSRVER,%IF FTIPC %THEN %O'633' %ELSE %O'33' %FI);
!IPC version # is different

!Define the fields for a KILL or MODIFY request descriptor block (RDB)
PHASE (-1);
FIELD QSR$RDB_FIELD = SET
%IF FTIPC %THEN
DFF [QSR$RDB_DEV,NEXTWORD,WRD],			!Device
%FI
DFF [QSR$RDB_JOB,NEXTWORD,WRD],			!Jobname (SIXBIT)
DFF [QSR$RDB_JOBMSK,NEXTWORD,WRD],		!Jobname mask
DFF [QSR$RDB_SEQ,NEXTWORD,WRD],			!External sequence number
%IF FTUUOS
%THEN
DFF [QSR$RDB_PPN,NEXTWORD,WRD],			!Owner ID (ppn)
DFF [QSR$RDB_PPNMSK,NEXTWORD,WRD]		!Owner ID mask
%ELSE
DFF [QSR$RDB_ONWER,MWORDS(%O'10'),WRD]		!Request owner spec
%FI
TES;
DLIT (QSR$RDB_SIZE,NEXTWORD);			!Size of the block
MACRO QSR$RDB = BLOCK [QSR$RDB_SIZE] FIELD (QSR$RDB_FIELD) %;

!Define the message header for a QUASAR-bound packet
PHASE (0);
FIELD QSR$MSG_FIELD = SET
DFF [QSR$MSTYP,THISWORD,WRD],			!The type of message (whole word)
 DFF [QSR$MS_ACK,THISWORD,TENBITS(0)],		!Sender wants a response
 DFF [QSR$MS_CNT,THISWORD,TENBITS(1,17)],	!Length of message (including this word)
 DFF [QSR$MS_TYP,THISWORD,RH]			!Operation code
TES;
DLIT (QSR$MSHSIZ ,NEXTWORD);			!The size of the header
MACRO QSR$HEADER = BLOCK [QSR$MSHSIZ] FIELD (QSR$MSG_FIELD) %;
!Allowed values of the MS_TYP field follow:
LITERAL
	QSR$MS_HELLO = %O'1',
	QSR$MS_RELEASE = %O'2',
	QSR$MS_CHECKP = %O'3',
	QSR$MS_REQUE = %O'4',
	QSR$MS_NEXTJOB = %O'5',
	QSR$MS_ABORT = %O'6',
	QSR$MS_CREATE = %O'7',
	QSR$MS_LIST = %O'10',
	QSR$MS_MODIFY = %O'11',
	QSR$MS_KILL = %O'12',
	QSR$MS_ANSWER = %O'13',
	QSR$MS_TEXT = %O'14',
	QSR$MS_CHK_REQ = %O'15',
	QSR$MS_DEFER = %O'16',
	QSR$MS_REROUTE = %O'17',
	QSR$MS_CNT_MSG = %O'20',
	QSR$MS_CNT_ANS = %O'21';

!Define the fields for an external queue entry
PHASE (QSR$MSHSIZ);
FIELD QSR$EQ_FIELD = SET
DFF [QSR$EQ_TASK,THISWORD,WRD],			!Internal task name
DFF [QSR$EQ_VERS,NEXTWORD,LH],			!Version of this block (%%.QSR)
 DFF [QSR$EQ_LENGTH,THISWORD,RH],		!Length of header (exclude file info)
DFF [QSR$EQ_DEVICE,NEXTWORD,WRD],		!Device (SIXBIT)
DFF [QSR$EQ_JOBNAME,NEXTWORD,WRD],		!Job name (SIXBIT)
DFF [QSR$EQ_EXTERN,NEXTWORD,WRD],		!External value word
 DFF [QSR$EQ_SEQ,THISWORD,LH],			!External sequence number
 DFF [QSR$EQ_STATION,THISWORD,TENBITS(18,23)],	!Default station (JBTLOC(J))
 DFF [QSR$EQ_PRIV,THISWORD,TENBITS(27)],	!Request creator was priv'd
 DFF [QSR$EQ_SPL,THISWORD,TENBITS(28)],		!Request contains spooled files
 DFF [QSR$EQ_RDE,THISWORD,TENBITS(29)],		!Request doesn't exist
 DFF [QSR$EQ_PRIOR,THISWORD,TENBITS(30,35)],	!External priority in Q
DFF [QSR$EQ_FILE,NEXTWORD,WRD],			!File spec word
 DFF [QSR$EQ_PROT,THISWORD,LH],			!Request protection
 DFF [QSR$EQ_NUMFIL,THISWORD,RH],		!Number of files in request
DFF [QSR$EQ_AFTER,NEXTWORD,WRD],		!After time (internal fmt)
DFF [QSR$EQ_DEADLN,NEXTWORD,WRD],		!Deadline time (internal fmt)
DFF [QSR$EQ_LM1,NEXTWORD,WRD],			!First limit word
 DFF [QSR$EQ_FORMS,THISWORD,WRD],		!For output, forms type (SIXBIT?)
 DFF [QSR$EQ_NOREST,THISWORD,TENBITS(0)],	!The non-restartable bit
 DFF [QSR$EQ_DEPEND,THISWORD,RH],		!The dependency count
 DFF [QSR$EQ_UNIQUE,THISWORD,TENBITS(1,2)],	!The /UNIQUE value
 DFF [QSR$EQ_OUTPUT,THISWORD,TENBITS(6,8)],	!The /OUTPUT value
 DFF [QSR$EQ_NODE,THISWORD,WRD],		!We will store the ndoe name here
DFF [QSR$EQ_LM2,NEXTWORD,WRD],			!Second limit word
 DFF [QSR$EQ_BLOCKS,THISWORD,LH],		!Output: number of blocks in req
 DFF [QSR$EQ_PAGES,THISWORD,RH],		!Output: page limit
 DFF [QSR$EQ_CORE,THISWORD,LH],			!Input: core limit (in pages)
 DFF [QSR$EQ_TIME,THISWORD,RH],			!Input:time limit (seconds)
 DFF [QSR$EQ_RJOB,THISWORD,TENBITS(0,8)],	!The requestor's job number
 DFF [QSR$EQ_FUNC,THISWORD,TENBITS(9,17)],	!The Function code (send, retrieive)
 DFF [QSR$EQ_RMCVER,THISWORD,RH],		!The requesting RMCOPY version #
DFF [QSR$EQ_LM3,NEXTWORD,WRD],			!Third limit word
 DFF [QSR$EQ_NOTE1,THISWORD,WRD],		!Output: first half of /NOTE:
 DFF [QSR$EQ_LPTLIM,THISWORD,LH],		!Input: lpt page request limit
 DFF [QSR$EQ_CDPLIM,THISWORD,RH],		!Input: CDP card request limit
 DFF [QSR$EQ_LIMIT,THISWORD,LH],		!NET - Limit in blocks
 DFF [QSR$EQ_OPTIONS,THISWORD,RH],		!The option bits (/ASCII, etc)
DFF [QSR$EQ_LM4,NEXTWORD,WRD],			!Fourth limit word
 DFF [QSR$EQ_NOTE2,THISWORD,WRD],		!Output: second half of /NOTE:
 DFF [QSR$EQ_PTPLIM,THISWORD,LH],		!Input: PTP request limit (feet?)
 DFF [QSR$EQ_PLTLIM,THISWORD,RH],		!Input: PLT request limit (seconds?)
 DFF [QSR$EQ_RPROT,THISWORD,WRD],		!NET- Destination file protection
  DFF [QSR$EQ_RPROT_SY,THISWORD,TENBITS(0,8)],	!'System'
  DFF [QSR$EQ_RPROT_OW,THISWORD,TENBITS(9,17)],	!'Owner'
  DFF [QSR$EQ_RPROT_GR,THISWORD,TENBITS(18,26)],!'Group'
  DFF [QSR$EQ_RPROT_WO,THISWORD,TENBITS(27,35)],!'World'
  DFF [QSR$EQ_RPROT_WD,THISWORD,TENBITS(27,35)],!'World'
DFF [QSR$EQ_LM5,NEXTWORD,WRD],			!Fifth limit word, extra
 DFF [QSR$EQ_RUNSYS,THISWORD,WRD],		!SIXBIT runtime system name
DFF [QSR$EQ_CHKREQ,MWORDS(5),WRD],		!Start of checkpoint/reque info
						!5 words block
DFF [QSR$EQ_ACCT,MWORDS(%O'10'),WRD],		!Start of accounting info
%IF FTIPC %THEN
DFF [QSR$EQ_LOC,NEXTWORD,WRD],			!Delivery location (SIXBIT)
DFF [QSR$EQ_SLOT,NEXTWORD,WRD],			!Slot name (SIXBIT)
DFF [QSR$EQ_BUILDING,NEXTWORD,WRD],		!Sixbit building name
DFF [QSR$EQ_SLOT_NO,NEXTWORD,WRD],		!Slot number
DFF [QSR$EQ_CHARGE,NEXTWORD,WRD],		!Charge number
DFF [QSR$EQ_IPC,NEXTWORD,WRD],			!Misc IPC bits
 DFF [QSR$EQ_STN,THISWORD,TENBITS(0,6)],	!Station for INPnnn:
 DFF [QSR$EQ_DEFLOG,THISWORD,TENBITS(7)],	!Default logfile bit
%FI
%IF FTUUOS %THEN
DFF [QSR$EQ_USER,NEXTWORD,WRD],			!The user name
DFF [QSR$EQ_USER2,NEXTWORD,WRD],		!Second half
DFF [QSR$EQ_OWNER,NEXTWORD,WRD]			!The ppn
%FI
TES;
DLIT (QSR$EQ_SIZE, NEXTWORD);
! End of QSR$EQ_FIELD definition
MACRO QSR_EQ = BLOCK [QSR$EQ_SIZE] FIELD (QSR$MSG_FIELD,QSR$EQ_FIELD) %;

!Define the FP (file-parameter) area fields
PHASE(0);					!FPs are appended to messages
FIELD QSR$FP_FIELD = SET
DFF [QSR$FP_SIZEW,THISWORD,WRD],		!The size info word
 DFF [QSR$FP_FPSZ,THISWORD,LH],			!Size of the parameter area
 DFF [QSR$FP_FDSZ,THISWORD,RH],			!Size of the descriptor area
DFF [QSR$FP_INFO,NEXTWORD,WRD],			!The parameter info word
 DFF [QSR$FP_FMT,THISWORD,TENBITS(0,5)],	!File format
 DFF [QSR$FP_PAPER,THISWORD,TENBITS(6,11)],	!Paper format
 DFF [QSR$FP_SPAC,THISWORD,TENBITS(12,17)],	!Spacing code
 DFF [QSR$FP_DEL,THISWORD,TENBITS(18)],		!On==> delete this file
 DFF [QSR$FP_FLG,THISWORD,TENBITS(19)],		!This is the log file
 DFF [QSR$FP_NFH,THISWORD,TENBITS(20)],		!No file headers
   DFF[QSR$FP_LOCAL,%FIELDEXPAND(QSR$FP_NFH)],	!This is a local filspc
 DFF [QSR$FP_SPL,THISWORD,TENBITS(21)],		!This is a spooled file
 DFF [QSR$FP_IGN,THISWORD,TENBITS(21)],		!Ignore file (/REMOVE)
 DFF [QSR$FP_XXX,THISWORD,TENBITS(22,26)],	!Extra bits
 DFF [QSR$FP_COPY,THISWORD,TENBITS(27,35)],	!Copy count... and
 DFF [QSR$FP_DAP,THISWORD,TENBITS(27,35)],	!The DAP file-sys type
DFF [QSR$FP_START,NEXTWORD,WRD],		!Starting point info
DFF [QSR$FP_REP1,NEXTWORD,WRD],			!/REPORT word 1
DFF [QSR$FP_REP2,NEXTWORD,WRD]			!/REPORT word 2
TES;
DLIT (QSR$FP_SIZE,NEXTWORD);
!End of FP area field definitions
MACRO QSR$FP = BLOCK [QSR$FP_SIZE] FIELD (QSR$FP_FIELD) %;

!Define the FD (file-descriptor) area for either operating system
%IF FTUUOS %THEN
PHASE (0);
FIELD QSR$FD_FIELD = SET
DFF [QSR$FD_STR,THISWORD,WRD],			!Structure containing the file
DFF [QSR$FD_NAM,NEXTWORD,WRD],			!Name of the file
DFF [QSR$FD_EXT,NEXTWORD,LH],			!Extension
DFF [QSR$FD_PPN,NEXTWORD,WRD],			!Owner
DFF [QSR$FD_PATH,MWORDS(SFDMAX),WRD]		!path spec
TES;
DLIT (QSR$FD_SIZE, NEXTWORD);			!This is the size
MACRO QSR$FD = BLOCK [QSR$FD_SIZE] FIELD (QSR$FD_FIELD) %;
%FI

!Define the fields for the QUASAR LIST message, (function 10)
PHASE (QSR$MSHSIZ);
FIELD QSR$LIST_FIELD = SET
DFF [QSR$LIST_QNAM,THISWORD,WRD],		!adrs of word
 DFF [QSR$LIST_QUE,THISWORD,LH]			!The 3 SIXBIT chars of the Q name
%IF FTIPC %THEN ,
DFF[QSR$LIST_RDB,MWORDS(QSR$RDB_SIZE),WRD]	!Request descriptor block
%FI
TES;
DLIT (QSR$LIST_SIZE, NEXTWORD);		!The size of the message
MACRO QSR$MSG_LIST = BLOCK [QSR$LIST_SIZE] FIELD (QSR$MSG_FIELD,QSR$LIST_FIELD) %;
!Define the fields for the Kill request message (function 12)
PHASE (QSR$MSHSIZ);
FIELD QSR$KILL_FIELD = SET
DFF [QSR$KILL_QNAM,THISWORD,WRD],		!The specified Q name
 DFF [QSR$KILL_GQNAM,THISWORD,LH]		!The LPT of LPTnnn
TES;
DLIT(QSR$KILL_RDB,(MWORDS(QSR$RDB_SIZE)));	!Offset to RDB
DLIT (QSR$KILL_SIZE,NEXTWORD);
MACRO QSR$MSG_KILL = BLOCK [QSR$KILL_SIZE] FIELD (QSR$MSG_FIELD,QSR$KILL_FIELD) %;

MACRO EQF(FOO)=	!Generate LANSW fields to match EQ fields in limit words
	%FIELDEXPAND(%NAME(QSR$EQ_,FOO),0)+
	 (%FIELDEXPAND(QSR$LANSW_LMW,0)-%FIELDEXPAND(QSR$EQ_LM1,0)) ,
	%FIELDEXPAND(%NAME(QSR$EQ_,FOO),1) ,
	%FIELDEXPAND(%NAME(QSR$EQ_,FOO),2) ,
	%FIELDEXPAND(%NAME(QSR$EQ_,FOO),3) %;

!Define the fields for the LIST ANSWER message (function 13)
DLIT (QSR$LANSW_FIRST, QSR$MSHSIZ);		!Offset to the first answer on a page
PHASE (0);					!Entries are stored sequentially on a page
FIELD QSR$LANSW_FIELD = SET
DFF [QSR$LANSW_JOB,THISWORD,WRD],		!External job name
DFF [QSR$LANSW_VALS,NEXTWORD,WRD],		!The external values word
 DFF [QSR$LANSW_SEQ,THISWORD,LH],		!External sequence number
 DFF [QSR$LANSW_PRO,THISWORD,RH],		!External protection
DFF [QSR$LANSW_DEV,NEXTWORD,WRD],		!Q or device
DFF [QSR$LANSW_PRDEV,NEXTWORD,WRD],		!Device processing this entry (0 if none)
DFF [QSR$LANSW_OWN,NEXTWORD,WRD],		!Owner's ID
DFF [QSR$LANSW_AFTER,NEXTWORD,WRD],		!After param (0 if none)
DFF [QSR$LANSW_LMW,MWORDS(5),WRD],		!The 5 limit words
 DFF [QSR$LANSW_NODE,EQF(NODE)],		!Remote NODEID
 DFF [QSR$LANSW_RJOB,EQF(RJOB)],		!Requesting job #
 DFF [QSR$LANSW_FUNC,EQF(FUNC)],		!The function code
 DFF [QSR$LANSW_RMCV,EQF(RMCVER)],		!RMCOPY version #
 DFF [QSR$LANSW_OPT,EQF(OPTIONS)],		!The option bits
 DFF [QSR$LANSW_RPROT,EQF(RPROT)],		!NET- Remote protection code
 DFF [QSR$LANSW_LIMIT,EQF(LIMIT)],		!NET- Limit in blocks
 DFF [QSR$LANSW_RTS,EQF(RUNSYS)],		!The runtime system
DFF [QSR$LANSW_STR,NEXTWORD,WRD],		!Structure containing the req
DFF [QSR$LANSW_PRWD,NEXTWORD,WRD],		!Priority word
 DFF [QSR$LANSW_PRIO,THISWORD,TENBITS(30,35)],	!The priority itself
DFF [QSR$LANSW_USER,NEXTWORD,WRD],		!User's name
DFF [QSR$LANSW_USER2,NEXTWORD,WRD]		!Second half
%IF FTIPC %THEN ,
DFF [QSR$LANSW_LOC,NEXTWORD,WRD],		!Distribution location
DFF [QSR$LANSW_SLOT,NEXTWORD,WRD]		!Slot name
%FI
TES;
DLIT (QSR$LANSW_SIZE, NEXTWORD);		!The size of an answer
LITERAL QSR$LANSW_APP = (%O'1000' - QSR$LANSW_FIRST) / QSR$LANSW_SIZE;	!Number of answers that fit on a page
MACRO QSR$MSG_LANSW = BLOCK [QSR$LANSW_SIZE] FIELD (QSR$LANSW_FIELD) %;

!Define the bits for function 14 - the TEXT message
PHASE (QSR$MSHSIZ);
FIELD QSR$TEXT_FIELD = SET
DFF [QSR$TEXT_STATUS,THISWORD,WRD],		!The status bit word
 DFF [QSR$TEXT_FATAL,THISWORD,TENBITS(0)],	!A fatal message
 DFF [QSR$TEXT_WARN,THISWORD,TENBITS(1)],	!A warning message
 DFF [QSR$TEXT_OPR,THISWORD,TENBITS(2)],	!Tell operator, too
 DFF [QSR$TEXT_EXIT,THISWORD,TENBITS(3)],	!Known component, exit
 DFF [QSR$TEXT_NOMESS,THISWORD,TENBITS(4)],	!No message, just an ack
 DFF [QSR$TEXT_MORE,THISWORD,TENBITS(5)],	!Another message will follow
 DFF [QSR$TEXT_SUFFIX,THISWORD,RH],		!SIXBIT suffix (eg the xxx in QSRxxx)
DFF [QSR$TEXT_MSG,NEXTWORD,WRD]			!The ASCIZ message starts here
TES;
DLIT (QSR$TEXT_SIZE, NEXTWORD);
MACRO QSR$MSG_TEXT = BLOCK[QSR$TEXT_SIZE] FIELD (QSR$MSG_FIELD,QSR$TEXT_FIELD) %;

!Now fields for HELLO message
PHASE(QSR$MSHSIZ);
FIELD QSR$HI_FIELD= SET
DFF [QSR$HI_NAME,THISWORD,WRD],			!Program name
DFF [QSR$HI_SDEV,NEXTWORD,WRD],			!Scheduling device
DFF [QSR$HI_PDEV,NEXTWORD,WRD],			!Processing device
DFF [QSR$HI_NODEID,NEXTWORD,WRD],		!Node we want to deal with
DFF [QSR$HI_MLIMIT,NEXTWORD,LH],		!Overall limit for transfers
 DFF[QSR$HI_MJOB,%FIELDEXPAND(QSR$HI_MLIMIT)],	!Max # of simultaneous jobs
DFF [QSR$HI_NEXT,THISWORD,RH],			!Job to do next
DFF [QSR$HI_CORE,NEXTWORD,WRD],			!Unused by NETSPL
DFF [QSR$HI_STATUS,NEXTWORD,WRD],		!Status word, as follows:
 DFF [QSR$HI_LOC,THISWORD,30,6,0],		!Default station/location
 DFF [QSR$HI_AVAIL,THISWORD,29,1,0],		!Avaliable for scheduling
 DFF [QSR$HI_FREEZE,THISWORD,28,1,0],		!Freeze forms
 DFF [QSR$HI_STC,THISWORD,27,1,0],		!Status change
 DFF [QSR$HI_BYE,THISWORD,26,1,0],		!Going away soon
 DFF [QSR$HI_LOWER,THISWORD,25,1,0],		!Lower case
 DFF [QSR$HI_RDE,THISWORD,24,1,0],		!Accepts RDE jobs (whatever that is)
 DFF [QSR$HI_VERS,THISWORD,RH]			!QSRMAC/????.REQ Version #
TES;
DLIT(QSR$HI_SIZE,NEXTWORD);
MACRO QSR$HI=BLOCK[QSR$HI_SIZE] FIELD (QSR$HI_FIELD,QSR$MSG_FIELD)%;

PHASE(QSR$MSHSIZ);
FIELD QSR$REQ_FIELD=
SET
DFF [QSR$REQ_ITN,THISWORD,WRD],		!Internal task name
DFF [QSR$REQ_INFO,MWORDS(5),WRD],	!Checkpoint/Reque info
DFF [QSR$REQ_AFTER,NEXTWORD,WRD]		!/AFTER value
TES;
DLIT (QSR$REQ_SIZE,NEXTWORD);
MACRO QSR$REQ=BLOCK[QSR$REQ_SIZE] FIELD (QSR$REQ_FIELD,QSR$MSG_FIELD)%;

PHASE(QSR$MSHSIZ);
FIELD QSR$REL_FIELD=
SET
DFF [QSR$REL_ITN,THISWORD,WRD]		!Internal task name
TES;
DLIT (QSR$REL_SIZE,NEXTWORD);
MACRO QSR$REL=BLOCK[QSR$REL_SIZE] FIELD (QSR$REL_FIELD,QSR$MSG_FIELD)%;

PHASE(QSR$MSHSIZ);
FIELD QSR$ABO_FIELD=
SET
DFF [QSR$ABO_ITN,THISWORD,WRD],		!Internal task name
DFF [QSR$ABO_REASON,NEXTWORD,WRD],	!Reason (1: user 2:operator)
DFF [QSR$ABO_ID,NEXTWORD,WRD]		!ID of abortionist
TES;
DLIT (QSR$ABO_SIZE,NEXTWORD);
MACRO QSR$ABO=BLOCK[QSR$ABO_SIZE] FIELD (QSR$ABO_FIELD,QSR$MSG_FIELD)%;