Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-02 - decus/20-0035/algol1.met
There are 2 other files named algol1.met in the archive. Click here to see a list.
00100	.SYNTAX ALGOLW
00200	
00300	.INTERNAL AC,ARGCT,ARGNUM,STATEMENT,ENDBLK,STRTMP,REFTMP
00400	.EXTERNAL FORST,CASEST,WHILEST,IFST,INTASSI,REFASSI,STRASSI
00500	.EXTERNAL BUILTIN,INTEXPR,BLTINPROC,ARGGET
00600	
00700	.INTEGER UNLBL,ARGCT,I,AC,STRTMP,REFTMP
00800	
00900	.COMMENT DICTIONARY FLAGS: 1-STRING, 2-USES DOPE VECTOR;
01000	.COMMENT 3-INTEGER, 4-REFERENCE, 5-RECORD, 6-FIELD, 7-ARRAY;
01100	.COMMENT 8-LABEL, 9-PROCEDURE, 10-PARAMETER, 11-ONE DIMENSION;
01200	.COMMENT 12-TWO DIMENSIONS, 13-SCALAR, 14-LABEL USED IN HIGHER LEVEL BLOCK;
01300	.COMMENT 15-BLOCK VARIABLE, 16-UNALLOCATED RECORD VARIABLE;
01400	.COMMENT 17-DEFINED LABEL, 18-20-PARAMETER NUMBER, 21-CONTROL VARIABLE;
01500	.COMMENT 22-STRING TEMPORARY, 23-EXTERNAL PROCEDURE CALLED, 24-BITS;
01600	.COMMENT 25-BUILT IN PROCEDURE, 26-34-INDICATES WHICH PROCEDURE;
01700	.COMMENT 35-BOOLEAN, 36-VARIABLE LENGTH STRING;
01800	.COMMENT 26-ALSO USED TO INDICATE CONTROL VARIABLE IN USE;
01900	
02000	STRDEC: .PEEK("STRING" "(") (.NUMBER .IF(*.NE.0) %1 / "*" #1"0") ")"
02100	 ("ARRAY " ^1%1 .IF(*.NE.0) ARRAYDEC .SET 1
02200	 .OUT("MOVSI"-"(POINT 7,0)")
02300	 .OUT("MOVEM"-"$"B#"."S#"("^3%3*")")
02400	 .OUT("ASTRA"-"^D"^1*",$"B#"."S#"("^3%3*")")
02500	 /.ID .ENTERC .SET 1 .SET 2 .SET 13 ^1%1 (.IF(*.EQ.0) .SET 36/.EMPTY)
02600	 .OUT("MOVSI"-"(POINT 7,0)")
02700	 .OUT("MOVEM"-"$"B#"."S#"("^3%3*")")
02800	 ^1 (.IF(*.NE.0) .OUT("MOVSI"-"^D"*)
02900	 .OUT("MOVEM"-"$"B#"."S#"+1("^3%3*")")
03000	 .OUT("ASTRG"-"$"B#"."S#"("^3%3*")")/.EMPTY ))/
03100	 .PEEK("BITS" "(") (.NUMBER .IF(*.NE.0) %1 / "*" #1"0") ")"
03200	 ("ARRAY " ^1%1 .IF(*.NE.0) ARRAYDEC .SET 1 .SET 24 
03300	 .OUT("MOVSI"-"(POINT 1,0)")
03400	 .OUT("MOVEM"-"$"B#"."S#"("^3%3*")")
03500	 .OUT("ASTRA"-"^D"^1*",$"B#"."S#"("^3%3*")")
03600	 /.ID .ENTERC .SET 1 .SET 2 .SET 13 .SET 24 ^1%1 (.IF(*.EQ.0) .SET 36/.EMPTY)
03700	 .OUT("MOVSI"-"(POINT 1,0)")
03800	 .OUT("MOVEM"-"$"B#"."S#"("^3%3*")")
03900	 ^1 (.IF(*.NE.0) .OUT("MOVSI"-"^D"*)
04000	 .OUT("MOVEM"-"$"B#"."S#"+1("^3%3*")")
04100	 .OUT("ASTRG"-"$"B#"."S#"("^3%3*")")/.EMPTY ));
04200	
04300	INTDEC: "INTEGER " 
04400	 ("ARRAY " #1"1" ARRAYDEC .SET 3
04500	 .OUT("MOVSI"-"(POINT ^D36,0)")
04600	 .OUT("MOVEM"-"$"B#"."S#"("^3%3*")")
04700	 .OUT("AARRY"-"^D"^1*",$"B#"."S#"("^3%3*")")
04800	 /.ID .ENTERC .SET 13 .SET 3);
04900	
05000	REFDEC: (.PEEK("REFERENCE" "(") .ID *("," .ID) ")"/"REFERENCE ")
05100	 ("ARRAY " #1"1" ARRAYDEC .SET 4
05200	 .OUT("MOVSI"-"(POINT ^D36,0)")
05300	 .OUT("MOVEM"-"$"B#"."S#"("^3%3*")")
05400	 .OUT("RARRY"-"^D"^1*",$"B#"."S#"("^3%3*")")
05500	 /.ID .ENTERC .SET 13 .SET 4);
05600	
05700	ARRAYDEC: .ID .ENTERC .SET 2 .SET 7 %2
05800	 .OUT("MOVSI"-^1"^D"*)
05900	 .OUT("MOVEM"-"$"B#"."S#"+1("^3%3*")")
06000	 "(" [AC:=-1] INTEXPR ^2%2 .LOOKC "::"
06100	 .OUT("MOVEM"-"$"B#"."S#"+3("^3%3*")")
06200	 [AC:=-1] INTEXPR ^2%2 .LOOKC
06300	 .OUT("MOVEM"-"$"B#"."S#"+4("^3%3*")")
06400	 ("," .SET 12 [AC:=-1] INTEXPR ^2%2 .LOOKC
06500	 "::" .OUT("MOVEM"-"$"B#"."S#"+6("^3%3*")")
06600	 [AC:=-1] INTEXPR ^2%2 .LOOKC ")"
06700	  .OUT("MOVEM"-"$"B#"."S#"+7("^3%3*")")
06800	 #1"2" /")" .SET 11 #1"1") ^2;
06900	
07000	ENDBLK: .OUT("XWD"-"0,0") .OUT("XWD"-"^D"CL#"-1,[ASCIZ/"^1%1*"/]")
07100	 .SETSCAN [*:=CL#+2] %1 %2  #3"" #3"0"
07200	 *(.SCAN
07300	  (.CHECK 13 SET (.CHECK 4 SET (.CHECK 15 SET
07400	   .OUT("$"B#"."S#"="-^1"^D"*) [*:=*+1] %1
07500	   ^2 [*:=*+1] %2 /.EMPTY)/.EMPTY)/.EMPTY))
07600	 .SETSCAN
07700	 *(.SCAN
07800	  (.CHECK 2 SET (.CHECK 15 SET ^3 (.IF(*.GT.0) +#3","/.EMPTY) %3 (.CHECK 11 SET
07900	   .OUT("$"B#"."S#"="-^1"^D"*) [*:=*+5] %1
08000	   ^3 [*:=*+1] +#3"1" %3/.CHECK 12 SET
08100	   .OUT("$"B#"."S#"="-^1"^D"*) [*:=*+8] %1
08200	   ^3 [*:=*+1] +#3"2" %3/.EMPTY
08300	   .OUT("$"B#"."S#"="-^1"^D"*) [*:=*+2] %1
08400	   ^3 [*:=*+1] +#3"0" %3)/.EMPTY)/.EMPTY))
08500	 .SETSCAN
08600	 *(.SCAN
08700	  (.CHECK 13 SET (.CHECK 3 SET (.CHECK 15 SET
08800	   .OUT("$"B#"."S#"="-^1"^D"*) [*:=*+1] %1
08900	   /.EMPTY)/.EMPTY)/.CHECK 21 SET
09000	 .OUT("$"B#"."S#"="-^1"^D"*)
09100	 [*:=*+3] %1/.EMPTY))
09200	 .LABEL("$"C#".R")
09300	 .OUT("XWD"-^1"^D"*",[ASCIZ/PROCESS/]")
09400	 .OUT("XWD"-^2"^D"*",^D"^3*)
09500	 (.IF(*.GT.0) .OUT("BYTE"-"(4) "^3*)/.EMPTY ^3)
09600	 TRACE .SETSCAN [UNLBL:=0]
09700	 *(.SCAN (.CHECK 8 SET (.CHECK 17 CLEAR
09800	  %1 #2"$" #3"$" [*:=B#] +%2 +%3 +#2"." +#3"$" [*:=S#]
09900	  +%2 +%3 [UNLBL:=UNLBL+1]/.EMPTY)/.EMPTY)) .END
10000	  *(.IF(UNLBL.GT.0) [UNLBL:=UNLBL-1] ^1 .ENTERC
10100	   (.CHECK 17 SET .LABEL(^2*) .LABEL(^3*)
10200	    .OUT("MOVE"-"%B,^D"CL#"+2(%B)") .OUT("JRST"-"$"B#"."S#)
10300	   /.EMPTY .SET 8 .SET 14 .LABEL(^2*) .LABEL(^3*) .OUT("JRST"-"$"B#"$"S#)));
10400	
10500	RECSCAN: .SETSCAN #1"0" #2"0" #3"" #3"0"
10600	 *(.SCAN
10700	  (.CHECK 13 SET (.CHECK 4 SET (.CHECK 16 SET
10800	   .CLEAR 16 .OUT("$"B#"."S#"="-^1"^D"*) [*:=*+1] %1
10900	   ^2 [*:=*+1] %2 /.EMPTY)/.EMPTY)/.EMPTY))
11000	 .SETSCAN
11100	 *(.SCAN
11200	  (.CHECK 2 SET (.CHECK 16 SET ^3 (.IF(*.GT.0) +#3","/.EMPTY) %3 (.CHECK 11 SET
11300	   .CLEAR 16 .OUT("$"B#"."S#"="-^1"^D"*) [*:=*+5] %1
11400	   ^3 [*:=*+1] +#3"1" %3/.CHECK 12 SET
11500	   .CLEAR 17 .OUT("$"B#"."S#"="-^1"^D"*) [*:=*+8] %1
11600	   ^3 [*:=*+1] +#3"2" %3/.EMPTY .CLEAR 16
11700	   .OUT("$"B#"."S#"="-^1"^D"*) [*:=*+2] %1
11800	   ^3 [*:=*+1] +#3"0" %3)/.EMPTY)/.EMPTY))
11900	 .SETSCAN
12000	 *(.SCAN
12100	  (.CHECK 13 SET (.CHECK 3 SET (.CHECK 16 SET
12200	   .CLEAR 16 .OUT("$"B#"."S#"="-^1"^D"*) [*:=*+1] %1
12300	   /.EMPTY)/.EMPTY)/.EMPTY))
12400	 ^1%3^1%1 .LOOKC .LABEL("$"B#"$"S#)
12500	 .OUT("XWD"-^3"^D"*",[ASCIZ/"^1*"/]")
12600	 .OUT("XWD"-^2"^D"*",^D"^3*)
12700	 (.IF(*.GT.0) .OUT("BYTE"-"(4) "^3*)/.EMPTY ^3);
12800	
12900	RECORD: "RECORD " .ID %1 .ENTERC .SET 5 "("
13000	 .OUT("JRST"-*1) .LABEL("$"B#"."S#)
13100	 .OUT("ARECD"-"%TB,$"B#"$"S#) #3"%TB"
13200	 ((STRDEC/INTDEC/REFDEC) .SET 16 .SET 6/.PEEK("COMMENT" .NOT(-.ID)) "COMMENT" .UNTIL ";")
13300	 *(";" ((STRDEC/INTDEC/REFDEC) .SET 16 .SET 6 /.PEEK("COMMENT"
13400	   .NOT(-.ID)) "COMMENT" .UNTIL ";"))
13500	 ")" ^3 .OUT("POPJ"-"%P,") RECSCAN .LABEL *1;
13600	
13700	TRACE: .SETSCAN .OUT(";") .OUT(";BLOCK "C#" LEVEL "CL#" "^1%1*)
13800	 *(.SCAN .OUT(";") .OUT(";SYMBOL: "*" = $"B#"."S#)
13900	  (.CHECK 9 SET .OUT(";TYPE: PROCEDURE")/
14000	   .CHECK 8 SET .OUT(";TYPE: LABEL")
14100	    (.CHECK 17 CLEAR .OUT(";AS YET UNDEFINED")/.EMPTY)
14200	    (.CHECK 14 SET .OUT(";USED AT HIGHER BLOCK LEVEL")/.EMPTY)/
14300	   .CHECK 5 SET .OUT(";TYPE: RECORD")/
14400	 .CHECK 21 SET .OUT(";TYPE: INTEGER CONTROL VARIABLE")/
14500	   (.CHECK 1 SET (.CHECK 24 SET .OUT(";TYPE: BITS")/.EMPTY
14600	 .OUT(";TYPE: STRING"))/.CHECK 3 SET .OUT(";TYPE: INTEGER")/
14700	    .CHECK 35 SET .OUT(";TYPE: BOOLEAN") /
14800	    .CHECK 4 SET .OUT(";TYPE: REFERENCE"))
14900	   (.CHECK 11 SET .OUT(";ONE DIMENSIONAL ARRAY")/
15000	    .CHECK 12 SET .OUT(";TWO DIMENSIONAL ARRAY")/.EMPTY)
15100	   (.CHECK 36 SET .OUT(";VARIABLE LENGTH")/.EMPTY)
15200	   (.CHECK 22 SET .OUT(";TEMPORARY")/.EMPTY)
15300	   (.CHECK 6 SET .OUT(";RECORD FIELD")/
15400	    .CHECK 10 SET ARGNUM [*:=ARGCT+1] .OUT(";PROCEDURE PARAMETER #"*)/
15500	    .EMPTY))) .OUT(";");
15600	
15700	ARGNUM: (.CHECK 18 SET [ARGCT:=4]/.EMPTY [ARGCT:=0])
15800	 (.CHECK 19 SET [ARGCT:=ARGCT+2]/.EMPTY)
15900	 (.CHECK 20 SET [ARGCT:=ARGCT+1]/.EMPTY);
16000	
16100	BLOCK: "BEGIN " (.NOT(("INTEGER "/"REFERENCE("/"REFERENCE "/
16200	 "STRING("/"STRING "/"RECORD("/"RECORD "/"BITS("/"BITS "/
16300	 "PROCEDURE("/"PROCEDURE ")) STATEMENT *(";" STATEMENT) "END" .NOT(-.ID)/
16400	 .BEGIN .OUT("BLOCK"-"$"C#".R") #3"%B"
16500	 *(((STRDEC/INTDEC/REFDEC) .SET 15/RECORD/PROCEDURE/EXTERNAL) ";"/
16600	 .PEEK("COMMENT" .NOT(-.ID)) "COMMENT" .UNTIL ";")
16700	 STATEMENT *(";" STATEMENT) "END" .NOT(-.ID) .OUT("MOVE"-"%B,(%B)")
16800	 ^3 .OUT("JRST"-*1) ENDBLK .LABEL *1);
16900	
17000	PROCEDURE: "PROCEDURE " .ID .ENTERC .SET 9
17100	 .OUT("JRST"-*1) SETPROC .LABEL *1;
17200	
17300	SETPROC: %1 .LABEL("$"B#"."S#) .BEGIN
17400	 ("(" [ARGCT:=0] ARG *(";" ARG) ")"/.EMPTY) ";"
17500	 .OUT("PROC"-"$"C#".R")
17600	 ("BEGIN " #3"%B" *(((STRDEC/INTDEC/REFDEC) .SET 15/RECORD/PROCEDURE/EXTERNAL) ";"/
17700	 .PEEK("COMMENT" .NOT(-.ID)) "COMMENT" .UNTIL ";")
17800	  STATEMENT *(";" STATEMENT) "END" .NOT(-.ID) ^3/STATEMENT)
17900	 .OUT("PUSH"-"%P,1(%B)") .OUT("MOVE"-"%B,(%B)")
18000	 .OUT("POPJ"-"%P,") ENDBLK ^1;
18100	
18200	ARG: ("INTEGER " ("ARRAY " .ID .ENTERC .SET 3 ARRAYPARM /
18300	 .ID .ENTERC .SET 3 .SET 13 .SET 10)/
18400	 (.PEEK("REFERENCE" "(") .ID *("," .ID) ")"/"REFERENCE ") ("ARRAY " .ID .ENTERC .SET 4
18500	  ARRAYPARM / .ID .ENTERC .SET 4 .SET 13 .SET 10)/
18600	 .PEEK("STRING" "(") ("*"/.NUMBER) ")" ("ARRAY " .ID .ENTERC .SET 1 ARRAYPARM /
18700	  .ID .ENTERC .SET 1 .SET 13 .SET 10)/
18800	 .PEEK("BITS" "(") ("*"/.NUMBER) ")" ("ARRAY " .ID .ENTERC .SET 1 .SET 24
18900	  ARRAYPARM /.ID .ENTERC .SET 1 .SET 13 .SET 10 .SET 24)/
19000	 "PROCEDURE " .ID .ENTERC .SET 9 .SET 10)
19100	 [I:=ARGCT] [ARGCT:=ARGCT+1]
19200	 (.IF(I.GE.4) [I:=I-4] .SET 18/.EMPTY)
19300	 (.IF(I.GE.2) [I:=I-2] .SET 19/.EMPTY)
19400	 (.IF(I.GE.1) .SET 20/.EMPTY);
19500	
19600	ARRAYPARM: .SET 7 .SET 10 "(" "*" ("," "*" .SET 12/.SET 11) ")";
19700	
19800	STATEMENT: .PEEK(.ID ":" .NOT(-"=")) .ID ":" .ENTERC .SET 8 .SET 17
19900	 (.CHECK 14 SET .OUT("JRST"-"$"B#"."S#) .LABEL("$"B#"$"S#)
20000	  .OUT("MOVE"-"%B,^D"CL#"+2(%B)")/.EMPTY)
20100	 .LABEL("$"B#"."S#) STATEMENT/[AC:=-1] [STRTMP:=1] [REFTMP:=1]
20200	  *(.PEEK("COMMENT" .NOT(-.ID)) "COMMENT" .UNTIL ";")
20300	 UNLBLST *(.PEEK("COMMENT" .NOT(-.ID)) "COMMENT" .UNTIL ";");
20400	
20500	UNLBLST: BLOCK / GOTO / FORST / CASEST / WHILEST / IFST /
20600	 PROCCALL / INTASSI / REFASSI / STRASSI / .EMPTY;
20700	
20800	GOTO: "GO" "TO " .ID .ENTERC .SET 8 .OUT("JRST"-"$"B#"."S#);
20900	
21000	ALGOLW: "BEGIN " BUILTIN .BEGIN .OUT("TITLE"-".ALGOL MAIN PROGRAM")
21100	 .OUT("HISEG") .OUT("RELOC") #1"MAIN PROGRAM" .LABEL ".ALGOL"
21200	 .OUT("TRZA"-"777777") .OUT("TRO"-"777777") .OUT("RESET"-"$"C#".R") #3"%B"
21300	 *(((STRDEC/INTDEC/REFDEC) .SET 15/RECORD/PROCEDURE/EXTERNAL) ";"/
21400	 .PEEK("COMMENT" .NOT(-.ID)) "COMMENT" .UNTIL ";")
21500	 STATEMENT *(";" STATEMENT) "END" "." .OUT("EXIT")
21600	 ^3 ENDBLK ^1 ENDPRG .OUT("END"-".ALGOL")/
21700	 "PROCEDURE " BUILTIN .ID .ENTERC .SET 9 .OUT("TITLE"-*) %2 .OUT("HISEG")
21800	 .OUT("RELOC") .OUT("ENTRY"-*) .LABEL * SETPROC "." ^2 .LOOK .CLEAR 23 ENDPRG .OUT("END");
21900	
22000	EXTERNAL: "EXTERNAL " "PROCEDURE " .ID .ENTERC .SET 9
22100	 .OUT("EXTERN"-*) .OUT("$"B#"."S#"="-*)
22200	 ("(" [ARGCT:=0] .BEGIN ARG *(";" ARG) ")" .END /.EMPTY);
22300	
22400	PROCCALL: .PEEK(.ID .LOOK .CHECK 9 SET) (.CHECK 25 SET BLTINPROC / .SET 23
22500	 ("(" [ARGCT:=1] %1 .OUT("JRST"-*1) .LABEL *2 #1"0"
22600	 PROCARG *("," [ARGCT:=ARGCT+1] PROCARG) ")" ^1[I:=*]
22700	 *(.IF(I.GT.0) [I:=I-1] .LABEL("$"^3*) .OUT("BITS"-^2*)) .LABEL *1 ^1 .LOOK
22800	 [*:=ARGCT] .OUT("PUSH"-"%P,[Z ^D"*","*2"]")/
22900	 .EMPTY .OUT("PUSH"-"%P,[0]"))
23000	 (.CHECK 10 SET #2"1" ARGGET / .OUT("PUSHJ"-"%P,$"B#"."S#)));
23100	
23200	PROCARG:("-" .NUMBER [*:=-*] /.NUMBER)
23300	 .OUT("Z"-"%T") .OUT("ERROR"-"[EXP 0,0]")
23400	 .OUT("MOVE"-"%0,[DEC "*"]") .OUT("ERROR"-"[EXP 0,0]")/
23500	 "#" -.NUMBER .OUT("Z"-"%T") .OUT("ERROR"-"[EXP 0,0]")
23600	 .OUT("PUSHJ"-"%P,[MOVE %0,[POINT 1,"*3"]") %2 .*3 %3 ^1[*:=*+1]%1
23700	 .OUT("MOVSI"-"%1,^D"^2%2*L) .OUT("POPJ"-"%P,]")
23800	 .OUT("ERROR"-"[EXP 0,0]")/
23900	 .STRING .OUT("Z"-"%T") .OUT("ERROR"-"[EXP 0,0]")
24000	 (.IF(*L.GT.2) .OUT("PUSHJ"-"%P,[MOVE %0,[POINT 7,[ASCII"*"]]")
24100	 /.EMPTY .OUT("PUSHJ"-"%P,[MOVSI %0,(POINT 7,0)"))
24200	  .OUT("MOVSI"-"%1,^D"*L"-2") .OUT("POPJ"-"%P,]")
24300	  .OUT("ERROR"-"[EXP 0,0]")/
24400	 .PEEK("NULL" .NOT(-.ID)) "NULL" .OUT("Z"-"%T") .OUT("ERROR"-"[EXP 0,0]")
24500	  .OUT("MOVEI"-"%TB,0") .OUT("ERROR"-"[EXP 0,0]")/
24600	 .ID .LOOK .CHECK 25 CLEAR .CHECK 8 CLEAR .CHECK 6 CLEAR .CHECK 5 CLEAR 
24700	  (.IF(CL#.EQ.BL#) .OUT("Z"-"%T")/.EMPTY .OUT("Z"-"^D"BL#"+2(%T)"))
24800	  (.CHECK 9 SET .OUT("PUSHJ"-"%P,$"B#"."S#)
24900	   .OUT("ERROR"-"[EXP 0,0]") .OUT("ERROR"-"[EXP 0,0]")/
25000	 .CHECK 10 SET ARGNUM #3"1" ARGARG #3"2" ARGARG #3"3" ARGARG/
25100	 .CHECK 7 SET .OUT("MOVEI"-"%,$"B#"."S#"(%T)")
25200	  .OUT("ERROR"-"[EXP 0,0]") .OUT("ERROR"-"[EXP 0,0]") /
25300	  (.CHECK 1 SET .OUT("SUBST"-"%0,$"B#"."S#"(%T)")/
25400	  .OUT("ERROR"-"[EXP 0,0]"))
25500	  (.CHECK 21 SET .OUT("MOVE"-"%0,$"B#"."S#"(%T)")
25600	   .OUT("ERROR"-"[EXP 0,0]")/.CHECK 13 SET .CHECK 15 SET
25700	   (.CHECK 1 SET .OUT("PUSHJ"-"%P,[MOVE %0,$"B#"."S#"(%T)")
25800	    .OUT("MOVE"-"%1,$"B#"."S#"+1(%T)") .OUT("POPJ"-"%P,]")
25900	   (.CHECK 36 SET .OUT("PUSHJ"-"%P,[MOVEM %0,$"B#"."S#"(%T)")
26000	    .OUT("MOVEM"-"%1,$"B#"."S#"+1(%T)") .OUT("POPJ"-"%P,]")/
26100	    .OUT("SMOVEM"-"%0,$"B#"."S#"(%T)")) /
26200	   .CHECK 3 SET .OUT("MOVE"-"%0,$"B#"."S#"(%T)")
26300	    .OUT("MOVEM"-"%0,$"B#"."S#"(%T)")/
26400	   .CHECK 4 SET .OUT("MOVE"-"%TB,$"B#"."S#"(%T)")
26500	    .OUT("MOVEM"-"%TB,$"B#"."S#"(%T)"))));
26600	
26700	ARGARG: .OUT("PUSHJ"-"%P,[MOVE %AL,2(%T)") .OUT("MOVE"-"%T,(%T)")
26800	 [*:=ARGCT] .OUT("MOVE"-"%T,@4*^D"*"(%AL)")
26900	 .OUT("XCT"-"4*^D"*"+"^3*"(%AL)") .OUT("POPJ"-"%P,]");
27000	
27100	ENDPRG: .SETSCAN *(.SCAN (.CHECK 23 SET .OUT("EXTERN"-*)
27200	 .OUT("$"B#"."S#"="-*)/.EMPTY));
27300	
27400	.END