Google
 

Trailing-Edge - PDP-10 Archives - BB-L014Z-BM_1990 - cblsrc/dbsdcl.mac
There are 22 other files named dbsdcl.mac in the archive. Click here to see a list.
UNIVERSAL DBSDCL - PARAMETERS FOR DBMS-10 & DBMS-20

	SEARCH COPYRT
	SALL

;                     Copyright (C) 1974, 1984 by
;             Digital Equipment Corporation, Maynard, Mass.

; *******************************************************************
; NOTE!!! This module is shared by the COBOL and DBMS products. Any
; modification by either group should be immediately reflected in the
; copy of the other group.
; *******************************************************************

	SEARCH GENDCL
	SEGSYM


;;;	ALL DBMS COMPONENTS ARE MAINTAINED AT SAME VERSION

	DEFINE DBVER<BYTE  (3)%DBCUV(9)%DBMAV(6)%DBMIV(18)%DBEDT> ;[1147]

	DEFINE VERSION(AAA)<
	  LOC	137
	  DBVER				;[1147]
	  RELOC		   >
	SUBTTL	DBCS CONTEXT SWITCHES

	;;;	I AM NOT SURE IF THERE IS A "CORRECT" WAY TO DO THIS OR
	;;;	 IF THIS IS THE CORRECT WAY
	;;;	BUT THE VARIOUS DBCS-USING UTILITIES DO NEED CERTAIN
	;;;	 TAILORED MODULES
	;;;	IN PARTICULAR, GATE, PORT, & LEAVE
	;;;	SO, IN THE INTEREST OF MINIMIZING REDUNDANCY EACH
	;;;	OF THESE (AND EVENTU OTHERS?) WILL BE PREFIXED BY THIS MACRO
	DEFINE INIUTIL<
	  IFNDEF DBINFO,<DBINFO==0>
	  IFNDEF DBMEND,<DBMEND==0>
	  IFNDEF V3DBMS,<V3DBMS==0>
	  IFNDEF DBCONV,<DBCONV==0>
	  DBCS==1
	  IFN DBINFO!DBMEND!V3DBMS!DBCONV,<DBCS==0>
	  IFN DBINFO,<SEARCH INFDCL>
	  IFN DBMEND,<SEARCH MNDDCL>	;V6 uses MNDDCL not MNDSYM

	  IFN V3DBMS,<SEARCH VTVDCL>
	  IFN DBCONV,<SEARCH CNVDCL>
	>
	SUBTTL	MISCELLANEOUS SYMBOLS

	;;;	REC TYP ID'S--MACRO DEFINED IN SCHIO
	EXTERN TID.AL,TID.CL,TID.DL,TID.FL,TID.IL,TID.ML,TID.VL,TID.YL
	EXTERN TID.OL,TID.RL,TID.SL,TID.UL,TID.WL,TID.TL,TID.EL,TID.KL

	;;;	SIMILARLY, THE SET TYPES ARE DEFINED= $ OWNER . MEM
	EXTERN $S.A,$S.R,$S.U,$S.E,$S.Y
	EXTERN $R.D,$R.W,$R.O,$R.M
	EXTERN $A.W,$D.C,$D.T,$O.M,$O.Y,$M.V,$V.C,$E.K

	; KEY VALUES ASSOCIATED WITH KEYWORDS PASSED AS ARGUMENTS TO DBCS
	; THIS IS MASTER DEFINITION -- REFFED EVERYWHERE ELSE

	DEFINE KEY(KEYARG),<[$$'KEYARG]> ;MECH OF GETTING AT THEM

	HALF==777777			;NEED HALF WORDS OF THESE GUYS OCCAS
	$$ONLY==-^D10
	$$SELECT==-^D11
	$$FIRST==-^D12
	$$LAST==-^D13
	$$PRIOR==-^D14
	$$NEXT==-^D15
	$$DUPLIC==-^D16
	;[6%467] Order important for next 4 definitions ($$ALL thru $$SET)
	;[6%467]  used in range checks for currency suppression arguments
	$$ALL==-^D17
	$$AREA==-^D18
	$$RECORD==-^D19
	$$SET==-^D20
	$$UPDATE==-^D21
	$$RETRIEV==-^D22
	$$RUNUNIT==-^D23
	$$PROT==-^D24
	$$EXCLUSIVE==-^D25
	$$CURR==-^D26
	$$SHARED==-^D27
	$$JOURNAL==-^D28
	$$TRANSACTION==-^D29

	;;;	MISC SYMBOLS PART OF DATA BASE PROCESSING

	GREG	(BAS,15)		;SCHIO HAS NO STATIC LOW SEG

	SKECHN==0

	PAGWID==^D26
	LINWID==^D35-PAGWID
	DPVMOD==1000			;DIR PAG FLAG TO LIVE WITH PAG# IN
					; BH.PAG(TBUF)
	SYSNMID==1
	SYSTID==40			;RESERVE THESE FOR SYSTEM USE
	TID.ASR==1			;TID OF AREA-STATUS REC
	TIDMAX==777			;REC TYP ID IS 9 BIT FIELD
	DOFFMAX==MAX.XB			;RESTRICT TO THIS VAL PURELY FOR CONVEN
					;...SHOULD BE AMPLE IS 120
	USEMAX==20			;FOR DYN ALLOC OF USE CONDITIONS
	TEXMAX==^D100			;ALLOCATE 20 WORDS A SHOT
	LOKMAX==5			;PRIVACY KEYS/LOCKS, SCAN 5 CHARS ONLY
	SIZ.MSK==3			;NUMBER OF MASK WORDS
	AREAMAX==<SIZ.MSK*^D36>-1	;NUM. AREAS REP'ABLE IN BITS AVAIL
					;(NEED ONE BIT FOR TABLE RESOURCE)
	STKPFRM=^D512		 	;SIZE OF PAGE STACK FRAME
	SHORT==6			;FORTRAN NAMES MAX LEN
	NAMLEN==^D30			;USUAL MAX NAME LEN
	MAXFS20=^D120/CPW
	MAXTS20==^D45/CPW		;ALWAYS OF FORM DSK:NAME-ONLY.TMP
	MAX.SS==10			;AT RUN-TIME FOR SETDB/UNSET
					; (RIGHT PLACE?)
	FOPSIZ==7			;FILOP ARG BLK SIZE
	TIOSIZ==6			;L/E BLK SIZE FOR TMP AREAS

	DF.POLL==^D100000		;DEFAULT POLL RATE IN MSEC
	DF.THRESH==^D50			;DEFAULT THRESHOLD IN PAGES

	SUBTTL CERTAIN SCHEMA FIELDS CAN TAKE ON A RANGE OF VALUES

	;;;	USAGE MODES -- EVEN VALS=RETR /ODD=UPDATE
	UM.COR==0			;CONCUR RETR
	UM.COU==1			;CONC UPDATE
	UM.PRR==2			;PROT RETR
	UM.PRU==3			;PROT UPD
	UM.EXR==4			;EXCL RETR
	UM.EXU==5			;EXCL UPDATE
	UM.UDED==6			;EXCLUDED...FOR DBMEND
	; ***	THE INDIV CASES
	UM%OIP==1B0			;SIGN BIT INDICS OPEN IN PROCESS
	UM%TEMP==1B1			;AREA OPEN FOR TEMP USAGE
	UM%ASR=1B2			;INDIC (DURING OPEN) THAT ASR ACTU
					; UPDATED
	UM%CON==1B3
	UM%PRO==1B4
	UM%EXCL==1B5
	UM%RETR==1B6
	UM%UPD==1B7
	UM%OTH==1B8			;DBMOC DETERM THAT OTHER R-U CURR HAVE
					; THE AREA OPEN
	UM%DIODE=1B9			;ONE-DIRECTIONAL UM, IE. ONLY CHECK IF
					; SOME ONE ELSE IS UM%CON
	UM%AID=1B10			;THERE WAS AN AID FILE REQUEST
	UM%XCLU==1B11			;DON'T EVER WRITE IN THIS AREA (DBMEND)

	;;;	LOCATION MODES
	LM.NONE==0			;NOT POSSIBLE
	LM.DIR==1
	LM.VIA==2
	LM.CAD==3			;CALC, DUPS ALLOWED
	LM.CAND==4			;CALC, DUPS NOT ALLOWED

	;	LOCKING CODES
	LK%ARE==1B35			;USE AREA LOCKS
	LK%PAG==1B34			;USE PAGE LOCKS
	LK%RET==1B33			;LOCK FOR RETRIEVAL (SHARED)
	LK%UPD==1B32			;LOCK FOR UPDATE (EXCLUSIVE)
	LK%UPG==1B31			;UPGRADE LOCK (SHRD TO EXCL)

	LK%OPN==1B30			;LOCK FOR OPEN (USE ENQ/DEQ)
	LK%JRN==1B29			;LOCK FOR JOURNAL 

	LK%NRL==1B28			;DON'T RELEASE SHARED LOCK
					; UNTIL CLOSE TRANSACTION

	LK%CBH==1B27			;CLEAR BUFFER HEADER (BH.PAGE)
					;	 AFTER COPYING PAGE NUMBER.
					;	 SET TO INDICATE THAT THE 
					;	 BUF. HDR. IS MERELY BEING
					;	 USED TO PASS ARGUMENTS

	LK.WAIT==500			;TIME TO WAIT FOR A LOCK (MILLI-SECS)



	;;;	SET MEMBERSHIP
	SH.AUT==0			;MEMBERSHIP AUTOMATIC
	SH.MAN==1B35
	SH.MND==0			;MANDATORY
	SH.OPT==1B34
	SH.AM==0
	SH.MM==1
	SH.AO==2
	SH.MO==3

	;;;	SET ORDERING
	OR.NONE==0
	OR.1ST==1
	OR.LAST==2
	OR.NEXT==3
	OR.PRIOR==4
	OR.SORT==5			;MEANS NO PHRASE FOLLOWS "ORDER SORTED"
	OR.WIN==6			;"WITHIN" PHRASE FOLLOWS
	OR.DBK==7			;DBKEY PHRASE FOLLOWS
	OR.DUP==10			;DUPS PHRASE FOLLOWS
	SRTORD==4			;NUM OF SORT ORDERINGS

	;;;	KEY-COMPARISON CONTROL
	KC.USER==0			;DATA FIELDS
	KC.KED==1			;DBKEY OF ACTUAL RECORD
	KC.KEX==2			;DBKEY OF RECORD AS ENCODED IN INDEX BLK
	KC.TID==3			;TID/RECNAME OF RECORD (FROM LINHDR
					; IN EFFECT)
	KC.TIX==4			;TID/RECNAME AS ENCODED IN INDEX BLK
	KC.MAX=4

	;;;	CONTROL OF ORDERING OF DUP RECS
	DU.ARB==0			;ORDER THEM ANY OLD WAY
	DU.1ST==1			;PUT EM FIRST
	DU.LAST==2
	DU.NOT==3			;DONT ALLOW

	;;;	DATA-NAME KEY TYPES
	KEY.ASC==1B35	
	KEY.DESC==1B34
	KEY.RANG==1B33			;IS RANGE KEY
	KEY.CALC==1B32
	KEY.NORD==1B31			;ON IF DATUM CTLS MEMBER NOT IN CURR SS
	KEY.SOR=1B30			;IN EFFECT, IMAGE OF VIA.SOR

	;;;	MEMBER USAGE CTL IS VIA/FOR:
	VIA.DIR==1			;DITTO FOR LM = DIR
	VIA.CALC==2			;DITTO FOR LM = CALC
	VIA.MEM==3			;VIA BLK FROM SOS THRU MEMBER (IE. LM
					; OF OWNER VIA)
	VIA.SOR==4			;THIS VIA BLK ENCODES SORT KEYS

	;;;	WHAT IS SET OCC SELECT
	SOS.CUR==0			;0 SINCE THE DEFAULT ALSO
	SOS.LMO==1

	;;;	DATA TYPE CONSTANTS
	;;;	PRECISION/ SCALE CONSTANTS
	;;;	X=FIXED L=FLOAT  B=BIN D=DEC  R=REAL C=COMPLEX
	; ***	BIT COMPONENTS
	TY.FLO==1B35
	TY.BASE==1B34
	TY.PLEX==1B33
	; ***	ACTUAL POSSIBLE TYPES
	DT.STRUC==0			;NO DATA TYPE MEANS SIZE PHRASE
	DT.DBK==^D9
	DT.D6==^D10
	DT.D7==^D11
	DT.D9==^D12
	DT.MAX=^D12

	ABSXBR==^D35
	ABSXDR==^D10
	ABSLBR==^D27
	XBR.1M==^D35
	XBR.1D==^D10			;SAME THING IN DECIMAL PREC
	XBR.2M==^D71
	XBR.2D==^D18			;DITTO BEFORE
	XDR.MAX==^D18
	;;;	THE COMPLEX PREC CHARAS CAN BE DET FROM THE FLOAT COMPON
	LBR.1M==^D27
	LBR.2M==^D62
	SUBTTL	EXECUTION-RELATED CONSTANTS

	;;;	CENTRALLY DEFINE THE SET OF USER ENTRY CLASSES, & CONCOMITANT
	;;;	 WITH THAT
	;;;	EACH VERB (CODASYL STAND) AND EXPLIC ENTRY PT IS GIVEN A CODE
	DEFINE VERBS.<
	;;;	KLUDGE TO GET EXACTLY 2 WORDS PER ENTRY
	VERB.	(HOST)			;LET THESE HAVE STATUS CODE OF ZERO
	VERB.	(CLOSE)
	VERB.	(DELETE)
	VERB.	(FIND)
	VERB.	(USER)			;FORMERLY "FREE"
	VERB.	(GET)
	VERB.	(UNUSED)		;FORMERLY "KEEP/RETAIN"
	VERB.	(INSERT)
	VERB.	(MODIFY)
	VERB.	(OPEN)
	VERB.	(OPNT)			;USE UNUSED SLOTS
	VERB.	(REMOVE)
	VERB.	(STORE)
	VERB.	(CLOTR)
	VERB.	(DELTR)
	VERB.	(BIND)
	VERB.	(CALL)
	>
	DEFINE VERB.(TEXT.)<
	  IFDEF XSTAT.,<
	    GETLEN <TEXT.>
	    IFE LEN.-3,<ASCIZ/TEXT.      />
	    IFE LEN.-4,<ASCIZ/TEXT.     />
	    IFE LEN.-5,<ASCIZ/TEXT.    />
	    IFE LEN.-6,<ASCIZ/TEXT.   />
	    IFE LEN.-7,<ASCIZ/TEXT.  />
	    IFE LEN.-8,<ASCIZ/TEXT. />
	  >
	  IFNDEF XSTAT.,<FIELD(C.'TEXT.)>
	>

	VERBS.
	BLKSIZ	(CODE.V)		;NOT A TRUE SIZE BUT...

	;;;	SUPPRESS CLAUSE CODES AND BITS
	SUP.ALL=$$ALL&HALF
	SUP.REC==$$RECORD&HALF
	SUP.AREA==$$AREA&HALF
	SUP.SET==$$SET&HALF
	R.SUP==1B35
	A.SUP==1B34
	S.SUP==1B33

	;;;	FIND3 (POSITIONAL) CODES
	F3.OFF==1
	F3.1ST==$$FIRST&HALF
	F3.LAST==$$LAST&HALF
	F3.PRIOR==$$PRIOR&HALF
	F3.NEXT==$$NEXT&HALF

	;;;	CLOSE CODES
	CL.JRN==$$JOURNAL&HALF
	CL.RUN==$$RUNUNIT&HALF
	CL.AREA==$$AREA&HALF
	CL.ALL==$$ALL&HALF

	;;;	DELETION CODES
	DL.ALL==$$ALL&HALF
	DL.ONL==$$ONLY&HALF
	DL.SEL==$$SELECTIVE&HALF
	DL.SLF==0			;DELETE JUST SELF, THE IMPLICIT OPTION

	;;;	OPEN-AREA CODES
	OP.PROT==$$PROT&HALF
	OP.EXCL==$$EXCL&HALF
	OP.RETR==$$RETR&HALF
	OP.UPD== $$UPDA&HALF
	OP.CON== 0			;THE IMPLIC OPTION
	OP.JRN==$$JOUR&HALF
	OP.ALL==$$ALL&HALF
	SUBTTL	EXECUTION-CONTROLLING FLAGS (SOME DEFINED BY SCHEMA)

	;;;	FLAG VALUES FOR LEFT HALF OF PORT VECTOR (IE. VFLAGS(X))
	; ***	IMPORTANT: THESE 3 ACT. FLAGS RESIDE WITH THE VAC. FLAGS
	;	 IN ACT.XC(SS) AS DETERMINED BY THE USER'S DMCL ENTRIES
	; ***	BUT THESE HAVE NO IMAGE IN EV.FLAG BUT THE VAC. ONES DO
	; ***	IN PT OF ACT, EV.FLAG PLACES TOT DIF MEANINGS ON B30-B32
	ACT.UAN==1B32			;UNANTICIPATED EXCEP, EVERYTHING BUT
					; 307=ESA & 326=NRS
	ACT.ALL=1B31			;ANY EXCEPTION
	ACT.SYS==1B30			;THE SYSTEM ERROR (APPROX. 40+)
	ACT.JRN==1B29			;SUPPORT OF NOTE JOURNAL
	; ***	END IMPORTANT
	; ***	THE DMCL CAN DEFINE ACTIONS FOR EXCEPTIONS ON A VERB BASIS
	VAC.UPD==1B35			;ERROR DURING AN UPDATE VERB
	VAC.CALL==1B34			;ERROR DURING AN EXPLIC CALL (EG JSTRAN)
	VAC.BIND==1B33			;ERROR DURING BINDING
	VACBITS==VAC.UPD!VAC.CALL!VAC.BIND
	; ***	OTHER VERB-BASED SWITCHES
	SCH.IO==1B32			;TURNED ON TO INDIC X/BAS KLUDGE
					; INVOLVED
	OK.NOSS==1B31			;AT MOMENT SBIND ONLY
	OK.SUS==1B30			;OK TO ENTER AT THIS EP EVEN THO
					; SYS UNDEF STATE
	CRU.MUST==1B29			;CERTAIN VERBS REQUIRE THAT CUR.RU
					; HAVE A VALUE
	JR.OVU==1B28			;ENTRY IS OTHER THAN A VERB UNIT &
					; TOUCHES JOURNAL
					;IE. JRDATA/JRTEXT/JSTRAN/JETRAN
					;ADDIT, IN DBPORT IT IS TAKEN TO MEAN
					;ANY ENTRY THAT CONTEX ENTERS THIS STATE
					;EG. ANY VERB IF NOT JOURNALING
	ENQ.J==JR.UPD			;DEFINE AS SAME THING
	JR.UPD==1B27			;DOES THE VERB UPD J (& DATA BASE)
	ENQ.X==1B26			;NEED TO ENQ EXCL IS EQUIV TO JR.UPD
					; EXCEPT 
					;WHEN (OP/CL) PROCESSING J LAB ONLY
	ENQ.SH==1B25			;ENTRY DOES NO UPDATES BUT DOES
					; ACCESS DB
	ENQ.ALT==1B24			;(EG. OPEN) ENTRY CAN ALTER SIMULT OF
					; R-U, SO PLAY SAFE
					;IE. STRONGER THAN ENQ.X
;	ENQ.NO==NOT(ENQ.X&ENQ.SH)	;IE. A SERVICE ROUTINE SUCH AS STATS$
; ***	NO MORE ROOM IN THIS FLAG VECTOR !!!

	;;;	INTRA-VERB SWITCHES...
	;;;	DEFINE LEFT-SIDE SS AS THE FLAG REGISTER WITH THESE FLAGS
	;;;	 (18 MAX):
	; ***	ALSO... LET B0-2 BE COMMAND SPECIFIC (REFFED ONLY IN XXXX$
	;	 ENTRY PTS)
	; ***	USER-RECORD-COMMANDS
	LINK.BIT==1B0			;AT LEAST ONE ACTUAL LINKING OPER
					; (IE.INS/REM) IN THIS VERB
	INS.BIT==1B1			;IS CALL TO CURN.U NECES
	CA.BIT==1B2			;NECESSARY TO (RE)CALC THIS REC BECAUSE
					; ITS KEY HAS CHANGED
	; ***	BIND CLASS
	NAB.BIT==1B0			;NOOP ACTUBIND (IE. FOR DBINFO VIA
					; SSBIND)
	OSS.BIT==1B1			;GUARAN DON'T PUNISH WRONG SUB-SCH IF
					; BIND FAILURE
;	UNUSED==1B2
	; ***	OPEN CLASS
	XCLU.BIT==1B0
	FOPN.BIT==1B1			;ALLOW FH.STAT IN ASR TO BE -1
	JRO.BIT==1B2			;Open journal read only

	ITR.BIT==1B0			;INCOMPLETE TRANSACTION
					;	 REMAINS IN THE JOURNAL
;	UNUSED==1B1
;	UNUSED==1B2

	TRC.BIT==1B0			;TRACE TRANSACTIONS


	; ***	THOSE NOT COMMAND-SPECIFIC
	RB.BIT==1B3			;FORCE TMP.RB TO BE UPDATED
	CNEX.BIT==1B4			;HAVE USED A CANON-NEXT PTR IN GDETTB
	NORD.BIT==1B5			;SET IN DBKITM TO INDIC A CTLER
					; OF INVIS SORTED-SET MODDED
	JRV.BIT==1B6			;JOURNALING BY VERB
	BMO.BIT==1B7			;BUFFER HAS BEEN MODDED
	DMO.BIT==1B8			;DSK HAS BEEN MODDED
	XWX.BIT==1B9			;IF ON AT DBSABO, MEANS HAVE GOTTEN
					; EXCEPTION WHILE PROC EXCEP
	UKY.BIT==1B10			;USER-INTRODUCED DATA BASE KEYS MUST
					; BE SPECIAL CASED
	UCR.BIT==1B11			;UNABLE TO COMPL RESTOR IF ON WHEN
					; EXCEP OCCURS
	VRO.BIT==1B12			;THIS VERB IS RETRIEVAL
					;...ONLY
	MND.BIT==1B13			;Called from DBMEND
	DEQ.BIT==1B14			;THIS VERB MUST CALL IU.DEQ IF ON IN
					; DBLEAV
	EOF.BIT==1B15			;SET WHEN A PAGE ACCESS (IN GET.OS)
					; IS BEYOND EOF
	DFT.BIT==1B16			;INDICATES DEFAULT TRN OPN
	NJE.BIT==1B17			;DON'T WRITE TRAILER IN JRN

	;;;	SUB-SCHEMA STATUS WORD (IE. INTER-VERB SWITCHES)
	; ***	PERM LOC IS PSW(SS) (IE. PROGRAM-STATUS-WORD PER SS)
	; ***	RIGHT SIDE ONLY, IE. JUST 18 SWITS AT MOST
	; ***	INTRA-VERB LOC IS THE LEFT-SIDE OF REG X

	PSW.TR==1B35			;CHKPTING FOR TRANS ONLY
	PSW.VER==1B34			;CHKPTING PER VERB
	PSW.CBUU==1B33			;CANT BACKUP UPDATES

	PSW.SUS==1B32			;SYS IN UNDEF STATE (EG. AFTER ERROR
					; AND CBUU SET)
	PSW.MTA==1B31			;MTA JOURNAL
					;[1107] PSW.MTA never set in V6 or later

	PSW.JOSH==1B30			;JOURNAL RETAINED SHARED

	PSW.LIM==1B29			;ACTIVE TRANSAC LIM
	PSW.TAC==1B28			;ON IF "BETWEEN" JSTRAN&JETRAN
	PSW.RESH==1B27			;ONE OR MORE AREAS OP IN RETR OR UPD U-M
					;IE. ANY "VULNERABLE" SHARED AREAS
					; (INCL J)

	PSW.UPSH==1B26			;1 OR MORE AREAS OPENED PRU OR COU
					;IE. YOUR UPDATES CAN AFFECT OTHER R-U
	PSW.ENQ==1B25			;TURNED ON/OFF ONLY BY IU.ENQ AND IU.DEQ
	PSW.CNV==1B24			;INDIC DEALING WITH CONVERSION
					; DB...NAME.??N

	PSW.RAN==1B23			;RETRIEVAL ACCESS TO
					; ...NON-EXISTENT PAGES ALLOWED
					; ... (BUT NOT PAGE CREATION)
	PSW.JRET==1B22			;J OPENED ONLY FOR RETR
	PSW.EAV==1B21			;ENVIRONMENT ALTERING VERB(OPEN,CLOSE)

	PSW.AFE==1B20			;AID FILE EMPTY.  SET WHEN AID
					;	FILE CREATED CLEARED ON FIRST
					;	CALL TO PUT.RDY
	PSW.NRL==1B19			;SET BY DBMEND /DEL TRAN
					;  MEANS DONT RELEASE LOCKS AT CLODEF

	SUBTTL	GENERAL STRUCTURES OF THE DATA BASE SYSTEM

	;;;	FORMAT OF AN AREA STATUS REC (ALWAYS 1STP/1 OF AREA)
	;;;	STATUS REC IS IN EFFECT FILE(AREA) HEADER
	FIELD	(FH.STAT)		;0 IF OK, "UNDEF" IF EDITS IN PROGRESS
	BYTES	(FH,<<FLG,^D18>,<UNU,^D18>>)
	FH%AID==1B17			;AREA WANTS AN AID FILE
	FH%PRS==1B16			;OPEN UPDATE NOT SUPERCEDE
					;CLOSE BUT DONT DELETE TMP FILE
	FH%NPR==FH%AID			;ALL FLAGS BUT "PRS"
	BLKSIZ	(SIZ.FH)

	;;;	FORMAT OF A PAGE'S PAGHDR
	FIELD	(PH.NUM)		;PAG NUM OF THIS PAGE
	BYTES	(PH,<<HUSE,^D18>,<1STF,^D18>>)
					;HUSE IS HIGHEST LIN NUM USED SO FAR
					;THE (1STF)TH WORD OF THE PAGE IS THE
					; 1ST TO CONTAIN NO DATA
	BLKSIZ	(PH.CALC)		;(FIXED) SIZED IS ALSO OBV OFFS OF THAT
					; WHICH FOLLOWS: 0-N CALC BUCK WORDS

	;;;	FORMAT OF A LINE HDR
	WORD	(LH,<<RSIZ,^D12>,<TID,^D9>,<OFFS,^D15>>)


	;;;	FORMAT OF A DATABASE KEY
	WORD	(DBK,<<SIGN,1>,<PAG,PAGWID>,<LIN,LINWID>>)

	SUBTTL	SORTED-SETS

	;;;	CONSTANTS
	TID.XB==2			;UPPER LEVEL INDEX BLK
	TID.XL==3			;LEAF INDEX BLK (PTS AT DATA RECORDS)
	TID.X6L==4			;VERSION 6 THIS BUOY HAS OWNER PTR
	MAX.XB==^D120			;INDEX BLKS ARE MIN(120,16*XNSIZ) BIG
	FAU.XN==^D16			;WILL TRY TO PUT 16 NODES IN INDEX BLK
	MAX.XL==10			;MAX SIZ OF INTERVAL BETWEEN "BUOYS"
	; ***	FOR MOMEMT INDEX BLK HAS NULL HDR
	HDR.XB==0

	;;;	FORMAT OF A KEY-NODE IN AN INDEX BLK
	FIELD	(XN.SON)		;PTS AT INDEX-BLK/DATA-REC AT NEXT
					; LOWER LEVEL
	BLKSIZ	(XN.KEY)		;ALSO 1ST WORD OF VAR LEN FIELD

	;;;	FORMAT OF A KEY-LEAF (OR "BUOY")
	FIELD	(XL.NEXT)
	FIELD	(XL.PRIOR)
	FIELD	(XL.CNT)		;NUM OF DATA-RECS IN THIS INTERVAL
	SIZ.XL==SIZ.X6L-1
	FIELD	(XL.OWNER)
	BLKSIZ	(SIZ.X6L)


  REPEAT 0,<				;[1107] Remove Tape Journal support
	SUBTTL	DAEMDB RELATED SYMBOLS


	;;;	DAEMDB ACTION DRIVING CODES
	OFFS.==10			;MAKE COINCIDENCE SOMEWHAT LESS LIKELY
	FIELD	(DADOPEN)
	FIELD	(DADCLJ)		;CLOSE-J FLUSHES ALL FROM JT
	FIELD	(DADCLRU)		;CLOSE-RU JUST COPS THRU JP.BIX-1
	BLKSIZ	(CODAD)

	;;;	ERROR CODES FROM DAEMDB
	FIELD	(DAXOK)			;SUCCESSFUL RETURN
	FIELD	(DAXNQD)		;NO QUASAR OR DAEMDB
	FIELD	(DAXMIX)		;DBCS SOFTWARE ERROR DURING MAGTAPE INIT
	FIELD	(DAXAJD)		;ALREADY JMDISK DONE
	BLKSIZ	(CODAX)
;Basic DAEMDB/QUASAR "Create" Message Description
	BYTES	(QE,<<CNT,^D18>,<TYP,^D18>>) ; Word Count,,Message Type
	  .QOCQE==37
	FIELD	(QE.FLG)		; Flags
	FIELD	(QE.UDF)		; User Defined Field (not used)
	FIELD	(QE.FLW)		; Flag Word
	FIELD	(QE.ARG)		; Argument Count
	FIELD	(QE.QT)			; Queue Type Block...
	  .QCQUE==24
	FIELD	(QE.OBJ)		; Object Code (.OTDBM)
	  .OTDBM==21
	FIELD	(QE.FD)			; File Description Block...
	  .QCFIL==10
	  OFSFD.==OFFS.			; File Specification (TOPS20)
	FIELD	(QE.FIL,11)		; ...asciz text equivalent
	  OFFS.==OFSFD.			; File Specification (TOPS10)
	FIELD	(QE.STR)		; ...Structure Name in SIXBIT
	FIELD	(QE.NAM)		; ...File Name in SIXBIT
	FIELD	(QE.EXT)		; ...Extension in SIXBIT
	FIELD	(QE.PPN)		; ...Project,,Programmer Number
	FIELD	(QE.NUS,5)		; ...(not used)
	FIELD	(QE.FRR)		; Limit Block...
	  .QCFRR==37
	FIELD	(QE.COD)		; ...Journal Operation Code
	FIELD	(QE.PID)		; ...Sender's Process Id (PID)
	BLKSIZ	(SIZ.QE)	

;;; End DAEMDB/QUASAR DECLARATIONS
  >; End REPEAT 0			;[1107] Remove Tape Journal support
	SUBTTL	JOURNAL RELATED SYMBOLS

	;;;	THE POSSIBLE JOURNAL-BLK CODES
	AI.COD==1
	BI.COD==2
	CS.COD==3			;COMMAND START
	CE.COD==4			;COMMAND END
	LB.COD==5			;LABEL (MULTI-REEL)
	TS.COD==6
	TE.COD==7			;TRANSACTION START/END CODES
	TX.COD==10			;TEXT COMMENT BLOCK
	CU.COD==11			;CURRENCY-BACKUP BLOCK, USED AT
					; RUN-TIME ONLY
	TAI.COD==12			;AFTER IMAGE FROM TEMP FILE
					;(NOW JRN'D BECAUSE OF PRESERVE)
	TBI.COD==13			;BEFORE IMAGE FROM TEMP FILE
	HI.COD==13			;HIGHEST CURRENT CODE
	; ***	POWER-OF-2 BIT CORRES FOR J CODES
	DEFINE C2B(STRING)<STRING'.BIT==1_<STRING'.COD-1>>
	C2B(BI)
	C2B(AI)
	C2B(CS)
	C2B(CE)
	C2B(LB)
	C2B(TS)
	C2B(TE)
	C2B(TX)
	C2B(CU)
	C2B(TAI)
	C2B(TBI)

	;;;	THE POSSIBLE JOURNAL-PAGE IDS
	EM.PID==0			;EMPTY PHYSICAL BLK
	DT.PID==1			;1ST LOG BLK IS DATA BLK
	LB.PID==2			;1ST LOG BLK IS LABEL BLK
	ER.PID==3			;PSEUDO-VALUE, USED IN DBMEND
					; FOR ERROR CONTROL
	SK.PID==4			;PSEUDO-VAL, USED IN DBMEND TO SKIP
					; THE (BAD) BLK

	;;;	MISCELLANEOUS JOURNAL SYMBOLS
	JR.PSIZ==1000			;SIZE OF A JOURNAL PAGE/BUFFER
	JR.PRALC==20			;# OF JPAGES TO PRE-ALLOC, EACH
					; TIME RUNOUT, DURING APPLIC
	JR.CHUNK==40			;# OF JPAGES TO COPY FROM A MAG
					;TAPE JOURN TO DSK .TMP WHEN
					; MERG BEF
	EMP.JP==JR.PSIZ-HDR.JP		;AMT OF FREE SPACE ON AN EMPTY
					; (IE. DATALESS) J PAGE
	BKU.AI==1B35			;AL-AB.BKU VALUE, BACKUP AFT IMS
	BKU.BI==1B34			;DITTO, BEF IMS
	JI.WMAX==^D16			;CARD IMAGE
	JR.BFM==1B35			;JOURNAL BUFFERS MODIFIED
					;...SINCE LAST FLUSH

	;;;	JOURNAL PAGE HEADER
	FIELD	(JP.BIX)		;BLOCK/JP INDEX, IDENTIFIES
					;JOURNAL PAGE
	JP.KEY==OFFS.			;FOR COMPARING AGAINST JLANCPID
	BYTES	(JP,<<ANC,^D18>,<PID,^D18>>)
					;LH, PHYSICAL ANCHOR: TELLS
					;ABOUT  BUF END
					;LSS 0: AMOUNT OF POTENTIALLY
					;WASTED (IE. INCOMPLETE) DATA
					;AT END OF PAGE
					;ELSE THE NUM OF UNUSED WORDS
					;ON PAGE
					;PAGE TYPE ID (SEE BELOW)
	JP.NEED=OFFS.
	BYTES	(JP,<<LSIZ,^D18>,<LCOD,^D18>>)
					;SIZE OF LAST LOG BLK STARTING
					;ON THIS JP
					;ITS LOGICAL CODE
	BYTES	(JP,<<FLAG,^D18>,<1STH,^D18>>)
					;OFFSET OF 1ST LOGBLK HDR ON J 
					;AGE, OR 0
	FIELD	(JP.SEQ)		;IF PAGE+1 HAS A LOWER SEQUENCE
					; NUMBER, WILL
					;KNOW THIS IS LAST PAGE OF J
	FIELD	(JP.UNU)		;FOR FUTURE EXPANSION
	BLKSIZ	(HDR.JP)
	JLANCPID=<EMP.JP-SIZ.JL>B17+LB.PID ;ACTS AS KEY TO J FORMAT
					   ;VALIDITY
					   ;IF FORMAT OF JP.KEY CHANGES,
					   ;THIS MUST ALSO


	;;;	JOURNALL BLOCK HDR
	;JOURNAL BLK HDR NO LONGER HAS ALTEREGO OF DBPAGE BUFFER PREFIX
	JB.CURR==OFFS.
	BYTES	(JB,<<CSIZ,^D18>,<CCOD,^D18>>)
					;CUR SIZE (IN WORDS) AND CODE
					;OF THIS JOURNAL BLK
	JB.PREV==OFFS.
	BYTES	(JB,<<PSIZ,^D18>,<PCOD,^D18>>)
					;DITTO, BUT FOR PREV JB
	FIELD	(JB.RNID)		;FOR SIMUL UPDATE, WHICH RUN-
					;UNIT IS CREATOR OF BLK
	BLKSIZ	(HDR.JB)


	;;;	TEMPLATES FOR EACH TYPE OF JB
	; ***	IMAGES ARE OF VARIABLE SIZE & ARE FULLY DESCRIBED IN USER SCHEMA

	; ***	LABEL BLK
	FIELD	(J1.PAG,HDR.JP)		;MAKE JLP OFFSETS
					;CONSISTENT W/ POS. ON PAGE
	FIELD	(JB.HDR,HDR.JB)
	FIELD	(J1.SCH,SHORT/CPW)	;SCHEMA NAME (IN SIXBIT)
	FIELD	(J1.RUN)		;RUN SEQUENCE NUM, IS INTEGER
	FIELD	(J1.REEL)		;REEL # (INTEG)
	FIELD	(J1.DATE,4)		;DATE/TIME IN ASCII
	; ***	INTERNAL CONTROL INFORMATION
	FIELD	(J1.RNID)		;ADD 1 AND GIVE NEXT J OPENER
					;VAL AS ITS RNID
	FIELD	(J1.RACT)		;R-U ACTIVE (IE. LE RNID)
					;USED TO SET JP.SEQ
	FIELD	(J1.TRAC)		;# OF TRANSAC WHICH ARE
					;IN (IE. HAVE IMAGES IN) THE J
	FIELD	(J1.HALC)		;H PAGE # ALLOC IN JRT/JRN FILE
					;IE. BOUND FOR WHERE UPFGS/
					;FILOPS BEGIN
	FIELD	(J1.MTP)		;P# OF LAST JP MERGED INTO MTA J
	FIELD	(J1.LIX)		;LAST ACTUAL JP (W/ CURR SEQ#)
					;IN (DISK PART OF) JOURNAL
J1.NEED=OFFS.				;FOR CONSIS. THE JP.NEED OF
	BYTES	(J1,<<ANC,^D18>,<PID,^D18>>) ; OF LAST PAGE (LIX)
	FIELD	(J1.THRESH)		     ;MTA SPOOLING THRESHOLD
	FIELD	(J1.POLL)		     ;MSEC MTA POLLING PERIOD
	FIELD	(J1.R3)
	FIELD	(J1.R4)
	FIELD	(J1.R5)
	FIELD	(J1.R6)
OFFS.==OFFS.-JB.HDR			;MAKE LENGTH NOT INCLUDE
					;...PAGE HEADER
	BLKSIZ	(SIZ.JL)

	; ***	INFO BLK
	FIELD	(JI.LEN)		;IN ITS OWN UNITS
	  INF.NOP==1B0			;NON PRINTING INFO
	  INF.1ST==1B1			;1ST OF MULTI-BLK INFO
	  INF.MOR==1B2			;MIDDLE OF MULTI
	  INF.LAS==1B3			;LAST OF MULTI
	  INF.1P==0			;NO BITS ON, MEANS SINGLE  PRINTING BLK
	FIELD	(JI.INFO,JI.WMAX)
	BLKSIZ	(SIZ.JI)

	; ***	CURRENCY BACKUP BLK
	FIELD	(JU.ADDR)		;LESS THAN 0 IS SET BLK
	FIELD	(JU.CURR)
	FIELD	(JU.CNEX)		;MEANINGFUL ONLY FOR SET BLK
	BLKSIZ	(SIZ.JU)
	; ***	COMMAND/VERB BLK
	FIELD	(JC.IDX)		;DENOTES THIS IS (I)TH CMD EXEC IN RUN-
					;UNIT SINCE STARTED
	FIELD	(JC.TYP)		;AS IN STANDARD ERROR CODES
	BLKSIZ	(SIZ.JC)

	; ***	TRANSACTION BLK
	FIELD	(JT.IDX)		;DITTO FOR TRANSACTION OF THIS TYPE
	FIELD	(JT.LEN)		;NUM OF CHARS IN TRANS NAME/TYPE
	FIELD	(JT.NAM,NAMLEN/CPW)
	BLKSIZ	(SIZ.JT)

	; ***	DETERM WHICH JB TYPE IS LARGEST SINCE TEMPLATES WILL BE
	; ***	 CO-INCIDENT DURING JOURNAL BUILDING
	DEFINE	MAXCHK(TYP.)<IRP TYP.,<IFG SIZ.J'TYP.-MAX.JB,<MAX.JB==SIZ.J'TYP.>>>
	MAX.JB==0
	MAXCHK	<I,T,C,U>


	SUBTTL IN-CORE SYMBOL DEFINITIONS

	;;;	COMMON TO AB.,RB., AND OB.
	FIELD	(SN.IDADR)		;NMID+IDVEC(SS) FOR THIS SYMBOL
	BYTES	(SN,<<NEXT,^D18>,<LEN,^D18>>)
	BLKSIZ	(SN.NAM)		;DOUBLES AS OFFSET OF VARIABLE LEN FIELD

	;;;	AREA IN-CORE BLOCK
	FIELD	(AB.CUR)		;DBKEY OF CURR REC OF AREA
	FIELD	(AB.TSC)		;DBKEY OF CURR REC OF AREA AT START OF 
					; TRANSACTION
	FIELD	(AB.CHAN)		;CHANNEL/JFN OF THE FILE THAT COMPRISES
					;THE AREA
	FIELD	(AB.MODE)		;USAGE MODES -- SEE UM.XXX
AB.MASK==OFFS.				;->NXT WD ADDXABLE 2 WAYS
					;THE LEFT SIDE MAY CONTAIN VARIOUS
					; UM% BITS
	BYTES	(AB,<<MWD,^D18>,<MBT,^D18>>)
					;MWD=WHICH LOCK WORK THIS AREA 
					;USES
					;MBT=WHICH BIT IN THE WORD REPS
					; AREA
	FIELD	(AB.TRN)		;AOBJ PTR TO LIST OF KB'S WHICH
					; REF THIS AREA
	FIELD	(AB.BUFPT)		;AOBJ LIST OF BUFFER PTRS FOR THIS AREA
	FIELD	(AB.CLPT)		;AOBJ LIST OF CLUSTER PTRS FOR
					; THIS AREA
	FIELD	(AB.FIL)		;PTR TO FILE SPEC AREA ASSIGNED TO
	FIELD	(AB.TBUF)		;A "SPECIAL" EXTRA BUFFER IS ALLOC-ED
					; FOR A TMP AREA
	BYTES	(AB,<<NUL,^D17>,<PTF,^D1>,<UNUSED,^D18>>)
					;NUL AND UNUSED ARE UNUSED
					;AB.PTF = PRESERVE TMP FILE
	FIELD	(AB.TOA)		;-1,,0 = TMP 0,,-1 = AID -1 =TMP+AID
	FIELD	(AB.TCHAN)		;IF TEMP AREA, NEED A 2ND CHANNEL
					; TCHAN= -1,,CHAN IF TMP
					;	0,,CHAN IF AID
	FIELD	(AB.TLAP)		;THIS 2ND FILE GROWS...NEED LAST ALLOC
					; PAGE (1ST PAGE==0)
	FIELD	(AB.ILAP)		;IN TEMP AREA, HAVE NEVER-NEVER LAND
					; WHERE PAGES LT AB.LAP
					;HAVEN'T BEEN WRITTEN BECAUSE TEMP FILE
					; IS PACKED
					;SO IF KNOW HOW BIG .DBS FILE IS, CAN
					; DETECT THEM
					;IOW, AB.ILAP=AB.LAP AS OF OPEN
	FIELD	(AB.PINV)		;THE VALUE=AL.PSIZ-AP.PUNR, FOR USE IN
					; ALC.REC
	; ***	START OF BLTTABLE STUFF
	AB.BLT==OFFS.
	FIELD	(AB.1STP)		;P# OF 1ST PAGE OF AREA
	FIELD	(AB.LASP)		;P# OF LAST DEFINED PAGE
	FIELD	(AB.PSIZ)		;PAGE SIZE
	BYTES	(AB,<<ONBUF,^D18>,<SHAR,^D18>>) ;FOR SHARING BUFFERS
					; ONBUF - AB WHICH OWNS NBUF
					; SHAR  - RING PTR OF ALL BUF SHAREES
	FIELD	(AB.DNBUF)		;ADDR OF DATANAME WHICH
					;	CONTAINS NBUF
	FIELD	(AB.NBUF)		;NUM OF BUFS TO ALLOC
					; 0 IF SHARING - USE AB.ONBUF
					; ONLY BUFFER "OWNER" IS NONZERO
	BYTES	(AB,<<PGL,^D18>,<CLUS,^D18>>)
					;ADDX OF PAGE LIST FOR AREA
					;CLUSTER SIZE FOR THIS AREA
	FIELD	(AB.RPP)		;MAX RECS/PAGE TO ALLOW
	FIELD	(AB.CALC)		;MAX CALC BUCKETS PER PAGE--INIT VAL
					; OF PH.1STF=PH.CALC+VAL(AB.CALC)
	FIELD	(AB.BKU)		;TYPE OF IMAGES TO PUT IN JOURNAL
	FIELD	(AB.LOK,LOKMAX/CPW * 6)	;TEXT OF LOCKS...S/P/E*R/U=6
	; ***	END OF BLTABLE STUFF
	AB.BE==OFFS.
	FIELD	(AB.ID)			;START STRLIB SYMBOL NODE
	FIELD	(AB.NLEN)		;LENGTH OF AREA NAME
	FIELD	(AB.NAM,NAMLEN/CPW)
	BLKSIZ	(SIZ.AB)		;MAX SIZE...SHORT AREA NAMES MEANS LESS
					; SIZE
	; ***	ANCILLARY STUFF
	;	MAKE BUFHDR BE A NODE OFF OF AB.BUFPT
	BYTES	(BH,<<FLG,^D18>,<BUF,^D18>>)
BH%LSH==1				;PAGE LOCK SHARED
BH%LEX==2				;PAGE LOCK EXCLUSIVE
BH%LKS==BH%LSH+BH%LEX			;ALL LOCK FLAGS
BH%TOA==4				;INPUT FROM TEMP OR AID FILE
BH%CLR==10				;CLUSTER READ PAGE HAS BEEN ACCESSED
BH%CPP==20				;NOT A FILE PAGE BUT
					;	 A CREATED PROCESS PAGE
					;ACTUAL ADDR OF A BUFFER/PAGE
	FIELD	(BH.PAGE)		;THE PAGE IN THE ASSOCIATED BUFFER
	FIELD	(BH.LRU)		;IDX TO SHOW WHETHER BUFF IS LEAST
					; RECENTLY USED
	FIELD	(BH.WRIT)		;SWITCH: -1=MUST WRITE  0=CAN JUST
					; OVWRITE
	FIELD	(BH.JPAG)		;HIGHEST JP THIS DBPAGE HAS A BEFIM IN
	  BH.DPAG==BH.LRU		;POINTS TO 1 OF N TMP/AID DIRECTORY
					; PAGES
	FIELD	(BH.TOA)		;PHY PAG # IN TMP/AID FILE
	BYTES	(BH,<<UNU,^D18>,<AREA,^D18>>) ;[6%1102]
					;[6%1102] BH.UNU is unused
					;[6%1102] BH.AREA is AREABLK for
					;[6%1102] this buffer
	BLKSIZ	(SIZ.BH)


	;CLUSTER HEADER, IS A NODE OFF AB.CLPT, USED IN SAME WAY AS
	; BUFFER HEADER, BUT SUMMARIZES INFO FOR CLUSTER

	BYTES	(CH,<<NUM,^D18>,<BH,^D18>>) ;NUMBER OF BUFFERS IN THIS CLUSTER
					    ;ADDRESS OF FIRST BUFFER HEADER
	FIELD	(CH.LRU)		    ;HIGHEST LRU VALUE FOR CLUSTER
	FIELD	(CH.WRIT)		    ;AS BH.WRIT, & HIGHEST VALUE
					    ;FOR CLUSTER
	FIELD	(CH.JPAG)		    ;HIGHEST JOURNAL PAGE A PAGE IN
					    ;THIS CLUSTER HAS AN IMAGE IN
	BLKSIZ	(SIZ.CH)


	BYTES	(EB,<<FLAG,^D18>,<IMG,^D18>>) ;FLAG=FLAGS FOR THIS TRN.
EB%RO==1				      ;TRANSACTION IS READ ONLY
					      ;IMG=IMAGE MODE FOR THIS TRN
	FIELD	(EB.KBL)		      ;AOBJ PTR TO AREA LIST FOR
					      ; THIS TRN
	FIELD	(EB.ALK)		      ;POINTER TO AREA LOCK STRUCTURE
					      ;FOR THIS TRANSACTION
	FIELD	(EB.ID)			      ;NAME-ID OF THIS TRN
	FIELD	(EB.NLEN)		      ;LENGTH OF NAME
	FIELD	(EB.NAM,NAMLEN/CPW)	      ;NAME OF THIS TRANSACTION
	BLKSIZE	(SIZ.EB)


	BYTES	(KB,<<MODE,^D18>,<CLU,^D18>>) ;USAGE-MODE FOR AREA FOR THIS TRN
	FIELD	(KB.EB)			      ;PTR TO ASSOC TRN BLK (EB)
					      ;CLUSTER SIZE FOR THIS TRN
	FIELD	(KB.AREA)		      ;POINTER TO ASSOC AREA BLK
	BLKSIZ	(SIZ.KB)


	;;;	WITHIN IN-CORE BLOCK
	FIELD	(WB.1STP)
	FIELD	(WB.LASP)
	BYTES	(WB,<<RDCODE,^D18>,<RDINC,^D18>>)
					;RDCODE - REC DISTRIBUTION CODE
	WB.NRP==1			;N RECS PER PAGE
	WB.RNP==2			;1 REC PER N PAGES
	WB.SNP==3			;1 SET PER N PAGES
					;RDINC - THE N FOR ABOVE

	BLKSIZ	(SIZ.WB)

	;;;	RECORD IN-CORE BLOCK
	BYTES	(RB,<<LM,^D18>,<FLAG,^D18>>)
					;LOC MOD CODE
	  RF.NALC==1B35			;FLAG SAYS ALLOC OPERS ILLEG
					; (IE. STORE/DELETE)
					;...CAUSED BY SET OWNED BY REC NOT
					; BEING IN SS
	  RF.NAO==1B34			;FLAG=NOT-ALL-OWNERS IN SS, MEANS
					; CANNOT DELETE THIS REC
					;...SINCE WILL BE UNABLE TO REMOVE IT
					; FROM THE "INVIS" SETS IT IS IN
	BYTES	(RB,<<DOFF,^D18>,<TSIZ,^D18>>)
					;TOTAL SIZE OF REC...FROM DSIZ+DOFF
	FIELD	(RB.CUR)		;DBKEY OF CURR REC OF THIS TYPE
	FIELD	(RB.TSC)		;DBKEY OF CURR REC OF THIS TYPE
					;  AT START OF TRANSACTION
	FIELD	(RB.TID)		;REC TYPE ID
	FIELD	(RB.MYA)		;AOBJ PTR FOR AREAS CAN BE WITHIN
	FIELD	(RB.MYD)		;THE DATA-NAMES IN THE REC
	FIELD	(RB.ION)		;THE SETS I OWN
	FIELD	(RB.OBY)		;THE SETS I AM OWNED BY
	FIELD	(RB.LOC)		;PTR TO IN-CORE BLK OF VIA SET, ADDR
					; OF DIRKEY, OR NUM OF CALC FIELDS
	FIELD	(RB.WID,2)		;STRING PTR TO UWA LOC FOR AREAID OR 0
	FIELD	(RB.ID)			;SYM NODE
	FIELD	(RB.NLEN)
	FIELD	(RB.NAM,NAMLEN/CPW)
	BLKSIZ	(SIZ.RB)		;MAX SIZE (WILL BE SMALLER IF RB.NLEN
					; IS LESS THAN 26)
					;AREA, OWNER BLKS ALSO THIS WAY
	; ***	ANCILLARY DEFS FOR AOBJ PTS
	WORD	(RB,<<RMB,^D18>,<MOB,^D18>>) ;FOR OBY
					;REC'S MEM BLK(SELF)
					;MEM'S OWNER BLK (SELF'S OWNER)
	WORD	(RB,<<UNU,^D18>,<ROB,^D18>>) ;FOR ION
					;RECORD'S OWN BLK (SELF IS OWNER)
	WORD	(RB,<<UNU,^D18>,<RDB,^D18>>) ;MYD
					;RECORD'S DATA BLKS
	WORD	(RB,<<RWB,^D18>,<RAB,^D18>>) ;MYA
					;PTR TO THE WITHIN BLK ITSELF (RWB)
					;AREA REC CAN BE WITHIN
	WORD	(RB,<<NTB,^D18>,<RTB,^D18>>) ;FOR OBY/ION IN V3TOV5
					     ;NEW TENANT BLK/CURR TB

	;;;	DATA-NAME IN-CORE BLOCK
	BYTES	(DB,<<TID,^D18>,<OCC,^D9>,<TYP,^D9>>)
					;ITS REC'S TID (FOR CONSIS OF
					; GET/MOD LIST)
					;DB.OCC FROM DL.OCC
					;DATA TYPE--SEE DT.XXX
	BYTES	(DB,<<CASE,^D18>,<KTYP,^D18>>)
					;CASE--PSEUDO? TID/DBKEY? ETC
					; (SEE KC.XXX)
					;KTYP--DATA DIRECTED KEY-TYPE ASPECTS
					; (CURR .CALC/.NORD)
					;...OTHER PROPS CONTEXT (IE. CTL-LINE)
					; DPEND
	; ***	NOTE: THESE TWO WORDS CONSTITUTE A STRING PTR
	;	 IE. THEY MUST BE TOGETHER
	FIELD	(DB.UWA)		;BYTE PTR TO BOUND ADDR OF D-N
	FIELD	(DB.SIZ)		;SIZE IN ITS OWN UNITS=
					; DL.SIZ*DL.OCC(DEF 1)
	FIELD	(DB.OFF)		;BYTE PTR TO SAME, BUT OFFSET FROM
					; BEGIN OF REC
	BLKSIZ	(SIZ.DB)

	;;;	OWNER IN-CORE BLOCK
	OB.COWN==OFFS.			;...ACTUALLY, OWNER OF CURR SET OCC,
					; IF KNOWN
	FIELD	(OB.OOFF)		;DEFINED TO HANDLE O/M INDETERMINANCY
					; SIMPLY. SEE TB.XXX BELOW
	FIELD	(OB.POFF)		;OFFSET OF PRIOR PTR IN AN OWN REC, OR 0
	FIELD	(OB.NOFF)		;OFFSET OF NEXT PTR
	FIELD	(OB.XOFF)		;PTR TO HEAD OF INDEX STRUCTURE IF
					; SORTED SET
	FIELD	(OB.YB)			;POINTER TO A Y-BLOCK IF SORTED SET
					;IF 0, SORTED SET OCC WILL HAVE NO
					; INDEX STRUCT
	FIELD	(OB.CVIX)		;IF MATCHES VERBIX, PERFORM APPLICABLE
					; CURRENCY OPERATION
					;(1) OB.CUR UPDATE IN INSERT, MODIFY
					;(2) OB.CUR UPDATE-SUPPRES IN FIND/STORE
					;IF MATCHES -VERBIX, SUPPRESS OB.COWN
	FIELD	(OB.REC)		;ADDR OF REC BLK OF REC THAT OWNS SET
	FIELD	(OB.CPRI)		;WILL BE VALID ONLY WHEN CURR OF SET
					; LAST DET BY
					;FIND IMMED NEXT RECORD.
	FIELD	(OB.CUR)		;DBKEY OF CURR OF SET
	FIELD	(OB.TSC)		;DBKEY OF CURR OF SET
					; AT START OF TRANSACTION
	FIELD	(OB.CNEX)		;RELEVANT IF CURR OF SET DELETED/REMOVED
	FIELD	(OB.ION)		;ANAL TO RB.ION
	FIELD	(OB.ID)			;SYMBOL NODE
	FIELD	(OB.NLEN)
	FIELD	(OB.NAM,NAMLEN/CPW)
	BLKSIZ	(SIZ.OB)		;MAX ALLOCATABLE SIZE
	; *** ANCILLARY STUFF
	WORD	(OB,<<MRB,^D18>,<MMB,^D18>>) ;ION
					;PTR TO MEM'S RECORD BLK
					;PTR TO MEM'S MEMBER BLK

	;;;	MEMBER IN-CORE BLOCK
	FIELD	(MB.OOFF)		;OFFS OF OWNER PTR IN A MEM REC, OR 0
	FIELD	(MB.POFF)		;DITTO BUT FOR PRIOR PTR
	FIELD	(MB.NOFF)		;OFFS TO NEXT PTR ALWAYS
	BYTES	(MB,<<FLAG,^D18>,<SHIP,3>,<SOS,3>,<ORD,6>,<DUP,6>>)
					;FLAG--FUTURE
					;FOR OTHERS, SEE SCHEMA FILE ML. DESC
;???	  MF.REORD==1B35		;MEMBER MUST BE RE-INSERTED SINCE KEY
					; FIELD MODDED
	BYTES	(MB,<<MYS,^D18>,<MYK,^D18>>)
					;MYS=MY SOS CTL BLKS
					;MYK=MY (SORT) KEY CTL BLKS
	BLKSIZ	(SIZ.MB)
	WORD	(MB,<<IRREV,^D18>,<REST,^D18>>) ;KLUDGE A BIT FOR EFFIC
	MB.REST==MB.SHIP



	;;;	TENANT (PSEUDO!!!) IN-CORE BLOCK
	DEFINE FAK.TB(OFF.)<
	  IRP OFF.,<
	    TB.'OFF.==MB.'OFF.
	    IFN TB.'OFF.-OB.'OFF.,<PRINTX ?MEMBER-OWNER PTR OFFSETS MUST AGREE>
	  >
	>
	FAK.TB	<OOFF,POFF,NOFF>

	;;;	VIA IN-CORE BLOCK
	FIELD	(VB.MYC)		;AOBJ PTR TO SORT FIELDS AS THEY
					; APPEAR IN DATA-RECORD
	FIELD	(VB.MYX)		;DITTO--BUT AS IN INDEX-NODE
	BLKSIZ	(SIZ.VB)
	WORD	(VB,<<KTYP,^D18>,<CDB,^D18>>)
					;THE MEM DEPEND CHARAC OF A DATA-NAME
					;PTR TO ASSOC (PSEUDO-)DATA-BLK

	;;;	FILE BLOCK
	FIELD	(FB.DEV)
	FIELD	(FB.CNT)
	FIELD	(FB.DIR)
	FIELD	(FB.FIL)
	FIELD	(FB.EXT)
	FIELD	(FB.PRIV)
	FIELD	(FB.SIZ)
	BLKSIZ	(SIZ1FB)
	OFFS.==-2
	FB.HDR==-OFFS.			;FOR BIND CODE AT JFMERG
	FIELD	(FB.AOFF)		;OFFSET FROM FB.SPEC TO FB.AID
	FIELD	(FB.FLEN)		;IN -1 WORD SO THAT JSYS USAGE NATURAL
	FIELD	(FB.SPEC,MAXFS20)	;VARIABLE LENGTH ASCIZ
	FIELD	(FB.TEMP,MAXTS20)	;...ACTU START PT DETERM BY FB.FLEN
	FIELD	(FB.AID,MAXTS20)	;FILSPEC FOR .AID FILE
	BLKSIZ	(SIZ2FB)

	;	INDEX (Y) BLOCK
	FIELD	(YB.FPG)		; FIRST PAGE OF INDEX BLOCK RANGE
	FIELD	(YB.LPG)		; LAST PAGE OF INDEX BLOCK RANGE
	FIELD	(YB.EPI)		; MAX # OF KEYS PER IDX BLOCK
	FIELD	(YB.EPB)		; MAX # OF RECORDS PER BOUY
	FIELD	(YB.ISIZ)		; INDEX BLOCK SIZE IN WORDS
	FIELD	(YB.NSIZ)		; INDEX NODE SIZE IN WORDS
	FIELD	(YB.AB)			; PTR TO AREA BLOCK WHERE REC RESIDES
	BLKSIZ	(SIZ.YB)
	SUBTTL	SCHEMA DIRECTORY BLOCKS AND OFFSETS

	; SCHEMA BLOCK

	FIELD	(SL.ASR,SIZ.FH)		;MAKE THIS RECORD DOUBLE AS ASR
					;SO THAT .SCH FILE IS .DBS FILE ALSO
	FIELD	(SL.SYS)		;NMID OF AREA THAT WILL HOLD SYS RECORD
	FIELD	(SL.HINMID)		;FOR BUILDING RUN-TIME VECTOR
	FIELD	(SL.HITID)		;FOR BUILDING RECTYP ID VEC
	FIELD	(SL.NAREA)		;NUM OF AREAS
	FIELD	(SL.NTRN)		;FOR BUILDINT TRNTYP ID VEC
	FIELD	(SL.EDIT)		;CHARAC OF ENTIRE SCHEMA OVER TIME
	FIELD	(SL.RUN)		;DITTO BUT NUMBER OF TIMES SBIND-ED
	FIELD	(SL.MLAS)		;LAST USED SS (MAX IS 36)
	FIELD	(SL.JOUR)		;DBKEY OF JOURNAL'S FILE BLK, IF ONE
	FIELD	(SL.JNBUF)		;NUM OF JBUFS TO ALLOC WHEN J OPENED
	FIELD	(SL.CHKPT)		;SEE CHK.*
	FIELD	(SL.XACT)		;EXCEPTION ACTION FLAG WORD
					; (SEE VAC.*/ACT.*)
					;LEFT=NOTES // R=INTERCEPT
	FIELD	(SL.JSIZ)		;TELLS DBCS TO LIMIT JRN SIZE TO (N)
					; TRANSAC
					;...AND THEN TO BEGIN OVERWRITING AND
					; REPEAT THE CYCLE
	BYTES	(SL,<<LKS,^D18>,<LNUM,^D18>>)
					; LKS IS SCOPE OF LOCK
LKS.AL==1B0				; --AREA LOCKS
LKS.PL==1B1				; --PAGE LOCKS
					; LNUM IS MAX NUM OF LOCKS
	FIELD	(SL.LOK)		;PRIVACY LOCK FOR ADMINISTRATION
	FIELD	(SL.UNU)		;RESERVED FOR FUTURE
	BLKSIZ	(SIZ.SL)




	BYTES	(LST,<<BEG,^D18>,<END,^D18>>) ;BEG,,END OFFSETS (SPACE)
	BYTES	(LST,<<CBEG,^D18>,<CEND,^D18>>) ;CURRENT LIST BEG,,END
	BLKSIZ	(SIZ.LHD)
SIZ.LE==2				;LIST ENTRY SIZE 


;FORMAT OF A LOCK BLOCK 

	FIELD	(LK.HEAD,SIZ.LHD)	; STANDARD LIST HEADER
;	    (  BYTES	(LST,<<BEG,^D18>,<END,^D18>>)	; BEG,,END OFFSETS )
;	    (  BYTES	(LST,<<CBEG,^D18>,<CEND,^D18>>)	; CURRENT LIST BEG,,END)
	FIELD	(LK.AOS)		; SEMAPHORE WORD FOR BLOCK ACCESS
	BYTES	(LK,<<ABO,^D1>,<MOD,^D1>,<UNUSED,^D34>>) ;[1126]
		; lk.abo is on to abort all run-units (must be sign bit)
		; lk.mod is on while lock file is being modified
	FIELD	(LKJ.OWN)		; JRN LK OWNER ID
	FIELD	(LK.LLL)		;[6%464] PID OF LAST LOK-FILE LOCKER
	BLKSIZ	(LK.HDR)		; ALSO OFFSET TO ACTUAL LOCK STR.


	; LKP.?? is the format of a PAGE lock

	FIELD	(LKP.OWN)		; OWNER OF THIS LOCK
	BYTES	(LKP,<<MODE,^D2>,<QUE,^D2>,<UNU,^D5>,<PAG,^D27>>)
					; LKP.MODE IS: 0-SHR, 1-EXCLU,
					; 2-NO-RELEASE
LK.SHR==0
LK.EXC==1
LK.NRL==2				; DON'T RELEASE SHARED LOCK UNTIL
					; ...THE END OF TRANSACTION (CLOSE TRN)

					; LKP.QUE IS 0-LOCKED, 1-QUEUED,
					; 2-UPGRADE
LK.LOK==0
LK.QRQ==1
LK.UPG==2
					; OWN IS OWNER-ID (PER-RU)
					; LKP.PAGE IS PAGE NUMBER LOCKED
	BLKSIZ	(LK.PLK)		; SIZE OF PAGE LOCK BLOCK


	; LKA.?? is the format of an AREA lock

	FIELD	(LKA.OWN)		; OWNER-ID
	BYTES	(LKA,<<MODE,^D1>,<UNU,^D35>>) ; MODE AS in LKP.MOD ABOVE
	FIELD	(LKA.LN,SHORT/CPW)	; LOCK NAME (SCH UNLESS SETDB)
	FIELD	(LKA.QUE)		;0=LOCK, 1=REQ,
					; 2=first of 2 part req, -1=2ND PART REQ
	FIELD	(LKA.W1,SIZ.MSK)	; AREA LOCK WORDS
	BLKSIZE	(LK.ALK)		; SIZE OF AREA LOCK BLOCK


	;	FORMAT OF A SHARED TABLE FRAME - TOPS-10 ONLY

	BYTES	(ST,<<LCLK,^D18>,<CLEN,^D18>>) ;LOW CLOCK
					;....CURRENT LENGTH
	FIELD	(ST.LIST,^D511)		;ACTUAL WORDS OF LIST
	BLKSIZ	(SIZ.ST)

	FIELD	(PF.RWD,STKPFRM)
	BLKSIZ	(SIZ.PF)

	;SUB-SCHEMA BLOCK

	FIELD	(UL.MASK)		;ANY BLOCK THAT "OR"S NON-0 WITH THIS IS IN SS
	FIELD	(UL.LOK,LOKMAX/CPW)	;LOCK FOR PVC KEY
	FIELD	(UL.NLEN)		;UNPADDED NAME LEN
	FIELD	(UL.NAM,NAMLEN/CPW)	;ALLOCATION OF SPACE FOR SS NAME
	BLKSIZ	(SIZ.UL)

	;RECORD BLOCK

	BYTES	(RL,<<IDSET,^D18>,<NMID,^D18>>)
					;NMID IS COMMON TO MOST SCHEMA
					; DEFINED BLOCKS
					;IDSET IS LAST SET TO WHICH THIS REC
					; WAS ASSOC--FOR TENANT CONSIS
	BYTES	(RL,<<NDAT,^D9>,<NAREA,^D9>,<NOWN,^D9>,<NMEM,^D9>>)
					;EACH IS NUM OF (X) ASSOC WITH THE
					; RECORD
	BYTES	(RL,<<LM,6>,<DSIZ,^D12>,<DOFF,^D9>,<TID,^D9>>)
					;LM IS FOR LOC MODE: 0=UNDEF  1=DIRECT
					;  2=VIA  3=CALCDUP  4=CALCNODUP
					;DSIZ IS SIZE OF DATA IN WORDS
					;THE (DOFF)TH WORD OF THE LINE CONTAINS
					; 1ST WORD OF DATA
					;TID IS THE RECORD TYPE ID (APPEARS IN
					; LINE HDR)
	FIELD	(RL.SS)			;TELLS WHICH SS THIS REC IN
	FIELD	(RL.LOC)		;IF VIA, DBKEY OF THAT SET BLK
					;IF DIRECT, DBKEY OF ITS ITEM BLK
					;IF CALC, NUM OF CALC FIELDS
	FIELD	(RL.WID)		;DBKEY OF ITEM BLK OF AREA ID, IF ONE
	FIELD	(RL.NLEN)		;LEN OF REC NAME
	FIELD	(RL.NAM,NAMLEN/CPW)	;THE REC NAME IN ASCII
	BLKSIZ	(SIZ.RL)

	;AREA BLOCK -- USE MOSTLY FULL WORDS, ASSUME NUM OF AREA BLKS SMALL %

	BYTES	(AL,<<SYM,^D18>,<NMID,^D18>>)
					;AL.SYM USED BY SCHEMA PROCESSOR, PTS
					; TO AREA'S SYMBOL BLK
					;AS BEFORE
	FIELD	(AL.SS)			;SS THIS AREA IS IN
	; ***	BEGIN BLTTABLE STUFF
	AL.BLT==OFFS.
	FIELD	(AL.1STP)	  	;1STP IS PAGE NUM OF 1ST PAGE OF AREA
	FIELD	(AL.LASP)		;LAST PAGE NUM OF THIS AREA
	BYTES	(AL,<<PUNR,^D18>,<PSIZ,^D18>>)
					;UNROUNDED PAGE SIZE--ALLOWS MAKING
					; PART OF PAGE INVIS
					;PSIZ=PHYSICAL PAGE SIZE (ACCOR PAGE
					; BUF SIZE)
	BYTES	(AL,<<ONBUF,^D18>,<SHAR,^D18>>) ;FOR SHARING BUFFERS
					; ONBUF - AB WHICH OWNS NBUF
					; SHAR  - NAMID OF "AT AREA..."
	FIELD	(AL.DNBUF)		;DBK OF IL FOR DATANAME
	FIELD	(AL.NBUF)		;NUM OF BUFS TO ALLOC
					; NBUF IS 0 IF SHARING BUFS
					; ONLY BUFFER "OWNER" IS NONZERO
	FIELD	(AL.CLUS)		;CLUSTER SIZE FOR THIS AREA
	FIELD	(AL.RPP)		;MAX RECS PER PAGE
	FIELD	(AL.CALC)		;MAX CALC RECS PER PAGE
	FIELD	(AL.BKU)		;BACKUP SPEC: 0=NO  1=AFTER  2=BEFORE
					;  3=BOTH
	FIELD	(AL.LOK,LOKMAX/CPW * 6)	;ALL OF THE LOCKS: PERMUTE
					; CONC/PROT/EXCL UPDATE/RETR
	; ***	END BLTTABLE STUFF
AL.MASK==OFFS.				;->NXT WD ADDXABLE 2 WAYS
					;THE LEFT SIDE MAY CONTAIN VARIOUS
					; UM% BITS
	BYTES	(AL,<<MWD,^D18>,<MBT,^D18>>)
					;MWD=WHICH LOCK WORK THIS AREA USES
					;MBT=WHICH BIT IN THE WORD REPS AREA
	FIELD	(AL.FIL)		;DBKEY OF FILBLK FOR AREA
	FIELD	(AL.TMP)		;SS FOR WHICH THIS AREA A TEMP AREA
	FIELD	(AL.NLEN)		;LEN OF AREA NAME
	FIELD	(AL.NAM,NAMLEN/CPW)	;THE AREA'S NAME
	BLKSIZ	(SIZ.AL)

	;INDEX BLOCK	YL.FPG MUST BE FIRST IN Y-LINE

	FIELD	(YL.FPG)		; FIRST PAGE OF INDEX BLOCK RANGE
	FIELD	(YL.LPG)		; LAST PAGE OF INDEX BLOCK RANGE
	FIELD	(YL.EPI)		; MAX# OF INDEX ENTRIES / IDX BLOCK
	FIELD	(YL.EPB)		; MAX# OF DATA REC ENTRIES / BUOY
	FIELD	(YL.ISIZ)		; INDEX BLOCK SIZE (WORDS)
	FIELD	(YL.NSIZ)		; INDEX NODE SIZE (WORDS)
	BYTES	(YL,<<NUL,^D18>,<ANMID,^D18>>)
					; YL.NUL - NOT USED
					; YL.ANMID - AREA NAME ID
	BYTES	(YL,<<SYM,^D18>,<ASYM,^D18>>)
					; SYM - ADR OF SETNAME IN SYM TBL
					; ASYM - AREA SYM NODE PTR
	FIELD	(YL.SLEN)		; SET NAME'S LENGTH
	FIELD	(YL.SNAM,NAMLEN/CPW)	; SET NAME
	BLKSIZ	(SIZ.YL)

	;DATA BLOCK

	BYTES	(DL,<<IDREC,^D18>,<NMID,^D18>>)
					;NMID AS BEFORE
					;IDREC--NEED TO VERIFY THAT DN PART
					; OF RIGHT REC OCCAS
	BYTES	(DL,<<UNU,^D18>,<OCC,^D9>,<PREC,^D9>>)
					;UNUSED
					;OCC IS # OF OCCURS IF GTR 0
					;PREC IS PRECISION, IN COBOL S9(10)
					; FOR EX
	BYTES	(DL,<<NLEN,6>,<SLEN,6>,<PLEN,6>,<TYP,6>,<CALC,6>,<SCAL,6>>)
					;SINCE DATA BLKS ARE PRESUMABLY MOST
					; FREQUENT
					;TRY TO SAVE SPACE (HOPEFULLY NOT AN
					; ERROR IN JUDGMENT)
					;ALL STRINGS ARE ENCODED AS ONE, WITH
					;SUBSTRING OPERATORS USED TO PULL APART
					;NLEN DATA-NAME'S LENGTH
					;PLEN PICTURE'S LENGTH
					;SLEN PSEUDONYM'S LENGTH
					;THE DATA TYPE
					;CALC FIELD ORDINALITY
					;SCALE FACTOR (IMPLIED DECIMAL PT)
	FIELD	(DL.SS)			;AS BEFORE
	FIELD	(DL.OFF)		;A BYTE PTR TO ITEM WITHIN ITS RECORD
	FIELD	(DL.SIZ)		;IN TERMS OF ITS LOGICAL USE--CHARS,
					;WORDS,ETC
	DLSLEN==NAMLEN+NAMLEN+SHORT
	FIELD	(DL.STRING,DLSLEN/CPW)	;ALL THE STRINGS
	BLKSIZ	(SIZ.DL)

	;OWNER BLOCK

	BYTES	(OL,<<POFF,^D9>,<NOFF,^D9>,<NMID,^D18>>)
					;THE (POFF)TH WORD OF EACH OWNER REC
					; IS THE PRIOR PTR FOR THIS SET, IF ONE
					;THE (NOFF)TH WORD IS THE NEXT PTR--
					;ALWAYS NON-0
					;NMID--AS BEFORE
	BYTES	(OL,<<XNSIZ,^D18>,<XOFF,^D18>>)
					;LARGEST KEY-NODE SIZE FOR MEMS OF THIS
					; SET (0 IMPLIES: USE NO INDEX STRUCT)
					;THE (XOFF)TH WORD IS TOP-LEVEL IDXBLK,
					; IF ONE
	FIELD	(OL.NMEM)		;# OF MEMS IN SET
	FIELD	(OL.SS)			;SS MASK FOR THIS SET
	FIELD	(OL.NLEN)		;SET NAME'S LEN
	FIELD	(OL.NAM,NAMLEN/CPW)	;SET NAME
	BLKSIZ	(SIZ.OL)

	;MEMBER BLOCK

	BYTES	(ML,<<IDREC,^D18>,<SHIP,3>,<SOS,3>,<ORD,6>,<DUP,6>>)
					;NMID OF REC THAT IS MEM (USED DURING
					; BINDING)
					;SHIP: AUTO/MAN AND MAND/OPT
					;SOS IS TYPE OF SOS THIS REC HAS
					; 1=CURR 2=LMO
					;ORD IS 1 OF 12 POSSIB (2 PATHOL):
					; 1ST/LAST/NEXT/PRIOR ARE POSIT
					;SORTED ARE: PLAIN/DBKEY/WITHIN/UNIFIED
					; PLUS EACH WITH USER KEYS
					;BUT DBKEY+USER KEY IMPOS & UNIFIED+
					;NO-USER IMPOS
					;IF SORTED, DUP = 0 MEANS ANY
					; 1=FIRST 2=LAST 3=NOT
	BYTES	(ML,<<OOFF,^D9>,<POFF,^D9>,<NOFF,^D9>>)
					;OFFSETS ARE AS BEFORE--OOFF IS NON-0
					; IF LINKED TO OWNER
	BLKSIZ	(SIZ.ML)
	WORD	(ML,<<IRREV,^D18>,<REST,^D18>>)
	ML.REST==ML.SHIP

	;WITHIN BLOCK

	BYTES	(WL,<<REC,^D18>,<IDAREA,^D18>>)
					;SYM OF UNBOUND REC. IOW, NON-0
					; IF EXPLIC PAGE RANGE
					;NMID OF AREA CONNECTED TO
	FIELD	(WL.1STP)		;IF NOT EXPLIC SPECIFIED, =AL.1STP
	FIELD	(WL.LASP)		;DITTO AL.LASP
	BYTES	(WL,<<RDCODE,^D18>,<RDINC,^D18>>)
					;RDCODE - REC DISTRIBUTION CODE
					;	SEE WB.??P FOR DEFINITION
					;RDINC - THE N FOR ABOVE
	BLKSIZ	(SIZ.WL)

	;VIA BLOCK

	BYTES	(VL,<<NKEY,^D18>,<TYP,^D18>>)
					;TYP IS VIA LINE FOR SOS OR SORT CTL
					;NKEY = NUMBER OF ELEMS IN LIST
	BLKSIZE	(SIZ.VL)

	;CONTROL BLOCK

	BYTES	(CL,<<CASE,^D18>,<KTYP,^D18>>)
					;CASE--FOR COMPARISON CTL
					;KTYP--ASC/DESC FOR INSTANCE
	BYTES	(CL,<<IDDAT,^D18>,<IDSET,^D18>>)
					;IDSET HERE AS WITH DL.IDREC RL.IDSET
					;DITTO IDDAT
	FIELD	(CL.ALIAS)		;DBKEY OF ITEM LINE IF THERE IS AN
					; ALIAS NAME
	FIELD	(CL.IDX)		;ORDINALITY OF THIS SUBKEY (START 1)
	FIELD	(CL.XOFF)		;FOR SORTED SETS (IN VIA.SOR LISTS),
					; WHERE IN INDEX NODE THE KEY IS
	FIELD	(CL.KSET)		;DBKEY OF SET IT CTLS, USED TO SET
					; KEY.NORD
	BLKSIZ	(SIZ.CL)

	;TEXT BLK

	FIELD	(TL.SS)			;NOW TEXT CAN BE SPECIFIED ON A SS BASIS
	FIELD	(TL.TLEN)		;CHARS OF TEXT
	FIELD	(TL.TEXT,TEXMAX/CPW)	;PERHAPS TOO MUCH, WHO KNOWS
	BLKSIZ	(SIZ.TL)

	;ITEM BLOCK -- ALL RECORD INDEP SYMBOLS ARE DESCRIBED HERE

	FIELD	(IL.SLEN)
	FIELD	(IL.PSU,SHORT/CPW)	;ITS PSUEDONYM IF NON-0
	FIELD	(IL.NLEN)		;AS BEFORE
	FIELD	(IL.NAM,NAMLEN/CPW)	;AS BEFORE
	BLKSIZ	(SIZ.IL)


	;TRANSACTION BLOCK (EVENT BLOCK) - DEFINES TRANSACTION NAMES AND
	;    RECOVERY MODES

	BYTES	(EL,<<NKL,^D18>,<NMID,^D18>>) ;NAME-ID OF TRANSACTION
					      ;NUMBER OF TRN-AREA LINES FOR BIND
	FIELD	(EL.SS)			      ;SUB-SCHEMAS IN 
	BYTES	(EL,<<FLAG,^D18>,<IMG,^D18>>) ;FLAGS FOR THIS TRANS
EL%RO==1				      ;...Retrieval Only transaction
					      ;IMAGE TYPES FOR THIS TRANS
	FIELD	(EL.NLEN)		      ;LENGTH OF NAME
	FIELD	(EL.NAM,NAMLEN/CPW)	      ;REAL NAME
	BLKSIZ	(SIZ.EL)

	;TRANSACTION-AREA BLOCK DEFINES AREAS, CLUSTERING AND USAGE PER AREA, 
	;    PER-TRANSACTION

	BYTES	(KL,<<USG,^D18>,<CLU,^D18>>) ;USAGE MODE (RETR, UPDTE)
	FIELD	(KL.ARID)		     ;NAME-ID OF AREA
	BLKSIZ	(SIZ.KL)

	;FILE BLOCK -- SEPARATE IN HOPE OF BETTER OS INDEP

	FIELD	(FL.DEV)
	FIELD	(FL.CNT)		;SET ONLY BY CODE
	FIELD	(FL.DIR)
	FIELD	(FL.FIL)
	FIELD	(FL.EXT)		;SET ONLY BY CODE
	FIELD	(FL.PRIV)
	BLKSIZ	(SIZ1FL)
	BYTES	(FL,<<AOFF,^D9>,<FLEN,^D9>,<BLEN,^D18>>)
					;AOFF IS OFFSET TO .AID FSPEC
					;FLEN IS # OF WORDS IN FILE SPEC
					;BLEN # WORDS IN FILE SPEC+TMP+AID SPEC
	FIELD	(FL.SPEC,MAXFS20)	;JUST A LONG ASCIZ STRING FOR TOPS20
	FIELD	(FL.TEMP,MAXTS20)	; TMP FILSPEC
	FIELD	(FL.AID,MAXTS20)	;AID FILSPEC
					;THE ACTUAL SIZES OF THE FIL/TMP SPEC
					; IS DRIVEN BY 1ST WORD
	BLKSIZ	(SIZ2FL)

	END