// L F I N I T // Finds length of fonts and stashes length in FDH // Last modified October 25, 1979 3:24 PM by Taft get "bravo1.df" get "altofilesys.d" get "st.df" get "font.df" get "dir.df" // incoming procedures external [ FindFptr movec move array1 array sbwsize InitNmd RealDA ReadVec errhlta stcopy stnum stappend errhlt stcompare FindCfc ugt ] // outgoing procedures external [ FddlMaxInit ] // incoming statics external [ cfaSysDirEnd // llnmd mpfunfd mpCrockLrec2 vfddfirst ] // local manifests manifest [ lrec2nil = 0 ] static [ llnmd ] // - =- =- =- =- =- =- =- =- =- = let FddlMaxInit() = valof // - =- =- =- =- =- =- =- =- =- = [ let fun = nil let fa = nil let fd = nil let fdh = nil let tnmd = nil let lf = vec 1 let cfa = vec lCFA makellnmd() FindFptr(cfaSysDirEnd, llnmd, 0, -1) // init FDH lengths to lrec2nil = 0 for fun = 0 to maxfun-1 do [ fd = mpfunfd ! fun if fd eq fdnil then loop fdh = lv(fd>>FD.fdh) movec(lv(fdh>>FDH.ampFaLrec2), lv(fdh>>FDH.ampFaLrec2) + 3, lrec2nil) ] // read 1st page of each font (if cver gr 0) - word 0 is lrec2l tnmd = rv llnmd fun = 0 fa = 0 for fun = 0 to maxfun-1 do [ if mpfunfd ! fun eq fdnil then loop for fa = 0 to 3 do [ if tnmd>>NMD.cver ne 0 then [ makecfa2(cfa, lv(tnmd>>NMD.afptr)) ReadVec(cfa, 1, lf) fd = mpfunfd ! fun fdh = lv(fd>>FD.fdh) (lv(fdh>>FDH.ampFaLrec2)) ! fa = rv lf ] tnmd = tnmd>>NMD.next ] ] for t = 0 to 2 do [ if tnmd>>NMD.cver ne 0 then [ makecfa2(cfa, lv(tnmd>>NMD.afptr)) ReadVec(cfa, 1, lf) mpCrockLrec2 ! t = @lf ] tnmd = tnmd>>NMD.next ] let fdd = vfddfirst let tlfileMax = 0; let tfddlMax = 0; while fdd ne 0 do [ if tnmd>>NMD.cver ne 0 then [ move(lv tnmd >> NMD.afptr, lv fdd >> FDD.aFptr, lFP) let dblL = vec 2 FindCfc(lv fdd >> FDD.aFptr, dblL) fdd >> FDD.lfile = (dblL ! 1) rshift 1 if ugt(fdd>>FDD.lfile, tlfileMax) then [ tlfileMax = fdd>>FDD.lfile; tfddlMax = fdd; ] ] fdd = fdd >> FDD.fddnext tnmd = tnmd>>NMD.next ] unless tnmd eq 0 then errhlt("n0") // if tfddlMax eq 0 then errhlt("fdm"); resultis tfddlMax; ] // - =- =- =- =- =- =- =- =- =- = and makellnmd() be // =-- =- =- =- =- =- =- =- =- =- [ let oldnmd = array1(1, 0) let newnmd = oldnmd let funfa =nil let fun =nil let fa =nil let lNMD = nil let sbfile = vec maxLengthFnInWords llnmd = oldnmd for fun = 0 to maxfun-1 do [ if mpfunfd ! fun eq fdnil then loop for fa = 0 to 3 do [ CreateSbEff(sbfile, fun, fa) oldnmd = NmdAdd(sbfile, oldnmd, array) ] ] oldnmd = NmdAdd("HELVETICA10B.EP", oldnmd, array) oldnmd = NmdAdd("BORDER20.EP", oldnmd, array) oldnmd = NmdAdd("KEYHOLE20.EP", oldnmd, array) let fdd = vfddfirst while fdd ne 0 do [ CreateSbAl(sbfile, fdd) oldnmd = NmdAdd(sbfile, oldnmd, array) fdd = fdd >> FDD.fddnext ] ] // A D D N M D // and NmdAdd(sbFile, nmdPrev, alloc) = valof [ let lNMD = ovhNmd + sbwsize(sbFile) + 1 let newnmd = array(lNMD) nmdPrev>>NMD.next = newnmd InitNmd(newnmd, lNMD, sbFile, vcNewest) resultis newnmd ] // - =- =- =- =- =- =- =- =- =- = and makecfa2(cfa, fp) be // - =-- =- =- =- =- =- =- =- = = [ move(fp, lv(cfa>>CFA.fp), lFP) cfa>>CFA.fa.da = RealDA(fp>>FP.leaderVirtualDa) cfa>>CFA.fa.pageNumber = 0 cfa>>CFA.fa.charPos = 0 ] // C R E A T E S B E F F // duplicate of proc in doculist.sr // and CreateSbEff(sbdest, fun, fa) be [ let fd = mpfunfd ! fun; let fdh = lv(fd >> FD.fdh); test fun ge maxfun ifso [ let tsb = nil switchon fun into [ case maxfun: tsb = "HELVETICA10B.EP"; endcase case maxfun+1: tsb = "BORDER20.EP"; endcase case maxfun+2: tsb = "KEYHOLE20.EP"; endcase default: errhlta(180); ] stcopy(sbdest, tsb) ] ifnot [ stcopy(sbdest, lv(fdh >> FDH.rvsbname)); let tsbnum = vec 10; tsbnum ! 0 = 0; stnum(tsbnum, fdh >> FDH.height, 10, 0, false, false, false); stappend(sbdest, tsbnum); if fa ne 0 then [ let tsb = selecton fa into [ case 1: "I" case 2: "B" case 3: "BI" ] stappend(sbdest, tsb); ] stappend(sbdest, ".EP"); ] ] (635) // C R E A T E S B A L // and CreateSbAl(sbDest, fdd) be [ let tsb1 = vec 10; stnum(tsb1, fdd >> FDD.height, 10, 0); stcopy(sbDest, lv(fdd >> FDD.rvsbname)); stappend(sbDest, tsb1); stappend(sbDest, ".AL"); ]