diff -ruN xdvik-22.40y1.orig/texk/xdvik/CHANGES.xdvik-jp.html xdvik-22.40y1/texk/xdvik/CHANGES.xdvik-jp.html --- xdvik-22.40y1.orig/texk/xdvik/CHANGES.xdvik-jp.html 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/CHANGES.xdvik-jp.html 2004-02-25 12:20:44.000000000 +0900 @@ -0,0 +1,322 @@ + + + + + + +xdvi $BF|K\8l2=!&5!G=3HD%%Q%C%A(B + + + +

xdvi $BF|K\8l2=!&5!G=3HD%%Q%C%A(B

+
+
+
+ +
+

xdvik-22.40y1

+ +

xdvik-22.40y

+ +

xdvik-22.40w

+ +

xdvik-22.40v

+
+ +
+
$BEZB<(B $BE8G7(B(tutimura@nn.iij4u.or.jp)
+ + diff -ruN xdvik-22.40y1.orig/texk/xdvik/Makefile.in xdvik-22.40y1/texk/xdvik/Makefile.in --- xdvik-22.40y1.orig/texk/xdvik/Makefile.in 2003-03-19 07:08:10.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/Makefile.in 2004-02-06 14:38:40.000000000 +0900 @@ -8,6 +8,30 @@ ac_include ../make/common.mk ac_include ../make/programs.mk +# define like -DSHRINK=10 when you change default shrink size from 8 +# define like -DBDPI=300 when you change default DPI from 600 +# define NOKANJI when you don't use KANJI +# define NOPTEX when you don't use PTEX +# define NOZEIT when you don't use ZEIT +# define NONTTZEIT when you don't use NTTZEIT +# define NOSELFILE when you don't use SELFILE +# define NOCOLOR when you don't use COLOR +# define NOTOC when you don't use TOC +# define NOMARKPAGE when you don't use MARKPAGE +# define NOPAGENUM when you don't use PAGENUM +# define NOPRINTDVI when you don't use PRINTDVI +# define NODVISEL when you don't use DVISEL +# define NOPAPERMENU when you don't use PAPERMENU +# define NOVFONTMAP when you don't use "vfontmap" +# define VI_KEY when you use VI_KEY +# define SMALL_PANEL when you use SMALL_PANEL +# define ZOOM_BUTTON when you use ZOOM_BUTTON +XDEFS= @XDEFS@ + +XDVIETCDIR = @XDVIETCDIR@ + +VFLIB = @VFLIB@ + CPP = @CPP@ # Make `#include ' and `-lX...' work. @@ -38,7 +62,10 @@ # Extra xdvi-specific compiler options. ## ps_def = @PS_DEF@ -DSRC ps_def = @PS_DEF@ -DXSERVER_INFO -prog_cflags = $(LIBWWWCPPFLAGS) $(LIBT1CPPFLAGS) $(ps_def) -I../../libs/t1lib/lib/t1lib -I../kpathsea $(x_cppflags) +dvi_filter = @DVIFILTERCMD@ +vflib_def = @VFLIB_DEF@ +xdviprint_def = @XDVIPRINT_DEF@ +prog_cflags = $(LIBWWWCPPFLAGS) $(LIBT1CPPFLAGS) $(ps_def) -I../../libs/t1lib/lib/t1lib -I../kpathsea $(x_cppflags) $(dvi_filter) $(vflib_def) $(xdviprint_def) # We don't use alloca ourselves, but the X library might, and this way # we avoid buggy versions in -lPW or -lucb. @@ -49,15 +76,17 @@ help-window.o message-window.o statusline.o xserver-info.o \ gf.o pk.o psdps.o psgs.o psheader.o psnews.o special.o util.o vf.o sfDir.o \ sfDraw.o sfPath.o sfSelFile.o hypertex.o mime.o wwwfetch.o \ + zeit.o dnpzeit.o toc.o markpage.o markring.o print.o \ + paper.o tategaki.o vfontmap.o vf2ft.o \ $(ALLOCA) dvips.o tfmload.o program = xdvi.bin perlprog = t1mapper -default all: $(program) $(perlprog) xdvi.1 t1mapper.1 +default all: $(program) $(perlprog) xdvi.1 t1mapper.1 xdviprint $(program): $(kpathsea) $(objects) $(LIBWWWDEP) $(LIBT1DEP) - $(kpathsea_link) $(objects) $(x_link) $(LOADLIBES) + $(kpathsea_link) $(objects) $(x_link) $(VFLIB) $(LOADLIBES) ## $(client): xdvi-client.o my-vsnprintf.o ## $(link_command) xdvi-client.o string-utils.o $(x_ldflags) -lX11 @@ -94,14 +123,28 @@ xdvi.1: xdvi.man sedscript sed -f sedscript <$(srcdir)/xdvi.man >$@ +xdviprint: Makefile xdviprint.sample + if test -x /usr/bin/nawk; then \ + sed -e '/^## for @DVIFILTER@/,/^##/s/^# //' -e 's/awk/nawk/' \ + -e "s,/usr/local/share/texmf/xdvi,$(XDVIETCDIR)," \ + $(srcdir)/xdviprint.sample >$@ ; \ + else \ + sed -e '/^## for @DVIFILTER@/,/^##/s/^# //' \ + -e "s,/usr/local/share/texmf/xdvi,$(XDVIETCDIR)," \ + $(srcdir)/xdviprint.sample >$@ ; \ + fi + chmod +x $@ + sedscript: mksedscript c-auto.h $(SHELL) $(srcdir)/mksedscript $(srcdir) pkpath sizes vfpath \ figpath headerpath $(DEFS) $(prog_cflags) >$@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ + install: install-exec install-data uninstall: uninstall-exec uninstall-data -install-exec: $(program) +install-exec: $(program) xdviprint $(SHELL) $(top_srcdir)/../mkinstalldirs $(bindir) for p in $(program); do $(INSTALL_LIBTOOL_PROG) $(bindir) $$p; done $(INSTALL_SCRIPT) $(srcdir)/$(perlprog) $(scriptdir)/$(perlprog) @@ -109,23 +152,40 @@ ### fix wrong CVS permissions for shell script chmod +x $(srcdir)/xdvizilla $(INSTALL_SCRIPT) $(srcdir)/xdvizilla $(scriptdir)/xdvizilla + if test "@XDVIPRINTCMD@" != no; then \ + if test ! -x @XDVIPRINTCMD@; then \ + $(INSTALL_SCRIPT) $(srcdir)/xdviprint @XDVIPRINTCMD@; \ + fi; \ + fi uninstall-exec: for p in $(program) $(perlprog) xdvi; do rm -f $(bindir)/$$p; done ### //FIXME: add installation for encoding.map here!! (same place where psfonts.map is?) -install-data: xdvi.1 t1mapper.1 +install-data: xdvi.1 t1mapper.1 vfontmap.vflib vfontmap.freetype + $(SHELL) $(top_srcdir)/../mkinstalldirs $(man1dir) $(XDVIETCDIR) $(INSTALL_DATA) xdvi.1 $(man1dir)/xdvi.$(manext) $(INSTALL_DATA) $(srcdir)/t1mapper.1 $(man1dir)/t1mapper.$(manext) $(INSTALL_DATA) $(srcdir)/xdvizilla.1 $(man1dir)/xdvizilla.$(manext) - $(SHELL) $(top_srcdir)/../mkinstalldirs $(man1dir) $(texmf)/xdvi $(INSTALL_DATA) $(srcdir)/texmf/xdvi-teTeX.cfg $(texmf)/xdvi/xdvi.cfg + if test ! -f $(XDVIETCDIR)/vfontmap; then \ + case "$(vflib_def)" in \ + *-DVF2FT) $(INSTALL_DATA) vfontmap.freetype $(XDVIETCDIR)/vfontmap;; \ + *) $(INSTALL_DATA) vfontmap.vflib $(XDVIETCDIR)/vfontmap;; \ + esac \ + fi + $(INSTALL_DATA) vfontmap.freetype $(XDVIETCDIR) + $(INSTALL_DATA) vfontmap.vflib $(XDVIETCDIR) + $(INSTALL_DATA) xdvipaper.dvi2ps-j $(XDVIETCDIR)/xdvipaper.dvi2ps-j + $(INSTALL_DATA) xdvipaper.dvips $(XDVIETCDIR)/xdvipaper.dvips + $(INSTALL_DATA) xdvipaper.jdvi2kps $(XDVIETCDIR)/xdvipaper.jdvi2kps uninstall-data: rm -f $(man1dir)/xdvi.$(manext) rm -f $(man1dir)/t1mapper.$(manext) rm -f $(texmf)/xdvi/xdvi.cfg $(texmf)/xdvi/XDvi rm -f $(man1dir)/xdvizilla.$(manext) $(scriptdir)/xdvizilla + rm -f $(FILTOPTTBLDIR)/xdvipaper.* distname = xdvik program_files = *.man *.ac xdvi.icon xdvi.FAQ psheader.txt mksedscript \ @@ -152,7 +212,7 @@ test -f $(LIBT1DIR)/Makefile && { cd $(LIBT1DIR); $(MAKE) clean; } || true distclean:: - rm -f psheader.c krheader.h sedscript xdvi.1 *.flc *~ + rm -f psheader.c krheader.h sedscript xdvi.1 xdviprint *.flc *~ test -f $(LIBWWWDIR)/Makefile && { cd $(LIBWWWDIR); $(MAKE) distclean; } || true test -f $(LIBTYPE1DIR)/Makefile && { cd $(LIBTYPE1DIR); $(MAKE) distclean; } || true test -f $(LIBT1DIR)/Makefile && { cd $(LIBT1DIR); $(MAKE) distclean; } || true @@ -170,3 +230,12 @@ ac_include ../make/tkpathsea.mk ac_include ../make/rdepend.mk ac_include depend.mk +zeit.o: zeit.c xdvi-config.h zeit.h jtfm.h +dnpzeit.o: dnpzeit.c xdvi-config.h zeit.h +toc.o: toc.c xdvi-config.h chardef.h toc.h markpage.h +markpage.o: markpage.c xdvi-config.h chardef.h markring.h markpage.h +markring.o: markring.c xdvi-config.h markring.h +print.o: print.c xdvi-config.h chardef.h print.h markpage.h +paper.o: paper.c xdvi-config.h chardef.h paper.h +tategaki.o: tategaki.c xdvi-config.h +vfontmap.o: vfontmap.c xdvi-config.h diff -ruN xdvik-22.40y1.orig/texk/xdvik/Makefile.in.oxdvi xdvik-22.40y1/texk/xdvik/Makefile.in.oxdvi --- xdvik-22.40y1.orig/texk/xdvik/Makefile.in.oxdvi 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/Makefile.in.oxdvi 2004-02-23 18:53:08.000000000 +0900 @@ -0,0 +1,212 @@ +# Makefile for oxdvik +# +# - 1999/05/08: janl: Removed submakes for libwww and kpathsea. That's what +# the top makefile is for! +# + +ac_include ../make/paths.mk +ac_include ../make/common.mk +ac_include ../make/programs.mk + +# define like -DSHRINK=10 when you change default shrink size from 8 +# define like -DBDPI=300 when you change default DPI from 600 +# define NOKANJI when you don't use KANJI +# define NOPTEX when you don't use PTEX +# define NOZEIT when you don't use ZEIT +# define NONTTZEIT when you don't use NTTZEIT +# define NOSELFILE when you don't use SELFILE +# define NOCOLOR when you don't use COLOR +# define NOTOC when you don't use TOC +# define NOMARKPAGE when you don't use MARKPAGE +# define NOPAGENUM when you don't use PAGENUM +# define NOPRINTDVI when you don't use PRINTDVI +# define NODVISEL when you don't use DVISEL +# define NOPAPERMENU when you don't use PAPERMENU +# define NOVFONTMAP when you don't use "vfontmap" +# define VI_KEY when you use VI_KEY +# define SMALL_PANEL when you use SMALL_PANEL +# define ZOOM_BUTTON when you use ZOOM_BUTTON +XDEFS= @XDEFS@ + +XDVIETCDIR = @XDVIETCDIR@ + +VFLIB = @VFLIB@ + +CPP = @CPP@ + +# Make `#include ' and `-lX...' work. +# This matches web2c (needed only for Metafont). +x_cppflags = @X_CFLAGS@ +x_ldflags = @X_LIBS@ +x_pre_libs = @X_PRE_LIBS@ +x_extra_libs = @X_EXTRA_LIBS@ +x_tool_libs = @x_tool_libs@ +x_ext_lib = @x_ext_lib@ +# Follow the library order used in X11R6 itself: +# -lXaw -lXmu -lXt -lSM -lICE -lXext -lX11 (some may not be present). +x_link = $(LDLIBWWW) $(LDLIBT1) $(x_ldflags) $(x_tool_libs) $(x_pre_libs) $(x_ext_lib) -lX11 $(x_extra_libs) + +LDLIBWWW=@LDLIBWWW@ +LIBWWWCPPFLAGS=@LIBWWWCPPFLAGS@ +LIBWWWDEP=@LIBWWWDEP@ +LIBWWWDIR = ../../libs/libwww +LIBWWWSRCDIR = $(srcdir)/../../libs/libwww + +LDLIBT1=@LDLIBT1@ +LIBT1CPPFLAGS=@LIBT1CPPFLAGS@ +LIBT1DEP=@LIBT1DEP@ +LIBT1DIR = ../../libs/t1lib +LIBTYPE1DIR = $(LIBT1DIR)/../type1 +LIBT1SRCDIR = $(srcdir)/$(LIBT1DIR) + +# Extra oxdvi-specific compiler options. +## ps_def = @PS_DEF@ -DSRC +ps_def = @PS_DEF@ -DOmega -DXSERVER_INFO +dvi_filter = @DVIFILTERCMD@ +vflib_def = @VFLIB_DEF@ +xdviprint_def = @XDVIPRINT_DEF@ +prog_cflags = $(LIBWWWCPPFLAGS) $(LIBT1CPPFLAGS) $(ps_def) -I../../libs/t1lib/lib/t1lib -I../kpathsea $(x_cppflags) $(dvi_filter) $(vflib_def) $(xdviprint_def) + +# We don't use alloca ourselves, but the X library might, and this way +# we avoid buggy versions in -lPW or -lucb. +ALLOCA = alloca.o + +objects = xdvi.o dvi-draw.o dvi-init.o events.o font-open.o \ + string-utils.o my-snprintf.o my-vsnprintf.o \ + help-window.o message-window.o statusline.o xserver-info.o \ + gf.o pk.o psdps.o psgs.o psheader.o psnews.o special.o util.o vf.o sfDir.o \ + sfDraw.o sfPath.o sfSelFile.o hypertex.o mime.o wwwfetch.o \ + zeit.o dnpzeit.o toc.o markpage.o markring.o print.o \ + paper.o tategaki.o vfontmap.o vf2ft.o \ + $(ALLOCA) dvips.o tfmload.o + +program = oxdvi.bin +perlprog = t1mapper + +default all: $(program) + +$(program): $(kpathsea) $(objects) $(LIBWWWDEP) $(LIBT1DEP) + $(kpathsea_link) $(objects) $(x_link) $(VFLIB) $(LOADLIBES) + +## $(client): xdvi-client.o my-vsnprintf.o +## $(link_command) xdvi-client.o string-utils.o $(x_ldflags) -lX11 + +squeeze: squeeze.o + $(link_command) squeeze.o $(LIBS) $(XLOADLIBES) + +### +### the CC_CONCAT_FILES listed here use ANSI-style string concatenation; +### the following transforms those strings into one continuous string, +### making it work with K&R C. The file needs to contain special markers +### for sed; see xdvi.c for an example). +### NOTE: Paul uses conditional creation of krheader.h in xdvi.c, but +### this is not possible with our autoconf scheme (only maintainers +### are supposed to run autoconf, but at this time it's not known +### whether the dependency for krheader.h is needed or not). +### So we create krheader from CC_CONCAT_FILES every time one of these +### files changes. + +CC_CONCAT_FILES = ./xdvi.c +krheader.h: $(CC_CONCAT_FILES) c-auto.h xdvi.h Makefile + echo "/* alternative definitions if string concatenation is not available */" > krheader.h + echo "#ifndef HAVE_CC_CONCAT" >> krheader.h + for file in $(CC_CONCAT_FILES) ; do \ + $(CPP) $(ALL_CPPFLAGS) -DMAKING_HEADER $(srcdir)/$$file \ + | sed -e '2,/XDVI_CC_CONCAT_BEGIN1/d' -e '/XDVI_CC_CONCAT_END1/,$$d' -e '/^ *$$/d' -e '/^#/d' \ + | sed -e '2,$$s/^[ ]*"//' -e 's/"[ ]*$$/\\/' \ + >> krheader.h; done + echo "#endif /* HAVE_CC_CONCAT */" >> krheader.h + +psheader.c: psheader.txt squeeze + ./squeeze $(srcdir)/psheader.txt $@ + +xdvi.1: xdvi.man sedscript + sed -f sedscript <$(srcdir)/xdvi.man >$@ + +xdviprint: Makefile xdviprint.sample + if test -x /usr/bin/nawk; then \ + sed -e '/^## for @DVIFILTER@/,/^##/s/^# //' -e 's/awk/nawk/' \ + -e "s,/usr/local/share/texmf/xdvi,$(XDVIETCDIR)," \ + $(srcdir)/xdviprint.sample >$@ ; \ + else \ + sed -e '/^## for @DVIFILTER@/,/^##/s/^# //' \ + -e "s,/usr/local/share/texmf/xdvi,$(XDVIETCDIR)," \ + $(srcdir)/xdviprint.sample >$@ ; \ + fi + chmod +x $@ + +sedscript: mksedscript c-auto.h + $(SHELL) $(srcdir)/mksedscript $(srcdir) pkpath sizes vfpath \ + figpath headerpath $(DEFS) $(prog_cflags) >$@ + +INSTALL_SCRIPT = @INSTALL_SCRIPT@ + +install: install-exec install-data +uninstall: uninstall-exec uninstall-data + +install-exec: $(program) + $(SHELL) $(top_srcdir)/../mkinstalldirs $(bindir) + for p in $(program); do $(INSTALL_LIBTOOL_PROG) $(bindir) $$p; done + $(INSTALL_SCRIPT) $(srcdir)/oxdvi-sh $(scriptdir)/oxdvi + +uninstall-exec: + for p in $(program) oxdvi; do rm -f $(bindir)/$$p; done + +### //FIXME: add installation for encoding.map here!! (same place where psfonts.map is?) +install-data: + $(SHELL) $(top_srcdir)/../mkinstalldirs $(man1dir) $(XDVIETCDIR) + +uninstall-data: + +distname = oxdvik +program_files = *.man *.ac xdvi.icon xdvi.FAQ psheader.txt mksedscript \ + MOTIF +version_files = xdvi.c + +pre-dist-$(distname): +post-dist-$(distname): + cd $(top_distdir); rm -f xdvik/psheader.c + +ac_include ../make/dist.mk +ac_include ../make/config.mk + +info dvi check: + +ac_include ../make/clean.mk + +clean:: + rm -f *.flc + +clean:: + test -f $(LIBWWWDIR)/Makefile && { cd $(LIBWWWDIR); $(MAKE) clean; } || true + test -f $(LIBTYPE1DIR)/Makefile && { cd $(LIBTYPE1DIR); $(MAKE) clean; } || true + test -f $(LIBT1DIR)/Makefile && { cd $(LIBT1DIR); $(MAKE) clean; } || true + +distclean:: + rm -f psheader.c krheader.h sedscript xdvi.1 xdviprint *.flc *~ + test -f $(LIBWWWDIR)/Makefile && { cd $(LIBWWWDIR); $(MAKE) distclean; } || true + test -f $(LIBTYPE1DIR)/Makefile && { cd $(LIBTYPE1DIR); $(MAKE) distclean; } || true + test -f $(LIBT1DIR)/Makefile && { cd $(LIBT1DIR); $(MAKE) distclean; } || true + +$(LIBWWWDIR)/libwww.a: + cd $(LIBWWWDIR); $(MAKE) $(makeargs) libwww.a + +$(LIBT1DIR)/libt1.a: + cd $(LIBT1DIR); $(MAKE) $(makeargs) libt1.a + +$(LIBTYPE1DIR)/libtype1.a: + cd $(LIBTYPE1DIR); $(MAKE) $(makeargs) libtype1.a + + +ac_include ../make/tkpathsea.mk +ac_include ../make/rdepend.mk +ac_include depend.mk +zeit.o: zeit.c xdvi-config.h zeit.h jtfm.h +dnpzeit.o: dnpzeit.c xdvi-config.h zeit.h +toc.o: toc.c xdvi-config.h chardef.h toc.h markpage.h +markpage.o: markpage.c xdvi-config.h chardef.h markring.h markpage.h +markring.o: markring.c xdvi-config.h markring.h +print.o: print.c xdvi-config.h chardef.h print.h markpage.h +paper.o: paper.c xdvi-config.h chardef.h paper.h +tategaki.o: tategaki.c xdvi-config.h +vfontmap.o: vfontmap.c xdvi-config.h diff -ruN xdvik-22.40y1.orig/texk/xdvik/README.xdvik-jp xdvik-22.40y1/texk/xdvik/README.xdvik-jp --- xdvik-22.40y1.orig/texk/xdvik/README.xdvik-jp 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/README.xdvik-jp 2004-02-25 11:37:53.000000000 +0900 @@ -0,0 +1,239 @@ + + << xdvik-22.40y1-j1.21 patch について >> + + 2004年2月25日 + + +[1] xdvik-22.40y1-j1.21 patch とは + + xdvik-22.40y1 に対する日本語化および機能拡張パッチです。このパッチは +既に出回っているいくつかの日本語パッチに修正や改変を加えたものです。 +パッチの変更履歴は CHANGES.xdvik-jp.html を御覧下さい。 + + +[2] コンパイル・インストール + + とりあえず、xdvik-22.40y1.tar.gz と xdvik-22.40y1-j1.21.patch.gz が同じ +ディレクトリにあるとして…。 + + % gzip -dc xdvik-22.40y1.tar.gz | tar xf - + % cd xdvik-22.40y1 + % gzip -dc ../xdvik-22.40y1-j1.21.patch.gz | patch -p1 -s + % ./configure + % make + % cd texk/xdvik ←これが重要 + % su + # make install + +で、デフォルトの設定でインストールされます。 + + texk/xdvik に移動せずに make install すると、kpathsea ライブラリもイ +ンストールしてくれますが、texmf/web2c/texmf.cnf も上書きされてしまうの +で、通常だと ptex が動かなくなってしまいます。texmf.cnf のバックアップ +をとっておいて書き戻して下さい。 + + また、デフォルトでは -g オプション付で make されると思いますが、これだと +やたらと実行ファイルが大きくなりますので、configure 実行時に + + % env CFLAGS="-O2" ./configure + +等を指定した方がいいかもしれません。あるいはインストール後に + + # strip /usr/local/bin/xdvi.bin + +を実行しても同じことです。 + + + 設定変更は configure スクリプトのオプションで指定します。 + +★デフォルトの紙のサイズ + + --enable-a4 A4 (デフォルト) + --disable-a4 US letter + + オリジナルの xdvik では US letter の方がデフォルトでしたが、日本語 +パッチを当てると A4 の方がデフォルトになります。 + + +★シェアドライブラリ + + --enable-static kpathsea ライブラリはスタティックリンク (デフォルト) + --enable-shared kpathsea ライブラリはダイナミックリンク + + +★明朝体とゴシック体以外の日本語書体の使用 + + --with-vfontmap 多書体を使う。(デフォルト) + --without-vfontmap 多書体を使わない。 + + vfontmap のデフォルトは、/usr/local/share/texmf/xdvi/vfontmap です。 +変更する場合は後述の --enable-xdvietcdir で指定します。--with-vfontmap +の場合、この指定パスにファイルが存在しない場合は、サンプルがインストール +されます。(既存の場合、上書きはされません。) vfontmap には + +"tfm name" "/etc/vfontcap entry" "{,tate}" + +あるいは + +"/font/file/name" + "tfm name1" "{,unicode,adobejapan,cidv}" + "tfm name2" "{,unicode,adobejapan,cidv}" + +のように記述します。後者の書き方では、同じフォントファイルを指す場合、 +tfm の名前だけを繰り返して書けばよいということです。この場合の tfm 名 +の前にはスペースまたはタブ文字を入れて下さい。 + +★日本語フォントの指定 + + --with-vflib=yes ASCII, NTT 共に VFlib を使う。(デフォルト) + --with-vflib=vf2ft ASCII, NTT 共に FreeType を使う。 + --with-vflib=nontt ASCII で VFlib を、NTT で PK フォントを使う。 + --without-vflib ASCII, NTT 共に PK フォントを使う。 + + --without-vflib を指定した場合は自動的に --without-vfontmap になります。 + +★画面移動キーの変更 + + --enable-vikey vi 風の h,j,k,l を使います。 (デフォルト) + --disable-vikey xdvi 標準の l,d,u,r を使います。 + + +★パネルのサイズ指定 + + --enable-smallpanel パネルサイズを小さめにします。 (デフォルト) + 実行時オプション +smallpanel で標準サイズに + 切替えることもできます。 + --disable-smallpanel xdvi 標準サイズにします。 + 実行時オプション -smallpanel も無効です。 + + +★拡大縮小ボタン + + --enable-zoombutton 拡大ボタンと縮小ボタンを付けます (デフォルト) + --disable-zoombutton xdvi 標準の固定倍率への変更ボタンを付けます + + +★Shrink サイズの指定 + + --enable-shrink=6 デフォルトの Shrink サイズを指定します。 + + 指定しない時のデフォルトは 10 になります。数字が大きいほど表示は小さく +なります。 + + +★ベース DPI の指定 + + --enable-bdpi=300 PK フォントのベース DPI を指定します。 + + 指定しない時のデフォルトは 600dpi です。 + + +★xdvi からの印刷コマンドを指定します。 + + --enable-xdviprint 新しい DVISEL 機能を使って印刷します (デフォルト) + --disable-xdviprint 従来の PRINTDVI 機能を使って印刷します + + DVISEL 機能と PRINTDVI 機能の違いは… + + DVISEL + xdvi で指定ページの DVI を切り出し、外部コマンドにパイプで引き渡し + ます。外部コマンドはパイプ(標準入力)から DVI を受け取りプリントします。 + 通常、この外部コマンドには内部で dvips/dvi2ps/jdvi2kps 等を呼び出す + スクリプトを指定します。READMEs/README.xdvi20c-j1.0+hal2+dvisel も + 参照して下さい。 + + PRINTDVI + xdvi で予め指定されてる印刷コマンド(%P %R など)に従い、印刷する + ページ等を引数指定して外部コマンド(通常 dviselect)を呼び出して、 + 指定ページを切り出し、その後プリンタドライバに合わせて紙のサイズ + を指定する引数の変更等をし、その引数を指定して、プリンタドライバー + 等を動かします。READMEs/README.markpage+toc+printdvi+paper も + 参照して下さい。 + + なお、DVISEL 機能を使う場合は、指定する外部コマンドを + + --enable-xdviprint=/usr/libexec/xdviprint + +のように変更できます。デフォルトは /usr/local/bin/xdviprint です。 +指定は絶対パスで行ないます。(実行時にリソース等でも変更できます) + + また、PRINTDVI 機能を使う場合は texk/xdvik/xdvi-config.h の +PRCMDALL, PRCMDCUR, PRCMDMRK, PRCMDRGN, PRCMDLST, TEMPDIR, DVIFILTERCMD, +FILTOPTTBLFILE の各マクロを自分の環境に合わせて変更して下さい。configure +では変更できません。 + + +★印刷に使う DVI→PS フィルタ + + --with-dvifilter=dvips dvips (デフォルト) + --with-dvifilter=dvi2ps dvi2ps + --with-dvifilter=jdvi2kps jdvi2kps + --without-dvifilter xdvi から印刷機能をなくします。 + + この指定は、上述オプションで DVISEL と PRINTDVI のどちらを指定したか +で意味が変わります。 + + DVISEL の場合、この指定に合わせたサンプルスクリプトを上述の + --enable-xdviprintで指定したパスにインストールします。既にインストール +されてる場合は上書きしませんので、この指定は意味をしません。DVISEL は +xdvi バイナリ内にはプリンタドライバの違いは含めず、全て外部スクリプトで +違いを吸収します。スクリプトなので、インストール後でも変更可能です。 + + PRINTDVI の場合、この設定を xdvi バイナリ内に埋め込み、xdvi はデフォ +ルトでここで指定したプログラムを起動するようになります。(実行時にリソース +等でも変更可能) + + また、--without-dvifilter を指定した場合は、DVISEL 機能も PRINTDVI 機能 +も使いません。 + + +★設定ファイル等のインストールディレクトリ + + --enable-xdvietcdir=/etc/tex 設定ファイル等のディレクトリ指定 + + vfontmap や xdvipaper.dvips 等のオプションテーブルがインストールされる +ディレクトリを指定します。デフォルトは /usr/local/share/texmf/xdvi です。 + + + +【特殊な設定をする場合】 + + これら以外の設定をする場合は、texk/xdvik/ 以下の Makefile や xdvi-config.h +を変更して下さい。 + + また、「うちはまだ TeX 2.99 (ASCII jtex-1.7 等) を使ってて kpathsea +なんてないよ」という方は、是非とも TeX 3.x (ASCII pTeX 2.x 等)のインス +トールをお勧めしますが、一応 kpathsea をインストールせずに動かす事も +出来るようです。:-) + この場合、まず texk/kpathsea/texmf.in の PKFONTS や TFMFONTS 等の +指定を自分の環境に合わせて書き換えます。例えば、 + +PKFONTS = .;/usr/local/lib/fonts/pk600;/usr/local/lib/fonts/pk300 + +とします。それから configure をして、static リンクで make すれば、OK +です。kpathsea 設定ファイルやライブラリ等がインストールされてなくても、 +ここに指定したディレクトリ(バイナリ埋め込みになる)を探します。他にも +mf がないのなら、--without-mktexpk-default や --without-mktexmf-default +なども指定しておいた方がいいかも知れません。 + + +[3] 著作権について + + 本パッチはかなり多くの方々の総合著作物です。パッチの著作権はそれぞれ +のパッチ作成者にあります。詳しくは READMEs/ 以下のドキュメント群を参照して +下さい。 + + 本パッチの再配布は自由に行って構いませんが付属のドキュメント類 +(READMEs/ 以下のファイル)はそのままの形で添付してください。また改変 +も自由に行って構いませんが、改変したものを配布する場合は、 + + xdvi-jp メーリングリスト + +まで連絡頂けると幸いです。バグ報告、提案、その他の連絡等も上記までお願い +します。 + + また、開発に参加したい等、ML の subscribe 希望の方はまずは、guide と +だけ書かれたメールを までお送り下さい。 +こちらは xdvi-jp ではなく xdvi-jp-ctl です。 + +/* xdvi-jp メーリングリスト */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/ChangeLog.xdvik20a-j1.1 xdvik-22.40y1/texk/xdvik/READMEs/ChangeLog.xdvik20a-j1.1 --- xdvik-22.40y1.orig/texk/xdvik/READMEs/ChangeLog.xdvik20a-j1.1 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/ChangeLog.xdvik20a-j1.1 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,132 @@ +xdvik20a-j1.1 変更履歴 + 千葉大学総合情報処理センター 山賀正人 + + +* xdvik20a-j1.1 ---> xdvik20a-j1.1p1 (15/5/97) + + DVIFILTERCMD に jdvi2kps を指定した場合のオプションが不正であったのを + 修正 (xdefs.make) + ※ すずきとおる さん のご指摘によるものです。 + + VI_KEY を定義したときにカーソルキーが無効になってしまうバグの修正 + (xdvi.c) + ※ 永江@九工大 さん からの情報です。 + + +* xdvik20a-j1.1p1 ---> xdvik20a-j1.1p2 (6/6/97) + + wwwlib との不整合を修正 (markring.h) および linux でコンパイル可能に + ※ 内山@慶應大 さん からのいただいたパッチです + + 竹中@東大さんによる xdvi-17jp.960209 の color special 対応部分を適用 + ※ 上坂@東北大さん からいただいた xdvik-18f に対するパッチを + 使わせていただきました。 + + +* xdvik20a-j1.1p2 ---> xdvik20a-j1.1p3 (14/6/97) + + SunOS 4.1.x でカラー表示しようとすると core dump するバグの修正 + (special.c) + + +* xdvik20a-j1.1p3 ---> xdvik20a-j1.1p4 (18/6/97) + + (ecl)epsf.sty を使って挿入する PS ファイルの height や width を + 指定するとその指定が以後も有効になってしまうバグの修正 (special.c) + ※ 嵯峨田@NTT さん からいただいたパッチです。 + + +* xdvik20a-j1.1p4 ---> xdvik20a-j1.1p5 (23/6/97) + + BSD/OS V2.1 でもコンパイルできるように + (config.h, sfinternal.h, markring.c) + ※ 萩平@大阪大学医学部麻酔(ICU) さん からいただいたパッチです。 + + +* xdvik20a-j1.1p5 ---> xdvik20a-j1.1p6 (24/6/97) + + epsbox.sty の BoundingBox の計算が不正になるバグの修正 (special.c) + ※ 岡久@愛媛大 さん によるパッチです。 + + fj.comp.texhax + <5oim44$6dj@news.cs.ehime-u.ac.jp> + + +* xdvik20a-j1.1p6 ---> xdvik20a-j1.1p7 (30/6/97) + + 竹中@東大さんによる xdvi-17jp.960209 の color special 対応 + 部分のうち、eclcolor.sty 対応部分を適用 (special.c) + + LaTeX 2.09 + dvips で使われる colordvi.sty への対応 (special.c) + + +* xdvik20a-j1.1p7 ---> xdvik20a-j1.1p8 (2/8/97) + + VFlib を使うか否か、日本語多書体表示機能を使うか否か、更に + dvi --> ps フィルタとして何を使うかを全て configure スクリプトの + オプションで指定できるように (configure.in, withenable.ac, config.h) + + epsbox.sty の \special に対して *.ps という名前の PostScript ファイル + しか受け付けないバグの修正 (special.c) + + +* xdvik20a-j1.1p8 ---> xdvik20a-j1.1p9 (16/10/97) + + オリジナルの xdvik-20a から存在した、epsf.sty と LaTeX2e の graphicx + パッケージに対する special の解釈部分 epsf_special() にあったバグを + 修正 (special.c) + + +* xdvik20a-j1.1p9 ---> xdvik20a-j1.1p10 (8/11/97) + + graphicx パッケージの \resizebox や \scalebox の中で取り込んだ + eps ファイルを表示しない(gs などを起動しない)ようにした場合に + 代わりに表示される枠線が正しく表示されるように (special.c, + psgs.c, psdps.c, psnews.c) + + +* xdvik20a-j1.1p10 ---> xdvik20a-j1.1p11 (25/11/97) + + vfontmap の検索について、カレントディレクトリを最優先するように + (vfontmap.c) + + dvi ファイルを読み込んでページ数に変更があった場合は TOC のスク + ロールバーを含めて表示し直すように (toc.c) + + +* xdvik20a-j1.1p11 ---> xdvik20a-j1.1p12 (30/12/97) + + sizeof(long) が 4 より大きい場合 (OSF1 など) に対応 (zeit.c) + + vfontmap まわりの無駄にメモリを消費している部分を大幅に書き換え + (dvi_init.c, zeit.c, vfontmap.c, xdvi.h) + +* xdvik20a-j1.1p12 ---> xdvik20a-j1.1p13 (04/01/98) + + default の DVIFILTER を dvi2ps から dvips に変更 (config.h) + + vfontmap まわりを更に修正 (zeit.c) + + dvips をフィルタとして使うように -f オプションを追加 (config.h) + + +* xdvik20a-j1.1p13 ---> xdvik20a-j1.1p14 (10/01/98) + + xmalloc の使い方を間違っているため、Segmentation Fault する + バグの修正 (vfontmap.c) + + ※ 永江@九工大 さん からいただいたパッチです。 + + +* xdvik20a-j1.1p14 ---> xdvik20a-j1.1p15 (16/01/98) + + epsbox.sty で取り込んだ複数の画像を表示しようとすると + "Too many open files" とエラーメッセージを出して表示できない + バグの修正 (special.c) + + fj.comp.texhax + <69cfvc$shr$1@picard.cs.osakafu-u.ac.jp> + <69hsme$64j$1@pine.cix.chiba-u.ac.jp> + + sscanf() の実装を勘違いしていたために BoundingBox のスケールを + 正しく読み取れなかったバグの修正 (special.c) diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/ChangeLog.xdvik20c-j1.0 xdvik-22.40y1/texk/xdvik/READMEs/ChangeLog.xdvik20c-j1.0 --- xdvik-22.40y1.orig/texk/xdvik/READMEs/ChangeLog.xdvik20c-j1.0 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/ChangeLog.xdvik20c-j1.0 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,34 @@ +xdvik20c-j1.0p0.patch 変更履歴 + 筑波大学 社会工学研究科 中右 浩二 + +● xdvik20c-j1.0p0a (1998/4/20) + ファイルの添付 + README.xdvik20c-j1.0p0.patch + ChangeLog.xdvik20c-j1.0 + +● xdvik20c-j1.0p0b (1998/4/24) + xdvi のバージョン表記変更 + (いちかわ@岐阜大さん) + +● xdvik20c-j1.0p0c (1998/4/24) + xdvi.c の prog_cflags での文法誤りを訂正 + (すずき@海洋情報研究センターさん) + +● xdvik20c-j1.0p0d (1998/5/19) + Makefile.in での変数名の誤りを訂正 + (仁科@ATR人間情報通信研究所さん) + +● xdvik20c-j1.0p0e (1999/1/20) + xdvi/Makefile.in での変数名の誤りを訂正 + xdvi/configure での文法誤りを訂正 + (古高@JNCさん) + +● xdvik20c-j1.0p0f (1999/2/28) + SMALL_PANEL 指定時のボタン名を復活(pl18当時分へ) + 対象ファイル:xdvik/events.c, xdvik-20c/xdvik/toc.c + (萩平@大阪府立羽曳野病院さん) + +● xdvik20c-j1.0p1 (1999/2/28) + JIS 補助漢字を利用するための修正 + 対象:xdvikの dvi_draw.c, dvi_init.c, vf.c, xdvi.h + (内山@慶応大さん) diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/ChangeLog.xdvik22.40-j1.05 xdvik-22.40y1/texk/xdvik/READMEs/ChangeLog.xdvik22.40-j1.05 --- xdvik-22.40y1.orig/texk/xdvik/READMEs/ChangeLog.xdvik22.40-j1.05 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/ChangeLog.xdvik22.40-j1.05 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,69 @@ +/* ******************* * + * xdvik-jp 変更履歴 * + * ******************* */ + +◆[2001-07-08] xdvik-22.40-j1.05 (by Kenta MURATA ) + + ○ xdvik-22.15-j1.04 を 22.40b 用に改変. + +◆[2000-07-18] xdvik-22.15-j1.04 (by xdvi-jp ML) + + ○ 山賀さんの epsbox_special() の修正。 + ○ 稲垣さんの縦書き仕様のフォントを指定する場合には vfontmap の第3引 + 数を付ける修正。 引数は何でもよい。 + ○ 大河さんのbig endian なマシンで回転した文字が黒い箱になる不具合の修 + 正。 + ○ 佐藤さんのPSNFSSを使用する場合に、\fontsize の指定が5倍異なる文字を + 混在する際に、小さい文字が大きな文字で表示される不具合の修正。 + ○ zoomのボタンまたはキーで拡大・縮小した後に, `10s`のように`s`でshrink + を指定すると最後のzoomのフォントサイズをひきずる不具合の修正(by 大河 + さん & 内山)。 + +◆[1999-10-04] xdvik-22.15-j1.03 (by xdvi-jp ML) + + ○ ベースを xdvik-22.15 に変更。 + ○ \scalebox{} と \rotatebox{} の special に対応。 + ○ 日本語 TFM フォントがなくても virtual font を探すように変更。 + ○ sizeof(int) != sizeof(long) の OS で日本語フォントを表示すると core + dump する事がある問題を修正。 + ○ VI_KEY を define してると矢印キーが効かなかった問題を修正。 + ○ PTEX と TEXXET を共存可能に。 + ○ dvips は B4 にも対応してるぞ対策。 + ○ ホイールマウス対応。(縦方向のみ) + + +◆[1999-03-19] xdvik-22.02-j1.02 (by 渡辺@神戸大) + + ○ ベースを xdvik-22.02 に変更。 + ○ はやし@姫路工業大学 さん作の hal2 パッチの一部をマージ。(ZOOM_BUTTON) + ○ PRINTDVI 機能の改良(?)版 DVISEL 機能を追加。 + ○ カラー表示時のアンチエリアシング対応。 + ○ use_grey と use_color の共存を可能に。 + ○ HSB カラーモデルや background special に対応。 + ○ configure の設定項目を追加。 + ○ ページ数のバラバラな DVI でページ数表示桁数がおかしくなるのを修正。 + ○ 「XDvi*international: True」時に文字位置がおかしいのを修正。 + ○ 8x16 フォントを指定すると、TOC の表示がはみ出すのを修正。 + ○ ペーパーサイズを変えてもスクロールバーの移動範囲が古いサイズのまま + だったのを修正。 + ○ 1ページ目が複数ある DVI で First ボタンで最初のページに行かないのを修正。 + ○ VI_KEY を define した時でも man の移動キーの記述がデフォルトのまま + だったのを修正。 + ○ 一つの color 指定が2ページにまたがってる場合にページ頭で元の色に + 戻ってしまうのを修正。 + + +◆[1999-02-28] xdvik20c-j1.0p1 (by 中右@茨城大) + + ## この系列の変更履歴は READMEs/ChangeLog.xdvik20c-j1.0 を御覧下さい。 + + +◆[1998-01-16] xdvik20a-j1.1p15 (by 山賀@千葉大) + + ## この系列の変更履歴は READMEs/ChangeLog.xdvik20a-j1.1 を御覧下さい。 + + +## これより古いものに関しては混沌としています。詳しくは READMEs/ 以下の +## ドキュメント群をお読み下さい。:-) + +/* xdvi-jp メーリングリスト */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/HEADERS.DOC xdvik-22.40y1/texk/xdvik/READMEs/HEADERS.DOC --- xdvik-22.40y1.orig/texk/xdvik/READMEs/HEADERS.DOC 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/HEADERS.DOC 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,170 @@ +Path: tkyex1.phys.s.u-tokyo.ac.jp!news.u-tokyo.ac.jp!eccnews!ecc-s401!s31514 +From: s31514@secc.ecc.u-tokyo.ac.jp (s31514) +Newsgroups: fj.comp.texhax +Subject: a patch of xdvi PL18 for ASCII Nihongo TeX and VFlib 2.x +Message-ID: +Date: 1 Mar 95 08:55:27 GMT +Sender: news@secc.ecc.u-tokyo.ac.jp +Distribution: fj +Organization: Educational Computer Centre, The Univ. of Tokyo +Lines: 354 +Nntp-Posting-Host: ecc-1000 + +岡川@東京大学です。 + +今朝は外が雪で、外に出るのがおっくうだったので、 +xdvi-17miyu.patch.beta6 の ASCII日本語TeX対応 + VFlib 対応部分を +xdvi PL18 に対応させたものを作成しました。(勿論、VFlib 2.x 対応に +してあります。) + +簡単なテストをしただけですが、(ASCII日本語TeX, NTT JTeX) で作成したdvi +を、(DNPフォント, VFlib)で表示する事に全ての組み合わせ(NTT JTeX+VFlib, +etc.) で成功しました。 + + + +インストールに関する memo +========================= +・VFlib 2.15.2 以降が必要です。(私は VFlib 2.16.2 を使用しました。) +・patchして、Imakefile を環境にあわせて変更し、xmkmf, make するだけです。 +・コンパイル時に通ってしまったので、下記のパッチには含まれていませんが、 + zeit.c に #include "VF.h" を加えて、VFlib の VF.h を読み込まないと + コンパイルできない場合があり得ます。 +・porting & test は Linux 1.1.84 + gcc 2.5.8 で行いました。 + Linux + gcc 2.6.x では xdvi PL17+miyu.patch+VFlib 2.x はうまくコンパ + イルできない事が報告されておりますし、このパッチを当てた xdvi PL18 も + 同様でした。(dvi_draw.cがうまくコンパイルできていないらしい) + +#「おっくう」と言いつつ、postする為に学校に来てしまいました。(^^; +======================================================================= + 岡川 宏@東京大学理学部物理学科4年 + okagawa3%tkyvax.decnet@tkyux.phys.s.u-tokyo.ac.jp + (1995年3月まで) + okagawa%tkyvax.decnet@tkyux.phys.s.u-tokyo.ac.jp + (1995年4月より) +======================================================================= + +Newsgroups: fj.comp.texhax +Path: tkyex1.phys.s.u-tokyo.ac.jp!news.u-tokyo.ac.jp!wnoc-tyo-news!wnoc-sfc-news!wnoc-kyo-news!aist-nara!odins-suita!icluna!uchiyama +From: uchiyama@bacchus.in.kobe-u.ac.jp (Takanori Uchiyama) +Subject: Re: a patch of xdvi PL18 for ASCII Nihongo TeX and VFlib 2.x +Sender: news@icluna.kobe-u.ac.jp (news-admin) +Message-ID: +In-Reply-To: miyu@shiratori.riec.tohoku.ac.jp's message of 13 Mar 1995 05:46:33 GMT +Date: Mon, 13 Mar 1995 09:59:33 GMT +Distribution: fj +References: + + +Organization: Akazawa Lab. Dept. Comp. & Systems, Fac. Eng., Kobe Univ., Kobe, + JAPAN +Lines: 3813 + +内山@神戸大です. + +先日, ポストした epsbox.sty を使って差し込んだ EPS を表示するパッチで +すが, 投稿前に余計なことをしたばかりに, エンバグしてしてしまいました. +dvi2ps-j に含まれている epsf.sty を使って差し込んだ EPS を表示するパッ +チを付加したので, 欲張って vi ライクなキーバインド VI_KEY, DVI ファイ +ルをメニュー形式で選択する SELFILE のパッチも付加しました. + +オリジナルの xdvi PL18 のソースに, 岡川さんのパッチをあてた後に, 以下 +のパッチをあててください. 先日の epsbox.sty のためのパッチは, あてない +でください. + +Imakefile に VI_KEY, SELFILE を指定しています. 適宜はずなり残すなりし +て下さい. + +それから, PL18 からは, リーソスを読むようになっています. +私は +/usr/X11/lib/X11/app-defaults/XDvi に +XDvi.shrinkFactor: 5 +XDvi.postscript: off +などのように記述しておきました. 前者は, shrink size を 5 に(400dpi の +フォントを使っている場合に, 1280x1024 で A4 が画面におさまる), 後者は, +起動時には EPS や PS の表示を行なわない指定です. + +それから, X server が 16bpp の時にとんでもない量のメモリを要求した件は, +なぜか発生しなくなってしまいました. きっと私がぼけていたのでしょう. + +In article miyu@shiratori.riec.tohoku.ac.jp (Shigeki "miyu" SUGIURA) writes: + + miyu17beta.6 は少なくともバグありです。多分それが原因でしょう。 + miyu17beta.pre7 用のパッチが出ています。 + +もう一度 beta.pre7 で試してみます. どうもありがとうございます. + +Newsgroups: fj.comp.texhax +Path: tkyex1.phys.s.u-tokyo.ac.jp!news.u-tokyo.ac.jp!wnoc-tyo-news!aist-nara!odins-suita!icluna!uchiyama +From: uchiyama@bacchus.in.kobe-u.ac.jp (Takanori Uchiyama) +Subject: Re: a patch of xdvi PL18 for ASCII Nihongo TeX and VFlib 2.x +Sender: news@icluna.kobe-u.ac.jp (news-admin) +Message-ID: +In-Reply-To: uchiyama@bacchus.in.kobe-u.ac.jp's message of Thu, 23 Mar 1995 08:46:43 GMT +Date: Mon, 27 Mar 1995 06:41:43 GMT +Distribution: fj +References: + + + + + + + + +Organization: Akazawa Lab. Dept. Comp. & Systems, Fac. Eng., Kobe Univ., Kobe, + JAPAN +Lines: 2567 + +内山@神戸大です. + +In article uchiyama@bacchus.in.kobe-u.ac.jp (Takanori Uchiyama) writes: + + 先日, xdvipl18_epsbox+elepsf+selfile+vikey.patch をポストした後, + markpage+toc+printdvi を追加するパッチをメールで送っていただいたので, + それもあてて今は使っています(640x480 でもボタンが画面からはみだすこと + がないようにするパッチも含まれています). + +上記のパッチを欲しいという方からメールをいただきましたので, パッチを送っ +ていただきました古畑@IBM基礎研さんの御許可の下, 代理投稿いたします. + +Newsgroups: comp.text.tex +Path: tkyex1.phys.s.u-tokyo.ac.jp!news.u-tokyo.ac.jp!newssinet!daffy!uwvax!zebu.heurikon.com!news.sprintlink.net!howland.reston.ans.net!math.ohio-state.edu!scipio.cyberstore.ca!vanbc.wimsey.com!news.bc.net!newsserver.sfu.ca!fornax!botein.cs.sfu.ca!patrice +From: patrice@botein.cs.sfu.ca (& Belleville) +Subject: Re: latex2e psTricks and xdvi +In-Reply-To: ram@cs.arizona.edu's message of 02 Apr 1995 02:05:18 GMT +Message-ID: +Sender: patrice@cs.sfu.ca (Patrice Belleville) +Organization: Simon Fraser University +References: +Date: 05 Apr 1995 16:59:07 GMT +Lines: 329 + +In article ram@cs.arizona.edu (Achyutram Bhamidipaty) writes: + + > I'm using the very useful psTricks set of macros by Timothy Van Zandt + > and I'm running into an annoyance. + > + > When I use some of the special macros I can no longer use xdvi to view + > my files. Is there something I need to do to make this work? Or is it + > an impossibility? Thanks for any clues or hints. + + The problem is that pstricks requires a PS header file to be +loaded. It is normally included at the beginning of your .ps file, and +contains code required used later on by PStricks. Since xdvi does not +support the "header=" special, it does not load this file and hence the +bits of postscript included by PStricks fail. + + I modified the latest version of xdvi to handle the "header=" +special. HOWEVER my changes only work with gs at the moment (if you want +to use DPS or News, you would need to adapt the changes I made to psgs.c, +which simply consist of detecting when the PostScript interpreter is +initialized and calling psh_includeall). I have included the context diffs +below. You will need to apply them and recompile xdvi. + +Disclaimer: these changes seem to work for me. Xdvi might still get +confused at times, but I believe that this is not caused by the changes I +made. + + Good luck, + Patrice diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/InternalVars xdvik-22.40y1/texk/xdvik/READMEs/InternalVars --- xdvik-22.40y1.orig/texk/xdvik/READMEs/InternalVars 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/InternalVars 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,56 @@ +------------------------------------------------------------------------ + <<<< Internal Variable for printdvi patch >>>> +------------------------------------------------------------------------ + +%A : like %T; '=' is put on each page number (assumed dviselect) +%a : like %t; '=' is put on each page number (assumed dviselect) + B + b + C +%c : current page number +%D : temporal directory (environment var. TMPDIR; default is "/tmp") +%d : directory where DVI file is placed (directory of pathname) + E +%e : end page number of region; maximum of %c and %m +%F : filename of DVI file (basename of pathname) +%f : filename of DVI file (full pathname) +%G : like %O; page-to-page form (=p1:p2) (assumed dviselect) +%g : like %o; page-to-page form (=p1:p2) (assumed dviselect) + H + h + I + i + J + j +%K : like %L; '=' is put on each page number (assumed dviselect) +%k : like %l; '=' is put on each page number (assumed dviselect) +%L : marked page list; marked order; separated by " " +%l : marked page list; marked order; separated by "," + M +%m : last marked page number + N + n +%O : marked page list; sorted; page-to-page form (p1-p2); separated by " " +%o : marked page list; sorted; page-to-page form (p1-p2); separated by "," +%P : print command (environment var. PRINTCMD; default is "lpr -r -s -P%p") +%p : printer name (environment var. PRINTER; default is "lp") + Q + q +%R : DVI filter (environment var. DVIFILTER; default is "dvi2ps -o %Z") +%r : proces id + S +%s : start page number of region; minimum of %c and %m +%T : marked page list; sorted; separated by " " +%t : marked page list; sorted; separated by "," + U + u + V + v + W + w + X + x + Y + y +%Z : paper size specified with -paper option (tranlated with table) +%z : paper size specified with -paper option (lower case; ex. "a4") diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/README.jp+toc+hal2 xdvik-22.40y1/texk/xdvik/READMEs/README.jp+toc+hal2 --- xdvik-22.40y1.orig/texk/xdvik/READMEs/README.jp+toc+hal2 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/README.jp+toc+hal2 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,57 @@ +やーどうもどうも。このパッチは xdvi-17 にあてるパッチでっす(ver1.2)。 + +[ver1.1] +○竹中@東大さんの xdvi-17jp.960209 + と +○小野@早稲田大さんの xdvi-17+markpage+toc+printdvi+paper (+patch1) + を含み、更に +α したパッチでっす。 + + どこが +α かというと、前々から button 周りが気に入らなかったので、 + +○"shrink1" とかのボタンをなくし、xv とか他のツールでもよく使われている、 + "<"で縮小、">"で拡大 の機能をつけ、button 部もそれに対応させた + + と、ちょっといぢってたんです。ただこの "<" ">" は、+markpage… パッチで、 + toc 部で page ジャンプ(文章頭へ/文章末へ)に使われていたので、 + 今回、toc 部での page ジャンプは、文章頭="T"(Top)/文章末="B"(Bottom)に + 変更させて頂いたですます。 + + あとさらに、画面の小さいノートパソコンで xdvi を使うと、折角の button が + 画面下に切れて使えねー(苦笑)ってことがあるので、問題なく使えるように、 + button を小さくなるように書き換えていたんですが、今回、 + +○古畑@IBM基礎研さん + + が xdvi-18 でやっておられるのを参考にして、Imakefile で #define SMALL_PANEL + すると、button+toc んとこが小さくなる様に書き換えたでっす。 + +○toc部のページ数表記、tasai-ussy パッチを使うと実ページ数になるけど、 + 表記時、最初のページ番号と最後のページ番号を取ってきて、桁数見て + 出力format作ってるんで、ページ番号がバラバラな .dvi なら、途中にいくら + 100000p とかあっても、最後のページが 2p とかなら、1桁でしか出力されない。 + そこんとこを直した。 + +さらに、変数の定義とかの細かい部分をちょいと直して、またオリジナルの現行の +xdvi-21を参考にして、多少の修正を加えたものなのねん。本当は全面的に xdvi-21 +化しようかと思ったけど、どーも暑くて集中力がなくて…(苦笑)。 +一応 FreeBSD-2.1.5 の ports を参考にしてますが、FreeBSD でちゃんと通るか +どうかは一抹の不安…。前に作ってた version は変なところで compile がコケて +たもので(苦笑)。さ、今晩帰って確かめようっと。 +Solaris2.3(gcc)/HPUX-9.07(gcc。ccはX関連でmake出来ん)では通るのは +確認してますです。あ、Imakefile はうちの環境に合わせてあるので、 +各自、修正してちょ。 + +あとは xdvi-21から、\special コマンドに対応するルーチン(special.c)を +組み込むくらいかな…って面倒だなぁ(苦笑)。 + +[ver1.2] +ってことで FreeBSD 対応にしてみました。…って何も変わりはないかも(苦笑)。 +一応、FreeBSD-2.2.2-RELEASE(+PAO-970616) で確かめてます。 +/usr/include/* と package で install した /usr/X11R6/include と conflict +する typedef とかあるです。と、PRINTDVI は使わない方がいいかも知れません +です。dvi2ps とかの設定も必要だし、含めると make depend でエラーったり、 +いろいろ文句いわれるし(苦笑)。 +えと、うちの環境は、600dpi で、platex-2e(2.09互換)で使ってます。 +TEXLIB とか tfm(jfm)の PATH とかいろいろ変えてちょ。 + +/* はやし はるひさ hayashi@himeji-tech.ac.jp 08Aug97 */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/README.jp-patch xdvik-22.40y1/texk/xdvik/READMEs/README.jp-patch --- xdvik-22.40y1.orig/texk/xdvik/READMEs/README.jp-patch 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/README.jp-patch 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,778 @@ + + << xdvi PL17 jp-patch について >> + + 1996/02/09 + 竹中 浩 + lh36112@hongo.ecc.u-tokyo.ac.jp + KHB11235@niftyserve.or.jp + + + +[0] 目次 + + [1] xdvi PL17 jp-patch とは + + [2] インストール + [2.1] ファイルの入手 + [2.2] パッチをあてる + [2.3] コンパイルの準備 + [2.3.1] Imakefile の編集 + [2.3.2] Makefile の生成 + [2.4] コンパイル + [2.5] インストール + [2.6] トラブル・シューティング + [2.7] xdvi-17+markpage+toc+printdvi+paper patch を使いたい + + [3] 各パッチの詳細 + [3.1] ASCII pTeX の縦組み拡張 DVI への対応 + [3.2] ps ファイルのカラーでのプレビュー + [3.3] postscript special の追加 + [3.4] color special 対応 + [3.5] DVI ファイル中の文字列の検索機能 + [3.6] -remote オプションの追加 + [3.7] VFlib version 2.x への対応 + [3.8] less 互換のマーク機能 + [3.9] tpic2.2 への対応。 + [3.10] DVI ファイルをメニュー形式で選択する + [3.11] ASCII "日本語" TeX 対応 + [3.12] Zeit の書体倶楽部などのアウトライン・フォント対応 + [3.13] ghostscript を利用して postscript ファイルを表示する + [3.14] dvips 附属の epsf.sty への対応 + [3.15] jdvi2kps で処理する psfrag への対応 (バグあり) + [3.16] "PS Fig" ボタンの追加 + + [4] 著作権について + + +[1] xdvi PL17 jp-patch とは: + + かつて fj に投稿された xdvi 用の様々なパッチをベースに、東北大学の杉 + 浦茂樹さんが xdvi PL17 用に作られたパッチ・キット + miyu patch for xdvi PL17 に、いくつかの機能を加えたものが本パッチ・ + キット xdvi PL17 jp-patch です。 + + miyu-patch for xdvi PL17 から追加された機能は、 + + 1. ASCII pTeX の縦組み拡張 DVI への対応。 + 2. ps ファイルのカラーでのプレビューを可能にした。 + 3. 理解できる postscript special を増やした。 + 4. color special への対応 + 5. DVI ファイル中の文字列の検索機能。 + 6. -remote オプションの追加。 + 7. VFlib version 2.x への対応。 + 8. less 互換のマーク機能。 + + の 8 点です。また、従来から miyu-patch に含まれていた、 + + 9. tpic2.2 への対応。 + 10. DVI ファイルをメニュー形式で選択する。 + 11. ASCII "日本語" TeX 対応。 + 12. Zeit の書体倶楽部などのアウトライン・フォント対応。 + 13. ghostscript を利用して postscript ファイルを表示する。 + 14. dvips 附属の epsf.sty に対応するためのパッチ + 15. jdvi2kps で処理する psfrag への対応 (バグあり) + 16. "PS Fig" ボタンの追加 + + は、本パッチでもそのまま引き継いでいます。 (ただし 13. については + miyu-patch のものと同等のルーチンを竹中が新たに作り直しています。 + + それぞれのパッチの詳細、特に本パッチ・キットで新たに加わった 8 つに + ついては、「[3] 各パッチの詳細」を参照してください。 + +[2] インストール + + [2.1] ファイルの入手 + + インストールに最低限必要なファイルは、 + + * xdvi-17.tar.gz + オリジナルの xdvi PL17 のソースです。 + ftp://ftp.tohoku.ac.jp/pub/tex/dviwares/xdvi/PL17 などの + anonymous ftp などから入手できます。 + + * xdvi-17jp.YYMMDD.gz + 本パッチ・キット。"YYMMDD" には 960209 のような日付が入ります。 + + さらにアウトライン・フォントを使用する場合には角川@広島大学さんが + 作成された VFlib の version 2 以降がインストールされている必要があ + ります。miyu patch にあった version 1.x 用のルーチンは残してありま + すが ([3.7] 参照)、ちゃんとテストしてないので、上手く動くかどうか + 保証できません。 + + VFlib のインストールについては、VFlib 付属のドキュメントに従ってく + ださい。VFlib は + + ftp://gull.se.hiroshima-u.ac.jp/pub/VFlib + + などの anonymous ftp などから入手できます。 + + また GNU のツールである gzip と patch も必要です。これを持ってない + 人は少ないと思いますが、持っていない人はこれを機会に入手しておきま + しょう。いずれ絶対に必要になるはずです。 + + [2.2] パッチをあてる + + * まず適当な作業用ディレクトリを作成して、そこに移動します。 + * 次に xdvi-17.tar.gz を展開します。 + * 最後に本パッチを適用します。 + + たとえばカレント・ディレクトリに xdvi-17.tar.gz と本パッチが存在 + し、カレント・ディレクトリの下に xdvi-17 という名前で作業用の ディ + レクトリを作成する場合には、以下の例のように作業します。 + + < 実行例 > + + % set srcdir=$pwd + % mkdir xdvi-17 + % cd xdvi-17 + % gzip -dc $srcdir/xdvi-17.tar.gz | tar xf - + % gzip -dc $srcdir/xdvi-17jp.960209.gz | patch -p1 + + [2.3] コンパイルの準備 + + システムに応じて Imakefile を編集した後、xmkmf を実行して Makefile + を生成します。 + + [2.3.1] Imakefile の編集 + + インストール時に設定が必要と思われる項目は Imakefile の先頭にま + とめてあります。以下の説明に従い、自分の環境にあわせて Imakefile + を編集してください。 + + 実際には、ここで説明しているより多くの項目を設定できますが、 + 普通はそれらの項目はデフォルトから変更する必要はないと思いま + す。 もしも変更したい場合には、オリジナルの xdvi PL17 に附属 + している README を参照してください。 + + + * 日本語対応関係の項目 + + Use_Kanji, Use_ASCIIDNP, Use_ZEIT, Use_NTTZEIT + + の 4 つがあります。以下の 4 通りのケースの中から、自分の環境に + あった設定を選んでください。 + + ---------------------------------------------------------------- + 1. NTT-JTeX で作成された DVI ファイルを NTT-JTeX 用の大日本印 + 刷フォント (または渡辺フォントなど互換フォント) を用いて表 + 示し、ASCII TeX には対応しない場合 + + --> すべてを #undef してください。 + ---------------------------------------------------------------- + 2. NTT-JTeX、ASCII "日本語" TeX、および pTeX で作成された DVI + ファイルを NTT-JTeX 用の大日本印刷 (互換) フォントを用いて + 表示する場合 + + --> Use_KANJI と Use_ASCIIDNP を #define + それ以外は #undef + ---------------------------------------------------------------- + 3. NTT-JTeX で作成された DVI ファイルは NTT-JTeX 用の大日本印 + 刷 (互換) フォント、ASCII "日本語" TeX および pTeX で作成さ + れた DVI ファイルは Zeit の書体倶楽部などのアウトライン・フォ + ントを用いて表示する場合 + + --> Use_KANJI と Use_ZEIT を #define + それ以外は #undef + ---------------------------------------------------------------- + 4. NTT-JTeX, ASCII "日本語" TeX, および pTeX で作成された DVI + ファイルは Zeit の書体倶楽部などのアウトライン・フォントを + 用いて表示する場合 + + --> Use_KANJI, Use_ZEIT, Use_NTTZEIT を #define + それ以外は #undef + ---------------------------------------------------------------- + + Use_ASCIIDNP と Use_ZEIT は同時に指定することはできません。も + し両方とも同時に指定された時には、Use_ASCIIDNP が優先します + (2. と同じになる)。 + + 上記の 2, 3, 4 のどれかを選んだ場合には、さらに ASCII pTeX の + 縦組み拡張 DVI ファイルに対応させることができます。対応させた + い場合には、Use_PTEX を #define してください。対応させたくない + 場合には #undef です。 + + + * Use_MAKEPK + + Use_MAKEPK を #define すると、xdvi は足らないフォントがあった + 時に MakeTeXPK を用いて自動的にフォントを作成します。 + + MakeTeXPK がインストールされるディレクトリ MAKEPK_BINDIR と + makeTeXPK で作られたフォントを格納するディレクトリ + MAKEPK_DESTDIR を設定してください。 + + + * Use_SELFILE + + Use_SELFILE を #define すると、xdvi から DVI ファイルを開く時 + にメニューを使って選択することができるようになります。 + + + * Use_PS, Use_PSCOLOR, GHOSTSCRIPT_BINDIR + + Use_PS を #define すると ghostscript を用いて Postscript の図 + を表示することができるようになります。この場合、ghostscript が + 存在するディレクトリのパスを GHOSTSCRIPT_BINDIR に指定してくだ + さい。 + + Use_PSCOLOR を #define すると、カラーの図はカラーで表示されま + す。 + + + * Use_COLOR + + Use_COLOR を #define すると、latex2e の graphics パッケージや、 + eclcolor.sty などで使用されている color special 命令の一部 + ([3.4] 参照) に対応して、カラーでの表示が可能になります。 + + + * Use_VIKEY + + ウィンドウ移動のキー・バインディングを vi ライクなものにしたい + 場合には #define してください。 + + + * Use_SEARCH + + dvi ファイル中の文字列検索機能を有効にしたい場合には #define + してください。 + + + * Use_REMOTE + + -remote オプションを使った他プログラムからの xdvi の制御機能を + 有効にしたい場合には #define してください。 + + + * フォントのサーチ・パスの設定 + + xdvi が表示に使うビットマップ・フォント (GF, PK, PXL フォント) + を探すパスは、 + + DEFAULT_FONT_PATH=.:/usr/local/lib/tex/fonts/pk + + などのように DEFAULT_FONT_PATH に指定します。 + + 日本語表示にアウトライン・フォントを使用する場合には、ここで + JFM ファイル (ex. min10.tfm, goth9.tfm, etc) の存在するディレ + クトリも一緒に指定しておく必要があります。 + + さらに、検索機能を使用する場合には欧文フォントの TFM の存在す + るディレクトリも指定した方がいいです。 + + + * virtual font のサーチ・パスの設定 + + virtual font を使用する場合には、virtual font のサーチ・パスを + + DEFAULT_VF_PATH=.:/usr/local/lib/tex/fonts/vf + + などのように、DEFAULT_VF_PATH に設定してください。 + + + * DEFAULT_VFONTCAPDIR + + アウトライン・フォントを使用する場合には、VFlib 2.x の設定ファ + イル vfontcap が存在するディレクトリを DEFAULT_VFONTCAPDIR に + 指定してください。 + + + * 表示解像度の設定 + + xdvi の表示の解像度は、 + + BDPI=300 + + のように BDPI に指定します。単位は DPI です。この指定が表示に + 使われるフォントの解像度の指定にもなります。 + + + * デフォルトの縮小率の設定 + + 300dpi などのフォントをそのまま画面で表示すると、普通は大きす + ぎるので xdvi は適当に縮小して表示します。縮小率のデフォルトは、 + + DEFAULT_SHRINK=4 + + のように DEF_SHRINK に指定します。数字が大きいほど縮小率が大き + くなります。好みにもよりますが、 + + 解像度が 240DPI なら DEFAULT_SHRINK=3 + 300DPI なら DEFAULT_SHRINK=4 + 400DPI なら DEFAULT_SHRINK=5 + + あたりが適当です。 + + + * MSBITFIRST, BMLONG, BMSHORT + + これらの設定は使用するマシンに依存します。 + + MSBITFIRST は Intel 80x86 以外では大抵の場合 #define する必要 + があります。 + + BMLONG, BMSHORT は設定してもしなくても動作しますが、適切に設定 + すると実行速度が著しく改善される場合があります。 + + + [2.3.2] Makefile の生成 + + Imakefile の設定がすんだら Makefile の生成を行ないます。 + + < 実行例 > + + % xmkmf + % make includes + % make depend + + [2.4] コンパイル + + 設定が終ったらコンパイルを行ないます。 + + < 実行例 > + + % make + + + [2.5] インストール + + 正常にコンパイルできたら, 実行ファイルおよびマニュアルのインストー + ルを行ないます。 + + < 実行例 > + + % make install + % make install.man + + 必要ならば, さらに MakeTeXPK のインストールも行なってください。 + + < 実行例 > + + % make install.MakeTeXPK + + + [2.6] トラブル・シューティング + + * 日本語の文字が全て黒い四角で表示されてしまう。 + + xmkmf して生成された Makefile の中に "-DNARROWPROTO" という記述 + がないかどうか調べてみてください。もし、あった場合にはこれを削除 + すると治る場合が多いようです。 + + * ghostscript の呼び出しに失敗する。 + + ghostscript.c の先頭に、 + + #define USE_DUP2 + #define USE_FCLOSE + + という部分があります。これを適当に #undef して試してみてください。 + それでもコケたら、竹中に連絡してください。 + + + [2.7] xdvi-17+markpage+toc+printdvi+paper patch を使いたい + + 従来の miyu-patch のあたった xdvi PL17 に対するパッチとして、 + 小野康一さん他による xdvi-17+markpage+toc+printdvi+paper patch が + あります。 + + このパッチを利用されている方は多いと思いますので、(ちゃんとテスト + したわけではありませんが) 本パッチでもこれを利用できるように一応配 + 慮しておきました。 + + とりあえず、xdvi-17+markpage+toc+printdvi+paper patch 付属のドキュ + メントを参考にして、ただし miyu-patch の代わりに本パッチを使って、 + ソース・ファイルを準備してください。 + + < 実行例 > + + % set srcdir=$pwd + % mkdir xdvi-17 + % cd xdvi-17 + % gzip -dc $srcdir/xdvi-17.tar.gz | tar xf - + % gzip -dc $srcdir/xdvi-17jp.960209.gz | patch -p1 + % gzip -dc $srcdir/xdvi-pl17+markpage+toc+printdvi+paper.patch.gz | patch -p1 + + + すると、Imakefile, xdvi.c, util.c の 3 つのファイルについては、パッ + チに失敗するはずです。このうち util.c については無視しても問題あり + ません。残りの Imakefile と xdvi.c について、Imakefile.rej, + xdvi.c.rej を参照して、手でパッチを当ててください。大した分量では + ないはずです。 + + あとは xdvi-17+markpage+toc+printdvi+paper patch のドキュメント、 + および本ドキュメントを参照して、インストールすれば良いはずです。 + + なお、 xdvi-17+markpage+toc+printdvi+paper patch の markpage 機能 + を有効にして make した場合には、「less 互換のマーク機能 ([3.8])」 + は無効になります。 + + +[3] 各パッチの詳細 + + [3.1] ASCII pTeX の縦組み拡張 DVI への対応 + + 原作者: 竹中@東大心理 + xdvi-17.miyu+ptex.patch (1995/11; fj.comp.texhax) + xdvi-17.miyu+ptex.patch.fixed (1995/11; fj.comp.texhax) + + ASCII pTeX が生成する縦組み拡張命令を含んだ DVI ファイルへの対応で + す。1995/11 版では縦組み拡張の仕様の解釈に誤りがあり、pLaTeX の一 + 部のマクロを使った際に正しく表示されませんでしたが、この version + から治っています。 + + また Use_ASCIIDNP を指定して大日本印刷 (互換) フォントで表示した場 + 合にもちゃんと(?)表示できるようにしました。 + + 本パッチで Use_PTEX を #define して縦組み拡張 DVI を表示する際には + 横組み用のフォントを適当に修正して使っています。このための修正情報 + のテーブルが tategaki.c に入ってます。大抵の場合にはデフォルトの設 + 定で、そこそこの表示ができるのではないかと思いますが、納得できない + 方はこの情報を修正してみてください。 + + struct TateCorrection TateCorrectionTable[] = { + { TCOR_NOP, 0, 0 }, + { TCOR_AUTOSHIFT, 0, 0 }, /* 2122 '、' */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2123 '。' */ + { TCOR_SHIFT, 64, 96 }, /* 2124 ',' */ + { TCOR_SHIFT, 64, 96 }, /* 2125 '.' */ + { TCOR_SHIFT, 42, 42 }, /* 2126 '・' */ + { TCOR_ROTATE, 0, 0 }, /* 2127 ':' */ + : + + 最初の項目(要素)で修正方法を指示します。指定可能な値は以下の通りで + す。 + + TCOR_NOP 縦組み用の修正をしない。 + TCOR_AUTOSHIFT 縦組み用に位置の移動を自動で行なう。 + TCOR_SHIFT 位置の移動を手動で行なう。 + TCOR_ROTATE 右に90度回転する。 + <文字コード (JIS)> その文字のフォントで代替します。 + + 2 番目、3 番目の要素の値が関係あるのは TCOR_SHIFT を指定した場合の + みです。この場合、2/3 番目の要素の値がそれぞれ x/y 方向への移動量 + となり、+/- 128 でフォントの高さの分だけ位置が左右/上下にずれます。 + + デフォルトの設定では TCOR_AUTOSHIFT と TCOR_ROTATE だけを使ってい + ます。 + + [3.2] ps ファイルのカラーでのプレビュー + + 原作者: 竹中@東大心理 + (fj 未投稿) + + 全然大したパッチじゃないです。単に GHOSTVIEW_COLORS プロパティを設 + 定するようになっただけです。 + + xdvi PL20 と同様の -gspalette オプション、および palette リソース + を用意しました。 + + "Monochrome" を指定するとモノクロ表示 + "Greyscale" を指定するとグレイスケール表示 + "Color" を指定するとカラー表示 + + になります (実際は最初の一文字だけで判断してます)。 + + [3.3] postscript special の追加 + + 原作者: 上原@京大基研さん + (fj 未投稿) + + 竹中@東大心理 + (fj 未投稿) + + 上原@京大基研さんから epsfig.sty 対応化パッチをいただきましたので、 + 追加しました。 + + あと、eclepsf.sty 対応の追加と、dvips 用の ps special の解釈を + より dvips のそれに近づけるようにする変更を加えています。 + + [3.4] color special 対応 + + 原作者: 竹中@東大心理 + (fj 未投稿) + + dvips, dvi2ps の color special に対応させました。ただし、HSB カラー・ + モデルには対応してません。 + + * HSL -> RGB なら知ってるんですけど、HSB->RGB の変換式が分からな + いです。誰か教えてください。 + + dvips では named カラー・モデルも使えますが、この場合の色名は X の + 色名として解釈します。 + + Use_COLOR を指定して make してもデフォルトではカラー表示をしないの + で、オプション -usecolor 、または リソース colorSpecial: True で、 + カラー表示を指示する必要があります。この際、グレイスケール・アンチ + エイリアシングはオフになります。 + + [3.5] DVI ファイル中の文字列の検索機能 + + 原作者: 竹中@東大心理 + (fj 未投稿) + + '/' キーで前方検索、'?' キーで後方検索ができるようになります。 + + 日本語が入力できないことも含めて、本当は検索文字列の入力部をもっと + ちゃんと作ってやんなきゃいけないんでしょうが、検索機能はどっちかと + いうと直接使うよりは [3.6] の -remote 機能のために作ったものなので、 + 手を抜いてます。ごめんなさい。なにもないよりマシだと思ってください。 + とりあえず、検索文字列を画面表示するためのフォントは .font リソー + スを見て決定するようにはなってます。 + + 検索文字列中の '\c' は 'c' と解釈します。また、空白文字、および単 + 独で現われたハイフンは無視します。ハイフンを無視するのは + hyphenation 対策として、DVI ファイル中のハイフン文字を無視している + からです。無視されるのは '-' だけなので、'--', '---' はその通りに + 打てば検索可能です。 + + 一方、DVI ファイルに含まれているテキストの方ですが、TeX で使われる + フォントは、ものによってコーディング・スキームが違ったり、記号ばっ + かりが含まれていたりするので、DVI ファイル中で使用されているフォン + トの TFM ファイルからコーディング・スキームの情報を取得しています。 + ただし、標準的な TeX フォントについては、コーディング・スキームの + 情報を自前で持っているので、普通の TeX 文書をプレビューする限りは、 + 実際に TFM を読みに行くことはないと思います。 + + TFM が見つからない、見つかってもコーディング・スキームが指定されて + いない、あるいは未知のコーディング・スキームが用いられているという + 場合には、ASCII 文字セットのアルファベットと数字だけが入っていると + 仮定し、他の文字コードの文字は無視します。 + + * 現状では検索ルーチンがおバカさんなので少々遅いです。 + あと、本当はユーザーがコーディング・スキームの定義や、グリフと + 検索文字列の対応を定義ファイルかなんかで指定できるようにするべ + きなのでしょう。 + + [3.6] -remote オプションの追加 + + 原作者: 竹中@東大心理 + (fj 未投稿) + + Netscape の -remote オプションと同じものを xdvi にもつけてみました。 + + % xdvi -remote 'Command' foo.dvi + + とやると、ディスプレイ上で現在 foo.dvi を表示している xdvi にコマ + ンドを送ることができます。dvi ファイルの名前はディスプレイ上に複数 + の xdvi が存在する時の識別子として使われるので省略できません。 + + 使えるコマンドは以下の通りです。 + + OpenFile(foo.dvi) foo.dvi を開く。 + 引数を省略した場合はファイル選択メニュー + を表示する。(Use_SELFILE が必要) + + Quit 終了する。 + + Page(num) num ページ目を表示。 + + NextPage(num) num ページ後のページを表示。 + num を省略した場合は num = 1 と同等。 + + PrevPage(num) num ページ前のページを表示。 + + Search(String) 文字列 String を 1 ページ目から前方検索。 + String を省略した場合は、前回の検索文字列 + を使用します。 + + SEARCH(String) 同上 (大文字・小文字同一視)。 + + SearchFwd(String) 文字列 String をカレント・ページから前方 + 検索。 + + SEARCHFWD(String) 同上 (大文字・小文字同一視)。 + + SearchBwd(String) 文字列 String をカレント・ページから後方 + 検索。 + + SEARCHBWD(String) 同上 (大文字・小文字同一視)。 + + SloppySearch(String) 文字列 String を 1 ページ目から大ざっぱに + (本当に大ざっぱ!) 前方検索。 + + Raise xdvi のウィンドウを 1 番上にする。 + + 上の例では引数を () で囲んでいますが、()、[]、{}、またはコマンド名 + の後の最初の非空白文字で囲まれた部分を引数として認識します。また、 + 引数の中でバック・スラッシュ文字および ESC 文字が表われた場合には + 続く文字は、引数の終わりを示す文字とは解釈されません。 + + 検索系コマンドの引数に日本語を与える場合の文字コードは、オプション + -jcode、およびリソース Jcode で、JIS、EUC、SJIS のどれかを指定でき + ます。ただし、JIS コードは常に認識します。 + + リモート・コマンドを受け取った xdvi のウィンドウはデフォルトでは自 + 動的に raise しますが、オプション +noraise, -noraise、またはリソース + AutoRaise で、raise するかどうかを指定できます。 + + * 慶應大学の広瀬雄二さんにお願いして、Emacs 用 TeX モード『野鳥』 + の最新版 (ver.1.61) で、remote を使った検索に対応していただきま + した。野鳥は、 + + ftp://ftp.ae.keio.ac.jp/pub/emacs-lisp/text/yatex + + で手に入れることができます。 + + [3.7] VFlib version 2.x への対応 + + 原作者: 竹中@東大心理 + (fj 未投稿) + + 基本的には VFlib ver 2.x で関数名が変ったのに応じて、ソース中の関 + 数名を書き変えただけですが、同時に設定ファイル名が FontConf から + vfontcap に変ったのにあわせて、miyu-patch での -fontconf オプショ + ンと .FontConf リソースも、 -vfontcap、.vfontcap に変更しました。 + + VFlib ver 1.x 用のルーチンも残してあるので、Imakefile 中の + + #define VFLIB_VERSION 2 + + という行の 2 を 1 に変えれば make できると思いますが、動作確認はし + ておりません。なお、この場合にはオプション名、リソース名は従来通り + です。 + + あと JFM やアウトライン・フォントが見つからないと、いきなり + segmentation fault で落ちていたので、ちゃんとエラー・メッセージを + 出してから死ぬようにしておきました。 + + [3.8] less 互換のマーク機能。 + + 原作者: 竹中@東大心理 + (fj 未投稿) + + 「 m + 英小文字」で現在のページをマーク、「 ' + 英小文字」でマーク + したページにジャンプします。 + + [3.9] tpic2.2 への対応。 + + 原作者: 鷲坂@NTTさん + xdvi-16-tpic2.2 (1993/02; fj.sources.d,fj.comp.texhax) + xdvi-16-tpic2.2-fix1 (1993/02; fj.sources.d,fj.comp.texhax) + + [3.10] DVI ファイルをメニュー形式で選択する + + 原作者: 杉浦茂樹@東北大さん + 鈴木@情報科学.東京大学さん + (fj 未投稿) + + [3.11] ASCII "日本語" TeX 対応 + + 原作者: 野呂@富士通国際研さん + xdvi-16j.patch (1992/09; fj.sources) + + [3.12] Zeit の書体倶楽部などのアウトライン・フォント対応 + + 原作者: 林@静岡大学さん + xdvi-zeit (1993/08; fj.sources) + + [3.13] ghostscript を利用して postscript ファイルを表示する + + もともとの miyu-patch に含まれていたものは、 + + 森田@北陸先端大さん + xdvi-14jgs.patch (199?/??; ???) + xdvi-16jgs.patch-fix4 (1993/06; fj.sources) + xdvi-16jgs.patch-fix5 (1993/08; fj.sources.d) + + 仙田@京大さん + xdvi-16jgs.patch (1992/09; fj.sources.d) + + 升谷@阪大さん + xdvi-16jgs.patch-fix1 (1992/09; fj.sources.d) + xdvi-16jgs.patch-fix2 (1992/09; fj.sources.d) + + 木本豪@筑波大学さん + xdvi-16jgs.patch-fix3 (1992/09; fj.sources.d) + + のパッチに、さらに杉浦茂樹@東北大さんが手を加えられたものです。 + + ところが今回のパッチ・キットの作成にあたって、作者の皆様に収録許可 + のお願いメールを出したところ、森田@北陸先端大さんと木本豪@筑波大 + 学さんは当時のアドレスが既に無効になってしまっていたので、連絡を取 + ることができませんでした。 + + というわけで、本パッチ・キットに含まれているのは、同等のルーチンを + 竹中が新たに書き起こしたものです。ただし、杉浦茂樹@東北大さんの書 + かれたコードはそのまま利用させていただきました。また xdvi PL20 の + psgs.c に含まれていた _setenv() 関数を使用しています。 + + 従来の -ps, +ps オプション、及び psSpecial リソースに加えて、 + xdvi PL20 のものにあわせて以下のオプション、リソースを追加しました。 + + オプション リソース名 説明 + -interpreter interpreter Ghostscript のコマンド名を指定 + [-+]nogssafer gsSafer -dSAFER を指定して gs を起動 + -gspalette palette gs のパレットを指定 + + [3.14] dvips 附属の epsf.sty への対応 + + 原作者: 杉浦茂樹@東北大さん + 上原@京大基研さん + (fj 未投稿) + + [3.15] jdvi2kps で処理する psfrag への対応 (バグあり) + + 原作者: 杉浦茂樹@東北大さん + (fj 未投稿) + + [3.16] "PS Fig" ボタンの追加 + + 原作者: 杉浦茂樹@東北大さん + 山上@SONYさん + + [3.17] おまけ + + xdvi PL17 では、 + + % xdvi foo + + などとして起動した場合に、foo.dvi と foo の両方のファイルが存在す + ると、foo の方をオープンするので「DVI ファイルじゃないよん」と怒ら + れてしまいます。 + + オリジナルの xdvi の PL20 では、こういう場合 foo.dvi の方をオープ + ンするようになっているので、本パッチ・キットでも同じ仕様に変更いた + しました。 + + +[4] 著作権等について + + 「8. tpic2.2 への対応」のパッチに関しては、SeeTeX/Xtex/DviPage2.c か + らのコードを含んでいますので、本パッチ・キットを適用した後の tpic.c + の冒頭に引用されているオリジナルの Copyright Notice に従ってくださ + い。 + + 同様に「9. DVI ファイルをメニュー形式で選択する」のパッチも、 + "XsraSelFile File Selection Dialog Package" のコードを含んでいます。 + Dir.c, Draw.c, Path.c, SelFile.c がそれにあたります。これらのファイ + ルの冒頭には Copyright Notice がありますので、これに従ってください。 + + 「13. ghostscript を利用して postscript ファイルを表示する」のパッチ + のうち、ghostscript.c に含まれる _setenv() 関数は xdvi PL20 の + psgs.c に含まれていたものです。こちらもオリジナルの Copyright Notice + をソース中に引用しておきましたので、これに従ってください。 + + 杉浦茂樹@東北大さんの書かれたコードに関しては、 + + 「使用および個人的な改変は自由ですが、改変したものを再配布する場合 + には要連絡。なお、パッチの作成、および、コードの解析に基づくコード + の生成は自由」 + + とのことです。主に 10,13,14,15,16 のコードがこれに相当しますが、他の + 部分にも杉浦さんの書かれたコードが含まれているので、本パッチを改変し + たものを再配布する場合には、とりあえず杉浦さんに連絡してみてください。 + + 以上に述べたもの以外については、竹中が作者の皆様方から「基本的に自由 + に使ってもらって構わない」というお言葉を頂いております。「基本的に」 + の部分に関しては多少の違いがありましたが、最小公倍数としては、 + + 「ドキュメント中に名前とメール・アドレスを残してくれれば自由に使っ + てもらって構わない」 + + ということです。竹中作成のパッチについても、同様に扱ってください。た + だし、13 の ghostscript 対応については [3.13] で挙げた皆様方の作成さ + れたコードを参考に作ったものですから、竹中の名前だけでなく、これらの + 方々のお名前も一緒に含めてください。 + +-- END OF DOCUMENT -- diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/README.markpage+toc+printdvi xdvik-22.40y1/texk/xdvik/READMEs/README.markpage+toc+printdvi --- xdvik-22.40y1.orig/texk/xdvik/READMEs/README.markpage+toc+printdvi 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/README.markpage+toc+printdvi 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,200 @@ + + << xdvi-17+markpage+toc+printdvi patch について >> + + 1993/09/13 + 小野 康一 + onono@fuka.info.waseda.ac.jp + +○xdvi-17+markpage+toc+printdvi patch とは + xdvi-17 + miyu-patch for xdvi PL17 に対するパッチです。このパッチをあ + てて作った xdvi では、以下のような機能を使うことができます。 + + 1) Use_MARKPAGE + ページマーキング機能を、GNU Emacs のマークリング風に実現したものです。 + ページのマーク(`m',`a')/アンマーク(`U',`A')、マークしたページへの移動 + (`'',``')、マークしたページとカレントページとの交換('"')、マークを伴う + ページジャンプ('<','>')などを行なえます。 + また、2) の toc からのマーキングも可能です。 + + 2) Use_TOC + ページ番号リストを表示し、マウスでそのページをクリックすることで、その + ページへ移動(左ボタン)、そのページをマーク(真中ボタン)、アンマーク(右 + ボタン)することができます。ドラッグにより、連続するページをマーク/アン + マークすることもできます。 + + 3) Use_PRINTDVI + `o' または Print ボタンで Print-out メニューがポップアップします。ファ + イル全体の出力やカレントページ、最後にマークしたページ、リージョン(カ + レントページと最後にマークしたページとの間のページ)、マークした全部の + ページをメニューから選択して出力できます。 + +○動作を確認した環境 + SunOS 4.1.3 / sun4c マシン(SPARCstationシリーズ) + +○インストールについて + + まず, xdvi PL17 のソース・ファイルである xdvi-17.tar.gz と + それに対するパッチ xdvi-17miyu.patch-beta4.gz (*1)、そして + 当該パッチ xdvi-17+markpage+toc+printdvi.patch を用意します。 + + 次に, 作業ディレクトリを作成して, そのディレクトリに移った後, + xdvi-17.tar.gz を展開します。そのまま, ディレクトリを移動しないで, + xdvi-17miyu.patch-beta4.gz を用いてパッチをあてます。 + このとき, GNU のツールである gzip および patch が必要となります (*2)。 + さらに xdvi-17+markpage+toc+printdvi.patch を用いてパッチをあてます。 + + あとは, システムに応じて Imakefile を編集した後, + xmkmf を実行して Makefile を生成して, make を実行します。 + + なお、miyu-patch for xdvi PL17 については、README.miyu-patch をよく読 + んでください。 + + (*1) これらは, + ftp.tohoku.ac.jp[130.34.8.9]:~ftp/pub/tex/dviwares/xdvi/PL17 などの + anonymous ftp などから入手できます。 + (*2) これらは, + ftp.waseda.ac.jp[133.9.1.32]:~ftp/pub/GNU/prep 以下、または、 + ftp.ecei.tohoku.ac.jp[130.34.222.67]:~ftp/pub/GNU/gzip および + ftp.ecei.tohoku.ac.jp[130.34.222.67]:~ftp/pub/GNU/patch 以下にあります。 + +○Use_MARKPAGE および Use_TOC について + つけられるマークの最大数を 1024、DVI ファイルの最大ページ数も同じく + 1024 としてあります。これを越えることはまずないと思いますが、もし変更 + する場合は、Imakefile の RINGSIZE および MAX_PAGE を修正してください。 + +○Use_PRINTDVI について + Imakefile の Use_PRINTDVI のところは、自己サイトの環境に合わせて変更し + てください。%d などの意味については、print.h の最初の方のコメントに書 + いてあります。また、デフォルトでは dvi2ps や dviselect を用いるように + 書いてあります。このように、必要なページを切り出したり、プリンタ出力形 + 式へ変換する作業は xdvi の内部で行なわず、外部コマンドで処理するような + 仕様にしました。したがって、これらのコマンドをあらかじめインストールし + ておかないと、xdvi からの出力ができません。dvi2ps, dvips, jdvi2kps, + dviselect など、自己サイトの環境に合ったコマンドをインストールし、それ + に合わせて Imakefile を修正した上で xdvi を作ってください。 + また、デフォルトでは lpr に -v オプションを与えていません。PostScript + プリンタ用のフィルタによっては -v オプションをつける必要があるかも知れ + ません。 + また、デフォルトでは dvi2ps の出力を lpr の標準入力にパイプで与えてい + ます。lpr によっては、出力データが 1Mbyte を越えるとそれ以降を切り捨て + て出力するような仕様になっているかも知れません。そのような場合は、 + dvi2ps の出力を一旦テンポラリファイル(/tmp/%F:%c@%r.ps など)にリダイレ + クトし、それを lpr -s で出力し、終了後に rm するようにすればいいでしょ + う。ただし、-s の場合、スプーリングせずに出力するため、出力が完了する + までそのファイルを消せません。出力完了まで待って rm する、という手続き + を簡単には書けないと思うので、デフォルトでは lpr の標準入力に与える方 + 法を採りました。1Mbyte を越えるくらいたくさんのページを出力するような + 場合は、xdvi の中から出力せずにシェルのコマンドラインから + % dvi2ps file.dvi > /tmp/file.ps + % lpr -s /tmp/file.ps + (出力完了後) + % rm /tmp/file.ps + とした方がいいような気がします:-) + +○内部変数(%f など)の意味 + print.h の最初の方のコメントにも書いてありますが、簡単に説明しておきま + す。Imakefile 中の PRCMD??? という変数は + PRCMDLST="(cd %d; dviselect -i %F -o /tmp/%F:%t@%r.dvi %A; dvi2ps /tmp/%F:%t@%r.dvi) | lpr -P%p -J'%F (Page %t)'; /bin/rm /tmp/%F:%t@%r.dvi" + /* all marked pages */ + のように、% 表記の内部変数が用いられています。これは、DVI ファイルの出 + 力時に解釈されて実行されるコマンド文字列です。 + PRCMDALL DVI ファイルの全部を出力(する時に用いられるコマンド文字列) + PRCMDCUR カレントページ(現在表示しているページ)を出力 + PRCMDMRK 最後にマークしたページを出力 + PRCMDRGN リージョン(カレントページと最後にマークしたページで挟まれ + ている区間)内のすべてのページを出力 + PRCMDLST マークしたすべてのページを出力 + これらのコマンドは、Print-out メニューで選択する項目 + All pages + Current page + Marked page + Region + All marked pages + にそれぞれ対応しています。 + コマンド文字列の解釈は、% 表記の内部変数を展開することによって行なわれ + ます。各内部変数の意味は次の通りです。 + %f : 現在参照している DVI ファイルのファイル名(フルパス名) + %F : 現在参照している DVI ファイルのファイル名(basename) + %d : 現在参照している DVI ファイルが置かれているディレクトリ名 + ( %f = %d/%F ) + %p : プリンタ名(環境変数 PRINTER が定義されていればその値。また、 + Print-menu で設定されるならその値) + %r : xdvi のプロセス ID + 以下はページ番号に関する内部変数です。すべて絶対ページ番号(先頭ページ + を1として単調増加するページ番号。\count に左右されない)で表記します。 + %c : カレントページ番号 + %m : 最後にマークしたページ番号 + %s : リージョンの開始ページ番号(%c と %m の最小値) + %e : リージョンの終了ページ番号(%c と %m の最大値) + %l : マークしたページ番号リスト(マーク順); 各ページ番号は ',' で区切 + られている + %L : マークしたページ番号リスト(マーク順); 各ページ番号は ' ' で区切 + られている + %t : マークしたページ番号リスト(ソートされている); 各ページ番号は + ',' で区切られている + %T : マークしたページ番号リスト(ソートされている); 各ページ番号は + ' ' で区切られている + %k : %l と同様、ただし、各ページ番号の前に '=' が置かれている + (dviselect を仮定している) + %K : %L と同様、ただし、各ページ番号の前に '=' が置かれている + (dviselect を仮定している) + %a : %t と同様、ただし、各ページ番号の前に '=' が置かれている + (dviselect を仮定している) + %A : %T と同様、ただし、各ページ番号の前に '=' が置かれている + (dviselect を仮定している) + たとえば、上記の PRCMDLST の定義で、/home/onono/doc/sample.dvi をプレ + ビューしていて、3,6,11,17ページをマークしている時に、Print-out メニュー + から all marked pages を選択すると、実行される文字列は以下のようになり + ます。 + (cd /home/onono/doc; + dviselect -i sample.dvi -o /tmp/sample.dvi:3,6,11,17@3255.dvi + =3 =6 =11 =17; + dvi2ps /tmp/sample.dvi:3,6,11,17@3255.dvi) + | lpr -Plp -J'sample.dvi (Page 3.6.11.17)'; + /bin/rm /tmp/sample.dvi:3,6,11,17@3255.dvi + ただし、xdvi のプロセス ID = 3255、プリンタ名 = lp とします。 + +○独立性 + Use_MARKPAGE, Use_TOC, Use_PRINTDVI は、相互に独立して#define/#undefで + きるはずです(試していません)。もちろん、 + #undef Use_MARKPAGE + #define Use_TOC + #define Use_PRINTDVI + で作った場合は、toc 上でのマーキングができませんし(ページ移動はできる)、 + Print-out メニューは All pages と current page の二つだけになるでしょ + う。 + +○著作権 + 当該パッチの中のファイル + markring.c + markring.h + markpage.c + markpage.h + toc.c + toc.h + print.c + print.h + の著作権は、作者である + 松浦 俊 MATSUURA Syun syun@fuka.info.waseda.ac.jp + 平原 厚志 HIRAHARA Atsushi hirahara@fuka.info.waseda.ac.jp + 小野 康一 ONO Kouichi onono@fuka.info.waseda.ac.jp + に帰属します。なお、著作者を明らかにする限り、当該パッチの一部または全 + 体を改造、転送、再配布するのは自由とします。 + +○ヒマがあればやろうかな + +1. 環境変数, オプション, リソースによる指定 + -printer *printer + XDVIPRALL -prall *print.all + XDVIPRCUR -prcur *print.currentPage + XDVIPRMKD -prmarked *print.markedPage + XDVIPRRGN -prregion *print.region + XDVIPRLST -prlist *print.list + +2. ページ移動に伴う toc のスクロールバー移動 + +3. toc に表示するページ番号を \count0 を考慮した(実際の)ページ番号にする + +4. マークページリストの表記を + 5,8-12,27,29,35-36,41 + のようにする diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/README.markpage+toc+printdvi+paper xdvik-22.40y1/texk/xdvik/READMEs/README.markpage+toc+printdvi+paper --- xdvik-22.40y1.orig/texk/xdvik/READMEs/README.markpage+toc+printdvi+paper 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/README.markpage+toc+printdvi+paper 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,583 @@ + + << xdvi-17+markpage+toc+printdvi+paper patchについて >> + + 1995/10/07 + 小野 康一 + onono@fuka.info.waseda.ac.jp + +○xdvi-17+markpage+toc+printdvi+paper patchとは + xdvi-17 + miyu-patch(beta.pre7) for xdvi PL17に対するパッチです。すで + にfjに投稿されたいくつかのパッチを集めて修正を加え、さらにいくつかの改 + 造を行なったものです。 + +○このパッチに含まれるパッチ群 + これまでにfjに投稿された以下のパッチを含んでいます。 + + (1) xdvi-17+markpage+toc+printdvi patch + (xdvi-pl17+markpage+toc+printdvi.patch.gz) + ページマーキング機能、TOC機能、DVI印刷機能を実現したパッチ。 + 作成者:小野 康一, 松浦 俊, 平原 厚志 + From: onono@fuka.info.waseda.ac.jp (ONO Kouichi) + Newsgroups: fj.sources,fj.comp.texhax + Subject: xdvi-17+markring+toc+printdvi patch + Date: 13 Sep 1993 23:14:24 +0900 + Message-ID: + + (2) xdvi-17+markring+toc+printdvi patch fix-1 + (1)に対するバグフィックス#1。 + 作成者:小野 康一 + From: onono@fuka.info.waseda.ac.jp (ONO Kouichi) + Newsgroups: fj.comp.texhax,fj.sources.d + Subject: xdvi-17+markring+toc+printdvi patch fix-1 + Date: 14 Sep 1993 22:26:07 +0900 + Message-ID: + + (3) xdvi-17+markpage+toc+printdvi patch fix-2 + (1)+(2)に対するバグフィックス#2。 + 作成者:小野 康一 + From: onono@fuka.info.waseda.ac.jp (ONO Kouichi) + Newsgroups: fj.comp.texhax,fj.sources + Subject: xdvi-17+markpage+toc+printdvi patch fix-2 + Date: 17 Sep 1993 22:54:04 +0900 + Message-ID: + + (4) tasai-ussy patch + (xdvi-17.tasai-ussy.patch) + (1)のTOCのページ番号検出機能の改善。 + 作成者:あさい(tasai)&はらかわ たくや(ussy) + Newsgroups: fj.comp.texhax,fj.sources.d + From: ussy@int.titech.ac.jp (Takuya Harakawa) + Subject: BugPatch for Xdvi-17.miyu.path(beta.7) + Message-ID: + Date: 12 Nov 1993 21:13:58 +0900 + + (5) tasai-ussy pagenumber patch + (xdvi-17.page.patch) + (1)+(4)のTOCのページ表示を絶対ページ番号から相対ページ番号に変更す + るパッチ。 + 作成者:あさい(tasai)&はらかわ たくや(ussy) + Newsgroups: fj.sources.d + From: ussy@int.titech.ac.jp (Takuya Harakawa) + Subject: UnOfficial Patch for Xdvi-17.miyu.patch(beta.7) + Message-ID: + Date: 12 Nov 1993 23:14:03 +0900 + (上の記事のパッチには誤りがあったので以下の記事が再投稿されてい + る) + Newsgroups: fj.sources.d + From: ussy@int.titech.ac.jp (Takuya Harakawa) + Subject: an unofficial patch for Xdvi-17.miyu.patch(beta.pre7) + Message-ID: + Date: 15 Nov 1993 17:56:04 +0900 + (および) + Newsgroups: fj.sources.d + From: ussy@int.titech.ac.jp (Takuya Harakawa) + Subject: Re: an unofficial patch for Xdvi-17.miyu.patch(beta.pre7) + Message-ID: + Date: 15 Nov 1993 20:28:26 +0900 + + (6) tasai-ussy pagenumber patch fix-1 + (xdvi-17.pagenumber-fix.patch) + (1)〜(5)に対するfixおよびversion-up。 + 作成者:あさい(tasai)&はらかわ たくや(ussy) + Newsgroups: fj.comp.texhax,fj.sources.d + From: ussy@int.titech.ac.jp (Takuya Harakawa) + Subject: Xdvi-17 pagenumber patch fix + Message-ID: + Date: 18 Nov 1993 06:58:38 +0900 + + その他、fjに未投稿の以下のパッチも含んでいます。 + + (7) マークページリストの改良 + 連続するページ番号を10-13のように表記する。 + 作成者:小野 康一 + + (8) 各種バグフィックス + -geometry指定におけるTOCの不具合、X11R4における異常終了など。 + 作成者:小野 康一 + + (9) 用紙タイプをDVIフィルタ(デバイスドライバ)に渡す機能 + DVIフィルタ(デバイスドライバ)のオプションに合わせて変換する。 + 作成者:小野 康一 + + (10) 環境変数、リソース、オプションによる指定 + プリンタ名やコマンド文字列などを環境変数、リソース、オプションで指 + 定できる。 + 作成者:小野 康一 + + (11) 用紙タイプを起動後に設定する機能 + Paperボタンを追加し、メニューから用紙タイプを選べるようにする。 + 作成者:小野 康一 + +○このパッチによって使用可能になる機能 + このパッチをあてて作ったxdviでは、以下のような機能を使うことができます。 + + 1) Use_MARKPAGE + ページマーキング機能を、GNU Emacsのマークリング風に実現したものです。 + ページのマーク(`m',`a')/アンマーク(`U',`A')、マークしたページへの移動 + (`'',``')、マークしたページとカレントページとの交換('"')、マークを伴う + ページジャンプ('<','>')などを行なえます。 + また、2)のTOCからのマーキングも可能です。 + + 2) Use_TOC / Use_PAGENUM + ページ番号リストを表示し、マウスでそのページをクリックすることで、その + ページへ移動(左ボタン)、そのページをマーク(真中ボタン)、アンマーク(右 + ボタン)することができます。ドラッグにより、連続するページをマーク/アン + マークすることもできます。また、東京工業大学のあさい&はらかわ両氏によ + るtasai-ussyパッチ群により、ページ番号が先頭ページを1とする絶対番号で + なく、実際のページ番号が表示されるようになっています。 + + 3) Use_PRINTDVI + `o'またはPrintボタンでPrint-outメニューがポップアップします。ファイル + 全体の出力やカレントページ、最後にマークしたページ、リージョン(カレン + トページと最後にマークしたページとの間のページ)、マークした全部のペー + ジをメニューから選択して出力できます。 + + 4) Use_PAPER + `t'またはPaperボタンでSet Paper Typeメニューがポップアップします。用紙 + タイプを入力またはリストメニューから選択すると画面の用紙サイズを示す枠 + 線が変化します。selFile機能で、起動後にプレヴューするDVIファイルを変更 + したり、起動した後で用紙タイプが異なっていることに気がついた場合などに + 使えるでしょう。Print機能を用いて出力する際に、内部変数%Z(または%z)の + 展開に用紙タイプが用いられるので(後述)、適切な用紙タイプを選択しないと + 正しい出力結果が得られなくなります。 + +○動作を確認した環境 + SunOS 4.1.3 SPARCstation /usr/ucb/cc X11R5 + +○作成・インストールについて + 以下のファイル(*1)を用意してください。 + + (1) xdvi PL17ソースファイル + (xdvi-17.tar.gz) + (2) miyu-patch for xdvi PL17 (beta.pre7) + (xdvi-17miyu.patch-beta.pre7) + (3) markpage+toc+printdvi+paper patch (当該パッチ) + (xdvi-pl17+markpage+toc+printdvi+paper.patch.gz) + + 次に、作業ディレクトリを作成して、そのディレクトリに移った後、 + xdvi-17.tar.gzを展開します。そのまま、ディレクトリを移動しないで、 + xdvi-17miyu.patch-beta.pre7.gzのパッチをあてます。このとき、GNUのツー + ルであるgzipおよびpatchが必要となります(*2)。 + さらにxdvi-17+markpage+toc+printdvi+paper.patch.gzのパッチをあてます。 + + % gzip -d -c xdvi-17.tar.gz | tar xf - + % gzip -d -c xdvi-17miyu.patch-beta.pre7.gz | patch -p1 + % gzip -d -c xdvi-pl17+markpage+toc+printdvi+paper.patch.gz | patch -p1 + + あとは、システムに応じてImakefileを編集した後、xmkmfを実行してMakefile + を生成して、makeを実行します。 + + % xmkmf -a + % make + % make xdvi.man + % make MakeTeXPK + + makeが正常に終了したら、インストールします。 + + % make install + % make install.man + % make install.MakeTeXPK + + なお、miyu-patch for xdvi PL17については、README.miyu-patchをよく読ん + でください。tasai-ussyパッチ群については、README.tasai-ussyをよく読ん + でください。 + + (*1) (1)〜(2)は + ftp://ftp.tohoku.ac.jp/pub/TeX/dviwares/xdvi/PL17 + ftp://ftp.fuka.info.waseda.ac.jp/pub/xdvi/PL17 + などのanonymous ftpなどから入手できます。 + (3)は + ftp://ftp.fuka.info.waseda.ac.jp/pub/xdvi/PL17 + のanonymous ftpから入手できます。 + + (*2) これらは + ftp://ftp.waseda.ac.jp/pub/GNU/prep + などのanonymous ftpなどから入手できます。 + +○Use_MARKPAGEおよびUse_TOCについて + つけられるマークの最大数を1024、DVI ファイルの最大ページ数も同じく1024 + としてあります。これを越えることはまずないと思いますが、もし変更する場 + 合は、ImakefileのRINGSIZEおよびMAX_PAGEを修正してください。 + +○Use_PRINTDVIについて + ImakefileのUse_PRINTDVIのところは、自己サイトの環境に合わせて変更して + ください。%dなどの意味については、print.hの最初の方のコメントに書いて + あります。また、defaultではdvi2ps-jやdviselectを用いるように書いてあり + ます。このように、必要なページを切り出したり、プリンタ出力形式へ変換す + る作業はxdviの内部で行なわず、外部コマンドで処理するような仕様にしまし + た。したがって、これらのコマンドをあらかじめインストールしておかないと、 + xdviからの出力ができません。dvi2ps-j, dvips, jdvi2kps, dviselectなど、 + 自己サイトの環境に合ったコマンドをインストールし、それに合わせて + Imakefileを修正した上でxdviを作ってください。 + また、defaultではlprに-vオプションを与えていません。PostScriptプリンタ + 用のフィルタによっては-vオプションをつける必要があるかも知れません。ま + た、defaultではdvi2ps-jの出力を一旦テンポラリファイルにリダイレクトし、 + それをlpr -s -rで出力するようになっています。もし-rオプションがサポー + トされていない場合は、dvi2ps-j(ないしはそれに類するDVIフィルタ(デバイ + スドライバ))の出力をlprの標準入力にパイプで渡すように変更するといいで + しょう。 + ただし、lprによっては、出力データが1Mbyteを越えるとそれ以降を切り捨て + て出力するような仕様になっているかも知れません。そのような場合はやはり + DVIフィルタ/デバイスドライバの出力を一旦テンポラリファイルにリダイレク + トし、それをlpr -sで出力し、終了後にrmするようにすればいいでしょう。た + だし、-rが使えないと、出力完了まで待ってrmする、という手続きを自分で書 + かないといけませんが。面倒ならばlprの標準入力に与える方法で我慢しましょ + う。それでも1Mbyteを越えるくらいたくさんのページを出力したい場合は、 + xdviの中から出力せずにシェルのコマンドラインから + % dvi2ps file.dvi > /tmp/file.ps + % lpr -s /tmp/file.ps + (出力完了後) + % rm /tmp/file.ps + とした方がいいような気がします:-) + +○内部変数(%fなど)の意味 + print.hの最初の方のコメントにも書いてありますが、簡単に説明しておきま + す。Imakefile中のPRCMD???という変数は + PRCMDLST="cd %d; dviselect -i %F -o %D/%F:%o@%r.dvi %G; %R %D/%F:%o@%r.dvi > %D/%F:%o@%r.ps; /bin/rm %D/%F:%o@%r.dvi; %P -J'%F (Page %o)' %D/%F:%o@%r.ps" + /* all marked pages */ + のように、%表記の内部変数が用いられています。これは、DVIファイルの出力 + 時に解釈されて実行されるコマンド文字列です。 + PRCMDALL DVIファイルの全部を出力(する時に用いられるコマンド文字列) + PRCMDCUR カレントページ(現在表示しているページ)を出力 + PRCMDMRK 最後にマークしたページを出力 + PRCMDRGN リージョン(カレントページと最後にマークしたページで挟まれ + ている区間)内のすべてのページを出力 + PRCMDLST マークしたすべてのページを出力 + これらのコマンドは、Print-outメニューで選択する項目 + All pages + Current page + Last marked page + Region + All marked pages + にそれぞれ対応しています。 + コマンド文字列の解釈は、%表記の内部変数を展開することによって行なわれ + ます。各内部変数の意味は次の通りです。 + %% : '%'文字 + %f : 現在参照しているDVIファイルのファイル名(フルパス名) + %F : 現在参照しているDVIファイルのファイル名(basename) + %d : 現在参照しているDVIファイルが置かれているディレクトリ名 + (%f == %d/%F) + %D : テンポラリファイルを置くディレクトリ(環境変数TMPDIRが定義されて + いればその値。定義されていない場合はコンパイル時のTEMPDIRの値) + %p : プリンタ名(環境変数PRINTERが定義されていればその値。また、 + Print-menuで設定されるならその値) + %P : プリンタ出力制御コマンド文字列(環境変数PRINTCMDが定義されていれ + ばその値。もし定義されていない場合は、コンパイル時の定数 + PRINTCMDの値("lpr -s -r -P%p")) + %z : -paperオプションで指定される用紙タイプ(小文字; ex. "a4") + 下記の注を参照。 + %Z : -paperオプションで指定される用紙タイプを変換テーブルでDVIフィル + タ(デバイスドライバ)のオプションに変換した文字列 + (ex. "a4r" ---> "a4landscape" for dvi2ps-j) + 下記の注を参照。 + %r : xdviのプロセスID + %R : DVIフィルタ(デバイスドライバ)のコマンド文字列(環境変数DVIFILTER + が定義されていればそれに代入されている文字列。もし定義されてい + ない場合は、コンパイル時のDVIFILTERCMDの値) + 以下はページ番号に関する内部変数です。すべて絶対ページ番号(先頭ページ + を1として単調増加するページ番号。\countに左右されない)で表記します。 + %c : カレントページ番号 + %m : 最後にマークしたページ番号 + %s : リージョンの開始ページ番号(%cと%mの最小値) + %e : リージョンの終了ページ番号(%cと%mの最大値) + %l : マークしたページ番号リスト(マーク順); 各ページ番号は','で区切ら + れている + %L : マークしたページ番号リスト(マーク順); 各ページ番号は' 'で区切ら + れている + %t : マークしたページ番号リスト(ソートされている); 各ページ番号は',' + で区切られている + %T : マークしたページ番号リスト(ソートされている); 各ページ番号は' ' + で区切られている + %o : マークしたページ番号リスト(ソートされている); 連続するページの + 場合、'-'で範囲を示す。各ページ範囲やページ番号は','で区切られ + ている + %O : マークしたページ番号リスト(ソートされている); 連続するページの + 場合、'-'で範囲を示す。各ページ範囲やページ番号は' 'で区切られ + ている + %k : %lと同様、ただし、各ページ番号の前に'='が置かれている + (dviselectを仮定している) + %K : %Lと同様、ただし、各ページ番号の前に'='が置かれている + (dviselectを仮定している) + %a : %tと同様、ただし、各ページ番号の前に'='が置かれている + (dviselectを仮定している) + %A : %Tと同様、ただし、各ページ番号の前に'='が置かれている + (dviselectを仮定している) + %g : %oと同様、ただし、各ページ範囲やページ番号の前に'='が置かれている + (dviselectを仮定している) + %G : %Oと同様、ただし、各ページ範囲やページ番号の前に'='が置かれている + (dviselectを仮定している) + たとえば、上記のPRCMDLSTの定義で、/home/onono/doc/sample.dviをプレヴュー + していて、3,6,11,17ページをマークしている時に、Print-outメニューから + All marked pagesを選択すると、実行される文字列は以下のようになります。 + cd /home/onono/doc; + dviselect -i sample.dvi -o /tmp/sample.dvi:3,6,11,17@3255.dvi + =3 =6 =11 =17; + dvi2ps -o a4 /tmp/sample.dvi:3,6,11,17@3255.dvi > /tmp/sampe.dvi:3,6,11,17@3255.ps; + /bin/rm /tmp/sample.dvi:3,6,11,17@3255.dvi; + lpr -s -r -Plp -J'sampe.dvi (Page 3,6,11,17)' /tmp/sampe.dvi:3,6,11,17@3255.ps; + ただし、xdviのプロセスID = 3255、プリンタ名 = lpとします。また、-paper + オプションはa4を指定したとします。 + +○%z/%Zについて(xdvi -paper/dvi2ps -o/jdvi2kps -paの関係) + %zには、起動時の-paperオプション/.paperリソースなどで与えられた用紙サ + イズが代入されます。この内部変数を用いて、出力コマンド文字列の中に + dvi2ps -o %z + のように、dvi2psの用紙タイプオプションとして与えることを想定しています。 + xdviのdefault用紙タイプ(a4)と異なるタイプ、たとえばB4サイズのdviファイ + ルをプレヴューする場合は-paper b4を指定してxdviを起動しておけば、正し + い用紙タイプで出力することができます。 + + しかし、xdvi -paperとdvi2ps -o, jdvi2kps -paなどで指定する用紙タイプは、 + 以下に示すように、かならずしも共通していません。 + + 用紙タイプ名 xdvi -paper dvi2ps-j -o jdvi2kps -pa + letter × ○ × + legal ○ ○ × + tabloid × ○ × + us ○ × × + usr ○ × × + foolscap ○ × × + a[1-2] ○ × × + a[3-5] ○ ○ ○ + a[6-7] ○ × × + a4extra × × ○ + b[1-3] ○ × × + b[4-5] ○ ○ ○ + b[6-7] ○ × × + c[1-7] ○ × × + [a-c][1-7]r ○ × × + + そこで、それぞれのDVIフィルタ(デバイスドライバ)に合わせて用紙タイプ名 + を決める変換テーブルファイルを用意しておき、出力時にそれを参照するとい + う仕様にしました。内部変数%Zは、%zの用紙タイプ名を変換テーブルファイル + にしたがって変換した(DVIフィルタ用の)用紙タイプオプション文字列に展開 + されます。 + +○用紙タイプ-->DVIフィルタ(デバイスドライバ)オプション変換テーブルファイル + xdviの-paperオプションなどで指定した用紙タイプから、それぞれのDVIフィ + ルタ(デバイスドライバ)のオプションに変換するためのテーブルファイルを用 + 意しておくことができます。dvi2ps-j, jdvi2kps, dvipsなど、複数のDVIフィ + ルタ(デバイスドライバ)を使用する場合は、それぞれに対応する変換テーブル + を用意しておけば、オプションの違いを意識せずに出力させることができます。 + また、プリンタの使用できる用紙タイプが限定される場合にも、この変換テー + ブルで対応することができます。 + + 変換テーブルファイルのサンプルとして、dvi2ps-j用(xdvipaper.dvi2ps-j)と + jdvi2kps用(xdvipaper.jdvi2kps)とdvips用(xdvipaper.dvips)を用意してあり + ます。 + + 変換テーブルファイルの書式は以下の通りです。 + + '#'以降は行末までコメントと見なされ、無視されます。行頭および行末の + whitespace(スペースおよびタブ)は無視されます。コメントとwhitespaceを除 + いた各行は、空行であるか、または、以下の書式をしています。 + + 書式a. <用紙タイプ> + 書式b. <用紙タイプ> + 書式c. = + + 書式bでは、<用紙タイプ>と<オプション文字列>の間に一つ以上のwhitespace + が必要です。書式cでは、"="と<オプション文字列>の間にwhitespaceはあって + もなくてもかまいません。<オプション文字列>中には、whitespaceを含ませる + ことができます(行末までが<オプション文字列>と見なされます)。 + + <用紙タイプ>には、xdviがサポートしている用紙タイプを書くことができます + (ex. a4r)。ワイルドカード表現や正規表現は書けません。 + + 変換テーブルの検索は以下のように行ないます。 + + 先頭行から、"="を持つ行または<用紙タイプ>が一致する行が見つかるまで探 + します。もし見つかった行に<オプション文字列>があるなら(書式b, c)、それ + を用います。もし<オプション文字列>がないなら(書式a)、<用紙タイプ>をそ + のまま用います。もし一致する行(または"="を持つ行)が見つからない場合は、 + 用紙タイプをそのまま用います。 + + たとえば、変換テーブルファイルが以下のようになっていて、用紙サイズが + a4rの時、変換して得られるオプション文字列(%Zの値)は"a4 -l"になります。 + + ### sample + a4 # A4 portrait + b4 b4 # B4 portrait + a4r a4 -l # A4 landscape + = a4 # default is A4 portrait + +○内部変数の再帰的展開 + %Pおよび%Rは、コマンドとして解釈される文字列の一部分に展開されます。し + たがって、その文字列中にさらに内部変数を記述してある場合、それがさらに + 展開される必要があります。そこで、この二つの変数に限り、展開を再帰的に + 行なうようにしてあります。他の内部変数は、文字列への展開を一度だけ行な + うようになっています。 + したがって、%Pおよび%Rに相当するマクロシンボルをImakefileなどで定義す + る場合は、その文字列中に%Pや%R自身を含まないように注意してください。 + 環境変数PRINTCMDおよびDVIFILTERを定義する場合も同様です。 + +○カスタマイズ + 起動時オプション、リソースおよび環境変数の参照によるカスタマイズが可能 + になっています。 + + (0) 出力コマンド文字列 + Print-outメニューから選択する出力コマンドに用いられるコマンド文字 + 列は、以下の優先順位によって定まります。 + 1. オプション + (-printall, -printcurrent, -printmarked, -printregion, -printlist) + 2. リソース + (.printAll, .printCurrent, .printMarked, .printRegion, .printList) + 3. コンパイル時default + (PRCMDALL, PRCMDCUR, PRCMDMRK, PRCMDRGN, PRCMDLST) + + (1) プリンタ + 出力コマンド文字列中に現れる内部変数%pの展開によって得られるプリン + タ名は、以下の優先順位で定まります。 + 0. Print-outメニューにおける指定 + 1. -printerオプション + 2. .printerリソース + 3. 環境変数PRINTER + 4. コンパイル時default(DVIPRINTER) + + (2) テンポラリディレクトリ + 出力コマンド文字列中に現れる内部変数%Dの展開によって得られる、「出 + 力時に作成するテンポラリファイルを置くディレクトリ」は、以下の優先 + 順位で定まります。 + 1. 環境変数TMPDIR + 2. コンパイル時default(TEMPDIR) + + (3) DVIフィルタ(デバイスドライバ) + 出力コマンド文字列中に現れる内部変数%Rの展開によって得られる、 + 「DVIフィルタ(デバイスドライバ)として用いられるコマンド文字列」は、 + 以下の優先順位で定まります。 + 1. 環境変数DVIFILTER + 2. コンパイル時default(DVIFILTERCMD) + + (4) プリンタ出力制御コマンド + 出力コマンド文字列中に現れる内部変数%Pの展開によって得られる、「プ + リンタ出力制御コマンド文字列(DVIをプリンタ依存形式へ変換するコマン + ドは含まず、単にファイルをプリンタへ送るためのコマンド)」は、以下 + の優先順位で決まります。 + 1. 環境変数PRINTCMD + 2. コンパイル時default(PRINTCMD) + + (5) 用紙タイプ-->DVIフィルタ(デバイスドライバ)オプション変換テーブル + 出力コマンド文字列中に現れる内部変数%Zの展開によって得られる、 + 「DVIフィルタ(デバイスドライバ)のオプション」へxdviの用紙タイプか + ら変換するためのテーブルファイル名は、以下の優先順位で決まります。 + 1. 環境変数XDVIFILTOPTTBL + 2. コンパイル時default(FILTOPTTBLFILE) + + したがって、jdvi2kpsによる出力を想定したカスタマイズをするには、 + 環境変数DVIFILTERを"jdvi2kps -p%Z" + 環境変数XDVIFILTOPTTBLを"/usr/local/lib/TeX/xdvipaper.jdvi2kps" + また、dvipsによる出力を想定したカスタマイズをするには、 + 環境変数DVIFILTERを"dvips -t%Z" + 環境変数XDVIFILTOPTTBLを"/usr/local/lib/TeX/xdvipaper.dvips" + にしておけばいいはずです。 + +○独立性 + Use_MARKPAGE, Use_TOC(Use_PAGENUM), Use_PRINTDVI, Use_PAPERは、相互に + 独立し#define/#undefできるはずです(試していません)。もちろん、 + #undef Use_MARKPAGE + #define Use_TOC + #define Use_PAGENUM + #define Use_PRINTDVI + #define Use_PAPER + で作った場合は、TOC上でのマーキングができませんし(ページ移動はできる)、 + Print-outメニューはAll pagesとCurrent pageの二つだけになるでしょう。 + Use_TOCとUse_PAGENUMの関係についてはREADME.tasai-ussyを読んでください。 + +○著作権 + 当該パッチの中のファイル + markring.c + markring.h + markpage.c + markpage.h + toc.c + toc.h + print.c + print.h + paper.c + paper.h + の著作権は、作者である + 松浦 俊 MATSUURA Syun syun@fuka.info.waseda.ac.jp + 平原 厚志 HIRAHARA Atsushi hirahara@fuka.info.waseda.ac.jp + 小野 康一 ONO Kouichi onono@fuka.info.waseda.ac.jp + に帰属します。なお、著作者を明らかにする限り、当該パッチの一部または全 + 体を改造、転送、再配布するのは自由とします。 + また、あさい&はらかわ両氏によるtasai-ussyパッチ部分の著作権については + 両氏にお問い合わせください。 + +○主な変更点およびバグフィックス +Revision 1 1993/09/13 fj.comp.texhax,fj.sources + markpage+toc+printdvi patch Revision 1。 +fix-1 1993/09/14 fj.comp.texhax,fj.sources.d +Message-ID: +(1) すでにDVIファイルをオープンしていて、'F'またはFileボタンで + selFileメニューから別のDVIファイルをオープンすると、TOCとマーク + の表示が以前のファイルのままになる、という不具合を修正。 + [報告 : NEC技術情報システム開発株式会社 平山 度 さん] + +fix-2 1993/09/17 fj.comp.texhax,fj.sources +Message-ID: +(1) -expertオプションを用いて起動して、ボタンなしで使用している時に + マークすると落ちてしまう、という不具合を修正。 + [報告 : 京都大学 上原 哲太郎 さん] +(2) Print-out popupウィンドウのプルダウンメニューにおけるアイテム名 + で、``Marked page''という表現が``All marked pages''と間違え易い + ので、``Last marked page''に変更。 + [提案 : 大阪大学 升谷 保博 さん] +(3) DVIフィルタ(デバイスドライバ)の出力をlprの標準入力に与えるという + 仕様を、DVIフィルタ(デバイスドライバ)の出力を一旦テンポラリファ + イルにリダイレクトし、それをlpr -s -rで出力するという仕様に変更。 + [提案 : 大阪大学 升谷 保博 さん] +(4) ULTRIX V4.0にはstrdup()がないので、xmalloc()を使ったStrDup()を用 + いるように変更。 + [報告 : 東京大学 南田 幸紀 さん] +fix-3 1993/09/23 +(1) マークページリストの表記を + 5,8-12,27,29,35-36,41 + のようにする内部変数%o,%O,%g,%Gを追加。 +fix-4 1993/10/02 +(1) -geometry指定をして起動するとTOCが表示されない(resize)してもバグ + を修正(miyuパッチで入ったバグと思われる)。 + [報告 : 京都大学 今村 俊幸 さん] +(2) X11R4でviewport widgetのサイズが0となって異常終了するバグを修正 + (X11R4のviewport widgetの設計ミスと思われる。X11R5では起きない)。 + [報告/提案 : 東京大学 南田 幸紀 さん] +(3) font_open.cで探索ディレクトリの計算を行なっている部分の(orignal + xdviからの)バグを修正。 + [報告/提案 : 東京大学 南田 幸紀 さん] +fix-5 1994/08/20 +(1) -paperオプションによって指定される用紙タイプ(ex. "a4")を示す内部 + 変数%z,%Zを追加。 +fix-6 1995/01/28 +(1) print.cにおいて、出力処理を子プロセスがsystem()で実行するのを、 + execl()に変更。 + [報告 : 東京大学 鍵本 崇 さん] +Revision 2 1995/09/23 + markpage+toc+printdvi patch Revision 2。 + Paperメニュー機能の追加により、 markpage+toc+printdvi+paperパッ + チに名称変更。 +(1) DVIフィルタ(デバイスドライバ)に用いるコマンド文字列を環境変数で + 与えられるように、内部変数%Rを追加。 + [提案 : 京都大学 上原 正三 さん] +(2) テンポラリファイルを置くディレクトリを環境変数で与えられるように、 + 内部変数%Dを追加。 +(3) -paperオプションで与えられる用紙タイプを元に、変換テーブルを参照 + して、DVIフィルタ(デバイスドライバ)の用紙タイプ指定に変換してコ + マンド実行できるように、内部変数%Zを変更。 +(4) プリンタ名を起動時に指定できるように、-printerオプションおよび + .printerリソースを追加。 + オプション リソース名 クラス名 + -printer .printer Printer +(5) 出力コマンド文字列を起動時に指定できるように、オプションおよびリ + ソースを追加。 + オプション リソース名 クラス名 + -printall .printAll PrintAll + -printcurrent .printCurrent PrintCurrent + -printmarked .printMarked PrintMarked + -printregion .printRegion PrintRegion + -printlist .printList PrintList +(6) プリンタ制御出力コマンドを環境変数で与えられるように、内部変数%P + を追加。 +(7) Paperボタンおよび't'コマンドによって、用紙タイプを変更できるよう + にした。 +fix-1 1995/10/07 +(1) 用紙タイプを変更した時に二回redrawされるのを修正。 diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/README.miyu-beta6 xdvik-22.40y1/texk/xdvik/READMEs/README.miyu-beta6 --- xdvik-22.40y1.orig/texk/xdvik/READMEs/README.miyu-beta6 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/README.miyu-beta6 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,239 @@ + + << miyu-patch for xdvi PL17 について >> + +○miyu-patch for xdvi PL17 とは: + いままで出ている xdvi 用のパッチをまとめて, xdvi PL17 用に修正したものです。 + 収録したパッチは以下のようなものです。 + + 1) tpic2.2 対応にするためのパッチ + xdvi-16-tpic2.2 (1993/02 鷲坂@NTT; fj.sources.d,fj.comp.texhax) + xdvi-16-tpic2.2-fix1 (1993/02 鷲坂@NTT; fj.sources.d,fj.comp.texhax) + + 2) DVI ファイルをメニュー形式で選択するためのパッチ + xdvi+selfile (fj 未投稿?) + + 3) ASCII "日本語" TeX 対応にするためのパッチ + xdvi-16j.patch (1992/09 野呂@富士通国際研; fj.sources) + + 4) Zeit の書体倶楽部などのアウトライン・フォント対応にするためのパッチ + xdvi-zeit (1993/08 林@青山学院大学; fj.sources) + + 5) ghostscript を利用して ps で描いた図対応にするためのパッチ + xdvi-16jgs.patch (1992/09 仙田@京大; fj.sources.d) + xdvi-16jgs.patch-fix1 (1992/09 升谷@阪大; fj.sources.d) + xdvi-16jgs.patch-fix2 (1992/09 升谷@阪大; fj.sources.d) + xdvi-16jgs.patch-fix3 (1992/09 木本豪@筑波大学; fj.sources.d) + xdvi-16jgs.patch-fix4 (1993/06 森田@北陸先端大; fj.sources) + xdvi-16jgs.patch-fix5 (1993/08 森田@北陸先端大; fj.sources.d) + + 6) dvips 附属の epsf.sty に対応するためのパッチ + (名称なし) (fj 未投稿) + + 7) jdvi2kps で処理する psfrag への対応 (バグあり) + (名称なし) (fj 未投稿) + + 8) "PS Fig" ボタンの追加 + (名称なし) (fj 未投稿) + + それぞれについての詳細は header の下にあるファイルを参照してください。 + + なお, + 2) のパッチは鈴木@情報科学.東京大学さん に, + 6) のパッチは上原@京大基研さん に, + 8) のパッチは山上@SONYさん に, + ご協力いただきました。 + + また, 鈴木@情報科学.東京大学さん には, + ドキュメントの対応も協力いただきました。 + +○インストールについて: + 1. ファイルの入手 + + まず, xdvi PL17 のソース・ファイルである xdvi-17.tar.gz と + それに対するパッチ xdvi-17miyu.patch-beta6.gz を入手してください (*1)。 + + 2. パッチの適用 + + 次に, 作業ディレクトリを作成して, そのディレクトリに移った後, + xdvi-17.tar.gz を展開します。そのまま, ディレクトリを移動しないで, + xdvi-17miyu.patch-beta6.gz を用いてパッチをあてます。 + このとき, GNU のツールである gzip および patch が必要となります (*2)。 + + < 実行例 > + + % set srcdir=$cwd + % mkdir xdvi-17 + % cd xdvi-17 + % gzip -d -c $srcdir/xdvi-17.tar.gz | tar xvf - + % gzip -d -c $srcdir/xdvi-17miyu.patch-beta6.gz | patch -p1 + + 3. コンパイルの準備 + + システムに応じて Imakefile を編集した後, + xmkmf を実行して Makefile を生成します。 + + 3.1 Imakefile の編集 + + ここでは, おもにオリジナルの xdvi での設定から + 変更された部分について述べます。 + + まず最初は, ファイルの先頭の Use_MAKEPK, Use_SELFILE, + Use_KANJI, Use_ASCIIDNP, Use_ZEIT, Use_NTTZEIT, Use_PS についての + #define または #undef を変更します。 + + Use_MAKEPK MakeTeXPK を用いて, 足りないフォントを自動的に作成する + + Use_SELFILE メニュー形式のファイル選択機能を有効にする + + Use_KANJI ASCII "日本語" TeX の DVI ファイルを扱うようにする + + Use_ASCIIDNP 大日本印刷のフォントを用いて + ASCII "日本語" TeX を表示する + + Use_ZEIT ASCII "日本語" TeX の DVI ファイルの表示に + Zeit の書体倶楽部などのアウトライン・フォントを使用する + Use_NTTZEIT NTT-JTeX の表示にもアウトライン・フォントを使用する + + Use_PS ghostscript を用いて ps の図を表示する + + * さて, Use_KANJI, Use_ASCIIDNP, Use_ZEIT, Use_NTTZEIT の関係ですが。 + + オリジナルの英語 TeX および NTT-JTeX で作成された DVI ファイルを + PK フォント, GF フォント, PXL フォントを用いて表示する場合には, + すべてを #undef してください。 + + ASCII "日本語" TeX で作成された DVI ファイルを + NTT-JTeX 用の大日本印刷フォント (または渡辺フォントなど互換フォント) を + 用いて表示する場合には, Use_KANJI と Use_ASCIIDNP を #define して, + それ以外を #undef してください。 + + ASCII "日本語" TeX で作成された DVI ファイルを + Zeit の書体倶楽部などのアウトライン・フォントを用いて表示する場合には, + Use_KANJI と Use_ZEIT を #define して, Use_ASCIIDNP を #undef ください。 + このとき, NTT-JTeX で作成された DVI も + Zeit の書体倶楽部などのベクトル・フォントを用いて表示する場合には, + さらに Use_NTTZEIT も #define する必要があります。 + もし, NTT-JTeX で作成された DVI ファイルは + 大日本印刷フォント (またはその互換フォント) を用いて表示する場合には, + Use_NTTZEIT を #undef してください。 + + なお, 現在のところ Use_ASCIIDNP と Use_ZEIT は + 同時に指定することはできません。 + もし両方とも指定されたときには, Use_ASCIIDNP が優先されます。 + + * Use_MAKEPK, Use_SELFILE, Use_PS は上記の値とは独立に + #define また #undef を指定することができます。 + + 次に, フォントのサーチ・パスである + DEFAULT_FONT_PATH, DEFAULT_VF_PATH, DEFAULT_SUBDIR_PATH を設定します。 + + DEFAULT_FONT_PATH フォントのサーチ・パスを指定する + 一般に, PK ファイル, GF ファイル, + PXL ファイルのパスを指定しますが, + USE_ZEIT が指定する場合には, それに加えて, + ASCII "日本語" TeX の tfm ファイルのパスも + 指定する必要があります + + DEFAULT_VF_PATH Virtual Font のサーチ・パスを指定する + + DEFAULT_SUBDIR_PATH SEARCH_SUBDIRECTORIES が指定されているときに + 検索を始めるトップ・ディレクトリを指定する + 一般にはなにも指定しておかない方がよい + + もし, Use_MAKEPK を #define した場合には, + MakeTeXPK がインストールされるディレクトリ MAKEPK_BINDIR と + makeTeXPK で作られたフォントを格納するディレクトリ MAKEPK_DESTDIR を + 設定してください。 + + もし, Use_ZEIT を #define した場合には, + アウトライン・フォントの設定ファイルである FontConf がインストールされる + ディレクトリを DEFAULT_FONTCONFDIR を設定してください。 + + もし, Use_PS を #define した場合には, + ps のヘッダ・ファイルのサーチ・パスの DEFAULT_PS_PATH と + ghostscript がインストールされているディレクトリ GHOSTSCRIPT_BINDIR を + 設定してください。 + + 最後は DEFS の設定です。 + まず, マシンに応じて, DEFS に -DMSBITFIRST を設定してください。 + これは i[34]86 以外では大抵の場合設定する必要があります。 + 次に, マシンに応じて, DEFS に -DBLONG, -DBMSHORT を設定してください。 + -DBMLONG, -DBMSHORT は設定してもしなくても, 動作しますが, + これらを適切に設定すると実行速度が著しく改善される場合があります。 + -DBMLONG と -DBMSHORT の両方を設定すると -DBMLONG のみが有効になります。 + 次に, 解像度を -DBDPI=… で, + 縮小率を -DDEFAULT_SHRINK=… で設定してください。 + 解像度は, 240DPI なら -DBDPI=240, 300DPI なら -DBDPI=300, + 400DPI なら -DBDPI=400 と設定してください。 + 縮小率は, 好みによりますが, + 解像度が 240DPI なら -DDEFAULT_SHRINK=\"3\", + 300DPI なら -DDEFAULT_SHRINK=\"4\", + 400DPI なら -DDEFAULT_SHRINK=\"5\" あたりが適当です。 + また, ウィンド移動のキー・バインディングを + vi ライクなものにしたいときには -DVI_KEY を設定してください。 + + < 実行例 > + + % vi Imakefile + (編集) + + 3.2 Makefile の生成 + + Imakefile の設定がすんだら Makefile の生成を行ないます。 + + < 実行例 > + + % xmkmf + % make includes + % make depend + + 3.3 アウトライン・フォント用ライブラリの設定 + + また, USE_ZEIT を Imakefile 中で #define した場合には, + VFlib-1.32 に移って, config.h および FontConf を編集します。 + 詳しくは Doc,euc を参照してください。 + + < 実行例 > + + % cd VFlib-1.32 + % vi config.h + (編集) + % vi FontConf + (編集) + % cd .. + + 4. コンパイル + + 設定が終ったらコンパイルを行ないます。 + + < 実行例 > + + % make + + 5. インストール + + 正常にコンパイルできたら, 実行ファイルおよびマニュアルのインストールを + 行ないます。 + + < 実行例 > + + % make install + % make install.man + + 必要ならば, さらに MakeTeXPK のインストールも行なってください。 + + < 実行例 > + + % make install.MakeTeXPK + + *1 これらは, + ftp.tohoku.ac.jp[130.34.8.9]:~ftp/pub/tex/dviwares/xdvi/PL17 などの + anonymous ftp などから入手できます。 + + *2 これらは, + ftp.ecei.tohoku.ac.jp[130.34.222.67]:~ftp/pub/GNU/gzip および + ftp.ecei.tohoku.ac.jp[130.34.222.67]:~ftp/pub/GNU/patch 以下にあります。 + +-- +1993年 9月15日(祝) すぎうら しげき + diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/README.ptex xdvik-22.40y1/texk/xdvik/READMEs/README.ptex --- xdvik-22.40y1.orig/texk/xdvik/READMEs/README.ptex 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/README.ptex 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,80 @@ + + << xdvi-17+ptex patch について >> + + 1995/11/09 + 竹中 浩 + lh36112@hongo.ecc.u-tokyo.ac.jp + KHB11235@niftyserve.or.jp + +○xdvi-17+ptex patch とは + xdvi-17 + miyu-patch for xdvi PL17 を ASCII pTeX の縦組み拡張 DVI に + 対応させるパッチです。このパッチを当てることで xdvi での縦組み表示が + 可能になります。 + +○動作を確認した環境 + linux 1.3.24 + Slackware 2.2 + JE-0.9.6 + +○インストールについて + + まず, xdvi PL17 のソース・ファイルである xdvi-17.tar.gz と、それに対 + するパッチ xdvi-17miyu.patch-beta7.pre.gz (*1)、さらに本パッチ + xdvi-17+ptex.patch を用意します。 + + 次に, 作業ディレクトリを作成して, そのディレクトリに移った後, + xdvi-17.tar.gz を展開します。そのまま, ディレクトリを移動しないで, + xdvi-17miyu.patch-beta7.pre.gz を用いてパッチをあてます。 + このとき, GNU のツールである gzip および patch が必要となります (*2)。 + 同様に xdvi-17+ptex.patch を用いてパッチをあてます。 + + あとは, システムに応じて Imakefile を編集した後, + xmkmf を実行して Makefile を生成して, make を実行します。 + + なお、miyu-patch for xdvi PL17 については、README.miyu-patch をよく + 読んでください。 + + (*1) これらは, ftp://ftp.tohoku.ac.jp/pub/tex/dviwares/xdvi/PL17 な + どの anonymous ftp などから入手できます。 + xdvi-17miyu.patch-beta6.gz や、Linux-JE の xdvi パッチでも OK + です。 + + xdvi-17+markpage+toc+printdvi[+paper] patch との共存は問題ありません。 + ただし Imakefile へのパッチあては当然うまくいかないでしょうから、 + Imakefile.rej などを参照して適当に手動で修正してやってください。 + + +○Use_PTEX について + 当然のことながら、これを define しなくては pTeX 対応になりません。試 + してませんが、たぶん Use_ASCIIDNP とはうまく共存できないだろうと思い + ます。 + +○tategaki.c について + xdvi-17+ptex.patch では横組み用の漢字フォントを縦組み用に修正して表 + 示します。このための修正情報のテーブルが tategaki.c に入ってます。 + + struct TateCorrection TateCorrectionTable[] = { + { TCOR_NOP, 0, 0 }, + { TCOR_SHIFT, 64, 96 }, /* 2122 '、' */ + { TCOR_SHIFT, 64, 96 }, /* 2123 '。' */ + { TCOR_SHIFT, 64, 96 }, /* 2124 ',' */ + { TCOR_SHIFT, 64, 96 }, /* 2125 '.' */ + { TCOR_SHIFT, 42, 42 }, /* 2126 '・' */ + { TCOR_ROTATE, 0, 0 }, /* 2127 ':' */ + : + + というような具合です。 + + 最初の項目が TCOR_NOP の場合には修正をしません。TCOR_SHIFT の場合に + は、位置の移動を行ないます。TCOR_ROTATE の場合には、右に90度回転して + から位置の移動を行ないます。'0x2121' などのように JIS の文字コードを + 指定した場合には、その文字のフォントで代替します。 + + 2番目、3番目の項目はそれぞれ x、y 方向の位置の移動量です。+/- 128 で + フォントの幅(高さ)の分だけ位置を左右(上下)にずらします。 + + 使用するフォントや好みによって適切な修正方法・量は異なると思うので、 + 見た目にこだわる方は適当に修正してやってください。 + +○著作権 + 日本の著作権法上放棄はできないはずですが、本パッチの著作権を積極的に + 主張するつもりはありません。配布・改造は自由です。 + diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/README.tasai-ussy xdvik-22.40y1/texk/xdvik/READMEs/README.tasai-ussy --- xdvik-22.40y1.orig/texk/xdvik/READMEs/README.tasai-ussy 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/README.tasai-ussy 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,312 @@ + + ** pagenumber-patch for Xdvi PL17 + etc. ** + +○はじめに + xdvi-17.pagenumber.patchは、"xdvi-17+miyu-patch for xdvi PL17"をベースにした +パッチである、"xdvi-17+markpage+toc+printdvi"に対するパッチです。 + +○追加/変更機能 + 本パッチをあてることにより以下の機能が追加/変更されます。 + + 1) 実際のPage番号によるTOCリスト + 小野@早稲田さんらによる xdvi-17+markpage+toc+printdvi パッチでは、ページ + 番号リスト(toc)を表示する機能が追加されましたが、tocに表示されるページ番号は + 実際のページ番号ではなく先頭からの枚数となっていました。 + 本パッチでは、実際のページ番号が表示されるように変更しました。 + + 2) ページ移動によるtocの自動アップデート + 'g'キーなどによるページ移動に伴って、tocのスクロールバー移動を自動的に行う + ように変更しました。いろいろと細工しましたので、実際に使ってみてください:-) + + 3) 一部キー動作の変更 + 'g'キーによる指定枚数への移動を、実際のページ番号への移動としました。これ + にともない、'P'キーによる絶対ページ番号を指定する機能を削除し、従来の'g'キー + の機能を割り当てました。 + +○インストールについて + 本パッチを使用するにあたって以下のファイルが必要です。 + + 1) xdvi-17.tar.gz + 2) xdvi-17miyu.patch-beta6 + 3) xdvi-17miyu.beta6-beta.pre7(fj.sources.d) + 4) xdvi-pl17+markpage+toc+printdvi(fj.sources,fj.comp.texhax) + 5) 同fix-1(fj.sources.d,fj.comp.texhax) + 6) 同fix-2(fj.sources,fj.comp.texhax) + 7) xdvi-17.tasai-ussy.patch(fj.sources.d,fj.comp.texhax) + Message-ID: + 8) xdvi-17.pagenumber.patch(fj.sources.d) + Message-ID: + + (注意) + 7)の一部(expertモード関係)は、すでに6)で修正されていますのでrejectされても + 問題ありません。本パッチは8)に対する修正パッチです。 + + 1)のを展開し 2)〜8)までのパッチをあてたソースがあるディレクトリで、 + % patch -p2 < xdvi-17.pagenumber-fix.patch +としてパッチをあててください。 + +○使用上の注意 + 本パッチで追加された機能は、Use_PAGENUM を Imakefile 中で define/undefine す +ることによって使用する/しないを切替えることが可能です。 + また、xdvi-pl17+markpage+toc+printdviにおいて Use_TOC を define していないと +意味のないものであることに注意してください。Use_TOC を定義せずに Use_PAGENUM +を定義した場合、動作の保証はできません。 + +○変更履歴 + +Nov.12, 1993 + Message-ID: + -- + 涙のファーストリリース(T_T) + * tocのページ番号を実際のページ番号となるようにした。 + +Nov.15, 1993 + Message-ID: + -- + * Imakefileでの些細な間違いを変更 + +Nov.18, 1993 + -- + 正式版リリース + * 一部キーの動作を変更(追加機能とのバッティングを防ぐため)。 + * ページ移動後のtoc自動アップデート機能を追加した。 + +From ussy@int.titech.ac.jp Mon Dec 13 18:58:45 1993 +Newsgroups: fj.comp.texhax,fj.sources.d +Path: hiromi.fuka.info.waseda.ac.jp!waseda-mail!wnoc-tyo-news!nirvana.cs.titech!cs.titech!is.titech!sys.titech.ac.jp!int.titech.ac.jp!ussy +From: ussy@int.titech.ac.jp (Takuya Harakawa) +Subject: BugPatch for Xdvi-17.miyu.path(beta.7) +Content-Type: text/plain; charset=ISO-2022-JP +Message-ID: +Followup-To: fj.sources.d +Sender: news@int.titech.ac.jp +Organization: Tokyo Institute of Tech., Dept. of Intelligence Science, Japan +Mime-Version: 1.0 +Distribution: fj +Date: 12 Nov 1993 21:13:58 +0900 +Lines: 188 +Xref: hiromi.fuka.info.waseda.ac.jp fj.comp.texhax:3143 fj.sources.d:1547 + + + はらかわ@東工大です。 + fj.comp.texhaxとfj.sources.dのクロスポストです。 + + xdvi-17+miyu.patch(beta.7)+markpage+toc+printdvi について、細かな +バグフィックスを行いました。 + + 修正した点は以下のとおりです(括弧内は修正した人)。 + +・ExpertモードでページのMark/UnMarkを行うと死ぬ +(tasai@int.titech.ac.jp: ASAI Toru) + + ページ番号を表示するList Widgetが作成されていないのに、これをアップ +デートしようとしているのが原因。アップデート処理をモードに応じてマスク +するようにした。 + +・マウスの中/右ボタンによるページ番号リストの選択処理 +(ussy@int.titech.ac.jp: HARAKAWA Takuya) + + リストの選択位置を単純にマウスのY座標を15で割って計算していたために、 +ページ数が多くなるとインデックスのずれが激しくなってしまう。List Widget +の内部を参照して、正確なインデックス番号を得られるようにした。 + + 修正パッチは shell archive してあります。 + xdvi-17+miyu.patch(beta.7)+markpage+toc+printdvi のソースが展開して +あるディレクトリで + % patch -p2 < xdvi-17.tasai-ussy.patch +としてパッチをあててください。 + +From ussy@int.titech.ac.jp Mon Dec 13 18:58:50 1993 +Newsgroups: fj.sources.d,fj.comp.texhax +Path: hiromi.fuka.info.waseda.ac.jp!waseda-mail!wnoc-tyo-news!cs.titech!is.titech!sys.titech.ac.jp!int.titech.ac.jp!ussy +From: ussy@int.titech.ac.jp (Takuya Harakawa) +Subject: Re: BugPatch for Xdvi-17.miyu.path(beta.7) +In-Reply-To: ussy@int.titech.ac.jp's message of Fri, 12 Nov 1993 12:13:58 GMT +Content-Type: text/plain; charset=ISO-2022-JP +Message-ID: +Followup-To: fj.sources.d +Sender: news@int.titech.ac.jp +Organization: Tokyo Institute of Tech., Dept. of Intelligence Science, Japan +References: +Mime-Version: 1.0 +Distribution: fj +Date: 15 Nov 1993 15:29:16 +0900 +Lines: 26 +Xref: hiromi.fuka.info.waseda.ac.jp fj.sources.d:1548 fj.comp.texhax:3144 + + + はらかわ@東工大です。 + +> はらかわ@東工大です。 +> fj.comp.texhaxとfj.sources.dのクロスポストです。 +> +> xdvi-17+miyu.patch(beta.7)+markpage+toc+printdvi について、細かな +>バグフィックスを行いました。 + + 自己フォローです(^^; + パッチを当てたのは... + + xdvi-17+miyu.patch(beta.7)+markpage+toc+printdvi + +ではなくて + + xdvi-17+miyu.patch(beta.pre7)+markpage+toc+printdvi + ~~~ +でした。 + バグフィックスも、改造パッチでも間違えてしまいました。:-( + お間違えのないように... + +-- +USSY / はらかわ たくや | Tokyo Institute of Tech., +Email: ussy@int.titech.ac.jp | Dept. of Intelligence Science, Japan + USSY@Pekin etc... | Hara Lab.(R1-520) ext.2473 in Nagatsuta + +From ussy@int.titech.ac.jp Mon Dec 13 18:59:08 1993 +Newsgroups: fj.sources.d +Path: hiromi.fuka.info.waseda.ac.jp!waseda-mail!wnoc-tyo-news!cs.titech!is.titech!sys.titech.ac.jp!int.titech.ac.jp!ussy +From: ussy@int.titech.ac.jp (Takuya Harakawa) +Subject: UnOfficial Patch for Xdvi-17.miyu.patch(beta.7) +Content-Type: text/plain; charset=ISO-2022-JP +Message-ID: +Followup-To: fj.sources.d +Sender: news@int.titech.ac.jp +Organization: Tokyo Institute of Tech., Dept. of Intelligence Science, Japan +Mime-Version: 1.0 +Distribution: fj +Date: 12 Nov 1993 23:14:03 +0900 +Lines: 242 + + + はらかわ@東工大です + xdvi-17+miyu.patch(beta.7)+markpage+toc+printdvi+tasai-ussy に対す +る改造パッチです。 + + 画面の右端に表示されているリストは、ページ番号ではなく先頭からの枚 +数が表示されているために、TOCを見ながら目的のページを参照するといっ +たことができません。 + これを解消するために、.dviファイルに記述されているページ番号を参照 +してリスト表示するように変更しました(ページの飛び越しなどにも対応で +きます)。目次のページ番号の関係上、リストに表示される番号が前後する +ことがありますが御了承ください:-< + +[注意] 'g'キーによるページ選択は以前のまま先頭からの枚数となっています。 + + 改造パッチは shell archive してあります。 + xdvi-17+miyu.patch(beta.7)+markpage+toc+printdvi+tasai-ussy のソー +スが展開してあるディレクトリで + % patch -p2 < xdvi-17.page.patch +としてパッチをあててください。 + +From ussy@int.titech.ac.jp Mon Dec 13 18:59:28 1993 +Newsgroups: fj.sources.d +Path: hiromi.fuka.info.waseda.ac.jp!waseda-mail!wnoc-tyo-news!cs.titech!is.titech!sys.titech.ac.jp!int.titech.ac.jp!ussy +From: ussy@int.titech.ac.jp (Takuya Harakawa) +Subject: an unofficial patch for Xdvi-17.miyu.patch(beta.pre7) +Content-Type: text/plain; charset=ISO-2022-JP +Message-ID: +Sender: news@int.titech.ac.jp +Organization: Tokyo Institute of Tech., Dept. of Intelligence Science, Japan +Mime-Version: 1.0 +Distribution: fj +Date: 15 Nov 1993 17:56:04 +0900 +Lines: 251 + + + はらかわ@東工大です + + 先日ポストした Xdvi-17 改造パッチに間違いが発見されましたので、再 +度ポストします(^^; + 先日のパッチは破棄して、今回のパッチをあて直してください。 + (変更点は Imakefile の一部です... Thanks to miura@cs.titech.ac.jp) + +--- + + 画面の右端に表示されているリストは、ページ番号ではなく先頭からの枚 +数が表示されているために、TOCを見ながら目的のページを参照するといっ +たことができません。 + これを解消するために、.dviファイルに記述されているページ番号を参照 +してリスト表示するように変更しました(ページの飛び越しなどにも対応で +きます)。目次のページ番号の関係上、リストに表示される番号が前後する +ことがありますが御了承ください:-< + +[注意] 'g'キーによるページ選択は以前のまま先頭からの枚数となっています。 + + 改造パッチは shell archive してあります。 + xdvi-17+miyu.patch(beta.pre7)+markpage+toc+printdvi+tasai-ussy +のソースが展開してあるディレクトリで + % patch -p2 < xdvi-17.page.patch +としてパッチをあててください。 + +From ussy@int.titech.ac.jp Mon Dec 13 18:59:32 1993 +Newsgroups: fj.sources.d +Path: hiromi.fuka.info.waseda.ac.jp!waseda-mail!wnoc-tyo-news!cs.titech!is.titech!sys.titech.ac.jp!int.titech.ac.jp!ussy +From: ussy@int.titech.ac.jp (Takuya Harakawa) +Subject: Re: an unofficial patch for Xdvi-17.miyu.patch(beta.pre7) +In-Reply-To: ussy@int.titech.ac.jp's message of Mon, 15 Nov 1993 08:56:04 GMT +Content-Type: text/plain; charset=ISO-2022-JP +Message-ID: +Lines: 31 +Sender: news@int.titech.ac.jp +Fcc: |/usr/local/lib/mh/rcvstore +AuthorCopy +Organization: Tokyo Institute of Tech., Dept. of Intelligence Science, Japan +References: +Mime-Version: 1.0 +Distribution: fj +Date: 15 Nov 1993 20:28:26 +0900 + + + またまた はらかわ@東工大です + +> 先日ポストした Xdvi-17 改造パッチに間違いが発見されましたので、再 +>度ポストします(^^; +> 先日のパッチは破棄して、今回のパッチをあて直してください。 +> (変更点は Imakefile の一部です... Thanks to miura@cs.titech.ac.jp) + + とは書いたものの、すでにパッチを当ててしまった方がいらっしゃるよう +ですので、そのような方のために変更部分だけポストします。 + + 実際に変更した部分は Imakefile の 部分で... + + #define Use_PAGENUM + PAGE_DEFS=-DPAGENUM + #else + ... + +となっている部分を、 + + #ifdef Use_PAGENUM <-- 変更点 + PAGE_DEFS=-DPAGENUM + #else + ... + +としただけです(情けないこってす T_T)。 + +-- +USSY / はらかわ たくや | Tokyo Institute of Tech., +Email: ussy@int.titech.ac.jp | Dept. of Intelligence Science, Japan + USSY@Pekin etc... | Hara Lab.(R1-520) ext.2473 in Nagatsuta + +From ussy@int.titech.ac.jp Mon Dec 13 18:59:55 1993 +Newsgroups: fj.comp.texhax,fj.sources.d +Path: hiromi.fuka.info.waseda.ac.jp!waseda-mail!wnoc-tyo-news!cs.titech!is.titech!sys.titech.ac.jp!int.titech.ac.jp!ussy +From: ussy@int.titech.ac.jp (Takuya Harakawa) +Subject: Xdvi-17 pagenumber patch fix +Content-Type: text/plain; charset=ISO-2022-JP +Message-ID: +Followup-To: fj.sources.d +Lines: 469 +Sender: news@int.titech.ac.jp +Fcc: |/usr/local/lib/mh/rcvstore +AuthorCopy +Organization: Tokyo Institute of Tech., Dept. of Intelligence Science, Japan +Mime-Version: 1.0 +Distribution: fj +Date: 18 Nov 1993 06:58:38 +0900 +Xref: hiromi.fuka.info.waseda.ac.jp fj.comp.texhax:3157 fj.sources.d:1556 + + + はらかわ@東工大です + + xdvi-17+miyu-patcj+markpage+toc+printdvi+tasai-ussy+pagenumber(^^; +のfix & version upパッチをお送りします。 + + 前回 流したものにさらにパッチをあててください。 diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/README.vf2ft xdvik-22.40y1/texk/xdvik/READMEs/README.vf2ft --- xdvik-22.40y1.orig/texk/xdvik/READMEs/README.vf2ft 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/README.vf2ft 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,100 @@ +* xdvik-22.40l-j1.09-vf2ft.patch について + +http://www.matsusaka-u.ac.jp/~okumura/texfaq/qa/6610.html で提案されて +いた、VFlibを使わずにfreetype2のみでxdviの日本語化を実現する方策を、と +りあえずパッチ形式にし、また、configure時にその方策を選択できるように +しました。 + + $ ./configure --with-vflib=vf2ft + +のようにすると、VFlib APIをFreetypeのもので置き換えます。それ以外であ +れば、これまでのxdvi-jpパッチと同等となります。 + +縦書き等、多々問題があると思いますが、VFlib無しでfreetype2を使えるよう +にという試みは、選択肢が増えるという意味でも意義があるものと思います。 + +以下、この試みの初出と思われるウェブサイトの全文引用およびtarball中の +memoを転載させていただきます。但し、memo中で書かれている手順1,2,3の記 +述は本パッチでは該当しないので読み飛ばして構わないでしょう。 + + +○ xdvi-ft2.tar.gz について +〜ここから〜 +URL: http://www.matsusaka-u.ac.jp/~okumura/texfaq/qa/6610.html +Title: xdvi using freetype +名前: otofuji +日時: 2002-02-15 22:57:22 + +乙藤@東北学院大学と申します. + +ばかばかしいといってしまえばそれまでですが, xdviの中で利用されている +VFlibの関数をFreetypeの関数で置き換えるためのものを作って + +ftp://ftp.cs.tohoku-gakuin.ac.jp/pub/TeX/TG-Local-TeX/xdvi-ft2.tar.gz + +に置いておきました. パッチにもなっていませんが... + +xdviの利用しているフォントファイルがttfファイルかotfファイルを使って +いる場合だけ利用できます. + +メリットは +o XFree86にFreetypeが付いている状況なので, VFlibを用いずにX Window環境 + だけで利用できる +o FreetypeではOpentypeもサポートされているので, そのままでOpentypeが利 + 用できる +くらいでしょうか + +P.S. Ghostscriptもこれができると面白いのですが. +〜ここまで〜 + + +○ xdvi-ft2.tar.gz内のmemo +〜ここから〜 +xdvikの中でFreetypeを使うことを考えた試作品です. vf2ft-utils.cだけが入っ +ています. VFlibのコードを参考に利用させてもらっています. + +VFlib2を使う場合が多かったのですが, XFree86に標準でfreetypeが入ってき +たので, なるべくX windowシステムだけで利用できないかと思って作ったもの +です. freetypeではOpentypeフォントも利用できるので, 面白いのかもしれま +せん. + +縦書きの確認はしていません. + +1. texk/xdvikの下に, vf2ft-utils.cを移動させ, + cc -c -O2 -I/usr/X11/include/freetype2 vf2ft-utils.c + を実行しておく. + +2. configure 実行後, make の前にtexk/xdvikのMakefileを修正する. + 2.1. objects の最後に vf2ft-utils.o を追加する. + 2.2 -lVFlib の部分を -lfreetype に変更する. + +3. 普通に "make", "make install"する. + make時に VF.h がないと文句をいうかもしれません. include 行をコメン + トアウトして, で大丈夫だと思います(未確認) + +4. vfontmapを以下のように修正する. + + min 明朝体のttfファイル or otfファイル + goth ゴシックのttfファイル or otfファイル +---- +Edition Record: 020215, 020220 +〜ここまで〜 + +○ vfontmapの記述例 + +Win上のUNIX的環境であるCygwin/XFree86での例となりますが、例えば +/usr/local/share/texmf/xdvi/vfontmap に、 + +〜ここから〜 +min /cygdrive/c/WINDOWS/Fonts/msmincho.ttc +goth /cygdrive/c/WINDOWS/Fonts/msgothic.ttc +〜ここまで〜 + +のように記述することでASCII pTeXの日本語dviが扱えるようになります。他 +のフォント及びマッピングについては、これを参考にxdvi-jpパッチのドキュ +メント類を参考にしてください。 + +また、提案tarball中のsuppl.tarに入っていた、コード変換に関するサンプル +get-mapping.c、フォントマッピングテーブルに関するサンプル +get-origfontfile.cについては、このパッチでは反映されていませんが、検討 +すべき問題提起がされていると思います。(山田 泰司) diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/README.xdvik-22.15-j1.04.patch xdvik-22.40y1/texk/xdvik/READMEs/README.xdvik-22.15-j1.04.patch --- xdvik-22.40y1.orig/texk/xdvik/READMEs/README.xdvik-22.15-j1.04.patch 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/README.xdvik-22.15-j1.04.patch 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,217 @@ + + << xdvik-22.15-j1.04 patch について >> + + 2000年7月18日 + + +[1] xdvik-22.15-j1.04 patch とは + + xdvik-22.15 に対する日本語化および機能拡張パッチです。このパッチは +既に出回っているいくつかの日本語パッチに修正や改変を加えたものです。 +パッチの変更履歴は CHANGES.xdvik-jp を御覧下さい。 + + +[2] コンパイル・インストール + + とりあえず、xdvik-22.15.tar.gz と xdvik-22.15-j1.04.patch.gz が同じ +ディレクトリにあるとして…。 + + % gzip -dc xdvik-22.15.tar.gz | tar xf - + % cd xdvik-22.15 + % gzip -dc ../xdvik-22.15-j1.04.patch.gz | patch -p1 -s + % ./configure + % make + # make install + +で、デフォルトの設定でインストールされます。 + + kpathsea ライブラリは既にインストール済みだから xdvi 部分だけをインス +トールしたいという場合は、texk/xdvik に移動してから make install して下さい。 + + また、デフォルトでは -g オプション付で make されると思いますが、これだと +やたらと実行ファイルが大きくなりますので、configure 実行時に + + % env CFLAGS="-O2" ./configure + +等を指定した方がいいかもしれません。 + + + 設定変更は configure スクリプトのオプションで指定します。 + +★デフォルトの紙のサイズ + + --enable-a4 A4 (デフォルト) + --disable-a4 US letter + + オリジナルの xdvik では US letter の方がデフォルトでしたが、日本語 +パッチを当てると A4 の方がデフォルトになります。 + + +★シェアドライブラリ + + --enable-static kpathsea ライブラリはスタティックリンク (デフォルト) + --enable-shared kpathsea ライブラリはダイナミックリンク + + +★明朝体とゴシック体以外の日本語書体の使用 + + --with-vfontmap 多書体を使う。(デフォルト) + --without-vfontmap 多書体を使わない。 + + vfontmap のデフォルトは、/usr/local/share/texmf/xdvi/vfontmap です。 +変更する場合は後述の --enable-xdvietcdir で指定します。--with-vfontmap +の場合、この指定パスにファイルが存在しない場合は、サンプルがインストール +されます。(既存の場合、上書きはされません) + + +★日本語フォントの指定 + + --with-vflib ASCII, NTT 共に VFlib を使う。(デフォルト) + --with-vflib=nontt ASCII で VFlib を、NTT で PK フォントを使う。 + --without-vflib ASCII, NTT 共に PK フォントを使う。 + + --without-vflib を指定した場合は自動的に --without-vfontmap になります。 + + +★画面移動キーの変更 + + --enable-vikey vi 風の h,j,k,l を使います。 (デフォルト) + --disable-vikey xdvi 標準の l,d,u,r を使います。 + + +★パネルのサイズ指定 + + --enable-smallpanel パネルサイズを小さめにします (デフォルト) + --disable-smallpanel xdvi 標準サイズにします。 + + +★拡大縮小ボタン + + --enable-zoombutton 拡大ボタンと縮小ボタンを付けます (デフォルト) + --disable-zoombutton xdvi 標準の固定倍率への変更ボタンを付けます + + +★Shrink サイズの指定 + + --enable-shrink=6 デフォルトの Shrink サイズを指定します。 + + 指定しない時のデフォルトは 10 になります。数字が大きいほど表示は小さく +なります。 + + +★ベース DPI の指定 + + --enable-bdpi=300 PK フォントのベース DPI を指定します。 + + 指定しない時のデフォルトは 600dpi です。 + + +★xdvi からの印刷コマンドを指定します。 + + --enable-xdviprint 新しい DVISEL 機能を使って印刷します (デフォルト) + --disable-xdviprint 従来の PRINTDVI 機能を使って印刷します + + DVISEL 機能と PRINTDVI 機能の違いは… + + DVISEL + xdvi で指定ページの DVI を切り出し、外部コマンドにパイプで引き渡し + ます。外部コマンドはパイプ(標準入力)から DVI を受け取りプリントします。 + 通常、この外部コマンドには内部で dvips/dvi2ps/jdvi2kps 等を呼び出す + スクリプトを指定します。READMEs/README.xdvi20c-j1.0+hal2+dvisel も + 参照して下さい。 + + PRINTDVI + xdvi で予め指定されてる印刷コマンド(%P %R など)に従い、印刷する + ページ等を引数指定して外部コマンド(通常 dviselect)を呼び出して、 + 指定ページを切り出し、その後プリンタドライバに合わせて紙のサイズ + を指定する引数の変更等をし、その引数を指定して、プリンタドライバー + 等を動かします。READMEs/README.markpage+toc+printdvi+paper も + 参照して下さい。 + + なお、DVISEL 機能を使う場合は、指定する外部コマンドを + + --enable-xdviprint=/usr/libexec/xdviprint + +のように変更できます。デフォルトは /usr/local/bin/xdviprint です。 +指定は絶対パスで行ないます。(実行時にリソース等でも変更できます) + + また、PRINTDVI 機能を使う場合は texk/xdvik/xdvi-config.h の +PRCMDALL, PRCMDCUR, PRCMDMRK, PRCMDRGN, PRCMDLST, TEMPDIR, DVIFILTERCMD, +FILTOPTTBLFILE の各マクロを自分の環境に合わせて変更して下さい。configure +では変更できません。 + + +★印刷に使う DVI→PS フィルタ + + --with-dvifilter=dvips dvips (デフォルト) + --with-dvifilter=dvi2ps dvi2ps + --with-dvifilter=jdvi2kps jdvi2kps + --without-dvifilter xdvi から印刷機能をなくします。 + + この指定は、上述オプションで DVISEL と PRINTDVI のどちらを指定したか +で意味が変わります。 + + DVISEL の場合、この指定に合わせたサンプルスクリプトを上述の + --enable-xdviprintで指定したパスにインストールします。既にインストール +されてる場合は上書きしませんので、この指定は意味をしません。DVISEL は +xdvi バイナリ内にはプリンタドライバの違いは含めず、全て外部スクリプトで +違いを吸収します。スクリプトなので、インストール後でも変更可能です。 + + PRINTDVI の場合、この設定を xdvi バイナリ内に埋め込み、xdvi はデフォ +ルトでここで指定したプログラムを起動するようになります。(実行時にリソース +等でも変更可能) + + また、--without-dvifilter を指定した場合は、DVISEL 機能も PRINTDVI 機能 +も使いません。 + + +★設定ファイル等のインストールディレクトリ + + --enable-xdvietcdir=/etc/tex 設定ファイル等のディレクトリ指定 + + vfontmap や xdvipaper.dvips 等のオプションテーブルがインストールされる +ディレクトリを指定します。デフォルトは /usr/local/share/texmf/xdvi です。 + + + +【特殊な設定をする場合】 + + これら以外の設定をする場合は、texk/xdvik/ 以下の Makefile や xdvi-config.h +を変更して下さい。 + + また、「うちはまだ TeX 2.99 (ASCII jtex-1.7 等) を使ってて kpathsea +なんてないよ」という方は、是非とも TeX 3.x (ASCII pTeX 2.x 等)のインス +トールをお勧めしますが、一応 kpathsea をインストールせずに動かす事も +出来るようです。:-) + この場合、まず texk/kpathsea/texmf.in の PKFONTS や TFMFONTS 等の +指定を自分の環境に合わせて書き換えます。例えば、 + +PKFONTS = .;/usr/local/lib/fonts/pk600;/usr/local/lib/fonts/pk300 + +とします。それから configure をして、static リンクで make すれば、OK +です。kpathsea 設定ファイルやライブラリ等がインストールされてなくても、 +ここに指定したディレクトリ(バイナリ埋め込みになる)を探します。他にも +mf がないのなら、--without-mktexpk-default や --without-mktexmf-default +なども指定しておいた方がいいかも知れません。 + + +[3] 著作権について + + 本パッチはかなり多くの方々の総合著作物です。パッチの著作権はそれぞれ +のパッチ作成者にあります。詳しくは READMEs/ 以下のドキュメント群を参照して +下さい。 + + 本パッチの再配布は自由に行って構いませんが付属のドキュメント類 +(READMEs/ 以下のファイル)はそのままの形で添付してください。また改変 +も自由に行って構いませんが、改変したものを配布する場合は、 + + xdvi-jp メーリングリスト + +まで連絡頂けると幸いです。バグ報告、提案、その他の連絡等も上記までお願い +します。 + + また、開発に参加したい等、ML の subscribe 希望の方はまずは、guide と +だけ書かれたメールを までお送り下さい。 +こちらは xdvi-jp ではなく xdvi-jp-ctl です。 + +/* xdvi-jp メーリングリスト */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/README.xdvik18f-j1.0.patch xdvik-22.40y1/texk/xdvik/READMEs/README.xdvik18f-j1.0.patch --- xdvik-22.40y1.orig/texk/xdvik/READMEs/README.xdvik18f-j1.0.patch 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/README.xdvik18f-j1.0.patch 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,103 @@ +*このパッチについて + このパッチ (xdvik18f-j1.0.patch) は xdvik18f を日本語対応にするため +(及び幾つかの附属機能を加えるため)のもので、xdvi PL18 に対する幾つか +のパッチを元に若干の修正を行って作ったものです。取り敢えず日本語の表 +示に関してはうまく行くようなので、version 1.0 としました。 + + +*環境 + ベクトルフォントライブラリ VFlib 2.* を用いて VFlib.a が作成されて +いることを想定しています。 + + +*パッチの当て方 + オリジナルの xdvik18f を展開したディレクトリにおいて + + % patch < xdvik18f-j1.0.patch + +として下さい。 + + +*コンパイル + 下記の設定を行ったのち、普通にコンパイルして下さい。但し OSF/1 では +-DOSF1 オプションを付けて下さい。 + + +*設定について + 各種の設定は xdefs.make (printdvi のテンプレートは config.h) で行う +ようにしてあります。各オプションの意味は次の通りです。 + -DNOZEIT ASCII日本語TeX/NTT JTeX 共に dnp (互換) フォントを用いる。 + -DNONTTZEIT NTT JTeX は dnp (互換) フォントを用いる。 + -DNOTOC TOC 機能を使用しない。 + -DNOMARKPAGE MARKPAGE 機能を使用しない。 + -DNOPRINTDVI PRINTDVI 機能を使用しない。 + -DVI_KEY キーバインドを vi 風にする。 + -DSMALL_PANEL コントロールパネルが小さな画面にも収まるようにする。 + デフォルトの設定では、日本語表示に関しては VFlib を利用し、また markpage, +toc, printdvi の機能は使用するようになっています。 + markpage, toc, printdvi の設定についてはオリジナルの作者による文書 +(README.markpage+toc+printdvi)を御覧下さい。 + + +*動作確認 + 私は DEC OSF/1 V3.0B + gcc 2.6.3 の環境の元に GNU malloc をリンク +して xdvi を生成し、以下の点についてのみ非常に簡単なテストを行いました。 + 日本語文書(ASCII/NTT)のVFlibを用いた、又は dnp (互換) フォントによる表示 + toc, vi_key, printdvi, small_panel の(一部の機能の)動作確認 + eclepsf.sty, epsbox.sty による EPS ファイルの表示 + + +*問題点 + 取り敢えずの問題点としては + 1. -DNOTEXXET を付けないとコンパイル出来ない。 + 2. configure script を有効に利用していない(OS 依存のオプションを + 手で付けなければならないなど)。 + 3. \special{header=...} がうまく作動しない。 + 4. ASCII日本語TeX を dnp (互換) フォントで表示する場合、フォントが + 見つからない時に MakeTeXPK を呼び出そうとしない。 + 5. 縦書きには対応していない。 +があげられますが、他にもいろいろ出てくると思います。 + + +*オリジナルのパッチについて + このパッチは xdvi PL18 に対するパッチのうち、 + 岡川@東京大さんの xdvi18.vflib.patch + 内山@神戸大さんの xdvipl18_epsbox+elepsf+selfile+vikey.patch + のうち selfile の部分を除いたもの + 内山@神戸大さんが投稿された markpage, toc, printdvi, small_panel + の機能を付け加えるためのパッチ + Patrice Belleville@Simon Fraser Univ. さんの \special{header=...} + に対する patch +を元に若干の修正を行う事により作成されました。これらの有用なパッチを +作成、公開して下さった方々に感謝致します。 + なおこれらのパッチが投稿された時の文書を HEADERS.DOC にまとめてあります。 + + +*xdvi PL18 に対するパッチからの変更点 + 1. font-open.c に jfm を open するコードを書き加えた。 + 2. special.c における psh_header 関数を kpathsea 利用の形に + 書き換えた。 + 3. OSF/1 に対応させた。 + 4. 600 dpi でも表示出来るように shrink ボタンを 7 個に増やした。 + 5. その他の数々の小さな修正。 + + +*お願い + 本パッチの御使用に際しては次の点について御了承ください。 + 1. 本パッチは完全を期したものではありません。バグのため不具合が生じる + 事もありえます。これらについて本パッチの作者はいかなる形の責任をも + 負いかねます。 + 2. 本パッチの作者は xdvi PL18 に対するパッチに加えられた改変部分に関 + する質問以外の、あらゆる形の問い合わせには応じかねます。 + バグフィックスや改良は大歓迎です。ニュースに直接投稿して頂いても結構で +すが、その際には私まで一言メールを下さると助かります(全ての記事をフォロー +している訳ではありませんので)。 + + +*謝辞 + 最後になりましたが、大変丁寧なアドバイスを頂いた北川 勝浩@大阪大さん +に感謝致します。 + +中山 一昭 +東京大学大学院理学系研究科 +nakayama@monet.phys.s.u-tokyo.ac.jp diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/README.xdvik18f-j1.1p5.patch xdvik-22.40y1/texk/xdvik/READMEs/README.xdvik18f-j1.1p5.patch --- xdvik-22.40y1.orig/texk/xdvik/READMEs/README.xdvik18f-j1.1p5.patch 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/README.xdvik18f-j1.1p5.patch 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,322 @@ +*xdvik18f-j1.1p5.patch について + + 千葉大学 総合情報処理センター + 山賀正人 (yamaga@ipc.chiba-u.ac.jp) + + + このパッチは xdvi (xdvik-18f) で日本語 (ASCII-pTeX および NTT-JTeX) +を表示できるようにするパッチです。 + +このパッチは以前 中山@東大(現:信州大)さん が作られた xdvik18f-j1.0 パッ +チに以下の修整を加えたものです。 + + 1. 小野@早稲田さん 他による xdvi-17 の markpage+toc+printdvi + パッチに相当する部分を markpage+toc+printdvi+paper パッチ + に置き換え + + 2. 竹中@東大さんによる xdvi-17 の pTeX 縦書き用パッチを適応 + (内山@神戸大 さんによる作業) + + 3. 明朝体とゴシック体以外の日本語表示可能 + + 4. いくつかのバグの修整 + +中山さんのパッチについては添付の READMEs/README.xdvik18f-j1.0.patch を +参照してください。 + + + +[1] コンパイル・インストール + + (1) ソースを展開 + + % gunzip -c xdvik-18f.tar.gz | tar xvf - + + (2) パッチをあてる + + % cd xdvik-18f/xdvik + % patch -p < (somewhere)/xdvik18f-j1.1p5.patch + + (3) xdefs.make を自分の環境に併せて変更 + + % vi xdefs.make または mule xdefs.make + + まず FILTOPTTBLDIR を自分の環境に合わせて変更します。FILTOPTTBLDIR + は xdvi から直接プリントアウトする場合に用いる dvi --> ps フィルタ + コマンドのオプション変換テーブルファイル xdvipaper.* の置き場所を + 指定するものです。 + + また dvi --> ps フィルタとして default の dvi2ps-j 以外を使用する + 場合は xdefs.make の FILTOPTTBLFILE と config.h の DVIFILTERCMD + も変更します。その他に default のプリンタやプリントアウトコマンド + を変更したい場合は config.h の DVIPRINTER や PRINTCMD をそれぞれ + 変更してください。 + + この markpage+toc+printdvi+paper パッチ部分の機能についての詳細は + READMEs/README.markpage+toc+printdvi+paper を参照してください。 + + 更に以下の3通りのうち、いずれかを選択してください。 + + (3-1) VFlib を用いる場合 + + xdefs.make 中の DEFAULT_FONTMAP を自分の環境に併せて変更します。 + + ********************************************************************* + * DEFAULT_FONTMAP で指定するファイル名は日本語フォントを VFlib の * + * どのフォントにマップするかを指定するファイルです。 * + * * + * vfontmap は VFlib の vfontcap とは別のものです。 * + * * + * 詳しいことは [2] で説明します。 * + ********************************************************************* + + ただし日本語多書体表示機能を利用しない場合はこの設定は必要ありません。 + その替わり XDEFS に -DNOVFONTMAP を指定してください。 + + (3-2) VFlib を用いずに大日本印刷の pk フォントを用いる場合 + + xdefs.make 中の XDEFSに -DNOZEIT を指定し、VFLIB の行をコメント + アウトしてください。この場合 vfontmap による日本語多書体表示機能は + 使えません。 + + (3-3) NTT-JTeX に対してのみ大日本印刷の pk フォントを用いる場合 + + xdefs.make 中の XDEFS に -DNONTTZEIT を指定してください。この場合 + ASCII-pTeX に対しては日本語多書体表示機能が使えますが NTT-JTeX に + 対しては使えません。 + + + (4) トップディレクトリで configure --> make + + % cd .. + % ./configure + % make + + (5) インストール + + % su + + # make install + + (注) 既に TeX (3.1415以降)がインストールされている場合はディレクト + リ xdvik に移動してから make install したほうが良いでしょう。 + + + +[2] 明朝体とゴシック体以外の日本語を表示させる方法 + + まずマップファイル (default では /usr/local/lib/texmf/xdvi/vfontmap) +に以下のように記述しておきます。 + + mgoth maru + fmin fmin + fgoth goth + +間にスペース、もしくはタブを入れて第一カラムに "dvi ファイル中のフォント名"、 +第二カラムに "VFlib の vfontcap に登録されたフォント名" のように記述しておく +だけで新たに xdvi を再コンパイルすることなく、自由に日本語の書体を追加する +ことができます。 + +またこのマップファイル中に明朝体とゴシック体の二書体を指定しない場合は +default で + + min min # for ASCII + nmin min # for ASCII + goth goth # for ASCII + ngoth goth # for ASCII + dm min # for NTT + dg goth # for NTT + +と設定されます。 + +このマップファイル中では # 以降がコメントとして扱われます。またこのマッ +プファイルは環境変数 VFONTMAP および起動時のオプション + + -vfontmap [マップファイル名] + +または X の resource + + xdvi*vfontmap: [マップファイル名] + +で変更可能です。ただし優先準位は + + 1. 起動時のオプション + 2. X の resource (xdvi*vfontmap) + 3. 環境変数 VFONTMAP + +の順に低くなっていきます。 + + この vfontmap を用いた機能のうち NTT-JTeX への対応部分は 川地@東大 +さん による xdvik18f-j1.0+vfontmap-ntt.patch を参考にさせていただいて +おります。 + +# NTT-JTeX で日本語の多書体を扱うためのスタイルファイルなどについては +# 川地さんの作成なさった Web page +# +# http://www.cim.pe.u-tokyo.ac.jp/~kawachi/software/xdvik18f.html +# +# を参照してください。 +# +# また ASCII-pTeX で多書体を扱う方法は VFlib に付属の jTeX/README.euc +# や doc/QA.txt などをご覧ください。 + + + +[3] 著作権について + + 本パッチは東大の中山さんのパッチ xdvik18f-j1.0.patch を含んでおりま +すが、その中山さんのパッチに含まれていた部分および本パッチから新たに組 +み込まれたコードの著作権は以下の方々にあります。 + + miyu patch に起因する部分 + 杉浦茂樹さん + 他 + + (詳細は竹中さんによる READMEs/README.jp-patch + をご覧ください) + + pTeX 縦書き対応部分 + 竹中浩さん + (xdvi-17jp.960209 より) + + markpage+toc+printdvi+paper パッチに起因する部分 + 松浦俊さん + 平原厚志さん + 小野康一さん + 他 + + (詳細は小野さんによる + READMEs/README.markpage+toc+printdvi+paper + をご覧ください) + + また本パッチのうち vfontmap に関わる部分 (vfontmap.c) の著作権は山賀 +(yamaga@ipc.chiba-u.ac.jp)にありますが、それ以外の部分に関しては山賀は +パッチのとりまとめを行っただけですので著作権を一切主張いたしません。同 +様に内山@神戸大さんも + + 「パッチをつくる作業をしたのみで, 著作権の主張をするものではない」 + +と明言なさっています。 + + + +[4] その他の修整点 + + (1) default の Shrink factor を 4 にした(xdvi.c) + + (2) -help オプションでのヘルプメッセージを修整(xdvi.c) + + (3) xdvi.1 の内容を修整するために mksedscript と xdvi.man を修整 + (プリントアウトコマンドの設定値などを config.h から拾うように) + + (4) Shrink を変更すると core dump するバグの修正(zeit.c) + + ※ Hayakawa Koichi さん と 内山@神戸大 さん からのご指摘によるものです。 + + (5) FreeBSD でコンパイル可能に + + ※ 萩原@農工大さんが fj.comp.texhax に投稿された patches.tgz + (HITOSHI.96Apr30100219@mail01.tuat.ac.jp)に含まれている + freebsd.patch より + + (6) \" が Shrink の変更についていかないバグ、及び NTT-JTeX で「投」の + 文字が Shrink の変更についていかないバグの修整(dvi_init.c) + + ※ 高村@NTT HI研 さん からいただいたパッチです。 + + (7) 一部の FreeBSD で Segmentation Fault するバグの修整 (vfontmap.c) + + ※ 森田@京大 さん からいただいたパッチです。 + + (8) ASCII pTeX 日本語フォント (jfm) に関しては virtual font を先に読ま + ないように (font-open.c) また Linux でコンパイル可能に + + ※ 内山@神戸大 さん からいただいたパッチです。 + + (9) FreeBSD, Linux 上で selfile ウィンドウのスクロールバーが正しく表示 + されないバグの修整 (sfinternal.h) + + ※ 中山@信州大 さん からいただいたパッチです。 + +(10) SMALL_PANEL を指定した場合ページ番号の表示部分が画面からはみ出て + しまうバグの修整 (toc.c) + + ※ 萩原@農工大 さん からいただいたパッチです。 + +(11) pstricks を使っている場合に PS の図が正しく表示されないバグの修正 + (special.c) + + ※ 中山@信州大 さん からいただいたパッチです。 + +(12) SunOS4.1.3_U1 の cc でコンパイルできるように + (dvi_init.c, special.c, xdvi.h) + + ※ 近藤@茨城大 さん からいただいたパッチです。 + +(13) 東京書籍印刷同様の写研フォントにあわせたフォント名でも vfontmap + の機能が使えるように (dvi_init.c) + + ※ 大岩@東大 さん からいただいたパッチです。 + + fj.comp.texhax + + +(14) 縦書き表示に関する誤動作を修正 (dvi_draw.c, dvi_init.c, xdvi.h) + + ※ 竹中@東大 さん の xdvi-17 に対するパッチを 大岩@東大 さん + によって xdvik-18f に適応したものです。 + + fj.comp.texhax + + + + + + +(15) -DNOZEIT, -DNONTTZEIT, -DNOPRINTDVI に対して正常に動作するように + (font-open.c, xdvi.c, dvi_init.c, vfontmap.c, print.c) + +(16) ASCIIDNP でも pTeX の縦書きが表示できるように (dvi_init.c, pk.c) + +(17) ASCIIDNP で pTeX の min8 のフォントを表示しようとすると core dump する + バグの修正、および縦書きの表示で()〈〉などがずれてしまうバグの修正 + (dvi_init.c, tategaki.c) + + ※ 竹野@新潟工科大 さん からいただいたパッチです。 + + + +[5] 注意事項 + + 本パッチの再配布は自由に行って構いませんが付属のドキュメント類 +(READMEs 以下のファイル)は必ずそのままの形で添付してください。また改変 +も自由に行って構いませんが、改変したものを配布する場合は山賀 +(yamaga@ipc.chiba-u.ac.jp)まで御連絡ください。またその際にも私からお願 +いすることになると思いますが、上で上げた各パッチの著作権保有者には必ず +連絡をしてください。 + + + +[6] 最後に + + 本パッチ作成にあたりご協力いただいた多くの皆様に感謝いたします。特に +電子メールにより御助言を賜わった以下の方々に対し、そのお名前を列挙する +ことで感謝の意を表したいと思います。 + + 内山 孝憲 様 + 小野 康一 様 + 杉浦 茂樹 様 + 竹野 茂治 様 + 竹中 浩 様 + 中山 一昭 様 + 萩原 斉 様 + + (五十音順) + +このパッチに関する質問やご意見ご感想は + + yamaga@ipc.chiba-u.ac.jp + +まで。 + 平成9年3月3日(月) diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/README.xdvik20a-j1.1.patch xdvik-22.40y1/texk/xdvik/READMEs/README.xdvik20a-j1.1.patch --- xdvik-22.40y1.orig/texk/xdvik/READMEs/README.xdvik20a-j1.1.patch 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/README.xdvik20a-j1.1.patch 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,273 @@ +*xdvik20a-j1.1.patch について + + 千葉大学 総合情報処理センター + 山賀正人 (yamaga@ipc.chiba-u.ac.jp) + + + このパッチは xdvi (xdvik-20a) で日本語 (ASCII-pTeX および NTT-JTeX) +を表示できるようにするパッチです。 + +このパッチは xdvik-18f に対する日本語化および機能拡張パッチ +xdvik18f-j1.1p5.patch を xdvik-20a に適用したものです。 +# この作業は 籠谷@岡山大 さん によって行われました。 + +xdvik18f-j1.1p5.patch については添付の READMEs/README.xdvik18f-j1.1p5.patch +を参照してください。 + + + +[1] コンパイル・インストール + + (1) ソースを展開 + + % gunzip -c xdvik-20a.tar.gz | tar xvf - + + + (2) パッチをあてる + + % cd xdvik-20a/xdvik + % patch -p < (somewhere)/xdvik20a-j1.1*.patch + + + (3) トップディレクトリで configure を実行し Makefile を作成する + + % cd .. + % ./configure + + ただし日本語フォントに何を使うか、また xdvi から直接プリントアウトする + 場合に用いる dvi --> ps フィルタとして何を使うかで configure 実行時の + オプションが以下のように異なるので注意してください。 + + 何もオプションを付けないで configure を実行した場合は ASCII, NTT 双方で + 日本語フォントに VFlib を用い、明朝体とゴシック体以外の日本語も使えるよう + になります。また dvi --> ps フィルタとしては dvips を使います。 + + (3-1) ASCII, NTT 双方で pk フォントを使う場合 + + --without-vflib + + (3-2) NTT では pk フォント、ASCII では VFlib を使う場合 + + --with-vflib=asciionly または --with-vflib=nontt + + (3-3) 明朝体とゴシック体以外の日本語を使わない場合 + + --without-vfontmap + + ただし --without-vflib を指定している場合は自動的にこのオプションが + 指定されたのと同義になります。 + + (3-4) dvi --> ps フィルタとして dvi2ps を使う場合 + + --with-dvifilter=dvi2ps + + (3-5) dvi --> ps フィルタとして jdvi2kps を使う場合 + + --with-dvifilter=jdvi2kps + + + (4) Makefile を環境に合わせて変更 (デフォルトの解像度と Shrink サイズの指定) + + % vi xdvik/Makefile または mule xdvik/Makefile + + XDEFS にオプションを加えて指定します。デフォルトでは 600dpi で Shrink + サイズ "6" になっていますが、多くの場合 "8" くらいが適当だと思います。 + また小さなディスプレイ用に SMALL_PANEL を指定した場合は "10" くらい + がよいと思います。適当に変更してください。 + + (例 1) -DSHRINK=\"8\" + (例 2) -DSHRINK=\"10\" -DSMALL_PANEL + (例 3) -DBDPI=300 -DSHRINK=\"4\" + (例 4) -DBDPI=300 -DSHRINK=\"5\" -DSMALL_PANEL + + + (5) config.h を自分の環境に合わせて変更 + + % vi xdvik/config.h または mule xdvik/config.h + + (5-1) プリントアウトに関する設定 + + default のプリンタやプリントアウトコマンドを変更したい場合は + DVIPRINTER や PRINTCMD をそれぞれ変更してください。 + + 更に xdvi から直接プリントアウトする場合に用いる dvi --> ps フィルタ + コマンドのオプション変換テーブルファイル xdvipaper.* の置き場所 + (default では /usr/local/share/texmf/xdvi) を変えたい場合は config.h + の FILTOPTTBLFILE を変更するだけでなく、xdvik/Makefile の + FILTOPTTBLDIR も変更してください。 + + この markpage+toc+printdvi+paper パッチ部分の機能についての詳細は + READMEs/README.markpage+toc+printdvi+paper を参照してください。 + + (5-2) 日本語多書体表示機能に関する設定 + + configure 実行時に --without-vfontmap を指定している場合は + ここでの変更は必要ありません。 + + DEFAULT_FONTMAP を自分の環境に合わせて変更します。default では + /usr/local/share/texmf/xdvi/vfontmap です。 + + ********************************************************************* + * DEFAULT_FONTMAP で指定するファイル名は日本語フォントを VFlib の * + * どのフォントにマップするかを指定するファイルです。 * + * * + * vfontmap は VFlib の vfontcap とは別のものです。 * + * * + * 詳しいことは [3] で説明します。 * + ********************************************************************* + + + (6) コンパイルしてインストール + + % make + % su + + # make install + + + +[2] color special の表示 + + 起動時にオプションで -usecolor と指定するか、リソースに + + xdvi*colorSpecial: on + + と記述しておいてください。詳しくは竹中@東大さんによる + READMEs/README.jp-patch をご覧ください。 + + + +[3] 明朝体とゴシック体以外の日本語を表示させる方法 + + まずマップファイル (デフォルトでは /usr/local/share/texmf/xdvi/vfontmap) +に以下のように記述しておきます。 + + mgoth maru + fmin fmin + fgoth goth + +間にスペース、もしくはタブを入れて第一カラムに "dvi ファイル中のフォント名"、 +第二カラムに "VFlib の vfontcap に登録されたフォント名" のように記述しておく +だけで新たに xdvi を再コンパイルすることなく、自由に日本語の書体を追加する +ことができます。 + +またこのマップファイル中に明朝体とゴシック体の二書体を指定しない場合は +デフォルトで + + min min # for ASCII + nmin min # for ASCII + goth goth # for ASCII + ngoth goth # for ASCII + dm min # for NTT + dg goth # for NTT + +と設定されます。 + +このマップファイル中では # 以降がコメントとして扱われます。またこのマッ +プファイルは環境変数 VFONTMAP および起動時のオプション + + -vfontmap [マップファイル名] + +または X の resource + + xdvi*vfontmap: [マップファイル名] + +で変更可能です。ただし優先準位は + + 1. カレントディレクトリの vfontmap + 2. 起動時のオプション + 3. X の resource (xdvi*vfontmap) + 4. 環境変数 VFONTMAP + +の順に低くなっていきます。 + + この vfontmap を用いた機能のうち NTT-JTeX への対応部分は 川地@東大 +さん による xdvik18f-j1.0+vfontmap-ntt.patch を参考にさせていただいて +おります。 + +# NTT-JTeX で日本語の多書体を扱うためのスタイルファイルなどについては +# 川地さんの作成なさった Web page +# +# http://www.cim.pe.u-tokyo.ac.jp/~kawachi/software/xdvik18f.html +# +# を参照してください。 +# +# また ASCII-pTeX で多書体を扱う方法は VFlib に付属の jTeX/README.euc +# や doc/QA.txt などをご覧ください。 + + + +[4] 著作権について + + 本パッチは東大の中山さんのパッチ xdvik18f-j1.0.patch を含んでおりま +すが、その中山さんのパッチに含まれていた部分および本パッチから新たに組 +み込まれたコードの著作権は以下の方々にあります。 + + miyu patch に起因する部分 + 杉浦茂樹さん + 他 + + (詳細は竹中さんによる READMEs/README.jp-patch + をご覧ください) + + pTeX 縦書き対応部分および color special 対応部分 + 竹中浩さん + (xdvi-17jp.960209 より) + + markpage+toc+printdvi+paper パッチに起因する部分 + 松浦俊さん + 平原厚志さん + 小野康一さん + 他 + + (詳細は小野さんによる + READMEs/README.markpage+toc+printdvi+paper + をご覧ください) + + また本パッチのうち vfontmap に関わる部分 (vfontmap.c) の著作権は山賀 +(yamaga@ipc.chiba-u.ac.jp)にありますが、それ以外の部分に関しては山賀は +パッチのとりまとめを行っただけですので著作権を一切主張いたしません。 + + + +[5] 変更履歴 + + xdvik18f-j1.1p5.patch からの機能面での変更点については +ChangeLog.xdvik20a-j1.1 をご覧ください。 + + + +[6] 注意事項 + + 本パッチの再配布は自由に行って構いませんが付属のドキュメント類 +(READMEs 以下のファイル)は必ずそのままの形で添付してください。また改変 +も自由に行って構いませんが、改変したものを配布する場合は山賀 +(yamaga@ipc.chiba-u.ac.jp)まで御連絡ください。またその際にも私からお願 +いすることになると思いますが、上で上げた各パッチの著作権保有者には必ず +連絡をしてください。 + + + +[7] 最後に + + 本パッチ作成にあたりご協力いただいた多くの皆様に感謝いたします。特に +電子メールにより御助言を賜わった以下の方々に対し、そのお名前を列挙する +ことで感謝の意を表したいと思います。 + + 内山 孝憲 様 + 小野 康一 様 + 籠谷 裕人 様 + 杉浦 茂樹 様 + 竹野 茂治 様 + 竹中 浩 様 + 中山 一昭 様 + 萩原 斉 様 + + (五十音順) + +このパッチに関する質問やご意見ご感想は + + yamaga@ipc.chiba-u.ac.jp + +まで。 + 平成9年12月31日(水) diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/README.xdvik20c-j1.0+hal2+dvisel xdvik-22.40y1/texk/xdvik/READMEs/README.xdvik20c-j1.0+hal2+dvisel --- xdvik-22.40y1.orig/texk/xdvik/READMEs/README.xdvik20c-j1.0+hal2+dvisel 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/README.xdvik20c-j1.0+hal2+dvisel 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,179 @@ + + << xdvik20c+hal2+dvisel patch について >> + + 1999/03/04 + 渡辺 毅 + watanabe@komadori.planet.sci.kobe-u.ac.jp + +○xdvik20c+hal2+dvisel patch とは + + xdvik20c-j1.0p0e に対するバグフィックス/機能追加パッチです。 + + +○追加/変更点 + + 1) はやし@姫路工業大学さんの xdvi-17jp+toc+hal2 patch の一部をマージ + + xdvi-17jp+toc+hal2 patch については READMEs/README.jp+toc+hal2 を +御覧下さい。このパッチは基本的には xdvi-17jp に xdvi-21 から取ってきた +変更点を加えるというもののため、ベースが xdvik-20c に移った今、その +ほとんどが適応済みになっています。ここでは、まだ適応されてない以下の +点をマージしました。 + + 1.1) 固定倍率に移行する shrink ボタンをやめて、自在に拡大縮小ができる + ズームボタンを付けた。 + + jp+toc+hal2 patch ではソースをそのまま書き換えてましたが、選択可能な + ように #ifdef ZOOM_BUTTON に入れました。#undef にしておくと、オリジナル + のままです。Makefile.in には -DZOOM_BUTTON を入れておきましたので、必要 + ない場合は消してから make して下さい。キーバインドは 'Z' (拡大ズーム)、 + 'z'(縮小ズーム) に割り当ててあります。 + + 1.2) TOC 部のページ数表記で、ページ番号がバラバラな DVI ファイルだと + 出力桁数がおかしくなる問題を解決。 + + 巻末 Appendix だけページ番号が別に振ってある場合とかだと、こういう + 問題が起こりそうですね。詳しくは README.jp+toc+hal2 を御覧下さい。 + + + 2) PRINTDVI の改良(?)版 DVISEL (拙作未発表) + + Print ボタンを押すと、xdvi 上からプリントアウトできるという機能は非常 +に便利な機能で、作者様には感謝感謝です。うちの研究室回りにも TeX のプリ +ントアウト方法は、xdvi 上から行なうやりかたしか知らない者がごろごろい +ます(苦笑)。まあ、それは別にいいんですが、この PRINTDVI 機能はちょっと +うっとうしい点が少しあります(^^)。 + + * 制御コマンドが % だらけでややこしい。:-) + …PRINTDVI は初期バージョンから、% シーケンスがまた増えてます。この + まま、新機能が追加されるたびに、%w %v …と増やしていくとすれば、頭の + 痛い話です。:-) + + * dviselect が縦書きに対応していない + …これは PRINTDVI の問題ではなく、しかも対応させようと思えば、たぶん + 十行ほどの追加で済むと思うので、既に誰かが対応させてるかも知れません + が…。 + + * 制御コマンドがバイナリ埋め込みなので柔軟性に欠ける + …これは特に FreeBSD や Linux などのパッケージを使う時に感じます。 + もちろん、PRINTDVI 初期バージョンとは違って今はリソースでも変更は効き + ますが、バイナリパッケージを作る側から見ても、ユーザーが dvips, dvi2ps, + jdvi2kps のどれを使うかを一方的に決めて作らなければならないというのは + 結構嫌ですよね?(^^;;) + +また、xdvi の特徴として次の点があります。 + + * xdvi は TeX の各ページが DVI ファイルの何バイト目から始まるのかを + 配列として持ってるので、その配列を参照するだけで指定ページの DVI だけを + 切り出すのはたやすくできる。 + +という訳で、解決方法…。dviselect 機能は xdvi で内包させる!! + + + そもそも、% シーケンスがなぜこんなに多いのかといえば、dviselect に +引数を渡すためです。dviselect を xdvi 内部で持てば、外部コマンドに引き +渡すべき情報はほとんど無くなるので、% シーケンスはほとんど必要ありません。 + + 次に、現在、print-out メニューで全ページ、カレントページ、最終マーク +ページ、リージョン、マークリストのどれかを選べるので、そのそれぞれに印刷 +コマンドを設定していますが、dviselect 機能を xdvi で持てば、外部コマンド +は選択された DVI を印刷するという一つだけで済む事になります。 + + ならば、無理して、dvips, dvi2ps, jdvi2kps のどれを使うかをバイナリ埋め +込みなどにせずに、外部コマンドは一つのスクリプトを指定し、そのスクリプト +内で、上記のどれかのコマンドを呼び出すようにすれば、かなりすっきりします。 +つまり、xdvi のバイナリには外部コマンド(スクリプト)一つを埋め込むだけで +済み、そのマシンの環境がどういうものかは全て印刷スクリプト側で吸収できる +のです。バイナリパッケージを使う場合でもスクリプトなら柔軟性に富んでます。 + + ここで、外部コマンド(スクリプト)にファイルで渡すとすれば、テンポラリー +ファイル名などがまたややこしい問題になるので、UNIX らしくパイプで渡す事に +しましょう。DVI がファイルである事を強要するプリンタドライバーを使う場合は、 +スクリプト側でテンポラリーファイルを作るとすれば、これで、テンポラリー +ファイル名を xdvi 内部に埋め込む必要性も無くなりました。つまり、外部コマ +ンドに渡すべき項目は、プリンタ名、紙のサイズの二つだけです。 + + という訳で、DVISEL を define すると、上記 dviselect 機能を内包し、外部 +スクリプト(デフォルトは /usr/local/bin/xdviprint。-xdviprint オプションや +.xdviPrint リソースでも変更可)に切り出した DVI ファイルをパイプで渡すよう +になります。プリンタ名と紙のサイズは引数で渡します。 + スクリプト側は DVI ファイルを標準入力から読みとり印刷するスクリプトに +します。dvips を使ったサンプルがインストールされますので、そのままでも +使えるとは思いますが、好きに編集して下さい。:-) + DVISEL を define すると、% シーケンスのコマンド指定等はできなくなります。 + + なお、PRINTDVI では、landscape 等のオプションの違いを xdvipaper.dvips +等の変換ファイルを使って、xdvi 内部で変換していました。これも、どのプリ +ンタドライバーを使うかを xdvi 内部に埋め込まないという方針から、xdvi +内部ではこの変換処理をしません。この処理はスクリプト側でするようにします。 +インストールされるサンプル・スクリプトではこの処理をしてますので、従来の +PRINTDVI を使ってた時と同じ機能が実現できてるとは思いますが、スクリプトの +この部分も好きに書き換えて使って下さい。:-) + + 補足ですが、DVISEL 機能は PRINTDVI ルーチンを全部置き換えたものではなく、 +そのほとんどは PRINTDVI のルーチンを使って実現しています。dviselect のソース +は使わず一から書き足しました。 + + また、DVISEL 機能が出力する切り出した DVI と、dviselect コマンドが出力する +DVI は同じではありません。違いは、dviselect ではフォント番号のリナンバー +を行なってるのに、この DVISEL 機能はそれを行なってない点です。 + DVI ファイルではフォント番号 0〜63番までは 1バイトでフォントチェンジが +できるが、64番以上だとフォントチェンジに 2バイトかかるという仕様になって +ます。従って、オリジナルの DVI ファイルではフォントを 65種類以上使って +るが、指定印刷ページでは合計 64種類以下のフォントしか使われてない場合、 +dviselect では出力 DVI で使われてない欠番のフォント番号を埋めて全て +1バイトのフォントチェンジにしてしまう事ができますが、この DVISEL 機能は +オリジナルの DVI ファイルのフォント番号をそのまま使います。従って、 +dviselect の出力する DVI よりサイズが大きくなる可能性があります。 + + もっとも、私は 65種類以上ものフォントを使った TeX なんて見た事ないし、 +どうせ印刷する時に一時的に使ってすぐ消す DVI の出力で数バイトを節約して +もしょうがないので、フォント番号のリナンバーは行なわない事にしました。:-) +DVI ファイル中で使われてるフォント番号が飛び飛びなのは問題ありません。 +TeX 自体そういう DVI を吐きます。:-) + + + 3) その他 (拙作未発表) + + 3.1) SMALL_PANEL の数値の見直し + + 画面の小さいノートパソコン等で使う時には SMALL_PANEL 機能は便利です + が、小さくするあまりボタンとスクロールバーが重なったりしてて格好悪い + です。一般に SMALL_PANEL を使いたい人は画面の縦方向に余裕がないけど、 + 横方向にはまだ余裕があると思われます。また、縦方向に小さ過ぎる場合は + ウィンドーをリサイズすれば済みますが、横方向はリサイズしてもパネル部分 + の大きさは変わらないので、横方向に小さ過ぎて見にくいのは直しにくいです。 + という訳で、全体のバランスを見直してみました。 + + 3.2) 「XDvi*international: True」なんて、設定をすると、TOC でマウス + 真中ボタンを押した時に押した位置と違う位置がマークされてしまう。 + また、SELFILE 時に文字化けしたり、表示がずれたりする。 + + こんな設定にしてる人はいないかも知れませんが(^^;;)、Athena Widget + で i18n にする時には XFontStruct を使ってる部分は全部書き換えなきゃ + …というやつです。:-) + 一応、X11R4 以前を使ってる人を考えて(いるのか? ^^;;)、#ifdef 付きで + 変更しておきました。:-) テストはしてません。X11R4 なんて無い(笑)。 + + 3.3) マニュアルのオプション説明部分に付いて + + xdvi の man のオプション部分の説明はオプションのアルファベット順に + 記述されてると思われるが、PRINTDVI で追加されたオプションは後ろに + 追加されてて、アルファベット順になってないので、ソートし直した。:-) + + +○覚書 (敢えて TODO とは書かない(笑)) + + * かつて色々あった xdvi-17 用パッチのうち、xdvik-20c 用パッチでまだ取り + 込まれてない機能としては、xdvi-17jp.960209 にあった、 + 5. DVI ファイル中の文字列の検索機能。 + 6. -remote オプションの追加。 + が挙げられます。 + + +○最後に + + 著作権はそれぞれのパッチの作者にあります。詳しくは READMEs/ ディレク +トリ以下のファイル群などを見て下さい。 + +/* Takeshi WATANABE */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/READMEs/README.xdvik20c-j1.0p1.patch xdvik-22.40y1/texk/xdvik/READMEs/README.xdvik20c-j1.0p1.patch --- xdvik-22.40y1.orig/texk/xdvik/READMEs/README.xdvik20c-j1.0p1.patch 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/READMEs/README.xdvik20c-j1.0p1.patch 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,43 @@ +xdvik20c-j1.0p1.patch について + + 筑波大学 社会工学研究科 + 中右 浩二 (knakau@sk.tsukuba.ac.jp) + +用途: + このパッチは、xdvi (xdvik-20c) が日本語を表示できるように変更を + 加えるパッチです。(ASCII-pTeX, NTT-JTeX) + +謝辞: + このパッチは xdvi-20a-j1.1p15.patch 無くしては存在しません。 + その製作には、山賀@千葉大さんを初めとする多くの方が携わって + おられます。その努力に感謝しつつ、このパッチを使いましょう。 + +出所: + このパッチは基本的に xdvik20a-j1.1p15.patch に変更を加え、 + xdvik-20cに対応させたものです。その際の主な変更点は、 + 以下の二点です。 + + ● xdvik-20側のファイル名の変更に伴うパッチ内容の変更。 + ● xdvik-20の内容変更に伴うパッチ当て条件の変更。 + + xdvik20c-j1.0p1から、内山@慶応大さんの貢献により、jisx0212 + の補助漢字を利用できるようになりました。この利用については、 + 下記のページが参考にして下さい。 + 福井@東大さん http://www.tooyoo.l.u-tokyo.ac.jp/fkr/makejvf.html + 内山@慶大さん http://macptex.appi.keio.ac.jp/~uchiyama/gaiji.html + +インストール: + インストールについては、linux, Digital UNIXの場合の + インストール手順について、詳細に記録しておきました。 + 詳しくは、下記のURLを御覧ください。 + http://ecopolis.sk.tsukuba.ac.jp/~knakau/unix/ + + また、README.xdvik20a-j1.1.patch に山賀@千葉大さんによる + 詳細な記述があります。そちらも併せて参考にして下さい。 + +注意点: + インストール時に設定変更を行うファイル名が 20a から 20c の間で + 変更されています。ご注意下さい。 + + ● Makefile (変更無し) + ● xdvi-config.h (以前の config.h に相当) diff -ruN xdvik-22.40y1.orig/texk/xdvik/chardef.h xdvik-22.40y1/texk/xdvik/chardef.h --- xdvik-22.40y1.orig/texk/xdvik/chardef.h 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/chardef.h 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,31 @@ +/* + * Character definition + * + * Copyright (c) 1995 + * ONO Kouichi onono@fuka.info.waseda.ac.jp + * All rights reserved. + */ + +#ifndef _CHARDEF_H_ +#define _CHARDEF_H_ + +#define CHAR_NULL '\000' +#define CHAR_SPACE ' ' +#define CHAR_TAB '\t' +#define CHAR_NEWLINE '\n' +#define CHAR_SHARP '#' +#define CHAR_PERIOD '.' +#define CHAR_COMMA ',' +#define CHAR_SLASH '/' +#define CHAR_HYPHEN '-' +#define CHAR_ASTERISK '*' +#define CHAR_EQUAL '=' +#define CHAR_COLON ':' +#define CHAR_PERCENT '%' +#define CHAR_OPEN_ANGLE_BRACKET '<' +#define CHAR_CLOSE_ANGLE_BRACKET '>' + +#define ISWHITESPACE(c) ((c==CHAR_SPACE) || (c==CHAR_TAB) || (c==CHAR_NEWLINE)) +#define ISENDOFLINE(c) ((c==CHAR_NEWLINE) || (c==CHAR_NULL)) + +#endif /* _CHARDEF_H_ */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/configure xdvik-22.40y1/texk/xdvik/configure --- xdvik-22.40y1.orig/texk/xdvik/configure 2003-01-19 00:17:47.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/configure 2003-10-22 19:32:52.000000000 +0900 @@ -42,6 +42,16 @@ ac_help="$ac_help --with-ps=PS use PostScript; default gs (PS=no/yes/gs/dps/news)" ac_help="$ac_help + --enable-xdvietcdir=DIR set configuration file directory; default /usr/local/share/texmf/xdvi" +ac_help="$ac_help + --with-vfontmap=VFNTMAP use vfontmap; default yes (VFNTMAP=yes/no)" +ac_help="$ac_help + --with-vflib=VFLIB use VFlib; default yes (VFLIB=yes/no/asciionly/nontt/vf2ft)" +ac_help="$ac_help + --with-dvifilter=CMD use DVI filter; default dvips (CMD=dvips/dvi2ps/jdvi2kps/no)" +ac_help="$ac_help + --enable-xdviprint=CMD set print-out script path or no; default /usr/local/bin/xdviprint" +ac_help="$ac_help --disable-grey disable greyscale anti-aliasing for shrunken bitmaps " ac_help="$ac_help @@ -55,6 +65,16 @@ ac_help="$ac_help --disable-a4 set default paper size to letter and default unit to inch" ac_help="$ac_help + --enable-vikey make key stroke vi-like; default yes" +ac_help="$ac_help + --enable-smallpanel make panel smaller; default yes" +ac_help="$ac_help + --enable-zoombutton make zoom buttons; default yes" +ac_help="$ac_help + --enable-bdpi=BDPI set base DPI; default 600" +ac_help="$ac_help + --enable-shrink=SIZE set default shrink size; default 10" +ac_help="$ac_help --with-system-wwwlib check for installed libwww library" ac_help="$ac_help --with-libwww=DIR Specify path to W3C Reference Library distribution." @@ -590,7 +610,7 @@ # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:594: checking for $ac_word" >&5 +echo "configure:614: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -621,7 +641,7 @@ # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:625: checking for $ac_word" >&5 +echo "configure:645: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -673,7 +693,7 @@ # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:677: checking for $ac_word" >&5 +echo "configure:697: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -706,7 +726,7 @@ fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:710: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:730: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -717,12 +737,12 @@ cat > conftest.$ac_ext << EOF -#line 721 "configure" +#line 741 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:746: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -748,12 +768,12 @@ { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:752: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:772: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:757: checking whether we are using GNU C" >&5 +echo "configure:777: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -762,7 +782,7 @@ yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:766: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:786: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -781,7 +801,7 @@ ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:785: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:805: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -800,7 +820,7 @@ CFLAGS="$ac_save_CFLAGS" elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then - CFLAGS="-g -O2" + CFLAGS="-g -O2 -Wall" else CFLAGS="-g" fi @@ -849,7 +869,7 @@ # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:853: checking for a BSD compatible install" >&5 +echo "configure:873: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -904,7 +924,7 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 -echo "configure:908: checking whether ${MAKE-make} sets \${MAKE}" >&5 +echo "configure:928: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -931,7 +951,7 @@ fi echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 -echo "configure:935: checking whether ln -s works" >&5 +echo "configure:955: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -954,12 +974,12 @@ fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:958: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:978: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -968,7 +988,7 @@ struct tm *tp; ; return 0; } EOF -if { (eval echo configure:972: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:992: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -991,7 +1011,7 @@ echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 -echo "configure:995: checking whether to enable maintainer-specific portions of Makefiles" >&5 +echo "configure:1015: checking whether to enable maintainer-specific portions of Makefiles" >&5 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" @@ -1010,7 +1030,7 @@ echo $ac_n "checking for loader (symbol LD)""... $ac_c" 1>&6 -echo "configure:1014: checking for loader (symbol LD)" >&5 +echo "configure:1034: checking for loader (symbol LD)" >&5 if eval "test \"`echo '$''{'cf_cv_subst_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1024,7 +1044,7 @@ echo $ac_n "checking for archiver (symbol AR)""... $ac_c" 1>&6 -echo "configure:1028: checking for archiver (symbol AR)" >&5 +echo "configure:1048: checking for archiver (symbol AR)" >&5 if eval "test \"`echo '$''{'cf_cv_subst_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1038,7 +1058,7 @@ echo $ac_n "checking for archiver options (symbol ARFLAGS)""... $ac_c" 1>&6 -echo "configure:1042: checking for archiver options (symbol ARFLAGS)" >&5 +echo "configure:1062: checking for archiver options (symbol ARFLAGS)" >&5 if eval "test \"`echo '$''{'cf_cv_subst_ARFLAGS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1114,7 +1134,7 @@ fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:1118: checking host system type" >&5 +echo "configure:1138: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -1146,7 +1166,7 @@ echo $ac_n "checking where the main texmf tree is located""... $ac_c" 1>&6 -echo "configure:1150: checking where the main texmf tree is located" >&5 +echo "configure:1170: checking where the main texmf tree is located" >&5 texmfmain= if test "x$datadir" != 'x${prefix}/share'; then # First case, datadir is defined... @@ -1194,7 +1214,7 @@ echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1198: checking how to run the C preprocessor" >&5 +echo "configure:1218: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1209,13 +1229,13 @@ # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1219: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1239: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1226,13 +1246,13 @@ rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1236: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1256: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1243,13 +1263,13 @@ rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1253: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1273: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1274,12 +1294,12 @@ echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1278: checking for ANSI C header files" >&5 +echo "configure:1298: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1287,7 +1307,7 @@ #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1291: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1311: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1304,7 +1324,7 @@ if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1322,7 +1342,7 @@ if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1343,7 +1363,7 @@ : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -1354,7 +1374,7 @@ exit (0); } EOF -if { (eval echo configure:1358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -1378,12 +1398,12 @@ fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:1382: checking for pid_t" >&5 +echo "configure:1402: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -1412,17 +1432,17 @@ ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for vfork.h""... $ac_c" 1>&6 -echo "configure:1416: checking for vfork.h" >&5 +echo "configure:1436: checking for vfork.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1426: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1446: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1447,18 +1467,18 @@ fi echo $ac_n "checking for working vfork""... $ac_c" 1>&6 -echo "configure:1451: checking for working vfork" >&5 +echo "configure:1471: checking for working vfork" >&5 if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then echo $ac_n "checking for vfork""... $ac_c" 1>&6 -echo "configure:1457: checking for vfork" >&5 +echo "configure:1477: checking for vfork" >&5 if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1505: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_vfork=yes" else @@ -1503,7 +1523,7 @@ ac_cv_func_vfork_works=$ac_cv_func_vfork else cat > conftest.$ac_ext < @@ -1598,7 +1618,7 @@ } } EOF -if { (eval echo configure:1602: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1622: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_vfork_works=yes else @@ -1621,12 +1641,12 @@ fi echo $ac_n "checking for vprintf""... $ac_c" 1>&6 -echo "configure:1625: checking for vprintf" >&5 +echo "configure:1645: checking for vprintf" >&5 if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1673: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_vprintf=yes" else @@ -1673,12 +1693,12 @@ if test "$ac_cv_func_vprintf" != yes; then echo $ac_n "checking for _doprnt""... $ac_c" 1>&6 -echo "configure:1677: checking for _doprnt" >&5 +echo "configure:1697: checking for _doprnt" >&5 if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func__doprnt=yes" else @@ -1728,12 +1748,12 @@ # begin additions SU, 2000/03/07 # AC_FUNC_VSNPRINTF echo $ac_n "checking for memicmp""... $ac_c" 1>&6 -echo "configure:1732: checking for memicmp" >&5 +echo "configure:1752: checking for memicmp" >&5 if eval "test \"`echo '$''{'xdvi_cv_memicmp'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -1741,7 +1761,7 @@ (void)memicmp((char *)NULL, (char *)NULL, 0); ; return 0; } EOF -if { (eval echo configure:1745: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1765: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* xdvi_cv_memicmp=yes else @@ -1764,19 +1784,19 @@ # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 -echo "configure:1768: checking for working alloca.h" >&5 +echo "configure:1788: checking for working alloca.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF -if { (eval echo configure:1780: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1800: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_header_alloca_h=yes else @@ -1797,12 +1817,12 @@ fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 -echo "configure:1801: checking for alloca" >&5 +echo "configure:1821: checking for alloca" >&5 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_alloca_works=yes else @@ -1862,12 +1882,12 @@ echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 -echo "configure:1866: checking whether alloca needs Cray hooks" >&5 +echo "configure:1886: checking whether alloca needs Cray hooks" >&5 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 -echo "configure:1896: checking for $ac_func" >&5 +echo "configure:1916: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1944: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -1947,7 +1967,7 @@ fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 -echo "configure:1951: checking stack direction for C alloca" >&5 +echo "configure:1971: checking stack direction for C alloca" >&5 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1955,7 +1975,7 @@ ac_cv_c_stack_direction=0 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_stack_direction=1 else @@ -1997,7 +2017,7 @@ # end additions SU echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:2001: checking for 8-bit clean memcmp" >&5 +echo "configure:2021: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2005,7 +2025,7 @@ ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2039: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -2033,12 +2053,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:2037: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:2057: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2054,7 +2074,7 @@ s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:2058: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2078: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -2075,12 +2095,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:2079: checking return type of signal handlers" >&5 +echo "configure:2099: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2097,7 +2117,7 @@ int i; ; return 0; } EOF -if { (eval echo configure:2101: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2121: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -2116,14 +2136,14 @@ echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:2120: checking whether byte ordering is bigendian" >&5 +echo "configure:2140: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -2134,11 +2154,11 @@ #endif ; return 0; } EOF -if { (eval echo configure:2138: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -2149,7 +2169,7 @@ #endif ; return 0; } EOF -if { (eval echo configure:2153: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2173: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -2169,7 +2189,7 @@ { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -2212,7 +2232,7 @@ # Uses ac_ vars as temps to allow command line to override cache and checks. # --without-x overrides everything else, but does not touch the cache. echo $ac_n "checking for X""... $ac_c" 1>&6 -echo "configure:2216: checking for X" >&5 +echo "configure:2236: checking for X" >&5 # Check whether --with-x or --without-x was given. if test "${with_x+set}" = set; then @@ -2274,12 +2294,12 @@ # First, try using that file with no special directory specified. cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2283: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2303: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2348,14 +2368,14 @@ ac_save_LIBS="$LIBS" LIBS="-l$x_direct_test_library $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2379: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* LIBS="$ac_save_LIBS" # We can link X programs with no special library path. @@ -2461,17 +2481,17 @@ case "`(uname -sr) 2>/dev/null`" in "SunOS 5"*) echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6 -echo "configure:2465: checking whether -R must be followed by a space" >&5 +echo "configure:2485: checking whether -R must be followed by a space" >&5 ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2495: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_R_nospace=yes else @@ -2487,14 +2507,14 @@ else LIBS="$ac_xsave_LIBS -R $x_libraries" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_R_space=yes else @@ -2526,7 +2546,7 @@ # libraries were built with DECnet support. And karl@cs.umb.edu says # the Alpha needs dnet_stub (dnet does not exist). echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6 -echo "configure:2530: checking for dnet_ntoa in -ldnet" >&5 +echo "configure:2550: checking for dnet_ntoa in -ldnet" >&5 ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2534,7 +2554,7 @@ ac_save_LIBS="$LIBS" LIBS="-ldnet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2567,7 +2587,7 @@ if test $ac_cv_lib_dnet_dnet_ntoa = no; then echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6 -echo "configure:2571: checking for dnet_ntoa in -ldnet_stub" >&5 +echo "configure:2591: checking for dnet_ntoa in -ldnet_stub" >&5 ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2575,7 +2595,7 @@ ac_save_LIBS="$LIBS" LIBS="-ldnet_stub $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2610: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2615,12 +2635,12 @@ # The nsl library prevents programs from opening the X display # on Irix 5.2, according to dickey@clark.net. echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6 -echo "configure:2619: checking for gethostbyname" >&5 +echo "configure:2639: checking for gethostbyname" >&5 if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_gethostbyname=yes" else @@ -2664,7 +2684,7 @@ if test $ac_cv_func_gethostbyname = no; then echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6 -echo "configure:2668: checking for gethostbyname in -lnsl" >&5 +echo "configure:2688: checking for gethostbyname in -lnsl" >&5 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2672,7 +2692,7 @@ ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2707: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2713,12 +2733,12 @@ # -lsocket must be given before -lnsl if both are needed. # We assume that if connect needs -lnsl, so does gethostbyname. echo $ac_n "checking for connect""... $ac_c" 1>&6 -echo "configure:2717: checking for connect" >&5 +echo "configure:2737: checking for connect" >&5 if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2765: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_connect=yes" else @@ -2762,7 +2782,7 @@ if test $ac_cv_func_connect = no; then echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:2766: checking for connect in -lsocket" >&5 +echo "configure:2786: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2770,7 +2790,7 @@ ac_save_LIBS="$LIBS" LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2805: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2805,12 +2825,12 @@ # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX. echo $ac_n "checking for remove""... $ac_c" 1>&6 -echo "configure:2809: checking for remove" >&5 +echo "configure:2829: checking for remove" >&5 if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2857: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_remove=yes" else @@ -2854,7 +2874,7 @@ if test $ac_cv_func_remove = no; then echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6 -echo "configure:2858: checking for remove in -lposix" >&5 +echo "configure:2878: checking for remove in -lposix" >&5 ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2862,7 +2882,7 @@ ac_save_LIBS="$LIBS" LIBS="-lposix $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2897,12 +2917,12 @@ # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. echo $ac_n "checking for shmat""... $ac_c" 1>&6 -echo "configure:2901: checking for shmat" >&5 +echo "configure:2921: checking for shmat" >&5 if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_shmat=yes" else @@ -2946,7 +2966,7 @@ if test $ac_cv_func_shmat = no; then echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6 -echo "configure:2950: checking for shmat in -lipc" >&5 +echo "configure:2970: checking for shmat in -lipc" >&5 ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2954,7 +2974,7 @@ ac_save_LIBS="$LIBS" LIBS="-lipc $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2989: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2998,7 +3018,7 @@ # libraries we check for below, so use a different variable. # --interran@uluru.Stanford.EDU, kb@cs.umb.edu. echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6 -echo "configure:3002: checking for IceConnectionNumber in -lICE" >&5 +echo "configure:3022: checking for IceConnectionNumber in -lICE" >&5 ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3006,7 +3026,7 @@ ac_save_LIBS="$LIBS" LIBS="-lICE $X_EXTRA_LIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3041: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3042,12 +3062,12 @@ fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3046: checking for size_t" >&5 +echo "configure:3066: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3077,12 +3097,12 @@ # XDVI checks by Paul Vojta echo $ac_n "checking whether C compiler supports string concatenation""... $ac_c" 1>&6 -echo "configure:3081: checking whether C compiler supports string concatenation" >&5 +echo "configure:3101: checking whether C compiler supports string concatenation" >&5 if eval "test \"`echo '$''{'xdvi_cc_concat'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3091,7 +3111,7 @@ ; return 0; } EOF -if { (eval echo configure:3095: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3115: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* xdvi_cc_concat=yes else @@ -3111,7 +3131,7 @@ fi echo $ac_n "checking for integer type to use in bitmaps""... $ac_c" 1>&6 -echo "configure:3115: checking for integer type to use in bitmaps" >&5 +echo "configure:3135: checking for integer type to use in bitmaps" >&5 if eval "test \"`echo '$''{'xdvi_cv_bitmap_type'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3119,7 +3139,7 @@ { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < main() @@ -3137,7 +3157,7 @@ exit(0); } EOF -if { (eval echo configure:3141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3161: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then xdvi_cv_bitmap_type="`cat conftestval`" else @@ -3162,12 +3182,12 @@ echo "$ac_t""unsigned $BMTYPE, size = $BMBYTES" 1>&6 echo $ac_n "checking for stropts.h and isastream()""... $ac_c" 1>&6 -echo "configure:3166: checking for stropts.h and isastream()" >&5 +echo "configure:3186: checking for stropts.h and isastream()" >&5 if eval "test \"`echo '$''{'xdvi_cv_sys_streams'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3179,7 +3199,7 @@ #endif ; return 0; } EOF -if { (eval echo configure:3183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3203: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* xdvi_cv_sys_streams=yes else @@ -3199,7 +3219,7 @@ fi echo $ac_n "checking for SunOS 4""... $ac_c" 1>&6 -echo "configure:3203: checking for SunOS 4" >&5 +echo "configure:3223: checking for SunOS 4" >&5 if eval "test \"`echo '$''{'xdvi_cv_sys_sunos_4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3218,12 +3238,12 @@ fi echo $ac_n "checking for poll.h and poll()""... $ac_c" 1>&6 -echo "configure:3222: checking for poll.h and poll()" >&5 +echo "configure:3242: checking for poll.h and poll()" >&5 if eval "test \"`echo '$''{'xdvi_cv_func_poll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3231,7 +3251,7 @@ poll((struct pollfd *) 0, 0, 0); ; return 0; } EOF -if { (eval echo configure:3235: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3255: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* xdvi_cv_func_poll=yes else @@ -3254,17 +3274,17 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:3258: checking for $ac_hdr" >&5 +echo "configure:3278: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3268: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3288: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3304,7 +3324,7 @@ echo $ac_n "checking what warning flags to pass to the C compiler""... $ac_c" 1>&6 -echo "configure:3308: checking what warning flags to pass to the C compiler" >&5 +echo "configure:3328: checking what warning flags to pass to the C compiler" >&5 warnCFLAGS= if test "x$GCC" != xyes; then enable_compile_warnings=no @@ -3339,7 +3359,7 @@ echo $ac_n "checking what language compliance flags to pass to the C compiler""... $ac_c" 1>&6 -echo "configure:3343: checking what language compliance flags to pass to the C compiler" >&5 +echo "configure:3363: checking what language compliance flags to pass to the C compiler" >&5 complCFLAGS= if test "x$enable_iso_c" != "xno"; then if test "x$GCC" = "xyes"; then @@ -3370,12 +3390,12 @@ for ac_func in mkstemp memcpy strerror waitpid sigaction strchr setenv ulltostr fchdir getcwd lstat snprintf vsnprintf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3374: checking for $ac_func" >&5 +echo "configure:3394: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3422: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3428,17 +3448,17 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:3432: checking for $ac_hdr" >&5 +echo "configure:3452: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3442: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3462: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3509,6 +3529,81 @@ fi +# Set configuration file directory. +XDVIETCDIR='$(texmf)/xdvi' +# Check whether --enable-xdvietcdir or --disable-xdvietcdir was given. +if test "${enable_xdvietcdir+set}" = set; then + enableval="$enable_xdvietcdir" + case $enableval in + /*) XDVIETCDIR="$enableval";; + *) echo "configure: warning: Unknown --enable-xdvietcdir argument \`$enableval'; set to default." 1>&2;; + esac +fi + + +# Check if the user wants to use many Japanese fonts or not. +VFLIB_DEF="-DDEFAULT_FONTMAP=\\\"$XDVIETCDIR/vfontmap\\\"" +# Check whether --with-vfontmap or --without-vfontmap was given. +if test "${with_vfontmap+set}" = set; then + withval="$with_vfontmap" + case $withval in + yes) VFLIB_DEF="-DDEFAULT_FONTMAP=\\\"$XDVIETCDIR/vfontmap\\\"";; + no) VFLIB_DEF="-DNOVFONTMAP";; + *) echo "configure: warning: Unknown --with-vfontmap argument \`$withval'; set yes." 1>&2;; + esac +fi + + +# Check if the user wants to use VFlib or not. +# Check whether --with-vflib or --without-vflib was given. +if test "${with_vflib+set}" = set; then + withval="$with_vflib" + case $withval in + yes) VFLIB_DEF="$VFLIB_DEF";; + no) VFLIB_DEF="-DNOZEIT";; + asciionly|nontt) VFLIB_DEF="$VFLIB_DEF -DNONTTZEIT";; + vf2ft) VFLIB_DEF="$VFLIB_DEF -DVF2FT";; + *) echo "configure: warning: Unknown --with-vflib argument \`$withval'; set yes." 1>&2;; + esac +fi + + +# Check what command the user wants to use for dvi filter. +DVIFILTER="dvips" +# Check whether --with-dvifilter or --without-dvifilter was given. +if test "${with_dvifilter+set}" = set; then + withval="$with_dvifilter" + case $withval in + dvips) DVIFILTERCMD="" + DVIFILTER="dvips";; + dvi2ps) DVIFILTERCMD="-DDVI2PS" + DVIFILTER="dvi2ps";; + jdvi2kps) DVIFILTERCMD="-DJDVI2KPS" + DVIFILTER="jdvi2kps";; + no) DVIFILTERCMD="-DNOPRINTDVI -DNODVISEL";; + *) echo "configure: warning: Unknown --with-dvifilter argument \`$withval'; using dvips." 1>&2;; + esac +fi + + +# Check what command the user wants to use for print-out. +XDVIPRINTCMD='$(scriptdir)/xdviprint' +XDVIPRINT_DEF="-DXDVIPRINTCMD=\\\"$XDVIPRINTCMD\\\"" +# Check whether --enable-xdviprint or --disable-xdviprint was given. +if test "${enable_xdviprint+set}" = set; then + enableval="$enable_xdviprint" + case $enableval in + yes) XDVIPRINTCMD='$(scriptdir)/xdviprint' + XDVIPRINT_DEF="-DXDVIPRINTCMD=\\\"$XDVIPRINTCMD\\\"";; + no) XDVIPRINTCMD=no + XDVIPRINT_DEF="-DNODVISEL";; + /*) XDVIPRINTCMD="$enableval" + XDVIPRINT_DEF="-DXDVIPRINTCMD=\\\"$XDVIPRINTCMD\\\"";; + *) echo "configure: warning: Unknown --enable-xdviprint argument \`$enableval'; set to default." 1>&2;; + esac +fi + + # Check whether --enable-grey or --disable-grey was given. if test "${enable_grey+set}" = set; then enableval="$enable_grey" @@ -3632,6 +3727,57 @@ fi +# Check whether --enable-vikey or --disable-vikey was given. +if test "${enable_vikey+set}" = set; then + enableval="$enable_vikey" + if test "$enableval" != no; then + XDEFS="$XDEFS -DVI_KEY" +fi +else + XDEFS="$XDEFS -DVI_KEY" +fi + + +# Check whether --enable-smallpanel or --disable-smallpanel was given. +if test "${enable_smallpanel+set}" = set; then + enableval="$enable_smallpanel" + if test "$enableval" != no; then + XDEFS="$XDEFS -DSMALL_PANEL" +fi +else + XDEFS="$XDEFS -DSMALL_PANEL" +fi + + +# Check whether --enable-zoombutton or --disable-zoombutton was given. +if test "${enable_zoombutton+set}" = set; then + enableval="$enable_zoombutton" + if test "$enableval" != no; then + XDEFS="$XDEFS -DZOOM_BUTTON" +fi +else + XDEFS="$XDEFS -DZOOM_BUTTON" +fi + + +# Check whether --enable-bdpi or --disable-bdpi was given. +if test "${enable_bdpi+set}" = set; then + enableval="$enable_bdpi" + XDEFS="$XDEFS -DBDPI=$enableval" +else + XDEFS="$XDEFS -DBDPI=600" +fi + + +# Check whether --enable-shrink or --disable-shrink was given. +if test "${enable_shrink+set}" = set; then + enableval="$enable_shrink" + XDEFS="$XDEFS -DSHRINK=$enableval" +else + XDEFS="$XDEFS -DSHRINK=10" +fi + + HTEX=1 cat >> confdefs.h <<\EOF @@ -3644,7 +3790,7 @@ # Extract the first word of "pwd", so it can be a program name with args. set dummy pwd; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3648: checking for $ac_word" >&5 +echo "configure:3794: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_BINPWD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3793,7 +3939,7 @@ # Extract the first word of "$libwww_config", so it can be a program name with args. set dummy $libwww_config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3797: checking for $ac_word" >&5 +echo "configure:3943: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_LIBWWW_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3869,17 +4015,17 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:3873: checking for $ac_hdr" >&5 +echo "configure:4019: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3883: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4029: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3924,7 +4070,7 @@ LDLIBWWW=-lwww libwww_libdir_found=yes echo $ac_n "checking for HTParse in -lwww""... $ac_c" 1>&6 -echo "configure:3928: checking for HTParse in -lwww" >&5 +echo "configure:4074: checking for HTParse in -lwww" >&5 ac_lib_var=`echo www'_'HTParse | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3932,7 +4078,7 @@ ac_save_LIBS="$LIBS" LIBS="-lwww $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4093: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4047,7 +4193,7 @@ if test "$with_system_t1lib" = yes; then echo $ac_n "checking for T1_AddFont in -lt1""... $ac_c" 1>&6 -echo "configure:4051: checking for T1_AddFont in -lt1" >&5 +echo "configure:4197: checking for T1_AddFont in -lt1" >&5 ac_lib_var=`echo t1'_'T1_AddFont | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4055,7 +4201,7 @@ ac_save_LIBS="$LIBS" LIBS="-lt1 -lz -lm $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4216: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4094,13 +4240,13 @@ LDFLAGS="$LDFLAGS $EXTRA_LIBT1_LIBDIR -lt1 -lm" if test "$with_system_t1lib" = yes; then echo $ac_n "checking whether installed T1 lib is >= v 1.3.1 ""... $ac_c" 1>&6 -echo "configure:4098: checking whether installed T1 lib is >= v 1.3.1 " >&5 +echo "configure:4244: checking whether installed T1 lib is >= v 1.3.1 " >&5 if test "$cross_compiling" = yes; then ac_compile_t1lib=1 else cat > conftest.$ac_ext < @@ -4131,7 +4277,7 @@ } EOF -if { (eval echo configure:4135: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4281: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_compile_t1lib=0 else @@ -4182,7 +4328,7 @@ XLFLAG= fi echo $ac_n "checking for XextCreateExtension in -lXext""... $ac_c" 1>&6 -echo "configure:4186: checking for XextCreateExtension in -lXext" >&5 +echo "configure:4332: checking for XextCreateExtension in -lXext" >&5 ac_lib_var=`echo Xext'_'XextCreateExtension | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4190,7 +4336,7 @@ ac_save_LIBS="$LIBS" LIBS="-lXext -lX11 $X_EXTRA_LIBS $XLFLAG $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4249,7 +4395,7 @@ echo "$ac_t""adding DPS includes and libraries for Solaris" 1>&6 X_CFLAGS="$X_CFLAGS -I/usr/openwin/include/X11" echo $ac_n "checking for isinf in -lsunmath""... $ac_c" 1>&6 -echo "configure:4253: checking for isinf in -lsunmath" >&5 +echo "configure:4399: checking for isinf in -lsunmath" >&5 ac_lib_var=`echo sunmath'_'isinf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4257,7 +4403,7 @@ ac_save_LIBS="$LIBS" LIBS="-lsunmath $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4418: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4295,12 +4441,12 @@ for ac_func in isinf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4299: checking for $ac_func" >&5 +echo "configure:4445: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4351,17 +4497,17 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4355: checking for $ac_hdr" >&5 +echo "configure:4501: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4365: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4511: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4399,7 +4545,7 @@ # needed for web2c later than 7.3.4: echo $ac_n "checking for main in -lm""... $ac_c" 1>&6 -echo "configure:4403: checking for main in -lm" >&5 +echo "configure:4549: checking for main in -lm" >&5 ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4407,14 +4553,14 @@ ac_save_LIBS="$LIBS" LIBS="-lm $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4564: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4442,6 +4588,243 @@ fi +# For --with-vflib. + + +# For --with-vfontmap +# Check if we need to use libVFlib.a +if echo "$VFLIB_DEF" | grep "\(NOZEIT\|VF2FT\)" > /dev/null; then + if echo "$VFLIB_DEF" | grep NOZEIT > /dev/null; then + VFLIB= + fi + if echo "$VFLIB_DEF" | grep VF2FT > /dev/null; then + if freetype-config --cflags > /dev/null 2>&1; then + X_CFLAGS="$X_CFLAGS `freetype-config --cflags`" + VFLIB="`freetype-config --libs`" + else + VFLIB="-lfreetype" + fi + LIBS="$LIBS $VFLIB" + fi +else + LIBS_bak="$LIBS" + if test x"$libdir" = x'${exec_prefix}/lib'; then + if test x"$exec_prefix" = x"NONE"; then + if test x"$prefix" = x"NONE"; then + libdir_tmp=/usr/local/lib + else + libdir_tmp="$prefix"/lib + fi + else + libdir_tmp="$exec_prefix"/lib + fi + else + libdir_tmp="$libdir" + fi + echo $ac_n "checking for VF_Init in -lVFlib""... $ac_c" 1>&6 +echo "configure:4626: checking for VF_Init in -lVFlib" >&5 +if eval "test \"`echo '$''{'ac_cv_lib_VFlib_VF_Init'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + LIBS="$LIBS_bak -lVFlib -lm" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_cv_lib_VFlib_VF_Init=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_lib_VFlib_VF_Init=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_lib_VFlib_VF_Init" 1>&6 + if test "$ac_cv_lib_VFlib_VF_Init" = yes; then + VFLIB=-lVFlib + else + echo $ac_n "checking for VF_Init in -L$libdir_tmp -lVFlib""... $ac_c" 1>&6 +echo "configure:4656: checking for VF_Init in -L$libdir_tmp -lVFlib" >&5 +if eval "test \"`echo '$''{'ac_cv_lib_VFlib_local_VF_Init'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + LIBS="$LIBS_bak -L$libdir_tmp -lVFlib -lm" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_cv_lib_VFlib_local_VF_Init=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_lib_VFlib_local_VF_Init=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_lib_VFlib_local_VF_Init" 1>&6 + if test "$ac_cv_lib_VFlib_local_VF_Init" = yes; then + VFLIB='-L$(libdir) -lVFlib' +else + echo $ac_n "checking for VF_Init in -lVFlib -lttf""... $ac_c" 1>&6 +echo "configure:4686: checking for VF_Init in -lVFlib -lttf" >&5 +if eval "test \"`echo '$''{'ac_cv_lib_VFlib_ttf_VF_Init'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + LIBS="$LIBS_bak -lVFlib -lttf -lm" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_cv_lib_VFlib_ttf_VF_Init=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_lib_VFlib_ttf_VF_Init=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_lib_VFlib_ttf_VF_Init" 1>&6 + if test "$ac_cv_lib_VFlib_ttf_VF_Init" = yes; then + VFLIB="-lVFlib -lttf" + else + echo $ac_n "checking for VF_Init in -L$libdir_tmp -lVFlib -lttf""... $ac_c" 1>&6 +echo "configure:4716: checking for VF_Init in -L$libdir_tmp -lVFlib -lttf" >&5 +if eval "test \"`echo '$''{'ac_cv_lib_VFlib_ttf_local_VF_Init'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + LIBS="$LIBS_bak -L$libdir_tmp -lVFlib -lttf -lm" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_cv_lib_VFlib_ttf_local_VF_Init=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_lib_VFlib_ttf_local_VF_Init=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_lib_VFlib_ttf_local_VF_Init" 1>&6 + if test "$ac_cv_lib_VFlib_ttf_local_VF_Init" = yes; then + VFLIB='-L$(libdir) -lVFlib -lttf' +else + echo $ac_n "checking for VF_Init in -lVFlib2 -lttf""... $ac_c" 1>&6 +echo "configure:4746: checking for VF_Init in -lVFlib2 -lttf" >&5 +if eval "test \"`echo '$''{'ac_cv_lib_VFlib2_ttf_VF_Init'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + LIBS="$LIBS_bak -lVFlib2 -lttf -lm" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_cv_lib_VFlib2_ttf_VF_Init=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_lib_VFlib2_ttf_VF_Init=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_lib_VFlib2_ttf_VF_Init" 1>&6 + if test "$ac_cv_lib_VFlib2_ttf_VF_Init" = yes; then + VFLIB="-lVFlib2 -lttf" + else + echo $ac_n "checking for VF_Init in -L$libdir_tmp -lVFlib2 -lttf""... $ac_c" 1>&6 +echo "configure:4776: checking for VF_Init in -L$libdir_tmp -lVFlib2 -lttf" >&5 +if eval "test \"`echo '$''{'ac_cv_lib_VFlib2_ttf_local_VF_Init'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + LIBS="$LIBS_bak -L$libdir_tmp -lVFlib2 -lttf -lm" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_cv_lib_VFlib2_ttf_local_VF_Init=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_lib_VFlib2_ttf_local_VF_Init=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_lib_VFlib2_ttf_local_VF_Init" 1>&6 + if test "$ac_cv_lib_VFlib2_ttf_local_VF_Init" = yes; then + VFLIB='-L$(libdir) -lVFlib2 -lttf' +else + # may be wrong + VFLIB=-lVFlib +fi +fi +fi +fi +fi +fi + LIBS="$LIBS_bak" +fi + + +# For --with-dvifilter + + +# For --enable-xdviprint + + +# For --enable-xdvietcdir + + +# For other options + + trap '' 1 2 15 cat > confcache <<\EOF # This file is a shell script that caches the results of configure @@ -4611,6 +4994,14 @@ s%@x_ext_lib@%$x_ext_lib%g s%@x_tool_libs@%$x_tool_libs%g s%@PS_DEF@%$PS_DEF%g +s%@VFLIB_DEF@%$VFLIB_DEF%g +s%@VFLIB@%$VFLIB%g +s%@DVIFILTERCMD@%$DVIFILTERCMD%g +s%@DVIFILTER@%$DVIFILTER%g +s%@XDVIPRINT_DEF@%$XDVIPRINT_DEF%g +s%@XDVIPRINTCMD@%$XDVIPRINTCMD%g +s%@XDVIETCDIR@%$XDVIETCDIR%g +s%@XDEFS@%$XDEFS%g CEOF EOF diff -ruN xdvik-22.40y1.orig/texk/xdvik/configure.in xdvik-22.40y1/texk/xdvik/configure.in --- xdvik-22.40y1.orig/texk/xdvik/configure.in 2003-01-19 00:17:48.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/configure.in 2003-10-22 19:31:54.000000000 +0900 @@ -118,6 +118,111 @@ # needed for web2c later than 7.3.4: AC_CHECK_LIB(m, main) +# For --with-vflib. +AC_SUBST(VFLIB_DEF) + +# For --with-vfontmap +# Check if we need to use libVFlib.a +if echo "$VFLIB_DEF" | grep "\(NOZEIT\|VF2FT\)" > /dev/null; then + if echo "$VFLIB_DEF" | grep NOZEIT > /dev/null; then + VFLIB= + fi + if echo "$VFLIB_DEF" | grep VF2FT > /dev/null; then + if freetype-config --cflags > /dev/null 2>&1; then + X_CFLAGS="$X_CFLAGS `freetype-config --cflags`" + VFLIB="`freetype-config --libs`" + else + VFLIB="-lfreetype" + fi + LIBS="$LIBS $VFLIB" + fi +else + LIBS_bak="$LIBS" + if test x"$libdir" = x'${exec_prefix}/lib'; then + if test x"$exec_prefix" = x"NONE"; then + if test x"$prefix" = x"NONE"; then + libdir_tmp=/usr/local/lib + else + libdir_tmp="$prefix"/lib + fi + else + libdir_tmp="$exec_prefix"/lib + fi + else + libdir_tmp="$libdir" + fi + AC_CACHE_CHECK(for VF_Init in -lVFlib, + ac_cv_lib_VFlib_VF_Init, + LIBS="$LIBS_bak -lVFlib -lm" + AC_TRY_LINK( , VF_Init(), [ac_cv_lib_VFlib_VF_Init=yes], + [ac_cv_lib_VFlib_VF_Init=no])) + if test "$ac_cv_lib_VFlib_VF_Init" = yes; then + VFLIB=-lVFlib + else + AC_CACHE_CHECK(for VF_Init in -L$libdir_tmp -lVFlib, + ac_cv_lib_VFlib_local_VF_Init, + LIBS="$LIBS_bak -L$libdir_tmp -lVFlib -lm" + AC_TRY_LINK( , VF_Init(), [ac_cv_lib_VFlib_local_VF_Init=yes], + [ac_cv_lib_VFlib_local_VF_Init=no])) + if test "$ac_cv_lib_VFlib_local_VF_Init" = yes; then + VFLIB='-L$(libdir) -lVFlib' +else + AC_CACHE_CHECK(for VF_Init in -lVFlib -lttf, + ac_cv_lib_VFlib_ttf_VF_Init, + LIBS="$LIBS_bak -lVFlib -lttf -lm" + AC_TRY_LINK( , VF_Init(), [ac_cv_lib_VFlib_ttf_VF_Init=yes], + [ac_cv_lib_VFlib_ttf_VF_Init=no])) + if test "$ac_cv_lib_VFlib_ttf_VF_Init" = yes; then + VFLIB="-lVFlib -lttf" + else + AC_CACHE_CHECK(for VF_Init in -L$libdir_tmp -lVFlib -lttf, + ac_cv_lib_VFlib_ttf_local_VF_Init, + LIBS="$LIBS_bak -L$libdir_tmp -lVFlib -lttf -lm" + AC_TRY_LINK( , VF_Init(), [ac_cv_lib_VFlib_ttf_local_VF_Init=yes], + [ac_cv_lib_VFlib_ttf_local_VF_Init=no])) + if test "$ac_cv_lib_VFlib_ttf_local_VF_Init" = yes; then + VFLIB='-L$(libdir) -lVFlib -lttf' +else + AC_CACHE_CHECK(for VF_Init in -lVFlib2 -lttf, + ac_cv_lib_VFlib2_ttf_VF_Init, + LIBS="$LIBS_bak -lVFlib2 -lttf -lm" + AC_TRY_LINK( , VF_Init(), [ac_cv_lib_VFlib2_ttf_VF_Init=yes], + [ac_cv_lib_VFlib2_ttf_VF_Init=no])) + if test "$ac_cv_lib_VFlib2_ttf_VF_Init" = yes; then + VFLIB="-lVFlib2 -lttf" + else + AC_CACHE_CHECK(for VF_Init in -L$libdir_tmp -lVFlib2 -lttf, + ac_cv_lib_VFlib2_ttf_local_VF_Init, + LIBS="$LIBS_bak -L$libdir_tmp -lVFlib2 -lttf -lm" + AC_TRY_LINK( , VF_Init(), [ac_cv_lib_VFlib2_ttf_local_VF_Init=yes], + [ac_cv_lib_VFlib2_ttf_local_VF_Init=no])) + if test "$ac_cv_lib_VFlib2_ttf_local_VF_Init" = yes; then + VFLIB='-L$(libdir) -lVFlib2 -lttf' +else + # may be wrong + VFLIB=-lVFlib +fi +fi +fi +fi +fi +fi + LIBS="$LIBS_bak" +fi +AC_SUBST(VFLIB) + +# For --with-dvifilter +AC_SUBST(DVIFILTERCMD) AC_SUBST(DVIFILTER) + +# For --enable-xdviprint +AC_SUBST(XDVIPRINT_DEF) AC_SUBST(XDVIPRINTCMD) + +# For --enable-xdvietcdir +AC_SUBST(XDVIETCDIR) + +# For other options +AC_SUBST(XDEFS) + AC_OUTPUT(Makefile) dnl update `stamp-auto' since we just remade `c-auto.h' diff -ruN xdvik-22.40y1.orig/texk/xdvik/dnpzeit.c xdvik-22.40y1/texk/xdvik/dnpzeit.c --- xdvik-22.40y1.orig/texk/xdvik/dnpzeit.c 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/dnpzeit.c 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,184 @@ +/*************************************************** + * NTT JTeX support routine for xdvi-zeit + * Written by Y. Hayashi (hayashi@me.aoyama.ac.jp) + **************************************************/ + +/* Modified by Masahito Yamaga(yamaga@ipc.chiba-u.ac.jp) 1996.9.5 */ + +#include +#include "xdvi-config.h" +#include "zeit.h" +#ifdef NTTZEIT +#ifdef VF2FT +#include "vf2ft.h" +#else +#include +#endif + +#ifndef X_NOT_STDC_ENV +#include +#endif + +static struct _dnplist { + char *name; + int index; +} dnplist[] = { + { "sy", 1 }, { "roma", 2 }, + { "hira", 3 }, { "kata", 4 }, + { "greek", 5 }, { "russian", 6 }, + { "keisen", 7 }, { "ka", 8 }, + { "kb", 9 }, { "kc", 10 }, + { "kd", 11 }, { "ke", 12 }, + { "kf", 13 }, { "kg", 14 }, + { "kh", 15 }, { "ki", 16 }, + { "kj", 17 }, { "kk", 18 }, + { "kl", 19 }, { "km", 20 }, + { "kn", 21 }, { "ko", 22 }, + { "kp", 23 }, { "kq", 24 }, + { "kr", 25 }, { "ks", 26 }, + { "kt", 27 }, { "ku", 28 }, + { "kv", 29 }, { "kw", 30 }, + { "kx", 31 }, { "ky", 32 }, + { "kz", 33 }, { NULL, 0 } +}; + +struct _tfminfo { + char *point; /* point number */ + double width; + double height; +double depth; +} tfminfo[] = { + { "5", 0.9154200, 0.7708800, 0.1445400 }, + { "6", 0.9234495, 0.7628500, 0.1606000 }, + { "7", 0.9291850, 0.7915280, 0.1376560 }, + { "8", 0.9033750, 0.7226990, 0.1806750 }, + { "9", 0.9100670, 0.7494660, 0.1606000 }, + { "10", 0.9154200, 0.7708800, 0.1445400 }, + { "12", 0.9234495, 0.7628500, 0.1606000 }, + { "17", 0.9352580, 0.7793820, 0.1558760 }, + { "20", 0.9154200, 0.7588350, 0.1565850 }, + { NULL, 0.0, 0.0, 0.0 } +}; + +static int ku_ten_compute ARGS((unsigned int, unsigned int)); + +static void +get_NTT_font(fontp, code) + struct font *fontp; + int code; +{ + struct bitmap *bm; + int bwidth, jiscode; + + bm = &fontp->glyph[code].bitmap; + bwidth = (bm->w + 7) / 8; + bzero(bm->bits, bwidth * bm->h); + jiscode = ku_ten_compute(fontp->index, code); + + VF_GetBitmap(jiscode, fontp->vf, bm->w, bm->h, + bwidth, 0, bm->bits); +} + +static void +read_NTT_char(fontp, ch) + struct font *fontp; + int ch; +{ + struct glyph *g; + + g = &fontp->glyph[ch]; + g->bitmap.w = fontp->glyph[0].bitmap.w; + g->bitmap.h = fontp->glyph[0].bitmap.h; + g->dvi_adv = fontp->glyph[0].dvi_adv; + g->x = fontp->glyph[0].x; + g->y = fontp->glyph[0].y; + + alloc_bitmap(&g->bitmap); + get_NTT_font(fontp, ch); +#ifdef DEBUGZEIT + dispfont(&g->bitmap); +#endif /* DEBUGZEIT */ +#if !defined(WORDS_BIGENDIAN) || (BMBYTES == 4) || (BMBYTES == 2) + adj_ZEIT_bitmap(&g->bitmap); +#endif +} + +int +read_NTT_index(fontp) + register struct font *fontp; +{ + struct _dnplist *dp; + struct _tfminfo *tp; + double dimconv; + char *p; + + fontp->read_char = read_NTT_char; + fontp->glyph = xmalloc(256 * sizeof(struct glyph)); + bzero(fontp->glyph, 256 * sizeof(struct glyph)); + dimconv = fontp->dimconv; + if (-1 == open_ZEIT_font(fontp, isdnpfont(fontp->fontname))) + return -1; + + for (dp=dnplist; dp->name!=NULL; dp++) { + p = strstr(fontp->fontname, dp->name); + if (p == NULL) continue; + p += strlen(dp->name); + if (isdigit(*p)) break; + } + if (NULL == dp->name) { + Fprintf(stderr, "Cannot recognize font: %s\n", fontp->fontname); + exit(-1); + } + fontp->index = dp->index; + + for (tp=tfminfo; tp->point!=NULL; tp++) + if (0 == strncmp(p, tp->point, strlen(tp->point))) + break; + if (NULL == tp->point) + tp = &tfminfo[5]; /* default is 10pt. */ + + fontp->glyph[0].bitmap.w = (int) (dimconv * tp->width * 16); + fontp->glyph[0].bitmap.h = (int) + (dimconv * (tp->height + tp->depth) * 16); + fontp->glyph[0].dvi_adv = dimconv * tp->width * (1 << 20); + fontp->glyph[0].x = 0; + fontp->glyph[0].y = (int) (dimconv * tp->height * 16); + return 0; /* added by tutimura@nn.iij4u.or.jp 2002/8/22 */ +} + +/**** ku_ten_compute : borrowed from dvi2tty ****/ + +static int ku_ten_compute(f, c) + register unsigned int f, c; +{ + register unsigned int ku, ten; + int n; + + if (f == 1) { + if (c < 100) { + ku = 1; + ten = c; + } else { + ku = 2; + ten = c - 100; + } + } else if (f == 2) { + ku = 3; + ten = c - 32; + } else if (f <= 7) { + ku = f + 1; + ten = c; + } else if (f <= 19) { /* Daiichi Suijun */ + n = (f - 8) * 256 + c; + ku = (n / 0x5e) + 0x10; + ten = (n % 0x5e) + 1; + } else { /* Daini Suijun */ + n = (f - 20) * 256 + c; + ku = (n / 0x5e) + 0x30; + ten = (n % 0x5e) + 1; + } + ku += 0x20; + ten += 0x20; + return(ku * 256 + ten); +} +#endif /* NTTZEIT */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/dvi-draw.c xdvik-22.40y1/texk/xdvik/dvi-draw.c --- xdvik-22.40y1.orig/texk/xdvik/dvi-draw.c 2003-04-23 09:20:58.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/dvi-draw.c 2003-09-29 11:47:21.000000000 +0900 @@ -38,6 +38,9 @@ #include "dvi.h" #include "xdvi.h" #include "string-utils.h" +#ifdef TOC +#include "toc.h" +#endif /* TOC */ #include @@ -870,7 +873,7 @@ } static _Xconst char *dvi_table1[] = { -#ifdef Omega +#if defined(Omega) || defined(KANJI) "SET1", "SET2", NULL, NULL, "SETRULE", "PUT1", "PUT2", NULL, #else "SET1", NULL, NULL, NULL, "SETRULE", "PUT1", NULL, NULL, @@ -885,7 +888,12 @@ static _Xconst char *dvi_table2[] = { "FNT1", "FNT2", "FNT3", "FNT4", "XXX1", "XXX2", "XXX3", "XXX4", "FNTDEF1", "FNTDEF2", "FNTDEF3", "FNTDEF4", "PRE", "POST", "POSTPOST", - "SREFL", "EREFL", NULL, NULL, NULL, NULL + "SREFL", "EREFL", NULL, NULL, NULL, +#ifdef PTEX + "DIRECTION" +#else + NULL +#endif }; static void @@ -975,6 +983,196 @@ return n; } +extern double bbox_matrix[2][2]; +extern Boolean bbox_scaled, bbox_rotated; + +#ifndef PTEX +#define TATE False +#endif + +static void moveH ARGS((int, long)); +static void moveV ARGS((int, long)); + +static void moveH(dir, dx) + int dir; + long dx; +{ + if (TATE) { + DVI_H -= dx * bbox_matrix[1][0]; + DVI_V += dx * bbox_matrix[0][0]; +#if PS + PS_V += dx; +#endif + } else { + DVI_H += dir * dx * bbox_matrix[0][0]; + DVI_V += dir * dx * bbox_matrix[1][0]; +#if PS + PS_H += dir * dx; +#endif + } + PXL_V = pixel_conv(DVI_V); +} + +static void moveV(dir, dy) + int dir; + long dy; +{ + if (TATE) { + DVI_H -= dy * bbox_matrix[1][1]; + DVI_V += dy * bbox_matrix[0][1]; +#if PS + PS_H -= dy; +#endif + } else { + DVI_H += dir * dy * bbox_matrix[0][1]; + DVI_V += dir * dy * bbox_matrix[1][1]; +#if PS + PS_V += dir * dy; +#endif + } + PXL_V = pixel_conv(DVI_V); +} + +#define PUSH_POSITION do { \ + dvi_h_sav = DVI_H; \ + dvi_v_sav = DVI_V; \ + pxl_v_sav = PXL_V; \ + PUSH_PS_POSITION; } while (0) +#define POP_POSITION do { \ + DVI_H = dvi_h_sav; \ + DVI_V = dvi_v_sav; \ + PXL_V = pxl_v_sav; \ + POP_PS_POSITION; } while (0) +#define DEFINE_POSITION_VAL \ + DEFINE_PS_POSITION_VAL \ + long dvi_h_sav, dvi_v_sav, pxl_v_sav +#if PS +#define PUSH_PS_POSITION \ + ps_h_sav = PS_H; \ + ps_v_sav = PS_V; +#define POP_PS_POSITION \ + PS_H = ps_h_sav; \ + PS_V = ps_v_sav; +#define DEFINE_PS_POSITION_VAL \ + long ps_h_sav, ps_v_sav; +#else /* PS */ +#define PUSH_PS_POSITION /* empty */ +#define POP_PS_POSITION /* empty */ +#define DEFINE_PS_POSITION_VAL /* empty */ +#endif /* PS */ + + +static void +bbox_scale_bitmap(g) + register struct glyph *g; +{ + BMUNIT *new_ptr; + int xmax, ymax, xmin, ymin, x, y; + double d; + + if (g->bitmap3.bits) { + if (g->matrix[0][0] == (float) bbox_matrix[0][0] + && g->matrix[0][1] == (float) bbox_matrix[0][1] + && g->matrix[1][0] == (float) bbox_matrix[1][0] + && g->matrix[1][1] == (float) bbox_matrix[1][1]) + return; + else + free(g->bitmap.bits); + } else { + g->bitmap3 = g->bitmap; + g->x3 = g->x; + g->y3 = g->y; + } + + xmax = ymax = xmin = ymin = 0; + x = g->bitmap3.w * bbox_matrix[0][0]; + y = g->bitmap3.w * bbox_matrix[1][0]; + if (xmax < x) xmax = x; + else if (xmin > x) xmin = x; + if (ymax < y) ymax = y; + else if (ymin > y) ymin = y; + x = g->bitmap3.w * bbox_matrix[0][0] + g->bitmap3.h * bbox_matrix[0][1]; + y = g->bitmap3.w * bbox_matrix[1][0] + g->bitmap3.h * bbox_matrix[1][1]; + if (xmax < x) xmax = x; + else if (xmin > x) xmin = x; + if (ymax < y) ymax = y; + else if (ymin > y) ymin = y; + x = g->bitmap3.h * bbox_matrix[0][1]; + y = g->bitmap3.h * bbox_matrix[1][1]; + if (xmax < x) xmax = x; + else if (xmin > x) xmin = x; + if (ymax < y) ymax = y; + else if (ymin > y) ymin = y; + xmin--; ymin--; xmax++; ymax++; + + d = bbox_matrix[0][0] * bbox_matrix[1][1] + - bbox_matrix[0][1] * bbox_matrix[1][0]; + + g->x = g->x3 * bbox_matrix[0][0] + g->y3 * bbox_matrix[0][1] - xmin; + g->y = g->x3 * bbox_matrix[1][0] + g->y3 * bbox_matrix[1][1] - ymin; + g->matrix[0][0] = (float) bbox_matrix[0][0]; + g->matrix[0][1] = (float) bbox_matrix[0][1]; + g->matrix[1][0] = (float) bbox_matrix[1][0]; + g->matrix[1][1] = (float) bbox_matrix[1][1]; + + if (g->bitmap2.bits != NULL) { + free(g->bitmap2.bits); + g->bitmap2.bits = NULL; + } +#ifdef GREY + if (g->pixmap2 != NULL) { + free(g->pixmap2); + g->pixmap2 = NULL; + } +#endif + + g->bitmap.w = xmax - xmin + 1; + g->bitmap.h = ymax - ymin + 1; + alloc_bitmap(&g->bitmap); + bzero((char *) g->bitmap.bits, g->bitmap.bytes_wide * g->bitmap.h); + + new_ptr = (BMUNIT *) g->bitmap.bits; + for (y = ymin; y <= ymax; y++) { + register BMUNIT m, *cp; + + cp = new_ptr; +#ifndef WORDS_BIGENDIAN + m = (1 << 0); +#else + m = ((BMUNIT) 1 << (BMBITS-1)); +#endif + for (x = xmin; x <= xmax; x++) { + int bx, by; + bx = (x * bbox_matrix[1][1] - y * bbox_matrix[0][1]) / d; + by = (y * bbox_matrix[0][0] - x * bbox_matrix[1][0]) / d; + if (bx >= 0 && bx < g->bitmap3.w + && by >= 0 && by < g->bitmap3.h + && *((BMUNIT *)g->bitmap3.bits + + by * (g->bitmap3.bytes_wide / BMBYTES) + bx / BMBITS) +#ifndef WORDS_BIGENDIAN + & (1 << (bx % BMBITS))) +#else + & (1 << (BMBITS - 1 - bx % BMBITS))) +#endif + *cp |= m; +#ifndef WORDS_BIGENDIAN + if (m == ((BMUNIT)1 << (BMBITS-1))) { + m = (1 << 0); + ++cp; + } + else m <<= 1; +#else + if (m == (1 << 0)) { + m = ((BMUNIT) 1 << (BMBITS-1)); + ++cp; + } + else m >>= 1; +#endif + } + *((char **) &new_ptr) += g->bitmap.bytes_wide; + } +} + static void shrink_glyph(struct glyph *g) { @@ -1058,6 +1256,141 @@ print_bitmap(&g->bitmap2); } +#ifdef PTEX +void +rotate_bitmap(bm) + struct bitmap *bm; +{ + struct bitmap new_bm; + BMUNIT *old_ptr, *new_ptr, *cp; + int x, y; + BMUNIT m1, m2; + + new_bm.h = bm->w; + new_bm.w = bm->h; + alloc_bitmap(&new_bm); + old_ptr = (BMUNIT *)bm->bits; + *((char **) &old_ptr) += bm->bytes_wide * bm->h; + new_ptr = (BMUNIT *)new_bm.bits; + bzero((char *) new_ptr, new_bm.bytes_wide * new_bm.h); + +#ifndef WORDS_BIGENDIAN + m1 = (1 << 0); +#else + m1 = (1 << (BMBITS-1)); +#endif + for (y = 0; y < bm->h; y++) { + *((char **) &old_ptr) -= bm->bytes_wide; +#ifndef WORDS_BIGENDIAN + m2 = (1 << 0); +#else + m2 = (1 << (BMBITS-1)); +#endif + cp = old_ptr; + for (x = 0; x < bm->w; x++) { + if (*cp & m2) + *(BMUNIT *)((char *)new_ptr + x*new_bm.bytes_wide) |= m1; +#ifndef WORDS_BIGENDIAN + if (m2 == (BMUNIT)(1 << (BMBITS-1))) { + m2 = (1 << 0); + ++cp; + } + else m2 <<= 1; +#else + if (m2 == (1 << 0)) { + m2 = (1 << (BMBITS-1)); + ++cp; + } + else m2 >>= 1; +#endif + } +#ifndef WORDS_BIGENDIAN + if (m1 == (BMUNIT)(1 << (BMBITS-1))) { + m1 = (1 << 0); + ++new_ptr; + } + else m1 <<= 1; +#else + if (m1 == (1 << 0)) { + m1 = (1 << (BMBITS-1)); + ++new_ptr; + } + else m1 >>= 1; +#endif + } + + free(bm->bits); + *bm = new_bm; +} + + +void +reverse_rotate_bitmap(bm) + struct bitmap *bm; +{ + struct bitmap new_bm; + BMUNIT *old_ptr, *new_ptr, *cp; + int x, y; + BMUNIT m1, m2; + + new_bm.h = bm->w; + new_bm.w = bm->h; + alloc_bitmap(&new_bm); + old_ptr = (BMUNIT *)bm->bits; +/* *((char **) &old_ptr) += bm->bytes_wide * bm->h; */ + new_ptr = (BMUNIT *)new_bm.bits; + bzero((char *) new_ptr, new_bm.bytes_wide * new_bm.h); + +#ifndef WORDS_BIGENDIAN + m1 = (1 << 0); +#else + m1 = (1 << (BMBITS-1)); +#endif + for (y = 0; y < bm->h; y++) { + cp = old_ptr; + *((char **) &old_ptr) += bm->bytes_wide; +#ifndef WORDS_BIGENDIAN + m2 = (1 << 0); +#else + m2 = (1 << (BMBITS-1)); +#endif + for (x = bm->w; x--;) { + if (*cp & m2) + *(BMUNIT *)((char *)new_ptr + x * new_bm.bytes_wide) |= m1; +#ifndef WORDS_BIGENDIAN + if (m2 == (BMUNIT)(1 << (BMBITS-1))) { + m2 = (1 << 0); + ++cp; + } + else m2 <<= 1; +#else + if (m2 == (1 << 0)) { + m2 = (1 << (BMBITS-1)); + ++cp; + } + else m2 >>= 1; +#endif + } +#ifndef WORDS_BIGENDIAN + if (m1 == (BMUNIT)(1 << (BMBITS-1))) { + m1 = (1 << 0); + ++new_ptr; + } + else m1 <<= 1; +#else + if (m1 == (1 << 0)) { + m1 = (1 << (BMBITS-1)); + ++new_ptr; + } + else m1 >>= 1; +#endif + } + + free(bm->bits); + *bm = new_bm; +} +#endif /* PTEX */ + #ifdef GREY static void shrink_glyph_grey(struct glyph *g) @@ -1190,6 +1523,10 @@ * Find font #n. */ +#ifdef ASCIIDNP +static unsigned int cur_TeXnumber; +#endif /* ASCIIDNP */ + static void change_font(unsigned long n) { @@ -1205,11 +1542,25 @@ break; } } +#ifdef ASCIIDNP + if (currinf.fontp == NULL) { + if (n >> 24) { + define_kanjifont(n); + change_font(n); + return; + } + tell_oops("non-existent font #%d", n); + } +#else /* ASCIIDNP */ if (currinf.fontp == NULL) tell_oops("non-existent font #%lu", n); +#endif /* ASCIIDNP */ if (currinf.fontp->set_char_p == NULL) tell_oops("No procedure to set font #%d", n, currinf.fontp->fontname); maxchar = currinf.fontp->maxchar; +#ifdef ASCIIDNP + cur_TeXnumber = n; +#endif /* ASCIIDNP */ currinf.set_char_p = currinf.fontp->set_char_p; } @@ -1287,7 +1638,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -#ifdef Omega +#if defined(Omega) || defined(KANJI) 1, 2, /* SET1,SET2 (128,129) */ /* -,-,SETRULE,PUT1,PUT2,-,-,PUTRULE,NOP,BOP (130-139) */ M4, M4, 8, 1, 2, M4, M4, 8, 0, 44, @@ -1344,9 +1695,11 @@ ch = xone(); xskip((long)ch + (long)xone()); break; +#ifndef PTEX case M4: /* unrecognizable */ tell_oops("unknown op-code %d", ch); break; +#endif case M5: /* doesn't belong */ tell_oops("spcl_scan: shouldn't happen: %s encountered", dvi_table2[ch - (FNTNUM0 + 64)]); @@ -1354,9 +1707,21 @@ } } } +#ifdef COLOR + if (use_color) { + page_color[scanned_page + 1].background = back_color_data; + page_color[scanned_page + 1].stack_top = color_stack_top; + page_color[scanned_page + 1].color_stack = (XColor *) + xmalloc(sizeof(XColor) * (color_stack_top + 1)); + bcopy(color_stack, page_color[scanned_page + 1].color_stack, + sizeof(XColor) * color_stack_top); + page_color[scanned_page + 1].color_stack[color_stack_top] + = fore_color_data; + } +#endif } -#if PS +#if PS || defined(COLOR) /* * Size of page interval for "Scanning pages xx-xx" message. @@ -1371,22 +1736,46 @@ * `header=' and `!'. */ +#if defined(DVISEL) && defined(COLOR) +void +#else static void +#endif /* DVISEL && COLOR */ prescan(void) { int nextreportpage; +#if PS +#ifdef COLOR + if (!resource._postscript && !use_color) { +#else if (!resource._postscript) { +#endif scanned_page = total_pages; return; } +#endif nextreportpage = scanned_page; ++scanned_page; +#ifdef COLOR + if (use_color) { + back_color_data = page_color[scanned_page].background; + color_stack_top = page_color[scanned_page].stack_top; + bcopy(page_color[scanned_page].color_stack, color_stack, + color_stack_top); + fore_color_data + = page_color[scanned_page].color_stack[color_stack_top]; + } +#endif if (page_offset == NULL) { /* dvi_time--; */ return; } +#ifdef PAGENUM + (void)lseek(fileno(dvi_file), page_index[scanned_page].offset, SEEK_SET); +#else (void)lseek(fileno(dvi_file), page_offset[scanned_page], SEEK_SET); +#endif /* PAGENUM */ currinf.pos = currinf.end = dvi_buffer; for (;;) { if (debug & DBG_PS) @@ -1417,7 +1806,7 @@ psp.endheader(); } -#endif /* PS */ +#endif /* PS || COLOR */ /* * Routines to print characters. @@ -1429,6 +1818,18 @@ #define ERRVAL #endif +#ifdef PTEX +static void +set_char_rotate_glyph ARGS((struct glyph *, int)); +#endif /* PTEX */ +#ifndef TEXXET +static long +common_set_char ARGS((struct glyph *)); +#else +static void +common_set_char ARGS((struct glyph *, wide_ubyte)); +#endif + #ifndef TEXXET long set_char(wide_ubyte ch) @@ -1438,13 +1839,13 @@ #endif { struct glyph *g; -#ifdef TEXXET - long dvi_h_sav; -#endif if (ch > maxchar) realloc_font(currinf.fontp, WIDENINT ch); if ((g = &currinf.fontp->glyph[ch])->bitmap.bits == NULL) { +#ifdef NTTZEIT + if (!(currinf.fontp->flags & FONT_DNP)) { +#endif /* NTTZEIT */ if (g->addr == 0) { if (!hush_chars) Fprintf(stderr, "Character %d not defined in font %s\n", ch, @@ -1456,19 +1857,96 @@ return ERRVAL; /* previously flagged missing char */ open_font_file(currinf.fontp); Fseek(currinf.fontp->file, g->addr, 0); +#ifdef NTTZEIT + } +#endif /* NTTZEIT */ (*currinf.fontp->read_char) (currinf.fontp, ch); +#ifdef ASCIIDNP + if (cur_TeXnumber >> 24) + adj_kanjiwidth(currinf.fontp, cur_TeXnumber >> 24, ch); +#endif /* ASCIIDNP */ if (debug & DBG_BITMAP) print_char((ubyte) ch, g); currinf.fontp->timestamp = ++current_timestamp; } +#ifdef PTEX + set_char_rotate_glyph(g, TATE == currinf.fontp->dir); +#endif /* PTEX */ +#ifndef TEXXET + return common_set_char(g); +#else + common_set_char(g, cmd); +#endif +} + +#ifdef PTEX +static void +set_char_rotate_glyph P2C(struct glyph *, g, int, reverse_rotate) +{ + if (g->tdir != TATE) { + int tmp; + if (!reverse_rotate) { + rotate_bitmap(&g->bitmap); + tmp = g->x; + g->x = g->bitmap.w - g->y; + g->y = tmp; + } + else { + reverse_rotate_bitmap(&g->bitmap); + tmp = g->x; + g->x = g->y; + g->y = g->bitmap.h - tmp; + } + g->tdir = TATE; + if (g->bitmap2.bits != NULL) { + free(g->bitmap2.bits); + g->bitmap2.bits = NULL; + } +#ifdef GREY + if (g->pixmap2 != NULL) { + free(g->pixmap2); + g->pixmap2 = NULL; + } +#endif + } +} +#endif /* PTEX */ +#ifndef TEXXET +static long +common_set_char P1C(struct glyph *, g) +#else +static void +common_set_char P2C(struct glyph *, g, wide_ubyte, cmd) +#endif +{ #ifdef TEXXET - dvi_h_sav = DVI_H; - if (currinf.dir < 0) - DVI_H -= g->dvi_adv; + DEFINE_POSITION_VAL; + PUSH_POSITION; + if (! TATE && currinf.dir < 0) + moveH(1, -g->dvi_adv); if (scan_frame == NULL) { #endif + if (bbox_scaled) + bbox_scale_bitmap(g); + else if (g->bitmap3.bits) { + free(g->bitmap.bits); + g->bitmap = g->bitmap3; + g->bitmap3.bits = NULL; + g->x = g->x3; + g->y = g->y3; + if (g->bitmap2.bits != NULL) { + free(g->bitmap2.bits); + g->bitmap2.bits = NULL; + } +#ifdef GREY + if (g->pixmap2 != NULL) { + free(g->pixmap2); + g->pixmap2 = NULL; + } +#endif + } if (currwin.shrinkfactor == 1) { put_bitmap(&g->bitmap, PXL_H - g->x, PXL_V - g->y); } @@ -1497,14 +1975,14 @@ return g->dvi_adv; #else } -#ifdef Omega +#if defined(Omega) || defined(KANJI) if ((cmd == PUT1) || (cmd == PUT2)) #else if (cmd == PUT1) #endif - DVI_H = dvi_h_sav; - else if (currinf.dir > 0) - DVI_H += g->dvi_adv; + POP_POSITION; + else if (TATE || currinf.dir > 0) + moveH(1, g->dvi_adv); #endif } @@ -1526,6 +2004,40 @@ } #endif +#if defined(KANJI) && !defined(ASCIIDNP) +#ifndef TEXXET +long +set_char2 P1C(wide_ubyte, ch) +#else +void +set_char2 P2C(wide_ubyte, cmd, wide_ubyte, ch) +#endif +{ + struct glyph *g; + + g = currinf.fontp->kglyph[jisindex(ch)]; + if (g == NULL || g->bitmap.bits == NULL) { + (*currinf.fontp->read_char)(currinf.fontp, ch); + g = currinf.fontp->kglyph[jisindex(ch)]; +#ifdef PTEX + if (g->bitmap2.bits != NULL) { + free(g->bitmap2.bits); + g->bitmap2.bits = NULL; + } + g->tdir = currinf.fontp->dir; +#endif + } +#ifdef PTEX + set_char_rotate_glyph(g, g->tdir); +#endif /* PTEX */ +#ifndef TEXXET + return common_set_char(g); +#else + common_set_char(g, cmd); +#endif +} +#endif /* KANJI && !ASCIIDNP */ + #ifndef TEXXET long load_n_set_char(wide_ubyte ch) @@ -1569,14 +2081,14 @@ { struct macro *m; struct drawinf oldinfo; -#ifdef Omega +#if defined(Omega) || defined(KANJI) wide_ubyte oldmaxchar; #else ubyte oldmaxchar; #endif static ubyte c; #ifdef TEXXET - long dvi_h_sav; + DEFINE_POSITION_VAL; #endif if (ch > maxchar) @@ -1589,9 +2101,9 @@ return ERRVAL; } #ifdef TEXXET - dvi_h_sav = DVI_H; - if (currinf.dir < 0) - DVI_H -= m->dvi_adv; + PUSH_POSITION; + if (! TATE && currinf.dir < 0) + moveH(1, -m->dvi_adv); if (scan_frame == NULL) { #endif oldinfo = currinf; @@ -1618,13 +2130,13 @@ #else } if ((cmd == PUT1) -#ifdef Omega +#if defined(Omega) || defined(KANJI) || (cmd == PUT2) #endif ) - DVI_H = dvi_h_sav; - else if (currinf.dir > 0) - DVI_H += m->dvi_adv; + POP_POSITION; + else if (TATE || currinf.dir > 0) + moveH(1, m->dvi_adv); #endif } @@ -1659,9 +2171,54 @@ * Set rule. Arguments are coordinates of lower left corner. */ +static void +set_rotated_rule(long h, long w) +{ + XPoint points[4]; + + points[0].x = PXL_H - currwin.base_x; + points[0].y = PXL_V - currwin.base_y; +#ifdef PTEX + if (TATE) { + points[1].x = -pixel_round(w * bbox_matrix[1][0]); + points[1].y = pixel_round(w * bbox_matrix[0][0]); + points[2].x = pixel_round(h * bbox_matrix[1][1]); + points[2].y = -pixel_round(h * bbox_matrix[0][1]); + } else +#endif /* PTEX */ + { + points[1].x = DIR * pixel_round(w * bbox_matrix[0][0]); + points[1].y = DIR * pixel_round(w * bbox_matrix[1][0]); + points[2].x = -pixel_round(h * bbox_matrix[0][1]); + points[2].y = -pixel_round(h * bbox_matrix[1][1]); + } + points[3].x = -points[1].x; + points[3].y = -points[1].y; + + if (--event_counter == 0) read_events(False); + XFillPolygon(DISP, currwin.win, +#ifdef HTEX + (HTeXAnestlevel>0) ? highGC: ruleGC, +#else + ruleGC, +#endif + points, 4, Convex, CoordModePrevious); +} + static void -set_rule(int h, int w) +set_rule(long h, long w) { + if (bbox_rotated) { + set_rotated_rule(h, w); + return; + } + h = pixel_round(h * bbox_matrix[1][1]); + w = pixel_round(w * bbox_matrix[0][0]); +#ifdef PTEX + if (TATE) + put_rule(False, PXL_H, PXL_V, (unsigned int)h, (unsigned int)w); + else +#endif /* PTEX */ #ifndef TEXXET put_rule(False, PXL_H, PXL_V - h + 1, (unsigned int)w, (unsigned int)h); #else @@ -1671,6 +2228,54 @@ } +#ifdef ASCIIDNP +/*** compute_fc : borrowed from jvi2ps1.3j ***/ + +static void +compute_fc(kuten, f, c) + register unsigned int kuten; + unsigned int *f, *c; +{ + register int n; + register unsigned int ku, ten; + + *f = *c = 1; + ku = kuten / 256; + ten = kuten % 256; + if (ku < 0x21 || (0x29 <= ku && ku <= 0x2f) || 0x74 < ku) { + Fprintf(stderr, "invalid ku in jis (%x, %x)", ku, ten); + return; + } + if (ten < 0x21 || 0x7e < ten) { + Fprintf(stderr, "invalid ten in jis (%x, %x)", ku, ten); + return; + } + ku -= 0x20; + ten -= 0x20; + 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 if (ku <= 8) { + *f = ku - 1; + *c = ten; + } else if (ku <= 47) { /* Daiichi Suijun */ + n = (ku - 0x10) * 0x5e + ten - 1; + *f = (n / 256) + 8; + *c = n % 256; + } else { /* Daini Suijun */ + n = (ku - 0x30) * 0x5e + ten - 1; + *f = (n / 256) + 20; + *c = n % 256; + } +} +#endif /* ASCIIDNP */ + /* * Interpret a sequence of dvi bytes (either the page from the dvi file, * or a character from a virtual font). @@ -1702,7 +2307,7 @@ print_dvi(ch); if (ch <= (ubyte) (SETCHAR0 + 127)) { #ifndef TEXXET - DVI_H += (*currinf.set_char_p) (ch); + moveH(1, (*currinf.set_char_p) (ch)); #else (*currinf.set_char_p) (ch, ch); #endif @@ -1710,12 +2315,14 @@ else if (FNTNUM0 <= ch && ch <= (ubyte) (FNTNUM0 + 63)) { change_font((unsigned long)(ch - FNTNUM0)); } +#ifndef PTEX /* TDIR == 255 */ else if (ch == 255) { /* FIXME: we sometimes arrive here when doing a forward search on a corrupted DVI file. */ fprintf(stderr, "shouldn't happen: op-code 255 (trying to recover ...)\n"); return; } +#endif /* !PTEX */ else { long a, b; @@ -1725,24 +2332,34 @@ #ifndef TEXXET a = (*currinf.set_char_p) (xone()); if (ch != PUT1) - DVI_H += a; + moveH(1, a); #else (*currinf.set_char_p) (ch, xone()); #endif break; -#ifdef Omega +#if defined(Omega) || defined(KANJI) case SET2: case PUT2: + a = xnum(2); +#ifdef ASCIIDNP + { + unsigned int f, c; + compute_fc(a, &f, &c); + if (cur_TeXnumber >> 24 != f) + change_font((cur_TeXnumber & 0xffffff) | (f << 24)); + a = c; + } +#endif /* ASCIIDNP */ #ifndef TEXXET - a = (*currinf.set_char_p) (xnum(2)); + a = (*currinf.set_char_p) (a); if (ch != PUT2) - DVI_H += a; + moveH(1, a); #else - (*currinf.set_char_p) (ch, xnum(2)); + (*currinf.set_char_p) (ch, a); #endif break; -#endif /* Omega */ +#endif /* Omega || KANJI */ case SETRULE: /* Be careful, dvicopy outputs rules with @@ -1755,8 +2372,8 @@ #else if (a > 0 && b > 0 && scan_frame == NULL) #endif - set_rule(pixel_round(xspell_conv(a)), pixel_round(b)); - DVI_H += DIR * b; + set_rule(xspell_conv(a), b); + moveH(DIR, b); break; case PUTRULE: @@ -1767,7 +2384,7 @@ #else if (a > 0 && b > 0 && scan_frame == NULL) #endif - set_rule(pixel_round(a), pixel_round(b)); + set_rule(a, b); break; case NOP: @@ -1778,7 +2395,14 @@ DVI_H = OFFSET_X; DVI_V = OFFSET_Y; PXL_V = pixel_conv(DVI_V); +#if PS + PS_H = DVI_H; + PS_V = DVI_V; +#endif WW = XX = YY = ZZ = 0; + bbox_matrix[0][0] = bbox_matrix[1][1] = 1.0; + bbox_matrix[0][1] = bbox_matrix[1][0] = 0.0; + bbox_scaled = bbox_rotated = False; break; case EOP: @@ -1857,6 +2481,10 @@ DVI_H = current_frame->data.dvi_h; DVI_V = current_frame->data.dvi_v; PXL_V = current_frame->data.pxl_v; +#if PS + PS_H = DVI_H; + PS_V = DVI_V; +#endif /* and finally, reverse direction */ currinf.dir = -currinf.dir; } @@ -1874,7 +2502,7 @@ case RIGHT2: case RIGHT3: case RIGHT4: - DVI_H += DIR * xspell_conv(xsnum(ch - RIGHT1 + 1)); + moveH(DIR, xspell_conv(xsnum(ch - RIGHT1 + 1))); break; case W1: @@ -1883,7 +2511,7 @@ case W4: WW = xspell_conv(xsnum(ch - W0)); case W0: - DVI_H += DIR * WW; + moveH(DIR, WW); break; case X1: @@ -1892,15 +2520,14 @@ case X4: XX = xspell_conv(xsnum(ch - X0)); case X0: - DVI_H += DIR * XX; + moveH(DIR, XX); break; case DOWN1: case DOWN2: case DOWN3: case DOWN4: - DVI_V += xspell_conv(xsnum(ch - DOWN1 + 1)); - PXL_V = pixel_conv(DVI_V); + moveV(1, xspell_conv(xsnum(ch - DOWN1 + 1))); break; case Y1: @@ -1909,8 +2536,7 @@ case Y4: YY = xspell_conv(xsnum(ch - Y0)); case Y0: - DVI_V += YY; - PXL_V = pixel_conv(DVI_V); + moveV(1, YY); break; case Z1: @@ -1919,8 +2545,7 @@ case Z4: ZZ = xspell_conv(xsnum(ch - Z0)); case Z0: - DVI_V += ZZ; - PXL_V = pixel_conv(DVI_V); + moveV(1, ZZ); break; case FNT1: @@ -1959,6 +2584,11 @@ tell_oops("draw_part: shouldn't happen: %s encountered", dvi_table2[ch - (FNTNUM0 + 64)]); break; +#ifdef PTEX + case TDIR: + TATE = xone(); + break; +#endif /* PTEX */ default: tell_oops("draw_part: unknown op-code %d", ch); @@ -1973,12 +2603,15 @@ void draw_page(void) { +#ifdef COLOR + static Pixel saved_back_pixel; +#endif if (dvi_file_changed() > 0 || page_offset == NULL) { /* dvi_time--; */ return; } -#if PS +#if PS || defined(COLOR) if (scanned_page < current_page) prescan(); #endif @@ -1994,7 +2627,15 @@ ROUNDUP(unshrunk_paper_unit, currwin.shrinkfactor), rulerGC); #endif /* GRID */ +#ifdef PAGENUM + (void)lseek(fileno(dvi_file), page_index[current_page].offset, SEEK_SET); +#else (void)lseek(fileno(dvi_file), page_offset[current_page], SEEK_SET); +#endif /* PAGENUM */ +#ifdef TOC + if (!resource.expert) + Redraw_TOC(); +#endif /* TOC */ bzero((char *)&currinf.data, sizeof currinf.data); currinf.tn_table_len = TNTABLELEN; @@ -2010,6 +2651,22 @@ #endif #endif psfig_begun = False; +#ifdef COLOR + if (use_color) { + back_color_data = page_color[current_page + 1].background; + color_stack_top = page_color[current_page].stack_top; + bcopy(page_color[current_page].color_stack, color_stack, + sizeof(XColor) * color_stack_top); + fore_color_data + = page_color[current_page].color_stack[color_stack_top]; + init_colors(); + if (saved_back_pixel != back_color_data.pixel) { + XSetWindowBackground(DISP, mane.win, back_color_data.pixel); + XClearWindow(DISP, mane.win); + saved_back_pixel = back_color_data.pixel; + } + } +#endif draw_part(current_frame = &frame0, dimconv); dvi_pointer_frame = NULL; #ifdef HTEX @@ -2063,7 +2720,11 @@ /* Skip to beginning of page i */ /* Stuff from draw_page in dvi_draw.c: */ +#ifdef PAGENUM + (void)lseek(fileno(dvi_file), page_index[i].offset, SEEK_SET); +#else (void)lseek(fileno(dvi_file), page_offset[i], SEEK_SET); +#endif /* PAGENUM */ bzero((char *)&currinf.data, sizeof(currinf.data)); currinf.tn_head = tn_head; currinf.pos = currinf.end = dvi_buffer; @@ -2121,7 +2782,7 @@ case PUT1: xskip((long)1); /* Set or put 1 char - skip it */ break; -#ifdef Omega +#if defined(Omega) || defined(KANJI) case SET2: case PUT2: xskip((long)2); /* Set or put 16-bit char - skip it */ @@ -2281,6 +2942,11 @@ # define mane_base_y mane.base_y #endif +#define xmoveH(dir,dx) \ + do { moveH(dir,dx); PXL_V = xpixel_conv(DVI_V); } while(0) +#define xmoveV(dir,dy) \ + do { moveV(dir,dy); PXL_V = xpixel_conv(DVI_V); } while(0) + /* * This set of routines can be called while draw_part() is active, * so the global variables must be separate. @@ -2343,9 +3009,46 @@ } #ifdef TEXXET if (geom_scan_frame == NULL) { - long dvi_h_sav = DVI_H; - if (currinf.dir < 0) - DVI_H -= g->dvi_adv; + DEFINE_POSITION_VAL; + PUSH_POSITION; + if (! TATE && currinf.dir < 0) + moveH(1, -g->dvi_adv); +#endif + x = G_PXL_H - g->x; + y = PXL_V - g->y; + g_info->geom_box(g_info, x, y, + x + g->bitmap.w - 1, y + g->bitmap.h - 1); + +#ifdef TEXXET + POP_POSITION; + } +#endif + return DIR * g->dvi_adv; + } +#if defined(KANJI) && !defined(ASCIIDNP) + else if (currinf.set_char_p == set_char2) { + register struct glyph *g; + long x, y; + + g = currinf.fontp->kglyph[jisindex(ch)]; + if (g == NULL || g->bitmap.bits == NULL) { + (*currinf.fontp->read_char)(currinf.fontp, ch); + g = currinf.fontp->kglyph[jisindex(ch)]; +#ifdef PTEX + if (g->bitmap2.bits != NULL) { + free(g->bitmap2.bits); + g->bitmap2.bits = NULL; + } + g->tdir = currinf.fontp->dir; +#endif + } + +#ifdef TEXXET + if (geom_scan_frame == NULL) { + DEFINE_POSITION_VAL; + PUSH_POSITION; + if (! TATE && currinf.dir < 0) + moveH(1, -g->dvi_adv); #endif x = G_PXL_H - g->x; y = PXL_V - g->y; @@ -2353,17 +3056,18 @@ x + g->bitmap.w - 1, y + g->bitmap.h - 1); #ifdef TEXXET - DVI_H = dvi_h_sav; + POP_POSITION; } #endif return DIR * g->dvi_adv; } +#endif /* KANJI && !ASCIIDNP */ else if (currinf.set_char_p == set_vf_char) { struct macro *m; struct drawinf oldinfo; ubyte oldmaxchar; #ifdef TEXXET - long dvi_h_sav; + DEFINE_POSITION_VAL; #endif if (ch > maxchar) @@ -2371,9 +3075,9 @@ if ((m = &currinf.fontp->macro[ch])->pos == NULL) return 0; /* catch the error later */ #ifdef TEXXET - dvi_h_sav = DVI_H; - if (currinf.dir < 0) - DVI_H -= m->dvi_adv; + PUSH_POSITION; + if (! TATE && currinf.dir < 0) + moveH(1, -m->dvi_adv); if (geom_scan_frame == NULL) { #endif oldinfo = currinf; @@ -2389,7 +3093,7 @@ currinf = oldinfo; maxchar = oldmaxchar; #ifdef TEXXET - DVI_H = dvi_h_sav; + POP_POSITION; } #endif return DIR * m->dvi_adv; @@ -2404,9 +3108,10 @@ g = get_t1_glyph(0, ch, &dummy); assert(g != NULL); if (geom_scan_frame == NULL) { - long dvi_h_sav = DVI_H; - if (currinf.dir < 0) - DVI_H -= g->dvi_adv; + DEFINE_POSITION_VAL; + PUSH_POSITION; + if (! TATE && currinf.dir < 0) + moveH(1, -g->dvi_adv); #else g = get_t1_glyph(ch, &dummy); assert(g != NULL); @@ -2416,7 +3121,7 @@ g_info->geom_box(g_info, x, y, x + g->bitmap.w - 1, y + g->bitmap.h - 1); #ifdef TEXXET - DVI_H = dvi_h_sav; + POP_POSITION; } #endif return DIR * g->dvi_adv; @@ -2438,19 +3143,31 @@ { long x, y; #ifdef TEXXET - long dvi_h_save = DVI_H; + DEFINE_POSITION_VAL; + PUSH_POSITION; #endif + if (bbox_rotated) { + fprintf(stderr, "geom_do_rotated_rule(h, w) is not implemented!\n"); + return; + } + h = xpixel_round(h * bbox_matrix[1][1]); + w = xpixel_round(w * bbox_matrix[0][0]); + #ifdef TEXXET - if (currinf.dir < 0) - DVI_H -= w - 1; + if (! TATE && currinf.dir < 0) + moveH(1, - w + 1); #endif x = G_PXL_H; y = PXL_V; - g_info->geom_box(g_info, x, y - xpixel_round(h) + 1, - x + xpixel_round(w) - 1, y); +#ifdef PTEX + if (TATE) + g_info->geom_box(g_info, x, y, x + h - 1, y + w - 1); + else +#endif /* PTEX */ + g_info->geom_box(g_info, x, y - h + 1, x + w - 1, y); #ifdef TEXXET - DVI_H = dvi_h_save; + POP_POSITION; #endif } @@ -2479,7 +3196,7 @@ for (;;) { ch = xone(); if (ch <= (ubyte) (SETCHAR0 + 127)) - DVI_H += geom_do_char(g_info, ch); + xmoveH(1, geom_do_char(g_info, ch)); else if (FNTNUM0 <= ch && ch <= (ubyte) (FNTNUM0 + 63)) { change_font((unsigned long)(ch - FNTNUM0)); } @@ -2491,8 +3208,27 @@ case PUT1: a = geom_do_char(g_info, xone()); if (ch != PUT1) - DVI_H += a; + xmoveH(1, a); + break; + +#if defined(Omega) || defined(KANJI) + case SET2: + case PUT2: + a = xnum(2); +#ifdef ASCIIDNP + { + unsigned int f, c; + compute_fc(a, &f, &c); + if (cur_TeXnumber >> 24 != f) + change_font((cur_TeXnumber & 0xffffff) | (f << 24)); + a = c; + } +#endif /* ASCIIDNP */ + a = geom_do_char(g_info, a); + if (ch != PUT2) + xmoveH(1, a); break; +#endif /* Omega || KANJI */ case SETRULE: /* Be careful, dvicopy outputs rules with @@ -2506,7 +3242,7 @@ if (a >= 0 && b >= 0) #endif geom_do_rule(g_info, xspell_conv(a), b); - DVI_H += DIR * b; + moveH(DIR, b); break; case PUTRULE: @@ -2620,7 +3356,7 @@ case RIGHT2: case RIGHT3: case RIGHT4: - DVI_H += DIR * xspell_conv(xsnum(ch - RIGHT1 + 1)); + xmoveH(DIR, xspell_conv(xsnum(ch - RIGHT1 + 1))); break; case W1: @@ -2629,7 +3365,7 @@ case W4: WW = xspell_conv(xsnum(ch - W0)); case W0: - DVI_H += DIR * WW; + xmoveH(DIR, WW); break; case X1: @@ -2638,15 +3374,14 @@ case X4: XX = xspell_conv(xsnum(ch - X0)); case X0: - DVI_H += DIR * XX; + xmoveH(DIR, XX); break; case DOWN1: case DOWN2: case DOWN3: case DOWN4: - DVI_V += xspell_conv(xsnum(ch - DOWN1 + 1)); - PXL_V = xpixel_conv(DVI_V); + xmoveV(1, xspell_conv(xsnum(ch - DOWN1 + 1))); break; case Y1: @@ -2655,8 +3390,7 @@ case Y4: YY = xspell_conv(xsnum(ch - Y0)); case Y0: - DVI_V += YY; - PXL_V = xpixel_conv(DVI_V); + xmoveV(1, YY); break; case Z1: @@ -2665,8 +3399,7 @@ case Z4: ZZ = xspell_conv(xsnum(ch - Z0)); case Z0: - DVI_V += ZZ; - PXL_V = xpixel_conv(DVI_V); + xmoveV(1, ZZ); break; case FNT1: @@ -2701,6 +3434,12 @@ xskip(a + (long)xone()); break; +#ifdef PTEX + case TDIR: + TATE = xone(); + break; +#endif /* PTEX */ + #ifndef TEXXET case SREFL: case EREFL: @@ -2741,7 +3480,11 @@ if (dvi_pointer_frame != NULL) pos_save = lseek(fileno(dvi_file), 0L, SEEK_CUR) - (dvi_pointer_frame->end - dvi_pointer_frame->pos); +#ifdef PAGENUM + (void)lseek(fileno(dvi_file), page_index[current_page].offset, SEEK_SET); +#else /* !PAGENUM */ (void)lseek(fileno(dvi_file), page_offset[current_page], SEEK_SET); +#endif /* !PAGENUM */ currinf_save = currinf; maxchar_save = maxchar; @@ -3290,7 +4033,11 @@ for (;;) { if (++upper < total_pages) { +#ifdef PAGENUM + (void)lseek(fileno(dvi_file), page_index[upper].offset, SEEK_SET); +#else /* !PAGENUM */ (void)lseek(fileno(dvi_file), page_offset[upper], SEEK_SET); +#endif /* !PAGENUM */ bzero((char *)&currinf.data, sizeof currinf.data); currinf.tn_table_len = TNTABLELEN; currinf.tn_table = tn_table; @@ -3311,7 +4058,11 @@ break; if (--lower >= 0) { +#ifdef PAGENUM + (void)lseek(fileno(dvi_file), page_index[lower].offset, SEEK_SET); +#else /* !PAGENUM */ (void)lseek(fileno(dvi_file), page_offset[lower], SEEK_SET); +#endif /* !PAGENUM */ bzero((char *)&currinf.data, sizeof currinf.data); currinf.tn_table_len = TNTABLELEN; currinf.tn_table = tn_table; @@ -3661,7 +4412,11 @@ dvi_time--; return; } +#ifdef PAGENUM + (void)lseek(fileno(dvi_file), page_index[0].offset, SEEK_SET); +#else /* !PAGENUM */ (void)lseek(fileno(dvi_file), page_offset[0], SEEK_SET); +#endif /* !PAGENUM */ currinf_save = currinf; maxchar_save = maxchar; @@ -3754,7 +4509,11 @@ source_fwd_box_page = -1; /* in case of error, suppress box */ +#ifdef PAGENUM + (void)lseek(fileno(dvi_file), page_index[best_page].offset, SEEK_SET); +#else /* !PAGENUM */ (void)lseek(fileno(dvi_file), page_offset[best_page], SEEK_SET); +#endif /* !PAGENUM */ currinf.tn_table_len = TNTABLELEN; currinf.tn_table = tn_table; currinf.tn_head = tn_head; diff -ruN xdvik-22.40y1.orig/texk/xdvik/dvi-init.c xdvik-22.40y1/texk/xdvik/dvi-init.c --- xdvik-22.40y1.orig/texk/xdvik/dvi-init.c 2002-12-27 07:35:25.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/dvi-init.c 2003-09-29 11:47:21.000000000 +0900 @@ -50,6 +50,12 @@ #define VF_PRE 247 #define VF_ID_BYTE 202 #define VF_MAGIC (VF_PRE << 8) + VF_ID_BYTE +#if defined(KANJI) && !defined(ASCIIDNP) +#define JFMS_MAGIC 11 +#ifdef PTEX +#define JFMS_TATEMAGIC 9 +#endif +#endif /* KANJI && !ASCIIDNP */ #define dvi_oops(str) (dvi_oops_msg = (str), longjmp(dvi_env, 1)) @@ -72,6 +78,13 @@ extern int this_is_a_href; #endif +#ifdef DVISEL +/* + * Offset in DVI file of postamble, set in find_postamble(). + */ +long postamble_offset; +#endif /* DVISEL */ + /* * free_vf_chain frees the vf_chain structure. */ @@ -94,8 +107,16 @@ delete_glyphs(struct font *fontp) { struct glyph *g; +#if defined(KANJI) && !defined(ASCIIDNP) + int n, maxchar; + maxchar = (fontp->flags & FONT_KANJI) ? KTABLESIZE : fontp->maxchar + 1; + for (n = 0; n < maxchar; ++n) { + g = (fontp->flags & FONT_KANJI) ? fontp->kglyph[n] : &fontp->glyph[n]; + if (g != NULL) { +#else /* KANJI && !ASCIIDNP */ for (g = fontp->glyph; g != NULL && g <= fontp->glyph + fontp->maxchar; ++g) { +#endif /* KANJI && !ASCIIDNP */ if (g->bitmap2.bits) { free(g->bitmap2.bits); g->bitmap2.bits = NULL; @@ -111,6 +132,9 @@ } #endif } +#if defined(KANJI) && !defined(ASCIIDNP) + } +#endif /* KANJI && !ASCIIDNP */ } /* @@ -166,8 +190,23 @@ } else { delete_glyphs(fontp); +#if defined(KANJI) && !defined(ASCIIDNP) + if (fontp->flags & FONT_KANJI) { + int n; + for (n = 0; n < KTABLESIZE; ++n) { + if (fontp->kglyph[n] != NULL) { + free(fontp->kglyph[n]); + } + } + free(fontp->kglyph); + } + else { +#endif /* KANJI && !ASCIIDNP */ free((char *)fontp->glyph); fontp->glyph = NULL; +#if defined(KANJI) && !defined(ASCIIDNP) + } +#endif /* KANJI && !ASCIIDNP */ } free((char *)fontp); fontp = NULL; @@ -241,7 +280,25 @@ fontp->glyph = NULL; fontp->flags |= FONT_LOADED; +#ifdef PTEX + fontp->dir = 0; +#endif /* PTEX */ +#ifdef ASCIIDNP + if (iskanjifont(fontp->fontname)) return True; +#endif /* ASCIIDNP */ +#ifdef NTTZEIT + if (isdnpfont(fontp->fontname)) { + fontp->timestamp = ++current_timestamp; + fontp->maxchar = maxchar = 255; + fontp->set_char_p = set_char; + fontp->file = NULL; + fontp->filename = NULL; /* added by TSUCHIYA Masatoshi */ + fontp->flags |= FONT_DNP; + read_NTT_index(fontp); + return True; + } +#endif /* NTTZEIT */ #ifdef T1LIB fontp->file = font_open(fontp->fontname, &font_found, fsize, &size_found, fontp->magstepval, @@ -302,6 +359,13 @@ fontp->fsize = size_found; fontp->timestamp = ++current_timestamp; fontp->maxchar = maxchar = 255; +#if defined(KANJI) && !defined(ASCIIDNP) + if (iskanjifont(fontp->fontname)) { + fontp->flags |= FONT_KANJI; + fontp->set_char_p = set_char2; + } + else +#endif /* KANJI && !ASCIIDNP */ fontp->set_char_p = set_char; magic = two(fontp->file); if (magic == PK_MAGIC) @@ -312,7 +376,7 @@ read_GF_index(fontp, WIDENINT hushcs); else #endif -#ifdef Omega +#if defined(Omega) || defined(KANJI) if (magic == VF_MAGIC) maxchar = read_VF_index(fontp, WIDENINT hushcs); #else @@ -320,10 +384,24 @@ read_VF_index(fontp, WIDENINT hushcs); #endif else +#if defined(KANJI) && !defined(ASCIIDNP) +#ifdef PTEX + if (magic == JFMS_MAGIC || magic == JFMS_TATEMAGIC) { + fontp->dir = (magic == JFMS_TATEMAGIC); +#else /* PTEX */ + if (magic == JFMS_MAGIC) { +#endif /* PTEX */ +#ifdef USE_ZEIT + read_ZEIT_index(fontp); +#endif /* USE_ZEIT */ + return True; + } + else +#endif /* KANJI && !ASCIIDNP */ oops("Cannot recognize format for font file %s", fontp->filename); if (fontp->flags & FONT_VIRTUAL) { -#ifdef Omega +#if defined(Omega) || defined(KANJI) #else while (maxchar > 0 && fontp->macro[maxchar].pos == NULL) --maxchar; @@ -515,6 +593,66 @@ return fontp; } +#ifdef KANJI +extern struct vfontmap *first_ptr; + +int +iskanjifont(font) + char *font; +{ + int len,i=1; + struct vfontmap *current_ptr; + + current_ptr = first_ptr; + + while(current_ptr){ + len=strlen(current_ptr->jfmname); + if (!strncmp(font,current_ptr->jfmname,len) && + (font[len] == '\0' || /* added by Yutaka OIWA */ + (font[len]>='0' && font[len]<='9'))) + return i; + current_ptr = current_ptr->next_ptr; + ++i; + } + return 0; +} + +int +isdnpfont(font) + char *font; +{ + int i,j,len,len2; + static char * NTT_jflist[] = { + "jgreek", "jhira", "jka", "jkata", "jkb", "jkc", "jkd", + "jke", "jkeisen", "jkf", "jkg", "jkh", "jki", "jkj", + "jkk", "jkl", "jkm", "jkn", "jko", "jkp", "jkq", "jkr", + "jks", "jkt", "jku", "jkv", "jkw", "jkx", "jky", "jkz", + "jroma", "jrussian", "jsy", NULL }; + struct vfontmap *current_ptr; + + current_ptr = first_ptr; + + i=1; + while(current_ptr){ + len=strlen(current_ptr->jfmname); + if (!strncmp(font,current_ptr->jfmname,len)) { + j=0; + while(NTT_jflist[j]){ + len2=strlen(NTT_jflist[j]); + if(!strncmp(font+len,NTT_jflist[j],len2) && + (font[len+len2]>='0' && font[len+len2]<='9')) + return i; + j++; + } + return 0; + } + current_ptr = current_ptr->next_ptr; + ++i; + } + + return 0; +} +#endif /* KANJI */ /* * process_preamble reads the information in the preamble and stores @@ -530,7 +668,12 @@ } if (one(dvi_file) != PRE) dvi_oops("Not a DVI file."); +#ifdef PTEX + k = one(dvi_file); + if (k != 2 && k != 3) +#else if (one(dvi_file) != 2) +#endif dvi_oops("Wrong version of DVI output for this program"); numerator = four(dvi_file); denominator = four(dvi_file); @@ -585,10 +728,18 @@ Fseek(dvi_file, --pos, 0); byte = one(dvi_file); } +#ifdef PTEX + if (byte != 2 && byte != 3) +#else if (byte != 2) +#endif dvi_oops("Wrong version of DVI output for this program"); Fseek(dvi_file, pos - 4, 0); +#ifdef DVISEL + Fseek(dvi_file, postamble_offset = sfour(dvi_file), 0); +#else Fseek(dvi_file, sfour(dvi_file), 0); +#endif /* DVISEL */ return; } @@ -640,6 +791,22 @@ { int i; +#ifdef PAGENUM + long offset; + + page_index = xmalloc((unsigned)total_pages * sizeof(page_index[0])); + for (offset = last_page_offset, i = total_pages; i > 0; i--) { + Fseek(dvi_file, offset, 0); + if (one(dvi_file) != BOP) { + dvi_oops("page description doesn't begin with BOP"); + } + page_index[i-1].offset = offset; + page_index[i-1].number = four(dvi_file); /* Read c[0] */ + + Fseek(dvi_file, (long)(9*4), 1); + offset = four(dvi_file); + } +#endif /* PAGENUM */ page_offset = xmalloc((unsigned)total_pages * sizeof(long)); i = total_pages; page_offset[--i] = last_page_offset; @@ -781,6 +948,7 @@ static void internal_init_dvi(void) { + static int set_title = 0; process_preamble(); find_postamble(); read_postamble(); @@ -789,10 +957,15 @@ if (current_page >= total_pages) current_page = total_pages - 1; warn_spec_now = warn_spec; +#ifdef COLOR + InitColorStack(); +#endif #if PS ps_newdoc(); #endif source_fwd_box_page = -1; + set_icon_and_title(dvi_name, NULL, NULL, set_title); + set_title = 1; return; } @@ -893,6 +1066,7 @@ int dvi_file_changed(void) { + Boolean ___res = True; struct font *fontp; unsigned int old_page_w, old_page_h; @@ -905,6 +1079,12 @@ Putchar('\n'); dvi_file = NULL; } +#ifdef PAGENUM + if (page_index != NULL) { + free(page_index); + page_index = NULL; + } +#endif /* PAGENUM */ if (page_offset != NULL) { free(page_offset); page_offset = NULL; @@ -915,6 +1095,21 @@ for (fontp = font_head; fontp != NULL; fontp = fontp->next) { fontp->flags &= ~FONT_IN_USE; } +#ifdef COLOR + if (page_color) { + int i; + for (i = 0; i <= total_pages; i++) + if (page_color[i].color_stack) + free(page_color[i].color_stack); + free(page_color); + page_color = NULL; + } + if (color_allocated_top) { + XFreeColors(DISP, our_colormap, + color_allocated, color_allocated_top, 0); + color_allocated_top = 0; + } +#endif if (!setjmp(dvi_env)) { old_page_w = page_w; old_page_h = page_h; @@ -925,7 +1120,17 @@ } else #endif /* SELFILE */ +#ifdef HTEX + { + int url_aware_save = URL_aware; + URL_aware = True; + ___res = internal_open_dvi(dvi_name); + URL_aware = url_aware_save; + } + if (!___res) { +#else /* HTEX */ if (!internal_open_dvi(dvi_name)) { +#endif /* HTEX */ dvi_oops("Cannot reopen dvi file."); } internal_init_dvi(); @@ -953,3 +1158,270 @@ } return 0; } + +#ifdef ASCIIDNP +static double kanji_width[] = { + 0.962216, 0.747434, 0.504013, 0.353665, + 0.962216, 0.747434, 0.504013, 0.353665, +}; + +#ifdef PTEX +static double tkanji_width[] = { + 0.962216, 0.747434, 0.481108 +}; + +static char tkanji_sym[] = { + 0,0,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,0,2,0, + 0,0,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +}; +#endif /* PTEX */ + +static char kanji_sym[] = { + 0,0,2,2,3,3,7,7,7,6,7,3,3,7,7,6,6,0,0,6,0,6,1,1,0,1,0,0,0,0,7,0, + 0,0,7,7,0,0,7,3,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,0,0,0,0, + 0,0,0,0,0,0,0,0,1,1,1,2,2,2,0,0,1,1,1,0,0,0,0,0,6,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +}; + +static char kanji_hira[] = { + 0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +}; + +static char kanji_kata[] = { + 0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +}; + +void +adj_kanjiwidth(fontp, subindex, c) + struct font *fontp; + unsigned int subindex; + ubyte c; +{ + char *table; +#ifdef PTEX + extern void rotate_bitmap(); + extern struct TateCorrection TateCorrectionTable[]; +#endif + + switch (subindex) { + case 1: +#ifdef PTEX + if (fontp->dir) table = tkanji_sym; + else +#endif + table = kanji_sym; + break; + case 3: + table = kanji_hira; + break; + case 4: + table = kanji_kata; + break; + default: +#ifdef PTEX + if (fontp->dir) { + fontp->glyph[c].x += + fontp->dimconv * 16 * 0.458221; + fontp->glyph[c].y = + (fontp->glyph[c].bitmap.h + - fontp->dimconv * 16 * tkanji_width[0]) / 2; + } +#endif + fontp->glyph[c].dvi_adv = + fontp->dimconv * (1 << 20) * kanji_width[0]; + return; + } + +#ifdef PTEX + if (fontp->dir) { + int code; + + code = 0; + switch (subindex) { + case 1: + if (c < 0x5f) code = c - 1; + break; + case 3: + if (c < 0x4f) code = c - 1 + (0x7f - 0x21) + (0x2f - 0x21); + break; + case 4: + if (c < 0x57) + code = c - 1 + (0x7f - 0x21) + (0x2f - 0x21) + (0x6f - 0x21); + break; + } + + if (TateCorrectionTable[code].code == TCOR_ROTATE) { + rotate_bitmap(&fontp->glyph[c].bitmap); + fontp->glyph[c].x -= (fontp->glyph[c].bitmap.h + - fontp->glyph[c].bitmap.w)/2; + } + if (TateCorrectionTable[code].code) { + if (subindex==3 || subindex==4) { /* for small KANA */ + TateCorrectionTable[code].x /= 2; + TateCorrectionTable[code].y /= 2; + } + switch (TateCorrectionTable[code].code) { + case TCOR_AUTOSHIFT: + fontp->glyph[c].x -= fontp->dimconv * 24 * 0.458221 + - fontp->glyph[c].bitmap.w; + break; + case TCOR_SHIFT: + fontp->glyph[c].x -= (fontp->dimconv * 32 * 0.458221 + * TateCorrectionTable[code].x / 128); + fontp->glyph[c].y -= (fontp->dimconv * 32 * 0.458221 + * TateCorrectionTable[code].y / 128); + break; + } + } + + fontp->glyph[c].x += fontp->dimconv * 16 * 0.458221; + fontp->glyph[c].y = + (fontp->glyph[c].bitmap.h + - fontp->dimconv * 16 * tkanji_width[table[c]]) / 2; + + fontp->glyph[c].dvi_adv = + fontp->dimconv * (1 << 20) * tkanji_width[table[c]]; + return; + } +#endif /* PTEX */ + fontp->glyph[c].dvi_adv = + fontp->dimconv * (1 << 20) * kanji_width[table[c]]; + if (table[c] == 1) + fontp->glyph[c].x = -fontp->glyph[c].y / 5; + else if (table[c] >= 4) + fontp->glyph[c].x = -fontp->glyph[c].y / 10; +} + +/**** jsf_names[] : borrowed from jvi2ps1.3j ****/ + +static 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, +}; + +void +define_kanjifont(n) + unsigned int n; +{ + unsigned int base, index; + register struct tn *tnp; + struct font *fontp, *real_fontp; + float fsize; + int len; + char *fontname, *name, *head; + int size; +#ifdef PTEX + int dir; +#endif + + base = n & 0xffffff; + index = n >> 24; + +/* the following 3 lines added by Shigeharu TAKENO */ + if (base < currinf.tn_table_len) { + real_fontp = currinf.tn_table[base]; + } else { + for (tnp = currinf.tn_head; tnp != NULL; tnp = tnp->next) { + if (tnp->TeXnumber == base) { + real_fontp = tnp->fontp; + break; + } + } + } + tnp = xmalloc((unsigned) sizeof(struct tn)); + tnp->next = tn_head; + tn_head = tnp; + currinf.tn_head = tn_head; + tnp->TeXnumber = n; + fsize = real_fontp->fsize; + name = real_fontp->fontname; +#ifdef PTEX + dir = iskanjifont(name); + if ((dir >= 1) && (dir <= 3)) head = "dm"; +#else + if ((iskanjifont(name) >= 1) && (iskanjifont(name) <= 3)) head = "dm"; +#endif + else head = "dg"; +#ifdef PTEX + dir = ((dir == 3) || (dir == 6)); +#endif + while (!isdigit(*name)) + name++; + len = strlen(head) + strlen(jsf_names[index]) + strlen(name); + fontname = xmalloc((unsigned) len + 1); + Sprintf(fontname, "%s%s%s", head, jsf_names[index], name); + if (debug & DBG_PK) + Printf("Define kanjifont \"%s\"\n", fontname); + /* + * reuse font if possible + */ + for (fontp = font_head;; fontp = fontp->next) { + if (fontp == NULL) { /* if font doesn't exist yet */ + if (list_fonts) + Printf("%s at %d dpi\n", fontname, (int) (fsize + 0.5)); + fontp = xmalloc((unsigned) sizeof(struct font)); + fontp->fontname = fontname; + fontp->fsize = fsize; + fontp->flags = FONT_IN_USE; + fontp->dimconv = real_fontp->dimconv; + load_font(fontp); + fontp->next = font_head; + font_head = fontp; + break; + } + if (strcmp(fontname, fontp->fontname) == 0 + && size == (int) (5 * fontp->fsize + 0.5)) { + /* if font already in use */ + reuse_font(fontp); + free(fontname); + break; + } + } +#ifdef PTEX + fontp->dir = dir; +#endif + tnp->fontp = fontp; + if (index == 1) { + struct glyph *g; + + /* dainippon symbol font; Zenkaku blank is not defined in it. */ + g = &fontp->glyph[1]; + g->x = 0; + g->y = 0; + g->bitmap.w = 1; + g->bitmap.h = 1; + alloc_bitmap(&g->bitmap); + bzero(g->bitmap.bits, g->bitmap.h * g->bitmap.bytes_wide); + adj_kanjiwidth(fontp, index, 1); + } +} +#endif /* ASCIIDNP */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/dvi.h xdvik-22.40y1/texk/xdvik/dvi.h --- xdvik-22.40y1.orig/texk/xdvik/dvi.h 2001-04-18 23:24:42.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/dvi.h 2003-09-29 11:47:21.000000000 +0900 @@ -61,4 +61,8 @@ #define SREFL 250 #define EREFL 251 +#ifdef PTEX +#define TDIR 255 +#endif /* PTEX */ + #define TRAILER 223 /* Trailing bytes at end of file */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/events.c xdvik-22.40y1/texk/xdvik/events.c --- xdvik-22.40y1.orig/texk/xdvik/events.c 2003-01-17 08:39:07.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/events.c 2003-09-29 11:47:21.000000000 +0900 @@ -30,6 +30,20 @@ #include "xdvi.h" #include "string-utils.h" +#ifdef MARKPAGE +#include "markpage.h" +#endif /* MARKPAGE */ + +#ifdef TOC +#include "toc.h" +#endif /* TOC */ + +#ifdef PRINTDVI +#include "print.h" +#endif /* PRINTDVI */ + +#include "paper.h" + /* Xlib and Xutil are already included */ #ifdef TOOLKIT @@ -257,9 +271,9 @@ static ACTION_DECL(Act_minus); static ACTION_DECL(Act_quit); static ACTION_DECL(Act_help); -#if 0 -static ACTION_DECL(Act_print); -#endif +#ifdef PRINTDVI +static ACTION_DECL(Act_print); /* by Kenta MURATA . */ +#endif /* PRINTDVI */ static ACTION_DECL(Act_goto_page); static ACTION_DECL(Act_forward_page); static ACTION_DECL(Act_back_page); @@ -276,7 +290,20 @@ static ACTION_DECL(Act_set_margins); static ACTION_DECL(Act_show_display_attributes); static ACTION_DECL(Act_set_shrink_factor); +#ifdef MARKPAGE /* by Kenta MURATA . */ +static ACTION_DECL(Act_mark_all_pages); +static ACTION_DECL(Act_unmark_all_pages); +static ACTION_DECL(Act_mark_page); +static ACTION_DECL(Act_unmark_page); +static ACTION_DECL(Act_goto_lastly_marked_page); +static ACTION_DECL(Act_exchange_current_and_marked_page); +static ACTION_DECL(Act_trace_back_mark_ring); +#endif /* MARKPAGE */ /* by Kenta MURATA . */ +#ifdef ZOOM_BUTTON /* by Kenta MURATA . */ +static ACTION_DECL(Act_zoom); +#else /* !ZOOM_BUTTON */ static ACTION_DECL(Act_shrink_to_dpi); +#endif /* !ZOOM_BUTTON */ /* by Kenta MURATA . */ static ACTION_DECL(Act_set_density); #if GREY static ACTION_DECL(Act_set_greyscaling); @@ -316,6 +343,12 @@ static ACTION_DECL(Act_source_special); static ACTION_DECL(Act_show_source_specials); static ACTION_DECL(Act_source_what_special); +#ifdef PAPERMENU +static ACTION_DECL(Act_paper); /* by Kenta MURATA . */ +#endif /* PAPERMENU */ +#ifdef TOC +ACTION_DECL(Act_select_page); /* by Kenta MURATA . */ +#endif /* TOC */ #if TOOLKIT @@ -324,9 +357,9 @@ {"minus", Act_minus}, {"quit", Act_quit}, {"help", Act_help}, -#if 0 - {"print", Act_print}, -#endif +#ifdef PRINTDVI + {"print", Act_print}, /* by Kenta MURATA . */ +#endif /* PRINTDVI */ {"goto-page", Act_goto_page}, {"forward-page", Act_forward_page}, {"back-page", Act_back_page}, @@ -343,7 +376,20 @@ {"set-margins", Act_set_margins}, {"show-display-attributes", Act_show_display_attributes}, {"set-shrink-factor", Act_set_shrink_factor}, +#ifdef MARKPAGE /* by Kenta MURATA . */ + {"mark-all-pages", Act_mark_all_pages}, + {"unmark-all-pages", Act_unmark_all_pages}, + {"mark-page", Act_mark_page}, + {"unmark-page", Act_unmark_page}, + {"goto-lastly-marked-page", Act_goto_lastly_marked_page}, + {"exchange-current-and-marked-page", Act_exchange_current_and_marked_page}, + {"trace-back-mark-ring", Act_trace_back_mark_ring}, +#endif /* MARKPAGE */ /* by Kenta MURATA . */ +#ifdef ZOOM_BUTTON /* by Kenta MURATA . */ + {"zoom", Act_zoom}, +#else /* !ZOOM_BUTTON */ {"shrink-to-dpi", Act_shrink_to_dpi}, +#endif /* !ZOOM_BUTTON */ /* by Kenta MURATA . */ {"set-density", Act_set_density}, #if GREY {"set-greyscaling", Act_set_greyscaling}, @@ -380,6 +426,9 @@ {"source-special", Act_source_special}, {"show-source-specials", Act_show_source_specials}, {"source-what-special", Act_source_what_special}, +#ifdef PAPERMENU + {"paper", Act_paper}, /* by Kenta MURATA . */ +#endif /* PAPERMENU */ }; Cardinal num_actions = XtNumber(Actions); @@ -387,7 +436,7 @@ #if BUTTONS static Widget line_widget; -static Widget panel_widget; +Widget panel_widget; static int destroy_count = 0; #endif /* BUTTONS */ @@ -572,17 +621,19 @@ static struct button_info *b_head; +Dimension max_button_width; void create_buttons(void) { - Dimension max_button_width; Dimension y_pos; struct button_info **bipp; struct button_info *bp; _Xconst char *cspos; int button_number; +#ifndef ZOOM_BUTTON int shrink_button_number; int shrink_arg; +#endif /* !ZOOM_BUTTON */ struct xdvi_action *action; line_args[0].value = (XtArgVal) resource._fore_Pixel; @@ -606,13 +657,24 @@ XtOverrideTranslations(panel_widget, wheel_trans_table); #endif - button_number = shrink_button_number = 0; + button_number +#ifndef ZOOM_BUTTON + = shrink_button_number /* by Kenta MURATA . */ +#endif /* !ZOOM_BUTTON */ + = 0; b_head = NULL; bipp = &b_head; command_args[1].value = resource.btn_side_spacing; command_args[3].value = resource.btn_border_width; max_button_width = 0; y_pos = resource.btn_top_spacing; +#ifdef SMALL_PANEL + if (resource.smallpanel) { + command_args[1].value /= 2; + y_pos /= 2; + } +#endif /* SMALL_PANEL */ + for (cspos = resource.button_translations;; ++cspos) { Dimension w, h; @@ -628,18 +690,25 @@ break; if (*cspos == '\n') { - y_pos += resource.btn_between_extra; + y_pos += resource.btn_between_extra +#ifdef SMALL_PANEL /* by Kenta MURATA . */ + - (resource.smallpanel ? resource.btn_between_extra / 2 : 0) +#endif /* SMALL_PANEL */ + ; continue; } len = 0; /* find length of actual label string */ - shrink_arg = 0; +#ifndef ZOOM_BUTTON + shrink_arg = 0; /* by Kenta MURATA . */ +#endif /* !ZOOM_BUTTON */ for (p2 = p1 = cspos; *p1 != '\0' && *p1 != ':';) { if (*p1 == '\\' && p1[1] != '\0') { p1 += 2; p2 = p1; --len; } +#ifndef ZOOM_BUTTON /* by Kenta MURATA . */ else if (*p1 == '$' && (p1[1] == '#' || p1[1] == '%' || p1[1] == '_')) { shrink_arg = 1; @@ -649,6 +718,7 @@ else if (*p1 == '_') len -= 2; } +#endif /* !ZOOM_BUTTON */ /* by Kenta MURATA . */ else { ++p1; if (p1[-1] != ' ' && p1[-1] != '\t') @@ -662,6 +732,7 @@ action = compile_action(p1 + 1); +#ifndef ZOOM_BUTTON /* by Kenta MURATA . */ if (shrink_arg) { for (;; action = action->next) { if (action == NULL) { @@ -704,6 +775,7 @@ } ++shrink_button_number; } +#endif /* !ZOOM_BUTTON */ /* by Kenta MURATA . */ label = xmalloc(len + 1); for (q = label; cspos < p2; ++cspos) { @@ -711,6 +783,7 @@ if (++cspos < p2) *q++ = *cspos; } +#ifndef ZOOM_BUTTON /* by Kenta MURATA . */ else if (*cspos == '$' && (cspos[1] == '#' || cspos[1] == '%' || cspos[1] == '_')) { ++cspos; @@ -725,6 +798,7 @@ } q += strlen(q); } +#endif /* !ZOOM_BUTTON */ /* by Kenta MURATA . */ else *q++ = *cspos; } @@ -754,8 +828,11 @@ } y_pos += - h + resource.btn_between_spacing + 2 * resource.btn_border_width; - + h + resource.btn_between_spacing + 2 * resource.btn_border_width +#ifdef SMALL_PANEL /* by Kenta MURATA . */ + - (resource.smallpanel ? resource.btn_between_spacing / 2 : 0) +#endif /* !SMALL_PANEL */ + ; bp = xmalloc(sizeof *bp); bp->label = label; @@ -771,6 +848,12 @@ *bipp = NULL; xtra_wid = max_button_width +#ifdef TOC + + 90 +#ifdef SMALL_PANEL /* by Kenta MURATA . */ + - (resource.smallpanel ? 10 : 0) +#endif /* !SMALL_PANEL */ +#endif /* TOC */ + 2 * (resource.btn_side_spacing + resource.btn_border_width); width_arg.value = (XtArgVal) xtra_wid; @@ -805,6 +888,9 @@ XtManageChild(line_widget); XtSetValues(panel_widget, &height_arg, 1); XtManageChild(panel_widget); +#ifdef TOC + Create_TOC(h); /* by Kenta MURATA . */ +#endif /* TOC */ } #endif /* MOTIF */ @@ -947,6 +1033,9 @@ XSetWindowBackground(DISP, mane.win, back_Pixel); } else { +#ifndef COLOR + if (!resource.thorough) +#endif copy = True; /* FIXME: toplevel yet realized? */ do_popup_message(MSG_WARN, @@ -981,6 +1070,11 @@ static Pixel palette[17]; XGCValues values; unsigned int i; +#ifdef COLOR + static XColor saved_fore_color, saved_back_color; + static Boolean warn_done = False, copy_tmp = False; + Boolean use_plane = False; +#endif /* COLOR */ if (fore_color_data.pixel == back_color_data.pixel) { /* get foreground and background RGB values for interpolating */ @@ -998,7 +1092,12 @@ static Pixel clr_bits; unsigned int sf_squared; - if (oldgamma == 0.0) { + if (oldgamma == 0.0 +#ifdef COLOR + || fore_color_data.pixel != saved_fore_color.pixel + || back_color_data.pixel != saved_back_color.pixel +#endif /* COLOR */ + ) { mask_shifts(our_visual->red_mask, &shift1_r, &shift2_r); mask_shifts(our_visual->green_mask, &shift1_g, &shift2_g); mask_shifts(our_visual->blue_mask, &shift1_b, &shift2_b); @@ -1024,13 +1123,25 @@ */ foreGC = foreGC2 = ruleGC = 0; +#ifdef COLOR + copyGC = MakeGC(GXcopy, + fore_color_data.pixel, back_color_data.pixel); + copy_tmp = False; + if (copy || (set_bits && clr_bits)) { + ruleGC = copyGC; + if (!resource.thorough) copy_tmp = True; + } + if (copy_tmp) +#else /* COLOR */ copyGC = MakeGC(GXcopy, fore_Pixel, back_Pixel); if (copy || (set_bits && clr_bits)) { ruleGC = copyGC; if (!resource.thorough) copy = True; } - if (copy) { + if (copy) +#endif /* COLOR */ + { foreGC = ruleGC; if (!resource.copy) do_popup_message(MSG_WARN, @@ -1062,6 +1173,10 @@ oldgamma = gamma; } +#ifdef COLOR + saved_fore_color = fore_color_data; + saved_back_color = back_color_data; +#endif /* COLOR */ if (mane.shrinkfactor == 1) return; @@ -1078,6 +1193,16 @@ pixeltbl_t = xmalloc((sf_squared + 1) * sizeof(Pixel)); shrink_allocated_for = mane.shrinkfactor; } +#ifdef COLOR + else if (use_color) { + if (pixeltbl_t != NULL) { + free((char *) pixeltbl_t); + pixeltbl_t = NULL; + } + if (foreGC2 != NULL) + pixeltbl_t = xmalloc((sf_squared + 1) * sizeof(Pixel)); + } +#endif /* COLOR */ /* * Compute pixel values directly. @@ -1103,8 +1228,13 @@ SHIFTIFY(green, shift1_g, shift2_g) | SHIFTIFY(blue, shift1_b, shift2_b); +#ifdef COLOR + if (copy_tmp) + pixeltbl[i] = pixel; +#else if (copy) pixeltbl[i] = pixel; +#endif else { pixeltbl[i] = set_bits ? pixel & set_bits : ~pixel & clr_bits; if (pixeltbl_t != NULL) @@ -1119,11 +1249,25 @@ /* if not TrueColor ... */ - if (gamma != oldgamma) { +#ifdef COLOR + if (plane_masks[0] + && fore_color_data.pixel == fore_Pixel + && back_color_data.pixel == back_Pixel) + use_plane = True; + + if (gamma != oldgamma + || fore_color_data.pixel != saved_fore_color.pixel + || back_color_data.pixel != saved_back_color.pixel) +#else /* COLOR */ + if (gamma != oldgamma) +#endif /* COLOR */ + { XColor color; +#ifndef COLOR if (oldgamma == 0.0) init_plane_masks(); +#endif for (i = 0; i < 16; ++i) { double frac = gamma > 0 ? pow((double)i / 15, 1 / gamma) @@ -1142,7 +1286,12 @@ color.pixel = back_Pixel; color.flags = DoRed | DoGreen | DoBlue; - if (!copy) { +#ifdef COLOR + if (use_plane) +#else + if (!copy) +#endif /* COLOR */ + { if (i & 1) color.pixel |= plane_masks[0]; if (i & 2) @@ -1155,20 +1304,62 @@ palette[i] = color.pixel; } else { - if (XAllocColor(DISP, our_colormap, &color)) + if (XAllocColor(DISP, our_colormap, &color)) { palette[i] = color.pixel; - else +#ifdef COLOR + if (use_color) { + if (color_allocated_top >= color_allocated_len) { + color_allocated_len += 0x10; + color_allocated = (Pixel *)xrealloc(color_allocated, + sizeof(Pixel) + * color_allocated_len); + } + color_allocated[color_allocated_top++] = color.pixel; + } +#endif /* COLOR */ + } else palette[i] = (i * 100 >= density * 15) - ? fore_Pixel : back_Pixel; +#ifdef COLOR + ? fore_color_data.pixel : back_color_data.pixel +#else /* COLOR */ + ? fore_Pixel : back_Pixel +#endif /* COLOR */ + ; } } +#ifdef COLOR + copy_tmp = False; + if (!use_plane && !resource.thorough) { + if (!resource.copy && !warn_done) { + Puts("Note: overstrike characters may be incorrect."); + warn_done = True; /* Print warning only once. */ + } + copy_tmp = True; + } + copyGC = MakeGC(GXcopy, + fore_color_data.pixel, back_color_data.pixel); + ruleGC = (copy_tmp ? copyGC + : MakeGC(GXor, fore_color_data.pixel, back_color_data.pixel)); + if (copy_tmp || use_plane) { + foreGC = ruleGC; + foreGC2 = 0; + } else { + foreGC = MakeGC(GXor, fore_color_data.pixel, 0); + foreGC2 = MakeGC(GXandInverted, ~fore_color_data.pixel, 0); + } +#else /* COLOR */ copyGC = MakeGC(GXcopy, fore_Pixel, back_Pixel); foreGC = ruleGC = copy ? copyGC : MakeGC(GXor, fore_Pixel, back_Pixel); foreGC2 = 0; +#endif /* COLOR */ oldgamma = gamma; } +#ifdef COLOR + saved_fore_color = fore_color_data; + saved_back_color = back_color_data; +#endif /* COLOR */ if (mane.shrinkfactor == 1) return; @@ -1180,10 +1371,109 @@ (mane.shrinkfactor * mane.shrinkfactor + 1) * sizeof(Pixel)); shrink_allocated_for = mane.shrinkfactor; } +#ifdef COLOR + if (pixeltbl_t != NULL) { + free((char *) pixeltbl_t); + pixeltbl_t = NULL; + } + if (foreGC2 != NULL) + pixeltbl_t = xmalloc((unsigned) + (mane.shrinkfactor * mane.shrinkfactor + 1) * sizeof(Pixel)); +#endif /* COLOR */ - for (i = 0; i <= (unsigned)(mane.shrinkfactor * mane.shrinkfactor); ++i) + for (i = 0; i <= (unsigned)(mane.shrinkfactor * mane.shrinkfactor); ++i) { pixeltbl[i] = palette[(i * 30 + mane.shrinkfactor * mane.shrinkfactor) / (2 * mane.shrinkfactor * mane.shrinkfactor)]; +#ifdef COLOR + if (foreGC2) + pixeltbl_t[i] = ~pixeltbl[i]; +#endif /* COLOR */ + } +#ifdef COLOR + /* background color should be transparent. ??? */ + if (!copy_tmp && !use_plane) { + pixeltbl[0] = 0; + if (foreGC2) + pixeltbl_t[0] = 0; + } +#endif /* COLOR */ +} + +#undef MakeGC + +void +init_colors() +{ + static Boolean warn_done = False; + Boolean warn = False; + + copy = resource.copy; + +#ifdef GREY + if (use_grey +#ifdef COLOR + || (use_color && our_visual->class == TrueColor) +#endif + ) init_pix(); + else +#endif + { + XGCValues values; +#ifdef COLOR + Pixel set_bits; + Pixel clr_bits; + + if (fore_color_data.pixel == back_color_data.pixel) { + fore_color_data.pixel = fore_Pixel; + XQueryColor(DISP, our_colormap, &fore_color_data); + back_color_data.pixel = back_Pixel; + XQueryColor(DISP, our_colormap, &back_color_data); + } + set_bits = (Pixel)(fore_color_data.pixel & ~back_color_data.pixel); + clr_bits = (Pixel)(back_color_data.pixel & ~fore_color_data.pixel); +#else /* COLOR */ + Pixel set_bits = (Pixel) (fore_Pixel & ~back_Pixel); + Pixel clr_bits = (Pixel) (back_Pixel & ~fore_Pixel); +#endif /* COLOR*/ + + if (copy == Maybe) + copy = (!resource.thorough +#ifdef COLOR + && our_depth > 1 +#else /* COLOR */ + && DefaultDepthOfScreen(SCRN) > 1 +#endif /* COLOR*/ + ); + +#define MakeGC(fcn, fg, bg) (values.function = fcn, values.foreground=fg,\ + values.background=bg,\ + XCreateGC(DISP, RootWindowOfScreen(SCRN),\ + GCFunction|GCForeground|GCBackground, &values)) + + foreGC = foreGC2 = ruleGC = NULL; + if (copy || (set_bits && clr_bits)) +#ifdef COLOR + ruleGC = MakeGC(GXcopy, + fore_color_data.pixel, back_color_data.pixel); +#else /* COLOR */ + ruleGC = MakeGC(GXcopy, fore_Pixel, back_Pixel); +#endif /* COLOR*/ + if (copy) foreGC = ruleGC; + else if (!resource.thorough && ruleGC) { + foreGC = ruleGC; + warn = True; + } else { + if (set_bits) foreGC = MakeGC(GXor, set_bits, 0); + if (clr_bits || !set_bits) + *(foreGC ? &foreGC2 : &foreGC) = + MakeGC(GXandInverted, clr_bits, 0); + if (!ruleGC) ruleGC = foreGC; + } + } + if (warn && !warn_done) { + Puts("Note: overstrike characters may be incorrect."); + warn_done = True; /* Print warning only once. */ + } } #undef MakeGC @@ -2076,10 +2366,14 @@ #endif /* not TOOLKIT */ -static void +void do_goto_page(int pageno) { if (current_page != pageno) { +#ifdef TOC + if (!resource.expert) + Center_TOC(current_page, pageno); +#endif /* TOC */ current_page = pageno; warn_spec_now = warn_spec; if (!resource.keep_flag) @@ -2234,6 +2528,10 @@ GET_ARG(arg, 0); pageno_correct = arg - current_page; +#ifdef TOC + if (!resource.expert) + Redraw_TOC(); +#endif /* TOC */ print_statusline(STATUS_SHORT, "Current page number set to %d", arg); } @@ -2494,6 +2792,10 @@ } /* !keep_flag */ if (current_page < total_pages - 1) { +#ifdef TOC + if (!resource.expert) + Center_TOC(current_page, current_page + 1); +#endif /* TOC */ ++current_page; warn_spec_now = warn_spec; if (!resource.keep_flag) @@ -2553,6 +2855,10 @@ } /* !keep_flag */ if (current_page > 0) { +#ifdef TOC + if (!resource.expert) + Center_TOC(current_page, current_page - 1); +#endif /* TOC */ --current_page; warn_spec_now = warn_spec; if (!resource.keep_flag) { @@ -2723,7 +3029,11 @@ } static +#ifdef ZOOM_BUTTON /* by Kenta MURATA . */ +ACTION(Act_zoom) +#else /* !ZOOM_BUTTON */ ACTION(Act_shrink_to_dpi) +#endif /* !ZOOM_BUTTON */ { int arg; UNUSED(w); @@ -2731,16 +3041,25 @@ GET_ARG(arg, 0); +#ifdef ZOOM_BUTTON + arg = mane.shrinkfactor - arg; +#else /* !ZOOM_BUTTON */ if (arg > 0) arg = (double)pixels_per_inch / arg + 0.5; +#endif /* !ZOOM_BUTTON */ if (arg <= 0) { XBell(DISP, 10); print_statusline(STATUS_SHORT, +#ifdef ZOOM_BUTTON + "Shrink factor is already full size."); +#else /* !ZOOM_BUTTON */ "shrink-to-dpi requires a positive argument"); +#endif /* !ZOOM_BUTTON */ return; } + print_statusline(STATUS_SHORT, "shrink factor: %d", arg); if (arg == mane.shrinkfactor) return; #if !MOTIF @@ -3029,8 +3348,179 @@ } } } + +#ifdef MARKPAGE /* by Kenta MURATA . */ +static +ACTION(Act_mark_all_pages) +{ + PAGE mark_page; + + for (mark_page = 0; mark_page < total_pages; mark_page++) + MarkPage(mark_page); +#ifdef TOC + if (!resource.expert) + Redraw_TOC(); +#endif /* TOC */ + print_statusline(STATUS_SHORT, "Marked all pages."); +} + +static +ACTION(Act_unmark_all_pages) +{ + if (!EmptyPageMarkRing()) { + MakePageMarkRingNull(); +#ifdef TOC + if (!resource.expert) + Redraw_TOC(); +#endif /* !TOC */ + print_statusline(STATUS_SHORT, "Unmarked all pages."); + return; + } + XBell(DISP, 10); +} + +static +ACTION(Act_mark_page) +{ + PAGE mark_page; + + GET_ARG(mark_page, RINGSIZE); /* use RINGSIZE instead of MAX_PAGE */ + mark_page = (mark_page < RINGSIZE /* to keep independence from TOC */ +#ifdef PAGENUM + ? mark_page +#else /* !PAGENUM */ + ? mark_page - pageno_correct +#endif /* !PAGENUM */ + : current_page); + if ((0 <= mark_page) && (mark_page < total_pages)) { + MarkPage(mark_page); +#ifdef TOC + if (!resource.expert) + Redraw_TOC(); +#endif /* TOC */ + print_statusline(STATUS_SHORT, "Marked this page."); + return; + } + XBell(DISP, 10); + print_statusline(STATUS_SHORT, "Can't marke this page."); +} + +static +ACTION(Act_unmark_page) +{ + PAGE mark_page; + + GET_ARG(mark_page, RINGSIZE); + mark_page = (mark_page < RINGSIZE +#ifdef PAGENUM + ? mark_page +#else /* !PAGENUM */ + ? mark_page - pageno_correct +#endif /* !PAGENUM */ + : current_page); + if ((0 <= mark_page) && (mark_page < total_pages)) { + if (ThisPageIsMarked(mark_page)) { + UnmarkPage(mark_page); +#ifdef TOC + if (!resource.expert) + Redraw_TOC(); +#endif /* TOC */ + print_statusline(STATUS_SHORT, "Unmarked this page."); + return; + } + } + XBell(DISP, 10); + print_statusline(STATUS_SHORT, "Can't unmark this page."); +} + +static +ACTION(Act_goto_lastly_marked_page) +{ + PAGE mark_page; + if (!EmptyPageMarkRing()) { + PAGE last_mark; + last_mark = LastMarkPage(); + mark_page = last_mark; + + while(!((0 <= mark_page) && (mark_page < total_pages))) { + RotatePageMarkRing(); + mark_page = LastMarkPage(); + if (mark_page == last_mark) + goto bad; + } + do_goto_page(check_goto_page(mark_page)); + return; + } + bad: + XBell(DISP, 10); +} + +static +ACTION(Act_exchange_current_and_marked_page) +{ + PAGE mark_page; + if (!EmptyPageMarkRing()) { + PAGE last_mark; + + last_mark = LastMarkPage(); + mark_page = last_mark; + while (!((0 <= mark_page) && (mark_page < total_pages))) { + RotatePageMarkRing(); + mark_page = LastMarkPage(); + if (mark_page == last_mark) + goto bad; + } + SetPageMarkAtLast(current_page); + do_goto_page(check_goto_page(mark_page)); + } else + goto bad; + return; + bad: + XBell(DISP, 10); +} + +static +ACTION(Act_trace_back_mark_ring) +{ + PAGE mark_page; + if (!EmptyPageMarkRing()) { + PAGE last_mark; + + last_mark = LastMarkPage(); + mark_page = last_mark; + while (!((0 <= mark_page) && (mark_page <= total_pages))) { + RotatePageMarkRing(); + mark_page = LastMarkPage(); + if (mark_page == last_mark) + goto bad; + } + RotatePageMarkRing(); + do_goto_page(check_goto_page(mark_page)); + return; + } + bad: + XBell(DISP, 10); +} +#endif /* MARKPAGE */ /* by Kenta MURATA . */ #endif /* BUTTONS */ +#ifdef PRINTDVI /* by Kenta MURATA . */ +static +ACTION(Act_print) +{ + print_DVI_file (top_level); +} +#endif /* PRINTDVI */ /* by Kenta MURATA . */ +#ifdef PAPERMENU /* by Kenta MURATA . */ +static +ACTION(Act_paper) +{ + if(PopupPaperType(top_level)) { + --dvi_time; + canit = True; + } +} +#endif /* PAPERMENU */ /* by Kenta MURATA . */ #if !TOOLKIT static diff -ruN xdvik-22.40y1.orig/texk/xdvik/font-open.c xdvik-22.40y1/texk/xdvik/font-open.c --- xdvik-22.40y1.orig/texk/xdvik/font-open.c 2003-05-31 18:29:21.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/font-open.c 2003-09-29 11:47:21.000000000 +0900 @@ -70,7 +70,17 @@ } #endif /* T1LIB */ +#ifdef KANJI + if (iskanjifont(font)) { + name = kpse_find_tfm(font); + if (!name) { + name = kpse_find_vf(font); + } + } + if (name && (iskanjifont(font) || !isdnpfont(font))) { +#else /* !KANJI */ if (name) { /* found a vf font */ +#endif /* KANJI */ /* pretend it has the expected dpi value, else caller will complain */ *dpi_ret = dpi; *filename_ret = name; diff -ruN xdvik-22.40y1.orig/texk/xdvik/jtfm.h xdvik-22.40y1/texk/xdvik/jtfm.h --- xdvik-22.40y1.orig/texk/xdvik/jtfm.h 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/jtfm.h 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,47 @@ +/********************************************** + * Copyright (C) Atsuo Kawaguchi, 1987. + * (atsuo@sanken.osaka-u.junet) + * Modified by Y. Hayashi from jxdvi-NEWS + * (hayashi@me.aoyama.ac.jp) + **********************************************/ +#define J_ID 0 /* id */ +#define J_NT 1 /* number of words in the char_type table */ +#define J_LF 2 /* length of entire file */ +#define J_LH 3 /* length of header */ +#define J_BC 4 /* smallest char_type */ +#define J_EC 5 /* largest char_type */ +#define J_NW 6 /* number of width table */ +#define J_NH 7 /* number of height table */ +#define J_ND 8 /* number of depth table */ +#define J_NI 9 /* number of italic correctiuon table */ +#define J_NL 10 /* number of glue/kern talbe */ +#define J_NK 11 +#define J_NG 12 +#define J_NP 13 + +struct jfm_char_type { + unsigned short code; /* JIS code */ + unsigned short index; /* index to char_info */ +}; + +struct jfm_char_info { + unsigned char width_ix; /* index to width */ + unsigned char height_depth_ix; /* index to height & depth */ + unsigned char italic_ix_tag; /* index to italic & tag */ + unsigned char remainder_ix; /* index to remainder */ +}; + +struct jfm { + char fn[128]; /* font name (min10, etc.) */ + short table[(J_NP+1)]; /* table */ + unsigned long check_sum; /* header */ + unsigned long design_size; + struct jfm_char_type *type; + struct jfm_char_info *info; + unsigned long *width; + unsigned long *height; + unsigned long *depth; + unsigned long *italic; +}; + +struct jfm *read_jfm ARGS((FILE *, char *)); diff -ruN xdvik-22.40y1.orig/texk/xdvik/markpage.c xdvik-22.40y1/texk/xdvik/markpage.c --- xdvik-22.40y1.orig/texk/xdvik/markpage.c 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/markpage.c 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,276 @@ +/* + * Page mark ring for xdvi + * + * Copyright (c) 1993, 1995 + * ONO Kouichi onono@fuka.info.waseda.ac.jp + * All rights reserved. + */ + +#include "xdvi-config.h" /* added by Masahito Yamaga */ +#include +#include "markpage.h" + +static MARKRING *PageMarkRing; + +void + CreateNewPageMarkRing() +{ + PageMarkRing = CreateNewRing(); +} + +void + MakePageMarkRingNull() +{ + MakeRingNull(PageMarkRing); +} + +BOOL + ThisPageIsMarked(page) +PAGE page; +{ + return MemberOfRing(page, PageMarkRing); +} + +void + MarkPage(page) +PAGE page; +{ + if(ThisPageIsMarked(page)) { + PurgeTheValueAllFromRing(page, PageMarkRing); + } + /* Like LRU-stack */ + AddElementToRing(page, PageMarkRing); +} + +void + UnmarkPage(page) +PAGE page; +{ + if(ThisPageIsMarked(page)) { + PurgeTheValueAllFromRing(page, PageMarkRing); + } +} + +void + ReverseTheMarkOfPage(page) +PAGE page; +{ + if(ThisPageIsMarked(page)) { + UnmarkPage(page); + } else { + MarkPage(page); + } +} + +BOOL + EmptyPageMarkRing() +{ + return EmptyRing(PageMarkRing); +} + +PAGE + LastMarkPage() +{ + return RingLastElement(PageMarkRing); +} + +void + SetPageMarkAtLast(page) +PAGE page; +{ + if(! ThisPageIsMarked(page)) { + PurgeLastElementFromRing(PageMarkRing); + } + MarkPage(page); +} + +void + RotatePageMarkRing() +{ + RotateRing(PageMarkRing); +} + +#ifndef DVISEL + +LIST_LOCATION + MakeMarkedPageList(PageList) +PAGE PageList[LISTSIZE]; +{ + return MakeListFromRing(PageMarkRing, PageList); +} + +LIST_LOCATION + MakeSortedMarkedPageList(PageList) +PAGE PageList[LISTSIZE]; +{ + return MakeListFromRing(MakeRingSort(PageMarkRing), PageList); +} + +void + GetMarkedPageListAsString(ResultString, prevchar, postchar, delimiter) +char ResultString[STRLENGTH], prevchar, postchar, delimiter; +{ + PAGE PageList[LISTSIZE]; + LIST_LOCATION EndLocation, loc; + char buff[STRLENGTH]; + + ResultString[0] = (char)NULL; + EndLocation = MakeMarkedPageList(PageList); + if(EndLocation>=INITIAL_LIST) { + if(prevchar!=(char)NULL) { + /* Put a character on the previous position of the first page number */ + sprintf(buff, "%c", prevchar); + strcat(ResultString, buff); + } + /* Put the first page number */ + sprintf(buff, "%d", PageList[INITIAL_LIST]+1); + strcat(ResultString, buff); + if(postchar!=(char)NULL) { + /* Put a character on the post position of the first page number */ + sprintf(buff, "%c", postchar); + strcat(ResultString, buff); + } + for(loc = INITIAL_LIST+1; loc<=EndLocation; loc++) { + /* Put the delimiter character */ + sprintf(buff, "%c", delimiter); + strcat(ResultString, buff); + if(prevchar!=(char)NULL) { + /* Put a character on the previous position of the first page number */ + sprintf(buff, "%c", prevchar); + strcat(ResultString, buff); + } + /* Put the page number */ + sprintf(buff, "%d", PageList[loc]+1); + strcat(ResultString, buff); + if(postchar!=(char)NULL) { + /* Put a character on the post position of the first page number */ + sprintf(buff, "%c", postchar); + strcat(ResultString, buff); + } + } + } +} + +void + GetSortedMarkedPageListAsString(ResultString, prevchar, postchar, delimiter) +char ResultString[STRLENGTH], prevchar, postchar, delimiter; +{ + PAGE PageList[LISTSIZE]; + LIST_LOCATION EndLocation, loc; + char buff[STRLENGTH]; + + ResultString[0] = (char)NULL; + EndLocation = MakeSortedMarkedPageList(PageList); + if(EndLocation>=INITIAL_LIST) { + if(prevchar!=(char)NULL) { + /* Put a character on the previous position of the first page number */ + sprintf(buff, "%c", prevchar); + strcat(ResultString, buff); + } + /* Put the first page number */ + sprintf(buff, "%d", PageList[INITIAL_LIST]+1); + strcat(ResultString, buff); + if(postchar!=(char)NULL) { + /* Put a character on the post position of the first page number */ + sprintf(buff, "%c", postchar); + strcat(ResultString, buff); + } + for(loc = INITIAL_LIST+1; loc<=EndLocation; loc++) { + /* Put the delimiter character */ + sprintf(buff, "%c", delimiter); + strcat(ResultString, buff); + if(prevchar!=(char)NULL) { + /* Put a character on the previous position of the first page number */ + sprintf(buff, "%c", prevchar); + strcat(ResultString, buff); + } + /* Put the page number */ + sprintf(buff, "%d", PageList[loc]+1); + strcat(ResultString, buff); + if(postchar!=(char)NULL) { + /* Put a character on the post position of the first page number */ + sprintf(buff, "%c", postchar); + strcat(ResultString, buff); + } + } + } +} + +void + GetSortedMarkedPPListAsString(ResultString, prevchar, postchar, tochar, delimiter) +char ResultString[STRLENGTH], prevchar, postchar, tochar, delimiter; +{ + PAGE PageList[LISTSIZE], ppstart, ppend; + LIST_LOCATION EndLocation, loc; + char buff[STRLENGTH]; + + if(tochar==(char)NULL) + tochar = DEFAULTTOCHAR; + + ResultString[0] = (char)NULL; + EndLocation = MakeSortedMarkedPageList(PageList); + if(EndLocation>=INITIAL_LIST) { + if(prevchar!=(char)NULL) { + /* Put a character on the previous position of the first page number */ + sprintf(buff, "%c", prevchar); + strcat(ResultString, buff); + } + /* Record this page as the start page of page-to-page */ + ppstart = PageList[INITIAL_LIST]+1; + ppend = ppstart; + /* Put the first page number */ + sprintf(buff, "%d", ppstart); + strcat(ResultString, buff); + if(postchar!=(char)NULL) { + /* Put a character on the post position of the first page number */ + sprintf(buff, "%c", postchar); + strcat(ResultString, buff); + } + for(loc = INITIAL_LIST+1; loc<=EndLocation; loc++) { + if(PageList[loc]==ppend) { /* Is this page the successor ? */ + /* Yes, this page is the successor of the previous page */ + /* Renew the record of the end page of page-to-page */ + ppend = PageList[loc]+1; + /* Normally, the successive page is no t printed */ + /* However, it is printed only if the page is the end of list */ + if(loc==EndLocation) { + sprintf(buff, "%c", tochar); + strcat(ResultString, buff); + sprintf(buff, "%d", ppend); + strcat(ResultString, buff); + } + } else { + /* No, this page is not the successor of the previous page */ + /* Print page-to-page (the start page is already printed) */ + if(ppend!=ppstart) { /* page-to-page form ? */ + /* Yes */ + sprintf(buff, "%c", tochar); + strcat(ResultString, buff); + sprintf(buff, "%d", ppend); + strcat(ResultString, buff); + } + /* Put the delimiter character */ + sprintf(buff, "%c", delimiter); + strcat(ResultString, buff); + if(prevchar!=(char)NULL) { + /* Put a character on the previous position of the first page number */ + sprintf(buff, "%c", prevchar); + strcat(ResultString, buff); + } + /* Renew the record of the start page of page-to-page */ + ppstart = PageList[loc]+1; + ppend = ppstart; + /* Put the page number */ + sprintf(buff, "%d", ppstart); + strcat(ResultString, buff); + if(postchar!=(char)NULL) { + /* Put a character on the post position of the first page number */ + sprintf(buff, "%c", postchar); + strcat(ResultString, buff); + } + } + } + } +} + +#endif /* DVISEL */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/markpage.h xdvik-22.40y1/texk/xdvik/markpage.h --- xdvik-22.40y1.orig/texk/xdvik/markpage.h 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/markpage.h 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,39 @@ +/* + * Page mark ring for xdvi + * + * Copyright (c) 1993, 1995 + * ONO Kouichi onono@fuka.info.waseda.ac.jp + * All rights reserved. + */ + +#ifndef _MARKPAGE_H_ +#define _MARKPAGE_H_ + +#include "chardef.h" +#include "markring.h" + +#define STRLENGTH (1024) + +typedef int PAGE; + +extern void CreateNewPageMarkRing(void); +extern void MakePageMarkRingNull(void); +extern BOOL ThisPageIsMarked(PAGE); +extern void MarkPage(PAGE); +extern void UnmarkPage(PAGE); +extern void ReverseTheMarkOfPage(PAGE); +extern BOOL EmptyPageMarkRing(void); +extern PAGE LastMarkPage(void); +extern void SetPageMarkAtLast(PAGE); +extern void RotatePageMarkRing(void); +#ifndef DVISEL +extern LIST_LOCATION MakeMarkedPageList(PAGE *); +extern LIST_LOCATION MakeSortedMarkedPageList(PAGE *); +extern void GetMarkedPageListAsString(char *, char, char, char); +extern void GetSortedMarkedPageListAsString(char *, char, char, char); +extern void GetSortedMarkedPPListAsString(char *, char, char, char, char); +#endif /* DVISEL */ + +#define DEFAULTTOCHAR CHAR_COLON + +#endif /* _MARKPAGE_H_ */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/markring.c xdvik-22.40y1/texk/xdvik/markring.c --- xdvik-22.40y1.orig/texk/xdvik/markring.c 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/markring.c 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,321 @@ +/* + * Mark ring package + * + * Copyright (c) 1993, 1995 + * ONO Kouichi onono@fuka.info.waseda.ac.jp + * All rights reserved. + */ + +#include "xdvi-config.h" /* added by Masahito Yamaga */ +#include "markring.h" +#include +/* #include */ +/* removed by Masahito Yamaga for BSD/OS (suggested by Mr. S.Hagihira) */ + +void + MakeRingNull(ring) +MARKRING *ring; +{ + ring->front = INITIAL_FRONT; + ring->rear = INITIAL_REAR; +} + +MARKRING + *CreateNewRing() +{ + MARKRING *ring = NULL; + + /* calloc() ---> xcalloc() by Masahito Yamaga */ + ring = (MARKRING *) xcalloc(1, sizeof(MARKRING)); + MakeRingNull(ring); + return ring; +} + +BOOL + EmptyRing(ring) +MARKRING *ring; +{ + return Is_Empty_Location(ring->front, ring->rear); +} + +BOOL + ElementExistsHereInRing(index, ring) +RING_LOCATION index; +MARKRING *ring; +{ + if(EmptyRing(ring)) { + return FALSE; + } else { + return BetweenOnRing(ring->front, ring->rear, index); + } +} + +BOOL + BetweenOnRing(pre, post, index) +RING_LOCATION pre, post, index; +{ + if(pre<=post) { + return ((pre<=index)&&(index<=post)); + } else { + /* pre>post */ + return ( ((INITIAL_FRONT<=index) && (index<= post)) + || ((pre <=index) && (index<=INITIAL_REAR))); + } +} + +BOOL + MemberOfRing(elem, ring) +RING_ELEMENT elem; +MARKRING *ring; +{ + register RING_LOCATION index = ring->front; + + while(! Is_Empty_Location(index, ring->rear)) { + if(ring->element[index]==elem) { + return TRUE; + } else { + index = Ring_Next_Location(index); + } + } + return FALSE; +} + +RING_LOCATION + LocationOfMemberInRing(elem, ring) +RING_ELEMENT elem; +MARKRING *ring; +{ + register RING_LOCATION index = ring->front; + + while(! Is_Empty_Location(index, ring->rear)) { + if(ring->element[index]==elem) { + return index; + } else { + index = Ring_Next_Location(index); + } + } + return ILLEGAL_LOCAT; +} + +RING_ELEMENT + RingTopElement(ring) +MARKRING *ring; +{ + if(EmptyRing(ring)) { + fprintf(stderr, "Mark ring has no elements.\n"); + return 0; /* added by tutimura@nn.iij4u.or.jp 2002/8/21 */ + } else { + return ring->element[ring->front]; + } +} + +RING_ELEMENT + RingLastElement(ring) +MARKRING *ring; +{ + if(EmptyRing(ring)) { + fprintf(stderr, "Mark ring has no elements.\n"); + return 0; /* added by tutimura@nn.iij4u.or.jp 2002/8/21 */ + } else { + return ring->element[ring->rear]; + } +} + +NUMBER + NumberOfElementsInRing(ring) +MARKRING *ring; +{ + register NUMBER num = 0; + + if(EmptyRing(ring)) { + return num; + } else { + register RING_LOCATION index = ring->front; + + while(! Is_Empty_Location(index, ring->rear)) { + num++; + index = Ring_Next_Location(index); + } + return num; + } +} + +void + PurgeOldElementFromRing(ring) +MARKRING *ring; +{ + if(EmptyRing(ring)) { + fprintf(stderr, "Mark ring has no elements.\n"); + } else { + ring->front = Ring_Next_Location(ring->front); + /* forget the oldest (first-in) element to free space */ + } +} + +void + PurgeLastElementFromRing(ring) +MARKRING *ring; +{ + if(EmptyRing(ring)) { + fprintf(stderr, "Mark ring has no elements.\n"); + } else { + ring->rear = Ring_Prev_Location(ring->rear); + /* forget the last (last-in) element to free space */ + } +} + +void + PurgeElementHereFromRing(index, ring) +RING_LOCATION index; +MARKRING *ring; +{ + if(ElementExistsHereInRing(index, ring)) { + RING_LOCATION prev, next; + + ring->rear = Ring_Prev_Location(ring->rear); + next = index; + prev = next; + while(! Is_Empty_Location(prev, ring->rear)) { + next = Ring_Next_Location(prev); + ring->element[prev] = ring->element[next]; + prev = next; + } + } else { + fprintf(stderr, "There is no elements in the Mark ring.\n"); + } +} + +void + PurgeTheValueAllFromRing(elem, ring) +RING_ELEMENT elem; +MARKRING *ring; +{ + register RING_LOCATION index; + + while((index = LocationOfMemberInRing(elem, ring))!=ILLEGAL_LOCAT) { + PurgeElementHereFromRing(index, ring); + } +} + +void + AddElementToRing(elem, ring) +RING_ELEMENT elem; +MARKRING *ring; +{ + if(Is_Empty_Location(ring->front, Ring_Next_Location(ring->rear))) { + PurgeOldElementFromRing(ring); + } + ring->rear = Ring_Next_Location(ring->rear); + ring->element[ring->rear] = elem; +} + +void + InsertElementToRing(elem, ring) +RING_ELEMENT elem; +MARKRING *ring; +{ + if(Is_Empty_Location(Ring_Prev_Location(ring->front), ring->rear)) { + PurgeLastElementFromRing(ring); + } + ring->front = Ring_Prev_Location(ring->front); + ring->element[ring->front] = elem; +} + +void + RotateRing(ring) +MARKRING *ring; +{ + RING_ELEMENT elem; + + if(EmptyRing(ring)) { + fprintf(stderr, "Mark ring has no elements.\n"); + } else { + elem = RingLastElement(ring); + PurgeLastElementFromRing(ring); + InsertElementToRing(elem, ring); + } +} + +void + ReverseRotateRing(ring) +MARKRING *ring; +{ + RING_ELEMENT elem; + + if(EmptyRing(ring)) { + fprintf(stderr, "Mark ring has no elements.\n"); + } else { + elem = RingTopElement(ring); + PurgeOldElementFromRing(ring); + AddElementToRing(elem, ring); + } +} + +MARKRING + *CopyRing(ring) +MARKRING *ring; +{ + register RING_LOCATION index = ring->front; + MARKRING *newring = NULL; + + newring = CreateNewRing(); + while(! Is_Empty_Location(index, ring->rear)) { + AddElementToRing(ring->element[index], newring); + index = Ring_Next_Location(index); + } + return newring; +} + +MARKRING + *MakeRingUnique(ring) +MARKRING *ring; +{ + register RING_LOCATION index = ring->front; + MARKRING *newring = NULL; + + newring = CreateNewRing(); + while(! Is_Empty_Location(index, ring->rear)) { + if(! MemberOfRing(ring->element[index], newring)) { + AddElementToRing(ring->element[index], newring); + } + index = Ring_Next_Location(index); + } + return newring; +} + +int + RingElemCompare(elem1, elem2) +RING_ELEMENT *elem1, *elem2; +{ + return *elem1-*elem2; +} + +MARKRING + *MakeRingSort(ring) +MARKRING *ring; +{ + MARKRING *newring = NULL; + + newring = CopyRing(ring); + qsort(newring->element, newring->rear+1, + sizeof(RING_ELEMENT), RingElemCompare); + return newring; +} + +LIST_LOCATION + MakeListFromRing(ring, list) +MARKRING *ring; +LIST_ELEMENT list[LISTSIZE]; +{ + register RING_LOCATION index; + register LIST_LOCATION loc = INITIAL_LIST; + + index = ring->front; + + while(! Is_Empty_Location(index, ring->rear)) { + list[loc] = ring->element[index]; + loc++; + index = Ring_Next_Location(index); + } + return loc-1; +} diff -ruN xdvik-22.40y1.orig/texk/xdvik/markring.h xdvik-22.40y1/texk/xdvik/markring.h --- xdvik-22.40y1.orig/texk/xdvik/markring.h 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/markring.h 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,76 @@ +/* + * Mark ring package + * + * Copyright (c) 1993, 1995 + * ONO Kouichi onono@fuka.info.waseda.ac.jp + * All rights reserved. + */ + +#ifndef _MARKRING_H_ +#define _MARKRING_H_ + +#ifndef BOOL +typedef char BOOL; +#endif +#ifndef TRUE +#define TRUE (1) +#define FALSE (0) +#endif + +typedef unsigned short int NUMBER; + +typedef int RING_ELEMENT; /* contents of Ring */ +#ifndef RINGSIZE +#define RINGSIZE (16) +#endif /* RINGSIZE */ +typedef short int RING_LOCATION; /* index of Ring */ +#define ILLEGAL_LOCAT (-1) /* when location is illegal */ +#define INITIAL_FRONT (0) /* front index */ +#define INITIAL_REAR (RINGSIZE-1) /* rear index */ + +struct MarkRing { + RING_ELEMENT element[RINGSIZE]; /* Ring body */ + RING_LOCATION front; /* front : index of first-in element */ + RING_LOCATION rear; /* rear : index of last-in element */ +}; + +typedef struct MarkRing MARKRING; + +typedef RING_ELEMENT LIST_ELEMENT; /* contents of List */ +#define LISTSIZE (RINGSIZE) +typedef short int LIST_LOCATION; /* index of List */ +#define INITIAL_LIST (0) /* initial position of List */ + +typedef LIST_ELEMENT MARKLIST[LISTSIZE]; + +extern void MakeRingNull ARGS((MARKRING *)); +extern MARKRING *CreateNewRing ARGS((void)); +extern BOOL EmptyRing ARGS((MARKRING *)); +extern BOOL ElementExistsHereInRing ARGS((RING_LOCATION, MARKRING *)); +extern BOOL BetweenOnRing ARGS((RING_LOCATION, RING_LOCATION, RING_LOCATION)); +extern BOOL MemberOfRing ARGS((RING_ELEMENT, MARKRING *)); +extern RING_LOCATION LocationOfMemberInRing ARGS((RING_ELEMENT, MARKRING *)); +extern RING_ELEMENT RingTopElement ARGS((MARKRING *)); +extern RING_ELEMENT RingLastElement ARGS((MARKRING *)); +extern NUMBER NumberOfElementsInRing ARGS((MARKRING *)); +extern void PurgeOldElementFromRing ARGS((MARKRING *)); +extern void PurgeLastElementFromRing ARGS((MARKRING *)); +extern void PurgeElementHereFromRing ARGS((RING_LOCATION, MARKRING *)); +extern void PurgeTheValueAllFromRing ARGS((RING_ELEMENT, MARKRING *)); +extern void AddElementToRing ARGS((RING_ELEMENT, MARKRING *)); +extern void InsertElementToRing ARGS((RING_ELEMENT, MARKRING *)); +extern void RotateRing ARGS((MARKRING *)); +extern void ReverseRotateRing ARGS((MARKRING *)); +extern MARKRING *CopyRing ARGS((MARKRING *)); +extern MARKRING *MakeRingUnique ARGS((MARKRING *)); +extern int RingElemCompare ARGS((RING_ELEMENT *, RING_ELEMENT *)); +extern MARKRING *MakeRingSort ARGS((MARKRING *)); +extern LIST_LOCATION MakeListFromRing ARGS((MARKRING *, LIST_ELEMENT *)); + +#define Ring_Next_Location(i) ( ((i)+1) % RINGSIZE ) +#define Ring_Prev_Location(i) ( (i)==INITIAL_FRONT ? INITIAL_REAR : ((i)-1) ) +#define Is_Next_In_Ring(i, j) ( Ring_Next_Location(j)==(i) ) +#define Is_Prev_In_Ring(i, j) ( Ring_Prev_Location(j)==(i) ) +#define Is_Empty_Location(front, rear) ( Is_Next_In_Ring(front, rear) ) + +#endif /* _MARKRING_H_ */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/mksedscript xdvik-22.40y1/texk/xdvik/mksedscript --- xdvik-22.40y1.orig/texk/xdvik/mksedscript 2002-05-01 02:35:57.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/mksedscript 2003-09-29 11:47:21.000000000 +0900 @@ -10,7 +10,7 @@ mk_PS_DPS= mk_PS_NEWS= mk_NOGRID= -mk_A4= +mk_A4=0 # HyperTeX: There appears to be no (easy) way to disable this mk_HTEX=1 @@ -29,6 +29,8 @@ mk_BDPI=600 mk_DEFAULT_FONT_SIZES='m0:m0.5:m1:m2:m3:m4:m5' mk_SHRINK=8 +mk_DEFAULT_FONTMAP='/usr/local/share/texmf/xdvi/vfontmap' +mk_XDVIPRINTCMD='/usr/local/bin/xdviprint' # Get arguments from CFLAGS @@ -53,6 +55,36 @@ # | sed 's/^[ ]*#[ ]*define[ ][ ]*/mk_/' \ # | sed 's/[ ][ ]*/=/'`" +# Get arguments from xdvi-cofig.h + +if test -n "$mk_DVI2PS"; then + mk_DVIFILTER='dvi2ps' +else + if test -n "$mk_JDVI2KPS"; then + mk_DVIFILTER='jdvi2kps' + else + mk_DVIFILTER='dvips' + fi +fi +if test -f xdvi-config.h +then + mk_PRCMDALL=`grep '^#define PRCMDALL ' xdvi-config.h | \ + awk -F'"' '{print $(NF-1)}'` + mk_PRCMDCUR=`grep '^#define PRCMDCUR ' xdvi-config.h | \ + awk -F'"' '{print $(NF-1)}'` + mk_PRCMDMRK=`grep '^#define PRCMDMRK ' xdvi-config.h | \ + awk -F'"' '{print $(NF-1)}'` + mk_PRCMDRGN=`grep '^#define PRCMDRGN ' xdvi-config.h | \ + awk -F'"' '{print $(NF-1)}'` + mk_PRCMDLST=`grep '^#define PRCMDLST ' xdvi-config.h | \ + awk -F'"' '{print $(NF-1)}'` + mk_DVIPRINTER=`grep '^#define DVIPRINTER ' xdvi-config.h | \ + awk -F'"' '{print $(NF-1)}'` + mk_FILTOPTTBLFILE=`grep '^#define FILTOPTTBLFILE ' xdvi-config.h | \ + grep $mk_DVIFILTER | awk -F'"' '{print $(NF-1)}'` +fi +test -z "$mk_NOCOLOR" && mk_GREY=1 + # Process simple boolean arguments. Their values are empty or nonempty if test -n "$mk_NOTOOL"; then echo '/^#iftool/,/^#/d'; mk_BUTTONS=; @@ -61,6 +93,7 @@ if test -z "$mk_BUTTONS"; then echo '/^#ifbuttons/,/^#/d'; fi if test -z "$mk_PS_DPS"; then echo '/^#ifdps/,/^#/d'; fi if test -z "$mk_PS_NEWS"; then echo '/^#ifnews/,/^#/d'; fi +if test -n "$mk_NOCOLOR"; then echo '/^#ifcolor/,/^#/d'; fi if test -z "$mk_HTEX"; then echo '/^#ifhyper/,/^#/d'; fi if test -z "$mk_T1"; then echo '/^#ift1/,/^#/d'; fi if test -n "$mk_NOGRID"; then echo '/^#ifgrid/,/^#/d'; fi @@ -96,7 +129,7 @@ # Miscellaneous args -if test -n "$mk_A4"; then +if test "$mk_A4" -ne 0; then echo 's/@DEFAULT_PAGE_SIZE@/21 x 29.7 cm (A4 size)/' echo 's/@DEFAULT_UNIT@/cm " (centimeters)"/' else @@ -111,6 +144,63 @@ echo "s/@DEFAULT_FONT_SIZES@/$mk_DEFAULT_FONT_SIZES/" | sed -e "s/:/ :\\\\\\ /g" +if test -n "$mk_VI_KEY"; then + echo '/^#ifnovikey/,/^#/d' +else + echo '/^#ifvikey/,/^#/d' +fi +if test -n "$mk_ZOOM_BUTTON"; then + echo '/^#ifnozoom/,/^#endifzoom/d' +else + echo '/^#ifzoom/,/^#endifzoom/d' +fi + +if test -n "$mk_NOZEIT"; then + # ifzeit may nests. + echo '/^#ifzeit/,/^#endifzeit/d' + echo '/^#ifvfontmap/,/^#endifvfontmap/d' +else + if test -n "$mk_NOVFONTMAP"; then + echo '/^#ifvfontmap/,/^#endifvfontmap/d' + else + echo "s_@DEFAULTFONTMAP@_`echo $mk_DEFAULT_FONTMAP`_" + fi +fi +if test -n "$mk_NOMARKPAGE"; then + echo '/^#ifmarkpage/,/^#endifmarkpage/d' +fi +if test -n "$mk_NOPAPERMENU"; then + echo '/^#ifpapermenu/,/^#endifpapermenu/d' +else + echo '/^#ifnopapermenu/,/^#endifpapermenu/d' +fi +if test -n "$mk_NOPAGENUM"; then + echo '/^#ifpagenum/,/^#endifpagenum/d' +else + echo '/^#ifnopagenum/,/^#endifpagenum/d' +fi +if test -n "$mk_NOTOC"; then + echo '/^#iftoc/,/^#endiftoc/d' +fi +if test -n "$mk_NODVISEL"; then + echo '/^#ifdvisel/,/^#endifdvisel/d' + if test -n "$mk_NOPRINTDVI"; then + echo '/^#ifprintdvi/,/^#endifprintdvi/d' + else + echo "s_@PRCMDALL@_`echo $mk_PRCMDALL`_" + echo "s_@PRCMDCUR@_`echo $mk_PRCMDCUR`_" + echo "s_@PRCMDMRK@_`echo $mk_PRCMDMRK`_" + echo "s_@PRCMDRGN@_`echo $mk_PRCMDRGN`_" + echo "s_@PRCMDRGN@_`echo $mk_PRCMDLST`_" + echo "s_@DVIPRINTER@_`echo $mk_DVIPRINTER`_" + echo "s_@FILTOPTTBLFILE@_`echo $mk_FILTOPTTBLFILE`_" + fi +else + echo '/^#ifnodvisel/,/^#endifdvisel/d' + echo "s_@DVIPRINTER@_`echo $mk_DVIPRINTER`_" + echo "s_@XDVIPRINTCMD@_`echo $mk_XDVIPRINTCMD`_" +fi + # Remove all remaining '#' lines echo '/^#/d' diff -ruN xdvik-22.40y1.orig/texk/xdvik/paper.c xdvik-22.40y1/texk/xdvik/paper.c --- xdvik-22.40y1.orig/texk/xdvik/paper.c 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/paper.c 2003-09-29 11:47:21.000000000 +0900 @@ -0,0 +1,268 @@ +/* + * paper type + * + * Copyright (c) 1995 + * ONO Kouichi onono@fuka.info.waseda.ac.jp + * All rights reserved. + */ + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* #include "xdvi.h" */ +#include "xdvi-config.h" /* added by Masahito Yamaga */ +#include "chardef.h" +#include "paper.h" + +static char paper_type[PAPERTYPELEN]; + +void + SetPaperSize(type) +char *type; +{ + if (type == NULL) + paper_type[0] = CHAR_NULL; + else + strcpy(paper_type, type); +} + +char + *GetPaperSize() +{ + return paper_type; +} + +#ifdef PAPERMENU +static int paper_types_num = 0; + +void + InitPaperType(num) +int num; +{ + paper_types_num = num; +} + +static Boolean PaperEnd = False; +static Boolean PaperChanged = False; + +static void + SetPaperType(paper) +char* paper; +{ + char* p = paper; + char paperType[PAPERTYPELEN]; + char* q = paperType; + + /* skip white spaces (except newline) */ + while(*p==CHAR_SPACE || *p==CHAR_TAB) + p++; + + /* reduce newline */ + while(*p!=CHAR_NULL) { + if(*p==CHAR_NEWLINE) { + p++; + } else { + *q++ = *p++; + } + } + + /* temporal terminate symbol */ + *q = CHAR_NULL; + + /* truncate whitespaces at the tail of paper type */ + --q; + while(q>=paperType && ISWHITESPACE(*q)) + *q-- = CHAR_NULL; + + /* compare the current page type with input */ + /* if page type will not changed, do nothing */ + q = paperType; + if(*q==CHAR_NULL) { + PaperEnd = True; + /* Paper Type popup shell should be closed */ + } else { + if(strcmp(paperType, GetPaperSize())==0) { + PaperEnd = True; + /* Paper Type popup shell should be closed */ + } else { + if (! set_paper_type(paperType)) { + Fprintf(stderr, "Don't recognize paper type %s\n", paperType); + } else { + PaperEnd = True; + /* Paper Type popup shell should be closed */ + PaperChanged = True; + } + } + } +} + +static void + SelectPaperType(widget, client_data, call_data) +Widget widget; +XtPointer client_data, call_data; +{ + int Type = (int)client_data; + char* paperType = (char *)paper_types[Type]; + + SetPaperType(paperType); +} + +static Widget popup, dialog, select_button, select_menu; + +static void + SetPaper(widget, client_data, call_data) +Widget widget; +XtPointer client_data, call_data; +{ + char buff[PAPERTYPELEN]; + + strcpy(buff, (char *)XawDialogGetValueString(dialog)); + SetPaperType(buff); +} + +static void + DestroyPaperPopupPrompt(widget, client_data, call_data) +Widget widget; +XtPointer client_data, call_data; +{ + PaperEnd = True; + /* Paper Type popup shell should be closed */ +} + +static XtActionsRec actionsTable[] = { + {"SetPaper", SetPaper}, +}; + +static char defaultTranslations[] = + "CtrlJ: SetPaper()\n\ + CtrlO: SetPaper()\n\ + CtrlM: SetPaper()\n\ + Return: SetPaper()"; + +Boolean + PopupPaperType(top_level) +Widget top_level; +{ + Widget entry; + Position x, y; + Dimension width, height; + XtAppContext PaperApp; + XEvent event; + XtTranslations trans_table; + int i; + + XtVaGetValues(top_level, + XtNwidth, &width, + XtNheight, &height, + NULL); + + XtTranslateCoords(top_level, + (Position) (width / 3), (Position) (height / 3), + &x, &y); + + popup = XtVaCreatePopupShell(LBLPAPERSH, + transientShellWidgetClass, + top_level, + XtNx, x, + XtNy, y, + XtNdepth, our_depth, + XtNvisual, our_visual, +#ifdef GREY + XtNcolormap, our_colormap, +#endif + NULL); + + XtAddActions(actionsTable, XtNumber(actionsTable)); + trans_table = XtParseTranslationTable(defaultTranslations); + XtOverrideTranslations(popup, trans_table); + + /* + * The popup will contain a dialog box, prompting the user for input. + */ + + dialog = XtVaCreateManagedWidget(LBLPAPERTYPE, + dialogWidgetClass, + popup, + XtNlabel, (String)LBLPAPERTYPE, + XtNvalue, (String)GetPaperSize(), + NULL); + + /* + * The prompting message's size is dynamic; allow it to request resize. + */ + + /*** Select button ***/ + select_button = XtVaCreateManagedWidget(LBLSELECT, + menuButtonWidgetClass, + dialog, + NULL); + XtVaSetValues(select_button, + XtNmenuName, LBLSELECTMENU, + NULL); + + select_menu = XtVaCreatePopupShell(LBLSELECTMENU, + simpleMenuWidgetClass, + select_button, + XtNdepth, our_depth, + XtNvisual, our_visual, +#ifdef GREY + XtNcolormap, our_colormap, +#endif + NULL); + + for(i = 0; idvi_adv = fontp->dimconv * fpwidth; +#ifdef PTEX + g->tdir = fontp->dir; +#endif /* PTEX */ if (debug & DBG_PK) { if (g->bitmap.w != 0) Printf(", size=%dx%d, dvi_adv=%ld", g->bitmap.w, g->bitmap.h, diff -ruN xdvik-22.40y1.orig/texk/xdvik/print.c xdvik-22.40y1/texk/xdvik/print.c --- xdvik-22.40y1.orig/texk/xdvik/print.c 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/print.c 2003-09-29 11:47:22.000000000 +0900 @@ -0,0 +1,1066 @@ +/* + * print-out DVI + * + * Copyright (c) 1993, 1994, 1995 + * MATSUURA Syun syun@fuka.info.waseda.ac.jp + * HIRAHARA Atsushi hirahara@fuka.info.waseda.ac.jp + * ONO Kouichi onono@fuka.info.waseda.ac.jp + * All rights reserved. + */ +#ifdef DVISEL +/* + * select DVI + * + * Copyright (c) 1999 + * WATANABE Takeshi watanabe@komadori.planet.sci.kobe-u.ac.jp + */ +#endif /* DVISEL */ + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xdvi-config.h" /* added by Masahito Yamaga */ +#ifdef HAVE_SYS_WAIT_H +#include +#endif /* HAVE_SYS_WAIT_H */ +#ifdef PRINTDVI /* added by Masahito Yamaga */ +#include "print.h" +#ifdef MARKPAGE +#include "markpage.h" +#endif /* MARKPAGE */ +#ifdef DVISEL +#include "dvi.h" +#endif /* DVISEL */ + +#include "paper.h" + +static String print_style[] = +#ifdef MARKPAGE +{LBLPRINTALL, LBLPRINTCUR, LBLPRINTMRK, LBLPRINTRGN, LBLPRINTAMK}; +#else +{LBLPRINTALL, LBLPRINTCUR}; +#endif /* MARKPAGE */ + +static char printer_name[PRINTERNAMELEN]; +static Boolean PrintMenuEnd = False; +static Widget popup, dialog, print_button, print_menu; + +#ifndef DVISEL +static void + GetBaseName(pathname, basename) +char pathname[STRLENGTH], basename[STRLENGTH]; +{ + int len = 0; + int i = 0; + int found = -1; + + if(basename==NULL) + return; + + if(pathname==NULL) { + *basename = CHAR_NULL; + return; + } + + len = strlen(pathname); + for(i = len-1; i>found; i--) { + if(pathname[i]==PATH_DELIMITER) /* found it */ + found = i; + } + if(found<=-1) /* not found */ + found = -1; + strcpy(basename, pathname+found+1); +} + +static void + GetDirName(pathname, dirname) +char pathname[STRLENGTH], dirname[STRLENGTH]; +{ + int len = 0; + int i = 0; + int found = -1; + char copypathname[STRLENGTH]; + + if(dirname==NULL) + return; + + if(pathname==NULL) { + *dirname = CHAR_NULL; + return; + } + + strcpy(copypathname, pathname); + + len = strlen(copypathname); + for(i = len-1; i>found; i--) { + if(copypathname[i]==PATH_DELIMITER) /* found it */ + found = i; + } + + if(found==0) { + /* found, and directory is "/" */ + copypathname[0] = PATH_DELIMITER; + copypathname[1] = CHAR_NULL; + } else if(found>0) { + /* found, and directory is "/xxx/yyy/zz..." */ + copypathname[found] = CHAR_NULL; + } else { + /* not found, pathname may be plain filename */ + /* copy current directory */ + copypathname[0] = CHAR_PERIOD; + copypathname[1] = CHAR_NULL; + } + + strcpy(dirname, copypathname); +} + +static char + *MatchOption(line, paper) +char* line; +char* paper; +{ + register char* c = line; + register char* p = paper; + static char option[STRLENGTH]; + + if(line==NULL || *line==CHAR_NULL || paper==NULL || *paper==CHAR_NULL) + /* error */ + return NULL; + + /* skip white spaces */ + while(ISWHITESPACE(*c)) + c++; + while(ISWHITESPACE(*p)) + p++; + + /* if the paper type is started by '=', the following string is returned */ + if(*c==CHAR_EQUAL) { + c++; + while(ISWHITESPACE(*c)) + c++; + /* use the following option in the line */ + p = option; + while(!ISENDOFLINE(*c) && !ISCOMMENT(*c)) + /* copy the option */ + *p++ = *c++; + + /* temporal terminate symbol */ + *p = CHAR_NULL; + + /* truncate whitespaces at the tail of option */ + --p; + while(p>=option && ISWHITESPACE(*p)) + *p-- = CHAR_NULL; + + return option; + } + + /* get paper size */ + while(!ISWHITESPACE(*c) && !ISENDOFLINE(*c) && !ISCOMMENT(*c)) { + if(ISENDOFLINE(*p)) + /* not matched */ + return NULL; + if(*c++!=*p++) + /* not matched */ + return NULL; + } + if(!ISENDOFLINE(*p)) + /* not matched */ + return NULL; + + /*** paper size matched ***/ + + /* skip white spaces */ + while(ISWHITESPACE(*c)) + c++; + + if(ISENDOFLINE(*c) || ISCOMMENT(*c)) + /* use the original paper size */ + return paper; + + /* use the following option in the line */ + p = option; + while(!ISENDOFLINE(*c) && !ISCOMMENT(*c)) + /* copy the option */ + *p++ = *c++; + + /* temporal terminate symbol */ + *p = CHAR_NULL; + + /* truncate whitespaces at the tail of option */ + --p; + while(p>=option && ISWHITESPACE(*p)) + *p-- = CHAR_NULL; + + return option; +} + +static char + *FilterPaperOption(paper) +char* paper; +{ + FILE* fd = NULL; + char* FilterOptionFile = NULL; + char buff[STRLENGTH]; + char* opt = NULL; + + /* open the filter option file */ + if((FilterOptionFile = getenv(FILTOPTTBLFILEENVVARNAME))==NULL) + /* use default value */ + FilterOptionFile = FILTOPTTBLFILE; + if((fd = fopen(FilterOptionFile, "r"))==NULL) + /* file not found --> use the original paper size */ + return paper; + + /* search the file */ + while(fgets(buff, sizeof(buff), fd)!=NULL) + if((opt = MatchOption(buff, paper))!=NULL) + return opt; + + Fclose(fd); + + /* not found --> use the original paper size */ + return paper; +} + +static char + *GetTranslatedPaperSize() +{ + return FilterPaperOption(GetPaperSize()); +} + +static void + SubstitutePrintVar(ResultStr, SourceStr) +char ResultStr[STRLENGTH], SourceStr[STRLENGTH]; +{ + char SourceChar[STRLENGTH]; + char DestStr[STRLENGTH]; + char StrBuff[STRLENGTH]; + char* envvar = NULL; + char* pSource = SourceChar; + + strcpy(SourceChar, SourceStr); + DestStr[0] = CHAR_NULL; + +#ifdef HTEX +#define dvi_name urlocalize(dvi_name) +#endif /* HTEX */ + while(*pSource!=CHAR_NULL) { + if(*pSource==VARMARK) { /* Is it a variable ? */ + /* Probably it is a variable */ + pSource++; + if(*pSource!=CHAR_NULL) { /* Is the source string end ? */ + /* No, the source string has more characters */ + switch(*pSource) { + case VARMARK: + StrBuff[0] = VARMARK; + StrBuff[1] = CHAR_NULL; + strcat(DestStr, StrBuff); + break; + case VARDVIFILEFULLPATH: + /* filename of DVI file (full pathname) */ + strcat(DestStr, dvi_name); + break; + case VARDVIFILEBASENAME: + /* filename of DVI file (basename of pathname) */ + GetBaseName(dvi_name, StrBuff); + strcat(DestStr, StrBuff); + break; + case VARDVIFILEDIRNAME: + /* directory where DVI file is placed (directory of pathname) */ + GetDirName(dvi_name, StrBuff); + strcat(DestStr, StrBuff); + break; + case VARTEMPDIRECTORY: + /* temp directory */ + /* (if the environment variable TMPDIR is defined, use it) */ + if((envvar = getenv(TEMPDIRENVVARNAME)) != NULL) { + strcat(DestStr, envvar); + } else { + strcat(DestStr, TEMPDIR); + } + break; + case VARPRINTERNAME: + /* printer name */ + /* (if the environment variable PRINTER is defined, use it) */ + strcat(DestStr, printer_name); + break; + case VARPRINTCOMMAND: + /* print command string */ + /* (if the environment variable PRINTCMD is defined, use it) */ + strcpy(StrBuff, pSource+1); + if((envvar = getenv(PRINTCMDENVVARNAME))!=NULL) { + strcpy(pSource+1, envvar); + } else { + strcpy(pSource+1, PRINTCMD); + } + strcat(SourceChar, StrBuff); + break; + case VARPAPERSIZE: + /* paper size specified with -paper option (lower case) */ + strcat(DestStr, GetPaperSize()); + break; + case VARPAPERSIZEFORFILTER: + /* paper size translated from -paper option */ + strcat(DestStr, GetTranslatedPaperSize()); + break; + case VARPROCESSID: + /* proces id */ + sprintf(StrBuff, "%d", getpid()); + strcat(DestStr, StrBuff); + break; + case VARDVIFILTERCOMMAND: + /* DVI filter command string */ + /* (if the environment variable DVIFILTER is defined, use it) */ + strcpy(StrBuff, pSource+1); + if((envvar = getenv(DVIFILTERCMDENVVARNAME))!=NULL) { + strcpy(pSource+1, envvar); + } else { + strcpy(pSource+1, DVIFILTERCMD); + } + strcat(SourceChar, StrBuff); + break; + case VARCURRENTPAGENUMBER: + /* current page number */ + sprintf(StrBuff, "%d", current_page+1); + strcat(DestStr, StrBuff); + break; +#ifdef MARKPAGE + case VARLASTMARKEDPAGENUMBER: + /* last marked page number */ + sprintf(StrBuff, "%d", LastMarkPage()+1); + strcat(DestStr, StrBuff); + break; + case VARSTARTPAGENUMBEROFREGION: + /* start page number of region; minimum of %c and %m */ + sprintf(StrBuff, "%d", MIN(current_page+1, LastMarkPage()+1)); + strcat(DestStr, StrBuff); + break; + case VARENDPAGENUMBEROFREGION: + /* end page number of region; maximum of %c and %m */ + sprintf(StrBuff, "%d", MAX(current_page+1, LastMarkPage()+1)); + strcat(DestStr, StrBuff); + break; + case VARMARKEDPAGELISTMARKEDORDERBYCOMMA: + /* marked page list; marked order; separated by "," */ + GetMarkedPageListAsString(StrBuff, CHAR_NULL, CHAR_NULL, CHAR_COMMA); + strcat(DestStr, StrBuff); + break; + case VARMARKEDPAGELISTMARKEDORDERBYSPACE: + /* marked page list; marked order; separated by " " */ + GetMarkedPageListAsString(StrBuff, CHAR_NULL, CHAR_NULL, CHAR_SPACE); + strcat(DestStr, StrBuff); + break; + case VARMARKEDPAGELISTSORTEDBYCOMMA: + /* marked page list; sorted; separated by "," */ + GetSortedMarkedPageListAsString(StrBuff, CHAR_NULL, CHAR_NULL, CHAR_COMMA); + strcat(DestStr, StrBuff); + break; + case VARMARKEDPAGELISTSORTEDBYSPACE: + /* marked page list; sorted; separated by " " */ + GetSortedMarkedPageListAsString(StrBuff, CHAR_NULL, CHAR_NULL, CHAR_SPACE); + strcat(DestStr, StrBuff); + break; + case VARMARKEDPAGETOPAGELISTSORTEDBYCOMMA: + /* marked page list; sorted; page-to-page form (p1-p2) */ + /* separated by "," */ + GetSortedMarkedPPListAsString(StrBuff, CHAR_NULL, CHAR_NULL, CHAR_HYPHEN, CHAR_COMMA); + strcat(DestStr, StrBuff); + break; + case VARMARKEDPAGETOPAGELISTSORTEDBYSPACE: + /* marked page list; sorted; page-to-page form (p1-p2) */ + /* separated by " " */ + GetSortedMarkedPPListAsString(StrBuff, CHAR_NULL, CHAR_NULL, CHAR_HYPHEN, CHAR_SPACE); + strcat(DestStr, StrBuff); + break; + case VARMARKEDABSOLUTEPAGELISTMARKEDORDERBYCOMMA: + /* like %l; "=" is put on each page number (assumed dviselect) */ + GetMarkedPageListAsString(StrBuff, CHAR_EQUAL, CHAR_NULL, CHAR_COMMA); + strcat(DestStr, StrBuff); + break; + case VARMARKEDABSOLUTEPAGELISTMARKEDORDERBYSPACE: + /* like %L; "=" is put on each page number (assumed dviselect) */ + GetMarkedPageListAsString(StrBuff, CHAR_EQUAL, CHAR_NULL, CHAR_SPACE); + strcat(DestStr, StrBuff); + break; + case VARMARKEDABSOLUTEPAGELISTSORTEDBYCOMMA: + /* like %t; "=" is put on each page number (assumed dviselect) */ + GetSortedMarkedPageListAsString(StrBuff, CHAR_EQUAL, CHAR_NULL, CHAR_COMMA); + strcat(DestStr, StrBuff); + break; + case VARMARKEDABSOLUTEPAGELISTSORTEDBYSPACE: + /* like %T; "=" is put on each page number (assumed dviselect) */ + GetSortedMarkedPageListAsString(StrBuff, CHAR_EQUAL, CHAR_NULL, CHAR_SPACE); + strcat(DestStr, StrBuff); + break; + case VARMARKEDABSOLUTEPAGETOPAGELISTSORTEDBYCOMMA: + /* like %o; page-to-page form (=p1:p2) (assumed dviselect) */ + GetSortedMarkedPPListAsString(StrBuff, CHAR_EQUAL, CHAR_NULL, CHAR_COLON, CHAR_COMMA); + strcat(DestStr, StrBuff); + break; + case VARMARKEDABSOLUTEPAGETOPAGELISTSORTEDBYSPACE: + /* like %O; page-to-page form (=p1:p2) (assumed dviselect) */ + GetSortedMarkedPPListAsString(StrBuff, CHAR_EQUAL, CHAR_NULL, CHAR_COLON, CHAR_SPACE); + strcat(DestStr, StrBuff); + break; +#endif /* MARKPAGE */ + default: + StrBuff[0] = VARMARK; + StrBuff[1] = *pSource; + StrBuff[2] = CHAR_NULL; + strcat(DestStr, StrBuff); + break; + } + } + else { /* The source string is end */ + StrBuff[0] = VARMARK; + StrBuff[1] = CHAR_NULL; + strcat(DestStr, StrBuff); + pSource--; + } + } + else { /* It is not a variable */ + StrBuff[0] = *pSource; + StrBuff[1] = CHAR_NULL; + strcat(DestStr, StrBuff); + } + pSource++; + } +#ifdef HTEX +#undef dvi_name +#endif /* HTEX */ + strcpy(ResultStr, DestStr); +} +#endif /* ! DVISEL */ + +static void + close_all_font_file() +{ + struct font* fontp = NULL; + + for(fontp = font_head; fontp!=NULL; fontp = fontp->next) + if(fontp->file!=NULL) { + Fclose(fontp->file); + } +} + +extern char* resource_print_command(); + +#ifdef DVISEL +static struct fontinfo { + long TeXnumber; + unsigned char info[14]; + char *fontname; + struct fontinfo *next; + Boolean used; +} *fontinfo_head; + +#define PutFour(num, fp) { \ + putc(((num) >> 24) & 0xff, (fp)); putc(((num) >> 16) & 0xff, (fp)); \ + putc(((num) >> 8) & 0xff, (fp)); putc((num) & 0xff, (fp)); } + +#define CopyNum(fin, fout, num) { \ + int m = num; while (--m >= 0) putc(getc(fin), fout); } + +static FILE *fin, *fout; +long fout_pos; + +static void + FontWrite(fontp) +struct fontinfo *fontp; +{ + if (fontp->TeXnumber > 0xff) { + if (fontp->TeXnumber > 0xffff) { + if (fontp->TeXnumber > 0xffffff) { + putc(FNTDEF4, fout); + putc((fontp->TeXnumber >> 24) & 0xff, fout); + fout_pos++; + } else + putc(FNTDEF3, fout); + putc((fontp->TeXnumber >> 16) & 0xff, fout); + fout_pos++; + } else + putc(FNTDEF2, fout); + putc((fontp->TeXnumber >> 8) & 0xff, fout); + fout_pos++; + } else + putc(FNTDEF1, fout); + putc(fontp->TeXnumber & 0xff, fout); + fwrite(fontp->info, sizeof(char), 14, fout); + fwrite(fontp->fontname, + sizeof(char), fontp->info[12] + fontp->info[13], fout); + fout_pos += 2 + 14 + fontp->info[12] + fontp->info[13]; +} + +#ifdef COLOR +static void + adj_color_stack(prev, cur) +int prev, cur; +{ + int i, j, stack_lim; + + if (scanned_page < cur) { + int saved_page = current_page; + current_page = cur; + prescan(); + current_page = saved_page; + } + + if (memcmp((char *) &page_color[prev].background, + (char *) &page_color[cur].background, + sizeof(XColor)) != 0) { + fprintf(fout, "%c%cbackground rgb %7.5f %7.5f %7.5f", XXX1, 38, + (double) page_color[cur].background.red / ((unsigned short)~0), + (double) page_color[cur].background.green / ((unsigned short)~0), + (double) page_color[cur].background.blue / ((unsigned short)~0)); + fout_pos += 40; + } + + stack_lim = MIN(page_color[prev].stack_top, page_color[cur].stack_top); + for (i = 0; i <= stack_lim; i++) + if (memcmp((char *) &page_color[prev].color_stack[i], + (char *) &page_color[cur].color_stack[i], + sizeof(XColor)) != 0) + break; + if (i == 0) + return; + + for (j = page_color[prev].stack_top; j >= i; j--) { + fprintf(fout, "%c%ccolor pop", XXX1, 9); + fout_pos += 11; + } + for (j = i; j <= page_color[cur].stack_top; j++) { + fprintf(fout, "%c%ccolor push rgb %7.5f %7.5f %7.5f", XXX1, 38, + (double) page_color[cur].color_stack[j].red / ((unsigned short)~0), + (double) page_color[cur].color_stack[j].green / ((unsigned short)~0), + (double) page_color[cur].color_stack[j].blue / ((unsigned short)~0)); + fout_pos += 40; + } +} +#endif /* COLOR */ + +static void + WriteDVI(c) +int c; +{ + int i, n; + struct fontinfo *fontp; + + if (c >= FNTNUM0 && c <= FNT4) { + if (c >= FNT1) + n = num(fin, c - FNT1 + 1); + else + n = c - FNTNUM0; + for (fontp = fontinfo_head; fontp; fontp = fontp->next) + if (n == fontp->TeXnumber) + break; + if (fontp && fontp->used == False) { + fontp->used = True; + FontWrite(fontp); + } + putc(c, fout); + fout_pos++; + switch (c) { + case FNT4: + putc((n >> 24) & 0xff, fout); + fout_pos++; + case FNT3: + putc((n >> 16) & 0xff, fout); + fout_pos++; + case FNT2: + putc((n >> 8) & 0xff, fout); + fout_pos++; + case FNT1: + putc(n & 0xff, fout); + fout_pos++; + default: + break; + } + } else if (c >= FNTDEF1 && c <= FNTDEF4) { + n = num(fin, c - FNTDEF1 + 1); + for (fontp = fontinfo_head; fontp; fontp = fontp->next) + if (n == fontp->TeXnumber) + break; + if (fontp && fontp->used == False) { + fontp->used = True; + FontWrite(fontp); + } + (void) num(fin, 12); + (void) num(fin, (int)(one(fin) + one(fin))); + } else { + putc(c, fout); + fout_pos++; + n = 0; + if (c <= XXX4) + for (i = 0; i < c - XXX1 + 1; i++) { + int x = one(fin); + putc(x, fout); + fout_pos++; + n = (n << 8) | x; + } + switch (c) { + case SETRULE: case PUTRULE: + n += 4; + + case RIGHT4: case W4: case X4: case DOWN4: + case Y4: case Z4: + n++; + + case RIGHT3: case W3: case X3: case DOWN3: + case Y3: case Z3: + n++; + +#if defined(Omega) || defined(KANJI) + case SET2: case PUT2: +#endif /* Omega || KANJI */ + case RIGHT2: case W2: case X2: case DOWN2: + case Y2: case Z2: + n++; + + case SET1: case PUT1: + case RIGHT1: case W1: case X1: case DOWN1: + case Y1: case Z1: +#ifdef PTEX + case TDIR: +#endif + n++; + + case XXX1: case XXX2: case XXX3: case XXX4: + CopyNum(fin, fout, n); + fout_pos += n; + + default: + break; + } + } +} + +static void + SelectDVI(fp, PrintStyle) +FILE *fp; +int PrintStyle; +{ + extern long postamble_offset; + int c, n, page, pagecnt; +#ifdef COLOR + int prev_page = -1; +#endif /* COLOR */ + long offset = 0xffffffff; + struct fontinfo *fontp; + +#ifdef HTEX + { + int url_aware_save = URL_aware; + URL_aware = True; + fin = xfopen(dvi_name, "r"); + URL_aware = url_aware_save; + } + if (fin == NULL) { +#else /* HTEX */ + if ((fin = xfopen(dvi_name, "r")) == NULL) { +#endif /* HTEX */ + Puts("Error: Cannot open DVI file."); + return; + } + + if (PrintStyle == PRINTALL) { + while ((c = getc(fin)) != EOF) + putc(c, fp); + return; + } + + /* get font list */ + Fseek(fin, postamble_offset, 0); + (void) num(fin, 1+4*6+2+2); + fontinfo_head = NULL; + for (;;) { + if ((c = one(fin)) < FNTDEF1 || c > FNTDEF4) /* maybe POSTPOST */ + break; + fontp = (struct fontinfo *) xmalloc(sizeof(struct fontinfo)); + fontp->TeXnumber = num(fin, c - FNTDEF1 + 1); + fread(fontp->info, sizeof(char), 14, fin); + n = fontp->info[12] + fontp->info[13]; + fontp->fontname = xmalloc(n); + fread(fontp->fontname, sizeof(char), n, fin); + fontp->next = fontinfo_head; + fontinfo_head = fontp; + fontp->used = False; + } + + /* preamble */ + Fseek(fin, 0, 0); + fout = fp; +#ifdef PAGENUM + fout_pos = page_index[0].offset; +#else + fout_pos = page_offset[0]; +#endif /* PAGENUM */ + CopyNum(fin, fout, fout_pos); + + /* each page */ + pagecnt = 0; + for (page = 0; page < total_pages; page++) { + if (PrintStyle == PRINTCUR && page != current_page) + continue; +#ifdef MARKPAGE + if (PrintStyle == PRINTMARKED && page != LastMarkPage()) + continue; + if (PrintStyle == PRINTREGION + && ((page < current_page && page < LastMarkPage()) + || (page > current_page && page > LastMarkPage()))) + continue; + if (PrintStyle == PRINTALLMARKED && ! ThisPageIsMarked(page)) + continue; +#endif /* MARKPAGE */ + +#ifdef PAGENUM + (void) Fseek(fin, page_index[page].offset, 0); +#else + (void) Fseek(fin, page_offset[page], 0); +#endif /* PAGENUM */ + + CopyNum(fin, fout, 1+4+9*4); /* BOP etc. */ + (void) four(fin); + PutFour(offset, fout); + offset = fout_pos; + fout_pos += 1+4+9*4+4; + +#ifdef COLOR + if (use_color && page != ++prev_page) + adj_color_stack(prev_page, page); +#endif /* COLOR */ + + while ((c = getc(fin)) != EOF) { + if (! (c & 0x80)) { /* nornal charactor */ + putc(c, fout); + fout_pos++; + } else if (c == EOP) { /* End Of Page */ + putc(c, fout); + fout_pos++; + break; + } else + WriteDVI(c); + } + pagecnt++; +#ifdef COLOR + prev_page = page; +#endif /* COLOR */ + } + + /* postamble */ + Fseek(fin, postamble_offset, 0); + putc(one(fin), fout); /* POST */ + (void) four(fin); + PutFour(offset, fout); + offset = fout_pos; + CopyNum(fin, fout, 4*5+2); + (void) two(fin); + putc((pagecnt >> 8) & 0xff, fout); + putc(pagecnt & 0xff, fout); + fout_pos += 1+4+4*5+2+2; + + /* put font list */ + for (;;) { + if ((c = one(fin)) < FNTDEF1 || c > FNTDEF4) /* maybe POSTPOST */ + break; + n = num(fin, c - FNTDEF1 + 1); + for (fontp = fontinfo_head; fontp; fontp = fontp->next) + if (n == fontp->TeXnumber) + break; + if (fontp && fontp->used == True) + FontWrite(fontp); + (void) num(fin, 12); + (void) num(fin, (int)(one(fin) + one(fin))); + } + + /* free list */ + for (fontp = fontinfo_head; fontp;) { + struct fontinfo *nextp; + free(fontp->fontname); + nextp = fontp->next; + free(fontp); + fontp = nextp; + } + + /* POSTPOST */ + putc(c, fout); + (void) four(fin); + PutFour(offset, fout); + CopyNum(fin, fout, 1+4); + for (fout_pos += 1+4+1+4; fout_pos & 3; fout_pos++) + putc(TRAILER, fout); + + fclose(fin); +} +#endif /* DVISEL */ + +static void + PrintDVI(widget, client_data, call_data) +Widget widget; +XtPointer client_data, call_data; +{ + int PrintStyle = (int)client_data; + int pid = 0; + int status = 0; + char* printCommand = NULL; + int printing = 1; +#ifdef DVISEL + int pdes[2]; + FILE *fp; + + if (pipe(pdes) < 0) + return; +#endif /* DVISEL */ + + strcpy(printer_name, (char *)XawDialogGetValueString(dialog)); + if(*printer_name==CHAR_NULL) { + /* When the input of dialog widget as printer name is null string, */ + /* Let it the default printer name */ + strcpy(printer_name, DVIPRINTER); + } + +#ifdef DVISEL + if ((printCommand = resource_print_command()) == NULL + && (printCommand = getenv(ENVVARXDVIPRINTCMD)) == NULL) + printCommand = XDVIPRINTCMD; + + { + char buf[FILENAME_MAX]; + char* p; + FILE* fp; + + sprintf(buf, "%s", printCommand); + for (p = buf; (*p != '\0') && (*p != ' '); p++); + *p = '\0'; + fp = fopen(buf, "rb"); + if (fp == NULL) + printing = 0; + else + fclose(fp); + } +#endif /* DVISEL */ + + if (printing) { + if((pid = fork())<0) { + perror("fork"); +#ifdef DVISEL + close(pdes[0]); + close(pdes[1]); +#endif /* DVISEL */ + return; + } + /* Actual print-out work should be done with the child process */ + /* Because the work takes long time */ + + if(pid==0) { + /* The following is the work for the child process */ + /* It is the actual print-out work */ +#ifndef DVISEL + char buff[STRLENGTH]; +#endif /* DVISEL */ + + close_all_font_file(); + /* Forcedly close all font files */ + +#ifdef DVISEL + if (pdes[0]) { + dup2(pdes[0], 0); + close(pdes[0]); + } + close(pdes[1]); + execlp(printCommand, + "xdvi print-out", printer_name, GetPaperSize(), NULL); +#else /* DVISEL */ + + if((printCommand = resource_print_command(PrintStyle))!=NULL) { + SubstitutePrintVar(buff, printCommand); + execl("/bin/sh", "xdvi print-out", "-c", buff, NULL); + } +#endif /* DVISEL */ + + exit(0); + } + +#ifdef DVISEL + fp = fdopen(pdes[1], "w"); + close(pdes[0]); + SelectDVI(fp, PrintStyle); + fclose(fp); + close(pdes[1]); +#endif /* DVISEL */ + + while(wait(&status)!=pid) + /* empty */ ; + } else + print_statusline(STATUS_SHORT, + "Can't find printing command: \"%s\"", printCommand); + + PrintMenuEnd = True; + /* Print-out pull down menu should be closed */ +} + +static void + DestroyPopupPrompt(widget, client_data, call_data) +Widget widget; +XtPointer client_data, call_data; +{ + PrintMenuEnd = True; + /* Print-out pull down menu should be closed */ +} + +extern char* resource_printer(); + +static void + get_printer_name(name) +char* name; +{ + char* p = NULL; + + if((p = resource_printer())!=NULL || (p = getenv(ENVVARPRINTER))!=NULL) + strcpy(name, p); + else + strcpy(name, DVIPRINTER); +} + +void + InitPrintMenu() +{ + get_printer_name(printer_name); +} + +void + print_DVI_file(top_level) +Widget top_level; +{ + Widget entry; + Position x, y; + Dimension width, height; + int i; + XtAppContext PrintApp; + XEvent event; + + XtVaGetValues(top_level, + XtNwidth, &width, + XtNheight, &height, + NULL); + + XtTranslateCoords(top_level, + (Position) (width / 3), (Position) (height / 3), + &x, &y); + + popup = XtVaCreatePopupShell(LBLPRINTSH, + transientShellWidgetClass, + top_level, + XtNx, x, + XtNy, y, + XtNdepth, our_depth, + XtNvisual, our_visual, +#ifdef GREY + XtNcolormap, our_colormap, +#endif + NULL); + /* + * The popup will contain a dialog box, prompting the user for input. + */ + + dialog = XtVaCreateManagedWidget(LBLPRINTER, + dialogWidgetClass, + popup, + XtNlabel, (String)LBLPRINTER, + XtNvalue, (String)printer_name, + NULL); + + /* + * The prompting message's size is dynamic; allow it to request resize. + */ + + print_button = XtVaCreateManagedWidget(LBLPRINTOUT, + menuButtonWidgetClass, + dialog, + NULL); + XtVaSetValues(print_button, + XtNmenuName, LBLPRINTMENU, + NULL); + + print_menu = XtVaCreatePopupShell(LBLPRINTMENU, + simpleMenuWidgetClass, + print_button, + XtNdepth, our_depth, + XtNvisual, our_visual, +#ifdef GREY + XtNcolormap, our_colormap, +#endif + NULL); + + for(i = 0; (int)XtNumber(print_style)>i; i++) { + switch(i) { + case PRINTALL: + case PRINTCUR: + entry = XtVaCreateManagedWidget(print_style[i], + smeBSBObjectClass, + print_menu, + NULL); + XtAddCallback(entry, XtNcallback, PrintDVI, (XtPointer)i); + break; +#ifdef MARKPAGE + case PRINTMARKED: + case PRINTREGION: + case PRINTALLMARKED: + if(EmptyPageMarkRing()) { + entry = XtVaCreateManagedWidget(print_style[i], + smeBSBObjectClass, + print_menu, + XtNsensitive, False, + NULL); + } else { + entry = XtVaCreateManagedWidget(print_style[i], + smeBSBObjectClass, + print_menu, + NULL); + } + XtAddCallback(entry, XtNcallback, PrintDVI, (XtPointer)i); + break; +#endif + default: + break; + } + } + + XawDialogAddButton(dialog, + LBLCANCEL, + DestroyPopupPrompt, + (XtPointer)dialog); + + XtPopup(popup, XtGrabNone); + + PrintMenuEnd = False; + + XtAddGrab(popup, True, True); + + PrintApp = XtWidgetToApplicationContext(popup); + + while(! PrintMenuEnd) { + XtAppNextEvent(PrintApp, &event); + XtDispatchEvent(&event); + }; + + XtDestroyWidget(popup); +} +#endif /* PRINTDVI added by Masahito Yamaga */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/print.h xdvik-22.40y1/texk/xdvik/print.h --- xdvik-22.40y1.orig/texk/xdvik/print.h 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/print.h 2003-09-29 11:47:22.000000000 +0900 @@ -0,0 +1,224 @@ +/* + * print-out DVI + * + * Copyright (c) 1993, 1994, 1995 + * MATSUURA Syun syun@fuka.info.waseda.ac.jp + * HIRAHARA Atsushi hirahara@fuka.info.waseda.ac.jp + * ONO Kouichi onono@fuka.info.waseda.ac.jp + * All rights reserved. + */ + +#ifndef _PRINT_H_ +#define _PRINT_H_ + +#include "chardef.h" + +#ifndef DVISEL +/* + * Internal variables for print-out command string + * + * %% : a character '%' itself + * %f : filename of DVI file (full pathname) + * %F : filename of DVI file (basename of pathname) + * %d : directory where DVI file is placed (directory of pathname) + * %D : temp directory (if the environment variable TMPDIR is defined, use it) + * %p : printer name (if the environment variable PRINTER is defined, use it) + * %P : print command string + (if the environment variable PRINTCMD is defined, use it) + * %z : paper size specified with -paper option (lower case) + * %Z : paper size translated from -paper option + * %r : proces id + * %R : DVI filter command string + (if the environment variable DVIFILTER is defined, use it) + * + * The following variables denote absolute page number. + * %c : current page number +#ifdef MARKPAGE + * %m : last marked page number + * %s : start page number of region; minimum of %c and %m + * %e : end page number of region; maximum of %c and %m + * %l : marked page list; marked order; separated by "," + * %L : marked page list; marked order; separated by " " + * %t : marked page list; sorted; separated by "," + * %T : marked page list; sorted; separated by " " + * %o : marked page list; sorted; page-to-page form (p1-p2); separated by "," + * %O : marked page list; sorted; page-to-page form (p1-p2); separated by " " + * %k : like %l; "=" is put on each page number (assumed dviselect) + * %K : like %L; "=" is put on each page number (assumed dviselect) + * %a : like %t; "=" is put on each page number (assumed dviselect) + * %A : like %T; "=" is put on each page number (assumed dviselect) + * %g : like %o; page-to-page form (=p1:p2) (assumed dviselect) + * %G : like %O; page-to-page form (=p1:p2) (assumed dviselect) +#endif + */ + +#define CHAR_COMMENT CHAR_SHARP +#define ISCOMMENT(c) (c==CHAR_COMMENT) + +#define PATH_DELIMITER CHAR_SLASH +#endif /* ! DVISEL */ + +#define DEFAULTPRINTER "lp" +#ifndef DVIPRINTER +#define DVIPRINTER DEFAULTPRINTER +#endif /* DVIPRINTER */ +#define ENVVARPRINTER "PRINTER" +#ifdef DVISEL +#define ENVVARXDVIPRINTCMD "XDVIPRINTCMD" +#endif +#define PRINTERNAMELEN (32) + +#ifndef DVISEL +#define VARMARK CHAR_PERCENT + +#define VARDVIFILEFULLPATH 'f' + /* filename of DVI file (full pathname) */ +#define VARDVIFILEBASENAME 'F' + /* filename of DVI file (basename of pathname) */ +#define VARDVIFILEDIRNAME 'd' + /* directory where DVI file is placed (directory of pathname) */ +#define VARTEMPDIRECTORY 'D' + /* temp directory */ + /* (if the environment variable TMPDIR is defined, use it) */ +#define VARPRINTERNAME 'p' + /* printer name */ + /* (if the environment variable PRINTER is defined, use it) */ +#define VARPRINTCOMMAND 'P' + /* print command string */ + /* (if the environment variable PRINTCMD is defined, use it) */ +#define VARPAPERSIZE 'z' + /* paper size specified with -paper option (lower case) */ +#define VARPAPERSIZEFORFILTER 'Z' + /* paper size translated from -paper option */ +#define VARPROCESSID 'r' + /* proces id */ +#define VARDVIFILTERCOMMAND 'R' + /* DVI filter command string */ + /* (if the environment variable DVIFILTER is defined, use it) */ +#define VARCURRENTPAGENUMBER 'c' + /* current page number */ +#ifdef MARKPAGE +#define VARLASTMARKEDPAGENUMBER 'm' + /* last marked page number */ +#define VARSTARTPAGENUMBEROFREGION 's' + /* start page number of region; minimum of %c and %m */ +#define VARENDPAGENUMBEROFREGION 'e' + /* end page number of region; maximum of %c and %m */ +#define VARMARKEDPAGELISTMARKEDORDERBYCOMMA 'l' + /* marked page list; marked order; separated by "," */ +#define VARMARKEDPAGELISTMARKEDORDERBYSPACE 'L' + /* marked page list; marked order; separated by " " */ +#define VARMARKEDPAGELISTSORTEDBYCOMMA 't' + /* marked page list; sorted; separated by "," */ +#define VARMARKEDPAGELISTSORTEDBYSPACE 'T' + /* marked page list; sorted; separated by " " */ +#define VARMARKEDPAGETOPAGELISTSORTEDBYCOMMA 'o' + /* marked page list; sorted; page-to-page form (p1-p2) */ + /* separated by "," */ +#define VARMARKEDPAGETOPAGELISTSORTEDBYSPACE 'O' + /* marked page list; sorted; page-to-page form (p1-p2) */ + /* separated by " " */ +#define VARMARKEDABSOLUTEPAGELISTMARKEDORDERBYCOMMA 'k' + /* like %l; "=" is put on each page number (assumed dviselect) */ +#define VARMARKEDABSOLUTEPAGELISTMARKEDORDERBYSPACE 'K' + /* like %L; "=" is put on each page number (assumed dviselect) */ +#define VARMARKEDABSOLUTEPAGELISTSORTEDBYCOMMA 'a' + /* like %t; "=" is put on each page number (assumed dviselect) */ +#define VARMARKEDABSOLUTEPAGELISTSORTEDBYSPACE 'A' + /* like %T; "=" is put on each page number (assumed dviselect) */ +#define VARMARKEDABSOLUTEPAGETOPAGELISTSORTEDBYCOMMA 'g' + /* like %o; page-to-page form (=p1:p2) (assumed dviselect) */ +#define VARMARKEDABSOLUTEPAGETOPAGELISTSORTEDBYSPACE 'G' + /* like %O; page-to-page form (=p1:p2) (assumed dviselect) */ +#endif /* MARKPAGE */ + +/* Print-out command templates */ +#ifndef PRCMDALL +#define PRCMDALL "cd %d; %R %F > %D/%F:All@%r.ps; %P -J'%F' %D/%F:All@%r.ps" +/* all pages of DVI file */ +#endif /* PRCMDALL */ +#ifndef PRCMDCUR +#define PRCMDCUR "cd %d; dviselect -i %F -o %D/%F:%c@%r.dvi =%c; %R %D/%F:%c@%r.dvi > %D/%F:%c@%r.ps; /bin/rm %D/%F:%c@%r.dvi; %P -J'%F (Page %c)' %D/%F:%c@%r.ps" +/* the current page */ +#endif /* PRCMDCUR */ +#ifdef MARKPAGE +#ifndef PRCMDMRK +#define PRCMDMRK "cd %d; dviselect -i %F -o %D/%F:%m@%r.dvi =%m; %R %D/%F:%m@%r.dvi > %D/%F:%m@%r.ps; /bin/rm %D/%F:%m@%r.dvi; %P -J'%F (Page %m)' %D/%F:%m@%r.ps" +/* the last marked page */ +#endif /* PRCMDMRK */ +#ifndef PRCMDRGN +#define PRCMDRGN "cd %d; dviselect -i %F -o %D/%F:%s-%e@%r.dvi =%s:%e; %R %D/%F:%s-%e@%r.dvi > %D/%F:%s-%e@%r.ps; /bin/rm %D/%F:%s-%e@%r.dvi; %P -J'%F (Page %s-%e)' %D/%F:%s-%e@%r.ps" +/* pages in the region, between the current page and the last marked page */ +#endif /* PRCMDRGN */ +#ifndef PRCMDLST +#define PRCMDLST "cd %d; dviselect -i %F -o %D/%F:%o@%r.dvi %G; %R %D/%F:%o@%r.dvi > %D/%F:%o@%r.ps; /bin/rm %D/%F:%o@%r.dvi; %P -J'%F (Page %o)' %D/%F:%o@%r.ps" +/* all marked pages */ +#endif /* PRCMDLST */ +#endif /* MARKPAGE */ +#endif /* ! DVISEL */ + +enum PRINTSTYLE +#ifdef MARKPAGE +{PRINTALL, PRINTCUR, PRINTMARKED, PRINTREGION, PRINTALLMARKED}; +#else +{PRINTALL, PRINTCUR}; +#endif /* MARKPAGE */ + +#define LBLPRINTSH "Print-out" + +#define LBLPRINTER "Printer name" + +#define LBLPRINTOUT "Print" +#define LBLCANCEL "Cancel" + +#define LBLPRINTMENU "Print menu" + +#define LBLPRINTALL "All pages" +#define LBLPRINTCUR "Current page" +#ifdef MARKPAGE +#define LBLPRINTMRK "Last marked page" +#define LBLPRINTRGN "Region" +#define LBLPRINTAMK "All marked pages" +#endif /* MARKPAGE */ + +#define MIN(i, j) ( (i) < (j) ? (i) : (j) ) +#define MAX(i, j) ( (i) > (j) ? (i) : (j) ) + +typedef struct { + int print_style; + Widget widget; +} PrintOrder; + +#ifndef DVISEL +/* translation file from xdvi paper type into dvi filter paper size option */ +#ifndef FILTOPTTBLFILE +#define FILTOPTTBLFILE "/usr/local/share/texmf/xdvi/xdvipaper.dvi2ps-j" +/* #define FILTOPTTBLFILE "/usr/local/lib/TeX/xdvipaper.dvi2ps-j" */ +/* #define FILTOPTTBLFILE "/usr/local/lib/TeX/xdvipaper.jdvi2kps" */ +#endif /* FILTOPTTBLFILE */ +#define FILTOPTTBLFILEENVVARNAME "XDVIFILTOPTTBL" + +/* work directory for temporal files */ +#ifndef TEMPDIR +#define TEMPDIR "/tmp" +#endif /* TEMPDIR */ +#define TEMPDIRENVVARNAME "TMPDIR" + +/* DVI filter command string */ +#ifndef DVIFILTERCMD +#define DVIFILTERCMD "dvi2ps -o %Z" +/* #define DVIFILTERCMD "jdvi2kps -p%Z" */ +#endif /* DVIFILTERCMD */ +#define DVIFILTERCMDENVVARNAME "DVIFILTER" + +/* print command string */ +#ifndef PRINTCMD +#define PRINTCMD "lpr -s -r -P%p" +#endif /* PRINTCMD */ +#define PRINTCMDENVVARNAME "PRINTCMD" +#endif /* ! DVISEL */ + +extern void InitPrintMenu ARGS((void)); +extern void print_DVI_file ARGS((Widget)); + +#endif /* _PRINT_H_ */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/psgs.c xdvik-22.40y1/texk/xdvik/psgs.c --- xdvik-22.40y1.orig/texk/xdvik/psgs.c 2002-12-01 04:05:58.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/psgs.c 2003-09-29 11:47:22.000000000 +0900 @@ -97,6 +97,16 @@ Boolean FIXME_ps_lock; +/* +** Modified 22/03/95. +*/ + +extern void psh_includeall(); + +/* +** End Modified. +*/ + #define postscript resource._postscript #define fore_Pixel resource._fore_Pixel #define back_Pixel resource._back_Pixel @@ -664,6 +674,19 @@ destroy_gs(); return False; } + + /* + ** Modified 22/03/95. + */ + + GS_active = True; /*Just for now */ + psh_includeall(); + GS_active = False; /* Now, fixed! */ + + /* + ** End Modified. + */ + if (!postscript) toggle_gs(); /* if we got a 'v' already */ else { @@ -766,6 +789,16 @@ static void checkgs(Boolean in_header) { + /* + ** Modified 22/03/95. + */ + + int gs_restart; + + /* + ** End Modified. + */ + char buf[150]; /* For gs 2, we pretty much have to start over to enlarge the window. */ @@ -773,8 +806,17 @@ || GS_alpha != resource.gs_alpha) destroy_gs(); - if (GS_pid < 0) - (void)initGS(); + /* + ** Modified 22/03/95. + */ + + gs_restart = (GS_pid < 0); + if (gs_restart) + (void) initGS(); + + /* + ** End Modified. + */ if (!GS_active) { /* check whether page_w or page_h have increased */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/sfSelFile.c xdvik-22.40y1/texk/xdvik/sfSelFile.c --- xdvik-22.40y1.orig/texk/xdvik/sfSelFile.c 2003-02-04 21:54:12.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/sfSelFile.c 2003-09-29 11:47:22.000000000 +0900 @@ -471,6 +471,10 @@ i++; XtSetArg(arglist[i], XtNuseStringInPlace, True); i++; +#ifdef XtNinternational + XtSetArg(arglist[i], XtNinternational, False); + i++; +#endif /* XtNinternational */ selFileField = XtCreateManagedWidget("selFileField", asciiTextWidgetClass, selFileForm, arglist, i); @@ -712,7 +716,11 @@ XtNlength, sizeof(fileMask), XtNeditType, XawtextEdit, XtNwrap, XawtextWrapNever, - XtNuseStringInPlace, True, NULL); + XtNuseStringInPlace, True, +#ifdef XtNinternational + XtNinternational, False, +#endif /* XtNinternational */ + NULL); for (i = 0; i < 3; i++) XtSetKeyboardFocus(selFileLists[i], selFileField); diff -ruN xdvik-22.40y1.orig/texk/xdvik/special.c xdvik-22.40y1/texk/xdvik/special.c --- xdvik-22.40y1.orig/texk/xdvik/special.c 2003-08-23 03:12:37.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/special.c 2003-09-29 11:47:22.000000000 +0900 @@ -66,6 +66,9 @@ #define S_IWUSR 0200 #endif #include "dvi.h" /* SU 2000/03/09: added */ +#ifdef PTEX +#include "xdvi.h" /* T. Uchiyama 2003/3/21 */ +#endif # if HAVE_SYS_WAIT_H # include @@ -562,9 +565,14 @@ static Boolean bbox_valid; static unsigned int bbox_width; static unsigned int bbox_height; -static int bbox_angle; static int bbox_voffset; +double bbox_matrix[2][2] = {{1.0, 0.0}, {0.0, 1.0}}; +Boolean bbox_scaled = False, bbox_rotated = False; + +#define bbox_xscale bbox_matrix[0][0] +#define bbox_yscale bbox_matrix[1][1] + void draw_bbox(void) { @@ -575,30 +583,28 @@ xcorner = PXL_H - currwin.base_x; ycorner = PXL_V - currwin.base_y; - if (bbox_angle == 0) { - ycorner -= bbox_voffset; - XDrawRectangle(DISP, currwin.win, ruleGC, xcorner, ycorner, bbox_width, bbox_height); -/* XDrawRectangle(DISP, currwin.win, ruleGC, xcorner - 1, ycorner - 1, bbox_width + 2, bbox_height + 2); */ -/* XDrawLine(DISP, currwin.win, ruleGC, */ -/* xcorner, ycorner, xcorner + bbox_width, ycorner); */ -/* XDrawLine(DISP, currwin.win, ruleGC, */ -/* xcorner + bbox_width, ycorner, */ -/* xcorner + bbox_width, ycorner + bbox_height); */ -/* XDrawLine(DISP, currwin.win, ruleGC, */ -/* xcorner + bbox_width, ycorner + bbox_height, */ -/* xcorner, ycorner + bbox_height); */ -/* XDrawLine(DISP, currwin.win, ruleGC, */ -/* xcorner, ycorner + bbox_height, xcorner, ycorner); */ + if (! bbox_rotated) { + ycorner -= bbox_voffset * bbox_yscale; + XDrawRectangle(DISP, currwin.win, ruleGC, xcorner, ycorner, bbox_width, bbox_height * bbox_yscale); +/* XDrawRectangle(DISP, currwin.win, ruleGC, xcorner - 1, ycorner - 1, bbox_width * bbox_yscale + 2, bbox_height * bbox_yscale + 2); */ +/* XDrawLine(DISP, currwin.win, ruleGC, */ +/* xcorner, ycorner, xcorner + bbox_width * bbox_xscale, ycorner); */ +/* XDrawLine(DISP, currwin.win, ruleGC, */ +/* xcorner + bbox_width * bbox_xscale, ycorner, */ +/* xcorner + bbox_width * bbox_xscale, ycorner + bbox_height * bbox_yscale); */ +/* XDrawLine(DISP, currwin.win, ruleGC, */ +/* xcorner + bbox_width * bbox_xscale, ycorner + bbox_height * bbox_yscale, */ +/* xcorner, ycorner + bbox_height * bbox_yscale); */ +/* XDrawLine(DISP, currwin.win, ruleGC, */ +/* xcorner, ycorner + bbox_height * bbox_yscale, xcorner, ycorner); */ } else { - float sin_a = sin(bbox_angle * (TWOPI / 360)); - float cos_a = cos(bbox_angle * (TWOPI / 360)); float a, b, c, d; - a = cos_a * bbox_width; - b = -sin_a * bbox_width; - c = -sin_a * bbox_height; - d = -cos_a * bbox_height; + a = bbox_matrix[0][0] * bbox_width; + b = bbox_matrix[1][0] * bbox_width; + c = -bbox_matrix[0][1] * bbox_height; + d = -bbox_matrix[1][1] * bbox_height; XDrawLine(DISP, currwin.win, ruleGC, xcorner, ycorner, @@ -687,22 +693,189 @@ UNUSED(cp); } +typedef struct { + double matrix[2][2]; + double x, y; +} ROTATE_STACK; + static void ps_parseraw(_Xconst char *PostScript_cmd) { _Xconst char *p; + double xscale, yscale, angle, sin_a, cos_a, a, b, c, d; + int n; + static int rotate_stack_len = 0; + static int rotate_stack_ptr = 0; + static ROTATE_STACK *rotate_stack = NULL; /* dumb parsing of PostScript - search for rotation H. Zeller 1/97 */ - bbox_angle = 0; + + p = strstr(PostScript_cmd, "currentpoint grestore moveto"); + if (p != NULL) { + if (rotate_stack_ptr > 0) { + double r; + rotate_stack_ptr--; + r = sqrt(((DVI_H - rotate_stack[rotate_stack_ptr].x) + * (DVI_H - rotate_stack[rotate_stack_ptr].x) + + (DVI_V - rotate_stack[rotate_stack_ptr].y) + * (DVI_V - rotate_stack[rotate_stack_ptr].y)) + / (bbox_matrix[0][0] * bbox_matrix[0][0] + + bbox_matrix[1][0] * bbox_matrix[1][0])) + * (rotate_stack[rotate_stack_ptr].matrix[0][0] + * bbox_matrix[1][0] + - rotate_stack[rotate_stack_ptr].matrix[1][0] + * bbox_matrix[0][0]) + / (rotate_stack[rotate_stack_ptr].matrix[0][0] + * rotate_stack[rotate_stack_ptr].matrix[0][0] + + rotate_stack[rotate_stack_ptr].matrix[1][0] + * rotate_stack[rotate_stack_ptr].matrix[1][0]); + DVI_H += r * rotate_stack[rotate_stack_ptr].matrix[1][0]; + DVI_V += r * rotate_stack[rotate_stack_ptr].matrix[0][0]; + PXL_V = pixel_conv(DVI_V); + bcopy(rotate_stack[rotate_stack_ptr].matrix, bbox_matrix, + sizeof(bbox_matrix)); + bbox_rotated + = (bbox_matrix[0][1] != 0.0 || bbox_matrix[1][0] != 0.0) + ? True : False; + bbox_scaled + = (bbox_rotated + || bbox_matrix[0][0] != 1.0 || bbox_matrix[1][1] != 1.0) + ? True : False; + } + if (debug & DBG_PS) + Fprintf(stderr, "current angle %f: %s\n", + bbox_matrix[0][0] != 0 + ? -atan(bbox_matrix[1][0] / bbox_matrix[0][0]) + * (360 / TWOPI) + : bbox_matrix[1][0] >= 0 ? (double)90 : (double)-90, + PostScript_cmd); + } + p = strstr(PostScript_cmd, "rotate"); if (p != NULL) { while (*p != '\0' && !isdigit(*p)) --p; while (*p != '\0' && isdigit(*p)) --p; + if (*p == '.') --p; + while (*p != '\0' && isdigit(*p)) --p; if (*p != '+' && *p != '-') ++p; - sscanf(p, "%d neg rotate", &bbox_angle); + n = sscanf(p, "%lf neg rotate", &angle); + if (n != 1) { + Fprintf(stderr, "%s: cannot get angle.\n", prog); + angle = 0.0; + } + if (rotate_stack_ptr >= rotate_stack_len) { + rotate_stack_len += 0x10; + rotate_stack = (ROTATE_STACK *) + xrealloc(rotate_stack, + sizeof(ROTATE_STACK) * rotate_stack_len); + } + bcopy(bbox_matrix, rotate_stack[rotate_stack_ptr].matrix, + sizeof(bbox_matrix)); + rotate_stack[rotate_stack_ptr].x = DVI_H; + rotate_stack[rotate_stack_ptr].y = DVI_V; + rotate_stack_ptr++; + + sin_a = sin(-angle * (TWOPI / 360)); + cos_a = cos(-angle * (TWOPI / 360)); + a = bbox_matrix[0][0] * cos_a + bbox_matrix[0][1] * sin_a; + b = - bbox_matrix[0][0] * sin_a + bbox_matrix[0][1] * cos_a; + c = bbox_matrix[1][0] * cos_a + bbox_matrix[1][1] * sin_a; + d = - bbox_matrix[1][0] * sin_a + bbox_matrix[1][1] * cos_a; + bbox_matrix[0][0] = a; + bbox_matrix[0][1] = b; + bbox_matrix[1][0] = c; + bbox_matrix[1][1] = d; + bbox_rotated = (b != 0.0 || c != 0.0) ? True : False; + bbox_scaled + = (bbox_rotated + || bbox_matrix[0][0] != 1.0 || bbox_matrix[1][1] != 1.0) + ? True : False; + if (debug & DBG_PS) + Fprintf(stderr, "current angle %f: %s\n", + bbox_matrix[0][0] != 0 + ? -atan(bbox_matrix[1][0] / bbox_matrix[0][0]) + * (360 / TWOPI) + : bbox_matrix[1][0] >= 0 ? (double)90 : (double)-90, + PostScript_cmd); + } + + p = strstr(PostScript_cmd, "scale"); + if (p != NULL) { + if (strncmp(p - 4, "div", 3) == 0) { + while (*p != '\0' && !isdigit(*p)) --p; + while (*p != '\0' && isdigit(*p)) --p; + if (*p == '.') --p; + while (*p != '\0' && isdigit(*p)) --p; + while (*p != '\0' && !isdigit(*p)) --p; + while (*p != '\0' && isdigit(*p)) --p; + while (*p != '\0' && !isdigit(*p)) --p; + while (*p != '\0' && isdigit(*p)) --p; + if (*p == '.') --p; + while (*p != '\0' && isdigit(*p)) --p; + while (*p != '\0' && !isdigit(*p)) --p; + while (*p != '\0' && isdigit(*p)) --p; + ++p; + n = sscanf(p, "1 %lf div 1 %lf div scale", &xscale, &yscale); + if (n == 2) { +#ifdef PTEX + if(TATE) { + double temp; + temp = xscale; + xscale = 1.0/yscale; + yscale = 1.0/temp; + } + else { + xscale = 1.0/xscale; + yscale = 1.0/yscale; + } +#else + xscale = 1.0/xscale; + yscale = 1.0/yscale; +#endif + } else { + Fprintf(stderr, + "%s: cannot get scaling factors.\n", prog); + xscale = yscale = 1.0; + } + } else { + while (*p != '\0' && !isdigit(*p)) --p; + while (*p != '\0' && isdigit(*p)) --p; + if (*p == '.') --p; + while (*p != '\0' && isdigit(*p)) --p; + while (*p != '\0' && !isdigit(*p)) --p; + while (*p != '\0' && isdigit(*p)) --p; + if (*p == '.') --p; + while (*p != '\0' && isdigit(*p)) --p; + if (*p != '+' && *p != '-') ++p; + n = sscanf(p, "%lf %lf scale", &xscale, &yscale); +#ifdef PTEX + if(TATE) { + double temp; + temp = xscale; + xscale = yscale; + yscale = temp; + } +#endif + if (n != 2) { + Fprintf(stderr, + "%s: cannot get scaling factors.\n", prog); + xscale = yscale = 1.0; + } + } + bbox_matrix[0][0] *= xscale; + bbox_matrix[0][1] *= yscale; + bbox_matrix[1][0] *= xscale; + bbox_matrix[1][1] *= yscale; + bbox_scaled + = (bbox_rotated + || bbox_matrix[0][0] != 1.0 || bbox_matrix[1][1] != 1.0) + ? True : False; + if (debug & DBG_PS) + Fprintf(stderr, "current scale %f,%f: %s\n", + bbox_xscale, bbox_yscale, PostScript_cmd); } } @@ -1060,7 +1233,6 @@ if (strncmp(cp, ":[begin]", 8) == 0) { cp += 8; bbox_valid = False; - bbox_angle = 0; if (sscanf(cp, "%d %d\n", &raww, &rawh) >= 2) { bbox_valid = True; bbox_width = pixel_conv(spell_conv(raww)); @@ -1069,7 +1241,7 @@ } if (currwin.win == mane.win) #if PS - psp.drawbegin(PXL_H - currwin.base_x, PXL_V - currwin.base_y, cp); + psp.drawbegin(PSP_H - currwin.base_x, PSP_V - currwin.base_y, cp); #else draw_bbox(); #endif @@ -1114,13 +1286,13 @@ else { /* also raw PostScript, but no extra colon to skip */ #if PS + ps_parseraw(cp); if (currwin.win == mane.win) { - ps_parseraw(cp); if (psfig_begun) psp.drawraw(cp); else { - psp.drawbegin(PXL_H - currwin.base_x, - PXL_V - currwin.base_y, cp); + psp.drawbegin(PSP_H - currwin.base_x, + PSP_V - currwin.base_y, cp); psp.drawend(""); } } @@ -1153,6 +1325,10 @@ #define KEY_URY keyval[3] #define KEY_RWI keyval[4] #define KEY_RHI keyval[5] +#define KEY_HSZ keyval[6] +#define KEY_VSZ keyval[7] +#define KEY_HSC keyval[10] +#define KEY_VSC keyval[11] #define NKEYS (sizeof(keytab)/sizeof(*keytab)) #define N_ARGLESS_KEYS 1 @@ -1166,7 +1342,7 @@ unsigned int len; char *q; int flags = 0; - double keyval[6]; + double keyval[12]; filename = cp; if (*cp == '\'' || *cp == '"') { @@ -1251,8 +1427,319 @@ } if (currwin.win == mane.win) { +#if PS + psp.drawbegin(PSP_H - currwin.base_x, PSP_V - currwin.base_y, + buffer); + /* talk directly with the DPSHandler here */ + send_ps_file(filename, kpse_pict_format); + psp.drawend(" @endspecial"); +#else + draw_bbox(); +#endif + } + bbox_valid = False; +} + + +/*************************************************************** + Following two functions, DirName() and get_boudig_box() + come from ps.c in miyu-patch for xdvi PL17. +***************************************************************/ + +static char * +DirName(f1, f2) + char *f1; + char *f2; +{ + char *p1, *p2, *q1; + static char buf[BUFSIZ]; + +#ifndef VMS + if (*f2 == '/') + return f2; +#endif /* !VMS */ + + for (p1 = p2 = f1, q1 = buf; *p1; p1++, q1++) { +#ifndef VMS + if (*p1 == '/') +#else + if (*p1 == ':') +#endif /* !VMS */ + p2 = p1 + 1; + *q1 = *p1; + } + Strcpy(buf + (p2 - f1), f2); + + return buf; +} + +int +get_bounding_box(psfile, llx, lly, urx, ury) + char *psfile; + double *llx; + double *lly; + double *urx; + double *ury; +{ + FILE *fptr; + char buf[BUFSIZ]; + + if ((fptr = xfopen(psfile, "r")) == NULL) { + perror(psfile); + return -1; + } + + for (;;) { + if (fgets(buf, BUFSIZ, fptr) == NULL) { + Fprintf(stderr, "%s:unexpected EOF.\n", psfile); + Fclose(fptr); + return -1; + } + if (strncmp(buf, "%%BoundingBox:", 14) == 0) { + if (sscanf(buf + 14, "%lf %lf %lf %lf", llx, lly, urx, ury) < 4) { + Fprintf(stderr, "\\special: ERROR.\n"); + Fclose(fptr); + return -1; + } + break; + } + } + + Fclose(fptr); + + return 0; +} + + +/*************************************************************** + The originai eps_special() is merged with psSpecial() in ps.c + (miyu-patch for xdvi PL17). +***************************************************************/ +static void +epsbox_special(cp) + char *cp; +{ + char *filename; + static char *buffer = NULL; + char *p; + char *q; + double keyval[12]; + char *tmpfilename; + char* fileext[] = { ".ps", ".eps", ".epsf", "**" }; + int extmax = 6; + FILE *fp; + + float hsize = 0.0, vsize = 0.0; + float hscale = 0.0, vscale = 0.0; + char *ptr; + + p = cp; + if ((ptr = strtok(p, "{}")) == NULL) { + Fprintf(stderr, "\\special: ERROR.\n"); + return; + } + hsize = atof(ptr); + if ((ptr = strtok(NULL, "{}")) == NULL) { + Fprintf(stderr, "\\special: ERROR.\n"); + return; + } + vsize = atof(ptr); + if ((ptr = strtok(NULL, "{}")) == NULL) { + Fprintf(stderr, "\\special: ERROR.\n"); + return; + } + filename = DirName(dvi_name, ptr); + + if ((fp = xfopen(filename, "r")) == NULL) { + int i; + tmpfilename=xmalloc(strlen(filename)+extmax); + for (i = 0; strcmp(fileext[i], "**") != 0; i++) { + strcpy(tmpfilename, filename); + strcat(tmpfilename, fileext[i]); + if ((fp = xfopen(tmpfilename, "r")) != NULL) + break; + } + if (fp == NULL) { + perror(tmpfilename); + return; + } + strcpy(filename, tmpfilename); + free(tmpfilename); + } + Fclose(fp); + + if (get_bounding_box(filename, + &KEY_LLX, &KEY_LLY, + &KEY_URX, &KEY_URY)) + return; + + if (hsize != 0.0) + hscale = hsize / (KEY_URX - KEY_LLX); + if (vsize != 0.0) + vscale = vsize / (KEY_URY - KEY_LLY); + + if (hscale == 0.0 && vscale == 0.0) + hscale = vscale = 1.0; + else if (hscale == 0.0) + hscale = vscale; + else if (vscale == 0.0) + vscale = hscale; + + KEY_RWI = hsize; + KEY_RHI = vsize; + + if (buffer == NULL) + buffer = xmalloc(BUFSIZ); + + Strcpy(buffer, "@beginspecial"); + q = buffer + strlen(buffer); + sprintf(q, " /@scaleunit 1 def"); + q += strlen(q); + sprintf(q, " %f @hoffset", -KEY_LLX * hscale); + q += strlen(q); + sprintf(q, " %f @voffset", -KEY_LLY * vscale); + q += strlen(q); + sprintf(q, " %f @hscale", hscale); + q += strlen(q); + sprintf(q, " %f @vscale", vscale); + q += strlen(q); + Strcpy(q, " @setspecial\n"); + + + bbox_valid = True; + bbox_width = hsize * dimconv / currwin.shrinkfactor + 0.5; + bbox_voffset = bbox_height = vsize * dimconv / currwin.shrinkfactor + 0.5; + + if (currwin.win == mane.win) { +#if PS + psp.drawbegin(PSP_H - currwin.base_x, PSP_V - currwin.base_y, + buffer); + /* talk directly with the DPSHandler here */ + send_ps_file(filename, kpse_pict_format); + psp.drawend(" @endspecial"); +#else + draw_bbox(); +#endif + } + bbox_valid = False; +} + +static void +elepsf_special(cp) + char *cp; +{ + char *filename; + static char *buffer; + static unsigned int buflen = 0; + unsigned int len; + char *p; + char *q; + int flags = 0; + double keyval[12] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; + float hsize = 0.0, vsize = 0.0; + float hscale = 0.0, vscale = 0.0; + + p = cp; + filename = p; + if (*p == '\'' || *p == '"') { + do ++p; + while (*p != '\0' && *p != *filename); + ++filename; + } + else + while (*p != '\0' && *p != ' ' && *p != '\t') ++p; + if (*p != '\0') *p++ = '\0'; + while (*p == ' ' || *p == '\t') ++p; + + filename = DirName(dvi_name, filename); + + if (get_bounding_box(filename, + &KEY_LLX, &KEY_LLY, + &KEY_URX, &KEY_URY)) + return; + + len = strlen(p) + NKEYS + 512; + if (buflen < len) { + if (buflen != 0) free(buffer); + buflen = len; + buffer = xmalloc(buflen); + } + Strcpy(buffer, "@beginspecial"); + q = buffer + strlen(buffer); + sprintf(q, " /@scaleunit 1 def"); + q += strlen(q); + while (*p != '\0') { + char *p1 = p; + int keyno; + + while (*p1 != '=' && !isspace(*p1) && *p1 != '\0') ++p1; + for (keyno = 0;; ++keyno) { + if (keyno >= NKEYS) { + if (warn_spec_now) + Fprintf(stderr, + "unknown keyword (%*s) in \\special will be ignored\n", + (int) (p1 - p), p); + break; + } + if (memcmp(p, keytab[keyno], p1 - p) == 0) { + if (keyno >= N_ARGLESS_KEYS) { + if (*p1 == '=') ++p1; + if (keyno < N_ARGLESS_KEYS + 12) { + keyval[keyno - N_ARGLESS_KEYS] = atof(p1); + flags |= (1 << (keyno - N_ARGLESS_KEYS)); + } + *q++ = ' '; + while (!isspace(*p1) && *p1 != '\0') p1++; + } + break; + } + } + p = p1; + while (!isspace(*p) && *p != '\0') ++p; + while (isspace(*p)) ++p; + } + + hsize = KEY_HSZ; + vsize = KEY_VSZ; + hscale = KEY_HSC; + vscale = KEY_VSC; + if (hsize != 0.0) + hscale = hsize / (KEY_URX - KEY_LLX); + if (vsize != 0.0) + vscale = vsize / (KEY_URY - KEY_LLY); + + KEY_RWI = KEY_URX - KEY_LLX; + KEY_RHI = KEY_URY - KEY_LLY; + + if (hscale == 0.0 && vscale == 0.0) + hscale = vscale = 1.0; + else if (hscale == 0.0) + hscale = vscale; + else if (vscale == 0.0) + vscale = hscale; + + KEY_RHI *= vscale; + KEY_RWI *= hscale; + + sprintf(q, " %f @hoffset", -KEY_LLX * hscale); + q += strlen(q); + sprintf(q, " %f @voffset", -KEY_URY * vscale); + q += strlen(q); + sprintf(q, " %f @hscale", hscale); + q += strlen(q); + sprintf(q, " %f @vscale", vscale); + q += strlen(q); + Strcpy(q, " @setspecial\n"); + + bbox_valid = True; + bbox_width = KEY_RWI * dimconv / currwin.shrinkfactor + 0.5; + bbox_voffset = 0.0; + bbox_height = KEY_RHI * dimconv / currwin.shrinkfactor + 0.5; + + if (currwin.win == mane.win) { #if PS - psp.drawbegin(PXL_H - currwin.base_x, PXL_V - currwin.base_y, buffer); + psp.drawbegin(PSP_H - currwin.base_x, PSP_V - currwin.base_y, buffer); /* talk directly with the DPSHandler here */ send_ps_file(filename, kpse_pict_format); psp.drawend(" @endspecial"); @@ -1271,7 +1758,7 @@ #if PS if (currwin.win == mane.win) { - psp.drawbegin(PXL_H - currwin.base_x, PXL_V - currwin.base_y, + psp.drawbegin(PSP_H - currwin.base_x, PSP_V - currwin.base_y, "@beginspecial @setspecial "); /* talk directly with the DPSHandler here */ psp.drawraw(cp + 1); @@ -1312,6 +1799,449 @@ #endif /* PS */ /* +** Modified 22/3/95. +*/ + +typedef struct psh_node { + char *this_file; + struct psh_node *next; +} t_pshnode; + +static t_pshnode *psh_head = (t_pshnode *) NULL, *psh_tail = (t_pshnode *) NULL; + +/* +** Include one header file. +*/ + +static void psh_includehfile(cp, beginning) +char *cp; +int beginning; + +{ + static char rawstring[] = " stop\n%%xdvimark\nH userdict begin\0"; + + if (!beginning) + psp.drawbegin(PXL_H - currwin.base_x, PXL_V - currwin.base_y, ""); + psp.drawraw(rawstring); + send_ps_file(cp, kpse_pict_format); + psp.drawend(" end\n"); +} + +/* +** Include all header files. +*/ + +void psh_includeall() + +{ + t_pshnode *this_node; + + this_node = psh_head; + while (this_node != (t_pshnode *) NULL) { + psh_includehfile(this_node->this_file, 1); + this_node = this_node->next; + } +} + +/* +** Deal with the "header=" special. +*/ + +static void psh_header(cp) +char *cp; + +{ + t_pshnode *this_node; + char *psheader; + + /* + ** Find the file. + */ + + psheader = kpse_find_file ( cp+7, kpse_tex_ps_header_format, true ); + + if (psheader) { + + /* + ** Include the file directly in /userdict. + */ + + /* psh_includehfile(psheader, 0); */ + /* deleted by Kazuaki NAKAYAMA (nakayama@ripms.shinshu-u.ac.jp) */ + + /* + ** Add a new node to the list of header files. + */ + + this_node = (t_pshnode *) xmalloc(sizeof(t_pshnode)); + this_node->this_file = strcpy(xmalloc((strlen(psheader) + 1) * sizeof(char)), psheader); + this_node->next = (t_pshnode *) NULL; + if (psh_head == (t_pshnode *) NULL) + psh_head = psh_tail = this_node; + else { + psh_tail->next = this_node; + psh_tail = this_node; + } + + } else + Warning("Included PostScript header file %s not found", cp + 7); +} + +/* +** End Modifications +*/ + +/* color support (^^;)*/ +#ifdef COLOR +void +InitColorStack() +{ + int i; + + if (use_color) { + color_warn_done = False; + page_color = + xmalloc((unsigned) (total_pages + 1) * sizeof(PAGE_COLOR)); + page_color[0].color_stack = xmalloc(sizeof(XColor)); + page_color[0].color_stack[0].pixel = resource._fore_Pixel; + XQueryColor(DISP, our_colormap, &page_color[0].color_stack[0]); + page_color[0].background.pixel = resource._back_Pixel; + XQueryColor(DISP, our_colormap, &page_color[0].background); + page_color[0].stack_top = 0; + for (i = 1; i <= total_pages; i++) + page_color[i].color_stack = NULL; + scanned_page = scanned_page_bak = scanned_page_reset = + resource.prescan ? -1 : total_pages; + } else + page_color = NULL; +} + +/* Cyan/Magenta/Yellow/Black to Red/Green/Blue */ +static void +cmyk_to_rgb(c, m, y, k, r, g, b) + double c, m, y, k; + double *r, *g, *b; +{ + double red, green, blue; + + if (k > 0.9999) { + red = green = blue = 0.0; + } else if (k < 0.0001) { + red = 1.0 - c; + green = 1.0 - m; + blue = 1.0 - y; + } else { + red = (1.0 - c) * (1.0 - k); + green = (1.0 - m) * (1.0 - k); + blue = (1.0 - y) * (1.0 - k); + } + *r = (red < 0.0) ? 0.0 : (red > 1.0) ? 1.0 : red; + *g = (green < 0.0) ? 0.0 : (green > 1.0) ? 1.0 : green; + *b = (blue < 0.0) ? 0.0 : (blue > 1.0) ? 1.0 : blue; +} + +/* Hue/Saturation/Brightness to Red/Green/Blue */ +static void +hsb_to_rgb(h, s, v, r, g, b) + double h, s, v; + double *r, *g, *b; +{ + double red, green, blue, h6, f, p, q, t; + + if (s < 0.0001) { + red = green = blue = v; + } else { + h6 = h * 6.0; + f = h6 - (int)h6; + p = v * (1.0 - s); + q = v * (1.0 - s * f); + t = p - q + v; + + switch ((int)h6) { + case 0: red = v; green = t; blue = p; break; /* Red - Yellow */ + case 1: red = q; green = v; blue = p; break; /* Yellow - Green */ + case 2: red = p; green = v; blue = t; break; /* Green - Cyan */ + case 3: red = p; green = q; blue = v; break; /* Cyan - Blue */ + case 4: red = t; green = p; blue = v; break; /* Blue - Magenta */ + case 5: red = v; green = p; blue = q; break; /* Magenta - Red */ + default: red = green = blue = 0.0; break; + } + } + *r = (red < 0.0) ? 0.0 : (red > 1.0) ? 1.0 : red; + *g = (green < 0.0) ? 0.0 : (green > 1.0) ? 1.0 : green; + *b = (blue < 0.0) ? 0.0 : (blue > 1.0) ? 1.0 : blue; +} + +static void +color_warn() +{ + Puts("Cannot allocate colormap entry: displayed colors are not exact.\n\ +That is because other applications may be using too many colors.\n\ +If you want more exact colors, let such a application exit and \"Reread\"."); + fflush(stdout); +} +#endif + +static void +color_special(cp, scanning) + char *cp; + Boolean scanning; +{ +#ifdef COLOR + XColor fc, bc; + char *ptr; + char buf[BUFSIZ]; + double r, g, b; + + if (!use_color) return; + + if (scanned_page_reset >= 0) { + /* turn on scanning and redraw the page */ + scanned_page = scanned_page_bak = scanned_page_reset = -1; + canit = True; + longjmp(canit_env, 1); + /* not reach */ + return; + } + + while (*cp && isspace(*cp)) cp++; + + if (strncmp(cp, "push", 4) == 0) { + cp += 4; + while (*cp && isspace(*cp)) cp++; + ptr = cp; + r = g = b = 0.0; + + if (strncmp(ptr, "rgb", 3) == 0) { + sscanf(cp + 3, " %lf %lf %lf", &r, &g, &b); + sprintf(buf, "rgbi:%f/%f/%f", r, g, b); + ptr = buf; + } + else if (strncmp(ptr, "gray", 4) == 0) { + r = g = b = atof(cp + 4); + sprintf(buf, "rgbi:%f/%f/%f", r, g, b); + ptr = buf; + } + else if (strncmp(ptr, "cmyk", 4) == 0) { + double c, m, y, k; + c = m = y = k = 0.0; + sscanf(cp + 4, " %lf %lf %lf %lf", &c, &m, &y, &k); + cmyk_to_rgb(c, m, y, k, &r, &g, &b); + sprintf(buf, "rgbi:%f/%f/%f", r, g, b); + ptr = buf; + } + else if (strncmp(ptr, "hsb", 3) == 0) { + double h, s, v; + h = s = v = 0.0; + sscanf(cp + 3, " %lf %lf %lf", &h, &s, &v); + hsb_to_rgb(h, s, v, &r, &g, &b); + sprintf(buf, "rgbi:%f/%f/%f", r, g, b); + ptr = buf; + } + + if (color_stack_top >= color_stack_len) { + color_stack_len += 0x10; + color_stack = (XColor *) + xrealloc(color_stack, sizeof(XColor) * color_stack_len); + } +#if 0 + /* Because GCFunction might be GXandInverted, GCForeground + might be a correct pixel value. (see init_colors().) */ + XGetGCValues(DISP, foreGC, GCForeground, &values); + color_stack[stack_top++] = values.foreground; +#else + color_stack[color_stack_top++] = fore_color_data; +#endif + + fore_color_data.red = (unsigned short)(r * ((unsigned short)~0) +.5); + fore_color_data.green = (unsigned short)(g * ((unsigned short)~0) +.5); + fore_color_data.blue = (unsigned short)(b * ((unsigned short)~0) +.5); + + if (XAllocNamedColor(DISP, our_colormap, ptr, &fc, &bc) == True) { + if (color_allocated_top >= color_allocated_len) { + color_allocated_len += 0x10; + color_allocated = (Pixel *) + xrealloc(color_allocated, + sizeof(Pixel) * color_allocated_len); + } + if (ptr != buf) + fore_color_data = fc; + color_allocated[color_allocated_top++] + = fore_color_data.pixel = fc.pixel; + if (!scanning) { + init_colors(); + reset_fonts(); + } + } else if (!color_warn_done) { + color_warn(); + color_warn_done = True; + } + } + else if (strncmp(cp, "pop", 3) == 0) { + if (color_stack_top) { + fore_color_data = color_stack[--color_stack_top]; + if (!scanning) { + init_colors(); + reset_fonts(); + } + } + else Fprintf(stderr, "%s : color: too many 'pop'\n", prog); + } + else { + if (XAllocNamedColor(DISP, our_colormap, cp, &fc, &bc) == True) { + if (color_allocated_top >= color_allocated_len) { + color_allocated_len += 0x10; + color_allocated = (Pixel *) + xrealloc(color_allocated, + sizeof(Pixel) * color_allocated_len); + } + fore_color_data = fc; + color_allocated[color_allocated_top++] = fc.pixel; + if (!scanning) { + init_colors(); + reset_fonts(); + } + } + else if (!color_warn_done) { + color_warn(); + color_warn_done = True; + } + } +#endif +} + +#ifdef COLOR +static void +background_special(cp) + char *cp; +{ + XColor fc, bc; + char *ptr; + char buf[BUFSIZ]; + double r, g, b; + + if (!use_color) return; + + if (scanned_page_reset >= 0) { + /* turn on scanning and redraw the page */ + scanned_page = scanned_page_bak = scanned_page_reset = -1; + canit = True; + longjmp(canit_env, 1); + /* not reach */ + return; + } + + while (*cp && isspace(*cp)) cp++; + ptr = cp; + r = g = b = 0.0; + + if (strncmp(ptr, "rgb", 3) == 0) { + sscanf(cp + 3, " %lf %lf %lf", &r, &g, &b); + sprintf(buf, "rgbi:%f/%f/%f", r, g, b); + ptr = buf; + } + else if (strncmp(ptr, "gray", 4) == 0) { + r = g = b = atof(cp + 4); + sprintf(buf, "rgbi:%f/%f/%f", r, g, b); + ptr = buf; + } + else if (strncmp(ptr, "cmyk", 4) == 0) { + double c, m, y, k; + c = m = y = k = 0.0; + sscanf(cp + 4, " %lf %lf %lf %lf", &c, &m, &y, &k); + cmyk_to_rgb(c, m, y, k, &r, &g, &b); + sprintf(buf, "rgbi:%f/%f/%f", r, g, b); + ptr = buf; + } + else if (strncmp(ptr, "hsb", 3) == 0) { + double h, s, v; + h = s = v = 0.0; + sscanf(cp + 3, " %lf %lf %lf", &h, &s, &v); + hsb_to_rgb(h, s, v, &r, &g, &b); + sprintf(buf, "rgbi:%f/%f/%f", r, g, b); + ptr = buf; + } + + back_color_data.red = (unsigned short)(r * ((unsigned short)~0) +.5); + back_color_data.green = (unsigned short)(g * ((unsigned short)~0) +.5); + back_color_data.blue = (unsigned short)(b * ((unsigned short)~0) +.5); + + if (XAllocNamedColor(DISP, our_colormap, ptr, &fc, &bc)) { + if (color_allocated_top >= color_allocated_len) { + color_allocated_len += 0x10; + color_allocated = (Pixel *) + xrealloc(color_allocated, sizeof(Pixel) * color_allocated_len); + } + if (ptr != buf) + back_color_data = fc; + color_allocated[color_allocated_top++] + = back_color_data.pixel = fc.pixel; + } else { + if (!color_warn_done) { + color_warn(); + color_warn_done = True; + } + } +} +#endif + +#ifdef COLOR +#define RGB 0 +#define CMYK 1 +#define HSB 2 +#endif + +static void +dvi2ps_color_special(cp, colfmt) + char *cp; + unsigned char colfmt; +{ +#ifdef COLOR + char buf[BUFSIZ]; + double r, g, b; + XColor fc, bc; + + if (!use_color) return; + + if (colfmt == RGB) { + sscanf(cp, " %lf %lf %lf", &r, &g, &b); + } + else if (colfmt == CMYK) { + double c, m, y, k; + sscanf(cp, " %lf %lf %lf %lf", &c, &m, &y, &k); + cmyk_to_rgb(c, m, y, k, &r, &g, &b); + } + else if (colfmt == HSB) { + double h, s, v; + sscanf(cp, " %lf %lf %lf", &h, &s, &v); + hsb_to_rgb(h, s, v, &r, &g, &b); + } + sprintf(buf, "rgbi:%f/%f/%f", r, g, b); + + fore_color_data.red = (unsigned short)(r * ((unsigned short)~0) +.5); + fore_color_data.green = (unsigned short)(g * ((unsigned short)~0) +.5); + fore_color_data.blue = (unsigned short)(b * ((unsigned short)~0) +.5); + + if (XAllocNamedColor(DISP, our_colormap, buf, &fc, &bc) == True) { + if (color_allocated_top >= color_allocated_len) { + color_allocated_len += 0x10; + color_allocated = (Pixel *) + xrealloc(color_allocated, + sizeof(Pixel) * color_allocated_len); + } + color_allocated[color_allocated_top++] + = fore_color_data.pixel = fc.pixel; + init_colors(); + reset_fonts(); + } else if (!color_warn_done) { + color_warn(); + color_warn_done = True; + } +#endif +} + + +/* * The following copyright message applies to the rest of this file. --PV */ @@ -1386,6 +2316,37 @@ return; } + if (memicmp(cp, "epsfile=", 8) == 0) { + elepsf_special(cp + 8); + return; + } + if (memicmp(cp, "postscriptbox{", 14) == 0) { + epsbox_special(cp + 14); + return; + } +#ifdef COLOR + if (memicmp(cp, "color ", 6) == 0) { + color_special(cp + 6, False); + return; + } + if (memicmp(cp, "rgb=", 4) == 0) { + dvi2ps_color_special(cp + 4, RGB); + return; + } + if (memicmp(cp, "cmyk=", 5) == 0) { + dvi2ps_color_special(cp + 5, CMYK); + return; + } + if (memicmp(cp, "hsb=", 4) == 0) { + dvi2ps_color_special(cp + 4, HSB); + return; + } + if (memicmp(cp, "background ", 11) == 0) { + /* already scanned */ + return; + } +#endif /* COLOR */ + /* these should have been scanned */ if (*cp == '!' @@ -1445,6 +2406,8 @@ case CMD('b', 'k'): blacken_last(); return; + case CMD('h', 'e'): + psh_header(cp); return; case CMD('i', 'p'): /* throw away the path -- jansteen */ path_len = 0; return; @@ -1457,7 +2420,7 @@ #undef CMD -#if PS +#if PS || defined(COLOR) void scan_special(char *cp) { @@ -1470,10 +2433,29 @@ if (debug & DBG_PS) Printf("Scanning special `%s'.\n", cp); - if (*cp == '!') - scan_bang(cp); - else if (memicmp(cp, "header", 6) == 0 - && (p = endofcommand(cp + 6)) != NULL) scan_header(p); +#if PS + if (resource._postscript) { + if (*cp == '!') { + scan_bang(cp); + return; + } + if (memicmp(cp, "header", 6) == 0 + && (p = endofcommand(cp + 6)) != NULL) { + scan_header(p); + return; + } + } +#endif +#ifdef COLOR + if (memicmp(cp, "background ", 11) == 0) { + background_special(cp + 11); + return; + } + if (memicmp(cp, "color ", 6) == 0) { + color_special(cp + 6, True); + return; + } +#endif } #endif /* PS */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/statusline.c xdvik-22.40y1/texk/xdvik/statusline.c --- xdvik-22.40y1.orig/texk/xdvik/statusline.c 2002-12-27 07:35:26.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/statusline.c 2003-10-23 15:55:16.000000000 +0900 @@ -152,6 +152,16 @@ #else sprintf(g_string_savebuf, "This is xdvik %s", TVERSION); #endif +#ifdef USE_ZEIT + sprintf(g_string_savebuf + strlen(g_string_savebuf), + " (with " +#ifdef VF2FT + "FreeType" +#else /* !VF2FT */ + "VFlib" +#endif /* VF2FT */ + " rendering)"); +#endif /* USE_ZEIT */ } /* determine position and width of statusline */ XtVaGetValues(clip_widget, XtNx, &clip_x, XtNwidth, &clip_w, NULL); diff -ruN xdvik-22.40y1.orig/texk/xdvik/tategaki.c xdvik-22.40y1/texk/xdvik/tategaki.c --- xdvik-22.40y1.orig/texk/xdvik/tategaki.c 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/tategaki.c 2003-09-29 11:47:22.000000000 +0900 @@ -0,0 +1,281 @@ +#include "xdvi-config.h" +#ifdef PTEX + +struct TateCorrection TateCorrectionTable[] = { + { TCOR_NOP, 0, 0 }, + { TCOR_AUTOSHIFT, 0, 0 }, /* 2122 '、' */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2123 '。' */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2124 ',' */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2125 '.' */ + { TCOR_ROTATE, 0, 0 }, /* 2126 '・' */ + { TCOR_ROTATE, 0, 0 }, /* 2127 ':' */ + { TCOR_ROTATE, 0, 0 }, /* 2128 ';' */ + { TCOR_NOP, 0, 0 }, /* 2129 '?' */ + { TCOR_NOP, 0, 0 }, /* 212a '!' */ + { TCOR_ROTATE, 0, 0 }, /* 212b '゛' */ + { TCOR_ROTATE, 0, 0 }, /* 212c '゜' */ + { TCOR_ROTATE, 0, 0 }, /* 212d '´' */ + { TCOR_ROTATE, 0, 0 }, /* 212e '`' */ + { TCOR_ROTATE, 0, 0 }, /* 212f '¨' */ + { TCOR_ROTATE, 0, 0 }, /* 2130 '^' */ + { TCOR_ROTATE, 0, 0 }, /* 2131 ' ̄' */ + { TCOR_ROTATE, 0, 0 }, /* 2132 '_' */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2133 'ヽ' */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2134 'ヾ' */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2135 'ゝ' */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2136 'ゞ' */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2137 '〃' */ + { TCOR_NOP, 0, 0 }, /* 2138 '仝' */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2139 '々' */ + { TCOR_NOP, 0, 0 }, /* 213a '〆' */ + { TCOR_NOP, 0, 0 }, /* 213b '〇' */ + { TCOR_ROTATE, 0, 0 }, /* 213c 'ー' */ + { TCOR_ROTATE, 0, 0 }, /* 213d '―' */ + { TCOR_ROTATE, 0, 0 }, /* 213e '‐' */ + { TCOR_NOP, 0, 0 }, /* 213f '/' */ + { TCOR_NOP, 0, 0 }, /* 2140 '\' */ + { TCOR_ROTATE, 0, 0 }, /* 2141 '〜' */ + { TCOR_ROTATE, 0, 0 }, /* 2142 '‖' */ + { TCOR_ROTATE, 0, 0 }, /* 2143 '|' */ + { TCOR_ROTATE, 0, 0 }, /* 2144 '…' */ + { TCOR_ROTATE, 0, 0 }, /* 2145 '‥' */ + { TCOR_ROTATE, 0, 0 }, /* 2146 '‘' */ + { TCOR_ROTATE, 0, 0 }, /* 2147 '〃'? */ + { TCOR_ROTATE, 0, 0 }, /* 2148 '“' */ + { TCOR_ROTATE, 0, 0 }, /* 2149 '”' */ + { TCOR_ROTATE, 0, 0 }, /* 214a '(' */ + { TCOR_ROTATE, 0, 0 }, /* 214b ')' */ + { TCOR_ROTATE, 0, 0 }, /* 214c '〔' */ + { TCOR_ROTATE, 0, 0 }, /* 214d '〕' */ + { TCOR_ROTATE, 0, 0 }, /* 214e '[' */ + { TCOR_ROTATE, 0, 0 }, /* 214f ']' */ + { TCOR_ROTATE, 0, 0 }, /* 2150 '{' */ + { TCOR_ROTATE, 0, 0 }, /* 2151 '}' */ + { TCOR_ROTATE, 0, 0 }, /* 2152 '〈' */ + { TCOR_ROTATE, 0, 0 }, /* 2153 '〉' */ + { TCOR_ROTATE, 0, 0 }, /* 2154 '《' */ + { TCOR_ROTATE, 0, 0 }, /* 2155 '》' */ + { TCOR_ROTATE, 0, 0 }, /* 2156 '「' */ + { TCOR_ROTATE, 0, 0 }, /* 2157 '」' */ + { TCOR_ROTATE, 0, 0 }, /* 2158 '『' */ + { TCOR_ROTATE, 0, 0 }, /* 2159 '』' */ + { TCOR_ROTATE, 0, 0 }, /* 215a '【' */ + { TCOR_ROTATE, 0, 0 }, /* 215b '】' */ + { TCOR_ROTATE, 0, 0 }, /* 215c '+' */ + { TCOR_ROTATE, 0, 0 }, /* 215d '−' */ + { TCOR_ROTATE, 0, 0 }, /* 215e '±' */ + { TCOR_ROTATE, 0, 0 }, /* 215f '×' */ + { TCOR_ROTATE, 0, 0 }, /* 2160 '÷' */ + { TCOR_ROTATE, 0, 0 }, /* 2161 '=' */ + { TCOR_ROTATE, 0, 0 }, /* 2162 '≠' */ + { TCOR_ROTATE, 0, 0 }, /* 2163 '<' */ + { TCOR_ROTATE, 0, 0 }, /* 2164 '>' */ + { TCOR_ROTATE, 0, 0 }, /* 2165 '≦' */ + { TCOR_ROTATE, 0, 0 }, /* 2166 '≧' */ + { TCOR_NOP, 0, 0 }, /* 2167 '∞' */ + { TCOR_NOP, 0, 0 }, /* 2168 '∴' */ + { TCOR_NOP, 0, 0 }, /* 2169 '♂' */ + { TCOR_NOP, 0, 0 }, /* 216a '♀' */ + { TCOR_ROTATE, 0, 0 }, /* 216b '°' */ + { TCOR_ROTATE, 0, 0 }, /* 216c '′' */ + { TCOR_ROTATE, 0, 0 }, /* 216d '″' */ + { TCOR_NOP, 0, 0 }, /* 216e '℃' */ + { TCOR_NOP, 0, 0 }, /* 216f '¥' */ + { TCOR_NOP, 0, 0 }, /* 2170 '$' */ + { TCOR_NOP, 0, 0 }, /* 2171 '¢' */ + { TCOR_NOP, 0, 0 }, /* 2172 '£' */ + { TCOR_NOP, 0, 0 }, /* 2173 '%' */ + { TCOR_NOP, 0, 0 }, /* 2174 '#' */ + { TCOR_NOP, 0, 0 }, /* 2175 '&' */ + { TCOR_NOP, 0, 0 }, /* 2176 '*' */ + { TCOR_NOP, 0, 0 }, /* 2177 '@' */ + { TCOR_NOP, 0, 0 }, /* 2178 '§' */ + { TCOR_NOP, 0, 0 }, /* 2179 '☆' */ + { TCOR_NOP, 0, 0 }, /* 217a '★' */ + { TCOR_NOP, 0, 0 }, /* 217b '○' */ + { TCOR_NOP, 0, 0 }, /* 217c '●' */ + { TCOR_NOP, 0, 0 }, /* 217d '◎' */ + { TCOR_NOP, 0, 0 }, /* 217e '◇' */ + + { TCOR_NOP, 0, 0 }, /* 2221 '◆' */ + { TCOR_NOP, 0, 0 }, /* 2222 '□' */ + { TCOR_NOP, 0, 0 }, /* 2223 '■' */ + { TCOR_NOP, 0, 0 }, /* 2224 '△' */ + { TCOR_NOP, 0, 0 }, /* 2225 '▲' */ + { TCOR_NOP, 0, 0 }, /* 2226 '▽' */ + { TCOR_NOP, 0, 0 }, /* 2227 '▼' */ + { TCOR_NOP, 0, 0 }, /* 2228 '※' */ + { TCOR_NOP, 0, 0 }, /* 2229 '〒' */ + { TCOR_ROTATE, 0, 0 }, /* 222a '→' */ + { TCOR_ROTATE, 0, 0 }, /* 222b '←' */ + { TCOR_ROTATE, 0, 0 }, /* 222c '↑' */ + { TCOR_ROTATE, 0, 0 }, /* 222d '↓' */ + { TCOR_NOP, 0, 0 }, /* 222e '〓' */ + + { TCOR_AUTOSHIFT, 0, 0 }, /* 2421 'ぁ' */ + { TCOR_NOP, 0, 0 }, /* 2422 */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2423 'ぃ' */ + { TCOR_NOP, 0, 0 }, /* 2424 */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2425 'ぅ' */ + { TCOR_NOP, 0, 0 }, /* 2426 */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2427 'ぇ' */ + { TCOR_NOP, 0, 0 }, /* 2428 */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2429 'ぉ' */ + { TCOR_NOP, 0, 0 }, /* 242a */ + { TCOR_NOP, 0, 0 }, /* 242b */ + { TCOR_NOP, 0, 0 }, /* 242c */ + { TCOR_NOP, 0, 0 }, /* 242d */ + { TCOR_NOP, 0, 0 }, /* 242e */ + { TCOR_NOP, 0, 0 }, /* 242f */ + { TCOR_NOP, 0, 0 }, /* 2430 */ + { TCOR_NOP, 0, 0 }, /* 2431 */ + { TCOR_NOP, 0, 0 }, /* 2432 */ + { TCOR_NOP, 0, 0 }, /* 2433 */ + { TCOR_NOP, 0, 0 }, /* 2434 */ + { TCOR_NOP, 0, 0 }, /* 2435 */ + { TCOR_NOP, 0, 0 }, /* 2436 */ + { TCOR_NOP, 0, 0 }, /* 2437 */ + { TCOR_NOP, 0, 0 }, /* 2438 */ + { TCOR_NOP, 0, 0 }, /* 2439 */ + { TCOR_NOP, 0, 0 }, /* 243a */ + { TCOR_NOP, 0, 0 }, /* 243b */ + { TCOR_NOP, 0, 0 }, /* 243c */ + { TCOR_NOP, 0, 0 }, /* 243d */ + { TCOR_NOP, 0, 0 }, /* 243e */ + { TCOR_NOP, 0, 0 }, /* 243f */ + { TCOR_NOP, 0, 0 }, /* 2440 */ + { TCOR_NOP, 0, 0 }, /* 2441 */ + { TCOR_NOP, 0, 0 }, /* 2442 */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2443 'っ' */ + { TCOR_NOP, 0, 0 }, /* 2444 */ + { TCOR_NOP, 0, 0 }, /* 2445 */ + { TCOR_NOP, 0, 0 }, /* 2446 */ + { TCOR_NOP, 0, 0 }, /* 2447 */ + { TCOR_NOP, 0, 0 }, /* 2448 */ + { TCOR_NOP, 0, 0 }, /* 2449 */ + { TCOR_NOP, 0, 0 }, /* 244a */ + { TCOR_NOP, 0, 0 }, /* 244b */ + { TCOR_NOP, 0, 0 }, /* 244c */ + { TCOR_NOP, 0, 0 }, /* 244d */ + { TCOR_NOP, 0, 0 }, /* 244e */ + { TCOR_NOP, 0, 0 }, /* 244f */ + { TCOR_NOP, 0, 0 }, /* 2450 */ + { TCOR_NOP, 0, 0 }, /* 2451 */ + { TCOR_NOP, 0, 0 }, /* 2452 */ + { TCOR_NOP, 0, 0 }, /* 2453 */ + { TCOR_NOP, 0, 0 }, /* 2454 */ + { TCOR_NOP, 0, 0 }, /* 2455 */ + { TCOR_NOP, 0, 0 }, /* 2456 */ + { TCOR_NOP, 0, 0 }, /* 2457 */ + { TCOR_NOP, 0, 0 }, /* 2458 */ + { TCOR_NOP, 0, 0 }, /* 2459 */ + { TCOR_NOP, 0, 0 }, /* 245a */ + { TCOR_NOP, 0, 0 }, /* 245b */ + { TCOR_NOP, 0, 0 }, /* 245c */ + { TCOR_NOP, 0, 0 }, /* 245d */ + { TCOR_NOP, 0, 0 }, /* 245e */ + { TCOR_NOP, 0, 0 }, /* 245f */ + { TCOR_NOP, 0, 0 }, /* 2460 */ + { TCOR_NOP, 0, 0 }, /* 2461 */ + { TCOR_NOP, 0, 0 }, /* 2462 */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2463 'ゃ' */ + { TCOR_NOP, 0, 0 }, /* 2464 */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2465 'ゅ' */ + { TCOR_NOP, 0, 0 }, /* 2466 */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2467 'ょ' */ + { TCOR_NOP, 0, 0 }, /* 2468 */ + { TCOR_NOP, 0, 0 }, /* 2469 */ + { TCOR_NOP, 0, 0 }, /* 246a */ + { TCOR_NOP, 0, 0 }, /* 246b */ + { TCOR_NOP, 0, 0 }, /* 246c */ + { TCOR_NOP, 0, 0 }, /* 246d */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 246e 'ゎ' */ + + { TCOR_AUTOSHIFT, 0, 0 }, /* 2521 'ァ' */ + { TCOR_NOP, 0, 0 }, /* 2522 */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2523 'ィ' */ + { TCOR_NOP, 0, 0 }, /* 2524 */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2525 'ゥ' */ + { TCOR_NOP, 0, 0 }, /* 2526 */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2527 'ェ' */ + { TCOR_NOP, 0, 0 }, /* 2528 */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2529 'ォ' */ + { TCOR_NOP, 0, 0 }, /* 252a */ + { TCOR_NOP, 0, 0 }, /* 252b */ + { TCOR_NOP, 0, 0 }, /* 252c */ + { TCOR_NOP, 0, 0 }, /* 252d */ + { TCOR_NOP, 0, 0 }, /* 252e */ + { TCOR_NOP, 0, 0 }, /* 252f */ + { TCOR_NOP, 0, 0 }, /* 2530 */ + { TCOR_NOP, 0, 0 }, /* 2531 */ + { TCOR_NOP, 0, 0 }, /* 2532 */ + { TCOR_NOP, 0, 0 }, /* 2533 */ + { TCOR_NOP, 0, 0 }, /* 2534 */ + { TCOR_NOP, 0, 0 }, /* 2535 */ + { TCOR_NOP, 0, 0 }, /* 2536 */ + { TCOR_NOP, 0, 0 }, /* 2537 */ + { TCOR_NOP, 0, 0 }, /* 2538 */ + { TCOR_NOP, 0, 0 }, /* 2539 */ + { TCOR_NOP, 0, 0 }, /* 253a */ + { TCOR_NOP, 0, 0 }, /* 253b */ + { TCOR_NOP, 0, 0 }, /* 253c */ + { TCOR_NOP, 0, 0 }, /* 253d */ + { TCOR_NOP, 0, 0 }, /* 253e */ + { TCOR_NOP, 0, 0 }, /* 253f */ + { TCOR_NOP, 0, 0 }, /* 2540 */ + { TCOR_NOP, 0, 0 }, /* 2541 */ + { TCOR_NOP, 0, 0 }, /* 2542 */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2543 'ッ' */ + { TCOR_NOP, 0, 0 }, /* 2544 */ + { TCOR_NOP, 0, 0 }, /* 2545 */ + { TCOR_NOP, 0, 0 }, /* 2546 */ + { TCOR_NOP, 0, 0 }, /* 2547 */ + { TCOR_NOP, 0, 0 }, /* 2548 */ + { TCOR_NOP, 0, 0 }, /* 2549 */ + { TCOR_NOP, 0, 0 }, /* 254a */ + { TCOR_NOP, 0, 0 }, /* 254b */ + { TCOR_NOP, 0, 0 }, /* 254c */ + { TCOR_NOP, 0, 0 }, /* 254d */ + { TCOR_NOP, 0, 0 }, /* 254e */ + { TCOR_NOP, 0, 0 }, /* 254f */ + { TCOR_NOP, 0, 0 }, /* 2550 */ + { TCOR_NOP, 0, 0 }, /* 2551 */ + { TCOR_NOP, 0, 0 }, /* 2552 */ + { TCOR_NOP, 0, 0 }, /* 2553 */ + { TCOR_NOP, 0, 0 }, /* 2554 */ + { TCOR_NOP, 0, 0 }, /* 2555 */ + { TCOR_NOP, 0, 0 }, /* 2556 */ + { TCOR_NOP, 0, 0 }, /* 2557 */ + { TCOR_NOP, 0, 0 }, /* 2558 */ + { TCOR_NOP, 0, 0 }, /* 2559 */ + { TCOR_NOP, 0, 0 }, /* 255a */ + { TCOR_NOP, 0, 0 }, /* 255b */ + { TCOR_NOP, 0, 0 }, /* 255c */ + { TCOR_NOP, 0, 0 }, /* 255d */ + { TCOR_NOP, 0, 0 }, /* 255e */ + { TCOR_NOP, 0, 0 }, /* 255f */ + { TCOR_NOP, 0, 0 }, /* 2560 */ + { TCOR_NOP, 0, 0 }, /* 2561 */ + { TCOR_NOP, 0, 0 }, /* 2562 */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2563 'ャ' */ + { TCOR_NOP, 0, 0 }, /* 2564 */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2565 'ュ' */ + { TCOR_NOP, 0, 0 }, /* 2566 */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2567 'ョ' */ + { TCOR_NOP, 0, 0 }, /* 2568 */ + { TCOR_NOP, 0, 0 }, /* 2569 */ + { TCOR_NOP, 0, 0 }, /* 256a */ + { TCOR_NOP, 0, 0 }, /* 256b */ + { TCOR_NOP, 0, 0 }, /* 256c */ + { TCOR_NOP, 0, 0 }, /* 256d */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 256e 'ヮ' */ + { TCOR_NOP, 0, 0 }, /* 256f */ + { TCOR_NOP, 0, 0 }, /* 2570 */ + { TCOR_NOP, 0, 0 }, /* 2571 */ + { TCOR_NOP, 0, 0 }, /* 2572 */ + { TCOR_NOP, 0, 0 }, /* 2573 */ + { TCOR_NOP, 0, 0 }, /* 2574 */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2575 'ヵ' */ + { TCOR_AUTOSHIFT, 0, 0 }, /* 2576 'ヶ' */ +}; +#endif /* PTEX */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/toc.c xdvik-22.40y1/texk/xdvik/toc.c --- xdvik-22.40y1.orig/texk/xdvik/toc.c 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/toc.c 2003-09-29 11:47:22.000000000 +0900 @@ -0,0 +1,505 @@ +/* + * Table of Contents / Page list for xdvi + * + * Copyright (c) 1993, 1995 + * MATSUURA Syun syun@fuka.info.waseda.ac.jp + * HIRAHARA Atsushi hirahara@fuka.info.waseda.ac.jp + * ONO Kouichi onono@fuka.info.waseda.ac.jp + * All rights reserved. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +/* #include "xdvi.h" */ +#include "xdvi-config.h" /* added by Masahito Yamaga */ +#ifdef TOC /* added by Masahito Yamaga */ +#include "toc.h" +#ifdef MARKPAGE +#include "markpage.h" +#endif /* MARKPAGE */ + +static int view_y; +#ifndef PAGENUM +extern int pageno_correct; +#endif /* !PAGENUM */ + +static Widget list_widget, viewport=NULL; +static char *toc[MAX_PAGE]; +static int press_page_2 = -1; +static int press_page_3 = -1; + +extern void keystroke(); +extern Widget panel_widget; + +static int Get_Item_Number(); /* added by Masahito Yamaga */ + +static int + get_Page_size() +{ + int offset = 0; + int min_page = 0; + int max_page = 0; + int min_pageno_len = 0; + int max_pageno_len = 0; +#ifdef PAGENUM + int i; + + for (i = 0; i < total_pages; i++) { + max_page = MAX(page_index[i].number, max_page); + min_page = MIN(page_index[i].number, min_page); + } +#else + min_page = pageno_correct - 1; + max_page = min_page + total_pages; +#endif /* PAGENUM */ + + if(min_page>=0) { + offset = 0; /* plus symbol is hidden */ + } else { + offset = 1; /* offset for minus symbol */ + min_page = - min_page; + } + for(min_pageno_len = offset; min_page>0; + min_page /= 10, min_pageno_len++); + + if(max_page >= 0) { + offset = 0; /* plus symbol is hidden */ + } else { + offset = 1; /* offset for minus symbol */ + max_page = - max_page; + } + for(max_pageno_len = offset; max_page>0; + max_page /= 10, max_pageno_len++); + + return MAX(min_pageno_len, max_pageno_len); + /* Plus 1 for minus symbol */ +} + +static int + /* get TOC's width size */ + get_TOC_size() +{ + int fontwidth = 8; +#ifdef TOOLKIT + Widget w; + XFontStruct *font; +#ifdef XtNinternational + XFontSet fs; + Boolean i18n; +#endif /* XtNinternational */ + + /* tricky :-< */ + w = XtVaCreateWidget("list", listWidgetClass, top_level, NULL); + XtVaGetValues(w, + XtNfont, &font, +#ifdef XtNinternational + XtNfontSet, &fs, + XtNinternational, &i18n, +#endif /* XtNinternational */ + NULL); + XtDestroyWidget(w); + + fontwidth = font->max_bounds.width; +#ifdef XtNinternational + if (i18n) { + XFontSetExtents *ext = XExtentsOfFontSet(fs); + fontwidth = ext->max_ink_extent.width; + } +#endif /* XtNinternational */ +#endif /* TOOLKIT */ + + /* Print format is " NN<" get_Page_size() is number of N */ + return +#ifdef SMALL_PANEL + - (resource.smallpanel ? 5 : 0) +#endif /* SMALL_PANEL */ +#ifdef MARKPAGE + + 2 * fontwidth +#endif /* MARKPAGE */ + + (get_Page_size()+2) * fontwidth + 20; +} + +static void + /* set TOC's string */ + set_TOC() +{ + int i = 0; + char s[PAGENUMLEN]; + + for(i = 0; ilist_index); +#else + do_goto_page(item->list_index+pageno_correct); + + Redraw_TOC(); +#endif /* PAGENUM */ +} + +#ifdef MARKPAGE +static void + /* Called when Button-2 | 3 pressed */ + Press_Mark_Page(w, event, button) +Widget w; +XEvent *event; +int button; +{ + int x = 0; + + switch(button) { + /* Get item number */ + case Button2: + press_page_2 = x = Get_Item_Number(w, event->xbutton.y); + break; + case Button3: + press_page_3 = x = Get_Item_Number(w, event->xbutton.y); + break; + } + ReverseTheMarkOfPage(x); + + Redraw_TOC(); +} + +static void + /* Set or Reset TOC mark */ + set_Drag_TOC(button, x) +int button, x; +{ + int i = 0; + + i = (button==Button2) ? press_page_2: press_page_3; + + if(i=x; i--) { + if(button==Button2) { + MarkPage(i); + } else { + UnmarkPage(i); + } + } + } +} + +static void + /* Called when Button-2 | 3 released */ + Release_Mark_Page(w, event, button) +Widget w; +XEvent *event; +int button; +{ + int x = 0; + + x = Get_Item_Number(w, event->xbutton.y); /* Get item number */ + switch(button) { + case Button2: + if((press_page_2!=x) && (press_page_2!=-1)) + set_Drag_TOC(button, x); + press_page_2 = 0; + break; + case Button3: + if((press_page_3!=x) && (press_page_3!=-1)) + set_Drag_TOC(button, x); + press_page_3 = 0; + break; + } + Redraw_TOC(); +} + +static void + /* Called when mouse leaved the LIST-widget */ + Leave_Mark_Page(w, event, button) +Widget w; +XEvent *event; +int button; +{ + press_page_2 = press_page_3 = -1; +} +#endif /* MARKPAGE */ + +static void + /* TOC's event handler */ + TOCs_Event_Handler(w, n, event) +Widget w; +int n; +XEvent *event; +{ + int i = 0; + Dimension length; + Arg arglist[10]; + Widget y_bar; + + y_bar = XtNameToWidget(viewport, "vertical"); + if (y_bar) { + XtSetArg(arglist[i], XtNlength, &length); i++; + XtGetValues(y_bar, arglist, i); + } + + switch(event->type) { + case ButtonPress: + /* when TOC pressed */ + switch(event->xbutton.button) { +#ifdef MARKPAGE + case Button2: + Press_Mark_Page(w, event, Button2); + break; + case Button3: + Press_Mark_Page(w, event, Button3); + break; +#endif + case Button4: + if (y_bar) + XtCallCallbacks(y_bar, XtNscrollProc, + (XtPointer) ((int) -length)); + break; + case Button5: + if (y_bar) + XtCallCallbacks(y_bar, XtNscrollProc, + (XtPointer) ((int) +length)); + break; + } + break; + +#ifdef MARKPAGE + case ButtonRelease: + /* when TOC released */ + switch(event->xbutton.button) { + case Button2: + Release_Mark_Page(w, event, Button2); + break; + case Button3: + Release_Mark_Page(w, event, Button3); + break; + } + break; + + case LeaveNotify: + /* when TOC leaved */ + Leave_Mark_Page(w, event); + break; +#endif + } +} + +void + Create_TOC(h) +XtArgVal h; +{ + static int height; + static int width; + + if (!(height) || (int)h > 0) height = (int)h - 50; + width = MAX(width, get_TOC_size()); + + if(total_pages>MAX_PAGE) + total_pages = MAX_PAGE; + + set_TOC(); + + viewport = XtVaCreateWidget("viewport", viewportWidgetClass, panel_widget, + XtNallowVert, True, + XtNforceBars, True, + XtNx, max_button_width + 16, + XtNy, 20, + XtNheight, height, + XtNwidth, width, + NULL); + + list_widget = XtVaCreateWidget("list", listWidgetClass, viewport, + XtNlist, toc, + XtNdefaultColumns, 1, + XtNforceColumns, True, + XtNx, 100, + XtNy, 20, + XtNheight, height, + XtNwidth, width, + XtNlongest, LONGESTPAGENUM, + XtNverticalList, True, + NULL); + + XtManageChild(list_widget); + XtManageChild(viewport); + + XtAddCallback(list_widget, XtNcallback, SelectThisPage, (XtPointer)NULL); +#ifdef PAGENUM + XtAddCallback(viewport, XtNreportCallback, SendReportProc, (XtPointer)NULL); +#endif /* PAGENUM */ +#ifdef MARKPAGE + XtAddEventHandler(list_widget, + ButtonPressMask | ButtonReleaseMask | LeaveWindowMask, + False, TOCs_Event_Handler, NULL); +#endif /* MARKPAGE */ +} + +static int + Get_Item_Number(w, mouse_y) +Widget w; +int mouse_y; +{ + int i = 0; + int row_height = 0; + int index = 0; + Dimension row_space, internal_height; + XFontStruct *font; +#ifdef XtNinternational + XFontSet fs; + Boolean i18n; +#endif /* XtNinternational */ + Arg arglist[10]; + + XtSetArg(arglist[i], XtNfont, &font); i++; +#ifdef XtNinternational + XtSetArg(arglist[i], XtNfontSet, &fs); i++; + XtSetArg(arglist[i], XtNinternational, &i18n); i++; +#endif /* XtNinternational */ + XtSetArg(arglist[i], XtNinternalHeight, &internal_height); i++; + XtSetArg(arglist[i], XtNrowSpacing, &row_space); i++; + XtGetValues(w, arglist, i); + row_height = font->max_bounds.ascent + +font->max_bounds.descent + +(int)row_space; +#ifdef XtNinternational + if (i18n) { + XFontSetExtents *ext = XExtentsOfFontSet(fs); + row_height = ext->max_ink_extent.height + (int)row_space; + } +#endif /* XtNinternational */ + + index = (mouse_y-internal_height)/row_height; + + return index; +} + +void + Center_TOC(current_page, next_page) +int current_page, next_page; +{ + int i = 0; + Position x, y; + Dimension row_space, view_height, font_height; + XFontStruct *font; +#ifdef XtNinternational + XFontSet fs; + Boolean i18n; +#endif /* XtNinternational */ + Arg arglist[10]; + + XtSetArg(arglist[i], XtNfont, &font); i++; +#ifdef XtNinternational + XtSetArg(arglist[i], XtNfontSet, &fs); i++; + XtSetArg(arglist[i], XtNinternational, &i18n); i++; +#endif /* XtNinternational */ + XtSetArg(arglist[i], XtNrowSpacing, &row_space); i++; + XtGetValues(list_widget, arglist, i); + font_height = (font->max_bounds.ascent + +font->max_bounds.descent + +row_space); +#ifdef XtNinternational + if (i18n) { + XFontSetExtents *ext = XExtentsOfFontSet(fs); + font_height = ext->max_ink_extent.height + row_space; + } +#endif /* XtNinternational */ + y = font_height*next_page; + + i = 0; + XtSetArg(arglist[i], XtNheight, &view_height); i++; + XtSetArg(arglist[i], XtNx, &x); i++; + XtGetValues(viewport, arglist, i); + + if(((next_page>current_page) + && (y>=view_y+view_height-font_height+1)) + || ((next_pageslider_y; +} +#endif /* TOC added by Masahito Yamaga */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/toc.h xdvik-22.40y1/texk/xdvik/toc.h --- xdvik-22.40y1.orig/texk/xdvik/toc.h 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/toc.h 2003-09-29 11:47:22.000000000 +0900 @@ -0,0 +1,42 @@ +/* + * Table of Contents / Page list for xdvi + * + * Copyright (c) 1993, 1995 + * MATSUURA Syun syun@fuka.info.waseda.ac.jp + * HIRAHARA Atsushi hirahara@fuka.info.waseda.ac.jp + * ONO Kouichi onono@fuka.info.waseda.ac.jp + * All rights reserved. + */ + +#ifndef _TOC_H_ +#define _TOC_H_ + +#include "chardef.h" + +#ifndef MAX_PAGE +#define MAX_PAGE (1024) +#endif /* MAX_PAGE */ + +#define CURPAGESYM CHAR_OPEN_ANGLE_BRACKET +#define MRKPAGESYM CHAR_ASTERISK +#define LASTMRKPAGESYM CHAR_CLOSE_ANGLE_BRACKET +#define NORMALPAGESYM CHAR_SPACE + +#define PAGENUMLEN (16) +#define LONGESTPAGENUM (55) + +#ifndef MAX +#define MAX(i, j) ( (i) > (j) ? (i) : (j) ) +#endif /* MAX */ + +#ifndef MIN +#define MIN(i, j) ( (i) < (j) ? (i) : (j) ) +#endif /* MIN */ + +extern Dimension max_button_width; +extern void Create_TOC ARGS((XtArgVal)); +extern void Redraw_TOC ARGS((void)); +extern void Center_TOC ARGS((int, int)); +void SendReportProc ARGS((Widget, XtPointer, XtPointer)); + +#endif /* _TOC_H_ */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/version.h xdvik-22.40y1/texk/xdvik/version.h --- xdvik-22.40y1.orig/texk/xdvik/version.h 2003-08-24 09:10:11.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/version.h 2004-02-23 17:21:11.000000000 +0900 @@ -1,6 +1,7 @@ #define XDVERSION "22.40y1" +#define JPVERSION " j1.21" #ifdef Omega -#define TVERSION XDVERSION" for Omega" +#define TVERSION XDVERSION""JPVERSION" for Omega" #else -#define TVERSION XDVERSION +#define TVERSION XDVERSION""JPVERSION #endif diff -ruN xdvik-22.40y1.orig/texk/xdvik/vf.c xdvik-22.40y1/texk/xdvik/vf.c --- xdvik-22.40y1.orig/texk/xdvik/vf.c 2003-01-17 06:56:03.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/vf.c 2003-09-29 11:47:22.000000000 +0900 @@ -50,7 +50,7 @@ * The main routine */ -#ifdef Omega +#if defined(Omega) || defined(KANJI) unsigned long #else void @@ -61,7 +61,7 @@ ubyte cmnd; ubyte *avail, *availend; /* available space for macros */ long checksum; -#ifdef Omega +#if defined(Omega) || defined(KANJI) struct macro *newmacro; unsigned long maxcc = 0; int i; @@ -103,7 +103,7 @@ /* * Prepare macro array. */ -#ifdef Omega +#if defined(Omega) || defined(KANJI) fontp->maxchar = 65535; fontp->macro = xmalloc(65536 * sizeof(struct macro)); bzero((char *)fontp->macro, 65536 * sizeof(struct macro)); @@ -125,7 +125,7 @@ len = four(VF_file); cc = four(VF_file); width = four(VF_file); -#ifdef Omega +#if defined(Omega) || defined(KANJI) if (cc >= 65536) { #else if (cc >= 256) { @@ -142,7 +142,7 @@ cc = one(VF_file); width = num(VF_file, 3); } -#ifdef Omega +#if defined(Omega) || defined(KANJI) maxcc = (cc > maxcc) ? cc : maxcc; #endif m = &fontp->macro[cc]; @@ -175,7 +175,7 @@ Fclose(VF_file); fontp->file = NULL; n_files_left++; -#ifdef Omega +#if defined(Omega) || defined(KANJI) newmacro = xmalloc((maxcc + 1) * sizeof(struct macro)); for (i = 0; i <= maxcc; i++) { newmacro[i] = fontp->macro[i]; diff -ruN xdvik-22.40y1.orig/texk/xdvik/vf2ft.c xdvik-22.40y1/texk/xdvik/vf2ft.c --- xdvik-22.40y1.orig/texk/xdvik/vf2ft.c 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/vf2ft.c 2003-10-22 16:19:27.000000000 +0900 @@ -0,0 +1,1403 @@ +#ifdef VF2FT + +#define MAXJIS 92 +static unsigned short UnicodeTbl[][94] = { + { /* category 01 */ + 0x3000, 0x3001, 0x3002, 0xFF0C, 0xFF0E, 0x30FB, 0xFF1A, 0xFF1B, + 0xFF1F, 0xFF01, 0x309B, 0x309C, 0x00B4, 0xFF40, 0x00A8, 0xFF3E, + 0xFFE3, 0xFF3F, 0x30FD, 0x30FE, 0x309D, 0x309E, 0x3003, 0x4EDD, + 0x3005, 0x3006, 0x3007, 0x30FC, 0x2015, 0x2010, 0xFF0F, 0xFF3C, + 0xFF5E, 0x2225, 0xFF5C, 0x2026, 0x2025, 0x2018, 0x2019, 0x201C, + 0x201D, 0xFF08, 0xFF09, 0x3014, 0x3015, 0xFF3B, 0xFF3D, 0xFF5B, + 0xFF5D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D, 0x300E, + 0x300F, 0x3010, 0x3011, 0xFF0B, 0xFF0D, 0x00B1, 0x00D7, 0x00F7, + 0xFF1D, 0x2260, 0xFF1C, 0xFF1E, 0x2266, 0x2267, 0x221E, 0x2234, + 0x2642, 0x2640, 0x00B0, 0x2032, 0x2033, 0x2103, 0xFFE5, 0xFF04, + 0xFFE0, 0xFFE1, 0xFF05, 0xFF03, 0xFF06, 0xFF0A, 0xFF20, 0x00A7, + 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7}, + { /* category 02 */ + 0x25C6, 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, 0x203B, + 0x3012, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x2208, 0x220B, 0x2286, 0x2287, 0x2282, 0x2283, 0x222A, + 0x2229, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x2227, 0x2228, 0xFFE2, 0x21D2, 0x21D4, 0x2200, 0x2203, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x2220, 0x22A5, 0x2312, 0x2202, 0x2207, + 0x2261, 0x2252, 0x226A, 0x226B, 0x221A, 0x223D, 0x221D, 0x2235, + 0x222B, 0x222C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x212B, 0x2030, 0x266F, 0x266D, 0x266A, 0x2020, 0x2021, /**/ + 0x00B6, 0x0000, 0x0000, 0x0000, 0x0000, 0x25EF}, + { /* category 03 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF10, + 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18, + 0xFF19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28, + 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, 0xFF30, + 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38, + 0xFF39, 0xFF3A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48, + 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, 0xFF50, + 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, 0xFF58, + 0xFF59, 0xFF5A, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 04 */ + 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, + 0x3049, 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, 0x3050, + 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, + 0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, 0x3060, + 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, + 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, 0x3070, + 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, + 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, 0x3080, + 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, + 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, 0x3090, + 0x3091, 0x3092, 0x3093, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 05 */ + 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, 0x30A8, + 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, 0x30B0, + 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, 0x30B8, + 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, 0x30C0, + 0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, 0x30C8, + 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D0, + 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, 0x30D8, + 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, 0x30E0, + 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, 0x30E8, + 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, 0x30F0, + 0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 06 */ + 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, + 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, + 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, + 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, + 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 07 */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416, + 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, + 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, + 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, + 0x042F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, + 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, + 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, + 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, + 0x044F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 08 */ + 0x2500, 0x2502, 0x250C, 0x2510, 0x2518, 0x2514, 0x251C, 0x252C, + 0x2524, 0x2534, 0x253C, 0x2501, 0x2503, 0x250F, 0x2513, 0x251B, + 0x2517, 0x2523, 0x2533, 0x252B, 0x253B, 0x254B, 0x2520, 0x252F, + 0x2528, 0x2537, 0x253F, 0x251D, 0x2530, 0x2525, 0x2538, 0x2542, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 09 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 10 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 11 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 12 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 13 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 14 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 15 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 16 */ + 0x4E9C, 0x5516, 0x5A03, 0x963F, 0x54C0, 0x611B, 0x6328, 0x59F6, + 0x9022, 0x8475, 0x831C, 0x7A50, 0x60AA, 0x63E1, 0x6E25, 0x65ED, + 0x8466, 0x82A6, 0x9BF5, 0x6893, 0x5727, 0x65A1, 0x6271, 0x5B9B, + 0x59D0, 0x867B, 0x98F4, 0x7D62, 0x7DBE, 0x9B8E, 0x6216, 0x7C9F, + 0x88B7, 0x5B89, 0x5EB5, 0x6309, 0x6697, 0x6848, 0x95C7, 0x978D, + 0x674F, 0x4EE5, 0x4F0A, 0x4F4D, 0x4F9D, 0x5049, 0x56F2, 0x5937, + 0x59D4, 0x5A01, 0x5C09, 0x60DF, 0x610F, 0x6170, 0x6613, 0x6905, + 0x70BA, 0x754F, 0x7570, 0x79FB, 0x7DAD, 0x7DEF, 0x80C3, 0x840E, + 0x8863, 0x8B02, 0x9055, 0x907A, 0x533B, 0x4E95, 0x4EA5, 0x57DF, + 0x80B2, 0x90C1, 0x78EF, 0x4E00, 0x58F1, 0x6EA2, 0x9038, 0x7A32, + 0x8328, 0x828B, 0x9C2F, 0x5141, 0x5370, 0x54BD, 0x54E1, 0x56E0, + 0x59FB, 0x5F15, 0x98F2, 0x6DEB, 0x80E4, 0x852D}, + { /* category 17 */ + 0x9662, 0x9670, 0x96A0, 0x97FB, 0x540B, 0x53F3, 0x5B87, 0x70CF, + 0x7FBD, 0x8FC2, 0x96E8, 0x536F, 0x9D5C, 0x7ABA, 0x4E11, 0x7893, + 0x81FC, 0x6E26, 0x5618, 0x5504, 0x6B1D, 0x851A, 0x9C3B, 0x59E5, + 0x53A9, 0x6D66, 0x74DC, 0x958F, 0x5642, 0x4E91, 0x904B, 0x96F2, + 0x834F, 0x990C, 0x53E1, 0x55B6, 0x5B30, 0x5F71, 0x6620, 0x66F3, + 0x6804, 0x6C38, 0x6CF3, 0x6D29, 0x745B, 0x76C8, 0x7A4E, 0x9834, + 0x82F1, 0x885B, 0x8A60, 0x92ED, 0x6DB2, 0x75AB, 0x76CA, 0x99C5, + 0x60A6, 0x8B01, 0x8D8A, 0x95B2, 0x698E, 0x53AD, 0x5186, 0x5712, + 0x5830, 0x5944, 0x5BB4, 0x5EF6, 0x6028, 0x63A9, 0x63F4, 0x6CBF, + 0x6F14, 0x708E, 0x7114, 0x7159, 0x71D5, 0x733F, 0x7E01, 0x8276, + 0x82D1, 0x8597, 0x9060, 0x925B, 0x9D1B, 0x5869, 0x65BC, 0x6C5A, + 0x7525, 0x51F9, 0x592E, 0x5965, 0x5F80, 0x5FDC}, + { /* category 18 */ + 0x62BC, 0x65FA, 0x6A2A, 0x6B27, 0x6BB4, 0x738B, 0x7FC1, 0x8956, + 0x9D2C, 0x9D0E, 0x9EC4, 0x5CA1, 0x6C96, 0x837B, 0x5104, 0x5C4B, + 0x61B6, 0x81C6, 0x6876, 0x7261, 0x4E59, 0x4FFA, 0x5378, 0x6069, + 0x6E29, 0x7A4F, 0x97F3, 0x4E0B, 0x5316, 0x4EEE, 0x4F55, 0x4F3D, + 0x4FA1, 0x4F73, 0x52A0, 0x53EF, 0x5609, 0x590F, 0x5AC1, 0x5BB6, + 0x5BE1, 0x79D1, 0x6687, 0x679C, 0x67B6, 0x6B4C, 0x6CB3, 0x706B, + 0x73C2, 0x798D, 0x79BE, 0x7A3C, 0x7B87, 0x82B1, 0x82DB, 0x8304, + 0x8377, 0x83EF, 0x83D3, 0x8766, 0x8AB2, 0x5629, 0x8CA8, 0x8FE6, + 0x904E, 0x971E, 0x868A, 0x4FC4, 0x5CE8, 0x6211, 0x7259, 0x753B, + 0x81E5, 0x82BD, 0x86FE, 0x8CC0, 0x96C5, 0x9913, 0x99D5, 0x4ECB, + 0x4F1A, 0x89E3, 0x56DE, 0x584A, 0x58CA, 0x5EFB, 0x5FEB, 0x602A, + 0x6094, 0x6062, 0x61D0, 0x6212, 0x62D0, 0x6539}, + { /* category 19 */ + 0x9B41, 0x6666, 0x68B0, 0x6D77, 0x7070, 0x754C, 0x7686, 0x7D75, + 0x82A5, 0x87F9, 0x958B, 0x968E, 0x8C9D, 0x51F1, 0x52BE, 0x5916, + 0x54B3, 0x5BB3, 0x5D16, 0x6168, 0x6982, 0x6DAF, 0x788D, 0x84CB, + 0x8857, 0x8A72, 0x93A7, 0x9AB8, 0x6D6C, 0x99A8, 0x86D9, 0x57A3, + 0x67FF, 0x86CE, 0x920E, 0x5283, 0x5687, 0x5404, 0x5ED3, 0x62E1, + 0x64B9, 0x683C, 0x6838, 0x6BBB, 0x7372, 0x78BA, 0x7A6B, 0x899A, + 0x89D2, 0x8D6B, 0x8F03, 0x90ED, 0x95A3, 0x9694, 0x9769, 0x5B66, + 0x5CB3, 0x697D, 0x984D, 0x984E, 0x639B, 0x7B20, 0x6A2B, 0x6A7F, + 0x68B6, 0x9C0D, 0x6F5F, 0x5272, 0x559D, 0x6070, 0x62EC, 0x6D3B, + 0x6E07, 0x6ED1, 0x845B, 0x8910, 0x8F44, 0x4E14, 0x9C39, 0x53F6, + 0x691B, 0x6A3A, 0x9784, 0x682A, 0x515C, 0x7AC3, 0x84B2, 0x91DC, + 0x938C, 0x565B, 0x9D28, 0x6822, 0x8305, 0x8431}, + { /* category 20 */ + 0x7CA5, 0x5208, 0x82C5, 0x74E6, 0x4E7E, 0x4F83, 0x51A0, 0x5BD2, + 0x520A, 0x52D8, 0x52E7, 0x5DFB, 0x559A, 0x582A, 0x59E6, 0x5B8C, + 0x5B98, 0x5BDB, 0x5E72, 0x5E79, 0x60A3, 0x611F, 0x6163, 0x61BE, + 0x63DB, 0x6562, 0x67D1, 0x6853, 0x68FA, 0x6B3E, 0x6B53, 0x6C57, + 0x6F22, 0x6F97, 0x6F45, 0x74B0, 0x7518, 0x76E3, 0x770B, 0x7AFF, + 0x7BA1, 0x7C21, 0x7DE9, 0x7F36, 0x7FF0, 0x809D, 0x8266, 0x839E, + 0x89B3, 0x8ACC, 0x8CAB, 0x9084, 0x9451, 0x9593, 0x9591, 0x95A2, + 0x9665, 0x97D3, 0x9928, 0x8218, 0x4E38, 0x542B, 0x5CB8, 0x5DCC, + 0x73A9, 0x764C, 0x773C, 0x5CA9, 0x7FEB, 0x8D0B, 0x96C1, 0x9811, + 0x9854, 0x9858, 0x4F01, 0x4F0E, 0x5371, 0x559C, 0x5668, 0x57FA, + 0x5947, 0x5B09, 0x5BC4, 0x5C90, 0x5E0C, 0x5E7E, 0x5FCC, 0x63EE, + 0x673A, 0x65D7, 0x65E2, 0x671F, 0x68CB, 0x68C4}, + { /* category 21 */ + 0x6A5F, 0x5E30, 0x6BC5, 0x6C17, 0x6C7D, 0x757F, 0x7948, 0x5B63, + 0x7A00, 0x7D00, 0x5FBD, 0x898F, 0x8A18, 0x8CB4, 0x8D77, 0x8ECC, + 0x8F1D, 0x98E2, 0x9A0E, 0x9B3C, 0x4E80, 0x507D, 0x5100, 0x5993, + 0x5B9C, 0x622F, 0x6280, 0x64EC, 0x6B3A, 0x72A0, 0x7591, 0x7947, + 0x7FA9, 0x87FB, 0x8ABC, 0x8B70, 0x63AC, 0x83CA, 0x97A0, 0x5409, + 0x5403, 0x55AB, 0x6854, 0x6A58, 0x8A70, 0x7827, 0x6775, 0x9ECD, + 0x5374, 0x5BA2, 0x811A, 0x8650, 0x9006, 0x4E18, 0x4E45, 0x4EC7, + 0x4F11, 0x53CA, 0x5438, 0x5BAE, 0x5F13, 0x6025, 0x6551, 0x673D, + 0x6C42, 0x6C72, 0x6CE3, 0x7078, 0x7403, 0x7A76, 0x7AAE, 0x7B08, + 0x7D1A, 0x7CFE, 0x7D66, 0x65E7, 0x725B, 0x53BB, 0x5C45, 0x5DE8, + 0x62D2, 0x62E0, 0x6319, 0x6E20, 0x865A, 0x8A31, 0x8DDD, 0x92F8, + 0x6F01, 0x79A6, 0x9B5A, 0x4EA8, 0x4EAB, 0x4EAC}, + { /* category 22 */ + 0x4F9B, 0x4FA0, 0x50D1, 0x5147, 0x7AF6, 0x5171, 0x51F6, 0x5354, + 0x5321, 0x537F, 0x53EB, 0x55AC, 0x5883, 0x5CE1, 0x5F37, 0x5F4A, + 0x602F, 0x6050, 0x606D, 0x631F, 0x6559, 0x6A4B, 0x6CC1, 0x72C2, + 0x72ED, 0x77EF, 0x80F8, 0x8105, 0x8208, 0x854E, 0x90F7, 0x93E1, + 0x97FF, 0x9957, 0x9A5A, 0x4EF0, 0x51DD, 0x5C2D, 0x6681, 0x696D, + 0x5C40, 0x66F2, 0x6975, 0x7389, 0x6850, 0x7C81, 0x50C5, 0x52E4, + 0x5747, 0x5DFE, 0x9326, 0x65A4, 0x6B23, 0x6B3D, 0x7434, 0x7981, + 0x79BD, 0x7B4B, 0x7DCA, 0x82B9, 0x83CC, 0x887F, 0x895F, 0x8B39, + 0x8FD1, 0x91D1, 0x541F, 0x9280, 0x4E5D, 0x5036, 0x53E5, 0x533A, + 0x72D7, 0x7396, 0x77E9, 0x82E6, 0x8EAF, 0x99C6, 0x99C8, 0x99D2, + 0x5177, 0x611A, 0x865E, 0x55B0, 0x7A7A, 0x5076, 0x5BD3, 0x9047, + 0x9685, 0x4E32, 0x6ADB, 0x91E7, 0x5C51, 0x5C48}, + { /* category 23 */ + 0x6398, 0x7A9F, 0x6C93, 0x9774, 0x8F61, 0x7AAA, 0x718A, 0x9688, + 0x7C82, 0x6817, 0x7E70, 0x6851, 0x936C, 0x52F2, 0x541B, 0x85AB, + 0x8A13, 0x7FA4, 0x8ECD, 0x90E1, 0x5366, 0x8888, 0x7941, 0x4FC2, + 0x50BE, 0x5211, 0x5144, 0x5553, 0x572D, 0x73EA, 0x578B, 0x5951, + 0x5F62, 0x5F84, 0x6075, 0x6176, 0x6167, 0x61A9, 0x63B2, 0x643A, + 0x656C, 0x666F, 0x6842, 0x6E13, 0x7566, 0x7A3D, 0x7CFB, 0x7D4C, + 0x7D99, 0x7E4B, 0x7F6B, 0x830E, 0x834A, 0x86CD, 0x8A08, 0x8A63, + 0x8B66, 0x8EFD, 0x981A, 0x9D8F, 0x82B8, 0x8FCE, 0x9BE8, 0x5287, + 0x621F, 0x6483, 0x6FC0, 0x9699, 0x6841, 0x5091, 0x6B20, 0x6C7A, + 0x6F54, 0x7A74, 0x7D50, 0x8840, 0x8A23, 0x6708, 0x4EF6, 0x5039, + 0x5026, 0x5065, 0x517C, 0x5238, 0x5263, 0x55A7, 0x570F, 0x5805, + 0x5ACC, 0x5EFA, 0x61B2, 0x61F8, 0x62F3, 0x6372}, + { /* category 24 */ + 0x691C, 0x6A29, 0x727D, 0x72AC, 0x732E, 0x7814, 0x786F, 0x7D79, + 0x770C, 0x80A9, 0x898B, 0x8B19, 0x8CE2, 0x8ED2, 0x9063, 0x9375, + 0x967A, 0x9855, 0x9A13, 0x9E78, 0x5143, 0x539F, 0x53B3, 0x5E7B, + 0x5F26, 0x6E1B, 0x6E90, 0x7384, 0x73FE, 0x7D43, 0x8237, 0x8A00, + 0x8AFA, 0x9650, 0x4E4E, 0x500B, 0x53E4, 0x547C, 0x56FA, 0x59D1, + 0x5B64, 0x5DF1, 0x5EAB, 0x5F27, 0x6238, 0x6545, 0x67AF, 0x6E56, + 0x72D0, 0x7CCA, 0x88B4, 0x80A1, 0x80E1, 0x83F0, 0x864E, 0x8A87, + 0x8DE8, 0x9237, 0x96C7, 0x9867, 0x9F13, 0x4E94, 0x4E92, 0x4F0D, + 0x5348, 0x5449, 0x543E, 0x5A2F, 0x5F8C, 0x5FA1, 0x609F, 0x68A7, + 0x6A8E, 0x745A, 0x7881, 0x8A9E, 0x8AA4, 0x8B77, 0x9190, 0x4E5E, + 0x9BC9, 0x4EA4, 0x4F7C, 0x4FAF, 0x5019, 0x5016, 0x5149, 0x516C, + 0x529F, 0x52B9, 0x52FE, 0x539A, 0x53E3, 0x5411}, + { /* category 25 */ + 0x540E, 0x5589, 0x5751, 0x57A2, 0x597D, 0x5B54, 0x5B5D, 0x5B8F, + 0x5DE5, 0x5DE7, 0x5DF7, 0x5E78, 0x5E83, 0x5E9A, 0x5EB7, 0x5F18, + 0x6052, 0x614C, 0x6297, 0x62D8, 0x63A7, 0x653B, 0x6602, 0x6643, + 0x66F4, 0x676D, 0x6821, 0x6897, 0x69CB, 0x6C5F, 0x6D2A, 0x6D69, + 0x6E2F, 0x6E9D, 0x7532, 0x7687, 0x786C, 0x7A3F, 0x7CE0, 0x7D05, + 0x7D18, 0x7D5E, 0x7DB1, 0x8015, 0x8003, 0x80AF, 0x80B1, 0x8154, + 0x818F, 0x822A, 0x8352, 0x884C, 0x8861, 0x8B1B, 0x8CA2, 0x8CFC, + 0x90CA, 0x9175, 0x9271, 0x783F, 0x92FC, 0x95A4, 0x964D, 0x9805, + 0x9999, 0x9AD8, 0x9D3B, 0x525B, 0x52AB, 0x53F7, 0x5408, 0x58D5, + 0x62F7, 0x6FE0, 0x8C6A, 0x8F5F, 0x9EB9, 0x514B, 0x523B, 0x544A, + 0x56FD, 0x7A40, 0x9177, 0x9D60, 0x9ED2, 0x7344, 0x6F09, 0x8170, + 0x7511, 0x5FFD, 0x60DA, 0x9AA8, 0x72DB, 0x8FBC}, + { /* category 26 */ + 0x6B64, 0x9803, 0x4ECA, 0x56F0, 0x5764, 0x58BE, 0x5A5A, 0x6068, + 0x61C7, 0x660F, 0x6606, 0x6839, 0x68B1, 0x6DF7, 0x75D5, 0x7D3A, + 0x826E, 0x9B42, 0x4E9B, 0x4F50, 0x53C9, 0x5506, 0x5D6F, 0x5DE6, + 0x5DEE, 0x67FB, 0x6C99, 0x7473, 0x7802, 0x8A50, 0x9396, 0x88DF, + 0x5750, 0x5EA7, 0x632B, 0x50B5, 0x50AC, 0x518D, 0x6700, 0x54C9, + 0x585E, 0x59BB, 0x5BB0, 0x5F69, 0x624D, 0x63A1, 0x683D, 0x6B73, + 0x6E08, 0x707D, 0x91C7, 0x7280, 0x7815, 0x7826, 0x796D, 0x658E, + 0x7D30, 0x83DC, 0x88C1, 0x8F09, 0x969B, 0x5264, 0x5728, 0x6750, + 0x7F6A, 0x8CA1, 0x51B4, 0x5742, 0x962A, 0x583A, 0x698A, 0x80B4, + 0x54B2, 0x5D0E, 0x57FC, 0x7895, 0x9DFA, 0x4F5C, 0x524A, 0x548B, + 0x643E, 0x6628, 0x6714, 0x67F5, 0x7A84, 0x7B56, 0x7D22, 0x932F, + 0x685C, 0x9BAD, 0x7B39, 0x5319, 0x518A, 0x5237}, + { /* category 27 */ + 0x5BDF, 0x62F6, 0x64AE, 0x64E6, 0x672D, 0x6BBA, 0x85A9, 0x96D1, + 0x7690, 0x9BD6, 0x634C, 0x9306, 0x9BAB, 0x76BF, 0x6652, 0x4E09, + 0x5098, 0x53C2, 0x5C71, 0x60E8, 0x6492, 0x6563, 0x685F, 0x71E6, + 0x73CA, 0x7523, 0x7B97, 0x7E82, 0x8695, 0x8B83, 0x8CDB, 0x9178, + 0x9910, 0x65AC, 0x66AB, 0x6B8B, 0x4ED5, 0x4ED4, 0x4F3A, 0x4F7F, + 0x523A, 0x53F8, 0x53F2, 0x55E3, 0x56DB, 0x58EB, 0x59CB, 0x59C9, + 0x59FF, 0x5B50, 0x5C4D, 0x5E02, 0x5E2B, 0x5FD7, 0x601D, 0x6307, + 0x652F, 0x5B5C, 0x65AF, 0x65BD, 0x65E8, 0x679D, 0x6B62, 0x6B7B, + 0x6C0F, 0x7345, 0x7949, 0x79C1, 0x7CF8, 0x7D19, 0x7D2B, 0x80A2, + 0x8102, 0x81F3, 0x8996, 0x8A5E, 0x8A69, 0x8A66, 0x8A8C, 0x8AEE, + 0x8CC7, 0x8CDC, 0x96CC, 0x98FC, 0x6B6F, 0x4E8B, 0x4F3C, 0x4F8D, + 0x5150, 0x5B57, 0x5BFA, 0x6148, 0x6301, 0x6642}, + { /* category 28 */ + 0x6B21, 0x6ECB, 0x6CBB, 0x723E, 0x74BD, 0x75D4, 0x78C1, 0x793A, + 0x800C, 0x8033, 0x81EA, 0x8494, 0x8F9E, 0x6C50, 0x9E7F, 0x5F0F, + 0x8B58, 0x9D2B, 0x7AFA, 0x8EF8, 0x5B8D, 0x96EB, 0x4E03, 0x53F1, + 0x57F7, 0x5931, 0x5AC9, 0x5BA4, 0x6089, 0x6E7F, 0x6F06, 0x75BE, + 0x8CEA, 0x5B9F, 0x8500, 0x7BE0, 0x5072, 0x67F4, 0x829D, 0x5C61, + 0x854A, 0x7E1E, 0x820E, 0x5199, 0x5C04, 0x6368, 0x8D66, 0x659C, + 0x716E, 0x793E, 0x7D17, 0x8005, 0x8B1D, 0x8ECA, 0x906E, 0x86C7, + 0x90AA, 0x501F, 0x52FA, 0x5C3A, 0x6753, 0x707C, 0x7235, 0x914C, + 0x91C8, 0x932B, 0x82E5, 0x5BC2, 0x5F31, 0x60F9, 0x4E3B, 0x53D6, + 0x5B88, 0x624B, 0x6731, 0x6B8A, 0x72E9, 0x73E0, 0x7A2E, 0x816B, + 0x8DA3, 0x9152, 0x9996, 0x5112, 0x53D7, 0x546A, 0x5BFF, 0x6388, + 0x6A39, 0x7DAC, 0x9700, 0x56DA, 0x53CE, 0x5468}, + { /* category 29 */ + 0x5B97, 0x5C31, 0x5DDE, 0x4FEE, 0x6101, 0x62FE, 0x6D32, 0x79C0, + 0x79CB, 0x7D42, 0x7E4D, 0x7FD2, 0x81ED, 0x821F, 0x8490, 0x8846, + 0x8972, 0x8B90, 0x8E74, 0x8F2F, 0x9031, 0x914B, 0x916C, 0x96C6, + 0x919C, 0x4EC0, 0x4F4F, 0x5145, 0x5341, 0x5F93, 0x620E, 0x67D4, + 0x6C41, 0x6E0B, 0x7363, 0x7E26, 0x91CD, 0x9283, 0x53D4, 0x5919, + 0x5BBF, 0x6DD1, 0x795D, 0x7E2E, 0x7C9B, 0x587E, 0x719F, 0x51FA, + 0x8853, 0x8FF0, 0x4FCA, 0x5CFB, 0x6625, 0x77AC, 0x7AE3, 0x821C, + 0x99FF, 0x51C6, 0x5FAA, 0x65EC, 0x696F, 0x6B89, 0x6DF3, 0x6E96, + 0x6F64, 0x76FE, 0x7D14, 0x5DE1, 0x9075, 0x9187, 0x9806, 0x51E6, + 0x521D, 0x6240, 0x6691, 0x66D9, 0x6E1A, 0x5EB6, 0x7DD2, 0x7F72, + 0x66F8, 0x85AF, 0x85F7, 0x8AF8, 0x52A9, 0x53D9, 0x5973, 0x5E8F, + 0x5F90, 0x6055, 0x92E4, 0x9664, 0x50B7, 0x511F}, + { /* category 30 */ + 0x52DD, 0x5320, 0x5347, 0x53EC, 0x54E8, 0x5546, 0x5531, 0x5617, + 0x5968, 0x59BE, 0x5A3C, 0x5BB5, 0x5C06, 0x5C0F, 0x5C11, 0x5C1A, + 0x5E84, 0x5E8A, 0x5EE0, 0x5F70, 0x627F, 0x6284, 0x62DB, 0x638C, + 0x6377, 0x6607, 0x660C, 0x662D, 0x6676, 0x677E, 0x68A2, 0x6A1F, + 0x6A35, 0x6CBC, 0x6D88, 0x6E09, 0x6E58, 0x713C, 0x7126, 0x7167, + 0x75C7, 0x7701, 0x785D, 0x7901, 0x7965, 0x79F0, 0x7AE0, 0x7B11, + 0x7CA7, 0x7D39, 0x8096, 0x83D6, 0x848B, 0x8549, 0x885D, 0x88F3, + 0x8A1F, 0x8A3C, 0x8A54, 0x8A73, 0x8C61, 0x8CDE, 0x91A4, 0x9266, + 0x937E, 0x9418, 0x969C, 0x9798, 0x4E0A, 0x4E08, 0x4E1E, 0x4E57, + 0x5197, 0x5270, 0x57CE, 0x5834, 0x58CC, 0x5B22, 0x5E38, 0x60C5, + 0x64FE, 0x6761, 0x6756, 0x6D44, 0x72B6, 0x7573, 0x7A63, 0x84B8, + 0x8B72, 0x91B8, 0x9320, 0x5631, 0x57F4, 0x98FE}, + { /* category 31 */ + 0x62ED, 0x690D, 0x6B96, 0x71ED, 0x7E54, 0x8077, 0x8272, 0x89E6, + 0x98DF, 0x8755, 0x8FB1, 0x5C3B, 0x4F38, 0x4FE1, 0x4FB5, 0x5507, + 0x5A20, 0x5BDD, 0x5BE9, 0x5FC3, 0x614E, 0x632F, 0x65B0, 0x664B, + 0x68EE, 0x699B, 0x6D78, 0x6DF1, 0x7533, 0x75B9, 0x771F, 0x795E, + 0x79E6, 0x7D33, 0x81E3, 0x82AF, 0x85AA, 0x89AA, 0x8A3A, 0x8EAB, + 0x8F9B, 0x9032, 0x91DD, 0x9707, 0x4EBA, 0x4EC1, 0x5203, 0x5875, + 0x58EC, 0x5C0B, 0x751A, 0x5C3D, 0x814E, 0x8A0A, 0x8FC5, 0x9663, + 0x976D, 0x7B25, 0x8ACF, 0x9808, 0x9162, 0x56F3, 0x53A8, 0x9017, + 0x5439, 0x5782, 0x5E25, 0x63A8, 0x6C34, 0x708A, 0x7761, 0x7C8B, + 0x7FE0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968F, 0x745E, + 0x9AC4, 0x5D07, 0x5D69, 0x6570, 0x67A2, 0x8DA8, 0x96DB, 0x636E, + 0x6749, 0x6919, 0x83C5, 0x9817, 0x96C0, 0x88FE}, + { /* category 32 */ + 0x6F84, 0x647A, 0x5BF8, 0x4E16, 0x702C, 0x755D, 0x662F, 0x51C4, + 0x5236, 0x52E2, 0x59D3, 0x5F81, 0x6027, 0x6210, 0x653F, 0x6574, + 0x661F, 0x6674, 0x68F2, 0x6816, 0x6B63, 0x6E05, 0x7272, 0x751F, + 0x76DB, 0x7CBE, 0x8056, 0x58F0, 0x88FD, 0x897F, 0x8AA0, 0x8A93, + 0x8ACB, 0x901D, 0x9192, 0x9752, 0x9759, 0x6589, 0x7A0E, 0x8106, + 0x96BB, 0x5E2D, 0x60DC, 0x621A, 0x65A5, 0x6614, 0x6790, 0x77F3, + 0x7A4D, 0x7C4D, 0x7E3E, 0x810A, 0x8CAC, 0x8D64, 0x8DE1, 0x8E5F, + 0x78A9, 0x5207, 0x62D9, 0x63A5, 0x6442, 0x6298, 0x8A2D, 0x7A83, + 0x7BC0, 0x8AAC, 0x96EA, 0x7D76, 0x820C, 0x8749, 0x4ED9, 0x5148, + 0x5343, 0x5360, 0x5BA3, 0x5C02, 0x5C16, 0x5DDD, 0x6226, 0x6247, + 0x64B0, 0x6813, 0x6834, 0x6CC9, 0x6D45, 0x6D17, 0x67D3, 0x6F5C, + 0x714E, 0x717D, 0x65CB, 0x7A7F, 0x7BAD, 0x7DDA}, + { /* category 33 */ + 0x7E4A, 0x7FA8, 0x817A, 0x821B, 0x8239, 0x85A6, 0x8A6E, 0x8CCE, + 0x8DF5, 0x9078, 0x9077, 0x92AD, 0x9291, 0x9583, 0x9BAE, 0x524D, + 0x5584, 0x6F38, 0x7136, 0x5168, 0x7985, 0x7E55, 0x81B3, 0x7CCE, + 0x564C, 0x5851, 0x5CA8, 0x63AA, 0x66FE, 0x66FD, 0x695A, 0x72D9, + 0x758F, 0x758E, 0x790E, 0x7956, 0x79DF, 0x7C97, 0x7D20, 0x7D44, + 0x8607, 0x8A34, 0x963B, 0x9061, 0x9F20, 0x50E7, 0x5275, 0x53CC, + 0x53E2, 0x5009, 0x55AA, 0x58EE, 0x594F, 0x723D, 0x5B8B, 0x5C64, + 0x531D, 0x60E3, 0x60F3, 0x635C, 0x6383, 0x633F, 0x63BB, 0x64CD, + 0x65E9, 0x66F9, 0x5DE3, 0x69CD, 0x69FD, 0x6F15, 0x71E5, 0x4E89, + 0x75E9, 0x76F8, 0x7A93, 0x7CDF, 0x7DCF, 0x7D9C, 0x8061, 0x8349, + 0x8358, 0x846C, 0x84BC, 0x85FB, 0x88C5, 0x8D70, 0x9001, 0x906D, + 0x9397, 0x971C, 0x9A12, 0x50CF, 0x5897, 0x618E}, + { /* category 34 */ + 0x81D3, 0x8535, 0x8D08, 0x9020, 0x4FC3, 0x5074, 0x5247, 0x5373, + 0x606F, 0x6349, 0x675F, 0x6E2C, 0x8DB3, 0x901F, 0x4FD7, 0x5C5E, + 0x8CCA, 0x65CF, 0x7D9A, 0x5352, 0x8896, 0x5176, 0x63C3, 0x5B58, + 0x5B6B, 0x5C0A, 0x640D, 0x6751, 0x905C, 0x4ED6, 0x591A, 0x592A, + 0x6C70, 0x8A51, 0x553E, 0x5815, 0x59A5, 0x60F0, 0x6253, 0x67C1, + 0x8235, 0x6955, 0x9640, 0x99C4, 0x9A28, 0x4F53, 0x5806, 0x5BFE, + 0x8010, 0x5CB1, 0x5E2F, 0x5F85, 0x6020, 0x614B, 0x6234, 0x66FF, + 0x6CF0, 0x6EDE, 0x80CE, 0x817F, 0x82D4, 0x888B, 0x8CB8, 0x9000, + 0x902E, 0x968A, 0x9EDB, 0x9BDB, 0x4EE3, 0x53F0, 0x5927, 0x7B2C, + 0x918D, 0x984C, 0x9DF9, 0x6EDD, 0x7027, 0x5353, 0x5544, 0x5B85, + 0x6258, 0x629E, 0x62D3, 0x6CA2, 0x6FEF, 0x7422, 0x8A17, 0x9438, + 0x6FC1, 0x8AFE, 0x8338, 0x51E7, 0x86F8, 0x53EA}, + { /* category 35 */ + 0x53E9, 0x4F46, 0x9054, 0x8FB0, 0x596A, 0x8131, 0x5DFD, 0x7AEA, + 0x8FBF, 0x68DA, 0x8C37, 0x72F8, 0x9C48, 0x6A3D, 0x8AB0, 0x4E39, + 0x5358, 0x5606, 0x5766, 0x62C5, 0x63A2, 0x65E6, 0x6B4E, 0x6DE1, + 0x6E5B, 0x70AD, 0x77ED, 0x7AEF, 0x7BAA, 0x7DBB, 0x803D, 0x80C6, + 0x86CB, 0x8A95, 0x935B, 0x56E3, 0x58C7, 0x5F3E, 0x65AD, 0x6696, + 0x6A80, 0x6BB5, 0x7537, 0x8AC7, 0x5024, 0x77E5, 0x5730, 0x5F1B, + 0x6065, 0x667A, 0x6C60, 0x75F4, 0x7A1A, 0x7F6E, 0x81F4, 0x8718, + 0x9045, 0x99B3, 0x7BC9, 0x755C, 0x7AF9, 0x7B51, 0x84C4, 0x9010, + 0x79E9, 0x7A92, 0x8336, 0x5AE1, 0x7740, 0x4E2D, 0x4EF2, 0x5B99, + 0x5FE0, 0x62BD, 0x663C, 0x67F1, 0x6CE8, 0x866B, 0x8877, 0x8A3B, + 0x914E, 0x92F3, 0x99D0, 0x6A17, 0x7026, 0x732A, 0x82E7, 0x8457, + 0x8CAF, 0x4E01, 0x5146, 0x51CB, 0x558B, 0x5BF5}, + { /* category 36 */ + 0x5E16, 0x5E33, 0x5E81, 0x5F14, 0x5F35, 0x5F6B, 0x5FB4, 0x61F2, + 0x6311, 0x66A2, 0x671D, 0x6F6E, 0x7252, 0x753A, 0x773A, 0x8074, + 0x8139, 0x8178, 0x8776, 0x8ABF, 0x8ADC, 0x8D85, 0x8DF3, 0x929A, + 0x9577, 0x9802, 0x9CE5, 0x52C5, 0x6357, 0x76F4, 0x6715, 0x6C88, + 0x73CD, 0x8CC3, 0x93AE, 0x9673, 0x6D25, 0x589C, 0x690E, 0x69CC, + 0x8FFD, 0x939A, 0x75DB, 0x901A, 0x585A, 0x6802, 0x63B4, 0x69FB, + 0x4F43, 0x6F2C, 0x67D8, 0x8FBB, 0x8526, 0x7DB4, 0x9354, 0x693F, + 0x6F70, 0x576A, 0x58F7, 0x5B2C, 0x7D2C, 0x722A, 0x540A, 0x91E3, + 0x9DB4, 0x4EAD, 0x4F4E, 0x505C, 0x5075, 0x5243, 0x8C9E, 0x5448, + 0x5824, 0x5B9A, 0x5E1D, 0x5E95, 0x5EAD, 0x5EF7, 0x5F1F, 0x608C, + 0x62B5, 0x633A, 0x63D0, 0x68AF, 0x6C40, 0x7887, 0x798E, 0x7A0B, + 0x7DE0, 0x8247, 0x8A02, 0x8AE6, 0x8E44, 0x9013}, + { /* category 37 */ + 0x90B8, 0x912D, 0x91D8, 0x9F0E, 0x6CE5, 0x6458, 0x64E2, 0x6575, + 0x6EF4, 0x7684, 0x7B1B, 0x9069, 0x93D1, 0x6EBA, 0x54F2, 0x5FB9, + 0x64A4, 0x8F4D, 0x8FED, 0x9244, 0x5178, 0x586B, 0x5929, 0x5C55, + 0x5E97, 0x6DFB, 0x7E8F, 0x751C, 0x8CBC, 0x8EE2, 0x985B, 0x70B9, + 0x4F1D, 0x6BBF, 0x6FB1, 0x7530, 0x96FB, 0x514E, 0x5410, 0x5835, + 0x5857, 0x59AC, 0x5C60, 0x5F92, 0x6597, 0x675C, 0x6E21, 0x767B, + 0x83DF, 0x8CED, 0x9014, 0x90FD, 0x934D, 0x7825, 0x783A, 0x52AA, + 0x5EA6, 0x571F, 0x5974, 0x6012, 0x5012, 0x515A, 0x51AC, 0x51CD, + 0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5B95, 0x5CF6, 0x5D8B, + 0x60BC, 0x6295, 0x642D, 0x6771, 0x6843, 0x68BC, 0x68DF, 0x76D7, + 0x6DD8, 0x6E6F, 0x6D9B, 0x706F, 0x71C8, 0x5F53, 0x75D8, 0x7977, + 0x7B49, 0x7B54, 0x7B52, 0x7CD6, 0x7D71, 0x5230}, + { /* category 38 */ + 0x8463, 0x8569, 0x85E4, 0x8A0E, 0x8B04, 0x8C46, 0x8E0F, 0x9003, + 0x900F, 0x9419, 0x9676, 0x982D, 0x9A30, 0x95D8, 0x50CD, 0x52D5, + 0x540C, 0x5802, 0x5C0E, 0x61A7, 0x649E, 0x6D1E, 0x77B3, 0x7AE5, + 0x80F4, 0x8404, 0x9053, 0x9285, 0x5CE0, 0x9D07, 0x533F, 0x5F97, + 0x5FB3, 0x6D9C, 0x7279, 0x7763, 0x79BF, 0x7BE4, 0x6BD2, 0x72EC, + 0x8AAD, 0x6803, 0x6A61, 0x51F8, 0x7A81, 0x6934, 0x5C4A, 0x9CF6, + 0x82EB, 0x5BC5, 0x9149, 0x701E, 0x5678, 0x5C6F, 0x60C7, 0x6566, + 0x6C8C, 0x8C5A, 0x9041, 0x9813, 0x5451, 0x66C7, 0x920D, 0x5948, + 0x90A3, 0x5185, 0x4E4D, 0x51EA, 0x8599, 0x8B0E, 0x7058, 0x637A, + 0x934B, 0x6962, 0x99B4, 0x7E04, 0x7577, 0x5357, 0x6960, 0x8EDF, + 0x96E3, 0x6C5D, 0x4E8C, 0x5C3C, 0x5F10, 0x8FE9, 0x5302, 0x8CD1, + 0x8089, 0x8679, 0x5EFF, 0x65E5, 0x4E73, 0x5165}, + { /* category 39 */ + 0x5982, 0x5C3F, 0x97EE, 0x4EFB, 0x598A, 0x5FCD, 0x8A8D, 0x6FE1, + 0x79B0, 0x7962, 0x5BE7, 0x8471, 0x732B, 0x71B1, 0x5E74, 0x5FF5, + 0x637B, 0x649A, 0x71C3, 0x7C98, 0x4E43, 0x5EFC, 0x4E4B, 0x57DC, + 0x56A2, 0x60A9, 0x6FC3, 0x7D0D, 0x80FD, 0x8133, 0x81BF, 0x8FB2, + 0x8997, 0x86A4, 0x5DF4, 0x628A, 0x64AD, 0x8987, 0x6777, 0x6CE2, + 0x6D3E, 0x7436, 0x7834, 0x5A46, 0x7F75, 0x82AD, 0x99AC, 0x4FF3, + 0x5EC3, 0x62DD, 0x6392, 0x6557, 0x676F, 0x76C3, 0x724C, 0x80CC, + 0x80BA, 0x8F29, 0x914D, 0x500D, 0x57F9, 0x5A92, 0x6885, 0x6973, + 0x7164, 0x72FD, 0x8CB7, 0x58F2, 0x8CE0, 0x966A, 0x9019, 0x877F, + 0x79E4, 0x77E7, 0x8429, 0x4F2F, 0x5265, 0x535A, 0x62CD, 0x67CF, + 0x6CCA, 0x767D, 0x7B94, 0x7C95, 0x8236, 0x8584, 0x8FEB, 0x66DD, + 0x6F20, 0x7206, 0x7E1B, 0x83AB, 0x99C1, 0x9EA6}, + { /* category 40 */ + 0x51FD, 0x7BB1, 0x7872, 0x7BB8, 0x8087, 0x7B48, 0x6AE8, 0x5E61, + 0x808C, 0x7551, 0x7560, 0x516B, 0x9262, 0x6E8C, 0x767A, 0x9197, + 0x9AEA, 0x4F10, 0x7F70, 0x629C, 0x7B4F, 0x95A5, 0x9CE9, 0x567A, + 0x5859, 0x86E4, 0x96BC, 0x4F34, 0x5224, 0x534A, 0x53CD, 0x53DB, + 0x5E06, 0x642C, 0x6591, 0x677F, 0x6C3E, 0x6C4E, 0x7248, 0x72AF, + 0x73ED, 0x7554, 0x7E41, 0x822C, 0x85E9, 0x8CA9, 0x7BC4, 0x91C6, + 0x7169, 0x9812, 0x98EF, 0x633D, 0x6669, 0x756A, 0x76E4, 0x78D0, + 0x8543, 0x86EE, 0x532A, 0x5351, 0x5426, 0x5983, 0x5E87, 0x5F7C, + 0x60B2, 0x6249, 0x6279, 0x62AB, 0x6590, 0x6BD4, 0x6CCC, 0x75B2, + 0x76AE, 0x7891, 0x79D8, 0x7DCB, 0x7F77, 0x80A5, 0x88AB, 0x8AB9, + 0x8CBB, 0x907F, 0x975E, 0x98DB, 0x6A0B, 0x7C38, 0x5099, 0x5C3E, + 0x5FAE, 0x6787, 0x6BD8, 0x7435, 0x7709, 0x7F8E}, + { /* category 41 */ + 0x9F3B, 0x67CA, 0x7A17, 0x5339, 0x758B, 0x9AED, 0x5F66, 0x819D, + 0x83F1, 0x8098, 0x5F3C, 0x5FC5, 0x7562, 0x7B46, 0x903C, 0x6867, + 0x59EB, 0x5A9B, 0x7D10, 0x767E, 0x8B2C, 0x4FF5, 0x5F6A, 0x6A19, + 0x6C37, 0x6F02, 0x74E2, 0x7968, 0x8868, 0x8A55, 0x8C79, 0x5EDF, + 0x63CF, 0x75C5, 0x79D2, 0x82D7, 0x9328, 0x92F2, 0x849C, 0x86ED, + 0x9C2D, 0x54C1, 0x5F6C, 0x658C, 0x6D5C, 0x7015, 0x8CA7, 0x8CD3, + 0x983B, 0x654F, 0x74F6, 0x4E0D, 0x4ED8, 0x57E0, 0x592B, 0x5A66, + 0x5BCC, 0x51A8, 0x5E03, 0x5E9C, 0x6016, 0x6276, 0x6577, 0x65A7, + 0x666E, 0x6D6E, 0x7236, 0x7B26, 0x8150, 0x819A, 0x8299, 0x8B5C, + 0x8CA0, 0x8CE6, 0x8D74, 0x961C, 0x9644, 0x4FAE, 0x64AB, 0x6B66, + 0x821E, 0x8461, 0x856A, 0x90E8, 0x5C01, 0x6953, 0x98A8, 0x847A, + 0x8557, 0x4F0F, 0x526F, 0x5FA9, 0x5E45, 0x670D}, + { /* category 42 */ + 0x798F, 0x8179, 0x8907, 0x8986, 0x6DF5, 0x5F17, 0x6255, 0x6CB8, + 0x4ECF, 0x7269, 0x9B92, 0x5206, 0x543B, 0x5674, 0x58B3, 0x61A4, + 0x626E, 0x711A, 0x596E, 0x7C89, 0x7CDE, 0x7D1B, 0x96F0, 0x6587, + 0x805E, 0x4E19, 0x4F75, 0x5175, 0x5840, 0x5E63, 0x5E73, 0x5F0A, + 0x67C4, 0x4E26, 0x853D, 0x9589, 0x965B, 0x7C73, 0x9801, 0x50FB, + 0x58C1, 0x7656, 0x78A7, 0x5225, 0x77A5, 0x8511, 0x7B86, 0x504F, + 0x5909, 0x7247, 0x7BC7, 0x7DE8, 0x8FBA, 0x8FD4, 0x904D, 0x4FBF, + 0x52C9, 0x5A29, 0x5F01, 0x97AD, 0x4FDD, 0x8217, 0x92EA, 0x5703, + 0x6355, 0x6B69, 0x752B, 0x88DC, 0x8F14, 0x7A42, 0x52DF, 0x5893, + 0x6155, 0x620A, 0x66AE, 0x6BCD, 0x7C3F, 0x83E9, 0x5023, 0x4FF8, + 0x5305, 0x5446, 0x5831, 0x5949, 0x5B9D, 0x5CF0, 0x5CEF, 0x5D29, + 0x5E96, 0x62B1, 0x6367, 0x653E, 0x65B9, 0x670B}, + { /* category 43 */ + 0x6CD5, 0x6CE1, 0x70F9, 0x7832, 0x7E2B, 0x80DE, 0x82B3, 0x840C, + 0x84EC, 0x8702, 0x8912, 0x8A2A, 0x8C4A, 0x90A6, 0x92D2, 0x98FD, + 0x9CF3, 0x9D6C, 0x4E4F, 0x4EA1, 0x508D, 0x5256, 0x574A, 0x59A8, + 0x5E3D, 0x5FD8, 0x5FD9, 0x623F, 0x66B4, 0x671B, 0x67D0, 0x68D2, + 0x5192, 0x7D21, 0x80AA, 0x81A8, 0x8B00, 0x8C8C, 0x8CBF, 0x927E, + 0x9632, 0x5420, 0x982C, 0x5317, 0x50D5, 0x535C, 0x58A8, 0x64B2, + 0x6734, 0x7267, 0x7766, 0x7A46, 0x91E6, 0x52C3, 0x6CA1, 0x6B86, + 0x5800, 0x5E4C, 0x5954, 0x672C, 0x7FFB, 0x51E1, 0x76C6, 0x6469, + 0x78E8, 0x9B54, 0x9EBB, 0x57CB, 0x59B9, 0x6627, 0x679A, 0x6BCE, + 0x54E9, 0x69D9, 0x5E55, 0x819C, 0x6795, 0x9BAA, 0x67FE, 0x9C52, + 0x685D, 0x4EA6, 0x4FE3, 0x53C8, 0x62B9, 0x672B, 0x6CAB, 0x8FC4, + 0x4FAD, 0x7E6D, 0x9EBF, 0x4E07, 0x6162, 0x6E80}, + { /* category 44 */ + 0x6F2B, 0x8513, 0x5473, 0x672A, 0x9B45, 0x5DF3, 0x7B95, 0x5CAC, + 0x5BC6, 0x871C, 0x6E4A, 0x84D1, 0x7A14, 0x8108, 0x5999, 0x7C8D, + 0x6C11, 0x7720, 0x52D9, 0x5922, 0x7121, 0x725F, 0x77DB, 0x9727, + 0x9D61, 0x690B, 0x5A7F, 0x5A18, 0x51A5, 0x540D, 0x547D, 0x660E, + 0x76DF, 0x8FF7, 0x9298, 0x9CF4, 0x59EA, 0x725D, 0x6EC5, 0x514D, + 0x68C9, 0x7DBF, 0x7DEC, 0x9762, 0x9EBA, 0x6478, 0x6A21, 0x8302, + 0x5984, 0x5B5F, 0x6BDB, 0x731B, 0x76F2, 0x7DB2, 0x8017, 0x8499, + 0x5132, 0x6728, 0x9ED9, 0x76EE, 0x6762, 0x52FF, 0x9905, 0x5C24, + 0x623B, 0x7C7E, 0x8CB0, 0x554F, 0x60B6, 0x7D0B, 0x9580, 0x5301, + 0x4E5F, 0x51B6, 0x591C, 0x723A, 0x8036, 0x91CE, 0x5F25, 0x77E2, + 0x5384, 0x5F79, 0x7D04, 0x85AC, 0x8A33, 0x8E8D, 0x9756, 0x67F3, + 0x85AE, 0x9453, 0x6109, 0x6108, 0x6CB9, 0x7652}, + { /* category 45 */ + 0x8AED, 0x8F38, 0x552F, 0x4F51, 0x512A, 0x52C7, 0x53CB, 0x5BA5, + 0x5E7D, 0x60A0, 0x6182, 0x63D6, 0x6709, 0x67DA, 0x6E67, 0x6D8C, + 0x7336, 0x7337, 0x7531, 0x7950, 0x88D5, 0x8A98, 0x904A, 0x9091, + 0x90F5, 0x96C4, 0x878D, 0x5915, 0x4E88, 0x4F59, 0x4E0E, 0x8A89, + 0x8F3F, 0x9810, 0x50AD, 0x5E7C, 0x5996, 0x5BB9, 0x5EB8, 0x63DA, + 0x63FA, 0x64C1, 0x66DC, 0x694A, 0x69D8, 0x6D0B, 0x6EB6, 0x7194, + 0x7528, 0x7AAF, 0x7F8A, 0x8000, 0x8449, 0x84C9, 0x8981, 0x8B21, + 0x8E0A, 0x9065, 0x967D, 0x990A, 0x617E, 0x6291, 0x6B32, 0x6C83, + 0x6D74, 0x7FCC, 0x7FFC, 0x6DC0, 0x7F85, 0x87BA, 0x88F8, 0x6765, + 0x83B1, 0x983C, 0x96F7, 0x6D1B, 0x7D61, 0x843D, 0x916A, 0x4E71, + 0x5375, 0x5D50, 0x6B04, 0x6FEB, 0x85CD, 0x862D, 0x89A7, 0x5229, + 0x540F, 0x5C65, 0x674E, 0x68A8, 0x7406, 0x7483}, + { /* category 46 */ + 0x75E2, 0x88CF, 0x88E1, 0x91CC, 0x96E2, 0x9678, 0x5F8B, 0x7387, + 0x7ACB, 0x844E, 0x63A0, 0x7565, 0x5289, 0x6D41, 0x6E9C, 0x7409, + 0x7559, 0x786B, 0x7C92, 0x9686, 0x7ADC, 0x9F8D, 0x4FB6, 0x616E, + 0x65C5, 0x865C, 0x4E86, 0x4EAE, 0x50DA, 0x4E21, 0x51CC, 0x5BEE, + 0x6599, 0x6881, 0x6DBC, 0x731F, 0x7642, 0x77AD, 0x7A1C, 0x7CE7, + 0x826F, 0x8AD2, 0x907C, 0x91CF, 0x9675, 0x9818, 0x529B, 0x7DD1, + 0x502B, 0x5398, 0x6797, 0x6DCB, 0x71D0, 0x7433, 0x81E8, 0x8F2A, + 0x96A3, 0x9C57, 0x9E9F, 0x7460, 0x5841, 0x6D99, 0x7D2F, 0x985E, + 0x4EE4, 0x4F36, 0x4F8B, 0x51B7, 0x52B1, 0x5DBA, 0x601C, 0x73B2, + 0x793C, 0x82D3, 0x9234, 0x96B7, 0x96F6, 0x970A, 0x9E97, 0x9F62, + 0x66A6, 0x6B74, 0x5217, 0x52A3, 0x70C8, 0x88C2, 0x5EC9, 0x604B, + 0x6190, 0x6F23, 0x7149, 0x7C3E, 0x7DF4, 0x806F}, + { /* category 47 */ + 0x84EE, 0x9023, 0x932C, 0x5442, 0x9B6F, 0x6AD3, 0x7089, 0x8CC2, + 0x8DEF, 0x9732, 0x52B4, 0x5A41, 0x5ECA, 0x5F04, 0x6717, 0x697C, + 0x6994, 0x6D6A, 0x6F0F, 0x7262, 0x72FC, 0x7BED, 0x8001, 0x807E, + 0x874B, 0x90CE, 0x516D, 0x9E93, 0x7984, 0x808B, 0x9332, 0x8AD6, + 0x502D, 0x548C, 0x8A71, 0x6B6A, 0x8CC4, 0x8107, 0x60D1, 0x67A0, + 0x9DF2, 0x4E99, 0x4E98, 0x9C10, 0x8A6B, 0x85C1, 0x8568, 0x6900, + 0x6E7E, 0x7897, 0x8155, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 48 */ + 0x5F0C, 0x4E10, 0x4E15, 0x4E2A, 0x4E31, 0x4E36, 0x4E3C, 0x4E3F, + 0x4E42, 0x4E56, 0x4E58, 0x4E82, 0x4E85, 0x8C6B, 0x4E8A, 0x8212, + 0x5F0D, 0x4E8E, 0x4E9E, 0x4E9F, 0x4EA0, 0x4EA2, 0x4EB0, 0x4EB3, + 0x4EB6, 0x4ECE, 0x4ECD, 0x4EC4, 0x4EC6, 0x4EC2, 0x4ED7, 0x4EDE, + 0x4EED, 0x4EDF, 0x4EF7, 0x4F09, 0x4F5A, 0x4F30, 0x4F5B, 0x4F5D, + 0x4F57, 0x4F47, 0x4F76, 0x4F88, 0x4F8F, 0x4F98, 0x4F7B, 0x4F69, + 0x4F70, 0x4F91, 0x4F6F, 0x4F86, 0x4F96, 0x5118, 0x4FD4, 0x4FDF, + 0x4FCE, 0x4FD8, 0x4FDB, 0x4FD1, 0x4FDA, 0x4FD0, 0x4FE4, 0x4FE5, + 0x501A, 0x5028, 0x5014, 0x502A, 0x5025, 0x5005, 0x4F1C, 0x4FF6, + 0x5021, 0x5029, 0x502C, 0x4FFE, 0x4FEF, 0x5011, 0x5006, 0x5043, + 0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505A, 0x5056, 0x506C, + 0x5078, 0x5080, 0x509A, 0x5085, 0x50B4, 0x50B2}, + { /* category 49 */ + 0x50C9, 0x50CA, 0x50B3, 0x50C2, 0x50D6, 0x50DE, 0x50E5, 0x50ED, + 0x50E3, 0x50EE, 0x50F9, 0x50F5, 0x5109, 0x5101, 0x5102, 0x5116, + 0x5115, 0x5114, 0x511A, 0x5121, 0x513A, 0x5137, 0x513C, 0x513B, + 0x513F, 0x5140, 0x5152, 0x514C, 0x5154, 0x5162, 0x7AF8, 0x5169, + 0x516A, 0x516E, 0x5180, 0x5182, 0x56D8, 0x518C, 0x5189, 0x518F, + 0x5191, 0x5193, 0x5195, 0x5196, 0x51A4, 0x51A6, 0x51A2, 0x51A9, + 0x51AA, 0x51AB, 0x51B3, 0x51B1, 0x51B2, 0x51B0, 0x51B5, 0x51BD, + 0x51C5, 0x51C9, 0x51DB, 0x51E0, 0x8655, 0x51E9, 0x51ED, 0x51F0, + 0x51F5, 0x51FE, 0x5204, 0x520B, 0x5214, 0x520E, 0x5227, 0x522A, + 0x522E, 0x5233, 0x5239, 0x524F, 0x5244, 0x524B, 0x524C, 0x525E, + 0x5254, 0x526A, 0x5274, 0x5269, 0x5273, 0x527F, 0x527D, 0x528D, + 0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8FA8}, + { /* category 50 */ + 0x8FA7, 0x52AC, 0x52AD, 0x52BC, 0x52B5, 0x52C1, 0x52CD, 0x52D7, + 0x52DE, 0x52E3, 0x52E6, 0x98ED, 0x52E0, 0x52F3, 0x52F5, 0x52F8, + 0x52F9, 0x5306, 0x5308, 0x7538, 0x530D, 0x5310, 0x530F, 0x5315, + 0x531A, 0x5323, 0x532F, 0x5331, 0x5333, 0x5338, 0x5340, 0x5346, + 0x5345, 0x4E17, 0x5349, 0x534D, 0x51D6, 0x535E, 0x5369, 0x536E, + 0x5918, 0x537B, 0x5377, 0x5382, 0x5396, 0x53A0, 0x53A6, 0x53A5, + 0x53AE, 0x53B0, 0x53B6, 0x53C3, 0x7C12, 0x96D9, 0x53DF, 0x66FC, + 0x71EE, 0x53EE, 0x53E8, 0x53ED, 0x53FA, 0x5401, 0x543D, 0x5440, + 0x542C, 0x542D, 0x543C, 0x542E, 0x5436, 0x5429, 0x541D, 0x544E, + 0x548F, 0x5475, 0x548E, 0x545F, 0x5471, 0x5477, 0x5470, 0x5492, + 0x547B, 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54C7, 0x54A2, + 0x54B8, 0x54A5, 0x54AC, 0x54C4, 0x54C8, 0x54A8}, + { /* category 51 */ + 0x54AB, 0x54C2, 0x54A4, 0x54BE, 0x54BC, 0x54D8, 0x54E5, 0x54E6, + 0x550F, 0x5514, 0x54FD, 0x54EE, 0x54ED, 0x54FA, 0x54E2, 0x5539, + 0x5540, 0x5563, 0x554C, 0x552E, 0x555C, 0x5545, 0x5556, 0x5557, + 0x5538, 0x5533, 0x555D, 0x5599, 0x5580, 0x54AF, 0x558A, 0x559F, + 0x557B, 0x557E, 0x5598, 0x559E, 0x55AE, 0x557C, 0x5583, 0x55A9, + 0x5587, 0x55A8, 0x55DA, 0x55C5, 0x55DF, 0x55C4, 0x55DC, 0x55E4, + 0x55D4, 0x5614, 0x55F7, 0x5616, 0x55FE, 0x55FD, 0x561B, 0x55F9, + 0x564E, 0x5650, 0x71DF, 0x5634, 0x5636, 0x5632, 0x5638, 0x566B, + 0x5664, 0x562F, 0x566C, 0x566A, 0x5686, 0x5680, 0x568A, 0x56A0, + 0x5694, 0x568F, 0x56A5, 0x56AE, 0x56B6, 0x56B4, 0x56C2, 0x56BC, + 0x56C1, 0x56C3, 0x56C0, 0x56C8, 0x56CE, 0x56D1, 0x56D3, 0x56D7, + 0x56EE, 0x56F9, 0x5700, 0x56FF, 0x5704, 0x5709}, + { /* category 52 */ + 0x5708, 0x570B, 0x570D, 0x5713, 0x5718, 0x5716, 0x55C7, 0x571C, + 0x5726, 0x5737, 0x5738, 0x574E, 0x573B, 0x5740, 0x574F, 0x5769, + 0x57C0, 0x5788, 0x5761, 0x577F, 0x5789, 0x5793, 0x57A0, 0x57B3, + 0x57A4, 0x57AA, 0x57B0, 0x57C3, 0x57C6, 0x57D4, 0x57D2, 0x57D3, + 0x580A, 0x57D6, 0x57E3, 0x580B, 0x5819, 0x581D, 0x5872, 0x5821, + 0x5862, 0x584B, 0x5870, 0x6BC0, 0x5852, 0x583D, 0x5879, 0x5885, + 0x58B9, 0x589F, 0x58AB, 0x58BA, 0x58DE, 0x58BB, 0x58B8, 0x58AE, + 0x58C5, 0x58D3, 0x58D1, 0x58D7, 0x58D9, 0x58D8, 0x58E5, 0x58DC, + 0x58E4, 0x58DF, 0x58EF, 0x58FA, 0x58F9, 0x58FB, 0x58FC, 0x58FD, + 0x5902, 0x590A, 0x5910, 0x591B, 0x68A6, 0x5925, 0x592C, 0x592D, + 0x5932, 0x5938, 0x593E, 0x7AD2, 0x5955, 0x5950, 0x594E, 0x595A, + 0x5958, 0x5962, 0x5960, 0x5967, 0x596C, 0x5969}, + { /* category 53 */ + 0x5978, 0x5981, 0x599D, 0x4F5E, 0x4FAB, 0x59A3, 0x59B2, 0x59C6, + 0x59E8, 0x59DC, 0x598D, 0x59D9, 0x59DA, 0x5A25, 0x5A1F, 0x5A11, + 0x5A1C, 0x5A09, 0x5A1A, 0x5A40, 0x5A6C, 0x5A49, 0x5A35, 0x5A36, + 0x5A62, 0x5A6A, 0x5A9A, 0x5ABC, 0x5ABE, 0x5ACB, 0x5AC2, 0x5ABD, + 0x5AE3, 0x5AD7, 0x5AE6, 0x5AE9, 0x5AD6, 0x5AFA, 0x5AFB, 0x5B0C, + 0x5B0B, 0x5B16, 0x5B32, 0x5AD0, 0x5B2A, 0x5B36, 0x5B3E, 0x5B43, + 0x5B45, 0x5B40, 0x5B51, 0x5B55, 0x5B5A, 0x5B5B, 0x5B65, 0x5B69, + 0x5B70, 0x5B73, 0x5B75, 0x5B78, 0x6588, 0x5B7A, 0x5B80, 0x5B83, + 0x5BA6, 0x5BB8, 0x5BC3, 0x5BC7, 0x5BC9, 0x5BD4, 0x5BD0, 0x5BE4, + 0x5BE6, 0x5BE2, 0x5BDE, 0x5BE5, 0x5BEB, 0x5BF0, 0x5BF6, 0x5BF3, + 0x5C05, 0x5C07, 0x5C08, 0x5C0D, 0x5C13, 0x5C20, 0x5C22, 0x5C28, + 0x5C38, 0x5C39, 0x5C41, 0x5C46, 0x5C4E, 0x5C53}, + { /* category 54 */ + 0x5C50, 0x5C4F, 0x5B71, 0x5C6C, 0x5C6E, 0x4E62, 0x5C76, 0x5C79, + 0x5C8C, 0x5C91, 0x5C94, 0x599B, 0x5CAB, 0x5CBB, 0x5CB6, 0x5CBC, + 0x5CB7, 0x5CC5, 0x5CBE, 0x5CC7, 0x5CD9, 0x5CE9, 0x5CFD, 0x5CFA, + 0x5CED, 0x5D8C, 0x5CEA, 0x5D0B, 0x5D15, 0x5D17, 0x5D5C, 0x5D1F, + 0x5D1B, 0x5D11, 0x5D14, 0x5D22, 0x5D1A, 0x5D19, 0x5D18, 0x5D4C, + 0x5D52, 0x5D4E, 0x5D4B, 0x5D6C, 0x5D73, 0x5D76, 0x5D87, 0x5D84, + 0x5D82, 0x5DA2, 0x5D9D, 0x5DAC, 0x5DAE, 0x5DBD, 0x5D90, 0x5DB7, + 0x5DBC, 0x5DC9, 0x5DCD, 0x5DD3, 0x5DD2, 0x5DD6, 0x5DDB, 0x5DEB, + 0x5DF2, 0x5DF5, 0x5E0B, 0x5E1A, 0x5E19, 0x5E11, 0x5E1B, 0x5E36, + 0x5E37, 0x5E44, 0x5E43, 0x5E40, 0x5E4E, 0x5E57, 0x5E54, 0x5E5F, + 0x5E62, 0x5E64, 0x5E47, 0x5E75, 0x5E76, 0x5E7A, 0x9EBC, 0x5E7F, + 0x5EA0, 0x5EC1, 0x5EC2, 0x5EC8, 0x5ED0, 0x5ECF}, + { /* category 55 */ + 0x5ED6, 0x5EE3, 0x5EDD, 0x5EDA, 0x5EDB, 0x5EE2, 0x5EE1, 0x5EE8, + 0x5EE9, 0x5EEC, 0x5EF1, 0x5EF3, 0x5EF0, 0x5EF4, 0x5EF8, 0x5EFE, + 0x5F03, 0x5F09, 0x5F5D, 0x5F5C, 0x5F0B, 0x5F11, 0x5F16, 0x5F29, + 0x5F2D, 0x5F38, 0x5F41, 0x5F48, 0x5F4C, 0x5F4E, 0x5F2F, 0x5F51, + 0x5F56, 0x5F57, 0x5F59, 0x5F61, 0x5F6D, 0x5F73, 0x5F77, 0x5F83, + 0x5F82, 0x5F7F, 0x5F8A, 0x5F88, 0x5F91, 0x5F87, 0x5F9E, 0x5F99, + 0x5F98, 0x5FA0, 0x5FA8, 0x5FAD, 0x5FBC, 0x5FD6, 0x5FFB, 0x5FE4, + 0x5FF8, 0x5FF1, 0x5FDD, 0x60B3, 0x5FFF, 0x6021, 0x6060, 0x6019, + 0x6010, 0x6029, 0x600E, 0x6031, 0x601B, 0x6015, 0x602B, 0x6026, + 0x600F, 0x603A, 0x605A, 0x6041, 0x606A, 0x6077, 0x605F, 0x604A, + 0x6046, 0x604D, 0x6063, 0x6043, 0x6064, 0x6042, 0x606C, 0x606B, + 0x6059, 0x6081, 0x608D, 0x60E7, 0x6083, 0x609A}, + { /* category 56 */ + 0x6084, 0x609B, 0x6096, 0x6097, 0x6092, 0x60A7, 0x608B, 0x60E1, + 0x60B8, 0x60E0, 0x60D3, 0x60B4, 0x5FF0, 0x60BD, 0x60C6, 0x60B5, + 0x60D8, 0x614D, 0x6115, 0x6106, 0x60F6, 0x60F7, 0x6100, 0x60F4, + 0x60FA, 0x6103, 0x6121, 0x60FB, 0x60F1, 0x610D, 0x610E, 0x6147, + 0x613E, 0x6128, 0x6127, 0x614A, 0x613F, 0x613C, 0x612C, 0x6134, + 0x613D, 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159, 0x615A, + 0x616B, 0x6174, 0x616F, 0x6165, 0x6171, 0x615F, 0x615D, 0x6153, + 0x6175, 0x6199, 0x6196, 0x6187, 0x61AC, 0x6194, 0x619A, 0x618A, + 0x6191, 0x61AB, 0x61AE, 0x61CC, 0x61CA, 0x61C9, 0x61F7, 0x61C8, + 0x61C3, 0x61C6, 0x61BA, 0x61CB, 0x7F79, 0x61CD, 0x61E6, 0x61E3, + 0x61F6, 0x61FA, 0x61F4, 0x61FF, 0x61FD, 0x61FC, 0x61FE, 0x6200, + 0x6208, 0x6209, 0x620D, 0x620C, 0x6214, 0x621B}, + { /* category 57 */ + 0x621E, 0x6221, 0x622A, 0x622E, 0x6230, 0x6232, 0x6233, 0x6241, + 0x624E, 0x625E, 0x6263, 0x625B, 0x6260, 0x6268, 0x627C, 0x6282, + 0x6289, 0x627E, 0x6292, 0x6293, 0x6296, 0x62D4, 0x6283, 0x6294, + 0x62D7, 0x62D1, 0x62BB, 0x62CF, 0x62FF, 0x62C6, 0x64D4, 0x62C8, + 0x62DC, 0x62CC, 0x62CA, 0x62C2, 0x62C7, 0x629B, 0x62C9, 0x630C, + 0x62EE, 0x62F1, 0x6327, 0x6302, 0x6308, 0x62EF, 0x62F5, 0x6350, + 0x633E, 0x634D, 0x641C, 0x634F, 0x6396, 0x638E, 0x6380, 0x63AB, + 0x6376, 0x63A3, 0x638F, 0x6389, 0x639F, 0x63B5, 0x636B, 0x6369, + 0x63BE, 0x63E9, 0x63C0, 0x63C6, 0x63E3, 0x63C9, 0x63D2, 0x63F6, + 0x63C4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, 0x651D, + 0x6417, 0x6428, 0x640F, 0x6467, 0x646F, 0x6476, 0x644E, 0x652A, + 0x6495, 0x6493, 0x64A5, 0x64A9, 0x6488, 0x64BC}, + { /* category 58 */ + 0x64DA, 0x64D2, 0x64C5, 0x64C7, 0x64BB, 0x64D8, 0x64C2, 0x64F1, + 0x64E7, 0x8209, 0x64E0, 0x64E1, 0x62AC, 0x64E3, 0x64EF, 0x652C, + 0x64F6, 0x64F4, 0x64F2, 0x64FA, 0x6500, 0x64FD, 0x6518, 0x651C, + 0x6505, 0x6524, 0x6523, 0x652B, 0x6534, 0x6535, 0x6537, 0x6536, + 0x6538, 0x754B, 0x6548, 0x6556, 0x6555, 0x654D, 0x6558, 0x655E, + 0x655D, 0x6572, 0x6578, 0x6582, 0x6583, 0x8B8A, 0x659B, 0x659F, + 0x65AB, 0x65B7, 0x65C3, 0x65C6, 0x65C1, 0x65C4, 0x65CC, 0x65D2, + 0x65DB, 0x65D9, 0x65E0, 0x65E1, 0x65F1, 0x6772, 0x660A, 0x6603, + 0x65FB, 0x6773, 0x6635, 0x6636, 0x6634, 0x661C, 0x664F, 0x6644, + 0x6649, 0x6641, 0x665E, 0x665D, 0x6664, 0x6667, 0x6668, 0x665F, + 0x6662, 0x6670, 0x6683, 0x6688, 0x668E, 0x6689, 0x6684, 0x6698, + 0x669D, 0x66C1, 0x66B9, 0x66C9, 0x66BE, 0x66BC}, + { /* category 59 */ + 0x66C4, 0x66B8, 0x66D6, 0x66DA, 0x66E0, 0x663F, 0x66E6, 0x66E9, + 0x66F0, 0x66F5, 0x66F7, 0x670F, 0x6716, 0x671E, 0x6726, 0x6727, + 0x9738, 0x672E, 0x673F, 0x6736, 0x6741, 0x6738, 0x6737, 0x6746, + 0x675E, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, 0x67A9, + 0x677C, 0x676A, 0x678C, 0x678B, 0x67A6, 0x67A1, 0x6785, 0x67B7, + 0x67EF, 0x67B4, 0x67EC, 0x67B3, 0x67E9, 0x67B8, 0x67E4, 0x67DE, + 0x67DD, 0x67E2, 0x67EE, 0x67B9, 0x67CE, 0x67C6, 0x67E7, 0x6A9C, + 0x681E, 0x6846, 0x6829, 0x6840, 0x684D, 0x6832, 0x684E, 0x68B3, + 0x682B, 0x6859, 0x6863, 0x6877, 0x687F, 0x689F, 0x688F, 0x68AD, + 0x6894, 0x689D, 0x689B, 0x6883, 0x6AAE, 0x68B9, 0x6874, 0x68B5, + 0x68A0, 0x68BA, 0x690F, 0x688D, 0x687E, 0x6901, 0x68CA, 0x6908, + 0x68D8, 0x6922, 0x6926, 0x68E1, 0x690C, 0x68CD}, + { /* category 60 */ + 0x68D4, 0x68E7, 0x68D5, 0x6936, 0x6912, 0x6904, 0x68D7, 0x68E3, + 0x6925, 0x68F9, 0x68E0, 0x68EF, 0x6928, 0x692A, 0x691A, 0x6923, + 0x6921, 0x68C6, 0x6979, 0x6977, 0x695C, 0x6978, 0x696B, 0x6954, + 0x697E, 0x696E, 0x6939, 0x6974, 0x693D, 0x6959, 0x6930, 0x6961, + 0x695E, 0x695D, 0x6981, 0x696A, 0x69B2, 0x69AE, 0x69D0, 0x69BF, + 0x69C1, 0x69D3, 0x69BE, 0x69CE, 0x5BE8, 0x69CA, 0x69DD, 0x69BB, + 0x69C3, 0x69A7, 0x6A2E, 0x6991, 0x69A0, 0x699C, 0x6995, 0x69B4, + 0x69DE, 0x69E8, 0x6A02, 0x6A1B, 0x69FF, 0x6B0A, 0x69F9, 0x69F2, + 0x69E7, 0x6A05, 0x69B1, 0x6A1E, 0x69ED, 0x6A14, 0x69EB, 0x6A0A, + 0x6A12, 0x6AC1, 0x6A23, 0x6A13, 0x6A44, 0x6A0C, 0x6A72, 0x6A36, + 0x6A78, 0x6A47, 0x6A62, 0x6A59, 0x6A66, 0x6A48, 0x6A38, 0x6A22, + 0x6A90, 0x6A8D, 0x6AA0, 0x6A84, 0x6AA2, 0x6AA3}, + { /* category 61 */ + 0x6A97, 0x8617, 0x6ABB, 0x6AC3, 0x6AC2, 0x6AB8, 0x6AB3, 0x6AAC, + 0x6ADE, 0x6AD1, 0x6ADF, 0x6AAA, 0x6ADA, 0x6AEA, 0x6AFB, 0x6B05, + 0x8616, 0x6AFA, 0x6B12, 0x6B16, 0x9B31, 0x6B1F, 0x6B38, 0x6B37, + 0x76DC, 0x6B39, 0x98EE, 0x6B47, 0x6B43, 0x6B49, 0x6B50, 0x6B59, + 0x6B54, 0x6B5B, 0x6B5F, 0x6B61, 0x6B78, 0x6B79, 0x6B7F, 0x6B80, + 0x6B84, 0x6B83, 0x6B8D, 0x6B98, 0x6B95, 0x6B9E, 0x6BA4, 0x6BAA, + 0x6BAB, 0x6BAF, 0x6BB2, 0x6BB1, 0x6BB3, 0x6BB7, 0x6BBC, 0x6BC6, + 0x6BCB, 0x6BD3, 0x6BDF, 0x6BEC, 0x6BEB, 0x6BF3, 0x6BEF, 0x9EBE, + 0x6C08, 0x6C13, 0x6C14, 0x6C1B, 0x6C24, 0x6C23, 0x6C5E, 0x6C55, + 0x6C62, 0x6C6A, 0x6C82, 0x6C8D, 0x6C9A, 0x6C81, 0x6C9B, 0x6C7E, + 0x6C68, 0x6C73, 0x6C92, 0x6C90, 0x6CC4, 0x6CF1, 0x6CD3, 0x6CBD, + 0x6CD7, 0x6CC5, 0x6CDD, 0x6CAE, 0x6CB1, 0x6CBE}, + { /* category 62 */ + 0x6CBA, 0x6CDB, 0x6CEF, 0x6CD9, 0x6CEA, 0x6D1F, 0x884D, 0x6D36, + 0x6D2B, 0x6D3D, 0x6D38, 0x6D19, 0x6D35, 0x6D33, 0x6D12, 0x6D0C, + 0x6D63, 0x6D93, 0x6D64, 0x6D5A, 0x6D79, 0x6D59, 0x6D8E, 0x6D95, + 0x6FE4, 0x6D85, 0x6DF9, 0x6E15, 0x6E0A, 0x6DB5, 0x6DC7, 0x6DE6, + 0x6DB8, 0x6DC6, 0x6DEC, 0x6DDE, 0x6DCC, 0x6DE8, 0x6DD2, 0x6DC5, + 0x6DFA, 0x6DD9, 0x6DE4, 0x6DD5, 0x6DEA, 0x6DEE, 0x6E2D, 0x6E6E, + 0x6E2E, 0x6E19, 0x6E72, 0x6E5F, 0x6E3E, 0x6E23, 0x6E6B, 0x6E2B, + 0x6E76, 0x6E4D, 0x6E1F, 0x6E43, 0x6E3A, 0x6E4E, 0x6E24, 0x6EFF, + 0x6E1D, 0x6E38, 0x6E82, 0x6EAA, 0x6E98, 0x6EC9, 0x6EB7, 0x6ED3, + 0x6EBD, 0x6EAF, 0x6EC4, 0x6EB2, 0x6ED4, 0x6ED5, 0x6E8F, 0x6EA5, + 0x6EC2, 0x6E9F, 0x6F41, 0x6F11, 0x704C, 0x6EEC, 0x6EF8, 0x6EFE, + 0x6F3F, 0x6EF2, 0x6F31, 0x6EEF, 0x6F32, 0x6ECC}, + { /* category 63 */ + 0x6F3E, 0x6F13, 0x6EF7, 0x6F86, 0x6F7A, 0x6F78, 0x6F81, 0x6F80, + 0x6F6F, 0x6F5B, 0x6FF3, 0x6F6D, 0x6F82, 0x6F7C, 0x6F58, 0x6F8E, + 0x6F91, 0x6FC2, 0x6F66, 0x6FB3, 0x6FA3, 0x6FA1, 0x6FA4, 0x6FB9, + 0x6FC6, 0x6FAA, 0x6FDF, 0x6FD5, 0x6FEC, 0x6FD4, 0x6FD8, 0x6FF1, + 0x6FEE, 0x6FDB, 0x7009, 0x700B, 0x6FFA, 0x7011, 0x7001, 0x700F, + 0x6FFE, 0x701B, 0x701A, 0x6F74, 0x701D, 0x7018, 0x701F, 0x7030, + 0x703E, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70AF, 0x70F1, + 0x70AC, 0x70B8, 0x70B3, 0x70AE, 0x70DF, 0x70CB, 0x70DD, 0x70D9, + 0x7109, 0x70FD, 0x711C, 0x7119, 0x7165, 0x7155, 0x7188, 0x7166, + 0x7162, 0x714C, 0x7156, 0x716C, 0x718F, 0x71FB, 0x7184, 0x7195, + 0x71A8, 0x71AC, 0x71D7, 0x71B9, 0x71BE, 0x71D2, 0x71C9, 0x71D4, + 0x71CE, 0x71E0, 0x71EC, 0x71E7, 0x71F5, 0x71FC}, + { /* category 64 */ + 0x71F9, 0x71FF, 0x720D, 0x7210, 0x721B, 0x7228, 0x722D, 0x722C, + 0x7230, 0x7232, 0x723B, 0x723C, 0x723F, 0x7240, 0x7246, 0x724B, + 0x7258, 0x7274, 0x727E, 0x7282, 0x7281, 0x7287, 0x7292, 0x7296, + 0x72A2, 0x72A7, 0x72B9, 0x72B2, 0x72C3, 0x72C6, 0x72C4, 0x72CE, + 0x72D2, 0x72E2, 0x72E0, 0x72E1, 0x72F9, 0x72F7, 0x500F, 0x7317, + 0x730A, 0x731C, 0x7316, 0x731D, 0x7334, 0x732F, 0x7329, 0x7325, + 0x733E, 0x734E, 0x734F, 0x9ED8, 0x7357, 0x736A, 0x7368, 0x7370, + 0x7378, 0x7375, 0x737B, 0x737A, 0x73C8, 0x73B3, 0x73CE, 0x73BB, + 0x73C0, 0x73E5, 0x73EE, 0x73DE, 0x74A2, 0x7405, 0x746F, 0x7425, + 0x73F8, 0x7432, 0x743A, 0x7455, 0x743F, 0x745F, 0x7459, 0x7441, + 0x745C, 0x7469, 0x7470, 0x7463, 0x746A, 0x7476, 0x747E, 0x748B, + 0x749E, 0x74A7, 0x74CA, 0x74CF, 0x74D4, 0x73F1}, + { /* category 65 */ + 0x74E0, 0x74E3, 0x74E7, 0x74E9, 0x74EE, 0x74F2, 0x74F0, 0x74F1, + 0x74F8, 0x74F7, 0x7504, 0x7503, 0x7505, 0x750C, 0x750E, 0x750D, + 0x7515, 0x7513, 0x751E, 0x7526, 0x752C, 0x753C, 0x7544, 0x754D, + 0x754A, 0x7549, 0x755B, 0x7546, 0x755A, 0x7569, 0x7564, 0x7567, + 0x756B, 0x756D, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, 0x758A, + 0x7589, 0x7582, 0x7594, 0x759A, 0x759D, 0x75A5, 0x75A3, 0x75C2, + 0x75B3, 0x75C3, 0x75B5, 0x75BD, 0x75B8, 0x75BC, 0x75B1, 0x75CD, + 0x75CA, 0x75D2, 0x75D9, 0x75E3, 0x75DE, 0x75FE, 0x75FF, 0x75FC, + 0x7601, 0x75F0, 0x75FA, 0x75F2, 0x75F3, 0x760B, 0x760D, 0x7609, + 0x761F, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, 0x7630, + 0x763B, 0x7647, 0x7648, 0x7646, 0x765C, 0x7658, 0x7661, 0x7662, + 0x7668, 0x7669, 0x766A, 0x7667, 0x766C, 0x7670}, + { /* category 66 */ + 0x7672, 0x7676, 0x7678, 0x767C, 0x7680, 0x7683, 0x7688, 0x768B, + 0x768E, 0x7696, 0x7693, 0x7699, 0x769A, 0x76B0, 0x76B4, 0x76B8, + 0x76B9, 0x76BA, 0x76C2, 0x76CD, 0x76D6, 0x76D2, 0x76DE, 0x76E1, + 0x76E5, 0x76E7, 0x76EA, 0x862F, 0x76FB, 0x7708, 0x7707, 0x7704, + 0x7729, 0x7724, 0x771E, 0x7725, 0x7726, 0x771B, 0x7737, 0x7738, + 0x7747, 0x775A, 0x7768, 0x776B, 0x775B, 0x7765, 0x777F, 0x777E, + 0x7779, 0x778E, 0x778B, 0x7791, 0x77A0, 0x779E, 0x77B0, 0x77B6, + 0x77B9, 0x77BF, 0x77BC, 0x77BD, 0x77BB, 0x77C7, 0x77CD, 0x77D7, + 0x77DA, 0x77DC, 0x77E3, 0x77EE, 0x77FC, 0x780C, 0x7812, 0x7926, + 0x7820, 0x792A, 0x7845, 0x788E, 0x7874, 0x7886, 0x787C, 0x789A, + 0x788C, 0x78A3, 0x78B5, 0x78AA, 0x78AF, 0x78D1, 0x78C6, 0x78CB, + 0x78D4, 0x78BE, 0x78BC, 0x78C5, 0x78CA, 0x78EC}, + { /* category 67 */ + 0x78E7, 0x78DA, 0x78FD, 0x78F4, 0x7907, 0x7912, 0x7911, 0x7919, + 0x792C, 0x792B, 0x7940, 0x7960, 0x7957, 0x795F, 0x795A, 0x7955, + 0x7953, 0x797A, 0x797F, 0x798A, 0x799D, 0x79A7, 0x9F4B, 0x79AA, + 0x79AE, 0x79B3, 0x79B9, 0x79BA, 0x79C9, 0x79D5, 0x79E7, 0x79EC, + 0x79E1, 0x79E3, 0x7A08, 0x7A0D, 0x7A18, 0x7A19, 0x7A20, 0x7A1F, + 0x7980, 0x7A31, 0x7A3B, 0x7A3E, 0x7A37, 0x7A43, 0x7A57, 0x7A49, + 0x7A61, 0x7A62, 0x7A69, 0x9F9D, 0x7A70, 0x7A79, 0x7A7D, 0x7A88, + 0x7A97, 0x7A95, 0x7A98, 0x7A96, 0x7AA9, 0x7AC8, 0x7AB0, 0x7AB6, + 0x7AC5, 0x7AC4, 0x7ABF, 0x9083, 0x7AC7, 0x7ACA, 0x7ACD, 0x7ACF, + 0x7AD5, 0x7AD3, 0x7AD9, 0x7ADA, 0x7ADD, 0x7AE1, 0x7AE2, 0x7AE6, + 0x7AED, 0x7AF0, 0x7B02, 0x7B0F, 0x7B0A, 0x7B06, 0x7B33, 0x7B18, + 0x7B19, 0x7B1E, 0x7B35, 0x7B28, 0x7B36, 0x7B50}, + { /* category 68 */ + 0x7B7A, 0x7B04, 0x7B4D, 0x7B0B, 0x7B4C, 0x7B45, 0x7B75, 0x7B65, + 0x7B74, 0x7B67, 0x7B70, 0x7B71, 0x7B6C, 0x7B6E, 0x7B9D, 0x7B98, + 0x7B9F, 0x7B8D, 0x7B9C, 0x7B9A, 0x7B8B, 0x7B92, 0x7B8F, 0x7B5D, + 0x7B99, 0x7BCB, 0x7BC1, 0x7BCC, 0x7BCF, 0x7BB4, 0x7BC6, 0x7BDD, + 0x7BE9, 0x7C11, 0x7C14, 0x7BE6, 0x7BE5, 0x7C60, 0x7C00, 0x7C07, + 0x7C13, 0x7BF3, 0x7BF7, 0x7C17, 0x7C0D, 0x7BF6, 0x7C23, 0x7C27, + 0x7C2A, 0x7C1F, 0x7C37, 0x7C2B, 0x7C3D, 0x7C4C, 0x7C43, 0x7C54, + 0x7C4F, 0x7C40, 0x7C50, 0x7C58, 0x7C5F, 0x7C64, 0x7C56, 0x7C65, + 0x7C6C, 0x7C75, 0x7C83, 0x7C90, 0x7CA4, 0x7CAD, 0x7CA2, 0x7CAB, + 0x7CA1, 0x7CA8, 0x7CB3, 0x7CB2, 0x7CB1, 0x7CAE, 0x7CB9, 0x7CBD, + 0x7CC0, 0x7CC5, 0x7CC2, 0x7CD8, 0x7CD2, 0x7CDC, 0x7CE2, 0x9B3B, + 0x7CEF, 0x7CF2, 0x7CF4, 0x7CF6, 0x7CFA, 0x7D06}, + { /* category 69 */ + 0x7D02, 0x7D1C, 0x7D15, 0x7D0A, 0x7D45, 0x7D4B, 0x7D2E, 0x7D32, + 0x7D3F, 0x7D35, 0x7D46, 0x7D73, 0x7D56, 0x7D4E, 0x7D72, 0x7D68, + 0x7D6E, 0x7D4F, 0x7D63, 0x7D93, 0x7D89, 0x7D5B, 0x7D8F, 0x7D7D, + 0x7D9B, 0x7DBA, 0x7DAE, 0x7DA3, 0x7DB5, 0x7DC7, 0x7DBD, 0x7DAB, + 0x7E3D, 0x7DA2, 0x7DAF, 0x7DDC, 0x7DB8, 0x7D9F, 0x7DB0, 0x7DD8, + 0x7DDD, 0x7DE4, 0x7DDE, 0x7DFB, 0x7DF2, 0x7DE1, 0x7E05, 0x7E0A, + 0x7E23, 0x7E21, 0x7E12, 0x7E31, 0x7E1F, 0x7E09, 0x7E0B, 0x7E22, + 0x7E46, 0x7E66, 0x7E3B, 0x7E35, 0x7E39, 0x7E43, 0x7E37, 0x7E32, + 0x7E3A, 0x7E67, 0x7E5D, 0x7E56, 0x7E5E, 0x7E59, 0x7E5A, 0x7E79, + 0x7E6A, 0x7E69, 0x7E7C, 0x7E7B, 0x7E83, 0x7DD5, 0x7E7D, 0x8FAE, + 0x7E7F, 0x7E88, 0x7E89, 0x7E8C, 0x7E92, 0x7E90, 0x7E93, 0x7E94, + 0x7E96, 0x7E8E, 0x7E9B, 0x7E9C, 0x7F38, 0x7F3A}, + { /* category 70 */ + 0x7F45, 0x7F4C, 0x7F4D, 0x7F4E, 0x7F50, 0x7F51, 0x7F55, 0x7F54, + 0x7F58, 0x7F5F, 0x7F60, 0x7F68, 0x7F69, 0x7F67, 0x7F78, 0x7F82, + 0x7F86, 0x7F83, 0x7F88, 0x7F87, 0x7F8C, 0x7F94, 0x7F9E, 0x7F9D, + 0x7F9A, 0x7FA3, 0x7FAF, 0x7FB2, 0x7FB9, 0x7FAE, 0x7FB6, 0x7FB8, + 0x8B71, 0x7FC5, 0x7FC6, 0x7FCA, 0x7FD5, 0x7FD4, 0x7FE1, 0x7FE6, + 0x7FE9, 0x7FF3, 0x7FF9, 0x98DC, 0x8006, 0x8004, 0x800B, 0x8012, + 0x8018, 0x8019, 0x801C, 0x8021, 0x8028, 0x803F, 0x803B, 0x804A, + 0x8046, 0x8052, 0x8058, 0x805A, 0x805F, 0x8062, 0x8068, 0x8073, + 0x8072, 0x8070, 0x8076, 0x8079, 0x807D, 0x807F, 0x8084, 0x8086, + 0x8085, 0x809B, 0x8093, 0x809A, 0x80AD, 0x5190, 0x80AC, 0x80DB, + 0x80E5, 0x80D9, 0x80DD, 0x80C4, 0x80DA, 0x80D6, 0x8109, 0x80EF, + 0x80F1, 0x811B, 0x8129, 0x8123, 0x812F, 0x814B}, + { /* category 71 */ + 0x968B, 0x8146, 0x813E, 0x8153, 0x8151, 0x80FC, 0x8171, 0x816E, + 0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818A, 0x8180, 0x8182, + 0x81A0, 0x8195, 0x81A4, 0x81A3, 0x815F, 0x8193, 0x81A9, 0x81B0, + 0x81B5, 0x81BE, 0x81B8, 0x81BD, 0x81C0, 0x81C2, 0x81BA, 0x81C9, + 0x81CD, 0x81D1, 0x81D9, 0x81D8, 0x81C8, 0x81DA, 0x81DF, 0x81E0, + 0x81E7, 0x81FA, 0x81FB, 0x81FE, 0x8201, 0x8202, 0x8205, 0x8207, + 0x820A, 0x820D, 0x8210, 0x8216, 0x8229, 0x822B, 0x8238, 0x8233, + 0x8240, 0x8259, 0x8258, 0x825D, 0x825A, 0x825F, 0x8264, 0x8262, + 0x8268, 0x826A, 0x826B, 0x822E, 0x8271, 0x8277, 0x8278, 0x827E, + 0x828D, 0x8292, 0x82AB, 0x829F, 0x82BB, 0x82AC, 0x82E1, 0x82E3, + 0x82DF, 0x82D2, 0x82F4, 0x82F3, 0x82FA, 0x8393, 0x8303, 0x82FB, + 0x82F9, 0x82DE, 0x8306, 0x82DC, 0x8309, 0x82D9}, + { /* category 72 */ + 0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, 0x8350, + 0x8345, 0x832F, 0x832B, 0x8317, 0x8318, 0x8385, 0x839A, 0x83AA, + 0x839F, 0x83A2, 0x8396, 0x8323, 0x838E, 0x8387, 0x838A, 0x837C, + 0x83B5, 0x8373, 0x8375, 0x83A0, 0x8389, 0x83A8, 0x83F4, 0x8413, + 0x83EB, 0x83CE, 0x83FD, 0x8403, 0x83D8, 0x840B, 0x83C1, 0x83F7, + 0x8407, 0x83E0, 0x83F2, 0x840D, 0x8422, 0x8420, 0x83BD, 0x8438, + 0x8506, 0x83FB, 0x846D, 0x842A, 0x843C, 0x855A, 0x8484, 0x8477, + 0x846B, 0x84AD, 0x846E, 0x8482, 0x8469, 0x8446, 0x842C, 0x846F, + 0x8479, 0x8435, 0x84CA, 0x8462, 0x84B9, 0x84BF, 0x849F, 0x84D9, + 0x84CD, 0x84BB, 0x84DA, 0x84D0, 0x84C1, 0x84C6, 0x84D6, 0x84A1, + 0x8521, 0x84FF, 0x84F4, 0x8517, 0x8518, 0x852C, 0x851F, 0x8515, + 0x8514, 0x84FC, 0x8540, 0x8563, 0x8558, 0x8548}, + { /* category 73 */ + 0x8541, 0x8602, 0x854B, 0x8555, 0x8580, 0x85A4, 0x8588, 0x8591, + 0x858A, 0x85A8, 0x856D, 0x8594, 0x859B, 0x85EA, 0x8587, 0x859C, + 0x8577, 0x857E, 0x8590, 0x85C9, 0x85BA, 0x85CF, 0x85B9, 0x85D0, + 0x85D5, 0x85DD, 0x85E5, 0x85DC, 0x85F9, 0x860A, 0x8613, 0x860B, + 0x85FE, 0x85FA, 0x8606, 0x8622, 0x861A, 0x8630, 0x863F, 0x864D, + 0x4E55, 0x8654, 0x865F, 0x8667, 0x8671, 0x8693, 0x86A3, 0x86A9, + 0x86AA, 0x868B, 0x868C, 0x86B6, 0x86AF, 0x86C4, 0x86C6, 0x86B0, + 0x86C9, 0x8823, 0x86AB, 0x86D4, 0x86DE, 0x86E9, 0x86EC, 0x86DF, + 0x86DB, 0x86EF, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, 0x86FB, + 0x8711, 0x8709, 0x870D, 0x86F9, 0x870A, 0x8734, 0x873F, 0x8737, + 0x873B, 0x8725, 0x8729, 0x871A, 0x8760, 0x875F, 0x8778, 0x874C, + 0x874E, 0x8774, 0x8757, 0x8768, 0x876E, 0x8759}, + { /* category 74 */ + 0x8753, 0x8763, 0x876A, 0x8805, 0x87A2, 0x879F, 0x8782, 0x87AF, + 0x87CB, 0x87BD, 0x87C0, 0x87D0, 0x96D6, 0x87AB, 0x87C4, 0x87B3, + 0x87C7, 0x87C6, 0x87BB, 0x87EF, 0x87F2, 0x87E0, 0x880F, 0x880D, + 0x87FE, 0x87F6, 0x87F7, 0x880E, 0x87D2, 0x8811, 0x8816, 0x8815, + 0x8822, 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883B, 0x8844, + 0x8842, 0x8852, 0x8859, 0x885E, 0x8862, 0x886B, 0x8881, 0x887E, + 0x889E, 0x8875, 0x887D, 0x88B5, 0x8872, 0x8882, 0x8897, 0x8892, + 0x88AE, 0x8899, 0x88A2, 0x888D, 0x88A4, 0x88B0, 0x88BF, 0x88B1, + 0x88C3, 0x88C4, 0x88D4, 0x88D8, 0x88D9, 0x88DD, 0x88F9, 0x8902, + 0x88FC, 0x88F4, 0x88E8, 0x88F2, 0x8904, 0x890C, 0x890A, 0x8913, + 0x8943, 0x891E, 0x8925, 0x892A, 0x892B, 0x8941, 0x8944, 0x893B, + 0x8936, 0x8938, 0x894C, 0x891D, 0x8960, 0x895E}, + { /* category 75 */ + 0x8966, 0x8964, 0x896D, 0x896A, 0x896F, 0x8974, 0x8977, 0x897E, + 0x8983, 0x8988, 0x898A, 0x8993, 0x8998, 0x89A1, 0x89A9, 0x89A6, + 0x89AC, 0x89AF, 0x89B2, 0x89BA, 0x89BD, 0x89BF, 0x89C0, 0x89DA, + 0x89DC, 0x89DD, 0x89E7, 0x89F4, 0x89F8, 0x8A03, 0x8A16, 0x8A10, + 0x8A0C, 0x8A1B, 0x8A1D, 0x8A25, 0x8A36, 0x8A41, 0x8A5B, 0x8A52, + 0x8A46, 0x8A48, 0x8A7C, 0x8A6D, 0x8A6C, 0x8A62, 0x8A85, 0x8A82, + 0x8A84, 0x8AA8, 0x8AA1, 0x8A91, 0x8AA5, 0x8AA6, 0x8A9A, 0x8AA3, + 0x8AC4, 0x8ACD, 0x8AC2, 0x8ADA, 0x8AEB, 0x8AF3, 0x8AE7, 0x8AE4, + 0x8AF1, 0x8B14, 0x8AE0, 0x8AE2, 0x8AF7, 0x8ADE, 0x8ADB, 0x8B0C, + 0x8B07, 0x8B1A, 0x8AE1, 0x8B16, 0x8B10, 0x8B17, 0x8B20, 0x8B33, + 0x97AB, 0x8B26, 0x8B2B, 0x8B3E, 0x8B28, 0x8B41, 0x8B4C, 0x8B4F, + 0x8B4E, 0x8B49, 0x8B56, 0x8B5B, 0x8B5A, 0x8B6B}, + { /* category 76 */ + 0x8B5F, 0x8B6C, 0x8B6F, 0x8B74, 0x8B7D, 0x8B80, 0x8B8C, 0x8B8E, + 0x8B92, 0x8B93, 0x8B96, 0x8B99, 0x8B9A, 0x8C3A, 0x8C41, 0x8C3F, + 0x8C48, 0x8C4C, 0x8C4E, 0x8C50, 0x8C55, 0x8C62, 0x8C6C, 0x8C78, + 0x8C7A, 0x8C82, 0x8C89, 0x8C85, 0x8C8A, 0x8C8D, 0x8C8E, 0x8C94, + 0x8C7C, 0x8C98, 0x621D, 0x8CAD, 0x8CAA, 0x8CBD, 0x8CB2, 0x8CB3, + 0x8CAE, 0x8CB6, 0x8CC8, 0x8CC1, 0x8CE4, 0x8CE3, 0x8CDA, 0x8CFD, + 0x8CFA, 0x8CFB, 0x8D04, 0x8D05, 0x8D0A, 0x8D07, 0x8D0F, 0x8D0D, + 0x8D10, 0x9F4E, 0x8D13, 0x8CCD, 0x8D14, 0x8D16, 0x8D67, 0x8D6D, + 0x8D71, 0x8D73, 0x8D81, 0x8D99, 0x8DC2, 0x8DBE, 0x8DBA, 0x8DCF, + 0x8DDA, 0x8DD6, 0x8DCC, 0x8DDB, 0x8DCB, 0x8DEA, 0x8DEB, 0x8DDF, + 0x8DE3, 0x8DFC, 0x8E08, 0x8E09, 0x8DFF, 0x8E1D, 0x8E1E, 0x8E10, + 0x8E1F, 0x8E42, 0x8E35, 0x8E30, 0x8E34, 0x8E4A}, + { /* category 77 */ + 0x8E47, 0x8E49, 0x8E4C, 0x8E50, 0x8E48, 0x8E59, 0x8E64, 0x8E60, + 0x8E2A, 0x8E63, 0x8E55, 0x8E76, 0x8E72, 0x8E7C, 0x8E81, 0x8E87, + 0x8E85, 0x8E84, 0x8E8B, 0x8E8A, 0x8E93, 0x8E91, 0x8E94, 0x8E99, + 0x8EAA, 0x8EA1, 0x8EAC, 0x8EB0, 0x8EC6, 0x8EB1, 0x8EBE, 0x8EC5, + 0x8EC8, 0x8ECB, 0x8EDB, 0x8EE3, 0x8EFC, 0x8EFB, 0x8EEB, 0x8EFE, + 0x8F0A, 0x8F05, 0x8F15, 0x8F12, 0x8F19, 0x8F13, 0x8F1C, 0x8F1F, + 0x8F1B, 0x8F0C, 0x8F26, 0x8F33, 0x8F3B, 0x8F39, 0x8F45, 0x8F42, + 0x8F3E, 0x8F4C, 0x8F49, 0x8F46, 0x8F4E, 0x8F57, 0x8F5C, 0x8F62, + 0x8F63, 0x8F64, 0x8F9C, 0x8F9F, 0x8FA3, 0x8FAD, 0x8FAF, 0x8FB7, + 0x8FDA, 0x8FE5, 0x8FE2, 0x8FEA, 0x8FEF, 0x9087, 0x8FF4, 0x9005, + 0x8FF9, 0x8FFA, 0x9011, 0x9015, 0x9021, 0x900D, 0x901E, 0x9016, + 0x900B, 0x9027, 0x9036, 0x9035, 0x9039, 0x8FF8}, + { /* category 78 */ + 0x904F, 0x9050, 0x9051, 0x9052, 0x900E, 0x9049, 0x903E, 0x9056, + 0x9058, 0x905E, 0x9068, 0x906F, 0x9076, 0x96A8, 0x9072, 0x9082, + 0x907D, 0x9081, 0x9080, 0x908A, 0x9089, 0x908F, 0x90A8, 0x90AF, + 0x90B1, 0x90B5, 0x90E2, 0x90E4, 0x6248, 0x90DB, 0x9102, 0x9112, + 0x9119, 0x9132, 0x9130, 0x914A, 0x9156, 0x9158, 0x9163, 0x9165, + 0x9169, 0x9173, 0x9172, 0x918B, 0x9189, 0x9182, 0x91A2, 0x91AB, + 0x91AF, 0x91AA, 0x91B5, 0x91B4, 0x91BA, 0x91C0, 0x91C1, 0x91C9, + 0x91CB, 0x91D0, 0x91D6, 0x91DF, 0x91E1, 0x91DB, 0x91FC, 0x91F5, + 0x91F6, 0x921E, 0x91FF, 0x9214, 0x922C, 0x9215, 0x9211, 0x925E, + 0x9257, 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923F, 0x924B, + 0x9250, 0x929C, 0x9296, 0x9293, 0x929B, 0x925A, 0x92CF, 0x92B9, + 0x92B7, 0x92E9, 0x930F, 0x92FA, 0x9344, 0x932E}, + { /* category 79 */ + 0x9319, 0x9322, 0x931A, 0x9323, 0x933A, 0x9335, 0x933B, 0x935C, + 0x9360, 0x937C, 0x936E, 0x9356, 0x93B0, 0x93AC, 0x93AD, 0x9394, + 0x93B9, 0x93D6, 0x93D7, 0x93E8, 0x93E5, 0x93D8, 0x93C3, 0x93DD, + 0x93D0, 0x93C8, 0x93E4, 0x941A, 0x9414, 0x9413, 0x9403, 0x9407, + 0x9410, 0x9436, 0x942B, 0x9435, 0x9421, 0x943A, 0x9441, 0x9452, + 0x9444, 0x945B, 0x9460, 0x9462, 0x945E, 0x946A, 0x9229, 0x9470, + 0x9475, 0x9477, 0x947D, 0x945A, 0x947C, 0x947E, 0x9481, 0x947F, + 0x9582, 0x9587, 0x958A, 0x9594, 0x9596, 0x9598, 0x9599, 0x95A0, + 0x95A8, 0x95A7, 0x95AD, 0x95BC, 0x95BB, 0x95B9, 0x95BE, 0x95CA, + 0x6FF6, 0x95C3, 0x95CD, 0x95CC, 0x95D5, 0x95D4, 0x95D6, 0x95DC, + 0x95E1, 0x95E5, 0x95E2, 0x9621, 0x9628, 0x962E, 0x962F, 0x9642, + 0x964C, 0x964F, 0x964B, 0x9677, 0x965C, 0x965E}, + { /* category 80 */ + 0x965D, 0x965F, 0x9666, 0x9672, 0x966C, 0x968D, 0x9698, 0x9695, + 0x9697, 0x96AA, 0x96A7, 0x96B1, 0x96B2, 0x96B0, 0x96B4, 0x96B6, + 0x96B8, 0x96B9, 0x96CE, 0x96CB, 0x96C9, 0x96CD, 0x894D, 0x96DC, + 0x970D, 0x96D5, 0x96F9, 0x9704, 0x9706, 0x9708, 0x9713, 0x970E, + 0x9711, 0x970F, 0x9716, 0x9719, 0x9724, 0x972A, 0x9730, 0x9739, + 0x973D, 0x973E, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, 0x975C, + 0x9760, 0x9764, 0x9766, 0x9768, 0x52D2, 0x976B, 0x9771, 0x9779, + 0x9785, 0x977C, 0x9781, 0x977A, 0x9786, 0x978B, 0x978F, 0x9790, + 0x979C, 0x97A8, 0x97A6, 0x97A3, 0x97B3, 0x97B4, 0x97C3, 0x97C6, + 0x97C8, 0x97CB, 0x97DC, 0x97ED, 0x9F4F, 0x97F2, 0x7ADF, 0x97F6, + 0x97F5, 0x980F, 0x980C, 0x9838, 0x9824, 0x9821, 0x9837, 0x983D, + 0x9846, 0x984F, 0x984B, 0x986B, 0x986F, 0x9870}, + { /* category 81 */ + 0x9871, 0x9874, 0x9873, 0x98AA, 0x98AF, 0x98B1, 0x98B6, 0x98C4, + 0x98C3, 0x98C6, 0x98E9, 0x98EB, 0x9903, 0x9909, 0x9912, 0x9914, + 0x9918, 0x9921, 0x991D, 0x991E, 0x9924, 0x9920, 0x992C, 0x992E, + 0x993D, 0x993E, 0x9942, 0x9949, 0x9945, 0x9950, 0x994B, 0x9951, + 0x9952, 0x994C, 0x9955, 0x9997, 0x9998, 0x99A5, 0x99AD, 0x99AE, + 0x99BC, 0x99DF, 0x99DB, 0x99DD, 0x99D8, 0x99D1, 0x99ED, 0x99EE, + 0x99F1, 0x99F2, 0x99FB, 0x99F8, 0x9A01, 0x9A0F, 0x9A05, 0x99E2, + 0x9A19, 0x9A2B, 0x9A37, 0x9A45, 0x9A42, 0x9A40, 0x9A43, 0x9A3E, + 0x9A55, 0x9A4D, 0x9A5B, 0x9A57, 0x9A5F, 0x9A62, 0x9A65, 0x9A64, + 0x9A69, 0x9A6B, 0x9A6A, 0x9AAD, 0x9AB0, 0x9ABC, 0x9AC0, 0x9ACF, + 0x9AD1, 0x9AD3, 0x9AD4, 0x9ADE, 0x9ADF, 0x9AE2, 0x9AE3, 0x9AE6, + 0x9AEF, 0x9AEB, 0x9AEE, 0x9AF4, 0x9AF1, 0x9AF7}, + { /* category 82 */ + 0x9AFB, 0x9B06, 0x9B18, 0x9B1A, 0x9B1F, 0x9B22, 0x9B23, 0x9B25, + 0x9B27, 0x9B28, 0x9B29, 0x9B2A, 0x9B2E, 0x9B2F, 0x9B32, 0x9B44, + 0x9B43, 0x9B4F, 0x9B4D, 0x9B4E, 0x9B51, 0x9B58, 0x9B74, 0x9B93, + 0x9B83, 0x9B91, 0x9B96, 0x9B97, 0x9B9F, 0x9BA0, 0x9BA8, 0x9BB4, + 0x9BC0, 0x9BCA, 0x9BB9, 0x9BC6, 0x9BCF, 0x9BD1, 0x9BD2, 0x9BE3, + 0x9BE2, 0x9BE4, 0x9BD4, 0x9BE1, 0x9C3A, 0x9BF2, 0x9BF1, 0x9BF0, + 0x9C15, 0x9C14, 0x9C09, 0x9C13, 0x9C0C, 0x9C06, 0x9C08, 0x9C12, + 0x9C0A, 0x9C04, 0x9C2E, 0x9C1B, 0x9C25, 0x9C24, 0x9C21, 0x9C30, + 0x9C47, 0x9C32, 0x9C46, 0x9C3E, 0x9C5A, 0x9C60, 0x9C67, 0x9C76, + 0x9C78, 0x9CE7, 0x9CEC, 0x9CF0, 0x9D09, 0x9D08, 0x9CEB, 0x9D03, + 0x9D06, 0x9D2A, 0x9D26, 0x9DAF, 0x9D23, 0x9D1F, 0x9D44, 0x9D15, + 0x9D12, 0x9D41, 0x9D3F, 0x9D3E, 0x9D46, 0x9D48}, + { /* category 83 */ + 0x9D5D, 0x9D5E, 0x9D64, 0x9D51, 0x9D50, 0x9D59, 0x9D72, 0x9D89, + 0x9D87, 0x9DAB, 0x9D6F, 0x9D7A, 0x9D9A, 0x9DA4, 0x9DA9, 0x9DB2, + 0x9DC4, 0x9DC1, 0x9DBB, 0x9DB8, 0x9DBA, 0x9DC6, 0x9DCF, 0x9DC2, + 0x9DD9, 0x9DD3, 0x9DF8, 0x9DE6, 0x9DED, 0x9DEF, 0x9DFD, 0x9E1A, + 0x9E1B, 0x9E1E, 0x9E75, 0x9E79, 0x9E7D, 0x9E81, 0x9E88, 0x9E8B, + 0x9E8C, 0x9E92, 0x9E95, 0x9E91, 0x9E9D, 0x9EA5, 0x9EA9, 0x9EB8, + 0x9EAA, 0x9EAD, 0x9761, 0x9ECC, 0x9ECE, 0x9ECF, 0x9ED0, 0x9ED4, + 0x9EDC, 0x9EDE, 0x9EDD, 0x9EE0, 0x9EE5, 0x9EE8, 0x9EEF, 0x9EF4, + 0x9EF6, 0x9EF7, 0x9EF9, 0x9EFB, 0x9EFC, 0x9EFD, 0x9F07, 0x9F08, + 0x76B7, 0x9F15, 0x9F21, 0x9F2C, 0x9F3E, 0x9F4A, 0x9F52, 0x9F54, + 0x9F63, 0x9F5F, 0x9F60, 0x9F61, 0x9F66, 0x9F67, 0x9F6C, 0x9F6A, + 0x9F77, 0x9F72, 0x9F76, 0x9F95, 0x9F9C, 0x9FA0}, + { /* category 84 */ + 0x582F, 0x69C7, 0x9059, 0x7464, 0x51DC, 0x7199, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 85 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 86 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 87 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 88 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, + { /* category 89 */ + 0x7E8A, 0x891C, 0x9348, 0x9288, 0x84DC, 0x4FC9, 0x70BB, 0x6631, + 0x68C8, 0x92F9, 0x66FB, 0x5F45, 0x4E28, 0x4EE1, 0x4EFC, 0x4F00, + 0x4F03, 0x4F39, 0x4F56, 0x4F92, 0x4F8A, 0x4F9A, 0x4F94, 0x4FCD, + 0x5040, 0x5022, 0x4FFF, 0x501E, 0x5046, 0x5070, 0x5042, 0x5094, + 0x50F4, 0x50D8, 0x514A, 0x5164, 0x519D, 0x51BE, 0x51EC, 0x5215, + 0x529C, 0x52A6, 0x52C0, 0x52DB, 0x5300, 0x5307, 0x5324, 0x5372, + 0x5393, 0x53B2, 0x53DD, 0xFA0E, 0x549C, 0x548A, 0x54A9, 0x54FF, + 0x5586, 0x5759, 0x5765, 0x57AC, 0x57C8, 0x57C7, 0xFA0F, 0xFA10, + 0x589E, 0x58B2, 0x590B, 0x5953, 0x595B, 0x595D, 0x5963, 0x59A4, + 0x59BA, 0x5B56, 0x5BC0, 0x752F, 0x5BD8, 0x5BEC, 0x5C1E, 0x5CA6, + 0x5CBA, 0x5CF5, 0x5D27, 0x5D53, 0xFA11, 0x5D42, 0x5D6D, 0x5DB8, + 0x5DB9, 0x5DD0, 0x5F21, 0x5F34, 0x5F67, 0x5FB7}, + { /* category 90 */ + 0x5FDE, 0x605D, 0x6085, 0x608A, 0x60DE, 0x60D5, 0x6120, 0x60F2, + 0x6111, 0x6137, 0x6130, 0x6198, 0x6213, 0x62A6, 0x63F5, 0x6460, + 0x649D, 0x64CE, 0x654E, 0x6600, 0x6615, 0x663B, 0x6609, 0x662E, + 0x661E, 0x6624, 0x6665, 0x6657, 0x6659, 0xFA12, 0x6673, 0x6699, + 0x66A0, 0x66B2, 0x66BF, 0x66FA, 0x670E, 0xF929, 0x6766, 0x67BB, + 0x6852, 0x67C0, 0x6801, 0x6844, 0x68CF, 0xFA13, 0x6968, 0xFA14, + 0x6998, 0x69E2, 0x6A30, 0x6A6B, 0x6A46, 0x6A73, 0x6A7E, 0x6AE2, + 0x6AE4, 0x6BD6, 0x6C3F, 0x6C5C, 0x6C86, 0x6C6F, 0x6CDA, 0x6D04, + 0x6D87, 0x6D6F, 0x6D96, 0x6DAC, 0x6DCF, 0x6DF8, 0x6DF2, 0x6DFC, + 0x6E39, 0x6E5C, 0x6E27, 0x6E3C, 0x6EBF, 0x6F88, 0x6FB5, 0x6FF5, + 0x7005, 0x7007, 0x7028, 0x7085, 0x70AB, 0x710F, 0x7104, 0x715C, + 0x7146, 0x7147, 0xFA15, 0x71C1, 0x71FE, 0x72B1}, + { /* category 91 */ + 0x72BE, 0x7324, 0xFA16, 0x7377, 0x73BD, 0x73C9, 0x73D6, 0x73E3, + 0x73D2, 0x7407, 0x73F5, 0x7426, 0x742A, 0x7429, 0x742E, 0x7462, + 0x7489, 0x749F, 0x7501, 0x756F, 0x7682, 0x769C, 0x769E, 0x769B, + 0x76A6, 0xFA17, 0x7746, 0x52AF, 0x7821, 0x784E, 0x7864, 0x787A, + 0x7930, 0xFA18, 0xFA19, 0xFA1A, 0x7994, 0xFA1B, 0x799B, 0x7AD1, + 0x7AE7, 0xFA1C, 0x7AEB, 0x7B9E, 0xFA1D, 0x7D48, 0x7D5C, 0x7DB7, + 0x7DA0, 0x7DD6, 0x7E52, 0x7F47, 0x7FA1, 0xFA1E, 0x8301, 0x8362, + 0x837F, 0x83C7, 0x83F6, 0x8448, 0x84B4, 0x8553, 0x8559, 0x856B, + 0xFA1F, 0x85B0, 0xFA20, 0xFA21, 0x8807, 0x88F5, 0x8A12, 0x8A37, + 0x8A79, 0x8AA7, 0x8ABE, 0x8ADF, 0xFA22, 0x8AF6, 0x8B53, 0x8B7F, + 0x8CF0, 0x8CF4, 0x8D12, 0x8D76, 0xFA23, 0x8ECF, 0xFA24, 0xFA25, + 0x9067, 0x90DE, 0xFA26, 0x9115, 0x9127, 0x91DA}, + { /* category 92 */ + 0x91D7, 0x91DE, 0x91ED, 0x91EE, 0x91E4, 0x91E5, 0x9206, 0x9210, + 0x920A, 0x923A, 0x9240, 0x923C, 0x924E, 0x9259, 0x9251, 0x9239, + 0x9267, 0x92A7, 0x9277, 0x9278, 0x92E7, 0x92D7, 0x92D9, 0x92D0, + 0xFA27, 0x92D5, 0x92E0, 0x92D3, 0x9325, 0x9321, 0x92FB, 0xFA28, + 0x931E, 0x92FF, 0x931D, 0x9302, 0x9370, 0x9357, 0x93A4, 0x93C6, + 0x93DE, 0x93F8, 0x9431, 0x9445, 0x9448, 0x9592, 0xF9DC, 0xFA29, + 0x969D, 0x96AF, 0x9733, 0x973B, 0x9743, 0x974D, 0x974F, 0x9751, + 0x9755, 0x9857, 0x9865, 0xFA2A, 0xFA2B, 0x9927, 0xFA2C, 0x999E, + 0x9A4E, 0x9AD9, 0x9ADC, 0x9B75, 0x9B72, 0x9B8F, 0x9BB1, 0x9BBB, + 0x9C00, 0x9D70, 0x9D6B, 0xFA2D, 0x9E19, 0x9ED1, 0x0000, 0x0000, + 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, + 0x2178, 0x2179, 0xFFE2, 0xFFE4, 0xFF07, 0xFF02}}; + +int jis2uni(int jis) +{ + int ku, ten; + + ku = (jis >> 8) - 0x20; + if (ku < 1 || ku > MAXJIS) return (0); + ten = (jis % 256) - 0x20; + if (ten < 1 || ten > 94) return (0); + return ((int)UnicodeTbl[ku - 1][ten - 1]); +} + +static struct jis2cidv_st { + int low, hi, offset; +} cidv_table[] = { + { 0x2122, 0x2123, 7887 }, + { 0x2131, 0x2132, 7889 }, + { 0x213c, 0x213e, 7891 }, + { 0x2141, 0x2145, 7894 }, + { 0x214a, 0x215b, 7899 }, + { 0x2161, 0x2161, 7917 }, + { 0x2421, 0x2421, 7918 }, + { 0x2423, 0x2423, 7919 }, + { 0x2425, 0x2425, 7920 }, + { 0x2427, 0x2427, 7921 }, + { 0x2429, 0x2429, 7922 }, + { 0x2443, 0x2443, 7923 }, + { 0x2463, 0x2463, 7924 }, + { 0x2465, 0x2465, 7925 }, + { 0x2467, 0x2467, 7926 }, + { 0x246e, 0x246e, 7927 }, + { 0x2521, 0x2521, 7928 }, + { 0x2523, 0x2523, 7929 }, + { 0x2525, 0x2525, 7930 }, + { 0x2527, 0x2527, 7931 }, + { 0x2529, 0x2529, 7932 }, + { 0x2543, 0x2543, 7933 }, + { 0x2563, 0x2563, 7934 }, + { 0x2565, 0x2565, 7935 }, + { 0x2567, 0x2567, 7936 }, + { 0x256e, 0x256e, 7937 }, + { 0x2575, 0x2576, 7938 }, +}; + +int jis2cidv(int jis) +{ + int i; + + for (i=0; ilow <= jis) && (jis <= p->hi)) { + return p->offset + jis - p->low; + } + } + return 0; +} + + +#include +#include +#include FT_FREETYPE_H + +#define FONTSMAX 100 +static FT_Library library; +/* static FT_Face face; */ +static int ft_error; + +static struct { + FT_Face face; + short height; + short width; + short ascend; +#ifdef VF2FT + int encoding; + int cidv; +#endif +} fonts[FONTSMAX]; + +static int fontsmax=0; + +#include +#include "vf2ft.h" + +int VF_Init(char *vfcap) +{ + ft_error = FT_Init_FreeType( &library ); + if ( ft_error ) { + fprintf(stderr, "FT2: Initialization Error\n"); + exit(100); + } + return 0; +} + +int VF_OpenFont(char *fontname, int encoding, int cidv) +{ + if( fontsmax == FONTSMAX ) { + fprintf(stderr, "Fonts exceed limit\n"); + return -1; + } + + ft_error = FT_New_Face(library, fontname, 0, &fonts[fontsmax].face ); + if( ft_error == 0 ) { + fonts[fontsmax].height = 0; + fonts[fontsmax].width = 0; + fonts[fontsmax].encoding = encoding; + fonts[fontsmax].cidv = cidv; + switch (encoding) { + case ADOBEJAPAN: + ft_error = FT_Select_Charmap(fonts[fontsmax].face, ft_encoding_none); + break; + default: + ft_error = FT_Select_Charmap(fonts[fontsmax].face, ft_encoding_unicode); + } + if( ft_error != 0 ) { + fprintf(stderr, "FT2: Select Charmap Error. (%s)\n", fontname); + exit(101); + } + return fontsmax++; + } else { + fprintf(stderr, "FT2: Open Font Error. (%s)\n", fontname); + exit(101); + } +} + +int VF_GetBitmap(int jiscode, int fid, int w, int h, int bw, int bo, char *bm_buf) +{ + int rc, shift, i; + char *cp, *scp, *src; + + if( fonts[fid].width != w || + fonts[fid].height != h ) { + FT_Set_Pixel_Sizes( fonts[fid].face, w, h); + fonts[fid].height =h; + fonts[fid].width =w; + fonts[fid].ascend = + h* fonts[fid].face->ascender + / (fonts[fid].face->ascender - fonts[fid].face->descender); + } + + switch (fonts[fid].encoding) { + case ADOBEJAPAN : + FT_Load_Glyph( fonts[fid].face, + jiscode, + FT_LOAD_DEFAULT ); + break; + case UNIC : + FT_Load_Glyph( fonts[fid].face, + FT_Get_Char_Index( fonts[fid].face, jiscode), + FT_LOAD_DEFAULT ); + break; + default : + if (fonts[fid].cidv) { + if(jis2cidv(jiscode)) { + FT_Load_Glyph( fonts[fid].face, + jis2cidv(jiscode), + FT_LOAD_DEFAULT ); + } + else { + FT_Load_Glyph( fonts[fid].face, + FT_Get_Char_Index( fonts[fid].face, jis2uni(jiscode) ), + FT_LOAD_DEFAULT ); + } + } + else { + FT_Load_Glyph( fonts[fid].face, + FT_Get_Char_Index( fonts[fid].face, jis2uni(jiscode) ), + FT_LOAD_DEFAULT ); + } + + } + FT_Render_Glyph( fonts[fid].face-> glyph, ft_render_mode_mono ); + +#if 0 /* In case of using xdvi, clearing is unnecessary */ + bzero(bm_buf, bw*h); +#endif + + for(rc=0, cp=bm_buf; + rcglyph->bitmap_top; rc++ ) + cp += bw; + + shift = fonts[fid].face->glyph->bitmap_left % 8; + for(rc=0, scp=cp, src=fonts[fid].face->glyph->bitmap.buffer; + rc < fonts[fid].face->glyph->bitmap.rows; + rc++, scp += bw ) { + for(i=0, cp=scp; i< fonts[fid].face->glyph->bitmap_left/8; i++) + cp++; +#if FREETYPE_MAJOR == 2 && FREETYPE_MINOR < 1 + for(i=0; i<(fonts[fid].face->glyph->bitmap.width + 7)/8; i++) { +#else + for(i=0; iglyph->bitmap.pitch; i++) { +#endif + if( shift >= 0 ) { + *cp++ |= ((unsigned char)*src) >> shift; + *cp |= *src++ << (8-shift); + } else { + *cp |= *src++ << -shift; + *cp++ |= ((unsigned char)*src) >> (8 + shift); + } + } + } +} + +#endif diff -ruN xdvik-22.40y1.orig/texk/xdvik/vf2ft.h xdvik-22.40y1/texk/xdvik/vf2ft.h --- xdvik-22.40y1.orig/texk/xdvik/vf2ft.h 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/vf2ft.h 2003-09-29 11:47:22.000000000 +0900 @@ -0,0 +1,6 @@ +int VF_Init(char *vfcap); +int VF_OpenFont(char *fontname, int encoding, int tate); +int VF_GetBitmap(int jiscode, int fid, int w, int h, int bw, int bo, char *bm_buf); + +#define UNIC 1 +#define ADOBEJAPAN 2 diff -ruN xdvik-22.40y1.orig/texk/xdvik/vfontmap.c xdvik-22.40y1/texk/xdvik/vfontmap.c --- xdvik-22.40y1.orig/texk/xdvik/vfontmap.c 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/vfontmap.c 2004-02-25 12:07:47.000000000 +0900 @@ -0,0 +1,195 @@ +/* + Copyright (C) 1996 - 1997 Masahito Yamaga (yamaga@ipc.chiba-u.ac.jp) + + 2002/ 2/10 Nobuyuki Tsuchimura (tutimura@nn.iij4u.or.jp) + -- use kpse_find_file() + -- close file +*/ + +#include "xdvi-config.h" +#include "kpathsea/tex-file.h" +#include +#ifndef DEFAULT_FONTMAP +#define DEFAULT_FONTMAP "/usr/local/share/texmf/xdvi/vfontmap" +#endif +#ifdef VF2FT +#include "vf2ft.h" +#endif + +#define NUM(a) ((int)(sizeof(a)/sizeof(*(a)))) + +struct vfontmap *first_ptr = NULL; + +static struct jfont_list_st { + char *jfmname; + char *vfname; + int used; +} default_jfonts[] = { +#ifdef PTEX + { "jisg" ,"goth", False }, + { "jis" ,"min" , False }, +#endif + { "dg" ,"goth", False }, + { "dm" ,"min" , False }, + + { "ngoth","goth", False }, + { "tgoth","goth", False }, + { "goth" ,"goth", False }, + + { "nmin" ,"min" , False }, + { "tmin" ,"min" , False }, + { "min" ,"min" , False }, +}; + + +void addfontmap(char *s1, char *s2, int tate, int encoding, int cidv) +{ + struct vfontmap *new_ptr; + + new_ptr = xmalloc(sizeof(struct vfontmap)); + new_ptr->jfmname = xstrdup(s1); + new_ptr->vfname = xstrdup(s2); +#ifdef VF2FT + new_ptr->encoding = encoding; + new_ptr->cidv = cidv; +#endif + new_ptr->flag = -1; +#ifdef PTEX + new_ptr->tate = tate; +#endif + + new_ptr->next_ptr = first_ptr; + first_ptr = new_ptr; +} + + +#if defined(USE_ZEIT) && defined(USE_VFONTMAP) +_Xconst char *get_vfontmap_name(void) +{ + char *s; + static char *vfontmap = "vfontmap"; + static char *default_fontmap = DEFAULT_FONTMAP; + FILE *fp; + + if ((fp=fopen(vfontmap, "r")) != NULL) { + fclose(fp); + return vfontmap; + } + + if (strcmp(resource.vfontmap, default_fontmap) != 0) { + return resource.vfontmap; + } + s = getenv("VFONTMAP"); + if (s != NULL) return s; + s = kpse_find_file(vfontmap, kpse_program_text_format, 1); + if (s != NULL) return s; + return default_fontmap; +} +#endif /* USE_ZEIT && USE_VFONTMAP */ + + +void read_VFontmap(void) +{ + FILE *map; + _Xconst char *vfontmapf; + char *s, *jfmname, *vfname, *encode; + char line[BUFSIZ], line_orig[BUFSIZ], vfname2[BUFSIZ] = ""; + int i, tate, encoding, cidv; +#ifdef VF2FT + static char *unicodekeystr = "unicode"; + static char *adobejapankeystr = "adobejapan"; + static char *cidvkeystr = "cidv"; +#endif + +#if defined(USE_ZEIT) && defined(USE_VFONTMAP) + vfontmapf = get_vfontmap_name(); + if ((map = fopen(vfontmapf, "r")) == NULL) { + Fprintf(stderr,"Warning: Can't open \"%s\"\n", vfontmapf); + Fprintf(stderr," Default Values are Used.\n"); + } else { + while (fgets(line, BUFSIZ, map) != NULL) { + if ((s=strchr(line,'\n')) != NULL) *s = '\0'; /* break \n */ + strcpy(line_orig, line); + if ((s=strchr(line,'%')) != NULL) *s = '\0'; /* break comment */ + if ((s=strchr(line,'#')) != NULL) *s = '\0'; /* break comment */ + tate = False; encoding = 0; cidv = False; + + if (*line == '/') { // font file for vf2ft + strcpy(vfname2, strtok(line, " \t")); + continue; + } + if (isspace(*line)) { + for (s=line; isspace(*s); s++) /**/; + jfmname = strtok(s, " \t"); + vfname = vfname2; + } else { + jfmname = strtok(line, " \t"); + vfname = strtok(NULL, " \t"); + } +#ifdef PTEX + encode = strtok(NULL, " \t"); +#ifdef VF2FT + if (encode != NULL) { + if (strcmp(encode, unicodekeystr) == 0) { + encoding = UNIC; + } else if (strcmp(encode, adobejapankeystr) == 0) { + encoding = ADOBEJAPAN; + } else if (strcmp(encode, cidvkeystr) == 0) { + cidv = True; + tate = True; + } else { + tate = True; + } + } +#else /* !VF2FT */ + tate = (encode != NULL); +#endif /* !VF2FT */ +#endif /* PTEX */ + if (jfmname == NULL) continue; + if (vfname == NULL) { + Fprintf(stderr, + "No specified Vector Font name for \"%s\"\n", jfmname); + continue; + } + + if (strtok(NULL, " \n\r") != NULL) { + Fprintf(stderr, + "'%s', There is too much argument.\n", line_orig); + continue; + } + + if (debug & DBG_PK) { + Fprintf(stderr, "JFM name is \"%s\"\n", jfmname); + Fprintf(stderr, "Font name of VFlib is \"%s\"\n", vfname); +#ifdef PTEX +#ifdef VF2FT + Fprintf(stderr, "Font of FreeType is %s encode \"%s\"\n", + (encoding != 0) ? encode : "default", + tate ? "TATE font" : "TRANS...font"); +#else /* !VF2FT */ + Fprintf(stderr, "Font of VFlib is \"%s\"\n", + tate ? "TATE font" : "TRANS...font"); +#endif /* !VF2FT */ +#endif + } + addfontmap(jfmname, vfname, tate, encoding, cidv); + + /* check if necessary fontmap? */ + for (i=0; i %D/%F:All@%r.ps; %P -J'%F' %D/%F:All@%r.ps" +/* the current page */ +#define PRCMDCUR "cd %d; dviselect =%c %F %D/%F:%c@%r.dvi; %R %D/%F:%c@%r.dvi > %D/%F:%c@%r.ps; /bin/rm %D/%F:%c@%r.dvi; %P -J'%F (Page %c)' %D/%F:%c@%r.ps" +/* the lastly marked page */ +#define PRCMDMRK "cd %d; dviselect =%m %F %D/%F:%m@%r.dvi; %R %D/%F:%m@%r.dvi > %D/%F:%m@%r.ps; /bin/rm %D/%F:%m@%r.dvi; %P -J'%F (Page %m)' %D/%F:%m@%r.ps" +/* pages in the region, between the current page and the lastly marked page */ +#define PRCMDRGN "cd %d; dviselect =%s:%e %F %D/%F:%s-%e@%r.dvi; %R %D/%F:%s-%e@%r.dvi > %D/%F:%s-%e@%r.ps; /bin/rm %D/%F:%s-%e@%r.dvi; %P -J'%F (Page %s-%e)' %D/%F:%s-%e@%r.ps" +/* all marked pages */ +#define PRCMDLST "cd %d; dviselect %G %F %D/%F:%o@%r.dvi; %R %D/%F:%o@%r.dvi > %D/%F:%o@%r.ps; /bin/rm %D/%F:%o@%r.dvi; %P -J'%F (Page %o)' %D/%F:%o@%r.ps" +/* the default printer to print-out DVI file */ +/* #define DVIPRINTER "lp" */ +/* work directory for temporal files */ +#define TEMPDIR "/tmp" +/* DVI filter command string */ +/* translation file from xdvi paper type into dvi filter paper size option */ +#ifdef DVI2PS +#define DVIFILTERCMD "dvi2ps -o %Z" +#define FILTOPTTBLFILE "/usr/local/share/texmf/xdvi/xdvipaper.dvi2ps-j" +#else /* ! DVI2PS */ +#ifdef JDVI2KPS +#define DVIFILTERCMD "jdvi2kps -pa %Z" +#define FILTOPTTBLFILE "/usr/local/share/texmf/xdvi/xdvipaper.jdvi2kps" +#else /* ! JDVI2KPS */ +#define DVIFILTERCMD "dvips -f -t %Z" +#define FILTOPTTBLFILE "/usr/local/share/texmf/xdvi/xdvipaper.dvips" +#endif /* JDVI2KPS */ +#endif /* DVI2PS */ +/* print command string */ +#define PRINTCMD "lpr -s -r -P%p" +#endif /* !NOPRINTDVI && !DVISEL */ +#ifdef PRINTDVI +/* the default printer to print-out DVI file */ +#define DVIPRINTER "lp" +#endif /* PRINTDVI */ +#ifndef NOPAPERMENU +#define PAPERMENU +#endif /* NOPAPERMENU */ + /* xdvi's definitions. */ #include "xdvi.h" #include "c-auto.h" diff -ruN xdvik-22.40y1.orig/texk/xdvik/xdvi.c xdvik-22.40y1/texk/xdvik/xdvi.c --- xdvik-22.40y1.orig/texk/xdvik/xdvi.c 2003-06-21 03:18:09.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/xdvi.c 2003-09-29 11:47:22.000000000 +0900 @@ -70,6 +70,10 @@ * GRID grid in magnification windows enabled * HTEX hypertex enabled. CURRENTLY DOESN't COMPILE WITHOUT. * Will be fixed in next major release, so don't care for now. + * MARKPAGE support for MarkRing of page + * TOC support for Table-of-Contents widget as page list + * PRINTDVI support for print-out menu + * DVISEL support for pipe-out patial DVI (under PRINTDVI) */ #if 0 @@ -126,6 +130,8 @@ #endif #endif +#include +#include #ifndef ALTFONT #define ALTFONT "cmr10" #endif @@ -151,6 +157,35 @@ #define DEFAULT_PAPER "us" #endif +#ifdef USE_ZEIT +#ifdef VF2FT +#include "vf2ft.h" +#else +#include +#endif + +#ifndef DEFAULT_FONTCONF +#define DEFAULT_FONTCONF "/usr/local/share/texmf/VFlib/vfontcap" +#endif +#endif /* USE_ZEIT */ + +#ifdef MARKPAGE +#include "markpage.h" +#endif /* MARKPAGE */ + +/*#ifdef PAPERMENU*/ +#include "paper.h" +#include "chardef.h" +/*#endif*/ /* PAPERMENU */ + +#ifdef TOC +#include "toc.h" +#endif /* TOC */ + +#ifdef PRINTDVI +#include "print.h" +#endif /* PRINTDVI */ + #include "version.h" @@ -351,9 +386,9 @@ static Pixel rule_pixel; #endif /* not TOOLKIT */ -struct mg_size_rec mg_size[5] = { {200, 150}, {400, 250}, {700, 500}, -{1000, 800}, {1200, 1200} -}; +struct mg_size_rec mg_size[7] = { {200, 150}, {400, 250}, {600, 500}, + {900, 800}, {1200, 1200}, + {1500,1600}, {1800,2000}}; static char *curr_page; char *global_dvi_name; /* save dvi file name, including eventually the path, always with .dvi extension */ @@ -393,7 +428,7 @@ static _Xconst char subst[] = "x"; /* another flag value */ static _Xconst char *subst_val[] = { -#ifdef BUTTONS +#if defined(BUTTONS) && !defined(ZOOM_BUTTON) "-shrinkbutton[1-9] ", #endif "-mgs[n] " @@ -417,6 +452,30 @@ {"-noinstall", ".install", XrmoptionNoArg, (XPointer) "off"}, #endif {"-rulecolor", ".ruleColor", XrmoptionSepArg, (XPointer) NULL}, +#ifdef USE_ZEIT + {"-fontconf", ".fontconf", XrmoptionSepArg, (XtPointer) NULL}, +#ifdef USE_VFONTMAP + {"-vfontmap", ".vfontmap", XrmoptionSepArg, (XtPointer) NULL}, +#endif /* USE_VFONTMAP */ +#endif /* USE_ZEIT */ +#ifdef PRINTDVI + {"-printer", ".printer", XrmoptionSepArg, (XtPointer) NULL}, +#ifdef DVISEL + {"-xdviprint", ".xdviPrint", XrmoptionSepArg, (XtPointer) NULL}, +#else /* DVISEL */ + {"-printall", ".printAll", XrmoptionSepArg, (XtPointer) NULL}, + {"-printcurrent",".printCurrent",XrmoptionSepArg, (XtPointer) NULL}, +#ifdef MARKPAGE + {"-printmarked",".printMarked", XrmoptionSepArg, (XtPointer) NULL}, + {"-printregion",".printRegion", XrmoptionSepArg, (XtPointer) NULL}, + {"-printlist", ".printList", XrmoptionSepArg, (XtPointer) NULL}, +#endif /* MARKPAGE */ +#endif /* DVISEL */ +#endif /* PRINTDVI */ +#ifdef SMALL_PANEL + {"-smallpanel", ".smallPanel", XrmoptionNoArg, (XtPointer) "on"}, + {"+smallpanel", ".smallPanel", XrmoptionNoArg, (XtPointer) "off"}, +#endif /* SMALL_PANEL */ {"-p", ".pixelsPerInch", XrmoptionSepArg, (XPointer) NULL}, {"-margins", ".Margin", XrmoptionSepArg, (XPointer) NULL}, {"-sidemargin", ".sideMargin", XrmoptionSepArg, (XPointer) NULL}, @@ -444,6 +503,10 @@ {"+expert", ".expert", XrmoptionNoArg, (XPointer) "off"}, {"+statusline", ".statusline", XrmoptionNoArg, (XPointer) "off"}, {"-statusline", ".statusline", XrmoptionNoArg, (XPointer) "on"}, +#ifdef ZOOM_BUTTON + /*{"-zoombutton", ".zoomButton", XrmoptionNoArg, (XPointer) "on"}, + {"+zoombutton", ".zoomButton", XrmoptionNoArg, (XPointer) "off"}, */ +#else /* !ZOOM_BUTTON */ {"-shrinkbutton1", ".shrinkButton1", XrmoptionSepArg, (XPointer) NULL}, {"-shrinkbutton2", ".shrinkButton2", XrmoptionSepArg, (XPointer) NULL}, {"-shrinkbutton3", ".shrinkButton3", XrmoptionSepArg, (XPointer) NULL}, @@ -453,6 +516,7 @@ {"-shrinkbutton7", ".shrinkButton7", XrmoptionSepArg, (XPointer) NULL}, {"-shrinkbutton8", ".shrinkButton8", XrmoptionSepArg, (XPointer) NULL}, {"-shrinkbutton9", ".shrinkButton9", XrmoptionSepArg, (XPointer) NULL}, +#endif /* ZOOM_BUTTON */ #endif {"-mgs", ".magnifierSize1", XrmoptionSepArg, (XPointer) NULL}, {"-mgs1", ".magnifierSize1", XrmoptionSepArg, (XPointer) NULL}, @@ -460,6 +524,8 @@ {"-mgs3", ".magnifierSize3", XrmoptionSepArg, (XPointer) NULL}, {"-mgs4", ".magnifierSize4", XrmoptionSepArg, (XPointer) NULL}, {"-mgs5", ".magnifierSize5", XrmoptionSepArg, (XPointer) NULL}, + {"-mgs6", ".magnifierSize6", XrmoptionSepArg, (XPointer) NULL}, + {"-mgs7", ".magnifierSize7", XrmoptionSepArg, (XPointer) NULL}, {"-warnspecials", ".warnSpecials", XrmoptionNoArg, (XPointer) "on"}, {"+warnspecials", ".warnSpecials", XrmoptionNoArg, (XPointer) "off"}, {"-hush", ".Hush", XrmoptionNoArg, (XPointer) "on"}, @@ -521,6 +587,10 @@ {"-browser", ".wwwBrowser", XrmoptionSepArg, (XPointer) NULL}, {"-base", ".urlBase", XrmoptionSepArg, (XPointer) NULL}, #endif +#ifdef COLOR + {"-usecolor", ".colorSpecial", XrmoptionNoArg, (XtPointer) "on"}, + {"+usecolor", ".colorSpecial", XrmoptionNoArg, (XtPointer) "off"}, +#endif /* COLOR */ }; @@ -544,13 +614,19 @@ "^z:quit()\n" #endif "\"q\":quit()\n" +#ifndef VI_KEY "\"h\":help()\n" +#endif /* !VI_KEY */ #ifdef HTEX "\"i\":htex-anchorinfo()\n" "\"B\":htex-back()\n" #endif "\"?\":help()\n" +#ifdef VI_KEY + "\"j\":down()\n" +#else /* !VI_KEY */ "\"d\":down()\n" +#endif /* !VI_KEY */ "\"f\":forward-page()\n" "\"n\":forward-page()\n" "\" \":down-or-next()\n" @@ -568,15 +644,43 @@ "\"D\":toggle-grid-mode()\n" #endif "\"g\":goto-page()\n" +#ifdef MARKPAGE + "\"a\":mark-all-pages()\n" + "\"A\":unmark-all-pages()\n" + "\"m\":mark-page()\n" + "\"U\":unmark-page()\n" + "\"\\\'\":goto-lastly-marked-page()\n" + "\"\\\"\":exchange-current-and-marked-page()\n" + "\"`\":trace-back-mark-ring()\n" +#endif /* MARKPAGE */ +#ifdef ZOOM_BUTTON + "\"Z\":zoom(1)\n" + "\"z\":zoom(-1)\n" +#endif /* !ZOOM_BUTTON */ "\">\":goto-page()\n" "\"<\":goto-page(1)\n" "\"\\^\":home()\n" "\"c\":center()\n" +#ifdef VI_KEY + "\"K\":set-keep-flag()\n" + "\"h\":left()\n" + "\"l\":right()\n" +#else /* !VI_KEY */ "\"k\":set-keep-flag()\n" "\"l\":left()\n" "\"r\":right()\n" +#endif /* !VI_KEY */ +#ifdef PAPERMENU + "\"T\":switch-magnifier-units()\n" + "\"t\":paper()\n" +#else /* !PAPERMENU */ "\"t\":switch-magnifier-units()\n" +#endif /* !PAPERMENU */ +#ifdef VI_KEY + "\"k\":up()\n" +#else /* !VI_KEY */ "\"u\":up()\n" +#endif /* !VI_KEY */ "\"M\":set-margins()\n" "\"s\":set-shrink-factor()\n" "\"S\":set-density()\n" @@ -632,9 +736,14 @@ "Reread:reread-dvi-file()\n" "Help:help()\n\n" "Full size:set-shrink-factor(1)\n" +#ifdef ZOOM_BUTTON + "Zoom <:zoom(-1)\n" + "Zoom >:zoom(1)\n\n" +#else /* !ZOOM_BUTTON */ "$%%:shrink-to-dpi(150)\n" "$%%:shrink-to-dpi(100)\n" "$%%:shrink-to-dpi(75)\n\n" +#endif /* !ZOOM_BUTTON */ "First:goto-page(1)\n" "Page-10:back-page(10)\n" "Page-5:back-page(5)\n" @@ -643,6 +752,12 @@ "Page+5:forward-page(5)\n" "Page+10:forward-page(10)\n" "Last:goto-page()\n\n" +#ifdef PRINTDVI + "Print:print()\n\n" +#endif /* PRINTDVI */ +#ifdef PAPERMENU + "Paper:paper()\n\n" +#endif /* PAPERMENU */ #if PS "View PS:set-ps(toggle)\n" #endif @@ -792,6 +907,10 @@ offset(statusline), XtRString, "true"}, {"buttonTranslations", "ButtonTranslations", XtRString, sizeof(char *), offset(button_translations), XtRString, (XtPointer) default_button_config}, +#ifdef ZOOM_BUTTON + /* {"zoomButton", "ZoomButton", XtRBoolean, sizeof(Boolean), + offset(zoombutton), XtRString, "true"}, */ +#else /* ZOOM_BUTTON */ {"shrinkButton1", "ShrinkButton1", XtRInt, sizeof(int), offset(shrinkbutton[0]), XtRImmediate, (XtPointer) 0}, {"shrinkButton2", "ShrinkButton2", XtRInt, sizeof(int), @@ -810,6 +929,7 @@ offset(shrinkbutton[7]), XtRImmediate, (XtPointer) 0}, {"shrinkButton9", "ShrinkButton9", XtRInt, sizeof(int), offset(shrinkbutton[8]), XtRImmediate, (XtPointer) 0}, +#endif /* ZOOM_BUTTON */ {"buttonSideSpacing", "ButtonSpacing", XtRInt, sizeof(int), offset(btn_side_spacing), XtRImmediate, (XtPointer) 8}, {"buttonTopSpacing", "ButtonSpacing", XtRInt, sizeof(int), @@ -831,6 +951,10 @@ offset(mg_arg[3]), XtRString, (XtPointer) NULL}, {"magnifierSize5", "MagnifierSize", XtRString, sizeof(char *), offset(mg_arg[4]), XtRString, (XtPointer) NULL}, + {"magnifierSize6", "MagnifierSize", XtRString, sizeof(char *), + offset(mg_arg[5]), XtRString, (XtPointer) NULL}, + {"magnifierSize7", "MagnifierSize", XtRString, sizeof(char *), + offset(mg_arg[6]), XtRString, (XtPointer) NULL}, #ifdef GREY {"grey", "Grey", XtRBoolean, sizeof(Boolean), offset(_use_grey), XtRString, "true"}, @@ -849,6 +973,43 @@ {"urlBase", "URLBase", XtRString, sizeof(char *), offset(_URLbase), XtRString, (XtPointer) NULL}, #endif /* HTEX */ +#ifdef USE_ZEIT + {"fontconf", "FontConf", XtRString, sizeof(char *), + offset(fontconf), XtRString, (XtPointer) DEFAULT_FONTCONF}, +#ifdef USE_VFONTMAP + {"vfontmap", "Vfontmap", XtRString, sizeof(char *), + offset(vfontmap), XtRString, (XtPointer) DEFAULT_FONTMAP}, +#endif /* USE_VFONTMAP */ +#endif /* USE_ZEIT */ +#ifdef PRINTDVI + {"printer", "Printer", XtRString, sizeof(char *), + offset(printer), XtRString, (XtPointer)NULL}, +#ifdef DVISEL + {"xdviPrint", "XdviPrint", XtRString, sizeof(char *), + offset(xdviPrint), XtRString, (XtPointer)NULL}, +#else /* DVISEL */ + {"printAll", "PrintAll", XtRString, sizeof(char *), + offset(printAll), XtRString, (XtPointer)PRCMDALL}, + {"printCurrent", "PrintCurrent", XtRString, sizeof(char *), + offset(printCurrent), XtRString, (XtPointer)PRCMDCUR}, +#ifdef MARKPAGE + {"printMarked", "PrintMarked", XtRString, sizeof(char *), + offset(printMarked), XtRString, (XtPointer)PRCMDMRK}, + {"printRegion", "PrintRegion", XtRString, sizeof(char *), + offset(printRegion), XtRString, (XtPointer)PRCMDRGN}, + {"printList", "PrintList", XtRString, sizeof(char *), + offset(printList), XtRString, (XtPointer)PRCMDLST}, +#endif /* MARKPAGE */ +#endif /* DVISEL */ +#endif /* PRINTDVI */ +#ifdef SMALL_PANEL + {"smallPanel", "SmallPanel", XtRBoolean, sizeof(Boolean), + offset(smallpanel), XtRString, "true"}, +#endif /* SMALL_PANEL */ +#ifdef COLOR + {"colorSpecial", "ColorSpecial", XtRBoolean, sizeof (Boolean), + offset(_use_color), XtRString, "true"}, +#endif /* COLOR */ {"helpTopicsButtonLabel", "HelpTopicsButtonLabel", XtRString, sizeof(char *), offset(_help_topics_button_label), XtRString, "Topic"}, {"helpQuitButtonLabel", "HelpQuitButtonLabel", XtRString, sizeof(char *), @@ -909,6 +1070,26 @@ /* gamma */ "g", #endif /* rule */ "color", +#ifdef USE_ZEIT + /* vfontcap */ "vfontcap", +#ifdef USE_VFONTMAP + /* vfontmap */ "vfontmap", +#endif /* USE_VFONTMAP */ +#endif /* USE_ZEIT */ +#ifdef PRINTDVI + /* printer */ "printer", +#ifdef DVISEL + /* xdviprint */ "print command", +#else /* DVISEL */ + /* printall */ "print command", + /* printcurrent */ "print command", +#ifdef MARKPAGE + /* printmarked */ "print command", + /* printregion */ "print command", + /* printlist */ "print command", +#endif /* MARKPAGE */ +#endif /* DVISEL */ +#endif /* PRINTDVI */ /* p */ "pixels", /* margins */ "dimen", /* sidemargin */ "dimen", @@ -922,7 +1103,7 @@ /* editor */ "editor", /* sourceposition */ "linenumber[ ]*filename", /* rv */ "^-l", "-rv", -#ifdef BUTTONS +#if defined(BUTTONS) && !defined(ZOOM_BUTTON) /* shrinkbutton1 */ subst, /* shrinkbutton2 */ silent, /* shrinkbutton3 */ silent, @@ -939,6 +1120,8 @@ /* mgs3 */ silent, /* mgs4 */ silent, /* mgs5 */ silent, + /* mgs6 */ silent, + /* mgs7 */ silent, /* bw */ "^-safer", "-bw ", /* fg */ "color", /* foreground */ silent, @@ -1124,6 +1307,16 @@ { "-noinstall", "install", FalseArg, Bool3Arg, 1, NULL, ADDR(install)}, #endif { "-rulecolor", "ruleColor", SepArg, StringArg, 1, "color", ADDR(rule_color)}, +#ifdef USE_ZEIT + {"-fontconf", "fontconf", SepArg, StringArg, 1, "vfontcap", ADDR(fontconf)}, +#ifdef USE_VFONTMAP + {"-vfontmap", "vfontmap", SepArg, StringArg, 1, "vfontmap", ADDR(vfontmap)}, +#endif /* USE_VFONTMAP */ +#endif /* USE_ZEIT */ +#ifdef SMALL_PANEL + { "-smallpanel", NULL, TrueArg, BooleanArg, 2, NULL, ADDR(smallpanel)}, + { "+smallpanel", "smallPanel", FalseArg, BooleanArg, 1, NULL, ADDR(smallpanel)}, +#endif /* SMALL_PANEL */ { "-p", "pixelsPerInch", SepArg, NumberArg, 1, "pixels", ADDR(_pixels_per_inch)}, { "-margins", "Margin", SepArg, StringArg, 3, "dimen", (XPointer) & margins}, { "-sidemargin", "sideMargin", SepArg, StringArg, 1, "dimen", ADDR(sidemargin)}, @@ -1154,6 +1347,8 @@ { "-mgs3", "magnifierSize3", SepArg, StringArg, 1, silent, ADDR(mg_arg[2])}, { "-mgs4", "magnifierSize4", SepArg, StringArg, 1, silent, ADDR(mg_arg[3])}, { "-mgs5", "magnifierSize5", SepArg, StringArg, 1, silent, ADDR(mg_arg[4])}, + { "-mgs6", "magnifierSize6", SepArg, StringArg, 1, silent, ADDR(mg_arg[5])}, + { "-mgs7", "magnifierSize7", SepArg, StringArg, 1, silent, ADDR(mg_arg[6])}, { "-warnspecials", NULL, TrueArg, BooleanArg, 2, NULL, ADDR(_warn_spec)}, { "+warnspecials", "warnSpecials", FalseArg, BooleanArg, 1, NULL, ADDR(_warn_spec)}, { "-hush", NULL, TrueArg, BooleanArg, 6, NULL, (XPointer) & hush}, @@ -1227,6 +1422,10 @@ { "-browser", "wwwBrowser", SepArg, StringArg, 1, ADDR(_browser)}, { "-base", "urlBase", SepArg, StringArg, 1, ADDR(_URLbase)}, #endif +#ifdef COLOR + {"-usecolor", "colorSpecial", TrueArg, BooleanArg, 2, NULL, ADDR(_use_color)}, + {"+usecolor", "colorSpecial", FalseArg, BooleanArg, 1, NULL, ADDR(_use_color)}, +#endif /* COLOR */ }; #endif /* TOOLKIT */ @@ -1668,7 +1867,7 @@ #endif /* PS */ /* debug_arg */ NULL, /* version_flag */ False, - /* mg_arg */ {NULL, NULL, NULL, NULL, NULL}, + /* mg_arg */ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, #ifdef GREY /* use_grey */ True, /* install */ Maybe, @@ -1682,6 +1881,9 @@ /* _browser */ (char *)NULL, /* _URLbase */ (char *)NULL, #endif +#ifdef COLOR + /* use_color */ True, +#endif }; static Pixel @@ -2056,7 +2258,7 @@ which are used internally. The newline characters are a hack to format the list neatly for error messages. */ -static _Xconst char *paper_types[] = { +_Xconst char *paper_types[] = { "us", "8.5x11in", "usr", "11x8.5in", "legal", "8.5x14in", @@ -2125,17 +2327,25 @@ "c7r", "11.46x8.1cm", }; +#ifdef PAPERMENU +Boolean +#else static Boolean -set_paper_type(void) +#endif +set_paper_type(type) + char* type; { _Xconst char *arg, *arg1; - char temp[21]; + char temp[PAPERTYPELEN]; _Xconst char **p; char *q; - if (strlen(resource.paper) > sizeof(temp) - 1) - return False; - arg = resource.paper; + if (type!=NULL && *type!=CHAR_NULL) + arg = type; + else + arg = resource.paper; + if (strlen(arg) > sizeof(temp) - 1) return False; + q = temp; for (;;) { /* convert to lower case */ char c = *arg++; @@ -2160,8 +2370,55 @@ #ifdef GRID unshrunk_paper_unit = atopixunit(arg); #endif /* GRID */ - return (unshrunk_paper_w != 0 && unshrunk_paper_h != 0); + if (unshrunk_paper_w != 0 && unshrunk_paper_h != 0) { + SetPaperSize(temp); /* Remember paper size/type */ + return True; + } else + return False; +} + +#ifdef PRINTDVI +char* + resource_printer() +{ + return ((char *)resource.printer); } +#ifdef DVISEL +char* + resource_print_command() +{ + return ((char *)resource.xdviPrint); +} +#else /* DVISEL */ +char* + resource_print_command(PrintStyle) +int PrintStyle; +{ + switch (PrintStyle) { + case PRINTALL: + return ((char *)resource.printAll); + break; + case PRINTCUR: + return ((char *)resource.printCurrent); + break; +#ifdef MARKPAGE + case PRINTMARKED: + return ((char *)resource.printMarked); + break; + case PRINTREGION: + return ((char *)resource.printRegion); + break; + case PRINTALLMARKED: + return ((char *)resource.printList); + break; +#endif /* MARKPAGE */ + default: + return NULL; + break; + } +} +#endif /* DVISEL */ +#endif /* PRINTDVI */ /* Set the icon name and title name standard properties on `top_level' (which we don't pass in because it is a different type for TOOLKIT @@ -2459,6 +2716,15 @@ debug = DBG_ALL; } +#ifdef TOOLKIT +#ifdef KANJI +#ifdef USE_ZEIT + VF_Init(NULL); +#endif /* USE_ZEIT */ + read_VFontmap(); +#endif /* KANJI */ +#endif /* TOOLKIT */ + /* Check early for whether to pass off to a different xdvi process * (-sourceposition argument for reverse source special lookup). */ @@ -2563,7 +2829,7 @@ : pixels_per_inch; offset_y = resource.yoffset ? atopix(resource.yoffset, True) : pixels_per_inch; - if (!set_paper_type()) { + if (!set_paper_type(NULL)) { _Xconst char **p; fprintf(stderr, "%s: Unrecognized paper type \"%s\". Legal values are:\n ", prog, resource.paper); for (p = paper_types; p < paper_types + XtNumber(paper_types); p += 2) @@ -2574,7 +2840,7 @@ "(pt, pc, in, bp, cm, mm, dd, cc, or sp).\n\n"); xdvi_exit(1); } - for (i = 0; i < 5; ++i) + for (i = 0; i < 7; ++i) if (resource.mg_arg[i] != NULL) { char *s; @@ -2793,6 +3059,9 @@ if (debug & DBG_PK) fprintf(stdout, "--- using depth 1\n"); #endif +#ifdef COLOR + use_color = False; +#endif /* COLOR */ use_grey = False; } @@ -2806,13 +3075,23 @@ back_color_data.pixel = back_Pixel; XQueryColor(DISP, our_colormap, &back_color_data); init_plane_masks(); - if (!copy) { + if ( +#ifdef COLOR + !copy && plane_masks[0] +#else + !copy +#endif /* COLOR */ + ) { #ifdef XSERVER_INFO if (debug & DBG_PK) fprintf(stdout, "--- not using copy\n"); #endif back_color_data.pixel = back_Pixel; XStoreColor(DISP, our_colormap, &back_color_data); +#ifdef COLOR + fore_color_data.pixel = fore_Pixel; + XStoreColor(DISP, our_colormap, &fore_color_data); +#endif /* COLOR */ } } #endif @@ -2821,6 +3100,10 @@ * Step 3: Initialize the dvi file and set titles. */ +#ifdef MARKPAGE + CreateNewPageMarkRing(); +#endif /* MARKPAGE */ + #ifdef T1LIB /* At this point DISP, our_visual, our_depth and our_colormap must be defined, and they are */ @@ -2834,6 +3117,16 @@ init_dvi_file(); +#ifdef PAPERMENU + InitPaperType((int)XtNumber(paper_types)); +#endif /* PAPERMENU */ +#ifdef MARKPAGE + MakePageMarkRingNull(); +#endif /* MARKPAGE */ +#ifdef PRINTDVI + InitPrintMenu(); +#endif /* PRINTDVI */ + set_icon_and_title(dvi_name, &icon_name, &title_name, 0); /* @@ -3293,10 +3586,17 @@ rebindkey(XK_Cancel, "q"); rebindkey(XK_Redo, "A"); rebindkey(XK_Home, "^"); +#ifdef VI_KEY + rebindkey(XK_Left, "h"); + rebindkey(XK_Up, "k"); + rebindkey(XK_Right, "l"); + rebindkey(XK_Down, "j"); +#else /* VI_KEY */ rebindkey(XK_Left, "l"); rebindkey(XK_Up, "u"); rebindkey(XK_Right, "r"); rebindkey(XK_Down, "d"); +#endif /* VI_KEY */ rebindkey(XK_End, "g"); #ifdef XK_Page_Up rebindkey(XK_Page_Up, "b"); @@ -3304,10 +3604,17 @@ #endif #ifdef XK_KP_Left rebindkey(XK_KP_Home, "^"); +#ifdef VI_KEY + rebindkey(XK_KP_Left, "h"); + rebindkey(XK_KP_Up, "k"); + rebindkey(XK_KP_Right, "l"); + rebindkey(XK_KP_Down, "j"); +#else /* VI_KEY */ rebindkey(XK_KP_Left, "l"); rebindkey(XK_KP_Up, "u"); rebindkey(XK_KP_Right, "r"); rebindkey(XK_KP_Down, "d"); +#endif /* VI_KEY */ rebindkey(XK_KP_Prior, "b"); rebindkey(XK_KP_Next, "f"); rebindkey(XK_KP_Delete, "\177"); diff -ruN xdvik-22.40y1.orig/texk/xdvik/xdvi.h xdvik-22.40y1/texk/xdvik/xdvi.h --- xdvik-22.40y1.orig/texk/xdvik/xdvi.h 2002-12-27 07:35:27.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/xdvi.h 2003-09-29 11:47:22.000000000 +0900 @@ -110,6 +110,27 @@ #include "kpathsea/systypes.h" #include "kpathsea/c-memstr.h" +#ifdef ASCIIDNP +#ifndef KANJI +#define KANJI +#endif +#ifdef NTTZEIT +#undef NTTZEIT +#endif +#ifdef USE_ZEIT +#undef USE_ZEIT +#endif +#endif /* ASCIIDNP */ + +#ifdef NTTZEIT +#ifndef KANJI +#define KANJI +#endif +#ifndef USE_ZEIT +#define USE_ZEIT +#endif +#endif /* NTTZEIT */ + #include /* include Xfuncs.h, if available */ #include /* needed for XDestroyImage */ #include @@ -294,6 +315,18 @@ #define Fflush (void) fflush #define Strcat (void) strcat #define Strcpy (void) strcpy +#if defined(KANJI) && !defined(ASCIIDNP) +#ifdef VF2FT +#define jisindex(c) (c) +#else +#define jisindex(c) (((c) < 0x2000 || 0x7d00 < (c)) ? 0 : ((c) - 0x2000)) +#endif +#ifdef VF2FT +#define KTABLESIZE 0x10000 +#else +#define KTABLESIZE 0x5d00 +#endif +#endif /* KANJI && !ASCIIDNP */ #ifndef __LINE__ #define __LINE__ 0 @@ -363,7 +396,13 @@ them. */ struct framedata { long dvi_h, dvi_v, w, x, y, z; +#if defined(PS_DPS) || defined(PS_NEWS) || defined(PS_GS) || defined(GS_PATH) + long ps_h, ps_v; +#endif int pxl_v; +#ifdef PTEX + int tdir; +#endif } data; struct frame *next, *prev; }; @@ -399,12 +438,19 @@ #define DVI_H currinf.data.dvi_h #define PXL_H pixel_conv(currinf.data.dvi_h) +#define PS_H currinf.data.ps_h +#define PSP_H pixel_conv(currinf.data.ps_h) #define DVI_V currinf.data.dvi_v #define PXL_V currinf.data.pxl_v +#define PS_V currinf.data.ps_v +#define PSP_V pixel_conv(currinf.data.ps_v) #define WW currinf.data.w #define XX currinf.data.x #define YY currinf.data.y #define ZZ currinf.data.z +#ifdef PTEX +#define TATE currinf.data.tdir +#endif #define ROUNDUP(x,y) (((x)+(y)-1)/(y)) EXTERN int current_page; @@ -431,7 +477,7 @@ #define PS 0 #endif -#if PS +#if PS || defined(COLOR) EXTERN int scanned_page; /* last page prescanned */ EXTERN int scanned_page_bak; /* actual value of the above */ EXTERN int scanned_page_reset; /* number to reset the above to */ @@ -441,6 +487,14 @@ * Table of page offsets in DVI file, indexed by page number - 1. * Initialized in prepare_pages(). */ +#ifdef PAGENUM +typedef struct { + long offset; + int number; +} PAGE_INDEX; +EXTERN PAGE_INDEX *page_index; +#endif /* PAGENUM */ + EXTERN long *page_offset; /* @@ -487,6 +541,12 @@ char *pixmap2_t; #endif struct bitmap bitmap2; /* shrunken bitmap for character */ +#ifdef PTEX + int tdir; +#endif + short x3, y3; /* x and y offset in pixels (backup) */ + struct bitmap bitmap3; /* bitmap for character (backup) */ + float matrix[2][2]; }; /* @@ -527,7 +587,7 @@ long checksum; /* checksum */ unsigned short timestamp; /* for LRU management of fonts */ ubyte flags; /* flags byte (see values below) */ -#ifdef Omega +#if defined(Omega) || defined(KANJI) wide_ubyte maxchar; /* largest character code */ #else ubyte maxchar; /* largest character code */ @@ -539,6 +599,19 @@ struct glyph *glyph; /* these fields are used by (loaded) virtual fonts */ struct font **vf_table; /* list of fonts used by this vf */ +#if defined(KANJI) && !defined(ASCIIDNP) + struct glyph **kglyph; +#ifdef USE_ZEIT + int vf; +#ifdef NTTZEIT + int index; +#endif /* NTTZEIT */ +#endif /* USE_ZEIT */ +#endif /* KANJI && !ASCIIDNP */ +#ifdef PTEX + int dir; + int tate; +#endif struct tn *vf_chain; /* ditto, if TeXnumber >= VFTABLELEN */ struct font *first_font; /* first font defined */ struct macro *macro; @@ -553,10 +626,41 @@ #define FONT_IN_USE 1 /* used for housekeeping */ #define FONT_LOADED 2 /* if font file has been read */ #define FONT_VIRTUAL 4 /* if font is virtual */ +#if defined(KANJI) && !defined(ASCIIDNP) +#define FONT_KANJI 8 /* if font is kanji */ +#ifdef NTTZEIT +#define FONT_DNP 16 /* if font is DNP kanji */ +#endif /* NTTZEIT */ +#endif /* KANJI && !ASCIIDNP */ + +struct vfontmap { + char *jfmname; + char *vfname; + int flag; +#ifdef PTEX + int tate; +#ifdef VF2FT + int encoding; + int cidv; +#endif +#endif + struct vfontmap *next_ptr; +}; #define TNTABLELEN 30 /* length of TeXnumber array (dvi file) */ #define VFTABLELEN 5 /* length of TeXnumber array (virtual fonts) */ +#ifdef PTEX +extern struct TateCorrection { + short code; + short x, y; +} TateCorrectionTable[]; +#define TCOR_NOP 0 +#define TCOR_SHIFT 1 +#define TCOR_ROTATE 2 +#define TCOR_AUTOSHIFT 3 +#endif + struct tn { struct tn *next; /* link to next TeXnumber info block */ unsigned int TeXnumber; /* font number (in DVI file) */ @@ -566,7 +670,7 @@ EXTERN struct font *tn_table[TNTABLELEN]; EXTERN struct font *font_head INIT(NULL); EXTERN struct tn *tn_head INIT(NULL); -#ifdef Omega +#if defined(Omega) || defined(KANJI) EXTERN wide_ubyte maxchar; #else EXTERN ubyte maxchar; @@ -658,14 +762,18 @@ Boolean expert; Boolean statusline; _Xconst char *button_translations; +#ifdef ZOOM_BUTTON + /* Boolean zoombutton; */ +#else /* !ZOOM_BUTTON */ int shrinkbutton[9]; +#endif /* !ZOOM_BUTTON */ int btn_side_spacing; int btn_top_spacing; int btn_between_spacing; int btn_between_extra; int btn_border_width; #endif - _Xconst char *mg_arg[5]; + _Xconst char *mg_arg[7]; #ifdef GREY Boolean _use_grey; Bool3 install; @@ -683,6 +791,32 @@ char *_URLbase; char *_scroll_pages; #endif /* HTEX */ +#ifdef USE_ZEIT + _Xconst char *fontconf; +#ifdef USE_VFONTMAP + _Xconst char *vfontmap; +#endif /* USE_VFONTMAP */ +#endif /* USE_ZEIT */ +#ifdef PRINTDVI + _Xconst char* printer; +#ifdef DVISEL + _Xconst char* xdviPrint; +#else /* DVISEL */ + _Xconst char* printAll; + _Xconst char* printCurrent; +#ifdef MARKPAGE + _Xconst char* printMarked; + _Xconst char* printRegion; + _Xconst char* printList; +#endif /* MARKPAGE */ +#endif /* DVISEL */ +#endif /* PRINTDVI */ +#ifdef SMALL_PANEL + Boolean smallpanel; +#endif /* SMALL_PANEL */ +#ifdef COLOR + Boolean _use_color; +#endif /* COLOR */ char * _help_topics_button_label; char * _help_quit_button_label; char * _help_intro; @@ -725,6 +859,9 @@ #define scroll_pages resource._scroll_pages #define KPSE_DEBUG_HYPER 6 #endif /* HTEX */ +#ifdef COLOR +#define use_color resource._use_color +#endif /* COLOR */ #ifndef TOOLKIT @@ -741,11 +878,29 @@ EXTERN XColor fore_color_data, back_color_data; #endif +#ifdef COLOR +typedef struct { + XColor background; + int stack_top; + XColor *color_stack; + /* color_stack[stack_top] is foreground */ +} PAGE_COLOR; + +EXTERN PAGE_COLOR *page_color; +EXTERN Boolean color_warn_done; + +EXTERN XColor *color_stack; +EXTERN int color_stack_top, color_stack_len; + +EXTERN Pixel *color_allocated; +EXTERN int color_allocated_top, color_allocated_len; +#endif /* COLOR */ + extern struct mg_size_rec { int w; int h; } - mg_size[5]; + mg_size[7]; EXTERN int debug INIT(0); @@ -1060,6 +1215,7 @@ extern void init_plane_masks ARGS((void)); extern void init_pix ARGS((void)); #endif /* GREY */ +extern void init_colors ARGS((void)); extern int check_goto_page(int pageno); extern void reconfig ARGS((void)); #ifdef TOOLKIT @@ -1080,6 +1236,7 @@ #else /* PS */ extern void read_events ARGS((wide_bool)); #endif /* PS */ +extern void do_goto_page ARGS((int)); extern void redraw_page ARGS((void)); extern void enable_intr ARGS((void)); extern void do_pages ARGS((void)); @@ -1097,16 +1254,26 @@ extern void init_dvi_file ARGS((void)); extern void set_dvi_property ARGS((void)); extern int dvi_file_changed ARGS((void)); +#ifdef ASCIIDNP +extern void adj_kanjiwidth ARGS((struct font *, unsigned int, ubyte)); +extern void define_kanjifont ARGS((unsigned int)); +#endif /* ASCIIDNP */ #ifdef GRID extern void put_grid ARGS((int, int, unsigned int, unsigned int, unsigned int, GC)); #endif /* GRID */ #ifndef TEXXET extern long set_char ARGS((wide_ubyte)); +#if defined(KANJI) && !defined(ASCIIDNP) +extern long set_char2 ARGS((wide_ubyte)); +#endif /* KANJI && !ASCIIDNP */ extern long load_n_set_char ARGS((wide_ubyte)); extern long set_vf_char ARGS((wide_ubyte)); extern long set_t1_char ARGS((wide_ubyte)); #else /* TEXXET */ extern void set_char ARGS((wide_ubyte, wide_ubyte)); +#if defined(KANJI) && !defined(ASCIIDNP) +extern void set_char2 ARGS((wide_ubyte, wide_ubyte)); +#endif /* KANJI && !ASCIIDNP */ extern void load_n_set_char ARGS((wide_ubyte, wide_ubyte)); extern void set_vf_char ARGS((wide_ubyte, wide_ubyte)); extern void set_t1_char ARGS((wide_ubyte, wide_ubyte)); @@ -1141,7 +1308,10 @@ extern FILE *font_open ARGS((char *, char **, double, int *, int, char **)); #endif /* T1LIB */ -#if PS +#ifdef COLOR +extern void InitColorStack ARGS((void)); +#endif /* COLOR */ +#if PS || defined(COLOR) extern void ps_clear_cache ARGS((void)); extern void ps_newdoc ARGS((void)); extern void ps_destroy ARGS((void)); @@ -1216,11 +1386,22 @@ #endif extern void read_PK_index ARGS((struct font *, wide_bool)); extern void read_GF_index ARGS((struct font *, wide_bool)); -#ifdef Omega +#if defined(Omega) || defined(KANJI) extern unsigned long read_VF_index ARGS((struct font *, wide_bool)); #else /* OMEGA */ extern void read_VF_index ARGS((struct font *, wide_bool)); #endif /* OMEGA */ +#ifdef KANJI +extern int isdnpfont ARGS((char *)); +extern int iskanjifont ARGS((char *)); +extern void read_VFontmap ARGS((void)); +#endif /* KANJI */ +#ifdef USE_ZEIT +extern int read_ZEIT_index ARGS((struct font *)); +#endif /* USE_ZEIT */ +#ifdef NTTZEIT +extern int read_NTT_index ARGS((struct font *)); +#endif /* NTTZEIT */ /* SU 2000/03/10: removed the HTEX condition for next declaration */ extern int pointerlocate ARGS((int *, int *)); diff -ruN xdvik-22.40y1.orig/texk/xdvik/xdvipaper.dvi2ps-j xdvik-22.40y1/texk/xdvik/xdvipaper.dvi2ps-j --- xdvik-22.40y1.orig/texk/xdvik/xdvipaper.dvi2ps-j 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/xdvipaper.dvi2ps-j 2003-09-29 11:47:22.000000000 +0900 @@ -0,0 +1,82 @@ +# +# Translation table from xdvi paper type (-paper option) +# into dvi2ps-1.9j paper type (-o option) +# +# Available under xdvi-pl17 markpage+toc+printdvi+paper patch +# written by ONO Kouichi +# +# Table format : +# +# xdvi paper type [dvi2ps-j paper type] +# +###### +###### US paper +###### +us letter # US letter size (8.5"*11") +## us a4 # US letter size (8.5"*11") +usr letterlandscape # US letter landscape size (8.5"*11") +## usr a4landscape # US letter landscape size (8.5"*11") +legal # Legal size (8.5"*14") +foolscap b4 # foolscap (13.5"*17") + +###### +###### ISO A +###### +a1 a3 # ISO A1 portrait size +a1r a3landscape # ISO A1 landscape size +a2 a3 # ISO A2 portrait size +a2r a3landscape # ISO A2 landscape size +a3 # ISO A3 portrait size +## a3 a4 # ISO A3 portrait size +a3r a3landscape # ISO A3 landscape size +## a3r a4landscape # ISO A3 landscape size +a4 # ISO A4 portrait size +a4r a4landscape # ISO A4 landscape size +a5 # ISO A5 portrait size +a5r a5landscape # ISO A5 landscape size +## a5r a4landscape # ISO A5 landscape size +a6 a5 # ISO A6 portrait size +a6r a5landscape # ISO A6 landscape size +a7 a5 # ISO A7 portrait size +a7r a5landscape # ISO A7 landscape size + +###### +###### ISO B +###### +b1 b3 # ISO B1 portrait size +b1r b3landscape # ISO B1 landscape size +b2 b3 # ISO B2 portrait size +b2r b3landscape # ISO B2 landscape size +b3 b3 # ISO B3 portrait size +b3r b3landscape # ISO B3 landscape size +b4 # ISO B4 portrait size +b4r b4landscape # ISO B4 landscape size +b5 # ISO B5 portrait size +b5r b5landscape # ISO B5 landscape size +b6 b5 # ISO B6 portrait size +b6r b5landscape # ISO B6 landscape size +b7 b5 # ISO B7 portrait size +b7r b5landscape # ISO B7 landscape size + +###### +###### ISO C +###### +c1 b4 # ISO B1 portrait size +c1r b4landscape # ISO C1 landscape size +c2 b4 # ISO C2 portrait size +c2r b4landscape # ISO C2 landscape size +c3 b4 # ISO C3 portrait size +c3r b4landscape # ISO C3 landscape size +c4 b4 # ISO C4 portrait size +c4r b4landscape # ISO C4 landscape size +c5 a4 # ISO C5 portrait size +c5r a4landscape # ISO C5 landscape size +c6 b5 # ISO C6 portrait size +c6r b5landscape # ISO C6 landscape size +c7 a5 # ISO C7 portrait size +c7r a5landscape # ISO C7 landscape size + +###### +###### forced to use it as default when the paper type is unknown +###### += a4 # default diff -ruN xdvik-22.40y1.orig/texk/xdvik/xdvipaper.dvips xdvik-22.40y1/texk/xdvik/xdvipaper.dvips --- xdvik-22.40y1.orig/texk/xdvik/xdvipaper.dvips 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/xdvipaper.dvips 2003-09-29 11:47:22.000000000 +0900 @@ -0,0 +1,85 @@ +# +# Translation table from xdvi paper type (-paper option) +# into dvips paper type (-t option) +# +# Available under xdvi-pl17 markpage+toc+printdvi+paper patch +# written by ONO Kouichi +# +# Table format : +# +# xdvi paper type [dvips paper type] +# +###### +###### US paper +###### +us letter # US letter size (8.5"*11") +## us a4 # US letter size (8.5"*11") +usr letter -t landscape # US letter landscape size (8.5"*11") +## usr a4 -t landscape # US letter landscape size (8.5"*11") +legal # Legal size (8.5"*14") +foolscap ledger # foolscap (13.5"*17") + +###### +###### ISO A +###### +a1 a3 # ISO A1 portrait size +a1r a3 -t landscape # ISO A1 landscape size +a2 a3 # ISO A2 portrait size +a2r a3 -t landscape # ISO A2 landscape size +a3 # ISO A3 portrait size +## a3 a4 # ISO A3 portrait size +a3r a3 -t landscape # ISO A3 landscape size +## a3r a4 -t landscape # ISO A3 landscape size +a4 # ISO A4 portrait size +a4r a4 -t landscape # ISO A4 landscape size +a5 a4 # ISO A5 portrait size +a5r a4 -t landscape # ISO A5 landscape size +a6 a4 # ISO A6 portrait size +a6r a4 -t landscape # ISO A6 landscape size +a7 a4 # ISO A7 portrait size +a7r a4 -t landscape # ISO A7 landscape size + +###### +###### ISO B +###### +b1 a3 # ISO B1 portrait size +b1r a3 -t landscape # ISO B1 landscape size +b2 a3 # ISO B2 portrait size +b2r a3 -t landscape # ISO B2 landscape size +b3 a3 # ISO B3 portrait size +b3r a3 -t landscape # ISO B3 landscape size +b4 # ISO B4 portrait size +b4r b4 -t landscape # ISO B4 landscape size +b5 # ISO B5 portrait size +b5r b5 -t landscape # ISO B5 landscape size +## b4 a3 # ISO B4 portrait size +## b4r a4 -t landscape # ISO B4 landscape size +## b5 a4 # ISO B5 portrait size +## b5r a4 -t landscape # ISO B5 landscape size +b6 a4 # ISO B6 portrait size +b6r a4 -t landscape # ISO B6 landscape size +b7 a4 # ISO B7 portrait size +b7r a4 -t landscape # ISO B7 landscape size + +###### +###### ISO C +###### +c1 a3 # ISO B1 portrait size +c1r a3 -t landscape # ISO C1 landscape size +c2 a3 # ISO C2 portrait size +c2r a3 -t landscape # ISO C2 landscape size +c3 a3 # ISO C3 portrait size +c3r a3 -t landscape # ISO C3 landscape size +c4 a4 # ISO C4 portrait size +c4r a4 -t landscape # ISO C4 landscape size +c5 a4 # ISO C5 portrait size +c5r a4 -t landscape # ISO C5 landscape size +c6 a4 # ISO C6 portrait size +c6r a4 -t landscape # ISO C6 landscape size +c7 a4 # ISO C7 portrait size +c7r a4 -t landscape # ISO C7 landscape size + +###### +###### forced to use it as default when the paper type is unknown +###### += a4 # default diff -ruN xdvik-22.40y1.orig/texk/xdvik/xdvipaper.jdvi2kps xdvik-22.40y1/texk/xdvik/xdvipaper.jdvi2kps --- xdvik-22.40y1.orig/texk/xdvik/xdvipaper.jdvi2kps 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/xdvipaper.jdvi2kps 2003-09-29 11:47:22.000000000 +0900 @@ -0,0 +1,80 @@ +# +# Translation table from xdvi paper type (-paper option) +# into jdvi2kps-4.0 paper type (-pa option and -l option) +# +# Available under xdvi-pl17 markpage+toc+printdvi+paper patch +# written by ONO Kouichi +# +# Table format : +# +# xdvi paper type [jdvi2kps paper type] +# +###### +###### US paper +###### +us a4 # US letter size (8.5"*11") +usr a4 -l # US letter landscape size (8.5"*11") +legal b4 # Legal size (8.5"*14") +foolscap b4 # foolscap (13.5"*17") + +###### +###### ISO A +###### +a1 a3 # ISO A1 portrait size +a1r a3 -l # ISO A1 landscape size +a2 a3 # ISO A2 portrait size +a2r a3 -l # ISO A2 landscape size +a3 # ISO A3 portrait size +## a3 a4 # ISO A3 portrait size +a3r a3 -l # ISO A3 landscape size +## a3r a4 -l # ISO A3 landscape size +a4 # ISO A4 portrait size +a4r a4 -l # ISO A4 landscape size +a5 # ISO A5 portrait size +a5r a5 -l # ISO A5 landscape size +## a5r a4 -l # ISO A5 landscape size +a6 a5 # ISO A6 portrait size +a6r a5 -l # ISO A6 landscape size +a7 a5 # ISO A7 portrait size +a7r a5 -l # ISO A7 landscape size + +###### +###### ISO B +###### +b1 b4 # ISO B1 portrait size +b1r b4 -l # ISO B1 landscape size +b2 b4 # ISO B2 portrait size +b2r b4 -l # ISO B2 landscape size +b3 b4 # ISO B3 portrait size +b3r b4 -l # ISO B3 landscape size +b4 # ISO B4 portrait size +b4r b4 -l # ISO B4 landscape size +b5 # ISO B5 portrait size +b5r b5 -l # ISO B5 landscape size +b6 b5 # ISO B6 portrait size +b6r b5 -l # ISO B6 landscape size +b7 b5 # ISO B7 portrait size +b7r b5 -l # ISO B7 landscape size + +###### +###### ISO C +###### +c1 b4 # ISO B1 portrait size +c1r b4 -l # ISO C1 landscape size +c2 b4 # ISO C2 portrait size +c2r b4 -l # ISO C2 landscape size +c3 b4 # ISO C3 portrait size +c3r b4 -l # ISO C3 landscape size +c4 b4 # ISO C4 portrait size +c4r b4 -l # ISO C4 landscape size +c5 a4 # ISO C5 portrait size +c5r a4 -l # ISO C5 landscape size +c6 b5 # ISO C6 portrait size +c6r b5 -l # ISO C6 landscape size +c7 a5 # ISO C7 portrait size +c7r a5 -l # ISO C7 landscape size + +###### +###### forced to use it as default when the paper type is unknown +###### += a4 # default diff -ruN xdvik-22.40y1.orig/texk/xdvik/xdviprint.sample xdvik-22.40y1/texk/xdvik/xdviprint.sample --- xdvik-22.40y1.orig/texk/xdvik/xdviprint.sample 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/xdviprint.sample 2003-09-29 11:47:22.000000000 +0900 @@ -0,0 +1,57 @@ +#! /bin/sh +## arguments. +PRINTER=$1 +PAPERSIZE=$2 + +## temporary files. +DVITMP=${TMPDIR:-/tmp}/xdviprint.$$.dvi +PSTMP=${TMPDIR:-/tmp}/xdviprint.$$.ps + +## save to temporary file. +/bin/cat > $DVITMP + +########## +###### DVI -> PS +###### +## for dvips +# FILTOPTTBL=${XDVIFILTOPTTBL:-/usr/local/share/texmf/xdvi/xdvipaper.dvips} +# DVIPSCMD="dvips -f -t" +#### +## for dvi2ps +# FILTOPTTBL=${XDVIFILTOPTTBL:-/usr/local/share/texmf/xdvi/xdvipaper.dvi2ps-j} +# DVIPSCMD="dvi2ps -o" +#### +## for jdvi2kps +# FILTOPTTBL=${XDVIFILTOPTTBL:-/usr/local/share/texmf/xdvi/xdvipaper.jdvi2kps} +# DVIPSCMD="jdvi2kps -pa" +########## + +## apply filter to paper size name +PAPER=`awk '\ + $1 == "'"$PAPERSIZE"'" {\ + name = $1; sub("#.*", ""); sub("^[ \t]*[^ \t]+[ \t]*", "");\ + if ($0 != "") {name = $0;} if (name != "") {print name; exit}};\ + $1 ~ /^=/ {\ + sub("#.*", ""); sub("=", ""); print; exit}' $FILTOPTTBL` + +## exec DVI->PS +$DVIPSCMD $PAPER $DVITMP > $PSTMP + +## remove DVI +/bin/rm -f $DVITMP + +########## +###### print out +###### +## for BSD +lpr -P$PRINTER $PSTMP +#### +## for SYSV +# lp -c -d $PRINTER $PSTMP +########## + +## remove PS +/bin/rm -f $PSTMP + +## exit +exit 0 diff -ruN xdvik-22.40y1.orig/texk/xdvik/zeit.c xdvik-22.40y1/texk/xdvik/zeit.c --- xdvik-22.40y1.orig/texk/xdvik/zeit.c 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/zeit.c 2003-09-29 11:47:22.000000000 +0900 @@ -0,0 +1,801 @@ +/******************************************************* + * Zeit Shotai Kurabu interface routine for xdvi pl.17 + * Written by Y. Hayashi (hayashi@me.aoyama.ac.jp) + ******************************************************/ + +#include "xdvi-config.h" + +#ifndef X_NOT_STDC_ENV +#include +#endif + +#include "zeit.h" +#include "jtfm.h" + +#ifndef SEEK_SET +#define SEEK_SET 0 +#endif + +#ifdef USE_ZEIT +#ifdef VF2FT +#include "vf2ft.h" +#else +#include +#endif + +/* static void */ +void +dispfont(bm) + struct bitmap *bm; +{ + int w, h; + unsigned char mask; + unsigned char *p; + + for (h = 0; h < bm->h; ++h) { + p = (unsigned char *) &bm->bits[bm->bytes_wide * h]; + for (w = 0; w < bm->w; p++) { + for (mask = 0x80; w < bm->w && mask != 0; w++, mask >>= 1) + Putc(*p & mask ? '*' : '.', stderr); + Putc('|', stderr); + } + Putc('\n', stderr); + } +} + +#if !defined(WORDS_BIGENDIAN) && !defined(USE_PXL) +static unsigned char _reverse_byte[0x100] = { + 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, + 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, + 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, + 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, + 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, + 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, + 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, + 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, + 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, + 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, + 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, + 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, + 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, + 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, + 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, + 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, + 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, + 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, + 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, + 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, + 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, + 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, + 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, + 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, + 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, + 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, + 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, + 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, + 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, + 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, + 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, + 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff +}; +#endif /* WORDS_BIGENDIAN */ + +#define jis2ccode(jis) (((jis) / 256 - 0x21) * 0x5e + ((jis) % 256 - 0x21)) + +#if !defined(WORDS_BIGENDIAN) || (BMBYTES == 4) || (BMBYTES == 2) +void +adj_ZEIT_bitmap(bm) + struct bitmap *bm; +{ + int bwidth; + int n; + unsigned char *p; +#if (BMBYTES == 4) || (BMBYTES == 2) + int m, m1, m2; + unsigned char *bits; + BMUNIT bmunit, *q; +#endif + + bwidth = (bm->w + 7) / 8; + +#ifndef WORDS_BIGENDIAN + n = bwidth * bm->h; + p = (unsigned char *) bm->bits; + while (n--) { + *p = _reverse_byte[*p]; + ++p; + } +#endif + +#if (BMBYTES == 4) || (BMBYTES == 2) + bits = xmalloc(bm->bytes_wide * bm->h); + m1 = bwidth / BMBYTES; + m2 = bwidth % BMBYTES; + for (n = 0; n < bm->h; n++) { + p = (unsigned char *) &bm->bits[n * bwidth]; + q = (BMUNIT *) &bits[n * bm->bytes_wide]; + for (m = 0; m < m1; m++, p += BMBYTES, q++) { +#ifndef WORDS_BIGENDIAN +#if (BMBYTES == 4) + bmunit = p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24); +#else + bmunit = p[0] | (p[1] << 8); +#endif +#else +#if (BMBYTES == 4) + bmunit = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]; +#else + bmunit = (p[0] << 8) | p[1]; +#endif +#endif + *q = bmunit; + } + + switch (m2) { + case 0: + break; + case 1: +#ifndef WORDS_BIGENDIAN + bmunit = p[0]; +#else +#if (BMBYTES == 4) + bmunit = p[0] << 24; +#else + bmunit = p[0] << 8; +#endif +#endif + *q = bmunit; + break; +#if (BMBYTES == 4) + case 2: +#ifndef WORDS_BIGENDIAN + bmunit = p[0] | (p[1] << 8); +#else + bmunit = (p[0] << 24) | (p[1] << 16); +#endif + *q = bmunit; + break; + case 3: +#ifndef WORDS_BIGENDIAN + bmunit = p[0] | (p[1] << 8) | (p[2] << 16); +#else + bmunit = (p[0] << 24) | (p[1] << 16) | (p[2] << 8); +#endif + *q = bmunit; + break; +#endif + } + } + bcopy(bits, bm->bits, bm->bytes_wide * bm->h); + free(bits); +#endif +} +#endif + +static int +trim_side_blanks_in_ZEIT_bitmap(bm, width) + struct bitmap *bm; + int width; +{ + int bwidth; + int w, h; + int ll, rr, l, r; + int delta, d1, d2; + unsigned char u, mask; + int found = False; + + bwidth = (bm->w + 7) / 8; + + ll = bm->w; + rr = 0; + for (h = 0; h < bm->h; h++) { + for (w = 0; w < bwidth; w++) + if ((u = bm->bits[h * bwidth + w]) != 0) { + found = True; + for (l = w * 8, mask = 0x80; + (u & mask) == 0; + l++, mask >>= 1); + if (l < ll) ll = l; + break; + } + for (w = bwidth - 1; 0 <= w; w--) + if ((u = bm->bits[h * bwidth + w]) != 0) { + found = True; + for (r = w * 8 + 7, mask = 0x01; + (u & mask) == 0; + r--, mask <<= 1); + if (rr < r) rr = r; + break; + } + } + + if (!found) return 0; + +#ifdef DEBUGZEIT + if (rr - ll + 1 > width) { + Fprintf(stderr, "Cannot trim side blanks; ll=%d, rr=%d, width=%d\n", + ll, rr, width); + dispfont(bm); + return rr - ll + 1 - width; + } +#endif /* DEBUGZEIT */ + + delta = (ll + rr) / 2 - (width / 2); + if (delta == 0) + return 0; /* modified by tutimura@nn.iij4u.or.jp 2002/8/21 */ + else if (delta > 0) { + d1 = delta / 8; + d2 = delta % 8; + + for (h = 0; h < bm->h; h++) { + unsigned char *p = (unsigned char *) &bm->bits[h * bwidth]; + + if (d2 > 0) { + for (w = 0; w < bwidth - 1; w++) { + unsigned int word; + + word = *(p + w) << 8 | *(p + w + 1); + word <<= d2; + *(p + w) = word >> 8; + } + *(p + bwidth - 1) = *(p + bwidth - 1) << d2; + } + + for (w = 0; w < bwidth; w++) + *(p + w) = (w < bwidth - d1) ? *(p + w + d1) : 0; + } + } else { + d1 = -delta / 8; + d2 = -delta % 8; + + for (h = 0; h < bm->h; h++) { + unsigned char *p = (unsigned char *) &bm->bits[h * bwidth]; + + if (d2 > 0) { + for (w = bwidth - 1; 0 < w; w--) { + unsigned int word; + + word = *(p + w - 1) << 8 | *(p + w); + word >>= d2; + *(p + w) = word & 0xff; + } + *p = *p >> d2; + } + + for (w = bwidth - 1; w <= 0; w++) + *(p + w) = (w > d1) ? *(p + w - d1) : 0; + } + } + return 0; +} + +#ifdef PTEX +static int +trim_tate_blanks_in_ZEIT_bitmap(bm, height) + struct bitmap *bm; + int height; +{ + int bwidth; + int w, h; + int t, b; + int delta; + int found = False; + + bwidth = (bm->w + 7) / 8; + + t = bm->h; + b = 0; + for (h = 0; h < bm->h; h++) + for (w = 0; w < bwidth; w++) + if (bm->bits[h * bwidth + w]) { + found = True; + t = h; + break; + } + for (h = bm->h - 1; 0 <= h; h--) + for (w = 0; w < bwidth; w++) + if (bm->bits[h * bwidth + w]) { + found = True; + b = h; + break; + } + + if (!found) return 0; + +#ifdef DEBUGZEIT + if (b - t + 1 > height) { + Fprintf(stderr, "Cannot trim tate blanks; t=%d, b=%d, height=%d\n", + t, b, height); + dispfont(bm); + return rr - ll + 1 - width; + } +#endif /* DEBUGZEIT */ + + delta = (height / 2) - (t + b) / 2; + if (delta == 0) + return 0; /* modified by tutimura@nn.iij4u.or.jp 2002/8/21 */ + else if (delta > 0) { + for (h = bm->h - delta - 1; 0 <= h; h--) { + unsigned char *p = (unsigned char *) &bm->bits[h * bwidth]; + unsigned char *p1 = (unsigned char *) &bm->bits[(h + delta) * bwidth]; + for (w = 0; w < bwidth; w++) + *(p1 + w) = *(p + w); + } + for (h = 0; h < delta; h++) { + unsigned char *p = (unsigned char *) &bm->bits[h * bwidth]; + for (w = 0; w < bwidth; w++) + *(p + w) = 0; + } + } else { + delta = -delta; + for (h = 0; h < bm->h - delta; h++) { + unsigned char *p = (unsigned char *) &bm->bits[h * bwidth]; + unsigned char *p1 = (unsigned char *) &bm->bits[(h + delta) * bwidth]; + for (w = 0; w < bwidth; w++) + *(p + w) = *(p1 + w); + } + for (h = bm->h - delta; h < bm->h; h++) { + unsigned char *p = (unsigned char *) &bm->bits[h * bwidth]; + for (w = 0; w < bwidth; w++) + *(p + w) = 0; + } + } + return 0; +} + +int +auto_shift(bm) + struct bitmap *bm; +{ + int x, y, rc; + BMUNIT b = 0, m; + BMUNIT *ptr; + + ptr = (BMUNIT *)bm->bits; + for (x = 0; x < bm->bytes_wide / BMBYTES; x++, ptr++) { + b = 0; + for (y = 0; y < bm->h; y++) + b |= ptr[y * bm->bytes_wide / BMBYTES]; + if (b) break; + } + x *= BMBITS; +#ifndef WORDS_BIGENDIAN + m = (1 << 0); + while ((b & m) == 0 && m) { + x++; + m <<= 1; + } +#else + m = (1 << (BMBITS-1)); + while ((b & m) == 0 && m) { + x++; + m >>= 1; + } +#endif + + rc = -x; + + ptr = (BMUNIT *)(bm->bits + bm->bytes_wide) - 1; + for (x = 0; x < bm->bytes_wide / BMBYTES; x++, ptr--) { + b = 0; + for (y = 0; y < bm->h; y++) + b |= ptr[y * bm->bytes_wide / BMBYTES]; + if (b) break; + } + x *= BMBITS; +#ifdef WORDS_BIGENDIAN + m = (1 << 0); + while ((b & m) == 0 && m) { + x++; + m <<= 1; + } +#else + m = (1 << (BMBITS-1)); + while ((b & m) == 0 && m) { + x++; + m >>= 1; + } +#endif + x -= BMBITS - (bm->w % BMBITS); + rc += x; + return rc; +} +#endif /* PTEX */ + +#ifndef PTEX +static void +get_ZEIT_font(fontp, code) + struct font *fontp; + int code; +#else +static void +get_ZEIT_font(fontp, code, code2, flag) + struct font *fontp; + int code, code2, flag; +#endif +{ + struct bitmap *bm; + int rc, bwidth; + + bm = &fontp->kglyph[jisindex(code)]->bitmap; + bwidth = (bm->w + 7) / 8; + bzero(bm->bits, bwidth * bm->h); + +#ifdef PTEX + if (!flag && bm->w < bm->h) { +#else /* !PTEX */ + if (bm->w < bm->h) { +#endif /* PTEX */ + struct bitmap bitmap; + int bwidth2; + int w, h; + + bitmap.w = bitmap.h = bm->h; +retry_side: + bwidth2 = (bitmap.w + 7) / 8; + alloc_bitmap(&bitmap); + bzero(bitmap.bits, bwidth2 * bitmap.h); + +#ifdef PTEX + VF_GetBitmap(code2, fontp->vf, bitmap.w, bitmap.h, + bwidth2, 0, bitmap.bits); +#else + VF_GetBitmap(code, fontp->vf, bitmap.w, bitmap.h, + bwidth2, 0, bitmap.bits); +#endif + + rc = trim_side_blanks_in_ZEIT_bitmap(&bitmap, bm->w); + if (rc) { + free(bitmap.bits); + bitmap.w -= rc; + goto retry_side; + } + + for (h = 0; h < bm->h; h++) + for (w = 0; w < bwidth; w++) + bm->bits[h * bwidth + w] = + bitmap.bits[h * bwidth2 + w]; + + free(bitmap.bits); +#ifdef PTEX + } else if (flag && bm->w > bm->h) { + struct bitmap bitmap; + int w, h; + + bitmap.w = bitmap.h = bm->w; +retry_tate: + alloc_bitmap(&bitmap); + bzero(bitmap.bits, bwidth * bitmap.h); + + VF_GetBitmap(code2, fontp->vf, bitmap.w, bitmap.h, + bwidth, 0, bitmap.bits); + + rc = trim_tate_blanks_in_ZEIT_bitmap(&bitmap, bm->h); + if (rc) { + free(bitmap.bits); + bitmap.h -= rc; + goto retry_tate; + } + + for (h = 0; h < bm->h; h++) + for (w = 0; w < bwidth; w++) + bm->bits[h * bwidth + w] = +#if 1 + bitmap.bits[h * bwidth + w]; +#else + bitmap.bits[(h + bm->w - bm->h) * bwidth + w]; +#endif + + free(bitmap.bits); +#endif /* PTEX */ + } else { +#ifdef PTEX + VF_GetBitmap(code2, fontp->vf, bm->w, bm->h, + bwidth, 0, bm->bits); +#else + VF_GetBitmap(code, fontp->vf, bm->w, bm->h, + bwidth, 0, bm->bits); +#endif + } +} + +static void +read_ZEIT_char(fontp, ch) + struct font *fontp; + int ch; +{ + struct bitmap *bm; + int ch2; +#ifdef PTEX + int ch3 = 0; + extern void rotate_bitmap(); +#endif + +#ifdef DEBUGZEIT + if (list_fonts) + Fprintf(stderr, "zeit raster: %x in %s\n", ch, fontp->fontname); +#endif /* DEBUGZEIT */ + ch2 = jisindex(ch); + + if (fontp->kglyph[ch2] == NULL) { + struct glyph *g, *orig = fontp->kglyph[0]; + if (orig == NULL) { + Fprintf(stderr, "Unexpected error in \"read_ZEIT_char()\"\n"); + exit(1); + } + g = fontp->kglyph[ch2] = xmalloc(sizeof(struct glyph)); + bzero(g, sizeof (struct glyph)); + g->bitmap.w = orig->bitmap.w; + g->bitmap.h = orig->bitmap.h; + g->x = orig->x; + g->y = orig->y; + g->dvi_adv = orig->dvi_adv; + } + bm = &fontp->kglyph[ch2]->bitmap; +#ifdef PTEX + if (!fontp->tate) { + if (ch >= 0x2121 && ch < 0x217f) + ch3 = ch - 0x2121; + else if (ch >= 0x2221 && ch < 0x222f) + ch3 = ch - 0x2221 + (0x7f - 0x21); + else if (ch >= 0x2421 && ch < 0x246f) + ch3 = ch - 0x2421 + (0x7f - 0x21) + (0x2f - 0x21); + else if (ch >= 0x2521 && ch < 0x2577) + ch3 = ch - 0x2521 + + (0x7f - 0x21) + (0x2f - 0x21) + (0x6f - 0x21); + else ch3 = 0; + + if (fontp->dir && TateCorrectionTable[ch3].code != TCOR_ROTATE) { + int tmp; + tmp = bm->h; + bm->h = bm->w; + bm->w = tmp; + alloc_bitmap(bm); + if (TateCorrectionTable[ch3].code >= 0x2121) + get_ZEIT_font(fontp, ch, TateCorrectionTable[ch3].code, 1); + else + get_ZEIT_font(fontp, ch, ch, 1); + } else { + alloc_bitmap(bm); + get_ZEIT_font(fontp, ch, ch, 0); + } + } else { + if (fontp->dir) { + int tmp; + tmp = bm->h; + bm->h = bm->w; + bm->w = tmp; + alloc_bitmap(bm); + get_ZEIT_font(fontp, ch, ch, 1); + } else { + alloc_bitmap(bm); + get_ZEIT_font(fontp, ch, ch, 0); + } + } +#else /* !PTEX */ + alloc_bitmap(bm); + get_ZEIT_font(fontp, ch); +#endif /* PTEX */ +#ifdef DEBUGZEIT + dispfont(bm); +#endif /* DEBUGZEIT */ +#if !defined(WORDS_BIGENDIAN) || (BMBYTES == 4) || (BMBYTES == 2) + adj_ZEIT_bitmap(bm); +#endif +#ifdef PTEX + fontp->kglyph[ch2]->tdir = fontp->dir; + if (fontp->dir) { + int tmp; + tmp = fontp->kglyph[ch2]->x; + fontp->kglyph[ch2]->x = fontp->kglyph[ch2]->y; + fontp->kglyph[ch2]->y = tmp; + + if (!fontp->tate) + switch (TateCorrectionTable[ch3].code) { + case TCOR_SHIFT: + fontp->kglyph[ch2]->x -= + TateCorrectionTable[ch3].x * fontp->kglyph[0]->bitmap.h / 128; + fontp->kglyph[ch2]->y += + TateCorrectionTable[ch3].y * fontp->kglyph[0]->bitmap.h / 128; + break; + case TCOR_AUTOSHIFT: + tmp = auto_shift(bm); + fontp->kglyph[ch2]->x -= tmp; + break; + case TCOR_ROTATE: + rotate_bitmap(bm); + break; + } + } +#endif /* PTEX */ +} + +static void +bbox(buf, size) + char *buf; + int size; +{ + int n; + + for (n = 0; n < size; ++n) + buf[n] = 0xff; +} + +int +read_ZEIT_index(fontp) + register struct font *fontp; +{ + struct jfm *j; + struct bitmap *bm; + double dimconv; + int n, index, code, width, height, depth; + + fontp->read_char = read_ZEIT_char; + fontp->kglyph = xmalloc(sizeof(struct glyph *) * KTABLESIZE); + bzero(fontp->kglyph, sizeof(struct glyph *) * KTABLESIZE); + dimconv = fontp->dimconv; + + if (NULL == (j = read_jfm(fontp->file, fontp->fontname))) + return -1; + if (-1 == open_ZEIT_font(fontp, iskanjifont(fontp->fontname))) + return -1; + + for (n = 0; n < j->table[J_NT]; ++n) { + code = jisindex(j->type[n].code); + fontp->kglyph[code] = xmalloc(sizeof(struct glyph)); + bzero(fontp->kglyph[code], sizeof (struct glyph)); + index = j->type[n].index; + width = j->width[j->info[index].width_ix]; + height= j->height[j->info[index].height_depth_ix >> 4]; + depth = j->depth[j->info[index].height_depth_ix & 0xf]; + + bm = &(fontp->kglyph[code]->bitmap); + bm->w = (int) (dimconv * width) >> 16; + bm->h = (int) (dimconv * (height + depth)) >> 16; + bm->bits = NULL; + fontp->kglyph[code]->x = 0; + fontp->kglyph[code]->y = (int) (dimconv * height) >> 16; + fontp->kglyph[code]->dvi_adv = dimconv * width; + } + bm = &(fontp->kglyph[0]->bitmap); + alloc_bitmap(bm); + bbox(bm->bits, bm->bytes_wide * bm->h); + return 0; +} + +extern struct vfontmap *first_ptr; + +int +open_ZEIT_font(fontp, shotai) + struct font *fontp; + int shotai; +{ + char *path; + int i, *fd; + struct vfontmap *current_ptr; +#ifdef VF2FT + int encoding; + int cidv; +#endif + + current_ptr = first_ptr; + + for(i = 0; i < shotai - 1 && current_ptr; i++) + current_ptr = current_ptr->next_ptr; + + path = current_ptr->vfname; + fd = &(current_ptr->flag); +#ifdef VF2FT + encoding = current_ptr->encoding; + cidv = current_ptr->cidv; + if (-1 == *fd && -1 == (*fd = VF_OpenFont(path, encoding, cidv))) + return -1; +#else + if (-1 == *fd && -1 == (*fd = VF_OpenFont(path))) + return -1; +#endif + + fontp->vf = *fd; +#ifdef PTEX + fontp->tate = current_ptr->tate ? 1 : 0; +#endif + return 0; +} +#endif /* USE_ZEIT */ + +#ifdef KANJI +struct jfm * +read_jfm(fp, fn) + FILE *fp; + char *fn; +{ + struct jfmchain { + struct jfmchain *next; + struct jfm *jfm; + }; + static struct jfmchain *jfmtop = NULL; + struct jfmchain *jcp, *new; + + for (jcp = jfmtop; jcp; jcp = jcp->next) + if (0 == strcmp(fn, jcp->jfm->fn)) + return jcp->jfm; + + new = xmalloc(sizeof(struct jfmchain)); + new->next = NULL; + new->jfm = xmalloc(sizeof(struct jfm)); + strcpy(new->jfm->fn, fn); + if (read_jfm0(fp, new->jfm)) { + Fprintf(stderr, "Cannot open metric file: %s\n", fn); + free(new->jfm); + free(new); + return NULL; + } + if (NULL == jfmtop) { + jfmtop = new; + } else { + for (jcp = jfmtop; jcp->next; jcp = jcp->next) + ; + jcp->next = new; + } + + return new->jfm; +} + +/**** read_jfm0: borrowed from jxdvi-NEWS ****/ + +int +read_jfm0(fp, j) + FILE *fp; + struct jfm *j; +{ + int i; + + fseek(fp, 0L, SEEK_SET); + + /* read jfm table field. */ + for (i = 0; i <= J_NP; i++) + j->table[i] = (short) two(fp); + + /* read jfm header */ + j->check_sum = four(fp); + j->design_size = four(fp); + fseek(fp, (long) (4 * (j->table[J_LH] - 2)), 1); + + /* read jfm char_type */ + j->type = xmalloc(sizeof(struct jfm_char_type) * j->table[J_NT]); + for (i=0; i < j->table[J_NT]; i++) { + j->type[i].code = (short) two(fp); + j->type[i].index = (short) two(fp); + } + + /* read jfm char_info */ + j->info = xmalloc(sizeof(struct jfm_char_info) * (j->table[J_EC] + 1)); + for (i = 0; i <= j->table[J_EC]; i++) { + j->info[i].width_ix = (unsigned char) one(fp); + j->info[i].height_depth_ix = (unsigned char) one(fp); + j->info[i].italic_ix_tag = (unsigned char) one(fp); + j->info[i].remainder_ix = (unsigned char) one(fp); + } + + /* read jfm width */ + j->width = xmalloc(sizeof(unsigned long) * j->table[J_NW]); + for (i = 0; i < j->table[J_NW]; i++) + j->width[i] = four(fp); + + /* read jfm height */ + j->height = xmalloc(sizeof(unsigned long) * j->table[J_NH]); + for (i = 0; i < j->table[J_NH]; i++) + j->height[i] = four(fp); + + /* read jfm depth */ + j->depth = xmalloc(sizeof(unsigned long) * j->table[J_ND]); + for (i = 0; i < j->table[J_ND]; i++) + j->depth[i] = four(fp); + + /* read jfm italic */ + j->italic = xmalloc(sizeof(unsigned long) * j->table[J_NI]); + for (i = 0; i < j->table[J_NI]; i++) + j->italic[i] = four(fp); + return 0; +} +#endif /* KANJI */ diff -ruN xdvik-22.40y1.orig/texk/xdvik/zeit.h xdvik-22.40y1/texk/xdvik/zeit.h --- xdvik-22.40y1.orig/texk/xdvik/zeit.h 1970-01-01 09:00:00.000000000 +0900 +++ xdvik-22.40y1/texk/xdvik/zeit.h 2003-09-29 11:47:22.000000000 +0900 @@ -0,0 +1,24 @@ +/******************************************************* + * Zeit Shotai Kurabu interface routine for xdvi-22.40k + * Written by tutimura@nn.iij4u.or.jp + ******************************************************/ + +#ifdef USE_ZEIT +void dispfont ARGS((struct bitmap *)); + +#if !defined(WORDS_BIGENDIAN) || (BMBYTES == 4) || (BMBYTES == 2) +void adj_ZEIT_bitmap ARGS((struct bitmap *)); +#endif + +#ifdef PTEX +int auto_shift ARGS((struct bitmap *)); +#endif /* PTEX */ + +int open_ZEIT_font ARGS((struct font *, int)); +int read_ZEIT_index ARGS((struct font *)); +#endif /* USE_ZEIT */ + +#ifdef KANJI +struct jfm * read_jfm ARGS((FILE *, char *)); +int read_jfm0 ARGS((FILE *, struct jfm *)); +#endif /* KANJI */