// 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) ]