// install.sr
// last modified
// RML October 11, 1977 10:32 AM add alternate Net Address
// RML December 23, 1977 4:31 PM save all Net addresses
// RML January 4, 1978 1:19 PM defer PrintedBy processing
// Last modified November 30, 1979 2:15 PM by Taft
get "BRAVO1.DF";
get "ALTOFILESYS.D";
get "VM.DF";
get "FONT.DF";
get "FORMAT.DF";
get "MSG.DF";
get "DISPLAY.DF";
get "MEASURE.DF";
get "PARAM.DF";
get "ST.DF";
// Incoming Procedures
external [
stcompare;
sbwsize;
sttoint;
ult;
movec;
stcopy;
array;
divmod;
ratio;
errhlta
errhlt
ofinduserprof;
array1;
settabs;
stget;
DAYTIME;
FtyOpen;
FcGetParam;
FcFindLabel;
move
stappend
min
];
// Incoming Statics
external [
mpfunfd;
vfddfirst;
// vfdd0;
vofsetstd
vldlnstd
vldhdrstd
vxleftmarg;
vxrightmarg;
vdxrightmarg
vdxleftmarg
vdxleftmargf
vmeasurestatus
mpWwWwd
vheightd
vyorig
parstd;
quitchar;
vbttoti;
vbttotd;
mpfnof;
vtodstart;
vcpagehc;
vdxtbStd
vslPrintBy;
UserName;
// vsbEarsNetAddress
vsbPressNetAddress
vsbAltPressNetAddress
// vfEars;
vfDiablomode
];
// Outgoing Procedures
external [
CreateFd;
inituserparams;
chuckinitmeasure;
InstallParams;
];
// Outgoing Statics
external [
vffakeether;
// vSDD
vfloppy;
vpgpertrk;
vmsskpertrk;
vmsheadld;
vmstransperpg;
vxleftmargstd;
vxrightmargstd;
vxleftmargfstd;
vytop;
vymid;
vybot;
mpCrockLrec2
look1std
look2std
];
// Outgoing Statics
static [
vffakeether;
// vSDD
vfloppy;
vpgpertrk;
vmsskpertrk;
vmsheadld;
vmstransperpg;
vxleftmargstd;
vxrightmargstd;
vxleftmargfstd;
vytop;
vymid;
vybot;
mpCrockLrec2
look1std
look2std
]
manifest [ vcNewestOrNew = 4; manMaxMagi = 5 ]
// C R E A T E F D
//
let CreateFd(alloc) be
[ mpfunfd = alloc(maxfun,0);
vfddfirst = 0;
let t = nil;
// vfdd0 = -1
let ffirst = true
let fcFirst = 0;
let prm = vec lprmovh+40; prm >> PRM.cchMax = 80
let prmInt = vec lprmovh+5; prmInt >> PRM.cchMax = 10
let tfd = vec fdl+40
// let tfd = vec fdl+manMaxMagi+fdhl+40
// tfd >> FD.maxmagi = manMaxMagi
// let trgfdd = lv (tfd >> FD.rvrgfdd);
// movec(trgfdd,trgfdd+manMaxMagi-1,0);
let tfdh = lv tfd>>FD.fdh;
let mpfargcc = lv(tfdh >> FDH.rvmpfargcc);
movec(mpfargcc,mpfargcc+3,0);
let mpfafunfadef = lv(tfdh >> FDH.rvmpfafunfadef);
movec(mpfafunfadef,mpfafunfadef+3,funfanil);
[ fcFirst = FcFindLabel("FONT",prm,fnuser,fcFirst,"BRAVO")
if prm >> PRM.pt eq ptNil then
break
fcFirst = FcGetParam(fnuser,fcFirst,prm)
// check for label ?
let fun = nil
test stcompare("D", lv prm >> PRM.astr) eq 0 ifso
fun = 10
ifnot fun = sttoint(lv prm >> PRM.astr);
// ???
unless ult(fun,maxfun) do errhlta(172);
fcFirst = FcGetParam(fnuser,fcFirst,prm)
// check for label ?
stcopy(lv(tfdh >> FDH.rvsbname),lv prm >> PRM.astr);
fcFirst = FcGetParam(fnuser,fcFirst,prm)
// check for label ?
tfdh >> FDH.height = sttoint(lv prm >> PRM.astr);
tfdh >> FDH.bl = divmod(tfdh >> FDH.height,5,t);
movec(lv tfdh >> FDH.ampFaLrec2,lv tfdh >> FDH.ampFaLrec2+3,0) // 0 should be lrec2Nil
// let maxmagi = nil
// for magi = 0 to manMaxMagi-1 do
for ti = 0 to 1 do
[ let fcNext = FcGetParam(fnuser,fcFirst,prm)
if prm >> PRM.pt ne ptparam then
[ if ti eq 0 then errhlta(248, fun)
tfd>>FD.fddSmall = tfd>>FD.fddLarge;
break
];
// if prm >> PRM.pt ne ptparam then errhlta(248, fun)
// maxmagi = magi+1
fcFirst = FcGetParam(fnuser,fcNext,prmInt)
if prm >> PRM.pt ne ptparam then errhlta(248, fun)
// check for label ?
let theight = sttoint(lv prmInt >> PRM.astr);
let fdd1 = vfddfirst;
let fdd = nil; let sbFontName = lv prm >> PRM.astr
while fdd1 ne 0 do
[ if (stcompare(sbFontName,lv fdd1 >> FDD.rvsbname) eq 0) & (fdd1 >> FDD.height eq theight) then
[
fdd = fdd1;
// fdd = array(fddlshort);
// fdd >> FDD.fddindirect = fdd1;
break;
]
fdd1 = fdd1 >> FDD.fddnext;
]
if fdd1 eq 0 then
[ fdd = array(fddl+sbwsize(sbFontName)-1);
// fdd >> FDD.fddindirect = 0;
fdd >> FDD.fddnext = vfddfirst;
vfddfirst = fdd;
fdd >> FDD.font = 0;
fdd >> FDD.rgcc = 0;
fdd >> FDD.lru = 0;
fdd >> FDD.bl = divmod(theight,5,lv t);
fdd >> FDD.faulted = false;
fdd >> FDD.height = theight;
fdd >> FDD.lfile = 0;
// if ffirst & (fun eq 0) then
// [ ffirst = false;
// vfdd0 = fdd;
// ]
stcopy(lv (fdd >> FDD.rvsbname),sbFontName);
]
// fdd >> FDD.mag = ratio(theight,100,tfdh >> FDH.height);
// trgfdd ! magi = fdd;
(lv (tfd>>FD.fddLarge)) ! ti = fdd;
]
let cwSbName = sbwsize(lv tfdh >> FDH.rvsbname)
// let fd = alloc(fdl+maxmagi+fdhl+cwSbName);
// fd >> FD.maxmagi = maxmagi;
let cwFd = fdl+cwSbName;
let fd = alloc(cwFd);
mpfunfd ! fun = fd;
move(tfd,fd,cwFd);
// let rgfdd = lv (fd >> FD.rvrgfdd);
// move(trgfdd,rgfdd,maxmagi);
// let fdh = rgfdd+maxmagi;
// move(tfdh,fdh,fdhl+cwSbName-1);
] repeat
// if vfdd0 eq -1 then errhlta(174);
// let height0 = vfdd0 >> FDD.height;
// for tfun = 0 to maxfun-1 do
// [ let fd = mpfunfd ! tfun;
// if fd eq 0 then loop
// let rgfdd = lv (fd >> FD.rvrgfdd);
// let fdh = rgfdd+fd >> FD.maxmagi
// let fdd = array(fddlshort);
// fdd >> FDD.mag = ratio(height0,100,fdh >> FDH.height);
// fdd >> FDD.fddindirect = vfdd0;
// rgfdd ! (-1) = fdd;
// ]
mpCrockLrec2 = array1(3,0)
// fillinfdd(vfdd0)
]
// I N S T A L L P A R A M S
//
and InstallParams() be
[ vmeasurestatus = 0;
inituserparams("MEASURE",lv vmeasurestatus)
if vmeasurestatus ne 0 then chuckinitmeasure("A",array1)
vxleftmargstd = xleftmargstd;
vxleftmargfstd = xleftmargstd;
vxrightmargstd = xrightmargstd;
vdxtbStd = dxtbStd;
inituserparams("TABS", lv vdxtbStd);
inituserparams("MARGINS",lv vxleftmargfstd,lv vxleftmargstd,lv vxrightmargstd);
vfloppy = false;
vmstransperpg = 0;
vmsskpertrk = 0;
vmsheadld = 0;
vpgpertrk = 0;
inituserparams("FLOPPYDISK",lv vfloppy,lv vmstransperpg,lv vmsskpertrk,lv vmsheadld,lv vpgpertrk);
// vSDD = false;
// inituserparams("SDD", lv vSDD)
// defaulted in initformat
// vdxleftmarg = 0;
// vdxrightmarg = 0;
// vdxleftmargf = 0;
inituserparams("NESTED",lv vdxleftmarg,lv vdxrightmarg);
vofsetstd = ofsetstd;
inituserparams("OFFSET",lv vofsetstd);
vldlnstd = ldlnstd;
vldhdrstd = ldhdrstd;
inituserparams("LEAD",lv vldlnstd,lv vldhdrstd);
vheightd = 14;
vytop = vyorig+5; vymid = vytop+3*(vheightd+2)+6; vybot = #1400
inituserparams("SCREEN",lv vytop,lv vymid,lv vybot);
InitDefaultLooks()
InitHcOptions();
]
// I N I T U S E R P A R A M S
//
and inituserparams(sblabel,rvrglvparam,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil; numargs n) be
[ let prm = vec lprmovh+40; prm >> PRM.cchMax = 80
let fcFirst = FcFindLabel(sblabel,prm,fnuser,0,"BRAVO")
if prm >> PRM.pt eq ptNil then
return;
let rglvparam = lv rvrglvparam;
let tchar = nil;
let sbnorm = vec 50;
sbnorm ! 0 = 0;
for iparam = 0 to n-2 do
[
[ fcFirst = FcGetParam(fnuser,fcFirst,prm)
if (prm >> PRM.pt eq ptparam) & (stcompare(lv prm >> PRM.astr,"=") eq 0) then
break
] repeat
fcFirst = FcGetParam(fnuser,fcFirst,prm)
LowerCaseSb(lv prm >> PRM.astr);
tchar = stget(lv prm >> PRM.astr,0);
let tpv = nil
test ((tchar ge $0) & (tchar le $9)) % (tchar eq $+) % (tchar eq $-)
ifso tpv = sttoint(lv prm >> PRM.astr);
ifnot tpv = (stcompare(lv prm >> PRM.astr,"true") eq 0) ? -1,0;
(rv (rglvparam ! iparam)) = tpv;
]
]
// C H U C K I N I T M E A S U R E
//
and chuckinitmeasure(sb,alloc) be
[ unless stcompare(sb,"A") eq 0 then errhlta(176);
quitchar = 0;
vmeasurestatus << MEASURESTATUS.p = true;
vmeasurestatus << MEASURESTATUS.q = true;
//vbttoti = alloc(2,0);
//vbttotd = alloc(2,0);
//vcpagehc = 0;
//vtodstart = alloc(lntod);
//DAYTIME(vtodstart);
FtyOpen(fnmeasure,"USER.MEASURE",false,false,vcNewestOrNew);
(mpfnof ! fnmeasure) >> OF.wf = true;
(mpfnof ! fnmeasure) >> OF.pos = (mpfnof ! fnmeasure) >> OF.macpos;
]
// I N I T H C O P T I O N S
//
and InitHcOptions() be
[ let prm = vec lprmovh+40; prm >> PRM.cchMax = 80
let fcFirst = FcFindLabel("PREFERREDFORMAT",prm,fnuser,0,"HARDCOPY")
test prm >> PRM.pt eq ptNil ifso
[
// vfEars = true
vfDiablomode = false;
]
ifnot
[
fcFirst = FcGetParam(fnuser,fcFirst,prm)
let tsb = lv prm >> PRM.astr;
LowerCaseSb(tsb)
test stcompare(tsb, "diablo") eq 0 ifso
[
vfDiablomode = true
// vfEars = false
]
ifnot test stcompare(tsb, "press") eq 0 ifso
[
vfDiablomode = false
// vfEars = false
]
ifnot
[
vfDiablomode = false
// vfEars = true
]
]
fcFirst = FcFindLabel("PRINTEDBY",prm,fnuser,0,"HARDCOPY")
test prm >> PRM.pt eq ptNil ifso
[ vslPrintBy = array((UserName>>SB.cch+2)/2);
vslPrintBy>>SB.cch = 1;
stappend(vslPrintBy, UserName);
vslPrintBy>>SL.cch = vslPrintBy>>SB.cch - 1; // turn back into sl
]
ifnot
[
fcFirst = FcGetParam(fnuser,fcFirst,prm,false)
let tsl = lv prm >> PRM.astr;
let tl = (tsl >> SL.cch+3)/2;
vslPrintBy = array(tl);
move(tsl, vslPrintBy, tl)
]
// if vfDiablomode eq false then
[
// vsbEarsNetAddress = 0
vsbPressNetAddress = 0
vsbAltPressNetAddress = 0
// parseNetAddress(lv vsbEarsNetAddress, prm, "EARS")
parseNetAddress(lv vsbPressNetAddress, prm, "PRESS")
parseNetAddress(lv vsbAltPressNetAddress, prm, "COLOR-PRESS")
// if vsbEarsNetAddress eq 0 then
// [ vsbEarsNetAddress = array(4);
// stcopy(vsbEarsNetAddress, "3#3#")
// ]
if vsbPressNetAddress eq 0 then
[ vsbPressNetAddress = array(11);
stcopy(vsbPressNetAddress, "PrinterNameUndefined")
]
if vsbAltPressNetAddress eq 0 then
vsbAltPressNetAddress = vsbPressNetAddress
]
]
// P A R S E N E T A D D R E S S
//
and parseNetAddress(varAddr, prm, name) be
[
let fcFirst = FcFindLabel(name,prm,fnuser,0,"HARDCOPY")
unless prm >> PRM.pt eq ptNil do
[
fcFirst = FcGetParam(fnuser,fcFirst,prm)
let tsb = lv prm >> PRM.astr
tsb>>SB.cch = min(tsb>>SB.cch, 19) // limit of HO.asbNetAddress
let tl = (tsb >> SB.cch+2)/2
@varAddr = array(tl)
move(tsb, @varAddr, tl)
]
]
// L O W E R C A S E S B
//
and LowerCaseSb(sb) be
[ for ich = 0 to sb>>SB.cch-1 do
[ let tch = sb>>SB.ch↑ich;
if (tch ge $A) & (tch le $Z) then sb>>SB.ch↑ich = tch % #40;
];
]
and InitDefaultLooks() be
[ let prm = vec lprmovh+40; prm >> PRM.cchMax = 80
let fcFirst = FcFindLabel("LOOKS",prm,fnuser,0,"BRAVO")
if prm >> PRM.pt ne ptNil then
[
fcFirst = FcGetParam(fnuser,fcFirst,prm,false)
let tsb = lv prm >> PRM.astr;
for ich = 0 to tsb>>SB.cch-1 do
[
let ch = tsb>>SB.ch↑ich
let on = ch ge $a
ch = ch % 40B
switchon ch into
[
case $g:
look1std<<LOOK1.ext = on; endcase
case $v:
look1std<<LOOK1.visible = on; endcase
case $b:
look1std<<LOOK1.boldface = on; endcase
case $i:
look1std<<LOOK1.italic = on; endcase
case $0 to $9:
look2std<<LOOK2.fun = ch-$0; endcase
]
]
]
]