Google
 

Trailing-Edge - PDP-10 Archives - ap-c800d-sb - comuni.mac
There are 16 other files named comuni.mac in the archive. Click here to see a list.
; UPD ID= 1994 on 8/6/79 at 3:34 PM by W:<WRIGHT>                       
UNIVERSAL COMUNI.MAC FOR LIBOL/COBOL VERSION 12A
SUBTTL	IMPURE AREA FOR LIBOL



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

;V12******
;HAM	27-FEB-79	[556] ADD SHARED BUF AREA WITH ISAM FLAG
;DAW	20-FEB-79	[554] ADD QUAD-WORD SIZE ERROR ROUTINES
;MFY	24-JAN-78	[551] FIX E0.6.1,E0.7.1,E0.9.1 NOT FOUND IN /R CASE
;DMN	 6-OCT-78	[540] ADD QUAD-WORD ROUNDING FUNCTION
;DMN	19-SEP-78	[537] ADD TMP.DP FOR STRNGL (BROKEN BY EDIT 521)
;EHM	13-JUN-78	[530] ADD LOCATION TO INDICATE WHEN END OF RESET

;V10******
;	21-FEB-78	[523] ADD ARG-BLK FOR FILOP. .FOURB
;	08-DEC-77	[520] ADD SWITCHES LOCATION FOR DBMS LIB
;	30-DEC-76	[470] ADD ANOTHER MTAPE FUNCTION
;	02-SEP-76	[455] ADD LOCS FOR SIMUL. READ OF RANDOM FILES WITH KEY OF 0
;	27-AUG-76	[454] ADD ZERO CHAR ROUTINES
;	16-AUG-76	[447] ADD LOC TO MARK HIGH VALUES FOR SIMUL UPDATE
;	11-AUG-76	[445] ADD TEMP FOR SIMUL READS OF DISPLAY NUMERIC KEYS
;SSC	2-AUG-76	ADD SU.DBR SO DBMS/LIBOL COMMUN TO AVOID DEADLY EMBRACE
; [431] TOPS20 EDITS
;	5/15/75		/DBT	BIS ADDITIONS
;************

	SEARCH	LBLPRM
	%%LBLP==:%%LBLP
	BIS==:BIS
	MCS==:MCS
	TCS==:TCS
	DBMS==:DBMS

;COMUNI.MAC EDIT NO
%%COMUNI==2

;STARTING ADDRESSES FOR LIBOL.SHR  HIGH AND LOW SEGMENTS
;THESE NUMBERS ARE REQUIRED FOR COMMUNICATION BETWEEN LIBOL AND
;COMPILER PROGRAMS

IFE TOPS20,<HI.ORG==400000	;START OF HIGH SEGMENT OF LIBOL>
IFN TOPS20,<HI.ORG==600000	;START OF HIGH SEGMENT OF LIBOL>

	HI.PUR==HI.ORG+10	;FIRST ABSOLUTE ADDRESS OF LIBOL.EXE
	LO.PUR==140		;FIRST ABSOLUTE ADDRESS OF LIBOL.LOW


;THE FOLLOWING SERIES OF MACROS DEFINES THE LOW SEGMENT
;
;	ELMT%% IS A MACRO WITH PARAMETERS  NAME,LENGTH,VALUE
;		NAME	-	LOCATION NAME 
;		LENGTH	-	LENGTH IN WORDS
;		VALUE	-	CONTENTS OF LOCATION
;
;	ALL OF THE PARAMETERS ARE OPTIONAL  THE DEFAULT OF LENGTH IS 1

;	ELMT%% IS REDEFINED ACCORDING TO WHAT ONE WISHES TO KNOW ABOUT
;	THE LOW SEGMENT.
;
;	SYMH%% AND SYML%% ARE MACROS WITH PARAMETERS NAME,VALUE
;		NAME AND VALUE ARE REQUIRED.  THE MACROS ARE REDEFINED IN
;		THE SAME FASHION AS ELMT%%
;		SYMH%%	-	HIGH SEG SYMBOL
;		SYML%%	-	LOW SEG SYMBOL

;
; THE FOLLOWING MACRO DEFINES THE LIBOL LOW SEGMENT LOCATIONS
; WHICH ARE REFERENCABLE AS EXTERNALS BY ROUTINES OUTSIDE OF THE
; LIBOL HIGH SEGMENT.  SYMBOLS TO RESOLVE THE EXTERNAL REFERENCES ARE
; GENERATED BY LILOWS.MAC VIA A REFEENCE TO LOWAD% MACRO.
; THESE ARE THE ONLY EXTERNALLY REFERENCABLE LIBOL LOW SEGMENT 
; ADDRESSES.
;
; ANY ADDITIONAL SUCH LOCATIONS MUST BE ADDED AT THE END OF THE 
; CURRENT SET.  CHANGING THE RELATIVE POSITION OR REMOVING ANY OF
;  THE EXISTING ITEMS WILL PRODUCE INCOMPATABILITIES WITH
; PREVIOUSLY COMPILED AND/OR LOADED COBOL PROGRAMS

;AS OF VERSION 12 THIS IS NO LONGER TRUE
;THE SYMBOLS E0.6, E0.7, AND E0.9 ARE KNOWN TO THE COMPILER ALSO.
;THUS IT IS NO LONGER POSSIBLE TO ADD NEW LOCATIONS TO VISBL%
;NEW ONES MUST BE ADDED AFTER E0.9 

; INITIALIZATION:
;
; THESE LOCATIONS ARE INITIALIZED BY LOADING LILOWS OR LIBREL
; OR BY COBST.


DEFINE	VISBL%<

	ELMT%%	MEMRY%,1;;	POINTER TO MEMRY. - INITIALIZED IN CBLIO
	ELMT%%	TALLY.,1,<Z>;;		THE SPECIAL REGISTER TALLY
	ELMT%%	SZERA.,1,<Z>;;		"SIZE ERROR" INDICATOR
	ELMT%%	OVFLO.,1,<Z>;;		OVERFLOW INDICATOR

	ELMT%%	TRAC1.,1,<JRST	BTRAC.##>;;	POINTER TO TRACE ROUTINE
	ELMT%%	TRAC2.,1,<JRST	TRPOP.##>;;	POINTER TO TRACE ROUTINE
	ELMT%%	TRAC3.,1,<JRST	TRPD.##>;;	POINTER TO TRACE ROUTINE

	ELMT%%	OPNCH.,1,<XWD	777774,0>;;	OPEN OR CLOSE DEVICE CHANNEL STATUS
	ELMT%%	RN.DEV,1;;		[333] DEVICE FOR OVERLAY FILE
	ELMT%%	RN.PPN,1;;		[333] PPN FOR OVERLAY FILE
	ELMT%%	RN.NAM,1;;		[346] RUN NAME.
	ELMT%%	FSLOC.,1,<Z>;;		[346] FIRST LOCATION USED BY SORT.
	ELMT%%	HLOVL.,1,<Z>;;		[346] HIGH,,LOW LIMITS ON FREE CORE.

	ELMT%%	%REMOV,1,<EXP	REMOV.##>;;		ADDRESS OF REMOV.
IFN ANS74,<
	ELMT%%	%ENTOV,1,<EXP	ENTOV.##>;;		ADDRESS OF ENTOV.
>

	ELMT%%	KEYCV.,1,<Z>;;
	ELMT%%	SAVEF.,1,<Z>;;		;PLACE TO SAVE .JBFF WHILE DOING
;;					; A SORT.  NEED TO PUT IT HERE
;;					; SO THAT COBDDT CAN REFERENCE
;;					; IT IF LINK-10 OVERLAYS ARE
;;					; ACTIVE.  AND SO THAT CSORT
;;					; NEEDEN'T BE LOADED IF THE
;;					; PROGRAM DOESN'T DO ANY SORTING.
	ELMT%%	HPRT.,1,<EXP	HSRPT.##>;;	;POINTER TO HISTOGRAM
						; PRINTING ROUTINE.
	ELMT%%	SEGNO.,1,<Z>;;		;CURRENT SEGMENT NUMBER.
	ELMT%%	SNRBP.,1,<EXP	SBPSG.##>;;	;POINTER TO COBDDT ROUTINE
;;						; TO SET BREAKPOINTS IN
;;						; NON RESIDENT SEGMENTS.
	ELMT%%	TRAC4.,1,<EXP	CNTRC.##>;;	;POINTER TO TRACE ROUTINE.
	ELMT%%	CIOTF.,1,<EXP	SFOV.##>;;	;POINTER TO COBDDT'S ROUTINE
;;						; TO INITIALIZE LINK-10
;;						; OVERLAYS.
;;THIS IS A TEMPORARY CROCK TO MAKE DBSTP$ VISIBLE TO DBMS
;;THE PROBLEM IS THAT ITS ADDRESS MUST BE IN THE LOW SEGMENT FOR DBMS
;;BUT VISIBLE TO LIBOL ALSO
;;THIS WILL BE FIXED IN V13
	ELMT%%	DBSTP%,1,<EXP	DBSTP$##>;;	;POINTER TO DBMS CLEANUP ROUTINE
	SYML%%	LEVEL.,<.-1>
	IFNDEF LEVEL.,<PRINTX ?LEVEL. NOT DEFINED!>
;;	ELMT%%	LEVEL.,1,<Z>;;		;PERFORM DEPTH
	ELMT%%	METR.,1,<Z>;;		;METER POINT DATA
>
SUBTTL	HEADER BLOCK OF COBOL PROGRAMS


; DEFINITION OF THE INFORMATION HEADER BLOCK GENERATED
; AT THE BEGINNING OF EACH COBOL PROGRAM

DEFINE	INFBK% <
	ELMT%%	FILES.;;	FILES.
	ELMT%%	USES.;;	USES.
	ELMT%%	SEGWD.;;	SEGWD.
	ELMT%%	ALTER.;;	ALTER.
	ELMT%%	OVRFN.;;	OVRFN.
	ELMT%%	POINT.;;	POINT.
	ELMT%%	COMMA.;;	COMMA.
	ELMT%%	MONEY.;;	MONEY.
	ELMT%%	MEMRY.;;	MEMRY.	
	ELMT%%	%NM.;; 
	ELMT%%	%DT.;;	 
	ELMT%%	%PR.;;	 
	ELMT%%	COBVR.;;	COMPILER VERSION NUMBER
	ELMT%%	COBSW.;;	COMPILER FEATURE TEST SWITCHES
	ELMT%%	PUSHL.;;	SIZE OF THE PUSH DOWN LIST
	ELMT%%	SURRT.;;	SIZE OF THE RETAINED RECORDS TABLE
	ELMT%%	SUEQT.;;	SIZE OF THE ENQUEUE/DEQUEUE TABLES
	ELMT%%	SUFBT.;;	SIZE OF THE FILL/FLUSH BUFFER TABLE
>


; DEFINE THE VALUE OF FIXNUM AS THE LENGTH OF THIS AREA

	FIXNUM==0
DEFINE	ELMT%%	(N%,L<1>,V) <
	FIXNUM==FIXNUM+1	>
	INFBK%
	PURGE	ELMT%%

SUBTTL	PRESET SECTION OF LIBOL LOW SEGMENT

DEFINE	PREST%	<
	SYML%%	IFRST.,.;;	LOW SEG PRESET POINTER
	SYMH%%	PFRST.,.;;	HIGH SEG PRESET  POINTER

	ELMT%%	OVFLG.,1,<Z		>;;		OVERLAY CODES

IFN BIS,<
	ELMT%%	E0.6,1,<EDIT	0>;;	SIXBIT E0 TABLE
	ELMT%%	E0.6.1,1,<0>;;		[551] FILL CHAR
	ELMT%%	,1,<0>;;		FLOAT CHAR
	ELMT%%	,1,<"$"-40>
	ELMT%%	,1,<","-40>;;
	ELMT%%	,1,<"."-40>;;
	ELMT%%	,1,<" "-40>;;
	ELMT%%	,1,<"0"-40>;;
	ELMT%%	,1,<"+"-40>;;
	ELMT%%	,1,<"-"-40>;;
	ELMT%%	,1,<"C"-40>;;
	ELMT%%	,1,<"R"-40>;;
	ELMT%%	,1,<"D"-40>;;
	ELMT%%	,1,<"B"-40>;;
IFN ANS74,<
	ELMT%%	,1,<"/"-40>;;
>

	ELMT%%	E0.7,1,<EDIT	0>;;	ASCII E0 TABLE
	ELMT%%	E0.7.1,1,<0>;;		[551] FILL CHAR
	ELMT%%	,1,<0>;;		FLOAT CHAR
	ELMT%%	,1,<"$">
	ELMT%%	,1,<",">;;
	ELMT%%	,1,<".">;;
	ELMT%%	,1,<" ">;;
	ELMT%%	,1,<"0">;;
	ELMT%%	,1,<"+">;;
	ELMT%%	,1,<"-">;;
	ELMT%%	,1,<"C">;;
	ELMT%%	,1,<"R">;;
	ELMT%%	,1,<"D">;;
	ELMT%%	,1,<"B">;;
IFN ANS74,<
	ELMT%%	,1,<"/">;;
>

	ELMT%%	E0.9,1,<EDIT	0>;;	EBCDIC E0 TABLE
	ELMT%%	E0.9.1,1,<0>;;		[551] FILL CHAR
	ELMT%%	,1,<0>;;		FLOAT CHAR
	ELMT%%	,1,<133>;;
	ELMT%%	,1,<153>;;
	ELMT%%	,1,<113>;;
	ELMT%%	,1,<100>;;
	ELMT%%	,1,<360>;;
	ELMT%%	,1,<116>;;
	ELMT%%	,1,<140>;;
	ELMT%%	,1,<303>;;
	ELMT%%	,1,<331>;;
	ELMT%%	,1,<304>;;
	ELMT%%	,1,<302>;;
IFN ANS74,<
	ELMT%%	,1,<141>;;
>

>	;;END OF BIS PRESETS

	SYML%%	FRSTIC,.
	ELMT%%	IIN,1,<IN 0,CMDLST	>;;		INDEX FILE UUOS
	ELMT%%	IOUT,1,<OUT 0,CMDLST	>;;		
	ELMT%%	ISETI,1,<USETI 0,(AC1)	>;;		
	ELMT%%	ISETO,1,<USETO 0,(AC1)	>;;		
	ELMT%%	ICLOS,1,<CLOSE 0,0	>;;		
	ELMT%%	IRELE,1,<RELEAS 0,0	>;;		
	ELMT%%	IGETS,1,<GETSTS 0,AC2	>;;		
	ELMT%%	ISETS,1,<SETSTS 0(AC2)>;;
	ELMT%%	IWAIT,1,<CALLI 0,10	>;;		
	ELMT%%	IRNAM,1,<RENAME 0,UEBLK.	>;;		
	SYML%%	LASTIC,<.-1>

	SYML%%	UFRST.,.
	ELMT%%	MWAIT.,1,<MTAPE 0,0	>;;		WAIT
	ELMT%%	MREW.,1,<MTAPE 0,1	>;;		REWIND
	ELMT%%	MREWU.,1,<MTAPE 0,11	>;;		REWIND AND UNLOAD
	ELMT%%	MBSPR.,1,<MTAPE 0,7	>;;		BACKSPACE RECORD
	ELMT%%	MBSPF.,1,<MTAPE 0,17	>;;		BACKSPACE FILE
	ELMT%%	MADVR.,1,<MTAPE 0,6	>;;		ADVANCE RECORD
	ELMT%%	MADVF.,1,<MTAPE 0,16	>;;		ADVANCE FILE
	ELMT%%	MWEOF.,1,<MTAPE 0,3	>;;		WRITE "EOF
	ELMT%%	MTIND.,1,<MTAPE 0,101	>;;		SET INDUSTRY COMPATIBLE MODE FOR EBCDIC
	ELMT%%	MERAS.,1,<MTAPE 0,13	>;;[470]	WRITE BLANK TAPE ( 3 IN. )
;;	BLOCK	1;;		WRITE BLANK TAPE ( 3 IN.)
;;	BLOCK	1;;		ADVANCE TO LOGICAL "EOT"
	ELMT%%	SOBOT.,1,<STATO 0,4000	>;;		SKIP IF "BOT"
	ELMT%%	SZBOT.,1,<STATZ 0,4000	>;;		SKIP IF NOT "BOT"
	ELMT%%	SZEOF.,1,<STATZ 0,20000	>;;		SKIP IF NOT "EOF"
	ELMT%%	SZEOT.,1,<STATZ 0,2000	>;;		SKIP IF NOT "EOT"
	ELMT%%	UOPEN.,1,<OPEN 0,UOBLK.	>;;		BLOCK 3 (INITIALZE FOR TTY)
	ELMT%%	UENTR.,1,<ENTER 0,UEBLK.>;;		BLOCK 4
	ELMT%%	ULKUP.,1,<LOOKUP 0,ULBLK.>;;		BLOCK 4
	ELMT%%	UOBUF.,1,<OUTBUF 0,2(AC6)>;;		
	ELMT%%	UIBUF.,1,<INBUF 0,2(AC6)	>;;		
	ELMT%%	UCLOS.,1,<CLOSE 0,0	>;;		
	ELMT%%	URELE.,1,<RELEAS 0,0	>;;		
	ELMT%%	USETI.,1,<USETI 0,(AC1)	>;;		
	ELMT%%	USETO.,1,<USETO 0,(AC1)	>;;		
	ELMT%%	UOUT.,1,<OUT 0,0		>;;		
	ELMT%%	UIN.,1,<IN 0,0		>;;		
	ELMT%%	USETS.,1,<SETSTS 0,(AC2)	>;;		FROM AC2
	ELMT%%	UGETS.,1,<GETSTS 0,AC2	>;;		INTO AC2
	ELMT%%	UWAIT.,1,<CALLI	0,10	>;;		WAIT UNTIL DEVICE INACTIVE
IFN ANS68,<
	ELMT%%	USEEK.,1,<CALLI	0,56	>;;		SEEK UUO
>
IFN ANS74,<
	SYML%% 	USEEK.,-1;;				KEEP LINK HAPPY UNTIL VERSION 13
>
	ELMT%%	URNAM.,1,<RENAME 0,UEBLK.>;;		RENAME FOR PURGE.
	SYML%%	ULAST.,<.-1>
	SYML%%	ULEN.,<UFRST.-ULAST.>;;			LENGTH OF TABLE NEGATED

	ELMT%%	UOCAL.,1,<EXP C.RSET##+1>;;		RETURN ADR OF LAST COBOL UUO
	ELMT%%	UOBLK.,3,<EXP 0		>;;		OPEN BLOCK
	ELMT%%	TMP.PT,1,<POINT 7,TMP.BK>;; TEMP PTR TO HANDLE V1-V2
	ELMT%%  FID.PT,1,<POINT 7,FID.BK>;; [431] POINTER TO TOPS20 FILE DESCRIPTOR
	ELMT%%	FUSIA.,2,<EXP 11	>;;		ARG-BLK FOR FILOP. USETI
	ELMT%%	FUSOA.,2,<EXP 12	>;;		ARG-BLK FOR FILOP. USETO
	ELMT%%	FUSCP.,1,<EXP 10	>;;	[523]	ARG-BLK FOR FILOP. .FOURB
	ELMT%%	ARGBK.,6,<EXP 5		>;;		EXTENDED LOOKUP BLOCK
	SYML%%	ILAST.,<.-6>

	>
SUBTTL	NON-PRESET SECTION OF LIBOL LOW SEGMENT

; DEFINE THE NON-PRESET SECTION OF THE LIBOL LOW SEGMENT

DEFINE	LIDAT%	<
	ELMT%%	UEBLK.,4;;		ENTER BLOCK
	ELMT%%	ULBLK.,4;;		LOOKUP BLOCK
	ELMT%%	TTOBP.,1;;		TTY BYTE POINTER
	ELMT%%	TTOBC.,1;;		TTY BYTE COUNT
	ELMT%%	TTOBF.,^D27;;		TTY ASCIZ TTCALL BUFFER
	ELMT%%	STDLB.,16;;		STANDARD LABEL IN 6IXBIT

	ELMT%%	RRFLG.,1;;		SET IF RERUN CLAUSE WAS USED
	ELMT%%	REDMP.,1;;		IF NEG FORCE A DUMP
	ELMT%%	SHRDX.,1;;		[556] SHARED ISAM BUF AREA FLAG
	ELMT%%	TEMP.,1;;		
	ELMT%%	TEMP.1,1;;		TEMP.1 MUST = TEMP.+1
	ELMT%%	JSARR.,1;;		.JBSA SAVED FOR RERUN,  LOCATION MUST = TEMP.+2
	ELMT%%	TEMP.2,1;;		TEMP.2
	ELMT%%	AINFO.,1;;		WORK LOCATION FOR OVERLAY
	ELMT%%	OVRBF.,3;;		BUFFER HEADER FOR OVERLAY FILE
	ELMT%%	FLDCT.,1;;		NUMBER OF THE CURRENT ACCEPT FIELD
	ELMT%%	OVRIX.,1;;		POINTER TO INDEX FOR OVERLAY ROUTINE
	ELMT%%	NOCR.,1;;		DURING A WTITE SKIP <CR> IF -1
	ELMT%%	PRGFLG,1;;		CLOSE FLAG - RENAME TO ZERO IF -1
	ELMT%%	TTYOPN,1;;		FILE-TABLE ADR OF OPEN TTY-FILE

	ELMT%%	ACSAV0,17;;		SAVED AC'S
	ELMT%%	MXIE,1;;		MAX INDEX ENTRY SIZE
	ELMT%%	IESAVE,1;;		INDEX ENTRY WHEN SPLITTING TOP BLOCK
	ELMT%%	MXBUF,1;;		MAX BUFFER SIZE FOR AUX BLOCK
	ELMT%%	AUXBUF,1;;		ADDRESS OF AUX BLOCK
	ELMT%%	AUXIOW,1;;		AUX BLOCK IOWD
	ELMT%%	AUXBNO,1;;		AUX BLOCK NUMBER
	ELMT%%	CMDLST,2;;		COMMAND LIST FOR IDXFILE
	ELMT%%	NEWBK1,1;;		FIRST
	ELMT%%	NEWBK2,1;;		SECOND RELATIVE DATA BLOCK NUMBER JUST ALLOCATED
	ELMT%%	OLDBK,1;;		BLOCK TO BE FREED
	ELMT%%	MXBF,1;;		MAX-BLOCKING-FACTOR
	ELMT%%	DRTAB,1;;		LOC OF DATA REC-TABLE
	ELMT%%	LRWA,1;;		LAST RECORD WORD OF AUXBUF
	ELMT%%	CORPT.,1;;		[346] FREE CORE POINTER.
	ELMT%%	HLOTC.,1;;		HIGH,,LOW LIMITS ON CORE BETWEEN .JBFF AND THE OVERLAY AREA.
	ELMT%%	OTCPT.,1;;		POINTER TO FREE CORE IN HLOTC.
	ELMT%%	RUN.TM,1;;		[346] INITIAL RUN TIME.

	ELMT%%	CB.DDT,1;;		NONE-ZERO IF COBDDT IS PRESENT
	ELMT%%	SBPSA.,1;;		SUBPROGRAM'S STARTING ADDRESS
	ELMT%%	%F.PTR,1;;		POINTS TO POINTER TO FILES. I.E. XWD %LIT00,%FILES

	ELMT%%	INTBLK,4;;		; [414] INTERUPT BLOCK.

;;THE FS.??? VARIABLES ARE FOR CBLIO ERROR RECOVERY
	ELMT%%	FS.ZRO,1;;		THE BLT ZERO WORD - FS.FS TO FS.IF
	ELMT%%	FS.FS,1;;		FILE-STATUS WORD
	ELMT%%	FS.EN,1;;		ERROR-NUMBER
	ELMT%%	FS.BN,1;;		BLOCK-NUMBER
	ELMT%%	FS.RN,1;;		RECORD-NUMBER
	ELMT%%	FS.UPD,1;;		USER-PROCEDURE-DONE FLAG
	ELMT%%	FS.IGE,1;;		IGNORE-ERROR FLAG
	ELMT%%	FS.IF,1;;		IDX-FILE VS IDA
	ELMT%%	FS.IEC,1;;		IGNORED ERROR COUNT

;; ARGUMENT BLOCK FOR THE FILOP. UUO
	ELMT%%	FOP.BK,1;;		CHANNEL ,, FUNCTION
	ELMT%%	FOP.IS,1;;		IO STATUS BITS
	ELMT%%	FOP.DN,1;;		DEVICE NAME
	ELMT%%	FOP.BH,1;;		ADR OF BUFFER HEADERS
	ELMT%%	FOP.BN,1;;		NUMBER OF BUFFERS
	ELMT%%	FOP.LB,1;;		ADR OF LOOKUP BLOCK
	ELMT%%	FOP.PP,1;;		PATH POINTER

;; ARGUMENT BLOCK FOR DEC-SYS-20 COMPT. UUO
	ELMT%%	CP.BLK,1;;		; [431]	ARG,,FUNCTION
	ELMT%%	CP.BK1,1;;		; [431]
	ELMT%%	CP.BK2,1;;		; [431]
	ELMT%%	CP.BK3,1;;		; [431]
	ELMT%%	CP.BK4,1;;		; [431]
	ELMT%%	CP.BK5,1;;		; [431]
	ELMT%%	CP.BK6,1;;		; [431]
	ELMT%%	CP.BK7,1;;		; [431]
	
	ELMT%%	TMP.BK,15;;
	ELMT%%	FID.BK,15;;

	ELMT%%	NRSAV.,5;;	TEMP STORAGE FOR D.BPNR,FS.RN,D.RP, D.RCL AND REL. KEY.

	ELMT%%	AUTOLB,1;;	NON-ZERO IF MONITOR HAS AUTO LABEL PROCESSING
	ELMT%%	DELSIZ,1;;	DELIMITER SIZE
	ELMT%%	LNKNO.,1;;	LINK# ARGUMENT TO REMOVL (CANCEL)
	ELMT%%	RELEN.,1;;	SIZE OF RELEASED RECORD FOR STANDALONE SORT

;;TEMPORARY STORAGE FOR STRING/UNSTRING.
;;NOTE, DO NOT CHANGE THE ORDER OF ITEMS IN EACH GROUP (DMOVE DEPEND UPON IT)

	ELMT%%	SRC.PT,1;;	;TEMP STORE FOR SOURCE POINTER.
	ELMT%%	SRC.CT,1;;	;TEMP STORE FOR SOURCE COUNT.
	ELMT%%	SRC.MD,1;;	;SOURCE ITEM'S MODE.

	ELMT%%	DLM.PT,1;;	;DELIMITER POINTER.
	ELMT%%	DLM.CT,1;;	;DELIMITER COUNT.
	ELMT%%	DLM.MD,1;;	;DELIMITER MODE.

	ELMT%%	DST.MD,1;;	;DESTINATION'S MODE.

	ELMT%%	PM.SPT.1;;	;SOURCE POINTER.
	ELMT%%	PM.SCT,1;;	;SOURCE COUNT.

	ELMT%%	TMP.SR,5;;	;TEMP STORE FOR NUMERIC SOURCES.
	ELMT%%	TMP.DL,5;;	;TEMP STORE FOR NUMERIC DELIMITERS.
	ELMT%%	TMP.DP,1;;	;[537] HOLD NUMBER OF DECIMAL PLACES

	ELMT%%	OU.TMP,5;;	;TEMP STORE FOR NUMERIC OUTPUT.
	ELMT%%	OU.ARP,1;;	;ARG POINTER TO OUTPUT ARG'S PARAMS.
	ELMT%%	OU.MDE,1;;	;MODE OF OUTPUT ARG.

	ELMT%%	TL.ARG,1;;	;TALLYING ITEM'S ARG.
	ELMT%%	TL.VLU,1;;	;TALLYING ITEM'S VALUE.

	ELMT%%	PT.ARG,1;;	;POINTER ITEM'S ARG.
	ELMT%%	PT.VLU,1;;	;POINTER ITEM'S VALUE.

	ELMT%%	CT.VLU,1;;	;COUNTER ITEM'S VALUE.

	ELMT%%	AP.TMP,1;;	;PLACE TO SAVE ARG POINTER WHILE SUBSCRIPTING.
	ELMT%%	DW.TMP,1;;	;PLACE TO SAVE DESCRIPTOR WORD WHILE SUBSCRIPTING.

	ELMT%%	SE.DLM,1;;	;START AND END POSITIONS OF DELIMITER IN SOURCE.

	ELMT%%	PF.MDE,1;;	;MODE TO DEFAULT TO.

	ELMT%%	BS.AGL,1;;	;BASE ADDRESS OF ARG LIST.
	ELMT%%	PT.AGL,1;;	;POINTER TO NEXT ARG.
	ELMT%%	TP.AGL,1;;	;TOP OF ARG LIST.

	ELMT%%	SU.AGL,1;;	;POINTER OR INDEX INTO PART OF ARG LIST.

	ELMT%%	BS.DLM,1;;	;BASE OF DELIMITERS IN ARG LIST.
	ELMT%%	TP.DLM,1;;	;TOP OF DELIMITERS IN ARG LIST.
;;	TEMPORARY STORAGE FOR SIMULTANEOUS UPDATE

	ELMT%%	SU.RR;;		COUNT OF RECORDS RETAINED BY THE USER
	ELMT%%	SU.DBR;;	COUNT OF USER-RETAINED DBMS RESOURCES
	ELMT%%	SU.EQ;;		COUNT OF ENTRIES IN THE ENQUEUE TABLE
				;;(AS OPPOSED TO THE DEQUEUE TABLE OR THE MODIFY TABLE)
	ELMT%%	SU.DQ;;		COUNT OF ENTRIES IN THE DEQUEUE TABLE
	ELMT%%	SU.MQ;;		COUNT OF ENTRIES IN THE MODIFY TABLE
	ELMT%%	SU.RRT;;	LOCATION OF THE RETAINED RECORDS TABLE
	ELMT%%	SU.T1;;		TEMP ONE
	ELMT%%	SU.T2;;		TEMP TWO
	ELMT%%	SU.T3;;		TEMP THREE
	ELMT%%	SU.T4;;		TEMP FOUR
	ELMT%%	SU.T5;;		TEMP FIVE
	ELMT%%	SU.T6;;		TEMP SIX
	ELMT%%	SU.T7;;		TEMP SEVEN
	ELMT%%	SU.T8;;		TEMP EIGHT
	ELMT%%	SU.T9;;		[445] TEMP NINE
	ELMT%%	SU.CRH;;	USED TO STORE THE HIGHEST VALUE OF ACRR
				;;(TOTAL LENGTH OF THE RETAINED RECORDS TABLE)
	ELMT%%	SU.EQT;;	LOCATION OF THE ENQUEUE TABLE
	ELMT%%	SU.DQT;;	LOCATION OF THE DEQUEUE TABLE
	ELMT%%	SU.MQT;;	LOCATION OF THE MODIFY TABLE
	ELMT%%	SU.Y;;		FLAG
	ELMT%%	SU.RBP;;	RECORD BYTE POINTER - SPECIAL POINTER
				;;TO HANDLE LOW-VALUES (SEE CBLIO INTERFACE)
	ELMT%%	SU.MRR;;	MORE RETAINED RECORDS FLAG
	ELMT%%	SU.SBD;;	SAME BLOCK, DIFFERENT QUEUEING  TECHNIQUE FLAG
	ELMT%%	SU.RLV;;	[455] RANDOM KEY OF 0 FLAF
	ELMT%%	SU.RND;;	[455] FILE IS RANDOM FLAG
	ELMT%%	SU.SFQ;;	SAME FILE FLAG
	ELMT%%	SU.SFS;;	SAME FILE, SAME QUEUEING TECHNIQUE FLAG
	ELMT%%	SU.SBS;;	SAME BLOCK, SAME QUEUEING TECHNIQUE FLAG
	ELMT%%	SU.NR;;		NOT RETAINED FLAG
	ELMT%%	SU.FR;;		COUNT OF FILES CURRENTLY OPENED FOR SIMULTANEOUS UPDATE
	ELMT%%	SU.AK;;		TEMPORARY USED FOR ABSOLUTE KEY
	ELMT%%	SU.FBT;;	LOCATION OF THE FILL/FLUSH BUFFER TABLE
	ELMT%%	SU.CFB;;	COUNT OF ENTRIES IN THE FILL/FLUSH BUFFER TABLE
	ELMT%%	SU.VRB;;	INDICATOR OF CURRENT VERB BEING EXECUTED
				;;10 = READ, 4 = REWRITE, 2 = WRITE, 1 = DELETE
	ELMT%%	SU.HV;;		[447] THIS = -1 IF HIGH VALUES IS BEING USED
	ELMT%%	SU.CK;;		COMPARISON KEY
	ELMT%%	SU.SVK;;	TEMP USED TO SAVE KEY
	ELMT%%	SU.CL1;;
	ELMT%%	SU.CL2;;
	ELMT%%	SU.CLR;;
	ELMT%%	SU.CLS;;	TEMPS FOR SU.CL - SU.CL1 AND SU.CL2 MUST BE CONTIGUOUS
	ELMT%%	SU.SAV,5;;	AREA TO SAVE REGISTERS 1,2,3,0, AND 12

	ELMT%%	FET1,1;;	FILE ENQUEUE TEMP ONE
	ELMT%%	FET2,1;;	FILE ENQUEUE TEMP TWO
	ELMT%%	FET3,1;;	FILE ENQUEUE TEMP THREE
	ELMT%%	FET4,1;;	FILE ENQUEUE TEMP FOUR

	ELMT%%	SU.FRF;;	FAKE READ FLAG FOR LSU/CBLIO COMMUNICATION

;;POINTER TO USER'S LIBOL ROUTINE'S LOW SEGMENT DATA AREA.
	ELMT%%	USRLO.;;
IFN BIS,<
	ELMT%%	MRKPTR,2;;	MARK POINTER STORAGE
>

;;STORAGE FOR INTERNAL FUNCT. CALLS
	ELMT%%	FUN.A0,1;;	FUNCT. ARG.
	ELMT%%	FUN.ST,1;;	STATUS
	ELMT%%	FUN.A1,1;;	ARG 1
	ELMT%%	FUN.A2,1;;	ARG 2
	ELMT%%	FUN.A3,1;;	ARG 3

;;IMPURE STORAGE FOR MCS
IFN MCS,<
	ELMT%%	SNDMSG,10;;	STORAGE FOR LCMIPC
	ELMT%%	MCSTN,1;;		TRANSACTION NUMBER
	ELMT%%	M.TMP1,1;;	DESTINATION COUNT,,TEXT LENGTH
	ELMT%%	M.TMP2,1
	ELMT%%	M.ATCT,1;;	ACTIVE TRANSACTION COUNT
	ELMT%%	MCSPT,1;;		PAGE TABLE POINTER
	ELMT%%	PIDMCP,1;;	PID OF MCP
	ELMT%%	PIDLCM,1;;	OUT PID
	ELMT%%	IPCFLG,1;;	NEXT PACK IN INPUT QUEUE
	ELMT%%	PAKSND,4;;	SEND PACKET
	ELMT%%	MSGSND,10;;	MESSAGE SEND
	ELMT%%	PAKREC,4;;	RECEIVE PACK
	ELMT%%	MSGREC,10;;	MESSAGE RECEIVED

;;FREE PAGE BIT TABLE
;;EACH BIT REPRESENTS A PAGE ON FREE CORE
;;0=PAGE AVAILABLE
;;1=PAGE IS IN USE
	ELMT%%	PAGOFF,1;;	OFFSET TO THE PAGE TABLE
	ELMT%%	PAGBIT,1;;	PAGE TABLE FOR FREE TABLES
>
IFE TOPS20,<
	ELMT%%	PAGTBL,20;;		[472] PAGE TABLE TO RETURN CORE
	ELMT%%	T1SAV,1;;		[472] PAGE UUO SWITCH(COBFUN)
>
	ELMT%%	DBMLOC,1;;		[520] DBMS LIBOL INFORMATION

;;TCS-20 IMPURE STORAGE LOCATIONS
IFN TCS,<
	ELMT%% TP.RG1,1;;		FIRST ARGUMENT IN LIST
	ELMT%% TP.RG2,1;;		SECOND ARGUMENT
	ELMT%% TP.RG3,1;;		THIRD ARGUMENT
	ELMT%% TP.RG4,1;;		FOURTH ARGUMENT
	ELMT%% TP.RG5,1;;		FIFTH ARGUMENT
	ELMT%% TP.ID,1;;		ID RETURNED TO LCM FROM TCSCON
	ELMT%% TP.CRP,1;;		POINTER TO THAT PAGE IN CORE
	ELMT%% TP.IPC,1;;		PAGE NUMBER OF COMMUNICATION PARTITION IN FILE
	ELMT%% TP.CPP,1;;		POINTER TO THAT PAGE IN CORE
	ELMT%% TP.JFN,1;;		JFN OF COMMUNICATION FILE
	ELMT%% TP.WNS,1;;		SIZE OF COMMUNICATION PARTITION
	ELMT%% TP.TMP,3;;		USED FOR EXTENDED INSTRUCTIONS IN LCM
	SYML%% TP.PDS,^D10;;		SIZE OF THE PACKET DESC BLOCK
	ELMT%% TP.PDB,TP.PDS;;		PACKET DESCRIPTOR BLOCK
	SYML%% TP.PKS,^D30;;		SIZE OF THE PACKET TO RECEIVE TCSCON DATA
	ELMT%% TP.PKT,TP.PKS;;		PACKET BUFFER FOR IPCF
	SYML%% TP.NAM,TP.PKT+2;;	NAME OF TCS IS READ INTO PACKET BUFFER
	ELMT%% TP.TPD,1;;		PID OF THE TCS CONTROLLER
	ELMT%% TP.LPD,1;;		PID OF LCM
	ELMT%% TP.HDS,1;;		SIZE OF HIDDEN DATA IN WORDS
	ELMT%% TP.HDP,1;;		PTR TO HIDDEN DATA DESCRIPTOR
	ELMT%% TP.DVP,1;;		ADDR OF DISPATCH VARIABLE
	ELMT%% TP.BTP,1;;		PTR TO BIND TABLE
	ELMT%% TP.PAT,^D10;;		PATCH AREA
>;;END OF IFN TCS

IFN DBMS,<
	ELMT%% DBMLOK,1;;		SET TO -1 ON FIRST DBMS CALL
>;;END OF IFN DBMS
	ELMT%% OSHOOT,1;;		[530] SET TO -1 AT END OF RESET 

IFE TOPS20,<
	ELMT%% M7.00,1;;		SET TO -1 IF MONITOR IS 7 SERIES
>

IFN LSTATS,<
	ELMT%%	MRTMB.,1;;		;ADDR OF MTR PT TIME BUCKET
	ELMT%%	MROPT.,1;;		;POINTER TO BUCKET AREA
	ELMT%%	MROPTT,^D16;;		;TABLE INDEXED BY CHANNEL NUMBER--
					;; POINTS TO START OF BUCKET BLOCK
	ELMT%%	MRHDBP,1;;		;POINTER TO 128-WORD HEADER BLOCK
	ELMT%%	MRHDFL,1;;		;-1 WHEN WE HAVE WRITTEN THE HEADER
					; BLOCK
	ELMT%%	MRTDBP,1;;		;POINTER TO TRAILER BLOCK
	ELMT%%	MRLDBL,1;;		;POINTER TO A BLOCK FROM LSTATS.DIR
					; OR BUFFER FOR COPY FROM .TMP TO .MTO
IFN DBMS6,<
	ELMT%%	MRDDBP,1;;		;POINTER TO DBMS BLOCK
>
	ELMT%%	MRNM6,1;;		;SIXBIT FILE NAME FOR OUTPUT FILE
	ELMT%%	MRNMA,3;;		;ASCII FILE NAME FOR OUTPUT FILE
	ELMT%%	MRAFFT,1;;		;POINTER TO FAKE FILE TABLE
	ELMT%%	MRFKFT,1;;		;FAKE FILE TABLE ENTRY
IFE TOPS20,<
	ELMT%%	MBTIM.,1;;		;MTR PT START TIME
	ELMT%%	MRCHNN,1;;		;CHANNEL NUMBER IN AC POSITION
	ELMT%%	MRCHCF,1;;		;CHANNEL NUMBER OF APPENDED FILE
	ELMT%%	MRBLKO,1;;		;START TIME OF DISK METERING OVERHEAD
	ELMT%%	MRBKO.,1;;		;STATIC OVERHEAD FOR METERING
	>
IFN TOPS20,<
	ELMT%%	MBTIM.,2;;		;MTR PT START TIME,-20 DOUBLE WD
	ELMT%%	MRJFN,1;;		;JFN OF METER FILE
	ELMT%%	MRLCJF,1;;		;JFN OF THE CURRENT FILE
	ELMT%%	MRBLKO,2;;		;START TIME OF DISK METERING OVERHEAD
	ELMT%%	MRBKO.,2;;		;STATIC OVERHEAD FOR METERING
IFN FTLSDR,<
	ELMT%%	MRLDNA,^D10;;		;ASCII FOR GTJFN OF LSTATS.DIR
	ELMT%%	MRLDJF,1;;		;JFN OF LSTATS.DIR
	  >;END IFN FTLSDR
	>;END IFN TOPS20
IFN FTLSDR,<
	ELMT%%	MRLBPC,1;;		;BYTE PTR TO CURRENT FILE
	ELMT%%	MRLSZL,1;;		; SIZE LIMIT IN BLOCKS/PAGES
	ELMT%%	MRLFPR,1;;		;FILE POINTER (WHICH WORD STARTS AT @MRLDBL)
  IFE TOPS20,<
	ELMT%%	MRCHLS,1;;		;TOPS10 CHANNEL FOR LSTATS.DIR
	ELMT%%	MRLLDR,1;;		;PPN WHERE LSTATS.DIR IS
	ELMT%%	MRLLDV,1;;		;SIXBIT DEVICE NAME WHERE LSTATS.DIR IS
	ELMT%%	MRCFNM,1;;		;SIXBIT NAME OF COMMON FILE
	ELMT%%	MRCFEX,1;;		;SIXBIT EXT OF COMMON FILE
   >;END IFE TOPS20
>;END IFN FTLSDR
	ELMT%%	MRAPN.,1;;		;-1 IF APPENDING TO AN EXISTING FILE
					;0 IF FILE IS NEW
	ELMT%%	MRFPGT,1,;;		;POINTER TO FILE/PAGE/REQ # TABLE
	ELMT%%	MRKILL,1;;		;-1 IF COBOL PROGRAM ABORTED
	ELMT%%	MRBNUM,1;;		;BLOCK NUMBER FOR IOHSTR ROUTINE
	ELMT%%	MRRERN,1;;		;-1 IF WE ARE "RERUN'ING"
					; (THUS CAN'T WRITE IN .MTO FILE)
IFN TOPS20, ELMT%% MRPSTM,2;;		;PROGRAM START TIME
IFE TOPS20, ELMT%% MRPSTM,1;;		;(1 WORD FOR THE -10)

>;;END IFN LSTATS

	ELMT%%	DBSTP.,1;;		;FINAL LOCATION OF DBSTP$

>;;END OF NON-PRESET AREA
SUBTTL	LIBOL DISPATCH TABLE
	DEFINE	DISTB%	<

	DISEL%	C.RSET;;		MUST APPEAR AT 400010
	DISEL%	STOPR.;;		MUST APPEAR AT 400011
	DISEL%	C.STOP
	DISEL%	KILL.
	DISEL%	GOTO.
	DISEL%	TODAY.
	DISEL%	KDECL.
	DISEL%	KPROG.
	DISEL%	DSP.FP
	DISEL%	LINE.C
	DISEL%	LINE.D
	DISEL%	LINE.H
	DISEL%	LIN.RH
	DISEL%	CANCL.
IFN ANS74,<
	DISEL%	S.CALL
>
	DISEL%	M.INIT
	DISEL%	M.RMW
	DISEL%	M.RSW
	DISEL%	M.RMNW
	DISEL%	M.RSNW
	DISEL%	M.SEND
	DISEL%	M.AC
	DISEL%	M.IFM
	DISEL%	M.DI
	DISEL%	M.DIT
	DISEL%	M.DO
	DISEL%	M.EI
	DISEL%	M.EIT
	DISEL%	M.EO
	DISEL%	STR.
	DISEL%	STR.O
	DISEL%	UNS.
	DISEL%	UNS.O
	DISEL%	FUNCT.
	DISEL%	FIX.
	DISEL%	PERF.
	DISEL%	FLOT.1
	DISEL%	FLOT.2
	DISEL%	PD6.
	DISEL%	PD7.
	DISEL%	GD6.
	DISEL%	GD7.
	DISEL%	NEG.
	DISEL%	MAG.
	DISEL%	ADD.12
	DISEL%	ADD.21
	DISEL%	ADD.22
	DISEL%	SUB.12
	DISEL%	SUB.21
	DISEL%	SUB.22
	DISEL%	MUL.12
	DISEL%	MUL.21
	DISEL%	MUL.22
	DISEL%	DIV.11
	DISEL%	DIV.12
	DISEL%	DIV.21
	DISEL%	DIV.22
	DISEL%	C.OPEN
	DISEL%	C.CLOS
	DISEL%	DSPLY.
	DISEL%	ACEPT.
	DISEL%	READ.
	DISEL%	WRITE.
	DISEL%	WADV.
IFN ANS68,<DISEL%	SEEK.>
IFN ANS74,<DISEL%	RDNXT.>
	DISEL%	DELET.
	DISEL%	RERIT.
	DISEL%	PURGE.
	DISEL%	INIT.
	DISEL%	TERM.
	DISEL%	COMP.
	DISEL%	CMP.76
	DISEL%	SPAC.6
	DISEL%	NUM.6
	DISEL%	ALF.6
	DISEL%	ZERO.6
	DISEL%	POS.6
	DISEL%	NEG.6
	DISEL%	SPAC.7
	DISEL%	NUM.7
	DISEL%	ALF.7
	DISEL%	ZERO.7
	DISEL%	POS.7
	DISEL%	NEG.7
	DISEL%	COMP.D
	DISEL%	DBMS.
	DISEL%	MOVE.
	DISEL%	LFENQ.;;	FILE ENQUEUE
	DISEL%	LRENQ.;;	RECORD ENQUEUE
	DISEL%	LRDEQ.;;	RECORD DEQUEUE
	DISEL%	C.D6D7
	DISEL%	C.D7D6
	DISEL%	CMP.E
	DISEL%	CMP.G
	DISEL%	CMP.GE
	DISEL%	CMP.L
	DISEL%	CMP.LE
	DISEL%	CMP.N
	DISEL%	EDIT.S
	DISEL%	EDIT.U
IFN ANS68,<
	DISEL%	EXAM.
>
IFN ANS74,<
	DISEL%	INSP.
>
	DISEL%	SUBSC.
	DISEL%	SIZE.1
	DISEL%	SIZE.2
	DISEL%	SIZE.3
	DISEL%	E.C3C1
	DISEL%	E.C3C3
	DISEL%	OVLAY.
	DISEL%	C.EXIT
	DISEL%	ARGS.
	DISEL%	PUTF.
	DISEL%	RESF.
	DISEL%	GETNM.;;	GETNM. IS USED BY COBDDT
	DISEL%	ILLC.
	DISEL%	C.D6D9
	DISEL%	C.D7D9
	DISEL%	C.D9D6
	DISEL%	C.D9D7
	DISEL%	PC3.
	DISEL%	PD9.
	DISEL%	GC3.
	DISEL%	GD9.
	DISEL%	POS.9
	DISEL%	NEG.9
	DISEL%	ZERO.9
	DISEL%	ALF.9
	DISEL%	NUM.9
	DISEL%	ALF.9
	DISEL%	SPAC.9
	DISEL%	CMP.96
	DISEL%	CMP.97
	DISEL%	EDIT.B
	DISEL%	RSTAB.
	DISEL%	ZERC.6;; [454] SIXBIT ZERO CHAR COMPARE
	DISEL%	ZERC.7;; [454] ASCII ZERO CHAR COMPARE
	DISEL%	ZERC.9;; [454] EBCDIC ZERO CHAR COMPARE
IFN ANS74,<
	DISEL%	C.STRT
	DISEL%	DATE.
	DISEL%	DAY.
	DISEL%	TIME.
>

	DSTBL%	USRTB.,15;;	USER LIBOL ROUTINE DISPATCH TABLE

;;START OF VERSION 12 NEW ITEMS

	DISEL%	DSPL.6
	DISEL%	DSPL.7

	DISEL%	SUBE1.;;	;INLINE SUBSCRIPT ERRORS
	DISEL%	SUBE2.
	DISEL%	SUBE3.
	DISEL%	EXIT.E;;	;PERFORM EXIT ERROR
IFN BIS,<
	DISEL%	XTND.E;;	;INLINE EXTEND INST ERROR
	DISEL%	ALP.66;;	;SIXBIT TO SIXBIT CONVERSION TABLE
	DISEL%	ALP.67;;	;SIXBIT TO ASCII ...
	DISEL%	ALP.69;;	;SIXBIT TO EBCDIC ...
	DISEL%	ALP.76;;	;ASCII TO SIXBIT ...
	DISEL%	ALP.77;;	;ASCII TO ASCII ...
	DISEL%	ALP.79;;	;ASCII TO EBCDIC ...
	DISEL%	ALP.96;;	;EBCDIC TO SIXBIT ...
	DISEL%	ALP.97;;	;EBCDIC TO ASCII ...
	DISEL%	ALP.99;;	;EBCDIC TO EBCDIC ...
	DISEL%	ALPS.6;;	;ALPHABETIC SIXBIT
	DISEL%	ALPS.7;;	;ALPHABETIC ASCII
	DISEL%	ALPS.9;;	;ALPHABETIC EBCDIC
	DISEL%	NUM.66;;	;NUMERIC SIXBIT TO SIXBIT
	DISEL%	NUM.67;;	;NUMERIC SIXBIT TO ASCII
	DISEL%	NUM.69;;	;NUMERIC SIXBIT TO EBCDIC
	DISEL%	NUM.76;;	;NUMERIC ASCII TO SIXBIT
	DISEL%	NUM.77;;	;NUMERIC ASCII TO ASCII
	DISEL%	NUM.79;;	;NUMERIC ASCII TO EBCDIC
	DISEL%	NUM.96;;	;NUMERIC EBCDIC TO SIXBIT
	DISEL%	NUM.97;;	;NUMERIC EBCDIC TO ASCII
	DISEL%	NUM.99;;	;NUMERIC EBCDIC TO EBCDIC
	DISEL%	CVTDB.;;	;CONVERT DECIMAL TO BINARY, SETUP DONE INLINE
	DISEL%	CBDOV.;;	;HANDLE OVERFLOW FOR BIN-DEC CONVERSION
	DISEL%	CVBD.6;;	; TRANSLATION TABLES FOR BIN-DEC EXTEND
	DISEL%	CVBD.7;;
	DISEL%	CVBD.9;;
	DISEL%	MUL.41
	DISEL%	MUL.42
	DISEL%	DIV.41
	DISEL%	DIV.42
	DISEL%	DVI41.;;	;4-WD DIVIDE, SAVE REMAINDER
	DISEL%	DVI42.;;
>;END IFN BIS
	DISEL%	KEY.
IFN TOPS20,<
	DISEL%	PSORT.
	DISEL%	PMERG.
	DISEL%	RELES.
	DISEL%	MERGE.
	DISEL%	MCLOS.
	DISEL%	RETRN.
	DISEL%	ENDS.
>
;;END OF COBOL-68 VERSION 12 RELEASED ITEMS

IFN BIS,<
	DISEL%	ADD.4R;;	;[540] QUAD-WORD ROUNDING FUNCTION
>;END IFN BIS
IFN TCS,<
	DISEL%	MBIND;;		;BIND FORM DATA AREA
	DISEL%	MNAME;;		;SET UP TCS SYSTEM NAME
>
	DISEL%	MVD.AL;;	;MOVE ALL "LIT" TO <DEPENDING VARIABLE>
	DISEL%	NUM.3;;		;COMP-3 NUMERIC TEST
	DISEL%	WADVV.;;	;WRITE ADVANCING, VARIABLE LENGTH RECORDS
	DISEL%	WRITV.;;	;WRITE, VARIABLE LENGTH RECORDS
;;END OF COBOL-74 VERSION 12 RELEASED ITEMS

	DISEL%	METER.;;	;I/O PERFORMANCE METER ROUTINE
IFN BIS,<			;[554] QUAD-WORD SIZE ERROR ROUTINES
	DISEL%	SIZE.4;;	;[554] SIZE ERROR TEST FOR 4-WORD NUMBERS, 1 WORD LIT
	DISEL%	SIZE.5;;	;[554] ANOTHER ONE, 2-WORD LIT THIS TIME
>;END IFN BIS			;[554]
	DISEL%	FLT.12;;	;FLOAT 1-WORD COMP TO COMP-2
	DISEL%	FLT.22;;	;FLOAT 2-WORD COMP TO COMP-2
	DISEL%	FIX.2;;		;FIX COMP-2 TO 2-WORD COMP
	DISEL%	E.F2D1;;	;EXPONENTIATE, BASE COMP-2, POWER 1-WORD COMP
	DISEL%	E.F2D2;;	;EXPONENTIATE, BASE COMP-2, POWER 2-WORD COMP
	DISEL%	E.F2FP;;	;EXPONENTIATE, BASE COMP-2, POWER COMP-1
	DISEL%	E.F2F2;;	;EXPONENTIATE, BASE COMP-2, POWER COMP-2
	DISEL%	PPOT4.;;	;USED BY COBDDT TO PRINT WHERE WE ARE
	DISEL%	ISBPS.;;	;USED BY COBDDT TO INCREMENT SBPSA.

>;END OF DISPATCH TABLE

SUBTTL	RANDOM USEFUL MACROS

;DEFINITION OF LIBOL LOW SEGMENT

DEFINE	%LOSEG	<
	VISBL%		;;EXTERNALLY VISABLE SECTION
	INFBK%		;;FIXNUM BLOCK
	PREST%	;;PRESET AREA
	LIDAT%		;;NON-PRESET AREA
>

;DEFINE A BLOCK STATEMENT WITHOUT REGARD TO VALUE

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

;DEFINE A BLOCK STATEMENT OR VALUE

DEFINE	BLKDFV	(NAME,LEN<1>,VAL)	<
	IFNB	<NAME>,<NAME::>
	IFN	LEN,<IFB	<VAL>,<BLOCK	LEN>
		    IFNB	<VAL>,<REPEAT	LEN,<
					VAL>>
		>
>

;MACRO TO DEFINE A SYMBOL

DEFINE	SYM%%	(NAME,VAL)	<NAME==:VAL>

SUBTTL	MACROS FOR LIBSHR.MAC

;DEFINE THE BEGINNING OF THE LIBOL.SHR HIGH SEGMENT

DEFINE	PURHI%	<

	;;FIRST THE DISPATCH TABLE
IFE TOPS20,<
	DEFINE	DISEL%	(NAM)	<JRST	1,NAM##>	;;PORTALS
	DEFINE	DSTBL%	(NAM,IR)	<JRST	1,@NAM##(IR)>
>
IFN TOPS20,<
	DEFINE	DISEL%	(NAM)	<JRST	NAM##>	;;PORTALS
	DEFINE	DSTBL%	(NAM,IR)	<JRST	@NAM##(IR)>
>
	RELOC	HI.ORG			;;START AT THE TOP
	DISTB%				;;DISPATCH TABLE

	;; NOW THE VALUES TO BE BLT INTO THE LIBOL.LOW PRESET AREA
	DEFINE	SYMH%%	(N%,V)	<SYM%%	N%,V>	;; ONLY HI SEG SYMBOLS
	DEFINE	SYML%%	(N%,V)	< >	;NO LOW SEG SYMBOLS
	DEFINE	ELMT%%	(N%,L<1>,V)	<BLKDFV	,L,<V>>	;;GET THE VALUES ONLY
	PREST%				;;PRESET SECTION

	PURGE	ELMT%%,SYMH%%,SYML%%,DISEL%,DSTBL%
>

;NOW THE LOW SEGMENT WITH NO VALUES

DEFINE	PURLO%	<

	DEFINE	ELMT%%	(N%,L<1>,V)	<BLKDF	N%,L>	;;JUST SYMBOLS
	LOC	LO.PUR			;;ACTUAL LOSEG STARTING ADDRESS
	DEFINE	SYML%%	(N%,V)	<SYM%%	N%,V>	;;LO SEG SYMBOLS ONLY
	DEFINE	SYMH%%	(N%,V)	< >	;;NO HIGH SEG SYMBOLS

	%LOSEG			;;LO SEG DEFINITIONS

	COMCHK	.-LO.PUR	;; HAVE WE EXCEEDED MAX LOSEG SIZE

	PURGE	ELMT%%,SYMH%%,SYML%%
>

SUBTTL	MACROS FOR IMPURE LOSEG - LIBREL.MAC

;IMPURE LOSEGMENT WITH VALUES PRESET AT LOAD TIME

DEFINE	IMPLO%	<
	
	DEFINE	SYMH%%	(N%,V)	<N%==:0>	;;SET TO ZERO TO CANCEL BLT
	DEFINE	SYML%%	(N%,V)	<SYM%%	N%,V>	;;DO LOSEG SYMBOLS
	DEFINE	ELMT%%	(N%,L<1>,V)	<BLKDFV	N%,L,<V>>	;;WITH VALUES

	RELOC	0
	CHK==.

	%LOSEG

	COMCHK	.-CHK		;;HAVE WE EXCEEDED THE MAX LOW SEG SIZE

	PURGE	SYML%%,SYMH%%,ELMT%%
>

; THERE IS NO DISPATCH TABLE WHEN LIBOL.SHR IS NOT USED

SUBTTL	COBOL PROGRAM INTERFACE MACROS

;THESE ARE REFERENCED BY LILOWS.MAC
;THEY WILL DEFINE THE ADDRESSES OF THE DISPATCH TABLE
;AND ADDRESSES OF SELECTED LOW SEGMENT LOCATIONS

;DISPATCH TABLE ADDRESSES

DEFINE	DISAD%	<
	ADR==HI.PUR	;;ACTUAL HIGH SEG BEGINNING ADDRESS
	DEFINE	DISEL%	(N%)	<
	N%=:ADR		;;MAKE SYMBOL VISIBLE TO DDT
	ADR==ADR+1
	>
	DEFINE	DSTBL%	(NAM,IR)	<DISEL%	(NAM)>

	DISTB%				;;DEFINE ADDRESSES

	PURGE	DISEL%,DSTBL%,ADR
>

;MACRO TO DEFINE SELECTED LOW SEGMENT ADDRESSES

DEFINE	LOWAD%		<
	DEFINE	SYMH%%	(N%,V)	< >
	DEFINE	SYML%%	(N%,V)	<SYM%%	N%,V>	;;LO SEG SYMBOLS ONLY
	DEFINE	ELMT%%	(N%,L<1>,V)	<BLKDFV	N%,L,<V>>
	LOC	LO.PUR			;;ACTUAL LO SEG STARTING ADDRESS

	VISBL%

	DEFINE	ELMT%%	(N%,L<1>,V) <BLOCK L>

	INFBK%

;;DEFINE E0.6, E0.7, E0.9 IN LILOWS
	DEFINE	ELMT%%	(N%,L<1>,V) <
	IFIDN <N%><E0.6>,<N%::	E0.6.1=:E0.6+1>
	IFIDN <N%><E0.7>,<N%::	E0.7.1=:E0.7+1>
	IFIDN <N%><E0.9>,<N%::	E0.9.1=:E0.9+1>
	BLOCK	L>

	DEFINE	SYML%%	(N%,V)	< >

	PREST%

	COMCHK	.-LO.PUR	;;HAVE WE EXCEEDED MAX LO SEG SIZE?

	PURGE	ELMT%%,SYMH%%,SYML%%,ADR
>

SUBTTL	COMPILER INFORMATION

;COMSIZ IS THE AMOUNT OF SPACE ALLOCATED BY THE COMPILER
;FOR THE LIBOL LOW SEGMENT
;IF THIS NUMBER IS EXCEEDED BY EXPANDING THE LOW SEG THEN
;COBOLG.MAC MUST BE RECOMPILED AND THE COMPILER RELOADED
;NOTE THAT ALL PREVIOUSLY COMPILED PROGRAMS WILL BE INCOMPATABLE
;WITH THE NEW LARGER LIBOL.SHR

COMSIZ==1340

;TELL SOMEONE IF COMSIZ HAS BEEN EXCEEDED

DEFINE	COMCHK	(LEN)	<
	IFG	LEN-COMSIZ,<
	XXX.==LEN-COMSIZ
  DEFINE PEXCS(OVRFLO),<
	PRINTX	?COMSIZ EXCEEDED BY 'OVRFLO (OCTAL) WORDS - REGENERATE THE COMPILER
   >
	PEXCS(\XXX.)
>;END IFG LEN-COMSIZ
>;END DEFINE COMCHK

;INDICES OF THE INFORMATION HEADER BLOCK

DEFINE	INFIX%		<
	INC==0		;;STARTING INDEX
	DEFINE	ELMT%%	(N%,L<1>,V)	<
	IFNB	<N%>,<%'N%==:INC>
	INC==INC+1
	>
	INFBK%

	PURGE	ELMT%%,INC

>

; DEFINE THEM
	INFIX%

	END