//D1Prin1A.bcpl--Subroutines used by D1Prin1.bcpl
// Last edited: 26 November 1979
get "d1.d"
manifest [ get "d1regmem.d" ]
external [
// MIDAS
MidasSwat
// MASM
SelfRel
// MSYM
SearchBlocks
// MCMD
CmdCommentStream; @WssCSS; WnsCSS; PutsCSS
// D1VM
LookUpVA
// D1PRIN1
ClausePrinted
// D1PRINASM
BCtab
// Defined here
PrinBMux; PrinAMux; CPrint; PrinC; PrinVA; PrinBC; PrinCRAddr
]
let PrinBMux(BDest1,BDest2,BSrc,BSEL,BC2,RAKnown) be
[ CPrint(BDest1,"←")
if BDest2 ne 0 do //Only can be a rd/wrt im/tpc
[ WssCSS(BDest2)
if BC2 ge 0 do //Show the (illegal) b.c., if any
[ PutsCSS($[)
WssCSS(SelfRel(BCtab+BC2))
PutsCSS($])
]
PutsCSS($←)
]
test BSEL < 4
ifso PrinCRAddr(BSrc,RAKnown,false)
ifnot
[ WnsCSS(BSrc); PutsCSS($C)
]
]
and PrinAMux(ADest,ASrc0,ASrc1,ASrc2,AShs1,AShs2,AShsLast,
AShccnt,AShsize,AShpos,RAKnown) be
[ CPrint(ADest)
if ADest ne 0 then PutsCSS($←)
CPrint(ASrc0)
if ASrc1 ne 0 then PrinCRAddr(ASrc1,RAKnown,false)
if ASrc2 ne 0 then PrinCRAddr(ASrc2,RAKnown,false)
if AShs1 ne 0 do
[ PrinCRAddr(AShs1,RAKnown,false); PutsCSS($,)
PrinCRAddr(AShs2,RAKnown,false); PutsCSS($,)
test AShccnt ge 0
ifso WnsCSS(AShccnt)
ifnot
[ WnsCSS(AShsize); PutsCSS($,); WnsCSS(AShpos)
]
if AShsLast ne 0 do
[ PutsCSS($,); WssCSS(AShsLast)
]
PutsCSS($])
]
]
and CPrint(Str1,Str2; numargs NA) be
[ if Str1 eq 0 then return
WssCSS(Str1); if NA > 1 then WssCSS(Str2)
]
and PrinC(Str1,Str2; numargs NA) be
[ if Str1 eq 0 then return
if ClausePrinted then WssCSS(", ")
WssCSS(Str1); if NA > 1 then WssCSS(Str2)
ClausePrinted = true
]
and PrinVA(BA,Point) be
[ let AVec = vec 1; AVec!0 = 0; AVec!1 = LookUpVA(BA)
test AVec!1 ge 0
ifso SearchBlocks(CmdCommentStream,IMx,AVec,Point)
ifnot WnsCSS(BA)
]
and PrinBC(BC) be
[ if BC > 7 then MidasSwat(BadBCarg)
if BC < 0 then return
PutsCSS($,); WssCSS(SelfRel(BCtab+BC))
]
//RAddrP1 is either a string or an RM address+1; RAKnown is true if
//RAddrP1 is a complete RM address, false if RBase relative; First is
//true if ", " should be conditionally printed ahead of the string, else
//false
and PrinCRAddr(RAddrP1,RAKnown,First) be
[ test ClausePrinted
ifso if First then WssCSS(", ")
ifnot ClausePrinted = true
test (RAddrP1 & #177000) eq 0
ifso //RM source
[ test RAKnown
ifso
[ let AVec = vec 1; AVec!0 = 0; AVec!1 = RAddrP1-1
SearchBlocks(CmdCommentStream,RMx,AVec)
]
ifnot
[ PutsCSS($R); WnsCSS(RAddrP1-1)
]
]
ifnot WssCSS(RAddrP1) //Another string source
]