// C O O R D I N A T E (PREPRESS)
// catalog number ???
//
//Coordinate() -- list info about coordinated fonts
//
get "Ix.dfs"
get "Streams.d"
// outgoing procedures
external
[
Coordinate
]
// outgoing statics
//external
// [
// ]
//static
// [
// ]
// incoming procedures
external
[
PrePressWindowInit
WindowClose
WindowReadBlock
WindowSetPosition
ReadIXTempFile
CheckParams
TypeChar
PrintIX
MulDiv
FLDI; FLDDP; FLD; FML; FAD; FDV; FTR; FCM
TypeForm
OpenFile
Closes
]
// incoming statics
external
[
@outstream
@siz
@resolutionx
@params
]
// internal statics
//static
// [
// ]
// File-wide structure and manifest declarations.
// Procedures
let Coordinate() be
[
let fspl=vec 10
let fchr=vec 10
TypeForm("Spline file name: ",1,fspl,"Character file name: ",1,fchr,0)
let sspl=PrePressWindowInit(fspl,false)
let schr=PrePressWindowInit(fchr,false)
outstream=OpenFile("PrePress.Lst", ksTypeWriteOnly, 1)
TypeForm("Coordinate ",fspl," with ",fchr,0)
let splx=vec IXLMax
let chrx=vec IXLMax
let spln=vec IXLName
let chrn=vec IXLName
ReadIXTempFile(sspl, spln, splx)
ReadIXTempFile(schr, chrn, chrx)
TypeHeader("Splines: ", spln, splx)
TypeHeader("Characters: ", chrn, chrx)
// Now modify the actual parameters given switches in command
if (params&gotsize) ne 0 then chrx>>IX.siz=siz
if (params&gotresolution) ne 0 then chrx>>IX.resolutionx=resolutionx
WindowSetPosition(sspl, lv splx>>IX.sa)
WindowSetPosition(schr, lv chrx>>IX.sa)
let bc=splx>>IX.bc
let obc=chrx>>IX.bc
let v=vec 100
while bc gr obc do
[
WindowReadBlock(schr, v, CharWidthsize)
obc=obc+1
]
while obc gr bc do
[
WindowReadBlock(sspl, v, SplineWidthsize)
bc=bc+1
]
let maxtop=-1000
let minbottom=1000
while bc le splx>>IX.ec & bc le chrx>>IX.ec do
[
let chr=vec CharWidthsize
WindowReadBlock(schr, chr, CharWidthsize)
let spl=vec SplineWidthsize
WindowReadBlock(sspl, spl, SplineWidthsize)
bc=bc+1
if (spl!0 eq 0 & spl!1 eq -1) %
chr>>CharWidth.H eq HNonExCode then loop
//Now start printing:
TypeChar(bc-1)
let left=chr>>CharWidth.XL
let right=left+chr>>CharWidth.W
let bottom=chr>>CharWidth.YB
let top=bottom+chr>>CharWidth.H
if top gr maxtop then maxtop=top
if bottom ls minbottom then minbottom=bottom
TypeForm(" Width is ",3,lv chr>>CharWidth.WX)
FLD(1, lv spl>>SplineWidth.WX)
ConvRes(1, chrx)
TypeForm(" s/b " ,2 ,1)
FLDDP(2, lv chr>>CharWidth.WX)
if FCM(2, 1) gr 0 then
TypeForm("[width]")
TypeForm("*N ")
TypeDim("L: ",left, lv spl>>SplineWidth.XL, chrx)
TypeDim("R: ",right, lv spl>>SplineWidth.XR, chrx)
TypeDim("B: ",bottom, lv spl>>SplineWidth.YB, chrx)
TypeDim("T: ",top, lv spl>>SplineWidth.YT, chrx)
TypeForm(0)
]
// Now print summary stuff at end:
TypeForm("*N*N*NSummary:*N")
TypeForm("Maximum number of bits below baseline: ",10,-minbottom)
TypeForm("*NMaximum number of bits above baseline: ",10,maxtop)
let h=maxtop-minbottom
TypeForm("*NFont size is ",10,chrx>>IX.siz," micas, or ")
TypeForm(10, MulDiv(chrx>>IX.siz,18,635), " points.")
FLDI(1, 1)
ConvRes(1, chrx)
FLDI(2, 1); FLDI(3, 2); FDV(2, 3); FAD(1, 2)
let sbh=FTR(1)
if sbh ls h then TypeForm("*NCharacters are too high for this point size -- total allowed is ",10,sbh)
TypeForm(0)
Closes(outstream)
WindowClose(sspl)
WindowClose(schr)
]
and TypeDim(mes, ival, fpval, cv) be
[
TypeForm(mes, 10, ival, $|)
FLD(1, fpval)
ConvRes(1, cv)
TypeForm(2, 1, " ")
]
// Convert fractions of char size to resolution units
and ConvRes(ac, ix) be
[
FLDI(31, ix>>IX.siz)
FML(1, 31)
FLDI(31, ix>>IX.resolutionx)
FML(ac, 31)
FLDI(31, 25400)
FDV(ac, 31) // 1 = in res. units
]
and TypeHeader(herald, nam, ix) be
[
TypeForm(herald, lv nam>>IXN.Name, " ")
PrintIX(ix)
]