Google
 

Trailing-Edge - PDP-10 Archives - cobol12c - gendcl.mac
There are 22 other files named gendcl.mac in the archive. Click here to see a list.
	UNIVERSAL GENDCL
	SUBTTL	LINKAGE MACROS



;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
;  OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT (C) 1974, 1981 BY DIGITAL EQUIPMENT CORPORATION

	DEFINE SEGSYM<
	;;;	EXISTS SO THAT PASS 2 RE-INITS WILL OCCUR
	  OFFS.==0
	  LMREG.==0
	  LGREG.==16
	;;;	ALLOW GROUP OF MODULES TO HAVE SOME COMMON REGS (MU=MOD UNIV)
	  IFDEF MUREG.,<MREG.=MUREG.>
	  IFNDEF MUREG.,<MREG.==TREG.>
	  HMREG.==MREG.
	  HIGH==1
	>
	DEFINE SEGMEN<
	  TWOSEG
	  RELOC	0
	  GDATA.==0				;;FOR GDATA'S IFDEF TEST
	  SEGSYM
	>

	DEFINE SAVE (A)<
	IRP A,<	PUSH	P,A>>

	DEFINE RESTOR (A)<
	IRP A,<	POP	P,A>>

	DEFINE BLTSAV(LO.,HI.)<
	  HRRZ	R0,P
	  ADD	R0,[LO.,,1]		;;THE 1 GETS YOU TO 1ST UNUSED WORD ON STACK
	  BLT	R0,HI.(P)
	  T1.==HI.-LO.+1
	  ADD	P,[T1.,,T1.]		;;THE PUSH SIMULATION
	>
	DEFINE BLTPOP(LO.,HI.)<
	  T1.==HI.-LO.+1
	  SUB	P,[T1.,,T1.]
	  HRLZ	AP,P
	  ADD	AP,[1,,LO.]
	  BLT	AP,HI.
	>

	DEFINE SAVTMPS<SAVE<R2,R3,R4,R5>>
	DEFINE POPTMPS<RESTOR<R5,R4,R3,R2>>

	DEFINE	SAVALL <
	  IFN HMREG.-MREG.,<		;;ONLY DO SELF, IF CAN'T DO IN COM
	    T1.==TREG.
	    REPEAT <MREG.-TREG.>,<
	      T1.==T1.+1
	      SAVE	T1.
	    >
	    IFDEF UNWIND,<MOVEM P,UNWIND>
	    IFDEF MY.INI,<JSP R1,MY.INI>
	  >
	  IFE HMREG.-MREG.,<JSP	R1,SAV$A>
;;	HRRZ	R0,P
;;	ADD	R0,[2,,1]
;;	BLT	R0,16(P)
;;	ADD	P,D13D13##
	>

	DEFINE POPALL <
	T1.==MREG.
	REPEAT <MREG.-TREG.>,<
	  RESTOR	T1.
	  T1.=T1.-1
	>
;;	SUB	P,D13D13
;;	HRLZ	AP,P
;;	ADD	AP,[1,,2]
;;	BLT	AP,16
	>

	DEFINE LEAVE<POP$A+HMREG.-MREG.>
	DEFINE RETURN<
	  IFN MREG.-TREG.,<JRST	LEAVE>
	  IFE MREG.-TREG.,<POPJ	P,>
	>

	DEFINE $FUNCT(NAME,ARGLST)<
	IFG HIGH,<
	  RELOC	400000
	  HIGH==-1
	  IFG MREG.-TREG.,<
SAV$A:
	  T1.==TREG.
	  REPEAT <MREG.-TREG.>,<
	    T1.==T1.+1
	    SAVE	T1.
	  >
	  IFDEF UNWIND,<
	    MOVEM P,UNWIND
	    IFDEF UNWEXIT,<
	      IFDEF MY.EXIT,<COPI UNWEXIT,MY.EXIT>
	      IFNDEF MY.EXIT,<COPI UNWEXIT,POP$A-1>
	    >
	  >
	  IFDEF MY.INI,<JRST MY.INI>	;;MUST RETURN WITH JRST 0(R1)
	  IFNDEF MY.INI,<JRST	0(R1)>
	  >
	  IFDEF UNWEXIT,<IFNDEF MY.EXIT,<MOVE P,UNWIND>>
POP$A:
	  POPALL
	  POPJ	P,
	>

NAME:
	ENTRY NAME
	IFN LMREG.,<MREG.==LMREG.
			LMREG.==0>
	AOFF.=0
	IFNB <ARGLST>,<
	  IRP ARGLST,<
	  ARGLST=AOFF.
	  AOFF.=AOFF.+1
	  >
	>
	IFN MREG.-TREG.,<SAVALL>		;;KEYED BY MREG.
	IFE MREG.-TREG.,<
	  IFDEF UNWIND,<MOVEM P,UNWIND>
	  IFDEF MY.INI,<JSP R1,MY.INI>
	>
	>

	DEFINE $UTIL(NAME,ARGLST)<
NAME:
	IFE LMREG.,<LMREG.==MREG.>
	MREG.=TREG.			;;UTIL'S DON'T AFFECT MOD REGS
	AOFF.=0
	IFNB <ARGLST>,<
	  IRP ARGLST,<
	  ARGLST=AOFF.
	  AOFF.=AOFF.+1
	  >
	>
	>

	DEFINE $GLOYO(NAME,ARGLST)<
	IFG HIGH,<
	  RELOC	400000
	  HIGH==-1
	  MREG.==TREG.				;;IF A GLOYO FIRST GLOBAL ENTRY, THERE CAN BE NO FUNCTS
	  HMREG.==MREG.				;;...AND THEREFORE NO MODULE REGS
POP$A:
	  POPJ	P,
	>
NAME:
	ENTRY NAME
	IFE LMREG.,<LMREG.==MREG.>
	MREG.=TREG.			;;YOYO'S DON'T AFFECT MOD REGS
	>

	DEFINE $YOYO(NAME,ARGLST)<
NAME:
	IFE LMREG.,<LMREG.==MREG.>
	MREG.=TREG.			;;YOYO'S DON'T AFFECT MOD REGS
	>


	DEFINE GLOYO(PROG,ARGLST)<
	IF2, <IFNDEF PROG,<EXTERNAL PROG>>
	PUSHJ	P,PROG		;;ARGLST JUST FOR DOC
	>

	DEFINE YOYO(PROG,ARGLST)<
	PUSHJ	P,PROG		;;ARGLST JUST FOR DOC
	>

	;;;	SAME EXCEPT MUST PRESERVE SUBSYS (IE. SAVE R2-R5)
	SYN	$FUNCT,$LINK
	SYN	FUNCT,LINK


	DEFINE FUNCT(PROG,ARGLST)<
	SALL
	ARGS.=0
	IF2, <IFNDEF PROG,<EXTERNAL PROG>>
	  IFB <ARGLST>,<	PUSHJ P,PROG>
	  IFNB <ARGLST>,<
	  IRP ARGLST,<ARGS.=ARGS.+1>
	  MOVEI	AP,[-ARGS.,,0
	  IRP ARGLST,<ARGLST>
	  ]+1
	  PUSHJ	P,PROG
	  >
	>


	DEFINE UTIL(PROG,ARGLST)<
	SALL
	ARGS.=0
	  IFB <ARGLST>,<	PUSHJ P,PROG>
	  IFNB <ARGLST>,<
	  IRP ARGLST,<ARGS.=ARGS.+1>
	  MOVEI	AP,[-ARGS.,,0
	  IRP ARGLST,<ARGLST>
	  ]+1
	  PUSHJ	P,PROG
	  >
	>

	SYN $UTIL,$ULINK
	SYN UTIL,ULINK
	SUBTTL	DECLARATIVE MACROS FOR USER VARIABLES

	DEFINE GDATA(NAME,LEN)<
	  IFNDEF GDATA.,<EXTERN NAME>
	  IFDEF GDATA.,<
	    IFB<LEN>,<NAME:: BLOCK 1>
	    IFNB<LEN>,<NAME:: BLOCK LEN>
	  >
	>

	DEFINE DATA(NAME,LEN)<
	IFB<LEN>,<	NAME: BLOCK 1>
	IFNB<LEN>,<	NAME: BLOCK LEN>
	>

	DEFINE GREG(NAME,VALUE)<		;;GLOBAL REG
	  IFB <VALUE>,<GREG.==GREG.-1>
	  IFNB <VALUE>,<GREG.==VALUE>
	  IFL GREG.-LGREG.,<LGREG.=GREG.>
	  NAME=GREG.
	  IFDEF .'NAME,<
	    IFN .'NAME+GREG.,<
	      PRINTX "NAME" ALTER-EGO ALREADY IN USE
	    >
	  >
	  IFNDEF .'NAME,<  .'NAME==-GREG.>
	>

	DEFINE MREG(NAME,VALUE)<		;;MODULE REG
	  IFN LMREG.,<MREG.==LMREG.
			LMREG.==0>
	  IFB <VALUE>,<MREG.==MREG.+1>
	  IFNB <VALUE>,<MREG.==VALUE>
	  IFB <NAME>,<MREG.=TREG.>
	  IFG MREG.-HMREG.,<HMREG.=MREG.>
	 IFNB <NAME>,<
	  NAME=MREG.
	  IFDEF .'NAME,<
	    IFN .'NAME+MREG.,<
	      PRINTX "NAME" ALTER-EGO ALREADY IN USE
	    >
	  >
	  IFNDEF .'NAME,<  .'NAME==-MREG.>
	 >
	>

	DEFINE REG(NAME,VALUE)<
	  NAME=VALUE
	  IFDEF .'NAME,<
	    IFN .'NAME+VALUE,<
	      PRINTX "NAME" ALTER-EGO ALREADY IN USE
	    >
	  >
	  IFNDEF .'NAME,<  .'NAME==-VALUE>
	>


	DEFINE ASP(NAM.,SIZ.,INIT.)<
	GETLEN	<INIT.>
NAM.:	POINT 7,.+2
	XWD	SIZ.,LEN.
	ASCII\INIT.\
	T1.==<LEN.+4>/5
	T1.==T1.*5
	T1.==SIZ.-T1.
	BLOCK	<<T1.+4>/5>
	>

	DEFINE BP(STRUC.,FIELD.,BASE.)<
	  POINT STRUC.'$'FIELD.,STRUC.'.'FIELD.'BASE.,STRUC.'%'FIELD.
	>
	DEFINE DUMMY(STRUC.,FIELDS,PFX.)<
	ONEBYT(STRUC.,FIELDS,PFX.)
	>
	DEFINE ONEBYT(STRUC.,FIELD.,SIZE.,PFX.)<
	  IFNB <PFX.>,<PFX.'.'FIELD.=OFFS.-STRUC.'.'PFX.>
	  STRUC.'.'FIELD.==OFFS.
	  STRUC.'$'FIELD.==SIZE.
	  POS.==POS.+SIZE.
	  STRUC.'%'FIELD.==POS.
	>
	DEFINE BYTES(STRUC.,FIELDS)<
	  POS.==-1
	  IRP FIELDS,<DUMMY(STRUC.,FIELDS)>
	  OFFS.==OFFS.+1
	>
	DEFINE BYTPFX(STRUC.,PFX.,FIELDS)<
	  POS.==-1
	  IRP FIELDS,<DUMMY(STRUC.,FIELDS,PFX.)>
	  OFFS.==OFFS.+1
	>
	DEFINE WORD(STRUC.,FIELDS)<
	  BYTES(STRUC.,<FIELDS>)
	  OFFS.==0
	>

	DEFINE FIELD(FIELD.,SIZE.)<
	  T1.=1
	  IFNB <SIZE.>,<
	    T1.==SIZE.
	    IFN 100000*T1.-100000*SIZE.,<T1.==T1.+1>
	  >
	  FIELD.=OFFS.
	  OFFS.==OFFS.+T1.
	>
	DEFINE PREFIX(STRUC.,PFX.,FIELD.,SIZE.)<
	  PFX.'.'FIELD.==OFFS.-STRUC.'.'PFX.
	  FIELD	(STRUC.'.'FIELD.,SIZE.)
	>

	DEFINE ARRAY(FIELD.,SIZE.)<
	  T1.==1
	  IFNB <SIZE.>,<
	    T1.==SIZE.
	    IFN 100000*T1.-100000*SIZE.,<T1.==T1.+1>
	  >
	  FIELD.==OFFS. - 1
	  OFFS.==OFFS.+T1.
	>

	DEFINE BLKSIZ(SIZID.)<
	  SIZID.==OFFS.
	  OFFS.==0
	>

	;;;	BORROWED FROM MACTEN...
	;MACRO TO COMPUTE THE WIDTH OF A MASK
	;	"WID" RETURNS THE LENGTH OF THE LEFTMOST STRING OF
	;	CONSECUTIVE ONES IN THE WORD.
	DEFINE	WID(MASK),<<^L<-<<MASK>_<^L<MASK>>>-1>>>

	;MACRO TO COMPUTE THE POSITION OF A MASK
	DEFINE	POS(MASK),<<^L<MASK>+^L<-<<MASK>_<^L<MASK>>>-1>-1>>

	;MACRO TO BUILD A POINTER TO A MASKED QUANTITY
	;	POINTR	LOCATION,MASK
	DEFINE	POINTR(LOC,MASK),<<POINT	WID(MASK),LOC,POS(MASK)>>

	;MACRO TO BUILD A MASK "WID" BITS WIDE, WITH ITS RIGHTMOST BIT
	;	IN THE BIT POSITION "POS".   (I.E. A MASK FOR THE BYTE
	;	POINTED TO BY THE BYTE POINTER "POINT  WID,LOC,POS")
	DEFINE	MASK.(WID,POS),<<<<1_<WID>>-1>B<POS>>>

	;MACRO TO DEFINE A SYMBOL IF NOT ALREADY DEFINED
	;	ND  SYMBOL,VALUE
	DEFINE	ND(SYMBOL,VALUE),<
	  IFNDEF	SYMBOL,<SYMBOL==VALUE>
	>

	SUBTTL DECLARATIVE MACROS FOR CONSTANT DATA

	DEFINE PATTRN(NAM.,STR.)<
	  STR.ST=.
	  BYTE (12)STR.
	  LEN.==0
	  IRP STR.,<LEN.==LEN.+1>
NAM.:	  POINT	^D12,STR.ST
	  XWD	0,LEN.
	>

	DEFINE MESSAG(NAM,ELEM)<
	EXP	[
	  IRP ELEM,<
	  ACT..=0
	    IRPC ELEM,<IFIDN <-><ELEM>,<ACT..=1>
				  STOPI>
	    IFN ACT..,<
	    ELEM
	    >
	    IFE ACT..,<
		GETLEN <ELEM>
		ADDR.==[EXP LEN.
			ASCIZ\ELEM\]
		EXP <ADDR.+1>
	    >
	  >
			0	]
	NAM:: MSG..
	MSG..=MSG..+2
	>

	DEFINE GETLEN(STRING)<
	  LEN.=0
	  IRPC STRING,<LEN.=LEN.+1>
	>

	DEFINE SETADDR(STRING)<
	 GETLEN	STRING
	  ADDR.=1B12 + [	LEN.
			 ASCII/STRING/]+1
	>

	DEFINE VARY(NAM)<1B12+NAM>
	DEFINE INT(WORD)<2B12+WORD>
	DEFINE ASZ(NAM.)<17B12+NAM.>

	DEFINE ZERO<[0]>
	DEFINE ONE<[1]>
	DEFINE TWO<[2]>
	DEFINE THREE<[3]>
	DEFINE FOUR<[4]>
	DEFINE FIVE<[5]>
	DEFINE SIX<[6]>

	DEFINE MLIT(STRIN)<
	17B12+[ASCIZ\STRIN\]
	>

	DEFINE STRIVRY(NAM,STRING)<
	GETLEN (<STRING>)
	EXP LEN.
NAM:	ASCII/STRING/
	>

	DEFINE STRIPT(STRING)<
	GETLEN (<STRING>)
	POINT	7,[ASCII\STRING\]
	EXP	LEN.
	>
	SUBTTL	PROCEDURAL MACROS

	DEFINE WHATYP(SYM)<
	SYM..==0
	  IRPC SYM,<
	  IFIDN <SYM><@>,<SYM..=1
			  STOPI>
	  IFIDN <SYM><(>,<SYM..=2
			  STOPI>
	  IFIDN <SYM><[>,<SYM..=3
			  STOPI>
	  IFIDN <SYM><+>,<SYM..=4
			  STOPI>
	  IFIDN <SYM><->,<SYM..=4
			  STOPI>
	  >
	  IFE SYM..,<
	    IFDEF .'SYM,<SYM..=-1>
	  >
	>

	DEFINE	CASE(REG,VECTOR)<
	  JRST	@[EXP .+1,VECTOR](REG)
	>

	DEFINE DBP(BP,BCNT)<		;;ASCII ONLY
	REPEAT 5-BCNT,<IBP	BP>
	SOS	BP
	>

	DEFINE TURNON(REG.,VAL.)<TXO	REG.,VAL.>
	DEFINE TURNOFF(REG.,VAL.)<TXZ REG.,VAL.>
	DEFINE TX(DESIG.,REG.,BIT.)<
	IFE BIT.&777777,<TL'DESIG.	REG.,(BIT.)>
	IFN BIT.&777777,<TR'DESIG.	REG.,BIT.>
	>
	DEFINE TXNE(A,B)<TX(NE,A,B)>
	DEFINE TXNN(A,B)<TX(NN,A,B)>
	DEFINE TXOA(A,B)<TX(OA,A,B)>
	DEFINE TXOE(A,B)<TX(OE,A,B)>
	DEFINE TXON(A,B)<TX(ON,A,B)>
	DEFINE TXO(A,B)<TX(O,A,B)>
	DEFINE TXZA(A,B)<TX(ZA,A,B)>
	DEFINE TXZE(A,B)<TX(ZE,A,B)>
	DEFINE TXZN(A,B)<TX(ZN,A,B)>
	DEFINE TXZ (A,B)<TX(Z,A,B)>
	DEFINE TXC (A,B)<TX(C,A,B)>

	DEFINE COPY(DEST,SORCE)<
	WHATYP	<DEST>
	IFE SYM..+1,<
	MOVE	DEST,SORCE>
	IFN SYM..+1,<
	  WHATYP <SORCE>
	  IFN SYM..+1,<
	  MOVE	0,SORCE
	  MOVEM	0,DEST>
	  IFE SYM..+1,<
	  MOVEM	SORCE,DEST>
	>
>

	DEFINE COPI(DEST,SORCE)<
	WHATYP	<DEST>
	IFE SYM..+1,<
	MOVEI	DEST,SORCE>
	IFN SYM..+1,<
	MOVEI	0,SORCE
	MOVEM	0,DEST>
>

	DEFINE DMOVEM(REGIS,MEM)<
	MOVEM	REGIS,MEM
	MOVEM	REGIS+1,1+MEM
	>

	DEFINE DCOPY(DEST,SORCE)<
	WHATYP	<DEST>
	IFE SYM..+1,<
	MOVE	DEST,SORCE
	MOVE	DEST+1,1+SORCE
	>
	IFN SYM..+1,<
	  WHATYP	<SORCE>
	  IFN SYM..+1,<
	  MOVE	0,SORCE
	  MOVEM	0,DEST
	  MOVE	0,1+SORCE
	  MOVEM	0,1+DEST
	  >
	  IFE SYM..+1,<
	  MOVEM	SORCE,DEST
	  MOVEM	SORCE+1,1+DEST
	  >
	>
	>

	DEFINE LD(REG.,STRUC.,FIELD.,BASE.)<
	  IFNDEF STRUC.'$'FIELD.,<T1.==^D36>
	  IFDEF STRUC.'$'FIELD.,<T1.==STRUC.'$'FIELD.>
	  IFE T1.-^D36,<MOVE REG.,STRUC.'.'FIELD.'BASE.>
	  IFN T1.-^D36,<
	    IFN T1.-^D18,<LDB REG.,[BP (STRUC.,FIELD.,BASE.)]>
	    IFE T1.-^D18,<
	      T1.==STRUC.'%'FIELD.
	      IFE T1.-^D17,<HLRZ REG.,STRUC.'.'FIELD.'BASE.>
	      IFE T1.-^D35,<HRRZ REG.,STRUC.'.'FIELD.'BASE.>
	    >
	  >
	>
	DEFINE LDEX(REG.,STRUC.,FIELD.,BASE.)<		;;SIGNED-NESS IS A PROP OF A FIELD SO...
	  IFNDEF STRUC.'$'FIELD.,<T1.==^D36>
	  IFDEF STRUC.'$'FIELD.,<T1.==STRUC.'$'FIELD.>
	  IFE T1.-^D36,<MOVE REG.,STRUC.'.'FIELD.'BASE.>
	  IFN T1.-^D36,<
	    IFN T1.-^D18,<LDB REG.,[BP (STRUC.,FIELD.,BASE.)]>
	    IFE T1.-^D18,<
	      T1.==STRUC.'%'FIELD.
	      IFE T1.-^D17,<HLRE REG.,STRUC.'.'FIELD.'BASE.>
	      IFE T1.-^D35,<HRRE REG.,STRUC.'.'FIELD.'BASE.>
	    >
	  >
	>

	DEFINE ST(REG.,STRUC.,FIELD.,BASE.)<
	  IFNDEF STRUC.'$'FIELD.,<T1.==^D36>
	  IFDEF STRUC.'$'FIELD.,<T1.==STRUC.'$'FIELD.>
	  IFE T1.-^D36,<MOVEM REG.,STRUC.'.'FIELD.'BASE.>
	  IFN T1.-^D36,<
	    IFN T1.-^D18,<DPB REG.,[BP (STRUC.,FIELD.,BASE.)]>
	    IFE T1.-^D18,<
	      T1.==STRUC.'%'FIELD.
	      IFE T1.-^D17,<HRLM REG.,STRUC.'.'FIELD.'BASE.>
	      IFE T1.-^D35,<HRRM REG.,STRUC.'.'FIELD.'BASE.>
	    >
	  >
	>

	DEFINE STFIX(REG.,STRUC.,FIELD.,BASE.)<		;;PROVIDE SPECIAL CASE SUPPORT FOR THIS COMMON CASE
	  T1.==STRUC.'%'FIELD.
	  IFE T1.-^D17,<MOVSM REG.,STRUC.'.'FIELD.'BASE.>
	  IFE T1.-^D35,<IFN REG.-BASE.,<MOVEM REG.,STRUC.'.'FIELD.'BASE.>>
	>
	SUBTTL	EXCEPTION HANDLING MACROS

	DEFINE SETABORT(ADDR.)<
	  MOVEM	P,FRAMCON
	  COPI	PARSCON,ADDR.
	>

	DEFINE ERRS(ARGS.,REENT.)<
	JRST	[FUNCT	TYPOUT,<ARGS.>
		 JRST	REENT.]
	>

	SYN ERRS,WARNS
	SYN ERRS,SYSERS
	SYN ERRS,USRERS
	SYN ERRS,SYNERS
	SYN ERRS,FILERS

	DEFINE ERR(ARGS.,REENT.)<
	FUNCT	TYPOUT,<ARGS.>
	IFNB <REENT.>,<JRST	REENT.>
	>

	SYN ERR,WARNJ			;;FOR THE .+1 CASE
	SYN ERR,SYSERR
	SYN ERR,USRERR
	SYN ERR,SYNERR
	SYN ERR,FILERR

	DEFINE WARN(ARGS.)<
	FUNCT	TYPOUT,<ARGS.>
	>

	;;;	GENMSG INTERFACE MACROS
	DEFINE	CASLAB(NUM.)<CAS'NUM.::>
	DEFINE	SETCAS(NAM.)<
	  CA.'NAM.==CA.USR
	  CASLAB(\CA.USR)
	  CA.USR==CA.USR+1
	>

	DEFINE OTHCAS<
	  REPEAT <CA.UMAX-CA.USR+1>,<
	    CASLAB(\CA.USR)
	    CA.USR==CA.USR+1
	  >
	>
	SUBTTL	NEEDED SYMBOLS, REGISTERS, ETC.

	REG(R0,0)
	REG(R1,1)
	REG(R2,2)
	REG(R3,3)
	REG(R4,4)
	REG(R5,5)
	REG(AP,16)
	REG(TAP,AP)			;GIVE DIF NAME FOR USE AS TEMP
	REG(P,17)

	;;;	GENMSG DEFINED MESSAGE CASES
	CA.VAR==1
	CA.ASZ==2
	CA.PAD==3
	CA.PT==4
	CA.SIX==5
	CA.CRLF==6
	CA.NUM==7
	CA.NOCR==10
	CA.FF==11
	CA.DBK==12
	CA.COL==13			;LIMITED CONTROL OF WHAT COLUMN TO START NEXT FIELD
	;;;	UNDEFINED AND LIMIT CASES
	CA.UNU==14
	CA.SMAX==14
	CA.UMAX==24

	;;;	GENIO MODES
	GENIN==1
	GENOUT==2
	GENAPP==3
	GENIO==4
	; ***	SWITCH COMPON
	GENASZ==0
	GENBIN==1B32				;IE. 10
	; ***	CONSTANT CHANNEL DEFS
	DEFINE CHAN(CHAN.,VAL.)<
	  CHAN.'CHAN==VAL.
	  $$$'CHAN.==1B<^D35-VAL.>
	  INI.CH==INI.CH ! $$$'CHAN.
	>

	;;;	SCAN BLK OFFSETS
	OFFS.==0			;0 EXPLIC SINCE HERE
	FIELD	(F.DEV)			;DEVICE NAME
	FIELD	(F.NAME)		;FILE NAME
	FIELD	(F.NAMM)		;MASK
	FIELD	(F.EXT)			;EXT/MASK
	FIELD	(F.MOD)			;VARIOUS JUNK
	FIELD	(F.MODM)
	FIELD	(F.DIR)			;DIRECTORY WORD
	FIELD	(F.DIRM)
	FIELD	(F.SFD,^D12)
	BLKSIZ	(F.SLEN)
	F.LEN==F.SLEN

	;;;	ENQ/DEQ RESOURCE BLK
	; ***	THE HEADER PORTION
	BYTES	(RS,<<NUM,^D18>,<SIZ,^D18>>)	;NUM OF LOCKS/SIZ OF BLK
	BYTES	(RS,<<RUPT,^D18>,<RQID,^D18>>)	;INTERRUPT CHAN/REQ ID
	BLKSIZ	(HDR.RS)
	; ***	PER-LOCK BLK
	BYTES	(RS,<<SHAR,1>,<IGLN,1>,<UNU,7>,<LEV,^D9>,<CHAN,^D18>>)
						;SHARED?,IGNOR LEV?,LEV#,JFN/CHAN OF RES
	FIELD	(RS.LOCK)			;5B2+NUM OR BYTE PTR
	BYTES	(RS,<<POOL,^D18>,<GROUP,^D18>>)	;POOL SIZE/SHAR GROUP
	BLKSIZ	(SIZ.RS)

	;;;	IPCF ARG BLKS
	; ***	PACKET DESCRIPTOR
	BYTES	(PD,<<FLAG,^D24>,<ERR,5>,<SSC,3>,<NANS,3>>)
					;1 BIT FLAGS, REF DIRECTLY
					;IPCF RETURNED ERROR CODE
					;SYS SENDER CODE, FOR COMMUN WIHT INFO
					;WAS AN UNANSWERED MSG RETURNED
	FIELD	(PD.SEND)
	FIELD	(PD.CEIV)
	BYTES	(PD,<<MLEN,^D18>,<MADD,^D18>>)
	FIELD	(PD.DIR)
	FIELD	(PD.CAPAB)
	BLKSIZ	(SIZ.PD)
	; ***	[SYS]INFO DATA PACKET
	BYTES	(INP,<<CODE,^D18>,<FUNC,^D18>>)
	FIELD	(INP.CPID)			;COPY PID
	FIELD	(INP.ARG)			;BEGIN OF VAR LEN ARG
	BLKSIZ	(SIZ.INP)

	;;;	MGRMEM ARG BLK
	FIELD	(MM.CUR)			;-LEFT,,START -- SORT OF PSEUDO AOBJ PTR FOR STORBLK
	FIELD	(MM.SIZ)			;AMOUNT USER WANTS
	FIELD	(MM.ALC)			;AMOUNT TO GRAB IF RUN OUT
	BLKSIZ	(SIZ.MM)

	;;;	VARIOUS STANDARD WAYS OF BREAKING UP A WORD INTO SUB-FIELDS
	WORD	(UUO,<<OPC,^D9>,<CHAN,4>,<EA,^D23>>)
	WORD	(BP,<<POS,6>,<SIZ,6>,<UNU,1>,<EA,^D23>>)
	WORD	(INS,<<OPC,^D9>,<AC,4>,<IND,1>,<IDX,4>,<MEM,^D18>>)
	WORD	(ARG,<<UNU,^D9>,<TYP,4>,<EA,^D23>>)

	;;;	MISCELLANEOUS SYMBOLS
	TREG.==5		;MORE OR LESS IN ACCORD WITH DPSS
	CPW==5				;ASCII--CHARS PER WORD
	DEFINE CFOPF<^D36B5+OF%NWT+OF%PLN> ;THIS WAY SINCE OTHERWISE O/S DEP (COMMON FLAGS FOR OPENF)

	END