vftool-2.0alpha.orig/0040755000175000017500000000000007202554407013600 5ustar kohdakohdavftool-2.0alpha.orig/Makefile0100644000175000017500000000570707201325133015235 0ustar kohdakohda# # if you want to make new-format jvf (which is much smaller), let j=j j= # # builtin kanji fonts bkfonts = '${bk-std}' '${bk-mor2}' # Standard kanji font bk-std = std \ stdmn:min:monokan stdgt:goth:monokan \ stdmnv:tmin:monokan-v stdgtv:tgoth:monokan-v # Morisawa version 2 bk-mor2 = mor2 \ rml:min:monokan gbm:goth:monokan \ rmlv:tmin:monokan-v gbmv:tgoth:monokan-v # TypeBank bk-tbk = tbk \ tmm:min:monokan tgb:goth:monokan \ tmmv:tmin:monokan-v tgbv:tgoth:monokan-v # Ricoh bk-rsp = rsp \ rmls:min:monokan gbms:goth:monokan \ rmlvs:tmin:monokan-v gbmvs:tgoth:monokan-v # 3-shotai bk-thr = thr \ fmb:fmin:monokan fgb:fgoth:monokan jl:mgoth:monokan # vbkfonts = '${vbk-std}' '${vbk-mor2}' # Standard kanji font vbk-std = std \ stdmn:stdmnv:stdmnvsy stdgt:stdgtv:stdgtvsy # Morisawa version 2 vbk-mor2 = mor2 \ rml:rmlv:rmlvsy gbm:gbmv:gbmvsy # vsyfonts = '${vsy-std}' '${vsy-mor2}' # Standard kanji font vsy-std = std \ stdmn:stdmnvsy stdgt:stdgtvsy # Morisawa version 2 vsy-mor2 = mor2 \ rml:rmlvsy gbm:gbmvsy # # where you can find ASCII Nihongo TeX jfm files: min10.tfm ... JFM = /usr/local/share/texmf.local/fonts/tfm/ptex # CC=cc FILES = Makefile README vfdata.doc prninfo.ps \ MKASC2BKall MKASC2BK MKBKV2Hall MKBKV2H \ MKVSYall MKVSY MKVSYDall MKVSYD \ monokan.tfm monokan-v.tfm monosub.tfm data \ mka2bkjvf.c mka2bkvf.c \ vfcodes.h commands.h \ mkbkv2hjvf.c mkbkv2hvf.c mkvsyvf.c mkvsydvf.c \ vchar.c vchar.h \ jfm.c tfm.c scale.c io.c kanji.c util.c \ defs.h bifont.h jsub.h \ parseAFM.c parseAFM.h all: a2bk a2bk: mka2bk${j}vf -mkdir jfm -mkdir vf for bk in ${bkfonts}; do\ ./MKASC2BKall ./mka2bk${j}vf data ${JFM} jfm vf $${bk};\ done v2h: mkbkv2h${j}vf for vbk in ${vbkfonts}; do\ ./MKBKV2Hall ./mkbkv2h${j}vf data jfm vf $${vbk};\ done vsy: mkvsyvf for vsy in ${vsyfonts}; do\ ./MKVSYall ./mkvsyvf data vf $${vsy};\ done vsyd: mkvsydvf for vsy in ${vsyfonts}; do\ ./MKVSYDall ./mkvsydvf data vf $${vsy};\ done n2a: mkn2a${j}vf -mkdir vf -mkdir vf/n2a ./MKNTT2ASC ./mkn2a${j}vf dm min ${SUBTFM} ${JFM} vf/n2a ./MKNTT2ASC ./mkn2a${j}vf dg goth ${SUBTFM} ${JFM} vf/n2a a2n: mka2n${j}vf -mkdir vf -mkdir vf/a2n ./MKASC2NTT ./mka2n${j}vf dm min ${SUBTFM} ${JFM} vf/a2n ./MKASC2NTT ./mka2n${j}vf dg goth ${SUBTFM} ${JFM} vf/a2n mka2bkjvf: mka2bkjvf.o jfm.o io.o util.o parseAFM.o ${CC} -o $@ mka2bkjvf.o jfm.o io.o util.o parseAFM.o mka2bkvf: mka2bkvf.o jfm.o io.o util.o parseAFM.o ${CC} -o $@ mka2bkvf.o jfm.o io.o util.o parseAFM.o mkbkv2hjvf: mkbkv2hjvf.o vchar.o jfm.o io.o util.o ${CC} -o $@ mkbkv2hjvf.o vchar.o jfm.o io.o util.o mkbkv2hvf: mkbkv2hvf.o vchar.o jfm.o io.o util.o ${CC} -o $@ mkbkv2hvf.o vchar.o jfm.o io.o util.o mkvsyvf: mkvsyvf.o vchar.o tfm.o io.o util.o ${CC} -o $@ mkvsyvf.o vchar.o tfm.o io.o util.o mkvsydvf: mkvsydvf.o vchar.o tfm.o io.o util.o ${CC} -o $@ mkvsydvf.o vchar.o tfm.o io.o util.o dist: tar cf - ${FILES} | gzip > vftool.tar.gz clean: rm -f *.o mk*vf distclean: clean rm -rf jfm vf vftool-2.0alpha.orig/README0100644000175000017500000001355307201325274014461 0ustar kohdakohdavirtual font kit (2.0 alpha) $B:y0f5.J8(B(sakurai@math.s.chiba-u.ac.jp) $B@iMUBg(B $B?t3X!&>pJs?tM}3X2J(B $B$3$l$O(Bdvi2ps-j$B!"(Bdvi2dvi$B$G;H$&(Bvirtual font$B$r:n$k$?$a$N(Bkit$B$G$"$k!#(B ($B$^$@$3$N%I%-%e%a%s%H$O40A4$G$O$"$j$^$;$s!#(B) [1] virtual font$B$N@8@.(B make$B$N0z?t$H$7$F0J2<$N$b$N$r;XDj$9$k$H$=$l$>$l$N(Bvirtual font$B$,:n$i$l$k!#(B a2bk pTeX$B$N(Bdvi$B$r!"%W%j%s%?FbB"$N%b%N%9%Z!<%9$N4A;z%U%)%s%H$r;H$&(Bdvi$B$K(B $BJQ49$9$k$?$a$N(Bvirtual font$B!#(B v2h,vsy,vsyd $B=D=q$-MQ$N%W%j%s%?FbB"$N%b%N%9%Z!<%9$N4A;z%U%)%s%H$r(B $B;H$&(Bdvi$B$r!"2#=q$-MQ$N4A;z%U%)%s%H$r;H$&(Bdvi$B$KJQ49$9$k(Bvirtual font$B!#(B a2bk$B$HAH$_9g$o$;$F;H$&$3$H$K$h$j!"(BpTeX$B$N=D=q$-$r4^$s$@(Bdvi$B$r(B $B%W%j%s%?FbB"$N%b%N%9%Z!<%9$N4A;z%U%)%s%H$r;H$&(Bdvi$B$KJQ49$9$k(B $B$3$H$,$G$-$k!#(B v2h$B$H!"(Bvsy/vsyd$B$N$$$:$l$+0lJ}$rA*Br$9$k!#(B($B0c$$$O(B[2]$B$G=R$Y$k!#(B) Makefile$BCf$NJQ?t$r0J2<$N$h$&$K@_Dj$9$k!#3FJQ?t$O!"(B()$BFb$N$b$N$r(Bmake$B$N(B target$B$H$7$FA*$s$@$H$-@_Dj$7$J$1$l$P$J$i$J$$!#(B j (a2bk) $B$3$NCM$r(B j $B$K$9$k$H%3%s%Q%/%H$J(Bvirtual font$B$,:n$i$l$k!#(B $B$?$@$7!"(Bdvi2ps-3.0j-alpha$B0J>e!"(Bdvi2dvi-1.1$B0J>e$,I,MW$G$"$k!#(B bkfonts (a2bk) 1. $B<+J,$N%W%j%s%?$NFbB"%U%)%s%H$,2?$G$"$k$+$r(Bvfdata.doc($B$3$l$O@8@.(B $B$5$l$?(Bvf$B$N@bL@$N$?$a$N%I%-%e%a%s%H$G$"$k$,(B)$B$rFI$s$G7hDj$9$k!#(B $B$J$$>l9g$O(B [3] $B$r;2>H$N$3$H!#(B 2. Makefile$BCf$N(Bbkfonts$B$NDj5A$N$NCV49$H(Bvf,tfm$B%U%!%$%k$NG[CV(B $B$3$N%Q%C%1!<%8$G:n$i$l$k(Bvirtual font$B$O!"%U%)%s%H$rJL$N%U%)%s%H$G(B $BCV$-49$($k$?$a$K;H$&!#$?$H$($P(BpTeX$B$G;H$o$l$k(Bmin10$B$N>l9g!"(B min10 -> rml by min10.vf (a2bk) $B$N$h$&$KL>A0$OCV$-49$($i$l$k!#(B($B>e$N9T$O!"(Bmake$B$N%*%W%7%g%s(Ba2bk$B$K$h$C$F(B $B:n$i$l$?(Bmin10.vf$B$H$$$&(Bvf$B%U%!%$%k$K$h$C$F!"(Bmin10$B$H$$$&%U%)%s%HL>$,(Brml $B$H$$$&%U%)%s%HL>$KCV$-49$($i$l$k$3$H$rI=$o$7$F$$$k!#(B) $B$3$N(Brml$B$H$$$&(B dvi$BCf$G$N%U%)%s%HL>$r(BRyumin-Light-H$B$H$$$&%W%j%s%?FbB"%U%)%s%HL>$K(B $B%^%C%W$9$k$N$O(Bdvi2ps$BEy$N(Bdvi$B%I%i%$%P$NLr3d$G$"$k!#(B pTeX$B$G;H$o$l$k=D=q$-MQ$N(Btmin10$B$N>l9g(B tmin10 -> rmlv by tmin10.vf (a2bk) $B$G!"DL>o$O(Brmlv$B$H$$$&%U%)%s%HL>$r=D=q$-MQ$N%W%j%s%?FbB"%U%)%s%H(B Ryumin-Light-V$B$K%^%C%W$9$k$N$G$"$k$,!"=D=q$-MQ$N%W%j%s%?FbB"%U%)%s%H$,(B $B$J$$>l9g$O2#=q$-MQ$N%U%)%s%H$G6a;w$G$-$k$h$&$K$9$k!#$^$:!"(B rmlv -> rml + rmlvsy by rmlv.vf (v2h) $B$K$h$C$F6gFIE@(B(``$B!#(B''$B$d(B``$B!"(B''$BEy(B)$B$dY{2;(B(``$B$C(B''$BEy(B)$BEy$r%7%U%H$9$k$3$H$K(B $B$h$C$FD4@0$9$k!#$5$i$K2sE>$dN"JV$7$r$7$J$1$l$P$J$i$J$$J8;z$b$"$k$,!"(B $B$=$l$i$O(B rmlvsy -> rml rotate/mirror by PS special by rmlvsy.vf (vsy) rmlvsy -> rml rotate by DIR by rmlvsy.vf (vsyd) $B$K$h$C$FD4@0$5$l$k!#A0$HN"JV$7$r$rl9g$b!"=D=q$-MQ$N%U%)%s%H$OI,MW$J$$!#(B $B$^$H$a$k$H!"A0l9g!"8el9g$K;H$&!#(B $B$3$N%Q%C%1!<%8$G@8@.$5$l$?(Btfm/vf$B%U%!%$%k$r$I$N$h$&$KG[CV$9$k$+$O <$B%U%)%s%H5-=R(B2> ... $B$H$$$&7A$NJ8;zNs$G$"$k!#$3$3$G!"(BXXX$B$O(Bvf$B$*$h$S(Btfm$B$N2<$K$G$-$k%G%#%l%/%H%jL>!"(B <$B%U%)%s%H5-=R(Bi> $B$O!"(B (B>:(B>:<$B%b%N(Btfm$BL>(B> $B$H$$$&J8;zNs$G$"$k!#$?$@$7!"(B (B>$B$O%W%j%s%?FbB"$N4A;z%U%)%s%H$N(Btfm(jfm)$BL>(B($B0J2<(BTTT$B$H=q$/(B)$B!"(B $B$G$N(Bfont$BL>$O%5%$%:$K4X$9$kItJ,$O=|$$$?L>A0(B($B0J2<(BFFF$B$H=q$/(B)$B!"(B <$B%b%N(Btfm$BL>(B>$B$O2#=q$-$N>l9g$O(Bmonokan$B!"=D=q$-$N>l9g$O(Bmonokan-v $B$G$"$k!#$3$N5-=R$K$h$j!"(B FFF5.vf, FFF6.vf, FFF7.vf, FFF8.vf, FFF9.vf, FFF10.vf $B$H$$$&(Bvf$B%U%!%$%k$,(B vf/XXX $B$H$$$&%G%#%l%/%H%j$N2<$K!"(B TTT.tfm $B$H$$$&(Btfm$B%U%!%$%k$,(B tfm/XXX $B$H$$$&%G%#%l%/%H%j$N2<$K:n$i$l$k!#(B vf$B$r:n$k$H$-$K;2>H$5$l$k%G!<%?$O!"(Bdata/a2TTT $B$H$$$&%U%!%$%k$K5-=R(B $B$5$l$F$$$k!#(B1$B9T$K(B1$B$D$NJ8;z$K$D$$$F5-=R$5$l$F$$$F!"(B1$BHVL\$N9`L\$,(B $BJ8;z%3!<%I!"(B2$BHVL\$N9`L\$,D4@aNL(B(1000=$BA43QI}(B)$B$G$"$k!#$=$l0J9_$N9`$O(B $B%3%a%s%H$G$"$k!#(B($B$J$*!"=D=q$-$N(B a2rmlvs, a2gbmvs, a2tmmv, a2tgbv $B$O(B $B$$$$$+$2$s$J$b$N$G$9!#(B) $B$^$?!"(Ba2std* $B$O(B min10.tfm, goth10.tfm, tmin10.tfm, tgoth10.tfm $B$N$_$N%G!<%?$+$i:n$C$?$b$N$G!"$"$kDxEYI8=`E*$J(B $B$b$N$K$J$C$F$$$k(B($B$H;W$&(B)$B!#8D!9$N%U%)%s%H$K4X$9$k%G!<%?$,$J$$$H$-$N(B $BBeMQIJ$K$J$k$@$m$&!#(B data/v2hTTT $B$O=D=q$-MQ$N%U%)%s%H$r2#=q$-MQ$N%U%)%s%H$G6a;w$9$k$H$-$K(B $B;H$&%G!<%?$G$"$k!#(B vftool-2.0alpha.orig/vfdata.doc0100644000175000017500000001511606772704507015546 0ustar kohdakohda -- $B5l(Bvfdata.doc --------------------------------------------------------------- $B!!(Bdvi2ps-1.9j$B$+$i$O!"(BASCII$BF|K\8l(BTeX$B$N(Bdvi$B%U%!%$%k$r%W%j%s%?FbB"%U%)%s%H(B $B$r;H$C$F=PNO$9$k$H$-$O(BVirtual Font$B$rMQ$$$k$h$&$KJQ99$7$^$7$?!#(B $B!!$3$N;~;HMQ$9$k(BVirtual Font$B$O!"(BASCII$BF|K\8l(BTeX$B$N(BJFM$B$H;HMQ$9$k%W%j%s%?(B $BFbB"%U%)%s%H$N(BAFM(Adobe Font Metrics)$B$+$i!"(Bvftool$B$r;H$C$F:n@.$7$^$9!#(B $BFbB"%U%)%s%H$O%W%j%s%?$K$h$k0c$$$,$"$k$N$G!";HMQ$9$k(BVF$B$r;H$$J,$1$kI,MW(B $B$,$"$j$^$9!#0J2l9g(B $B!!(BAdobe$B=c@5$N(BPostScript$B$N>l9g$O!"%b%j%5%o$N;zJl$+$i:n@.$7$?(B Ryumin-Light-H$B$*$h$S(BGothicBBB-Medium-H$B$r:NMQ$7$F$$$^$9!#(B $B!!$?$@$7!"(B1990$BG/Bh(B3$B4|$KF|K\8l%U%)%s%H$O3Fl9g$K$O(B $B!V(Bmorisawa1$B!W$r!"(B2.0$BHG$N>l9g$K$O!V(Bmorisawa2$B!W$r;H$$$^$9!#(B $B!!$?$@$7!"(Banonymous ftp$B$J$I$G(BPS$B%U%!%$%k$N>uBV$GDs6!$9$k>l9g$K$O!"8=:_(B $Bl9g$K$O!"IUB0$N(B"prninfo.ps"$B$H$$$&%W%m%0(B $B%i%`$r0u:~$7$F!"(B"PS Font Version:"$B$N9T$r8+$F%P!<%8%g%s$rH=CG$7$F$/$@$5(B $B$$!#(B ------------------------------------------------------------------------------- 2, PS$B8_49%W%j%s%?$N>l9g(B $B!!(BPS$B8_49%W%j%s%?$N>l9g$K$O!"(BRyumin-Light-H$B$*$h$S(BGothicBBB-Medium-H$B$r(B Adobe$B=c@5$H$O0c$&%U%)%s%H%a!<%+!<(B($B%?%$%W%P%s%/!"%j%g!<%S$J$I(B)$B$N%U%)%s(B $B%H$GBeMQ$7$F$$$^$9!#$=$N$?$a$K=c@5(BPS$BMQ$N(BVF$B$r;H$&$HJ8;z$,$:$l$k$b$N$"$j(B $B$^$9$N$G!"$=$N>l9g$K$O3Fl9g(B $B!!(BQMS$B$N>l9g$K$O!"l9g$O!"(B1$B$N@bL@$K=>$C$F$/$@$5$$!#(B B) Crown Architecture+$B%?%$%W%P%s%/4A;z%U%)%s%H(B $B!!$$$o$f$k(B4$B=qBN%b%G%k$G$9!#(BQMS$B$N%?%$%W%P%s%/4A;z%U%)%s%H$K$D$$$F$O!"$9(B $B$G$K(BVF$B%G!<%?$r:n@.$7$F$$$^$9!#!V(Btypebank$B!W$r;H$C$F$/$@$5$$!#(B C) Crown Architecture+QMS$B%b%j%5%o4A;z%U%)%s%H(B $B!!(BQMS$B$,8_495!$K:NMQ$7$F$$$k4A;z%U%)%s%H$K$O!"8=:_(B2$B]$H$J$k(B $BJ8;z$K4X$7$F$O%a%H%j%C%/%G!<%?$KBg$-$J$:$l$,$"$j$^$;$s$G$7$?$N$G!"(B Adobe$B=c@5%P!<%8%g%s(B2$BMQ$N(BVF$B$r$=$N$^$^;HMQ$7$F$/$@$5$$!#(B $B!!8E$$%P!<%8%g%s$G$O!"!H$J$I$NJ8;z$,$:$l$^$9$,!"?7$7$$%P!<%8%g%s$KL5NA(B $B$G%P!<%8%g%s%"%C%W$G$-$^$9$+$i!"HNGdE9$K%P!<%8%g%s%"%C%WMj$s$G$/$@$5$$!#(B $B$=$N$?$a$K8E$$%P!<%8%g%sMQ$N(BVF$B$OG[IU$7$^$;$s!#(B $B!!$3$N%P!<%8%g%s$N%A%'%C%/$K$O!"IUB0$N(B"prninfo.ps"$B$r0u:~$7$F!"(B"QMS Font Version:"$B$N=j$,(BNew/Old$B$+$GH=JL$7$^$9!#(B $B!&(BRICOH$B$N>l9g(B $B!!(BRICOH$B$N>l9g$K$O!"l9g$O!"(B1$B$N@bL@$K=>$C$F$/$@$5$$!#(B B) RICOH Script+RICOH$B%U%)%s%H(B $B!!(BRICOH$B%U%)%s%H$K$b!"@=IJ$K$h$C$F0c$$$,$"$j$^$9!#(B RICOH-Script, LP 5100UX$B!D!V(Bricohrs$B!W$r;H$C$F$/$@$5$$!#(B SP10PS$B!D!V(Bricohsp$B!W$r;H$C$F$/$@$5$$!#(B $B!&(BSun$B$N>l9g(B $B!!(BNEWSprint$BMQ$K$O!"8=:_2?$b%F%9%H$7$F$$$^$;$s!#(B $B!&(Bbrother$B$N>l9g(B $B!!(Bbrother$B$O!"(BBR-Script+BR-Font$B$H$$$&9=@.$G$9!#8=:_2?$b%F%9%H$7$F$$$^$;(B $B$s!#(B $B!&(BXerox$B$N>l9g(B $B!!(BXerox$B$N>l9g$K$O!"l9g$O!"(B1$B$N@bL@$K=>$C$F$/$@$5$$!#(B B) $B8_49%$%s%?!<%W%j%?(B+$B%?%$%W%P%s%/4A;z%U%)%s%H(B(4109) $B!!$^$@2?$b%F%9%H$5$l$F$$$^$;$s!#;n$7$K(BQMS$B$N%?%$%W%P%s%/%U%)%s%H$K(B $BMQ$$$k(BVF$B$r;HMQ$7$F$_$F$/$@$5$$!#(B ------------------------------------------------------------------------------- 3, VF$B%U%!%$%k$N9=@.(B $B!!(B1,2$B$G@bL@$7$?(BVF$B%U%!%$%k(BXXX.tar.gz$B$O(B min5.vf min6.vf min7.vf min8.vf min9.vf min10.vf goth5.vf goth6.vf goth7.vf goth8.vf goth9.vf goth10.vf $B$r$^$H$a$?$b$N$G$9!#$?$H$($P(Bmorisawa2$B$N(Bmin10.vf$B$O!"(Bmin10$B$NJ8;z$r%W%j%s(B $B%?FbB"%U%)%s%H(Brml$B$NJ8;z(B($B$H0\F0(B)$B$KJQ49$9$k$?$a$N(BVF$B$G$9!#$3$3$G(Brml$B$H$$$&(B $B$N$O(BVF$BCf$G$N%W%j%s%?FbB"%U%)%s%H$NL>A0!"$9$J$o$A%W%j%s%?FbB"%U%)%s%H$N(B TFM(JFM)$BL>$G$9!#$=$l$>$l$N(BVF$B%U%!%$%k$,;H$&FbB"%U%)%s%H$N(BTFM$BL>$O0J2<$N(B $B$h$&$K$J$C$F$$$^$9!#(B(XXX.tar.gz$B$,;H$&(BTFM$B$O(BXXX-tfm.tar.gz$B$G$9!#(B) vftool $B$r;H$C$F<+J,$G(BVF$B%U%!%$%k$r:n$k$H$-$O$3$N(BTFM$BL>$OE,Ev$K7h$a$F$+$^$$$^$;(B $B$s!#(B XXX TFM(JFM) morisawa1 min rml1 goth gbm1 morisawa2 min rml goth gbm tmin rmlv tgoth gbmv typebank min tmm goth tgb ricohrs min rmlr goth gbmr richosp min rmls goth gbms $B$7$?$,$C$F!"(Bmorisawa2$B0J30$N>l9g!"(Bdvi2ps-j$B$N(Bfontdesc$B$N(B builtin rml JSNR Ryumin-Light-H builtin gbm JSNR GothicBBB-Medium-H $B$K$?$H$($P(B builtin rmlr JSNR Ryumin-Light-H builtin gbmr JSNR GothicBBB-Medium-H $B$rDI2C(B($BC1$KJQ99$7$F$b$h$$(B)$B$9$k!#(B $B$J$*!"FbB"4A;z%U%)%s%H$O$9$Y$F%b%N%9%Z!<%9$J$N$G!">e5-$N(BTFM$B%U%!%$%k$O(B $Bl9g$K$O!"$=$N%G!<%?$+$i(BVF$B$r:n@.$9$k$3$H$,$G$-$^$9!#$^$?!"(BAFM $B$r6!5k$7$F$/$l$J$/$F$b!";dC#$,:n@.$7$?%W%m%0%i%`$G%G!<%?$r /Ryumin-Light-H <2158> getBBox 4 copy 4 -1 roll 640 eq 4 -1 roll -50 eq 4 -1 roll 935 eq 4 -1 roll 870 eq and and and { pop pop pop pop (2) }{ 4 -1 roll 465 eq 4 -1 roll -90 eq 4 -1 roll 760 eq 4 -1 roll 830 eq and and and { (1) }{ (Unknown) } ifelse } ifelse pr nl (QMS Font Version:) pr tab % check <2148> /Ryumin-Light-H <2148> getBBox 4 -1 roll 604 eq 4 -1 roll 563 eq 4 -1 roll 924 eq 4 -1 roll 810 eq and and and { (New) }{ (Old) } ifelse pr nl showpage %%EOF vftool-2.0alpha.orig/MKASC2BKall0100755000175000017500000000032307066457146015361 0ustar kohdakohda#!/bin/sh # prog=$1 afmdir=$2 jfmdir=$3 bkjfmdir=$4/$6 vfdir=$5/a2$6 shift 6 mkdir $bkjfmdir mkdir $vfdir for t in $* do ./MKASC2BK $prog `echo $t | sed -e 's/:/ /g'` \ $afmdir $jfmdir $bkjfmdir $vfdir done vftool-2.0alpha.orig/MKASC2BK0100755000175000017500000000036307066457730014673 0ustar kohdakohda#!/bin/sh prog=$1 CP='cp -p' bk=$2 afam=$3 monojfm=$4 afmdir=$5 jfmdir=$6 bkjfmdir=$7 vfdir=$8 $CP $monojfm.tfm $bkjfmdir/$bk.tfm all='5 6 7 8 9 10' for d in $all do $prog $bk $d $afam$d $jfmdir/$afam$d.tfm - $afmdir/a2$bk $vfdir/ done vftool-2.0alpha.orig/MKBKV2Hall0100755000175000017500000000025707066455634015276 0ustar kohdakohda#!/bin/sh # prog=$1 datadir=$2 jfmdir=$3/$5 vfdir=$4/v2h$5 shift 5 mkdir $vfdir for t in $* do ./MKBKV2H $prog `echo $t | sed -e 's/:/ /g'` \ $datadir $jfmdir $vfdir done vftool-2.0alpha.orig/MKBKV2H0100755000175000017500000000021307066457371014575 0ustar kohdakohda#!/bin/sh prog=$1 bk=$2 vbk=$3 bkvsy=$4 datadir=$5 jfmdir=$6 vfdir=$7 $prog $bk 10 $vbk $jfmdir/$vbk.tfm $datadir/v2h$bk $bkvsy $vfdir/ vftool-2.0alpha.orig/MKVSYall0100755000175000017500000000023007120756563015126 0ustar kohdakohda#!/bin/sh # prog=$1 datadir=$2 vfdir=$3/vsy$4 shift 4 mkdir $vfdir for t in $* do ./MKVSY $prog `echo $t | sed -e 's/:/ /g'` \ $datadir $vfdir done vftool-2.0alpha.orig/MKVSY0100755000175000017500000000017607066465455014454 0ustar kohdakohda#!/bin/sh prog=$1 bk=$2 bkvsy=$3 datadir=$4 vfdir=$5 $prog $bk 10 $bkvsy monosub.tfm $datadir/v2h$bk $datadir/pssp $vfdir/ vftool-2.0alpha.orig/MKVSYDall0100755000175000017500000000023207201320441015212 0ustar kohdakohda#!/bin/sh # prog=$1 datadir=$2 vfdir=$3/vsyd$4 shift 4 mkdir $vfdir for t in $* do ./MKVSYD $prog `echo $t | sed -e 's/:/ /g'` \ $datadir $vfdir done vftool-2.0alpha.orig/MKVSYD0100755000175000017500000000016007120755403014533 0ustar kohdakohda#!/bin/sh prog=$1 bk=$2 bkvsy=$3 datadir=$4 vfdir=$5 $prog $bk 10 $bkvsy monosub.tfm $datadir/v2h$bk $vfdir/ vftool-2.0alpha.orig/monokan.tfm0100644000175000017500000000020405474674443015757 0ustar kohdakohda !  yC†¼ffvftool-2.0alpha.orig/monokan-v.tfm0100644000175000017500000000020405630407120016176 0ustar kohdakohda !  yC†¼ffvftool-2.0alpha.orig/monosub.tfm0100644000175000017500000000213006504725260015764 0ustar kohdakohdaÿ  yC†¼ffvftool-2.0alpha.orig/data/0040755000175000017500000000000007200326305014501 5ustar kohdakohdavftool-2.0alpha.orig/data/a2stdgtv0100644000175000017500000000243707062461351016174 0ustar kohdakohda2122 0.000 $B!"(B 2123 0.000 $B!#(B 2124 & -481.109 -588.500 $B!$(B 2125 & -481.109 -588.500 $B!%(B 2126 -240.554 $B!&(B 2133 -107.391 $B!3(B 2134 -107.391 $B!4(B 2135 -107.391 $B!5(B 2136 -107.391 $B!6(B 2137 -107.391 $B!7(B 2139 -107.391 $B!9(B 213E -240.554 $B!>(B 2142 -240.554 $B!B(B 2143 -240.554 $B!C(B 2146 0.000 $B!F(B 2147 0.000 $B!G(B 2148 0.000 $B!H(B 2149 0.000 $B!I(B 214A -481.109 $B!J(B 214B 0.000 $B!K(B 214C -481.109 $B!L(B 214D 0.000 $B!M(B 214E -481.109 $B!N(B 214F 0.000 $B!O(B 2150 -481.109 $B!P(B 2151 0.000 $B!Q(B 2152 -481.109 $B!R(B 2153 0.000 $B!S(B 2154 -481.109 $B!T(B 2155 0.000 $B!U(B 2156 -481.109 $B!V(B 2157 0.000 $B!W(B 2158 -481.109 $B!X(B 2159 0.000 $B!Y(B 215A -481.109 $B!Z(B 215B 0.000 $B![(B 2421 -107.391 $B$!(B 2423 -107.391 $B$#(B 2425 -107.391 $B$%(B 2427 -107.391 $B$'(B 2429 -107.391 $B$)(B 2443 -107.391 $B$C(B 2463 -107.391 $B$c(B 2465 -107.391 $B$e(B 2467 -107.391 $B$g(B 246E -107.391 $B$n(B 2521 -107.391 $B%!(B 2523 -107.391 $B%#(B 2525 -107.391 $B%%(B 2527 -107.391 $B%'(B 2529 -107.391 $B%)(B 2543 -107.391 $B%C(B 2563 -107.391 $B%c(B 2565 -107.391 $B%e(B 2567 -107.391 $B%g(B 256E -107.391 $B%n(B 2575 -107.391 $B%u(B 2576 -107.391 $B%v(B vftool-2.0alpha.orig/data/a2bk0100644000175000017500000000232006524121202015232 0ustar kohdakohda2122 0 $B!"(B 2123 0 $B!#(B 2124 0 $B!$(B 2125 0 $B!%(B 2126 0 $B!&(B 2127 0 $B!'(B 2128 0 $B!((B 2129 0 $B!)(B 212A 0 $B!*(B 212B 0 $B!+(B 212C 0 $B!,(B 212D 0 $B!-(B 212E 0 $B!.(B 212F 0 $B!/(B 2130 0 $B!0(B 2133 0 $B!3(B 2135 0 $B!5(B 2136 0 $B!6(B 2137 0 $B!7(B 2139 0 $B!9(B 213E 0 $B!>(B 2142 0 $B!B(B 2143 0 $B!C(B 2146 0 $B!F(B 2147 0 $B!G(B 2148 0 $B!H(B 2149 0 $B!I(B 214A 0 $B!J(B 214B 0 $B!K(B 214C 0 $B!L(B 214D 0 $B!M(B 214E 0 $B!N(B 214F 0 $B!O(B 2150 0 $B!P(B 2151 0 $B!Q(B 2152 0 $B!R(B 2153 0 $B!S(B 2154 0 $B!T(B 2155 0 $B!U(B 2156 0 $B!V(B 2157 0 $B!W(B 2158 0 $B!X(B 2159 0 $B!Y(B 215A 0 $B!Z(B 215B 0 $B![(B 2168 0 $B!h(B 2169 0 $B!i(B 216A 0 $B!j(B 216B 0 $B!k(B 216C 0 $B!l(B 216D 0 $B!m(B 2170 0 $B!p(B 2171 0 $B!q(B 2172 0 $B!r(B 2178 0 $B!x(B 2421 0 $B$!(B 2423 0 $B$#(B 2425 0 $B$%(B 2427 0 $B$'(B 2429 0 $B$)(B 2443 0 $B$C(B 2463 0 $B$c(B 2465 0 $B$e(B 2467 0 $B$g(B 246E 0 $B$n(B 2521 0 $B%!(B 2523 0 $B%#(B 2525 0 $B%%(B 2527 0 $B%'(B 2529 0 $B%)(B 2543 0 $B%C(B 2563 0 $B%c(B 2565 0 $B%e(B 2567 0 $B%g(B 256E 0 $B%n(B 2575 0 $B%u(B 2576 0 $B%v(B vftool-2.0alpha.orig/data/a2bkv0100644000175000017500000000164006540434257015443 0ustar kohdakohda2122 0 $B!"(B 2123 0 $B!#(B 2124 0 $B!$(B 2125 0 $B!%(B 2126 0 $B!&(B 2133 0 $B!3(B 2134 0 $B!4(B 2135 0 $B!5(B 2136 0 $B!6(B 2137 0 $B!7(B 2139 0 $B!9(B 213E 0 $B!>(B 2142 0 $B!B(B 2143 0 $B!C(B 2146 0 $B!F(B 2147 0 $B!G(B 2148 0 $B!H(B 2149 0 $B!I(B 214A 0 $B!J(B 214B 0 $B!K(B 214C 0 $B!L(B 214D 0 $B!M(B 214E 0 $B!N(B 214F 0 $B!O(B 2150 0 $B!P(B 2151 0 $B!Q(B 2152 0 $B!R(B 2153 0 $B!S(B 2154 0 $B!T(B 2155 0 $B!U(B 2156 0 $B!V(B 2157 0 $B!W(B 2158 0 $B!X(B 2159 0 $B!Y(B 215A 0 $B!Z(B 215B 0 $B![(B 2421 0 $B$!(B 2423 0 $B$#(B 2425 0 $B$%(B 2427 0 $B$'(B 2429 0 $B$)(B 2443 0 $B$C(B 2463 0 $B$c(B 2465 0 $B$e(B 2467 0 $B$g(B 246E 0 $B$n(B 2521 0 $B%!(B 2523 0 $B%#(B 2525 0 $B%%(B 2527 0 $B%'(B 2529 0 $B%)(B 2543 0 $B%C(B 2563 0 $B%c(B 2565 0 $B%e(B 2567 0 $B%g(B 256E 0 $B%n(B 2575 0 $B%u(B 2576 0 $B%v(B vftool-2.0alpha.orig/data/a2rml0100644000175000017500000000327506534302234015451 0ustar kohdakohda2122 47.507 $B!"(B 2123 22.007 $B!#(B 2124 9.833 $B!$(B 2125 6.833 $B!%(B 2126 -323.667 $B!&(B 2127 -323.677 $B!'(B 2128 -321.667 $B!((B 2129 -248.538 $B!)(B 212A -323.167 $B!*(B 212B -13.667 $B!+(B 212C 6.753 $B!,(B 212D -322.805 $B!-(B 212E -308.805 $B!.(B 212F -247.513 $B!/(B 2130 -248.095 $B!0(B 2133 -231.493 $B!3(B 2135 -247.493 $B!5(B 2136 -189.283 $B!6(B 2137 -147.283 $B!7(B 2139 -81.283 $B!9(B 213E -323.167 $B!>(B 2142 -323.197 $B!B(B 2143 -322.667 $B!C(B 2146 -643.167 $B!F(B 2147 -5.667 $B!G(B 2148 -508.396 $B!H(B 2149 25.824 $B!I(B 214A -562.993 $B!J(B 214B 67.007 $B!K(B 214C -544.993 $B!L(B 214D 49.007 $B!M(B 214E -557.993 $B!N(B 214F 61.507 $B!O(B 2150 -594.984 $B!P(B 2151 99.017 $B!Q(B 2152 -400.493 $B!R(B 2153 -95.493 $B!S(B 2154 -478.493 $B!T(B 2155 -17.493 $B!U(B 2156 -543.993 $B!V(B 2157 48.007 $B!W(B 2158 -535.543 $B!X(B 2159 39.456 $B!Y(B 215A -545.993 $B!Z(B 215B 50.007 $B![(B 2168 -126.253 $B!h(B 2169 -189.803 $B!i(B 216A -126.313 $B!j(B 216B 71.961 $B!k(B 216C 95.132 $B!l(B 216D 9.561 $B!m(B 2170 -123.278 $B!p(B 2171 -98.283 $B!q(B 2172 -114.328 $B!r(B 2178 -244.449 $B!x(B 2421 -122.052 $B$!(B 2423 -118.823 $B$#(B 2425 -98.845 $B$%(B 2427 -134.783 $B$'(B 2429 -119.736 $B$)(B 2443 -110.225 $B$C(B 2463 -122.091 $B$c(B 2465 -134.733 $B$e(B 2467 -111.238 $B$g(B 246E -138.591 $B$n(B 2521 -140.763 $B%!(B 2523 -75.328 $B%#(B 2525 -128.243 $B%%(B 2527 -124.283 $B%'(B 2529 -113.283 $B%)(B 2543 -117.283 $B%C(B 2563 -132.783 $B%c(B 2565 -133.493 $B%e(B 2567 -120.707 $B%g(B 256E -117.303 $B%n(B 2575 -96.288 $B%u(B 2576 -118.313 $B%v(B vftool-2.0alpha.orig/data/a2gbm0100644000175000017500000000330206534302602015412 0ustar kohdakohda2122 7.507 $B!"(B 2123 12.987 $B!#(B 2124 5.833 $B!$(B 2125 3.833 $B!%(B 2126 -323.167 $B!&(B 2127 -322.667 $B!'(B 2128 -320.667 $B!((B 2129 -281.043 $B!)(B 212A -323.712 $B!*(B 212B -45.167 $B!+(B 212C -34.157 $B!,(B 212D -329.167 $B!-(B 212E -335.167 $B!.(B 212F -247.494 $B!/(B 2130 -247.493 $B!0(B 2133 -231.493 $B!3(B 2135 -246.993 $B!5(B 2136 -169.283 $B!6(B 2137 -140.283 $B!7(B 2139 -98.283 $B!9(B 213E -323.167 $B!>(B 2142 -323.117 $B!B(B 2143 -322.667 $B!C(B 2146 -679.667 $B!F(B 2147 34.833 $B!G(B 2148 -480.973 $B!H(B 2149 -13.023 $B!I(B 214A -560.993 $B!J(B 214B 66.007 $B!K(B 214C -544.993 $B!L(B 214D 49.007 $B!M(B 214E -557.493 $B!N(B 214F 61.507 $B!O(B 2150 -603.928 $B!P(B 2151 107.982 $B!Q(B 2152 -522.493 $B!R(B 2153 26.507 $B!S(B 2154 -470.493 $B!T(B 2155 -25.493 $B!U(B 2156 -517.493 $B!V(B 2157 24.007 $B!W(B 2158 -531.963 $B!X(B 2159 37.036 $B!Y(B 215A -545.993 $B!Z(B 215B 52.007 $B![(B 2168 -124.298 $B!h(B 2169 -95.823 $B!i(B 216A -126.343 $B!j(B 216B 104.987 $B!k(B 216C 117.007 $B!l(B 216D 43.507 $B!m(B 2170 -128.818 $B!p(B 2171 -129.283 $B!q(B 2172 -130.283 $B!r(B 2178 -246.474 $B!x(B 2421 -122.293 $B$!(B 2423 -148.783 $B$#(B 2425 -99.728 $B$%(B 2427 -115.758 $B$'(B 2429 -103.253 $B$)(B 2443 -117.783 $B$C(B 2463 -118.783 $B$c(B 2465 -136.833 $B$e(B 2467 -121.713 $B$g(B 246E -135.248 $B$n(B 2521 -124.783 $B%!(B 2523 -89.234 $B%#(B 2525 -125.793 $B%%(B 2527 -125.783 $B%'(B 2529 -108.783 $B%)(B 2543 -129.455 $B%C(B 2563 -143.283 $B%c(B 2565 -118.283 $B%e(B 2567 -109.283 $B%g(B 256E -124.783 $B%n(B 2575 -111.743 $B%u(B 2576 -98.783 $B%v(B vftool-2.0alpha.orig/data/a2rmlr0100644000175000017500000000330306541661071015630 0ustar kohdakohda2122 51.007 $B!"(B 2123 91.007 $B!#(B 2124 25.333 $B!$(B 2125 12.333 $B!%(B 2126 -324.167 $B!&(B 2127 -323.667 $B!'(B 2128 -325.667 $B!((B 2129 -249.993 $B!)(B 212A -327.167 $B!*(B 212B -12.167 $B!+(B 212C 20.333 $B!,(B 212D -343.667 $B!-(B 212E -304.667 $B!.(B 212F -245.993 $B!/(B 2130 -247.993 $B!0(B 2133 -237.993 $B!3(B 2135 -250.993 $B!5(B 2136 -195.783 $B!6(B 2137 -103.783 $B!7(B 2139 -75.783 $B!9(B 213E -324.167 $B!>(B 2142 -323.167 $B!B(B 2143 -325.667 $B!C(B 2146 -610.167 $B!F(B 2147 -36.167 $B!G(B 2148 -511.993 $B!H(B 2149 19.007 $B!I(B 214A -572.993 $B!J(B 214B 80.007 $B!K(B 214C -572.993 $B!L(B 214D 80.007 $B!M(B 214E -547.993 $B!N(B 214F 54.007 $B!O(B 2150 -504.493 $B!P(B 2151 11.507 $B!Q(B 2152 -570.993 $B!R(B 2153 78.007 $B!S(B 2154 -499.993 $B!T(B 2155 0.007 $B!U(B 2156 -556.993 $B!V(B 2157 64.007 $B!W(B 2158 -496.493 $B!X(B 2159 3.507 $B!Y(B 215A -505.993 $B!Z(B 215B 13.007 $B![(B 2168 -126.783 $B!h(B 2169 -120.783 $B!i(B 216A -124.783 $B!j(B 216B 103.007 $B!k(B 216C 108.507 $B!l(B 216D -14.493 $B!m(B 2170 -120.783 $B!p(B 2171 -120.283 $B!q(B 2172 -114.283 $B!r(B 2178 -255.993 $B!x(B 2421 -132.783 $B$!(B 2423 -139.283 $B$#(B 2425 -116.783 $B$%(B 2427 -149.283 $B$'(B 2429 -126.783 $B$)(B 2443 -106.783 $B$C(B 2463 -120.783 $B$c(B 2465 -134.283 $B$e(B 2467 -122.783 $B$g(B 246E -137.783 $B$n(B 2521 -116.783 $B%!(B 2523 -82.783 $B%#(B 2525 -156.283 $B%%(B 2527 -124.783 $B%'(B 2529 -107.783 $B%)(B 2543 -149.783 $B%C(B 2563 -118.783 $B%c(B 2565 -118.283 $B%e(B 2567 -114.783 $B%g(B 256E -142.783 $B%n(B 2575 -96.783 $B%u(B 2576 -105.783 $B%v(B vftool-2.0alpha.orig/data/a2rmls0100644000175000017500000000330406541656674015647 0ustar kohdakohda2122 50.007 $B!"(B 2123 91.007 $B!#(B 2124 25.333 $B!$(B 2125 11.333 $B!%(B 2126 -324.167 $B!&(B 2127 -324.167 $B!'(B 2128 -326.667 $B!((B 2129 -250.993 $B!)(B 212A -327.667 $B!*(B 212B -12.167 $B!+(B 212C 19.333 $B!,(B 212D -343.667 $B!-(B 212E -304.667 $B!.(B 212F -246.993 $B!/(B 2130 -249.493 $B!0(B 2133 -237.493 $B!3(B 2135 -250.993 $B!5(B 2136 -195.783 $B!6(B 2137 -103.783 $B!7(B 2139 -75.783 $B!9(B 213E -324.167 $B!>(B 2142 -324.167 $B!B(B 2143 -325.667 $B!C(B 2146 -611.667 $B!F(B 2147 -37.667 $B!G(B 2148 -512.993 $B!H(B 2149 18.007 $B!I(B 214A -572.993 $B!J(B 214B 79.007 $B!K(B 214C -572.993 $B!L(B 214D 79.007 $B!M(B 214E -547.993 $B!N(B 214F 53.507 $B!O(B 2150 -504.493 $B!P(B 2151 10.507 $B!Q(B 2152 -570.993 $B!R(B 2153 77.007 $B!S(B 2154 -500.993 $B!T(B 2155 -0.993 $B!U(B 2156 -556.993 $B!V(B 2157 64.007 $B!W(B 2158 -497.493 $B!X(B 2159 2.507 $B!Y(B 215A -506.993 $B!Z(B 215B 13.007 $B![(B 2168 -127.783 $B!h(B 2169 -121.783 $B!i(B 216A -125.283 $B!j(B 216B 102.007 $B!k(B 216C 108.507 $B!l(B 216D -14.493 $B!m(B 2170 -120.783 $B!p(B 2171 -121.283 $B!q(B 2172 -115.783 $B!r(B 2178 -256.993 $B!x(B 2421 -132.783 $B$!(B 2423 -140.283 $B$#(B 2425 -117.783 $B$%(B 2427 -148.283 $B$'(B 2429 -126.783 $B$)(B 2443 -107.783 $B$C(B 2463 -121.283 $B$c(B 2465 -135.783 $B$e(B 2467 -123.783 $B$g(B 246E -138.783 $B$n(B 2521 -117.783 $B%!(B 2523 -82.783 $B%#(B 2525 -156.283 $B%%(B 2527 -125.783 $B%'(B 2529 -107.783 $B%)(B 2543 -151.283 $B%C(B 2563 -119.283 $B%c(B 2565 -118.783 $B%e(B 2567 -115.783 $B%g(B 256E -144.283 $B%n(B 2575 -97.783 $B%u(B 2576 -106.283 $B%v(B vftool-2.0alpha.orig/data/a2rmlv0100644000175000017500000000244707062755374015655 0ustar kohdakohda2122 31.554 $B!"(B 2123 20.054 $B!#(B 2124 & -649.446 -600 $B!$(B 2125 & -589.446 -600 $B!%(B 2126 -280.946 $B!&(B 2133 -106.783 $B!3(B 2134 -29.283 $B!4(B 2135 -114.783 $B!5(B 2136 -36.283 $B!6(B 2137 -139.783 $B!7(B 2139 -130.283 $B!9(B 213E -259.446 $B!>(B 2142 -269.446 $B!B(B 2143 -269.446 $B!C(B 2146 25.554 $B!F(B 2147 14.554 $B!G(B 2148 44.554 $B!H(B 2149 33.554 $B!I(B 214A -574.446 $B!J(B 214B 55.554 $B!K(B 214C -556.446 $B!L(B 214D 37.554 $B!M(B 214E -569.446 $B!N(B 214F 50.554 $B!O(B 2150 -606.446 $B!P(B 2151 87.554 $B!Q(B 2152 -411.946 $B!R(B 2153 -106.946 $B!S(B 2154 -483.446 $B!T(B 2155 -35.446 $B!U(B 2156 -555.446 $B!V(B 2157 36.554 $B!W(B 2158 -546.946 $B!X(B 2159 28.054 $B!Y(B 215A -557.446 $B!Z(B 215B 38.554 $B![(B 2421 -127.783 $B$!(B 2423 -133.283 $B$#(B 2425 -133.783 $B$%(B 2427 -103.783 $B$'(B 2429 -120.283 $B$)(B 2443 -115.283 $B$C(B 2463 -126.783 $B$c(B 2465 -121.783 $B$e(B 2467 -112.283 $B$g(B 246E -126.283 $B$n(B 2521 -133.783 $B%!(B 2523 -111.283 $B%#(B 2525 -118.783 $B%%(B 2527 -110.783 $B%'(B 2529 -113.783 $B%)(B 2543 -133.783 $B%C(B 2563 -124.283 $B%c(B 2565 -105.283 $B%e(B 2567 -109.783 $B%g(B 256E -149.283 $B%n(B 2575 -105.283 $B%u(B 2576 -103.283 $B%v(B vftool-2.0alpha.orig/data/a2gbmr0100644000175000017500000000330206541661105015600 0ustar kohdakohda2122 56.007 $B!"(B 2123 64.507 $B!#(B 2124 38.333 $B!$(B 2125 18.333 $B!%(B 2126 -322.167 $B!&(B 2127 -321.667 $B!'(B 2128 -315.667 $B!((B 2129 -236.993 $B!)(B 212A -319.667 $B!*(B 212B -10.667 $B!+(B 212C 8.333 $B!,(B 212D -319.667 $B!-(B 212E -321.667 $B!.(B 212F -246.993 $B!/(B 2130 -247.993 $B!0(B 2133 -250.493 $B!3(B 2135 -291.993 $B!5(B 2136 -187.783 $B!6(B 2137 -128.283 $B!7(B 2139 -109.783 $B!9(B 213E -322.167 $B!>(B 2142 -321.667 $B!B(B 2143 -320.167 $B!C(B 2146 -587.667 $B!F(B 2147 -56.667 $B!G(B 2148 -497.993 $B!H(B 2149 5.007 $B!I(B 214A -516.493 $B!J(B 214B 22.507 $B!K(B 214C -521.993 $B!L(B 214D 28.007 $B!M(B 214E -520.493 $B!N(B 214F 26.507 $B!O(B 2150 -531.493 $B!P(B 2151 38.507 $B!Q(B 2152 -499.993 $B!R(B 2153 7.007 $B!S(B 2154 -492.493 $B!T(B 2155 -0.493 $B!U(B 2156 -520.493 $B!V(B 2157 26.507 $B!W(B 2158 -490.493 $B!X(B 2159 -2.493 $B!Y(B 215A -520.493 $B!Z(B 215B 26.507 $B![(B 2168 -124.783 $B!h(B 2169 -130.783 $B!i(B 216A -126.283 $B!j(B 216B 76.007 $B!k(B 216C 58.507 $B!l(B 216D -34.993 $B!m(B 2170 -135.783 $B!p(B 2171 -134.783 $B!q(B 2172 -123.283 $B!r(B 2178 -243.993 $B!x(B 2421 -152.283 $B$!(B 2423 -160.283 $B$#(B 2425 -111.783 $B$%(B 2427 -125.283 $B$'(B 2429 -148.283 $B$)(B 2443 -130.283 $B$C(B 2463 -136.783 $B$c(B 2465 -125.783 $B$e(B 2467 -140.783 $B$g(B 246E -113.283 $B$n(B 2521 -126.783 $B%!(B 2523 -90.283 $B%#(B 2525 -118.783 $B%%(B 2527 -128.783 $B%'(B 2529 -105.783 $B%)(B 2543 -141.283 $B%C(B 2563 -127.783 $B%c(B 2565 -126.783 $B%e(B 2567 -126.783 $B%g(B 256E -124.283 $B%n(B 2575 -103.283 $B%u(B 2576 -123.283 $B%v(B vftool-2.0alpha.orig/data/a2gbms0100644000175000017500000000330206541656705015613 0ustar kohdakohda2122 55.007 $B!"(B 2123 63.507 $B!#(B 2124 36.833 $B!$(B 2125 17.833 $B!%(B 2126 -322.167 $B!&(B 2127 -322.667 $B!'(B 2128 -316.667 $B!((B 2129 -236.993 $B!)(B 212A -320.667 $B!*(B 212B -11.667 $B!+(B 212C 7.333 $B!,(B 212D -320.667 $B!-(B 212E -321.667 $B!.(B 212F -246.993 $B!/(B 2130 -249.493 $B!0(B 2133 -250.493 $B!3(B 2135 -291.993 $B!5(B 2136 -187.783 $B!6(B 2137 -129.283 $B!7(B 2139 -109.783 $B!9(B 213E -322.167 $B!>(B 2142 -322.667 $B!B(B 2143 -320.167 $B!C(B 2146 -587.667 $B!F(B 2147 -56.667 $B!G(B 2148 -498.993 $B!H(B 2149 5.007 $B!I(B 214A -516.493 $B!J(B 214B 22.507 $B!K(B 214C -522.493 $B!L(B 214D 28.507 $B!M(B 214E -520.493 $B!N(B 214F 26.507 $B!O(B 2150 -532.493 $B!P(B 2151 38.507 $B!Q(B 2152 -500.993 $B!R(B 2153 7.007 $B!S(B 2154 -493.493 $B!T(B 2155 -1.493 $B!U(B 2156 -520.493 $B!V(B 2157 26.507 $B!W(B 2158 -491.493 $B!X(B 2159 -2.493 $B!Y(B 215A -520.493 $B!Z(B 215B 26.507 $B![(B 2168 -125.783 $B!h(B 2169 -131.783 $B!i(B 216A -127.283 $B!j(B 216B 75.007 $B!k(B 216C 57.507 $B!l(B 216D -35.993 $B!m(B 2170 -137.283 $B!p(B 2171 -135.283 $B!q(B 2172 -123.283 $B!r(B 2178 -244.993 $B!x(B 2421 -152.283 $B$!(B 2423 -160.283 $B$#(B 2425 -111.283 $B$%(B 2427 -125.283 $B$'(B 2429 -149.283 $B$)(B 2443 -131.283 $B$C(B 2463 -136.783 $B$c(B 2465 -125.283 $B$e(B 2467 -141.283 $B$g(B 246E -113.783 $B$n(B 2521 -127.283 $B%!(B 2523 -90.783 $B%#(B 2525 -119.283 $B%%(B 2527 -129.783 $B%'(B 2529 -105.783 $B%)(B 2543 -141.283 $B%C(B 2563 -128.783 $B%c(B 2565 -126.783 $B%e(B 2567 -127.783 $B%g(B 256E -125.283 $B%n(B 2575 -104.283 $B%u(B 2576 -123.283 $B%v(B vftool-2.0alpha.orig/data/a2gbmv0100644000175000017500000000244407062755641015622 0ustar kohdakohda2122 27.054 $B!"(B 2123 -2.446 $B!#(B 2124 & -632.446 -600 $B!$(B 2125 & -565.446 -600 $B!%(B 2126 -259.446 $B!&(B 2133 -137.283 $B!3(B 2134 -65.783 $B!4(B 2135 -133.283 $B!5(B 2136 -50.283 $B!6(B 2137 -121.783 $B!7(B 2139 -125.783 $B!9(B 213E -259.446 $B!>(B 2142 -269.446 $B!B(B 2143 -269.446 $B!C(B 2146 49.054 $B!F(B 2147 30.554 $B!G(B 2148 49.054 $B!H(B 2149 27.054 $B!I(B 214A -571.446 $B!J(B 214B 40.554 $B!K(B 214C -561.446 $B!L(B 214D 30.554 $B!M(B 214E -562.446 $B!N(B 214F 36.554 $B!O(B 2150 -617.446 $B!P(B 2151 95.554 $B!Q(B 2152 -539.946 $B!R(B 2153 9.054 $B!S(B 2154 -498.446 $B!T(B 2155 -21.446 $B!U(B 2156 -529.446 $B!V(B 2157 -2.446 $B!W(B 2158 -547.446 $B!X(B 2159 16.554 $B!Y(B 215A -559.446 $B!Z(B 215B 39.554 $B![(B 2421 -113.783 $B$!(B 2423 -151.283 $B$#(B 2425 -148.783 $B$%(B 2427 -120.783 $B$'(B 2429 -107.783 $B$)(B 2443 -136.783 $B$C(B 2463 -129.283 $B$c(B 2465 -128.283 $B$e(B 2467 -128.783 $B$g(B 246E -123.283 $B$n(B 2521 -124.783 $B%!(B 2523 -137.283 $B%#(B 2525 -119.283 $B%%(B 2527 -126.283 $B%'(B 2529 -119.283 $B%)(B 2543 -137.783 $B%C(B 2563 -133.283 $B%c(B 2565 -122.783 $B%e(B 2567 -151.783 $B%g(B 256E -161.283 $B%n(B 2575 -121.283 $B%u(B 2576 -107.283 $B%v(B vftool-2.0alpha.orig/data/a2tmm0100644000175000017500000000330606541661465015463 0ustar kohdakohda2122 101.007 $B!"(B 2123 90.007 $B!#(B 2124 20.333 $B!$(B 2125 16.833 $B!%(B 2126 -323.167 $B!&(B 2127 -323.667 $B!'(B 2128 -320.667 $B!((B 2129 -246.493 $B!)(B 212A -323.167 $B!*(B 212B -1.167 $B!+(B 212C 28.833 $B!,(B 212D -332.667 $B!-(B 212E -312.667 $B!.(B 212F -247.993 $B!/(B 2130 -247.993 $B!0(B 2133 -239.993 $B!3(B 2135 -233.993 $B!5(B 2136 -184.283 $B!6(B 2137 -104.783 $B!7(B 2139 -86.783 $B!9(B 213E -322.667 $B!>(B 2142 -322.667 $B!B(B 2143 -323.167 $B!C(B 2146 -682.667 $B!F(B 2147 37.333 $B!G(B 2148 -507.993 $B!H(B 2149 13.007 $B!I(B 214A -538.493 $B!J(B 214B 43.507 $B!K(B 214C -572.493 $B!L(B 214D 77.507 $B!M(B 214E -522.493 $B!N(B 214F 27.507 $B!O(B 2150 -546.993 $B!P(B 2151 52.007 $B!Q(B 2152 -449.493 $B!R(B 2153 -45.493 $B!S(B 2154 -369.993 $B!T(B 2155 -124.993 $B!U(B 2156 -547.993 $B!V(B 2157 53.007 $B!W(B 2158 -499.993 $B!X(B 2159 5.007 $B!Y(B 215A -579.993 $B!Z(B 215B 85.007 $B![(B 2168 -126.283 $B!h(B 2169 -124.283 $B!i(B 216A -126.783 $B!j(B 216B 104.007 $B!k(B 216C 136.007 $B!l(B 216D 58.507 $B!m(B 2170 -128.283 $B!p(B 2171 -126.783 $B!q(B 2172 -106.783 $B!r(B 2178 -248.493 $B!x(B 2421 -130.283 $B$!(B 2423 -142.783 $B$#(B 2425 -113.283 $B$%(B 2427 -143.283 $B$'(B 2429 -135.783 $B$)(B 2443 -119.283 $B$C(B 2463 -126.783 $B$c(B 2465 -138.783 $B$e(B 2467 -121.283 $B$g(B 246E -126.783 $B$n(B 2521 -128.783 $B%!(B 2523 -69.283 $B%#(B 2525 -127.283 $B%%(B 2527 -133.783 $B%'(B 2529 -124.783 $B%)(B 2543 -115.283 $B%C(B 2563 -122.783 $B%c(B 2565 -146.283 $B%e(B 2567 -119.783 $B%g(B 256E -129.283 $B%n(B 2575 -120.783 $B%u(B 2576 -125.783 $B%v(B vftool-2.0alpha.orig/data/a2tgb0100644000175000017500000000330306541661505015432 0ustar kohdakohda2122 86.007 $B!"(B 2123 89.007 $B!#(B 2124 24.833 $B!$(B 2125 15.833 $B!%(B 2126 -323.167 $B!&(B 2127 -323.167 $B!'(B 2128 -311.167 $B!((B 2129 -261.493 $B!)(B 212A -323.167 $B!*(B 212B 12.333 $B!+(B 212C 15.833 $B!,(B 212D -341.167 $B!-(B 212E -304.167 $B!.(B 212F -246.993 $B!/(B 2130 -247.993 $B!0(B 2133 -270.993 $B!3(B 2135 -232.993 $B!5(B 2136 -173.783 $B!6(B 2137 -96.783 $B!7(B 2139 -93.283 $B!9(B 213E -322.667 $B!>(B 2142 -322.667 $B!B(B 2143 -323.167 $B!C(B 2146 -686.167 $B!F(B 2147 40.833 $B!G(B 2148 -508.993 $B!H(B 2149 14.007 $B!I(B 214A -519.493 $B!J(B 214B 24.507 $B!K(B 214C -522.993 $B!L(B 214D 28.007 $B!M(B 214E -521.493 $B!N(B 214F 26.507 $B!O(B 2150 -506.993 $B!P(B 2151 12.007 $B!Q(B 2152 -415.493 $B!R(B 2153 -79.493 $B!S(B 2154 -367.993 $B!T(B 2155 -126.993 $B!U(B 2156 -510.993 $B!V(B 2157 16.007 $B!W(B 2158 -499.493 $B!X(B 2159 4.507 $B!Y(B 215A -547.993 $B!Z(B 215B 53.007 $B![(B 2168 -126.283 $B!h(B 2169 -124.783 $B!i(B 216A -126.283 $B!j(B 216B 84.007 $B!k(B 216C 129.507 $B!l(B 216D 36.007 $B!m(B 2170 -127.283 $B!p(B 2171 -107.783 $B!q(B 2172 -121.783 $B!r(B 2178 -246.493 $B!x(B 2421 -133.283 $B$!(B 2423 -141.283 $B$#(B 2425 -124.283 $B$%(B 2427 -128.783 $B$'(B 2429 -145.783 $B$)(B 2443 -126.283 $B$C(B 2463 -121.283 $B$c(B 2465 -157.783 $B$e(B 2467 -121.783 $B$g(B 246E -123.283 $B$n(B 2521 -135.283 $B%!(B 2523 -90.783 $B%#(B 2525 -120.783 $B%%(B 2527 -129.283 $B%'(B 2529 -120.783 $B%)(B 2543 -116.283 $B%C(B 2563 -117.283 $B%c(B 2565 -127.283 $B%e(B 2567 -122.283 $B%g(B 256E -117.783 $B%n(B 2575 -101.283 $B%u(B 2576 -130.783 $B%v(B vftool-2.0alpha.orig/data/a2rmlvs0100644000175000017500000000243106540434605016020 0ustar kohdakohda2122 31.554 $B!"(B 2123 20.054 $B!#(B 2124 -649.446 $B!$(B 2125 -589.446 $B!%(B 2126 -280.946 $B!&(B 2133 -106.783 $B!3(B 2134 -29.283 $B!4(B 2135 -114.783 $B!5(B 2136 -36.283 $B!6(B 2137 -139.783 $B!7(B 2139 -130.283 $B!9(B 213E -259.446 $B!>(B 2142 -269.446 $B!B(B 2143 -269.446 $B!C(B 2146 25.554 $B!F(B 2147 14.554 $B!G(B 2148 44.554 $B!H(B 2149 33.554 $B!I(B 214A -574.446 $B!J(B 214B 55.554 $B!K(B 214C -556.446 $B!L(B 214D 37.554 $B!M(B 214E -569.446 $B!N(B 214F 50.554 $B!O(B 2150 -606.446 $B!P(B 2151 87.554 $B!Q(B 2152 -411.946 $B!R(B 2153 -106.946 $B!S(B 2154 -483.446 $B!T(B 2155 -35.446 $B!U(B 2156 -555.446 $B!V(B 2157 36.554 $B!W(B 2158 -546.946 $B!X(B 2159 28.054 $B!Y(B 215A -557.446 $B!Z(B 215B 38.554 $B![(B 2421 -127.783 $B$!(B 2423 -133.283 $B$#(B 2425 -133.783 $B$%(B 2427 -103.783 $B$'(B 2429 -120.283 $B$)(B 2443 -115.283 $B$C(B 2463 -126.783 $B$c(B 2465 -121.783 $B$e(B 2467 -112.283 $B$g(B 246E -126.283 $B$n(B 2521 -133.783 $B%!(B 2523 -111.283 $B%#(B 2525 -118.783 $B%%(B 2527 -110.783 $B%'(B 2529 -113.783 $B%)(B 2543 -133.783 $B%C(B 2563 -124.283 $B%c(B 2565 -105.283 $B%e(B 2567 -109.783 $B%g(B 256E -149.283 $B%n(B 2575 -105.283 $B%u(B 2576 -103.283 $B%v(B vftool-2.0alpha.orig/data/a2gbmvs0100644000175000017500000000242606540434626016002 0ustar kohdakohda2122 27.054 $B!"(B 2123 -2.446 $B!#(B 2124 -632.446 $B!$(B 2125 -565.446 $B!%(B 2126 -259.446 $B!&(B 2133 -137.283 $B!3(B 2134 -65.783 $B!4(B 2135 -133.283 $B!5(B 2136 -50.283 $B!6(B 2137 -121.783 $B!7(B 2139 -125.783 $B!9(B 213E -259.446 $B!>(B 2142 -269.446 $B!B(B 2143 -269.446 $B!C(B 2146 49.054 $B!F(B 2147 30.554 $B!G(B 2148 49.054 $B!H(B 2149 27.054 $B!I(B 214A -571.446 $B!J(B 214B 40.554 $B!K(B 214C -561.446 $B!L(B 214D 30.554 $B!M(B 214E -562.446 $B!N(B 214F 36.554 $B!O(B 2150 -617.446 $B!P(B 2151 95.554 $B!Q(B 2152 -539.946 $B!R(B 2153 9.054 $B!S(B 2154 -498.446 $B!T(B 2155 -21.446 $B!U(B 2156 -529.446 $B!V(B 2157 -2.446 $B!W(B 2158 -547.446 $B!X(B 2159 16.554 $B!Y(B 215A -559.446 $B!Z(B 215B 39.554 $B![(B 2421 -113.783 $B$!(B 2423 -151.283 $B$#(B 2425 -148.783 $B$%(B 2427 -120.783 $B$'(B 2429 -107.783 $B$)(B 2443 -136.783 $B$C(B 2463 -129.283 $B$c(B 2465 -128.283 $B$e(B 2467 -128.783 $B$g(B 246E -123.283 $B$n(B 2521 -124.783 $B%!(B 2523 -137.283 $B%#(B 2525 -119.283 $B%%(B 2527 -126.283 $B%'(B 2529 -119.283 $B%)(B 2543 -137.783 $B%C(B 2563 -133.283 $B%c(B 2565 -122.783 $B%e(B 2567 -151.783 $B%g(B 256E -161.283 $B%n(B 2575 -121.283 $B%u(B 2576 -107.283 $B%v(B vftool-2.0alpha.orig/data/a2tmmv0100644000175000017500000000243106540434605015640 0ustar kohdakohda2122 31.554 $B!"(B 2123 20.054 $B!#(B 2124 -649.446 $B!$(B 2125 -589.446 $B!%(B 2126 -280.946 $B!&(B 2133 -106.783 $B!3(B 2134 -29.283 $B!4(B 2135 -114.783 $B!5(B 2136 -36.283 $B!6(B 2137 -139.783 $B!7(B 2139 -130.283 $B!9(B 213E -259.446 $B!>(B 2142 -269.446 $B!B(B 2143 -269.446 $B!C(B 2146 25.554 $B!F(B 2147 14.554 $B!G(B 2148 44.554 $B!H(B 2149 33.554 $B!I(B 214A -574.446 $B!J(B 214B 55.554 $B!K(B 214C -556.446 $B!L(B 214D 37.554 $B!M(B 214E -569.446 $B!N(B 214F 50.554 $B!O(B 2150 -606.446 $B!P(B 2151 87.554 $B!Q(B 2152 -411.946 $B!R(B 2153 -106.946 $B!S(B 2154 -483.446 $B!T(B 2155 -35.446 $B!U(B 2156 -555.446 $B!V(B 2157 36.554 $B!W(B 2158 -546.946 $B!X(B 2159 28.054 $B!Y(B 215A -557.446 $B!Z(B 215B 38.554 $B![(B 2421 -127.783 $B$!(B 2423 -133.283 $B$#(B 2425 -133.783 $B$%(B 2427 -103.783 $B$'(B 2429 -120.283 $B$)(B 2443 -115.283 $B$C(B 2463 -126.783 $B$c(B 2465 -121.783 $B$e(B 2467 -112.283 $B$g(B 246E -126.283 $B$n(B 2521 -133.783 $B%!(B 2523 -111.283 $B%#(B 2525 -118.783 $B%%(B 2527 -110.783 $B%'(B 2529 -113.783 $B%)(B 2543 -133.783 $B%C(B 2563 -124.283 $B%c(B 2565 -105.283 $B%e(B 2567 -109.783 $B%g(B 256E -149.283 $B%n(B 2575 -105.283 $B%u(B 2576 -103.283 $B%v(B vftool-2.0alpha.orig/data/a2tgbv0100644000175000017500000000242606540434626015626 0ustar kohdakohda2122 27.054 $B!"(B 2123 -2.446 $B!#(B 2124 -632.446 $B!$(B 2125 -565.446 $B!%(B 2126 -259.446 $B!&(B 2133 -137.283 $B!3(B 2134 -65.783 $B!4(B 2135 -133.283 $B!5(B 2136 -50.283 $B!6(B 2137 -121.783 $B!7(B 2139 -125.783 $B!9(B 213E -259.446 $B!>(B 2142 -269.446 $B!B(B 2143 -269.446 $B!C(B 2146 49.054 $B!F(B 2147 30.554 $B!G(B 2148 49.054 $B!H(B 2149 27.054 $B!I(B 214A -571.446 $B!J(B 214B 40.554 $B!K(B 214C -561.446 $B!L(B 214D 30.554 $B!M(B 214E -562.446 $B!N(B 214F 36.554 $B!O(B 2150 -617.446 $B!P(B 2151 95.554 $B!Q(B 2152 -539.946 $B!R(B 2153 9.054 $B!S(B 2154 -498.446 $B!T(B 2155 -21.446 $B!U(B 2156 -529.446 $B!V(B 2157 -2.446 $B!W(B 2158 -547.446 $B!X(B 2159 16.554 $B!Y(B 215A -559.446 $B!Z(B 215B 39.554 $B![(B 2421 -113.783 $B$!(B 2423 -151.283 $B$#(B 2425 -148.783 $B$%(B 2427 -120.783 $B$'(B 2429 -107.783 $B$)(B 2443 -136.783 $B$C(B 2463 -129.283 $B$c(B 2465 -128.283 $B$e(B 2467 -128.783 $B$g(B 246E -123.283 $B$n(B 2521 -124.783 $B%!(B 2523 -137.283 $B%#(B 2525 -119.283 $B%%(B 2527 -126.283 $B%'(B 2529 -119.283 $B%)(B 2543 -137.783 $B%C(B 2563 -133.283 $B%c(B 2565 -122.783 $B%e(B 2567 -151.783 $B%g(B 256E -161.283 $B%n(B 2575 -121.283 $B%u(B 2576 -107.283 $B%v(B vftool-2.0alpha.orig/data/a2jl0100644000175000017500000000200107040126040015236 0ustar kohdakohda2122 -7.573 2123 35.927 2124 43.253 2125 50.753 2126 -300.247 2127 -300.247 2128 -297.747 2129 -219.073 212A -300.247 212B 12.753 212C 25.753 212D -302.747 212E -302.747 212F -225.573 2130 -225.073 2133 -215.073 2135 -219.573 2136 -147.363 2137 -101.362 2139 -62.862 213E -300.747 2142 -290.747 2143 -300.247 2146 -645.247 2147 44.753 2148 -490.073 2149 39.927 214A -548.573 214B 98.427 214C -539.073 214D 88.926 214E -543.572 214F 92.426 2150 -546.073 2151 94.927 2152 -513.573 2153 63.427 2154 -513.073 2155 63.427 2156 -493.573 2157 43.427 2158 -505.073 2159 55.427 215A -523.073 215B 72.927 2168 -103.363 2169 -124.363 216A -103.363 216B 117.927 216C 106.927 216D 73.426 2170 -97.862 2171 -98.363 2172 -103.863 2178 -225.073 2421 -106.362 2423 -111.862 2425 -96.863 2427 -112.363 2429 -114.363 2443 -90.862 2463 -99.362 2465 -110.863 2467 -86.863 246E -108.863 2521 -110.863 2523 -42.362 2525 -99.862 2527 -99.862 2529 -97.363 2543 -94.362 2563 -113.362 2565 -94.362 2567 -89.863 256E -104.862 2575 -107.363 2576 -96.362 vftool-2.0alpha.orig/data/a2fgb0100644000175000017500000000201007040125644015400 0ustar kohdakohda2122 34.427 2123 24.926 2124 50.253 2125 74.753 2126 -307.247 2127 -300.247 2128 -292.747 2129 -254.573 212A -298.747 212B 37.252 212C 73.253 212D -335.747 212E -247.247 212F -223.073 2130 -223.073 2133 -229.073 2135 -249.073 2136 -165.362 2137 -97.862 2139 -105.863 213E -300.747 2142 -300.247 2143 -282.746 2146 -646.747 2147 41.253 2148 -486.073 2149 44.927 214A -529.073 214B 78.426 214C -511.573 214D 61.427 214E -530.073 214F 79.926 2150 -576.572 2151 126.926 2152 -410.073 2153 -40.072 2154 -459.073 2155 8.427 2156 -494.573 2157 44.427 2158 -505.073 2159 55.427 215A -523.073 215B 72.927 2168 -103.363 2169 -74.862 216A -106.863 216B 125.927 216C 140.427 216D 62.926 2170 -102.363 2171 -100.363 2172 -97.862 2178 -222.073 2421 -105.363 2423 -116.862 2425 -91.863 2427 -95.862 2429 -100.363 2443 -103.363 2463 -109.363 2465 -111.862 2467 -109.862 246E -120.863 2521 -128.862 2523 -85.862 2525 -107.862 2527 -109.363 2529 -99.362 2543 -107.363 2563 -103.863 2565 -119.363 2567 -99.862 256E -109.862 2575 -100.863 2576 -97.363 vftool-2.0alpha.orig/data/a2fmb0100644000175000017500000000201007040125605015403 0ustar kohdakohda2122 34.427 2123 24.926 2124 50.253 2125 74.753 2126 -307.247 2127 -300.247 2128 -292.747 2129 -254.573 212A -298.747 212B 37.252 212C 73.253 212D -335.747 212E -247.247 212F -223.073 2130 -223.073 2133 -229.073 2135 -249.073 2136 -165.362 2137 -97.862 2139 -105.863 213E -300.747 2142 -300.247 2143 -282.746 2146 -646.747 2147 41.253 2148 -486.073 2149 44.927 214A -529.073 214B 78.426 214C -511.573 214D 61.427 214E -530.073 214F 79.926 2150 -576.572 2151 126.926 2152 -410.073 2153 -40.072 2154 -459.073 2155 8.427 2156 -494.573 2157 44.427 2158 -505.073 2159 55.427 215A -523.073 215B 72.927 2168 -103.363 2169 -74.862 216A -106.863 216B 125.927 216C 140.427 216D 62.926 2170 -102.363 2171 -100.363 2172 -97.862 2178 -222.073 2421 -105.363 2423 -116.862 2425 -91.863 2427 -95.862 2429 -100.363 2443 -103.363 2463 -109.363 2465 -111.862 2467 -109.862 246E -120.863 2521 -128.862 2523 -85.862 2525 -107.862 2527 -109.363 2529 -99.362 2543 -107.363 2563 -103.863 2565 -119.363 2567 -99.862 256E -109.862 2575 -100.863 2576 -97.363 vftool-2.0alpha.orig/data/a2stdmn0100644000175000017500000000325707061267114016007 0ustar kohdakohda2122 0.000 $B!"(B 2123 0.000 $B!#(B 2124 0.000 $B!$(B 2125 0.000 $B!%(B 2126 -304.276 $B!&(B 2127 -304.276 $B!'(B 2128 -304.276 $B!((B 2129 -229.101 $B!)(B 212A -304.276 $B!*(B 212B 0.000 $B!+(B 212C 0.000 $B!,(B 212D -304.276 $B!-(B 212E -304.276 $B!.(B 212F -229.101 $B!/(B 2130 -229.101 $B!0(B 2133 -229.101 $B!3(B 2135 -229.101 $B!5(B 2136 -107.391 $B!6(B 2137 -107.391 $B!7(B 2139 -107.391 $B!9(B 213E -304.276 $B!>(B 2142 -304.276 $B!B(B 2143 -304.276 $B!C(B 2146 -608.551 $B!F(B 2147 0.000 $B!G(B 2148 -458.203 $B!H(B 2149 0.000 $B!I(B 214A -458.203 $B!J(B 214B 0.000 $B!K(B 214C -458.203 $B!L(B 214D 0.000 $B!M(B 214E -458.203 $B!N(B 214F 0.000 $B!O(B 2150 -458.203 $B!P(B 2151 0.000 $B!Q(B 2152 -458.203 $B!R(B 2153 0.000 $B!S(B 2154 -458.203 $B!T(B 2155 0.000 $B!U(B 2156 -458.203 $B!V(B 2157 0.000 $B!W(B 2158 -458.203 $B!X(B 2159 0.000 $B!Y(B 215A -458.203 $B!Z(B 215B 0.000 $B![(B 2168 -107.391 $B!h(B 2169 -107.391 $B!i(B 216A -107.391 $B!j(B 216B 0.000 $B!k(B 216C 0.000 $B!l(B 216D 0.000 $B!m(B 2170 -107.391 $B!p(B 2171 -107.391 $B!q(B 2172 -107.391 $B!r(B 2178 -229.101 $B!x(B 2421 -107.391 $B$!(B 2423 -107.391 $B$#(B 2425 -107.391 $B$%(B 2427 -107.391 $B$'(B 2429 -107.391 $B$)(B 2443 -107.391 $B$C(B 2463 -107.391 $B$c(B 2465 -107.391 $B$e(B 2467 -107.391 $B$g(B 246E -107.391 $B$n(B 2521 -107.391 $B%!(B 2523 -107.391 $B%#(B 2525 -107.391 $B%%(B 2527 -107.391 $B%'(B 2529 -107.391 $B%)(B 2543 -107.391 $B%C(B 2563 -107.391 $B%c(B 2565 -107.391 $B%e(B 2567 -107.391 $B%g(B 256E -107.391 $B%n(B 2575 -107.391 $B%u(B 2576 -107.391 $B%v(B vftool-2.0alpha.orig/data/a2stdgt0100644000175000017500000000325707061267114016007 0ustar kohdakohda2122 0.000 $B!"(B 2123 0.000 $B!#(B 2124 0.000 $B!$(B 2125 0.000 $B!%(B 2126 -304.276 $B!&(B 2127 -304.276 $B!'(B 2128 -304.276 $B!((B 2129 -229.101 $B!)(B 212A -304.276 $B!*(B 212B 0.000 $B!+(B 212C 0.000 $B!,(B 212D -304.276 $B!-(B 212E -304.276 $B!.(B 212F -229.101 $B!/(B 2130 -229.101 $B!0(B 2133 -229.101 $B!3(B 2135 -229.101 $B!5(B 2136 -107.391 $B!6(B 2137 -107.391 $B!7(B 2139 -107.391 $B!9(B 213E -304.276 $B!>(B 2142 -304.276 $B!B(B 2143 -304.276 $B!C(B 2146 -608.551 $B!F(B 2147 0.000 $B!G(B 2148 -458.203 $B!H(B 2149 0.000 $B!I(B 214A -458.203 $B!J(B 214B 0.000 $B!K(B 214C -458.203 $B!L(B 214D 0.000 $B!M(B 214E -458.203 $B!N(B 214F 0.000 $B!O(B 2150 -458.203 $B!P(B 2151 0.000 $B!Q(B 2152 -458.203 $B!R(B 2153 0.000 $B!S(B 2154 -458.203 $B!T(B 2155 0.000 $B!U(B 2156 -458.203 $B!V(B 2157 0.000 $B!W(B 2158 -458.203 $B!X(B 2159 0.000 $B!Y(B 215A -458.203 $B!Z(B 215B 0.000 $B![(B 2168 -107.391 $B!h(B 2169 -107.391 $B!i(B 216A -107.391 $B!j(B 216B 0.000 $B!k(B 216C 0.000 $B!l(B 216D 0.000 $B!m(B 2170 -107.391 $B!p(B 2171 -107.391 $B!q(B 2172 -107.391 $B!r(B 2178 -229.101 $B!x(B 2421 -107.391 $B$!(B 2423 -107.391 $B$#(B 2425 -107.391 $B$%(B 2427 -107.391 $B$'(B 2429 -107.391 $B$)(B 2443 -107.391 $B$C(B 2463 -107.391 $B$c(B 2465 -107.391 $B$e(B 2467 -107.391 $B$g(B 246E -107.391 $B$n(B 2521 -107.391 $B%!(B 2523 -107.391 $B%#(B 2525 -107.391 $B%%(B 2527 -107.391 $B%'(B 2529 -107.391 $B%)(B 2543 -107.391 $B%C(B 2563 -107.391 $B%c(B 2565 -107.391 $B%e(B 2567 -107.391 $B%g(B 256E -107.391 $B%n(B 2575 -107.391 $B%u(B 2576 -107.391 $B%v(B vftool-2.0alpha.orig/data/pssp0100644000175000017500000000007507063374473015430 0ustar kohdakohdagsave 90 rotate grestore gsave [0 1 1 0 0 0] concat grestore vftool-2.0alpha.orig/data/v2hrml0100644000175000017500000000201007045052471015633 0ustar kohdakohda160 2122 600 500 ; 8482 ¡¢ 2123 600 500 ; 8483 ¡£ 2421 150 150 ; 9249 ¤¡ 2423 150 150 ; 9251 ¤£ 2425 150 150 ; 9253 ¤¥ 2427 150 150 ; 9255 ¤§ 2429 150 150 ; 9257 ¤© 2443 150 150 ; 9283 ¤Ã 2463 150 150 ; 9315 ¤ã 2465 150 150 ; 9317 ¤å 2467 150 150 ; 9319 ¤ç 246E 150 150 ; 9326 ¤î 2521 150 150 ; 9505 ¥¡ 2523 150 150 ; 9507 ¥£ 2525 150 150 ; 9509 ¥¥ 2527 150 150 ; 9511 ¥§ 2529 150 150 ; 9513 ¥© 2543 150 150 ; 9539 ¥Ã 2563 150 150 ; 9571 ¥ã 2565 150 150 ; 9573 ¥å 2567 150 150 ; 9575 ¥ç 256E 150 150 ; 9582 ¥î 2575 150 150 ; 9589 ¥õ 2576 150 150 ; 9590 ¥ö 2131 r ; 8497 ¡± 2132 r ; 8498 ¡² 213C m ; 8508 ¡¼ 213D r ; 8509 ¡½ 213E r ; 8510 ¡¾ 2141 m ; 8513 ¡Á 2142 r ; 8514 ¡Â 2143 r ; 8515 ¡Ã 2144 r ; 8516 ¡Ä 2145 r ; 8517 ¡Å 214A r ; 8522 ¡Ê 214B r ; 8523 ¡Ë 214C r ; 8524 ¡Ì 214D r ; 8525 ¡Í 214E r ; 8526 ¡Î 214F r ; 8527 ¡Ï 2150 r ; 8528 ¡Ð 2151 r ; 8529 ¡Ñ 2152 r ; 8530 ¡Ò 2153 r ; 8531 ¡Ó 2154 r ; 8532 ¡Ô 2155 r ; 8533 ¡Õ 2156 r ; 8534 ¡Ö 2157 r ; 8535 ¡× 2158 r ; 8536 ¡Ø 2159 r ; 8537 ¡Ù 215A r ; 8538 ¡Ú 215B r ; 8539 ¡Û vftool-2.0alpha.orig/data/v2hgbm0100644000175000017500000000201007045052471015606 0ustar kohdakohda160 2122 600 500 ; 8482 ¡¢ 2123 600 500 ; 8483 ¡£ 2421 150 150 ; 9249 ¤¡ 2423 150 150 ; 9251 ¤£ 2425 150 150 ; 9253 ¤¥ 2427 150 150 ; 9255 ¤§ 2429 150 150 ; 9257 ¤© 2443 150 150 ; 9283 ¤Ã 2463 150 150 ; 9315 ¤ã 2465 150 150 ; 9317 ¤å 2467 150 150 ; 9319 ¤ç 246E 150 150 ; 9326 ¤î 2521 150 150 ; 9505 ¥¡ 2523 150 150 ; 9507 ¥£ 2525 150 150 ; 9509 ¥¥ 2527 150 150 ; 9511 ¥§ 2529 150 150 ; 9513 ¥© 2543 150 150 ; 9539 ¥Ã 2563 150 150 ; 9571 ¥ã 2565 150 150 ; 9573 ¥å 2567 150 150 ; 9575 ¥ç 256E 150 150 ; 9582 ¥î 2575 150 150 ; 9589 ¥õ 2576 150 150 ; 9590 ¥ö 2131 r ; 8497 ¡± 2132 r ; 8498 ¡² 213C m ; 8508 ¡¼ 213D r ; 8509 ¡½ 213E r ; 8510 ¡¾ 2141 m ; 8513 ¡Á 2142 r ; 8514 ¡Â 2143 r ; 8515 ¡Ã 2144 r ; 8516 ¡Ä 2145 r ; 8517 ¡Å 214A r ; 8522 ¡Ê 214B r ; 8523 ¡Ë 214C r ; 8524 ¡Ì 214D r ; 8525 ¡Í 214E r ; 8526 ¡Î 214F r ; 8527 ¡Ï 2150 r ; 8528 ¡Ð 2151 r ; 8529 ¡Ñ 2152 r ; 8530 ¡Ò 2153 r ; 8531 ¡Ó 2154 r ; 8532 ¡Ô 2155 r ; 8533 ¡Õ 2156 r ; 8534 ¡Ö 2157 r ; 8535 ¡× 2158 r ; 8536 ¡Ø 2159 r ; 8537 ¡Ù 215A r ; 8538 ¡Ú 215B r ; 8539 ¡Û vftool-2.0alpha.orig/data/v2hbk0100644000175000017500000000201007045052471015435 0ustar kohdakohda160 2122 600 500 ; 8482 ¡¢ 2123 600 500 ; 8483 ¡£ 2421 150 150 ; 9249 ¤¡ 2423 150 150 ; 9251 ¤£ 2425 150 150 ; 9253 ¤¥ 2427 150 150 ; 9255 ¤§ 2429 150 150 ; 9257 ¤© 2443 150 150 ; 9283 ¤Ã 2463 150 150 ; 9315 ¤ã 2465 150 150 ; 9317 ¤å 2467 150 150 ; 9319 ¤ç 246E 150 150 ; 9326 ¤î 2521 150 150 ; 9505 ¥¡ 2523 150 150 ; 9507 ¥£ 2525 150 150 ; 9509 ¥¥ 2527 150 150 ; 9511 ¥§ 2529 150 150 ; 9513 ¥© 2543 150 150 ; 9539 ¥Ã 2563 150 150 ; 9571 ¥ã 2565 150 150 ; 9573 ¥å 2567 150 150 ; 9575 ¥ç 256E 150 150 ; 9582 ¥î 2575 150 150 ; 9589 ¥õ 2576 150 150 ; 9590 ¥ö 2131 r ; 8497 ¡± 2132 r ; 8498 ¡² 213C m ; 8508 ¡¼ 213D r ; 8509 ¡½ 213E r ; 8510 ¡¾ 2141 m ; 8513 ¡Á 2142 r ; 8514 ¡Â 2143 r ; 8515 ¡Ã 2144 r ; 8516 ¡Ä 2145 r ; 8517 ¡Å 214A r ; 8522 ¡Ê 214B r ; 8523 ¡Ë 214C r ; 8524 ¡Ì 214D r ; 8525 ¡Í 214E r ; 8526 ¡Î 214F r ; 8527 ¡Ï 2150 r ; 8528 ¡Ð 2151 r ; 8529 ¡Ñ 2152 r ; 8530 ¡Ò 2153 r ; 8531 ¡Ó 2154 r ; 8532 ¡Ô 2155 r ; 8533 ¡Õ 2156 r ; 8534 ¡Ö 2157 r ; 8535 ¡× 2158 r ; 8536 ¡Ø 2159 r ; 8537 ¡Ù 215A r ; 8538 ¡Ú 215B r ; 8539 ¡Û vftool-2.0alpha.orig/data/a2stdmnv0100644000175000017500000000243707062461351016174 0ustar kohdakohda2122 0.000 $B!"(B 2123 0.000 $B!#(B 2124 & -481.109 -588.500 $B!$(B 2125 & -481.109 -588.500 $B!%(B 2126 -240.554 $B!&(B 2133 -107.391 $B!3(B 2134 -107.391 $B!4(B 2135 -107.391 $B!5(B 2136 -107.391 $B!6(B 2137 -107.391 $B!7(B 2139 -107.391 $B!9(B 213E -240.554 $B!>(B 2142 -240.554 $B!B(B 2143 -240.554 $B!C(B 2146 0.000 $B!F(B 2147 0.000 $B!G(B 2148 0.000 $B!H(B 2149 0.000 $B!I(B 214A -481.109 $B!J(B 214B 0.000 $B!K(B 214C -481.109 $B!L(B 214D 0.000 $B!M(B 214E -481.109 $B!N(B 214F 0.000 $B!O(B 2150 -481.109 $B!P(B 2151 0.000 $B!Q(B 2152 -481.109 $B!R(B 2153 0.000 $B!S(B 2154 -481.109 $B!T(B 2155 0.000 $B!U(B 2156 -481.109 $B!V(B 2157 0.000 $B!W(B 2158 -481.109 $B!X(B 2159 0.000 $B!Y(B 215A -481.109 $B!Z(B 215B 0.000 $B![(B 2421 -107.391 $B$!(B 2423 -107.391 $B$#(B 2425 -107.391 $B$%(B 2427 -107.391 $B$'(B 2429 -107.391 $B$)(B 2443 -107.391 $B$C(B 2463 -107.391 $B$c(B 2465 -107.391 $B$e(B 2467 -107.391 $B$g(B 246E -107.391 $B$n(B 2521 -107.391 $B%!(B 2523 -107.391 $B%#(B 2525 -107.391 $B%%(B 2527 -107.391 $B%'(B 2529 -107.391 $B%)(B 2543 -107.391 $B%C(B 2563 -107.391 $B%c(B 2565 -107.391 $B%e(B 2567 -107.391 $B%g(B 256E -107.391 $B%n(B 2575 -107.391 $B%u(B 2576 -107.391 $B%v(B vftool-2.0alpha.orig/data/v2hstdgt0100644000175000017500000000201007045052471016166 0ustar kohdakohda160 2122 600 500 ; 8482 ¡¢ 2123 600 500 ; 8483 ¡£ 2421 150 150 ; 9249 ¤¡ 2423 150 150 ; 9251 ¤£ 2425 150 150 ; 9253 ¤¥ 2427 150 150 ; 9255 ¤§ 2429 150 150 ; 9257 ¤© 2443 150 150 ; 9283 ¤Ã 2463 150 150 ; 9315 ¤ã 2465 150 150 ; 9317 ¤å 2467 150 150 ; 9319 ¤ç 246E 150 150 ; 9326 ¤î 2521 150 150 ; 9505 ¥¡ 2523 150 150 ; 9507 ¥£ 2525 150 150 ; 9509 ¥¥ 2527 150 150 ; 9511 ¥§ 2529 150 150 ; 9513 ¥© 2543 150 150 ; 9539 ¥Ã 2563 150 150 ; 9571 ¥ã 2565 150 150 ; 9573 ¥å 2567 150 150 ; 9575 ¥ç 256E 150 150 ; 9582 ¥î 2575 150 150 ; 9589 ¥õ 2576 150 150 ; 9590 ¥ö 2131 r ; 8497 ¡± 2132 r ; 8498 ¡² 213C m ; 8508 ¡¼ 213D r ; 8509 ¡½ 213E r ; 8510 ¡¾ 2141 m ; 8513 ¡Á 2142 r ; 8514 ¡Â 2143 r ; 8515 ¡Ã 2144 r ; 8516 ¡Ä 2145 r ; 8517 ¡Å 214A r ; 8522 ¡Ê 214B r ; 8523 ¡Ë 214C r ; 8524 ¡Ì 214D r ; 8525 ¡Í 214E r ; 8526 ¡Î 214F r ; 8527 ¡Ï 2150 r ; 8528 ¡Ð 2151 r ; 8529 ¡Ñ 2152 r ; 8530 ¡Ò 2153 r ; 8531 ¡Ó 2154 r ; 8532 ¡Ô 2155 r ; 8533 ¡Õ 2156 r ; 8534 ¡Ö 2157 r ; 8535 ¡× 2158 r ; 8536 ¡Ø 2159 r ; 8537 ¡Ù 215A r ; 8538 ¡Ú 215B r ; 8539 ¡Û vftool-2.0alpha.orig/data/v2hstdmn0100644000175000017500000000201007045052471016166 0ustar kohdakohda160 2122 600 500 ; 8482 ¡¢ 2123 600 500 ; 8483 ¡£ 2421 150 150 ; 9249 ¤¡ 2423 150 150 ; 9251 ¤£ 2425 150 150 ; 9253 ¤¥ 2427 150 150 ; 9255 ¤§ 2429 150 150 ; 9257 ¤© 2443 150 150 ; 9283 ¤Ã 2463 150 150 ; 9315 ¤ã 2465 150 150 ; 9317 ¤å 2467 150 150 ; 9319 ¤ç 246E 150 150 ; 9326 ¤î 2521 150 150 ; 9505 ¥¡ 2523 150 150 ; 9507 ¥£ 2525 150 150 ; 9509 ¥¥ 2527 150 150 ; 9511 ¥§ 2529 150 150 ; 9513 ¥© 2543 150 150 ; 9539 ¥Ã 2563 150 150 ; 9571 ¥ã 2565 150 150 ; 9573 ¥å 2567 150 150 ; 9575 ¥ç 256E 150 150 ; 9582 ¥î 2575 150 150 ; 9589 ¥õ 2576 150 150 ; 9590 ¥ö 2131 r ; 8497 ¡± 2132 r ; 8498 ¡² 213C m ; 8508 ¡¼ 213D r ; 8509 ¡½ 213E r ; 8510 ¡¾ 2141 m ; 8513 ¡Á 2142 r ; 8514 ¡Â 2143 r ; 8515 ¡Ã 2144 r ; 8516 ¡Ä 2145 r ; 8517 ¡Å 214A r ; 8522 ¡Ê 214B r ; 8523 ¡Ë 214C r ; 8524 ¡Ì 214D r ; 8525 ¡Í 214E r ; 8526 ¡Î 214F r ; 8527 ¡Ï 2150 r ; 8528 ¡Ð 2151 r ; 8529 ¡Ñ 2152 r ; 8530 ¡Ò 2153 r ; 8531 ¡Ó 2154 r ; 8532 ¡Ô 2155 r ; 8533 ¡Õ 2156 r ; 8534 ¡Ö 2157 r ; 8535 ¡× 2158 r ; 8536 ¡Ø 2159 r ; 8537 ¡Ù 215A r ; 8538 ¡Ú 215B r ; 8539 ¡Û vftool-2.0alpha.orig/mka2bkjvf.c0100644000175000017500000001066007062473075015626 0ustar kohdakohda/* * make vf which converts ASCII-dvi to BK-dvi * mka2bkjvf [-kXX] rml 10 min10 /.../min10.tfm afm data [VFDIR] * data --- code new-llx * --> min10.vf */ #include #include "defs.h" #include "vfcodes.h" #include "bifont.h" #include "parseAFM.h" #define UNIT 1048576 /* 1 fixpoint real = 2^20 */ int abk_ratio; /* (ASC/BK)*UNIT */ char *bk1, *bk2; char *ascfont; int vfds; char *vfdir; FILE *jfm, *afm, *fix, *vf; int lastku; char shortform; /* set by readjfm */ extern char header[]; extern char width[]; extern int id, nt, lh, bc, ec, nw, ds; extern struct jfmfntinfo *jfmfi; /* set by parseFile */ FontInfo *fi; CharMetricInfo *curcmi; BOOLEAN hasafm; #define BUFSIZE 256 #define NFIXCHARS 200 struct fixdata { int code; float adj, dadj; } fixdata[NFIXCHARS], *curfix; main(ac, av) int ac; char *av[]; { char name[64]; if (av[1][0] == '-') { shortform = TRUE; lastku = atoi(av[1]+2); --ac, av++; } else { shortform = FALSE; lastku = 84; } bk1 = av[1]; bk2 = av[2]; vfds = atoi(bk2)<<20; ascfont = av[3]; if ((jfm = fopen(av[4], "r")) == NULL) { fprintf(stderr, "cannot read %s\n", av[4]); exit(1); } if (!readjfm(jfm)) { fprintf(stderr, "%s is not jfm\n", av[4]); exit(1); } abk_ratio = jfmfi->ch[0].tfmw; if (strcmp(av[5], "-") == 0) hasafm = FALSE; else if ((afm = fopen(av[5], "r")) == NULL) { fprintf(stderr, "cannot read %s\n", av[5]); exit(1); } else { hasafm = TRUE; parseFile(afm, &fi, P_M); curcmi = fi->cmi; } if ((fix = fopen(av[6], "r")) == NULL) { fprintf(stderr, "cannot read %s\n", av[6]); exit(1); } read_fixdata(fix); curfix = fixdata; vfdir = (ac > 7) ? av[7] : ""; sprintf(name, "%s%s.vf", vfdir, ascfont); if ((vf = fopen(name, "w")) == NULL) { fprintf(stderr, "cannot write %s\n", name); exit(1); } ascvf(); fclose(vf); exit(0); } read_fixdata(fix) FILE *fix; { char line[BUFSIZE], *l; struct fixdata *f; for (f = fixdata; fgets(line, BUFSIZE, fix) != NULL; f++) { sscanf(line, "%X", &(f->code)); for (l = line; *l != ' '; l++) ; for (; *l == ' '; l++) ; if (*l == '&') sscanf(l+2, "%f %f", &(f->adj), &(f->dadj)); else { sscanf(l, "%f", &(f->adj)); f->dadj = 0; } } f->code = 0; } #define makejis(k,t) ((k+0x20)*256+t+0x20) ascvf() { int ku, ten; long len; int i; putuint(vf, VF_PRE, 1); putuint(vf, VF_ID, 1); putuint(vf, 0, 1); /* no comment */ putbytes(vf, header, 2*4); /* check sum & design size */ putuint(vf, FNT_DEF1, 1); putuint(vf, 1, 1); putuint(vf, 0, 4); putuint(vf, abk_ratio, 4); putuint(vf, vfds, 4); putuint(vf, 0, 1); putuint(vf, strlen(bk1), 1); putbytes(vf, bk1, strlen(bk1)); vfchar0(); for (ku = 1; ku <= lastku; ku++) for (ten = 1; ten <= 94; ten++) vfchar(makejis(ku, ten)); len = ftell(vf); for (i = 0; i < 4 - len%4; i++) putuint(vf, VF_POST, 1); } vfchar0() { int pl; int ct; pl = 3; /* SET2 jis */ putuint(vf, VF_LONG_CHAR, 1); putuint(vf, pl, 4); putuint(vf, 0, 4); /* char 0 */ putuint(vf, jfmfi->ch[0].tfmw, 4); putuint(vf, SET2, 1); putuint(vf, 0x2121, 2); } vfchar(jis) int jis; { int pl, n, dn; int ct, gl, dgl, l; byte b[sizeof(int)], db[sizeof(int)]; if ((ct = getctype(jis, jfmfi)) == 0) return; pl = 3; /* SET2 jis */ for (; 0 < curfix->code && curfix->code < jis; curfix++) ; if (curfix->code == jis) { if (hasafm) { for (; curcmi->code < jis; curcmi++) ; if (curcmi->code == jis) { if (id == JFM_ID) l = curcmi->charBBox.llx+curcmi->charBBox.urx; else /* tategaki */ l = -(curcmi->charBBox.lly+curcmi->charBBox.ury); gl = -((l*UNIT)/1000 - jfmfi->ch[ct].tfmw) / 2 + (curfix->adj*UNIT)/1000; } } else gl = (curfix->adj*UNIT)/1000; dgl = (curfix->dadj*UNIT)/1000; } else gl = dgl = 0; if (gl == 0 && dgl == 0 && jfmfi->ch[ct].tfmw == jfmfi->ch[0].tfmw) return; if (gl != 0) { n = inttob(b, gl, TRUE); pl += 1+n; } if (dgl != 0) { dn = inttob(db, dgl, TRUE); pl += 1+dn; } putuint(vf, VF_LONG_CHAR, 1); putuint(vf, pl, 4); putuint(vf, jis, 4); putuint(vf, jfmfi->ch[ct].tfmw, 4); if (gl != 0) { putuint(vf, RIGHT1+n-1, 1); putbytes(vf, b, n); } if (dgl != 0) { putuint(vf, DOWN1+dn-1, 1); putbytes(vf, db, dn); } putuint(vf, SET2, 1); putuint(vf, jis, 2); } vftool-2.0alpha.orig/mka2bkvf.c0100644000175000017500000001007007062473142015442 0ustar kohdakohda/* * make vf which converts ASCII-dvi to BK-dvi * mka2bkvf [-kXX] rml 10 min10 /.../min10.tfm afm data [VFDIR] * data --- code new-llx * --> min10.vf */ #include #include "defs.h" #include "vfcodes.h" #include "bifont.h" #include "parseAFM.h" #define UNIT 1048576 /* 1 fixpoint real = 2^20 */ int abk_ratio; /* (ASC/BK)*UNIT */ char *bk1, *bk2; char *ascfont; int vfds; char *vfdir; FILE *jfm, *afm, *fix, *vf; int lastku; char shortform; /* set by readjfm */ extern char header[]; extern char width[]; extern int id, nt, lh, bc, ec, nw, ds; extern struct jfmfntinfo *jfmfi; /* set by parseFile */ FontInfo *fi; CharMetricInfo *curcmi; BOOLEAN hasafm; #define BUFSIZE 256 #define NFIXCHARS 200 struct fixdata { int code; float adj, dadj; } fixdata[NFIXCHARS], *curfix; main(ac, av) int ac; char *av[]; { char name[64]; if (av[1][0] == '-') { shortform = TRUE; lastku = atoi(av[1]+2); --ac, av++; } else { shortform = FALSE; lastku = 84; } bk1 = av[1]; bk2 = av[2]; vfds = atoi(bk2)<<20; ascfont = av[3]; if ((jfm = fopen(av[4], "r")) == NULL) { fprintf(stderr, "cannot read %s\n", av[4]); exit(1); } if (!readjfm(jfm)) { fprintf(stderr, "%s is not jfm\n", av[4]); exit(1); } abk_ratio = jfmfi->ch[0].tfmw; if (strcmp(av[5], "-") == 0) hasafm = FALSE; else if ((afm = fopen(av[5], "r")) == NULL) { fprintf(stderr, "cannot read %s\n", av[5]); exit(1); } else { hasafm = TRUE; parseFile(afm, &fi, P_M); curcmi = fi->cmi; } if ((fix = fopen(av[6], "r")) == NULL) { fprintf(stderr, "cannot read %s\n", av[6]); exit(1); } read_fixdata(fix); curfix = fixdata; vfdir = (ac > 7) ? av[7] : ""; sprintf(name, "%s%s.vf", vfdir, ascfont); if ((vf = fopen(name, "w")) == NULL) { fprintf(stderr, "cannot write %s\n", name); exit(1); } ascvf(); fclose(vf); exit(0); } read_fixdata(fix) FILE *fix; { char line[BUFSIZE], *l; struct fixdata *f; for (f = fixdata; fgets(line, BUFSIZE, fix) != NULL; f++) { sscanf(line, "%X", &(f->code)); for (l = line; *l != ' '; l++) ; for (; *l == ' '; l++) ; if (*l == '&') sscanf(l+2, "%f %f", &(f->adj), &(f->dadj)); else { sscanf(l, "%f", &(f->adj)); f->dadj = 0; } } f->code = 0; } #define makejis(k,t) ((k+0x20)*256+t+0x20) ascvf() { int ku, ten; long len; int i; putuint(vf, VF_PRE, 1); putuint(vf, VF_ID, 1); putuint(vf, 0, 1); /* no comment */ putbytes(vf, header, 2*4); /* check sum & design size */ putuint(vf, FNT_DEF1, 1); putuint(vf, 1, 1); putuint(vf, 0, 4); putuint(vf, abk_ratio, 4); putuint(vf, vfds, 4); putuint(vf, 0, 1); putuint(vf, strlen(bk1), 1); putbytes(vf, bk1, strlen(bk1)); for (ku = 1; ku <= lastku; ku++) for (ten = 1; ten <= 94; ten++) vfchar(makejis(ku, ten)); len = ftell(vf); for (i = 0; i < 4 - len%4; i++) putuint(vf, VF_POST, 1); } vfchar(jis) int jis; { int pl, n, dn; int ct, gl, dgl, l; byte b[sizeof(int)], db[sizeof(int)]; pl = 3; /* SET2 jis */ ct = getctype(jis, jfmfi); for (; 0 < curfix->code && curfix->code < jis; curfix++) ; if (curfix->code == jis) { if (hasafm) { for (; curcmi->code < jis; curcmi++) ; if (curcmi->code == jis) { if (id == JFM_ID) l = curcmi->charBBox.llx+curcmi->charBBox.urx; else /* tategaki */ l = -(curcmi->charBBox.lly+curcmi->charBBox.ury); gl = -((l*UNIT)/1000 - jfmfi->ch[ct].tfmw) / 2 + (curfix->adj*UNIT)/1000; } } else gl = (curfix->adj*UNIT)/1000; dgl = (curfix->dadj*UNIT)/1000; } else gl = dgl = 0; if (gl != 0) { n = inttob(b, gl, TRUE); pl += 1+n; } if (dgl != 0) { dn = inttob(db, dgl, TRUE); pl += 1+dn; } putuint(vf, VF_LONG_CHAR, 1); putuint(vf, pl, 4); putuint(vf, jis, 4); putuint(vf, jfmfi->ch[ct].tfmw, 4); if (gl != 0) { putuint(vf, RIGHT1+n-1, 1); putbytes(vf, b, n); } if (dgl != 0) { putuint(vf, DOWN1+dn-1, 1); putbytes(vf, db, dn); } putuint(vf, SET2, 1); putuint(vf, jis, 2); } vftool-2.0alpha.orig/vfcodes.h0100644000175000017500000000035205275160454015402 0ustar kohdakohda#define VF_ID 202 #define VF_SHORT_CHAR241 241 #define VF_LONG_CHAR 242 #define VF_FNT_DEF1 243 #define VF_FNT_DEF2 244 #define VF_FNT_DEF3 245 #define VF_FNT_DEF4 246 #define VF_PRE 247 #define VF_POST 248 #include "commands.h" vftool-2.0alpha.orig/commands.h0100644000175000017500000001411405627564766015572 0ustar kohdakohda/* * * $Revision: 1.1 $ * $Log: commands.h,v $ * Revision 1.1 83/11/23 10:56:00 mds * Initial revision * * */ #define SETC_000 0 #define SETC_001 1 #define SETC_002 2 #define SETC_003 3 #define SETC_004 4 #define SETC_005 5 #define SETC_006 6 #define SETC_007 7 #define SETC_008 8 #define SETC_009 9 #define SETC_010 10 #define SETC_011 11 #define SETC_012 12 #define SETC_013 13 #define SETC_014 14 #define SETC_015 15 #define SETC_016 16 #define SETC_017 17 #define SETC_018 18 #define SETC_019 19 #define SETC_020 20 #define SETC_021 21 #define SETC_022 22 #define SETC_023 23 #define SETC_024 24 #define SETC_025 25 #define SETC_026 26 #define SETC_027 27 #define SETC_028 28 #define SETC_029 29 #define SETC_030 30 #define SETC_031 31 #define SETC_032 32 #define SETC_033 33 #define SETC_034 34 #define SETC_035 35 #define SETC_036 36 #define SETC_037 37 #define SETC_038 38 #define SETC_039 39 #define SETC_040 40 #define SETC_041 41 #define SETC_042 42 #define SETC_043 43 #define SETC_044 44 #define SETC_045 45 #define SETC_046 46 #define SETC_047 47 #define SETC_048 48 #define SETC_049 49 #define SETC_050 50 #define SETC_051 51 #define SETC_052 52 #define SETC_053 53 #define SETC_054 54 #define SETC_055 55 #define SETC_056 56 #define SETC_057 57 #define SETC_058 58 #define SETC_059 59 #define SETC_060 60 #define SETC_061 61 #define SETC_062 62 #define SETC_063 63 #define SETC_064 64 #define SETC_065 65 #define SETC_066 66 #define SETC_067 67 #define SETC_068 68 #define SETC_069 69 #define SETC_070 70 #define SETC_071 71 #define SETC_072 72 #define SETC_073 73 #define SETC_074 74 #define SETC_075 75 #define SETC_076 76 #define SETC_077 77 #define SETC_078 78 #define SETC_079 79 #define SETC_080 80 #define SETC_081 81 #define SETC_082 82 #define SETC_083 83 #define SETC_084 84 #define SETC_085 85 #define SETC_086 86 #define SETC_087 87 #define SETC_088 88 #define SETC_089 89 #define SETC_090 90 #define SETC_091 91 #define SETC_092 92 #define SETC_093 93 #define SETC_094 94 #define SETC_095 95 #define SETC_096 96 #define SETC_097 97 #define SETC_098 98 #define SETC_099 99 #define SETC_100 100 #define SETC_101 101 #define SETC_102 102 #define SETC_103 103 #define SETC_104 104 #define SETC_105 105 #define SETC_106 106 #define SETC_107 107 #define SETC_108 108 #define SETC_109 109 #define SETC_110 110 #define SETC_111 111 #define SETC_112 112 #define SETC_113 113 #define SETC_114 114 #define SETC_115 115 #define SETC_116 116 #define SETC_117 117 #define SETC_118 118 #define SETC_119 119 #define SETC_120 120 #define SETC_121 121 #define SETC_122 122 #define SETC_123 123 #define SETC_124 124 #define SETC_125 125 #define SETC_126 126 #define SETC_127 127 #define SET1 128 #define SET2 129 #define SET3 130 #define SET4 131 #define SET_RULE 132 #define PUT1 133 #define PUT2 134 #define PUT3 135 #define PUT4 136 #define PUT_RULE 137 #define NOP 138 #define BOP 139 #define EOP 140 #define PUSH 141 #define POP 142 #define RIGHT1 143 #define RIGHT2 144 #define RIGHT3 145 #define RIGHT4 146 #define W0 147 #define W1 148 #define W2 149 #define W3 150 #define W4 151 #define X0 152 #define X1 153 #define X2 154 #define X3 155 #define X4 156 #define DOWN1 157 #define DOWN2 158 #define DOWN3 159 #define DOWN4 160 #define Y0 161 #define Y1 162 #define Y2 163 #define Y3 164 #define Y4 165 #define Z0 166 #define Z1 167 #define Z2 168 #define Z3 169 #define Z4 170 #define FONT_00 171 #define FONT_01 172 #define FONT_02 173 #define FONT_03 174 #define FONT_04 175 #define FONT_05 176 #define FONT_06 177 #define FONT_07 178 #define FONT_08 179 #define FONT_09 180 #define FONT_10 181 #define FONT_11 182 #define FONT_12 183 #define FONT_13 184 #define FONT_14 185 #define FONT_15 186 #define FONT_16 187 #define FONT_17 188 #define FONT_18 189 #define FONT_19 190 #define FONT_20 191 #define FONT_21 192 #define FONT_22 193 #define FONT_23 194 #define FONT_24 195 #define FONT_25 196 #define FONT_26 197 #define FONT_27 198 #define FONT_28 199 #define FONT_29 200 #define FONT_30 201 #define FONT_31 202 #define FONT_32 203 #define FONT_33 204 #define FONT_34 205 #define FONT_35 206 #define FONT_36 207 #define FONT_37 208 #define FONT_38 209 #define FONT_39 210 #define FONT_40 211 #define FONT_41 212 #define FONT_42 213 #define FONT_43 214 #define FONT_44 215 #define FONT_45 216 #define FONT_46 217 #define FONT_47 218 #define FONT_48 219 #define FONT_49 220 #define FONT_50 221 #define FONT_51 222 #define FONT_52 223 #define FONT_53 224 #define FONT_54 225 #define FONT_55 226 #define FONT_56 227 #define FONT_57 228 #define FONT_58 229 #define FONT_59 230 #define FONT_60 231 #define FONT_61 232 #define FONT_62 233 #define FONT_63 234 #define FNT1 235 #define FNT2 236 #define FNT3 237 #define FNT4 238 #define XXX1 239 #define XXX2 240 #define XXX3 241 #define XXX4 242 #define FNT_DEF1 243 #define FNT_DEF2 244 #define FNT_DEF3 245 #define FNT_DEF4 246 #define PRE 247 #define POST 248 #define POST_POST 249 /* extension for pTeX */ #define DIR 255 vftool-2.0alpha.orig/mkbkv2hjvf.c0100644000175000017500000000726107062757314016027 0ustar kohdakohda/* * make vf which simulates vert-BKfont-dvi by hor-BKfont-dvi * mkbkv2hjvf rml 10 rmlv /.../rmlv.tfm vch rmlvsy [VFDIR] * rmlv.vf */ #include #include "defs.h" #include "vfcodes.h" #include "vchar.h" #include "bifont.h" char *horfont; char *vertfont; int vfds; char *vsy; char *vfdir; FILE *jfm, *vf; int lastku; /* set by readvchar */ extern struct vchar vchar[]; extern int depthratio; extern int rdisp, ddisp, vdisp; /* set by readjfm */ extern char header[]; extern char width[]; extern int id, nt, lh, bc, ec, nw, ds; extern struct jfmfntinfo *jfmfi; main(ac, av) int ac; char *av[]; { char name[64]; if (av[1][0] == '-') { lastku = atoi(av[1]+1); --ac, av++; } else lastku = 5; horfont = av[1]; vfds = atoi(av[2])<<20; vertfont = av[3]; if ((jfm = fopen(av[4], "r")) == NULL) { fprintf(stderr, "cannot read %s\n", av[4]); exit(1); } if (!readjfm(jfm)) { fprintf(stderr, "%s is not jfm\n", av[4]); exit(1); } readvchar(av[5]); vsy = av[6]; vfdir = (ac > 7) ? av[7] : ""; sprintf(name, "%s%s.vf", vfdir, vertfont); if ((vf = fopen(name, "w")) == NULL) { fprintf(stderr, "cannot write %s\n", name); exit(1); } vertvf(); fclose(vf); exit(0); } #define makejis(k,t) ((k+0x20)*256+t+0x20) vertvf() { int ku, ten; long len; int i; putuint(vf, VF_PRE, 1); putuint(vf, VF_ID, 1); putuint(vf, 0, 1); /* no comment */ putbytes(vf, header, 2*4); /* check sum & design size */ fontdef(1, horfont); fontdef(VSY, vsy); vfchar0(); for (ku = 1; ku <= lastku; ku++) for (ten = 1; ten <= 94; ten++) vfchar(makejis(ku, ten)); len = ftell(vf); for (i = 0; i < 4 - len%4; i++) putuint(vf, VF_POST, 1); } fontdef(f, fn) int f; char *fn; { putuint(vf, FNT_DEF1, 1); putuint(vf, f, 1); putuint(vf, 0, 4); putuint(vf, VFRATIO, 4); putuint(vf, vfds, 4); putuint(vf, 0, 1); putuint(vf, strlen(fn), 1); putbytes(vf, fn, strlen(fn)); } vfchar0() { int pl = 0; int ct; int rn, dn; byte rb[sizeof(int)], db[sizeof(int)]; rn = inttob(rb, rdisp, TRUE); pl += 1+rn; dn = inttob(db, ddisp, TRUE); pl += 1+dn; pl += 5; /* DIR 3, SET2 jis */ putuint(vf, VF_LONG_CHAR, 1); putuint(vf, pl, 4); putuint(vf, 0, 4); /* char 0 */ putuint(vf, jfmfi->ch[0].tfmw, 4); putuint(vf, RIGHT1+rn-1, 1); putbytes(vf, rb, rn); putuint(vf, DOWN1+dn-1, 1); putbytes(vf, db, dn); putuint(vf, DIR, 1); putuint(vf, 3, 1); putuint(vf, SET2, 1); putuint(vf, 0x2121, 2); } vfchar(jis) int jis; { int pl = 0; int ct, n; int rd, dd; int rn, dn; byte rb[sizeof(int)], db[sizeof(int)]; struct vchar *vc; ct = getctype(jis, jfmfi); for (vc = vchar; vc->cc != 0; vc++) if (vc->cc == jis) break; if (vc->cc == 0) return; rn = inttob(rb, rdisp-vc->y, TRUE); pl += 1+rn; dn = inttob(db, ddisp-vc->x, TRUE); pl += 1+dn; if (vc->op != vop_shift) pl += 1; /* FONT_00+f */ pl += 2; /* DIR 3 */ if (vc->op == vop_shift) /* SET2 jis */ pl += 3; else /* SETC_??? or SET1 c */ pl += (vc->c <= SETC_127) ? 1 : 2; putuint(vf, VF_LONG_CHAR, 1); putuint(vf, pl, 4); putuint(vf, jis, 4); putuint(vf, jfmfi->ch[ct].tfmw, 4); putuint(vf, RIGHT1+rn-1, 1); putbytes(vf, rb, rn); putuint(vf, DOWN1+dn-1, 1); putbytes(vf, db, dn); if (vc->op != vop_shift) putuint(vf, FONT_00+vc->f, 1); putuint(vf, DIR, 1); putuint(vf, 3, 1); if (vc->op == vop_shift) { putuint(vf, SET2, 1); putuint(vf, jis, 2); } else if (vc->c <= SETC_127) putuint(vf, vc->c, 1); else { putuint(vf, SET1, 1); putuint(vf, vc->c, 1); } } vftool-2.0alpha.orig/mkbkv2hvf.c0100644000175000017500000000606607062757463015664 0ustar kohdakohda/* * make vf which simulates vert-BKfont-dvi by hor-BKfont-dvi * mkbkv2hjvf rml 10 rmlv /.../rmlv.tfm vch rmlvsy [VFDIR] * rmlv.vf */ #include #include "defs.h" #include "vfcodes.h" #include "vchar.h" #include "bifont.h" char *horfont; char *vertfont; int vfds; char *vsy; char *vfdir; FILE *jfm, *vf; int lastku; /* set by readvchar */ extern struct vchar vchar[]; extern int depthratio; extern int rdisp, ddisp, vdisp; /* set by readjfm */ extern char header[]; extern char width[]; extern int id, nt, lh, bc, ec, nw, ds; extern struct jfmfntinfo *jfmfi; main(ac, av) int ac; char *av[]; { char name[64]; if (av[1][0] == '-') { lastku = atoi(av[1]+1); --ac, av++; } else lastku = 84; horfont = av[1]; vfds = atoi(av[2])<<20; vertfont = av[3]; if ((jfm = fopen(av[4], "r")) == NULL) { fprintf(stderr, "cannot read %s\n", av[4]); exit(1); } if (!readjfm(jfm)) { fprintf(stderr, "%s is not jfm\n", av[4]); exit(1); } readvchar(av[5]); vsy = av[6]; vfdir = (ac > 7) ? av[7] : ""; sprintf(name, "%s%s.vf", vfdir, vertfont); if ((vf = fopen(name, "w")) == NULL) { fprintf(stderr, "cannot write %s\n", name); exit(1); } vertvf(); fclose(vf); exit(0); } #define makejis(k,t) ((k+0x20)*256+t+0x20) vertvf() { int ku, ten; long len; int i; putuint(vf, VF_PRE, 1); putuint(vf, VF_ID, 1); putuint(vf, 0, 1); /* no comment */ putbytes(vf, header, 2*4); /* check sum & design size */ fontdef(1, horfont); fontdef(VSY, vsy); for (ku = 1; ku <= lastku; ku++) for (ten = 1; ten <= 94; ten++) vfchar(makejis(ku, ten)); len = ftell(vf); for (i = 0; i < 4 - len%4; i++) putuint(vf, VF_POST, 1); } fontdef(f, fn) int f; char *fn; { putuint(vf, FNT_DEF1, 1); putuint(vf, f, 1); putuint(vf, 0, 4); putuint(vf, VFRATIO, 4); putuint(vf, vfds, 4); putuint(vf, 0, 1); putuint(vf, strlen(fn), 1); putbytes(vf, fn, strlen(fn)); } vfchar(jis) int jis; { int pl = 0; int ct, n; int rd, dd; int rn, dn; byte rb[sizeof(int)], db[sizeof(int)]; struct vchar *vc; ct = getctype(jis, jfmfi); for (vc = vchar; vc->cc != 0; vc++) if (vc->cc == jis) break; rn = inttob(rb, rdisp-vc->y, TRUE); pl += 1+rn; dn = inttob(db, ddisp-vc->x, TRUE); pl += 1+dn; if (vc->op != vop_shift) pl += 1; /* FONT_00+f */ pl += 2; /* DIR 3 */ if (vc->op == vop_shift) /* SET2 jis */ pl += 3; else /* SETC_??? or SET1 c */ pl += (vc->c <= SETC_127) ? 1 : 2; putuint(vf, VF_LONG_CHAR, 1); putuint(vf, pl, 4); putuint(vf, jis, 4); putuint(vf, jfmfi->ch[ct].tfmw, 4); putuint(vf, RIGHT1+rn-1, 1); putbytes(vf, rb, rn); putuint(vf, DOWN1+dn-1, 1); putbytes(vf, db, dn); if (vc->op != vop_shift) putuint(vf, FONT_00+vc->f, 1); putuint(vf, DIR, 1); putuint(vf, 3, 1); if (vc->op == vop_shift) { putuint(vf, SET2, 1); putuint(vf, jis, 2); } else if (vc->c <= SETC_127) putuint(vf, vc->c, 1); else { putuint(vf, SET1, 1); putuint(vf, vc->c, 1); } } vftool-2.0alpha.orig/mkvsyvf.c0100644000175000017500000000722007062757400015451 0ustar kohdakohda/* * make vf which simulates vert-BKfont symbol by hor-BKfont * mkvsyvf rml 10 rmlvsy /.../rmlvsy.tfm vch pssp [VFDIR] * --> rmlvsy.vf */ #include #include "defs.h" #include "vfcodes.h" #include "vchar.h" #include "bifont.h" char *horfont; char *vsyfont; int vfds; char *vfdir; FILE *tfm, *vf; /* set by readvchar */ extern struct vchar vchar[]; extern int depthratio; extern int rdisp, ddisp, vdisp; /* set by readtfm */ extern char header[]; extern char width[]; extern byte char_info[]; extern int nt, lh, bc, ec, nw, ds; main(ac, av) int ac; char *av[]; { char name[64]; horfont = av[1]; vfds = atoi(av[2])<<20; vsyfont = av[3]; if ((tfm = fopen(av[4], "r")) == NULL) { fprintf(stderr, "cannot read %s\n", av[4]); exit(1); } if (!readtfm(tfm)) { fprintf(stderr, "%s is not tfm\n", av[4]); exit(1); } readvchar(av[5]); readpssp(av[6]); vfdir = (ac > 7) ? av[7] : ""; sprintf(name, "%s%s.vf", vfdir, vsyfont); if ((vf = fopen(name, "w")) == NULL) { fprintf(stderr, "cannot write %s\n", name); exit(1); } vsyvf(); fclose(vf); exit(0); } #define SPLEN 256 char rotate_beg[SPLEN]; int rotate_beg_len; char rotate_end[SPLEN]; int rotate_end_len; char mirror_beg[SPLEN]; int mirror_beg_len; char mirror_end[SPLEN]; int mirror_end_len; getline(sp, lenp, f) char *sp; int *lenp; FILE *f; { int l; fgets(sp, SPLEN, f); l = strlen(sp); sp[l-1] = '\0'; *lenp = l-1; } readpssp(fn) char *fn; { FILE *f; if ((f = fopen(fn, "r")) == NULL) { fprintf(stderr, "cannot open %s\n", fn); exit(1); } getline(rotate_beg, &rotate_beg_len, f); getline(rotate_end, &rotate_end_len, f); getline(mirror_beg, &mirror_beg_len, f); getline(mirror_end, &mirror_end_len, f); } vsyvf() { struct vchar *vc; char jsubname[64]; long len; int i; putuint(vf, VF_PRE, 1); putuint(vf, VF_ID, 1); putuint(vf, 0, 1); /* no comment */ putbytes(vf, header, 2*4); /* check sum & design size */ fontdef(1, horfont); for (vc = vchar; vc->cc != 0; vc++) vfchar(vc); len = ftell(vf); for (i = 0; i < 4 - len%4; i++) putuint(vf, VF_POST, 1); } fontdef(f, fn) int f; char *fn; { putuint(vf, FNT_DEF1, 1); putuint(vf, f, 1); putuint(vf, 0, 4); putuint(vf, VFRATIO, 4); putuint(vf, vfds, 4); putuint(vf, 0, 1); putuint(vf, strlen(fn), 1); putbytes(vf, fn, strlen(fn)); } vfchar(vc) struct vchar *vc; { int pl; int rd, dd; int rn, dn; byte rb[sizeof(int)], db[sizeof(int)]; char *sp_beg, *sp_end; int sp_beg_len, sp_end_len; if (vc->op == vop_rot) { rd = depthratio; dd = -rdisp; sp_beg = rotate_beg; sp_beg_len = rotate_beg_len; sp_end = rotate_end; sp_end_len = rotate_end_len; } else if (vc->op == vop_mirror) { rd = UNIT-depthratio; dd = -rdisp; sp_beg = mirror_beg; sp_beg_len = mirror_beg_len; sp_end = mirror_end; sp_end_len = mirror_end_len; } else return; pl = 3; /* SET2 cc */ rn = inttob(rb, rd, TRUE); pl += 1+rn; dn = inttob(db, dd, TRUE); pl += 1+dn; pl += 6+sp_beg_len+6+sp_end_len; putuint(vf, VF_LONG_CHAR, 1); putuint(vf, pl, 4); putuint(vf, vc->c, 4); putbytes(vf, width+char_info[(vc->c-bc)*4]*4, 4); putuint(vf, RIGHT1+rn-1, 1); putbytes(vf, rb, rn); putuint(vf, DOWN1+dn-1, 1); putbytes(vf, db, dn); putuint(vf, XXX1, 1); putuint(vf, sp_beg_len+4, 1); putbytes(vf, "ps::", 4); putbytes(vf, sp_beg, sp_beg_len); putuint(vf, SET2, 1); putuint(vf, vc->cc, 2); putuint(vf, XXX1, 1); putuint(vf, sp_end_len+4, 1); putbytes(vf, "ps::", 4); putbytes(vf, sp_end, sp_end_len); } vftool-2.0alpha.orig/mkvsydvf.c0100644000175000017500000000467007120744674015627 0ustar kohdakohda/* * make vf which simulates vert-BKfont symbol by DIR + hor-BKfont * mkvsypvf rml 10 rmlvsy /.../rmlvsy.tfm vch [VFDIR] * --> rmlvsy.vf */ #include #include "defs.h" #include "vfcodes.h" #include "vchar.h" #include "bifont.h" char *horfont; char *vsyfont; int vfds; char *vfdir; FILE *tfm, *vf; /* set by readvchar */ extern struct vchar vchar[]; extern int depthratio; extern int rdisp, ddisp, vdisp; /* set by readtfm */ extern char header[]; extern char width[]; extern byte char_info[]; extern int nt, lh, bc, ec, nw, ds; main(ac, av) int ac; char *av[]; { char name[64]; horfont = av[1]; vfds = atoi(av[2])<<20; vsyfont = av[3]; if ((tfm = fopen(av[4], "r")) == NULL) { fprintf(stderr, "cannot read %s\n", av[4]); exit(1); } if (!readtfm(tfm)) { fprintf(stderr, "%s is not tfm\n", av[4]); exit(1); } readvchar(av[5]); vfdir = (ac > 6) ? av[6] : ""; sprintf(name, "%s%s.vf", vfdir, vsyfont); if ((vf = fopen(name, "w")) == NULL) { fprintf(stderr, "cannot write %s\n", name); exit(1); } vsyvf(); fclose(vf); exit(0); } vsyvf() { struct vchar *vc; char jsubname[64]; long len; int i; putuint(vf, VF_PRE, 1); putuint(vf, VF_ID, 1); putuint(vf, 0, 1); /* no comment */ putbytes(vf, header, 2*4); /* check sum & design size */ fontdef(1, horfont); for (vc = vchar; vc->cc != 0; vc++) vfchar(vc); len = ftell(vf); for (i = 0; i < 4 - len%4; i++) putuint(vf, VF_POST, 1); } fontdef(f, fn) int f; char *fn; { putuint(vf, FNT_DEF1, 1); putuint(vf, f, 1); putuint(vf, 0, 4); putuint(vf, VFRATIO, 4); putuint(vf, vfds, 4); putuint(vf, 0, 1); putuint(vf, strlen(fn), 1); putbytes(vf, fn, strlen(fn)); } vfchar(vc) struct vchar *vc; { int pl; int rd, dd; int rn, dn; byte rb[sizeof(int)], db[sizeof(int)]; if (vc->op == vop_rot || vc->op == vop_mirror) { rd = depthratio; dd = -rdisp; } else return; pl = 5; /* DIR 1 SET2 cc */ rn = inttob(rb, rd, TRUE); pl += 1+rn; dn = inttob(db, dd, TRUE); pl += 1+dn; putuint(vf, VF_LONG_CHAR, 1); putuint(vf, pl, 4); putuint(vf, vc->c, 4); putbytes(vf, width+char_info[(vc->c-bc)*4]*4, 4); putuint(vf, RIGHT1+rn-1, 1); putbytes(vf, rb, rn); putuint(vf, DOWN1+dn-1, 1); putbytes(vf, db, dn); putuint(vf, DIR, 1); putuint(vf, 1, 1); putuint(vf, SET2, 1); putuint(vf, vc->cc, 2); } vftool-2.0alpha.orig/vchar.c0100644000175000017500000000245207062515013015041 0ustar kohdakohda#include #include "vchar.h" struct vchar vchar[256]; int depthratio; int rdisp, ddisp, vdisp; #define LEN 256 readvchar(fn) char *fn; { FILE *f; char buf[LEN]; int cc, jf, jc; struct vchar *vc; if ((f = fopen(fn, "r")) == NULL) { fprintf(stderr, "cannot open %s\n", fn); exit(1); } fgets(buf, LEN, f); depthratio = UNIT*atoi(buf)/1000; rdisp = UNIT-depthratio; ddisp = UNIT/2; vdisp = (UNIT/2)-depthratio; for (vc = vchar; fgets(buf, LEN, f) != NULL; vc++) { sscanf(buf, "%X", &cc); jf = cc>>8; jc = cc&0x7f; if (jf == 0x21) { vc->f = VSY; vc->c = jc-0x20; } else if (jf == 0x22) { vc->f = VSY; vc->c = jc-0x20+100; } else if (jf == 0x24) { vc->f = VHIRA; vc->c = jc-0x20; } else if (jf == 0x25) { vc->f = VKATA; vc->c = jc-0x20; } else { fprintf(stderr, "vchar %X ignored\n", cc); continue; } vc->cc = cc; vgetop(buf+4, vc); } vc->cc = 0; } vgetop(p, vc) char *p; struct vchar *vc; { for (; *p == ' '; p++) ; if (isdigit(*p)) { vc->op = vop_shift; vc->x = strtol(p, &p, 10)*UNIT/1000; vc->y = strtol(p, &p, 10)*UNIT/1000; } else if (*p == 'r') { vc->op = vop_rot; vc->x = 0; vc->y = 0; } else if (*p == 'm') { vc->op = vop_mirror; vc->x = 0; vc->y = 0; } } vftool-2.0alpha.orig/vchar.h0100644000175000017500000000037507062515012015047 0ustar kohdakohda#define UNIT 1048576 /* 1 fixpoint real = 2^20 */ #define VFRATIO UNIT #define VSY 2 #define VHIRA 3 #define VKATA 4 enum vop { vop_shift, vop_rot, vop_mirror, }; struct vchar { int cc; int f, c; enum vop op; int x, y; }; vftool-2.0alpha.orig/jfm.c0100644000175000017500000000352205630403010014501 0ustar kohdakohda#include #include "defs.h" #include "bifont.h" #include "jsub.h" char header[4*2]; char width[4*256]; int id, nt, lh, bc, ec, nw, ds; struct jfmfntinfo *jfmfi; readjfm(fntfp) register FILE *fntfp; { register struct jfmtype_entry *te; register struct jfmchar_entry *ce; register int i; char *alloc_check(); if ((id=getuint(fntfp, 2)) != JFM_ID && id != TJFM_ID) return (FALSE); nt = getuint(fntfp, 2); fseek(fntfp, 2, 1); /* lf */ lh = getuint(fntfp, 2); bc = getuint(fntfp, 2); /* bc should be 0 */ ec = getuint(fntfp, 2); nw = getuint(fntfp, 2); fseek(fntfp, 7*4, 0); getbytes(fntfp, header, 2*4); ds = makeuint(header+4, 4); fseek(fntfp, (7+lh+nt+(ec-bc)+1)*4, 0); getbytes(fntfp, width, 4*nw); fseek(fntfp, (7+lh)*4, 0); /* ready to read char_type and char_info */ jfmfi = NEW(struct jfmfntinfo, "jfmfont info"); jfmfi->nctype = nt; jfmfi->ctype = NEWTAB(struct jfmtype_entry, nt, "jfmtype table"); for (i = 0, te = jfmfi->ctype; i < nt; i++, te++) { te->jfm_code = getuint(fntfp, 2); te->jfm_type = getuint(fntfp, 2); } jfmfi->lasttypecode = (te-1)->jfm_code; jfmfi->ch = NEWTAB(struct jfmchar_entry, ec+1, "jfmchar table"); for (i = bc, ce = (jfmfi->ch)+bc; i <= ec; i++, ce++) { ce->tfmw = makeuint(width+4*getuint(fntfp,1),4); fseek(fntfp, 3, 1); } return (TRUE); } getctype(c, jfmfi) int c; struct jfmfntinfo *jfmfi; { register int m; register int left, right; register struct jfmtype_entry *te; int code; if (c > jfmfi->lasttypecode) return (0); for (left = 0, right = jfmfi->nctype, te = jfmfi->ctype; left <= right;) { m = (left+right)/2; if (c < (code = (te+m)->jfm_code)) right = m-1; else if (c > code) left = m+1; else if (c == code) return ((te+m)->jfm_type); } return (0); } vftool-2.0alpha.orig/tfm.c0100644000175000017500000000223306543235717014536 0ustar kohdakohda#include /* #include "defs.h" #include "bifont.h" */ typedef unsigned char byte; byte header[256*4]; byte char_info[256*4]; byte width[256*4]; byte height[256*4]; byte depth[256*4]; byte italic[256*4]; byte lig_kern[1024*4]; byte kern[256*4]; byte exten[256*4]; byte param[32*4]; int lf, lh, bc, ec, nw, nh, nd, ni, nl, nk, ne, np; int ds; #define JFM_ID 11 readtfm(fntfp) register FILE *fntfp; { if ((lf = getuint(fntfp, 2)) <= JFM_ID) return 0; lh = getuint(fntfp, 2); bc = getuint(fntfp, 2); ec = getuint(fntfp, 2); nw = getuint(fntfp, 2); nh = getuint(fntfp, 2); nd = getuint(fntfp, 2); ni = getuint(fntfp, 2); nl = getuint(fntfp, 2); nk = getuint(fntfp, 2); ne = getuint(fntfp, 2); np = getuint(fntfp, 2); getbytes(fntfp, header, lh*4); ds = makeuint(header+4, 4); getbytes(fntfp, char_info, (ec-bc+1)*4); getbytes(fntfp, width, 4*nw); getbytes(fntfp, height, 4*nh); getbytes(fntfp, depth, 4*nd); getbytes(fntfp, italic, 4*ni); getbytes(fntfp, lig_kern, 4*nl); getbytes(fntfp, kern, 4*nk); getbytes(fntfp, exten, 4*ne); getbytes(fntfp, param, 4*np); return 1; } vftool-2.0alpha.orig/scale.c0100644000175000017500000000146206543004575015036 0ustar kohdakohda#define LOWP 16 #define FIXP 20 #define LOWMASK ((1<>(y)) /* x / 2^y */ scalesp(s, d) int s, d; { int sign; unsigned int s1, s0, d1, d0; sign = 1; if (s < 0) { sign = -1; s *= -1; } s0 = s & LOWMASK; d0 = d & LOWMASK; s1 = s >> LOWP; d1 = d >> LOWP; return (sign * (TPT(s1*d1, 2*LOWP-FIXP) + DPT(s1*d0+s0*d1 + DPT(s0*d0, LOWP), FIXP-LOWP)) ); } /* very stupid routine that computes x/y */ divsp(x, y) int x, y; { int x0, x1, z0; z0 = (int)(((float)x/(float)y)*(1< void getbytes(fp, cp, n) /* get n bytes from file fp */ register FILE *fp; /* file pointer */ register char *cp; /* character pointer */ register int n; /* number of bytes */ { (void)fread((char *)cp, 1, n, fp); } void skipbytes(fp, n) FILE *fp; int n; { (void)fseek(fp, (long)n, 1); } int getuint(fp, n) /* return n byte quantity from file fd */ register FILE *fp; /* file pointer */ register int n; /* number of bytes */ { unsigned char s[sizeof(int)]; (void)fread((char *)s, 1, n, fp); return (makeuint(s, n)); } int getint(fp, n) /* return n byte quantity from file fd */ FILE *fp; /* file pointer */ int n; /* number of bytes */ { unsigned char s[sizeof(int)]; (void)fread((char *)s, 1, n, fp); return (makeint(s, n)); } void putbytes(fp, cp, n) /* get n bytes from file fp */ register FILE *fp; /* file pointer */ register char *cp; /* character pointer */ register int n; /* number of bytes */ { (void)fwrite((char *)cp, 1, n, fp); } putuint(fp, x, n) register FILE *fp; /* file pointer */ unsigned int x; register int n; /* number of bytes */ { if (n > 0) { putuint(fp, x>>8, n-1); putc(x&0xff, fp); } } Fatal(fmt, a, b, c) /* issue a fatal error message */ char *fmt; /* format */ char *a, *b, *c; /* arguments */ { (void)fprintf(stderr, fmt, a, b, c); exit(1); } Warning(fmt, a, b, c) /* issue a warning */ char *fmt; /* format */ char *a, *b, *c; /* arguments */ { (void)fprintf(stderr, fmt, a, b, c); } vftool-2.0alpha.orig/kanji.c0100644000175000017500000000332305447357647015056 0ustar kohdakohda#include #include "defs.h" /* jsubfont */ /*#include "jsub.h"*/ char *jsf_names[] = { "", "jsy", "jroma", "jhira", "jkata", "jgreek", "jrussian", "jkeisen", "jka", "jkb", "jkc", "jkd", "jke", "jkf", "jkg", "jkh", "jki", "jkj", "jkk", "jkl", "jkm", "jkn", "jko", "jkp", "jkq", "jkr", "jks", "jkt", "jku", "jkv", "jkw", "jkx", "jky", "jkz", NULL }; char * jsubfontname(f) { return (jsf_names[f]); } #define makejis(k,t) ((k+0x20)*256+t+0x20) compute_jis(f, c) int f, c; { register int n; if (f <= 7) { if (f == 1) { if (c >= 100) { return (makejis(2, c-100)); } else { return (makejis(1, c)); } } else if (f == 2) { return (makejis(3, c-32)); } else { return (makejis(f+1, c)); } } else if (f <= 19) { /* Daiichi Suijun */ n = (f-8)*256+c; return (makejis((n/94)+16, (n%94)+1)); } else { /* Daini Suijun */ n = (f-20)*256+c; return (makejis((n/94)+48, (n%94)+1)); } } compute_fc(ku, ten, f, c) int ku, ten; int *f, *c; { register int n; *f = 1; *c = 1; if (ku <= 0 || (9 <= ku && ku <= 15) || ku > 84) { return (FALSE); } if (ten < 1 || ten > 94) { return (FALSE); } if (ku <= 8) { if (ku == 1) { *f = 1; *c = ten; } else if (ku == 2) { *f = 1; *c = ten+100; } else if (ku == 3) { *f = 2; *c = ten+32; } else { *f = ku-1; *c = ten; } } else if (ku <= 47) { /* Daiich Suijun */ n = (ku-16)*94+ten-1; *f = (n/256)+8; *c = n%256; } else { /* Daini Suijun */ n = (ku-48)*94+ten-1; *f = (n/256)+20; *c = n%256; } return (TRUE); } vftool-2.0alpha.orig/util.c0100644000175000017500000000320105767233444014723 0ustar kohdakohda#include #include "defs.h" char * alloc_check(p, e) char *p, *e; { if (p == NULL) { fprintf(stderr, "can't malloc space for %s", e); exit(1); } return p; } makeuint(s, n) /* return n byte quantity from string */ register byte *s; register int n; { register int x; /* number being constructed */ x = 0; while (n--) { x <<= 8; x |= *s++; } return x; } makeint(s, n) /* return n byte quantity from string */ register byte *s; register int n; { int n1; /* number of bytes */ register int x; /* number being constructed */ x = *s++; /* get first (high-order) byte */ n1 = n--; while (n--) { x <<= 8; x |= *s++; } /* NOTE: This code assumes that the right-shift is an arithmetic, rather than logical, shift which will propagate the sign bit right. According to Kernighan and Ritchie, this is compiler dependent! */ x<<=32-8*n1; x>>=32-8*n1; /* sign extend */ return x; } static int i2b(); inttob(b, x, issigned) byte *b; int x; BOOLEAN issigned; { static unsigned char buf[sizeof(int)+1]; int i, j, n; n = i2b((unsigned int)x, buf); if (x == 0) i = 0; else if (issigned && x > 0) { issigned = FALSE; i = 0; } else i = 1; if (issigned) for (; i+1 < n && buf[i] == 0xff && (buf[i+1]&0x80); i++) ; else for (; i+1 < n && buf[i] == 0 && (buf[i+1]&0x80) == 0; i++) ; for (j = i; j < n; j++) b[j-i] = buf[j]; return n-i; } static i2b(x, b) unsigned int x; unsigned char *b; { int n; if (x == 0) { *b = 0; return (1); } n = i2b(x>>8, b); *(b+n) = x & 0xff; return (n+1); } vftool-2.0alpha.orig/defs.h0100644000175000017500000000770505311336504014673 0ustar kohdakohda/**********************************************************************/ /************************ Global Definitions ************************/ /**********************************************************************/ /* This version purports to drive a PostScript device (slowly) */ #define DEBUG /* for massive printing of input */ /* trace information; select by -d */ #define STATS /* to enable statistics reporting via -s option */ #define BINARYOPEN fopen /* byte-oriented host version */ /* ARITHRSHIFT not used */ #define ARITHRSHIFT /* define if ">>" operator is a */ /* sign-propagating arithmetic */ /* right shift */ #define USEGLOBALMAG /* when defined, the dvi global */ /* magnification is applied */ /* We can leave USEGLOBALMAG undefined when we have a limited number of font magnifications (at 300dpi) available. Otherwise, we will simply complain about missing PXL files */ /* #undef USEGLOBALMAG */ /* define for enabling of -c option (create output file) */ /* #define CREOPT */ #define DVI2LIBENV "DVI2PSLIB" #ifndef DVI2LIB #define DVI2LIB "/usr/local/lib/dvi2ps" #endif #define FONTDESCENV "FONTDESC" #ifndef FONTDESC #define FONTDESC "fontdesc" #endif #ifndef HDRFILE #define HDRFILE "/usr/local/lib/dvi2ps/tex.ps" #endif #define MAXOPEN 12 /* limit on number of open PXL files */ #define DVIFORMAT 2 #define STACKSIZE 100 #define STRSIZE 257 #define PATHLEN 1024 #define NO_FILE (FILE *)-1 #define NEW(A,e) ((A *)alloc_check(malloc(sizeof(A)), e)) #define NEWTAB(A,n,e) ((A *)alloc_check(malloc(sizeof(A)*n), e)) #define MAGSIZE(f) ((unsigned int)(1000.0*(f) + 0.5)) #define ROUND(f) ((int)((f) + 0.5)) #define STREQ(s,t) (strcmp(s,t) == 0) typedef unsigned char byte; typedef float SCALED; #define scale(x,s) (int)((SCALED)(x)*(SCALED)(s)/(1<<20)) /* typedef int SCALED; #define scale(x,s) scale_exact(x,s) */ typedef int BOOLEAN; #define TRUE 1 #define FALSE 0 /**********************************************************************/ /*********************** Font Data Structures ***********************/ /**********************************************************************/ struct font_index { /* pointer to font entry */ int k; struct font_entry *fent; struct font_index *next; }; typedef int DEV_FONT; #define DEV_NULLFONT (DEV_FONT)(-1) struct font_entry { /* font entry */ int k; /* unique id */ int c, s, d, a, l; char n[STRSIZE]; /* FNT_DEF command parameters */ void (*fnt_readfontinfo)(); void (*rvf_setchar)(); void (*rvf_setstring)(); DEV_FONT (*dev_fontdict)(); /* returns the font in device */ int (*dev_setchar)(); /* device dependent part of setchar */ int (*dev_setstring)(); /* device dependent part of setstring */ struct finfo *finfo; /* font/device dependent information */ struct font_entry *next; char name[PATHLEN]; /* full name of font file */ FILE *openfile; /* file stream (NO_FILE if none) */ struct openfont_list *openlist; int ncdl; /* # of different chars actually downloaded */ #ifdef STATS int nbpxl; /* # of bytes of PXL data downloaded */ int ncts; /* total # of characters typeset */ #endif }; #define setcurfont(fe) curfontent = fe #define fnt_markchar dev_setchar #define FNT_markchar DEV_setchar #define DEV_fontdict (*(curfontent->dev_fontdict)) #define DEV_setchar (*(curfontent->dev_setchar)) #define DEV_setstring (*(curfontent->dev_setstring)) struct fontop { char *fo_type; int (*fo_access)(); void (*fo_initfontinfo)(); }; #define FDQUO '"' struct confop { char *co_name; void (*co_get)(); }; #define ACC_EXACT 0 #define ACC_SUBST 1 #define ACC_MAGSTEP 2 struct accarg { int acc_mode; float rawmagfact; float actmagfact; int submag, reqmag; float stepmagfact; char *pv_name; /* font name */ int pv_mag; /* magnification */ char *pv_fam; /* family */ int pv_ds; /* design size */ char *pv_jsub; /* jsubfont name */ }; vftool-2.0alpha.orig/bifont.h0100644000175000017500000000263205630402226015224 0ustar kohdakohda#define LASTTFMCHAR 255 struct tfmchar_entry { /* character entry */ short dev_font, dev_char; int tfmw; /* TFM width */ }; struct tfmfntinfo { int lastfntchar; struct tfmchar_entry ch[LASTTFMCHAR+1]; /* character information */ }; #define tfmfinfo(fe) ((struct tfmfntinfo *)(fe->finfo)) struct jstfmchar_entry { /* character entry */ short dev_ku, dev_ten; int tfmw; /* TFM width */ }; struct jstfmfntinfo { int lastfntchar; struct jstfmchar_entry ch[LASTTFMCHAR+1]; /* character information */ short dev_font; int *dictopen; char *dev_name; }; #define jstfmfinfo(fe) ((struct jstfmfntinfo *)(fe->finfo)) #define JFM_ID 11 #define TJFM_ID 9 struct jfmtype_entry { /* character type entry */ int jfm_code; int jfm_type; }; struct jfmchar_entry { /* character entry */ int tfmw; /* TFM width */ }; struct jfmfntinfo { int nctype; struct jfmtype_entry *ctype; /* character type information */ int lasttypecode; struct jfmchar_entry *ch; /* character information indexed by type */ char *dev_name; }; #define jfmfinfo(fe) ((struct jfmfntinfo *)(fe->finfo)) /* bitex: obsolete */ #define HALFTFMCHAR 127 #define LWFSIZE 64 struct bitexfntinfo { int lastfntchar; struct tfmchar_entry ch[HALFTFMCHAR+1]; /* character information */ char dev_name[LWFSIZE]; }; #define bitexfinfo(fe) ((struct bitexfntinfo *)(fe->finfo)) char *dev_bikanjiname(); vftool-2.0alpha.orig/jsub.h0100644000175000017500000000013104477720175014714 0ustar kohdakohda#define NJSUBS 33 #define JSF_HIRA 3 #define JSTFM_MAGIC 142857 char *jsubfontname(); vftool-2.0alpha.orig/parseAFM.c0100644000175000017500000012537705525417050015414 0ustar kohdakohda/* * (C) 1988, 1989, 1990 by Adobe Systems Incorporated. All rights reserved. * * This file may be freely copied and redistributed as long as: * 1) This entire notice continues to be included in the file, * 2) If the file has been modified in any way, a notice of such * modification is conspicuously indicated. * * PostScript, Display PostScript, and Adobe are registered trademarks of * Adobe Systems Incorporated. * * ************************************************************************ * THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO CHANGE WITHOUT * NOTICE, AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ADOBE SYSTEMS * INCORPORATED. ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY OR * LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO WARRANTY OF ANY * KIND (EXPRESS, IMPLIED OR STATUTORY) WITH RESPECT TO THIS INFORMATION, * AND EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY, * FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. * ************************************************************************ */ /* parseAFM.c * * This file is used in conjuction with the parseAFM.h header file. * This file contains several procedures that are used to parse AFM * files. It is intended to work with an application program that needs * font metric information. The program can be used as is by making a * procedure call to "parseFile" (passing in the expected parameters) * and having it fill in a data structure with the data from the * AFM file, or an application developer may wish to customize this * code. * * There is also a file, parseAFMclient.c, that is a sample application * showing how to call the "parseFile" procedure and how to use the data * after "parseFile" has returned. * * Please read the comments in parseAFM.h and parseAFMclient.c. * * History: * original: DSM Thu Oct 20 17:39:59 PDT 1988 * modified: DSM Mon Jul 3 14:17:50 PDT 1989 * - added 'storageProblem' return code * - fixed bug of not allocating extra byte for string duplication * - fixed typos * modified: DSM Tue Apr 3 11:18:34 PDT 1990 * - added free(ident) at end of parseFile routine * modified: DSM Tue Jun 19 10:16:29 PDT 1990 * - changed (width == 250) to (width = 250) in initializeArray * modified: TS (Takafumi SAKURAI) Jan 26 1994 * - added CODEHEX ("CH") */ #include #include #include #include #include "parseAFM.h" #define lineterm EOL /* line terminating character */ #define normalEOF 1 /* return code from parsing routines used only */ /* in this module */ #define Space "space" /* used in string comparison to look for the width */ /* of the space character to init the widths array */ #define False "false" /* used in string comparison to check the value of */ /* boolean keys (e.g. IsFixedPitch) */ #define MATCH(A,B) (strncmp((A),(B), MAX_NAME) == 0) /*************************** GLOBALS ***********************/ static char *ident = NULL; /* storage buffer for keywords */ /* "shorts" for fast case statement * The values of each of these enumerated items correspond to an entry in the * table of strings defined below. Therefore, if you add a new string as * new keyword into the keyStrings table, you must also add a corresponding * parseKey AND it MUST be in the same position! * * IMPORTANT: since the sorting algorithm is a binary search, the strings of * keywords must be placed in lexicographical order, below. [Therefore, the * enumerated items are not necessarily in lexicographical order, depending * on the name chosen. BUT, they must be placed in the same position as the * corresponding key string.] The NOPE shall remain in the last position, * since it does not correspond to any key string, and it is used in the * "recognize" procedure to calculate how many possible keys there are. */ static enum parseKey { ASCENDER, CHARBBOX, CODE, COMPCHAR, CODEHEX, CAPHEIGHT, COMMENT, DESCENDER, ENCODINGSCHEME, ENDCHARMETRICS, ENDCOMPOSITES, ENDFONTMETRICS, ENDKERNDATA, ENDKERNPAIRS, ENDTRACKKERN, FAMILYNAME, FONTBBOX, FONTNAME, FULLNAME, ISFIXEDPITCH, ITALICANGLE, KERNPAIR, KERNPAIRXAMT, LIGATURE, CHARNAME, NOTICE, COMPCHARPIECE, STARTCHARMETRICS, STARTCOMPOSITES, STARTFONTMETRICS, STARTKERNDATA, STARTKERNPAIRS, STARTTRACKKERN, TRACKKERN, UNDERLINEPOSITION, UNDERLINETHICKNESS, VERSION, XYWIDTH, XWIDTH, WEIGHT, XHEIGHT, NOPE }; /* keywords for the system: * This a table of all of the current strings that are vaild AFM keys. * Each entry can be referenced by the appropriate parseKey value (an * enumerated data type defined above). If you add a new keyword here, * a corresponding parseKey MUST be added to the enumerated data type * defined above, AND it MUST be added in the same position as the * string is in this table. * * IMPORTANT: since the sorting algorithm is a binary search, the keywords * must be placed in lexicographical order. And, NULL should remain at the * end. */ static char *keyStrings[] = { "Ascender", "B", "C", "CC", "CH", "CapHeight", "Comment", "Descender", "EncodingScheme", "EndCharMetrics", "EndComposites", "EndFontMetrics", "EndKernData", "EndKernPairs", "EndTrackKern", "FamilyName", "FontBBox", "FontName", "FullName", "IsFixedPitch", "ItalicAngle", "KP", "KPX", "L", "N", "Notice", "PCC", "StartCharMetrics", "StartComposites", "StartFontMetrics", "StartKernData", "StartKernPairs", "StartTrackKern", "TrackKern", "UnderlinePosition", "UnderlineThickness", "Version", "W", "WX", "Weight", "XHeight", NULL }; /*************************** PARSING ROUTINES **************/ /*************************** token *************************/ /* A "AFM File Conventions" tokenizer. That means that it will * return the next token delimited by white space. See also * the `linetoken' routine, which does a similar thing but * reads all tokens until the next end-of-line. */ static char *token(stream) FILE *stream; { int ch, idx; /* skip over white space */ while ((ch = fgetc(stream)) == ' ' || ch == lineterm || ch == ',' || ch == '\t' || ch == ';'); idx = 0; while (ch != EOF && ch != ' ' && ch != lineterm && ch != '\t' && ch != ':' && ch != ';') { ident[idx++] = ch; ch = fgetc(stream); } /* while */ if (ch == EOF && idx < 1) return ((char *)NULL); if (idx >= 1 && ch != ':' ) ungetc(ch, stream); if (idx < 1 ) ident[idx++] = ch; /* single-character token */ ident[idx] = 0; return(ident); /* returns pointer to the token */ } /* token */ /*************************** linetoken *************************/ /* "linetoken" will get read all tokens until the EOL character from * the given stream. This is used to get any arguments that can be * more than one word (like Comment lines and FullName). */ static char *linetoken(stream) FILE *stream; { int ch, idx; while ((ch = fgetc(stream)) == ' ' || ch == '\t' ); idx = 0; while (ch != EOF && ch != lineterm) { ident[idx++] = ch; ch = fgetc(stream); } /* while */ ungetc(ch, stream); ident[idx] = 0; return(ident); /* returns pointer to the token */ } /* linetoken */ /*************************** recognize *************************/ /* This function tries to match a string to a known list of * valid AFM entries (check the keyStrings array above). * "ident" contains everything from white space through the * next space, tab, or ":" character. * * The algorithm is a standard Knuth binary search. */ static enum parseKey recognize(ident) register char *ident; { int lower = 0, upper = (int) NOPE, midpoint, cmpvalue; BOOL found = FALSE; while ((upper >= lower) && !found) { midpoint = (lower + upper)/2; if (keyStrings[midpoint] == NULL) break; cmpvalue = strncmp(ident, keyStrings[midpoint], MAX_NAME); if (cmpvalue == 0) found = TRUE; else if (cmpvalue < 0) upper = midpoint - 1; else lower = midpoint + 1; } /* while */ if (found) return (enum parseKey) midpoint; else return NOPE; } /* recognize */ htoi(s) /* hex string to int */ register char *s; { register int x; for (x = 0; ; s++) { if ('0' <= *s && *s <= '9') x = x*16+*s-'0'; else if ('a' <= *s && *s <= 'f') x = x*16+*s-'a'+10; else if ('A' <= *s && *s <= 'F') x = x*16+*s-'A'+10; else { return x; } } } /************************* parseGlobals *****************************/ /* This function is called by "parseFile". It will parse the AFM File * up to the "StartCharMetrics" keyword, which essentially marks the * end of the Global Font Information and the beginning of the character * metrics information. * * If the caller of "parseFile" specified that it wanted the Global * Font Information (as defined by the "AFM File Specification" * document), then that information will be stored in the returned * data structure. * * Any Global Font Information entries that are not found in a * given file, will have the usual default initialization value * for its type (i.e. entries of type int will be 0, etc). * * This function returns an error code specifying whether there was * a premature EOF or a parsing error. This return value is used by * parseFile to determine if there is more file to parse. */ static BOOL parseGlobals(fp, gfi) FILE *fp; register GlobalFontInfo *gfi; { BOOL cont = TRUE, save = (gfi != NULL); int error = ok; register char *keyword; while (cont) { keyword = token(fp); if (keyword == NULL) /* Have reached an early and unexpected EOF. */ /* Set flag and stop parsing */ { error = earlyEOF; break; /* get out of loop */ } if (!save) /* get tokens until the end of the Global Font info section */ /* without saving any of the data */ switch (recognize(keyword)) { case STARTCHARMETRICS: cont = FALSE; break; case ENDFONTMETRICS: cont = FALSE; error = normalEOF; break; default: break; } /* switch */ else /* otherwise parse entire global font info section, */ /* saving the data */ switch(recognize(keyword)) { case STARTFONTMETRICS: keyword = token(fp); gfi->afmVersion = (char *) malloc(strlen(keyword) + 1); strcpy(gfi->afmVersion, keyword); break; case COMMENT: keyword = linetoken(fp); break; case FONTNAME: keyword = token(fp); gfi->fontName = (char *) malloc(strlen(keyword) + 1); strcpy(gfi->fontName, keyword); break; case ENCODINGSCHEME: keyword = token(fp); gfi->encodingScheme = (char *) malloc(strlen(keyword) + 1); strcpy(gfi->encodingScheme, keyword); break; case FULLNAME: keyword = linetoken(fp); gfi->fullName = (char *) malloc(strlen(keyword) + 1); strcpy(gfi->fullName, keyword); break; case FAMILYNAME: keyword = linetoken(fp); gfi->familyName = (char *) malloc(strlen(keyword) + 1); strcpy(gfi->familyName, keyword); break; case WEIGHT: keyword = token(fp); gfi->weight = (char *) malloc(strlen(keyword) + 1); strcpy(gfi->weight, keyword); break; case ITALICANGLE: keyword = token(fp); gfi->italicAngle = atof(keyword); if (errno == ERANGE) error = parseError; break; case ISFIXEDPITCH: keyword = token(fp); if (MATCH(keyword, False)) gfi->isFixedPitch = 0; else gfi->isFixedPitch = 1; break; case UNDERLINEPOSITION: keyword = token(fp); gfi->underlinePosition = atoi(keyword); break; case UNDERLINETHICKNESS: keyword = token(fp); gfi->underlineThickness = atoi(keyword); break; case VERSION: keyword = token(fp); gfi->version = (char *) malloc(strlen(keyword) + 1); strcpy(gfi->version, keyword); break; case NOTICE: keyword = linetoken(fp); gfi->notice = (char *) malloc(strlen(keyword) + 1); strcpy(gfi->notice, keyword); break; case FONTBBOX: keyword = token(fp); gfi->fontBBox.llx = atoi(keyword); keyword = token(fp); gfi->fontBBox.lly = atoi(keyword); keyword = token(fp); gfi->fontBBox.urx = atoi(keyword); keyword = token(fp); gfi->fontBBox.ury = atoi(keyword); break; case CAPHEIGHT: keyword = token(fp); gfi->capHeight = atoi(keyword); break; case XHEIGHT: keyword = token(fp); gfi->xHeight = atoi(keyword); break; case DESCENDER: keyword = token(fp); gfi->descender = atoi(keyword); break; case ASCENDER: keyword = token(fp); gfi->ascender = atoi(keyword); break; case STARTCHARMETRICS: cont = FALSE; break; case ENDFONTMETRICS: cont = FALSE; error = normalEOF; break; case NOPE: default: error = parseError; break; } /* switch */ } /* while */ return(error); } /* parseGlobals */ /************************* initializeArray ************************/ /* Unmapped character codes are (at Adobe Systems) assigned the * width of the space character (if one exists) else they get the * value of 250 ems. This function initializes all entries in the * char widths array to have this value. Then any mapped character * codes will be replaced with the width of the appropriate character * when parsing the character metric section. * This function parses the Character Metrics Section looking * for a space character (by comparing character names). If found, * the width of the space character will be used to initialize the * values in the array of character widths. * * Before returning, the position of the read/write pointer of the * file is reset to be where it was upon entering this function. */ static int initializeArray(fp, cwi) FILE *fp; register int *cwi; { BOOL cont = TRUE, found = FALSE; long opos = ftell(fp); int code = 0, width = 0, i = 0, error = 0; register char *keyword; while (cont) { keyword = token(fp); if (keyword == NULL) { error = earlyEOF; break; /* get out of loop */ } switch(recognize(keyword)) { case COMMENT: keyword = linetoken(fp); break; case CODE: code = atoi(token(fp)); break; case XWIDTH: width = atoi(token(fp)); break; case CHARNAME: keyword = token(fp); if (MATCH(keyword, Space)) { cont = FALSE; found = TRUE; } break; case ENDCHARMETRICS: cont = FALSE; break; case ENDFONTMETRICS: cont = FALSE; error = normalEOF; break; case NOPE: default: error = parseError; break; } /* switch */ } /* while */ if (!found) width = 250; for (i = 0; i < 256; ++i) cwi[i] = width; fseek(fp, opos, 0); return(error); } /* initializeArray */ /************************* parseCharWidths **************************/ /* This function is called by "parseFile". It will parse the AFM File * up to the "EndCharMetrics" keyword. It will save the character * width info (as opposed to all of the character metric information) * if requested by the caller of parseFile. Otherwise, it will just * parse through the section without saving any information. * * If data is to be saved, parseCharWidths is passed in a pointer * to an array of widths that has already been initialized by the * standard value for unmapped character codes. This function parses * the Character Metrics section only storing the width information * for the encoded characters into the array using the character code * as the index into that array. * * This function returns an error code specifying whether there was * a premature EOF or a parsing error. This return value is used by * parseFile to determine if there is more file to parse. */ static parseCharWidths(fp, cwi) FILE *fp; register int *cwi; { BOOL cont = TRUE, save = (cwi != NULL); int pos = 0, error = ok; register char *keyword; while (cont) { keyword = token(fp); /* Have reached an early and unexpected EOF. */ /* Set flag and stop parsing */ if (keyword == NULL) { error = earlyEOF; break; /* get out of loop */ } if (!save) /* get tokens until the end of the Char Metrics section without */ /* saving any of the data*/ switch (recognize(keyword)) { case ENDCHARMETRICS: cont = FALSE; break; case ENDFONTMETRICS: cont = FALSE; error = normalEOF; break; default: break; } /* switch */ else /* otherwise parse entire char metrics section, saving */ /* only the char x-width info */ switch(recognize(keyword)) { case COMMENT: keyword = linetoken(fp); break; case CODE: keyword = token(fp); pos = atoi(keyword); break; case XYWIDTH: /* PROBLEM: Should be no Y-WIDTH when doing "quick & dirty" */ keyword = token(fp); keyword = token(fp); /* eat values */ error = parseError; break; case XWIDTH: keyword = token(fp); if (pos >= 0) /* ignore unmapped chars */ cwi[pos] = atoi(keyword); break; case ENDCHARMETRICS: cont = FALSE; break; case ENDFONTMETRICS: cont = FALSE; error = normalEOF; break; case CHARNAME: /* eat values (so doesn't cause parseError) */ keyword = token(fp); break; case CHARBBOX: keyword = token(fp); keyword = token(fp); keyword = token(fp); keyword = token(fp); break; case LIGATURE: keyword = token(fp); keyword = token(fp); break; case NOPE: default: error = parseError; break; } /* switch */ } /* while */ return(error); } /* parseCharWidths */ /************************* parseCharMetrics ************************/ /* This function is called by parseFile if the caller of parseFile * requested that all character metric information be saved * (as opposed to only the character width information). * * parseCharMetrics is passed in a pointer to an array of records * to hold information on a per character basis. This function * parses the Character Metrics section storing all character * metric information for the ALL characters (mapped and unmapped) * into the array. * * This function returns an error code specifying whether there was * a premature EOF or a parsing error. This return value is used by * parseFile to determine if there is more file to parse. */ static parseCharMetrics(fp, fi) FILE *fp; register FontInfo *fi; { BOOL cont = TRUE, firstTime = TRUE; int error = ok, count = 0; enum parseKey rkey; register CharMetricInfo *temp = fi->cmi; register char *keyword; while (cont) { keyword = token(fp); if (keyword == NULL) { error = earlyEOF; break; /* get out of loop */ } switch(rkey = recognize(keyword)) { case COMMENT: keyword = linetoken(fp); break; case CODE: case CODEHEX: if (count < fi->numOfChars) { if (firstTime) firstTime = FALSE; else temp++; temp->code = (rkey == CODE) ? atoi(token(fp)) : htoi(token(fp)+1); count++; } else { error = parseError; cont = FALSE; } break; case XYWIDTH: temp->wx = atoi(token(fp)); temp->wy = atoi(token(fp)); break; case XWIDTH: temp->wx = atoi(token(fp)); break; case CHARNAME: keyword = token(fp); temp->name = (char *) malloc(strlen(keyword) + 1); strcpy(temp->name, keyword); break; case CHARBBOX: temp->charBBox.llx = atoi(token(fp)); temp->charBBox.lly = atoi(token(fp)); temp->charBBox.urx = atoi(token(fp)); temp->charBBox.ury = atoi(token(fp)); break; case LIGATURE: { Ligature **tail = &(temp->ligs); Ligature *node = *tail; if (*tail != NULL) { while (node->next != NULL) node = node->next; tail = &(node->next); } *tail = (Ligature *) calloc(1, sizeof(Ligature)); keyword = token(fp); (*tail)->succ = (char *) malloc(strlen(keyword) + 1); strcpy((*tail)->succ, keyword); keyword = token(fp); (*tail)->lig = (char *) malloc(strlen(keyword) + 1); strcpy((*tail)->lig, keyword); break; } case ENDCHARMETRICS: cont = FALSE;; break; case ENDFONTMETRICS: cont = FALSE; error = normalEOF; break; case NOPE: default: error = parseError; break; } /* switch */ } /* while */ if ((error == ok) && (count != fi->numOfChars)) error = parseError; return(error); } /* parseCharMetrics */ /************************* parseTrackKernData ***********************/ /* This function is called by "parseFile". It will parse the AFM File * up to the "EndTrackKern" or "EndKernData" keywords. It will save the * track kerning data if requested by the caller of parseFile. * * parseTrackKernData is passed in a pointer to the FontInfo record. * If data is to be saved, the FontInfo record will already contain * a valid pointer to storage for the track kerning data. * * This function returns an error code specifying whether there was * a premature EOF or a parsing error. This return value is used by * parseFile to determine if there is more file to parse. */ static parseTrackKernData(fp, fi) FILE *fp; register FontInfo *fi; { BOOL cont = TRUE, save = (fi->tkd != NULL); int pos = 0, error = ok, tcount = 0; register char *keyword; while (cont) { keyword = token(fp); if (keyword == NULL) { error = earlyEOF; break; /* get out of loop */ } if (!save) /* get tokens until the end of the Track Kerning Data */ /* section without saving any of the data */ switch(recognize(keyword)) { case ENDTRACKKERN: case ENDKERNDATA: cont = FALSE; break; case ENDFONTMETRICS: cont = FALSE; error = normalEOF; break; default: break; } /* switch */ else /* otherwise parse entire Track Kerning Data section, */ /* saving the data */ switch(recognize(keyword)) { case COMMENT: keyword = linetoken(fp); break; case TRACKKERN: if (tcount < fi->numOfTracks) { keyword = token(fp); fi->tkd[pos].degree = atoi(keyword); keyword = token(fp); fi->tkd[pos].minPtSize = atof(keyword); if (errno == ERANGE) error = parseError; keyword = token(fp); fi->tkd[pos].minKernAmt = atof(keyword); if (errno == ERANGE) error = parseError; keyword = token(fp); fi->tkd[pos].maxPtSize = atof(keyword); if (errno == ERANGE) error = parseError; keyword = token(fp); fi->tkd[pos++].maxKernAmt = atof(keyword); if (errno == ERANGE) error = parseError; tcount++; } else { error = parseError; cont = FALSE; } break; case ENDTRACKKERN: case ENDKERNDATA: cont = FALSE; break; case ENDFONTMETRICS: cont = FALSE; error = normalEOF; break; case NOPE: default: error = parseError; break; } /* switch */ } /* while */ if (error == ok && tcount != fi->numOfTracks) error = parseError; return(error); } /* parseTrackKernData */ /************************* parsePairKernData ************************/ /* This function is called by "parseFile". It will parse the AFM File * up to the "EndKernPairs" or "EndKernData" keywords. It will save * the pair kerning data if requested by the caller of parseFile. * * parsePairKernData is passed in a pointer to the FontInfo record. * If data is to be saved, the FontInfo record will already contain * a valid pointer to storage for the pair kerning data. * * This function returns an error code specifying whether there was * a premature EOF or a parsing error. This return value is used by * parseFile to determine if there is more file to parse. */ static parsePairKernData(fp, fi) FILE *fp; register FontInfo *fi; { BOOL cont = TRUE, save = (fi->pkd != NULL); int pos = 0, error = ok, pcount = 0; register char *keyword; while (cont) { keyword = token(fp); if (keyword == NULL) { error = earlyEOF; break; /* get out of loop */ } if (!save) /* get tokens until the end of the Pair Kerning Data */ /* section without saving any of the data */ switch(recognize(keyword)) { case ENDKERNPAIRS: case ENDKERNDATA: cont = FALSE; break; case ENDFONTMETRICS: cont = FALSE; error = normalEOF; break; default: break; } /* switch */ else /* otherwise parse entire Pair Kerning Data section, */ /* saving the data */ switch(recognize(keyword)) { case COMMENT: keyword = linetoken(fp); break; case KERNPAIR: if (pcount < fi->numOfPairs) { keyword = token(fp); fi->pkd[pos].name1 = (char *) malloc(strlen(keyword) + 1); strcpy(fi->pkd[pos].name1, keyword); keyword = token(fp); fi->pkd[pos].name2 = (char *) malloc(strlen(keyword) + 1); strcpy(fi->pkd[pos].name2, keyword); keyword = token(fp); fi->pkd[pos].xamt = atoi(keyword); keyword = token(fp); fi->pkd[pos++].yamt = atoi(keyword); pcount++; } else { error = parseError; cont = FALSE; } break; case KERNPAIRXAMT: if (pcount < fi->numOfPairs) { keyword = token(fp); fi->pkd[pos].name1 = (char *) malloc(strlen(keyword) + 1); strcpy(fi->pkd[pos].name1, keyword); keyword = token(fp); fi->pkd[pos].name2 = (char *) malloc(strlen(keyword) + 1); strcpy(fi->pkd[pos].name2, keyword); keyword = token(fp); fi->pkd[pos++].xamt = atoi(keyword); pcount++; } else { error = parseError; cont = FALSE; } break; case ENDKERNPAIRS: case ENDKERNDATA: cont = FALSE; break; case ENDFONTMETRICS: cont = FALSE; error = normalEOF; break; case NOPE: default: error = parseError; break; } /* switch */ } /* while */ if (error == ok && pcount != fi->numOfPairs) error = parseError; return(error); } /* parsePairKernData */ /************************* parseCompCharData **************************/ /* This function is called by "parseFile". It will parse the AFM File * up to the "EndComposites" keyword. It will save the composite * character data if requested by the caller of parseFile. * * parseCompCharData is passed in a pointer to the FontInfo record, and * a boolean representing if the data should be saved. * * This function will create the appropriate amount of storage for * the composite character data and store a pointer to the storage * in the FontInfo record. * * This function returns an error code specifying whether there was * a premature EOF or a parsing error. This return value is used by * parseFile to determine if there is more file to parse. */ static parseCompCharData(fp, fi) FILE *fp; register FontInfo *fi; { BOOL cont = TRUE, firstTime = TRUE, save = (fi->ccd != NULL); int pos = 0, j = 0, error = ok, ccount = 0, pcount = 0; register char *keyword; while (cont) { keyword = token(fp); if (keyword == NULL) /* Have reached an early and unexpected EOF. */ /* Set flag and stop parsing */ { error = earlyEOF; break; /* get out of loop */ } if (ccount > fi->numOfComps) { error = parseError; break; /* get out of loop */ } if (!save) /* get tokens until the end of the Composite Character info */ /* section without saving any of the data */ switch(recognize(keyword)) { case ENDCOMPOSITES: cont = FALSE; break; case ENDFONTMETRICS: cont = FALSE; error = normalEOF; break; default: break; } /* switch */ else /* otherwise parse entire Composite Character info section, */ /* saving the data */ switch(recognize(keyword)) { case COMMENT: keyword = linetoken(fp); break; case COMPCHAR: if (ccount < fi->numOfComps) { keyword = token(fp); if (pcount != fi->ccd[pos].numOfPieces) error = parseError; pcount = 0; if (firstTime) firstTime = FALSE; else pos++; fi->ccd[pos].ccName = (char *) malloc(strlen(keyword) + 1); strcpy(fi->ccd[pos].ccName, keyword); keyword = token(fp); fi->ccd[pos].numOfPieces = atoi(keyword); fi->ccd[pos].pieces = (Pcc *) calloc(fi->ccd[pos].numOfPieces, sizeof(Pcc)); j = 0; ccount++; } else { error = parseError; cont = FALSE; } break; case COMPCHARPIECE: if (pcount < fi->ccd[pos].numOfPieces) { keyword = token(fp); fi->ccd[pos].pieces[j].pccName = (char *) malloc(strlen(keyword) + 1); strcpy(fi->ccd[pos].pieces[j].pccName, keyword); keyword = token(fp); fi->ccd[pos].pieces[j].deltax = atoi(keyword); keyword = token(fp); fi->ccd[pos].pieces[j++].deltay = atoi(keyword); pcount++; } else error = parseError; break; case ENDCOMPOSITES: cont = FALSE; break; case ENDFONTMETRICS: cont = FALSE; error = normalEOF; break; case NOPE: default: error = parseError; break; } /* switch */ } /* while */ if (error == ok && ccount != fi->numOfComps) error = parseError; return(error); } /* parseCompCharData */ /*************************** 'PUBLIC' FUNCTION ********************/ /*************************** parseFile *****************************/ /* parseFile is the only 'public' procedure available. It is called * from an application wishing to get information from an AFM file. * The caller of this function is responsible for locating and opening * an AFM file and handling all errors associated with that task. * * parseFile expects 3 parameters: a vaild file pointer, a pointer * to a (FontInfo *) variable (for which storage will be allocated and * the data requested filled in), and a mask specifying which * data from the AFM File should be saved in the FontInfo structure. * * The file will be parsed and the requested data will be stored in * a record of type FontInfo (refer to ParseAFM.h). * * parseFile returns an error code as defined in parseAFM.h. * * The position of the read/write pointer associated with the file * pointer upon return of this function is undefined. */ extern int parseFile (fp, fi, flags) FILE *fp; FontInfo **fi; FLAGS flags; { int code = ok; /* return code from each of the parsing routines */ int error = ok; /* used as the return code from this function */ register char *keyword; /* used to store a token */ /* storage data for the global variable ident */ ident = (char *) calloc(MAX_NAME, sizeof(char)); if (ident == NULL) {error = storageProblem; return(error);} (*fi) = (FontInfo *) calloc(1, sizeof(FontInfo)); if ((*fi) == NULL) {error = storageProblem; return(error);} if (flags & P_G) { (*fi)->gfi = (GlobalFontInfo *) calloc(1, sizeof(GlobalFontInfo)); if ((*fi)->gfi == NULL) {error = storageProblem; return(error);} } /* The AFM File begins with Global Font Information. This section */ /* will be parsed whether or not information should be saved. */ code = parseGlobals(fp, (*fi)->gfi); if (code < 0) error = code; /* The Global Font Information is followed by the Character Metrics */ /* section. Which procedure is used to parse this section depends on */ /* how much information should be saved. If all of the metrics info */ /* is wanted, parseCharMetrics is called. If only the character widths */ /* is wanted, parseCharWidths is called. parseCharWidths will also */ /* be called in the case that no character data is to be saved, just */ /* to parse through the section. */ if ((code != normalEOF) && (code != earlyEOF)) { (*fi)->numOfChars = atoi(token(fp)); if (flags & (P_M ^ P_W)) { (*fi)->cmi = (CharMetricInfo *) calloc((*fi)->numOfChars, sizeof(CharMetricInfo)); if ((*fi)->cmi == NULL) {error = storageProblem; return(error);} code = parseCharMetrics(fp, *fi); } else { if (flags & P_W) { (*fi)->cwi = (int *) calloc(256, sizeof(int)); if ((*fi)->cwi == NULL) { error = storageProblem; return(error); } } /* parse section regardless */ code = parseCharWidths(fp, (*fi)->cwi); } /* else */ } /* if */ if ((error != earlyEOF) && (code < 0)) error = code; /* The remaining sections of the AFM are optional. This code will */ /* look at the next keyword in the file to determine what section */ /* is next, and then allocate the appropriate amount of storage */ /* for the data (if the data is to be saved) and call the */ /* appropriate parsing routine to parse the section. */ while ((code != normalEOF) && (code != earlyEOF)) { keyword = token(fp); if (keyword == NULL) /* Have reached an early and unexpected EOF. */ /* Set flag and stop parsing */ { code = earlyEOF; break; /* get out of loop */ } switch(recognize(keyword)) { case STARTKERNDATA: break; case ENDKERNDATA: break; case STARTTRACKKERN: keyword = token(fp); if (flags & P_T) { (*fi)->numOfTracks = atoi(keyword); (*fi)->tkd = (TrackKernData *) calloc((*fi)->numOfTracks, sizeof(TrackKernData)); if ((*fi)->tkd == NULL) { error = storageProblem; return(error); } } /* if */ code = parseTrackKernData(fp, *fi); break; case STARTKERNPAIRS: keyword = token(fp); if (flags & P_P) { (*fi)->numOfPairs = atoi(keyword); (*fi)->pkd = (PairKernData *) calloc((*fi)->numOfPairs, sizeof(PairKernData)); if ((*fi)->pkd == NULL) { error = storageProblem; return(error); } } /* if */ code = parsePairKernData(fp, *fi); break; case STARTCOMPOSITES: keyword = token(fp); if (flags & P_C) { (*fi)->numOfComps = atoi(keyword); (*fi)->ccd = (CompCharData *) calloc((*fi)->numOfComps, sizeof(CompCharData)); if ((*fi)->ccd == NULL) { error = storageProblem; return(error); } } /* if */ code = parseCompCharData(fp, *fi); break; case ENDFONTMETRICS: code = normalEOF; break; case NOPE: default: code = parseError; break; } /* switch */ if ((error != earlyEOF) && (code < 0)) error = code; } /* while */ if ((error != earlyEOF) && (code < 0)) error = code; if (ident != NULL) { free(ident); ident = NULL; } return(error); } /* parseFile */ vftool-2.0alpha.orig/parseAFM.h0100644000175000017500000002635605520721346015417 0ustar kohdakohda/* * (C) 1988, 1989 by Adobe Systems Incorporated. All rights reserved. * * This file may be freely copied and redistributed as long as: * 1) This entire notice continues to be included in the file, * 2) If the file has been modified in any way, a notice of such * modification is conspicuously indicated. * * PostScript, Display PostScript, and Adobe are registered trademarks of * Adobe Systems Incorporated. * * ************************************************************************ * THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO CHANGE WITHOUT * NOTICE, AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ADOBE SYSTEMS * INCORPORATED. ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY OR * LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO WARRANTY OF ANY * KIND (EXPRESS, IMPLIED OR STATUTORY) WITH RESPECT TO THIS INFORMATION, * AND EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY, * FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. * ************************************************************************ */ /* ParseAFM.h * * This header file is used in conjuction with the parseAFM.c file. * Together these files provide the functionality to parse Adobe Font * Metrics files and store the information in predefined data structures. * It is intended to work with an application program that needs font metric * information. The program can be used as is by making a procedure call to * parse an AFM file and have the data stored, or an application developer * may wish to customize the code. * * This header file defines the data structures used as well as the key * strings that are currently recognized by this version of the AFM parser. * This program is based on the document "Adobe Font Metrics Files, * Specification Version 2.0". * * AFM files are separated into distinct sections of different data. Because * of this, the parseAFM program can parse a specified file to only save * certain sections of information based on the application's needs. A record * containing the requested information will be returned to the application. * * AFM files are divided into five sections of data: * 1) The Global Font Information * 2) The Character Metrics Information * 3) The Track Kerning Data * 4) The Pair-Wise Kerning Data * 5) The Composite Character Data * * Basically, the application can request any of these sections independent * of what other sections are requested. In addition, in recognizing that * many applications will want ONLY the x-width of characters and not all * of the other character metrics information, there is a way to receive * only the width information so as not to pay the storage cost for the * unwanted data. An application should never request both the * "quick and dirty" char metrics (widths only) and the Character Metrics * Information since the Character Metrics Information will contain all * of the character widths as well. * * There is a procedure in parseAFM.c, called parseFile, that can be * called from any application wishing to get information from the AFM File. * This procedure expects 3 parameters: a vaild file descriptor, a pointer * to a (FontInfo *) variable (for which space will be allocated and then * will be filled in with the data requested), and a mask specifying * which data from the AFM File should be saved in the FontInfo structure. * * The flags that can be used to set the appropriate mask are defined below. * In addition, several commonly used masks have already been defined. * * History: * original: DSM Thu Oct 20 17:39:59 PDT 1988 * modified: DSM Mon Jul 3 14:17:50 PDT 1989 * - added 'storageProblem' return code * - fixed typos */ #include /* your basic constants */ #define TRUE 1 #define FALSE 0 #define EOL '\n' /* end-of-line indicator */ #define MAX_NAME 4096 /* max length for identifiers */ #define BOOL int #define FLAGS int /* Flags that can be AND'ed together to specify exactly what * information from the AFM file should be saved. */ #define P_G 0x01 /* 0000 0001 */ /* Global Font Info */ #define P_W 0x02 /* 0000 0010 */ /* Character Widths ONLY */ #define P_M 0x06 /* 0000 0110 */ /* All Char Metric Info */ #define P_P 0x08 /* 0000 1000 */ /* Pair Kerning Info */ #define P_T 0x10 /* 0001 0000 */ /* Track Kerning Info */ #define P_C 0x20 /* 0010 0000 */ /* Composite Char Info */ /* Commonly used flags */ #define P_GW (P_G | P_W) #define P_GM (P_G | P_M) #define P_GMP (P_G | P_M | P_P) #define P_GMK (P_G | P_M | P_P | P_T) #define P_ALL (P_G | P_M | P_P | P_T | P_C) /* Possible return codes from the parseFile procedure. * * ok means there were no problems parsing the file. * * parseError means that there was some kind of parsing error, but the * parser went on. This could include problems like the count for any given * section does not add up to how many entries there actually were, or * there was a key that was not recognized. The return record may contain * vaild data or it may not. * * earlyEOF means that an End of File was encountered before expected. This * may mean that the AFM file had been truncated, or improperly formed. * * storageProblem means that there were problems allocating storage for * the data structures that would have contained the AFM data. */ #define ok 0 #define parseError -1 #define earlyEOF -2 #define storageProblem -3 /************************* TYPES *********************************/ /* Below are all of the data structure definitions. These structures * try to map as closely as possible to grouping and naming of data * in the AFM Files. */ /* Bounding box definition. Used for the Font BBox as well as the * Character BBox. */ typedef struct { int llx; /* lower left x-position */ int lly; /* lower left y-position */ int urx; /* upper right x-position */ int ury; /* upper right y-position */ } BBox; /* Global Font information. * The key that each field is associated with is in comments. For an * explanation about each key and its value please refer to the AFM * documentation (full title & version given above). */ typedef struct { char *afmVersion; /* key: StartFontMetrics */ char *fontName; /* key: FontName */ char *fullName; /* key: FullName */ char *familyName; /* key: FamilyName */ char *weight; /* key: Weight */ float italicAngle; /* key: ItalicAngle */ BOOL isFixedPitch; /* key: IsFixedPitch */ BBox fontBBox; /* key: FontBBox */ int underlinePosition; /* key: UnderlinePosition */ int underlineThickness; /* key: UnderlineThickness */ char *version; /* key: Version */ char *notice; /* key: Notice */ char *encodingScheme; /* key: EncodingScheme */ int capHeight; /* key: CapHeight */ int xHeight; /* key: XHeight */ int ascender; /* key: Ascender */ int descender; /* key: Descender */ } GlobalFontInfo; /* Ligature definition is a linked list since any character can have * any number of ligatures. */ typedef struct _t_ligature { char *succ, *lig; struct _t_ligature *next; } Ligature; /* Character Metric Information. This structure is used only if ALL * character metric information is requested. If only the character * widths is requested, then only an array of the character x-widths * is returned. * * The key that each field is associated with is in comments. For an * explanation about each key and its value please refer to the * Character Metrics section of the AFM documentation (full title * & version given above). */ typedef struct { int code, /* key: C */ wx, /* key: WX */ wy; /* together wx and wy are associated with key: W */ char *name; /* key: N */ BBox charBBox; /* key: B */ Ligature *ligs; /* key: L (linked list; not a fixed number of Ls */ } CharMetricInfo; /* Track kerning data structure. * The fields of this record are the five values associated with every * TrackKern entry. * * For an explanation about each value please refer to the * Track Kerning section of the AFM documentation (full title * & version given above). */ typedef struct { int degree; float minPtSize, minKernAmt, maxPtSize, maxKernAmt; } TrackKernData; /* Pair Kerning data structure. * The fields of this record are the four values associated with every * KP entry. For KPX entries, the yamt will be zero. * * For an explanation about each value please refer to the * Pair Kerning section of the AFM documentation (full title * & version given above). */ typedef struct { char *name1; char *name2; int xamt, yamt; } PairKernData; /* PCC is a piece of a composite character. This is a sub structure of a * compCharData described below. * These fields will be filled in with the values from the key PCC. * * For an explanation about each key and its value please refer to the * Composite Character section of the AFM documentation (full title * & version given above). */ typedef struct { char *pccName; int deltax, deltay; } Pcc; /* Composite Character Information data structure. * The fields ccName and numOfPieces are filled with the values associated * with the key CC. The field pieces points to an array (size = numOfPieces) * of information about each of the parts of the composite character. That * array is filled in with the values from the key PCC. * * For an explanation about each key and its value please refer to the * Composite Character section of the AFM documentation (full title * & version given above). */ typedef struct { char *ccName; int numOfPieces; Pcc *pieces; } CompCharData; /* FontInfo * Record type containing pointers to all of the other data * structures containing information about a font. * A a record of this type is filled with data by the * parseFile function. */ typedef struct { GlobalFontInfo *gfi; /* ptr to a GlobalFontInfo record */ int *cwi; /* ptr to 256 element array of just char widths */ int numOfChars; /* number of entries in char metrics array */ CharMetricInfo *cmi; /* ptr to char metrics array */ int numOfTracks; /* number to entries in track kerning array */ TrackKernData *tkd; /* ptr to track kerning array */ int numOfPairs; /* number to entries in pair kerning array */ PairKernData *pkd; /* ptr to pair kerning array */ int numOfComps; /* number to entries in comp char array */ CompCharData *ccd; /* ptr to comp char array */ } FontInfo; /************************* PROCEDURES ****************************/ /* Call this procedure to do the grunt work of parsing an AFM file. * * "fp" should be a valid file pointer to an AFM file. * * "fi" is a pointer to a pointer to a FontInfo record sturcture * (defined above). Storage for the FontInfo structure will be * allocated in parseFile and the structure will be filled in * with the requested data from the AFM File. * * "flags" is a mask with bits set representing what data should * be saved. Defined above are valid flags that can be used to set * the mask, as well as a few commonly used masks. * * The possible return codes from parseFile are defined above. */ extern int parseFile ( /* FILE *fp; FontInfo **fi; FLAGS flags; */ );