Trailing-Edge
-
PDP-10 Archives
-
custsupcuspmar86_bb-x130b-sb
-
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