// P R E P R E S S C O M M A N D S
//
//Bcpl/f PrepressCommands.bcpl
//
//Last modified January 20, 1982 10:33 PM by Lyle Ramshaw, PARC:
// Changed command-line parameter code to properly round points
// to micas, rather than truncate.
//Most of the code in this file was removed from Prepress.bcpl
// by Kerry A. LaPrade, XEOS in order to decrease the size
// of resident code.
//Last modified September 26, 1980 11:20 AM by Lyle Ramshaw, PARC:
// Added Verify flag for the dictionary commands.
//Modified May 24, 1980 4:51 PM by Lyle Ramshaw, PARC:
// Updated call on EncodeFace for new faces; added the
// MakeKS and ReadKS commands. Also added the Compact
// command, and changed ListFast to FastFlag. Added "Clip"
// flag after the command name as /K.
//
//Modified March 27, 1980 5:51 PM (by LaPrade)
// Changed /B and /D switches for Edit, got rid of
// FSGetX(), updated list of device resolutions for /D
// and /E and changed Supercede to Supersede.
//Created January 16, 1980 2:19 PM
get "GoodFoo.d"
get "ix.dfs"
get "OverlayStuff.d"
// outgoing procedures
external
[
Disambiguate
GetOverlayNumber
InitCommands
ReadParams
]
// outgoing statics
external
[
@angleToRotate //extra rotation in DEGREES
@BackgroundFileName
@bigfilename
@bitfactor
@dotsize
@fam
@face
@incline
@InputFileName
@fastFlag
@OutputFileName
@params
@percent
@resolutionx
@resolutiony
@rotation
@siz
@tridentDriveNumber
@tridentNeeded
@updateflag
@xfp
@yfp
]
static
[
@angleToRotate = 90 //extra rotation in DEGREES
@BackgroundFileName
@bigfilename
@bitfactor = 1
@dotsize = 20
@fam
@face = 0
@incline = 0
@InputFileName
@fastFlag = false
@OutputFileName
@params = 0
@percent = 50
@resolutionx = 0
@resolutiony = 0
@rotation = 0
@siz = 0
@tridentDriveNumber = 0
@tridentNeeded = false
@updateflag = false
@xfp
@yfp
]
// incoming procedures
external
[
//Float
FDV
FLDI
FML
FST
FTR
FLDDP
FAD
//PrePressUtil
EncodeFace
IllCommand
Scream
//Scan
ReadCom
ReadComInit
ReadNumber
StrCop
StrEq
]
//incoming static
external
[
@Clipped //from Playout.
@verifyFlag //from MergeDelete
]
// Procedures
//*********************************************************
let InitCommands(lvstr, lvsw, lvswt, lvfileCode, lvdefFileCode, lvcommandCode) = valof
//*********************************************************
[
if OsVersion ls 17 then
[
Wl("Warning: This version of Prepress requires OS 17 or greater.")
Ws("Type *"BANZAI!*" to continue: ")
let char = nil
for I = 1 to "BANZAI!">> STRING.length do
[
char = Gets(keys)
Puts(dsp, char)
unless char eq "BANZAI!">> STRING.char↑I do abort
]
Wl("")
]
fam = Allocate(sysZone, 13) //Vector for family name
fam!0 = 0 //fam>> STRING.length = 0
bigfilename = Allocate(sysZone, 13) //Vector for big file name
bigfilename!0 = 0 //bigfilename>> STRING.length = 0
InputFileName = Allocate(sysZone, 21)
InputFileName!0 = 0 //InputFileName>> STRING.length = 0
OutputFileName = Allocate(sysZone, 21)
OutputFileName!0 = 0 //OutputFileName>> STRING.length = 0
BackgroundFileName = Allocate(sysZone, 21)
BackgroundFileName!0 = 0 //BackgroundFileName>> STRING.length = 0
xfp = Allocate(sysZone, 2)
yfp = Allocate(sysZone, 2)
FLDI(1,1)
FST(1,xfp)
FST(1,yfp)
let str, sw, swt, fileCode, defFileCode, commandCode =
nil, nil, 0, 0, nil, nil
str = Allocate(sysZone, 11)
sw = Allocate(sysZone, 11)
ReadComInit()
ReadCom(str, sw) //Bypass "PREPRESS"
// if sw!0 ne 0 then swt = sw!1
// if swt eq $T then tridentNeeded = true //try Trident disk
if sw!0 ne 0 then tridentNeeded = (sw!1 eq $T) //try Trident disk
let AltoVersion =(table [ #61014; #1401 ] )()
let eng=AltoVersion<<VERS.eng
if eng eq 5 then tridentDriveNumber=1 //change default drive to 1
//on a Dorado, since drive 0 is simulating DP0
let useCommandLine = ReadCom(str,sw)
if useCommandLine then
[
// Now interpret switches on the command name:
for i = 1 to sw!0 do
[
swt = sw!i
switchon swt into
[
case $C:
fileCode = 1
endcase
case $S:
fileCode = 2
endcase
case $W:
fileCode = 3
endcase
case $F:
fastFlag = true
endcase
case $K:
Clipped = true
endcase
case $V:
verifyFlag = true
endcase
default:
endcase
]
]
// Look up the command itself; need only type enough to disambiguate.
commandCode = Disambiguate(str) //Look it up.
if commandCode eq 0 then IllCommand()
if commandCode ge 12 then ReadParams()
if commandCode ge 30 & (fileCode eq 0) then IllCommand()
defFileCode = (fileCode ? fileCode, 1)
]
@lvstr, @lvsw, @lvswt, @lvfileCode, @lvdefFileCode, @lvcommandCode =
str, sw, swt, fileCode, defFileCode, commandCode
resultis useCommandLine
]
//*********************************************************
and GetOverlayNumber(commandCode) = selecton commandCode into
//*********************************************************
[
case 1:
case 13:
Conversion
case 2:
case 3:
case 4:
case 6:
case 7:
case 8:
case 16:
case 17:
case 18:
case 19:
case 20:
case 21:
case 22:
case 23:
CUMunge
case 9:
case 10:
case 11:
ReadALov
case 12:
Edit
case 14:
case 15:
case 24:
case 30:
case 31:
case 32:
case 33:
case 34:
TridentFile
]
//*********************************************************
and Disambiguate(str) = valof
//*********************************************************
[
let len = str>>STRING.length
let matchNo = nil
let matchCnt = 0
for i = 1 to 100 do
[
let s = selecton i into
[
case 1: "ReadSf"
case 2: "Show"
case 3: "MakeCu"
case 4: "MakeAl"
// case 5: "MakeMM"
case 6: "MakeStrike"
case 7: "ReadWidths"
case 8: "ReadCu"
case 9: "ReadAL"
case 10: "MakeKS"
case 11: "ReadKS"
case 12: "Edit"
case 13: "Convert"
case 14: "Delete"
case 15: "List"
case 16: "Coordinate"
case 17: "OrbitFormat"
case 18: "Scale"
case 19: "ImposeWidths"
case 20: "DeOrbitize"
case 21: "Rotate"
case 22: "Grow"
case 23: "Shrink"
case 24: "Compact"
case 30: "Extract"
case 31: "Merge"
// case 32: "Supercede"
case 32: "Supersede"
case 33: "Width"
case 34: "Rename"
default: 0
]
if s eq 0 % len gr s>> STRING.length then loop
let match = true
for j = 1 to len do
if ((str>> STRING.char↑j xor s>> STRING.char↑j) & (not #40)) ne 0 then
match = false
if match then
[
matchCnt = matchCnt+1
matchNo = i
]
]
resultis ((matchCnt eq 1) ? matchNo, 0)
]
//Read family, face, size, rotation, resolution etc from
// command line.
//*********************************************************
and ReadParams() = valof
//*********************************************************
[
// params = 0 //Mask of what is params
// siz = 0 //Set defaults
// rotation = 0
// incline = 0
resolutionx = 2000
resolutiony = 2000
let str = vec 20
let sw = vec 10
[
if ReadCom(str, sw) eq 0 then break //End of line
for i = 1 to sw!0 do switchon sw!i into
[
case $N: //Name
StrCop(str, fam)
params = params%gotname
endcase
case $F: //Face
face = EncodeFace(str)
if face eq -1 then
Wl("Illegal face in command.")
params = params % gotface
endcase
case $S: //Source file name
// InputFileName = FSGetX(20)// small names only!
StrCop(str, InputFileName)
endcase
case $O: // output file name
// OutputFileName = FSGetX(20)// small names only!
StrCop(str, OutputFileName)
endcase
case $P: //Size in points
ReadNumber(str)
FLDI(2, 635); FML(1, 2); FLDI(2, 18); FDV(1, 2) //to micas
FLDDP(2, table [ 0; #100000 ] ); FAD(1,2) // add one-half
siz = FTR(1) //and truncate, to achieve rounding
params = params % gotsize
endcase
case $M: //Size in micas
siz = ReadNumber(str)
params = params % gotsize
endcase
case $R: //Rotation in degrees
ReadNumber(str)
FLDI(2, 60)
FML(1, 2) //convert to minutes
rotation = FTR(1)
params = params % gotrotation
endcase
case $I: //Incline
incline=ReadNumber(str)
params=params%gotincline
endcase
case $B:
//Big (dictionary) file name or Edit Background file name.
StrCop(str, bigfilename)
StrCop(str, BackgroundFileName)
endcase
case $D: //Device x and y resolutions or Edit dotsize
case $E: //Device y resolution
[
let number = 0
let c = str>> STRING.char↑1
test $0 le c & c le $9
ifso
[
number = ReadNumber(str)
if sw!i eq $D then dotsize = number
]
ifnot
[
if StrEq(str,"ALTO") then number = 720
if StrEq(str, "XGP") % StrEq(str,"VERSATEC") then
number = 2000
if StrEq(str, "RAVEN") then number = 3000
// if StrEq(str,"DOVER") then res=3500
if StrEq(str,"DOVER") % StrEq(str,"SEQUOIA") % StrEq(str,"PENGUIN") % StrEq(str,"PUFFIN") then number = 3840
// if StrEq(str,"SLOT") % StrEq(str,"EARS") then
if StrEq(str,"SLOT") then
number = 5000
if number eq 0 do Scream("Illegal device.")
]
resolutiony = number
if sw!i eq $D then resolutionx = number
params = params % gotresolution
endcase
]
case $X:
case $Y: //Factors
ReadNumber(str)
if (sw!i eq $X) then FST(1, xfp)
if (sw!i eq $Y) then FST(1, yfp)
params = params % gotfactors
endcase
case $A: //Angle to Rotate in degrees
angleToRotate = ReadNumber(str)
endcase
default:
case $z:
IllCommand()
endcase
]
] repeat
]