Google
 

Trailing-Edge - PDP-10 Archives - scratch - 10,7/unscsp/aid/interp.mac
There are 5 other files named interp.mac in the archive. Click here to see a list.
	TITLE	INTERP   V.012	MARFEB-79
SUBTTL JOSS  INTERPRETER



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

	HISEG

	  ;VARIOUSLY USED 8 BIT AND 7 BIT ASCII CODE
EOC1=100;	SIXTEEN END-OF-CELL INDICATORS
EOC2=117;
EOB=136;	END OF DISC-BUFFER INDICATOR
EOS=165;	END-OF-STRING INDICATOR
EOSII=0;	ASCII END-OF-STRING
SP=170;		SINGLE SPACE
SPS=177;	EIGHT SPACES
TAB=152;	LOWER CASE TAB
UTAB=147;	UPPER CASE TAB
PG=150;		PAGE
PGII=14;	ASCII PAGE
IF1=245;	"IF"
IF2=257;	"IF" ASSUMED TO DELIMIT CONDITIONAL CLAUSE
DOT=160;	.
PERIOD=166;	DOT AT END OF SENTENCE
QMARK=164;	?
COMMA=161;	,
COMMA2=167;	COMMAS THAT DELIMIT ITEMS IN A "TYPE" LIST
STAR=144;	*
QUOTE=154;	"
CG=151;		CARRIAGE RETURN
CGII=15;	ASCII CG
WORD=177;	CODES FOR RECOGNIZABLE WORDS START AT 200
UNDER=155;	UNDERSCORE
MINUS=141;	-
COLON=163;	:
LEFT=120;	(
RIGHT=121;	)
LEFTB=122;	[
RIGHTB=123;	]
ALPHA=125;	USED TO TYPE VALUES OF CONDITIONAL EXPRESSIONS.
OMEGA1=126;
OMEGA2=127;
EQUALS=130;	=
BAD=156;	ILLEGAL BYTE CLASS
BADII=26;	ASCII INDICATOR FOR BAD BYTES
BSIZE=246;	"SIZE"
BTIME=247;	"TIME"
BUSERS=250;	"USERS"
BFORM=235;	"FORM"
BFIRST=267;	"FIRST"
DO.=261;	PARENTHETICAL "DO"
CANCEL.=262;	PARENTHETICAL "CANCEL"
CS=77;	INDICATES NEXT BYTE IS CODE FOR COMMENTARY STRING
SPARSE=20;	FLAG BIT FOR SPARSE ARRAYS.
	EXTERNAL SK1,SK2,SK3,SK4,SK5,SK6
	EXTERNAL SK7,SK8,SK9,SK10,SK11,PK1
	EXTERNAL PK2,PK3,PK4,PK5,PK6,PK7
	EXTERNAL PK8,PK9,PK10,PK11,PK12,PK13
	EXTERNAL PK14,PK15,PK16,PK17,PK18,PK19
	EXTERNAL PK20,PK21,PK22,PK23,PK24,PK25
	EXTERNAL PK26,PK27,PK28,PK29,PK30,PK31
	EXTERNAL PK32,PK33,PK34,PK35,PK36,PK37
	EXTERNAL PK38,PK39,PK40,T48,T49,T49X,JWSPDL
	EXTERNAL SPARE,VEND
	DEFINE	U(P);
<
	EXTERNAL	P;>

U(INTENT);
USER0=INTENT		;***FIRST LOC OF USER AREA
U(JOBNO);
U(SPARE4);
U(RISIG)

U(UBUF);

U(ME);

U(RETURN);

U(WIDTH)

U(SIZE)

U(SPACE);

U(LINE);

U(USIZE);

U(UTIME);

U(UUSERS);

U(UMIN);

U(UMIN1);

U(USEC);

U(UCR);

U(UA1);

U(UA);


U(UB1);

U(UB);


U(UACL);

U(UDS);
U(UPS);

U(UCP);

U(UCC);

U(U0)

U(U1);

U(U2);

U(U3);

U(U4);

U(U5);

U(U6);

U(U7);

U(U8);

U(FPDL);

U(LEVEL)

U(US0);

	U(US1);

U(US2);

U(US3);

U(US4);

U(US5);

U(US6);

U(US7);

U(UP0);

U(UP1);

U(UP2);

U(UP3);

U(UP4);

U(UP5);

U(UP6);

U(UP7);

U(UP8);

U(UP9);

U(UP10);

U(UP11);

U(UP12);

U(UX1);

U(UX2);

U(UX3);

U(UX4);

U(TRUE);

U(FALSE);

U(PARTS);
U(FORMS);

U(MODE);

U(BASE)

U(JPDL);

U(JD);

U(U24);

U(U25);

U(CPI);

U(CSI);

U(CSA);

U(UDF1);

U(UDF2);

U(UBFR);

U(UFILE);

U(UKEY);

U(UNAME);

U(UITEM);

U(V);

	SYN	RISIG,RIF;




	SUBTTL	FIELD LENGTHS AND MASKS
INDEX=11;	FIELD LENGTH OF PACKED ARRAY INDICES
XP=11;		DITTO FOR XP OF ARRAY ELEMENTS
IDN=^D8;	FIELD LENGTH FOR IDENTIFIER BYTE
IDM=1777;	AND MASK FRO SAME -- IN DESCRIPTORS
IDMC=776000;
	SUBTTL	HIGH SPEED REGISTER ASSIGNEMENT
CR=0;	STACK POINTER FOR PDP-6 STACKING INSTRUCTIONS

; THE "A" AND "B" BANKS ARE USED VARIOUSLY. IN PARTICULAR
; THEY CONTAIN FIRST AND SECOND ARGUMENTS RESP. ON ENTRANCE
; TO ARITHMETIC AND FUNCTION SUB-ROUTINES. RESULTS ALWAYS IN
; THE "A" BANK. "B" BANK GARBAGED EXCEPT FOR COMPARISONS.

A1=1;	PACKED SIGN AND IP OF ARGUMENT; IP OF RESULT
A=2;	SIGN OF RESULT
A2=3;	XP OF ARGUMENT AND RESULT (TWO-COMPLEMENT REP.)

B1=4;
B=5;
B2=6;

ACL=7;	ADDRESS OF FIRST CELL ON AVAILABLE-CELL-LIST
DS=10;	ADDRESS OF FIRST CELL ON DESCRIPTOR PDL
PS=11;	ADDRESS OF FIRST CELL(SECOND ITEM) ON PROCESSOR PDL

CP=16;	TOP ITEM OF PROCESSOR PDL
CC=17;	EITHER CURRENT BYTE OR CURRENT TERMINAL DESCRIPTOR



	SUBTTL;	SYNONYMS
	OPDEF	J[JRST ];
	OPDEF	JE[JUMPE ];
	OPDEF	JN[JUMPN ];
	OPDEF	JL[JUMPL ];
	OPDEF	JLE[JUMPLE ];
	OPDEF	JG[JUMPG ];
	OPDEF	JGE[JUMPGE ];
	OPDEF	SN[SKIPN ];
	OPDEF	CE[CAME ];
	OPDEF	CN[CAMN ];
	OPDEF	CL[CAML ];
	OPDEF	CLE[CAMLE ];
	OPDEF	CGE[CAMGE ];
	OPDEF	F[MOVE ];

	OPDEF	FI[MOVEI ];
	OPDEF	M[MOVEM ];
	OPDEF	XCH[EXCH ];
	OPDEF	XEC[XCT ];
	OPDEF	L[HLL ];
	OPDEF	PJ[PUSHJ	CR,];
	OPDEF	INVOKE[JSP B,];
	OPDEF	RTN[J 0,(B)];
	OPDEF	SKRTN[J 0,1(B)];
	SUBTTL	MACROS FOR TESTING OF MIXED ARITH.
	DEFINE	TVJNF;
<
	PJ	SIN2;        >

	DEFINE	JNFTVB;
<
	PJ	SIN3;        >

	DEFINE	JNFTV;
<
	PJ	SIN1;        >

	DEFINE	TVSET;
<
	PJ	SIN4;        >

	SYN	TVSET,TVDICT;

	DEFINE	TVTEXT;
<
	PJ	SIN5;        >

	SUBTTL	LIST PROCESSING MACROS

	DEFINE	M52(S,P);	POP S TO P
<
	AOS	SIZE;
	F	P,(S);
	XCH	ACL,1(S);
	XCH	ACL,S
>

	DEFINE	M53A(P,S);	PUSH P ONT S
<
	SOS	SIZE;	
	M	P,(ACL);
	XCH	S,1(ACL);
	XCH	ACL,S;
>

	DEFINE	M53(P,S,E);	M53A TO E IF OUTSIZE
<
	SOSG	SIZE;
	PJ	E;	
	M	P,(ACL);
	XCH	S,1(ACL);
	XCH	ACL,S;
>

	DEFINE	M54(P);	RELEASE CELL
<
	AOS	SIZE;
	M	ACL,1(P);
	F	ACL,P;
>

	DEFINE	M55A(P1,P2);	P1,P2 TO CELL; ADD. TO P2
<
	SOS	SIZE;	
	M	P1,(ACL);	
	XCH	P2,1(ACL);
	XCH	ACL,P2;
>

	DEFINE	M55(P1,P2,E);	M55A TO E IF OUTSIZE
<
	SOSG	SIZE;
	PJ	E;
	M	P1,(ACL);
	XCH	P2,1(ACL);
	XCH	ACL,P2;
>


	PAGE
	DEFINE	M56(P1,P2,E);	M55 FOR P1,P2 = JNF
<
	HRLZ	P2,P2;
	M55	P1,P2,E;
>

	DEFINE	M57A(P,Q);   INSRT ARRAY CELL AT P,ADDRESS TO Q

<
	SOS	SIZE;
	HRR	Q,1(P);
	HRRM	ACL,1(P);
	XCH	Q,1(ACL);
	XCH	ACL,Q;
>

	DEFINE	M58(OP);
<
	INVOKE	P53;
	TVJNF;
	OP	;
	J	SP1.1;
>

	DEFINE	M59(P,Q,E);
<
	SOSG	SIZE;
	PJ	E;
	F	Q,ACL;
	HRRM	Q,(P);
	F	ACL,1(ACL);
	SETZM	1(Q);
>

	DEFINE	M60(P);  UNPACK EXPONENT
<
	HLRZ	P,P;
	AND	P,MASK2;
	CAML	P,MASK9;
	ORCM	P,MASK2;
>

	DEFINE	M61(OP,P,Q,R);
<
	SOS	SIZE;
	XCH	R,ACL;
	OP	R,1(P);
	MOVEM	Q,(R);
	XCH	ACL,1(R);     >
		PAGE
	DEFINE	M59A(P,Q);	APPEND ARRAY CELL TO HEADER AT P
<
	SOS	SIZE;
	F	Q,ACL;
	HRRM	Q,(P);
	F	ACL,1(ACL);
	SETZM	1(Q);
>
	SUBTTL	MACROS FOR ARITHMETIC AND FUNCTIONS
	DEFINE	CALL(P);
<	EXTERN	P;
	JSR	P;	>
	DEFINE	JADD;
<	CALL	P75;	>
	DEFINE	JSUB;
<	CALL	P76;	>
	DEFINE	JMPY;
<	CALL	P77;	>
	DEFINE	JDIV(E);
<	CALL	P78;
	PJ	E;>
	DEFINE	JPWR(E1,E2,E3);
<	CALL	P79;
	PJ	E1;
	PJ	E2;
	PJ	E3;>
	DEFINE	JSQRT(E);
<
	CALL	P80;
	PJ	E;>
	DEFINE	JEXP(E);
<
	CALL	P81;
	PJ	E;>
	DEFINE	JLOG(E);
<
	CALL	P82;
	PJ	E;>
	DEFINE	JSIN(E);
<
	CALL	P83;
	PJ	E;>
	DEFINE	JCOS(E);
<
	CALL	P84;
	PJ	E;>
	DEFINE	JARG;
<
	CALL	P85;>
	DEFINE	JIP;

<	CALL	P90;	>
	DEFINE	JFP;
<	CALL	P91;	>
		DEFINE	JDP;
<
	CALL	P92;>
	DEFINE	JXP;
<
	CALL	P93;>
	DEFINE	JSGN;
<	CALL	P94;	>
	SUBTTL	CENTRAL-PROCESSOR/SUPERVISOR INTERFACE
	EXTERN S62,S61,ERR
	INTERNAL	ERRX,S61X,S62X
	EXTERN	MONENT,COMEBACK,CT14;
	INTERN	JOSS,INTBEG;
	BUFAD=4;
	EXTERN	USERS,HR,MIN,SECONDS;
	EXTERN	ACTION,RESULT,FILE,KEY,NAME,PROG;
	EXTERN	TYPE,FLAG,BFR,BFRP;
	EXTERN	RPN,KILL;

X43:	HRRI	A,X44;	AFTER LOG-ON RITUAL.
	HRRZM	A,ME;
	HRRZM	A,INTENT;
	SETZM	RETURN;

X44:	HRRZ	CC,RETURN;	ALL OTHER ENTRIES.
	FI	CR,JWSPDL;
	JE	CC,X44.1;
	CAIG	CC,X44;
	PJ	KILL;	ABORT USER IF BAD ADDRESS
	CAIL	CC,DT50;
	PJ	KILL;
	J	(CC);
X44.1:	HLRZ	CC,ME;
	CAILE	CC,3;
	PJ	KILL;
	J	.+1(CC);
	J	X43X;	AFTER LOG-ON
	J	X45;	AWAITING COMMAND
	J	X45;	AWAITING DEMAND
	J	X45;	AWAITING FORM
	PAGE
INTBEG:	JRST	X43;
JOSS:	JRST	X44;

SU:	SETZB	A1,MODE;	SWITCH TO USER
	SETZM	RIF;	TURN OFF IN-REQU FLAG
	JRST	MONENT;
XMIT:	MOVEI	A1,3;	SEND LINE IN BUFFER TO USER
		MOVE	BUFAD,UBUF;
	JRST	MONENT;
PAGE:	FI	A1,13;	PAGE SIGNAL AND HEADING TO USER
	MOVE	BUFAD,UBUF;	HEADING ONLY IF UBUF<0!
	JRST	MONENT;
REQBUF:	FI	A1,1;	REQUEST BUFFER; RETURN WITH ADD IN BUFAD
	JRST	MONENT;
RETBUF:	FI	A1,2;	RETURN BUFFER TO SUPERVISOR
	MOVE	BUFAD,UBUF;
	JRST	MONENT;
REQCOR:	FI	A1,11;	REQUEST ANOTHER CORE BLOCK
	JRST	MONENT;	RETURNS WITH A1=0 IF REQUEST DENIED.
DEMCOR:	FI	A1,12;	DEMAND ANOTHER CORE BLOCK
	JRST	MONENT;
RETCOR:	FI	BUFAD,1;	RETURN CORE BLOCKS (NR IN BUFAD).
	FI	A1,15;
	JRST	MONENT;
	PAGE
DISKA:	SKIPN	RIF;	REQUEST THE DISK. IN SIGNAL?
	J	DISKA2;	NO
DISKA1:	JSR	S62;	RESTORE CONSOLE
	J	X47.0;	GO TO HONOR IN SIGNAL
DISKA2:	HRLZ	A1,RETURN;
	HRRI	A1,DISKA3;	RETURN BELOW
	M	A1,RETURN;	AFTER
	FI	A1,6;	REQUESTING DISK SERVICE.
	J	MONENT;
DISKA3:	HLRZ	A1,RETURN;
	M	A1,RETURN;	RESTORE ORIGINAL RETURN ADDRESS.
	SKIPN	RIF;	IN SIGNAL?
	J	X44;
	SKIPN	SPARE4;	SOK TO HONOR IT?
	J	DISKA1;	YES
	JRST	X44;	NO; STILL USING DISC.
DISKB:	HRLI	A,1;	BEGIN DISK ACTION.
	J	DISKC+1;
DISKC:	HRRZ	A,A;	CONTINUE DISK ACTION.
	M	A,ACTION;
	HRRZM	A,UDF1;
	F	A,UFILE;
	M	A,FILE;
	F	A,JOBNO;
	M	A,RPN;
	F	A,UKEY;
	M	A,KEY;
	F	A,UNAME;
	M	A,NAME;
	F	A,UITEM;
	M	A,PROG;
	FI	A1,7;
	J	MONENT;

DISKD:	FI	A1,10	;DONE WITH DISK.
	J	MONENT;



	SUBTTL	ERROR PROCESSOR
	DEFINE	E(X);
<
	HRLI	CR,X-1;
	J	ERR1;
>



;	DO NOT GIVE THIS COMMAND DIRECTLY.
E1:	E	CS32;

;	DO NOT GIVE THIS COMMAND INDIRECTLY
E2:	E	CS33;

;	RUN OUT OF SPACE
E3:	AOS	SIZE;
E3A:	JSR	S61;	SAVE CONSOLE
	FI	B,E3A.0;
	M	B,RETURN;
	J	REQCOR;	REQUEST CORE
E3A.0:	M	A1,UA1;
	JSR	S62;	RESTORE CONSOLE
	JN	A1,E3C;	HAVE CORE.
	SETZM	U2;	NO CORE.
	SKIPGE	MODE;
	MOVNS	MODE;
	SETZM	US7;
	SKIPN	UDF1;	DISK?
	J	E3A.3;	NO
	JSP	B,X46;	YES; RELEASE DISK
	XWD	.+1,DISKD;
	SETZM	UDF1;
	JSR	S62;	RESTORE CONSOLE
	HRLI	CC,41000;
	HRRI	CC,CS4-1;
	M	CC,US5;	AND GENERATE APPROPRIATE MSG.
	J	E3A.4;
E3A.3:	F	CC,MODE;
	HRLI	CR,ES1-1;	ASSUME NOT DURING
	SKIPE	CC;
	HRLI	CR,ES2-1;	DURING
	JSR	ERR;	POINT-OF-ERROR
	J	E3A.2;	ABOVE
	PJ	E54;	A MESS.
	F	CC,MODE;
	CAIGE	CC,2;	DURING?
	J	E3A.1;	NO

	PAGE
E3A.4:	JSP	B,X48;
	XWD	41000,ES3-1;	I'VE RUN OUT OF SPACE
	XWD	41000,ES3.1-1;
	XWD	0,US5;	DURING .........
	BYTE	(8)277,DOT,CG,EOS;
	DEC	-1;
	SETZM	MODE;
	J	X52;
E3A.1:	FI	CC,ES4-1;	ASSUME IN FORMULA
	SKIPN	US7;
E3A.2:	FI	CC,ES5-1;	NOPE
	HRLI	CC,41000;
	M	CC,US5;
	JSP	B,X48;
	XWD	0,US6;
	BYTE	(8)277,DOT,SP,EOS;
	XWD	41000,ES6-1;
	XWD	41000,ES3.1-1;
	XWD	0,US5;
	BYTE	(8)277,DOT,CG,EOS;
	DEC	-1;
	SETZM	MODE;
	J	X52;
ES1:	BYTE	(8)33,50,71,62,56,50,47,EOS;
ES2:	BYTE	(8)CS,5,SP,CS,11,EOS;
ES3:	BYTE	(8)22,153,71,50,SP,65,70,61,EOS;
ES3.1:	BYTE	(8)SP,62,70,67,SP,62,51,SP;
ES3.2:	BYTE	(8)66,63,44,46,50,EOS;
ES4:	BYTE	(8)SP,120,CS,30,CS,31,121,EOS;
ES5:	BYTE	(8)EOS,
ES6:	BYTE	(8)22,SP,65,44,61,EOS;
E3B:	JSP	B,X48;
	XWD	41000,ES3-1;
	XWD	41000,ES3.1-1;
	BYTE	(8)277,DOT,CG,EOS;
	DEC	-1;
	SETZM	MODE;
	J	X52;

	PAGE
E3C:	F	B,U2;
	M	B,U1;	SAVE DEMAND RESPONSE FLAG
	PJ	S60;	CLEAR CONSOLE
	F	B,SPACE;	ADD NEW 1K BLOCK
	ADD	B,K36;	TO TOP OF ACL

	HRRZM	ACL,-1(B);
	AOS	SIZE;
	SUBI	B,2;
	CAMN	B,SPACE;
	J	.+3;
	HRRZM	B,-1(B);
	J	.-5;
		F	ACL,B;
	ADD	B,K36;
	M	B,SPACE;
	M	ACL,UACL;
	F	B,U1;	RESTORE DEMAND RESPONSE FLAG
	M	B,U2;
	JL	B,V13.3;	OUT IFFON DEMAND RESP.
	SKIPE	UDF1;	DISK?
	J	E3C.1;	YES
	SKIPN	MODE;	NO; DIRECT MODE?
	J	E3C.1;	YES
	LDB	CC,BYTE8;	NO; WHERE ARE WE?
	JE	CC,X53.1;	AT ...
	J	X56.2;	DURING ...
E3C.1:	F	A1,US0;	AT LAST BYTE OF INPUT IMAGE
	FI	CC,CGII;
	DPB	CC,A1;	MAKE SURE IT IS A CG
	SETZM	UP0;
	F	A,WIDTH;
	CAIN	A,110;
	SETOM	UP0;	NOTE TTY OR JOSS CONSOLE
	J	D60X;
E4:	PJ	P69;
E5:	HRLI	CR,CS51-1;
	J	ERR0;
E6:	M	A,PK8;
	SETZM	T48;
	INVOKE	P51;
E6X:	HLRZ	CC,CC;
	JE	CC,E5;
	CAMN	CC,TYPE12;
	J	E5;
E10:	F	CC,PK8;
	F	A,US1;
	PJ	S70G;
	PAGE
E10.1:	JSR	ERR;
	J	E10.3;
	PJ	E54;
	SKIPE	UDF1;
	PJ	E54;
	JSP	B,X48;
	XWD	41000,CS1-1;
	XWD	0,US5;
	BYTE	(8)277,COLON,EOS;
	OCT	0;
	BYTE	(8)277,SP+1,EOS;
E10.2:	XWD	0,US1;
	OCT	0;
	XWD	0,K23;
	BYTE	(8)277,QMARK,QMARK,QMARK,CG,EOS;
	DEC	-1;
	J	ERR5;
E10.3:	FI	B,E10.2;
	J	X48;
	PAGE
E7:	PJ	P69;
	J	E3;
E8:	E	CS53;
E9:	E	CS40;
	SYN	E5,E11;
	SYN	E5,E12;
	SYN	E5,E13;
E14:	E	CS21;
E15:	E	CS22;
E16:	E	CS27;
E17:	E	CS28;
E18:	E	CS25;
E19:	E	CS26;
E20:	E	CS45;
	SYN	E20,E21;
	SYN	E5,E22;
E23:	E	CS47;
E24:	E	CS50;

	PAGE
E25:	LDB	A2,BYTE6;
	HRLI	CR,CS43-1;
	CAIN	A2,1;
	HRLI	CR,CS42-1;
	J	ERR1;
E26:	E	CS49;
E27:	E	CS41;
E28:	E	CS43;
E29:	LDB	A2,BYTE6;
	HRLI	CR,CS37-1;
	CAIN	A2,1;
	HRLI	CR,CS38-1;
	J	ERR1;
	SYN	E5,E30;
E31:	HRRZ	CC,PK36;
	SUB	CC,K22;
	HRL	CR,.+2(CC);

	J	ERR1;
	XWD	0,CS51-1;
	XWD	0,CS35-1;
	XWD	0,CS34-1;
	XWD	0,CS36-1;
E32:	HRRZ	CC,PK36;
	SUB	CC,K22;
	HRL	CR,.+2(CC);
	J	ERR1;
	XWD	0,CS51-1;
	XWD	0,CS42-1;
	XWD	0,CS43-1;
	XWD	0,CS41-1;
	SYN	E5,E33;
	SYN	E5,E34;
	SYN	E5,E35;
		SYN	E5,E36;
E37:	E	CS54;
	SYN	E5,E38;

	PAGE
E39:	E	CS52;
E40:	E	CS30;
E41:	E	CS56;
E42:	E	CS29;
E43:	E	CS46;
E44:	E	CS57;
	SYN	E5,E45;
	SYN	E5,E46;
	SYN	E5,E47;
E48:	F	B,US1;
	HLRZ	B1,ME;
	SOJG	B1,.+3;
	HRLI	B,141000;	POINT TO COMMAND PROPER
	ADDI	B,1;	IF A COMMAND.
	M	B,US6;
	SKIPE	UDF1;	FROM DISC?
	J	E54;	YES
	JSP	B,X48;
	XWD	0,US6;
	BYTE	(8)277,CG,EOS;
	DEC	-1;
E48X:	JSP	B,X48;	SORRY. SAY AGAIN.
	BYTE	(8)277,34,62,65,65,74,DOT,SP;
	BYTE	(8)34,44,74,SP,44,52,44,54,61,COLON,CG,EOS;
	DEC	-1;
	JSR	S61;
	SETZM	RETURN;
	SKIPL	U2;	DEMAND RESPONSE?
	J	SU;	NO
	J	V13.1;	YES; DO IT AGAIN.
E49:	E	CS59;

	PAGE
E50:	M52	PS,CP;
	XCH	CP,U1;
	F	A,US1;
	FI	CC,BFIRST;
	IDPB	CC,A;
	LDB	CC,U1;
	IDPB	CC,A;
	PJ	S50;
	IDPB	CC,A;
	CAME	CP,U1;
	JRST	.-3;
	FI	CC,EOS;
	IDPB	CC,A;
	J	E10.1;

E51:	F	B1,K44;
	F	A,US2;	BAD FILE NR.
	PJ	S66;
	FI	CC,EOS;
	IDPB	CC,A;
	E	CS64;
E52:	E	CS62;	BAD IDENTIFICATION KEY
E53:	FI	CC,CS60;	NO SUCH FILE
E53A:	SUBI	CC,1;
	M	CC,US6;
	PJ	S60;
	SKIPN	UDF1;	USING DISK?
	J	E53B;	NO.
	JSP	B,X46;	END DISK ACTIVITY
	XWD	.+1,DISKD;
	JSR	S62;
	SETZM	UDF1;
E53B:	HRL	CR,US6;	SEND APPROPRIATE ERROR SCREED.
	J	ERR1;
E54:	FI	CC,CS69;	OOPS - TRY AGAIN
	J	E53A;
E54A:	FI	CC,CS71;	FLAMEOUT
	J	E53A;
	PAGE
E55:	F	B1,K45;	INADMISSIBLE ITEM NR
	F	A,US2;	BAD ITEM NR.
	PJ	S66;
	FI	CC,EOS;
	IDPB	CC,A;
	E	CS65;

E56:	E	CS66;	NO OPEN FILE
E57:	FI	CC,CS67;	OUT OF DISK SPACE
	J	E53A;
E58:	FI	CC,CS61;	NO SUCH ITEM
	J	E53A;
E59:	FI	CC,CS72;	DELETE BEFORE WRITING
	J	E53A;
E60:	E	CS73;


	SUBTTL	GENERATE POINT-OF-ERROR MSG
;	JSR  ERR

ERRX:	M	CC,US3+1;	PERIOD OR QHESTION MARK
	HLRZ	CC,CR;
	HRLI	CC,41000;
	M	CC,US6;	 SET UP POINTER TO ERROR SCREED
	F	CC,MODE;
	JGE	CC,.+2;
	FI	CC,1;
	SKIPGE	U2;	DEMAND RESPONSE?
	SETZB	CC,MODE;	YES; MODE IS DIRECT.
	HRRZI	CR,JWSPDL;	REFRESH STACK
	TRZ	CC,777774;	SWITCH MODULO 3
	FI	A,ERRA-1;	TENTATIVE ERROR-POINT MSG
	ADD	A,CC;
	HRLI	A,41000;
	M	A,US5;	TO US5
	PJ	S67X;	ARE WE IN A FORMULA?
	J	ERR2(CC);	NO
	CAILE	CC,1;	DURING?
	J	ERR2(CC);	YES
	FI	A,ERRE-1;
	HRRM	A,US5;	ERROR ABOVE
	JE	CC,ERR3.1;
ERR1.1:	FI	A,ERRF-1;	ERROR AT STEP
	HRRM	A,US5;
	J	ERR3;
ERR2:	JRST	@ERR;	ABOVE
	J	ERR3;	AT STEP
	J	ERR3.1;	ABOVE
	F	A,JPDL;	DURING STEP; FETCH ERROR POINT.
	F	A,1(A);
	F	A1,(A);	PART INDEX
	F	A,1(A);
	F	A2,(A);	STEP INDEX
	J	ERR3.1-1;
ERR3:	F	A1,CPI;	PART INDEX
	F	A2,CSI;	STEP INDEX
	PJ	S67Y;	CONVERT TO JWS STRING IN US4
ERR3.1:	HRRZ	B,ERR;
	J	2(B);

	SUBTTL	GENERATE AND SEND ERROR MSG TO USER

;	LEFT HALF OF CR CONTAINS ADDRESS OF MSG.


ERR0:	F	CC,ERRD;	QUERIES
	SKIPA;
ERR1:	F	CC,ERRC;	STATEMENTS
	SKIPE	UDF1;	DURING DISC OPERATION?
	J	E54;	YES
	JSR	ERR;	POINT-OF-ERROR
	J	ERR6;	ABOVE
	PJ	E54;	A MESS.
ERR4:	JSP	B,X48;	SEND TO USER
	XWD	41000,CS1-1;	ERROR
	XWD	0,US5;
	BYTE	(8)277,COLON,EOS;
	OCT	0;	BREAK FOR DOUBLE LINES.
	BYTE	(8)277,SP+1,EOS;
	XWD	0,US6;
	XWD	0,US3;
	DEC	-1;
ERR5:	SKIPL	U2;	DEMAND RESPONSE?
	J	ERR5A;	NO
	MOVEI	CC,BFR
	SKIPE	BFR	;DEMAND AS TEXT?
	HRRM	CC,US2	;YES,SO RESET POINTER
	J	V13.1;	YES; DO IT AGAIN.
ERR5A:	SETZM	MODE;
	JRST	X52;
ERR6:	JSP	B,X48;
	XWD	0,US6;
	XWD	0,US3;
	DEC	-1;
	J	ERR5;

ERRA:	BYTE	(8)EOS,
	BYTE	(8)CS,2,EOS;
	BYTE	(8)CS,3,EOS;
	BYTE	(8)CS,4,EOS;
ERRB:	BYTE	(8)CS,12,CS,13,EOS;
ERRC:	BYTE	(8)DOT,CG,EOS;
ERRD:	BYTE	(8)QMARK,CG,EOS;
ERRE:	BYTE	(8)SP,CS,30,CS,31,EOS;
ERRF:	BYTE	(8)CS,2,SP,120,CS,30,CS,31,121,EOS;
	SUBTTL	X43X - AFTER LOG-ON RITUAL
;
X43X:	F	A,K36;	BLOCK LENGTH
	ADDI	A,INTENT;
	M	A,SPACE;

	SUBI	A,1;	CLEAR INITIAL BLOCK
X43X.0:	SETZM	(A);
	CAIE	A,LINE;
	SOJA	A,X43X.0;
	JSR	S62;	RESTORE CLEARED CONSOLE
		PJ	S69Y;	SET SIZE AND LINK ACL
	MOVEI	A,1;
	MOVEM	A,TRUE(A);
	MOVEM	A,FALSE(A);
	F	A,K15;	JNF UNITY
	M	A,TRUE;
	SETOM	PARTS;
	SETOM	FORMS;
	HRLI	A,41000;
	HRRI	A,US1;
	M	A,US1;
	HRRI	A,US2;
	M	A,US2;
	HRRI	A,US3;
	M	A,US3;
	HRRI	A,US4;
	M	A,US4;
	HRLZI	A,172006;
	FI	A1,146;
X43X.2:	M	A,V(A1);	ASSIGNMENT TABLE
	SUB	A,X43X.4;
	SUBI	A1,2;
	JGE	A1,X43X.2;
	JSR	S62;
	F	A,SECONDS;
	M	A,USEC;
	PJ	S69X;	SET TIME,SIZE; ETC
	JSP	B,X48;	PAGE
	OCT	0;
	SETZM	RETURN;
	MOVEI	A,1;	STATE=1 (AWAITING COMMAND)
	HRLM	A,ME;
	JRST	SU;	SWITCH TO USER
X43X.4:	XWD	2000,0;
	SUBTTL	X45   COMMAND, FORM; DEMAND RESPONSE
X45:	HRRZ	A,BUFAD;
	MOVEM	A,UBUF;
	MOVEM	A,UA;
	JSR	S62;
	SETZM	UP0;	ASSUME NO TTY
	MOVE	A1,2(A);
	TLNE	A1,400000;	TTY?
	SETOM	UP0;	YES
	FI	A1,117;	SET LINE LENGTH ACCORDING TO SIGNAL.
	SKIPE	UP0;
	FI	A1,110;
	M	A1,WIDTH;	SET PAGE WIDTH
	MOVE	A1,1(A);
	ADDI	A,2;
	HRLI	A,10700;
	MOVE	B,US1;
	SETOM	UDF2;	FLAG TO INDICATE FORM
	HLRZ	B1,ME;
	CAIN	B1,2;	IS IT?
	J	X45.1;	YES
	SETZM	UDF2;	CORRECT FLAG
	SOJG	B1,X45.1;	INTRODUCTORY BYTES FOR COMMANDS
	HRLI	B,141000;
	ADDI	B,1;	TO 4TH BYTE (BEG. OF INPUT LINE)
	SETZM	(B);
X45.1:	PJ	S52;	CONVERT TO 8-BIT ENCODING
	F	A,UBUF;
	ADDI	A,2;
	HRLI	A,10700;
	ILDB	A2,A;	LOOK AT FIRST BYTE OF BUFFER.
	FI	A,X45.3;	ASSUME LINE IS OK
	CAIN	A2,25;	IS IT?
	FI	A,X45.2;	TOO LONG
	M	A,RETURN;
	SKIPL	LINE;	ARE WE PAGING?
	JRST	RETBUF;	NO
	F	CC,K27;	YES; RESET LINE CTR.
	M	CC,LINE;
	LDB	CC,A1;	CAUSED BY PAGE-BUTTON?
	CAIN	CC,PGII;
	HRROS	UBUF;	YES; SET MARK TO SEND PAGE HEAD ONLY
	JRST	PAGE;

	PAGE
X45.2:	JSR	S62;	RESTORE CONSOLE
	SKIPE	UDF1;	FROM THE DISC?
	J	E54;	YES
	JSP	B,X48	;NO COMMENT ON LONG LINE.
	BYTE	(8)277,CS,25,EOS;
	BYTE	(8)277,57,54,61,50,66,SP,67,EOS;
	BYTE	(8)277,62,SP,7,8,SP,66,67;
	BYTE	(8)65,62,56,50,66,DOT,SP,EOS;
	BYTE	(8)277,34,44,74,SP,44,52,44;
	BYTE	(8)54,61,COLON,CG,EOS;
	DEC	-1;
	JSR	S61;
	SETZM	RETURN;
	HLRZ	A1,ME;	WORKING ON DEMAND?
	CAIE	A1,3;
	J	SU;	NO

	J	V13.1;	YES; DO IT AGAIN.
X45.3:	JSR	S62;	RESTORE CONSOLE
	HLRZ	B1,ME;
	SOJE	B1,X50;	COMMAND
	SOJE	B1,V14X;	FORM
	JRST	V13X;	DEMAND
	SUBTTL	X46 -- SWITCH TO DISC ACTIVITIES

X46:	HLL	B,(B);
	HLRZM	B,RETURN;
	HRRZ	B,(B);
	J	(B);

	SUBTTL	X47  --  ACKNOWLEDGE IN-REQU. AND RECALL
X47:	SKIPN	RIF;
	J	X47.2;	NO IN SIGNAL
	SKIPE	UDF1;	IN DISK MODE?
	J	1(B);	YES; IGNORE IN SIGNAL.
X47.0:	SETZM	RIF;	TURN OFF IN SIGNAL BEFORE RESPONDING.
	SKIPE	MODE;
	J	X47.1;
	JSP	B,X48;
	BYTE	(8)277,CS,7,PERIOD,CG,EOS;
	DEC	-1;
	J	X52;
X47.1:	F	A1,CPI;
	F	A2,CSI;
	PJ	S67Y;	GENERATE POINT-OF-INTERRUPT MSG.
	JSP	B,X48;
	BYTE	(8)277,CS,5,SP,EOS;
	XWD	0,US4;
	BYTE	(8)277,PERIOD,CG,EOS;
	DEC	-1;
	SETZM	MODE;
	J	X52;
X47.2:	SKIPN	COMEBACK;
	JRST	1(B);
	JSR	S61;
	HRL	B,(B);
	HRRI	B,X47X;	SET RE-ENTRY POINT
	MOVEM	B,RETURN;
	SETZM	COMEBACK;
	MOVEI	A1,5;
	JRST	MONENT;

X47X:	JSR	S62;	RESTORE CONSOLE
	J	X47;	TEST FOR IN SIGNAL
	SUBTTL	X48/X49 -- XMIT LINE TO USER
;		JSP B,X48
;		S55X CALLING SEQUENCE (ZERO IF PAGING ONLY)
;
X48:	JSR	S61;	SAVE CONSOLE
	SKIPE	UDF1;	IN DISK MODE?
	J	D50;	YES
	MOVE	B1,(B);	ARE WE PAGING ONLY?
	JUMPN	B1,X48.2;	NO
X48.1:	SETOM	LINE;	YES; NOTE THE FACT.
X48.2:	MOVEI	B1,X49;
	MOVEM	B1,RETURN;
	JRST	REQBUF;	REQUEST BUFFER
;		RETURN WITH BUFFER ADDRESS
X49:	HRRZ	B2,BUFAD;
	MOVEM	B2,UBUF;
	ADDI	B2,2;
	HRLI	B2,10700;	BUFFER POINTER
	FI	CR,JWSPDL;	RESET CONSOLE
	F	B,UB;
	SKIPL	LINE;	ARE WE PAGING ONLY?
	JRST	X49.3;	NO
X49.1:	MOVEI	B1,X49.2;	YES; DO SO.
	MOVEM	B1,RETURN
	JRST	PAGE;
X49.2:	MOVE	B1,K27;
	MOVEM	B1,LINE;	RESET LINE COUNTER
	J	X49.5;	TIDY UP.
X49.3:	PUSHJ	CR,S55X;	CONVERT TO ASCII IN BUFFER
	MOVEM	B,UB;
	AOS	LINE;	INC. LINE COUNTER
		MOVEI	CC,X49.4;
	MOVE	B1,(B);	END OF TYPE-OUT?
	CAME	B1,K20;
	MOVEI	CC,X48.2;	NO,SET UP TO CONTINUE
	MOVEM	CC,RETURN
	JRST	XMIT;	SEND BUFFER TO USER
X49.4:	MOVE	A,LINE;
	CAMLE	A,K28;	IS PAGING REQUIRED NOW?
	J	X48.1;	YES.
X49.5:	JSR	S62;	DONE; RESTORE CONSOLE
	SETZM	RETURN
	JRST	1(B);
	SUBTTL	X50 -- PRE-PROCESS COMMANDS FROM CONSOLE, DISC
;		ASSUMES S52 HAS BEEN INVOKED

X50:	SKIPN	UP1;	IS THIS A DEAD LINE?
	J	V0;	YES
	SKIPE	UP3;	TRANSMISSION ERROR?
	PJ	E48;	YES
	MOVE	A,UP2;
	LDB	CC,A;	LOOK AT LAST 
	MOVEI	B1,PERIOD;	NON-BLANK BYTE.

	CAIE	CC,DOT	;IS IT A DOT
	J	.+2;	NO
	DPB	B1,A;	DOT BECOMES PERIOD
	MOVEI	B1,EOS;	AND EOS IS ALWAYS APPENDED.
	IDPB	B1,A;
	MOVE	B1,US1;
	HRLI	B1,141000;
	ADDI	B1,1;	TO 4TH BYTE
	MOVEM	B1,SK8;
	MOVEM	B1,U1;	POINTS TO COMMAND
	PUSHJ	CR,S54;	COMPRESS THE LINE (B1 = BYTE COUNT)
	MOVE	B2,SK3;	IS THERE A CONDITIONAL CLAUSE?
	JE	B2,X50.1;	NO
	ADDI	B2,3;
	DPB	B2,SK8;	DEPOSIT INDEX OF CONDITIONAL
	MOVEI	B2,IF2;	REPLACE 'IF' BY SPECIAL BYTE
	IDPB	B2,SK1;
X50.1:	MOVE	B1,SK8;
	MOVEM	B1,U1;	POINTS TO COMMAND
	INVOKE	P51;	FETCH FIRST TERMINAL CHARACTER
	HLRZ	B2,CC;
	CE	B2,TYPE12;	IS IT A LITERAL JBF?
	JRST	X50.6;	NO; ASSUME DIRECT COMMAND.
	MOVE	A1,(CC);	NOW FETCH JNF STEP NUMBER
	MOVE	A2,1(CC);
	INVOKE	P51;	NEXT CHARACTER.
	CE	CC,T51.31;	SKIP OVER TABS
	J	.+5;
	INVOKE	P51;
	CN	CC,T51.31;
	J	.-2;
	SETO	B1,0;
	CE	CC,T51.9;	IF?
	J	.+3;	NO
	FI	CC,277;
	DPB	CC,SK8;	IMPAIRED.
	CN	CC,T51.8;	PERIOD?
	J	.+4;	YES
	JN	B1,.+3;	LEADING SPACES? - YES
	CE	CC,T51.5;	EOS?
	PJ	E5;	NO; EH
	JGE	A1,X50.0;	YES; CHECK STEP NR.
	PJ	E26;	TOO LARGE
	PAGE
X50.0:	CALL	S78;	CONVERT TO IP AND FP
	PJ	E28;	BAD STEP NUMBER
X50.5:	PJ	P51X;	REMOVE STEP NUMBER FROM LINE IMAGE.
	PJ	P51Y;	ENUF SPACE?
	MOVE	A2,A1;	YES; PREPARE FOR
	MOVE	B2,A;	STEP SEARCH
	HRRZI	A1,PARTS;
	PUSHJ	CR,P70L;	LOOK FOR PART
	JRST	X50.2;	NONE SUCH
	MOVE	A2,B2;
	MOVE	A1,A;
	PUSHJ	CR,P70R;	LOOK FOR STEP
	JRST	X50.3;	NONE SUCH
	HLRZ	B,1(A);	GET LINK TO STRING
	PUSHJ	CR,P62;	AND DELETE
	JRST	X50.4;
X50.2:	M61	HRLM,A1,A2,A	;INSERT PART HEADER
	HRLZS	1(A);	ADJUST THINGS
	HRRZ	A1,A;
	SETZ	A,0;
X50.3:	M61	HRRM,A1,B2,A	;INSERT STEP HEADER
X50.4:	HRLM	ACL,1(A);
	MOVE	A,ACL;
	MOVE	A1,US1;
	MOVEM	A1,U1;
	PUSHJ	CR,S56;	MOVE STRING TO USER BLOCK
	HRRZ	ACL,1(A);	FIX ACL AND
	HLLZS	1(A);	LAST CELL
	J	V0;
	PAGE
X50.6:	MOVE	A1,US1;
	M	A1,U0;	SAVE POINTER
		F	A2,SK8;	TO BEGINNING OF COMMAND
	CE	CC,T51.31;	IGNORE LEADING TABS.
	J	.+4;
	F	A2,U1;
	INVOKE	P51;
	J	.-4;
	SETZM	U6;	TURN OFF TYPING FLAG
	PUSH	CR,A2;
	PJ	S69X;	SET SIZE,TIME AND USERS
	POP	CR,A2;
	HLRZ	B2,CC;	RESTORE CHARACTER TYPE/CLASS
	CAMN	B2,TYPE12;	LITERAL?
	PJ	E5;	YES
	CN	CC,T51.15;	IS IT A FORM DECLARATION?
	J	V14;	YES
	CN	CC,T51.9;	IF?
	PJ	E5;	YES
	LDB	A1,UP2;	LOOK AT LAST BYTE
	JN	B2,X50.7;	DO WE START WITH A LETTER?
	F	B2,SK3;	YES; ASSUME SHORT-SET.
		JE	B2,.+2;	CONDITIONAL CLAUSE?
	PJ	E5;	YES; EH.
	M	A2,U1;	TO BEGINNING.
	F	CC,T51.5;	EXPECTED ENDING IS EOS!

	CAIN	A1,PERIOD;
	F	CC,T51.8;	IT IS A PERIOD!
	M	CC,U3;
	SETZM	U2;	MESH WITH SET PROCESSOR
	J	V1;
X50.7:	CAIE	B2,2;	IS IT A LEFT PAREN?
	J	X50.13;	NO
	F	B2,T54(CC);
	CE	B2,T51(A1);	DOES IT MATCH LAST CHARACTER?
	J	X50.13;	NO
	FI	CC,SP;	YES; STRIP OFF PARENS
	DPB	CC,U1;
	DPB	CC,UP2;
	INVOKE	P51;	LOOK AT NEXT TERMINAL CHAR.
	CE	CC,T51.17;	"DO"?
	J	X50.8;	NO
	FI	CC,DO.; 	YES
	J	X50.9;
X50.8:	CE	CC,T51.18;	"CANCEL"?
	PJ	E5;	NO
	FI	CC,CANCEL.;
X50.9:	DPB	CC,U1;	REPLACE BY PARANTHETICAL VERB
X50.11:	SETZ	A,0;
	PAGE
X50.10:	PJ	S50;	MAKE SURE COMMAND ENDS WITH DOT.
	CAIN	CC,EOS;	END OF STRING?
	J	X50.12;	YES
	CAIE	CC,DOT;	DOT?
	J	.+3;	NO
	F	A,U1;	YES; RECORD POSITION
	J	X50.10;
	F	CC,T51(CC);
	CE	CC,K19;	SPACE-LIKE?
	J	X50.11;	NO; NEGATE LAST DOT POSITION
	J	X50.10;
X50.12:	JN	A,.+2;	ENDED BY DOT?
	PJ	E5;	NO.
	FI	CC,PERIOD;
	DPB	CC,A;	MAKE IT A PERIOD.
	M	A,UP2;	SAVE POSITION
	FI	CC,EOS;
	IDPB	CC,A;
	J	X51;
X50.13:	CAIN	A1,PERIOD;	IS LAST BYTE A PERIOD?
	J	X51;	YES
	PJ	E5;	NO; EH.

	SUBTTL	X51  --  STATEMENT INTERPRETATION
X51:	PJ	S69X;	SET SIZE, TIME AND USERS.
	F	B,U0;	POINTER TO STEP.
	HRLI	B,141000;
	ADDI	B,1;	AT THIRD BYTE.
	LDB	B1,B;	FETCH IT!
	CAIN	B1,277;	IS STATEMENT IMPAIRED?
	PJ	E5;	YES
	SETZM	U6;	TURN OFF TYPING FLAG.
	F	CC,T51.8;	ASSUME LAST CHARACTER
	M	CC,U3;	WILL BE A PERIOD.
	JE	B1,X51.1;	IS THERE A CONDITIONAL?
	SKIPE	UDF1;	USING DISC?
	J	X51.1;	YES; IGNORE CONDITIONAL!
	F	B2,U0;	YES; EVALUATE
	PJ	S58;	POINTER TO IT.
	MOVEM	B2,U1;	U1 NOW POINTS AHEAD OF CONDITIONAL
	INVOKE	P51;	CC = NEXT TERM. CHAR
	CAME	CC,T51.9;	IS IT AN IFF-BYTE
	PJ	E5;	NO
	JUMPN	B1,.+2;	WITH LEADING SPACES
	PJ	E5;	NO
	M	CC,U3;	YES; "IFF" IS ENDING.
	PJ	S65;	WITH TRAILING SPACES?
	PJ	E5;	NO
X51.3:	JSP	B,P49;	EVALUATE CONDITIONAL.
	INVOKE	P53;	POP RESULT
	JRST	.+2;	TV
	JNFTV	;	JNF
	CAME	CC,T51.8;
	PJ	E5;	NOT ENDED BY PERIOD
	JUMPE	A1,X52;	FINI IF FALSE CONDITIONAL
X51.1:	F	B2,U0;
	HRLI	B2,141000;
	ADDI	B2,1;	TO BEGINNING OF COMMAND.
	M	B2,U1;
	M	B2,UP11;	SAVE POINTER.
	INVOKE	P51;	FETCH BEGINNING OF IMPAERATIVE
	CN	CC,T51.31;	IGNORE LEADING TABS.
	J	.-2;
	HLRZ	B2,CC;	TEST CLASS OF CC
	CAME	B2,TYPE14;	IS IT A VERB?
	PJ	E5;	NO
X51.2:	HRRZM	CC,U2;	SAVE VERB TYPE.
	PJ	S65;	TRAILING SPACES?
	CN	CC,U3;	NO; DOES CC=EXPECTED ENDING?
	J	.+2;	YES
	PJ	E5;	EH
	F	A1,U2;	YES; GET VERB TYPE AND
	J	T59(A1);	FIRE APPROPRIATE PROCESSOR.

	SUBTTL	X52: INTER-STEP SEQUENCING AND CONTROL
;		X52.1 IS ENTRY FROM 'TO' ROUTINE

X52:	SETOM	PK35;	FLAG TO ADVANCE STEP
X52.1:	PUSHJ	CR,S60;	TIDY UP
	AOS	CT14;	TALLY!
	SKIPE	MODE;	ARE WE SERVICING USER
	JRST	X52.3;	NO
X52.2:	MOVEI	A,1;	YES; STATE = 1 (AWAITING COMMAND)
	HRLM	A,ME;
	SETZM	RETURN;
	JRST	SU;	AND SWITCH TO USER
X52.3:	LDB	A,BYTE6;	LOOK AT JOB CODE
	JUMPE	A,X52.2;	SU IF NULL JOB
	CAIN	A,2;	ARE WE DOING A STEP
	JRST	X55;	YES; TO JOB COMPLETION ROUTINE
	MOVE	A,PK35;	NO; ASSUME PART.  LOOK AT STEP-ADVANCE.
	JUMPE	A,X53;	NO STEP ADVANCE
X52.4:	DPB	A,BYTE10;	SET SKIP
	PUSHJ	CR,P74;	ADVANCE STEP
	JRST	X55;	DONE; TO JOB COMPLETION
X53:	SETZ	A,0;	SKIP IS OFF.
	DPB	A,BYTE10;
	DPB	A,BYTE8;	BREAK = 0
	SETOM	MODE;	MODE IS INDIRECT
X53.1:	JSP	B,X47;	ACKNOLWEDGE RECALLS AND IN-REQU.
	OCT	4;
;  NOW START INTERPRETATION OF NEXT STEP!
X54:	SETOM	MODE;	MODE IS INDIRECT
	PUSHJ	CR,P74;	GET CURRENT (OR NEXT) STEP
	JRST	X54.1;	NONE; MAY BE DONE
	SETZ	A,0;	SKIP IS OFF.
	DPB	A,BYTE10;
X54.2:	MOVE	A,CSA;
	HLRZ	A,1(A);	LINK TO CURRENT STEP STRING
	SUBI	A,1;
	HRLI	A,41000;	POINT TO FIRST BYTE
	M	A,U0;	SAVE POINTER
	JRST	X51;	TO STATEMENT INTERPRETER
X54.1:	LDB	A,BYTE6;	LOOK AT JOB CODE
	CAIN	A,1;	WERE WE DOING A PART
	JRST	X52.4;	YES; TO STEP ADVANCE
	LDB	A,BYTE11;	NO; FOR CLAUSE?
	JN	A,X54.3;	YES; CAN'T FIND STEP FOR ITER.
	PJ	P72A;	NO; POP JOB,POP JOB -- HMMM-DE-HUMMM-DE HMM
	SKIPN	MODE;	STARTED BY USER?
	J	X54.4;	YES
	SETZ	A,0;	NO; RESET:
	DPB	A,BYTE8; SKIP AND
	DPB	A,BYTE10;	BREAK
	E	CS34;	CAN'T FIND REQUIRED STEP
	PAGE
X54.4:	JSP	B,X48;
	BYTE	(8)277,CS,0,CS,1,COLON,SP+1,EOS;
	XWD	41000,CS34-1;	ERR ABOVE. CAN NOT FIND STEP
	BYTE	(8)277,DOT,CG,EOS;
	DEC	-1;
	J	X52;
X54.3:	FI	A1,1;	CAN'T FIND STEP FOR ITERATION
	DPB	A1,BYTE8;	BREAK=1
	LDB	A1,BYTE7;
	ADDI	A1,2;
	M	A1,MODE;	MODE=JOB MODE + 2
	PJ	E29;
	SUBTTL	X55 -- TEST FOR JOB COMPLETION
;
X55:	LDB	A,BYTE11;	GET FOR-CLAUSE LINK
	JUMPE	A,X57;	NONE; FINISHED WITH JOB
	MOVEM	A,PK29;
	MOVEI	A1,1;
	DPB	A1,BYTE8;
	SETZ	A1,0;	SKIP IS OFF
	DPB	A1,BYTE10;	BREAK=1
	LDB	A1,BYTE7;
	M	A1,MODE;	MODE=JOB MODE
	PUSHJ	CR,P71;	ADVANCE FOR CLAUSE
	HRRZ	A,@PK29;	GET NEXT ON ROV
	JUMPE	A,X57;	NO MORE; FINISHED WITH JOB
X56:	AOS	MODE;	ADJUST TO INDICATE "DURING ..."
	AOS	MODE;
	PUSHJ	CR,P73;	FIND OBJECT FOR ITERATION
	JRST	X56.1;	STEP (A1 = LINK)
	HRR	A1,1(A1);	PART; GET FIRST STEP LINK
X56.1:	HRRZM	A1,CSA;	SET CSA
	MOVE	A2,(A1);
	MOVEM	A2,CSI;	SET CSI
	MOVE	A2,PK22;	AND
	MOVEM	A2,CPI;	CPI
X56.2:	LDB	A,BYTE11;	GET FOR-CLAUSE LINK
	JUMPE	A,X53;	NO FOR-CLAUSE
	PUSHJ	CR,S63;	FETCH LHS AND RSH FOR ITERATION.
	PUSHJ	CR,P67;	SET ITERATION VARIABLE.
	PJ	E3A;	OUT-SIZE
	J	X53;
	SUBTTL	X57 -- POP JOB LIST AND ACT ACCORDINGLY
X57:	PUSHJ	CR,P72A;	POP JOB LIST
X57.1:	LDB	A,BYTE6;	ANYTHING TO DO?
	JN	A,.+3;	YES
	SETZM	MODE;
	J	X52.1;	NO; SWITCH TO USER
	SKIPE	MODE;	SERVICING USER?
	J	X52;	NO; TO STEP ADVANCE.
X57.4:	F	A1,CPI;

	F	A2,CSI;
	LDB	A,BYTE8;	WHERE WERE WE?
	JE	A,X57.2;	AT STATEMENT BREAK.
	F	A,JPDL;	DURING STEP
	F	A,1(A);
	F	A1,(A);
	F	A,1(A);
	F	A2,(A);
	LDB	A,BYTE7;	WAS JOB ORIGINATED BY USER?
	JN	A,X57.2;	NO
X57.6:	JSP	B,X48;	TELL USER WE ARE DONE.
	XWD	41000,CS16-1;	DONE. I'M READY TO GO
	BYTE	(8)277,DOT,CG,EOS;
	DEC	-1;
	J	X52.1;	AND SU
X57.2:	M	A1,UP1;
		M	A2,UP2;
	PJ	S67Y;	CONVERT STEP NUMBER
	HRRZI	A1,PARTS;
	F	A2,UP1;
	PJ	P70L;
	J	X57.3;	NO SUCH PART
	F	A1,A;
	F	A2,UP2;
	PJ	P70R;
	J	X57.3;	NO SUCH STEP
	J	X57.5;
	PAGE
X57.3:	FI	A,CS15-1;	STEP HAS BEEN DELETED!
	J	X57.5+1;
X57.5:	FI	A,ERRA-1;
	HRLI	A,41000;
	M	A,US5;
	LDB	A,BYTE8;
	LSH	A,1;
	LDB	A1,BYTE10;
	JE	A1,.+2;	SWITCH ON BREAK AND SKIP CODES
	TRO	A,1;
	F	A,X57A(A);
	M	A,US6;
	JSP	B,X48;
	XWD	0,US6;
	BYTE	(8)277,SP,CS,11,EOS;
	XWD	0,US5;
	BYTE	(8)277,DOT,CG,EOS;
	DEC	-1;
	J	X52.1;
X57A:	POINT	8,CS12-1,31;
	POINT	8,CS13-1,31;
	POINT	8,CS14-1,31;
	POINT	8,CS14-1,31;
	SUBTTL	AFTER "SET", "LET" AND STORING A FORM.

V0:	SETZM	UDF2;	RESET FLAG FOR NON-FORM
	SKIPN	UDF1;	IN DISC MODE?
	J	X52;	NO
	PJ	S60;	CLEAR CONSOLE
	J	D60.1;	RE-ENTER RECALL ROUTINE

	SUBTTL	V1    'SET' STATEMENTS

V1:	JSP	B,P40;	GET LHS
	PJ	E5;	NO LHS!
	CAME	CC,T51.6;	FOLLOWED BY EQUAL SIGN
	PJ	E5;	NO
V1.2:	JSP	B,P49;	EVALUATE RHS
V1.3:	CE	CC,U3;	FOLLOWED BY EXPECTED ENDING?
	PJ	E5;	NO
	INVOKE	P53;	OK; POP AND TEST RHS.
	TVSET	;	TV
	LDB	A,BYTE2;
	M	A,PK19;	SAVE TYPE
	MOVEM	A1,PK20;	AND
	MOVEM	A2,PK21;	SAVE RHS VALUE
	PUSHJ	CR,P66;	POP/TEST LHS
	PUSHJ	CR,P67;	SET LHS TO RHS
	PJ	E3A;	OUT-SIZE
	J	V0;
	SUBTTL	V2     'LET' STATEMENTS

V2:	INVOKE	P51;	CC = NEXT CHAR.
	TLNE	CC,777777;	IS IT A LETTER
	PJ	E5;	NO
	MOVEM	CC,PK27;	YES--SAVE IT
	PUSHJ	CR,S59;	FETCH DUMMY LETTER LIST (IF ANY)
	CE	CC,T51.6;	FOLLOWED BY EQUALS SIGN?
	J	V2.9;	NO
	F	B2,T48;	NR OF DUMMY LETTERS
	JE	B2,V2.2;	NONE
	CLE	B2,K29;
	PJ	E37;	TOO MANY.
V2.4:	F	B1,B2;	DUMMY-LETTERS MUST BE DISTINCT.
	SOJE	B1,V2.5;
	F	CC,T48(B2);
	CN	CC,T48(B1);
	PJ	E47;	WE HAVE DUPLICATION.
	SOJG	B1,.-2;
	SOJG	B2,V2.4;
V2.5:	F	B,US1;	PREPARE TO COLLECT DLS IN US1
	MOVEI	B2,1;

V2.1:	MOVE	B1,T48(B2);
	IDPB	B1,B;	COLLECT DUMMY-LETTER STRING
		CAME	B2,T48;
	AOJA	B2,V2.1;
	MOVEI	B1,EOS;	APPEND EOS
	IDPB	B1,B;
V2.2:	PJ	S68;	SKIP LEADING BLANKS
	F	B2,U3;	LOOK AT EXPECTED ENDING.
	MOVEI	B1,PERIOD;	ASSUME PERIOD
	CAME	B2,T51.8;	IS IT
	MOVEI	B1,IF2;	NO--IFF-BYTE
	MOVE	B,US2;	POINTER TO DEF. SIG.
	PUSHJ	CR,S57;	COLLECT
	CAIG	B2,1	;HAVE WE COLLECTED ANYTHING
	PJ	E5;	NO
	ADD	B2,T48;	CALCULATE SPACE REQU
	ADDI	B2,6;	SIX BYTES PER CELL
	MOVE	B1,B2;
	PJ	P51Y;	ENUF SPACE?
	F	A,PK27;	OK; LOOK AT ENTRY.
	HLRZ	A1,1(A);	DEFINED AT THIS LEVEL?
	CAME	A1,LEVEL;
	PJ	P58;	NO; PUSH THE ENTRY.
	PJ	P60;	YES; DELETE THE ENTRY
	SETZ	A1,0;
	HRL	A2,T48;	DIMENSION
	HRRI	A2,1	;USE COUNT = 1
	PAGE
	M55A	A1,A2;	STORE
	HRRZM	A2,PK27;	SAVE HEADER ADDRESS
	HLL	A2,(A);	MAKE UP FORMULA DESCRIPTOR
	TLZ	A2,IDM;
	HRLZ	A1,TYPE4;
	IOR	A2,A1;
	MOVEM	A2,(A);
	MOVE	A,ACL;
	SKIPN	T48;
	JRST	V2.7;	NO PARAMETERS!
	MOVE	A1,US1;
	MOVEM	A1,U1;	POINTER TO DLS
	HRLM	ACL,@PK27;	DLS POINTER (IN USER)
	PUSHJ	CR,S56;	DLS TO USER
	HRRZ	ACL,1(A);
	HLLZS	1(A);
	F	A,ACL;	PREPARE TO STORE RHS
V2.7:	F	A1,US2;
	M	A1,U1;	PTR TO RHS
	HRRM	ACL,@PK27;	DEF. PTR. (IN USER)
	PJ	S56;	STORE DEF.
	HRRZ	ACL,1(A);
	HLLZS	1(A);
	J	V0;
	PAGE
V2.9:	CE	CC,T51.33;	"BE"?
	PJ	E5;	NO
	INVOKE 	P51;	FOLLOWED BY
	CE	CC,T51.34;	"SPARSE"?
	PJ	E5;	NO
	INVOKE	P51;	FOLLOWED BY
	CE	CC,U3;	EXPECTED ENDING?
	PJ	E5;	NO
	SKIPE	T48;	ANY LETTERS?
	PJ	E5;	YES; EH?
	F	CC,PK27;	LETTER'S TABLE ADDRESS
	F	A,(CC);	ITS DESCRIPTOR
	M	A,PK8;
	HLRZ	A1,1(CC);	DEFINED AT THIS LEVEL?
	CE	A1,LEVEL;
	PJ	E10;	NO
	LDB	B2,BYTE2;	ITS TYPE
	CE	B2,TYPE3;	AN ARRAY?
	J	V2.10;	NO
	TLO	A,SPARSE;	MAKE IT SPARSE.
	M	A,(CC);
	J	V0;
V2.10:	F	A,PK27;
	PJ	P60;	DELETE ENTRY
	HLLZ	A2,(A);
	TLZ	A2,IDM;
	HRLZ	A1,TYPE6;	UNDEFINED BUT TO BE SPARSE!
	TLO	A1,SPARSE;	COMPOSE DESCRIPTOR
	IOR	A1,A2;
	M	A1,(A);	DESCRIPTOR TO TABLE ENTRY
	J	V0;
	SUBTTL	V3 -- TYPE STATEMENTS
V3:	F	A,U1;	SAVE POINTER
	JSP	B,P38L;	A LIST REQUEST?
	J	V3.100;	YES
V3.0:	CE	CC,T51.10;	QUOTE MARK?
	J	V3.3;	NO
	F	B,US2;	YES; PREPARE TO COLLECT IN US2
V3.1:	FI	B1,QUOTE;
	PJ	S57;	COLLECT TO NEXT QUOTE MARK
	F	A,U1;	SAVE POINTER BEFORE LOOKING AT
	M	B,UP1;
	INVOKE	P51;	NEXT TERMINAL CHAR.
	CN	CC,U3;	EXPECTED ENDING?
	J	V3.2;	YES; SEND TO USER
	M	A,U1;	NO; RESTORE PTR.
	MOVEI	B1,QUOTE;	AND

	F	B,UP1;
	DPB	B1,B;	DEPOSIT QUOTE (OVER EOS)
	J	V3.1;	AND CONTINUE COLLECTING
V3.2:	JSP	B,X48;
	XWD	0,US2;
	BYTE	(8)277,CG,EOS;
	DEC	-1;
	J	X52;	QUOTATION SENT; DONE!
V3.3:	M	A,U1;	
	F	A,US1;
	M	A,UP1;	MOVE STRING INTO US1
	JSP	B,S64;	AND WORK ON IT THERE.
	XWD	0,U1;
	DEC	-1;
	SETZM	UP6;	CLEAR ITEM-TYPE FLAG.
	SETOM	U6;	TURN ON TYPING FLAG.
	AOS	SIZE;	PREPARE TO USE TWO EXTRA
	AOS	SIZE;	IF NECESSARY.
	SETOM	U7;	AND NOTE THE FACT!
	F	A,UP1;
	M	A,U1;	RESET POINTER
	SETZM	UP3;	ITEM COUNT=0
V3.31:	JSP	B,P38X;	IS NEXT ITEM AN OOD?
	J	V3.32;	NO
	AOS	UP6;	NOTE THE FACT.
	J	V3.33;
V3.32:	JSP	B,P49;	FETCH ELEMENTARY OPERAND
	PAGE
V3.33:	AOS	A1,UP3;	INC. COUNT AND FETCH IT TO A1
	HRLM	DS,UP3;	RECORD POSITION OF ITEM ON PDL
	HLRZ	A1,A1;	POSITION OF LAST
	JE	A1,V3.34;	IT'S THE FIRST.
	F	A2,1(A1);	STACK ON PDL AS FIFO
	HRRM	DS,1(A1);
	F	A1,1(DS);
	HRRM	A2,1(DS);
	HRRZ	DS,A1;
V3.34:	CE	CC,T51.4;	IS ITEM DELIMITED BY A COMMA?
	J	V3.35;	NO
	FI	CC,COMMA2;	YES; MAKE SURE IT'S A SPECIAL ONE!
	DPB	CC,U1;
		J	V3.31;	RETURN FOR NEXT ITEM.
V3.35:	CE	CC,U3;	EXPECTED ENDING?
	J	V3.9;	NO
	LDB	CC,U1;	YES;
	M	CC,UP2;	RECORD THE FINAL BYTE.
	HRRZS	UP3;	FIX ITEM COUNT
V3.4:	SOSGE	UP3;	ANY MORE ITEMS?
	J	X52;	NO
	JSP	B,X47	;RECALLS IN-REQU
	OCT	6;
	F	A,(DS);	LOOK AT NEXT DESCRIPTOR
	M	A,UP4;	SAVE IT
	LDB	A1,BYTE2;	ITS TYPE
	CE	A1,TYPE13;	SINGULAR ITEM?
	J	V3.41;	NO
	M52	DS,A;	YES; POP DESC.
	JSP	B,S69;	SEND IT
	J	V3.431;	ADVANCE TO NEXT ITEM
	PAGE
V3.41:	CLE	A1,TYPE2;	SCALAR?
	J	V3.42;	NO
	JSP	B,S70C;	YES; SEND IT
	J	V3.4;
V3.42:	CLE	A1,TYPE4;	ARRAY OR FORMULA?
	J	V3.45;	NO; MAY BE OOD.
	M52	DS,A;	YES; POP DESCRIPTOR
V3.43:	XCT	V3.44(A1);
V3.431:	F	A,UP1;	ADVANCE POINTER
	M	A,U1;	TO NEXT ITEM.
	PJ	S50;
	CAIN	CC,COMMA2;
	J	.+3;
	CE	CC,UP2;
	J	.-4;
	F	A,U1;	RESET POINTER.
	M	A,UP1;
	J	V3.4;
V3.44:	PJ	E5;
	PJ	E5;
	JSP	B,S71;
	JSP	B,S70B;
V3.45:	CE	A1,TYPE11;	OOD?
	EXTERN	FORMFG
	PJ	E5;	NO
	M52	DS,A;	POP ITS DESCRIPTOR.
	PJ	P70X;	DECOMPILE IT 
	PJ	E54;	BAD OBJECT NR.
	PJ	E54;	NO SUCH OBJECT.
	JSP	B,V3.5;	TYPE THE OBJECT
	J	V3.431;	CONTINUE.
	PAGE

;	TYPE OBJECTS-OF-DISCOURSE
;	JSP B,V3.5

V3.5:	HRRZM	B,UX4;	SAVE CALLER
	F	B2,UP3;	SAVE ITEM COUNT
	M	B2,U8;
	HRRZ	B2,PK36;	WHAT DO WE HAVE?
	SETZ	A1,0;

	XCT	V3.51(B2);
	J	V3.6;
V3.51:	TRO	A1,37;	ALL
	TRO	A1,1;	ALL PARTS
	TRO	A1,1;	ALL STEPS
	TRO	A1,2;	ALL FORMS
	TRO	A1,4;	ALL FORMULAS
	TRO	A1,30;	ALL VALUES
	PJ	E5;
	PJ	E5;
	J	V3.52;	PART
	J	V3.53;	STEP
	J	V3.54;	FORM
	J	V3.55;	FORMULA
	PJ	E5;
	PJ	E5;
	PJ	E5;
V3.52:	F	A,PK39;	PART HEADER
	JSP	B,S72;
	J	V3.84;
V3.53:	F	A,PK39;	STEP HEADER
	JSP	B,S70A;
	J	V3.85;
V3.54:	F	A,PK39;	FORM HEADER
	SETOM	FORMFG
	JSP	B,S70EX;	SEND FORM WITHOUT IDENTIFICATION
	SETZM	FORMFG
	J	V3.85;
V3.55:	F	A,PK37;
	F	A,(A);	FORMULA'S DESCRIPTOR
	M	A,UP4;
	JSP	B,S70B;	SEND IT
	J	V3.85;
V3.6:	M	A1,UP10;
	TRNN	A1,1;	ALL PARTS?
	J	V3.7;	NO
	JSP	B,X48;	YES; SPACE A LINE
	BYTE	(8)277,CG,EOS;
	DEC	-1;
	FI	A,PARTS;	YES
	HLRZ	A,1(A);	ANY PARTS?
	JE	A,V3.7;	NO
	M	A,UP3;	YES
	J	V3.62;	PRINT THE FIRST PART.
	PAGE
V3.61:	F	A,UP3;
	HLRZ	A,1(A);	TO NEXT PART
	M	A,UP3;
	JE	A,V3.7;	NO MORE PARTS
	JSP	B,X47;	RECALLS AND IN-REQUESTS
	OCT	6;
	JSP	B,X48;
	BYTE	(8)277,CG,EOS;
	DEC	-1;	BLANK LINE AS SEPARATER
V3.62:	JSP	B,S72;	SEND THE PART
	J	V3.61;
V3.7:	F	A1,UP10;
	TRNN	A1,2;	ALL FORMS?
	J	V3.8;	NO
	JSP	B,X48;	YES; SPACE A LINE.
	BYTE	(8)277,CG,EOS;
	DEC	-1;
	FI	A,FORMS;
	HLRZ	A,1(A);	ANY FORMS?
	JE	A,V3.8;	NO
	M	A,UP3;	YES
	J	V3.72;	PRINT THE FIRST FORM
V3.71:	F	A,UP3;
	HLRZ	A,1(A);	NEXT FORM
	M	A,UP3;
	JE	A,V3.8;	NO MORE FORMS
	JSP	B,X47;
	OCT	6;	RECALLS AND IN-REQU
	F	A,UP3;
	JSP	B,X48;	SPACE A LINE
	BYTE	(8)277,CG,EOS;
	DEC	-1;
V3.72:	SETOM	FORMFG
	JSP	B,S70E;	SEND THE FORM
	SETZM	FORMFG
	J	V3.71;
V3.8:	F	A1,UP10;
	TRNN	A1,4;	ALL FORMULAS?
	J	V3.82;	NO
	FI	A,0;
	JSP	B,S73;	SEND ALL FORMULAS
	J	V3.82;
V3.81:	F	A1,UP10;
	TRNN	A1,10;	ALL ARRAYS?
	J	V3.84;
	FI	A,1;	SEND VECTORS FIRST.
	M	A,UP11;
	PAGE
V3.83:	FI	A,1;
	JSP	B,S73;	SEND THEM
	AOS	A,UP11;	SEND ARRAYS OF NEXT HIGHER DIMENSION.
	CAMG	A,K29;
	J	V3.83;	MORE
	J	V3.84;
V3.82:	F	A1,UP10;
	TRNN	A1,20;	ALL SCALARS?
	J	V3.81;	NO; SEND ARRAYS
	FI	A,2;
	JSP	B,S73;	SEND THEM

	J	V3.81;	SEND ARRAYS.
V3.84:	JSP	B,X48;	FINISH WITH BLANK LINE.
	BYTE	(8)277,CG,EOS;
	DEC	-1;
V3.85:	F	B2,U8;	RESTORE ITEM COUNT
	M	B2,UP3;
	J	@UX4;	AND FINI
	PAGE

;	TYPE IN FORM.

V3.9:	HRRZS	UP3;	FIX COUNTER
	CAME	CC,T51.13;	"IN"?
	PJ	E5;	NO
	F	A,U1;
	INVOKE	P51;
	CE	CC,T51.21;	FORM?
	PJ	E5;	NO
	SKIPE	UP6;	OBJECTS OF DISCOURSE?
	PJ	E46;	YES
	M	A,U1;
	JSP	B,P38;	FOLLOWED BY OOD?
	PJ	E5;	NO
	CE	CC,U3;	EXPECTED ENDING?
	PJ	E5;	NO
	MOVE	A,PK39;	LINK TO FORM HEADER
	HRRZ	A,1(A);	LINK TO FORM
	SUBI	A,1;
	HRLI	A,41000;	POINTER TO FORM
	M	A,US6;
	F	A,US1;
	JSP	B,S64;	COPY INTO US1
	XWD	0,US6;
	BYTE	(8)277,CG,EOS;
	DEC	-1;
	F	A,US1;
	M	A,U1;
	SETZM	PK38;	POSITION OF LAST FIELD.
V3.91:	PJ	S65X;	FETCH NEXT FIELD SPECIFICATION
	SKIPE	PK36;
	J	V3.910;
	JN	A2,V3.910;
	PJ	E40;	TOO MANY VALUES
V3.910:	F	A,(DS);	NEXT DESCRIPTOR
	LDB	A1,BYTE2;	ITS TYPE
	M	A1,PK19;	SAVE IT
	CLE	A1,TYPE2;	TV OR JNF?
	J	V3.94;	NO
	INVOKE	P53;	YES; POP DESC. AND VALUE
	SKIP	;	TV'S ALREADY LEGISLATED
V3.913:	F	A,U1;
	CAMN	A,PK38;	DO FIELDS ABUT?
	PJ	E44;	YES
	HLRZ	B1,PK36;	LEFT UNDERSCORES
	HRRZ	B,PK36;	RIGHT UNDERSCORES
	F	B2,PK37;	DOTS
	CAILE	B2,1;	FIXED FIELD?
	J	V3.92;	NO; SCIENTIFIC
	PAGE
	SKIPN	PK19;	TV?
	J	V3.912;	YES
	CALL	S83;	JNF TO FIXED FIELD
V3.911:	PJ	E41;	DOES NOT FIT FIELD
	J	V3.93;
V3.912:	JN	B2,V3.911;	NO DEC POINT FOR TV
	JE	A1,.+2;	TRUE OR FALSE?
	ADDI	B2,1;	TRUE
	SUBI	B1,5;
	ADD	B1,B2;	LENGTH OF REMAINING FIELD
	JL	B1,V3.911;	FIELD TOO SMALL.
	FI	CC,SP;
	JUMPE	B1,.+3;
	IDPB	CC,A;
	SOJG	B1,.-1;	LEADING BLANKS
	F	B,ST51LO+64(B2);	TO STRING
	ILDB	CC,B;
	CAIN	CC,EOS;
	J	V3.93;
	IDPB	CC,A;
	J	.-4;
V3.92:	SKIPN	PK19;	TV?
	PJ	E41;
	F	B1,B2;
	CALL	S84;	VALUE TO SCIENTIFIC FIELD
	PJ	E41;	DOES NOT FIT
V3.93:	M	A,U1;	RESTORE POINTER
	M	A,PK38;
	SOSE	UP3;	ANY MORE ITEMS?
	J	V3.91;	YES
	PJ	S65X;	NEXT FIELD SPEC.
	SKIPE	PK36;
	J	V3.95;	EXTRA FIELDS PERHAPS
	JN	A2,V3.95;
V3.96:	JSP	B,X48;	SEND LINE TO USER
	XWD	0,US1;
	DEC	-1;
	J	X52;
	PAGE
V3.94:	CE	A1,TYPE13;	SINGULAR ITEM?
	PJ	E43;	NO; USE INDIVIDUAL VALUES ONLY.

	F	A,U1	;DO FIELDS ABUT?
	CAMN	A,PK38;
	PJ	E44;	YES
	M52	DS,A;	YES; POP DESCRIPTOR
	TRNE	A,777777;	UNDERSCORE?
	J	V3.941;	NO
	F	A,U1;	YES
	HLRZ	A1,PK36;
	HRRZ	A2,PK36;
	ADD	A1,A2;
	ADD	A1,PK37;
	FI	CC,SP;
	IDPB	CC,A;
	SOJG	A1,.-1;
	M	A,U1;	
	M	A,PK38;
	SOSE	UP3;
	J	V3.91;
	PJ	S65X;	DO NOT CUT-OFF AFTER BLANK FIELD
	SKIPE	PK36;
	PJ	E42;
	JE	A2,V3.96;
	PJ	E42;
V3.941:	HRRZM	A,PK19;	SAVE CODE.
	F	A1,LINE(A);
	XEC	V3.942-1(A);
	CALL	S81;
	J	V3.913;
V3.942:	SETZ	A2,0;
	J	V3.943;
	SETZ	A2,0;
V3.943:	SKIPE	PK37;	NO POINTS FOR TIME!
	PJ	E41;
	HLRZ	B,PK36;	FIELD LENGTH
	CAIGE	B,4;
	PJ	E41;
	FI	CC,SP;
	F	A,U1;
	CAMN	A,PK38;
	PJ	E44;	FIELDS ABUT.
	CAIN	B,4;	LEADING BLANKS
	J	.+3;
	IDPB	CC,A;
	SOJA	B,.-3;
	F	B1,UTIME;
	PJ	S66T;
	J	V3.93;
	PAGE

;	MAY HAVE TO CUT-OFF LINE
V3.95:	F	A,PK38;
	CN	A,U1;	DO FIELDS ABUT?
	PJ	E44;	YES
	F	A2,U1;	SAVE BEGINNING OF NEXT FIELD.
	M	A,U1;
	PJ	V3.110;	NEXT BYTE
	J	V3.959;	DONE
	CAIN	CC,SP+1;	2 SPACES?
	SUBI	CC,1;	YES; TREAT AS SINGLE SPACE HERE.
V3.950:	F	A1,U1;	HOLD PTR.
	CAIE	CC,SP;	SINGLE SPACE?
	J	V3.953;	NO
	PJ	V3.110;	NEXT BYTE
	J	V3.958;	DONE
V3.951:	CAIGE	CC,12;	LETTER?
	J	V3.959;	NO; DONE
	CAIG	CC,75;
	J	.+3;	YES
	CAIG	CC,WORD;	A WORD?
	J	V3.959;	NO
	F	A,A1;	YES; START NEW WORD
V3.952:	PJ	V3.110;	NEXT BYTE
	J	V3.958;	NO MORE; CUT OFF RIGHT HERE!
	CAIN	CC,EQUALS;
	J	V3.959;
	CAIGE	CC,SP;
	J	V3.952;
	CAIGE	CC,SPS;
	J	V3.950;
	J	V3.952;
V3.953:	CAIG	CC,SP;	NO SPACE; A LETTER POSSIBLY?
	J	V3.951;	YES; BEGINNING OF WORD.
	CAILE	CC,SPS;	MORE THAN ONE SPACE?
	J	V3.951;	NO; MAY BE BEGINNING OF WORD.
	PJ	V3.110;	YES; NEXT BYTE
	J	.+2;	NO MORE;
	CAIE	CC,EQUALS;	EQUAL SIGN?
	F	A,A1;	NO; CUT OFF BEFORE LAST WORD.
	J	V3.959;	CUT OFF HERE.
V3.958:	F	A,U1;
V3.959:	FI	CC,CG;	APPEND CARRIAGE RETURN
	IDPB	CC,A;
	FI	CC,EOS;
	IDPB	CC,A;	AND EOS.
	J	V3.96;
	PAGE
V3.100:	CE	CC,U3;
	PJ	E5;
	HRRZ	CC,PK36;
	CAIE	CC,6;	ITEM-LIST?

	PJ	E5;	NO
	J	D63;
V3.110:	CAMN	A2,U1;	ARE WE UP TO NEXT FIELD?
	POPJ	CR,0;	YES
	F	B,CR;	NO
	AOS	(B);	INCREMENT RETURN ADDRESS
	J	S50;	AND GET NEXT BYTE.

	SUBTTL	V4       DO STATEMENTS
V4A:	SETOM	UP0;	PARENTHETICAL JOB
	JRST	V4+2;
V4:	MOVE	A,MODE;	REGULAR JOB GOVERNED BY MODE.
	MOVEM	A,UP0;
	JSP	B,P38E;	PART OR STEP?
	PJ	E5;	NO
	HRRZ	A1,PK39;	GET HEADER LINK
	HRRZ	A2,PK36;	AND OOD TYPE.
	SUB	A2,K22;
	CAIN	A2,2;	A STEP?
	J	V4.1;	YES
	CAIE	A2,1;	A PART?
	PJ	E5;	NO
	HRRZ	A1,1(A1);	YES; GET LINK TO FIRST STEP
V4.1:	HRLM	A1,UP1;
	HRRM	A2,UP1	;UP1= LINK TO OBJECT OBJECT TYPE
	F	A2,PK37;
	M	A2,UP5;
	F	A2,PK38;
	M	A2,UP6;	SAVE OBJECT NR.
	F	A2,PK22;
	M	A2,UP2;	PART INDEX
	F	A2,(A1);
	M	A2,UP3;	STEP INDEX
	SETZM	UP4;	NULL FOR-CLAUSE LINK
	CN	CC,U3;	EXPECTED ENDING?
	J	V4.2;	YES
	CE	CC,T51.12;	NO; HAVE WE A "FOR"?
	J	V4.6;	NO; MAY BE "N TIMES".
	JN	B1,.+2;	WITH LEADING SPACES?
	PJ	E5;	NO
	JSP	B,P39;	OKAY; COMPILE FOR-CLAUSE
	CE	CC,U3;	EXPECTED ENDING?
	PJ	E5;	NO
	F	A,(DS);	FETCH ITS DESCRIPTOR
	HRRM	A,UP4;	SAVE LINK TO FOR-CLAUSE
V4.2:	SKIPN	UP0;	PARENTHETICAL JOB?
	PJ	S66Y;	NO; CANCEL ALL.
	F	A,UP4;	HAVE WE OPERATING ROOM?
	JE	A,V4.4;	NO FOR-CALUSE
	HLRZ	A1,(A);	LINK TO LHS
	HLRZ	A,(A1);	NR OF SUBSCRIPTS
	ADDI	A,2;	SPACE REQUIREMENTS PLUS ONE.
	PAGE
V4.4:	ADDI	A,4;	SPACE FOR JOB PDL
	CL	A,SIZE;	ENUF SPACE?
	PJ	E3A;	NO
	SKIPN	UP4;	FOR-CLAUSE?
	J	V4.5;	NO
	M52	DS,A;	YES; SAFE TO POP FOR-CLAUSE DESC.
V4.5:	PJ	P72B;	PUSH CURRENT JOB
	F	A1,UP2;
	M	A1,CPI;	SET CURRENT PART INDEX
	F	A1,UP3;
	M	A1,CSI;	CURRENT STEP INDEX
	F	A,UP1;
	HLRZM	A,CSA;	CURRENT STEP ADDRESS
	SETZM	JD;	IN JOB DESCRIPTOR
	DPB	A,BYTE6;	JOB CODE
	F	A,MODE;
	DPB	A,BYTE7;	JOB MODE
	F	A,UP5;
	M	A,U24;
	F	A,UP6;
	HRLZM	A,U25;	JNF OBJECT NR.
	F	A,UP4;
	JE	A,X53;	NO FOR CLAUSE
	DPB	A,BYTE11;	SAVE ITS LINK
	PJ	S63;
	PJ	P67;
	J	.+2;	NEED MORE SPACE
	J	X53;
	PJ	P72A;	POP JOB
	PJ	E3A;
V4.6:	CE	CC,T51.4;	COMMA?
	PJ	E5;	NO
	JSP	B,P49;	YES; EVALUATE NEXT EXPRESSION
	CE	CC,T51.24;	FOLLOWED BY "TIMES"?
	PJ	E5;	NO
	INVOKE	P51;
	CE	CC,U3;	AND EXPECTED ENDING?
	PJ	E5;	NO
	INVOKE	P53;	OK; POP AND TEST EXPRESSION
	TVJNF;
	M	A1,PK37;	SAVE THE NUMBER
	M	A2,PK38;
	JE	A1,X52;
	JG	A1,.+2;
	PJ	E49;	NR. OF TIMES MUST BE > 0
	CALL	P91;
	JN	A1,.-2;	AND INTEGRAL.

	PAGE
	F	A1,PK37;
	HRLZ	A2,PK38;
	M55	A1,A2,E3;	STORE IT.
	HRRZ	A,A2;
	HRL	A,TYPE9;	ROV DESCRIPTOR
	M55	A,A2,E7;
	HRRZS	(A2);	TREAT AS FOR-CLAUSE DESC.(NO LHS)
	F	A,A2;
	HRL	A,TYPE10;	FOR-CLAUSE DESCRIPTOR
	M53	A,DS,E7;	TO DS
	HRRM	A,UP4;
	J	V4.2;



	SUBTTL	V5       DELETE
V5:	AOS	SIZE;	TWO EXTRA CELLS
	AOS	SIZE;
	SETOM	U7;	NOTE THE FACT.
	SETZM	UP3;	COUNT OF ITEMS.
V5.0:	JSP	B,P38X;	IS NEXT ITEM AN OOD?
	JSP	B,P37;	NO; COMPILE LHS
V5.02:	AOS	UP3;	COUNT!
	CN	CC,T51.4;	FOLLOWED BY COMMA?
	J	V5.0;	YES
	CE	CC,U3;	EXPECTED ENDING?
	PJ	E5;	NO
V5.1:	SOSGE	UP3;	ANY MORE?
	J	V5.13;	NO; CLEAN UP
	F	A,(DS);	YES; FETCH DESCRIPTOR
	LDB	A1,BYTE2;	WHAT IS IT?
	CE	A1,TYPE8;	LHS?
	J	V5.11;	NO
	PJ	P66;	YES; EXPAND IT.
	PJ	S74B;	AND DELETE ITEM
	J	V5.1;
V5.11:	M52	DS,A	;;***POP DESCRIPTOR
	CE	A1,TYPE21;	TABLE ENTRY?
	J	V5.12;	NO
	PJ	P60;	DELETE THE ENTRY
	J	V5.1;
V5.12:	CE	A1,TYPE11;	OOD?
	PJ	E54;	NO
	PJ	P70X;	DE-COMPILE IT.
	PJ	E54;	BAD NR.
	J	V5.1;	DELETED!
	JSP	B,V5.2;	DELETE THE OBJECT
	J	V5.1;	CONTINUE.
	PAGE
V5.13:	PJ	S60;	CLEAN UP
	PJ	S69X;	SET SIZE, TIME USERS
	SKIPE	USIZE;	ANYTHING BEING USED?
	J	X52;	YES
	F	B1,SIZE;
	SUB	B1,K32;	PREPARE TO RETURN UNUSED BLOCKS
	IDIVI	B1,^D512;
	JE	B1,X52;	NO EXCESS BLOCKS
	FI	A1,15;
	JSP	B,X46;	RETURN EXCESS BLOCKS
	XWD	.+1,MONENT;
	JSR	S62;	RESTORE CONSOLE
	F	A,K36;
	ADDI	A,INTENT;
	M	A,SPACE;
	PJ	S69Y;	SET SIZE AND LINK ACL
	J	X52;
V5.2:	HRRZM	B,UX4;
	HRRZ	B2,PK36;	OBJECT TYPE
	SKIPN	MODE;
	J	V5.20;
	CAIG	B2,3	;INDIRECT; NO PARTS STEPS,FORMS,ALL
	PJ	SIN6;
	CAIGE	B2,10;
	J	V5.20;
	CAIG	B2,12;
	PJ	SIN6;
V5.20:	SETZ	A1,0;	SWITCH ON OOD.
	XCT	V5.21(B2);
	J	V5.4;
	PAGE
V5.21:	TRO	A1,37;	ALL
	TRO	A1,1;	ALL PARTS
	TRO	A1,1;	ALL STEPS
	TRO	A1,2;	ALL FORMS
	TRO	A1,4;	ALL FORMULAS
	TRO	A1,30;	ALL VALUES
	PJ	E5;
	PJ	E5;
	J	V5.31;	PART
	J	V5.33;	STEP
	J	V5.34;	FORM
	J	V5.63;	FORMULA
	PJ	E5;
	PJ	E5;
	PJ	E5;
	PJ	E5;
V5.31:	F	A1,PK39;
	M	A1,PK40;
	HRL	A,A1;

	HRR	A,1(A1);
	PJ	S74A;	DELETE NEXT STEP IN PART
	J	V5.31;	MORE
	J	@UX4;	DONE
V5.33:	F	A,PK39;
	PJ	S74A;	DELETE THE STEP
	J	@UX4;	DONE
V5.335:	J	@UX4;	DONE
V5.34:	F	A,PK39;
	PJ	S74C;	DELETE THE FORM
	J	@UX4;	DONE
V5.4:	M	A1,UP10;
	CAIE	A1,37;	DELETING ALL?
	J	V5.41;	NO
	SETZM	UP0;
	PJ	S66Y;
	F	A1,UP10;
V5.41:	TRNN	A1,1;	ALL PARTS?
	J	V5.5;	NO
	FI	A,PARTS;
	HLRZ	A1,1(A);
	JE	A1,V5.5;	NO MORE PARTS
	HRL	A1,A;
	M	A1,PK40;
	PAGE
V5.42:	F	A1,PK40;
	HRL	A,A1;
	HRR	A,1(A1);
	PJ	S74A;	DELETE NEXT STEP
	J	V5.42;	MORE; CONTINUE.
	J	V5.41+2;	PART DELETED
V5.5:	F	A1,UP10;
	TRNN	A1,2;	ALL FORMS?
	J	V5.6;	NO
V5.51:	FI	A1,FORMS;
	HLRZ	A,1(A1);
	JE	A,V5.6;	NO MORE FORMS
	HRL	A,A1;
	M	A,PK39;
	PJ	S74C;	DELETE THE FORM
	J	V5.51;
V5.6:	F	A1,UP10;
	TRNN	A1,4;	ALL FORMULAS?
	J	V5.61;	NO
	SETZ	A,0;
	PJ	S74D;	DELETE ALL FORMULAS
V5.61:	F	A1,UP10;
	TRNN	A1,10;	ALL ARRAYS?
	J	V5.62;	NO
	FI	A,1;
	PJ	S74D;	DELETE ALL ARRAYS
V5.62:	F	A1,UP10;
	TRNN	A1,20;	ALL SCALARS?
	J	@UX4;	NO, DONE.
	FI	A,2;
	PJ	S74D;	DELETE ALL SCALARS
	J	@UX4;	FINI.
V5.63:	F	A,PK37;
	PJ	P60;	DELETE THE FORMULA
	J	@UX4;
	SUBTTL	V6,V7,V8   LINE; PAGE, CANCEL

V6:	PJ	S68;	NEXT NON BLANK
	CE	CC,U3;	EXPECTED ENDING?
	PJ	E5;	NO
	F	A1,LINE;	DO NOTHING IF
	CE	A1,K27;	IF AT TOP OF PAGE
	J	.+3;
	SKIPN	MODE;	AND DIRECT.
	J	X52;
	JSP	B,X48;
	BYTE	(8)277,CG,165;
	DEC	-1;
	JRST	X52;



V7:	PJ	S68;	NEXT NON-BLANK
	CE	CC,U3;	EXPECTED ENDING?
	PJ	E5;
	F	A1,LINE;
	CE	A1,K27;
	J	.+3;
	SKIPN	MODE;
	J	X52;
	JSP	B,X48;
	OCT	0;
	JRST	X52;



V8A:	SETOM	UP0;	PARENTHETICAL CANCELLATION
	JRST	V8+1;
V8:	SETZM	UP0;	CANCEL ALL.
	SKIPE	MODE;
	PJ	E2;	DIRECT ONLY
	PJ	S68;	NEXT NON BLANK
	CE	CC,U3;	EXPECTED ENDING?
	PJ	E5;
	PJ	S66Y;	CANCEL ACCORDING TO UP0

	J	X57+1;


	SUBTTL	V9, V11, V12      GO; DONE, STOP

V9:	SKIPE	MODE;
	PJ	E2;	DIRECT ONLY
	PJ	S68;	NEXT NON-BLANK
	CE	CC,U3;	EXPECTED ENDING?
	PJ	E5;
	LDB	A,BYTE6;
	JN	A,.+2;
	PJ	E39;	NOTHING TO DO!
	LDB	A,BYTE8;	RE-ENTER ACCORDING TO BREAK CODE
	JE	A,V9.1;
	LDB	A,BYTE7;	MODE=JOB MODE
	MOVEM	A,MODE;
	J	X56;
V9.1:	LDB	A,BYTE10;	WERE WE STOPPED?
	JE	A,X54;	NO
	SETOM	MODE;
		J	X52;	YES; TO STEP ADVANCE

V11:	SKIPN	MODE;
	PJ	E1;	INDIRECT ONLY
	PJ	S68;	NEXT NON BLANK
	CE	CC,U3;	EXPECTED ENDING?
	PJ	E5;
	J	X55;

V12:	SKIPN	MODE;
	PJ	E1;	INDIRECT ONLY
	PJ	S68;	NEXT NON BLANK
	CE	CC,U3;	EXPECTED ENDING?
	PJ	E5;
	SETO	A,0;
	DPB	A,BYTE10;	SKIP IS ON!
	F	A1,CPI;
	F	A2,CSI;
	PJ	S67Y;	CONVERT STEP NUMBER
	JSP	B,X48;
	BYTE	(8)277,CS,6,SP,EOS;
	XWD	0,US4;
	BYTE	(8)277,DOT,CG,EOS;
	DEC	-1;
	SETZM	MODE;
		J	X52;

	SUBTTL	V10       TO

V10:	SKIPN	MODE;
	PJ	E1;	INDIRECT ONLY
	JSP	B,P38E;	PART OR STEP?
	PJ	E5;	NO
	HRRZ	A1,PK39;	FETCH HEADER LINK
	HRRZ	A2,PK36;	AND OOD TYPE
	SUB	A2,K22;	SUBTRACT SINGULAR OFF-SET
	CAIN	A2,2;	IS IT A STEP?
	J	V10.1;	YES
	CAIE	A2,1;	A PART?
	PJ	E5;	NO
	HRRZ	A1,1(A1);	FETCH LINK TO FIRST STEP HEADER
V10.1:	CE	CC,U3;	EXPECTED ENDING?
	PJ	E5;	NO
	M	A1,CSA;	SET CURRENT STEP ADDRESS
	F	A2,PK22;
	M	A2,CPI;	AND CURRENT PART INDEX
		F	A2,(A1);
	M	A2,CSI;	AND CURRENT STEP INDEX
	SETZM	PK35;	INHIBIT STEP ADVANCE
	J	X52.1;
	SUBTTL	V13       DEMAND
V13:	SKIPN	MODE;
	PJ	E1;	INDIRECT ONLY!
	JSP	B,P40;	COMPILE LHS
	PJ	E5;	NO LHS.
	F	A1,US2
	M	A1,SXX
	SETZM	BFR
	CAMN	CC,T51.28	;IS IT DEMAND AS
	J	V13.4	;YES
	CE	CC,U3;	EXPECTED ENDING?
	PJ	E5;	NO
V13.Y:	F	A1,(DS);	LINK TO LHS
	PJ	S63X;	EXPAND IT.
	F	CC,(DS);
	F	CC,(CC);	LHS DICTIONARY ENTRY
	F	CC,(CC);	ENTRY ITSELF
	F	A,US2;
	PJ	S70G;	GENERATE LHS FOR TYPE LINE
	PJ	S70D;	GENERATE INDENTATION
	M	A1,U5;
	SKIPN BFR
	J V13.1
	MOVE	B,US2
	HRRI	B,BFR
	MOVEM	B,US2
	MOVEI	B1,QUOTE
	PJ	S57
V13.1:	SOS	LINE;	ADJUST LINE COUNTER DOWN!
	PJ	S60;	REFRESH CONSOLE
	JSP	B,X48;	SEND TO USER
	XWD	0,U5;
	XWD	0,US2;
	XWD	0,K23;
	DEC	-1;
	F A,SXX	;GET RIGHT HEADER BACK
	M	A,US2
	MOVEI	A,3;
	HRLM	A,ME;
	SETZM	RETURN;
	JRST	SU;
V13X:	SKIPE	UP1;	RE-ENTER WITH LINE IN US1
	JRST	V13.2;

	SKIPE	UP2;
	J	V13.1;	DEAD LINE; DO IT AGAIN.
	JRST	X47.1;
V13.2:	SETOM	U2;	NOTE DEMAND RESPONSE.
	SKIPE	UP3;	TRANSMISSION ERROR?
	PJ	E48;	YES
	F	B1,T51.5;	EXPECTED ENDING IS EOS
	LDB	CC,UP2;	IS IT?
	CAIE	CC,DOT;
	J	.+4;	YES
	FI	CC,PERIOD;	DOT BECOMES PERIOD
	DPB	CC,UP2;
	F	B1,T51.8;
	M	B1,U3;	
	F	B1,US1;
	M	B1,U1;
	SETZM	UP0;	DON'T MESS WITH UC/LC FOR LETTERS.
	PJ	S54;	COMPRESS THE LINE.
	F	B1,SK3;
	JE	B1,.+2;	CONDITIONAL CLAUSE?
	PJ	E5;	YES
	PAGE
V13.3:	SETOM	MODE;	SET UP TO MERGE WITH "SET"
	F	B1,US2;
	M	B1,U1;
	JSP	B,P40;	LHS
	PJ	E54;	NONE; SOMETHING FISHY!
	F	B1,US1;
	M	B1,U1;
	J	V1.2;	MESH WITH SET INTERPRETER.

V13.4:	INVOKE P52
	CE	CC,T51.10	;QUOTE MARKS
	PJ	E5	;NO
	SETOM	BFR	;SIGNAL
	J	V13.Y
	EXTERNAL SXX
	SUBTTL	V14       FORM

V14:	HRRZM	CC,U2;	SAVE VERB TYPE.
	SKIPE	MODE;
	SKIPE	UDF1;
	J	.+2;
	PJ	E5;	EH IF INDIRECT AND NOT FROM DISC.
	LDB	CC,UP2;
	CAIE	CC,COLON;	IS LAST BYTE A COLON?
	PJ	E5;	NO
	PJ	S50;	LOOK AT NEXT BYTE
	F	CC,T51(CC);
	CE	CC,K19;	SPACE-LIKE?
	PJ	E5;	NO.
V14Z:	JSP	B,P49;	YES; EVALUATE EXPRESSION.
	CE	CC,T51.14;	FOLLOWED BY COLON?
	PJ	E5;	NO
	PJ	S50;	NEXT BYTE
	CAIE	CC,EOS;	EOS?
	PJ	E5;	NO
	INVOKE	P53;	POP RESULT
	TVJNF;
	CALL	S78;	CONVERT TO IP, FP
	PJ	E27;	BAD FORM NR.
	JE	A,.+2;
	PJ	E27;	NON-INTEGRAL!
	M	A1,UP10;	SAVE FORM NR.
V14.3:	PJ	S60;	REFRESH CONSOLE
	SETOM	UDF2;	NOTE AWAITING FORM.
	SKIPE	UDF1;	IN DISC ACTION?
	J	D60.1;	TO RECALL ROUTINE
	FI	A1,2;
	HRLM	A1,ME;
	SETZM	RETURN;
	SETOM	FORMFG
	JRST	SU;	SWITCH TO USER 
V14X:	SETZM	UP0;
	SKIPE	UP3;	TRANSMISSION ERROR?
	PJ	E48;	YES
	F	A,US1;
	M	A,U1;
	PJ	S54;	COMPRESS THE LINE
	PJ	P51Y;	ENUF SPACE?
	PAGE
V14Y:	F	A2,UP10;	YES
	HRRZI	A1,FORMS;
	PJ	P70L;	SEARCH FOR FORM
	J	V14.1;	NO SUCH FORM
	HRRZ	B,1(A);	LINK TO FORM ITSELF
	PJ	P62;	DELETE IT
	J	V14.2;
V14.1:	M61	HRLM,A1,A2,A	;INSERT FORM HEADER
	HRLZS	1(A);	TIDY UP.
V14.2:	HRRM	ACL,1(A);	STRING TO USER BLOCK.
	F	A,ACL;
	F	A1,US1;
	M	A1,U1;
	SETOM	FORMFG
	PJ	S56;
	SETZM	FORMFG
	HRRZ	ACL,1(A);	TIDY UP
	HLLZS	1(A);
	J	V0;
	SUBTTL	V15    QUIT
V15:	PJ	S68;	TO NEXT NON BLANK.
	CE	CC,U3;	EXPECTED ENDING?
	PJ	E5;	NO
	SKIPE	MODE;	YES; IN DIRECT MODE?
	J	X57;	NO; POP JOB AND GO.
	LDB	A,BYTE6;	YES; ANYTHING TO DO?
	JN	A,.+2;	
	PJ	E39;	NO; SAY SO.
	PJ	P72A;	YES; POP JOB

	SKIPE	A,MODE;
	DPB	A,BYTE10;	FIX SKIP-CODE IF INDIRECT.
	SETZM	MODE;	FORCE RETURN TO USER.
	J	X57.1;	AND TELL HIM WERE WE ARE.
	SUBTTL	V16 -- RESET TIMER
V16:	INVOKE	P51;	FOLLOWED BY "TIMER"?
	CE	CC,T51.35;
	PJ	E5;	NO
	INVOKE	P51;
	CE	CC,U3;	AND EXPECTED ENDING?
	PJ	E5;	NO
	F	A,SECONDS;
	M	A,USEC;
	J	X52;



	SUBTTL	ROUTINES FOR LARGE SYNTACTIC TYPES

	INTERN	P49,P42,P40,P39,P38,P37;
	INTERN	P38E,P38L,P38X,P36,P35,P42L;

	SUBTTL	P49  --  EXPRESSIONS
;		JSP B,P49


P49:	HRL	CC,B;	CC = (CALLER; BACKSTOP CODE)
	HRR	CC,K10;	THEN ENTER CONTEXT I

;		CONTEXT I:  EXPECTING 'OPERANDS', LEFT GRPRS.,
;		ABVAL BARS, UNARY OPERATORS

P49.1:	INVOKE	P52;
	LDB	B2,BYTE4;	B2 = CLASS(CC)
	XCT	P49.2(B2);	ACT ON IT
P49.2:	J	P49.6;	LETTER
	J	P49.71;	LIT. OR FCT.
	J	P49.1;	([
	J	P49.1;	ABVAL
	J	P49.3;	ARITH
	J	P49.5;	'NOT'
	PJ	E5;	EH
	PJ	E5;
	PJ	E5;
	J	P49.21;	MAY BE UNDERSCORE OR SYSTEM WORDS.
	PJ	E5;
	PJ	E5;
	PJ	E5;
	PJ	E5;
	PJ	E5;
	PJ	E5;
	PJ	E5;
	PJ	E5;
P49.21:	HLLZ	B2,CC;
	CE	B2,K40;	UNDERSCORE OR SYSTEM ATTRIBUTE?
	PJ	E5;	NO
	HRL	CC,TYPE13;	YES; COMPOSE DESCRIPTOR
	F	A,CC;
P49.22:	M53	A,DS,E7;	SAVE IN USER BLOCK
P49.23:	INVOKE	P51;
	LDB	B2,BYTE4;	IS NEXT AN OPERATOR?
	CAIG	B2,3;
	J	P48.1+1;	NO; TO CONTEXT II
	CAIL	B2,10;
	J	P48.1+1;
	PJ	E5;	YES -- NO GO!
	PAGE
P49.3:	CN	CC,T51.1;	PLUS SIGN?
	J	P49.4;	YES
	CE	CC,T51.2;	MINUS SIGN?
	PJ	E5;	NO; EH
P49.4:	F	CC,T54(CC);	OK; CC = UNARY ASSOCIATE OF CC
	J	P47;	TO CONTEXT III
P49.5:	INVOKE	P52;
	LDB	B2,BYTE4;	CLASS OF NEXT TERM. CHAR.
	CAIE	B2,1;	IS IT A LITERAL?
	JRST	P47.1;	NO; SLIDE INTO CONTEXT III
	SN	B1;	LEADING SPACES
	PJ	E5;	NO; EH
	XCT	P49.2(B2);	YES; WE ARE IN CONTEXT I.
P49.6:	F	A,(CC);	A = DICT. DESCRIPTOR
	HLRZ	B2,1(CC);
	CAME	B2,LEVEL;	DEFINED AT THIS LEVEL?
	J	P49.62;	NO
P49.61:	LDB	B2,BYTE2;	GET OBJECT TYPE
	XCT	P49.7(B2);	SWITCH ON IT.
	J	P49.9;	RETURN HERE IF TV AND ALLOWED.
P49.62:	CAME	B2,BASE;	DEFINED AT BASE LEVEL?
	J	P49.64;	NO
P49.63:	HRRZ	CC,1(CC);	YES; USE THE FIRST SUCH.
	JE	CC,P49.61;
	HLRZ	B2,1(CC);
	CAME	B2,BASE;
	J	P49.61;
	F	A,(CC);
	J	P49.63;
P49.64:	CAMG	B2,BASE;	DEFINED AT LOWER BASE?
	PJ	E6;	YES; NOT DEFINED.
	HRRZ	CC,1(CC);	NO; GET NEXT ON LETTER'S PDL.
	HLRZ	B2,1(CC);	DEFINING LEVEL.

	JN	CC,.+2;	IS THIS THE LAST ON LETTER'S PDL?
	PJ	E6;	YES; NOT DEFINED.
	F	A,(CC);	NO; FETCH DESCRIPTOR.
	J	P49.62;	AND KEEP LOOKING.
P49.7:	J	P49.9;	TV
	J	P49.9;	JNF
	J	P44;	ARRAY
	J	P41;	FORMULA
	J	P44F;	FCT
	J	P36;	FCTL
	PJ	E6;	UNDEFINED
	PJ	E4;
	PJ	E4;
	PJ	E4;
	PJ	E4;
	PJ	E4;
	J	P49.22;	UNDERSCORES, SIZE, TIME; USERS
	PJ	E4;
	PJ	E4;
	PJ	E4;
	PAGE
P49.71:	LDB	B2,BYTE5;	B2 = TYPE WITHIN CLASS OF CC
	HRL	A,B2;
	HRR	A,CC;	A = OBJECT DESC. FOR CC
	XCT	P49.72(B2);	ACT ON TYPE
	J	P49.9;	RETURN HERE IF TV AND ALLOWED
P49.72:	TVTEXT	;	TV
	J	P49.73;	JNF
	PJ	E5;	ARRAY
	PJ	E5;	FORMULA
	J	P44F;	FUNCTION
	J	P36;	FCTL.
	J	P49.74;	DOLLAR SIGN
	J	P49.73;	TIMER
	PJ	E5;
	PJ	E5;
	PJ	E5;
	PJ	E5;
	PJ	E5;
	PJ	E5;
	PJ	E5;
	PJ	E5;
P49.74:	F	A1,(CC);
	SETZ	A2,0;
	CALL	S81;	CONVERT ACTIVE LINE CTR TO JNF
	J	P49.8;
P49.73:	F	A1,(A);	FETCH DP
	F	A2,1(A);	AND XP
	TLNE	A1,600000;
	PJ	E24;	TOO MANY SIG. DIGS.
P49.8:	M56	A1,A2,E3;	STORE JNF 
	HRR	A,A2;	A = LINK TO STORED COPY
	HRL	A,TYPE2;	A = JNF DESCRIPTOR
	PAGE
P49.9:	M53	A,DS,E7;	PUSH ONTO DS AND ENTER CONTEXT II

;	AND ENTER CONTEXT II.
	PAGE
;		CONTEXT II: EXPECTING OPERATORS AND 'RIGHT GRPRS.'
P48:	INVOKE	P51;
P48.1:	LDB	B2,BYTE4;	B2 = CLASS(CC)
	XCT	P48.2(B2);	ACT ON IT
	PJ	E5;
P48.2:	JN	B1,P48.3;	LETTER
	JN	B1,P48.3;	LITERALS; ET ALL
	J	P48.3;	LEFT GRPR.
	J	P48.3;	ABVAL
	J	P48.5;	ARITH
	JN	B1,P48.3;	'NOT'
	JN	B1,P48.5;	LOGIC; OK IF SPACE LED
	J	P48.5;	RELATION
	J	P48.3;	RT. GRPRS., ETC.
	JN	B1,P48.3;	WORDS; OK IF SPACE-LED
	PJ	E5;	EH
	PJ	E5;
	PJ	E5;
	PJ	E5;
	PJ	E5;
	PJ	E5;
P48.3:	M	B1,UB1;	HOLD SPACE COUNT
	SETZM	U4;	WEIGHT=0
	XCT	T56(CP);	FIRE CURRENT PROCESS
P48.5:	HRRZ	B2,T53(CC);
	M	B2,U4;	WEIGHT = RIGHT WEIGHT OF CC.
P48.6:	HLRZ	B2,T53(CP);	B2 = LEFT; WEIGHT OF CP
	CGE	B2,U4;	LEFT WEIGHT OF CP < WEIGHT?
	XCT	T55(CC);	YES; LEAVE CONTEXT II UNDER CC'S CONTROL
	XCT	T56(CP);	NO; FIRE CP.
	PAGE
;		CONTEXT III: LIKE CONTEXT I, BUT NO UNARY OPS

P47:	INVOKE	P52;
P47.1:	LDB	B2,BYTE4;	B2 = CLASS (CC)
	CAILE	B2,3;
	PJ	E5;	EH IF NOT ALLOWED
	XCT	P49.2(B2);

;		CONTEXT IV: LIKE III, BUT ACCEPTS + -


P46:	INVOKE	P52;
P46.1:	LDB	B2,BYTE4;
	CAILE	B2,4;
	PJ	E5;
	XCT	P49.2(B2);

;		CONTEXT V: LIKE I BUT DEMANDS SPACES

P45:	INVOKE	P52;
	SN	B1;
	PJ	E5;	EH IF NO SPACES
	LDB	B2,BYTE4;
	XCT	P49.2(B2);
	SUBTTL	P44, P44F  --  ARRAYS AND FUNCTIONS
;	ARRAYS

P44:	PJ	P55;	DOES LEFT GRPR FOLLOW HARD?
	J	P49.22;	NO; MAY BE OKAY.
	JSP	B,P42;	FETCH GROUPED ITEMS TO DS,T48=ITEM COUNT
	M	A,PK8;	HIDE OBJECT'S DESCRIPTOR
	PJ	P61;	PEEL INDEX VALUES OFF DS TO T48.
	F	A,PK8;	RESTORE THE DESCRIPTOR
	HLRZ	B1,1(A);	FETCH DIMENSION
	CE	B1,T48;	DOES IT = ITEM COUNT
	PJ	E10;	NO
	PJ	P56;	SEARCH FOR ARRAY ELEMENT
	J	P44.2;	NOT FOUND; MAY BE SPARSE.
	F	A1,(A);	A1 = DP
	HLR	A2,1(A);	A2 = PACKED XP
	PJ	P57Z;	CONVERT EXP., STORE IF JNF; DESC. TO A
	J	P49.9;
P44.2:	F	A,PK8;
	TLNN	A,SPARSE;	SPARSE?
	PJ	E10;
	SETZB	A1,A2;	YES; USE A ZERO AS VALUE
	J	P49.8;	TO CONTEXT II AFTER STORING.

;	FUNCTIONS

P44F:	PJ	P55;	AS FOR ARRAYS!
	J	P49.22;	NO; MAY BE OK
	JSP	B,P42;
	M	A,PK8;
P43:	HLRE	B1,T47.1(A);	B1 = ARG. COUNT
	CE	B1,T48;	DOES IT MATCH ITEM COUNT?
	JGE	B1,P43.1	;NO BUT OK IF B1<0 (FUNCTIONALS)
	HRR	B1,T47(A);	B1 = FCT. EVALUATOR
	PJ	(B1);	FIRE IT
	J	P49.9;	TO END OF CONTEXT I
P43.1:	PJ	E11;
	SUBTTL	P41  --  FORMULAS
P41:	HLRZ	A1,1(A);	A1 = ARG. COUNT
	JN	A1,P41.1;	ANY PARAMETERS?
	SETZM	T48;	PICK UP BELOW IF NO ARGS
	AOS	LEVEL;
	J	P41.6;
P41.1:	PJ	P55;	FOLLOWED HARD BY LEFT GRPR?
	J	P49.22;	NO; MAY BE OK
	JSP	B,P42;	YES; FETCH ACTUAL PARAMS.
	M	A,PK8;	HOLD DESCRIPTOR
	HLRZ	A1,1(A);	DO COUNTS MATCH?
	CE	A1,T48;	
	PJ	E22;	NO
	HLRZ	A1,(A);	LINK TO DLS
	SUBI	A1,1;
	HRLI	A1,41000;	POINTER TO DLS
	EXCH	A1,U1;	HOLD STATEMENT POINTER.
	FI	B2,1;	PREPARE TO GET DLS DESCRIPTORS
P41.2:	INVOKE	P51;	NEXT DL DESCRIPTOR
	TLNE	CC,777777;	BETTER BE A LETTER!
	PJ	E5;	IT ISN'T.
	M	CC,T48(B2);	SAVE IT
	CE	B2,T48;	DONE?
	AOJA	B2,P41.2;	NO
	M	A1,U1;	RESTORE STATEMENT POINTER
	F	B1,B2;
	HRRZI	B2,DS-1;	PREPARE TO REPLACE PARAMS.
	AOS	LEVEL;	UP THE LEVEL!

;	PUSH DUMMY ENTRIES WITH ACTUAL PARAMS
;	REPLACE PARAMS ON DS WITH DUMMY ENTRY DESCRIPTORS

P41.3:	F	B2,1(B2);	LINK TO NEXT ON DS
	F	A,T48(B1);	NEXT FORMAL PARAM. DICT.ADDRESS
	PJ	P58;	PUSH DICT. ENTRY
	F	A2,(B2);	NEXT ACTUAL PARAM. DESCRIPTOR
	LDB	A1,BYTE3;	A1 = ITS TYPE
	CLE	A1,TYPE4;	IS IT DEFINITELY NON-VOLATILE
	J	P41.5;	YES
	JE	A1,P41.5;	TV'S ARE NOT VOLATILE
P41.4:	HRRZ	A1,1(A2);	INC. USE COUNT
	ADDI	A1,1;
	HRRM	A1,1(A2);
P41.5:	LDB	A1,BYTE12;	A1 = LETTER BYTE FROM DICT ENTRY
	M	A2,(A);	ACT. PARAM DESC TO DICT
	TLNN	A2,IDMC;
	DPB	A1,BYTE12;	WITH PROPER IDENTIFICATION
	HRL	A,TYPE7;	DUMMY LETTER DESCRIPTOR
	M	A,(B2);	DICT ADD. TO DS STACK
	SOJG	B1,P41.3;	CONTINUE IF MORE

	F	A,PK8	;A = FORMULA DESCRIPTOR
	PAGE
P41.6:	F	A2,U1;	HOLD POINTER
	INVOKE	P51;	NEXT CHARACTER.
	LDB	B2,BYTE4;	ITS CLASS
	CAIG	B2,11;	ACCEPTABLE?
	J	.+1(B2);	MAYBE
	PJ	E5;	LETTER
	PJ	E5;	LITERALS ET ALL
	J	P41.7;	LEFT GRPRS.
	J	P41.7;	ABVAL
	J	P41.7;	ARITH
	PJ	E5;	NOT
	JE	B1,.-1;	LOGIC
	J	P41.7;	RELATION
	J	P41.7;	RT. GRPR.
	JE	B1,.-4;	WORDS
P41.7:	HLRZ	A1,A;	LETTER BYTE
	TRZ	A1,IDM;	POSITIONED
	IOR	A1,T48;	WITH COUNT.
	F	B,FPDL;
	HRL	B,A1;	TO FPDL WITH POINTER
	M53	A2,B,E3;
	HRRZM	B,FPDL;	UPDATED PDL
	AOS	U6;
	HRRZ	A1,(A);	LINK TO FORMULA
	SUBI	A1,1;
	HRLI	A1,41000;	POINTS TO FORMULA
	M	A1,U1;
	JSP	B,X47;	ACKNOWLEDGE RECALLS AND IN-REQU
	OCT	5;	CONTROL STATE IF RECALLED
P41.8:	JSP	B,P49;	EVAL. FORMULA
	CE	CC,T51.5;	DELIMITED BY EOS?
	PJ	E5;	NO
	F	A1,FPDL;	YES;
	M52	A1,B;	POP POINTER
	M	B,U1;
	HLRZ	B2,A1;	AND COUNT
	TRZ	B2,IDMC;
	HRRZM	A1,FPDL;
	SOS	LEVEL;	DROP LEVEL.
	SOS	U6;
	PAGE
	M52	DS,A;	POP RESULT DESCRIPTOR.
	SETZM	PK5;	NO-PARAMS FLAG.
	JE	B2,P49.61;	RE-ENTER CONTEXT 1 IF NO PARAMS
	M	A,PK5;	HOLD DESCRIPTOR WHILE POPPING PARAMS
	HRRZS	A		;***RHS OF A FOR COMPARE
	CAIGE	A,USER0	;***IN USER'S BLOCK?
	J	P41.9;	NO
	HRRZ	A1,1(A);
	ADDI	A1,1;
	HRRM	A1,1(A);	INCREMENT USE-COUNT.
P41.9:	M52	DS,A;	NEXT PARAM DESCRIPTOR
	PJ	P69;	DELETE AND POP ENTRY.
	SOJG	B2,P41.9;	CYCLE
	F	A,PK5	;RESTORE DESCRIPTOR OF RESULT
	HRRZ	B2,PK5	;***IN USER'S BLOCK?
	CAIGE	B2,USER0;***
	J	P41.10;	NO
	HRRZ	A1,1(A);
	SUBI	A1,1;
	HRRM	A1,1(A);	DEC. USE CNT.
	JN	A1,P41.10;
	TLZ	A,IDMC;	ZERO ID IF ZERO USE COUNT
P41.10:	J	P49.61;	RE-ENTER CONTEXT 1.


	SUBTTL	P42 --  COLLECT GROUPED ITEMS
;		JSP B,P42;	CC=LEFT GRPR, A=DESC.

P42:	HRL	B,B;
	HRR	B,K10;	B=(CALLER; BACKSTOP CODE)
	M53	B,PS,E3;	STACK IT
	M53	CP,PS,E3;	STACK CP
	M53	A,PS,E3;	STACK CONTROLLING DESC.
	HRRZ	CP,CC	;CP=(COUNT=0; LEFT GRPR CODE)
P42.1:	JSP	B,P49;	EVAL. NEXT ITEM
	ADD	CP,K4;	INC. COUNT
	CN	CC,T51.4;	IS CC A COMMA?
	J	P42.1;	YES
	CN	CC,T54(CP);	MATCHING RIGHT GROUPER?
	J	P42.3;	YES
P42.2:	TLNE	CP,777776;	FIRST ARGUMENT?
	PJ	E5;	NO
	JSP	B,P35;	TRY FOR CONDITIONAL EXPRESSION.
P42.3:	HLRZM	CP,T48;	SAVE COUNT.
	M52	PS,A;
	PAGE
P42.4:	M52	PS,CP;	RESTORE CP
	M52	PS,B;
	HLR	B,B;
	J	(B);
	SUBTTL	P42L -- COLLECT LIST OF GROUPED ITEMS
P42L:	HRL	B,B;
	HRR	B,K10;	SAVE CALLER
	M53	B,PS,E3;
	JSP	B,P42;	COLLECT GROUPED ITEMS ON DS
	F	B,T48;
	CAIN	B,1;	SINGLE ITEM?
	J	P42L.2;	YES
	HRRZ	B1,DS;	PEEL OFF DS ONTO SEPARATE LIST.

P42L.1:	F	B2,B1;
	HRRZ	B1,1(B2);
	SOJG	B1,P42L.1;
	XCH	B1,DS;
	HRRZS	1(B2);
	HRL	B1,TYPE22;	COMPOSE DESCRIPTOR
	HRLZ	B2,T48;	 WITH COUNT.
	ASH	B2,4;
	IOR	B1,B2;
	M53	B1,DS,E7;
P42L.2:	M52	PS,B;
	HLR	B,B;
	J	(B);
	SUBTTL	P40 -- COMPILE LEFT HAND SIDE
;		JSP B,P40
;		RETURN IF NO LHS; POINTER RESTORED
;		NORMAL RETURN


P40:	MOVE	A,U1	;HOLD POINTER
	HRL	CC,B;
	HRR	CC,K10	;(CALLER; BACK-STOP CODE)
	INVOKE	P52;	PUSH CP.,ETC
	TLNN	CC,777777;	IS IT A LETTER?
	JRST	P40.4;	YES
	MOVEM	A,U1;	NO; RESTORE POINTER
	JRST	P40.5;	AND LEAVE.
P40.4:	ADD	CP,K4;	FIX FOR NORMAL RETURN
	MOVE	A,CC;	SAVE TERM. CHARACTER.
	PUSHJ	CR,P55;	IS NEXT A HARD LEFT GROUPER.
	JRST	0,P40.3;	NO
	JSP	B,P42;	YES--FETCH GROUPED ITEMS TO DS.
	MOVEM	A,PK14;	SAVE DESC.
	PUSHJ	CR,P61;	PEEL OFF ITEMS AS INDICES;
	HRLZ	A,TYPE8;	AND SET UP LHS DESC. IN A
	HRRZ	B1,T48;	ITEM COUNT
	CLE	B1,K29;
	PJ	E8;	TOO MANY ITEMS.
P40.1:	MOVE	A1,T48(B1);	I-TH ONE
	M53	A1,A,E7;	TO LHS PDL
	HRL	A,TYPE8;	REFRESH TYPE
	SOJG	B1,P40.1;	CYCLE TEST.
	HRL	A1,T48;
	HRR	A1,PK14;	COUNT; DICT. ADDRESS
P40.2:	M53	A1,A,E7;	TO LHS PDL
	HRL	A,TYPE8;
	INVOKE	P51;	DELIMITING CHARACTER
	HLR	B,CP;	RESTORE CALLER
	M52	PS,CP;	AND ORIGINAL STATE.
	PAGE
	M53	A,DS,E7;	STACK LHS DESC.
	J	(B);	FINI
P40.5:	HLR	B,CP;	RESTORE CALLER.
	M52	PS,CP;	RESTORE ORIG. STATE
	JRST	0,(B);	FINI.
P40.3:	HRRZ	A1,A;	(COUNT=0V-TABLE ADDRESS)
	HRLZ	A,TYPE8;	EMPTY LHS DESCRIPTOR
	JRST	0,P40.2;

	SUBTTL	P39  --  COMPILE FOR-CLAUSES
;		JSP B,P39

P39:	HRL	CC,B;
	HRR	CC,K10;	(CALLER; BACK-STOP CODE)
	M53	CP,PS,E3;	PUSH CO
	MOVE	CP,CC;	CP=CC
	JSP	B,P40;	FIRST GET LEFT-HAND-SIDE
	PJ	E5;	NO LHS
	CAME	CC,T51.6;	IS CC AN EQUAL SIGN?
	PJ	E5;	NO; EH.
	HRLZ	A,TYPE9;	A = ROV HEADER
	M53	A,DS,E3;	TO DS.
	JSP	B,P49;	EVAL. FIRST PHRASE
P39.0:	J	P39.10;
P39.1:	JSP	B,P49;	EVAL. NEXT PHRASE
P39.10:	PUSHJ	CR,P63;	TACK ONTO ROV LIST
P39.11:	HLRZ	B1,CC;	IS CC
	CAIE	B1,2;	       A LEFT:GROUPER
	JRST	0,P39.2;	NO
	JSP	B,P42;	YES--FETCH GROUPED LIST
	SOSE	0,T48;	IS COUNT=1
	PJ	E5;	NO; EH
	JSP	B,P49;	OK--EVAL NEXT PHRASE
	INVOKE	P54;	POP/TEST FINAL VALUE OF ROV
	TVJNF;
	INVOKE	P53;	POP/TEST INCREMENT
	TVJNF;
	MOVEM	A1,PK15;	SAVE IT
	MOVEM	A2,PK16;
	HLR	A,1(DS);	NOW FETCH INITIAL VALUE
	MOVE	A1,(A);	OF ROV
	HLRZ	A2,1(A);
	CAME	A2,MASK9;	TV?
	J	.+3;	NO
	TVJNF;	YES - VALID?
	SETZ	A2,0;	YES; ADJUST EXPONENT
	PAGE
	PUSHJ	CR,P57Y;	UNPACK EXP.
	CALL	S76;	AND COMPARE WITH FINAL VALUE
	JUMPE	A,P39.11;	RESULT IN A--FINI IF EQUAL

	XOR	A,PK15;	IS INCREMENT COMPATIBLE
	TLNN	A,400000;	WITH INITIAL AND FINAL VALUES?
	PUSHJ	CR,E23;	NO
	MOVE	A1,PK15;	YES; FETCH INCREMENT
	MOVE	A2,PK16;
	JUMPN	A1,.+2;
	PJ	E23;	ZERO INCREMENT NOT ALLOWED HERE.
	PUSHJ	CR,P63X;	TACK ON INCREMENT
	MOVE	A1,B1;
	MOVE	A2,B2;
	PUSHJ	CR,P63X;	TACK ON FINAL VALUE
	JRST	0,P39.11;
P39.2:	HLRZ	B1,1(DS);	FLAG LAST ELEMENT
	HRLZI	B2,400000;	AS END OF RANGE ITEM
	IORB	B2,1(B1);
	HLRZ	B2,B2;
	TRZ	B2,400000;	LOOK AT EXP PART
	CAMN	B2,MASK9;	TV?
	TVSET;	YES; TEST VALIDITY.
	CAMN	CC,T51.4;	IS CC A COMMA
	JRST	0,P39.1;	YES--CONTINUE
;			NO::LHS + ROV BECOMES FOR-CLAUSE
	MOVE	B1,DS;	SAVE POINTER TO ROV DESC.(ATOP DS)
	HRRZ	DS,1(DS);	POP IT WITHOUT RELEASING SPACE.
	MOVE	B2,(DS);	POINTER TO LHS.(NOW ATOP DS)
	HRLM	B2,(B1);	JOINS ROV POINTER TO MAKE FOR-CLAUSE HEADER
	HRRM	B1,(DS);	DS TOP BECOMES FOR-CLAUSE DESC.
	MOVE	B1,TYPE10;
	HRLM	B1,(DS);
	HLR	B,CP;	GET CALLER
	M52	PS,CP;	RESTORE ORIG.STATE
	JRST	(B);	DONE.
	SUBTTL   P38E -- LOOKING FOR PART OR STEP SPEC.
;	BEHAVES LIKE P38

P38E:	HRRZM	B,UX1;
	INVOKE	P51;	WHAT IS NEXR?
	HLRZ	A1,CC;
	CAMN	CC,T51.25;	STEP?
	J	P38.0;	YES
	CAMN	CC,T51.26;	PART?
	J	P38.0;	YES
	JRST	@UX1;	NO
	SUBTTL   P38L  -- LOOKING FOR "ITEM-LIST", ETC.
;	BEHAVES LIKE P38

P38L:	HRRZM	B,UX1;
	INVOKE	P51;	WHAT IS NEXT?
		HLRZ	A1,CC;
	CAMN	A1,TYPE15;	SINGULAR NOUN?
	J	.+3;	YES
P38L.1:	F	B,UX1;
	J	1(B);	NO SOAP.
	HRRZM	CC,PK36;	SAVE OBJECT CODE
	INVOKE	P51;
	CAME	CC,T51.2;	FOLLOWED BY DASH?
	J	P38L.1;	NO
	JN	B1,P38L.1;	NO LEADING SPACES
	INVOKE	P51;
	CE	CC,T51.30;	"LIST"?
	J	P38L.1;
	JN	B1,P38L.1;
	INVOKE	P51;
	J	@UX1;	FOUND - CODE IN PK36

	SUBTTL   P38--LOOKING FOR OBJECTS-OF-DISCOURSE
;	JSP B,P38
;	RETURN IF FIRST TERM. CHAR. SEZ NO OOD (CC=CHAR.)
;	RETURN WITH OOD COMPILED
	;		PK36 = OOD CODE
;		PK37,38 = OBJECT NR IF APPLICABLE
;		PK39 = LINK TO HEADER PREDECESSOR,LINK TO HEADER
;		PK40 = LINK TO PART PREDECESSOR,LINK TO PART

P38:	HRRZM	B,UX1;
	INVOKE	P51;	NEXT CHAR.
	HLRZ	A1,CC;	WUAT DO WE HAVE?
	CN	CC,T51.32;	"FORMULA"?
	J	P38F;	YES; TREAT INDIVIDUALLY.
	CAMN	A1,TYPE15;	SINGLETONS?
	J	P38.0;	YES
	CAMN	A1,TYPE17;	"ALL" ?
	J	P38.0;	YES
	J	@UX1;	CAN NOT BE OOD
P38.0:	SETZB	A2,PK36;	CODE FOR "ALL"
	SETZM	PK37;
	SETZM	PK38;
	CAMN	A1,TYPE15;
	J	P38.1;	SINGLETONS
	INVOKE	P51;	CC = NEXT TERM. CHAR
	CN	CC,U3;	DONE IF CC IS EXPECTED ENDING
	JRST	P38.9;
	CN	CC,T51.4;	OR COMMA.
	J	P38.9;
	JUMPN	B1,.+2;	SPACES?
	PJ	E5;	NO, EH.
	HLRZ	A1,CC;	IS CC A PLURAL NOUN
	CAME	A1,TYPE16;
	J	P38.9;	NO; DONE.
	HRRM	CC,PK36;	YES; SAVE OOD DESC.

	INVOKE	P51;	FETCH NEXT TERMINAL CHARACTER
	JRST	P38.9;	AND DONE.
P38.1:	ADD	CC,K22;
	HRRM	CC,PK36;	OOD CODE = CODE + SINGULAR OFFSET.
	HRRZ	CC,CC;	IS THIS A
	SUB	CC,K22;	REASONABLE PHRASE?
	CAILE	CC,3;
	PJ	E5;	INADMISSIBLE.
	MOVE	B2,U1;	SAVE POINTER
	INVOKE	P51;	CC = NEXT TERM. CHARACTER
	JUMPN	B1,.+2;	SPACES?
	PJ	E5;	NO, EH.
	HLRZ	A2,CC;
	CE	A2,TYPE12;	IS CC A JNF LITERAL?
	JRST	P38.2;	NO
	F	A1,PK4;	YES; FETCH DP
	F	A2,PK5;	AND XP.
	INVOKE	P51;	LOOK AT NEXT TERM. CHAR.
	PAGE
	LDB	A,BYTE4;
	CE	A,TYPE14;	A WORD?
	J	.+3;	NO
	JN	B1,.+6;	MUST HAVE LEADING SPACES.
	PJ	E5;
	CN	CC,T51.4;	A COMMA?
	J	.+3;	YES
	CE	CC,U3;	EXPECTED ENDING?
	JRST	P38.2;	NO
	JUMPGE	A1,P38.3;	TOO MANY DIGITS?
	PJ	E24;	YES.
P38.2:	HRRZ	A,PK36;	OOD CODE
	HRL	A,TYPE11;
	DPB	A,BYTE16;	OOD DESC.
	HLLZ	A,A;
	M53	A,DS,E3;	ON DS
	MOVEM	B2,U1;	RESTORE POINTER
	JSP	B,P49;	EVALUATE EXPRESSION.
	INVOKE	P53;	POP/TEST RESULT.
	TVJNF  ;
	M52	DS,A;	OK -- RESTORE
	LDB	A,BYTE16;	OOD CODE
	M	A,PK36;	RESTORED
P38.3:	MOVEM	A1,PK37;	SAVE OBJECT NR
	MOVEM	A2,PK38;
	PJ	P70;	LOOK FOR OBJECT
	PJ	E32;	BAD OBJECT NR.
	PJ	E31;	CAN NOT FIND IT.
P38.9:	F	B,UX1;
	J	1(B);
	SUBTTL	P38X -- COMPILE OOD AND DESCRIPTOR
P38X:	HRRZM	B,UX3;
	F	A,U1;	HOLD PTR.
	JSP	B,P38;	OOD?
	J	P38X.2;	NO
	HRR	A,PK36;	OOD CODE
	HRL	A,TYPE11;
	DPB	A,BYTE16;
	HLLZ	A,A;	OOD DESC.
	SKIPN	PK37;	OBJECT NR.?
	J	P38X.1;	NO
	F	A1,PK37;
	HRLZ	A2,PK38;
	M55	A1,A2,E3;	COPY IN USER'S BLOCK
	HRR	A,A2;
P38X.1:	M53	A,DS,E7;	DESC. ONTO DS
	F	B,UX3;
	J	1(B);
P38X.2:	M	A,U1;	RESTORE POINTER
	J	@UX3;
		SUBTTL	P38F--EXPLICIT EXPRESSIONS FOR FORMULAS
P38F:	INVOKE	P51;	NEXT CHARACTER
	TLNE	CC,777777;	IS IT A LETTER
	PJ	E5;	NO; EH.
	HRRZM	CC,PK37;	DICTIONARY ADDRESS
	MOVE	A,(CC);	LOOK AT ENTRY
	HLRZ	A1,1(CC);
	CAME	A1,LEVEL;	DEFINED AT THIS LEVEL?
	PJ	E6;	NO
	LDB	A1,BYTE2;	
	CAMN	A1,TYPE6;
	PJ	E6;	NO
	CAME	A1,TYPE4;	IS IT A FORMULA
	PJ	E5;	NO.
	INVOKE	P51;	YES; FETCH NEXT TERM. CHAR.
	FI	A,13;
	M	A,PK36;	CODE FOR FORMULA
	F	B,UX1;	FINI
	J	1(B);

	SUBTTL	P37--COMPILE LEFT SIDES FOR DELETION
P37:	HRRZM	B,UX1;
	PUSH	CR,U1;	HOLD POINTER.
	INVOKE	P51;	NEXT CHAR.
	TLNE	CC,777777;	LETTER?
	PJ	E5;	NO
	F	A,(CC);	DICT. ENTRY
	HLRZ	B2,1(CC);	DEFINED AT THIS LEVEL?
	CAME	B2,LEVEL;
	PJ	E6;	NO; NOT DEFINED!
	LDB	B2,BYTE2;	TYPE

	CAMN	B2,TYPE6;
	PJ	E6;
	MOVEM	CC,PK8;	SAVE DICTIONARY ADDRESS
	CAMLE	B2,TYPE4;	ACCEPTABLE?
	PJ	E5;	NO
	J	.+1(B2);	WHAT HAVE WE?
	J	.+3;	TV
	J	.+2;	JNF
	J	P37.1;	ARRAY
	INVOKE	P51;	FORMULA... GET NEXT CHARACTER
	HRR	A,PK8;
	HRL	A,TYPE21;	DESC. FOR ASSIGNMENT ADDRESS
	M53	A,DS,E3;	ONTO DS
	POP	CR,A;
	J	@UX1;
P37.1:	POP	CR,U1;	RESTORE POINTER
	JSP	B,P40;	COMPILE LHS
	PJ	E5;	NONE
	PUSH	CR,CC;	HOLD DELIMITING CHARACTER
	F	A1,(DS);	LINK TO LHS
	PJ	S63X;	EXPAND IT
	F	A1,(DS);
	F	A1,(A1);	DICT ADDRESS OF LHS
	HRRZM	A1,PK9;
	F	A,(A1);	DICT. ENTRY
	M	A,PK8;
	SKIPN	T48;	ANY SUBSCRIPTS?
	J	P37.2;	NO
	HLRZ	B2,1(A);	YES; DOES DIM. = NR OF SUBSCRIPTS?
		CE	B2,T48;
	PJ	E10;	NO
	PJ	P56;	DOES ELEMENT EXIST?
	PJ	E10;	NO
	PAGE
	F	CC,U2;
	CAIN	CC,4;	FILING?
	J	P37.2;	NO
	F	A1,(A);	YES; FETCH COMPONENT
	HLR	A2,1(A);
	PJ	P57Z;  	CONVERT EXP.,STORE IF JNFDESC. TO A
	XCH	A,(DS);	STACK BELOW LHS DESC.
	M53	A,DS,E7;
P37.2:	POP	CR,CC;	RESTORE DELIMITER
	J	@UX1;


	SUBTTL	P36  --  FUNCTIONALS
;	REGISTER "A" CONTAINS DESCRIPTOR OF FUNCTIONAL

P36:	PJ	P55;	DOES LEFT GROUPER FOLLOW HARD?
	J	P49.22;	NO; BUT MAY BE OK
	M53	CP,PS,E3;	YES; PUSH CP TO SAVE:
	HRL	CP,A;	FUNCTIONAL CODE AND
	HRR	CP,CC;	GROUPER CODE.
	F	A,U1;
	HLRZ	A1,CP;
	CAIE	A1,4;	"FIRST"?
	J	P36.01;	NO
	M53	A,PS,E3;	YES; SAVE POINTER
	J	P36.0;
P36.01:	INVOKE	P51;	NEXT TERMINAL CHAR.
	TLNN	CC,777777;	LETTER?
	J	.+3;	YES
	M	A,U1;	NO; RESTORE POINTER
	J	P36.9;	ASSUME LIST OF ITEMS.
	PJ	P55;	FOLLOWED HARD BY LEFT GROUPER?
	J	P36.11;	NO
	F	A1,CC;	YES; HOLD THE GROUPER
	FI	A2,1;	START GROUPER-LEVEL COUNT
P36.10:	INVOKE	P51;	NEXT TERMINAL CHAR.
	CN	CC,U3;	EXPECTED ENDING?
	PJ	E5;	YES; EH.
	CN	CC,T51.5;	EOS?
	PJ	E5;	YES
	LDB	B2,BYTE4;	CLASS OF NEXT TERM. CHAR.
	CAIE	B2,2;	LEFT GROUPER?
	J	.+2;	NO
	AOJA	A2,P36.10;	YES; KEEP GOING
	CAIE	B2,10;	RIGHT-GROUPER CLASS?
	J	P36.10;	NO; KEEP GOING
	TRNE	CC,777776;	RIGHT GOUPER?
	J	P36.10;	NO
	SOJG	A2,P36.10;	DECREMENT COUNT
	CE	CC,T54(A1);	BASE LEVEL; MATCH?
	PJ	E12;	NO
P36.11:	INVOKE	P51;	LOOK AT NEXT TERM. CHAR.
	M	A,U1;	RESET POINTER
	CN	CC,T51.6;	IS NEXT AN EQUAL SIGN?
	J	P36.0;	YES; ASSUME RANGE OF VALUES
	PAGE
P36.9:	HRR	CC,CP;
	HRLI	CC,10;	CC DESCRIBES LEFT GROUPER
	HLRZ	A,CP;
	LSH	A,1;
	ADDI	A,T47.2-T47;
	HRL	A,TYPE5;	A DESCRIBES APPROPRIATE FUNCT.
	M52	PS,CP;	RESTORE CP
	JSP	B,P42;	COMPILE GROUPED LIST
	M	A,PK8;	SAVE FUNCTION DESC.
	J	P43;	AND FIRE THE FUNCTION.

P36.0:	JSP	B,P39;	COMPILE FOR-CLAUSE
	CE	CC,T51.14;	IS IT FOLLOWED BY A COLON
	PJ	E5;	NO
	HRR	A,(DS);
	HLR	A,(A);	LINK TO LHS
	HRRZ	A,(A);	LHS DICTIONARY ENTRY.
	AOS	U6;
	PJ	P58;	PUSH IT!
	HRL	A,TYPE7;	DUMMY LETTER DESC.
	XCH	A,(DS);	ONTO DS BEFORE FOR-CLAUSE DESCRIPTOR
	M53	A,DS,E7;
	F	A,U1;	FETCH POINTER (POINTS AT COLON)
	F	B,FPDL;	STACK IT ON FPDL.
	HLL	B,CP;	WITH FCTL. CODE
	M53	A,B,E3;
	HRRZM	B,FPDL;
	F	B,(DS);
	HRRZM	B,PK29;	SAVE LINK TO FOR CLAUSE.
	HLRZ	A1,CP;	FCTL CODE
	XCT	P36.3(A1);	FETCH APPROPRIATE INITIAL VALUES
	XCT	P36.4(A1);
	PJ	SP1.2;	SAVE INITIAL ACCUMULATORGEN DESC. IN A
	PAGE
P36.1:	M53	A,DS,E7;	STACK THE DESCRIPTOR
P36.2:	MOVE	A,PK29;	FOR-CLAUSE LINK
	PJ	S63;	UNRAVEL LHS AND RHS.
	SKIPN	PK19;	DO NOT ALLOW TRUTH VALUES
	TVJNF;
	HLRZ	A1,CP;
	CAIE	A1,4;	"FIRST"?
	J	P36.21;	NO
	F	A2,(DS);	YES; SAVE ITERATION VALUE
	F	A1,PK20;
	M	A1,(A2);
	F	A1,PK21;
	HRLM	A1,1(A2);
P36.21:	PJ	P67;	SET LHS TO RHS
	PJ	E3A;	OUT-SIZE
	F	B,FPDL;	NEXT
	F	B,(B);	SET POINTER AT COLON.
	M	B,U1;
	JSP	B,X47;	ACKNOWLEDGE RECALLS AND IN-REQU
	OCT	7;
	JSP	B,P49;	EVALUATE THE EXPRESSION.
	CE	CC,T54(CP);	ENDED BY PROPER RIGHT GROUPER?
	PJ	E5;	NO.
	F	A,1(DS);	YES; FETCH
	F	A,1(A);	LINK TO
	F	A,(A);	FOR-CLAUSE
	HRRZM	A,PK29;	HOLD IT.
	PJ	P71;	ADVANCE FOR-CLAUSE ROV.
	HLRZ	A,CP;
	CAIN	A,4;	"FIRST"?
	J	P36.12;	YES
	INVOKE	P54;	POP EXPRESSION VALUE
	TVJNF	;
	INVOKE	P53;	AND ACCUMULATOR.
	TVJNF	;
	HLRZ	A,CP;	FCTL CODE
	XCT	P36.5(A);	FIRE APPROPRIATE OPERATION
	HRRZ	B1,@PK29;	ANY MORE ON ROV?
	JN	B1,P36.1;	YES; KEEP GOING.
	PAGE
P36.14:	M	A,PK29;	NO HOLD RESULT DESCRIPTOR
	F	B,FPDL;
	M52	B,A;	POP FPDL
	HRRZM	B,FPDL;
	SOS	U6;
	M52	DS,A;
	PJ	P69;	RELEASE FOR CLAUSE.
	M52	DS,A;
	PJ	P69;	POP DUMMY 
	M52	PS,CP;	RESTORE CP
	F	A,PK29;	FETCH RESULT DESCRIPTOR
	J	P49.9;	AND RE-ENTER AT END OF CONTEXT I
P36.3:	SETZ	A2,0;
	SETZ	A2,0;
	MOVE	A2,K5;
	MOVE	A2,K5;
	SETZ	A2,0;
P36.4:	SETZ	A1,0;
	MOVE	A1,K15;
	MOVE	A1,K33;
	MOVE	A1,K31;
	SETZ	A1,0;
P36.5:	PJ	SP1;
		PJ	SP3;
	PJ	P36.6;
	PJ	P36.7;
P36.6:	CALL	S76;
	JGE	A,SP1.2;
	J	P36.8;
P36.7:	CALL	S76;
	JLE	A,SP1.2;
	PAGE
P36.8:	MOVE	A1,B1;
	MOVE	A2,B2;
	J	SP1.2;
P36.12:	INVOKE	P53;	POP RESULT
	SKIPA;		SHOULD BE TV

	JNFTV;
	HRRZ	B1,@PK29;
	JN	A1,P36.13;	TRUE; DONE.
	JN	B1,P36.2;	FALSE; CONTINUE IF MORE
	PJ	E50;	ESLE ERROR
P36.13:	M52	PS,CP;	THROW OUT POINTER
	M52	DS,A;	POP RESULT DESCRIPTOR
	J	P36.14;
	SUBTTL	P35 -- EVALUATE CONDITIONAL EXPRESSIONS
		;	JSP	B,P35

P35:	HRL	B,B;
	HRR	B,K10;
	M53	B,PS,E3;	SAVE CALLER
MP1.1:	CE	CC,T51.14;	COLON?
	PJ	E12;	NO
	INVOKE	P53;	YES; LOOK AT LAST EXPRESSION.
	SKIPA	;	SHOULD BE TV
	PJ	SIN1;
	JN	A1,MP1.5;	TRUE OR FALSE?
	FI	A1,1;	FALSE; PREPARE TO SKIP OVER NEXT EXP.
MP1.2:	PJ	S50;	NEXT BYTE
	CAIL	CC,SP;	SPACE OR WORD?
	J	MP1.2;	YES
	LDB	A2,BYTE14;	NO; TAKE A CLOSER LOOK
	J	.+1(A2);
	J	MP1.2;	UNIMPORTANT
	PJ	E12;	EOS
	SOJE	A1,MP1.4;	SEMI-COLON DONE IF CORRECT ONE.
	AOJA	A1,MP1.2;	LEFT GRPR; UP PAREN LEVEL.
	J	MP1.3;	RIGHT GRPR
	PJ	E5;	ALPHA
	PJ	E5;	OMEGA1
	PJ	E5;	OMEGA2
MP1.3:	SOJG	A1,MP1.2;	CONTINUE IF PAREN LEVEL NOT ZERO
	PJ	E5;	OTHERWISE, ILL-FORMED.
MP1.4:	F	A,U1;
	M53	A,PS,E3;	SAVE POINTER
	JSP	B,P49;	NEXT EXPRESSION
	M52	PS,A;	POP OLD POINTER
	PAGE
	M	A,UP12;	AND HOLD IT.
	CE	CC,T54(CP);	MATCHING RIGHT GRPR?
	J	MP1.1;	NO
MP1.41:	SKIPL	U6;	ARE WE TYPING AT ZERO LEVEL?
	J	P35.9;	NO; FINI.
	FI	CC,ALPHA;	YES; MARK BEGINNING OF EXP.
		DPB	CC,UP12;
	FI	CC,OMEGA1;
	DPB	CC,U1;	AND END OF EXP.
	J	P35.9;	FINI
MP1.5:	F	A,U1;
	M53	A,PS,E3;	SAVE POINTER
	JSP	B,P49;	NEXT EXPRESSION
	M52	PS,A;	POP OLD POINTER
	M	A,UP12;	HOLD OLD POINTER
	CN	CC,T54(CP);	MATCHING RIGHT GRPR?
	J	MP1.41;	YES
	CE	CC,T51.23;	SEMI-COLON?
	PJ	E5;	NO
	SKIPL	U6;
	J	MP1.6;	NO
	FI	CC,ALPHA;	YES MARK BEGINNING
	DPB	CC,UP12;
	FI	CC,OMEGA2;	AND END
	DPB	CC,U1;	OF EXPRESSION
MP1.6:	FI	A1,1;	PREPARE TO SKIP TO END OF CONDITIONAL
MP1.7:	PJ	S50;	NEXT BYTE
	CAIL	CC,SP;	SPACE OR WORD?
	J	MP1.7;	YES
	LDB	A2,BYTE14;	CLOSER LOOK.
	XEC	MP1.8(A2);
	F	CC,T51(CC);	RETURN IF RIGHT GROUPER
	CE	CC,T54(CP);	MATCH?
	PJ	E12;	NO
P35.9:	XCH	CP,(PS);	TO HOLD CURRENT CP
	J	MP8;	RETURN TO CALLER
	PAGE
MP1.8:	J	MP1.7;	UNIMPORTANT
	PJ	E12;	EOS
	J	MP1.7;	SEMI-COLON
	AOJA	A1,MP1.7;	LEFT GRPR.
	SOJG	A1,MP1.7;	RIGHT GROUPER
	PJ	E5;	ALPHA
	PJ	E5;	OMEGA1
	PJ	E5;	OMEGA2
	SUBTTL	MP1 THRU MP8: FIRST LEVEL PROCESSORS
;	THESE ARE FIRED DIRECTLY FROM CONTEXT II VIA T55

;		MP1 FOR LEFT GROUPERS

MP1:	CN	CC,T54(CP);	MATCHING RIGHT GROUPER?
	J	MP1.0;	YES
	JSP	B,P35;	NO; EVALUATE CONDITIONAL EXPRESSION
MP1.0:	M52	PS,CP;	YES; POP PROCESSOR STACK
	LDB	B2,BYTE17;
	CAIG	B2,1;	SCALAR?
	J	P48;	YES; TO CONTEXT II
	J	P49.23;	NO; CHECK CONTEXT.


;		MP2 FOR ABSOLUTE VALUE SIGN

MP2:	CAME	CC,CP;	MATCH?
	PJ	E13;	NO
	INVOKE	P53;	ARGUMENT TO A1,A2
	J	.+2;	TV -- TREAT AS JNF
	XCT	T57(CP);	JNF; FIRE SUB-PROCESSOR
	M52	PS,CP;	POP PROCESSOR
	JRST	P49.8;	ENTER CONTEXT II AFTER STORING/STACKING A

;		MP3 FOR BINARY ARITH.

MP3:	INVOKE	P54;	ARG. B TO B1,B2
	TVJNF	;	TV

	PAGE
;		MP4 FOR UNARY ARITH.

MP4:	INVOKE	P53;	ARG. A TO A1,A2
	TVJNF	;	TV
	XCT	T57(CP);	JNF--FIRE CP'S SUB-ROUTINE
MP4.1:	M53	A,DS,E7;	STACK RESULT DESCRIPTOR
	M52	PS,CP;	POP PROC. STACK
	JRST	0,P48.6;	TO WEIGHT TEST IN CONTEXT II
	PAGE
;		MP5 FOR BINARY LOGIC

MP5:	INVOKE	P54;	ARG. B
	SKIPA	;	TV
	JNFTVB	;	JNF

;		MP6 FOR UNARY LOGIC

MP6:	INVOKE	P53;	ARG. A
	SKIPA	;	TV
	JNFTV	;	JNF
	XCT	T57(CP);	FIRE CP'S SUB-ROUTINE--RESULT IN A2
	MOVE	A,K1;	ASSUME FALSE.
	JE	A1,MP4.1;	IT IS.
	MOVE	A,K2;	IT IS TRUE.
	JRST	0,MP4.1;

;		MP7 FOR RELATIONS

MP7:	INVOKE	P54;	ARG. B
	J	MP7.00;	TV
	SETZM	PK20;	JNF; NOTE THE FACT!
	INVOKE	P53;	GET ARGUMENT A.
	J	MP7.01;	MIXED
	J	MP7.3;	BOTH JNF.
MP7.00:	M	A,PK20;	SAVE DESCRIPTOR
	INVOKE	P53;	ARG. A
	J	MP7.2;	BOTH TV
MP7.01:	CAMN	CP,T51.6;	MIXED; VALID?
	J	MP7.31;	YES
	CAMN	CP,T51.61;
	J	MP7.11;
	J	MP7.21;	NO
MP7.11:	F	A,K2;	TRUE!
	J	MP7.31+1;
MP7.2:	CAMN	CP,T51.6;	EQUALITY CHECK?
	J	MP7.3;	YES
	CAME	CP,T51.61;	INEQUALITY?
MP7.21:	TVJNF;	NO
MP7.3:	CALL	S76;	COMPARE ARGUMENTS, RESULT IN A
	PAGE
	MOVE	B,A;
	MOVE	A,K2;	ASSUME RELATION HOLDS
	XCT	T57(CP);	FIRE SUB-ROUTINE
MP7.31:	MOVE	A,K1;	FALSE!
	HLRZ	B,CC;	TRUE--IS CC A RELATION
	CAIE	B,7;
	JRST	0,MP4.1;	NO--FINI
	M53	A,DS,E7;	YES--STACK A
	F	A,PK20;
	JN	A,MP7.4;	TV - USE THIS DESCRIPTOR
	M56	B1,B2,E3;	STORE OPERAND B
	HRR	A,B2;	GENERATE JNF DESCRIPTOR
	HRL	A,TYPE2;	     IN A
MP7.4:	M53	A,DS,E7;	AND STACK IT.
	MOVE	CP,T51.3;	CP BECOMES "AND"
	XCT	T55(CC);	LEAVE CONTEXT II UNDER CC'S CONTROL

;		MP8 FOR BACK-STOP CHARACTER

MP8:	HLR	B,CP;	EXTRACT CALLER
	M52	PS,CP;	POP PROC. STACK
	JRST	0,(B); 	RETURN TO CALLER
	SUBTTL   SP1 THRU SP21--SECOND LEVEL PROCESSORS

;		SUB PROCESSORS FOR JNF ARITHMETIC AND
;		FOR FUNCTIONS.
;		PUSHJ CR,SPI

SP1:	JADD;
SP1.1:	IOR	A1,A;	PACK SIGN/MAG.
	CAMLE	A2,K5;	TEST EXP.
	PUSHJ	CR,E14;	HI
	CAMGE	A2,K6;
	SETZB	A1,A2;	LO

SP1.2:	M56	A1,A2,E3;	STORE
	HRR	A,A2;	GENERATE JNF DESCRIPTOR
	HRL	A,TYPE2;	      IN A
	POPJ	CR,0;	DONE

SP2:	JSUB	;	JNF A-B
	JRST	0,SP1.1;

SP3:	JMPY	;	JNF A TIMES B
	JRST	0,SP1.1;

SP4:	JDIV	E15;	JNF A/B  -  TO E15 IF A/0
	JRST	0,SP1.1;

SP5:	JPWR	E16,E14,E17;	JNF A*B
	JRST	0,SP1.1;
	PAGE
SP6:	M58<JSQRT(E18)>;
SP7:	M58<JEXP(E14)>;

SP8:	M58<JLOG(E19)>;

SP9:	M58<JSIN(E20)>;

SP10:	M58<JCOS(E21)>;

SP11:	INVOKE	P54;	ARG(A,B)
	TVJNF;
	M58<JARG>;

SP12:	M58<JIP>;
	PAGE
SP13:	M58<JFP>;
SP14:	M58<JDP>;

SP15:	M58<JXP>;

SP16:	M58<JSGN>;

SP17:	HRREI	B,-1;	MAX;  SET COMPARATOR TO -1
	SKIPA	;

SP18:	MOVEI	B,1;	MIN;  SET COMPARATOR TO 1
	MOVEM	B,PK18;
	SOSG	T48;
	PJ	E5;	EH? IF ONLY ONE ARGUMENT
	INVOKE	P54;	FIRST ARG. TO B1,B2
	TVJNF;		TV
SP18.1:	MOVE	A1,B1;	RESULT MOVED
	MOVE	A2,B2;	    TO A1 A2
SP18.2:	SOSGE	T48;	DEC. AND TEST ARG. COUNT
	JRST	0,SP1.2;	FINI
	INVOKE	P54;	MORE  -  NEXT ARG. TO B1,B2
	TVJNF;
	CALL	S76;	COMPARE ARGUMENTS
	CAME	A,PK18;	MATCH WITH COMPARATOR
	JRST	0,SP18.2;	(A1,A2) IS RESULT
	JRST	0,SP18.1;	(B1,B2) IS RESULT
	PAGE
SP19:	INVOKE	P53;	TV FUNCTION
	J	SP1.2;
	F	A,K1;	JNF -- CONVERT TO TV
	JE	A1,.+2;
	F	A,K2;
	POPJ	CR,0;

SP20:	SETZ	A1,0;	SUM; START WITH ZERO
	SKIPA	;
SP21:	MOVE	A1,K15;	PRODUCT; START WITH UNITY
	M	A1,PK18;
	SOSG	T48;
	PJ	E5;	EH? IF ONLY ONE ARGUMENT
	SETZ	A2,0;
SP21.1:	INVOKE	P54;	NEXT OPERAND
	TVJNF	;
	SKIPE	PK18;
	J	SP21.2;	PRODUCT
	JADD	;	SUM
	J	SP21.3;
SP21.2:	JMPY	;
SP21.3:	IOR	A1,A;
	CLE	A2,K5;	TEST EXP.
	PJ	E14;	HI
	CGE	A2,K6;
	SETZB	A1,A2;	LO
	SOSGE	T48;	ANY MORE ARGUMENTS?
	J	SP1.2;	NO
	J	SP21.1;	MORE.


	SUBTTL   P51 -- FETCH NEXT CHARACTER TO CC
;		FETCH NEXT TERMINAL CHARACTER TO CC
;		U1 = POINTER TO CURRENT BYTE
;		    INVOKE P51; B1 = 0 IF NO LEADING SPACES

	INTERN	P51;

P51:	SETZ	B1,0;	ASSUME NO SPACES
P51.1:	ILDB	CC,U1;	CURRENT BYTE
P51.2:	MOVE	CC,T51(CC);	ITS DESCRIPTOR

	JUMPL	CC,P51.3(CC);	JUMP IF ACTIVE DESCRIPTOR
	RTN;		FINI IF PASSIVE
P51.3:	AOJA	B1,P51.1;	SPACE OR TAB
		JRST	P51.4;	DIGIT OR DOT
	JRST	P51.32;	UNDERSCORE
	HRRZ	CC,@U1;	EOC; LINK TO NEXT CELL
	JUMPE	CC,P51.31;	NULL LINK
	HRLI	CC,341000;	POINT AT FIRST BYTE
	MOVEM	CC,U1;	RESTORE POINTER
	LDB	CC,CC;	CURRENT BYTE
	MOVE	CC,T51(CC);	AS P51.2
	JUMPL	CC,P51.3(CC);
	RTN;
P51.31:	HRLI	CC,241000;	RESET POINTER TO
	HLLM	CC,U1;	POINT TO EOC
	F	CC,T51.5;	FETCH EOS DESCRIPTOR
	RTN;		AND FINI.
P51.32:	PUSH	CR,U1;	HOLD PTR.
	PJ	S50;	ACCEPT STRING OF UNDERSCORES
	CAIE	CC,UNDER;
	J	P51.33;
	POP	CR,CC;
	J	P51.32;
P51.33:	POP	CR,U1;
	F	CC,K40;	UNDERSCORE DESCRIPTOR
	RTN;
	PAGE
;	NOW ASSEMBLE UPCOMING JNF LITERAL

P51.4:	MOVEM	B1,PK1;	SAVE B-BANK
	MOVEM	B,PK2;
	MOVEM	B2,PK3;
	SETZB	B1,PK4;	X=LEFT=0
	SETZB	B,PK5;	SIGDIGS=RIGHT=0
	SETZM	PK6;	DIGS=0
	LDB	CC,U1;
	CAIE	CC,DOT;	DIGIT OR DOT?
	J	P51.5;	DIGIT
P51.41:	MOVE 	B2,U1;	SAVE POINTER
	PJ	S50;	NEXT BYTE
	CAILE	CC,11;
	J	P51.6;	NON-DIGIT
	AOS	PK6;	ANOTHER DIGIT
	JE	B,P51.42;	ANY SIG DIGS?
	CAIGE	B,11;	YES; HOW MANY?
	J	P51.43;	LESS THAN NINE.
	JE	CC,P51.41;	NINE; IGNORE TRAILING ZEROES.
	AOJ	B,P51.41;	COUNT AND IGNORE
P51.42:	AOS	PK5;	ONE MORE RIGHT OF DIT
	JE	CC,P51.41;	LEADING ZEROES
P51.43:	IMULI	B1,12;
	ADD	B1,CC;	X=10*X+CC
	ADDI	B,1;	ONE MORE SIG DIG
	J	P51.41;
P51.5:	MOVE	B2,U1;	SAVE POINTER
	J	P51.52;	AND MERGE 
P51.51:	MOVE	B2,U1;
	PJ	S50;	NEXT BYTE
	CAILE	CC,11;
	J	P51.56;	NON-DIGIT
P51.52:	AOS	PK6;	
	JE	B,P51.53;	NO SIG DIGS
		CAIGE	B,11;	HOW MANY SIGDIGS?
	J	P51.54;	LESS THAN NINE
	JE	CC,P51.55;	TRAILING ZEROES.
	AOJ	B,P51.55;	COUNT AND IGNORE
P51.53:	JE	CC,P51.51;	LEADING ZEROES
P51.54:	IMULI	B1,12;
	ADD	B1,CC;
	ADDI	B,1;
P51.55:	AOS	PK4;
	J	P51.51;
P51.56:	CAIN	CC,DOT;
	J	P51.41;
	PAGE
P51.6:	MOVEM	B2,U1;	RESTORE PTR.
	CAILE	B,11;	HOW MANY SIGDIGS?
	J	P51.7;	TOO MANY
	IMUL	B1,P51.48(B);	NORMALIZE X
	EXCH	B1,PK4;	SAVE IT AND FETCH LEFT DIGS
	MOVE	B2,PK5;	RIGHT DIGS
	SETZM	PK5;	ASSUME ZERO
	SKIPN	PK4;
	J	P51.61;	ZERO!
	SOJGE	B1,.+2;	EXP = LEFT DIGS - 1
	MOVN	B1,B2;	NOPE; EXP = - RIGHT DIGS
	MOVEM	B1,PK5;	STORE EXP
P51.61:	HRLI	CC,1001;
	HRRI	CC,PK4;	JNF DESCRIPTOR
	F	B1,PK1;	RESTORE B BANK.
	F	B,PK2;
	F	B2,PK3;
	SKIPN	PK6;
	F	CC,T51.7;	CC=BAD MARK IF NO DIGITS
	RTN;
P51.7:	SETOM	PK4;	-1 AS SIGNAL FOR TOO MANY SIGDIGS
	J	P51.61;
P51.48:	DEC	0;
	DEC	100000000;
	DEC	10000000;

	DEC	1000000;
	DEC	100000;
	DEC	10000;
	DEC	1000;
	DEC	100;
	DEC	10;
	DEC	1;
	SUBTTL  P51X -- STRIP OFF STEP NUMBERS
;	PUSHJ   P51X;  RESULT STRING IN US1; NYTE COUNT IN B1

P51X:	F	B,SK8;
	SETZB	B1,B2;	B1 CNTS LEADING SPACES AND ZEROES
P51X.0:	ILDB	CC,B;	NEXT BYTE
	CAIGE	CC,SP;	SPACES?
	J	P51X.1;	NO
	CAILE	CC,SPS;
	J	P51X.1;	NO
	SUBI	CC,SP-1;	YES; COUNT THEM
	ADD	B1,CC;
	J	P51X.0;
P51X.1:	JN	CC,P51X.3;	ZERO?
	AOJA	B1,P51X.0;	YES; COUNT IT.
P51X.2:	ILDB	CC,B;	NEXT BYTE; WORKING ON IP
P51X.3:	CAIG	CC,11;	DIGIT?
	J	P51X.2;	YES
	CAIE	CC,DOT;	DOT?
	J	P51X.5;	NO; FINI.
	AOJA	B2,.+1;	YES; COUNT IT IN B2
P51X.4:	ILDB	CC,B;	NEXT BYTE; WORKING ON FP
	JE	CC,.-2;	COUNT ZEROES
	CAILE	CC,11;	DIGIT?
	J	P51X.5;	NO; FINI
	SETZ	B2,0;	YES; RESET COUNT OF TRAILING ZEROES
	J	P51X.4;
P51X.5:	M	B,U1;	PREPARE TO REQRITE SANS STEP NR.
	F	B,US1;
	SETZM	1(B);
	IDPB	B1,B;	SAVE COUNTS AS FIRST TWO BYTES
	IDPB	B2,B;
	IBP	B;	THIRD BYTE WILL CONTAIN INDEX OF "IF"
	F	B2,B;
	FI	B1,3;	COUNT NORM OF NEW STRING
	J	.+2;
P51X.6:	ILDB	CC,U1;	NEXT BYTE
	CAIN	CC,EOS;	EOS?
	AOJA	B1,P51X.7;	YES; FINI
	CAIN	CC,IF2;	NO; IS IT THE "IF"
	DPB	B1,B2;	YES; SAVE ITS INDEX
	IDPB	CC,B;	MOVE BYTE
	AOJA	B1,P51X.6;
P51X.7:	M	B,UP2;	SAVE PTR TO LAST BYTE
	IDPB	CC,B;	MOVE EOS
	LDB	CC,UP2;	IS LAST BYTE A PERIOD?
	CAIN	CC,PERIOD;
	POPJ	CR,0;	YES; DONE
	FI	CC,277;	NO
	DPB	CC,B2;	NO; MARK STEP AS IMPAIRED
	POPJ	CR,0;
	SUBTTL	P51Y   ENUF SPACE TO STORE STRING ?
;	PUSHJ   P51Y;  BYTE COUNT IN B1; ERROR IF NO SPACE.
P51Y:	ADDI	B1,7;
	IDIVI	B1,6;
	ADDI	B1,3;
	CAML	B1,SIZE;
	PJ	E3A;	NOT ENUF
	POPJ	CR,0;	OKAY


	SUBTTL	P52--PUSH CURRENT CHARACTER, FETCH NEXT
;		P52 PUSHES CURRENT PROCESS WITH CURRENT CHAR
;		FETCHES NEXT CHAR
;		INVOKE P52
;		TO E3 IF OUTSIZE
	INTERN	P52;

P52:	M53	CP,PS,E3;	STACK CP ON PS--TO E3 IF OUT-SIZE.
	MOVE	CP,CC;	CURRENT PROC = CURRENT CHAR.
	JRST	0,P51;	FETCH NEXT CC VIA P51.
	SUBTTL	P53, P54  --  POP AND TEST TOP OF DS
	;		POP DESCRIPTOR-STACK TO A
;		DESCRIPTEE TO A1,A2 (B1,B2) AS JNF
;		RELEASE CELL IF SCRATCH JNF
;		    INVOKE P5X
;		     RETURN IF TV
;		     RETURN IF JNF

	INTERN	P53,P54;

P53:	M52	DS,A;
	MOVE	A1,(A);	SIGN AND MAGNITUDE
	HLRE	A2,1(A);	EXPONENT
P53.1:	TLNN	A,17;	TEST OBJECT-TYPE
	RTN	;	TV
	TLNE	A,000016;
	PJ	E4;	NEITHER TV NOR JNF
	TLNE	A,776000;	JNF--IS IT SCRATCH
	JRST	0,P53.2;	NO
	M54	A;	YES--RELEASE CELL
P53.2:	SKRTN	;	SKIP RETURN

P54:	M52	DS,A;	DESCRIPTOR TO A
	MOVE	B1,(A);	SIGN AND MAGNITUDE
	HLRE	B2,1(A);	EXPONENT
	JRST	0,P53.1;
	SUBTTL	P55


;		IS NEXT CHAR. A LEFT GRPR. WITH NO LEADING BLANKS
;			PUSHJ  CR,P55
;			NO
;			YES
;		HIDES ORIG, BYTE PTR. IN PK7

	INTERN	P55;

P55:	MOVE	A1,U1;	SAVE BYTE POINTER.
	MOVEM	A1,PK7;
	INVOKE	P51;	FETCH CHAR.
	JUMPN	B1,P55.1;	LEADING BLANKS -- YES;
	HLRZ	A1,CC;	NO--IS CC
	CAIE	A1,2;	A LEFT GROUPER
	JRST	P55.1;	NO
	POP	CR,A1;
	J	1(A1);
P55.1:	MOVE	A1,PK7;
	M	A1,U1;	RESTORE POINTER ON FAILURE.
	POPJ	CR,0;
	SUBTTL	P56  --  SEARCH FOR COMPONENT OF ARRAY
;		PK8 = LINK TO ARRAY HEADER
;		T48 = NR. OF DIMENSIONS (LEVELS IN ARRAY STRUCTURE)
;		T48(I) = I-TH INDEX
;		PUSHJ CR,P56
;		NOT FOUND;   A1(A) = LINK TO PREDECESSOR (SUCCESSOR)
;		FOUND;   A = LINK TO COMPONENT
;		         A1 = LINK TO EITHER HEADER OR PREDECESSOR
;		T49 = NR. OF LEVELS SEARCHED
;		T49(I) = HEADER FOR I-TH LEVEL (LINK)
;		T49X(I) = PREDECESSOR OF INDEX IN I-TH LEVEL (LINK)

	INTERN	P56;

P56:	HRRZ	A,PK8;	TO HEADER
	MOVEI	B2,1;	I = 1
	SETZ	A1,0;	NULL PREDECESSOR FOR HEADER
P56.1:	MOVEM	B2,T49;	SAVE I
	MOVEM	A,T49(B2);	HEADER LINK
	MOVEM	A1,T49X(B2);	AND PREDECESSOR
	PUSHJ	CR,P57;	SEARCH THRU I-TH LEVEL
	JRST	P56.3;	NOT FOUND
	MOVE	B1,T49(B2);	FOUND; GET HEADER LINK
	HRLM	A,(B1);	SET LAST-USED LINK.
P56.2:	CAME	B2,T48;	DOES I = NR. OF DIMENSIONS
	AOJA	B2,P56.1;	NO; CONTINUE.
	POP	CR,A2;
	J	1(A2);
P56.3:	HRRZ	B1,T49(B2);	GET HEADER
	POPJ	CR,0;
	SUBTTL;	     P57
;		P57 SEARCHES ACROSS ONE LEVEL OF
;		ARRAY TREES.
;		A = LINK TO HEADER FOR LEVEL
;		B2 = LEVEL NR.
;		OTHERWISE, LIKE P56

	INTERN	P57;

P57:	HRRZ	A1,A;	OFF-SET HEADER LINK
	SUBI	A1,1;	TO FIT SEARCH ALGORITHM
	MOVE	B1,T48(B2);	DESIRED INDEX.
	HLRZ	A,1(A1);	TRY LAST-USED COMPONENT.
	JUMPE	A,P57.1;	NONE SUCH START WITH FIRST.
	F	A2,1(A);	FETCH AND
	AND	A2,MASK1 ;	MASK INDEX
	CAMG	A2,B1;	COMPARE
	JRST	P57.3;	RIGHT DIRECTION; ENTER MAIN STREAM
P57.1:	HRRZ	A,1(A1);	LINK TO NEXT COMPONENT
P57.2:	JUMPE	A,P57.21;	NO MORE
	MOVE	A2,1(A);	FETCH AND
	AND	A2,MASK1;	MASK INDEX
	CAMLE	A2,B1;	COMPARE
P57.21:	POPJ	CR,0;	NO GO; OVERSHOOT.
P57.3:	CAML	A2,B1;	IS THIS THE ONE.
	JRST	P57.4;	YES
	MOVE	A1,A;	NO; RECYCLE
	JRST	P57.1;
P57.4:	POP	CR,A2;
	J	1(A2);
	SUBTTL;	   P57X(Y)

;		CONVERTS PACKED INDEX (EXP) TO INTEGER
;		ARG. IN A2 (RIGHT)

	INTERN	P57X,P57Y;

P57X:	LSH	A2,INDEX-22;	POSITION INDEX
P57Y:	AND	A2,MASK2;	ASSUME POSITIVE
	CAML	A2,MASK9;	TEST SIGN
	ORCM	A2,MASK2;	NEGATIVE; CORRECT
	POPJ	CR,0;
	SUBTTL	P57Z;	PROCESS ARRAY COMPONENTS
;	CONVERT PACKED EXP., STORE IF JNF, DESC. TO A
	INTERN	P57Z;


P57Z:	AND	A2,MASK2;
	CN	A2,MASK9;	TV?
	J	P57Z.1;	YES
	CL	A2,MASK9;	JNF
	ORCM	A2,MASK2;	ADJUST NEG. EXP.
	M56	A1,A2,E3;	STORE
	HRR	A,A2;
	HRL	A,TYPE2;	JNF DESC.
	POPJ	CR,0;
P57Z.1:	F	A,K1;	ASSUME FALSE
	JE	A1,.+2;	IT IS.
	F	A,K2;	TRUE
	POPJ	CR,0;
	SUBTTL	P58 -- PUSH ASSIGNMENT TABLE ENTRY
;		COPY DICT. ENTRY (ADDRESS IN A) INTO FRESH CELL.
;		NEW ENTRY IS UNDEFINED AND CHAINED TO COPY OF OLD.
;		PUSHJ CR,P58

	INTERN	P58;

P58:	MOVE	A1,(A);	FETCH ENTRY
	MOVE	A2,1(A);
	M55	A1,A2,E3;	COPY IN AVAIL. CELL (ADD.IN A2)
	HRL	A2,LEVEL	;NEW ENTRY LEVEL; AND
	M	A2,1(A);	POINTER TO OLD ENTRY.
	HRRZ	A1,A;	GENERATE UNDEFINED DESCRIPTOR
	SUBI	A1,V;
	ROT	A1,-11;
	ADD	A1,K41;
	HLLZM	A1,(A);
	POPJ	CR,0;	RETURN
	SUBTTL	P59  --  POP DICTIONARY ENTRY

;		POP DICT. ENTRY WHOSE ADDRESS IS IN A.
;		PUSHJ CR,P59

	INTERN	P59;

P59:	HRRZ	A1,1(A);	POINTER TO NEXT.
	JUMPE	A1,P59.1;	NO WORK IF NONE
	MOVE	A2,(A1);
	MOVEM	A2,(A);	RECLAIM OLD ENTRY
	MOVE	A2,1(A1);
	MOVEM	A2,1(A);
	M54	A1;	RELEASE CELL
P59.1:	POPJ	CR,0;
	SUBTTL	P60  --  DELETE DICTIONARY ENTRY

;		EXAMINE DICT. ENTRY WHOSE ADDRESS IS IN A.
;		DECREMENTS USER COUNT FOR VOLATILE ITEMS
;		AND RELEASES SPACE IF COUNT BECOMES ZERO
;		ALWAYS LEAVES ENTRY UNDEFINED
;		PUSHJ CR,P60

	INTERN	P60;

P60:	MOVE	A1,(A);	GET DESCRIPTOR
	LDB	A2,BYTE1;	GET TYPE
	CAMLE	A2,TYPE4;	TEST TYPE
	JRST	0,P60.3;	NON VOLATILE
	JE	A2,P60.3;	TV'S NON-VOLATILE
	HRRZ	B1,1(A1);	FETCH USER COUNT
	SOJLE	B1,P60.1(A2);	DECREMENT -- READY FOR RELEASE.
	HRRM	B1,1(A1);	STILL IN USE.
P60.1:	JRST	0,P60.3;	TV -- NON VOLATILE
	JRST	0,P60J;	JNF
	JRST	0,P60A;	ARRAY
	JRST	0,P60C;	FORMULA
P60A:	MOVEM	A,PK11;	SAVE DESC.
	HLRZ	A2,1(A1);	FETCH DIMENSION.
		MOVEM	A2,PK10;
	PUSHJ	CR,P64;	RELEASE MATRIX (TREATED AS TREE)
	MOVE	A,PK11;	RESTORE DESC.
	MOVE	A1,(A);
	JRST	0,P60.3;
P60C:	PUSHJ	CR,P65;	RELEASE DOUBLE LIST
	JRST	0,P60.3;
P60J:	M54	A1;	RELEASE JNF CELL.
P60.3:	TLZ	A1,IDM;	ENTRY IS UNDEFINED
	HRLZ	A2,TYPE6;
	IOR	A1,A2;
	HLLZM	A1,(A);
	POPJ	CR,0;
	SUBTTL;	     P61

;		PEEL ITEMS OFF DS AS INDICES.
;		ITEM COUNT IN T48.  TOP OF DS TO T48(COUNT), NEXT TO
;		T48 (COUNT-1) AND SO ON.
;		PUSHJ CR,P61

	INTERN	P61;

P61:	MOVE	B1,T48;	SET I = COUNT.
P61.1:	INVOKE	P53;	POP/TEST DS
	TVJNF	;	TV
	CALL	S77;	JNF--CONVERT TO INDEX(LEFT IN A1) AND TEST.
	PJ	E9;	INVALID INDEX
	ROT	A1,-INDEX;	OKAY; POSITION INDEX
	AND	A1,MASK1;	MASK IT

	CAMG	B1,K29;
	M	A1,T48(B1);	AND STORE IT IFNOT TOO MANY.
	SOJG	B1,P61.1;	DECREMENT I AND RECYCLE
	POPJ	CR,0;
	SUBTTL	P62  --  RELEASE A RIGHT-LINKED LIST

;		B = LINK TO FIRST
;		PUSHJ CR,P62

	INTERN	P62;

P62:	HRRZ	B2,B;
	JUMPE	B2,P62.2;	EMPTY LIST
P62.1:	MOVE	B1,B2;
	CAIG	B1,USER0;	STAY IN USER'S AREA!
	PJ	KILL;
	CAML	B1,SPACE;
	PJ	KILL;
	AOS	SIZE;
	HRRZ	B2,1(B1);	LINK TO NEXT
	JUMPN	B2,P62.1;	MORE
	HRRM	ACL,1(B1);	FINI; LINK END TO FIRST AVAIL. CELL
	HRRZ	ACL,B;	AND ACL TO FIRST
P62.2:	POPJ	CR,0;
	SUBTTL;	     P63

;		P63 TESTS ARITH. VALIDITY OF TOP OF DS.
;		POPS AND TACKS ONTO LIST WHOSE HEADER
;		IS NEXT ON DS.
;		PUSHJ CR,P63

	INTERN	P63,P63X;

P63:	INVOKE	P53;	POP/TEST DS
	HRRZI	A2,400;	TV - MARK AS SUCH
P63X:	HRLZ	A2,A2;	PACK EXPONENT LINK IS ZERO
	AND	A2,MASK3;
	M55	A1,A2,E3;	AND STORE
	HRRZ	A1,(DS);	FIRST ON LIST
	HLRZ	A,1(DS);	LAST ON LIST
	JUMPN	A1,P63.1;	ANY ON LIST?
	HRRM	A2,(DS);	NO -- SET FIRST
	JRST	0,.+2;
P63.1:	HRRM	A2,1(A);	LINK LAST ITEM TO NEW ONE.
	HRLM	A2,1(DS);	RESET LAST.
	POPJ	CR,0;
	SUBTTL	P64  --  RELEASE AN ARRAY
;		RELEASE ARRAY STRUCTURE
;		PK10 = DIMENSION
;		A1 = LINK TO ARRAY HEADER
;		PUSHJ CR,P64

	INTERN	P64;

P64:	F	A2,(A1);	ANYTHING TO DELETE?
	JN	A2,P64.0;	YES
	M54	A1;	NO, DELETE HEADER.
	POPJ	CR,0;
P64.0:	SETZ	A2,0;	LEVEL = 0
	MOVEM	A1,T49;	BASE LINK AT LEVEL ZERO
P64.1:	HRRZ	A1,(A1);	FIRST COMP. AT THIS LEVEL
	ADDI	A2,1;	IS BASE OF
	MOVEM	A1,T49(A2);	NEXT LEVEL.
	CAME	A2,PK10;	IS THIS LAST LEVEL
	JRST	P64.1;	NO
	MOVE	B,A1;	YES;  SET UP TO
	PUSHJ	CR,P62;	RELEASE VECTOR.
P64.2:	SUBI	A2,1;	DROP A LEVEL.
	MOVE	B,T49(A2);	LAST COMP. AT THIS LEVEL
	HRRZ	A1,1(B);
	M54	B;	RELEASE COMPONENT HEADER
	JUMPE	A2,P64.3;	FINI IF AT BASE LEVEL
	MOVEM	A1,T49(A2);	NEXT ELEMENT AT THIS LEVEL.
	JUMPE	A1,P64.2;	NO MORE AT THIS LEVEL; CLIMB DOWN
	JRST	P64.1;	MORE; CLIMB UP.
P64.3:	POPJ	CR,0;
	SUBTTL	P65  --  RELEASE DOUBLY-LINKED LIST
;		RELEASE DOUBLE LIST
;		A1 = LINK TO HEADER
;		PUSHJ CR,P65,

	INTERN	P65;

P65:	HLR	B,(A1);	LEFT(HEADER) IS LINK TO FIRST LIST
	PUSHJ	CR,P62;	RELEASE FIRST LIST
	HRR	B,(A1);	LINK TO SECOND LIST
	PUSHJ	CR,P62;
	MOVE	B,A1;
	M54	B;	RELEASE HEADER
	POPJ	CR,0;
	SUBTTL	P66
;		DISASSEMBLE LHS WHOSE DESCRIPTOR IS ON DS
;		IF ARRAY, T48 = NR. OF DIM., T48(I) = I-TH INDEX
;		PUSHJ CR,P66;  B1=DIM., A=DICT. ADDRESS

	INTERN	P66;

P66:	M52	DS,A1;	POP LHS DESCRIPTOR
	M52	A1,A;	POP TOP OF LHS LIST
	SETZB	B1,T48;	COUNTS ARE ZERO

	TLZN	A,777777;	A = DIMENSION,DICT.ADDRESS
	POPJ	CR,0;
	ADDI	B1,1;
P66.1:	M52	A1,A2;	POP NEXT INDEX VALUE OFF LHS LIST
	AND	A2,MASK1;	MASK IT
	MOVEM	A2,T48(B1);
	TRNE	A1,777777;	ANY MORE
	AOJA	B1,P66.1;	YES
	MOVEM	B1,T48;	YES; RECORD COUNT
	POPJ	CR,0;
	SUBTTL	P67  --  SET LEFT-HAND-SIDE TO JNF NR.
;		A = DICT. ADDRESS OF LHS
;		T48 = NR. OF SUBSCRIPTS
;		T48(I) = I-TH SUBSCRIPT (POSITIONED)
;		PK20,PK21 = RHS-JNF
;		PUSHJ CR, P67
;		OUT-SIZE RETURN
;		NORMAL RETURN

	INTERN	P67;

P67:	TRNN	A,777777;	ANY LHS?
	J	P67.7;	NO
	MOVE	A1,T48;	YES; IS THERE
	ADDI	A1,1;	ENUF
	CAML	A1,SIZE;	SPACE?
	POPJ	CR,0;	OUT-SIZE
	HLRZ	A2,1(A);	WAS OLD ENTRY DEFINED
	CAMN	A2,LEVEL;	AT THIS LEVEL?
	J	P67.0;	YES; DELETE AND RESET.
	ADDI	A1,1;	NO; MUST PUSH OLD ENTRY.
	CAML	A1,SIZE;	ENUF SPACE?
	POPJ	CR,0;	NO
	PJ	P58;	YES; PUSH THE OLD ENTRY.
P67.0:	SKIPN	T48;	IS NEW ENTRY A SCALAR?
	JRST	P67.6;	YES
	MOVE	A2,(A);	SUBSCRIPTED--LOOK AT
	LDB	A1,BYTE3;	TYPE OF DICT. ENTRY
	HRLZ	B1,TYPE3;	CODE FOR ARRAY.
	CAME	A1,TYPE3;	IS IT ONE?
	J	P67.1;	NO; MAY HAVE TO DELETE
	HLRZ	A1,1(A2);	DOES ITS DIMENSION
	CAMN	A1,T48;	MATCH?
	J	P67.4;	YES; SEARCH FOR COMP.
	J	P67.10;	NO; DELETE
P67.1:	CAME	A1,TYPE6;	UNDEFINED?
	J	P67.10;	NO; DELETE
	TLNE	A2,SPARSE;	AND SPARSE?
	TLO	B1,SPARSE;	YES; NOTE IT.
P67.10:	PUSH	CR,B1;	SAVE IDENTOFYING CODE.
	PJ	P60;	DELETE THE ENTRY.
	M59A	A,A1;	LINK ENTRY TO FRESH HEADER CELL
P67.11:	HRL	A2,T48;	MAKE UP HEADER
	HRRI	A2,1;	A2 = (DIMENSION) USE-COUNT = 1)
	MOVEM	A2,1(A1);	SET IT.
	HLL	A1,(A);	MAKE UP ARRAY DESCRIPTOR--
	TLZ	A1,IDM;	SAVE IDENTIFIER BYTE
	POP	CR,A2;	RETRIEVE CODE.
	IOR	A1,A2
	MOVEM	A1,(A);	SET  IT.
	MOVEI	B1,1;	LEVEL = 1
	MOVE	A,A1;	A = LAST HEADER ADDRESS
	PAGE
P67.2:	M59A	A,A1;	FRESH CELL
P67.21:	HRLM	A1,(A);	SET LAST-USED POINTER
	MOVE	A2,T48(B1);	GET INDEX
	HLLM	A2,1(A1);	TO CELL
	MOVE	A,A1;
	CAME	B1,T48;	IS THIS LAST
	AOJA	B1,P67.2;	NO
P67.3:	MOVE	A2,PK20;	SET SIGN/MAG
	MOVEM	A2,(A);
	HRLZ	A2,PK21;	AND
	SKIPN	PK19;	THE APPROPRIATE
	HRLI	A2,400;	(INDICATES TV)
	AND	A2,MASK3;	PACKED
	IORB	A2,1(A);	EXPONENT
	POP	CR,A2;
	J	1(A2);
P67.4:	MOVEM	A2,PK8;	SET UP FOR
	PUSHJ	CR,P56;	ARRAY SEARCH
	JRST	P67.5;	NOT FOUND
	MOVE	A2,1(A); 	FOUND
	AND	A2,MASK1;	MASK OUT OLD EXP.
	HLLM	A2,1(A);
	JRST	P67.3;
P67.5:	MOVE	A,A1;
	M57A	A,A1;	INSERT CELL
P67.51:	MOVE	B1,T49;	GET LEVEL
	MOVE	A,T49(B1);	HEADER FOR LEVEL
	JRST	P67.21;
	PAGE
P67.6:	PJ	P60;	DELETE ENTRY.
	SKIPN	PK19;	TV OR JNF?
	J	P67.8;	TV
	M59A	A,A1;	LINK ENTRY TO FRESH CELL.
	HLL	A1,(A);	MAKE UP JNF DESCRIPTOR
	TLZ	A1,001777;
	HRLZ	A2,TYPE2;
	IOR	A1,A2;

	MOVEM	A1,(A);
	MOVE	A2,PK20;	COPY SIGN/MAG
	MOVEM	A2,(A1);
	HRLZ	A2,PK21;	AND
	HRRI	A2,1;
	MOVEM	A2,1(A1);	EXPONENT WITH USE-COUNT = 1
P67.7:	POP	CR,A2;
	J	1(A2);
P67.8:	HLLZ	A1,(A);	MAKE UP TV DESCRIPTOR
	TLZ	A1,IDM;	SAVE IDENTIFIER BYTE
	F	A2,K1;	ASSUME FALSE
	SKIPE	PK20;
	F	A2,K2;	IT IS TRUE
	IOR	A1,A2;
	M	A1,(A);
	J	P67.7;

	SUBTTL	P68  --  RELEASE ARRAY COMPONENT
;		RELEASE COMPONENT OF ARRAY
;		USES OUTPUT OF P56
;		A = LINK TO RELEASEE
;		A1 = LINK TO EITHER HEADER OR PREDECESSOR
;		B2 = DIMENSION
;		PUSHJ CR,P68

	INTERN	P68;

P68:	HRRZ	A2,1(A1);	FIND LINK TO PREDECESSOR
	CAMN	A2,A;
	J	.+3;	THIS IS IT
	F	A1,A2;	KEEP LOOKING
	J	P68;
	HRR	A2,1(A);	LINK PREDECESSOR TO
	HRRM	A2,1(A1);	SUCCESSOR OF RELEASEE
	M54	A;	RELEASE COMPONENT
	MOVE	A,T49(B2);	COMPONENT'S HEADER (LINK)
	MOVE	A1,T49X(B2);	HEADER'S PREDECESSOR (LINK)
	HRLM	A2,(A);	RESET LAST USED IN HEADER
	HRRZ	A2,(A);	HAS THIS LEVEL BEEN WIPED OUT
	JUMPN	A2,P68.1;	NO -- FINI
	SOJG	B2,P68;	YES; IS IT BASE LEVEL
	M54	A;	DELETE HEADER
	F	A,PK9;	AND MAKE ENTRY UNDEFINED
	F	A1,(A);
	TLZ	A1,IDM;	SAVE IDENTIFIER BYTE
	HRLZ	A2,TYPE6;
	IOR	A1,A2;
	HLLZM	A1,(A);
P68.1:	POPJ	CR,0;
	SUBTTL	P69 -- USED TO CLEAN UP DS.

;		P69 ACTS ON OBJECT DESCRIPTOR IN A.
;		RELEASES SPACE IF 'SCRATCH' OBJECT
;			PUSHJ CR,P67

	INTERN	P69;

P69:	LDB	A1,BYTE2;	A1=TYPE
	XCT	P69.1(A1);
P69.1:	POPJ	CR,0;	TV
	JRST	P69.2;	JNF
	POPJ	CR,0;	ARRAY
		POPJ	CR,0;	FORMULA
	POPJ	CR,0;	FCT
	POPJ	CR,0;	FCTL
	POPJ	CR,0;	UND
	JRST	P69.3;	FORMAL PARAM ASSIGNMENT TABLE ADDRESS
	JRST	P69.4;	LHS
	JRST	P69.4;	ROV
	JRST	P69.5;	FOR-CLAUSE
	JRST	P69.6;	OBJECT-OF-DISCOURSE
	POPJ	CR,0;	UNDERSCORE OR SYSTEM WORD
	POPJ	CR,0;	ASSIGNMENT TABLE ADDRESS
	JRST	P69.7;	LIST OF OBJECT DESCRIPTORS
	POPJ	CR,0;
P69.2:	TLNE	A,IDMC;	INTERMEDIATE RESULT?
	POPJ	CR,0;	NO
	M54	A;	YES -- RELEASE
	POPJ	CR,0;
P69.3:	PUSHJ	CR,P60;	RELEASE ENTRY
	JRST	P59;	POP ENTRY AND FINI
P69.4:	MOVE	B,A;	SET UP
	JRST	P62;	RELEASE LIST AND FINI
P69.5:	MOVE	A1,A;
	JRST	P65;	RELEASE DOUBLE LIST AND FINI
P69.6:	TRNN	A,777777;	ANY STORAGE?
	POPJ	CR,0;	NO
	M54	A;	YES, RELEASE IT
	POPJ	CR,0;
	PAGE
P69.7:	HRL	DS,A;	PUT LIST ATOP DS!
	HRRZ	A1,1(A);
	JE	A1,.+3;
	F	A,A1;
	J	.-3;
	HRRM	DS,1(A);
	HLRZS	DS;
	J	P69;

	SUBTTL	P70 -- PART, STEP; FORM SEARCHES

;	PK36 = OOD CODE; (PK37,38)=(A1,A2)=JNF OBJECT NR.
;	PUSHJ 	P70
;	BAD OBJECT NR.
;	NO SUCH OBJECT
;	NORMAL RETURN (SET UP A-LA P38)

P70:	CALL 	S78;	IP AND FP OF OBJ NR (ALSO IN A1,A2)
	POPJ	CR,0;	BAD NR.
	M	A1,PK22;	SAVE IP
	M	A,PK23;	AND FP
	HRRZ	B1,PK36;	WHAT DO WE HAVE?
	SUB	B1,K22;
	HRRZI	A1,PARTS;	ASSUME PART OR STEP
	J	.+1(B1);
	PJ	E5;
	J	.+3;	PART
	J	.+4;	STEP
	HRRZI	A1,FORMS;	FORM
	SKIPE	PK23;	IS FP=0?
	POPJ	CR,0;	NO
	F	A2,PK22;	YES; SEARCH FOR FIRST INDEX
	PJ	P70L;
	J	P70.2;	NOT FOUND
	HRRZ	B1,PK36;	WHAT DO WE HAVE?
	CAIE	B1,11;	A STEP?
	J	P70.1;	NO, DONE.
	HRRM	A,PK40;	SAVE HEADER INFO
	HRLM	A1,PK40;
	F	A1,A;	LOOK FOR STEP
	F	A2,PK23;
	PJ	P70R;
	J	P70.2;	NOT FOUND
P70.1:	HRRM	A,PK39;	SAVE HEADER INFO
	HRLM	A1,PK39;
	POP	CR,B;
	J	2(B);
P70.2:	POP	CR,B;
	J	1(B);
	SUBTTL	P70X -- DE-COMPILE OOD DESC. IN A
P70X:	LDB	A1,BYTE16;
	M	A1,PK36;	OOD CODE
	HRRZ	A,A;
	SETZM	PK37;
	JE	A,P70X.1;	NO OBJECT NR.
	F	A1,(A);	GET NR.
	HLRE	A2,1(A);
	M	A1,PK37;
	M	A2,PK38;
	M54	A;	RELEASE CELL
	F	A,PK36;
	CAIE	A,13;	FORMULA?
	J	P70;	LOOK FOR OBJECT.
P70X.1:	POP	CR,B;
	J	2(B);
	SUBTTL	P70L AND P70R -- PART, STEP
	; FROM STRUCTURE SEARCH
;		SEARCH THRU LEFT(RIGHT) LINKED LISTS
;	A1= ADDRESS OF FIRST; A2=ARGUMENT
;		PUSHJ CR,P70X
;		NOT FOUND; A1(A)=ADD. OF PREDECESSOR(SUCCESSOR)
;		FOUND; DITTO BUT A = ADDRESS OF ENTRY

	INTERN	P70L,P70R;

P70L:	HLRZ	A,1(A1);
	JUMPE	A,P70L.1;
	CGE	A2,(A);
P70L.1:	POPJ	CR,0;
	CAMG	A2,(A);
	JRST	P70L.2;
	MOVE	A1,A;
	JRST	P70L;
P70L.2:	POP	CR,B1;
	J	1(B1);
P70R:	HRRZ	A,1(A1);
	JUMPE	A,P70R.1;
	CGE	A2,(A);
P70R.1:	POPJ	CR,0;
	CAMG	A2,(A);
	JRST	P70L.2;
	MOVE	A1,A;
	JRST	P70R;
	SUBTTL	P71 -- ADVANCE THROUGH RANGE OF VALUES
;		ADVANCE THROUGH ROV LIST
;		PK29=POINTER TO FOR CLAUSE HEADER
;		PUSHJ CR,P67
;		HEADER UP-DATED

	INTERN	P71;

P71:	HLRZ	A,@PK29;	IS THERE A LHS?
	JE	A,P71.4;	NO
	HRRZ	A,@PK29;	YES GET LINK TO ROV
P71.1:	MOVE	A2,1(A);FLAG EXP., LINK OF CURRENT VALUE
	TLNN	A2,777000;	IS THIS END OF CURRENT ROV
	JRST	P71.15;	NO
	HRRM	A2,@PK29;	YES; UPDATE HEADER.
	M54	A;	RELEASE CELL
	POPJ	CR,0;	DONE.
P71.15:	MOVE	A1,(A);	FETCH CV SIGN/MAG
	MOVE	A,(A2);	FETCH INCREMENT

	MOVE	B,1(A2);
	MOVE	B1,(B);	FETCH LIMIT VALUE
	MOVE	B2,1(B);
	M60	A2;	CONVERT EXPONENTS
	M60	B;	TO
	M60	B2;	JNF.
	MOVEM	A,PK30;	SAVE
	MOVEM	B,PK31;	INC.
	MOVEM	B1,PK32;	AND
	MOVEM	B2,PK33;	LV.
	CALL	S76;	COMPARE CV WITH LV
	JUMPN	A,P71.3;	UNEQUAL
	PAGE
P71.2:	HRR	A,@PK29;	CV=LV; END OF CURRENT ROV.
	HRR	A2,1(A);
	M54	A;	RELEASE CV
	HRRZ	A,1(A2);
	M54	A2;	RELEASE INCREMENT
	HRRM	A,@PK29;	UPDATE HEADER.
	JRST	P71.1;	AND RE-ENTER
P71.3:	MOVEM	A,PK34;	SAVE COMPARATOR
	MOVE	B1,PK30;
	MOVE	B2,PK31;
	JADD   ; 	CV=CV+INC
	IOR	A1,A;	PACK SIGN AND MAG.
	MOVE	B1,PK32;	FETCH LV
	MOVE	B2,PK33;
	CALL	S76;	COMPARE WITH NEW CV
	JUMPE	A,P71.7;	CV=LV; USE CV
	CAME	A,PK34;	HAVE WE OVERSHOT?
	JRST	.+3;	YES; USE LV
	CAMG	A2,K5;	NO; HAVE WE AN OVERFLOW?
	JRST	P71.7;	NO; USE CV
	MOVE	A1,B1;	YES--USE LV AS CV
	MOVE	A2,B2;
P71.7:	CAMGE	A2,K6;	CHECK FOR UNDERFLOW
	SETZB	A1,A2;	LO; CV=O
	HRRZ	A,@PK29;
	MOVEM	A1,(A);	RESTORE
	TRZ	A2,777000;	CV
	HRLM	A2,1(A);	IN ROV.
	POPJ	CR,0;
	PAGE
P71.4:	HRRZ	A,@PK29;	LINK TO NR. OF TIMES
	F	A1,(A);
	HLRE	A2,1(A);	FETCH NR OF TIMES
	F	B1,K15;
	SETZ	B2,0;
	CALL	P76;	DECREMENT BY UNITY
	HRRZ	A,@PK29;
	M	A1,(A);	RESTORE RESULT
	HRLZM	A2,1(A);
	JE	A1,.+2;	DONE?
	POPJ	CR,0;	NO
	SETZM	@PK29;	YES; ZERO ROV LINK
	M54	A;	FREE ROV CELL
	POPJ	CR,0;



	SUBTTL	P72A -- POP THE JOB PDL
;		PUSHJ CR,P72A TO POP JOB PDL

	INTERN	P72A,P72B;

P72A:	LDB	A1,BYTE11;	FOR-CLAUSE LINK
	JUMPE	A1,.+2;	NONE
	PUSHJ	CR,P65;	DELETE FOR-CLAUSE
	SETZM	CSA;	NO CURRENT-STEP ADDRESS AFTER JOB POP
	HRRZ	A1,JPDL;	LINK TO JOB PDL
	JN	A1,.+3;
	SETZM	JD;
	POPJ	CR,0;	NOTHING TO POP.
	M52	A1,A;
	MOVEM	A,U24;	POP OBJECT NR.
	HLLZM	A1,U25;
	M52	A1,A;
	MOVEM	A,CPI;	POP CURRENT PART INDEX
	HLRM	A1,JD;	AND FOR-CLAUSE LINK
	M52	A1,A;
	MOVEM	A,CSI;	POP CURRENT STEP INDEX
	HLLM	A1,JD;	AND JOB STATUS BITS
	HRRZM	A1,JPDL;
	LDB	A1,BYTE9;
	MOVEM	A1,MODE;	MODE = JOB STATUS
	POPJ	CR,0;
	SUBTTL	P72B --  PUSH THE JOB PDL
;		PUSHJ  CR,P72B

P72B:	MOVE	A,MODE;
	DPB	A,BYTE9;	JOB STATUS=MODE
	HRRZ	A1,JPDL;	LINK TO JOB PDL
	MOVE	A,CSI;	PUSH CSI
	M53A	A,A1;
	F	A,JD;	
	HLLM	A,1(A1);	AND JOB STATUS BITS
	MOVE	A,CPI;	CPI
	M53A	A,A1;
	F	A,JD;
	HRLM	A,1(A1);	AND FOR-CLAUSE LINK

	MOVE	A,U24;
	M53A	A,A1;	OBJECT NR
	MOVE	A,U25;
	HLLM	A,1(A1);
	HRRZM	A1,JPDL;
	POPJ	CR,0;
	SUBTTL	P73  --  FIND PART OR STEP FOR ITERATION
;		PUSHJ CR,P73
;		RETURN IF STEP
;		RETURN IF PART
;		A1 = LINK TO OBJECT HEADER

	INTERN	P73;

P73:	MOVE	A1,U24;	PART/STEP NR
	HLRE	A2,U25;
	CALL	S78;	GEN. PI/SI IN A1/A
	PJ	E25;	BAD NR.
	MOVEM	A1,PK22;	SAVE PI
	MOVEM	A,PK23;	AND SI
	MOVE	A2,A1;	SET UP FOR
	HRRZI	A1,PARTS;	PI SEARCH
	PUSHJ	CR,P70L;	LOOK FOR PART
	PJ	E29;	NO SUCH PART
	MOVE	A1,A;	SET UP FOR
	MOVE	A2,PK23;	SI SEARCH
	LDB	B,BYTE6;	WHAT ARE WE LOOKING FOR
	CAIN	B,1;
	JRST	P73.1;	PART
	PUSHJ	CR,P70R	;ASSUME STEP
	PJ	E29;
	MOVE	A1,A;
	POPJ	CR,0;
P73.1:	POP	CR,A2;
	J	1(A2);
	SUBTTL	P74 -- LOOK FOR NEXT STEP IN PROGRAM 
;		FIND CURRENT (NEXT) STEP AS SKIP=0(1)
;		PUSHJ CR,P74
;		DONE
;		NORMAL RETURN

	INTERN	P74;

P74:	HRRZ	A,CSA;	IS CSA STILL VALID
	JUMPN	A,P74.1;	YES
	HRRZI	A1,PARTS;	NO
	MOVE	A2,CPI;
	PUSHJ	CR,P70L;	LOOK FOR PART
	POPJ	CR,0;	NONE SUCH; DONE.
	MOVE	A1,A;	FOUND
	MOVE	A2,CSI;
	PUSHJ	CR,P70R;	LOOK FOR STEP
	JRST	P74.4;	NONE SUCH, BOT MAY BE OK IF SKIPPING
	HRRZM	A,CSA;	FOUND
P74.1:	LDB	B,BYTE10;	ARE WE SKIPPING
	JUMPE	B,P74.2;	NO
	HRRZ	A,1(A);	YES; FETCH NEXT CSA
	JUMPE	A,P74.3;	IS THERE ANOTHER -- NO
P74.11:	MOVEM	A,CSA;	YES; UPDATE CSA
	MOVE	A2,(A);	AND
	MOVEM	A2,CSI;	CSI
P74.2:	POP	CR,A2;
	J	1(A2);
P74.3:	POPJ	CR,0;
P74.4:	HRRZ	A,A;	IS THERE A POTENTIAL NEXT STOP
	JUMPE	A,P74.3;	NO; DONE IN ANY EVENT
	LDB	B,BYTE10;	ARE WE SKIPPING
	JUMPE	B,P74.3;	NO; DONE.
	MOVE	A2,CSI;	YES; IS IT REALLY A SUCCESSOR TO CSI
	CAMLE	A2,(A);
	POPJ	CR,0;	NO; DONE.
	JRST	P74.11;	YES; UPDATE CSA AND CSI
	SUBTTL	S50
;		S50 FETCHES NEXT BYTE TO CC
;		U1 = CURRENT-BYTE POINTER
;		PUSHJ CR S50

	INTERN	S50;

S50:	ILDB	CC,U1;	NEXT BYTE
	CAIGE	CC,EOC1;	IS IT EOC
	POPJ	CR,0;	NO
	CAILE	CC,EOC2;	MAYBE
	POPJ	CR,0;	NO
;		YES; SKIP TO NEXT CELL VIA S51
	SUBTTL	S51
;		SKIP TO NEXT CELL OF STRING
;		FIRST BYTE OF NEXT CELL TO CC
;		U1 = CURRENT BYTE POINTER
;		PUSHJ CR,S51
;		CC = EOS IF NO MORE CELLS
	INTERN	S51;

S51:	HRRZ	CC,@U1;	ADDRESS OF NEXT CELL
	JUMPE	CC,S51.1;	NO MORE
	HRLI	CC,341000;	POINT AT FIRST
	MOVEM	CC,U1;	BYTE OF NEXT CELL
	LDB	CC,CC;	FETCH IT
	POPJ	CR,0;
S51.1:	HRLI	CC,241000;	RESET THE

	HLLM	CC,U1;	POINTER.
	MOVEI	CC,EOS;	CC BECOMES EOS
	POPJ	CR,0;
	SUBTTL	S52
;		S52 TRANSFORMS 7-BIT ASCII STRING TO 8-BIT SURROGATE
;		A = POINTER TO FIRST SOURCE BYTE
;		A1 POINTS AT LAST SOURCE BYTE
;		B = POINTER TO FIRST OBJECT BYTE
;		     PUSHJ CR S52
;		UP1 = ZERO IF NULL LINE
;		UP2 POINTS AT LAST BLANK BYTE
;		UP3 IS NON ZERO IF TRANSMISSION ERRORS
	INTERN	S52;

S52:	SETZB	B1,B2;	INITIAL CONDITIONS.
	SETZM	UP3;
	F	CC,K46;	PREPARE TO MAKE COPY IN US0
	M	CC,US0;
S52.1:	ILDB	CC,A;	NEXT SOURCE BYTE
	IDPB	CC,US0;	COPY IN IMAGE STRING
	CAIN	CC,BADII;	BAD CODE?
	AOS	UP3;	YES
	HLRZ	CC,ST50(CC);
	LSH	CC,-11;	8-BIT SURROGATE (9 BIT FIELD)
	CN	A,A1;	IS THIS THE LAST BYTE?
	J	S52.2;	YES; FINISH UP.
	IDPB	CC,B;	TO OBJECT STG.
	CAIN	CC,SP;	CONTINUE -- IS IT A BLANK
	JRST	0,S52.1;	YES -- RECYCLE
	CAIN	CC,TAB;	A LOWER CASE TAB?
	JRST	S52.1;	YES
	CAIN	CC,UTAB;	AN UPPER CASE TAB?
	JRST	S52.1;	YES
	JUMPN	B1,.+2;	IS THIS FIRST NON-BLANK -- NO
	MOVE	B1,B;	YES -- RECORD AS SUCH
	MOVE	B2,B;	RECORD AS LAST NON-BLANK
	JRST	0,S52.1;
S52.2:	AOS	A2,LINE;	INC. LINE COUNTER
	CAMG	A2,K21;	LINE CTR = -1 IF PAGING REQUIRED
	CAIN	CC,PG;
	SETOM	LINE;
	SETZM	UP1;	THINK POSITIVELY!
	JUMPE	B1,S52.3;	ALL BLANK -- OLE
	LDB	CC,B1;
	CAIN	CC,STAR;
	JRST	0,S52.3;	STAR-HEAD -- CRAZY
	LDB	CC,B2;
	CAIN	CC,STAR;
	JRST	0,S52.3;	STAR-TAIL -- MMMMMM
	SETOM	UP1;	BAH!!
S52.3:	M	B2,UP2;	POINTS AT LAST BYTE.
	MOVEI	CC,EOS;	APPEND EOS
	JN	B2,.+2;	EVEN IF NOTHING HAS BEEN COLLECTED
	F	B2,B;	BUT SPACE-LIKE CHARACTERS.
	IDPB	CC,B2;
	POPJ	CR,0;
	SUBTTL	S53
;		S53 SEARCHES THRU LIST OF KNOWN WORDS FOR
;		MATCH WITH SK11
;		PUSHJ CR,S53
;		NO-GO
;		FOUND (B2 = LINE NR. IN KNOWN-WORD TABLE)
	INTERN	S53;

S53:	PUSH	CR,CP;
	PUSH	CR,PS;
	FI	B2,1;
S53.1:	HRRZ	A,ST51LO(B2);
	JE	A,S53.6;
	HRRI	PS,SK11;
		F	CP,SK6;
S53.2:	F	A1,1(A);
	F	A2,1(PS);
	TRZ	A2,17;
	CAME	A1,A2;
S53.3:	AOJA	B2,S53.1;
	ADDI	A,1;
	ADDI	PS,1;
	SOJG	CP,S53.2;
	HRLI	A,41000;
	LDB	A1,A;
	CAIE	A1,EOS;
	JN	A1,S53.3;
	POP	CR,PS;
	POP	CR,CP;
	POP	CR,A1;
	J	1(A1);
S53.6:	POP	CR,PS;	RESTORE THINGS
	POP	CR,CP;
	POPJ	CR,0;	DONE
	SUBTTL	S54 --  SEVEN PAGES FORWARD IN LISTING
	SUBTTL	S55
;		S55 DECOMPRESSES INT. TO 7-BIT ASCII
;		B1=SOURCE PTR;B2=OBJECT POINTER
;		PUSHJ CR,S55

	INTERN	S55;

S55:	EXCH	B1,U1;	EXCHANGE U1 PTR.
S55.1:	PUSHJ	CR,S50;	NEXT BYTE TO CC

	CAIN	CC,EOS;	IS BYTE AN EOS
	JRST	S55.3;	EOS -- FINI
	CAILE	CC,SP;	DOES BYTE HAVE DIRECT TRANSLATE
	JRST	0,S55.2;	NO
	CAIN	CC,CS;	A SINGLE CHARACTER?
	J	S55.4;	NO; NEXT IS COMMENTARY STRING CODE
	HLR	CC,ST50(CC);	YES -- GET TRANSLATE
	CAMGE	A2,WIDTH;
	IDPB	CC,B2;	AND STORE UNLESS BUFFER FULL
	AOJA	A2,S55.1;	INC BYTE COUNT AND CONTINUE.
S55.2:	SUBI	CC,SP;	BYTE REPRESENTS A STRING.
	PUSH	CR,B1;	SAVE POINTER
	MOVE	B1,ST51(CC);	GET POINTER
S55.5:	PUSHJ	CR,S55;	RE-ENTER
	POP	CR,B1;	POP OLD POINTER
	JRST	0,S55.1;
S55.3:	EXCH	B1,U1;	RESTORE U1 PTR.
	POPJ	CR,0;
S55.4:	PJ	S50;	NEXT BYTE IS COMMENTARY CODE
	PUSH	CR,B1;	SAVE POINTER
	MOVE	B1,ST51.1(CC);	NEW POINTER
	JRST	S55.5;	RE-ENTER
	SUBTTL	S55X
	INTERN	S55X
;		CONCATENATES AND CONVERTS JWS STRINGS
;		INTO ASCII STRINGS 
;		B POINTS TO BEGINNING OF S64-LIKE CALLING SEQUENCE
;		B2 POINTS TO DESTINATION STRING
;		PUSHJ CR,S55X
S55X:	SETZB	A2,SK1;	ZERO BYTE COUNT AND BREAK-POINTS
	SETZM	SK2;
S55X.0:	F	A1,(B);	NEXT ON CALLING SEQUENCE.
	CN	A1,K20;	ANY MORE?
	J	S55X.2;	NO
	JN	A1,.+5;	BREAKPOINT?
	ADDI	B,1;	YES
	M	B,SK1;
	M	B2,SK2;	SAVE CONTEXT
	J	S55X.0;
	TLNE	A1,400000;	HAVE WE AN ACTUAL STRING?
	J	S55X.1;	YES
	F	B1,A1;
	TLNE	B1,777777;	AN ACTUAL POINTER?
	J	.+2;	YES
	F	B1,(B1);	NO; FETCH POINTER
	PJ	S55;	COLLECT AND CONVERT TO ASCII
	AOJA	B,S55X.0;
S55X.1:	HRR	B1,B;	CONSTRUCT POINTER TO ACTUAL STG
	HRLI	B1,341000;
	PJ	S55;
	HRRZ	B,B1;
	AOJA	B,S55X.0;
S55X.2:	CAMG	A2,WIDTH;	LONG LINE?
	J	S55X.3;	NO
	FI	CC,CGII;
	SKIPN	SK1;	WAS THERE A BREAKPOINT?
	J	S55X.3-1;	NO; ABBREVIATE THE LINE.
	F	B,SK1;	RESTORE BREAKPOINT CONTEXT
	F	B2,SK2;
	IBP	B2;	APPEND CG AND EOS
	DPB	CC,B2;	CG
S55X.3:	FI	CC,EOSII;	EOS
	IDPB	CC,B2;
	POPJ	CR,0;
	SUBTTL	S56
;		S56 MOVES LINEAR, INT. STRING TO CELL LIST.
;		U1=POINTER TO INPUT
;		A=ADDRESS OF FIRST CELL
;		PUSHJ CR S56
;		A=ADDRESS OF LAST CELL
	INTERN	S56;

S56:	MOVEI	B2,6;	INTR-CELL COUNT
	MOVE	A2,K16;
	MOVEM	A2,(A);	EOS'S TO FIRST WORD OF CELL
	HRR	A2,1(A);	EOSEOS,EOC,LINK TO SECOND
	TRZ	A2,600000;
	TLO	A2,1;
	MOVEM	A2,1(A);
	HRRZ	A1,A;	GENERATE OUTPUT BYTE PTR
	SUBI	A1,1;
	HRLI	A1,41000;
	SOS	SIZE;
S56.1:	ILDB	A2,U1;	MOVE NEXT BYTE
	IDPB	A2,A1;
	CAIN	A2,EOS;	IS IT EOS
	POPJ	CR,0;	YES
	SOJG	B2,S56.1;	NO -- CYCLE ON COUNT
	HRRZ	A,(A1);	END OF CELL; TO NEXT CELL.
	JRST	0,S56;
	SUBTTL	S57
;		SOURCE BYTES COLLECTED TO BREAK BYTE;
;		U1 = SOURCE PTR.
;		B = OUTPUT PTR.
;		B1 = BREAK BYTE
;		PUSHJ CR, S57
;		B2 = BYTE COUNT
;		B PTS AT LAST BYTE
;		U1 PTS. AT BREAK BYTE
	INTERN	S57;


S57:	SETZ	B2,0;
S57.1:	PUSHJ	CR,S50;	CC = NEXT SOURCE BYTE
	CAMN	CC,B1;	IS IT BREAK
	JRST	S57.2;	YES
	IDPB	CC,B;	COLLECT IT
	CAIN	CC,EOS;	IS IT AN EOS?
	PJ	E5;	YES; EH?
	AOJA	B2,S57.1;
S57.2:	MOVEI	CC,EOS;	APPEND EOS
	IDPB	CC,B;
	ADDI	B2,1;
	POPJ	CR,0;
	SUBTTL	S58
;		CONVERT BYTE INDEX TO BYTE POINTER
;		B1 = INDEX
;		B2 = POINTER TO FIRST BYTE
;		PUSHJ CR,S58
;		B2 = BYTE POINTER
	INTERN	S58;

S58:	HRRZ	B2,B2;
	SKIPN	MODE;	6 PER CELL IF INDIRECT
	JRST	S58.3+1; 8 PER CELL IF DIRECT
	AOJA	B2,.+2;
S58.1:	HRRZ	B2,1(B2);
	SUBI	B1,6;
	JUMPG	B1,S58.1;
S58.2:	SUBI	B2,1;
	ADD	B2,ST53(B1);
	POPJ	CR,0;
S58.3:	ADDI	B2,2;
	SUBI	B1,10;
	JUMPG	B1,S58.3;
	ADD	B2,ST53X(B1);
	POPJ	CR,0;
	SUBTTL	S59
;		COLLECT DUMMY LETTER LIST
;		PUSHJ CR,S59
;		T48 = NR. OF LETTERS IN LIST
;		T48(I) = I-TH LETTER BYTE.
	INTERN	S59;

S59:	SETZ	B2,0;
	INVOKE	P51;	CC=NEXT CHAR
	HLRZ	B,CC;	IS IT A LEFT GROUPER
	CAIE	B,2;
	JRST	S59.2;	NO
	JUMPE	B1,.+2;	LEADING BLANKS?
	PUSHJ	CR,E5;	NO; EH
	F	CC,T54(CC);
	M	CC,PK28;	SAVE ITS ASSOCIATED RT. GRPR.
S59.1:	INVOKE	P51;	NEXT CC
	TLNE	CC,777777;
	PJ	E5;	EH IF NOT A LETTER
	LDB	CC,U1;	GET LETTER BYTE.
	ADDI	B2,1;	INC. COUNT
	MOVEM	CC,T48(B2);
	INVOKE	P51;	NEXT CC
	CAMN	CC,T51.4;	IS IT A COMMA
	JRST	S59.1;	YES--CONTINUE
	CAME	CC,PK28;	NO; IS IT THE EXPECTED RIGHT GROUPER?
	PJ	E5;	NO
	INVOKE	P51;	YEP--GET NEXT CC
S59.2:	MOVEM	B2,T48;	SAVE COUNT
	POPJ	CR,0;
	SUBTTL	S54
;		S54 REPLACES RECOGNIZABLE WORDS AND BLANK STRINGS
;		BY SINGLE (8-BIT) BYTES.
;		U1 POINTS TO BEGINNING OF LINE.
;		PUSHJ CR,S54
;		B1 = FINAL BYTE COUNT
;		SK1 POINTS TO LATEST MEANINGFUL IF
;		SK3 = INDEX OF PREDECESSOR OF IF
;		UP2 POINTS AT LAST BYTE (NON-BLANK)
;		T49X = INDEX OF LAST IMPROPER STRING

	INTERN	S54;

S54:	MOVE	B,U1;
	SETZB	B1,SK1;
	SETZM	T48;
	SETZM	T49;
	SETZM	T49X;
	PUSH	CR,CP;	SAVE THINGS
	PUSH	CR,PS;
	JRST	0,S54.2;
S54.1:	IDPB	CC,B;	DEPOSIT BYTE
	ADDI	B1,1;	COUNT IT
S54.2:	ILDB	CC,U1;	FETCH BYTE
	CAIN	CC,QUOTE;	ATTEND TO QUOTE MARKS
	J	S54.10;
	LDB	CP,BYTE15;	WHAT KIND OF BEAST IS IT?
	CAILE	CP,2;
	JRST	0,S54.1;	NOT NOTEWORTHY
	JRST	.+1(CP);
	JRST	0,S54.5;	LETTER
	JRST	0,S54.9;	EOS
S54.3:	MOVE	B2,CC;	B2=BLANK STG. OF LENGTH 1(BYTE SURROGATE)
S54.4:	ILDB	CC,U1;	NEXT SOURCE BYTE

	CAIE	CC,SP;	IS IT A BLANK
	JRST	S54.41;	NO
	CAIE	B2,SPS;	HAVE WE COLLECTED A MAX. SPACE STG.
	AOJA	B2,S54.4;	NO KEEP COMING.
	ADDI	B1,1;	YES; STORE IT
	IDPB	B2,B;
	JRST	S54.3;
S54.41:	IDPB	B2,B;
	ADDI	B1,1;
	JRST	0,S54.2+1;
S54.5:	MOVEM	B,SK4;	SAVE CONTEXT
	MOVEM	B1,SK5;
	MOVE	PS,SK11;	POINTER TO TEMP. STG.
	SETZ	B2,0;	LENGTH OF COLLECTEE
	PAGE
S54.6:	CAMGE	B2,K7;	DON'T COLLECT IF TOO LONG.
	IDPB	CC,PS;	TO COLLECTEE
	IDPB	CC,B;	AND TO OUTPUT
	ADDI	B1,1;
	ADDI	B2,1;	INC. LENGTH
	ILDB	CC,U1;	NEXT SOURCE BYTE
	HRRZ	CP,ST50(CC);	ITS TYPE
	JUMPE	CP,S54.6;	RE-CYCLE IF LETTER
	MOVEI	CP,EOS;	APPEND EOS
	IDPB	CP,PS;
	CAIG	B2,1;
	JRST	S54.11;	SINGLE LETTER
	CAMLE	B2,K7;
	JRST	S54.12;	TOO LONG!
	ADDI	B2,1;	OK; CORRECT COUNT!
	SETZ	CP,0;
	TRNN	B2,000003;	FILL IN LAST WORD
	JRST	.+4;	WITH ZEROES
	IDPB	CP,PS;
	ADDI	B2,1;
	JRST	.-4;
	LSH	B2,-2;
	M	B2,SK6;	SAVE WORD LENGTH
	SKIPN	UP0;	INTERESTED IN FIRST CHAR. OF WORD?
	JRST	S54.7;	NO
	MOVE	PS,SK11;	YES
	ILDB	B2,PS;
	SUBI	B2,32;	MAKE IT UPPER CASE
	CAILE	B2,11;	UNLESS IT ALREADY IS
	DPB	B2,PS;
	SETZM	UP0;	LOOK AT FIRST WORDS ONLY.
S54.7:	PUSHJ	CR,S53;	SEARCH THRU LIST OF KNOWN WORDS.
	JRST	S54.12;	NOT FOUND
S54.8:	ADDI	B2,WORD;	BYTE CODE FOR WORD
	MOVE	B,SK4;	RESTORE OLD CONTEXT
	MOVE	B1,SK5;
	CAIE	B2,IF1;	IS IT 'IF'
		JRST	0,S54.41;	NO
	M	B,T48;	YES; NOTE POINTER
	M	B1,T49;	AND INDEX OF PRECECESSOR
	JRST	0,S54.41;
S54.9:	MOVEM	B,UP2;
	IDPB	CC,B;
	ADDI	B1,1;
	F	PS,T48;
	M	PS,SK1;	POINTER TO LAST MEANINGFULL "IF"
	F	PS,T49;
	M	PS,SK3;	INDEX OF ITS PREDECESSOR
	POP	CR,PS;	RESTORE THINGS
	POP	CR,CP;
	POPJ	CR,0;	DONE.
	PAGE
S54.10:	F	CP,SK1;
	JN	CP,.+3;	FIRST QUOTE?
	HRRM	B1,SK1;	YES; NOTE IT
	J	S54.1;	AND SIMPLY CONTINUE.
	SETZM	T48;	ERASE EMBEDDED "IF"
	SETZM	T49;
S54.13:	J	S54.1;
S54.12:	SETZM	UP0;
	SYN	S54.12,S54.11;
	JRST	S54.2+1;
	SUBTTL	S60
;		CLEAR ALL SCRATCH PDL'S; REFRESH CONSOLE.
;		PUSHJ CR,S60

	INTERN	S60;

S60:	HRRZ	B,FPDL;	FORMULAS LIST
	PUSHJ	CR,P62;
	HRRZ	B,PS;	PROCESSOR LIST
	PUSHJ	CR,P62;
S60.1:	HRRZ	DS,DS;	OBJECT-DESCRIPTOR LIST
	JUMPE	DS,S60.2;	NONE
	M52	DS,A;	POP DESCRIPTOR
	PUSHJ	CR,P69;	RELEASE OBJECT
	JRST	S60.1;	RECYCLE
S60.2:	M	ACL,UACL;	SAVE ACL
	SETZB	CP,UCP;	AND
	SETZB	PS,UPS;	REFRESH
	SETZB	DS,UDS;	CONSOLE
	SETZM	FPDL;
	SETZM	U2;	MAKE SURE DEMAND-RESPONSE IS NOT SET.
	SKIPL	U7;	EXTRA CELLS?
	J	.+3;

	SOS	SIZE;	YES; TAKE BACK TWO CELLS.
	SOS	SIZE;
	SETZM	U7;
	SETZM	U6;	TURN OFF TYPING FLAG
	F	B,BASE;
	M	B,LEVEL;	RESET TO BASE LEVEL.
	POP	CR,B;
	MOVEI	CR,JWSPDL;
	JRST	(B);
	SUBTTL;	S61,S62
;		JSR S61;   SAVES CONSOLE AND HSM
;		JSR S62;   RESTORES THEM
;		ENTRIES ARE IN SCRATCH STORAGE
	INTERN	S61X,S62X;

S61X:	MOVEM	CR,UCR;
		HRLI	CR,A1;
	HRRI	CR,UA1;
	BLT	CR,UPS;
	MOVEM	CP,UCP;
	MOVEM	CC,UCC;
	F	CR,UCR;
	JRST	@S61;
S62X:	HRLI	CR,UA1;
	HRRI	CR,A1;
	BLT	CR,PS;
	MOVE	CP,UCP;
	MOVE	CC,UCC;
	HRRZI	CR,JWSPDL;
	JRST	@S62;
	SUBTTL	S63
	SUBTTL	S63,  S63X
;		EXTRACT LHS AND RHS FROM FOR CLAUSE
;		A = LINK TO FOR CLAUSE
;		PJ S63 TO EXTRACT BOTH; S63X FOR LHS ONLY(A1=LINK)
;		SETS THINGS UP FOR P67
;		DIMENSION,DICT.ADDRESS OF LHS LEFT IN A
	INTERN	S63;

S63:	HRRZ	A1,(A);	LINK TO ROV
	MOVE	B1,(A1);	DP OF ITERATION VARIABLE
	MOVE	A2,1(A1);	AND XP
	MOVEM	B1,PK20;	SAVE DP
	HRRZ	B1,TYPE2;	ASSUME WE HAVE JNF
	HLRZ	A2,A2;	LOOK AT XP
	AND	A2,MASK2;	UNPACK IT.
	CAMN	A2,MASK9;	TV?
	SETZB	A2,B1;	YES; ADJUST THINGS ACCORDINGLY
	CAML	A2,MASK9;	CORRECT SIGN FOR JNF XP
	ORCM	A2,MASK2;
	MOVEM	A2,PK21;	SAVE XP
	MOVEM	B1,PK19;	AND DESCRIPTOR
	HLRZ	A1,(A);	LINK TO LHS
S63X:	SETZ	A,0;
	TRNE	A1,777777;	ANY LEFT-HAND-SIDE?
	MOVE	A,(A1);	YES,FETCH DIM AND DICT ADDRESS
	HLRZM	A,T48;	T48 = DIMENSION
	FI	B1,1;	I=1.
S63.1:	CAMLE	B1,T48;
	POPJ	CR,0;
	MOVE	A1,1(A1);
	MOVE	A2,(A1);
	AND	A2,MASK1;
	M	A2,T48(B1);  T48(I)=I-TH INDEX VALUE
	AOJA	B1,S63.1;
	SUBTTL	S64
;		MOVES GENERAL STRINGS INTO LINEAR STG.
;	A = POINTER TO FIRST DESTINATION BYTE
;	JSP B,S64,
;	VECTOR OF POINTER ADDRESSES, ACTUAL POINTERS OR
;	ACTUAL STRINGS (FIRST BYTE = 277)
;	DEC  -1 INDICATES END OF CALLING SEQUENCE.
;	NORMAL RETURN; EOS'S ARE NOT MOVED

		INTERN	S64;

S64:	MOVE	A1,(B);	NEXT ARGUMENT
	CAME	A1,K20;	ANY MORE STRINGS?
	JRST	.+4;	YES; CONTINUE.
	MOVEI	CC,EOS;	NO; APPEND EOS.
	IDPB	CC,A;
	JRST	1(B);	DONE.
	JE	A1,S64;	IGNORE LONG LINE BREAKS
	SETZ	B1,0;	SET FLAG ASSUMING WE HAVE POINTER
	TLNE	A1,400000;	IS IT AN ACTUAL STRING?
	JRST	.+4;	YES
	TLNN	A1,777777;	POINTER ADDRESS OR POINTER?
	MOVE	A1,(A1);	POINTER; FETCH IT
	JRST	S64.0;
	SETO	B1,0;	RESET FLAG TO INDICATE ACTUAL STRING
	HRR	A1,B;	AND CONSTRUCT POINTER
	HRLI	A1,341000;	TO SECOND BYTE
S64.0:	XCH	A1,U1;	SWAP POINTERS TO
S64.1:	PJ	S50;	FETCH NEXT BYTE
	CAIN	CC,EOS;	IS IT AN EOS?
	JRST	S64.2;	YES
	IDPB	CC,A;	NO; DEPOSIT BYTE
	JRST	S64.1;
S64.2:	XCH	A1,U1;	RESTORE POINTERS
	JE	B1,.+2;

	HRRZ	B,A1	;ADJUST IF WE HAD ACTUAL STG
	AOJA	B,S64;
	SUBTTL	S65
;		PEEK AT NEXT BYTE. IS IT A SPACE?
;		PUSHJ CR,S65
;		NO
;		YES
	INTERN	S65;

S65:	MOVE	A,U1;	SAVE POINTER
	PUSHJ	CR,S50;	CC = NEXT BYTE
	F	CC,T51(CC);	CC = ITS DESCRIPTOR
	CE	CC,K19;	IS IT SPACE-LIKE?
	JRST	S65.1;	NO
	M	A,U1;
	POP	CR,A;
	J	1(A);
S65.1:	M	A,U1;	RESTORE POINTER.
	POPJ	CR,0;
	SUBTTL	S65X
;		EXTRACT FORM FIELD SPECIFICATIONS
;		PJ	S65X
;		PK36 = LEFT UNDERS, RIGHT UNDERS; PK37=DOTS
;		A2=DOTS

S65X:	SETZB	A1,A;
	SETZ	A2,0;
	F	B,U1;
	PJ	S50;	NEXT BYTE
	CAIE	CC,EOS;	EOS?
	J	S65X.2;	NO
S65X.1:	M	B,U1;	RESTORE POINTER
	HRLM	A1,PK36;
	HRRM	A,PK36;
	M	A2,PK37;
	POPJ	CR,0;
S65X.2:	CAIN	CC,UNDER;
	AOJA	A1,S65X.3;
	CAIE	CC,DOT;
	J	S65X+2;
	ADDI	A2,1;
S65X.7:	PJ	S50;	COLLECTING DOTS
	CAIN	CC,UNDER;	
	AOJA	A,S65X.4;	COLLECT RIGHT UNDERSCORES
	CAIN	CC,DOT;
	AOJA	A2,S65X.7;
	JE	A1,S65X.6;	NO LEFT UNDERSCORES!
	SOJE	A2,S65X.1;	ALLOW UP TO THREE DOTS AFTER ^^^^
	SOJE	A2,S65X.1;
	SOJE	A2,S65X.1;
	CAIG	A2,1;
	J	S65X.1;	ALSO ^^^^^....
	PJ	E44;	OTHERWISE, FUZZY FIELDS.
S65X.6:	CAILE	A2,3;	IGNORE UP TO THREE DOTS
	J	S65X.1;	MORE THAN THREE.
	CAIN	CC,EOS;	FINI IF EOS
	J	S65X.1;
	J	S65X;
S65X.3:	PJ	S50;	COLLECTING LEFT UNDERSCORES
	CAIN	CC,UNDER;
	AOJA	A1,S65X.3;
	CAIE	CC,DOT;
	J	S65X.1;
	AOJA	A2,S65X.7;
S65X.4:	PJ	S50;	COLLECTING RIGHT UNDERSCORES
	CAIN	CC,UNDER;
	AOJA	A,S65X.4;
	CAIN	A2,1;	ALLOW A SINGLE DOT
	J	S65X.1;
	PJ	E44;	OTHERWISE, FUZZY FIELDS

	SUBTTL	S66
;		BINARY INTEGER TO JWS STRING
;		B1 = INTEGER
;		A POINTS TO DESTINATION STRING
;		PJ S66;  A POINTS AT LAST BYTE
;		T61 CONTAINS NR OF BYTES GENERATED
	INTERN	S66;

S66:	SETZM	T61;
	JGE	B1,S66.0;
	MOVN	B1,B1;
	FI	B,MINUS;
	IDPB	B,A;
	AOS	T61;
S66.0:	FI	B2,1;
S66.1:	IDIVI	B1,^D10;
	PUSH	CR,B;
	JUMPE	B1,S66.2;
	AOJA	B2,S66.1;
S66.2:	ADDM	B2,T61;
S66.3:	POP	CR,B;
	IDPB	B,A;
	SOJG	B2,S66.3;
	POPJ	CR,0;

;	DITTO FOR 4 DIGIT NAVY TIME
S66T:	FI	B2,4;
	IDIVI	B1,^D10;
	PUSH	CR,B;

	SOJN	B2,.-2;
	FI	B2,4;
	J	S66.3;
	SUBTTL	S66Y
;		CANCELS ALL OR CURRENT
S66Y:	SKIPN	JPDL;
	POPJ	CR,0;
	PJ	P72A;
	SKIPN	UP0;
	J	S66Y;
	SKIPE	MODE;
	J	S66Y;
	POPJ	CR,0;
	SUBTTL	S67
;		CONVERTS JNF TO JWS STRING
;		A = POINTER TO DESTINATION STRING
;		A1,A2 = JNF NR.
;		B1=OFFSET; USED BY S80 FOR DEC PT ALIGNEMENT
;		PUSHJ CR,S67; A POINTS AT EOS
	
	INTERN	S67;

S67:	CALL	S80;
	FI	CC,EOS;
	IDPB	CC,A;
	POPJ	CR,0;



	SUBTTL	S67Y
;	S67Y	CONVERTS PART/STEP INDEX IN A1,A2 TO
;		JWS STRING IN US4

S67Y:	CALL	S81;	CONVERT TO JNF
	F	A,US4;
	CALL	S79;	CONVERT TO JWS STRING IN US4
	FI	CC,EOS;
	IDPB	CC,A;
	POPJ	CR,0;

	SUBTTL	S67X
;		ARE WE IN A FORMULA AT ERROR-POINT?
;		PJ  S67X
;		RETURN IF NOT SO
;		RETURN IF SO, WITH IDENT STRING IN US7
S67X:	HRRZ	B,FPDL;	FIRST ON FPDL
	JE	B,S67X.1;	NO MORE
	HLLZ	B2,1(B);
	TLZ	B2,IDM;
	HRRZ	B,1(B);	POINTER TO NEXT ON FPDL
	JE	B2,.-4;	KEEP SEARCHING IF FUNCTIONAL
	TLO	B2,724;	APPEND EOS
	M	B2,US7;
	POP	CR,B;
	J	1(B);	AND FINI
S67X.1:	POPJ	CR,0;

	SUBTTL	S68  
;		MOVE TO FIRST NON-SPACE
;		PUSHJ CR,S68; U1 = PTR TO STG

	INTERN	S68;

S68:	F	A,U1;	SAVE PTR
	PJ	S50;	NEXT BYTE
	F	CC,T51(CC);	ITS DESC.
	CN	CC,K19;	IS IT SPACE-LIKE?
	J	S68;	YES
	M	A,U1;	NO; RESTORE PTR
	POPJ	CR,0;
	SUBTTL	S69
;		SEND UNDERSCORES AND SYSTEM PROPERTIES
;		JSP B,S69     A=DESCRIPTOR

	INTERN	S69;

S69:	HRRZM	B,UX2;	SAVE CALLER
	F	A1,S69A(A);
	PJ	S70D;	GEN INDENTATION
	F	A1,S69B(A);
	M	A1,US3+1;	APPROPRIATE LHS STRING
	F	B1,LINE(A);	GET APPROPRIATE VALUE.
	F	A1,A;
	F	A,US2;
	XCT	S69.2(A1);	PROCESS SELECTIVELY
S69.1:	FI	CC,EOS;	APPEND EOS TO VALUES
	IDPB	CC,A;
	JSP	B,X48;
	XWD	0,US6;
	XWD	0,US3;
	BYTE	(8)277,COLON,SP+1,EOS;
	XWD	0,US2;
	BYTE	(8)277,CG,EOS;
	DEC	-1;
	J	@UX2;
S69.2:	J	S69.3;	UNDERSCORE
	PJ	S66;	SIZE
	PJ	S66T;	TIME
	PJ	S66;	USERS

S69.3:	JSP	B,X48;	SEND TO USER
	BYTE	(8)277,CG,EOS;
	DEC	-1;
	J	@UX2;
S69A:	DEC	0;
	DEC	4;
	DEC	4;
	DEC	5;
S69B:	BYTE	(8)EOS,
	BYTE	(8)BSIZE,EOS,
	BYTE	(8)BTIME,EOS,
	BYTE	(8)BUSERS,EOS,
	SUBTTL	S69X --  SET SIZE, TIME AND USERS
S69X:	HRRZ	B1,SPACE;
	SUBI B1,INTENT		;***BEGINNING OF USER AREA
	SUB	B1,K36;
	LSH	B1,-1;
	ADD	B1,K32;
	SUB	B1,SIZE;
	M	B1,USIZE;
	F	A1,SECONDS;
	SUB	A1,USEC;
	IMULI	A1,^D10;
	IDIVI	A1,6;
	SETZ	A2,0;
	CALL	S81;
	JE	A1,.+2;
	SUBI	A2,2;
	M	A1,UMIN;
	M	A2,UMIN1;
	F	B1,HR;
	IMULI	B1,^D100;
	ADD	B1,MIN;
	M	B1,UTIME;
	F	B1,USERS;
	M	B1,UUSERS;
	POPJ	CR,0;
	SUBTTL	S69Y -- SET INITIAL SIZE AND LINK ACL
S69Y:	F	A,K32;
	M	A,SIZE;
	ADDI	A,2;	TWO CELL ACE-IN-THE-HOLE
	FI	A1,UACL;
	FI	A2,VEND;
	F	ACL,A2;
	M	A2,(A1);
	ADDI	A2,1;
	F	A1,A2;
	ADDI	A2,1;
	SOJG	A,.-4;
	SETZM	(A1);	ZERO THE LAST LINK
	POPJ	CR,0;
	SUBTTL	S70A -- SEND A STEP
;		JSP B,S70A       A LINKS TO STEP HEADER
	INTERN	S70A;

S70A:	HRRZM	B,UX2;	SAVE CALLER.
	JSR	S61;	SAVE CONSOLE REGISTERS.
	F	A1,PK22;	FETCH PART INDEX
	F	A2,(A);	AND STEP INDEX
	M	A2,PK23;
	PJ	S67Y;	CONVERT TO STRING IN US4
	F	A,UA;
	HLRZ	A,1(A);
	HRLI	A,141000;
	M	A,US5;	PTR TO TEXT OF STEP
	HRLI	A,341000;
	LDB	B1,A;	NR OF LEADING SPACES
	F	A1,US3;
	SETZ	B,0;
	FI	CC,SPS;
	JE	B1,S70A.1;
	SUBI	B1,10;
	JLE	B1,.+3;
	IDPB	CC,A1;	TO US2 AS SPACE STRING
	J	.-4;
	ADDI	B1,SP+7;
	IDPB	B1,A1;
S70A.1:	FI	CC,EOS;
	IDPB	CC,A1;	APPEND EOS.
	ILDB	B1,A;	NR OF TRAILING ZEROES
	F	A1,US2;	TO US2
	JE	B1,S70A.2;
	FI	CC,DOT;
	SKIPE	PK23;	ANY FRACTIONAL PART?
	SETZ	CC,0;	YES; NO LEADING DOT.
	IDPB	CC,A1;
	SOJG	B1,.-2;
S70A.2:	FI	CC,EOS;
	IDPB	CC,A1;	APPEND EOS
	JSR 	S62;	RESTORE CONSOLE
	JSP 	B,X47;	ACKNOWLEDGE IN SIGNALS ETC.
	OCT	6;
	JSP	B,X48;	SEND TO USER
	XWD	0,US3;	LEADING BLANKS
	XWD	0,US4;	STEP NUMBER
	XWD	0,US2;	TRAILING DOT AND ZEROES
	OCT	0;	LONG-LINE BREAK
	XWD	0,US5;	TEXT
	BYTE	(8)277,CG,EOS;
	DEC	-1;

	J	@UX2;

	SUBTTL	S70B
;		SEND A FORMULA
;		JSP	B,S70B    A LINKS TO HEADER
	INTERN	S70B;
S70B:	HRRZM	B,UX2;
	HRRZ	A1,(A);	TO RHS
	SUBI	A1,1;
	HRLI	A1,41000;	POINTS TO RHS
	M	A1,U1;
	M	A1,US5;
	HLRZ	A1,1(A);	NR OF PARAMS
	LSH	A1,1;	MESS AROUND.
	JE	A1,.+2;
	ADDI	A1,1;
	ADDI	A1,1;	A1=LENGTH OF LHS
	SETZ	B1,0;	B1 WILL CONTAIN LENGTH OF RHS
S70B4:	PJ	S50;	NEXT BYTE
	CAIN	CC,EOS;	EOS?
	J	S70B7;	YES
	CAIGE	CC,SP;	SPACE STRING?
	AOJA	B1,S70B4;
	CAILE	CC,SPS;
	J	S70B5;	NO; WORD.
	SUBI	CC,SP-1;	YES ITS LENGTH
	ADD	B1,CC;
	J	S70B4;
S70B5:	SUBI	CC,SP;
	MOVE	B2,ST51(CC);	POINTER TO WORD.
	XCH	B2,U1;	HOLD OLD POINTER
S70B6:	PJ	S50;	NEXT BYTE IN WORD
	CAIE	CC,EOS;
	AOJA	B1,S70B6;
	XCH	B2,U1;	RESTORE POINTER.
	J	S70B4;
S70B7:	ADD	B1,K25;	RHS LENGTH PLUS INDENTATION
	ADDI	B1,4;	PLUS 4 IS LINE LENGTH
	SUB	B1,WIDTH;	WILL IT FIT?
	JL	B1,.+2;	YES.
	ADD	A1,B1;	TOO LONG; FORCE INDENTATION SHIFT
	PJ	S70D;	SET INDENTATION AND OFF-SET
S70B8:	F	CC,A;
	ROT	CC,10;	THE LETTER DESIGNATOR.
	F	A1,US2;	COLLECT LEFT-HAND-SIDE IN US2
	IDPB	CC,A1;	LETTER DESIGNATOR
	HLRZ	A,(A);	LINK TO DLS
	JE	A,S70B3;	NO PARAMETERS
	SUBI	A,1;
	HRLI	A,41000;	POINTS TO DLS
	M	A,U1;	PREPARE TO COLLECT DLS
	FI	CC,LEFT;
	IDPB	CC,A1;	APPEND LEFT PAREN
	PAGE
S70B1:	PJ	S50;	NEXT DUMMY LETTER
	CAIN	CC,EOS;	EOS?
	J	S70B2;	YES; ALMOST DONE
	IDPB	CC,A1;	NO; COLLECT LETTER
	FI	CC,COMMA;	AND
	IDPB	CC,A1;	COMMA
	J	S70B1;
S70B2:	FI	CC,RIGHT;
	DPB	CC,A1;	RIGHT PAREN REPLACES LAST COMMA
S70B3:	FI	CC,EOS;
	IDPB	CC,A1;	APPEND EOS
	SKIPE	UDF1;	SENDING TO DISK?
	J	S70B9;	YES
	JSP	B,X48;	SEND TO USER
	XWD	0,US6;
	XWD	0,US2;
	BYTE	(8)277,COLON,SP+1,EOS;
	OCT	0;
	XWD	0,US5;
	BYTE	(8)277,CG,EOS;
	DEC	-1;
	J	@UX2;
S70B9:	JSP	B,X48;	SEND TO DISK
	BYTE	(8)277,221,SP,EOS;	LET
	XWD	0,US2;	LHS
	BYTE	(8)277,EQUALS,EOS;	=
	XWD	0,US5;	RHS
	BYTE	(8)277,PERIOD,CG,EOS;
	DEC	-1;
	J	@UX2;

	SUBTTL	S70C
	INTERN	S70C;
;		SEND A VALUE LINE
;		JSP   B,S70C
;		UP1 POINTS TO START OF LHS; VALUE ON DS
S70C:	HRRZM	B,UX2;
	F	A1,UP1;
	M	A1,U1;	UP1 POINTS TO LHS IN TYPE LINE
	PJ	S68;	ADVANCE TO FIRST NON-SPACE
	FI	A1,T48;	PREPARE TO DEAL WITH CONDITIONAL EXP.
	F	A,US2;
	J	.+2;
S70C0:	IDPB	CC,A;	STORE LAST BYTE IN OUTPUT STRING
	F	B,A;	B POINTS TO LAST NON-BLANK BYTE
S70C1:	PJ	S50;	NEXT BYTE

	CAIN	CC,COMMA2;	END OF TYPE EXPRESSION?
	J	S70C7;	YES
	CN	CC,UP2;	MAYBE
	J	S70C7;	YES
	CAIL	CC,SP;	NO; SPACE OR WORD?
	J	S70C2;	YES
	LDB	A2,BYTE14;	CLOSER LOOK
	XEC	.+1(A2);
	J	S70C0;	UNIMPORTANT NON-BLANK
	J	S70C7;	EOS
	J	S70C0;	SEMI-COLON
	PUSH	A1,A;	LEFT GROUPER; DROP A PAREN LEVEL
	SUBI	A1,1;	RIGHT GROUPER
	J	S70C14;	ALPHA; BACKTRACK IN OUTPUT STRING
	J	S70C13;	OMEGA1
	J	S70C4;	OMEGA2
S70C2:	SUBI	CC,SP;	SPACE OR WORD
	F	A2,ST51(CC);	POINTER TO IT.
	XCH	A2,U1;	HOLD OLD POINTER
S70C3:	PJ	S50;	NEXT BYTE
	CAIE	CC,EOS;
	J	.+3;	MORE TO COME
	XCH	A2,U1;	EOS; BACK TO MAIN STREAM.
	J	S70C1;
	IDPB	CC,A;	SEND BYTE TO OUTPUT STREAM
	CAIE	CC,SP;	SPACE
	F	B,A;	NO; NOTE POINTER
	J	S70C3;
S70C4:	FI	A2,1;	PREPARE TO SKIP OVER REST OF EXPRESSION
S70C5:	PJ	S50;	NEXT BYTE
	CAIN	CC,LEFT;
	AOJA	A2,S70C5;	UP COUNT FOR LEFT GROUPERS
	CAIN	CC,LEFTB;
		AOJA	A2,S70C5;
	CAIN	CC,RIGHT;
	J	S70C6;
	CAIE	CC,RIGHTB;
	J	S70C5;
S70C6:	SOJG	A2,S70C5;	DROP COUNT FOR RIGHT GROUPERS
	SOJA	A1,S70C0;
	PAGE
S70C7:	F	A1,B;
	SUBI	A1,US2;	COMPUTE LENGTH OF OUTPUT STREAM
	HLRZ	A2,A1;
	HRRZ	A1,A1;
	LSH	A1,2;
	LSH	A2,-17;
	SUB	A1,A2;
	F	CC,U1;
	M	CC,UP1;	MARK END OF EXPRESSION
	FI	CC,EOS;
	IDPB	CC,B;	APPEND EOS
	PJ	S70D;	SET INDENTATION AND OFF-SET
	INVOKE	P53;	POP VALUE
	SKIP	;	TV'S ALREADY LEGISLATED
S70C10:	LDB	B2,BYTE2;	LOOK AT TYPE
	JN	B2,.+3;	TV?
	PJ	S70C11;	YES
	J	.+3;
	F	A,US4;	JNF,CONVERT TO STRING IN US4.
	PJ	S67;
	JSP	B,X48;	SEND TO USER
	XWD	0,US6;
	XWD	0,US2;	LHS
	OCT	0;	LONG-LINE BREAK
	XWD	0,K23;
	XWD	0,US4;	RHS
	BYTE	(8)277,CG,EOS;
	DEC	-1;
	J	@UX2;
S70C11:	F	A,S70C12;
	JE	A1,.+2;
	F	A,S70C12+1;
	FI	B,1;
	M	A,US4(B);
	POPJ	CR,0;
S70C12:	BYTE	(8)SP+4,263,EOS;	FALSE
	BYTE	(8)SP+4,264,EOS;	TRUE
S70C13:	ILDB	CC,(A1);
		ADDI	CC,1;
	SOJA	A1,S70C0;	CORRECT RT GRPR AND CONTINUE
S70C14:	F	A,(A1);
	IBP	A;
	J	S70C0+1;
	SUBTTL	S70D
;		GENERATE INDENTATION STG POINTER
;		A1 = NORM OF LHS STRING
;		PJ	S70D
;		B1=OFF-SET; A1 AND US6 POINT TO INDENT STG
	INTERN	S70D;
S70D:	SETZ	B1,0;	ASSUME NO OFF-SET
	SUB	A1,K25;
	JLE	A1,.+3;	SO IT IS.
	F	B1,A1;	OFFSET IS DIFFERENCE.
	SETZ	A1,0;	NO INDENT
	ADD	A1,T60;	GEN. INDENT. PTR.
	M	A1,US6;
	SKIPN	UDF1;	TO DISC?
	POPJ	CR,0;	NO
	F	A1,T60;	YES; NO INDENTATION

	M	A1,US6;
	FI	B1,11;	OR OFF-SET.
	POPJ	CR,0;
	SUBTTL	S70E
;		SEND A FORM
;		JSP B,S70E SENDS IDENTIFICATION AND FORM
;		JSP B,S70EX SENDS FORM ONLY
;		A LINKS TO FORM HEADER
	INTERN	S70E;

S70EX:	HRRZM	B,UX2;	SAVE CALLER
	M	A,UP4;	AND LINK TO FORM HEADER
	SKIPN	UDF1;	PRINT ID IF GOING TO DISK
	J	S70E.1;
S70E:	HRRZM	B,UX2;	SAVE CALLER
	M	A,UP4;	SAVE FORM LINK
	F	B1,(A);	FORM NR
	F	A,US2;
	PJ	S66;
	FI	CC,EOS;
	IDPB	CC,A;
	SOS	LINE;	INHIBIT PAGING
	JSP	B,X48;	SEND TO USER
	BYTE	(8)277,BFORM,SP,EOS;
	XWD	0,US2;
	BYTE	(8)277,COLON,CG,EOS;
	DEC	-1;
	F	A,UP4;
	AOS	LINE;
S70E.1:	HRRZ	A,1(A);	LINK TO FORM ITSELF
	SUBI	A,1;
	HRLI	A,41000;	POINTS TO FORM
	M	A,US5;
	JSP	B,X48;
	XWD	0,US5;
	BYTE	(8)277,CG,EOS;
	DEC	-1;
	J	@UX2;


	SUBTTL	S70F
;		SEND A SCALAR VALUE
;		JSP B,S70F     A,UP4 BOTH CONTAIN DESCRIPTOR
	INTERN	S70F;

S70F:	HRRZM	B,UX2;
	F	CC,A;
	ROT	CC,IDN;
	F	A1,US2;
	IDPB	CC,A1;	LETTER BYTE
	FI	CC,EOS;
	IDPB	CC,A1;
	FI	A1,1;
	PJ	S70D;	GEN INDENT AND OFF SET
	F	A1,(A);	DP
	HLRZ	A2,1(A);	XP
	PJ	P57Y;	UNPACKED
	J	S70C10;	MERGE WITH VALUE LINE ROUTINE.
	SUBTTL	S70G
;		GENERATE LHS FOR TYPE LINE
;		DIMENSION AND SUBSCRIPTS IN T48 ON
;		CC=DESCRIPTOR; A POINTS TO OUTPUT
;		PJ  S70G;
;		PJ  S70GX TO LEAVE OPEN LHS
;		A1 = BYTE COUNT OF GEN. STRING.
	INTERN	S70G,S70GX;

S70G:	PJ	S70G0;
	SKIPE	T48;
	J	S70G3;
	POPJ	CR,0;
S70GX:	PJ	S70G0;
	SKIPE	T48;
	J	S70G2;
	POPJ	CR,0;

S70G0:	ROT	CC,IDN;
	IDPB	CC,A;	START WITH LETTER BYTE
	F	A1,T48;
	JE	A1,S70G2;	NO SUBSCRIPTS
	ADDI	A1,1;
	FI	CC,LEFT;
	IDPB	CC,A;	APPEND LEFT PAREN
	FI	A2,1;
S70G1:	CAMG	A2,K29;
	J	S70G4;	NO
	FI	CC,DOT;
	IDPB	CC,A;
	IDPB	CC,A;
	IDPB	CC,A;
	SUB	A1,T48;
	ADDI	A1,3;
	ADD	A1,K29;
	F	A2,T48;
	J	S70G5;
S70G4:	HLRZ	B1,T48(A2);	NEXT INDEX VALUE
	LSH	B1,INDEX-22;	UNPACK IT.
	AND	B1,MASK2;
	CAML	B1,MASK9;
	ORCM	B1,MASK2;

	PJ	S66;	SEND TO OUTPUT
	ADD	A1,T61;	INC. BYTE COUNT
S70G5:	FI	CC,COMMA;
	IDPB	CC,A;	APPEND COMMA
	CE	A2,T48;	DONE?
	AOJA	A2,S70G1;	NO
	POPJ	CR,0;	YES
S70G3:	FI	CC,RIGHT;	RIGHT PAREN
	DPB	CC,A;	OVER-WRITES LAST COMMA.
S70G2:	ADDI	A1,1;
	FI	CC,EOS;
	IDPB	CC,A;	APPEND EOS
	POPJ	CR,0;	DONE.
	SUBTTL	S71 -- SEND AN ARRAY
;	JSP B,S71,     DESCRIPTOR IN A
	INTERN	S71;

S71:	HRRZM	B,UX2;	SAVE CALLER
	M	A,UP4;	AND DESCRIPTOR
	J	S71.0;	SEND COMPONENTS
S71.01:	F	A,UP4;
	TLNN	A,SPARSE;	SPARSE?
	J	@UX2;	NO; DONE.
	F	CC,A;
	F	A,US2;
	SETZM	T48;
	PJ	S70G;
	SKIPE	UDF1;	TO DISC?
	J	S71.00;	YES; NEED DIFFERENT MESSAGE
	JSP	B,X48;
	XWD	0,US2;	SAY IT IS SPARSE.
	BYTE	(8)277,SP,54,66,SP,303,CG,EOS;
	DEC	-1;
	J	@UX2;
S71.00:	JSP	B,X48;	SEND TO DISC
	BYTE	(8)277,221,SP,EOS;	LET
	XWD	0,US2;	...
	BYTE	(8)277,SP,302,SP,303,DOT,CG,EOS;  BE SPARSE
	DEC	-1;
	J	@UX2;
	PAGE
S71.0:	HLRZ	A1,1(A);	
	M	A1,UP5;	SAVE DIMENSION
	SETZ	A1,0;	STACK LEVEL TO ZERO.
S71.1:	HRRZ	A,(A);	NEXT HEADER LINK
	ADDI	A1,1;
	M	A,UP12(A1);	STACK IT IN USER BLOCK
	CE	A1,UP5;	ANY MORE?
	J	S71.1;	YES
S71.2:	M	A,UP6;	SAVE LAST HEADER LINK
	M	A1,UP8;	LEVEL=DIMENSION
S71.3:	F	A1,UP5;	START TO PICK OFF IV'S
	SUBI	A1,1;	IGNORING LAST ONE.
	M	A1,T48;	HOLD FOR FUTURE USE BY S70GX
	JE	A1,S71.5; 	ANY MORE?
S71.4:	F	B2,UP12(A1);	FETCH NEXT HEADER LINK
	F	A2,1(B2);	FETCH INDEX VALUE
	AND	A2,MASK1;	MASKED CLEAN
	M	A2,T48(A1);	STACK IT.
	SOJG	A1,S71.4;	RE-CYCLE IF MORE.
S71.5:	F	A,US2;	COLLECT IN US2:
	F	CC,UP4;
	PJ	S70GX;	GENERATE LHS
	SKIPE	T48;	VECTOR?
	J	.+6;	NO
	FI	CC,LEFT;	YES; APPEND LEFT PAREN
	DPB	CC,A;
	FI	CC,EOS;
	IDPB	CC,A;	AND EOS
	ADDI	A1,1;	ADJUST BYTE COUNT
	M	A1,UP7;	SAVE BYTE COUNT.
S71.8:	HRRZ	A,UP6;	NEXT COMPONENT AT BOTTOM LEVEL
	JE	A,S71.9;	NO MORE
	HLRZ	A2,1(A);	ITS IV
	PJ	P57X;	UNPACKED
	F	B1,A2;
	F	A,US3;	COLLECT IN US3:
	PJ	S66;	FINAL IV
	FI	CC,RIGHT;
	IDPB	CC,A;	RIGHT PAREN
	FI	CC,EOS;
	IDPB	CC,A;	AND EOS
	F	A1,UP7;
	ADD	A1,T61;
	ADDI	A1,1;	A1=BYTE COUNT OF LHS STRING
	PAGE
	PJ	S70D;	GENERATE INDENTATION
	F	A,UP6;
	F	A2,1(A);
	HRRZM	A2,UP6;	LINK TO NEXT COMPONENT
	F	A1,(A);	DP OF COMPONENT
	HLRZ	A2,A2;	XP
	AND	A2,MASK2;
	CE	A2,MASK9;	TV?
	J	.+3;	NO
	PJ	S70C11;
	J	.+4;	FIELD FILLED WITH TRUE OR FALSE
	PJ	P57Y;	UNPACKED
	F	A,US4;
	PJ	S67;	COLLECT RHS VALUE IN US4

	JSP	B,X47;	RECALLS AND IN-REQUESTS
	OCT	6;
	JSP	B,X48;	SEND TO USER
	XWD	0,US6;	INDENT
	XWD	0,US2;	LHS
	XWD	0,US3;	LHS TAIL
	OCT	0;
	XWD	0,K23;
	XWD	0,US4;	RHS
	BYTE	(8)277,CG,EOS;
	DEC	-1;
	J	S71.8;
S71.9:	SOSG	A1,UP8;	DONE?
	J	S71.01;	YES; MAY HAVE TO NOTE SPARSENESS.
	F	A,UP12(A1);	NO; FETCH NEXT HEADER
	HRRZ	A,1(A);	AND MOVE OUT
	JE	A,S71.9;	DONE AT THIS LEVEL.
	M	A,UP12(A1);	STACK NEW HEADER LINK
	J	S71.1;	AND DO IT ALL AGAIN.


	SUBTTL	S72
;		SEND A PART
;		JSP	B,S72       A LINKS TO HEADER
	INTERN	S72;

S72:	HRRZM	B,UX1;
	M	A,UP4;
	F	B,(A);
	M	B,UP8;	PART NR.
S72.1:	F	A,UP8;
	M	A,PK22;
	F	A,UP4;
	HRRZ	A,1(A);	TO STEP
	M	A,UP4;
	JE	A,@UX1;	NO MORE
	JSP	B,S70A;	SEND STEP
	J	S72.1;

	SUBTTL	S73
;		SEND ALL FORMULAS,ARRAYS OR SCALARS
;		AS A1=0,1 OR 2
;		JSP	B,S73
	INTERN	S73;

S73:	HRRZM	B,UX1;
	HRROS	UP10;	SPACE BEFORE TYPING!
	M	A,UP9;
	HRRI	A,V;
S73.1:	HRLM	A,UP9;
	HLRZ	A,UP9;
	HLRZ	A2,1(A);
	CE	A2,LEVEL;	DEFINED AT THIS LEVEL?
	J	S73.2;	NO; IGNORE.
	F	A,(A);	NEXT DESCRIPTOR FROM DICTIONARY
	M	A,UP4;
	LDB	A1,BYTE2;	TYPE OF ENTRY
	F	A2,UP9;
	XCT	S73.3(A2);
	J	S73.2;
	JSP	B,X47;	ACKNOWLEDGE RECALLS AND IN-REQU
	OCT	6;
	SKIPL	UP10;	SPACE A LINE FIRST?
	J	S73.5;	NO
	HRRZS	UP10;	NOTE THAT WE HAVE
		JSP	B,X48;	 SPACED A LINE.
	BYTE	(8)277,CG,EOS;
	DEC	-1;	LINE SPACE.
S73.5:	XCT	S73.4(A2);
S73.2:	HLRZ	A,UP9;
	ADDI	A,2;	TO NEXT DICT. ENTRY
	CAIGE	A,VEND;	ANY MORE?
	J	S73.1;	YES
	J	@UX1;
S73.3:	CE	A1,TYPE4;
	JSP	B,S73.6;
	CLE	A1,TYPE2;
S73.4:	JSP	B,S70B;
	JSP	B,S71;
	JSP	B,S70F;
S73.6:	CE	A1,TYPE3;
	J	S73.2;
	HLRZ	A1,1(A);
	CE	A1,UP11;	RIGHT DIMENSION?
	J	S73.2;	NO
	HRROS	UP10;	YES; SPACE A LINE BEFORE ARRAYS!
	J	1(B);

	SUBTTL	S74A
;		DELETE A STEP
;		PJ	S74A
;		A CONTAINS LINK TO PRECEEDING HDR,LINK TO HDR
;		B IS DITTO FOR GERMANE PARTS
	INTERN	S74A;

S74A:	HLRZ	A1,A;
	HRRZ	A,A;
	HLRZ	B,1(A);	LINK TO STEP PROPER
	PJ	P62;	DELETE IT
	HRRZ	B,1(A);	RE-LINK STEP HEADERS

	HRRM	B,1(A1);
	M54	A;	DELETE HEADER CELL
	CN	A,CSA;	HAVE WE DELETED CURRENT STEP FOR EXEC.
	SETZM	CSA;	YES; NOTE THE FACT.
	HRR	A,PK40;
	HRRZ	B,1(A);
	JE	B,.+2;	HAVE WE WIPED OUT THE PART
	POPJ	CR,0;	NO; DONE
	HLR	A1,PK40;	YES; RE-LINK PART HEADERS
	HLL	B,1(A);
	HLLM	B,1(A1);
	M54	A;	DELETE HEADER CELL
	POP	CR,A1;
	J	1(A1);	SKIP RETURN
	SUBTTL	S74B
;		DELETE AN ELEMENT
;		A-DICT.ADDRESS; T48=NR OF SUBSCRIPTS
;		T48(I)=I-TH SUBSCRIPT
;		PJ  S74B;
	INTERN	S74B;
S74B:	SKIPE	T48;	SUBSCRIPTED?
	J	S74B1;	YES
	PJ	P60;	NO; DELETE ELEMENT
	POPJ	CR,0;	DONE.
S74B1:	F	A2,(A);	LOOK AT ENTRY
	LDB	A1,BYTE3;	ITS TYPE
	CE	A1,TYPE3;	AN ARRAY?
	POPJ	CR,0;	NO; DONE.
	HLRZ	A1,1(A2);
	CE	A1,T48;	DIM = NR OF SUBSCRIPTS?
	POPJ	CR,0;	NO; DONE
	M	A,PK9;	SET UP FOR COMPONENT SEARCH
	M	A2,PK8;
	PJ	P56;	SEARCH!
	POPJ	CR,0;	NOT FOUND; DONE
	PJ	P68;	FOUND; DELETE COMPONENT
	POPJ	CR,0;	DONE.

	SUBTTL	S74C
;		DELETE A FORM
;	A=PK39 = LINK TO PREC. HDR., LINK TO HEADER
;		PJ	S74C
	INTERN	S74C;
S74C:	HLRZ	A1,A;
	HRRZ	A,A;
	HRRZ	B,1(A);	LINK TO FORM
	PJ	P62;	DELETE IT.
	HLRZ	B,1(A);
	HRLM	B,1(A1);	RE-LINK HEADERS
	M54	A;	RELEASE HEADER CELL
	POPJ	CR,0;
	SUBTTL	S74D
;		DELETE ALL FORMULAS, ARRAYS, SCALARS
;		AS: A = 0, 1, 2
;		PJ	S74D

	INTERN	S74D;

S74D:	M	A,UP9;
	HRRI	A,V;
S74D1:	HRLM	A,UP9;
	F	A1,(A);	NEXT DICTIONARY ENTRY
	LDB	A1,BYTE1;	ITS TYPE
	F	A2,UP9;
	XCT	S74D2(A2);
	PJ	P60;	DELETE IF APPLICABLE
	HLRZ	A,UP9;
	ADDI	A,2;	ADVANCE DICTIONARY POINTER
	CAIGE	A,VEND;	DONE?
	J	S74D1;	NO
	POPJ	CR,0;
S74D2:	CN	A1,TYPE4;	SKIP IF NOT A FORMULA
	CN	A1,TYPE3;	NOT AN ARRAY
	CAMG	A1,TYPE2;	NOT A SCALAR


	SUBTTL	D50: FROM TYPE-OUT ROUTINES VIA X48

D50:	F	CC,UDF1;
	CAIG	CC,5;	ADDMISSIBLE DISC ACTION?
	J	.+1(CC);
	PJ	E54;	INADMISSIBLE RESULT
	PJ	E54;	READING DISC
	J	D53;	WRITING
	PJ	E54;	DELETING
	PJ	E54;	GETTING DICTIONARY
	PJ	E54;	OPENING FILE

	SUBTTL	D51
;		LOOK FOR FILE OR ITEM NR. FOLLOWED BY KEY
;		JSP B,D51
;		RETURN IF BAD NR.
;		RETURN IF BAD KEY
;		NORMAL RETURN; A=KEY AND UITEM-NR.

D51:	HRRZM	B,UX1;	SAVE RETURN
	PJ	S65;
	PJ	E5;	NO TRAILING SPACES
	JSP	B,P49;
	INVOKE	P53;

	PJ	E5;	HAVE JNF IN A1,A2
	CALL	S78;	CONVERT TO IP/FP
	J	@UX1;	BAD NR.
	JN	A,@UX1;
	M	A1,UITEM;
	F	B1,UB1;	COUNT OF TRAILING SPACES.
	F	B,UX1;
	SETZ	A,0;	ASSUME NO KEY
	CN	CC,U3;	END OF IMPERATIVE?
	J	2(B);	YES; DONE.
	LDB	B2,BYTE4;	LEFT GROUPER?
	CAIE	B2,2;
	PJ	E5;	NO
	JE	B1,.-1;	EH IF NO LEADING SPACES
	AOJA	B,D52;	YES; LOOK FOR KEY.


	SUBTTL	D52
;		LOOK FOR KEY (BRACKETED).
;		JSP	B,D52
;		RETURN IF BAD KEY
;		NORMAL RETURN; A=KEY

D52:	HRRZM	B,UX1;	SAVE RETURN
	HRRZ	B1,CC;	LEFT-GROUPER CODE.
	LSH	B1,1;
	ADDI	B1,RIGHT;	B1=EXPECTED RT. GRPR. BYTE
	F	A,US2;	PREPARE TO COLLECT IN US2
	SETZ	A1,0;
D52.1:	PJ	S50;	NEXT BYTE
	CN	CC,B1;	DONE?
	J	D52.2;	YES
	CAIG	CC,75;
	J	D52.0;	DIGIT OR LETTER
	CN	CC,EOS;
	PJ	E5;	EOS
	CAIG	CC,WORD;	WORD?
	J	@UX1;	NO
D52.0:	IDPB	CC,A;	YES; COLLECT.
	AOJA	A1,D52.1;
D52.2:	FI	CC,EOS;
	IDPB	CC,A;
	JN	A1,.+2;
	PJ	E5;	EH IF NULL KEY
	INVOKE 	P51;	NEXT CHARACTER
	CE	CC,U3;	EXPECTED END?
	PJ	E5;	NO
	F	B1,US2;	CONVERT KEY TO ASCII
	HRLI	B2,10700;
	HRRI	B2,US1;
	SETZB	A2,1(B2);
	PJ	S55;	CONVERT.
	CAILE	A2,5;	TOO LONG/
	J	@UX1;	YES
	F	A,(B2);	FETCH KEY
	F	B,UX1;
	PJ	D62;	CONVERT TO UC LETTERS
	J	1(B);

	SUBTTL	D53
;	FILL AND SEND BUFFERS TO DISC
;	ENTERED INDIRECTLY VIA JSP B,X48
;	FOLLOWED BY STANDARD STRING CALLING-SEQUENCE.

D53:	F	A,UBFR;	CURRENT BUFFER POINTER
	CN	A,K42.1;	END OF BUFFER?
	J	D53.6+1;	YES
D53.0:	F	A1,(B);	NEXT ON CALLING SEQU.
	JN	A1,.+2;	LONG-LINE BREAK?
	AOJA	B,D53.0;	YES; IGNORE
	CE	A1,K20;	END OF CALLING-SEQUENCE?
	J	D53.1;	NO
	FI	CC,EOS;	YES
	IDPB	CC,A;	YES; APPEND EOS
	M	A,UBFR;	HOLD POINTER.
D53.3:	M	B,UB;
	JSR	S62;	RESTORE CONSOLE
	J	1(B);
D53.1:	SETZ	B1,0;	ASSUME WE HAVE POINTER
	TLNE	A1,400000;	ACTUAL STRING?
	J	.+4;	YES
	TLNN	A1,777777;	POINTER OR ADDRESS OF PTR?
	F	A1,(A1);	ADDRESS
	J	D53.2;
	SETO	B1,0;	NOTE ACTUAL STRING OCCURRENCE
	HRR	A1,B;
	HRLI	A1,341000;	CONSTRUCT POINTER
D53.2:	EXCH	A1,U1;
D53.4:	PJ	S50;	NEXT BYTE
	CAIN	CC,CG;	IGNORE CARRIAGE RETURNS
	J	D53.4;
	CAIN	CC,EOS;
	J	D53.5;	YES
	CN	A,K42;	ROOM IN BUFFER?
	J	D53.6;	NO
	IDPB	CC,A;	YES; COLLECT THE BYTE
	J	D53.4;
D53.5:	XCH	A1,U1;	RESTORE POINTER
	JE	B1,.+2;	HAD WE A POINTER?
	HRRZ	B,A1;	NO; ADJUST CALLING-SEQUENCE

	AOJA	B,D53.0;
D53.6:	F	A,UBFR;	NO ROOM; MUST DRAIN BUFFER
	SETZM	FLAG;	NOT THE LAST BUFFER.
D53.8:	FI	CC,EOB;
	IDPB	CC,A;	APPEND END-OF-BUFFER
	F	A,K43;
	M	A,UBFR;	INITIALIZE BUFFER POINTER.
	FI	A,2;	AND SEND IT TO DISC
	JSP	B,X46;
	XWD	D53.7,DISKC;
	PAGE
D53.7:	JSR	S62;	RESTORE CONSOLE
	HRRZ	CC,RESULT;	WUAT HAPPENED?
	FI	B1,DT51;
	LDB	CC,DT50(CC);	TRANSLATE RESULT CODE
	XEC	.+1(CC);
	PJ	E54;	FISHY BEHAVIOR
	PJ	E54A;	BAD DISK
	J	D53.9;	BUFFER DRAINED
	J	D53.10;	DITTO AND END
	PJ	E57;	NO MORE DISK SPACE
D53.9:	SKIPE	FLAG;
	PJ	E54;	SOMETHING FISHY
	J	D53;
D53.10:	SKIPE	FLAG;
	J	D55;
	PJ	E54;	SOMETHING FISHY


DT51:	OCT	023000000044,100000000000;


	SUBTTL	D54-D55
;		D54 DRAINS BUFFER IF REQUIRED
;		D55 CLEANS UP AFTER SUCCESSFUL DISC PROTOCOL

D54:	F	A,UBFR;
	CN	A,K43;	ANYTHING TO DRAIN?
	J	D55;	NO
	SETOM	FLAG;	YES
	J	D53.8;	DO SO


D55:	JSP	B,X46;	DONE WITH DISK
	XWD	D55.1,DISKD;
	D55.1:	HRRI	A1,D55A-1;
	HRLI	A1,41000;	"DONE"
	F	CC,UDF1;
	CAIN	CC,5;	USE?
	HRRI	A1,D55B-1;	YES; "ROGER"
	M	A1,US5;
	JSR	S62;
	SETZM	UDF1;
	SKIPE	MODE;
	J	X52;	DONE IF INDIRECT; OTHERWISE
	JSP	B,X48;	TELL USER WE ARE DONE.
	XWD	0,US5;
	DEC	-1;
	J	X52;
D55A:	BYTE	(8)15,62,61,50,DOT,CG,EOS;
D55B:	BYTE	(8)33,62,52,50,65,DOT,CG,EOS;

	SUBTTL	D56 -- OPEN A FILE

D56:	SKIPE	MODE;
	PJ	SIN7;	DIRECT ONLY?
	INVOKE	P51;	NEXT CHAR
	CE	CC,T51.27;	FILE?
	PJ	E5;	NO
	JSP	B,D51;	GET FILE NR AND KEY
	PJ	E51;	BAD FILE NR
	PJ	E52;	BAD ID
	F	A1,UITEM;
	CLE	A1,K44;	
	PJ	E51;	LARGE FILE NR
	EXCH	A,UKEY;
	M	A,UA;
	EXCH	A1,UFILE;
	M	A1,UA1;
	PJ	S60;	REFRESH CONSOLE
	JSP	B,X46;
	XWD	D56.1,DISKA;
D56.1:	FI	A,5;
	JSP	B,X46;
	XWD	D56.2,DISKB;	INITIATE ACTION
D56.2:	JSR	S62;	RESTORE CONSOLE
	HRRZ	CC,RESULT;	WHAT HAPPENED?
	FI	B1,DT52;
	LDB	CC,DT50(CC);	TRANSLATE RESULT CODE
	CAIN	CC,2;
	J	D55;	DONE
	M	A,UKEY;
	M	A1,UFILE;
	XEC	.+1(CC);
	PJ	E54;	SOMETHING FISHY
	PJ	E54A;	BAD DISK
	J	D55;	DONE
	PJ	E53;	NO SUCH FILE



DT52:	OCT	000000000300,102000000000;
	SUBTTL	D57 -- RELEASE ITEM

D57:	SKIPE	MODE;
	PJ	SIN7;	DIRECT ONLY?
	SKIPN	UFILE;
	PJ	E56;	NO FILE OPENED YET.
	INVOKE	P51;
	CE	CC,T51.29;	ITEM?
	PJ	E5;	NO
	JSP	B,D51;	ITEM NR AND ID
	PJ	E55;	BAD ITEM NR
	PJ	E52;	BAD KEY
	M	A,UNAME;
	F	A,UITEM;
	CLE	A,K45;
	PJ	E55;	LARGE ITEM NR.
	PJ	S60;	CLEAR CONSOLE
	JSP	B,X46;
	XWD	D57.1,DISKA;	REQUEST DISK
D57.1:	FI	A,3;	GOT IT.
	JSP	B,X46;
	XWD	D57.2,DISKB;	INITIATE RELEASE
D57.2:	JSR	S62;	RESTORE CONSOLE
	HRRZ	CC,RESULT;	WHAT HAPPENED?
	FI	B1,DT53;
	LDB	CC,DT50(CC);	TRANSLATE RESULT CODE
	XEC	.+1(CC);
	PJ	E54;	SOMETHING FISHY
	PJ	E54A;	BAD DISK
	J	D55;	DONE
	PJ	E58;	NO SUCH ITEM


DT53:	OCT	000002003000,130000000000;
	SUBTTL	D58 -- FILE AN ITEM

D58:	SKIPE	MODE;
		PJ	SIN7;	DIRECT ONLY?
	SKIPN	UFILE;
	PJ	E56;	NO FILE OPENED YET
	AOS	SIZE;
	AOS	SIZE;	TWO EXTRA CELLS
	SETOM	U7;	NOTE THE FACT
	SETZM	UP3;	ITEM COUNT
D58.1:	JSP	B,P38X;	OOD?
	JSP	B,P37;	NO; COMPILE LHS
	AOS	UP3;	COUNT!
	CN	CC,T51.4;	COMMA?
	J	D58.1;	AND CONTINUE.
D58.3:	CE	CC,T51.28;	FOLLOWED BY "AS"?
	PJ	E5;	NO
	INVOKE	P51;	NEXT CHAR.
	CE	CC,T51.29;	"ITEM"?
	PJ	E5;	NO
	JSP	B,D51;	FETCH ITEM NR AND ID
	PJ	E55;	BAD ITEM NR
	PJ	E52;	BAD KEY
	M	A,UNAME;
		F	A,UITEM;
	CLE	A,K45;
	PJ	E55;	BAD ITEM NR
	JSR	S61;	SAVE CONSOLE
	JSP	B,X46;	REQUEST DISK
	XWD	D58.4,DISKA;
D58.4:	SETZM	TYPE;
	SETZM	FLAG;	FURTHER RECORDS
	FI	A,2;
	JSP	B,X46;	INITIATE DISK WRITE
	XWD	D58.5,DISKB;
D58.5:	JSR	S62;	RESTORE CONSOLE
	HRRZ	CC,RESULT;	WHAT HAPPENED?
	FI	B1,DT54;
	LDB	CC,DT50(CC);	TRANSLATE RESULT CODE
	XEC	.+1(CC);
	PJ	E54;	SOMETHING FISHY
	PJ	E54A;	BAD DISK
	J	D58.6;	OK TO START WRITING
	PJ	E57;	NO MORE DISK SPACE
	PJ	E59;	DELETE BEFORE WRITING


DT54:	OCT	020000000033,100400000000;
	PAGE
D58.6:	SETZM	FLAG;
	F	A,K43;
	M	A,UBFR;	INITIALIZE BUFFER POINTER
D58.7:	F	A,(DS);
	LDB	B2,BYTE2;	WHAT NEXT?
	CN	B2,TYPE8;	LHS?
	J	D58.11;	YES
	M52	DS,A;	NO; POP DESCRIPTOR
	M	A,UP4;
	CAMN	B2,TYPE11;	OOD?
	J	D58.8;	YES
	CE	B2,TYPE21;	ASSIGNMENT TABLE ADDRESS?
	PJ	E54;	NO; EH?
D58.71:	F	A,(A);	GET DESCRIPTOR
	M	A,UP4;

	LDB	B2,BYTE2;	TYPE
	XEC	D58.10(B2);
D58.9:	SOSLE	UP3;	REPEAT IF MORE.
	J	D58.7;
	PJ	S60;	CLEAR CONSOLE
	J	D54;	DRAIN BUFFER AND FINI
D58.10:	JSP	B,S70F;	SEND TV
	JSP	B,S70F;	SEND JNF
	JSP	B,S71;	SEND ARRAY
	JSP	B,S70B;	SEND FORMULA
D58.8:	PJ	P70X;	DE-COMPILE OOD
	PJ	E54;	BAD NR.
	PJ	E54;	NO SUCH ANIMAL
	JSP	B,V3.5;	SEND IT
	J	D58.9;	AND CONTINUE
D58.11:	PJ	P66;	DECOMPILE LHS
	HRRZM	A,PK9;	TABLE ADDRESS
	SKIPN	T48;	ANY INDEX VALUES
	J	D58.71;	NO
	F	CC,(A);	YES; GET DESCRIPTOR
	F	A,US2;	COMPOSE LHS STRING
	PJ	S70G;	IN US2
	FI	B,D58.9;	RETURN TO D58.9 AFTER
	M	B,UX2;	USING S70C TO
	J	S70C10-3;	SEND LINE.




	SUBTTL	D59 -- RECALL

D59:	SKIPE	MODE;
	PJ	SIN7;	DIRECT ONLY?
	SKIPN	UFILE;
	PJ	E56;	NO FILE OPENED YET
	INVOKE	P51;
	CE	CC,T51.29;	ITEM?
	PJ	E5;	NO
	JSP	B,D51;	FETCH ITEM NR AND ID
	PJ	E55;	BAD ITEM NR
	PJ	E52;	BAD ID
	M	A,UNAME;	SAVE ID
	F	A,UITEM;
	CLE	A,K45;
	PJ	E55;	LARGE ITEM NR
	PJ	S60;	CLEAR CONSOLE
	JSP	B,X46;	REQUEST DISK
	XWD	D59.1,DISKA;
D59.1:	FI	A,1;	GOT IT
	JSP	B,X46;	INITIATE SEARCH
	XWD	D59.2,DISKB;
D59.2:	JSR	S62;	RESTORE CONSOLE
	HRRZ	CC,RESULT;	WHAT HAPPENED?
	FI	B1,DT55;
	LDB	CC,DT50(CC);
	XEC	.+1(CC);
	PJ	E54;	SOMETHING FISHY
	PJ	E54A;	BAD DISK
	J	D60;	NEXT RECORD; MORE TO COME
	J	D60;	NEXT RECORD - NO MORE
	PJ	E58;	NO SUCH ITEM


DT55:	OCT	000230004000,140000000000;
	SUBTTL	D60 -- STILL RECALLING
D60:	F	A,K43;
	M	A,UBFR;	INITIALIZE BUFFER POINTER
	F	A,K42.1;	AT LAST BYTE
	FI	CC,EOB;
	IDPB	CC,A;	MAKE SURE BUFFER ENDS WITH EOB
	FI	A,117;
	M	A,WIDTH;
	SETZM	UP0;	MUST ASSUME MAX WIDTH PAGE.
D60.1:	F	A,UBFR;
	ILDB	CC,A;	NEXT CHAR FROM BUFFER
	CAIN	CC,EOB;	END OF BUFFER?
	J	D61;	YES
D60.2:	F	B1,UBFR;
	F	B2,K46;
	SETZ	A2,0;
	PJ	S55;	MOVE INTO US0
	M	B1,UBFR;	SAVE BUFFER POINTER
	F	A1,B2;
	FI	CC,CGII;
	IDPB	CC,A1;	APPEND CG
	SETZM	UP0;
D60X:	F	A,K46;
	F	B,US1;
	SKIPE	UDF2;	FORM?
	J	D60.3;	YES
	HRLI	B,141000;	NO;
	ADDI	B,1;	ADD THREE LEADING BYTES
	SETZM	(B);
D60.3:	SOS	LINE;
	PJ	S52;	CONVERT BACK TO INTERNAL CODE
	PJ	S60;	CLEAR CONSOLE
	SKIPE	UDF2;	FORM?
	J	V14X;	YES
	SKIPN	UP1;	DEAD LINE?
	J	D60.1;	YES

	J	X50;	NO

D61:	F	A,RESULT;	WAS THIS THE LAST RECORD?
	CAIE	A,3;
	J	D55;	YES -- FINI WITH DISK
	FI	A,1;	NO -- GET NEXT RECORD
	JSP	B,X46;
	XWD	D59.2,DISKC;

D62:	HRLI	A1,10700;
	HRRI	A1,A-1;
D62.1:	ILDB	CC,A1;	CONVERT ASCII IN A TO UC
	CAIL	CC,141;
	SUBI	CC,40;
	DPB	CC,A1;
	SOJG	A2,D62.1;
	POPJ	CR,0;
	SUBTTL	D63 -- TYPE ITEM-LIST
D63:	SKIPE	MODE;
	PJ	SIN7;	DIRECT ONLY?
	SKIPN	UFILE;
	PJ	E56;	NO FILE IN USE
	PJ	S60;	CLEAR CONSOLE
	JSP	B,X46;	REQUEST DISC
	XWD	.+1,DISKA;
	FI	A,4;
	JSP	B,X46;	REQUEST FILE DICTIONARY
	XWD	.+1,DISKB;
	JSR	S62;
	SETZM	UITEM;
	HRRZ	CC,RESULT;	WHAT HAPPENED?
	FI	B1,DT56;
	LDB	CC,DT50(CC);
	J	.+1(CC);
	JFCL
	JFCL
	SETOM	UITEM;	NO DICT.
	JSP	B,X46;	DEMAND CORE
	XWD	.+1,DEMCOR;
	JE	A1,E3A.0;	NO CORE
	HRLI	A1,BFR;
	HRR	A1,SPACE;
	SETZM	1(A1);	ASSUME NO DICT
	SKIPE	UITEM;	
	J	D63.1;	CHECK!
	HRRZ	A2,A1;
	ADDI	A2,200;
	BLT	A1,@A2;	MOVE DICT INTO NEW CORE BLOCK
D63.1:	JSP	B,X46;	RELEASE DISC
	XWD	.+1,DISKD;
	SETZM	UDF1;
	SETZM	UITEM;	ITEM COUNT
D63.2:	JSP	B,X46;	REQUEST BUFFER
	XWD	.+1,REQBUF;
	M	BUFAD,UBUF;
	HRRZ	2,BUFAD;
	ADDI	2,2;
	HRLI	2,10700;
	HRRZ	3,SPACE;
	F	1,UITEM;
	JSR	S62;	RESTORE CONSOLE
D63.3:	JSP	B,X46;	RETURN UNUSED BUFFER
	XWD	.+1,RETBUF;
	JSP	B,X46;	RETURN CORE
	XWD	.+1,RETCOR;
	JSR	S62;
	J	X52;

DT56:	OCT	302000,100000000000;

	SUBTTL	DT50

DT50:	POINT	3,(B1),2;
	POINT	3,(B1),5;
	POINT	3,(B1),8;
	POINT	3,(B1),11;
	POINT	3,(B1),14;
	POINT	3,(B1),17;
	POINT	3,(B1),20;
	POINT	3,(B1),23;
	POINT	3,(B1),26;

	POINT	3,(B1),29;
	POINT	3,(B1),32;
	POINT	3,(B1),35;
	POINT	3,1(B1),2;
	POINT	3,1(B1),5;
	POINT	3,1(B1),8;
	POINT	3,1(B1),11;
	POINT	3,1(B1),14;
	POINT	3,1(B1),17;
	POINT	3,1(B1),20;





	SUBTTL	OBJECT TYPES AND SUCH
;
TYPE1:	OCT	0;	TV
TYPE2:	OCT	1;	JNF
TYPE3:	OCT	2;	ARRAY
TYPE4:	OCT	3;	FORMULA
TYPE5:	OCT	4;	FUNCTION
TYPE6:	OCT	6;	UNDEFINED
TYPE7:	OCT	7;	DUMMY LETTER
TYPE8:	OCT	10;	LHS
TYPE9:	OCT	11;	ROV
TYPE10:	OCT	12;	FOR CLAUSE
TYPE11:	OCT	13;	OOD
TYPE12:	OCT	1001;	TYPE/CLASS OF JNF LITERALS
TYPE13:	OCT	14;	UNDERSCORE
TYPE14:	OCT	11;	VERBS
TYPE15:	OCT	1011;	SINGULAR NOUNS
TYPE16:	OCT	2011;	PLURAL NOUNS
TYPE17:	OCT	3011;	'ALL'
TYPE18:	OCT	4011;	OTHERS
TYPE19:	OCT	5011;	SYSTEM ATTRIBUTES
TYPE20:	XWD	13,12;	OOD DESCRIPTOR FOR FORM
TYPE21:	OCT	15;	DICTIONARY ENTRY
TYPE22:	OCT	16;	LIST OF OBJECT DESCRIPTORS
	SUBTTL	MASKS
;
MASK1:	XWD	777000,0;	INDEX VALUE
MASK2:	OCT	777;	EXPONENT IN RIGHT HALF
MASK3:	XWD	777,0;	EXPONENT
MASK4:	XWD	776000,0;	OD'S ASSOCIATED LETTER
MASK5:	XWD	17,0;	DESCRIPTOR CLASS
MASK6:	XWD	17,0;	DESCRIPTOR TYPE
MASK7:	XWD	17000,0;	DESCRIPTOR TYPE WITHIN CLASS
MASK8:	XWD	400000,0;	JNF SIGN
MASK9:	OCT	400;	EXP. TEST
	SUBTTL	PARAMS
K1:	XWD	0,FALSE;	FALSE DESCRIPTOR
K2:	XWD	0,TRUE;	TRUE DESCRIPTOR
K3:	DEC	1;	RIGHT COUNTER
K4:	XWD	1,0;	LEFT COUNTER
K5:	DEC	99;	MAX EXPONENT
K6:	DEC	-99;	MIN EXPONENT
K7:	DEC	10;	LENGTH OF LONGEST VOCAB WORD
K8:	OCT	100;	LENGTH OF ST54, SORT TABLE
K9:	XWD	400000,0;	ENDS VARIABLE CALLING SEQUENCES
K10:	XWD	2,23;	BACK-STOP DESCRIPTOR
K11:	OCT	0;	JNF IN LOGIC (YES IF NON ZERO)
K12:	OCT	0;	TV IN ARITH (YES IF NON ZERO)
K13:	OCT	1;	TV LITERALS IN TEXT (YES IF 1, NO IF 0)
K14:	OCT	1;	TV'S IN ASSIGNMENT TABLE (YES IF NON ZERO)
K15:	DEC	100000000;	JNF UNITY
K16:	BYTE	(8)165,165,165,165;	EOS'S
K17:	OCT	INDEX;	INDEX FIELD LENGTH
K18:	OCT	XP;	EXPONENT FIELD LENGTH
K19:	XWD	-1,0;	SPACE DESC.
K20:	DEC	-1;	REALLY ENDS VBLE CALLING SEQUS.
K21:	DEC	54;	LINES PER PAGE
K22:	DEC	7;	OFF SET FOR PLURAL NOUNS IN OOD'S.
K23:	XWD	41000,K23;
K24:	BYTE	(8)SP,EQUALS,SP,EOS;	#=#
K25:	DEC	12;	INDENTATION
K26:	DEC	54;	MAXIMUM LHS STRING FOR TYPEING
K27:	DEC	1;	FIRST LINE NR.
	SYN	K21,K28;	LINES PER PAGE
K29:	DEC	10;	MAX NR OF PARAMS OR INDEX VALUES
K30:	DEC	80;	LINE LENGTH
K31:	DEC	999999999;	MAX JNF DP
K32:	DEC	367;	INITIAL SIZE
K33:	OCT	407346544777;	MINUS K31
K34:	XWD	1000,0;	UNDERSCORE COUNTER
K35:	DEC	1;	REC. FORMULAS (NON-ZERO IF YES)
K36:	DEC	1024;	BLOCK LENGTH
K37:	OCT	1;	TV'S IAS FORMULA RESULTS(NO IF 0)
K38:	BYTE	(8)BAD,EOS;	BAD STRING
K39:	OCT	1;	TV AS TYPE ITEM (NO IF ZERO)
	K40:	XWD	5011,0;	DESCRIPTOR FOR UNDERSCORES
K41:	XWD	024006,0;	UNDEFINED DESC. FOR CAP "A"
K42:	POINT	8,BFRP,15;
K42.1:	POINT	8,BFRP,23;
K43:	POINT	8,BFR,31;	TO FIRST
K44:	DEC	2750;	MAX FILE NR
K45:	DEC	25;	MAX ITEM NR
K46:	POINT	7,US0,34;	TO INPUT LINE IMAGE
K47:	OCT	1;	INDIRECT DELETES?

K48:	OCT	1;	INDIRECT FILE REFERENCES?
K49:	XWD	V1.3,23;	RIGHT-HAND-SIDE CALLERS
K50:	XWD	P39.0,23;	OF EXPRESSEION EVALUATOR; P49.
K51:	XWD	P39.10,23;	DITTO!
	SUBTTL	BYTE POINTERS FOR PACKED INFO
;
BYTE1:	POINT	4,A1,17;	A1 TYPE
BYTE2:	POINT	4,A,17;	A TYPE
BYTE3:	POINT	4,A2,17;	A2 TYPE
BYTE4:	POINT	4,CC,17;	CC CLASS
BYTE5:	POINT	4,CC,8;	CC TYPE WITHIN CLASS
BYTE6:	POINT	2,JD,3;	JOB CODE
BYTE7:	POINT	1,JD,5;	JOB MODE
BYTE8:	POINT	2,JD,9;	JOB BKPT
BYTE9:	POINT	1,JD,11;	JOB STATUS
BYTE10:	POINT	1,JD,13;	SKIP CODE
BYTE11:	POINT	18,JD,35;	JOB FOR-CLAUSE LINK
BYTE12:	POINT	IDN,(A),IDN-1;	ID BYTE IN (A)
BYTE13:	POINT	IDN,A,IDN-1;	DITTO IN A
BYTE14:	POINT	9,ST50(CC),26;	SPECIAL BYTE CODE
BYTE15:	POINT	9,ST50(CC),35;	BYTE TYPE
BYTE16:	POINT	4,A,13;	OOD TYPE
BYTE17:	POINT	4,(DS),17;	TYPE OF DS TOP
	SUBTTL	SYNTAX ENFORCERS

SIN2:	SKIPN	K12;	TV IN ARITH
	JRST	E33;
	POPJ	CR,0;
;
SIN1:	SKIPN	K11;	JNF (OP A) IN LOGIC
	JRST	E34;
SIN1.1:	JUMPE	A1,.+2;
	MOVE	A1,TRUE;
	SETZ	A2,0;
	POPJ	CR,0;
;
SIN3:	SKIPN	K11;	JNF (OP B) IN LOGIC
	JRST	E34;
	JUMPE	B1,.+2
	MOVE	B1,TRUE;
	SETZ	B2,0;
	POPJ	CR,0;
;
SIN4:	SKIPN	K14;	TV IN DICT
	JRST	E35;
	POPJ	CR,0;
SIN5:	SKIPN	K13;	LITERAL TV IN TEXT
	JRST	E36;
	POPJ	CR,0;

SIN6:	SKIPN	K47;	INDIRECT DELETES?
	PJ	E2;	NO
	POPJ	CR,0;

SIN7:	SKIPN	K48;	INDIRECT FILE WORK?
	PJ	E2;	NO
	POPJ	CR,0;

	SUBTTL	ST50 -- CONVERSION BTWN ASCII AND 8-BIT
;
	DEFINE MLPFS (I,E,T);
	<BYTE (9)I,E(18)T;>

	DEFINE	ML(I,E,S,T);
<BYTE	(9)I,E,S,T;>

;	I=8-BIT CODE FOR ENTRY; E=ASCII CODE FOR ENTRY
;	S=CLASSIFICATION CODE FOR TYPING
;	T=CLASSIFICATION CODE FOR PRE-PROCESSING


;			ENTRY   E       I


ST50:	MLPFS 156,60,3;	0	#	0
	MLPFS 156,61,3;	1	#	1
	MLPFS 156,62,3;	2	#	2
	MLPFS 156,63,3;	3	#	3
	MLPFS 156,64,3;	4	#	4
	MLPFS 156,65,3;	5	#	5
	MLPFS 156,66,3;	5	#	6
	MLPFS 156,67,3;	7	#	7
	MLPFS 156,70,3;	10	#	8
	MLPFS 152,71,3;	11      TAB(LC) 9
	MLPFS 156,101,0;	12	#	A(UC)
	MLPFS 156,102,0;	13	#	B
	MLPFS 150,103,0;	14	PAGE	C
	MLPFS 151,104,0;	15	CR	D
	MLPFS 156,105,0;	16	#	E
	MLPFS 156,106,0;	17	#	F
	MLPFS 156,107,0;	20	#	G
	MLPFS 156,110,0;	21	#	H
	MLPFS 156,111,0;	22	#	I
	MLPFS 156,112,0;	23	#	J
	MLPFS 156,113,0;	24	#	K
	MLPFS 156,114,0;	25	#	L
	MLPFS 156,115,0;	26	#	M
	MLPFS 156,116,0;	27	#	N
	MLPFS 156,117,0;	30	#	O

	MLPFS 147,120,0,	31       TAB(UC)    P
	MLPFS 156,121,0;	32	#	Q
	MLPFS 156,122,0;	33	#	R
	MLPFS 156,123,0;	34	#	S
	MLPFS 156,124,0;	35	#	T
	MLPFS 156,125,0;	36	#	U
	MLPFS 156,126,0;	37	#	V
	MLPFS 170,127,0;     40     SP    W
	MLPFS 124,130,0;     41     ABVAL X
	MLPFS 154,131,0;     42     "     Y
	MLPFS 156,132,0;     43     #     Z(UC)
	MLPFS 157,141,0;     44     $     A(LC)
	MLPFS 131,142,0;     45     NOT=  B
	MLPFS 142,143,0;     46     TIMES C
	MLPFS 153,144,0;     47     '     D
	MLPFS 120,145,0;     50      (    E
	MLPFS 121,146,0;     51     )     F
	MLPFS 144,147,0;     52     *     G
	MLPFS 140,150,0;     53     &     H
	MLPFS 161,151,0,     54     ;     I
	MLPFS 141,152,0;     55     -     J
	MLPFS 160,153,0;     56     .     K
	MLPFS 143,154,0;     57     /     L
	MLPFS 0,155,0;       60     0     M
	MLPFS 1,156,0;       61     1     N
	MLPFS 2,157,0;       62     2     O
	MLPFS 3,160,0;       63     3     P
	MLPFS 4,161,0;       64     4     Q
	MLPFS 5,162,0;       65     5     R
	MLPFS 6,163,0;       66     6     S
	MLPFS 7,164,0;       67     7     T
	MLPFS 10,165,0;      70     8     U
	MLPFS 11,166,0;      71     9     V
	MLPFS 163,167,0;     72     :     W
	MLPFS 162,170,0;     73     ;     X
	MLPFS 132,171,0;     74     <     Y
	MLPFS 130,172,0;     75     "     Z
	MLPFS 133,43,4;      76     >     #
	MLPFS 164,43,4;      77     ?     #
	MLPFS 135,43,4;      100    >=    #     EOC
	MLPFS 12,43,4;       101    A(UC) #     EOC
	MLPFS 13,43,4;       102    B     #     EOC
	MLPFS	14,43,4;      103     C     #     EOC
	MLPFS 15,43,4;      104     D     #     EOC
	MLPFS 16,43,4;      105     E     #     EOC
	MLPFS 17,43,4;      106     F     #     EOC
	MLPFS 20,43,4;      107     G     #     EOC
	MLPFS 21,43,4;      110     H     #     EOC
	MLPFS 22,43,4;      111     I     #     EOC
	MLPFS 23,43,4;      112     J     #     EOC
	MLPFS 24,43,4;      113     K     #     EOC
	MLPFS 25,43,4;      114     L     #     EOC
	MLPFS 26,43,4;      115     M     #     EOC
	MLPFS 27,43,4;      116     N     #     EOC
	MLPFS 30,43,4;      117     0     #     EOC
	ML 31,50,3,7;       120     P     (
	ML 32,51,4,7;       121     Q     )
	ML 33,133,3,7;      122     R     [
	ML 34,135,4,7;      123     S     ]
	MLPFS 35,41,7;      124     T     ABVAL
	ML 36,50,5,7;       125     U     ALPHA
	ML 37,51,6,7;       126     V     OMEGA1
	ML 40,54,7,5;       127     W     OMEGA2
	MLPFS 41,75,10;     130     X     =
	MLPFS 42,45,10;     131     Y     NOT=
	MLPFS 43,74,10;     132     Z     <
	MLPFS 122,76,10;    133     [     >
	MLPFS	134,134,10;    134     <=     <=
	MLPFS 123,100,10;   135     ]     >=
	MLPFS 155,43,4;     136     UNDER #
	MLPFS 156,43,4;	137	UNDER	#
	MLPFS 156,53,11;	140	#	&
	MLPFS 44,55,11;     141     A(LC) -
	MLPFS 45,46,11;     142     B     TIMES
	MLPFS 46,57,11;     143     C     /
	MLPFS 47,52,11;     144     D     *
	MLPFS 50,43,4;      145     E     #
	MLPFS 51,43,4;      146     F     #
	MLPFS 52,31,12;	147     G     TAB(UC)
	MLPFS 53,14,12;     150     H     PG
	MLPFS 54,15,12;     151     I     CR
	MLPFS 55,11,12;     152     J     TAB
	MLPFS 56,47,6;      153     K     '
	MLPFS 57,42,6;      154     L     "
	MLPFS 60,136,6;      155     M     UNDER
	MLPFS 61,43,6;      156     N     #
	MLPFS 62,44,6;      157     O     $
	MLPFS 63,56,5;      160     P     .
	MLPFS 64,54,5,	    161     Q     ;
	ML  65,73,2,5;      162     R     ;
	MLPFS 66,72,5;      163     S     :
	MLPFS 67,77,5;      164     T     ?
	ML 70,EOSII,1,1;    165     U     EOS
	MLPFS 71,56,5;      166     V     .
	MLPFS 72,54,5;      167     W     COMMA2
	MLPFS 73,40,2;      170     X     SP

	MLPFS 74,40,2,      171     Y     #     2 SP
	MLPFS 75,40,2;      172     Z     #     3 SP
	MLPFS 156,40,2;	173	#	#
	MLPFS 156,40,2;	174	#	#
	MLPFS 156,40,2;	175	#	#
	MLPFS 156,40,2;	176	#	#
	MLPFS 156,40,2;	177	#	#
	SUBTTL	ST51 CONTAINS STRING POINTERS TO ST52

	DEFINE	PM(A)
<
	POINT	8,ST52+A,31 >

ST51:	POINT	8,ST52+1,23;	1 SPACE
	POINT	8,ST52+1,15;	2 SPACES
	POINT	8,ST52+1,7;
	POINT	8,ST52,31;
	POINT	8,ST52,23;
	POINT	8,ST52,15;
	POINT	8,ST52,7;
ST51LO:	POINT	8,ST52-1,31;	8 SPACES
	PM	2;	AND
	PM	3;	OR
	PM	4;	NOT
	PM	5;	SQRT
	PM	7;	LOG
	PM	10;	EXP
	PM	11;	SIN
	PM	12;	COS
	PM	13;	ARG
	PM	14;	IP
	PM	15;	FP
	PM	16;	DP
	PM	17;	XP
	PM	20;	SGN
	PM	21;	MAX
	PM	22;	MIN
	PM	23;	SET
	PM	24;	LET
	PM	25;	DO
	PM	26;	TYPE
	PM	30;	DELETE
	PM	32;	LINE
	PM	34;	PAGE
	PM	36;	CANCEL
	PM	40;	GO
	PM	41;	TO
	PM	42;	DONE
	PM	44;	STOP
	PM	46;	DEMAND
	PM	50;	FORM
	PM	52;	STEPS
	PM	54;	PARTS
	PM	56;	FORMS
	PM	60;	VALUES
	PM	62;	ALL
	PM	63;	IN
	PM	64;	FOR
	PM	65;	IF
	PM	66;	SIZE
	PM	70;	TIME
	PM	72;	USERS
	PM	74;	STEP
	PM	76;	PART
	PM	100;	FORM
	PM	102;	SUM
	PM	103;	FORMULAS
	PM	106;	PROD
	PM	65;	SPECIAL IF
	PM	110;	TV
	PM	25;	PARENTHETICAL DO
	PM	36;	PARENTHETICAL CANCEL
	PM	111;	FALSE
	PM	113;	TRUE
	PM	115;	FORMULA
	PM	117;	TIMES
	PM	121;	FIRST
	PM	123;	FILE (LC)
	PM	125;	ITEM
	PM	127;	AS
	PM	130;	RELEASE
	PM	132;	FILE
	PM	134;	RECALL
	PM	136;	USE
	PM	137;	QUIT
	PM	141;	LIST
	PM	143;	TIMER
	PM	145;	BE
	PM	146;	SPARSE
	PM	150;	RESET
	OCT	0;

	SUBTTL	ST51 EXTENDED
;		MORE POINTERS

ST51.1:	POINT	8,CS1-1,31;	ERROR
	POINT	8,CS2-1,31;	ERROR ABOVE
	POINT	8,CS3-1,31;	ERROR AT STEP
	POINT	8,CS4-1,31;	ERROR DURING ABOVE
	POINT	8,CS5-1,31;	ERROR DURING STEP

	POINT	8,CS6-1,31;	I'M AT STEP
	POINT	8,CS7-1,31;	STOPPED BY STEP
	POINT	8,CS8-1,31;	REVOKED BY IN-REQUEST
	POINT	8,CS74-1,31;	I HAVE A
	POINT	8,US4,31;
	POINT	8,CS10-1,31;	IT'S A MESS.
	POINT	8,CS11-1,31;	LET'S START OVER
	POINT	8,CS16-1,31;	DONE. I'M READY TO GO SP
	POINT	8,CS17-1,31;	I HAVE #
	POINT	8,CS18-1,31;	I CAN'T FIND THE #
	POINT	8,CS19-1,31;	REQUIRED #
	POINT	8,CS20-1,31;	# FOR ITERATION
	POINT	8,CS23-1,31;	# IS NOT DEFINED
	POINT	8,CS24-1,31;	DON'T GIVE THIS COMMAND
	POINT	8,CS31-1,31;	MUST BE INTEGER AND #
	POINT	8,CS39-1,31;	NUMBER #
	POINT	8,CS44-1,31;	PLEASE LIMIT #
	POINT	8,CS48-1,31;	TO 9 SIGNIFICANT DIGITS
	POINT	8,CS55-1,31;	I CAN'T #
	POINT	8,CS58-1,31;	IN FORMULA ##
	POINT	8,US7-1,31;
	POINT	8,CS63-1,31;	MUST BE POSITIVE INTEGER >=
	POINT	8,CS68-1,31;	SOMETHING'S WRONG
	POINT	8,US2,31;




	SUBTTL;	    ST52 EXPERIMENTAL
	S=ST51.1-ST51LO+177;
;		PERMANENT STRINGS IN JWS FORM
ST52:	BYTE	(8)170,170,170,170,170,170,170,170,165;
	BYTE	(8)44,61,47,EOS;	AND
	BYTE	(8)62,65,EOS;	OR
	BYTE	(8)61,62,67,EOS;	NOT
	BYTE	(8)66,64,65,67,EOS;	SQRT
	BYTE	(8)57,62,52,EOS;	LOG
	BYTE	(8)50,73,63,EOS;	EXP
	BYTE	(8)66,54,61,EOS;	SIN
	BYTE	(8)46,62,66,EOS;	COS
	BYTE	(8)44,65,52,EOS;	ARG
	BYTE	(8)54,63,EOS;	IP
	BYTE	(8)51,63,EOS;	FP
	BYTE	(8)47,63,EOS;	DP
	BYTE	(8)73,63,EOS;	XP
	BYTE	(8)66,52,61,EOS;	SGN
	BYTE	(8)60,44,73,EOS;	MAX
	BYTE	(8)60,54,61,EOS;	MIN
	BYTE	(8)34,50,67,EOS;	SET
	BYTE	(8)25,50,67,EOS;	LET
	BYTE	(8)15,62,EOS;	DO
	BYTE	(8)35,74,63,50,EOS;	TYPE
	BYTE	(8)15,50,57,50,67,50,EOS;	DELETE
	BYTE	(8)25,54,61,50,EOS;	LINE
	BYTE	(8)31,44,52,50,EOS;	PAGE
	BYTE	(8)14,44,61,46,50,57,EOS;	CANCEL
	BYTE	(8)20,62,EOS;	GO
	BYTE	(8)35,62,EOS;	TO
	BYTE	(8)15,62,61,50,EOS;	DONE
	BYTE	(8)34,67,62,63,EOS;	STOP
	BYTE	(8)15,50,60,44,61,47,EOS;	DEMAND
	BYTE	(8)17,62,65,60,EOS;	FORM
	BYTE	(8)66,67,50,63,66,EOS;	STEPS
	BYTE	(8)63,44,65,67,66,EOS;	PARTS
	BYTE	(8)51,62,65,60,66,EOS;	FORMS
	BYTE	(8)71,44,57,70,50,66,EOS;	VALUES
	BYTE	(8)44,57,57,EOS;	ALL
	BYTE	(8)54,61,EOS;	IN
	BYTE	(8)51,62,65,EOS;	FOR
	BYTE	(8)54,51,EOS;	IF
	BYTE	(8)66,54,75,50,EOS;	SIZE
	BYTE	(8)67,54,60,50,EOS;	TIME
	BYTE	(8)70,66,50,65,66,EOS;	USERS
	BYTE	(8)66,67,50,63,EOS;	STEP
	BYTE	(8)63,44,65,67,EOS;	PART
	BYTE	(8)51,62,65,60,EOS;	FORM
	BYTE	(8)66,70,60,EOS;	SUM
	BYTE	(8)51,62,65,60,70,57,44,66,EOS;    FORMULAS
	BYTE	(8)63,65,62,47,EOS;	PROD
	BYTE	(8)67,71,EOS;	TV
	BYTE	(8)51,44,57,66,50,EOS;	FALSE
	BYTE	(8)67,65,70,50,EOS;	TRUE
	BYTE	(8)51,62,65,60,70,57,44,EOS;	FORMULA
	BYTE	(8)67,54,60,50,66,EOS;	TIMES
	BYTE	(8)51,54,65,66,67,EOS;	FIRST
	BYTE	(8)51,54,57,50,EOS;	FILE
	BYTE	(8)54,67,50,60,EOS;	ITEM
	BYTE	(8)44,66,EOS;	AS
	BYTE	(8)15,54,66,46,44,65,47,EOS;	DISCARD
	BYTE	(8)17,54,57,50,EOS;	FILE (VERB)
	BYTE	(8)33,50,46,44,57,57,EOS;	RECALL
	BYTE	(8)36,66,50,EOS;	USE
	BYTE	(8)32,70,54,67,EOS;	QUIT
	BYTE	(8)57,54,66,67,EOS;	LIST
	BYTE	(8)67,54,60,50,65,EOS;	TIMER
	BYTE	(8)45,50,EOS;	BE
	BYTE	(8)66,63,44,65,66,50,EOS;	SPARSE
	BYTE	(8)33,50,66,50,67,EOS;	RESET
	SUBTTL	;    ST52.1
;		MORE STRINGS

CS1:	BYTE	(8)16,65,65,62,65,EOS;	ERROR
CS2:	BYTE	(8)SP,44,45,62,71,50,EOS;	#ABOVE
CS3:	BYTE	(8)SP,44,67,SP,251,SP,CS,11,EOS;   AT STEP
CS4:	BYTE	(8)SP,47,70,65,54,61,52,SP;
	BYTE	(8)44,45,62,71,50,EOS;         DURING ABOVE
CS5:	BYTE	(8)SP,47,70,65,54,61,52,SP;
	BYTE	(8)251,SP,CS,11,EOS;	DURING STEP
CS6:	BYTE	(8)22,153,60,SP,44,67,SP,251,EOS; I'M AT STEP
CS7:	BYTE	(8)34,67,62,63,63,50,47,SP;     STOPPED
	BYTE	(8)45,74,SP,251,EOS;         BY STEP
CS8:	BYTE	(8)33,50,71,62,56,50,47,SP;    REVOKED BY
	BYTE	(8)45,74,SP,54,61,67,50,65;	INTERRUPT
	BYTE	(8)65,70,63,67,EOS;
CS10:	BYTE	(8)22,67,153,66,SP,44,SP,60;   IT'S A MESS.
	BYTE	(8)50,66,66,PERIOD,SP,EOS;
CS11:	BYTE	(8)25,50,67,153,66,SP,66,67;   LET'S START
	BYTE	(8)44,65,67,SP,62,71,50,65,EOS;	OVER
CS12:	BYTE	(8)CS,14,SP,44,67,SP,251,EOS;  DONE. AT STEP
CS13:	BYTE	(8)CS,14,SP,51,65,62,60,SP,251,EOS; FROM STEP
CS14:	BYTE	(8)CS,14,SP,54,61,SP,251,EOS;	IN STEP
CS15:	BYTE	(8)COMMA,SP,44,57,67,53,62,SP;  ALTHO
	BYTE	(8)22,SP,46,44,61,153,67,SP;  I CAN'T
	BYTE	(8)51,54,61,47,SP,54,67,EOS;  FIND IT.
CS16:	BYTE	(8)232,DOT,SP,22,153,60,SP,65;   DONE. I'M
	BYTE	(8)50,44,47,74,SP,67,62,SP;      READY TO
	BYTE	(8)52,62,EOS;	GO
CS17:	BYTE	(8)22,SP,53,44,71,50,SP,EOS;     I HAVE  SP
CS18:	BYTE	(8)22,SP,46,44,61,153,67,SP;      I CAN'T
	BYTE	(8)51,54,61,47,SP,67,53,50,SP,EOS; FIND THE  SP
CS19:	BYTE	(8)65,50,64,70,54,65,50,47,SP,EOS;  REQUIRED#
CS20:	BYTE	(8)SP,244,SP,54,67,50,65,44;       #FOR
	BYTE	(8)67,54,62,61,EOS;              ITERATION
CS21:	BYTE	(8)CS,10,61,SP,62,71,50,65;   I HAVE AN
	BYTE	(8)51,57,62,72,EOS;            OVERFLOW
CS22:	BYTE	(8)CS,10,SP,75,50,65,62,SP;   I HAVE A ZERO
	BYTE	(8)47,54,71,54,66,62,65,EOS;   DIVISOR
CS23:	BYTE	(8)SP,54,66,SP,202,SP,47,50;      #IS NOT
	BYTE	(8)51,54,61,50,47,EOS;          DEFINED
CS24:	BYTE	(8)15,62,61,153,67,SP,52,54;    DON'T GIVE
	BYTE	(8)71,50,SP,67,53,54,66,SP;      THIS
	BYTE	(8)46,62,60,60,44,61,47,EOS;     COMMAND
CS25:	BYTE	(8)CS,10,SP,61,50,52,44,67;  I HAVE A
	BYTE	(8)54,71,50,SP,44,65,52,70;    NEGATIVE ARGUMENT
	BYTE	(8)60,50,61,67,SP,244,SP,203,EOS;  FOR SQRT
CS26:	BYTE	(8)CS,10,61,SP,44,65,52,70;   I HAVE AN
	BYTE	(8)60,50,61,67,SP,134,SP,0;    ARGUMENT <= 0
	BYTE	(8)SP,244,SP,204,EOS;           FOR LOG
CS27:	BYTE	(8)CS,10,SP,61,50,52,44,67;  I HAVE A NEGATIVE
	BYTE	(8)54,71,50,SP,45,44,66,50;    BASE TO A
	BYTE	(8)SP,67,62,SP,44,SP,51,65;    FRACTIONAL
	BYTE	(8)44,46,67,54,62,61,44,57;     POWER
	BYTE	(8)SP,63,62,72,50,65,EOS;
CS28:	BYTE	(8)CS,15,75,50,65,62,SP,67;  I HAVE ZERO
	BYTE	(8)62,SP,44,SP,61,50,52,44;   TO A NEGATIVE
	BYTE	(8)67,54,71,50,SP,63,62,72,50,65,EOS;  POWER
CS29:	BYTE	(8)CS,15,67,62,62,SP,51,50;  I HAVE TOO FEW VALUES
	BYTE	(8)72,SP,241,SP,244,SP,67,53;  THE FORM
	BYTE	(8)50,SP,253,EOS;
CS30:	BYTE	(8)CS,15,67,62,62,SP,60,44;  I HAVE TOO MANY
	BYTE	(8)61,74,SP,241,SP,244,SP,67;  VALUES FOR 
	BYTE	(8)53,50,SP,253,EOS;    THE FORM
CS31:	BYTE	(8)60,70,66,67,SP,45,50,SP;     MUST BE
	BYTE	(8)54,61,67,50,52,50,65,SP;     INTEGER
	BYTE	(8)200,SP,EOS;                  AND #
CS32:	BYTE	(8)CS,22,SP,47,54,65,50,46;  DON'T GIVE
	BYTE	(8)67,57,74,EOS;   COMMAND DIRECTLY
CS33:	BYTE	(8)CS,22,SP,243,47,54,65,50;  DON'T GIVE
	BYTE	(8)46,67,57,74,EOS;   COMMAND INDIRECTLY
CS34:	BYTE	(8)CS,16,CS,17,251,EOS;  CAN'T FIND STEP
CS35:	BYTE	(8)CS,16,CS,17,252,EOS;  CAN'T FIND PART
CS36:	BYTE	(8)CS,16,CS,17,253,EOS;  CAN'T FIND FORM
CS37:	BYTE	(8)CS,16,CS,17,251,CS,20,EOS;  NO STEP FOR ITER.
CS38:	BYTE	(8)CS,16,CS,17,252,CS,20,EOS;  NO PART FOR ITER.
CS39:	BYTE	(8)61,70,60,45,50,65,SP,EOS;    NUMBER #
CS40:	BYTE	(8)22,61,47,50,73,SP,71,44;     INDEX VALUE MUST
	BYTE	(8)57,70,50,SP,S+23,124,54,61;	BE INTEGER AND

	BYTE	(8)47,50,73,124,134,2,5,0,EOS;  !INDEX!<250
CS41:	BYTE	(8)235,SP,CS,24,CS,23,1,134;  FORM NR 
	BYTE	(8)253,132,1,0,144,9,EOS;   MUST BE ...
CS42:	BYTE	(8)31,44,65,67,SP,CS,24,CS;  PART NR.
	BYTE	(8)23,1,134,252,132,1,0,144,9,EOS;  MUST BE ...
CS43:	BYTE	(8)34,67,50,63,SP,CS,24,60;  STEP NR. MUST
	BYTE	(8)70,66,67,SP,66,44,67,54;    SATISFY
		BYTE	(8)66,51,74,SP,1,134,251,132,1,0,144,9,EOS;
CS44:	BYTE	(8)31,57,50,44,66,50,SP,57;    PLEASE
	BYTE	(8)54,60,54,67,SP,EOS;         LIMIT #
CS45:	BYTE	(8)31,57,50,44,66,50,SP,56;    PLEASE KEEP !X!
	BYTE	(8)50,50,63,SP,124,73,124,132; < 100 FOR 
	BYTE	(8)1,0,0,SP,244,SP,206,120;    SIN(X) AND
	BYTE	(8)73,121,SP,201,SP,207,120,73,121,EOS; COS(X)
CS46:	BYTE	(8)22,SP,61,50,50,47,SP,54;    I NEED
	BYTE	(8)61,47,54,71,54,47,70,44;     INDIVIDUAL 
	BYTE	(8)57,SP,241,SP,244,SP,44,SP,253,EOS; VALUES  ...
CS47:	BYTE	(8)22,57,57,50,52,44,57,SP;     ILLEGAL SET
	BYTE	(8)66,50,67,SP,62,51,SP,241; OF VALUES FOR
	BYTE	(8)CS,20,EOS;      ITERATION
CS48:	BYTE	(8)67,62,SP,9,SP,66,54,52;      TO 9 SIG
	BYTE	(8)61,54,51,54,46,44,61,67;    NIFICANT
	BYTE	(8)SP,47,54,52,54,67,66,EOS;   DIGITS
CS49:	BYTE	(8)CS,25,251,SP,57,44,45,50;  PLEASE LIMIT STEP
	BYTE	(8)57,66,SP,CS,26,EOS;     LABELS
CS50:	BYTE	(8)CS,25,61,70,60,45,50,65;  PLEASE LIMIT NRS.
	BYTE	(8)66,SP,CS,26,EOS;      TO NINE DIGITS
CS51:	BYTE	(8)16,53,EOS;         EH
CS52:	BYTE	(8)CS,15,61,62,67,53,54,61;  I HAVE NOTHING
	BYTE	(8)52,SP,67,62,SP,47,62,EOS;   TO DO
CS53:	BYTE	(8)CS,25,CS,24,62,51,SP,54;  PLEASE LIMIT 
	BYTE	(8)61,47,54,46,50,66,SP,67;   NR. OF INDICES
	BYTE	(8)62,SP,1,0,EOS;          TO TEN
CS54:	BYTE	(8)CS,25,CS,24,62,51,SP,63;   PLEASE LIMIT
	BYTE	(8)44,65,44,60,50,67,50,65;  NR. OF PARAMS
	BYTE	(8)66,SP,67,62,SP,1,0,EOS;        TO TEN
CS55:	BYTE	(8)22,SP,46,44,61,153,67,SP,EOS;  I CAN'T #
CS56:	BYTE	(8)CS,27,50,73,63,65,50,66;  I CAN'T EXPRESS
	BYTE	(8)66,SP,71,44,57,70,50,SP;    VALUE IN
	BYTE	(8)243,SP,74,62,70,65,SP,253,EOS;  YOUR FORM
CS57:	BYTE	(8)CS,27,60,44,56,50,SP,62;   I CAN'T MAKE
	BYTE	(8)70,67,SP,74,62,70,65,SP;   YOUR FIELDS
	BYTE	(8)51,54,50,57,47,66,SP,243;   IN THE FORM
	BYTE	(8)SP,67,53,50,SP,253,EOS;
CS58:	BYTE	(8)243,SP,265,SP,EOS;	IN FORMULA#
CS59:	BYTE	(8)27,70,60,45,50,65,141,62;	NUMBER-OF-TIMES
	BYTE	(8)51,141,266,SP,CS,23,135,SP,0,EOS;  MUST BE ...
CS60:	BYTE	(8)CS,16,CS,17,270,EOS;  CAN'T FIND FILE
CS61:	BYTE	(8)CS,16,CS,17,271,EOS;  CAN'T FIND ITEM
CS62:	BYTE	(8)CS,25,22,15,153,66,SP,67;
	BYTE	(8)62,SP,5,SP,57,50,67,67,50,65,66,SP;
	BYTE	(8)200,143,201,SP,47,54,52,54,67,66,EOS;
;	PLEASE LIMIT ID'S TO 5 LETTERS AND/OR DIGITS
CS63:	BYTE	(8)60,70,66,67,SP,45,50,SP;
	BYTE	(8)63,62,66,54,67,54,71,50;
	BYTE	(8)SP,54,61,67,50,52,50,65,SP,134,SP,EOS;
;	MUST BE POSITIVE INTEGER <=
CS64:	BYTE	(8)274,SP,CS,24,CS,32,CS,34,EOS;
;	FILE NUMBER MUST BE ...
CS65:	BYTE	(8)22,67,50,60,SP,CS,24,CS,32,CS,34,EOS;
;	ITEM NUMBER MUST BE ..
CS66:	BYTE	(8)42,62,70,SP,53,44,71,50;	U HAVEN'T
	BYTE	(8)61,153,67,SP,67,62,57,47;	TOLD ME WHAT
	BYTE	(8)SP,60,50,SP,72,53,44,67;	FILE TO
	BYTE	(8)SP,270,SP,67,62,SP,70,66,50,EOS;	USE
CS67:	BYTE	(8)22,153,71,50,SP,65,70,61;	I'VE RUN
	BYTE	(8)SP,62,70,67,SP,62,51,SP;	OUT OF
	BYTE	(8)270,SP,66,63,44,46,50,EOS;	FILE SPACE
CS68:	BYTE	(8)34,62,60,50,67,53,54,61;	SOMETHING'S
	BYTE	(8)52,153,66,SP,72,65,62,61;
	BYTE	(8)52,DOT,EOS;	WRONG.
CS69:	BYTE	(8)CS,33,SP,35,65,74,SP,44;   SOMETHING'S WRONG.
	BYTE	(8)52,44,54,61,EOS;	TRY AGAIN.
CS70:	BYTE	(8)CS,33,SP,34,44,74,SP,44;  SOMETHING'S WRONG.
	BYTE	(8)52,44,54,61,EOS;	SAY AGAIN.
CS71:	BYTE	(8)CS,33,SP,CS,27,44,46,46;  SOMETHING'S WRONG.
	BYTE	(8)50,66,66,SP,67,53,50,SP;     I CAN'T
	BYTE	(8)270,66,EOS;     ACCESS THE FILES.

CS72:	BYTE	(8)31,57,50,44,66,50,SP,47;	PLEASE DELETE
	BYTE	(8)54,66,46,44,65,47,SP,67;	THE ITEM
	BYTE	(8)53,50,SP,271,SP,201,SP,70;	OR USE A NEW
	BYTE	(8)66,50,SP,44,SP,61,50,72;	ITEM NR.
	BYTE	(8)SP,271,SP,61,70,60,45,50,65,EOS;
CS73:	BYTE	(8)31,57,50,44,66,50,SP,70;
	BYTE	(8)66,50,SP,63,44,65,50,61;
	BYTE	(8)66,SP,62,65,SP,45,65,44;
	BYTE	(8)46,56,50,67,66,SP,67,62;
	BYTE	(8)SP,66,50,67,141,62,51,51;
		BYTE	(8)SP,44,60,45,54,52,70,62;
	BYTE	(8)70,66,SP,50,64,70,44,57;
	BYTE	(8)66,SP,66,54,52,61,66,EOS;
CS74:	BYTE	(8)CS,15,44,EOS;     I HAVE A

	SUBTTL	ST53
;		USED TO CONVERT BYTE INDICES TO POINTERS
	XWD	41000,0;
	XWD	341000,1;
	XWD	241000,1;
	XWD	141000,1;
	XWD	41000,1;
ST53:	XWD	341000,2;
	XWD	241000,2;
ST53X:	XWD	141000,2;
	SUBTTL;	T51 -- DESCRIPTORS FOR TEMINAL BYTES
;		T51 IS SOMETIMES CALLED T58
;		USED MAINLY BY P51
;
T51:	XWD	-1,1;	0
		XWD	-1,1;	1
	XWD	-1,1;	2
	XWD	-1,1;	3
	XWD	-1,1;	4
	XWD	-1,1;	5
	XWD	-1,1;	6
	XWD	-1,1;	7
	XWD	-1,1;	8
	XWD	-1,1;	9
	XWD	0,V+0;	A (UC)
	XWD	0,V+2;	B
	XWD	0,V+4;	C
	XWD	0,V+6;	D
	XWD	0,V+10;	E
	XWD	0,V+12;	F
	XWD	0,V+14;	G
	XWD	0,V+16;	H
	XWD	0,V+20;	I
	XWD	0,V+22;	J
	XWD	0,V+24;	K
	XWD	0,V+26;	L
	XWD	0,V+30;	M
	XWD	0,V+32;	N
	XWD	0,V+34;	O
	XWD	0,V+36;	P
	XWD	0,V+40;	Q
	XWD	0,V+42;	R
	XWD	0,V+44;	S
	XWD	0,V+46;	T
	XWD	0,V+50;	U
	XWD	0,V+52;	V
	XWD	0,V+54;	W
	XWD	0,V+56;	X
	XWD	0,V+60;	Y
	XWD	0,V+62;	Z
	XWD	0,V+64;	A (LC)
	XWD	0,V+66;	B
	XWD	0,V+70;	C
	XWD	0,V+72;	D
	XWD	0,V+74;	E
	XWD	0,V+76;	F
	XWD	0,V+100;	G
	XWD	0,V+102;	H
	XWD	0,V+104;	I
	XWD	0,V+106;	J
	XWD	0,V+110;	K
	XWD	0,V+112;	L
	XWD	0,V+114;	M
	XWD	0,V+116;	N
	XWD	0,V+120;	O
	XWD	0,V+122;	P
	XWD	0,V+124;	Q
	XWD	0,V+126;	R
	XWD	0,V+130;	S
	XWD	0,V+132;	T
	XWD	0,V+134;	U
	XWD	0,V+136;	V
	XWD	0,V+140;	W
	XWD	0,V+142;	X
	XWD	0,V+144;	Y
	XWD	0,V+146;	Z
	XWD	10,14;	BAD
	XWD	10,14;	BAD -- BREAK CODE FOR COMMENTARY STRINGS!
	REPEAT	20,<XWD  -1,3;    EOC>
	XWD	2,0;	(
	XWD	10,0;	)
	XWD	2,1;	[
	XWD	10,1;	]
	XWD	3,2;	ABVAL
	XWD	2,0;	ALPHA

	XWD	10,0;	OMEGA1
	XWD	10,3;	OMEGA2
T51.6:	XWD	7,13;	=
T51.61:	XWD	7,14;	NOT =
	XWD	7,15;	<
	XWD	7,16;	>
	XWD	7,17;	<=
	XWD	7,20;	>=
	XWD	10,14;	BAD
	XWD	10,14;	BAD
T51.1:	XWD	4,3;	+
T51.2:	XWD	4,4;	-
	XWD	4,5;	TIMES
	XWD	4,6;	/
	XWD	4,7;	*
	XWD	10,14;	BAD
	XWD	10,14;	BAD
T51.31:	XWD	10,15;	UC TAB
	XWD	10,7;	PG
	XWD	10,7;	CR
	XWD	10,15;	LC TAB
	XWD	10,11;	'
T51.10:	XWD	10,12;	"
	XWD	-1,2;	UNDERSCORE
T51.16:	XWD	10,14;	   #
	SYN	T51.16,T51.7;
	XWD	6001,LINE;	$
	XWD	-1,1;	.
T51.4:	XWD	10,2;	;
T51.23:	XWD	10,3;	;
	SYN	T51.4,T51.22;	END OF CONDITIONAL ITEM
T51.14:	XWD	10,4;	:
	XWD	10,6;	?
T51.5:	XWD	10,10;	EOS
T51.8:	XWD	10,5;	PERIOD
	XWD	10,2;	SPECIAL COMMA
	XWD	-1,0;	1 SPACE
	XWD	-1,0;	2 SPACES
	XWD	-1,0;	3
	XWD	-1,0;	4
	XWD	-1,0;	5
	XWD	-1,0;	6
	XWD	-1,0;	7
	XWD	-1,0;	8 SPACES
T51.3:	XWD	6,11;	AND
	XWD	6,12;	OR
	XWD	5,10;	NOT
	XWD	4001,0;	SQRT
	XWD	4001,4;	LOG
	XWD	4001,2;	EXP
	XWD	4001,6;	SIN
	XWD	4001,10;	COS
	XWD	4001,12;	ARG
	XWD	4001,14;	IP
	XWD	4001,16;	FP
	XWD	4001,20;	DP
	XWD	4001,22;	XP
	XWD	4001,24;	SGN
	XWD	5001,2;	MAX
	XWD	5001,3;	MIN
	XWD	11,0;	SET
T51.20:	XWD	11,1;	LET
T51.17:	XWD	11,2;	DO
T51.19:	XWD	11,3;	TYPE
	XWD	11,4;	DELETE
	XWD	11,5;	LINE
	XWD	11,6;	PAGE
T51.18:	XWD	11,7;	CANCEL
	XWD	11,10;	GO
	XWD	11,11;	TO
	XWD	11,12;	DONE
	XWD	11,13;	STOP
	XWD	11,14;	DEMAND
T51.15:	XWD	11,15;	FORM (DECLARATIVE)
	XWD	2011,2;	STEPS
	XWD	2011,1;	PARTS
	XWD	2011,3;	FORMS
	XWD	2011,5;	VALUES
	XWD	3011,0;	ALL
T51.13:	XWD	4011,2;	IN
T51.12:	XWD	4011,3;	FOR
	XWD	4011,0;	IF
	XWD	5011,1;	SIZE
	XWD	5011,2;	TIME
	XWD	5011,3;	USERS
T51.25:	XWD	1011,2;	STEP
T51.26:	XWD	1011,1;	PART
T51.21:	XWD	1011,3;	FORM
	XWD	5001,0;	SUM
	XWD	2011,4;	FORMULAS
	XWD	5001,1;	PRODUCT
T51.9:	XWD	4011,1;	SPECIAL IF
	XWD	4001,26;	TV
	XWD	11,16;	PARENTHETICAL DO
	XWD	11,17;	PARENTHETICAL CANCEL
	XWD	1,FALSE;
	XWD	1,TRUE;
T51.32:	XWD	1011,4;	FORMULA
T51.24:	XWD	4011,4;	TIMES
	XWD	5001,4;	FIRST

T51.27:	XWD	1011,7;	FILE
T51.29:	XWD	1011,6;	ITEM
T51.28:	XWD	4011,5;	AS
	XWD	11,20;	RELEASE
	XWD	11,21;	FILE (VERB)
	XWD	11,22;	RECALL
	XWD	11,23;	USE
	XWD	11,24;	QUIT
T51.30:	XWD	4011,6;	LIST
T51.35:	XWD	7001,UMIN;	TIMER
T51.33:	XWD	4011,7;	BE
T51.34:	XWD	4011,10;	SPARSE
	XWD	11,25;	RESET
	SUBTTL	T47 -- FUNCTION HEADERS
	DEFINE	LSMFT(P,Q,R);
	<XWD	0,P;
	XWD	Q,R;>
;
T47:	XWD	0,SP6;	SQRT
T47.1:	XWD	1,1;
	LSMFT	SP7,1,1;	EXP
	LSMFT	SP8,1,1;	LOG
	LSMFT	SP9,1,1;	SIN
	LSMFT	SP10,1,1;	COS
	LSMFT	SP11,2,1;	ARG
	LSMFT	SP12,1,1;	IP
	LSMFT	SP13,1,1;	FP
	LSMFT	SP14,1,1;	DP
	LSMFT	SP15,1,1;	XP
	LSMFT	SP16,1,1;	SGN
	LSMFT	SP19,1,1;	TV
T47.2:	LSMFT	SP20,-1,1;	SUM
	LSMFT	SP21,-1,1;	PRODUCT
	LSMFT	SP17,-1,1;	MAX
	LSMFT	SP18,-1,1;	MIN
	SUBTTL	;     VARIOUS TABLES FOR MAIN PROGRAMS
;		TABLE OF OPERATOR WEIGHTS
;		LEFT HALF = LEFT WEIGHT
;		RIGHT HALF = RIGHT WEIGHT

T53:	OCT	0;	(
	OCT	0;	LEFT BRACKET
	OCT	0;	ABVAL BAR
	XWD	60,60;	+
	XWD	60,60;	-
	XWD	70,70;	TIMES
	XWD	70,70;	/
	XWD	110,110;	*
	XWD	40,0;	NOT
	XWD	30,30;	AND
	XWD	20,20;	OR
	XWD	50,50;	=
	XWD	50,50;	NOT =
	XWD	50,50;	LESS
	XWD	50,50;	GREATER
	XWD	50,50;	NOT GREATER
	XWD	50,50;	NOT LESS
	XWD	100,100;	UNARY PLUS
	XWD	100,100;	UNARY MINUS
	XWD	10,0;	BACK STOP
	PAGE;
;		TABLE OF ASSOCIATES FOR SELECTED OPERATORS

T54:	XWD	10,0;	)
	XWD	10,1;	RIGHT BRACKET
	XWD	3,2;	ABVAL BAR
	XWD	4,21;	UNARY PLUS
	XWD	4,22;	UNARY MINUS
	PAGE;
;		T55 -- OPERATOR ACTIONS ON LEAVING CONTEXT II

T55:	PJ	E5;	(
	PJ	E5;	LEFT BRACKET
	PJ	E5;	ABVAL
	JRST	P47;	+
	JRST	P47;	-
	JRST	P47;	TIMES
	JRST	P47;	/
	JRST	P47;	*
	PJ	E5;	NOT
	JRST	P45;	AND
	JRST	P45;	OR
	JRST	T55X;	=
	JRST	P49.1;	NOT =
	JRST	P46;	LESS
	JRST	P46;	GREATER
	JRST	P46;	NOT GREATER
	JRST	P46;	NOT LESS
		PJ	E5;	UNARY PLUS
	PJ	E5;	UNARY -
	PJ	E5;	BACK STOP

T55X:	CN	CP,K49;	GOVERNED BY RHS EVALUATION?
	PJ	E60;	DO NOT LIKE IT!
	CN	CP,K50;
	PJ	E60;
	CN	CP,K51;
	PJ	E5;
	J	P49.1;


	PAGE;
;		T56 -- MAIN PROCESSORS FOR OPS

T56:	JRST	MP1;	(
	JRST	MP1;	LEFT BRACKET
	JRST	MP2;	ABVAL
	JRST	MP3;	+
	JRST	MP3;	-
	JRST	MP3;	TIMES
	JRST	MP3;	/
	JRST	MP3;	*
	JRST	MP6;	NOT
	JRST	MP5;	AND
	JRST	MP5;	OR
	JRST	MP7;	=
		JRST	MP7;	NOT =
	JRST	MP7;	LESS
	JRST	MP7;	GREATER
	JRST	MP7;	NOT GREATER
	JRST	MP7;	NOT LESS
	JRST	MP4;	UNARY PLUS
	JRST	MP4;	UNARY -
	JRST	MP8;	BACK-STOP
	PAGE;
;		T57 -- SUB PROCESSORS FOR OPS

T57:	PJ	E5;	(
	PJ	E5;	LEFT BRACKET
	TLZ	A1,400000;	ABVAL
	PUSHJ	CR,SP1;	+
	PUSHJ	CR,SP2;	-
	PUSHJ	CR,SP3;	TIMES
	PUSHJ	CR,SP4;	/
	PUSHJ	CR,SP5;	*
	XOR	A1,TRUE;	NOT
	AND	A1,B1;	AND
	IOR	A1,B1;	OR
	CAIE	B,0;	=
	CAIN	B,0;	NOT =
	CAIL	B,0;	LESS
	CAIG	B,0;	GREATER
	CAILE	B,0;	NOT GREATER
	CAIGE	B,0;	NOT LESS
	PUSHJ	CR,SP1.2;	UNARY PLUS
	PUSHJ	CR,T57.2;	UNARY MINUS
	PJ	E5;	BACK-STOP CHARACTER


T57.2:	XOR	A1,MASK8;
	CN	A1,MASK8;
	SETZ	A1,0;	GUARD AGAINST MINUS ZERO
	J	SP1.2;

	SUBTTL	T59
;		SWITCH TO V-ROUTINES 

T59:	J	V1;	SET
	J	V2;	LET
	J	V4;	DO
	J	V3;	TYPE
	J	V5;	DELETE
	J	V6;	LINE
	J	V7;	PAGE
	J	V8;	CANCEL
	J	V9;	GO
	J	V10;	TO
	J	V11;	DONE
	J	V12;	STOP
	J	V13;	DEMAND
	PJ	E5;	FORM
	J	V4A;	PARENTHETICAL DO
	J	V8A;	PARENTHETICAL CANCEL
	J	D57;	RELEASE
	J	D58;	FILE
	J	D59;	RECALL
	J	D56;	USE
	J	V15;	QUIT
	J	V16;	RESET

	SUBTTL	T60
;		TABLE OF INDENTATION STRINGS
	BYTE	(8)177,177,170,165;
	BYTE	(8)177,177,165;
	BYTE	(8)177,176,165;
	BYTE	(8)177,175,165;
	BYTE	(8)177,174,165;
	BYTE	(8)177,173,165;
	BYTE	(8)177,172,165;
	BYTE	(8)177,171,165;
	BYTE	(8)177,170,165;
	BYTE	(8)177,165,
	BYTE	(8)176,165,
	BYTE	(8)175,165,
	BYTE	(8)174,165,
	BYTE	(8)173,165,
	BYTE	(8)172,165,
	BYTE	(8)171,165,
	BYTE	(8)170,165,
	BYTE	(8)165,
T60:	XWD	41000,T60-2;

	EXTERN T61

	END