Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-05 - 43,50337/08/simmcr.mac
There are 2 other files named simmcr.mac in the archive. Click here to see a list.
;<ENDERIN>SIMMCR.MAC.2,  5-Jan-77 14:40:27, Edit by ENDERIN
	SALL
IFDEF .DIRECTIVE,<.DIRECTIVE .NOBIN>	;[221]
	SEARCH	SIMMAC
	RUNIV	SIMMCR RTS definitions	;[104]
	SUBTTL	Definitions common to compiler and RTS modules
;AUTHOR:	Lars Enderin 1973-1974
;PURPOSE:	Defines macros and constants used for code generation and
;		RTS record layouts. Defines the symbols used to
;		communicate with the RTS from compiled code (RTSYMBOLS).
;VERSION:	4 [104,221,300]

	IF1,<END>
	PRINTX	UPDATE: 300	31-Jan-1978/LE

DEFINE	X(p,l)<<verrts_<p-^d35>>&<1_l-1>>

	RADIX	10
	VSIMRTS==X(11, 9)	;;Major SIMRTS version number
	VRTUPD== X(17, 6)	;;Major SIMRTS edit number
	VRTEDI== X(35,18)	;;SIMRTS edit level
	VRTCUS== X( 2, 3)	;;Customer version SIMRTS
	RADIX	8
	SUBTTL	Ac assignments, tag values, error codes
XIAC=	16
XFP=	16	;USED AS PARAMETER LIST POINTER FOR FORTRAN SUBROUTINES
XCB=	15
XSAC=	1
XTAC=	2
XRAC=	XWAC1
XRAC1=	XWAC2

;TAG VALUES FOR DYNAMIC RECORDS (DISPLAY,BLOCK,PROCEDURE, ETC.)
DEFINE TYPZDN<
X <ZDN,ZBI,ZBP,ZCL,ZPB,ZTE,ZTT,ZAR,ZAC,ZER,ZDR,ZYS,ZXB>>
DEFINE X(A)	<..N==0
		IRP A,<
		Q'A==..N
		..N==..N+1>>
TYPZDN

QZDNTM=QZXB		;LAST TAG VALUE FOR DYNAMIC RECORDS

;RUN TIME ERROR CODES
SCALAR<Q,QSORCERR,QBOUNDSERR,QQUAERR,QREFASERR,QVIRTERR,QCHARERR,QNSUBERR,QRTSE0>
; Note that QRTSE0 is the first code to be used in RTS proper
;Parameter descriptor type codes in ZAP and ZFL records
SCALAR	<QDTVSI,Q,QDTFNM,QDTDYN,QDTCON,QDTICO,Q,QDTEXP>
OPDEF	RTSERR	[001B8]	;Error UUO
OPDEF	BREAK	[017B8]	;BREAKPOINT UUO
NONE=	676K
	SUBTTL	Dynamic records (created at run time)

;DYNAMIC RECORD (ZDN)
 DF ZDNCND,0,12,11	;BLOCK CONDITION
 DF ZDNDET,0,1,0	;DETACHED
 DF ZDNTER,0,1,1	;TERMINATED
 DF ZDNACS,0,1,2	;THIS BLOCK HAS ACS RECORD ATTACHED
 DF ZDNKDP,0,1,3	;KEEP DISPLAY EVEN IF TERMINATED (LOCAL CLASSES)
 DF ZDNTYP,0,6,17	;BLOCK TYPE
 DF ZDNLNK,0,18,35	;GARBAGE COLLECTOR WORK SPACE

;BLOCK INSTANCE (ZBI)
DR ZBI,2,ZDNTYP,QZBI
 DF ZBIBNM,1,9,17	;BLOCK STATE NUMBER
 DF ZBIZPR,1,18,35	;PROTOTYPE ADDRESS

;OFFSETS FOR SPECIAL VARIABLES IN FORTRAN PROCEDURE BLOCKS

YFOFAD=	4	;XWD -<count of parameters left>,<offset of next ZFP>
YFOAAD=	5	;Z <offset of address word for next par(XCB)>
YFOPAD=	6	;Z <offset of next temp loc for name param value(XCB)>

;DISPLAY RECORD (ZDR)
DR ZDR,0,ZDNTYP,QZDR
 DF ZDRZAC,1,18,17	;ACS POINTER
 DF ZDRLEN,1,18,35	;LENGTH OF RECORD
 DF ZDRZBI,-1,18,17	;DYNAMIC LINK
 DF ZDRARE,-1,18,35	;REACTIVATION POINT OF INVOKING B.I.
 DF ZDRZPB,-2,36,35	;DISPLAY VECTOR 

;ACCUMULATOR STACK RECORD (ZAC)
DR ZAC,0,ZDNTYP,QZAC
 DF ZACNAC,1,18,17	;NUMBER OF SAVED AC-S
 DF ZACZAM,1,18,35	;ACS MAP ADDRESS
 DF ZACSVA,2,36,35	;FIRST SAVED AC
;ARRAY RECORD (ZAR)
DR ZAR,0,ZDNTYP,QZAR
 DF ZARLEN,1,18,35	;TOTAL LENGTH OF RECORD
 DF ZARBAD,2,36,35	;BASE - ADDR OF (FICTIVE) ELEMENT WITH ALL INDICES=0
 DF ZARTYP,3,9,8	;TYPE OF ARRAY
 DF ZARSUB,3,9,17	;NUMBER OF SUBSCRIPTS
 DF ZARZPR,3,18,35	;PROTOTYPE POINTER FOR REF ARRAY
 DF ZARLOW,2,36,35	;LOWER BOUND ARRAY (ZERO ORIGIN) STEP=2
 DF ZARUPP,3,36,35	;UPPER BOUND ARRAY (ZERO ORIGIN) STEP=2
 DF ZARDOP,-2,36,35	;DOPE VECTOR (ZERO ORIG,ASSUMING AN AC PTS TO ZARDOP[2])

;TEXT RECORD (ZTE)
DR ZTE,2,ZDNTYP,QZTE
 DF ZTECLN,1,18,17	;NUMBER OF CHARACTERS IN MAIN TEXT
 DF ZTELEN,1,18,35	;RECORD LENGTH (WORDS)
 DF ZTECHR,2,7,6	;FIRST CHARACTER OF TEXT

;TEMPORARY TEXT VARIABLE (ZTT)
DR ZTT,3,ZDNTYP,QZTT	;last two words are a text variable
 DF ZTTSP,1,18,17
 DF ZTTZTE,1,18,35
 DF ZTTLNG,2,18,17
 DF ZTTCP,2,18,35

;TEXT VARIABLE (ZTV)
DR ZTV,2
 DF ZTVSP,0,18,17	;NUMBER OF CHARACTERS BEFORE THIS (SUB)TEXT WITHIN TEXT OBJ.
 DF ZTVZTE,0,18,35	;POINTER TO START OF MAIN TEXT CONTAINING THIS TEXT
 DF ZTVLNG,1,18,17	;NUMBER OF CHARACTERS IN (SUB)TEXT
 DF ZTVCP,1,18,35	;Current POS - 1

;DYNAMIC ADDRESS (ZDV)
 DF ZDVOFS,0,18,17	;OFFSET FROM START OF BLOCK INSTANCE
 DF ZDVZBI,0,18,35	;BLOCK INSTANCE OF QUANTITY

;SWITCH DYNAMIC ADDRESS (ZDS)
 DF ZDSZSR,0,18,17	;SWITCH RECORD ADDRESS
 DF ZDSZBI,0,18,35	;BLOCK INSTANCE (STATIC ENVIRONMENT)

;LABEL DESCRIPTOR (ZLD)
 DF ZLDEBL,1,18,17	;EFFECTIVE BLOCK LEVEL (DISPLAY OFFSET)
 DF ZDLBNM,1,18,35	;BLOCK NUMBER (STATE)

;DYNAMIC LABEL (ZLD CLASS ZDL)
 DF ZDLCAD,0,18,17	;CODE ADDRESS
 DF ZDLZBI,0,18,35	;BLOCK INSTANCE
;ARRAY ADDRESS (ZDA)
 DF ZDAZAR,0,36,35	;ADDRESS OF ARRAY RECORD
 DF ZDAZPR,1,36,35	;PROTOTYPE ADDRESS (FOR TYPE REF ONLY)

;REF VARIABLE DYNAMIC ADDRESS (ZRV)
 DF ZRVOFS,0,18,17	;OFFSET WITHIN B.I.
 DF ZRVZBI,0,18,35	;BLOCK INSTANCE ADDRESS
 DF ZRVZPR,1,36,35	;PROTOTYPE ADDRESS

;DYNAMIC ADDRESS OF PROCEDURE (ZDP)
 DF ZDPZPR,0,18,17	;PROTOTYPE
 DF ZDPZBI,0,18,35	;ENCLOSING "COMPLETE" BLOCK (WITH DISPLAY)
 DF ZDPEBI,1,18,35	;INNERMOST ENCLOSING BLOCK

;FORMAL LOCATION FOR PARAMETERS BY NAME (ZFL)
 DF ZFLNTH,0,1,0	;ON IF NO THUNK EXISTS
 DF ZFLATP,0,5,5	;TYPE OF ACTUAL PARAMETER
 DF ZFLDTP,0,3,8	;DESCRIPTOR TYPE
  DSW ZFLVTD,0,@<%ZFLDTP-2>	;THIS BIT ON FOR VALUE TYPE DESCRIPTOR
 DF ZFLAKD,0,3,11	;KIND OF ACTUAL PARAMETER
 DF ZFLCNV,0,1,13	;ON IF CONVERSION IS NEEDED
 DF ZFLFTP,0,4,17	;TYPE OF FORMAL PARAMETER
 DF ZFLZBI,0,18,35	;BLOCK INSTANCE OF PARAMETER
 DF ZFLZQU,1,18,17	;ADDRESS OF QUALIFYING CLASS PROTOTYPE FOR TYPE REF
 DF ZFLADR,1,18,35	;ADDRESS OF THUNK
 DF ZFLOFS,1,18,35	;OFFSET OF VARIABLE IN B.I. IF NO THUNK
 DF ZFLTDK,0,10,11	;LIKE ZFPTMK (DTP INSTEAD OF MOD)
 DF ZFLCTP,0,5,17	;CNV+FTP

;THUNK HEADER WORD (ZTH)
 DF ZTHZTS,0,18,17	;OFFSET OF ZTS RECORD IN DISPLAY
 DF ZTHZAP,0,18,35	;LINK TO NEXT ZAP IN ACTUAL PARAMETER LIST

;THUNK SAVE AREA IN DISPLAY VECTOR (ZTS)
DR ZTS,4	;NOTE THAT THE RECORD BASE IS AT THE LAST WORD
		;(CONVENIENT FOR PARAMETER HANDLING)
 DF ZTSRAD,-3,36,35	;THUNK RETURN (INTO PARAMETER HANDLING ROUTINE)
 DF ZTSRSR,-2,36,35	;RETURN TO SIMULA CODE AT PARAMETER ACCESS
 DF ZTSFAD,-1,36,35	;DYNAMIC ADDRESS OF FORMAL LOCATION
 DF ZTSZBI,0,18,17	;BLOCK INSTANCE (XZBI VALUE) WHEN THUNK WAS INVOKED
 DF ZTSZAC,0,18,35	;ZAC RECORD ADDRESS

;SYSTEM RECORD (ZYS). CONTAINS NO OBJECT POINTERS. USED FOR SPECIAL RTS
;INFORMATION, SUCH AS SFD LISTS, DEBUG INFORMATION FOR SIMDDT. MAY BE
;MOVED BY THE GARBAGE COLLECTOR WITHOUT CHANGE.
DR ZYS,2		;LENGTH OF OVERHEAD IS 2
 DF ZYSLG,1,18,35	;LENGTH OF ZYS RECORD
 DF ZYSINF,2,36,35	;FIRST WORD OF ZYS INFORMATION
;=== SIMULATION DATA AREAS ===

;EVENTNOTICE RECORD (ZER)
DR ZER,3,ZDNTYP,QZER
 DF ZERLEN,1,18,35	;RECORD LENGTH
 DF ZERZEV,2,18,17	;EVENTNOTICE FREE CHAIN
 DF ZERZER,2,18,35	;ZER CHAIN
 DF ZERZV1,3,36,35	;FIRST EVENTNOTICE

;EVENTNOTICE (ZEV)
DR ZEV,4
 DF ZEVZBL,0,18,17	;BACKWARD LINK
 DF ZEVZPS,0,18,35	;PROCESS POINTER
 DF ZEVZLL,1,18,17	;LEFT LINK
 DF ZEVZRL,1,18,35	;RIGHT LINK
 DF ZEVZER,2,18,17	;BASE POINTER (ENCLOSING ZER RECORD)
 DF ZEVZCH,2,18,35	;FREE LIST POINTER
 DF ZEVTIM,3,36,35	;SCHEDULED TIME

;SIMULATION (ZSU) 
DR ZSU,5,ZDNTYP,QZCL
 DF ZSUFT,2,18,17	;FIRST ZEV IN SQS
 DF ZSULT,2,18,35	;LAST ZEV IN SQS AND ROOT OF THE BINARY TREE
 DF ZSULNK,3,18,17	;CHAIN OF ZSU RECORDS FOR GARBAGE COLLECTOR
 DF ZSUZER,3,18,35	;CHAIN OF EVENTNOTICE PAGES
 DF ZSUZPS,4,36,35	;MAIN PROGRAM

;LINKAGE (ZLG)
DR ZLG,3,ZDNTYP,QZCL
 DF ZLGSUC,2,18,17	;SUC LINK
 DF ZLGPRE,2,18,35	;PRED LINK

;PROCESS (ZPS)
DR ZPS,4,ZDNTYP,QZCL
 DF ZPSZEV,3,36,35	;EVENTNOTICE POINTER
	SUBTTL	RTS CONSTANT RECORDS (COMPILER-CREATED)

;PROTOTYPE (ZPR)
DR ZPR,2
 DF ZPRBLE,0,18,17	;BLOCK INSTANCE LENGTH
 DF ZPRMAP,0,18,35	;ADDRESS OF MAP OF VARIABLES
 DF ZPREBL,1,18,17	;EFFECTIVE BLOCK LEVEL, COPIED (NEGATIVE) FROM ZHEDLV
 DF ZPRSYM,1,18,35	;ADDRESS OF SYMBOL TABLE

;PROCEDURE PROTOTYPE (ZPR CLASS ZPC)
DR ZPC,4
 DF ZPCNRP,2,18,17	;NUMBER OF PARAMETERS
 DF ZPCDLE,2,18,35	;LENGTH OF DISPLAY RECORD
 DF ZPCPAR,3,1,0	;Set if any parameters in this proc/class or any prefix
 DF ZPCTYP,3,5,5	;Type if function procedure
 DF ZPCNCK,3,1,6	;Signifies NOCHECK for a MACRO-10 proc
 DF ZPCF40,3,1,7	;Signifies that the prototype is for a F40 proc
 DF ZPCNAM,3,1,8	;On if FORTRAN procedure has name parameter(s)
 DF ZPCDEC,3,18,35	;START OF INSTRUCTIONS (declaration coding)
 DF ZPCZFP,4,36,35	;FORMAL PARAMETER DESCRIPTORS

;CLASS AND PREFIXED BLOCK PROTOTYPE (ZPC CLASS ZCP)
DR ZCP,8
 DF ZCPSBL,-1,18,17	;STATIC BLOCK LEVEL
 DF ZCPPRL,-1,18,35	;PREFIX LEVEL
 DF ZCPIEA,-2,36,35	;ADDR OF STATEMENT AFTER INNER,
			;OR END OF PREF. BLOCK
 DF ZCPKDP,-3,1,0	;KEEP DISPLAY (CLASS HAS LOCAL CLASSES)
 DF ZCPGCI,-3,3,3	;GARBAGE COLLECTOR INDEX FOR SPECIAL ACTIONS
 DF ZCPPTA,-3,1,4	;[63] Class contains protected attributes
 DF ZCPSTA,-3,23,35	;START OF STATEMENTS OF CLASS OR BLOCK
 DF ZCPZCP,-4,36,35	;PREFIX POINTER
 DF ZCPVID,-5,36,35	;VIRTUAL DESCRIPTORS

;MAP OF VARIABLES IN A BLOCK (ZMP)
DR ZMP,4
 DF ZMPZSD,0,18,17	;LINK TO SYMBOL TABLE FOR BLOCK (PASS 2  ONLY)
 DF ZMPZMP,0,18,35	;Link to next outer map
 DF ZMPNOV,1,18,17	;Number of words for other variables than REF, ARRAY, negated
 DF ZMPDOV,1,18,35	;first such variable at this offset
 DF ZMPNRV,2,18,17	;Number of REF and ARRAY variables, negated
 DF ZMPDRV,2,18,35	;Offset of first such variable
 DF ZMPNTX,3,18,17	;Number of words for TEXT variables, negated
 DF ZMPDTX,3,18,35	;Offset of first TEXT variable

;STATIC LABEL DESCRIPTOR (ZLD CLASS ZSL)
 DF ZSLSIM,0,1,0	;ON FOR SIMPLE LABEL (ZSLENB NEGATIVE)
 DF ZSLENB,0,18,17	;OFFSET IN DISPLAY OF NEAREST "DISPLAY BLOCK"
			;(if ZSLSIM is set, i e simple label case)
 DF ZSLADP,0,18,35	;ADDRESS OF SIMPLE LABEL OR SWITCH THUNK ADDRESS

;SWITCH RECORD (ZSR)
 DF ZSRSLD,-2,36,35	;LAST ZSL ENTRY
 DF ZSRNEN,0,36,35	;NUMBER OF ENTRIES
 DF ZSRZPC,1,36,35	;SWITCH PROTOTYPE ("LABEL PROCEDURE")
;TYPE DESCRIPTOR (ZTD)
 DF ZTDTYP,0,5,5	;TYPE OF VARIABLE (COULD BE TAG FIELD)

;PARAMETER DESCRIPTOR (ZTD CLASS ZPD)
 DF ZPDKND,0,3,11	;KIND OF VARIABLE

;FORMAL PARAMETER DESCRIPTOR (ZPD CLASS ZFP)
 DF ZFPMOD,0,3,8	;PARAMETER TRANSMISSION MODE
 DF ZFPOFS,0,18,35	;OFFSET OF FORMAL LOCATION IN B.I.

 DF ZFPTMK,0,10,11	;TYPE,MODE,KIND (SAME ORDER AND LENGTH AS IN ZQU!!!)

;FORMAL PARAMETER DESCRIPTOR FOR TYPE REF (ZFP CLASS ZFR)
 DF ZFRZPR,1,18,35	;PROTOTYPE OF QUALIFYING CLASS

;ACTUAL PARAMETER DESCRIPTOR (ZPD CLASS ZAP)
 DF ZAPNTH,0,1,0	;ON IF NO THUNK EXISTS
 DF ZAPDTP,0,3,8	;DESCRIPTOR TYPE
 DF ZAPEBL,0,5,17	;EFFECTIVE BLOCK LEVEL (IF NO THUNK)
 DF ZAPADR,0,18,35	;ADDRESS OF THUNK (IF ANY)
 DF ZAPOFS,0,18,35	;OFFSET OR VALUE OF QUANTITY IF NO THUNK
 DF ZAPZQU,-1,18,35	;QUALIFICATION PROTOTYPE ADDRESS

		;ZLN ,LINE NUMBER TABLE


	DSW	(ZLNICD,0,0)		;TYPE OF ENTRY FLAG ON IF BLOCK STRUCTURE ENTRY
	DF	(ZLNTYP,0,4,4)		;TYPE OF BLOCK STRUCTURE ENTRY
	DF	(ZLNBLK,0,13,17)	;POINTER TO PREVIOUS BLOCK STRUCTURE ENTRY
	DF	(ZLNADF,0,18,35)	;ADDRESS FIELD FOR BLOCK STRUCTURE ENTRY
	DF	(ZLNLIN,0,18,17)	;LINE NUMBER
	DF	(ZLNADR,0,18,35)	;ADDRESS OF STATEMENT


		;ZSM SYMBOL TABLE

	DF	(ZSMFOR,-3,18,17)	;ENTRY POINT TO FORTRAN ROUTINE
	DF	(ZSMZLN,-3,18,35)	;LINK TO LINE NUMBER TABLE
	DF	(ZSMRN1,-2,36,35)	;FIRST SIX CHAR. IN OBJECT NAME
;	DF	(ZSMRN2,-1,36,35)	;LAST SIX CHARACTERS IN OBJECT NAME
	DF	(ZSMTYP,0,4,3)		;TYPE OF OBJECT
	DF	(ZSMZSL,0,18,17)	;POINTER TO ZSD ENTRY
	DF	(ZSMZSR,0,18,35)	;POINTER TO ZSD ENTRY IF RIGHT PART
	

		;ZSD,SYMBOL TABLE ENTRY


	DSW	(ZSDLNE,0,0)		;FLAG ON IF ZSDNM2 PRESENT
	DF	(ZSDHID,0,1,1)		;[14 22 12] FLAG ON IF HIDDEN
	DF	(ZSDSPI,0,5,7)		;[14 22 12] SYSTEM PROCEDURE INDEX
	DF	(ZSDTYP,0,4,11)		;TYPE OF VARIABLE
	DF	(ZSDMOD,0,3,14)		;MODE OF VARIABLE
	DF	(ZSDKND,0,3,17)		;KIND OF VARIABLE
	DF	(ZSDOFS,0,18,35)	;OFFSET RELATIVETO BLOCK INSTANCE
	DF	(ZSDNM1,1,36,35)	;FIRST SIX LETTERS IN VARIABLE NAME
	DF	(ZSDNM2,2,36,35)	;LAST SIX LETTERS
	DF	(ZSDZPR,3,36,35)	;POINTER TO PROTOTYPE RECORD FOR REF VARIABLE

	SUBTTL	RTSYMBOLS

Comment;

Definition of run-time routines  and  global  variables  referred  by
compiled code. The format of each routine definition is
        X        ROUT[,[L][,S][,N]]
The optional second parameter indicates that the  reference  will  be
resolved  at  load  time. It also indicates to which high segment the
routine belongs, if  two  high  segments  are  created.    The  third
parameter  is  present  for  procedures occurring in ZQU records. The
fourth  parameter,  if  present,  gives  the  external  name  on  the
quantity.    Otherwise,  the  external  routine  name is generated by
preceding the first parameter with a dot, i e the name is ".'ROUT".

The routine name (without the dot) is assigned a value which  is  the
external  symbol  index  (less  than  400000)  or  the address of the
routine entry point in the high segment (greater than 400000).

For standard class prototypes, the Y macro is defined,  which  has  4
parameters:  prototype name (without dot), segment (L or empty), S if
SIMULA name exists - and if it exists, the 4th  parameter  gives  the
size of the variable part of the prototype (after ZPC part).
;
DEFINE RTSYMBOLS=<
X (CSCA)        ;; Copy array object
X (CSSN)        ;; Normal procedure call
X (CSSW)        ;; Formal, remote or connected procedure call
X (CSGO)        ;; General GOTO statement
X (CSNA)        ;; Allocate array
X (CSES)        ;; Exit switch thunk
X (CSEP)        ;; Exit function procedure
X (CSQU)	;; Qualification checking
X (CSSB)        ;; Enter an unreduced subblock
X (CSSC)        ;; Call to evaluate switch designator
X (CSER)        ;; Enter reduced subblock
X (CSEN)        ;; Enter procedure, class or prefixed block after
                ;; parameter evaluation
X (CSRA)        ;; Restore accumulators
X (CSSA)        ;; Save accumulators
;;
X (PHFV)        ;; Return value of name parameter
X (PHFA)        ;; Return computed address of name parameter
X (PHFM)        ;; Return dynamic description of formal
                ;; procedure/switch/array
X (PHFT)        ;; Return address of text variable or text descriptor
X (PHFS)        ;; Store new value into name parameter
X (PHCV)        ;; Convert between arithmetic types
;;
X (CPNE)        ;; New
X (CPSP)        ;; Create prefixed block
X (CPPD)        ;; End prefixed block declarations
X (TXDA)	;; Compute dynamic and abs addr of text variable in ZTT
X (CPCA)        ;; Call
X (CPCD)        ;; End declarations of class body
X (CPCI)        ;; Inner
X (CPE0)        ;; End class body prefix level 0
X (CPDT,,S)     ;; Detach
X (CPRS,,S)     ;; Resume
;;
X (OCEP)        ;; Exit main program
X (OCIN,2)	;; Complete initialisation started by OCSP
X (OCSP,L)      ;; Start main program
;;
X (TXBL,3,S)     ;; Blanks
X (TXGC,,S)     ;; Getchar (text)
X (TXCY,,S)     ;; Copy
X (TXGI,,S)     ;; Getint
X (TXGR,,S)     ;; Getreal
X (TXLT,,S)	;; LOWTEN
X (TXMN,,S)	;; Main
X (TXPF,,S)	;; Putfrac
X (TXPC,,S)	;; Putchar
X (TXPX,,S)	;; Putfix
X (TXPI,,S)	;; Putint
X (TXST,3,S)	;; Strip
X (TXSE,,S)	;; Setpos
X (TXSU,3,S)	;; Sub
X (TXRE)	;; Text relation
X (TXVA,3)	;; Text value assignment
X (TXGF,,S)	;; Getfrac
X (TXPR,,S)	;; Putreal
;;
Y (IOFI,,,1)	;; FILE
Y (IOIN,,S,1)	;; Infile
Y (IOOU,,S,1)	;; Outfile
Y (IOPF,,S,1)	;; Printfile
Y (IODF,,S,1)	;; Directfile
X (IOIC,,S)	;; Inchar
X (IOLI,,S)	;; Lastitem
X (IOII,,S)	;; Inint
X (IOIR,,S)	;; INREAL
X (IOIF,,S)	;; INFRAC
X (IOIT,,S)	;; INTEXT
X (IOIG,,S)	;; INIMAGE
X (IOBO,,S)	;; BREAKOUTIMAGE
X (IOOG,,S)	;; OUTIMAGE
X (IOOC,,S)	;; OUTCHAR
X (IOOI,,S)	;; OUTINT
X (IOOX,,S)	;; OUTFIX
X (IOOR,,S)	;; OUTREAL
X (IOOF,,S)	;; OUTFRAC
X (IOOT,,S)	;; OUTTEXT
X (IOLT,,S)	;; LOCATE
X (IOOP,,S)	;; OPEN
X (IOCL,,S)	;; CLOSE
X (IOEJ,,S)	;; EJECT
X (IOSP,,S)	;; SPACING
X (IOLP,,S)	;; LINESPERPAGE
;;
X (MAAC,L,,ACOS.)	;; Arccos
X (DUMDUM,L)
X (MAAS,L,,ASIN.)	;; Arcsin
X (DUMDUM,L)
X (MAAT,L,,ATAN.)	;; Atan
X (MAATD,L,,DATAN.)
X (MACI,L)		;; LONG REAL TO INTEGER CONVERSION
X (MACL,L)		;; INTEGER TO LONG REAL CONVERSION
X (MACO,L,,COS.)	;; Cos
X (MACOD,L,,DCOS.)
X (MACH,L,,COSH.)	;; Cosh
X (DUMDUM,L)
X (MAEX,L,,EXP.)	;; Exp
X (MAEXD,L,,DEXP.)
X (MALN,L,,ALOG.)	;; Ln
X (MALND,L,,DLOG.)
X (MASI,L,,SIN.)	;; Sin
X (MASID,L,,DSIN.)
X (MASH,L,,SINH.)	;; Sinh
X (DUMDUM,L)
X (MASQ,L,,SQRT.)	;; Sqrt
X (MASQD,L,,DSQRT.)
X (MATA,L,,TAN.)	;; Tan
X (DUMDUM,L)
X (MATH,L,,TANH.)	;; Tanh
X (DUMDUM,L)
X (MARR,L,,EXP3.)	;; Real to real
X (MALL,L,,DEXP3.)	;; Long real to long real
X (MARI,L,,EXP2.)	;; Real to integer
X (MALI,L,,DEXP2.)	;; Long real to integer
;;
;;
X (RDDI,L,S)	;; Discrete
X (RDDR,L,S)	;; Draw
X (RDER,L,S)	;; Erlang
X (RDHI,L,S)	;; Histd
X (RDLI,L,S)	;; Linear
X (RDNE,L,S)	;; Negexp
X (RDNO,L,S)	;; Normal
X (RDPO,L,S)	;; Poisson
X (RDRA,L,S)	;; Randint
X (RDUN,L,S)	;; Uniform
X (RDHO,L,S)	;; Histo
;;
X (SAGC,3)	;; Garbage collector
X (SAAR,3)	;; Allocate data record
;;
Y (SSST,L,S)	;; SIMSET prototype
Y (SSLG,L,S)	;; Linkage
Y (SSLK,L,S)	;; Link
Y (SSHD,L,S)	;; Head
X (SSSC,L,S)	;; Suc
X (SSPD,L,S)	;; Pred
X (SSOU,L,S)	;; Out
X (SSFO,L,S)	;; Follow
X (SSPC,L,S)	;; Precede
X (SSIT,L,S)	;; Into
X (SSFT,L,S)	;; First
X (SSLT,L,S)	;; Last
X (SSCL,L,S)	;; Clear
X (SSCA,L,S)	;; Cardinal
X (SSEY,L,S)	;; Empty
X (SSPV,L,S)	;; Prev
;;
X (SUAC,L)	;; Activation statement
Y (SUSI,L,S)	;; SIMULATION
Y (SUPS,L,S)	;; Process
Y (SUMA,L,S)	;; MAIN PROGRAM of SIMULATION
X (SUHO,L,S)	;; Hold
X (SUPA,L,S)	;; Passivate
X (SUWA,L,S)	;; Wait
X (SUCA,L,S)	;; Cancel
X (SUAM,L,S)	;; Accum
X (SUEV,L,S)    ;; Evtime
X (SUNE,L,S)    ;; Nextev
;;		Interface to FORTRAN library functions
X (YFADR,L)	;; List of parameter addresses for mathematical routines
X (YFARG,L)	;; First parameter to mathem. subr.
X (YFAR2,L)	;; Second parameter (to EXPn routines)
;; PSEUDO AC'S
X (YXA1,L)
X (YXA2,L)
X (YXA3,L)
X (YXA4,L)
X (YXA5,L)
X (YXA6,L)
X (YXA7,L)
X (YXA10,L)
X (YXA11,L)
X (YXA12,L)
X (PHPT,L)	;; Transfer parameters to formal or virtual procedure
X (FOREX)	;; Called from FORTRAN subr.
X (FORER)	;; - " -
X (OCIN8,3)	;; GETCHANNEL FROM MACRO PROCEDURE
X (IOLN)	;; Check logical file name for SIMDDT
X (CSEU)	;; End of unreduced subblock
X (OCEI)	;; End initialisation after OCIN
X (OCINK,2)	;; Reopen file
X (IOCOM,2)	;; Set up file
X (OCUU)	;; UUO handler
X (OCTR)	;; Trap handler
		;;[14 24 15]   RTS[23] ERROR E39
X (CSSW0)	;; Formal or virtual procedure call without parameter list
X (IOCB)	;; [63] Compute block number for Directfile
X (IOCS)	;; [63] Compute start of image in Directfile buffer (via LOC)
X (IONB)	;; [63]	Advance Out- or Directfile one block (Output)
X (IORB)	;; [63] Advance In- or Directfile one block (Input)
X (IOERF)	;; [63] Write file spec for file in error
X (OCIND,3)	;; [105] Linkbuff - chains buffer rings
X (IOCLA)	;; [105] Close all files
X (OCLD)	;; [300] Load SIMDDT
X (OCINC,3)	;; [300] FREEBUF - free buffer area
>
%%%%%1=1
%%%%%2=400010
DEFINE X(ROUT,S,DUM,DUM1)=<
IFIDN <L>,<S>,<
ROUT=%%%%%1
%%%%%1=<%%%%%1+1>
>
IFDIF <L>,<S>,<
ROUT=%%%%%2
%%%%%2=<%%%%%2+1>
>>
DEFINE Y(PROT,SEG,S,F)<
IFIDN <L>,<SEG>,<X (PROT,L,S)>
IFDIF <L>,<SEG>,<
PROT'%B=%%%%%2
%%%%%2=%%%%%2+ZCP%S
PROT=%%%%%2-ZPC%S
IFNB <F>,<%%%%%2=%%%%%2+<F>>
PROT'%E=%%%%%2
>>
        RTSYMBOLS
	IFG <%%%%%1-QFTFX-1>,<
	DEFINE MM(A)<PRINTX QFTFX MUST BE AT LEAST A
>
	MM(\%%%%%1)
	PURGE	MM
	>
	END