;<EXEC>XDEF.MAC;13     6-OCT-75 15:34:55    EDIT BY PLUMMER
;1.54

;<EXEC>XDEF.MAC;11    18-SEP-75 18:37:49    EDIT BY PLUMMER
; PARC CHANGES ... UUO DEFINITION MACROS
;<EXEC>XDEF.MAC;6    29-JUL-75 11:44:33    EDIT BY PLUMMER
; CHANGE AUTOLOGOUT TIMES
;<EXEC>XDEF.MAC;5    21-MAR-75 13:28:18    EDIT BY PLUMMER
; TEMPORILY DEFEAT .DIRECTINE .NOBIN  SO XDEF.REL GETS LOADED
;<EXEC>XDEF.MAC;4    14-MAR-75 23:10:28    EDIT BY PLUMMER
; ADD .DIRECTIVE .NOBIN
;<EXEC>XDEF.MAC;3    27-FEB-75 12:48:54    EDIT BY PLUMMER
; ALLOW ^T TYPEOUTS 0 SECONDS APART
;<EXEC>XDEF.MAC;2     2-JAN-75 12:22:28    EDIT BY PLUMMER

;1.53
;<EXEC>XDEF.MAC;1     2-DEC-74 10:14:52    EDIT BY PLUMMER

; 1.52
;<N-EXEC>XDEF.MAC;8    25-NOV-74 11:41:50    EDIT BY PLUMMER
; ADD SGTBLN FOR $SYSGT
;<N-EXEC>XDEF.MAC;6    26-JUL-74 13:44:06    EDIT BY PLUMMER
; DEFINE FDBUND
;<N-EXEC>XDEF.MAC;4    10-JUN-74 16:41:03    EDIT BY PLUMMER
; ^T PARAMETERS (PARC)
;<N-EXEC>XDEF.MAC;3     9-FEB-74 10:22:54	EDIT BY COMBS
; ADD DEF OF FDBUSW FOR SRI
;<N-EXEC>XDEF.MAC;2    24-JAN-74 11:04:03	EDIT BY PLUMMER

; 1.51
; DOUBLE AUTOL2 AND AUTOL3
; REMOVE XWD'S
; ADD PROGX BIT IN KWV1
; ADD INTOFF, INTON, FDBEPH DEFINITIONS

; 1.50
; DEFAULT FOR DST10X CONDITIONAL
; NETWORK STATISTICS FILE WINDOW

; 1.49
; 1.46

; PDP-10 TENEX EXECUTIVE SYMBOL DEFINITIONS

;GENERATES NO CODE, BUT DEFINES SYMBOLS AND MACROS AND OP CODES

	UNIVERSAL XDEF
;	.DIRECTIVE .NOBIN
	.DIRECTIVE XSRCVN %XD
	%XD==%XD


;***** DEFAULT CONDITIONALS ********
IFNDEF DST10X,<DST10X==0>	;TURNOFF DISTRIBUTED CODE UNLESS
				;REQUESTED BY A PARAMETER FILE







;**** THINGS THAT AFFECT THE LANGUAGE EFFECTED BY THIS CODE *****



CTRLC==3	;SUPER-PANIC PSI CHARACTER
		;AND "TERMINAL CODE" FOR SAME
CTCODE==^D20	;"TERMINAL CODE" FOR CHARACTER ASSIGNED TO PSI THAT
		;PRINT RUNTIME (^T)
HUCODE==^D30	;"TERMINAL CODE" FOR DATAPHONE CARRIER OFF (HANGUP)
BELL==7         ;CHARACTER TO RING WHEN ILLEGAL ^A OR ^W INPUT,
                ;OR WHEN RECOGNITION AMBIGUITY REQUIRES MORE INPUT
CTRLE==5	;CHARACTER THAT PREFIXES PRIVILEGED COMMANDS
CTRLP==20	;MINI EXEC INTERRUPT CHARACTER
CTRLZ==32	;EOF CHARACTER FOR "COPY" COMMAND WHEN TTY IS SOURCE
CONTCH==176	;STORED INTERNALLY FOR CONTINUATION CHARACTER (&).
		;ONE BYTE, TRANSLATED BACK TO EOL-SPACE-& ON OUTPUT
		;FOR ^R, ^A. THIS CHAR MUST NEVER TURN UP OTHERWISE;
		;IS 176 THE BEST VALUE?

;ALSO MANY CHARACTERS ARE GIVEN SPECIAL FUNCTIONS BY THEIR ENTRIES
;  IN THE CHARACTER TABLE (CHRTBL) IN RS.MAC.

;AUTOMATIC LOGOUT PARAMETERS:
;AUTOLOGOUT OCCURS IN TOP-LEVEL EXEC WHEN JOB IS NOT LOGGED IN AND:
;	1) EXEC RETURNS TO COMMAND INPUT AND AT LEAST AUTOLO1 SECONDS
;	   HAVE ELAPSED SINCE EXEC WAS STARTED, OR
;	2) AUTOL2 SECONDS HAVE ELAPSED SINCE STARTUP AND THERE HAS
;	   BEEN NO TELETYPE ACTIVITY FOR AUTOL3 SECONDS.
AUTOL1==^D600
AUTOL2==^D120
AUTOL3==^D60

;CONTROL T PARAMTERS
CTTIM0==^D15	;MAX. ^T INTERVAL THAT CAUSES FULL TYPEOUT
CTTIM1==^D00	;MIN. INTERVAL BETWEEN TYPEOUTS (CAN BE 0)

;****************** SYSTEM DEPENDENT THINGS ********************



; ASCII CHARACTERS - IF ANY ARE CHANGED, MUST ALSO CHANGE "CHRTBL"!
TAB==11		;TAB (^I ON MODEL 33 TTY)
LF==12		;LINE FEED
FORMF==14	;FORM FEED
CR==15		;CARRIAGE RETURN
EOL==37         ;CHARACTER FOR END OF LINE (CR-LF)
ALTM==33        ;ALT MODE, ESC, ETC KEY

; FILE DESCRIPTOR BLOCK IN FILE DIRECTORY
FDBCTL==1	;CONTROL BITS WORD
FDBTMP==1B0	;TEMPORARY FILE CONTROL BIT
FDBNEX==B2	;FILE DOESN'T EXIST (NO EXTS) CONTROL BIT
FDBDEL==1B3	;FILE DELETED BIT IN CONTROL BITS WORD
FDBNXF==B4	;FILE DOESN'T EXIST (WRITE INCOMPLETE) CONTROL BIT
FDBUND==1B9	;FILE IS NOT DELETABLE (PERPETUAL, IMMORTAL,...!)
FDBEPH==1B17	;FILE IS AN EPHEMERON
FDBPRT==4	;PROTECTION WORD
FDBBYV==11	;# VERSIONS TO RETAIN, BYTE SIZE, # PAGES
FDBSIZ==12	;BYTE COUNT THAT WOULD ADDRESS EOF
FDBCRV==13	;VERSION CREATE DATE & TIME
FDBWRT==14	;DATE AND TIME OF LAST WRITE
FDBRED==15	;READ DATE & TIME
FDBUSW==24	;USER SETTABLE WORD

;WHERE DDT (UDDT.SAV) RESIDES
DDTORG==770000
DDTSYM==DDTORG+1	;LOCATION IN DDT THAT POINTS TO LOC WHERE
			;SYMBOL TABLE POINTER IS STORED ($I-1)


MAXJFN==155		;FOR FILSTAT, RLJFNS, ETC

;*********** DEFINITIONS THAT ARE INTERNAL TO EXEC ***********



;MNEMONIC AC'S
CBT=7		;DESCRIPTIVE BITS FROM "CHRTBL" FOR LAST CHARACTER
CHR=10          ;INPUT CHARACTER
TRM=11          ;LAST INPUT FIELD TERMINATOR
KWV=12          ;VALUE WORD RETURNED BY LAST KEYWORD TABLE LOOKUP
KWV1=13         ;KWV SAVED AFTER FIRST KEYWORD IN COMMAND
BFP=14          ;COMMAND BUFFER POINTER
.BFP=15         ;DITTO SAVED AT BEGINNING OF LAST FIELD
CNT=16          ;NUMBER OF CHARACTERS IN FIELD (REQUIRED BY 
                ;EDITING STUFF)

;DEFINITIONS NEEDED TO APPEND ITEMS TO A LIST AND THEN EXTRACT
;THEM ALL FOR ASSEMBLY IN A SINGLE PLACE

DEFINE APPEND(DEF,ITEM) <
	DEFINE DEF(XX,MORE) <XX DEF,<ITEM,MORE>>
>

DEFINE EXPAND(DEF,OP) <
	DEFINE OPMAC(A,ITEM) <IRP ITEM <IFNB <ITEM>,<OP>>>
	DEF(OPMAC)
	PURGE OPMAC
>

;UUO'S USED IN EXEC. MOST HAVE CALLING MACROS.
;NOTE:	UUO DISPATCH TABLE AND DISPATCHER ARE AT BEGINNING OF XMAIN.MAC
;	UUO ROUTINES ARE IN XSUBRS.MAC.

DEFINE UUO(OP,DISP) <
	UUON==UUON+1
	OPDEF OP [<UUON>B8]
IFB <DISP>,<UUOS(APPEND,%'OP)>
IFNB <DISP>,<UUOS(APPEND,DISP)>
>

APPEND(UUOS)	;INIT DISPATCH LIST
UUON==0		;INIT UUO NUMBERS

        UUO(UERR,%ERR)		;ERROR MESSAGE
        UUO(UTYPE,%TYPE)	;TYPE MESSAGE
	UUO(KEYWD,%KEYW)	;KEYWORD INPUT AND LOOKUP
        UUO(UNOI,%NOI)		;NOISE WORD INPUT/OUTPUT
	UUO(U$TYPE,%$TYPE)	;TYPE AND STORE MESSAGE
	UUO(ALLOW)		;CHECK LAST CHARACTER'S DESCRIPTIVE BITS
	UUO(UALTYP,%ALTYP)	;TYPE AND STORE MESSAGE IF
				; AC "TRM" CONTAINS ALT MODE
	UUO(U$ERR,%$ERR)	;ERROR MESSAGE WITHOUT CR FIRST
	UUO(UETYPE,%ETYPE)	;TYPE MESSAGE AND INTERPRET % CODES
	UUO(GTB)		;CONVENIENT INTERFACE TO THE GETAB JSYS
	UUO(PRINT)		;PRINT ASCII CHARACTER FROM EFF ADDR
	UUO(UTRAP,%TRAP)	;ERROR PSI MESSAGE
	UUO(U.$ERR,%.$ERR)	;ERROR THAT DOESN'T CLEAR BUFFERS (^X)
	UUO(UINHEL,%INHEL)	;INPUT A FIELD AND GIVE HELP ON "?"
	UUO(SUBCOM,%SBCOM)	;INPUT AND DISPATCH ON SUBCOMMANDS

;MACROS TO CALL UUO'S AND SUBROUTINES

        DEFINE ERROR (TEXT)
<       UERR [ASCIZ @TEXT@]
>
	DEFINE $ERROR (TEXT)
<	U$ERR [ASCIZ @TEXT@]
>
	DEFINE .$ERROR (TEXT)
<	U.$ERR [ASCIZ @TEXT@]
>
        DEFINE TYPE (TEXT)
<       UTYPE [ASCIZ @TEXT@]
>
	DEFINE $TYPE (TEXT)
<	U$TYPE [ASCIZ @TEXT@]
>
	DEFINE ETYPE (TEXT)
<	UETYPE [ASCIZ @TEXT@]
>
        DEFINE NOISE (TEXT)
<	UNOI [ASCIZ @TEXT@]
>
        DEFINE CONFIRM
<       CALL CONF
>
	DEFINE ALTYPE (TEXT)
<	UALTYP [ASCIZ @TEXT@]
>
	DEFINE TRAP (TEXT)
<	UTRAP [ASCIZ @TEXT@]
>
	DEFINE INHELP (TEXT)
<	UINHEL [ASCIZ @TEXT@]
>

; THE FOLLOWING SIMULATE UNIMPLEMENTED JSYS'S

	;HYPOTHETICAL FUTURE JSYS TO STOP NON-INTERACTIVE JOB
	DEFINE BTCHER
	<>


;TURN OFF INTERRUPTS
	DEFINE INTOFF <
	MOVEI 1,400000
	DIR>

;TURN ON INTERRUPTS
	DEFINE INTON<
	MOVEI 1,400000
	EIR>

;COMMAND TABLE MACROS

;AN ENTRY
;ALSO USED FOR DEFAULT INFORMATION AFTER "KEYWD" MACRO
        DEFINE T(TEXT,BITS,ADDR)
<	IFB <ADDR>,<..A=.'TEXT>
        IFNB <ADDR>,<..A=ADDR>
        [BITS+0,,..A],,[ASCIZ @TEXT@]
>

;HANDIER MACRO FOR USE WHERE "EOLOK" BIT IS TO BE SET
	DEFINE TE (TEXT,BITS,ADDR)
<	T <TEXT>,EOLOK!BITS,ADDR>

;A "FAKE" ENTRY TO FORCE AN AMBIGUITY
	DEFINE X (TEXT)
<	T <TEXT'!>,NOLOG+EOLOK+INVIS,CERR
>
;BEGIN TABLE.
;FIRST WORD MUST BE NUMBER OF ENTRIES
        DEFINE TABLE
<	Z		;FILLED IN BY NEXT TEND
	..T==.		;USED BY NEXT TEND
>
;END TABLE
        DEFINE TEND
<       ..U==.
        RELOC ..T-1
	..U-..T	       ;FILL IN FIRST WORD OF TABLE
        RELOC ..U
>




;AREA SIZES

PDL==120        ;PUSHDOWN
CBUFL==^D50     ;COMMAND BUFFER LENGTH. DETERMINES LENGTH OF COMMAND.
CSBUFL==^D40	;STRING BUFFER MINIMUM SIZE (ACTUAL DEPENDS ON
		;PAGE BOUNDARY).
		;BIG ENOUGH FOR USR NAME, PASSWD, ACCT #, AND THEN SOME
JBUFL==17	;JFN BUFFER LENGTH: ONE MORE THAN # JFNS IN A CMD.
EDFILL==17	;FILE NAME.EXT SAVED BY EDIT COMMAND
		;(FIRST WORD IS POINTERS)

NTTYMD==11	;NUMBER OF TTY, ETC. MODE WORDS

SGTBLN==^D40	;SIZE OF THE $SYSGT HASH TABLE(S)

;BITS BITS BITS


;CHARACTER DESCRIPTION BITS.
;USED IN ENTRIES IN CHARACTER TABLE (CHRTBL) AND THUS THEY APPEAR
; IN AC "CBT" AND IN CALLS TO "ALLOW" UUO.

		  ;BIT SET FOR ---
ALPHAN==1	;ALHPANUMERIC CHARACTERS AND "-"
OCTDIG==2	;OCTAL DIGITS 0 THRU 7
PUNBIT==4	;PUNCTUATION = MOST OTHER PRINTING CHARACTERS
TEOL==10	;EOL AND SEMICOLON
TSPC==20	;SPACE AND TAB
TALT==40	;ALT MODE
TCOM==100	;COMMA
TLPR==200	;LEFT PAREN
TRPR==400	;RIGHT PAREN
TCOL==1000	;COLON (FOR DEVICE NAMES)
TLAN==2000	;LEFT ANGLE BRACKET
TRAN==4000	;RIGHT ANGLE BRACKET (>)
;BITS...

;BITS IN LEFT HALF OF VALUE WORD IN KEYWORD TABLES

;BITS DEFINED HERE ARE RETURNED IN LEFT HALF OF AC "KWV" BY THE LOOKUP
; UUO, "KEYWD".
;SOME OF THESE BITS ARE INTERPRETED BY %KEYW ITSELF, AND SOME ARE
; USED BY ITS CALLERS, AS FOLLOWS.

;THIS FIRST GROUP IS TESTED IN %KEYW, THE SERVICE ROUTINE FOR "KEYWD".
   ;BIT --	   ;MEANING IF BIT ON --
COMOK==1	;COMMA IS OK AS TERMINATOR FOR THIS WORD
EOLOK==2	;CARRIAGE RETURN OR SEMICOLON OK AS TERM FOR THIS WORD
		 ; ALSO, "EOLOK" IS IMPLIED BY "ONEWD"
LPROK==4	;LEFT PAREN OK TO TERMINATE THIS WORD
			;(USED WHERE A NOISE WORD CAN FOLLOW)
NSPALT==10	;DON'T TYPE SPACE AFTER A WORD TERMINATED WITH ALT MODE
;WHLUO, OPRUO, ERRUO REFER TO SPECIAL CAPABILITIES ENABLED:
WHLUO==20	;DON'T RECOGNIZE KEYWORD IF USER DOESN'T HAVE WHEEL PRIV
OPRUO==40	; " " " " " " " OPERATOR PRIVILEGE
ERRUO==100	; " " " " " " " CONFIDENTIAL INFORMATION ACCESS PRIV
WOEPUO==200	;DON'T RECOGNIZE KEYWORD IF USER HAS NEITHER WHEEL NOR
		;OPER NOR CONF INF ACCESS SPECIAL CAP POSSIBLE
		;(NEEDN'T BE ENABLED)
		;NOTE: IF MORE THAN ONE OF THE PRIVILEGE BITS ARE ON,
		;THE KEYWORD IS ACCEPTED IF USER HAS ANY OF THE PRIVS.
LANOK==400	;LEFT ANGLE BRACKET ACCEPTABLE AFTER THIS WORD
INVIS==1000	;DO NOT LIST THIS ENTRY'S KEYWORD WHEN "?" IS TYPED
		;(TESTED IN %Z IN ETYPE)
;ALL BITS NOW IN USE -- UG !-- 8/28/70

;BITS IN LH VALUE WORD IN KEYWORD TABLES...

;THE REST OF THE BITS ARE NOT TESTED BY %KEYW.
;THIS NEXT GROUP ARE USED IN THE MAIN COMMAND TABLES, AND ARE
; MOVED TO AC "KWV1" AFTER FIRST KEYWORD IS INPUT, AND
; STAY IN KWV1 THROUGHOUT COMMAND DECODING.
;SEVERAL ALSO USED IN SUBCOMMAND TABLES
;SUBROUTINE "CONF" LOOKS AT SEVERAL OF THESE.
ONEWD==400000	;ONE WORD COMMAND: CONFIRM BEFORE DISPATCH,
		 ; "EOLOK" BIT IMPLIED
NOCONF==200000	;THIS COMMAND REQUIRES NO CONFIRMATION
CONMAN==100000	;CONFIRMATION IS MANDATORY FOR THIS COMMAND
ALTCON==40000	;ALT MODE MAY BE USED TO CONFIRM THIS COMMAND
			;(EOL ECHOED)
NOLOG==20000	;THIS COMMAND LEGAL EVEN IF NOT LOGGED IN
PROGX==10000	;RUN A PROGRAM WHICH WILL APPEAR AS AN
		;  EXTENTION TO THE EXEC.  THIS BIT IS NEVER ON IN
		; COMMAND TABLE ENTRIES.  IT IS TURNED ON BY THE EXEC
		; WHEN IT DECIDES THAT A FILE NAME SHOULD LOOK LIKE
		; AN EXEC COMMAND.
		;ALSO B5 USED IN "CREATE" SUBCOMMAND TABLE
EASUB==4000	;THIS COMMAND EXAMINES, ALTERS, OR EXECUTES SUBSIDIARY
		 ; FORK, AND IS THUS ILLEGAL IF A PROPRIETARY
		 ; PROGRAM IS IN THAT FORK.
CONFRC==2000	;CONFIRMATION IS FORCED FOR THIS COMMAND

;THE FOLLOWING ARE SOME OF THE OTHER BITS USED IN VARIOUS OTHER TABLES.
;DO NOT REDEFINE THESE BITS OR THOSE IN GROUP INTERPRETED BY
; "%KEYW" IN SUCH A WAY AS TO PRODUCE A CONFLICT!
;B5 ALSO USED IN "CREATE" SUBCOMMAND TABLE (5/14/70).

;BITS...
;FLAG BITS IN AC Z LEFT HALF
;THESE FLAGS ARE CLEARED BEFORE EACH COMMAND IS DECODED

PUNCF==1        ;PUNCTUATION OTHER THAN FILE NAME FIELD TERMINATORS
		; OK IN INPUT FIELDS.
		; TESTED IN "CSTR" SUBROUTINE.
STCF==2         ;STORE CHARACTERS WHICH ARE OUTPUT WITH SUBR "CCHRO"
                 ;(AND HENCE MACRO "TYPE") INTO CBUF (POINTER "CBP").
                 ;USED WHILE REST OF WORD IS BEING TYPED AFTER ALT MODE.
CTRLVF==4	;THIS CHARACTER WAS PRECEDED BY ^V
		 ;SET IN "CCHRI", TESTED IN "CSTR"
BAKFF==10	;BACK UP A FIELD (UN-INPUT FIELD): CAUSES CSTR SUBR AND
		 ; KEYWD UUO TO RE-USE THE PREVIOUS INPUT FIELD.
DASHF==20	;"-" A TERMINATOR NOT "ALPHANUMERIC" CHARACTER
NECHOF==40	;ECHOING OFF (PASSWORD INPUT). TESTED IN %NOI.
RUNF==100	;PROG RUNNING (OR AT LEAST ITS TTY MODES IN EFFECT)
		;ALSO TELLS ^C TO FREEZE THE WORLD (5/20/70).
CTLCF1==200	;SET BY ^C TO SAY CLEAR BUFFER ON ANOTHER ^C
CTLCF2==400	;SET BY 2ND ^C TO SAY CLEAR BUFFER AFTER DEBREAK
LOGOFF==1000	;SET DURING LOGOUT MESSAGE AND LOGGING OUT PROCESS.
		;TELLS ERRORS AND ^C TO SAY "NOT LOGGED OUT".
DTACHF==2000	;INDICATES "DETACH" COMMAND.
		;DISTINGUISHES IT FROM "REDIRECT" AND OTHER COMMANDS
		;DURING EXECUTION.
NEOLF==4000	;TELLS CSTR AND OTHER ROUTINES NOT TO ECHO INPUT EOL'S.
		;USED WHEN A FILE NAME IS BEING PRE-READ.
EOLNEF==10000	;SAYS AN EOL HAS BEEN INPUT BUT NOT ECHOED.
GROUPF==20000	;ON IF INFG ETC INPUT A GROUP OF INPUT FILE NAMES
		;(A NAME WITH AN *, OR MORE THAN ONE NAME)
F3==40000	;FLAG AVAILABLE FOR USE IN COMMANDS,
		;NOT CLOBBERED BY UUO'S OR SUBROUTINES.
F2==100000	;ANOTHER FLAG AVAILABLE FOR USE IN COMMANDS
F1==200000	;FLAG AVAILABLE FOR LOCAL USE IN SUBRS AND UUO'S


;FLAG BITS IN AC Z RIGHT HALF ARE ALSO AVAILABLE TO COMMAND ROUTINES.

;GENERAL PURPOSE BIT SYMBOLS
;USED, FOR INSTANCE, IN JSYS CALLING SEQUENCES
B0==400000
B1==200000
B2==100000
B3==40000
B4==20000
B5==10000
B6==4000
B7==2000
B8==1000
B9==400
B10==200
B11==100
B12==40
B13==20
B14==10
B15==4
B16==2
B17==1



;LOCATIONS OF SOME PAGE BUFFERS

;PAGE-MAPPING BUFFERS ARE BETWEEN 747000 AND 767777.
NSBUF=747000	;WINDOW INTO NETWORK STATISTICS FILE
BUF1=750000	;"COPY" COMMAND SOURCE PAGE
;ALSO BUF1 AND FOLLOWING PAGES ARE USED BY "DIRECTORY"
BUF2=751000	;"COPY" COMMAND DESTINATION PAGE
;PAGEN==1000	;IS ASSEMBLED INTO XPRIV.MAC.

;************* TENEX SYSTEM STANDARD DEFINITIONS *************

;AC'S
Z=0
A=1
B=2
C=3
D=4
E=5
F=6
G==7
AA==10
BB==11
CC==12
DD==13
EE==14
FF==15
GG==16
P=17    ;PUSHDOWN POINTER

	OPDEF CALL [PUSHJ P,]
	OPDEF RET [POPJ P,]

	END
