Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-05 - 43,50337/08/simrpa.mac
There are 3 other files named simrpa.mac in the archive. Click here to see a list.
00010		SUBTTL	Definitions used chiefly in the run time system
00020		SALL
00030		SEARCH	SIMMAC,SIMMCR
00040		RUNIV	SIMRPA RTS parameters and definitions	;[104]
00050	
00060	
00070	
00080	COMMENT;
00090	AUTHOR:		Lars Enderin 1973-1974
00100	PURPOSE:	Definition of macros, constants, and symbols used in run time
00110			system modules and a few compiler modules.
00120			Must be assembled together with SIMMAC and SIMMCR before
00130			assembling any RTS module.
00140	;
00150	
00160		IF1,<END>
00170	PRINTX <UPDATES: [14 22 12,24,41,44,61,62,63,104,166,225,242,243,244,247,273,304] 12-Apr-78/LE>
00180	
00190		SUBTTL	MACRO DEFINITIONS
00200	
00210	;Access to low segment variables
00220	
00230		DEFINE	LOWADR(A)<
00240			IFNB <A>,<XLOW=A>
00250			IFB  <A>,<XLOW=XIAC>
00260			HRRZ	XLOW,.JBOPS
00270			>
00280		DEFINE	SETLOW(A)<
00290			IFNB <A>,<XLOW=A>
00300			IFB  <A>,<XLOW=XIAC>
00310			>
00320	
00330		;Miscellaneous macros
00340		DEFINE	IFNONE(A)<CAIN	A,NONE>
00350		DEFINE	TRIMSTACK <SUB	XPDP,[1,,1]>
00360		DEFINE	ERRMAC(A)<IRP A,<
00370			DEFINE	A'ERR(N,MSG)<
00380				RTSERR	<N+Q'A'ENO>
00390				IFN	QDEBUG,<NOP	[ASCIZ/
00400	MSG
00410	/]
00420		>>	;;[41] To continue after a RTS error
00430	
00440			DEFINE	A'ERC(C,N,MSG)<
00450				RTSERR	<C>,<N+Q'A'ENO>
00460				IFN	QDEBUG,<NOP	[ASCIZ/
00470	MSG
00480	/]
00490		>>>>
00500	
00510		DEFINE	RIGHTHALF(A)<
00520		SIZE(Q,A)
00530		IFN <Q-^D18>,<Q==0>
00540		IFN <%'A-^D35>,<Q==0>
00550		IFE <Q>,
00560		<CFAIL A is not right half>
00570		>
00580	
00590	
00600	DEFINE	SAVEALLACS(y)<;;[242]
00610		EXCH	X16,.JBOPS
00620		q==YUUOAC
00630		IFNB <y>,<q==y>;;[242]
00640		ST	X17,q+X17(X16)
00650		LI	X17,q(X16)
00660		BLT	X17,q+X15(X16)
00670		L	X17,X16
00680		EXCH	X17,.JBOPS
00690		ST	X17,q+X16(X16)
00700		L	X17,q+X17(X16)
00710		PURGE	q
00720	>
00730	
00740	;-- Macros for SIMDDT interface ---;
00750	
00760	DEFINE	CALLOW	<SETZM	YDSCSW(XLOW)>	;;Allow ^C - REENTER
00770	DEFINE	CDEFER	<AOS	YDSCSW(XLOW)>	;;Defer call to SIMDDT to obj.code ret.
00780	DEFINE	CENABLE	<SOS	YDSCSW(XLOW)>
00790	DEFINE	CFORBID	<HRROS	YDSCSW(XLOW)>
00800	
00810	
00820			;[41]
00830		;Macro for retrieval of inserted value
00840		;from SIMDDT at error recovery
00850	
00860		DEFINE NEWVALUE(X)=<
00870			LOWADR
00880			L	X,YDSIAR(XLOW)
00890		>
     
00010		SUBTTL	Register assignments
00020	
00030	XSAC=	1	; System ac - parameters to RTS
00040	XTAC=	2	; (Additional) parameter to some RTS routines
00050	XZBI=	3	; (New) block instance pointer
00060	XADR=	4	; Code address
00070	XX=	5	; Temporary pointer
00080	XZ=	6	; Temporary pointer
00090	XI=	7	; Temporary ac
00100	XJ=	10	; Temporary ac
00110	XK=	11	; Temporary ac
00120	XL=	12	; Temporary ac
00130	XM=	13	; Temporary ac
00140	XN=	14	; Temporary ac
00150	
00160	
00170	XRAC=	XWAC1	; Result accumulator (returned by thunk or procedure etc.)
00180	XRAC1=	XRAC+1	; Extension of result (long real,etc)
00190	
00200	XXPRL=	XSAC	; Prefix level of a class
00210	XXZBI=	XSAC	; Block instance as parameter
00220	XXZPC=	XSAC	; Prototype pointer
00230	XZAC=	XSAC	; Points to acs object
00240	
00250	XZPC=	XSAC	; REF(ZPC)
00260	XZCP=	XSAC	; REF(ZCP)
00270	XZDR=	XX	; REF(ZDR)
00280	XXZ=	XZBI	; Block instance pointer as parameter
00290	
00300	XOUT=	XADR	; Exit address
00310	
00320	XLOW=	XIAC	; Standard register for access to low segment static area
00330	
00340	;Registers used by OCIN and IO:
00350	XSPEC=	X10	;Pointer run runswitch area record ZSW
00360	XBASE=	X11	;Base register to dynamic area
00370	XBYTE=	X12	;Current byte from a file specification
00380	XNAME=	X13	;Current name from a file specification
00390	XBUF=	X14	;Pointer to current input buffer
00400		;[61]
00410	XBH=	XWAC5	;Pointer to buffer area
00420	XCC=	XWAC4	;Character count
00430	XIP=	XWAC6	;Byte pointer for Image
00440	XSW=	X14	;Copy of flags for file object
00450	
00460	;Base address register for SIMDDT module:
00470	XDBAS=	X14
     
00010		SUBTTL	SWITCHES
00020	
00030	
00040	;Common switches used by OCIN and IO:
00050	
00060	DSW(SWIND,YOCSW,36,XLOW)	;On if indirect specification file being read
00070	DSW(SWTTY,YOCSW+1,36,XLOW)	;On if specification file is being read from tty
00080	DSW(SWSYSR,YOCSW+2,36,XLOW)	;On if sysin has been read
00090	DSW(SWSYSE,YOCSW+3,36,XLOW)	;On if end of file occurred on sysin
00100	DSW(SWSYST,YOCSW+4,36,XLOW)	;On if sysin from tty
00110	DSW(SWSYSI,YOCSW+5,36,XLOW)	;On if sysin was an indirect file
00120	DSW(SWERR,YOCSW+6,36,XLOW)	;On if error in DSK SPECIFICATION FILE
00130	DSW(SWGSW,YOCSW+7,36,XLOW)	;On if global switch, off if local
00140	DSW(SWSWERR,YOCSW+10,36,XLOW)	;On if error during switch handling
00150	DSW(SWHLP,YOCSW+11,36,XLOW)	;On if help message typed
00160	DSW(SWSYSD,YOCSW+12,36,XLOW)	;On if sysin not from disk or tty
00170	DSW(SWCRLF,YOCSW+13,36,XLOW)	;On if cr-lf is wanted in tty message
00180	DSW(SWTR,YOCSW+14,36,XLOW)	;On if text record being scanned
00190	DSW(SWLOK,YOCSW+15,36,XLOW)	;On if lookup being performed
00200	DSW(SWGC,YOCSW+16,36,XLOW)	;On if garbage collection performed
00210	
00220	QSWNO=^D15		;Number of switches
00230	
00240	DEFINE ZEROSW=<
00250		SETZM	X0,YOCSW(XLOW)
00260		HRLI	X0,YOCSW(XLOW)
00270		HRRI	X0,YOCSW+1(XLOW)
00280		BLT	X0,YOCSW+QSWNO-1(XLOW)
00290	>
00300	
00310	;Switches used in SA and SADEB
00320			;[247]
00330		DSW	(SAGCPE,YSASW,0)	;On if i/o error on gcp.tmp
00340		DSW	(SWGCTE,YSASW,1)	;On if test output from gc
00350		DSW	(SWGCT2,YSASW,2)	;On if output on tty 
00360		DSW	(SWGCT3,YSASW,3)	;On if output on sysout
00370		DSW	(SWGCT4,YSASW,4)	;On if gc runtime and low seg limit
00380						; should be logged
     
00010		SUBTTL	RDINIT, definitions for Random Drawing [243]
00020	
00030	
00040	DEFINE RDINIT(e)<	;;[243]
00050		SEARCH	SIMMAC,SIMMCR
00060		EXTERN	.YFARG,.YFADR		;;[205]
00070		SALL
00080		RTITLE	RD'e
00090		ENTRY	.RD'e
00100		ERRMAC	RD
00110		MACINIT
00120	DEFINE XX(N)<
00130	DEFINE ARG'N<N-1(XTAC)>
00140	>
00150		XX	1
00160		XX	2
00170		XX	3
00180		XX	4
00190		XX	5
00200	
00210		SYN	ARG1,RESULT
00220	
00230	DEFINE RAND(N)<;;Basic drawing [1,2^35-1]
00240			;;The random seed at @ARG'n is updated
00250		L	X0,@ARG'N
00260		SKIPGE	;;Shift out sign bit if seed is negative
00270		ADD	[377777777777]
00280		TRO	1	;;Make odd always
00290		MUL	X0,[QMULTIPLIER]
00300		ST	X1,@ARG'N	;;Next seed value
00310		TLZ	X1,400K	;;Ignore sign (treat as pos number [1,2^35-1])
00320	>
00330	
00340	DEFINE MAKEREAL(N<1>)<	;;(0,2^35) to (0,1.0) floating point
00350		FLTR	X0,X1
00360		FSC	X0,N-44
00370	>
00380	
00390	DEFINE AR(A,B)<OFFSET(ZAR'A)+2(XWAC'B)>
00400	
00410	DEFINE ARTEST(A,B)<
00420		HLRZ	XWAC'A,OFFSET(ZARSUB)(XWAC'B)
00430		CAIE	XWAC'A,QTSTAR
00440	>
00450	
00460	QMULTIPLIER==1
00470	REPEAT ^D15,<QMULTIPLIER==QMULTIPLIER*5>;RESULT IS 5**15
00480	
00490		QTSTAR==(<QREAL>B<%ZARTYP>+1B<%ZARSUB>)
00500	>;;End RDINIT
     
00010		SUBTTL	Macro definitions used by SA and SADEB
00020	
00030		DEFINE	TEXT(T)<;;	Output text t on tty
00040		IFN QDEBUG,<
00050		IFONA	SWGCT2
00060		>
00070		OUTSTR	[ASCIZ	/T/]
00080		IFN QDEBUG,<
00090		IF
00100			IFOFFA	SWGCT3
00110			GOTO	FALSE
00120		THEN
00130			LI	X2,[ASCIZ	/T/]
00140			EXEC	SAPDTO
00150		FI
00160		>
00170		>
00180	
00190	
00200		DEFINE	RTEXT(T)<;;	Output <CR><LF>'t
00210		IFN QDEBUG,<
00220		IFONA	SWGCT2
00230		>
00240		OUTSTR	[ASCIZ	/
00250	'T/]
00260		IFN QDEBUG,<
00270		IF
00280			IFOFFA	SWGCT3
00290			GOTO	FALSE
00300		THEN
00310			LI	X2,[ASCIZ	/
00320	'T/]
00330			EXEC	SAPDTO
00340		FI
00350		>
00360		>
00370	
00380		DEFINE	RRTEXT(T)<;;	Output <CR><LF><CR><LF>t
00390		IFN QDEBUG,<
00400		IFONA	SWGCT2
00410		>
00420		OUTSTR	[ASCIZ	/
00430	
00440	'T/]
00450		IFN QDEBUG,<
00460		IF
00470			IFOFFA	SWGCT3
00480			GOTO	FALSE
00490		THEN
00500			LI	X2,[ASCIZ	/
00510	
00520	'T/]
00530			EXEC	SAPDTO
00540		FI
00550		>
00560		>
     
00010		SUBTTL	CONSTANTS
00020	
00030	.JBOPS=	135	; Right half will contain base of static low segment data
00040	
00050			;[14 22 15] ZYQ from 0 to 217
00060	QFORER==215	;Error number for library error
00070	QILLUUO==216	;Error number for illegal UUO
00080	QRFAIL==217	;Error number for RFAIL
00090	QIOLP=	^D60	; Default value of linesperpage
00100	QPDLEN=	100	; Length of pushdown stack
00110	QXALEN=	QNAC	; Length of extended accumulator area
00120	QPOLMI=	2000	; Min data pool length
00130	QSALIM=2*QNAC+2	;Reserve this space at end of pool
00140	QZERLG=400	;Number of words in ZER record, default.
00150	QZERNO=1	;Number of ZER records allocated initially, default.
00160	QDSLG=15000	;[304] Length of SIMDDT program
00170	QDSLGA=^D118+2*<%ZACSVA+4>;Length of additional data area
00180	
00190	;Entry point offsets for SIMDDT
00200	QDSINB=	10	;Breakpoint
00210	QDSINC=	12
00220	QDSINE=	13	;Error
00230	QDSINR=	11	;REENTER
00240	QDSINI=	2	;Initialise
00250	QDSINS= 12	;Remove any old breakpoints (on restart)
00260	
00270	;[41] Define continuation codes used in RTSERR calls and in SIMDDT
00280	QDSCON==	1	;Continue with no arguments
00290	QDSNIN==	2	;Continue with new integer argument in YTXARG(XLOW)
00300	QDSNIM==	3	;Continue with new image read from tty
00310	
00320	
00330	
00340	;Origins of error codes
00350	DEFINE ERRCODE(N0,A)<..N==0
00360			IFNB <N0>,<..N=N0>
00370			IRP A,<
00380			Q'A'ENO=..N
00390			>
00400			PURGE	..N
00410			>
00420	
00430	
00440	; Note!!! the following numbers must match those in SIMEDS.DOC !!!
00450		ERRCODE	QRTSE0,OC
00460		ERRCODE	21,CP
00470		ERRCODE	35,CS
00480		ERRCODE	51,IO
00490		ERRCODE	100,PH
00500		ERRCODE	120,RD
00510		ERRCODE	135,SA
00520		ERRCODE	143,SS
00530		ERRCODE	143,SU
00540		ERRCODE	154,TX
00550	
00560	;Common constants for OCIN and IO:
00570	DV.TTY==1B14_-^D18
00580	DV.DSK==1B1_-^D18
00590	DV.MTA==1B13_-^D18
00600	DV.TTA==1B4_-^D18
00610	DV.TTU==1B5_-^D18
00620	DV.DTA==1B11_-^D18
00630	DV.DIR==1B15_-^D18
00640	
00650	;[105] Data modes
00660	
00670	.IOASL==0	;ASCII
00680	.IOASL==1	;ASCII line
00690	.IOPIM==2	;Packed image
00700	.IOIMG==10	;Image
00710	.IOIBM==13	;Image binary
00720	.IOBIN==14	;(Blocked) binary
00730	.IOIDP==15	;Image dump
00740	.IODPR==16	;Dump as records without core buffering
00750	.IODMP==17	;Dump one record without core buffering
00760	
00770	;Error codes for FORTRAN library functions, given in ac field of error instruction+1
00780	
00790	ER%LIB==10	;Normal library error, has message pointed to by next instr
00800	ER%APR== 2	;Faked apr trap, no message (arithmetic overflow in limiting cases)
00810	
00820	;Bit masks for interrupt conditions
00830	
00840		AP.REN=400000	;Repetitive enable
00850		AP.ILM= 20000	;Illegal memory reference
00860		AP.NXM= 10000	;Non-existent memory (detects NONE)
00870		AP.FOV=   100	;Floating-point overflow
00880		AP.AOV=    10	;Arithmetic overflow
     
00010		SUBTTL	RUN TIME RECORDS
00020	
00030	; ZFS record (file specification table entry)
00040	 DF ZFSLNK,-1,18,17	;Link to next iospec entry
00050	 DF ZFSNAM,0,36,35	;Sixbit logical device name
00060	 DF ZFSDEV,1,36,35	;Sixbit physical device name
00070	 DF ZFSSIZ,2,18,17	;Initial file size (blocks)
00080	 DF ZFSLIM,2,18,35	;Max file size (blocks)
00090	 DF ZFSIML,3,18,17	;Max image length for a directfile
00100	 DF ZFSFLG,3,18,35	;Flag bits, e g access mode
00110	 DF ZFSAPP,3,1,35	;Mode append
00120	 DF ZFSSUB,3,1,34	;On if this entry has sub-file directory
00130	 DF ZFSWDB,3,1,31	;[24] See ZFIWDB
00140	 DF ZFSNUM,3,1,32	;[24] See ZFINUM
00150	 DF ZFSRON,3,1,33	;[24] See ZFIRON
00160	 DF ZFSWLR,3,3,33	;[24] Combines ZFSWDB,-NUM,-RON
00170	 DF ZFSFIL,4,36,35	;Sixbit file name
00180	 DF ZFSEXT,5,18,17	;Sixbit file extension
00190	 DF ZFSBUF,5,18,35	;Number of buffers
00200	 DF ZFSPT,6,9,8		;Protection code
00210	 DF ZFSPRJ,7,18,17	;Project number
00220	 DF ZFSPRG,7,18,35	;Programmer number
00230	 DF ZFSADR,7,36,35	;Address to SFD block
00240	 DF ZFSARG,10,36,35	;Argument
00250	 DF ZFSSCN,11,36,35
00260	 DF ZFSPPN,12,36,35	;PPN in case of SFD
00270	 DF ZFSSFD,13,36,35	;Name of sub-file directory
00280	
00290	QFSLNG=11		;Length of ZFS record without sfd:S
00300	
00310	
00320	; ZFI RECORD (FILE OBJECT)
00330	 DF ZFISPC,2,36,35	;FIRST WORD OF TEXT VARIABLE FOR FILE PARAMETER
00340	 DF ZFIFTR,2,17,35	;POINTER TO FILE NAME RECORD
00350	 DF ZFIFLN,2,17,18	;LENGTH OF FILE SPECIFICATION RECORD
00360	 DF ZFIIMG,4,36,35	;FIRST WORD OF TEXT VARIABLE FOR IMAGE
00370	 DF ZFIICP,5,18,35	;CURRENT POSITION
00380	 DF ZFIOPN,6,1,0	;OPEN FAG
00390	 DF ZFIIF,6,1,1		;INFILE FLAG
00400	 DF ZFIOF,6,1,2		;OUTFILE AND PRINTFILE FLAG
00410	 DF ZFIPF,6,1,3		;PRINTFILE FLAG
00420	 DF ZFIDF,6,1,4		;DIRECTFILE FLAG
00430	 DF ZFIIN,6,1,5		;THIS FILE CAN DO INPUT
00440	 DF ZFIOUT,6,1,6	;THIS FILE CAN DO OUTPUT
00450	 DF ZFISFD,6,1,7	;This file has a SFD record
00460	 DF ZFIDE,6,1,8		;This file has an extended enter block
00470	 DF ZFIAPP,6,1,9	;Append mode for this file
00480	 DF ZFIEND,6,1,10	;Temporary end of file flag
00490	 DF ZFIECT,6,1,11	;Eject has been done
00500	 DF ZFIFO,6,1,12	;First output flag
00510	 DF ZFINB,6,1,13	;Next sequential block should be read
00520				;(Directfile only)
00530	 DF ZFIWDB,6,1,14	;[24] Images on word boundary in the file
00540	 DF ZFINUM,6,1,15	;[24] File is line numbered (implies ZFIWDB)
00550	 DF ZFIRON,6,1,16	;[24] Access:RONLY
00560	 DF ZFIWLR,6,3,16	;[24] Combines ZFIWDB,-NUM,-RON
00570	 DF ZFILBO,6,1,17	;[44] Last call was to BREAKOUTIMAGE
00580	 DF ZFIFND,6,1,18	;[61] On when no dialogue is wanted on file
00590				;     initialization (FIND??FILE called)
00600	 DF ZFIPGT,6,1,19	;[63] On when OUTPUT or INPUT proc in progress on file
00610	 DF ZFINLE,6,1,20	;[105] No lookup or enter should be done
00620	 DF ZFIBNW,6,1,21	;[105] Buffers not wanted
00630	 DF ZFICHN,10,4,12	;Channel number associated with this file object
00640				;Placed in ac position for use in uuo's
00650	 DF ZFIBUF,10,18,35	;Number of buffers
00660	 DF ZFIKAR,11,36,35	;Device characteristics file status and type information
00670	 DF ZFITTY,11,1,14	;Device is a tty
00680	 DF ZFIMTA,11,1,13	;Device is a magtape
00690	 DF ZFIDSK,11,1,1	;Device is a DSK
00700	 DF ZFITA,11,1,4	;TTY is controlling the job
00710	 DF ZFITU,11,1,5	;TTY is in use as a user terminal
00720	 DF ZFIDTA,11,1,11	;Device is a dec tape
00730	 DF ZFIDIN,11,1,16	;This device can do input
00740	 DF ZFIDOU,11,1,17	;This device can do output
00750	 DF ZFISTI,12,36,35	;Initial file status
00760	 DF ZFIDMO,12,4,35	;[61] Data mode, part of status
00770	 DF ZFIUWC,12,1,31	;[61] Use word count when computing size of data in buffer
00780	 DF ZFISYN,12,1,30	;[61] On if synchronous input is wanted (stop on each buf)
00790	 DF ZFIDVN,13,36,35	;Sixbit device name
00800	 DF ZFIOBH,14,18,17	;Address of output buffer header block
00810	 DF ZFIIBH,14,18,35	;Address of input buffer header block
00820	;The following information is used in lookup or enter
00830	 DF ZFIFIL,15,36,35	;File name (sixbit)
00840	 DF ZFIEXT,16,18,17	;File extension
00850	 DF ZFID1,16,12,35	;File creation date
00860	 DF ZFIPT,17,9,8	;File protection
00870	 DF ZFIMOD,17,4,12	;Data mode
00880	 DF ZFITIM,17,12,25	;Creation time of day
00890	 DF ZFID2,17,12,35	;User supplied date
00900	 DF ZFIPRJ,20,18,17	;Project number
00910	 DF ZFIPRG,20,18,35	;Programmer number
00920	 DF ZFIARG,20,36,35	;Link to ZYS record when SFD
00930	 DF ZFINAM,21,36,35	;Logical file name
00940	 DF ZFIPPN,22,36,35	;Save area for ppn between lookup's
00950	 DF ZFIBFS,23,36,35	;Buffer size for this file
00960	
00970	QFILNG=	24	;Length of file object
00980	
00990	; ZFI class ZIF - infile object
01000	 DF ZIFEND,7,36,35	;Endfile flag (byte pointer definition)
01010	DSW ZIFEND,7,36 	;Switch definition
01020	
01030	QIFLNG=	24	;Length of infile object
01040	
01050	; ZFI CLASS ZOF - Outfile object
01060	 DF ZOFBLK,24,18,17	;No of blocks written
01070	 DF ZOFLIM,24,18,35	;Max no of blocks
01080	
01090	QOFLNG=	25	;Length of outfile object
01100	
01110	; ZOF CLASS ZPF - printfile object
01120	 DF ZPFSP,25,18,17	;Spacing
01130	 DF ZPFLP,25,18,35	;Linesperpage
01140	 DF ZPFLL,26,18,17	;Last printed line
01150	 DF ZPFLIN,26,18,35	;Line
01160	
01170	QPFLNG=	27	;Length of printfile object
01180	
01190	; ZFI CLASS ZDF - directfile object
01200	 DF ZDFEND,7,36,35 	;Endfile flag - same position as for infile !!
01210	DSW ZDFEND,7,36 	;Switch definition
01220	 DF ZDFIML,24,18,17	;Max image length
01230	 DF ZDFLIM,24,18,35	;Max valid ZDFLOC (last written record number)
01240	 DF ZDFWCT,25,18,17	;Buffer word count	;[5]RTS
01250	 DF ZDFLOC,25,18,35	;LOCATION
01260	 DF ZDFMOD,26,1,0	;On if outimage has been done on directfile buffer
01270	 DF ZDFOUT,26,1,1	;On if outimage was done last, not inimage
01280	 DF ZDFBLK,26,18,35	;Number of written or read physical
01290				;blocks during one inimage or one outimage
01300	
01310	QDFLNG=	27	;Length of directfile object
01320	
01330	; CLASS ZBH - buffer header
01340	 DF ZBHLEN,0,18,17	;Buffer area length
01350	 DF ZBHFRE,0,1,0	;Occupied flag
01360	 DF ZBHLNK,0,17,35	;Link to next buffer area
01370	 DF ZBHCON,0,1,18	;Consecutive buffer area flag
01380	 DF ZBHUSE,1,1,0	;Buffer ring use bit
01390	 DF ZBHZBU,1,18,35	;Current buffer
01400	 DF ZBHBUP,2,36,35	;Byte pointer for current buffer
01410	 DF ZBHCNT,3,36,35	;Count of remaining characters in current buffer
01420	
01430	
01440	; Class ZSW - runswitch record
01450	 DF ZSWDEV,0,36,35	;Device in sixbit
01460	 DF ZSWFIL,1,36,35	;File name in sixbit
01470	 DF ZSWEXT,2,18,17	;Extension in sixbit
01480	 DF ZSWPPN,4,36,35	;PPN
01490	
01500	; Class ZBU - I/O buffer
01510	 DF ZBUSTA,4,18,35	;File status when monitor finished buffer processing
01520	 DF ZBUUSE,5,1,0	;Buffer use bit - indicates active data
01530	 DF ZBUSIZ,5,17,17	;Buffer data area size (incl. the next word)
01540	 DF ZBUZBU,5,18,35	;Address of next buffer in buffer ring
01550	 DF ZBUWCT,6,18,35	;Number of actual data words in buffer
01560	 DF ZBUDAT,7,36,35	;Buffer data area
01570	
01580	
01590	; Declaration of ZYS used as SFD block*
01600	 DF ZYSARG,2,36,35	;Argument
01610	 DF ZYSP1,4,36,35	;PPN
01620	 DF ZYSSFD,5,36,35	;First SFD name
01630	
01640	; Declarations of ZXB used as extended lookup block
01650	 DF ZXBLG,1,18,35	;Length of ZXB record
01660	 DF ZXBARG,2,36,35	;Argument
01670	 DF ZXBP2,3,36,35	;PPN or if left half=0 a pointer to sfd-block
01680	 DF ZXBFIL,4,36,35	;File name
01690	 DF ZXBEXT,5,18,17	;Extension
01700	 DF ZXBPRT,6,36,35	;Protection etc
01710	 DF ZXBPT,6,9,8		;[61] Protection field
01720	 DF ZXBLNG,7,36,35	;File length in words
01730	 DF ZXBLEN,12,36,35	;Estimated file length
01740	 DF ZXBALC,13,36,35	;Allocated file length
01750	
01760	
01770	
01780	Q==<OFFSET(ZBHFRE)>
01790	
01800	ASSERT	<IFN %ZBHFRE,<CFAIL ZBHFRE BIT NOT FIRST AS ASSUMED>>
01810	
01820		OPDEF	FREE	[SKIPL	Q]
01830		OPDEF	NOTFREE	[SKIPGE	Q]
01840		OPDEF	IFFREE	[SKIPGE	Q]
01850	
01860	QZDRZPB=1B17-OFFSET(ZDRZPB)
     
00010		SUBTTL	SUBROUTINE DECLARATIONS
00020	
00030	;	Procedure summary
00040	;	=================
00050	
00060	DEFINE PROCINIT(A)=<
00070	QOCIN==	1
00080	QOCIO==	2
00090	QIO==	4
00100	QIONF=	10
00110	QOCEP=	20	;;[61]
00120	QALL=	QIO+QIONF+QOCEP+QOCIN+QOCIO	;;[61]
00130	QRTSYM=	777
00140	Q==Q'A	;;Defines current module
00150	DEFINE X(N,E,D,U,O)<
00160	%U==0	;;Defines using modules
00170	IRP U,<%U==%U+Q'U>
00180	IFN <QRTSYM-Q'D>,<	;;Not in the transfer vector
00190		IFN <Q&%U>,<IFE <<Q'D>&Q>,<EXTERN E>>	;;Entry not in current module
00200		IFN <<Q'D>&Q>,<IFN <Q'D-%U>,<INTERN E>>	;;Entry in current module
00210							;;and used in other modules
00220	>
00230	IFN <Q&%U>,<	;;Used in this module, define opcode
00240		IFB <O>,<
00250		OPDEF N [PUSHJ XPDP,E]
00260		>
00270		IFNB <O>,<
00280		OPDEF N [O E]
00290	>	>
00300	>;;END X
00310	
00320	;; CALL FORMAT: X(name,entry point,defining module,using modules[,opcode])
00330	
00340	X(COPYSPEC,.OCIN6,OCIN,<OCIN,IONF>)	;;Copies information from ZFD to ZFI
00350	X(CREATEFILE,.IOCF,IONF,<OCIN,IONF>)	;;Allocates buffers
00360	X(ERRFILE,.IOERF,OCIO,<OCIN,IO>)	;;Same as FILEERROR
00370						;;but file ref in XWAC1
00380	X(FILEENTER,.IOENT,IONF,<OCIN,IONF>)	;;Enters a file
00390	X(FILEERROR,.IOFER,OCIO,IONF)		;;Types standard error text
00400						;;and logical name on tty
00410	X(FILELOOKUP,.IOLOK,IONF,<OCIN,IONF>)	;;LOOKUP a file
00420	X(FINDLOGICAL,.OCINJ,OCIN,<OCIN,IONF>)	;;Retrieves logical name
00430						;;from a file spec
00440	X(FIXSWITCH,.OCINF,OCIN,<OCIN,IONF>)	;;Scans and processes a number of
00450						;;switches
00460	X(FREEBUFF,.OCINC,OCIO,<OCIN,IO>)	;;Frees a buffer area
00470	X(GETBUFF,.OCIN7,OCIN,<OCIN,IONF>)	;;Finds a free i/o buffer
00480	X(GETBYTE,.OCING,OCIO,<OCIN,OCIO,IONF>)	;;Fetches next byte from YOCBUF,
00490						;;skips line feed
00500	X(GETCHANNEL,.OCIN8,OCIO,<OCIN,IONF>)	;;LOCATES A FREE CHANNEL IN YIOCHTB
00510	X(GETNAME,.OCIN1,OCIO,<OCIN,IO,IONF>)	;;Packs next symbol in XNAME
00520	X(GETREST,.OCINH,OCIO,OCIN)		;;Same as GETNAME but first byte
00530						;;already in XBYTE
00540	X(GETSPEC,.OCINB,OCIN,<OCIN,IONF>)	;;Unpacks a file specification into ZFD
00550	X(LEGAL,.OCLA,OCIO,<OCEP,OCIO>)		;;[61] Skip if (X1) is a legal address
00560	X(LINKBUFF,.OCIND,OCIO,<OCIN,IONF>)	;;Links a buffer ring
00570	X(OUTENTER,.OCINI,OCIN,<OCIN,IONF>)	;;Enters an out- or printfile
00580						;;possibly in append mode
00590	X(OUTOCT,.OCOO,OCIO,<IONF,OCIO,OCEP>)	;;[61] Types last 3 octal digits of X0
00600	X(PRINTFILE,.OCIN9,OCIO,<OCIO,OCIN>)	;;[61] Prints a file spec on tty
00610	X(PRINTSPEC,.OCINE,IONF,<OCIN,IONF>)	;;Prints the entire file spec on tty
00620	X(REOPEN,OCINK,RTSYM,IO)		;;Reopens a file already used
00630	X(SETUPFILE,IOCOM,RTSYM,IO)		;;Performs all common file actions
00640	X(SPECCOPY,.OCINZ,OCIN,<OCIN,IONF>)	;;[225] Copies spec to YOCBUF from
00650						;; any input source
00660	X(TTYSPEC,.OCINY,OCIN,<OCIN,IONF>)	;;[225] Gets specification line from TTY
00670	X(TYPENAME,.OCIN2,OCIO,ALL)		;;Prints the contents of X0 in sixbit
00680						;;on tty
00690	X(TYPESPEC,.IOTYS,OCIO,ALL)		;;[61] Type entire file spec
00700	X(TYPDEC,.OCDT,OCIO,<OCIO,OCEP>)	;;[61] Output X0 in decimal
00710	X(TYPOCT,.OC8T,OCIO,<OCIO,OCEP>)	;;[61] Output X0 in octal
00720	
00730	OPDEF	OP	[HRLI]
00740	OPDEF	OPZ	[HRLZI]
00750	QCHN==OFFSET(ZFICHN)
00760	
00770	DEFINE FILOP(OP,X,Y)<
00780	IFB	<Y>,<HLL X,QCHN(XWAC1)>
00790	IFNB	<Y>,<HLL X,QCHN(Y)>
00800		TLO	X,(<OP>)
00810		XCT	X
00820		>
00830	DEFINE	IOCHECK(X,Y,M)<
00840	IFB	<M>,<HRRI X,740000>
00850		IFNB	<M>,<HRRI	X,M>
00860		FILOP(STATZ,X,Y)
00870		>
00880	
00890		IFE QDEC20,<OPDEF PBOUT [OUTCHR X1]>	;;[225]
00900	
00910		PURGE %U,Q,QIO,QIONF,QOCIN,QOCIO,QRTSYM
00920	> ;End of PROCINIT
     
00010		SUBTTL	Prototypes and symbol tables for system classes
00020	
00030	QFIEBL==	-3	;Default EBL of file classes
00040	QFIDLE==2-QFIEBL	;Corresponding display length
00050	
00060			;[63] Add ZCPPTA field
00070	DEFINE	DCLASS(NAM,ZCP,GCI,PTA,PRL,BLE,DLE,SBL,EBL,NRP,PL,KDP,PAR)<
00080	DEFINE D%'NAM<
00090		IFG <NAM-400K>,<EXTERN	NAM'%S,NAM'%I,NAM'%M,NAM'%Y,NAM'%D>
00100	IFNB <ZCP>,<
00110		IF1,<IFNDEF .'ZCP,<EXTERN .'ZCP>>
00120		Z	.'ZCP
00130	>
00140		IFB <ZCP>,<Z>
00150		BYTE	(1)KDP(3)GCI(1)PTA(13)0(18)NAM'%S	;[63]
00160		Z	NAM'%I		;; INNER
00170		XWD	SBL,PRL
00180	.'NAM::	XWD	BLE,NAM'%M	;;Block length,map
00190		XWD	EBL,NAM'%Y	;;Effective block level, symbol table
00200		XWD	NRP,DLE		;;No of params,display length
00210		BYTE	(1)PAR(17)0(18)NAM'%D	;; Declaration coding
00220		IFNB <PL>,<
00230		PL	;;Formal param. descriptor
00240		>
00250	IFG <NAM-400K>,<
00260	IFN <<.-.'NAM>-<NAM'%E-NAM>>,<CFAIL INCONSIST. PROT. FOR NAM>
00270	>>
00280	DEFINE E%'NAM<
00290	IFNB <ZCP>,<
00300		IF1,<IFNDEF .'ZCP,<EXTERN .'ZCP>>
00310		Z	.'ZCP
00320	>
00330		IFB <ZCP>,<Z>
00340		BYTE	(1)KDP(3)GCI(1)PTA(13)0(18)0	;;[63]
00350		Z	0	;; INNER
00360		XWD	SBL,PRL
00370	.'NAM::	XWD	BLE,0	;;Block length,map
00380		XWD	EBL,0	;;Effective block level, symbol table
00390		XWD	NRP,DLE	;;No of params,display length
00400		BYTE	(1)PAR(17)0(18)0 ;; Declaration coding
00410		IFNB <PL>,<
00420		PL	;;Formal param. descriptor
00430		>
00440	IFG <NAM-400K>,<
00450	IFN <<.-.'NAM>-<NAM'%E-NAM>>,<CFAIL INCONSIST. PROT. FOR NAM>
00460	>>>
00470	
00480	DEFINE	DZSMCL(SN,RN,SA)<
00490		SIXBIT/SN/
00500		N==0
00510		IRPC	SN,<N==N+1>
00520		IFL	<N-7>,<Z>
00530		IFNB	<SA>,<N==SA>
00540		IFB	<SA>,<N==.+1>
00550	RN'%Y::	<QSYSCL>B<%ZSMTYP>+N
00560	>
00570	
00580		;[14 22 12] Define ZSDSPI codes
00590	SCALAR<Q,QIMAIN,QISYSIN,QISYSOUT,QIFIRST,QILAST,QISUC,QIPRED,QIPREV,QIEVTIME,QINEXTEV,QITIME,QICURRENT>
00600	
00610		;[14 22 12] Define SPI field in DZSD macro
00620	DEFINE	DZSD(NAM,SPI,TYP,MOD,KND,OFS,ZCP)<
00630		S==0
00640		IFNB	<SPI>,<S==SPI>
00650		K==QSIMPLE
00660		IFNB	<KND>,<K==KND>
00670		M==QDECLARED
00680		IFNB	<MOD>,<M==MOD>
00690		N==0
00700		IRPC	NAM,<N==N+1>
00710		IFG	<N-^D12>,<PRINTX NAM too long>
00720		Q==0
00730		IFG	<N-6>,<Q==1B0>
00740		Q==Q+<S>B<%ZSDSPI>+<TYP>B<%ZSDTYP>+<M>B<%ZSDMOD>+<K>B<%ZSDKND>+OFS
00750		EXP	Q
00760		SIXBIT/NAM/
00770		IFE	<TYP-QREF>,<
00780		IFB	<ZCP>,<PRINTX REF quantity should have qualif>
00790		Z	ZCP
00800	>>
00810	DEFINE SYSCLASS<
00820	X<CLPB,SUSI,SSLG,SUPS,IOFI>>
00830	DEFINE X(A)<..N==0
00840		IRP A,<Q'A==..N
00850		..N==..N+1>>
00860	SYSCLASS
00870	
00880	;;=== RTS standard prototype definitions ===;;
00890	
00900	
00910	DCLASS(SSST,,,1,0,ZBI%S,3+.SIMVL-1,0,.SIMLV,,,1)		;=== SIMSET	===;
00920	
00930	DCLASS(SSLG,,QSSLG,0,0,ZLG%S,3+.SIMVL,.SIMLV,<.SIMLV-1>)	;=== LINKAGE	===;
00940	
00950	DCLASS(SSHD,SSLG,QSSLG,0,1,ZLG%S,3+.SIMVL,.SIMLV,<.SIMLV-1>)	;=== HEAD	===;
00960	
00970	DCLASS(SSLK,SSLG,QSSLG,0,1,ZLG%S,3+.SIMVL,.SIMLV,<.SIMLV-1>)	;=== LINK	===;
00980	
00990	DCLASS(SUSI,SSST,QSUSI,1,1,ZSU%S,3+.SIMVL-1,0,.SIMLV,,,1)	;=== SIMULATION ===;
01000	
01010	DCLASS(SUPS,SSLK,QSUPS,0,2,ZPS%S,3+.SIMVL,.SIMLV,<.SIMLV-1>)	;=== PROCESS	===;
01020	
01030	DCLASS(SUMA,SUPS,QSUPS,0,3,ZPS%S,3+.SIMVL,.SIMLV,<.SIMLV-1>)	;=== MAIN PROGRAM =;
01040	
01050	;--- ZFP for text parameter ---
01060	PTX==<QTEXT>B<%ZTDTYP>+<QSIMPLE>B<%ZPDKND>+<QVALUE>B<%ZFPMOD>
01070	PTX==PTX+OFFSET(ZFISPC)
01080	
01090	DCLASS(IOFI,,QIOFI,1,,QFILNG,QFIDLE,-2,QFIEBL,1,<PTX>,,1)	;=== FILE ===;
01100	
01110	DCLASS(IOIN,IOFI,QIOFI,1,1,QIFLNG,QFIDLE,-2,QFIEBL,,Z,,1)	;=== INFILE ===;
01120	
01130	DCLASS(IOOU,IOFI,QIOFI,1,1,QOFLNG,QFIDLE,-2,QFIEBL,,Z,,1)	;=== OUTFILE ===;
01140	
01150	DCLASS(IOPF,IOOU,QIOFI,1,2,QPFLNG,QFIDLE,-2,QFIEBL,,Z,,1)	;=== PRINTFILE ===;
01160	
01170	DCLASS(IODF,IOFI,QIOFI,1,1,QDFLNG,QFIDLE,-2,QFIEBL,,Z,,1)	;=== DIRECTFILE ===;
     
00010		SUBTTL	GLOBAL VARIABLES
00020	
00030		DEFINE STATIC(A,N)<
00040		A=	Q
00050		IFB	<N>,<Q==Q+1>
00060		IFNB	<N>,<Q==<N>+Q>>
00070	
00080	Q==0
00090	
00100	;Static low segment area definition
00110	;----------------------------------
00120	STATIC(YACSAV,20);[242] Accumulator save area for .OCSW
00130	STATIC(YOCGS)	; Address of GETSEG routine
00140	STATIC(YEDOFL)	; Number of edit overflows (accumulated)
00150	STATIC(YIOLP)	; Linesperpage (default)
00160	STATIC(YIOSAV)	; Save a value-type quantity here over storage allocation
00170	STATIC(YJOBNO)	; Job number
00180	STATIC(YDAYTM)	;Time of day at program start
00190	STATIC(YRUNTM)	;Accumulated run time at prog start
00200	
00210	;Variables used by SU (Simulation)
00220	QLARGE=377777777777
00230	STATIC(YSUNE)	;Address of NEXTEV routine
00240	STATIC(YSULEV)	;Instruction to load SIMULATION block level to XSAC.
00250	STATIC(YZERNO)	;Number of ZER records to be allocated initially.
00260	STATIC(YZERLG)	;Number of words in a ZER record.
00270	
00280	STATIC(YBATCH)
00290	DSW SBATCH,YBATCH,36	;On for a batch job
00300	
00310	;SIMDDT area (not relocated by gc)
00320	;---------------------------------
00330	STATIC(YDSBCOM)
00340	STATIC(YDSBSAV)
00350	STATIC(YDSINC,4)
00360	STATIC(YDSWIT)
00370	DSW(YDSACT,YDSWIT,0)	;SIMDDT active
00380	STATIC(YDSEAD)
00390	STATIC(YDSENR)
00400	STATIC(YDSZLA)
00410	STATIC(YDSZLN)
00420	STATIC(YDSNOG)
00430	DSW SWNOGC,YDSNOG,36	;On if garbage collection not allowed
00440	STATIC(YDSLOAD)		;Address of DSLOAD routine
00450	STATIC(YDSCAD)		;Approx. user address at ^C - .REENTER
00460	STATIC(YOCOBLK,3)	;Open block for loading SIMDDT
00470	
00480	;Make sure YSYSIN is at offset 61 OCTAL
00490	QOBJAD==4		;Number of words for YOBJAD
00500	Q..==61-QOBJAD
00510	;-- Note! we have some slack here if q. gt 0, otherwise move some declarations
00520	Q.==Q..-Q
00530	IFL Q.,<PRINTX Incorrect offset for YSYSIN>
00540	IFG Q.,<Q==Q..>
00550		PURGE	Q.,Q..
00560	
00570	;--- Object pointers collected here ---
00580	;--------------------------------------
00590	STATIC(YOBJAD,QOBJAD)	; Used by some RTS routines to save object addresses
00600				; prior to calling garbage collector.
00610				; The area is zero when not in use
00620	QNGP=Q
00630	STATIC(YSYSIN)	; REF(Infile) - points to standard sysin file obj
00640	STATIC(YSYSOU)	; REF(Printfile) - points to standard sysout file obj
00650	STATIC(YCSZAC)	; Address of newly created acs - set to zero
00660			; when it has been copied to a display record.
00670	; SIMDDT save area to be relocated by gc
00680	; --------------------------------------
00690	STATIC(YDSIAC)
00700	STATIC(YDSCFO)		;Current file object
00710	STATIC(YDSDFO)		;Display file object
00720	STATIC(YDSSXCB)		;DS[2] save area for current pointer
00730	STATIC(YDSRXCB)		;DS[2] save area for reset of current pointer
00740	STATIC(YDSIFO)		;[41] SIMDDT input file object
00750	STATIC(YDSBA1,1)	;[242] Saves possible SIMDDT base from (re)START of prog
00760	STATIC(YDSDUM,2)	;[41]
00770	STATIC(YDPATH)		;[244] Zero or pointer to default path block (NOTE not SIMDDT)
00780	STATIC(YDSBAS)
00790	
00800	STATIC(YDSTXT)
00810	STATIC(YDSREF)
00820	STATIC(YDSUFO)	;USE file object
00830	STATIC(YDSIOT)	;Text object used by SIMDDT internally
00840	STATIC(YDSXCB)	;Save XCB over USE command in SIMDDT
00850	
00860	STATIC(YOCXCB)	;Saved main block address for SIMDDT and SAGC
00870	
00880	STATIC(YSUPCP)	;Saves process address over possible garbage collection
00890	STATIC(YSUSCP)	; --- " ---
00900	STATIC(YSUPFT)	; --- " ---
00910	STATIC(YSUPAC)	; --- " ---
00920	
00930	QNGP=Q-QNGP	;Number of standard global pointers
00940	STATIC(YIOBUF)	;Address to start of iobufs/end of iospec
00950	STATIC(YIOCHT,20);Channel table
00960	STATIC(YIOSPC)	;Start address of iospec table
00970	STATIC(YIOZFS)	;Pointer to iospec entry during file object generation
00980	STATIC(YTTIB)	;Address to tty input buffer
00990	STATIC(YTTOB)	;Address to tty output buffer
01000	
01010	;--- Variables used in SA to handle the storage pool ---
01020	;-------------------------------------------------------
01030	;;;;;;;
01040	STATIC(YSASTA,0) ;Start of gcp.tmp dump record area
01050	;;;;;;;
01060	STATIC(YSATIM)	;Tim	fixed	runtime in millisec. updated at start of program
01070			;		before and after garbage collection
01080	STATIC(YSAGCT)	;	  "	Accumulated runtime for garbage collections
01090	STATIC(YSAGCN)	;	  "	Number of garbage collections
01100	STATIC(YSADEA)	;Deallocation pointer
01110	STATIC(YSATAU)	;TAU	Float	time between garbage collections
01120	STATIC(YSAFES)	;F^	  "	estimate of active memory
01130	STATIC(YSAFLA)	;FLAST	  "	Last Ff^
01140	STATIC(YSARES)	;R^	  "	estimate of allocation rate
01150	STATIC(YSABES)	;B^	  "	estimate of garbage collection cost
01160	STATIC(YSAR)	;R	  "	allocation rate
01170	STATIC(YSAA)	;A	  "	accounting dependent parameter
01180	STATIC(YSAL)	;L	fixed	storage pool area
01190	STATIC(YSABOT)	; Start of storage pool.
01200	STATIC(YSATOP)	; First free location of storage pool.
01210	STATIC(YSALIM)	; Upper limit of storage pool.
01220			; Space will however be reserved for a maximal acs object
01230			; over and above that limit.
01240	;;;;;;;
01250	STATIC(YSAEND,0) ;End of gcp.tmp dump record area
01260		;[273] Rename cells for virtual core handling
01270	STATIC(YSANWA)
01280	;STATIC(YSABH)	; Gcp.tmp buffer header address
01290	STATIC(YSASW)	; Switch word with sagcpe  (on if gcp.tmp error)
01300	;[273]
01310	STATIC(YSANWB)
01320	;STATIC(YSAIMP)	;LOCAL IMAGE POINTER FOR DUMP ON SYSOUT
01330	;[273]
01340	STATIC(YSAFRZ)	;Do not relocate below address in this cell
01350	;STATIC(YSAILC)	;ZTVLNG,,ZTVCP for local image
01360	;[273]
01370	STATIC(YSANWC)
01380	;STATIC(YSAIBP)	;Local image byte pointer
01390	STATIC(YSAZSU)	;Start of chain of SIMULATION blocks used
01400			; in garbage collector
01410	;;;;;;;
01420	STATIC(YSANIN)	; A value of -1 specifies no initialisation of a newly
01430			; allocated object. Any other value specifies that
01440			; all allocated data words shall have this initial value
01450	STATIC(YSAREL)	;If the storage pool must be moved, this is the
01460			;quantity to be added to YSABOT.
01470	STATIC(YSASAV,20);Save area for garbage collector
01480	STATIC(YUUOAC,20);Save area for UUO handler.
01490	;Data areas for OCIN:
01500	STATIC(YOCSW,QSWNO)	;Switch area
01510	STATIC(YOCRET)		;Return address to user program
01520	STATIC(YOCSIN)		;Address to iospec entry for sysin
01530	STATIC(YOCSOU)		;"	"	"   sysout
01540	STATIC(YOCBF1)	;Save area for buffer pointer during reading of indirect file
01550	STATIC(YOCBF2)	;Save area for buffer pointer during reading of help file
01560	STATIC(YOCBFN)	;Argument of global buffers switch if less 32
01570	STATIC(YOCBFS)	;Argument of global buffers switch if not less 32
01580	STATIC(YOCBST)	;Start adress of first i/o buffer
01590	STATIC(YOCFD,7)	;Static ZFD record
01600	STATIC(YOCFIL)	;Argument for global switch files
01610	STATIC(YOCBUF,24);File specification buffer
01620	STATIC(YOCBUE)	;Last word of buffer
01630	STATIC(YOCINF)	;Indirect file name
01640	STATIC(YOCPNT)	;Pointer to YOCBUF
01650	
01660	;Variables used by TX
01670	STATIC(YTXBN)	; Count of characters
01680	STATIC(YTXBPE)	;Buffer pointer
01690	STATIC(YTXBP)	; Buffer pointer
01700	STATIC(YTXSGN)	; Sign information
01710	STATIC(YTXTP)	; Buffer pointer
01720	STATIC(YTXEXP)	; Used to save exponent in text editing
01730	STATIC(YTXLT)	; Default "lowered ten" value in run time floating
01740			; point fields. May be changed by TXLT.
01750			; Used by the editing procedures
01760	STATIC(YXACAD)	; Address of extended accumulators
01770	STATIC(YFOXCB)	; XCB saved here over call to FORTRAN subroutine
01780	
01790	STATIC(YTXDUM,3)	;Slack
01800	STATIC(YOCUFL)	;[62] Count of underflows
01810	
01820	STATIC(YDSCSW,1)	;Switch controlling ^C - REENTER:
01830				; Negative:	Cannot stop here
01840				; Zero:		May stop here
01850				; Positive:	Wait until return to object code
01860	
01870	YTXB=YOCBUF	; LOCAL BUFFER IN TEXT HANDLING
01880	STATIC(YTXZTV,2); Global text variable used as dummy argument in text
01890			; and as save area for the text variable to be copied in TXCY
01900	
01910	;---- Pushdown stack ----- should be last. ---;
01920	;---------------------------------------------;
01930	STATIC(YPDL,5)	;Space for a few error entries
01940	STATIC(YOBJRT,QPDLEN)	; Actual push down stack - return address to SIMULA
01950				; code will always be at this position
01960	QPDEXT=	5		;Number of additional cells in pdl - used on pdl ofl
01970	STATIC(YPDEXT,QPDEXT)	;Pdl extension
01980	
01990	STATIC(YDUMMY,0)	;Extra cells start here
02000	;======  N O T E  !!!!!!!!!    ========;
02010	;=== Put new entries here to minimize recompilations. Reorder later ===;
02020	STATIC(YIOSIZ)	;Size switch arg if given in NEW
02030	STATIC(YSASTE)	;Core allocation step length
02040	STATIC(YSAHSZ)	;(Max) size of high segment
02050	STATIC(YHEPPN)	;Standard ppn for help files, e g SIMRTS.HLP
02060	STATIC(YDEPPN)	;Standard ppn for SIMDDT
02070	STATIC(YRTPPN)	;Standard ppn for RTS
02080	STATIC(YRTHGH)	;Hiseg name (initial)
02090	STATIC(YOCGSB,0);GETSEG block for hiseg
02100	STATIC(YOCDEV)	;Hiseg device
02110	STATIC(YOCHNM)	;Hiseg name
02120	STATIC(YZERO,2)	;Fill
02130	STATIC(YOCPPN)	;ppn for GETSEG
02140	STATIC(YZERO,1)	;Fill
02150	
02160	STATIC(YOCREN)	;Saves .JBREN over OCGS
02170	STATIC(YDSL35)	;Switch set by inimage if first word is a 
02180			;line number
02190			;Used by SIMDDT
02200		DSW	SWLB35,YDSL35,36
02210	
02220	STATIC(YDSIGS)	;Save area for break character pointer
02230			;Set by inimage and used by SIMDDT
02240	STATIC(YDSIAR)	;[41] New integer arg to continue after error
02250	STATIC(YDSCLOSE)	;[41] Switch used by OCEP and SIMDDT to control closing of files
02260		DSW	(SDSCLO,YDSCLOSE,36)	;[41]
02270	STATIC(YDSCRA)	;[41] switch used by SIMDDT and OCSP0
02280		DSW	(YDSSUP,YDSCRA,36)	;[41]
02290	STATIC(YOCTXT,8)	;[225] Space for directory name or other string
02300	
02310	..N==40-Q+YDUMMY
02320	IFL <..N>,<CFAIL	RPA static area exhausted>
02330	STATIC(YDUM1,<..N>)
02340	STATIC(YLOW)		; Start of dynamic core area
02350	YCSWK1=YTXBN	;Work area for CS module
02360	YCSWK2=YCSWK1+1
02370	YCSWK3=YCSWK2+1
02380	
02390	; ZFD record (SFD information)
02400	DF	ZFDDEV,YOCFD,36,35
02410	DF	ZFDFIL,YOCFD+1,36,35
02420	DF	ZFDEXT,YOCFD+2,18,17
02430	DF	ZFDPT,YOCFD+3,9,8
02440	DF	ZFDPRJ,YOCFD+4,18,17
02450	DF	ZFDPRG,YOCFD+4,18,35
02460	DF	ZFDPNT,YOCFD+5,36,35
02470	DF	ZFDSFD,YOCFD+6,36,35
02480	
02490		END