// hcparam.sr
// Bcpl/f hcparam.sr
// last modified
// RML - add number of colors request - September 17, 1977 9:43 PM
// RML - change color command to $. - September 21, 1977 6:02 PM
// RML - September 24, 1977 3:32 PM fix mior bugs
// RML - October 11, 1977 11:15 AM add alternate Net Address
// RML - December 23, 1977 4:14 PM save all Net addresses
// PCL - April 7, 1978 11:00 AM add envelope mode
// RML - April 12, 1978 4:52 PM single page color Press file
// RML - April 13, 1978 1:35 PM change "E" to Envelope, "." to B, Ears to "O", Diablo to "H", and "D" to Dover (Press)
// Last modified November 30, 1979 2:06 PM by Taft
// I abolished Ears and restored "D" = Diablo.
get "BRAVO1.DF"
get "CHAR.DF"
get "ST.DF"
get "ALTOFILESYS.D"
get "FONT.DF"
get "DIR.DF"
get "COM.DF"
get "RN1.DF"
get "HARDCOPY.DF"
get "MSG.DF"
// Incoming Procedures
external [
SetRegionSys
bravochar
updatedisplay
FGetUserInt
fillinfonth
inserttx
mapcp
CpParseDocProf
DefaultHo
readsel
augmentomseq
ofnamfilter
deactivateomseq
stsize
FtyOpen
stnum
SetRegionW
uc
move
stappend
stcopy
umin
SlAppend;
array;
MoveX
stcompare
blinkscreen
]
// Incoming Statics
external [
mpfunfd
vmapstatus
parsacred
tsread
rgmaccp
vfwheel
vrlwsys
tsmacro
// vfEars
vslPrintBy
vesccom
UserName;
]
// Outgoing Procedures
external [
AbHcParams
HcDefaultPrintingServer
]
// Outgoing Statics
external [
// vsbEarsNetAddress
vsbPressNetAddress
vsbAltPressNetAddress
vfDiablomode
vfEarsFile
EnvelopeFlag
EnvelopeCpLast
]
// Local Statics
static [
// vfEars
// vsbEarsNetAddress
vsbPressNetAddress
vsbAltPressNetAddress
vslPrintBy
vfDiablomode
vfEarsFile
EnvelopeFlag
EnvelopeCpLast
EnvelopeSelected
]
// Local Manifests
manifest [
doctx1 = 1 // no room for df's
doctx3 = 3
fnput = 3
]
// A B H C P A R A M S
// cf>>CF.w0 = nmd
// cf>>CF.w1 = cpFirst
// cf>>CF.w2 = fNoTrunc
// cf>>CF.w3 etc = ho>>HO.ccopy etc
let AbHcParams(cf, ho) = valof
[
let sel = cf>>CF.sel
let nmd = cf>>CF.w0
let sbfnam = vec 40
let nColor = nil
let cpFirst = 0
vmapstatus = statusblind
mapcp(sel>>SEL.doc, 0, parneeded)
test parsacred>>PAR.control ifso
[
cpFirst = CpParseDocProf(ho, sel>>SEL.doc, 0)
if cpFirst eq cpnil then resultis abmsg
]
ifnot DefaultHo(ho)
cf>>CF.w1 = cpFirst
// ***
// vfEars = true
// vslNetAddress = " 3#3"
// vslNetAddress>>SL.cch = vslNetAddress>>SB.cch - 1
// vslPrintBy = array(20);
// vslPrintBy>>SB.cch = 1
// stappend(vslPrintBy, UserName);
// vslPrintBy>>SL.cch = vslPrintBy>>SB.cch - 1; // turn back into sl
// ***
vesccom = false;
test cf>>CF.frepeat ifso
move(lv cf>>CF.w3, lv ho>>HO.ccopy, lnhoCf)
ifnot
[
ho>>HO.ccopy = 1;
ho>>HO.pgnStartPrint = ho>>HO.pgnFirst;
ho>>HO.fDiablo = vfDiablomode;
ho>>HO.fFile = false;
// ho>>HO.fNetAddress = false;
// move(vslNetAddress, lv ho>>HO.aslNetAddress, cwNetAddress);
ho>>HO.fEars = false;
ho>>HO.fColor = false;
// ho>>HO.fPrintBy = false;
// move(vslPrintBy, lv ho>>HO.aslPrintBy, cwPrintBy);
]
ho>>HO.fNetAddress = false;
//move((vfEars ? vsbEarsNetAddress, vsbPressNetAddress), lv ho>>HO.asbNetAddress, cwNetAddress);
move(vsbPressNetAddress, lv ho>>HO.asbNetAddress, cwNetAddress);
ho>>HO.fPrintBy = false;
ho>>HO.nColor = 1; // allow color
move(vslPrintBy, lv ho>>HO.aslPrintBy, cwPrintBy);
[
move(lv ho>>HO.ccopy, lv cf>>CF.w3, lnhoCf)
SetRegionSys(risysstate, 73)
ShowHcOptions(ho)
let ch = bravochar()
SetRegionSys(risysstate, rinil)
SetRegionSys(risyspast, rinil)
updatedisplay()
switchon uc(ch) into
[
case $C:
unless FGetUserInt(lv ho>>HO.ccopy, 153) do
resultis abIllOpt
endcase
case $S:
[
unless FGetUserInt(lv ho>>HO.pgnStartPrint, 164) do
resultis abIllOpt
unless ho>>HO.pgnStartPrint ge ho>>HO.pgnFirst do
resultis abBadPage
]
endcase
case $H: // HYTYPE
case $D: // Diablo
[
let fd = mpfunfd ! funDiablo
if fd eq fdnil then
resultis abDiabloFont
let fdh = (lv fd>>FD.fdh)
// unless fdh>>FDH.rvmpfargcc ne 0 %
// fillinfonth(funDiablo, 0) then
unless fdh>>FDH.rvmpfargcc ne 0 then
resultis abDiabloFont
]
ho>>HO.fDiablo = true
EnvelopeFlag = false
endcase
case $E: // Envelope
[
let fd = mpfunfd ! funDiablo
if fd eq fdnil then
resultis abDiabloFont
let fdh = (lv fd>>FD.fdh)
// unless fdh>>FDH.rvmpfargcc ne 0 %
// fillinfonth(funDiablo, 0) then
unless fdh>>FDH.rvmpfargcc ne 0 then
resultis abDiabloFont
]
ho>>HO.fDiablo = true
EnvelopeFlag = true
EnvelopeCpLast = true //Init
EnvelopeSelected = 0
ShowHcOptions(ho)
inserttx(1) //**PCL
EnvelopeSelected = 1
ShowHcOptions(ho)
break
case $F:
SetRegionSys(risysstate, 154, 37)
updatedisplay()
unless inserttx(3) do
resultis abComTerm
ho>>HO.fDiablo = false
ho>>HO.fFile = true
endcase
case $@:
SetRegionSys(risysstate, 235, 37) // "Type net addr..."
updatedisplay()
unless inserttx(1) do
resultis abComTerm
readsel(lv ho>>HO.asbNetAddress, doctx1, 0, rgmaccp ! doctx1-1, 18)
// [
// let tsl = lv ho>>HO.aslNetAddress;
// tsl>>SB.cch = 1; // note SB !!
// stappend(tsl, sbfnam);
// tsl>>SL.cch = tsl>>SB.cch - 1; // turn back into sl
// ]
ho>>HO.fDiablo = false
ho>>HO.fFile = false
ho>>HO.fNetAddress = true
endcase
//case $E: // EARS
// ho>>HO.fDiablo = false
// ho>>HO.fEars = true
// move(vsbEarsNetAddress, lv ho>>HO.asbNetAddress, cwNetAddress);
// ho>>HO.fColor = false
// endcase
case $P: // PRESS
ho>>HO.fDiablo = false
// ho>>HO.fEars = false
move(vsbPressNetAddress, lv ho>>HO.asbNetAddress, cwNetAddress);
ho>>HO.fColor = false
endcase
case $B: // This has been changed to mean:
// no matter what's in the file, produce a Press
// file which can be printed on a B/W printer
// the net address is set to PRESS
// nColor to 0 (Black)
ho>>HO.fDiablo = false
// ho>>HO.fEars = false
move(vsbPressNetAddress, lv ho>>HO.asbNetAddress, cwNetAddress);
ho>>HO.fNetAddress = true
ho>>HO.nColor = 0
ho>>HO.fColor = false
endcase
case $N:
SetRegionSys(risysstate, 234, 37) // "Type user name..."
updatedisplay()
unless inserttx(1) do
resultis abComTerm
readsel(sbfnam, doctx1, 0, rgmaccp ! doctx1-1, 38)
[
let tsl = lv ho>>HO.aslPrintBy;
tsl>>SB.cch = 1; // note SB !!
stappend(tsl, sbfnam);
tsl>>SL.cch = tsl>>SB.cch - 1; // turn back into sl
]
ho>>HO.fDiablo = false
ho>>HO.fPrintBy = true
endcase
case chdel:
resultis abComTerm
case chcr:
break
default:
resultis abIllOpt
]
] repeat
vfDiablomode = ho>>HO.fDiablo
vfEarsFile = ho>>HO.fFile
ho>>HO.lnLast = 0
// (lv ho>>HO.asbPgn)>>SB.cch = 0
deactivateomseq("Ma*140", "Ma*140")
//if tsread & not tsmacro then resultis abComTerm
unless ho>>HO.fDiablo do
[
// clean up ho.aslPrintBy with trailing blanks
let fNoTrunc = false
test ho>>HO.fFile ifso
[
readsel(sbfnam, doctx3, 0, rgmaccp ! doctx3-1, 50)
augmentomseq("G")
let legalsiz = ofnamfilter(sbfnam)
deactivateomseq("G", "G")
if legalsiz eq mastx-3 then
resultis abTooLong
if legalsiz ne stsize(sbfnam) then
resultis abIllChar
]
ifnot [
// clean up ho.aslSocket with trailing blanks
test vfwheel ifso
sbfnam = "bravo.press"
ifnot [
sbfnam = "swatee"
fNoTrunc = true
]
]
augmentomseq("JQT")
let fty = FtyOpen(fnput, sbfnam, true, true, vcNewestOrNew, 0, false, nmd)
deactivateomseq("JQT", "JQT")
if fty eq ftyNil then resultis abmsg
cf>>CF.w2 = fNoTrunc
]
resultis abnil
]
// S H O W H C O P T I O N S
and ShowHcOptions(ho) be
[
let ridCcopy = rinil
let ridCopies = rinil
let ridStartPrint = rinil
let ridPgn = rinil
let ridDiabloFileSendto = rinil
let ridFormat = rinil
let ridPrintBy = rinil
unless ho>>HO.ccopy eq 1 do
[
let sb = vec 5
stnum(sb, ho>>HO.ccopy)
SetRegionW(vrlwsys, 0, sb)
ridCcopy<<RID.nrl = 1
ridCcopy<<RID.ri = 0
ridCopies = 149
]
unless ho>>HO.pgnStartPrint eq ho>>HO.pgnFirst do
[
ridStartPrint = 221
let sb = vec 5
stnum(sb, ho>>HO.pgnStartPrint)
stappend(sb, " ");
SetRegionW(vrlwsys, 1, sb)
ridPgn<<RID.nrl = 1
ridPgn<<RID.ri = 1
]
test ho>>HO.fDiablo ifso [
// ridDiabloFileSendto = 152
ridDiabloFileSendto = 243
if ridStartPrint eq 221 then ridDiabloFileSendto = 152
if EnvelopeFlag then ridDiabloFileSendto = 244 + EnvelopeSelected //**PCL
]
ifnot
[
test ho>>HO.fFile ifso
ridDiabloFileSendto = 151
ifnot if ho>>HO.fNetAddress then
[
let sb = vec 10
stcopy(sb, "Send to ")
stappend(sb, lv ho>>HO.asbNetAddress);
stappend(sb, " ");
SetRegionW(vrlwsys, 2, sb)
ridDiabloFileSendto<<RID.nrl = 1
ridDiabloFileSendto<<RID.ri = 2
]
ridFormat = ho>>HO.fEars ? 236, 237
if ho>>HO.fPrintBy then
[
let sb = vec 15
stcopy(sb, "Printed by ")
SbAppendSl(sb, lv ho>>HO.aslPrintBy, 10);
if (lv ho>>HO.aslPrintBy)>>SL.cch gr 10 then
stappend(sb, "...");
SetRegionW(vrlwsys, 3, sb)
ridPrintBy<<RID.nrl = 1
ridPrintBy<<RID.ri = 3
]
]
SetRegionSys(risyspast, ridCcopy, ridCopies, ridStartPrint, ridPgn,
ridDiabloFileSendto, ridFormat, ridPrintBy)
updatedisplay()
] // end ShowHcOptions
// S B A P P E N D S L
and SbAppendSl(sb, sl, cchSl; numargs carg) = valof
[
cchSl = carg ls 3 ? sl>>SL.cch, umin(cchSl, sl>>SL.cch);
let tcch = sb>>SB.cch;
for ich = tcch to tcch + cchSl - 1 do
sb>>SB.ch ↑ ich = sl>>SL.ch ↑ (ich - tcch);
sb>>SB.cch = tcch + cchSl;
resultis sb;
] // end SbAppendSl
and HcDefaultPrintingServer(ho) = valof
[
if ho>>HO.fColor & stcompare(vsbAltPressNetAddress, vsbPressNetAddress) ne 0 then
[
SetRegionW(vrlwsys, 0, vsbAltPressNetAddress)
let ridHost = rinil
ridHost<<RID.nrl = 1
ridHost<<RID.ri = 0
SetRegionSys(risysstate, 246)
SetRegionSys(risyspast, 247, ridHost, 248)
updatedisplay()
switchon uc(bravochar()) into
[
case chdel: resultis abComTerm
case $N: ho>>HO.fColor = false
case $Y: break
default: blinkscreen()
] repeat
SetRegionSys(risysstate, rinil)
SetRegionSys(risyspast, rinil)
updatedisplay()
]
move((ho>>HO.fColor ? vsbAltPressNetAddress, vsbPressNetAddress), lv ho>>HO.asbNetAddress, cwNetAddress)
resultis abnil
]