perm filename TVRHDR.FAI[S,NET] blob
sn#555544 filedate 1983-05-30 generic text, type T, neo UTF8
UNIVERSAL TVRHDR
;MACROS TO MAKE FAIL EASIER
IFNDEF STANSW,<↓STANSW←←1>
DEFINE CAT $(A,B){A$B}
↓P←←17
$←400000
.PLEVEL←←0
.SLEVEL←←0
.ALEVEL←←0
;SUBROUTINE DECLARATIONS. MAKES MACROS FOR SYMBOLS REPRESENTING ARGUMENTS
DEFINE SUBR(NAME,X1,X2,X3,X4,X5,X6)
{ BEGIN NAME
INTERN NAME
XLIST
GLOBAL .PLEVEL
GLOBAL .SLEVEL
GLOBAL .ALEVEL
.SLEVEL←←.SLEVEL+1
CAT(.SBR,→.SLEVEL)←←.PLEVEL
.PLEVEL←←.PLEVEL+1
CAT(.SBA,→.SLEVEL)←←.ALEVEL
IFDIF <><X1>{ DEFARG(X1,→.PLEVEL)
.PLEVEL←.PLEVEL+1
IFDIF <><X2>{ DEFARG(X2,→.PLEVEL)
.PLEVEL←.PLEVEL+1
IFDIF <><X3>{ DEFARG(X3,→.PLEVEL)
.PLEVEL←.PLEVEL+1
IFDIF <><X4>{ DEFARG(X4,→.PLEVEL)
.PLEVEL←.PLEVEL+1
IFDIF <><X5>{ DEFARG(X5,→.PLEVEL)
.PLEVEL←.PLEVEL+1
IFDIF <><X6>{ DEFARG(X6,→.PLEVEL)
.PLEVEL←.PLEVEL+1
}}}}}}
.ALEVEL←←.PLEVEL
LIST
↓NAME: ;}
;DEFINE AN ARGUMENT
DEFINE DEFARG(NAME,LEVEL)
{ DEFINE NAME { LEVEL-.PLEVEL(17)}}
;DEFINE A LOCALS (AND IT BETTER WORK FOR A KA-10 AS WELL, DAMNIT)
DEFINE LOCALS(LST)
{ XLIST
.MTEMP←←.PLEVEL
FOR LOC⊂(LST) < .PLEVEL←←.PLEVEL+1
DEFARG(LOC,→.PLEVEL)↔>
IFG .PLEVEL-.MTEMP-3
< CAML P,[XWD .MTEMP-.PLEVEL,-1]
PUSHJ P,PDLOVL
ADD P,[XWD .PLEVEL-.MTEMP,.PLEVEL-.MTEMP]
>;IFG
IFLE .PLEVEL-.MTEMP-3
<REPEAT .PLEVEL-.MTEMP,
{ PUSH P,[0]
};REPEAT
>;IFLE
LIST }
;END OF SUBROUTINE
DEFINE SUBREND
{ .PLEVEL←←CAT(.SBR,→.SLEVEL)
.ALEVEL←←CAT(.SBA,→.SLEVEL)
.SLEVEL←←.SLEVEL-1
BLOCK 0
BEND }
;GENERATE SUBROUTINE CALL (DOES THE RIGHT THING WITH SYMBOLIC ARGUMENTS)
DEFINE CALL(NAME,X1,X2,X3,X4,X5,X6){
XLIST
GLOBAL .SLEVEL,.PLEVEL
.SLEVEL←←.SLEVEL+1
CAT(.SBR,→.SLEVEL)←←.PLEVEL
IFDIF <><X1>{PUSH 17,X1↔.PLEVEL←.PLEVEL+1
IFDIF <><X2>{PUSH 17,X2↔.PLEVEL←.PLEVEL+1
IFDIF <><X3>{PUSH 17,X3↔.PLEVEL←.PLEVEL+1
IFDIF <><X4>{PUSH 17,X4↔.PLEVEL←.PLEVEL+1
IFDIF <><X5>{PUSH 17,X5↔.PLEVEL←.PLEVEL+1
IFDIF <><X6>{PUSH 17,X6↔.PLEVEL←.PLEVEL+1
}}}}}}
PUSHJ P,NAME
.PLEVEL←←CAT(.SBR,→.SLEVEL)
.SLEVEL←←.SLEVEL-1
LIST}
;PUSH SOMETHING ONTO STACK
DEFINE PUSHP(ARG)
< PUSH P,ARG
.PLEVEL←←.PLEVEL+1
>
DEFINE POPP(ARG)
< POP P,ARG
.PLEVEL←←.PLEVEL-1
>
DEFINE PUSHACS
< PUSHJ P,PUSHIT↑
GLOBAL .PLEVEL
.PLEVEL←←.PLEVEL+20
>
DEFINE POPACS
< PUSHJ P,POPIT↑
GLOBAL .PLEVEL
.PLEVEL←←.PLEVEL-20
>
DEFINE RETURN <XLIST
.MTEMP←←.PLEVEL-CAT(.SBR,→.SLEVEL)
IFN .MTEMP-1,<JRST[SUB P,[XWD .PLEVEL-CAT(.SBR,→.SLEVEL),.PLEVEL-CAT(.SBR,→.SLEVEL)]
JRST @<.ALEVEL-CAT(.SBR,→.SLEVEL)>(P)]
>;IFN
IFE .MTEMP-1 <POPJ P,
>;IFE
LIST >;DEFINE RETURN
;RETURN FROM AN N-ARGUMENT SUBROUTINE CALL. (OBSOLETE - USE RETURN)
IFNDEF POP0J
< DEFINE POP0J <POPJ 17,>
DEFINE POP1J<JRST POP1J.↑>
DEFINE POP2J<JRST POP2J.↑>
DEFINE POP3J<JRST POP3J.↑>
DEFINE POP4J<JRST POP4J.↑>
DEFINE POP5J<JRST POP5J.↑>
>
;ACCUMULATOR AND TEMPORARY DATA MANAGEMENT.
DEFINE ACCUMULATORS(LIST){ ACPTR←←2
IFDEF TAC,< ACPTR←←TAC >
FOR AC⊂(LIST)<AC←ACPTR
ACPTR←←ACPTR+1↔>}
;CHAIN TOGETHER INITIALIZING CODE
DEFINE INITCODE
<IFAVL .INITLINK
< GLOBAL .INITLINK
PUSHJ P,.+2
JRST .INITLINK
↑.INITLINK←←.-2
;> ↑.INITLINK←←.
>
;CHAIN TOGETHER BIT TABLES
DEFINE BITDEFS(BITS)
<IFNDEF .BTLNK < .BTLNK←←0
;> .BTLNK
.BTLNK←←.BTLNK*1000000+$.
.BTABL←←$.
FOR BIT⊂(BITS)
<IFIDN <><BIT>< 0
;> RADIX50 0,BIT
> BLOCK =36+.BTABL-$.
>
DEFINE TAIL
<DOINIT:
IFDEF .INITLINK < PUSHJ P,.INITLINK
> IFDEF .BTLNK < EXTERNAL $M
MOVE [.BTLNK]
SKIPE [$M]
MOVEM $M+3
POP0J
>>
;MAKE RAID KNOW THE FOLLOWING
OPDEF HALT [HALT]
OPDEF JRSTF [JRST 2,]
IODEND←←20000
EXTERNAL JOBFF,JOBREL,JOBSA,JOBREN,JOBSYM,JOBDDT,JOBOPC
END