.PROCEDURE NEWLINE;
.BEGIN OUT2('106612);
.END;
.PROCEDURE NOTDECLAREDCHECK;
.BEGIN .WHEN TYPE .NZ .THEN
.WHEN LEVEL =
CLEVEL .THEN FAIL(
DECTWICE);
.END;
.PROCEDURE NUMBER;
.INTEGER N;
.BEGIN .IF BASIC(
MINUSSYMBOL)
.THEN
.BEGIN NBS;
I := -1;
.END .ELSE I :=
.Z;
VALUE :=
.Z;
.IF BASIC(
OCTALSYMBOL)
.THEN
L1:
.BEGIN NBS;
.WHEN BS .LE SEVENSYMBOL .THEN
.WHEN @ -
ZEROSYMBOL .GEZ .THEN
.BEGIN VALUE := @
.SHDRL 3 +
VALUE .SHDLL 3;
.GOTO L1;
.END;
.END
.ELSE
.BEGIN
.IF DIGIT .THEN
VALUE :=
BS -
ZEROSYMBOL
.ELSE FAIL(
NONNUMERIC);
L2:
NBS;
.WHEN DIGIT .THEN
.BEGIN
N :=
BS - '260;
VALUE :=
VALUE .SHSLA 3 +
VALUE +
VALUE +
N;
.GOTO L2;
.END;
.END;
EXIT:
.WHEN I .LZ .THEN VALUE :=
.NEG VALUE;
.END;
.CONDITIONAL .PROCEDURE NUMERICAL;
.BEGIN
.WHEN BASIC(
OCTALSYMBOL)
.THEN .GOTO OK;
.WHEN BASIC(
MINUSSYMBOL)
.THEN .GOTO OK;
.WHEN DIGIT .THEN
OK:
.EXITTRUE;
.END;
@
.PROCEDURE OCTAL3;
.INTEGER TX;
.BEGIN @ := @
.SHDRL 9;
OUT1(
SPACE);
.FOR TX := -3
.DO
OUT1(
.Z .SHDLL 3 + '260);
.END;
@
.PROCEDURE OUTSIX;
.BEGIN %
IAB;
OUT1(
SPACE); @ :=
.Z .SHDLL 1;
.FOR # := -6
.DO
.BEGIN OUT1(@ +
ZEROSYMBOL); @ :=
.Z .SHDLL 3;
.END;
.END;
@
.PROCEDURE OUT1;
.BEGIN %
SKS,'104; %
JMP,*-1; %
OCP,'104;
%
OTA,4; %
JMP,*-1;
.END;
@
.PROCEDURE OUT2;
.BEGIN OUT1(
.SWOP @ );
OUT1 (
.SWOP @);
.END;
@
.PROCEDURE OUT3X;
.INTEGER H,
I;
.BEGIN @ := @
.SHDRL 15;
.FOR I := -3
.DO
.WHEN .Z .SHDLL 5
.NZ .THEN
.IF @ =
FLAGSYMBOL .THEN IDFLAG := -1
.ELSE
.BEGIN H := @; %
IRS,
TAB;
.IF IDFLAG .LZ .THEN
.BEGIN IDFLAG :=
.Z; @ :=
H +
DDCONSTANT
.END .ELSE .IF H .LE 26
.THEN @ := @ +
LCONSTANT
.ELSE @ := @ +
DCONSTANT;
OUT1(@);
.END;
.END;
@
.PROCEDURE PLUGJUMP;
.INTEGER WHERE TO;
.BEGIN
WHERE TO := @;
INDEX :=
UNSTACK +
LSTART;
CODE[#] :=
JMPSO +
WHERE TO;
.END;
@
.PROCEDURE BACKPLUG;
.INTEGER INSTADD;
.BEGIN
INSTADD := @;
.WHEN LA > '777
.THEN .GOTO IGNORE;
@ :=
INSTADD;
AGAIN:
INDEX := @ +
LSTART;
INSTADD :=
CODE[#];
CODE[#] := @
.AND '177000 +
LA;
@ :=
INSTADD .AND '777;
.WHEN @
.NE '777
.THEN .GOTO AGAIN;
IGNORE:
.END;
@
.CONDITIONAL .PROCEDURE BASIC;
.INTEGER COMPARE;
.BEGIN
COMPARE := @;
.WHEN BS =
COMPARE .THEN .EXITTRUE;
.END;
.CONDITIONAL .PROCEDURE BSCOMMA;
.BEGIN
.WHEN BASIC(
COMMASYMBOL)
.THEN .EXITTRUE;
.END;
@
.CONDITIONAL .PROCEDURE BSIS;
.BEGIN INDEX := @;
.WHEN LETTER .THEN .EXITFALSE;
MORE:
.WHEN .CLEFT OPTABLE[#] =
BS .THEN
.BEGIN %
STX,
ADDBS;
.EXITTRUE;
.END;
.WHEN @
.NZ .THEN
.BEGIN INDEX :=
.INC .ICLEFT OPTABLE[#] +
INDEX;
.GOTO MORE;
.END;
.END;
.PROCEDURE PRINTNAMELISTENTRY;
.BEGIN
NEWLINE;
PRINTIDENT; %
IRS,0;
OCTAL3(
NAMELIST[#]); %
IRS,0;
OUTSIX(
NAMELIST[#]);
.END;
.PROCEDURE PROCCALL;
.BEGIN ENTER;
.IF TYPE .AND '177774 =
PROC .THEN
.BEGIN
.WHEN TYPE .ODD .THEN
.BEGIN FAILIFNOT(
LRBSYMBOL);
ID :=
.Z;
STACK(
ADD);
EXPRESSION;
.WHEN BSCOMMA .THEN
.BEGIN
NBS;
GENERATE(
IAB);
EXPRESSION;
.END;
.WHEN BSCOMMA .THEN
.BEGIN
NBS;
CELL;
GENVADDINST(
LDX);
.END;
ADD :=
UNSTACK;
FAILIFNOT(
RRBSYMBOL);
.END;
GENERATE(
JSTI +
ADD);
.END .ELSE FAIL(
NOTAPROC);
LEAVE;
.END;
@
.PROCEDURE DAPDECODE;
.BEGIN
.FOR # :=
MCODESIZE .DO
.BEGIN
%
IRS,0;
.WHEN @ =
MCODE[#]
.THEN .GOTO FOUND;
.END;
@ :=
.Z;
.GOTO EXIT;
FOUND:
INDEX :=
INDEX - 1;
@ :=
MCODE[#];
EXIT: ;
.END;
@
.PROCEDURE PUTADD;
.BEGIN # :=
POS; %
IRS,0;
NAMELIST[#] := @;
.END;
.PROCEDURE SDEBUG;
.BEGIN & DUMMY PROCEDURE, CODEWORD MAY BE OVERWRITTEN
.END;
.PROCEDURE SETFJADD;
.BEGIN
FJADD :=
LA;
%
IRS,
LA;
.END;
@
.PROCEDURE PUTARRAYVALUE;
.INTEGER VAL;
.BEGIN
VAL := @;
.IF K .GE SIZE .THEN
FAIL(
TOOMANYVALUES)
.ELSE
.BEGIN
INDEX :=
LOCAL +
K;
CODE[#] :=
VAL;
%
IRS,
K;
.END;
.END;
.PROCEDURE SETIDENT;
.INTEGER DOUBLE,
I;
.BEGIN
IDFLAG,
IDENT2,
DOUBLE :=
.Z;
.IF IDSYMBOL .THEN IDENT1 := @
.ELSE FAIL(
NOTALETTER);
.FOR I := -2
.DO
.BEGIN
.IF IDSYMBOL .THEN
IDENT1 := @
.SHDRL 5 +
IDENT1 .SHDLL 5
.ELSE .GOTO FIN;
.END;
.FOR I := -3
.DO
.BEGIN
.IF IDSYMBOL .THEN
.BEGIN IDENT2 := @
.SHDRL 5 +
IDENT2 .SHDLL 5;
DOUBLE := '100000;
.END .ELSE .GOTO FIN;
.END;
.WHILE IDSYMBOL .DO;
FIN:
RETAIN :=
BS;
KEPT := -1;
IDENT1 :=
IDENT1 +
DOUBLE;
.END;
.NEXTSECTOR;
& ***************************
.PROCEDURE SETWORD;
.BEGIN
INDEX :=
.IF ADD .GE '1000
.THEN
@ - '1000 +
LSTART .ELSEACC;
CODE[#] :=
VALUE;
.END;
@
.PROCEDURE STACK;
.BEGIN ST[
STACKPOINTER] := @;
%
IRS,
STACKPOINTER;
.GOTO EXIT;
FAIL(
STFULL);
EXIT:
.END;
.PROCEDURE CASESTATEMENT;
.BEGIN
ENTER;
NBS;
CELL;
GENVADDINST(
LDX);
FAILIFNOT(
OFSYMBOL);
FAILIFNOT(
LRBSYMBOL);
GENERATE('143777);
& JMP * : '1777
ANOTHER:
STACK(
LA - 1);
STACK(
STMARK);
.IF STMARK .LZ .THEN STATEMENT .ELSE EXPRESSION;
STMARK :=
UNSTACK;
GENERATE(
UNSTACK +
JMPSO);
.WHEN BSCOMMA .THEN
.BEGIN
NBS;
.GOTO ANOTHER;
.END;
STACK(
.Z);
& MARKER IN STACK
J,
K :=
LA - 1;
.GOTO JUMPIN;
LOOP:
.WHEN K = '777
.THEN .GOTO SETUP;
STACK(
LSTART +
K + 1);
JUMPIN:
INDEX :=
K +
LSTART;
K :=
CODE[#]
.AND '777;
.GOTO LOOP;
SETUP:
.WHILE UNSTACK .NZ .DO GENERATE(@);
BACKPLUG(
J);
FAILIFNOT(
RRBSYMBOL);
LEAVE;
.END;