summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Deutschmann <whissi@gentoo.org>2019-10-15 12:24:12 +0200
committerThomas Deutschmann <whissi@gentoo.org>2020-08-13 11:26:55 +0200
commite088156d5b620e5e639580dacf85c6dc13823c74 (patch)
tree57f5c025e203279944da512166c20bc0521d8ccd /contrib/japanese
downloadghostscript-gpl-patches-e088156d5b620e5e639580dacf85c6dc13823c74.tar.gz
ghostscript-gpl-patches-e088156d5b620e5e639580dacf85c6dc13823c74.tar.bz2
ghostscript-gpl-patches-e088156d5b620e5e639580dacf85c6dc13823c74.zip
Import Ghostscript 9.50ghostscript-9.50
Signed-off-by: Thomas Deutschmann <whissi@gentoo.org>
Diffstat (limited to 'contrib/japanese')
-rw-r--r--contrib/japanese/dmp_init.ps206
-rw-r--r--contrib/japanese/dmp_site.ps14
-rw-r--r--contrib/japanese/doc/Gdevlips.htm1901
-rw-r--r--contrib/japanese/doc/README.gs550j35
-rw-r--r--contrib/japanese/doc/cdj880.txt120
-rw-r--r--contrib/japanese/doc/dj505j.txt62
-rw-r--r--contrib/japanese/doc/gdev10v.txt52
-rw-r--r--contrib/japanese/doc/gdevalps.txt50
-rw-r--r--contrib/japanese/doc/gdevcd8.txt146
-rw-r--r--contrib/japanese/doc/gdevdmpr.txt545
-rw-r--r--contrib/japanese/doc/gdevfmlbp.txt81
-rw-r--r--contrib/japanese/doc/gdevj100.txt28
-rw-r--r--contrib/japanese/doc/gdevlbp3.txt37
-rw-r--r--contrib/japanese/doc/gdevmd2k.txt179
-rw-r--r--contrib/japanese/doc/gdevmjc.txt58
-rw-r--r--contrib/japanese/doc/gdevml6.txt47
-rw-r--r--contrib/japanese/doc/gdevp201.txt30
-rw-r--r--contrib/japanese/dviprlib.c2823
-rw-r--r--contrib/japanese/dviprlib.h357
-rw-r--r--contrib/japanese/escp_24.src12
-rw-r--r--contrib/japanese/gdev10v.c333
-rw-r--r--contrib/japanese/gdevalps.c394
-rw-r--r--contrib/japanese/gdevdmpr.c888
-rw-r--r--contrib/japanese/gdevespg.c303
-rw-r--r--contrib/japanese/gdevfmlbp.c229
-rw-r--r--contrib/japanese/gdevfmpr.c210
-rw-r--r--contrib/japanese/gdevj100.c198
-rw-r--r--contrib/japanese/gdevlbp3.c277
-rw-r--r--contrib/japanese/gdevmjc.c1848
-rw-r--r--contrib/japanese/gdevmjc.h3220
-rw-r--r--contrib/japanese/gdevml6.c342
-rw-r--r--contrib/japanese/gdevnpdl.c710
-rw-r--r--contrib/japanese/gdevp201.c273
-rw-r--r--contrib/japanese/gdevrpdl.c295
34 files changed, 16303 insertions, 0 deletions
diff --git a/contrib/japanese/dmp_init.ps b/contrib/japanese/dmp_init.ps
new file mode 100644
index 00000000..b7bebd6d
--- /dev/null
+++ b/contrib/japanese/dmp_init.ps
@@ -0,0 +1,206 @@
+%!
+% Copyright (C) 1989, 1992, 1993 Aladdin Enterprises. All rights reserved.
+%
+% This file is part of Ghostscript.
+%
+% Ghostscript is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+% to anyone for the consequences of using it or for whether it serves any
+% particular purpose or works at all, unless he says so in writing. Refer
+% to the Ghostscript General Public License for full details.
+%
+% Everyone is granted permission to copy, modify and redistribute
+% Ghostscript, but only under the conditions described in the Ghostscript
+% General Public License. A copy of this license is supposed to have been
+% given to you along with Ghostscript so you can know your rights and
+% responsibilities. It should be in a file named COPYING. Among other
+% things, the copyright notice and this notice must be preserved on all
+% copies.
+
+% dmp_init.ps
+% Initialization file for `dmprt' device driver.
+%
+% Written initial version by... ASAYAMA Kazunori 1993 Nov.
+% Modified for Ghostscript 4.03 by ... ASAYAMA Kazunori 1997 May.
+
+%%%%% check version %%%%%
+
+201 % version of this initialization file.
+
+/dmprt finddevice { /DmprtParams gsgetdeviceprop /Version get }
+ stopped { pop pop 0 } if
+2 copy ne {
+ (\ndmprt: driver version\() print
+ dup 0 eq {pop (unknown) print }{==only}ifelse
+ (\) does not match dmp_init.ps version\() print
+ ==only (\).\n) print
+ flush 1 .quit
+} { pop pop } ifelse
+
+%%%%% BODY %%%%%
+
+40 dict begin % .WorkDict .UserParams
+ % .DmprtDevice
+ % .GetDmprtParam .SetDmprtParam
+ % .DmprtParams .Xdpi .Ydpi .Xdot .Ydot
+ %
+ % in cm mm pt bp dot
+ % BeginMode EndMode
+ % .ModeDataBase .CurrentMode
+ % BeginConfig EndConfig
+ % BeginPrinterProps EndPrinterProps
+
+/.WorkDict currentdict def
+/.ModeDataBase 10 dict def
+/.dicttomark {
+ counttomark 2 idiv dup dict begin { def } repeat pop currentdict end
+} bind def
+
+%%%%% utilities for user customization. %%%%%
+
+/in { } bind def
+/cm { 2.54 div } bind def
+/mm { 25.4 div } bind def
+/pt { 72.27 div } bind def
+/bp { 72.0 div } bind def
+/dot { [ exch truncate cvi ] } bind def
+
+% the database of user customizations. (not implemented yet.)
+/BeginMode { % <name> -> <name> mark
+ mark
+} bind def
+/EndMode { % <name> mark <item1> <value1> ... <itemN> <valueN> -> --
+ .dicttomark .ModeDataBase
+ dup dup maxlength exch length eq {
+ % Expand capacity of database dictionaly.
+ dup maxlength 10 add dict copy dup /.ModeDataBase exch def
+ } if
+ 3 1 roll put
+} bind def
+
+% these procedures are undocumented in the user's manual.
+% these are used in order to specify the propaties directly.
+/BeginPrinterProps { [ } bind def
+/EndPrinterProps { ] /printer exch } bind def
+
+%%%%% run the user customization file. %%%%%
+
+/BeginConfig mark def
+/EndConfig { .dicttomark /.UserParams exch def } bind def
+systemdict /DMPCONFIG 2 copy known
+{ get run } % -sDMPCONFIG=<filename>
+{ pop pop (dmp_site.ps) findlibfile { closefile run } if } ifelse
+
+%%%%% refer database %%%%%
+
+/.UsedMode .ModeDataBase length dict def
+/.ExpandUserParams { % <dict> -> <param1> <value1> ... <paramN> <valueN>
+ /.InheritMode null def
+ { 1 index /inherit eq {
+ exch pop dup .UsedMode exch known { % check recursive reference.
+ /.ExpandUserParams /rangecheck signalerror
+ } if
+ /.InheritMode exch def
+ } if } forall
+ .InheritMode type /nametype eq {
+ .UsedMode .InheritMode true put
+ .ModeDataBase .InheritMode get .ExpandUserParams
+ } if
+} bind def
+
+systemdict /DMPMODE 2 copy known
+ {get .ModeDataBase exch get} {pop pop .UserParams} ifelse
+mark exch .ExpandUserParams .dicttomark /.UserParams exch def
+
+%%%%% Local variables and procedures. %%%%%
+/.DmprtDevice /dmprt finddevice def
+/.SetDmprtParam { % <key> <value> -> --
+ .DmprtParams 3 1 roll put
+} bind def
+/.SetLocalParam { .LocalParams 3 1 roll put } bind def
+/.GetDmprtParam { % <key> -> <value>
+ .DmprtParams exch get
+} bind def
+/.GetUserParam { % <key> <default-value> -> <value>
+ .UserParams 3 -1 roll 2 copy known {get exch pop}{pop pop} ifelse
+} bind def
+/.SetUserParam { % <prop-name> <key> <default-value> -> --
+ .GetUserParam .SetDmprtParam
+} bind def
+
+%%%%% dviprt proparties %%%%%
+
+mark
+.UserParams /printer 2 copy known {
+ get dup type /dicttype ne { mark /FileName 3 -1 roll .dicttomark } if
+}
+{ pop pop % Default printer is `ESC/P 24 pins'.
+ mark
+ /Name (ESC/P 24 pins)
+ /Transpose true
+ /Reverse false
+ /NonMoving false
+ /Encoding (Null)
+ /HDpi 180
+ /VDpi 180
+ /Pins 24
+ /MinimalUnit 1
+ /MaximalUnit 180
+ /Constant 1
+ /BitImageMode (\007\0333\030\033?Z\047)
+ /NormalMode (\004\015\014\0332)
+ /SendBitImage (\002\033Z\002\001\200)
+ /SkipSpaces (\002\033\\\002\001\200)
+ /LineFeed (\002\015\012)
+ /FormFeed (\002\015\014)
+ /AfterBitImage ()
+ /BitRowHeader ()
+ .dicttomark
+} ifelse
+/DviprtParams exch .DmprtDevice putdeviceprops
+
+getdeviceprops .dicttomark /.DmprtParams exch def
+.DmprtParams /DviprtParams get /.DviprtParams exch def
+.DmprtParams /DmprtParams get /.LocalParams exch def
+
+% calcurate resolutions and define operators converting
+% from user-coordination to device-coordination(count by dots).
+/resolution [ .DviprtParams dup /HDpi get exch /VDpi get ]
+ .GetUserParam {} forall /.Ydpi exch def /.Xdpi exch def
+/.Xdot { dup type /arraytype eq { 0 get } { .Xdpi mul truncate cvi } ifelse
+} bind def
+/.Ydot { dup type /arraytype eq { 0 get } { .Ydpi mul truncate cvi } ifelse
+} bind def
+
+%%%%% Standard Ghostscript device propaties. %%%%%
+
+/HWSize % default is A4.
+ /defaultsize [8.3 11.7] .GetUserParam
+ [ exch dup 0 get .Xdot exch 1 get .Ydot ] .SetDmprtParam
+
+%%%%% dmprt device propaties. %%%%%
+
+/MaxSize
+ /maxsize [0.0 0.0] .GetUserParam [ exch dup 0 get .Xdot exch 1 get .Ydot ]
+ .SetLocalParam
+/Margins /margin [0.0 0.0 0.0 0.0] .GetUserParam
+ [ exch dup 0 get .Xdot exch dup 1 get .Ydot
+ exch dup 2 get .Xdot exch 3 get .Ydot ] .SetLocalParam
+/Verbose QUIET {false}
+ {/verbose false .GetUserParam} ifelse .SetLocalParam
+/Debug /debug false .GetUserParam .SetLocalParam
+
+%%%%% Page device propaties. %%%%%
+%%%%% See PostScript Reference Manual 2nd edition. %%%%%
+
+/HWResolution [ .Xdpi .Ydpi ] .SetDmprtParam
+/Offsets
+ /offset [0.0 0.0] .GetUserParam [ exch dup 0 get .Xdot exch 1 get .Ydot ]
+ .SetLocalParam
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+mark .DmprtParams {} forall .DmprtDevice putdeviceprops pop
+
+end
+%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of file %%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/contrib/japanese/dmp_site.ps b/contrib/japanese/dmp_site.ps
new file mode 100644
index 00000000..05bdb4d6
--- /dev/null
+++ b/contrib/japanese/dmp_site.ps
@@ -0,0 +1,14 @@
+%!
+BeginConfig
+%%%%%%%%%%%%%%%%%%%%%% Standard user cusomizations %%%%%%%%%%%%%%%%%%%%%
+/printer (escp_24.src)
+% horizontal / vertical
+% /resolution [ 180.0 180.0 ]
+% horizontal / vertical
+% /offset [ 0.0 0.0 ]
+% width / height
+% /defaultsize [ 8.0 in 11.0 in ]
+% width / height
+% /maxsize [ 8.0 -1 ]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+EndConfig
diff --git a/contrib/japanese/doc/Gdevlips.htm b/contrib/japanese/doc/Gdevlips.htm
new file mode 100644
index 00000000..45604620
--- /dev/null
+++ b/contrib/japanese/doc/Gdevlips.htm
@@ -0,0 +1,1901 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<HTML LANG="ja">
+<HEAD>
+<META http-equiv="Content-type" content="text/html; charset=iso-2022-jp">
+<LINK rev="made" href="mailto:ohmori@p.chiba-u.ac.jp">
+<TITLE lang="en">Ghostscript driver for LIPS &amp; ESC/Page &amp; NPDL</TITLE>
+<!-- $Id: Lips.htm $ -->
+</HEAD>
+<BODY lang="ja">
+
+<H1>LIPS &amp; ESC/Page &amp; NPDL $BBP1~(B Ghostscript $B%G%P%$%9%I%i%$%P(B</H1>
+<P>
+$B$3$N%=%U%H%&%'%"$O(B Ghostscript 5.10/5.50 $BMQ$N%G%P%$%9%I%i%$%P$H$7$F:n$i$l$F$$$^$9!#(B
+</P>
+<P>
+$B%G%P%$%9%I%i%$%P$H$7$F%i%9%?!<HG%G%P%$%9$N(B lips2p$B!"(Blips3$B!"(Bbjc880j$B!"(Blips4$B!"(B
+escpage$B!"(Blp2000$B!"(Bnpdl $B%G%P%$%9$H!"(B
+$B%Y%/%?!<HG%G%P%$%9$N(B lips4v $B$,4^$^$l$F$$$^$9!#(B
+</P>
+<P>
+$B3F5!<o$H%G%P%$%9$NBP1~$O!"(B<A HREF="#lbp_list">LIPS $BBP1~%W%j%s%?$H=PNO%G%P%$%9(B</A>$B!"(B
+<A HREF="#lp_list">ESC/Page $BBP1~%W%j%s%?$H=PNO%G%P%$%9(B</A>$B!"(B
+<A HREF="#mw_list">NPDL $BBP1~%W%j%s%?$H=PNO%G%P%$%9(B</A>$B$r8+$F2<$5$$!#(B
+</P>
+<HR>
+<H2>$B%$%s%G%C%/%9(B</H2>
+<UL>
+ <LI><A HREF="#haifu" NAME="i_haifu">$BG[I[>r7o(B</A>
+ <LI><A HREF="#difference" NAME="i_difference">gdevlips4-1.2.0 $B$H$N0c$$(B</A>
+ <LI><A HREF="#diff_epag" NAME="i_diff_epag">epag-3.08 $B$H$N0c$$(B</A>
+ <LI><A HREF="#diff_npdl" NAME="i_diff_npdl">gdevnpdl-1.5 $B$H$N0c$$(B</A>
+ <LI><A HREF="#lbp_list" NAME="i_lbp_list">LIPS $BBP1~%W%j%s%?$H=PNO%G%P%$%9(B</A>
+ <LI><A HREF="#lp_list" NAME="i_lp_list">ESC/Page $BBP1~%W%j%s%?$H=PNO%G%P%$%9(B</A>
+ <LI><A HREF="#mw_list" NAME="i_mw_list">NPDL $BBP1~%W%j%s%?$H=PNO%G%P%$%9(B</A>
+ <LI><A HREF="#unsupported" NAME="i_unsupported">$BBP1~$7$F$$$J$$%W%j%s%?(B</A>
+ <LI><A HREF="#install" NAME="i_install">$B%$%s%9%H!<%k(B</A>
+ <LI><A HREF="#usage" NAME="i_usage">$B;HMQJ}K!(B/$B;HMQ%*%W%7%g%s(B</A>
+ <UL>
+ <LI>LIPS$B!&(BESC/Page$B!&(BNPDL $B6&DL%*%W%7%g%s(B
+ <UL>
+ <LI><A HREF="#device" NAME="i_device">$B%G%P%$%9JQ99(B</A>
+ <LI><A HREF="#pagesize" NAME="i_pagesize">$B%G%U%)%k%H%Z!<%8%5%$%:JQ99(B</A>
+ <LI><A HREF="#numcopies" NAME="i_numcopies">$BJ#?tIt0u:~(B</A>
+ <LI><A HREF="#resolution" NAME="i_resolution">$B2rA|EYJQ99(B</A>
+ <LI><A HREF="#duplex" NAME="i_duplex">$BN>LL0u:~(B</A>
+ <LI><A HREF="#negativeprint" NAME="i_negativeprint">$BGr9uH?E>0u:~(B</A>
+ </UL>
+ <LI>ESC/Page $B$N$_$N%*%W%7%g%s(B
+ <UL>
+ <LI><A HREF="#ritoff" NAME="i_ritoff">RIT ($BNX3TJd@55!G=(B) $B$r%*%U$K$9$k(B</A>
+ </UL>
+ <LI>LIPS $B$N$_$N%*%W%7%g%s(B
+ <UL>
+ <LI><A HREF="#bitsperpixel" NAME="i_bitsperpixel">$B%b%N%/%m$H%+%i!<=PNO$N@ZBX$((B</A>
+ <LI><A HREF="#feed" NAME="i_feed">$B5k;fJ}K!$NA*Br(B</A>
+ <LI><A HREF="#panel" NAME="i_panel">$B%Q%M%kI=<(JQ99(B</A>
+ <LI><A HREF="#mediatype" NAME="i_mediatype">$BMQ;f<oN`@_Dj(B</A>
+ <LI><A HREF="#faceup" NAME="i_faceup">$B%U%'%$%9%"%C%W%H%l%$$N=PNO(B</A>
+ <LI><A HREF="#nup" NAME="i_nup">n $BLL0u:~(B</A>
+ <LI><A HREF="#fontdl" NAME="i_fontdl">$B%U%)%s%H%@%&%s%m!<%I(B</A>
+ <LI><A HREF="#pjl" NAME="i_pjl">PJL $B=PNO(B</A>
+ <UL>
+ <LI><A HREF="#tdensity" NAME="i_tdensity">$B%H%J!<G;EYD4@a(B</A>
+ <LI><A HREF="#tsave" NAME="i_tsave">$B%H%J!<@aLs(B</A>
+ </UL>
+ </UL>
+ <LI><A HREF="#netatalk" NAME="i_netatalk">Netatalk$B!&(BCAP $B$H(B Ghostscript + gdevlips</A>
+ </UL>
+ <LI><A HREF="#hireso" NAME="i_hireso">LIPS IV $B=PNO$K$*$1$k9b2rA|EY0u;z$K4X$9$kCm0U(B</A>
+ <LI><A HREF="#change" NAME="i_change">$BJQ99MzNr(B</A>
+ <LI><A HREF="#bug" NAME="i_bug">$B%P%0(B</A>
+ <UL>
+ <LI>npdl.dev
+ <UL>
+ <LI><A HREF="#marginbug" NAME="i_marginbug">1. $B0u:~0LCV$,$:$l$k(B</A>
+ <LI><A HREF="#nonduplex" NAME="i_nonduplex">2. $BN>LL0u:~$G$-$J$$(B</A>
+ </UL>
+ <LI>bjc880j.dev
+ <UL>
+ <LI><A HREF="#landbug" NAME="i_landbug">1. $B%i%s%I%9%1!<%W2sE>;~$K0u:~0LCV$,$A$g$C$H$:$l$k(B</LI>
+ </UL>
+ <LI>lips4v.dev
+ <UL>
+ <LI><A HREF="#clipping" NAME="i_clipping">1. $B%Q%9$N%/%j%C%T%s%0=hM};~$N%a%b%jITB-(B ($B%7%9%F%`%a%b%j%U%k(B $B%(%i!<(B)</A>
+ <LI><A HREF="#zeroline" NAME="i_zeroline">2. $BI}$,%<%m$N%Q%9$r%U%#%k$7$?$H$-2?$bIA$+$l$J$$(B</A>
+ <LI><A HREF="#zeromove" NAME="i_zeromove">3. $B0\F05wN%(B 0 $B$N%Q%9$N07$$(B</A>
+ <LI><A HREF="#square_cap" NAME="i_square_cap">4. Projecting square cap $B$N%P%0(B</A>
+ <LI><A HREF="#round_cap" NAME="i_round_cap">5. Round cap $B$N%P%0(B</A>
+ <LI><A HREF="#linewidth" NAME="i_linewidth">6. $B@~$NB@$5$,0c$&(B</A>
+ <LI><A HREF="#setdash" NAME="i_setdash">7. $BGK@~$N%Q%?!<%s$,IA$+$l$J$$(B</A>
+ <LI><A HREF="#pattern" NAME="i_pattern">8. lips4v $B%I%i%$%P$G%+%i!<$G%Q%?!<%s$rIA$$$?>l9g?'$,$*$+$7$$$3$H$,$"$k(B</A>
+ </UL>
+ </UL>
+ <LI><A HREF="#faq" NAME="i_faq">FAQ</A>
+ <UL>
+ <LI><A HREF="#slow" NAME="i_slow">$B%W%j%s%?$N=PNO$OB.$/$J$i$J$$$N(B?</A>
+ <LI><A HREF="#font" NAME="i_font">$B%W%j%s%?$NFbB"%U%)%s%H$O;H$($J$$$N(B?</A>
+ <LI><A HREF="#bsize" NAME="i_bsize">B4 $B$^$?$O(B B5 $B%5%$%:$NMQ;f;XDj$,$&$^$/$$$+$J$$$s$@$1$I(B</A>
+ <LI><A HREF="#nup_printing" NAME="i_nup_printing">n $BLL0u:~$r$9$k$K$O!"$I$&$7$?$i$$$$$N(B?</A>
+ <LI><A HREF="#psresize" NAME="i_psresize">$BMQ;f%5%$%:$N3HBg!"=L>.0u:~$r$9$k$K$O$I$&$9$k$s$G$9$+(B?</A>
+ <LI><A HREF="#offset" NAME="i_offset">$B0u:~0LCV$rD4@0$9$k$K$O$I$&$7$?$i$$$$$G$9$+(B?</A>
+ <LI><A HREF="#vector" NAME="i_vector">$B%i%9%?!<HG%G%P%$%9$H%Y%/%?!<HG%G%P%$%9$N0c$$$O(B?</A>
+ <LI><A HREF="#l3vmono" NAME="i_l3vmono">LIPS IV $B0J30%I%i%$%P$N%Y%/%?!<HG$O:n$i$J$$$N(B?</A>
+ <LI><A HREF="#lbp2030" NAME="i_lbp2030">lbp2030.dev $B$O$I$3$$$C$?$N(B?</A>
+ <LI><A HREF="#fig" NAME="i_fig">lips3fig$B!"(Blips4cfig$B!"(Blips4fig $B$,$J$$$s$@$1$I(B</A>
+ <LI><A HREF="#lips2p" NAME="i_lips2p">$B$I$&$7$F(B LIPS II+ $BBP1~%I%i%$%P$O(B lips2+ $B$d(B lips2plus $B$H$$$&L>A0$8$c$J$$$N(B?</A>
+ </UL>
+ <LI><A HREF="#thanks" NAME="i_thanks">$B<U<-(B</A>
+ <LI><A HREF="#reference" NAME="i_reference">$B;29MJ88%(B</A>
+</UL>
+
+<HR>
+<H2><A HREF="#i_haifu" NAME="haifu">$BG[I[>r7o(B</A></H2>
+<P>
+$B$3$N%=%U%H%&%'%"$NG[I[>r7o$O(B GNU General Public License (GPL) Ver.2 $B$K=`$8$^$9!#(B
+</P>
+<P>
+$B$^$?!"$3$N%I%i%$%P$N0l;~G[I[@h$OEvLL(B
+<A HREF="http://www.bukka.p.chiba-u.ac.jp/~ohmori/">&lt;URI:http://www.bukka.p.chiba-u.ac.jp/~ohmori/&gt;</A>
+$B$H$7$^$9!#(B
+</P>
+<P>
+$B$3$N%=%U%H%&%'%"$K4X$7$F$NLd$$9g$o$;$OBg?95*?M(B <A HREF="mailto:ohmori@p.chiba-u.ac.jp">&lt;URI:mailto:ohmori@p.chiba-u.ac.jp&gt;</A>$B$K$*4j$$$7$^$9!#(B
+<HR>
+<H2><A HREF="#i_difference" NAME="difference">gdevlips4-1.2.0 $B$H$N0c$$(B</A></H2>
+<P>
+lips3.dev lips4c.dev lips4.dev$B$K4X$7$F!"(Bgdevlips4-1.2.0 $B$G$N<!$N$h$&$JIT6q9g$,(B
+$BD>$C$F$$$^$9!#(B
+</P>
+<UL>
+ <LI>$B>e%^!<%8%s$,0u;z8B3&$N(B 5mm $B$^$G0u:~$G$-$k$h$&$K$J$C$?!#(B(gdevlips4-1.2.0 $B$G$O(B63/300$B%$%s%A(B($BLs(B10.3mm))
+ <LI>$B%^!<%8%sJQ99$KBP1~(B
+ <LI>$B%Z!<%8%5%$%:JQ99$KBP1~!#=PNO$G$-$J$$%Z!<%8%5%$%:$K$O$A$c$s$H%(%i!<$rJV$9!#(B
+ <LI>$B2rA|EYJQ99$KBP1~!#=PNO$G$-$J$$2rA|EY$K$O$A$c$s$H%(%i!<$rJV$9!#(B
+ <LI>$B%W%j%s%?$NGr;f$r=PNO$7$J$$@_Dj$,$-$A$s$HH?1G$5$l$k!#(B
+ <LI>BJC-880J $B$G(BA4$B$h$jBg$-$$MQ;f$K0u:~$9$k$H$-!V(B20 $B%Z!<%8(B $B%*!<%P!<!W$N%(%i!<$,H/@8$9$kLdBj$N2r7h(B
+</UL>
+<P>
+$B$^$?<!$N$h$&$J5!G=$,DI2C$5$l$F$$$^$9!#(B
+</P>
+<UL>
+ <LI>$B=PNO$N9bB.2=(B
+ <UL>
+ <LI>Ghostscript $B$N=hM}$N9bB.2=(B
+ <LI>$B%W%j%s%?$N=PNO$N9bB.2=(B
+ <LI>$BJ#?tIt0u:~;~$N9bB.2=(B
+ </UL>
+ <LI>$B%G%P%$%9$NDI2C(B
+ <UL>
+ <LI>LIPS II+ $B$KBP1~(B
+ <LI>LBP-840/LBP-850 $B$N%9!<%Q!<%U%!%$%s(B LIPS (1,200 dpi)$B$KBP1~(B
+ <LI>$B%Y%/%?!<HG%G%P%$%9(B lips4v.dev
+ </UL>
+ <LI>$B5k;fJ}K!$NA*Br$KBP1~(B
+ <LI>$B%i%9%?!<%$%a!<%8$N05=L$KBP1~(B
+ <LI>$B%Q%M%kI=<(JQ99$KBP1~(B
+ <LI>$BN>LL0u:~%f%K%C%H$KBP1~(B (LIPS IV $B$N$_(B)
+ <LI>n $BLL0u:~5!G=$KBP1~(B (LIPS IV $B$N$_(B)
+ <LI>$B%H%J!<G;EYD4@a5!G=$KBP1~(B (LIPS IV $B$N$_(B)
+ <LI>$B%H%J!<@aLs5!G=$KBP1~(B (LIPS IV $B$N$_(B)
+</UL>
+<HR>
+<H2><A HREF="#i_diff_epag" NAME="diff_epag">epag-3.08 $B$H$N0c$$(B</A></H2>
+<P>
+ESC/Page $B%I%i%$%PItJ,$O(B epag-3.08 $B$r%Y!<%9$K<c43$N%P%0%U%#%C%/%9$r$7$^$7$?!#(B
+$B$5$i$KJ#?tIt0u:~$r8zN(E*$K=PNO$G$-$k$h$&$K$7$^$7$?!#Gr9uH?E>0u:~$KBP1~$7$^$7$?!#(B
+$B$^$?!"(Bepag-3.08 $B$O$+$J$j%(%i!<=hM}$,4E$$$N$G$=$3$K$b<j$rF~$l$F$"$j$^$9!#(B
+</P>
+<P>
+ESC/Page $BMQ$N%G%P%$%9$,Fs$D$KA}$($F$$$k$N$O(B Ghostscript $B$N;EMM$K9g$o$;$k$?$a$G$9!#(B
+$B5U$K$$$&$H(B epag-3.08 $B$O(B Ghostscript $B$N;EMM$K9g$C$F$$$^$;$s!#(B
+($BNc$($P(B LP-1700S $B$G$O(B epag-3.08 $B$G$O(B -r600 $B%*%W%7%g%s$r;XDj$7$?$@$1$G$O(B 600 dpi $B0u:~$,@5>o$K$G$-$^$;$s!#(B)
+</P>
+<HR>
+<H2><A HREF="#i_diff_npdl" NAME="diff_npdl">gdevnpdl-1.5 $B$H$N0c$$(B</A></H2>
+<P>
+$B$3$N%I%i%$%P$K4^$^$l$k(B npdl.dev $B$O(B gdevnpdl-1.5 $B$K<!$N$h$&$J5!G=$,DI2C$5$l$F$$$^$9!#(B
+</P>
+<UL>
+ <LI>$B0u:~B.EY$N9bB.2=(B
+ <LI>$B$O$,$-%5%$%:$N%5%]!<%H(B
+ <LI>$B%i%s%I%9%1!<%W$N%5%]!<%H(B
+ <LI>$BJ#?tIt0u:~;~$K%3%T!<%b!<%I$r;H$$9bB.$K0u:~$G$-$k(B
+ <LI>$BGr9uH?E>0u:~$KBP1~(B
+</UL>
+<P>
+$B$^$?!"2rA|EY$N%G%U%)%k%H$,(B 240 dpi $B$K$J$C$F$$$k$H$3$m$,0[$J$j$^$9!#(B
+(gdevnpdl-1.5 $B$G$O(B 400 dpi)
+</P>
+<HR>
+<H2><A HREF="#i_lbp_list" NAME="lbp_list">LIPS $BBP1~%W%j%s%?$H=PNO%G%P%$%9(B</A></H2>
+<P>
+LIPS $BBP1~%W%j%s%?$H=PNO%G%P%$%9L>(B/$B2rA|EY$N%j%9%H$G$9!#(B
+$B$3$l$O!"$"$/$^$G$b5,3J>e=PNO$G$-$k$b$N$r%j%9%H$7$?$@$1$G!"A4$F$N%W%j%s%?$G<B:]$K=PNO$G$-$k$3$H$r3NG'$7$?$o$1$G$O$J$$$N$GCm0U$7$F2<$5$$!#(B
+</P>
+<TABLE BORDER SUMMARY="LIPS Priner and Output Device">
+ <TR>
+ <TH>$B5!<o(B</TH><TH>$B%G%P%$%9L>(B</TH><TH>$B2rA|EY(B (dpi)</TH><TH>$BHw9M(B</TH>
+ </TR>
+ <TR>
+ <TH ROWSPAN=2><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp406s.html">LBP-B406S</A></TH><TD>lips2p</TD><TD>240x240</TD>
+ </TR>
+ <TR>
+ <TD>lips3</TD><TD>300x300</TD><TD>$B3HD%(BRAM$B5Z$S3HD%(BROM$B$NA}@_$,I,MW(B</TD>
+ </TR>
+ <TR>
+ <TH ROWSPAN=2><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp406d.html">LBP-B406D</A></TH><TD>lips2p</TD><TD>240x240</TD>
+ </TR>
+ <TR>
+ <TD>lips3</TD><TD>300x300</TD><TD>$B3HD%(BRAM$B5Z$S3HD%(BROM$B$NA}@_$,I,MW(B</TD>
+ </TR>
+ <TR>
+ <TH><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp406e.html">LBP-B406E</A></TH><TD>lips3</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TH><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp406g.html">LBP-B406G</A></TH><TD>lips3</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TH><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp406eII.html">LBP-B406E II</A></TH><TD>lips3</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TH><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp406gII.html">LBP-B406G II</A></TH><TD>lips3</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TH ROWSPAN=2><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp404.html">LBP-A404</A></TH><TD>lips2p</TD><TD>240x240</TD>
+ </TR>
+ <TR>
+ <TD>lips3</TD><TD>300x300</TD><TD>$B3HD%(BRAM$B5Z$S3HD%(BROM$B$NA}@_$,I,MW(B</TD>
+ </TR>
+ <TR>
+ <TH><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp404e.html">LBP-B404E</A></TH><TD>lips3</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TH><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp404gII.html">LBP-A404G II</A></TH><TD>lips3</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TH><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp404f.html">LBP-A404F</A></TH><TD>lips3</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TH><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp405jr.html">LBP-A405Jr.</A></TH><TD>lips3</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TH><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp304e.html">LBP-A304E</A></TH><TD>lips3</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TH><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp304eII.html">LBP-A304E II</A></TH><TD>lips3</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TH><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp304gII.html">LBP-A304G II</A></TH><TD>lips3</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TH><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp309gII.html">LBP-A309G II</A></TH><TD>lips3</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TH><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp310.html">LBP-310</A></TH><TD>lips3</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TH><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp320.html">LBP-320</A></TH><TD>lips3</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TH><A HREF="http://www.canon-sales.co.jp/Product/LBP/LBP-320Pro.html">LBP-320Pro</A></TH><TD>lips3</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TH ROWSPAN=2><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp730.html">LBP-730</A></TH><TD>lips4</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD>lips4v</TD><TD>300x300, 600x600</TD><TD>MaxiMem $BHsBP1~$J$N$G(B<A HREF="#clipping">$B%Q%9%/%j%C%T%s%0;~$N%a%b%jITB-(B</A>$B$KCm0U(B</TD>
+ </TR>
+ <TR>
+ <TH ROWSPAN=2><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp720.html">LBP-720</A></TH><TD>lips4</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD>lips4v</TD><TD>300x300, 600x600</TD><TD>MaxiMem $BHsBP1~$J$N$G(B<A HREF="#clipping">$B%Q%9%/%j%C%T%s%0;~$N%a%b%jITB-(B</A>$B$KCm0U(B</TD>
+ </TR>
+ <TR>
+ <TH ROWSPAN=2><A HREF="http://www.canon-sales.co.jp/Product/LBP/LBP-450.html">LBP-450</A></TH><TD>lips4</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD>lips4v</TD><TD>300x300, 600x600</TD><TD>MaxiMem $BHsBP1~$J$N$G(B<A HREF="#clipping">$B%Q%9%/%j%C%T%s%0;~$N%a%b%jITB-(B</A>$B$KCm0U(B</TD>
+ </TR>
+ <TR>
+ <TH ROWSPAN=2><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp830.html">LBP-830</A></TH><TD>lips4</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD>lips4v</TD><TD>300x300, 600x600</TD><TD>MaxiMem $BHsBP1~$J$N$G(B<A HREF="#clipping">$B%Q%9%/%j%C%T%s%0;~$N%a%b%jITB-(B</A>$B$KCm0U(B</TD>
+ </TR>
+ <TR>
+ <TH ROWSPAN=2><A HREF="http://www.canon-sales.co.jp/Product/LBP/LBP-430.html">LBP-430</A></TH><TD>lips4</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD>lips4v</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TH ROWSPAN=2><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp930.html">LBP-930</A></TH><TD>lips4</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD>lips4v</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TH ROWSPAN=2><A HREF="http://www.canon-sales.co.jp/Product/LBP/LBP-750.html">LBP-750</A></TH><TD>lips4</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD>lips4v</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TH ROWSPAN=2><A HREF="http://www.canon-sales.co.jp/Product/LBP/LBP-740.html">LBP-740</A></TH><TD>lips4</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD>lips4v</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TH ROWSPAN=2><A HREF="http://www.canon-sales.co.jp/Product/LBP/LBP-930EX.html">LBP-930EX</A></TH><TD>lips4</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD>lips4v</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TH ROWSPAN=2><A HREF="http://www.canon-sales.co.jp/Product/LBP/LBP-850.html">LBP-850</A></TH><TD>lips4</TD><TD>300x300, 600x600, 1200x1200</TD><TD>1200 dpi $B;~$O(B lips4v $B$N$[$&$,$$$$(B?</TD>
+ </TR>
+ <TR>
+ <TD>lips4v</TD><TD>300x300, 600x600, 1200x1200</TD>
+ </TR>
+ <TR>
+ <TH ROWSPAN=2><A HREF="http://www.canon-sales.co.jp/Product/LBP/LBP-840.html">LBP-840</A></TH><TD>lips4</TD><TD>300x300, 600x600, 1200x1200</TD><TD>1200 dpi $B;~$O(B lips4v $B$N$[$&$,$$$$(B?</TD>
+ </TR>
+ <TR>
+ <TD>lips4v</TD><TD>300x300, 600x600, 1200x1200</TD>
+ </TR>
+ <TR>
+ <TH ROWSPAN=2><A HREF="http://www.canon-sales.co.jp/Product/LBP/LBP-2030.html">LBP-2030</A></TH><TD>lips4</TD><TD>300x300, 600x600</TD><TD>$B%+%i!<=PNO$O(B -dBitsPerPixel=24 $B%*%W%7%g%s$G!#(B($B$3$N%I%i%$%P$G$OHs>o$KCY$$$G$9!#(B)</TD>
+ </TR>
+ <TR>
+ <TD>lips4v</TD><TD>300x300, 600x600</TD><TD>$B%+%i!<=PNO$O(B -dBitsPerPixel=24 $B%*%W%7%g%s$G!#(BMaxiMem $BHsBP1~$J$N$G(B<A HREF="#clipping">$B%Q%9%/%j%C%T%s%0;~$N%a%b%jITB-(B</A>$B$KCm0U(B</TD>
+ </TR>
+ <TR>
+ <TH ROWSPAN=2><A HREF="http://www.canon-sales.co.jp/Product/LBP/LBP-2160.html">LBP-2160</A></TH><TD>lips4</TD><TD>300x300, 600x600</TD><TD>$B%+%i!<=PNO$O(B -dBitsPerPixel=24 $B%*%W%7%g%s$G!#(B($B$3$N%I%i%$%P$G$OHs>o$KCY$$$G$9!#(B)</TD>
+ </TR>
+ <TR>
+ <TD>lips4v</TD><TD>300x300, 600x600</TD><TD>$B%+%i!<=PNO$O(B -dBitsPerPixel=24 $B%*%W%7%g%s$G!#(B</TD>
+ </TR>
+ <TR>
+ <TH ROWSPAN=2><A HREF="http://www.canon-sales.co.jp/Product/LBP/LBP-2040.html">LBP-2040</A></TH><TD>lips4</TD><TD>300x300, 600x600</TD><TD>$B%+%i!<=PNO$O(B -dBitsPerPixel=24 $B%*%W%7%g%s$G!#(B($B$3$N%I%i%$%P$G$OHs>o$KCY$$$G$9!#(B)</TD>
+ </TR>
+ <TR>
+ <TD>lips4v</TD><TD>300x300, 600x600</TD><TD>$B%+%i!<=PNO$O(B -dBitsPerPixel=24 $B%*%W%7%g%s$G!#(B</TD>
+ </TR>
+ <TR>
+ <TH><A HREF="http://www.canon-sales.co.jp/faq/bj/980026/bjc880j.html">BJC-880J</A></TH>
+ <TD>bjc880j</TD><TD>360x360</TD><TD>$B%+%i!<=PNO$O(B -dBitsPerPixel=24 $B%*%W%7%g%s$G!#(B($BHs>o$KCY$$$G$9!#(B)</TD>
+ </TR>
+ <TR>
+ <TH><A HREF="http://www.canon-sales.co.jp/faq/bj/980026/bjc680j.html">BJC-680J</A></TH>
+ <TD>bjc880j</TD><TD>360x360</TD><TD>$B%+%i!<=PNO$O(B -dBitsPerPixel=24 $B%*%W%7%g%s$G!#(B($BHs>o$KCY$$$G$9!#(B)</TD>
+ </TR>
+</TABLE>
+<HR>
+<H2><A HREF="#i_lp_list" NAME="lp_list">ESC/Page $BBP1~%W%j%s%?$H=PNO%G%P%$%9(B</A></H2>
+<P>
+ESC/Page $BBP1~%W%j%s%?$H=PNO%G%P%$%9L>(B/$B2rA|EY$N%j%9%H$G$9!#(B
+$B$3$l$O!"$"$/$^$G$b5,3J>e=PNO$G$-$k$b$N$r%j%9%H$7$?$@$1$G!"A4$F$N%W%j%s%?$G<B:]$K=PNO$G$-$k$3$H$r3NG'$7$?$o$1$G$O$J$$$N$GCm0U$7$F2<$5$$!#(B
+</P>
+<TABLE BORDER SUMMARY="ESC/Page Priner and Output Device">
+ <TR>
+ <TH>$B5!<o(B</TH><TH>$B%G%P%$%9L>(B</TH><TH>$B2rA|EY(B (dpi)</TH><TH>$BHw9M(B</TH>
+ </TR>
+ <TR>
+ <TD>LP-7000</TD><TD>lp2000</TD><TD>240x240</TD>
+ </TR>
+ <TR>
+ <TD>LP-7000G</TD><TD>lp2000</TD><TD>240x240</TD>
+ </TR>
+ <TR>
+ <TD>LP-2000</TD><TD>lp2000</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TD>LP-3000</TD><TD>lp2000</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TD>LP-1500</TD><TD>escpage</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TD>LP-1500S</TD><TD>escpage</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TD>LP-8000</TD><TD>escpage</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TD>LP-8000S</TD><TD>escpage</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TD>LP-8000SE</TD><TD>escpage</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TD>LP-8000SX</TD><TD>escpage</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TD>LP-1000</TD><TD>escpage</TD><TD>300x300</TD>
+ </TR>
+ <TR>
+ <TD>LP-1600</TD><TD>escpage</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD>LP-1700</TD><TD>escpage</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD>LP-1700S</TD><TD>escpage</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD><A HREF="http://www.i-love-epson.co.jp/products/seihin/printer/laser/esper/lp1800.htm">LP-1800</A></TD><TD>escpage</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD><A HREF="http://www.i-love-epson.co.jp/products/seihin/printer/laser/prospert/lp800.htm">LP-800</A></TD><TD>escpage</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD>LP-8200</TD><TD>escpage</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD><A HREF="http://www.i-love-epson.co.jp/products/seihin/printer/laser/esper/lp8300.htm">LP-8300</A></TD><TD>escpage</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD>LP-8300S</TD><TD>escpage</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD><A HREF="http://www.i-love-epson.co.jp/products/seihin/printer/laser/esper/lp8400.htm">LP-8400</A></TD><TD>escpage</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD>LP-8500</TD><TD>escpage</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD><A HREF="http://www.i-love-epson.co.jp/products/seihin/printer/laser/esper/lp8600.htm">LP-8600</A></TD><TD>escpage</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD>LP-9000</TD><TD>escpage</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD>LP-9200</TD><TD>escpage</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD>LP-9200S</TD><TD>escpage</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD><A HREF="http://www.i-love-epson.co.jp/products/seihin/printer/laser/esper/lp92sx.htm">LP-9200SX</A></TD><TD>escpage</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD><A HREF="http://www.i-love-epson.co.jp/products/seihin/printer/laser/inter/lp9300.htm">LP-9300</A></TD><TD>escpage</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD><A HREF="http://www.i-love-epson.co.jp/products/seihin/printer/laser/inter/lp9600.htm">LP-9600</A></TD><TD>escpage</TD><TD>300x300, 600x600</TD>
+ </TR>
+ <TR>
+ <TD>LP-8000C</TD><TD>escpage</TD><TD>300x300, 600x600</TD><TD>$B%+%i!<=PNO$O$G$-$^$;$s(B</TD>
+ </TR>
+</TABLE>
+<HR>
+<H2><A HREF="#i_mw_list" NAME="mw_list">NPDL $BBP1~%W%j%s%?$H=PNO%G%P%$%9(B</A></H2>
+<P>
+NPDL $BBP1~%W%j%s%?$H=PNO%G%P%$%9L>(B/$B2rA|EY$N%j%9%H$G$9!#(B
+$B$3$l$O!"$"$/$^$G$b5,3J>e=PNO$G$-$k$b$N$r%j%9%H$7$?$@$1$G!"A4$F$N%W%j%s%?$G<B:]$K=PNO$G$-$k$3$H$r3NG'$7$?$o$1$G$O$J$$$N$GCm0U$7$F2<$5$$!#(B
+</P>
+<TABLE BORDER SUMMARY="NPDL Priner and Output Device">
+ <TR>
+ <TH>$B5!<o(B</TH><TH>$B%G%P%$%9L>(B</TH><TH>$B2rA|EY(B (dpi)</TH><TH>$BHw9M(B</TH>
+ </TR>
+ <TR>
+ <TD>PC-PR1000</TD><TD>npdl</TD><TD>240x240</TD><TD>$BGr9uH?E>0u:~(B(-dNegativePrint)$B$KHsBP1~(B</TD>
+ </TR>
+ <TR>
+ <TD>PC-PR2000</TD><TD>npdl</TD><TD>240x240</TD><TD>$BGr9uH?E>0u:~(B(-dNegativePrint)$B$KHsBP1~(B</TD>
+ </TR>
+ <TR>
+ <TD>PC-PR1000/2</TD><TD>npdl</TD><TD>240x240</TD><TD>$BGr9uH?E>0u:~(B(-dNegativePrint)$B$KHsBP1~(B</TD>
+ </TR>
+ <TR>
+ <TD>PC-PR2000/2</TD><TD>npdl</TD><TD>240x240</TD>
+ </TR>
+ <TR>
+ <TD>PC-PR2000/4</TD><TD>npdl</TD><TD>400x400</TD>
+ </TR>
+ <TR>
+ <TD>PC-PR4000/4</TD><TD>npdl</TD><TD>400x400</TD>
+ </TR>
+ <TR>
+ <TD>PC-PR3000PS/4F</TD><TD>npdl</TD><TD>400x400</TD><TD>PostScript $B$K$bBP1~(B</TD>
+ </TR>
+ <TR>
+ <TD>PC-PR1000/4</TD><TD>npdl</TD><TD>400x400</TD>
+ </TR>
+ <TR>
+ <TD>PC-PR3000PS/4</TD><TD>npdl</TD><TD>400x400</TD><TD>PostScript $B$K$bBP1~(B</TD>
+ </TR>
+ <TR>
+ <TD>PC-PR4000E/4</TD><TD>npdl</TD><TD>400x400</TD>
+ </TR>
+ <TR>
+ <TD>PC-PR1000E/4R</TD><TD>npdl</TD><TD>400x400</TD>
+ </TR>
+ <TR>
+ <TD>PC-PR1000E/4</TD><TD>npdl</TD><TD>400x400</TD>
+ </TR>
+ <TR>
+ <TD>PC-PR1000FX/4</TD><TD>npdl</TD><TD>400x400</TD>
+ </TR>
+ <TR>
+ <TD>PC-PR2000/4R</TD><TD>npdl</TD><TD>400x400</TD>
+ </TR>
+ <TR>
+ <TD>PC-PR2000/4W</TD><TD>npdl</TD><TD>400x400</TD>
+ </TR>
+ <TR>
+ <TD>PC-PR2000/6W</TD><TD>npdl</TD><TD>600x600</TD>
+ </TR>
+ <TR>
+ <TD>PC-PR1000E/4W</TD><TD>npdl</TD><TD>400x400</TD>
+ </TR>
+ <TR>
+ <TD>MultiWriter 1000EW (PC-PR1000EW)</TD><TD>npdl</TD><TD>400x400</TD>
+ </TR>
+ <TR>
+ <TD>MultiWriter 2000E (PC-PR2000E)</TD><TD>npdl</TD><TD>400x400</TD>
+ </TR>
+ <TR>
+ <TD>MultiWriter 2000FW (PC-PR2000FW)</TD><TD>npdl</TD><TD>600x600</TD>
+ </TR>
+ <TR>
+ <TD>MultiWriter 2000NW (PC-PR2000NW)</TD><TD>npdl</TD><TD>400x400</TD>
+ </TR>
+ <TR>
+ <TD>MultiWriter 2200NW2 (PC-PR2200NW2)</TD><TD>npdl</TD><TD>400x400</TD>
+ </TR>
+ <TR>
+ <TD>MultiWriter 2400 (PC-PR2400)</TD><TD>npdl</TD><TD>400x400</TD>
+ </TR>
+ <TR>
+ <TD>MultiWriter 2000X (PC-PR2000X)</TD><TD>npdl</TD><TD>600x600</TD>
+ </TR>
+ <TR>
+ <TD>MultiWriter 2200X (PC-PR2200X)</TD><TD>npdl</TD><TD>600x600</TD>
+ </TR>
+ <TR>
+ <TD>MultiWriter 2400X (PC-PR2400X)</TD><TD>npdl</TD><TD>400x400</TD>
+ </TR>
+ <TR>
+ <TD>MultiWriter 2200X2 (PR-L2200X2)</TD><TD>npdl</TD><TD>600x600</TD>
+ </TR>
+ <TR>
+ <TD>MultiWriter 2200XE (PR-L2200X2)</TD><TD>npdl</TD><TD>600x600</TD>
+ </TR>
+ <TR>
+ <TD>MultiWriter 2000X2 (PR-L2000X2)</TD><TD>npdl</TD><TD>600x600</TD>
+ </TR>
+ <TR>
+ <TD><A HREF="http://www.pc98.nec.co.jp/PRODUCT/EXT/print/mw2000x/">MultiWriter 1400X (PR-L1400X)</A></TD><TD>npdl</TD><TD>600x600</TD>
+ </TR>
+ <TR>
+ <TD><A HREF="http://www.pc98.nec.co.jp/PRODUCT/EXT/print/mw6050/spec1.htm">MultiWriter 6050 (PC-L6050A)</A></TD><TD>npdl</TD><TD>400x400, 600x600</TD>
+ </TR>
+ <TR>
+ <TD><A HREF="http://www.pc98.nec.co.jp/PRODUCT/EXT/print/mw6050/spec1.htm">MultiWriter 4050 (PR-L4050)</A></TD><TD>npdl</TD><TD>400x400, 600x600</TD>
+ </TR>
+ <TR>
+ <TD><A HREF="http://www.pc98.nec.co.jp/PRODUCT/EXT/print/mw2000x/">MultiWriter 2050 (PR-L2050)</A></TD><TD>npdl</TD><TD>600x600</TD>
+ </TR>
+ <TR>
+ <TD><A HREF="http://www.pc98.nec.co.jp/PRODUCT/EXT/print/mw2000x/">MultiWriter 2250 (PR-L2250)</A></TD><TD>npdl</TD><TD>600x600</TD>
+ </TR>
+ <TR>
+ <TD><A HREF="http://www.pc98.nec.co.jp/PRODUCT/EXT/print/mw2650e/">MultiWriter 2650 (PR-L2650)</A></TD><TD>npdl</TD><TD>600x600</TD>
+ </TR>
+ <TR>
+ <TD><A HREF="http://www.pc98.nec.co.jp/PRODUCT/EXT/print/mw2650e/">MultiWriter 2650E (PR-L2650E)</A></TD><TD>npdl</TD><TD>600x600</TD>
+ </TR>
+</TABLE>
+<HR>
+<H2><A HREF="#i_unsupported" NAME="unsupported">$BBP1~$7$F$$$J$$%W%j%s%?(B</A></H2>
+<P>
+$B<!$N%W%j%s%?$O%5%]!<%H$7$F$$$^$;$s!#(B
+</P>
+<UL>
+ <LI>LIPS I/LIPS II $B%W%j%s%?(B
+ <LI>Windows Printing System (WPS)$B@lMQ%W%j%s%?(B
+ <UL>
+ <LI><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp210.html">Canon LBP-210</A>
+ <LI><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp220.html">Canon LBP-220</A>
+ <LI>Canon LBP-220Pro
+ <LI>NEC MultiWriter 1000LW(PC-PR1000LW)
+ <LI>NEC MultiWriter 1100(PR-L1100)
+ </UL>
+ <LI><A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp310.html">Canon LBP-310</A>/<A HREF="http://www.canon-sales.co.jp/faq/lbp/980021/lbp320.html">LBP-320</A>/LBP-320Pro $B$N%$%a!<%8%b!<%I(B(LIPS III $B$G$O=PNO2DG=(B)
+ <LI><A HREF="http://www.canon-sales.co.jp/faq/bj/980026/bjc680j.html">Canon BJC-680J</A>/<A HREF="http://www.canon-sales.co.jp/faq/bj/980026/bjc880j.html">BJC-880J</A> $B0J30$N%$%s%/%8%'%C%H%W%j%s%?(B
+ <LI>EPSON LP-5000 ($B8E$9$.(B)
+</UL>
+<HR>
+<H2><A HREF="#i_install" NAME="install">$B%$%s%9%H!<%k(B</A></H2>
+<OL>
+ <LI>Ghostscript $B$N%=!<%9%G%#%l%/%H%j$K(B
+ gdevespg.c$B!"(B gdevl4r.c$B!"(B gdevl4v.c$B!"(Bgdevlips.c$B!"(Bgdevlips.h$B!"(B gdevlprn.c$B!"(Bgdevlprn.h$B!"(Bgdevnpdl.c $B$r%3%T!<$7$^$9!#(B($BMW$9$k$K(B *.c *.h $B$r%3%T!<$7$^$9!#(B)
+<PRE>
+ $BNc(B:
+ cp *.c *.h "Ghostscript $B$N%G%#%l%/%H%j(B"
+</PRE>
+ <LI>Ghostscript 5.50 $B$N>l9g$O(B gdevlips.mak $B$r(B contrib.mak $B$KDI2C$7$^$9!#(B
+<PRE>
+ $BNc(B:
+ cat gdevlips.mak &gt;&gt;contrib.mak
+</PRE>
+ <LI>Ghostscript 5.10 $B$N>l9g$O(B gdevlips.mak $B$r(B Makefile $B$KDI2C$7$^$9!#(B
+<PRE>
+ $BNc(B:
+ cat gdevlips.mak &gt;&gt;makefile
+</PRE>
+ <LI>Makefile $B$N(B DEVICE_DEVS $B$K(B<A HREF="#dev">$B%G%P%$%9$H$=$N5!G=(B</A>$B$K=R$Y$i$l$k$N%G%P%$%9$N$&$AI,MW$J$b$N$r5-=R$7$^$9!#(B
+ <LI>B4$B!"(BB5$B!"(BB6 $B%5%$%:$J$I$NMQ;f$r07$&>l9g$O(B gs_statd.ps $B$K%Q%C%A$r$"$F$^$9!#(B
+<PRE>
+ $BNc(B:
+ patch &lt;gs_statd.dif
+</PRE>
+ <LI>Ghostscript $B$r%3%s%Q%$%k$7!"%$%s%9%H!<%k$7$^$9!#(B
+</OL>
+<HR>
+<H3><A NAME="dev">$B%G%P%$%9$H$=$N5!G=(B</A></H3>
+<H4>$B%i%9%?!<HG%I%i%$%P(B</H4>
+<DL>
+ <DT>lips2p.dev</DT>
+ <DD>LIPS II+ $B$N%3!<%I$r=PNO$7$^$9!#(B</DD>
+ <DT>lips3.dev</DT>
+ <DD>LIPS III $B$N%3!<%I$r=PNO$7$^$9!#(B</DD>
+ <DT>bjc880j.dev</DT>
+ <DD>LIPS IVc (BJC-680J/880J $BMQ(B)$B$N%3!<%I$r=PNO$7$^$9!#%+%i!<=PNO$K$bBP1~$7$F$$$^$9!#(B</DD>
+ <DT>lips4.dev</DT>
+ <DD>LIPS IV $B$N%3!<%I$r=PNO$7$^$9!#%+%i!<=PNO$K$bBP1~$7$F$$$^$9!#(B</DD>
+ <DT>lp2000.dev</DT>
+ <DD>ESC/Page $B$N%3!<%I$r=PNO$7$^$9!#(B(LP-2000/LP-3000/LP-7000/LP-7000G $BMQ$G$9!#(B)</DD>
+ <DT>escpage.dev</DT>
+ <DD>ESC/Page $B$N%3!<%I$r=PNO$7$^$9!#BP1~5!<o$O(B<A HREF="#lp_list">ESC/Page $BBP1~%W%j%s%?$H=PNO%G%P%$%9(B</A>$B$r;2>H$N$3$H!#(B</DD>
+ <DT>npdl.dev</DT>
+ <DD>NPDL $B$N%3!<%I$r=PNO$7$^$9!#BP1~5!<o$O(B<A HREF="#mw_list">NPDL $BBP1~%W%j%s%?$H=PNO%G%P%$%9(B</A>$B$r;2>H$N$3$H!#(B</DD>
+</DL>
+<H4>$B%Y%/%?!<HG%I%i%$%P(B</H4>
+<DL>
+ <DT>lips4v.dev</DT>
+ <DD>LIPS IV $B$N%3!<%I$r=PNO$7$^$9!#%+%i!<=PNO$K$bBP1~$7$F$$$^$9!#(B</DD>
+</DL>
+<HR>
+<H2><A HREF="#i_usage" NAME="usage">$B;HMQJ}K!(B/$B;HMQ%*%W%7%g%s(B</A></H2>
+<P>
+$B0J2<$K$+$+$l$F$$$k%*%W%7%g%s$O(B PostScript $B%U%!%$%k$NCf$N%*%Z%l!<%?$G$bJQ99$5$l$k$3$H$,$"$j$^$9!#(B
+lpd $B$N%U%#%k%?!<$H$7$F;H$&>l9g$O$3$NCf$G(B <A HREF="#device">-sDEVICE</A>$B!"(B
+<A HREF="#resolution">-r</A> $B$N$_$r;XDj$9$k$H$h$$$G$7$g$&!#(B
+</P>
+<H3>LIPS$B!&(BESC/Page$B!&(BNPDL $B%I%i%$%P6&DL%*%W%7%g%s(B</H3>
+<DL>
+ <DT><A HREF="#device">-sDEVICE</A></DT>
+ <DD>$B=PNO$9$k%G%P%$%9$NJQ99$K;HMQ$7$^$9!#(B<EM>$B:GDc8B$3$l$@$1$O;XDj$7$F2<$5$$!#(B</EM></DD>
+ <DT><A HREF="#pagesize">-sPAPERSIZE</A></DT>
+ <DD>$B=PNO$9$kMQ;f%5%$%:$NJQ99$K;HMQ$7$^$9(B</DD>
+ <DT><A HREF="#numcopies">-dNumCopies</A></DT>
+ <DD>$B0u:~It?t$r;XDj$9$k>l9g$K;HMQ$7$^$9(B</DD>
+ <DT><A HREF="#resolution">-r</A></DT>
+ <DD>$B2rA|EY$r;XDj$9$k>l9g$K;HMQ$7$^$9(B</DD>
+ <DT><A HREF="#duplex">-dDuplex</A></DT>
+ <DD>$BN>LL0u:~$9$k>l9g$K;HMQ$7$^$9(B</DD>
+ <DT><A HREF="#tumble">-dTumble</A></DT>
+ <DD>$BN>LL0u:~$9$k>l9g$K$H$8J}8~$rJQ99$9$k>l9g$K;HMQ$7$^$9(B</DD>
+ <DT><A HREF="#negativeprint">-dNegativePrint</A></DT>
+ <DD>$BGr9uH?E>0u:~$,$G$-$^$9!#(B</DD>
+</DL>
+<H3>ESC/Page $B%I%i%$%P$N$_$N%*%W%7%g%s(B</H3>
+<DL>
+ <DT><A HREF="#ritoff">-dRITOff</A></DT>
+ <DD>RIT ($BNX3TJd@55!G=(B)$B$r%*%U$K$9$k>l9g$K;HMQ$7$^$9(B</DD>
+</DL>
+<H3>LIPS $B%I%i%$%P$N$_$N%*%W%7%g%s(B</H3>
+<DL>
+ <DT><A HREF="#bitsperpixel">-dBitsPerPixel</A><DT>
+ <DD>LIPS IV $B$K$*$$$F%b%N%/%m$H%+%i!<=PNO$r@ZBX$($k$?$a$K;HMQ$7$^$9(B</DD>
+ <DT><A HREF="#manualfeed">-dManualFeed</A></DT>
+ <DD>$B5k;f%H%l%$$+$i5k;f$9$k>l9g$K;HMQ$7$^$9(B</DD>
+ <DT><A HREF="#casset">-dCasset</A></DT>
+ <DD>$B5k;f$9$k%H%l%$(B/$B%+%;%C%H$r;XDj$9$k>l9g$K;HMQ$7$^$9(B</DD>
+ <DT><A HREF="#panel">-sUserName</A></DT>
+ <DD>$B%W%j%s%?$N%Q%M%k$KI=<($9$kJ8;z$rJQ99$9$k>l9g$K;HMQ$7$^$9(B</DD>
+ <DT><A HREF="#mediatype">-sMediaType</A></DT>
+ <DD>LBP-2160 (LBP-2040 $B$b(B?)$B$G=PNO$9$kMQ;f$N<oN`$r;XDj$9$k$?$a$K;HMQ$7$^$9!#(B
+ <DT><A HREF="#faceup">-dOutputFaceUp</A></DT>
+ <DD>LBP-2160 (LBP-2040 $B$b(B?)$B$G%U%'%$%9%"%C%W%H%l%$$K=PNO$9$k$?$a$K;HMQ$7$^$9!#(B
+ <DT><A HREF="#nup">-dNup</A></DT>
+ <DD>N $BLL0u:~$r$9$k>l9g$K;HMQ$7$^$9(B</DD>
+ <DT><A HREF="#pjl">-dPJL</A></DT>
+ <DD>PJL $B$r=PNO$9$k>l9g$K;HMQ$7$^$9(B</DD>
+ <DT><A HREF="#tdensity">-dTonerDensity</A></DT>
+ <DD>$B%H%J!<G;EYD4@a$r$9$k>l9g$K(B -dPJL $B$H$H$b$K;HMQ$7$^$9(B</DD>
+ <DT><A HREF="#tsave">-dTonerSaving</A></DT>
+ <DD>$B%H%J!<@aLs$r$9$k>l9g$K(B -dPJL $B$H$H$b$K;HMQ$7$^$9(B</DD>
+</DL>
+<HR>
+<H3>LIPS$B!&(BESC/Page$B!&(BNPDL $B%I%i%$%P6&DL%*%W%7%g%s(B</H3>
+<H4><A HREF="#i_device" NAME="device">$B%G%P%$%9JQ99(B</A></H4>
+<P>
+$B$3$N%I%i%$%P$r;HMQ$9$k$?$a$K$O(B -sDEVICE $B%*%W%7%g%s$G%G%P%$%9$rJQ99$9$kI,MW$,$"$j$^$9!#$=$l$>$l<!$N$h$&$K;XDj$7$^$9!#(B
+</P>
+<DL>
+ <DT>-sDEVICE=lips2p</DT>
+ <DD>lips2p $B%G%P%$%9$r;HMQ$7$^$9(B</DD>
+ <DT>-sDEVICE=lips3</DT>
+ <DD>lips3 $B%G%P%$%9$r;HMQ$7$^$9(B</DD>
+ <DT>-sDEVICE=bjc880j</DT>
+ <DD>bjc880j $B%G%P%$%9$r;HMQ$7$^$9(B</DD>
+ <DT>-sDEVICE=lips4</DT>
+ <DD>lips4 $B%G%P%$%9$r;HMQ$7$^$9(B</DD>
+ <DT>-sDEVICE=lips4v</DT>
+ <DD>lips4v $B%G%P%$%9$r;HMQ$7$^$9(B</DD>
+ <DT>-sDEVICE=lp2000</DT>
+ <DD>lp2000 $B%G%P%$%9$r;HMQ$7$^$9(B</DD>
+ <DT>-sDEVICE=escpage</DT>
+ <DD>escpage $B%G%P%$%9$r;HMQ$7$^$9(B</DD>
+ <DT>-sDEVICE=npdl</DT>
+ <DD>npdl $B%G%P%$%9$r;HMQ$7$^$9(B</DD>
+</DL>
+<HR>
+<H4><A HREF="#i_pagesize" NAME="pagesize">$B%G%U%)%k%HMQ;f%5%$%:JQ99(B($B%G%U%)%k%H(B:A4$B%5%$%:(B)</A></H4>
+<P>
+$B$3$N%I%i%$%P$G$O(B-sPAPERSIZE$B%*%W%7%g%s$+(Bsetpagedevice$B%*%Z%l!<%?$K$h$C$F(B
+$B;XDj$7$?%5%$%:$r(B<EM>$BMQ;fJ}8~$b4^$a$F(B</EM>$B@5$7$/07$&$3$H$,$G$-$^$9!#(B
+$B$?$@$7!"5!<o$K$h$C$FBP1~$9$kMQ;f%5%$%:$K@)8B$,$"$j$^$9$N$G$I$NMQ;f%5%$%:$,;H$($k$+$O;HMQ$7$F$$$k%W%j%s%?$N@bL@=q$r;2>H$7$F2<$5$$!#(B($BNc$($P!"(BA4 $B5!$G$"$k(B LBP-450 $B$G$O(B A3 $B$NMQ;f$G$O=PNO$G$-$^$;$s$7!"(BLBP-2160 $B$G$O41@=$O$,$-$K$OBP1~$7$F$$$^$;$s!#(B)
+</P>
+<P>
+$B$^$?!"(B<KBD>-sPAPERSIZE</KBD> $B%*%W%7%g%s$O%G%U%)%k%H$NMQ;f%5%$%:$rJQ99$9$k$@$1$G$9!#(B
+$BMQ;f%5%$%:$r8GDj$7$?$$>l9g$O(B <KBD>-dFIXEDMEDIA</KBD> $B%*%W%7%g%s$H$H$b$KMQ$$$F2<$5$$!#(B
+</P>
+<P>
+$B<!$N%*%W%7%g%s$,;XDj$5$l$?$H$-$9$Y$F$N%I%i%$%P$G(B
+$B%W%j%s%?$K@5$7$/MQ;f%5%$%:$N>pJs$,Aw$i$l$^$9!#(B
+($B$?$@$7!"(BB $B%5%$%:$H41@=$O$,$-$OIUB0$N%Q%C%A$r$"$F$k$3$H(B)
+</P>
+<DL>
+ <DT><KBD>-sPAPERSIZE=a3</KBD></DT><DD>A3</DD>
+ <DT><KBD>-sPAPERSIZE=a4</KBD></DT><DD>A4</DD>
+ <DT><KBD>-sPAPERSIZE=a5</KBD></DT><DD>A5</DD>
+ <DT><KBD>-sPAPERSIZE=b4</KBD></DT><DD>B4</DD>
+ <DT><KBD>-sPAPERSIZE=b5</KBD></DT><DD>B5</DD>
+ <DT><KBD>-sPAPERSIZE=letter</KBD></DT><DD>$B%l%?!<(B</DD>
+ <DT><KBD>-sPAPERSIZE=postcard</KBD></DT><DD>$B41@=$O$,$-(B</DD>
+</DL>
+<P>
+LIPS $B$H(B ESC/Page $B$N%I%i%$%P$G$O<!$N%5%$%:$K$bBP1~$7$F$$$^$9!#(B
+</P>
+<DL>
+ <DT><KBD>-sPAPERSIZE=legal</KBD></DT><DD>$B%j!<%,%k(B</DD>
+ <DT><KBD>-sPAPERSIZE=ledger</KBD></DT><DD>$B%l%8%c!<(B</DD>
+ <DT><KBD>-sPAPERSIZE=b6</KBD></DT><DD>B6</DD>
+</DL>
+<P>
+LIPS $B$N%I%i%$%P$N$_<!$N%5%$%:$KBP1~$7$F$$$^$9!#(B
+</P>
+<DL>
+ <DT><KBD>-sPAPERSIZE=envyou4</KBD></DT><DD>$BMN7A(B4$B9f(B($BIuE{(B)</DD>
+</DL>
+<P>
+$BG$0U$NMQ;f%5%$%:$O<!$N$h$&$K$7$F;XDj$7$^$9!#(B
+</P>
+<DL>
+ <DT><KBD>-g</KBD><VAR>number1</VAR><KBD>x</KBD><VAR>number2</VAR></DT>
+ <DD><KBD>-dDEVICEWIDTH=</KBD><VAR>number1</VAR> $B$H(B<KBD>-dDEVICEHEIGHT=</KBD><VAR>number2</VAR>
+ $B$r;XDj$7$?>l9g$b0UL#$OF1$8$G$9!#(B
+ $B$=$l$>$l%T%/%;%kC10L$GMQ;f$NI}(B(<VAR>number1</VAR>)$B$H(B
+ $B9b$5(B(<VAR>number2</VAR>)$B$r;XDj$7$F2<$5$$!#(B</DD>
+</DL>
+<P>
+LIPS $B%I%i%$%P$K4X$7$F$O41@=$O$,$-%5%$%:$h$j>.$5$$%5%$%:$d(B A3 $B%5%$%:$h$j(B
+$BBg$-$J%5%$%:$O(B LIPS $B$N5,3J>e0u:~$G$-$J$$$3$H$K$J$C$F$$$k$N$G!"(B
+$B$=$N$h$&$J%5%$%:$,;XDj$5$l$?>l9g$O=hM}$r9T$J$$$^$;$s!#(B($B%(%i!<$K$J$j$^$9(B)
+</P>
+<HR>
+<H4><A HREF="#i_numcopies" NAME="numcopies">$BJ#?tIt0u:~(B($B%G%U%)%k%H(B:1$BIt(B)</A></H4>
+<P>
+$B$3$N%I%i%$%P$G$OJ#?tIt0u:~$K$*$$$F%W%j%s%?$N%3%T!<%b!<%I$r;HMQ$7!"9bB.$K0u:~$5$l$^$9!#(B
+</P>
+<P>
+$B%3%^%s%I%i%$%s$G$O!"(B<KBD>-dNumCopies=</KBD><VAR>number</VAR>$B$H$7$F(B
+$B0u:~It?t(B<VAR>number</VAR>$B$r;XDj$7$F2<$5$$!#(B<VAR>number</VAR>$B$N:GBgCM$O(B
+$B<!$N$h$&$K$J$C$F$$$^$9!#$3$l0J>e$NCM$r;XDj$7$F$b:GBgCM$NIt?t$7$+0u:~$5$l$^$;$s!#(B
+</P>
+<DL>
+ <DT>LIPS$B!"(BESC/Page $B%W%j%s%?(B</DT><DD>255</DD>
+ <DT>NPDL $B%W%j%s%?(B</DT><DD>99</DD>
+</DL>
+<HR>
+<H4><A HREF="#i_resolution" NAME="resolution">$B2rA|EYJQ99(B($B%G%U%)%k%H$O2<5-(B)</A></H4>
+<P>
+<KBD>-r</KBD><VAR>$B2rA|EY(B</VAR> $B%*%W%7%g%s$G2rA|EY$rJQ99$9$k$3$H$,$G$-$^$9!#(B
+</P>
+<DL>
+<DT>lips2p</DT><DD>240</DD>
+<DT>lips3</DT><DD>300</DD>
+<DT>bjc880j</DT><DD>60$B!A(B360 ($B%G%U%)%k%H(B 360 dpi)</DD>
+<DT>lips4</DT><DD>60$B!A(B600$B!"(B1200 ($B%G%U%)%k%H(B 600 dpi)</DD>
+<DT>lips4v</DT><DD>60$B!A(B600$B!"(B1200 ($B%G%U%)%k%H(B 600 dpi)</DD>
+<DT>lp2000</DT><DD>60$B!A(B300 ($B%G%U%)%k%H(B 300 dpi)</DD>
+<DT>escpage</DT><DD>60$B!A(B600 ($B%G%U%)%k%H(B 300 dpi)</DD>
+<DT>npdl</DT><DD>160$B!"(B200$B!"(B240$B!"(B400$B!"(B600 ($B%G%U%)%k%H(B 240 dpi)</DD>
+</DL>
+<P>
+LIPS IV $B$G(B $B9b2rA|EY(B (600 dpi$B!"(B1200 dpi) $B0u;z$r9T$J$&>l9g$O(B <A HREF="#hireso">LIPS IV $B=PNO$K$*$1$k9b2rA|EY0u;z$K4X$9$kCm0U(B</A>$B$rFI$s$G2<$5$$!#(B
+$B$b$7FbB"%a%b%j$,B-$j$J$$$h$&$G$7$?$i(B -r300 $B$H$7$F(B 300 dpi $B$G0u:~$9$k$3$H$r(B
+$B$*$9$9$a$7$^$9!#(B
+</P>
+<P>
+[$BHw9M(B]$B8=:_(B(1999$BG/(B4$B7n(B15$BF|(B)$B$N$H$3$m!"(BLIPS IV $B$G(B
+1200 dpi $B$G=PNO2DG=$J%W%j%s%?$O(B LBP-840/LBP-850 $B$7$+H/Gd$5$l$F$$$^$;$s!#(B
+</P>
+<HR>
+<H4><A HREF="#i_duplex" NAME="duplex">$BN>LL0u:~(B($B%G%U%)%k%H(B:$B%Q%M%k@_Dj(B)</A></H4>
+<P>
+$B%W%j%s%?$NCf$K$ON>LL0u:~%f%K%C%H$rAuHw$G$-$k$b$N$,$"$j$^$9$,!"(B
+$B$=$N5!G=$,;H$($^$9!#$H$8J}$O(B2$B<oN`A*Br$G$-$^$9!#(B
+$B$3$N5!G=$K4X78$9$k$N$O(B Duplex $B$H(B Tumble $B$G$9!#(B
+</P>
+<P>
+Ghostscript $B$N%*%W%7%g%s$H$7$FN>LL0u:~$r;XDj$9$k>l9g$K$O<!$N$h$&$J(B
+$B%*%W%7%g%s$r;H$C$F2<$5$$!#(B
+</P>
+<UL>
+ <LI><KBD>-dDuplex</KBD>
+</UL>
+<P>
+$B$^$?!"JRLL0u:~$r;XDj$9$k>l9g$K$O<!$N$h$&$J%*%W%7%g%s$r;H$C$F2<$5$$!#(B
+<EM>$B8=:_$N$H$3$m(B NPDL $B%I%i%$%P$OJRLL0u:~$K$OBP1~$7$F$$$^$;$s!#(B</EM>
+</P>
+<UL>
+ <LI><KBD>-dDuplex=false</KBD>
+</UL>
+<H5><A NAME="tumble">$B$H$8J}8~(B ($B%G%U%)%k%H(B: $BD9JU$H$8(B)</A></H5>
+<P>
+$BN>LL0u:~$r$9$k$H$-$H$8J}8~$rD9JU$H$8$+C;JU$H$8$r;XDj$G$-$^$9!#(B
+$B%G%U%)%k%H$G$OD9JU$H$8$G$9!#C;JU$H$8$r;XDj$9$k>l9g$K$O<!$N$h$&$J(B
+$B%*%W%7%g%s$r;H$C$F2<$5$$!#(B
+$BJRLL0u:~;~$K$3$N%*%W%7%g%s$r;XDj$7$F$b0UL#$O$"$j$^$;$s!#(B
+<EM>$B8=:_$N$H$3$m(B NPDL $B%I%i%$%P$OC;JU$H$8$K$OBP1~$7$F$$$^$;$s!#(B</EM>
+</P>
+<UL>
+ <LI><KBD>-dTumble</KBD>
+</UL>
+<HR>
+<H4><A HREF="#i_negativeprint" NAME="negativeprint">$BGr9uH?E>0u:~(B ($B%G%U%)%k%H(B: $BH?E>$7$J$$(B)</A></H4>
+<P>
+lips4.dev($B%b%N%/%m$N$_(B)$B!"(Blp2000.dev$B!"(Bescpage.dev$B!"(Bnpdl.dev(NPDL (level2)$BBP1~5!<o$N$_(B) $B$K8B$j<!$N%*%W%7%g%s$rF~NO$9$k$3$H$GGr9u$rH?E>$5$;$k$3$H$,$G$-$^$9!#(B
+</P>
+<UL>
+ <LI>-dNegativePrint
+</UL>
+<HR>
+<H3>ESC/Page $B%I%i%$%P$N$_BP1~$N%*%W%7%g%s(B</H3>
+<H4><A HREF="#i_ritoff" NAME="ritoff">RIT ($BNX3TJd@55!G=(B)$B$r%*%U$K$9$k(B ($B%G%U%)%k%H(B: RIT $B$r;H$&(B)</A></H4>
+<P>
+escpage.dev $B$K8B$j<!$N%*%W%7%g%s$r;H$&$3$H$K$h$j(B RIT (Resolution Improvement Technology$B!"NX3TJd@55!G=(B)$B$r%*%U$K$9$k$3$H$,$G$-$^$9!#(B
+</P>
+<P>
+$BDL>o$O(B RIT $B$O%*%s$N$^$^;H$($P$h$$$G$9$,!"%Q%?!<%sEI$j$D$V$7$J$N$G0U?^$7$?0u:~7k2L$H0c$&$b$N$,=PNO$5$l$k>l9g$O$3$N5!G=$r;H$C$F(B RIT $B$r%*%U$K$7$F$/$@$5$$!#(B
+</P>
+<UL>
+ <LI>-dRITOff
+</UL>
+<HR>
+<H3>LIPS $B%I%i%$%P$N$_BP1~$N%*%W%7%g%s(B</H3>
+<H4><A HREF="#i_bitsperpixel" NAME="bitsperpixel">$B%b%N%/%m$H%+%i!<=PNO$N@ZBX$((B($B%G%U%)%k%H(B:$B%b%N%/%m(B)</A></H4>
+<P>
+<EM>$B$3$N%*%W%7%g%s$O(B bjc880j$B!"(Blips4$B!"(Blips4v $B$N$_BP1~$7$F$$$^$9!#(B</EM>
+</P>
+<P>
+<KBD>-dBitsPerPixel=</KBD><VAR>number</VAR>$B%*%W%7%g%s$K$h$j%b%N%/%m$H(B
+$B%+%i!<=PNO$N@ZBX$($,$G$-$^$9!#(B
+</P>
+<H5>bjc880j$B!"(Blips4</H5>
+<DL>
+<DT>-dBitsPerPixel=1</DT><DD>$B%b%N%/%m=PNO(B ($B%G%U%)%k%H(B)</DD>
+<DT>-dBitsPerPixel=24</DT><DD>$B%+%i!<=PNO(B</DD>
+</DL>
+<H5>lips4v</H5>
+<DL>
+<DT>-dBitsPerPixel=8</DT><DD>$B%b%N%/%m=PNO(B ($B%G%U%)%k%H(B)</DD>
+<DT>-dBitsPerPixel=24</DT><DD>$B%+%i!<=PNO(B</DD>
+</DL>
+<HR>
+<H4><A HREF="#i_feed" NAME="feed">$B5k;fJ}K!$NA*Br(B($B%G%U%)%k%H(B:$B<+F0A*Br(B)</A></H4>
+<P>
+<EM>$B$3$N%*%W%7%g%s$O(B LIPS $B$N%G%P%$%9$N$_BP1~$7$F$$$^$9!#(B</EM>
+</P>
+<P>
+-dManualFeed$B%*%W%7%g%s$K$h$k(BMP$B%H%l%$(B($B5k;f%H%l%$(B)$B$+$i$N5k;f$H(B
+-dCasset$B%*%W%7%g%s$K$h$k5k;f%+%;%C%H$NA*Br$KBP1~$7$^$7$?!#(B
+$B%G%U%)%k%H$G$N5k;f$O<+F0A*Br$K$J$j$^$9!#$^$?!"(B-dManualFeed$B%*%W%7%g%s$G$N(B
+$B;XDj$O(B-dCasset$B$K$h$k;XDj$h$j$bM%@h$9$k$3$H$KCm0U$7$F2<$5$$!#(B
+</P>
+<H5><A NAME="manualfeed">MP$B%H%l%$(B($B5k;f%H%l%$(B)$B$+$i$N5k;f(B</A></H5>
+<P>
+$B<!$N$h$&$J%*%W%7%g%s$r;XDj$9$k$3$H$G(BMP$B%H%l%$(B($B5k;f%H%l%$(B)$B$+$i(B
+$B5k;f$G$-$^$9!#(B
+</P>
+<UL>
+ <LI><KBD>-dManualFeed</KBD>
+</UL>
+<H5><A NAME="casset">$B5k;f%+%;%C%H$NA*Br(B</A></H5>
+<P>
+<EM>$B$3$N%*%W%7%g%s$O(B LIPS $B$N%G%P%$%9$N$_BP1~$7$F$$$^$9!#(B</EM>
+</P>
+<P>
+<KBD>-dCasset=</KBD><VAR>number</VAR>$B%*%W%7%g%s$^$?$O(B<KBD>-DCasset=</KBD>
+<VAR>number</VAR>$B$K$h$j5k;f%+%;%C%H$r(B
+$BA*Br$G$-$^$9!#(B
+<VAR>number</VAR>$B$N;XDj$O<!$N$h$&$K$J$j$^$9!#$3$l$i0J30$N?tCM$r;XDj$9$k$H(B
+$B%(%i!<$K$J$j$^$9!#(B
+</P>
+<DL>
+ <DT>-1</DT><DD>$B5k;f%+%;%C%H$NA*Br$r$9$k%3%^%s%I$r=PNO$7$J$$(B</DD>
+ <DT>0</DT><DD>$B<+F05k;f(B</DD>
+ <DT>1</DT><DD>$B<j:9$75k;f(B(MP$B%H%l%$(B)</DD>
+ <DT>2</DT><DD>$B2<CJ%+%;%C%H5k;f(B</DD>
+ <DT>3</DT><DD>$B>eCJ%+%;%C%H5k;f(B</DD>
+ <DT>10</DT><DD>MP$B%H%l%$(B($B<j:9$75k;f$KAjEv(B)</DD>
+ <DT>11</DT><DD>$B%+%;%C%H(B1</DD>
+ <DT>12</DT><DD>$B%+%;%C%H(B2</DD>
+ <DT>13</DT><DD>$B%+%;%C%H(B3</DD>
+ <DT>14</DT><DD>$B%+%;%C%H(B4</DD>
+ <DT>15</DT><DD>$B%+%;%C%H(B5</DD>
+ <DT>16</DT><DD>$B%+%;%C%H(B6</DD>
+ <DT>17</DT><DD>$B%+%;%C%H(B7</DD>
+</DL>
+<P>
+-dCasset=-1 $B$O(B -dCasset=0 $B$G$O<+F05k;f$,F/$+$J$$>l9g$KMQ$$$F2<$5$$!#(B
+($B>/$J$/$H$b(B LBP-A405Jr. $B$G$OMQ$$$kI,MW$,$"$k$h$&$G$9(B)
+</P>
+<P>
+$B%W%m%0%i%^!<%:%^%K%e%"%k(B 4.2 $B$K$h$k$H;Y>c$N$J$$8B$j(B&quot;0&quot;$B$^$?$O(B&quot;10&quot;$B!A(B&quot;17&quot;$B$rMQ$$$F2<$5$$$H$$$&$3$H$J$N$G(B LIPS IV $BEk:\%W%j%s%?$G$O$=$N$h$&$K$7$?$[$&$,$h$$$G$7$g$&!#(B
+</P>
+<HR>
+<H4><A HREF="#i_panel" NAME="panel">$B%Q%M%kI=<(JQ99(B($B%G%U%)%k%H(B:Ghostscript)</A></H4>
+<P>
+<EM>$B$3$N%*%W%7%g%s$O(B LIPS $B$N%G%P%$%9$N$_BP1~$7$F$$$^$9!#(B</EM>
+</P>
+<P>
+$B%W%j%s%?$N%9%F!<%?%9I=<(It$KI=<($9$k%3%a%s%H$r(B-dUserName$B%*%W%7%g%s$r(B
+$BMQ$$$FF0E*$KI=<($9$k$3$H$,$G$-$k$h$&$K$J$j$^$7$?!#$3$l$K$h$C$F(B
+Ghostscript$B$r0u:~$N%U%#%k%?!<$H$7$F;H$C$F$$$k>l9g!"(B
+$B<!$N$h$&$J%$%s%W%C%H%U%#%k%?!<$r;H$&$3$H$K$h$C$F0u:~;~$K%f!<%6L>$r(B
+$B%W%j%s%?$N%9%F!<%?%9I=<(It$KI=<($G$-$k$h$&$K$J$j$^$9!#(B
+<PRE>
+<CODE>#!/bin/sh</CODE>
+
+<CODE><VAR>user</VAR>=/dev/null</CODE>
+
+<CODE>#</CODE>
+<CODE># Get username from filter parameters</CODE>
+<CODE>#</CODE>
+<CODE>while [ <VAR>$#</VAR> != 0 ]</CODE>
+<CODE>do case "<VAR>$1</VAR>" in</CODE>
+ <CODE>-n) <VAR>user</VAR>=<VAR>$2</VAR> ; shift ;;</CODE>
+ <CODE>*) ;;</CODE>
+ <CODE>esac</CODE>
+ <CODE>shift</CODE>
+<CODE>done</CODE>
+
+<CODE>gs -q -sDEVICE=lips4 -dSAFER -dNOPAUSE -sUserName=<VAR>$user</VAR> -sOutputFile=- -</CODE>
+
+<CODE>exit 0</CODE>
+</PRE>
+<HR>
+<H4><A HREF="#i_mediatype" NAME="mediatype">$BMQ;f<oN`;XDj(B</A></H4>
+<P>
+<EM>$B$3$N%*%W%7%g%s$O(B LBP-2160 ($B$b$7$+$7$?$i(B LBP-2040$B$b(B?)$B$KBP1~$7$F$$$^$9!#(B</EM>
+</P>
+<P>
+LBP-2160($B$b$7$+$7$?$i!"(BLPB-2040$B$b(B?) $B$G$OIaDL;f!"8|;f!"(BOHP$B!"8wBt%U%#%k%`$KBP1~$7$F$$$^$9$,!"(B
+$BE,@Z$J%3%^%s%I$r=PNO$7$J$$$H%H%J!<$NDjCe$KITET9g$,@8$8$^$9!#(B
+$B<!$N%*%W%7%g%s$rMQ$$$F$=$l$>$l$NMQ;f$K=PNO$7$F$/$@$5$$!#(B
+$B$J$*!"IaDL;f0J30$r;XDj$9$k$H<+F0E*$K5k;f%H%l%$$+$i5k;f$5$l$k$h$&$K$J$j$^$9!#(B
+</P>
+<DL>
+ <DT><KBD>-sMediaType=PlanePaper</KBD></DT><DD>$BIaDL;f(B</DD>
+ <DT><KBD>-sMediaType=CardBoard</KBD></DT><DD>$B8|;f(B</DD>
+ <DT><KBD>-sMediaType=OHP</KBD></DT><DD>OHP</DD>
+ <DT><KBD>-sMediaType=TransparencyFilm</KBD></DT><DD>OHP</DD>
+ <DT><KBD>-sMediaType=GlossyFilm</KBD></DT><DD>$B8wBt%U%#%k%`(B</DD>
+</DL>
+<HR>
+<H4><A HREF="#i_faceup" NAME="faceup">$B%U%'%$%9%"%C%W%H%l%$$N=PNO(B</A></H4>
+<P>
+<EM>$B$3$N%*%W%7%g%s$O(B LBP-2160 ($B$b$7$+$7$?$i(B LBP-2040$B$b(B?)$B$N$_$KBP1~$7$F$$$^$9!#(B</EM>
+</P>
+<P>
+LPB-2160 $B$G$ODL>o$N%U%'%$%9%@%&%s%H%l%$$NB>$K%U%'%$%9%"%C%W%H%l%$$X$N=PNO$r%5%]!<%H$7$F$$$^$9!#<!$N%*%W%7%g%s$K$h$j%U%'%$%9%"%C%W%H%l%$$K=PNO$9$k$3$H$,$G$-$^$9!#(B
+</P>
+<P>
+$B$b$7$+$7$?$i!"(BLPB-2040 $B$G$b;HMQ$G$-$k$+$b$7$l$^$;$s!#(B
+</P>
+<UL>
+ <LI>-dOutputFaceUp
+</UL>
+<HR>
+<H3><A HREF="#i_nup" NAME="nup">n $BLL0u:~(B ($B%G%U%)%k%H(B: $B%Q%M%k@_Dj(B)</A></H3>
+<P>
+<EM>$B$3$N%*%W%7%g%s$O(B LIPS IV $B$N%G%P%$%9$N$_BP1~$7$F$$$^$9!#(B</EM>
+</P>
+<P>
+<EM>[$B7Y9p(B]</EM>$B$3$l$O(B LIPS IV $B$NHs8x3+5!G=$r;H$C$F$$$k$?$a!";HMQ$K$O==J,$KCm0U$7$F2<$5$$!#BP1~$7$F$$$J$$5!<o$b$"$k$+$b$7$l$^$;$s!#(B
+$B$^$?!"(Bpsnup $B$G$&$^$/$$$/(B PostScript $B%U%!%$%k$N>l9g$O!"(Bpsnup $B$r;H$$$^$7$g$&!#(B
+psnup $B$r;H$&$[$&$,(B<EM>$BA4$F$NLL$G(B</EM>$BM%$l$F$$$^$9!#(B
+$B$3$N5!G=$O4pK\E*$K$O(B psnup $B$G$&$^$/$$$+$J$$(B PostScript $B%U%!%$%k$K;H$C$F2<$5$$!#(B
+$B>\$7$/$O(B FAQ $B$N(B<A HREF="#nup_printing">$B!V(B n $BLL0u:~$r$9$k$K$O!"$I$&$7$?$i$$$$$N(B? $B!W(B</A>$B$rFI$s$G2<$5$$!#(B
+$B$^$?!"Ek:\%a%b%jNL$K$h$j!"!V%7%9%F%`%a%b%j(B $B%U%k!W$J$I$N%(%i!<$K$J$k2DG=@-$b$"$k$+$b$7$l$^$;$s!#(B
+</P>
+<P>
+$B<!$N%*%W%7%g%s$r;H$&$3$H$K$h$j!"(Bn $BLL0u:~$,2DG=$G$9!#(B
+</P>
+<DL>
+ <DT>-dNup=1</DT>
+ <DD>1 $BLL0u:~(B ($B%G%U%)%k%H(B)</DD>
+ <DT>-dNup=2</DT>
+ <DD>2 $BLL0u:~(B</DD>
+ <DT>-dNup=4</DT>
+ <DD>4 $BLL0u:~(B</DD>
+</DL>
+<P>
+[$B:n<T$+$i$N=u8@(B]$B$3$N5!G=$G(B 4 $BLL0u:~$r$9$k>l9g!"(B300 dpi $B$H(B 600 dpi $B$N=PNO$KL@$i$+$J:9$O$J$$$N$G!"(B300 dpi $B$K2rA|EY$rMn$9$H$h$jB.$/=PNO$G$-$^$9!#(B2 $BLL0u:~$K$*$$$F$O$3$N8B$j$G$O$"$j$^$;$s!#(B
+1,200 dpi $B$H(B 600 dpi $B$N:9$O$I$&$J$C$F$$$k$+J,$+$j$^$;$s!#(B
+</P>
+<HR>
+<H4><A HREF="#i_fontdl" NAME="fontdl">$B%U%)%s%H%@%&%s%m!<%I(B($B%G%U%)%k%H(B: $B$7$J$$(B)</A></H4>
+<P>
+<EM>$B$3$N%*%W%7%g%s$O(B lips4v $B$N$_BP1~$7$F$$$^$9!#(B</EM>
+</P>
+<P>
+$B%Y%/%?!<HG%G%P%$%9(B lips4v $B$G$O%S%C%H%^%C%W%U%)%s%H$r%@%&%s%m!<%I$9$k$3$H$K$h$j!"F1$8J8;z$,7+$jJV$7$G$F$/$k>l9g!"$h$j9bB.$K0u:~$G$-$k$h$&$K$9$k$3$H$,$G$-$^$9!#FC$K1Q8l$NO@J8$J$I$G$O$3$N8z2L$O@dBg$G$9!#(B
+$B$7$+$7!"(BLIPS IV $B$N@)Ls$K$h$j%/%j%C%T%s%0=hM}$r9T$J$&>l9g!">/$7$G$b%/%j%C%T%s%0NN0hFb$K$"$kJ8;z$O%/%j%C%T%s%0NN0h30$NItJ,$,$"$C$?$H$7$F$b4]!9IA$+$l$F$7$^$&$H$$$&IT6q9g$,$"$j$^$9!#(B
+$B%/%j%C%T%s%0NN0h$r;H$$$3$J$7$??^7A$rIA$/$h$&$J>l9g$O$3$N%*%W%7%g%s$O;H$o$J$$J}$,$h$$$G$9!#(B
+$B$7$+$7$J$,$i!"%/%j%C%T%s%0NN0h$GJ8;z%+%C%H$7$J$,$iIA$/$H$$$&=hM}$O9T$J$o$J$$%f!<%6$NJ}$,B?$$$H;W$$$^$9!#(B
+</P>
+<P>
+$B$^$?!"(B18 point $B0J2<$N%-%c%i%/%?!<$7$+%@%&%s%m!<%I$O9T$J$$$^$;$s!#(B
+</P>
+<P>
+$B<!$N%*%W%7%g%s$r;H$&$3$H$K$h$j!"%U%)%s%H$N%@%&%s%m!<%I$,2DG=$G$9!#(B
+</P>
+<UL>
+ <LI><KBD>-dFontDL</KBD>
+</UL>
+<HR>
+<H4><A HREF="#i_pjl" NAME="pjl">PJL $B=PNO(B ($B%G%U%)%k%H(B: $B=PNO$7$J$$(B)</A></H4>
+<P>
+<EM>[$B7Y9p(B]</EM>$B$3$l$OHs8x3+5!G=$r;H$C$F$$$k$?$a!";HMQ$K$O==J,$KCm0U$7$F2<$5$$!#BP1~$7$F$$$J$$5!<o$b$"$j$^$9!#(B
+$B>/$J$/$H$b(B LIPS IV $BEk:\5!<o$G$OA4$F$N%G%P%$%9(B(lips*.dev)$B$G!"(B
+$B$3$N5!G=$,;H$($k$h$&$G$9!#(B
+</P>
+<P>
+$B<!$N%*%W%7%g%s$r;H$&$3$H$K$h$j(B PJL $B$r=PNO$7$^$9!#(B
+PJL $B$r=PNO$9$k$3$H$K$h$j%W%j%s%?$N(B LIPS $B%b!<%I$X$N@ZBX$r@)8f$G$-$^$9!#(B
+$B$7$+$7$J$,$i!"(BLASER SHOT $B$N(B LIPS $B%b!<%I$N<+F0G'<1$O$+$J$jM%=($J$N$GI,$:$7$b(B
+$B$3$N%*%W%7%g%s$r;H$&I,MW$O$"$j$^$;$s!#(B
+</P>
+<UL>
+ <LI><KBD>-dPJL</KBD>
+</UL>
+<P>
+$B$^$?!"(BPJL $B$rMQ$$$k$3$H$K$h$j!"(B<A HREF="#tdensity">$B%H%J!<G;EYD4@a5!G=(B</A>$B$d(B<A HREF="#tsave">$B%H%J!<@aLs5!G=(B</A>$B$r(B Ghostscript$B%I%i%$%P$GMQ$$$k$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B
+</P>
+<H5><A HREF="#i_tdensity" NAME="tdensity">$B%H%J!<G;EYD4@a(B ($B%G%U%)%k%H(B: $B%Q%M%k@_Dj(B)</A></H5>
+<P>
+$B<!$N%*%W%7%g%s$r;H$&$3$H$K$h$j!"%H%J!<G;EYD4@a$,2DG=$G$9!#(B
+</P>
+<DL>
+ <DT><KBD>-dPJL -dTonerDensity=<VAR>n</VAR></KBD></DT>
+ <DD>n $B$O(B 0 $B$+$i(B 8, 0 $B$O%Q%M%k$N@_Dj!#?t;z$,Bg$-$$$[$IG;$/$J$j$^$9!#(B</DD>
+</DL>
+<H5><A HREF="#i_tsave" NAME="tsave">$B%H%J!<@aLs(B ($B%G%U%)%k%H(B: $B%Q%M%k@_Dj(B)</A></H5>
+<P>
+$B<!$N%*%W%7%g%s$r;H$&$3$H$K$h$j!"%H%J!<@aLs$,2DG=$G$9(B
+</P>
+<UL>
+ <LI><KBD>-dPJL -dTonerSaving</KBD>
+</UL>
+<P>
+$B5U$K<!$N%*%W%7%g%s$r;H$&$3$H$K$h$j!"%H%J!<@aLs$r(B<EM>$B$7$J$$(B</EM>$B$3$H$,2DG=$G$9(B
+</P>
+<UL>
+ <LI><KBD>-dPJL -dTonerSaving=false</KBD>
+</UL>
+<P>
+$B2?$b;XDj$7$J$$>l9g$O%W%j%s%?$N%Q%M%k@_Dj$K=>$$$^$9!#(B
+</P>
+<HR>
+<H4><A HREF="#i_netatalk" NAME="netatalk">Netatalk$B!&(BCAP $B$H(B Ghostscript + gdevlips</A></H4>
+<P>
+Netatalk $B$d(B CAP $B$rMQ$$$F(B Ghostscript + gdevlips $B$rMQ$$$k>l9g!"(B
+$BDL>o(B LaserWriter 8 $B$d(B Adobe PS $B$J$I$N%W%j%s%?%I%i%$%P$r;HMQ$7$^$9$,!"(B
+$B%W%j%s%?5-=R%U%!%$%k(B(PPD $B%U%!%$%k(B)$B$GE,@5$J$b$N$r=q$1$P>e5-$N%*%W%7%g%s$OA4$F(B Macintosh $B$+$i;XDj$G$-$k$h$&$K$J$j$^$9!#(B
+$B$^$??7$?$K%W%j%s%?5-=R%U%!%$%k$r=q$+$J$/$F$b4{B8$N$b$N$rMxMQ$9$l$P$+$J$j$N$3$H$,$G$-$^$9!#(B
+</P>
+<P>
+$B$^$?!"(BGhostscript $B%I%i%$%P$NCf$K$O(B LaserWrite 8 $B$N=PNO$9$k(B Landscape $B$,2sE>$G$-$J$$$b$N$,$"$j$^$9$,!"(B
+$B$3$N%I%i%$%P$G$O$-$A$s$H2sE>$7$F@5>o$K=PNO$9$k$h$&$K$J$C$F$$$k$N$G!"$=$NE@$O8f0B?42<$5$$!#(B
+</P>
+<P>
+$BNc$H$7$F(B<A HREF="ftp://ftp.adobe.com/pub/adobe/printerdrivers/mac/all/ppdlevel2/canon.sit.hqx">Canon LASER SHOT LBP-730PS$BMQ$N%W%j%s%?5-=R%U%!%$%k(B</A>$B$rMQ$$$?>l9g!"(B
+$BJQ99$J$7$G<!$N5!G=$,MxMQ$G$-$^$9!#(B
+</P>
+<UL>
+ <LI>$B%Z!<%8%5%$%:JQ99(B(A3$B!A$O$,$-(B)
+ <LI>$B<j:9$70u:~$H<+F00u:~$N@ZBX$((B(1$B%Z!<%8L\$H$=$l0J9_$N%Z!<%8$N=PNOJ}K!$r(B
+ $BJQ99$9$k5!G=$b;H$($k!#$?$@$7!"$3$N5!G=$O(B LIPS $B%I%i%$%P$N$_(B)
+ <LI>$B2rA|EYJQ99(B($B$?$@$7(B Ghostscript $B$N%*%W%7%g%s$K(B-dFIXEDRESOLUTION=false $B$r$D$1$k$3$H(B)
+ <LI>$BN>LL0u:~(B($BD9JU$H$8!"C;JU$H$8(B)
+</UL>
+<P>
+$B5k;fJ}K!A*Br%*%W%7%g%s$N$&$A(B-dManualFeed$B%*%W%7%g%s$O(BPostScript$B8@8l$N:nK!$K(B
+$B=>$C$F$$$^$9$,!"(B-dCasset$B%*%W%7%g%s$O$=$&$G$O$J$$$N$GCm0U$7$F2<$5$$!#(B
+-dCasset $B$rMQ$$$k$h$&$K(B PPD $B$r5-=R$9$l$P;H$($k$h$&$K$J$k$H;W$$$^$9!#(B
+</P>
+<HR>
+<H2><A HREF="#i_change" NAME="change">$BJQ99MzNr(B</A></H2>
+<H3>gdevlips-2.3.3 (1999/6/22 release)</H3>
+<UL>
+ <LI>[lips4v.dev]$BMQ;f%5%$%:JQ99$9$k%*%Z%l!<%?$r;HMQ$7$?$H$-$N5sF0$,(B
+ $B$*$+$7$/$J$k%P%0$N=$@5!#(B(Thanks to $B[X3@$5$s(B)
+</UL>
+<H3>gdevlips-2.3.2 (1999/5/18 release)</H3>
+<UL>
+ <LI>[npdl.dev]$BN>LL0u:~$N%5%]!<%H(B
+</UL>
+<H3>gdevlips-2.3.1 (1999/5/16 release)</H3>
+<UL>
+ <LI>[escpage.dev]-dRIP $B%*%W%7%g%s$K$h$k2rA|EYJd@55!G=@)8f$N%5%]!<%H(B($B%G%U%)%k%H$G$O%*%s$K$J$j$^$9(B)$B!#$3$l$O;04d$5$s$+$i>pJs$r$$$?$@$-$^$7$?!#(B
+ <LI>[npdl.dev]-dNegativePrint $B%*%W%7%g%s$K$h$kGr9uH?E>0u:~$N%5%]!<%H(B
+</UL>
+<H3>gdevlips-2.3.0 (1999/5/10 release)</H3>
+<UL>
+ <LI>NPDL $B@)8f8@8l$KBP1~$7$?%G%P%$%9(B npdl.dev $B$NDI2C(B
+ <LI>[lips4c.dev, lips4vc.dev]$B$=$l$>$l(B lips4.dev lips4v.dev $B$KE}9g$7$^$7$?!#(B
+ -dBitsPerPixel=24 $B%*%W%7%g%s$G%+%i!<$K@Z$jBX$o$j$^$9!#(B
+ <LI>[lp2000.dev, escpage.dev, lips4.dev]-dNegativePrint $B%*%W%7%g%s$K$h$kGr9uH?E>0u:~$N%5%]!<%H(B
+</UL>
+<H3>gdevlips-2.2.1 (1999/4/28 release)</H3>
+<UL>
+ <LI>[lp2000.dev, escpage.dev] $B5!<o$K$h$C$F$O0u:~$5$l$k:BI8$,$:$l$F$7$^$&(B
+ $B%P%0$N=$@5(B
+</UL>
+<H3>gdevlips-2.2.0 (1999/4/8 release)</H3>
+<UL>
+ <LI>ESC/Page $B@)8f8@8l$KBP1~$7$?%G%P%$%9(B lp2000.dev$B!"(Bescpage.dev $B$NDI2C(B
+ <LI>[lips2p$B!"(Blips3$B!"(Blips4]$B=PNO%"%k%4%j%:%`$r@.>>;a$N$b$N$rMQ$$$k$h$&$K$7$?!#(B
+ ($B<c439bB.$K$J$k(B?)
+</UL>
+<H3>gdevlips-2.1.2 (1999/3/1 release)</H3>
+<UL>
+ <LI>LBP-2160 $BMQ$N5!G=3HD%$K$h$j(BLBP-840 $B$GN>LL0u:~$dFsLL0u:~$,F/$+$J$$%P%0$N=$@5!#(B($B;{@n$5$s$+$i$NJs9p(B)
+</UL>
+<H3>gdevlips-2.1.1 (1999/2/23 release)</H3>
+<UL>
+ <LI>[lips4$B!"(Blips4c$B!"(Blips4v$B!"(Blips4vc] $B;3Fb!w2,;38)N)Bg$5$s$K(B LBP-2160 $B$NMM!9$JMQ;f=PNO$KBP1~$9$k%Q%C%A$r$$$?$@$$$?$N$G<h$j9~$s$@!#(B
+ $B$^$?!"(BLBP-2160 $B$N%U%'%$%9%"%C%W%H%l%$=PNO$KBP1~$9$k(B -dOutputFaceUp $B%*%W%7%g%s$,DI2C$5$l$?!#(B
+</UL>
+
+<H3>gdevlips-2.1.0 (1999/2/13 release)</H3>
+<UL>
+ <LI>[lips4v$B!"(Blips4vc] $B%Q%9$KBP$9$k%/%j%C%T%s%0$,@5>o$K$O$?$i$+$J$$%P%0$N=$@5(B
+ <LI>[lips4v$B!"(Blips4vc] $BB?3Q7A$NFbIt$rEI$j$D$V$9>l9g!"Hs%<%m4,?tK!$,%G%U%)%k%H$K$J$C$F$$$J$$%P%0$N=$@5(B
+ <LI>[lips4v$B!"(Blips4vc] $B%b%N%/%m2hA|$G%Q%?!<%s%U%#%k$J$I$7$?>l9g(B 1$B!A(B7 $B%I%C%H2hA|$,$:$l$k%P%0$N=$@5(B
+ <LI>[lips4v$B!"(Blips4vc] $BF)2a(B/$BGr$NAH9g$;$G%Q%?!<%s%U%#%k$J$I$7$?>l9gF)2a$JItJ,$HGr$NItJ,$N=hM}$,5U$K$J$C$F$$$k%P%0$N=$@5(B
+ <LI>[lips4v$B!"(Blips4vc] known bug $B$N5-=R$rDI2C(B
+</UL>
+<H3>gdevlips-2.0.12 (1999/2/11 release)</H3>
+<UL>
+ <LI>[lips4v$B!"(Blips4vc] $B%$%a!<%8=hM}$r9T$J$&$H%/%i%C%7%e$7$?$j@5>o$KIA$+$l$J$$%P%0$N=$@5(B
+ <LI>[lips4v$B!"(Blips4vc] $B6k7A$KBP$9$k3Q4]$aL?Na$d3Q@Z$jMn$H$7L?Na$J$I$,F/$+$J$$%P%0=$@5(B
+</UL>
+<H3>gdevlips-2.0.11 (1999/2/9 release)</H3>
+<UL>
+ <LI>[lips4v$B!"(Blips4vc] gdevlips-2.0.10 $B$N%P%0%U%#%C%/%9!#J8;z$J$I$rIA$/$H%3%"%@%s%W$9$k%P%0$r=$@5!#(B
+</UL>
+<H3>gdevlips-2.0.10 (1999/2/9 release)</H3>
+<UL>
+ <LI>[lips4v$B!"(Blips4vc] $BJ#;($J%$%a!<%8=hM}$r9T$J$&$H!"%3%"%@%s%W$9$k%P%0$r=$@5!#$^$?!"2hA|$N?'$,$*$+$7$/$J$k%P%0$H2hA|$,$:$l$FIA$+$l$k%P%0$r=$@5(B
+</UL>
+<H3>gdevlips-2.0.9 (1999/2/8 release)</H3>
+<UL>
+ <LI>[lips4v$B!"(Blips4vc] gdevlips-2.0.8 $B$NJQ99$K$*$$$F(B Hi-Level bitmap Imaging $B$G0lEY$KJ#?t%i%$%s$r07$&$H$-$K:G=i$N%i%$%s$7$+IA$+$l$J$$%P%0$rF~$l9~$s$G$7$^$C$?$N$G$=$l$r=$@5!#(B
+</UL>
+<H3>gdevlips-2.0.8 (1999/2/7 release)</H3>
+<UL>
+ <LI>[lips4v$B!"(Blips4vc] $BA4$F$N%S%C%H%^%C%W%k!<%A%s$,05=L$KBP1~(B
+ <LI>[lips4v$B!"(Blips4vc] $B2hA|$N1&C<$K(B1$BK\M>7W$J@~$,IA$+$l$k%P%0$r=$@5(B
+</UL>
+<H3>gdevlips-2.0.7 (1999/2/4 release)</H3>
+<UL>
+ <LI>[lips2p$B!"(Blips3$B!"(Blips4] $B$$$C$?$s05=L$7$F!"05=L8e$N7k2L$,0-$$>l9g$O05=L$5$l$F$$$J$$$b$N$rMQ$$$k$H$$$&%"%k%4%j%:%`$rF3F~!#(B
+ $B$=$N7k2L!"(Blips2p$B!"(Blips3 $B%G%P%$%9$G05=LN($,$+$J$j8~>e$7$?!#(B
+ $B05=L$7$?$?$a$K0u:~%9%T!<%I$,CY$/$J$k$H$$$&$3$H$b$+$J$j$N3d9g$GHr$1$i$l$k!#(B
+ $B$3$N%"%k%4%j%:%`F3F~$KH<$$(B -dCompress $B%*%W%7%g%s$OGQ;_$5$l$?!#(B
+</UL>
+<H3>gdevlips-2.0.6 (1999/1/30 release)</H3>
+<UL>
+ <LI>[lips4c] gdevlips-2.0.4 $B$N%P%0BP:v$G=PNO$,$=$l0JA0$N$b$NHf$Y$F(B 3 $BG\0J>eBg$-$/$J$C$F$7$^$&$N$G!"$b$C$H=PNO$,>.$5$/$J$k$h$&$KD4@0$7$?!#(B
+</UL>
+<H3>gdevlips-2.0.5 (1999/1/28 release)</H3>
+<UL>
+ <LI>[lips2p$B!"(Blips3$B!"(Blips4]$B05=L(B(-dCompress) $B$N@_Dj$N$H$-$N%P%0(B(gdevlips-2.0.1 $B$K:.F~(B)$B!#@5>o$KIA$+$l$J$+$C$?!#(B
+</UL>
+<H3>gdevlips-2.0.4 (1999/1/16 release)</H3>
+<UL>
+ <LI>[lips4c] $B05=L$r9T$J$&@_Dj$N$H$-$K!"(BVMError $B$,=P$?$j%3%"%@%s%W$7$?$j$9$k$3$H$,$"$k%P%0$N=$@5(B
+</UL>
+<H3>gdevlips-2.0.3 (1999/1/11 release)</H3>
+<UL>
+ <LI>[lips4v$B!"(Blips4vc] RGB 3 plane$B!_(B4 bit $B$N%G!<%?$r=hM}$9$k$H$-%i%9%?!<$,(B 1 dot $B$:$D$:$l$F$$$C$F$7$^$&$3$H$,$"$k%P%0$N=$@5(B (LIPS $B$N;EMM=q$N5-:\%_%9(B)
+ <LI>[lips4v$B!"(Blips4vc] $B0lIt$N%k!<%A%s$,05=L$KBP1~(B (1 bit $B$N%G!<%?$N$_(B)
+</UL>
+<H3>gdevlips-2.0.2 (1999/1/8 release)</H3>
+<UL>
+ <LI>$B%Y%/%?!<HG%G%P%$%9(B lips4v lips4vc $B$NI|3h(B
+ <UL>
+ <LI>[lips4v$B!"(Blips4vc]setflat $B%*%Z%l!<%?$r;HMQ$9$k$H6J@~$,%,%?%,%?$9$k%P%0$N=$@5(B
+ <LI>[lips4v$B!"(Blips4vc]$B%-%c%i%/%?!<$,@5>o$KIA$+$l$J$$%P%0$N2sHr(B
+ <LI>[lips4v$B!"(Blips4vc]$B2hA|Jd@5$r9T$C$?>l9g$N%P%0=$@5(B
+ </UL>
+</UL>
+<H3>gdevlips-2.0.1 (1998/11/30 release)</H3>
+<UL>
+ <LI>[lips2p$B!"(B lips3]$B%*%W%7%g%s$,@5>o$K5!G=$7$J$+$C$?$j!"M>7W$JJ8;z$,0u:~$5$l$k%P%0$N=$@5(B(gdevlips4-19981015 $B$GF~$j$3$s$@%P%0(B)
+ <LI>[lips2p$B!"(Blips3$B!"(Blips4]$B$A$g$C$H9bB.2=(B($BM>7W$J=hM}$,F~$C$F$$$?(B)
+ <LI>[lips4c]$B2rA|EY$N%G%U%)%k%H$r(B 600 dpi $B$K$7$?!#(B
+ <LI>$B<+F05k;f$,F/$+$J$$(B LASER SHOT $B$KBP1~$9$k%*%W%7%g%s(B -dCasset=-1 $B$NDI2C(B
+ <LI>[$BA4%G%P%$%9(B]PJL$B$r=PNO$9$k%*%W%7%g%s(B -dPJL $B$NDI2C!#(B
+ lips4.dev $B$G$O%G%U%)%k%H$G$O(B PJL $B$r=PNO$7$J$$$h$&$K$7$?!#(B
+ $B%H%J!<@aLs5!G=$d%H%J!<G;EYD4@a5!G=$O(B -dPJL $B%*%W%7%g%s$r;XDj$7$J$$$H(B
+ $B;H$($J$$$h$&$K$J$j$^$7$?!#(B
+</UL>
+<H3>gdevlips-2.0.0 (1998/11/16 release)</H3>
+<UL>
+ <LI>$B%Y%/%?!<HG%G%P%$%9(B lips4v lips4vc $B$NGQ;_(B(PDL $B$N%P%0$N$?$a(B)
+</UL>
+<H3>gdevlips-2.0.0pre1 (1998/10/10 release)</H3>
+<UL>
+ <LI>$B%P!<%8%g%sHV9f$N$D$1$+$?$rJQ99$7$?(B
+ <LI>[$BA4%G%P%$%9(B]$B%^!<%8%sJQ99$KBP1~(B
+ <LI>l4vmono $B"*(B lips4v$B!"(Bl4vcolor $B"*(B lips4vc $B$KL>>NJQ99(B
+ <LI>[lips4v lips4vc]$B%U%)%s%H$N%@%&%s%m!<%I5!G=$KBP1~(B($B$?$@$7@)8B$"$j(B)
+ <LI>[lips4v lips4vc]$B%^%$%?%j%_%C%H$,@5>o$K5!G=$7$J$$%P%0$N=$@5(B
+ <LI>[lips4v lips4vc]$B0lIt$N5!<o$G5/$3$kJ8;z$d2hA|$,>C$($k(B LIPS IV $B$N%P%0$r2sHr$7$?(B
+</UL>
+<H3>gdevlips4-19981104 (release 27)</H3>
+<UL>
+ <LI>Ghostscript 5.10 $BMQ$N(B Makefile $B$N5-=R$K8m$j$,$"$j!"%3%s%Q%$%k$G$-$J$$IT6q9g$r=$@5$7$?(B($B0KF#(B@$B72GOBg$5$s$NJs9p(B)
+</UL>
+<H3>gdevlips4-19981017 (release 26)</H3>
+<UL>
+ <LI>[lips2p lips3 lips4] $B%i%9%?!<%$%a!<%8=hM}$N%P%0=$@5!#(B
+ $B1&C<$N%i%9%?$,H4$1$?$j!"$R$I$$>l9g(B 1 $B%i%$%s4]!9IA$+$l$J$$$3$H$,$"$C$?!#(B
+</UL>
+<H3>gdevlips4-19981015 (release 25)</H3>
+<UL>
+ <LI>[lips4 l4vmono l4vcolor] n $BLL0u:~5!G=!&%H%J!<G;EYD4@a5!G=!&%H%J!<%;!<%V5!G=$NDI2C(B
+</UL>
+<H3>gdevlips4-19981012 (release 24)</H3>
+<UL>
+ <LI>[l4vmono] $B%Q%?!<%s$J$I$,Gv$$?'$K$J$C$?$j>C$($F$7$^$&%P%0$N=$@5(B
+</UL>
+<H3>gdevlips4-19981009 (release 23)</H3>
+<UL>
+ <LI>[l4vmono l4vcolor] $B6k7A$N2sE>$,$&$^$/$$$+$J$$%P%0$N=$@5(B
+ <LI>[l4vmono l4vcolor] $BJ8;z$K?'$,$D$+$J$$$3$H$,$"$k%P%0$N=$@5(B
+</UL>
+<H3>gdevlips4-19981006 (release 22)</H3>
+<UL>
+ <LI>[l4vmono l4vcolor] $B6k7A$rIA$$$?8e$N?^7A$,IA$+$l$J$$%P%0$N=$@5(B
+</UL>
+<H3>gdevlips4-19981005 (release 21)</H3>
+<UL>
+ <LI>[l4vmono l4vcolor] $B4q?t6v?tK!$G%Q%9$rEI$j$D$V$9=hM}$,Hs%<%m4,?tK!$G9T$J$o$l$k$h$&$K$J$C$F$$$k%P%0$rD>$7$?(B
+ <LI>[l4vmono l4vcolor] $B%^%$%?%j%_%C%H$N;XDjJ}K!$,4V0c$C$F$$$?!#(B
+ <LI>[lips4c] BJC-680J/BJC-880J $B$K$D$$$F!V(B20 $B%Z!<%8(B $B%*!<%P!<!W$N%(%i!<$,H/@8$9$kLdBj$N2r7h(B
+ <LI>Ghostscript 5.50 $B$NG[I[$HF1MM$K%I%-%e%a%s%H$rA4$F(B HTML $B$K$7$?!#(B
+ <LI>Ghostscript 5.10 $BBP1~%I%i%$%P$H(B Ghostscript 5.50 $BBP1~%I%i%$%P$rF1:-(B
+ <LI>lips4g$B!"(Blips3fig$B!"(Blips4fig$B!"(Blips4cfig $B%I%i%$%P$NGQ;_(B
+ <LI>$B$=$NB>:Y$+$$%P%0%U%#%C%/%9(B
+</UL>
+
+<H3>gdevlips4-19980924 (release 20)</H3>
+<UL>
+ <LI>Ghostscript 5.50 $BBP1~$K$7$?$H$-$N%P%0%U%#%C%/%9(B
+ <LI>$B%9!<%Q!<%U%!%$%s(B LIPS (1200 dpi) $BBP1~$N$?$a$N%F%9%H(B
+</UL>
+
+<H3>gdevlips4-19980922 (release 19)</H3>
+<UL>
+ <LI>Ghostscript 5.50 $BBP1~!#(B
+</UL>
+
+<H3>gdevlips4-19980908 (release 18)</H3>
+<UL>
+ <LI>[lips2p, lips3, lips4] $B9bB.$K=PNO$G$-$k%"%k%4%j%:%`$r:NMQ$7$?!#(B
+</UL>
+<H3>gdevlips4-19980904 (release 17)</H3>
+<UL>
+ <LI>[lips4c, lips4, lips4g] $B2hA|$rJ,$1$FE>Aw$9$k;~6u9T$,@hF,$KMh$k$H(B
+ $B4|BT$7$?=PNO$5$l$J$$(B LIPS IV $B$N;EMM$r2sHr$9$k$?$a!"(B-dcRowBuf $B$N%G%U%)%k%H(B
+ $B$r(B 0 $B$K$7$?!#(B
+ <LI>[l4vmono, l4vcolor] $B2hA|H?E>%P%0$N=$@5(B
+ <LI>[l4vmono, l4vcolor] 1bit$B!&%b%N%/%m%0%i%U%#%C%/$G%^%9%/=hM}$r9T$J$&>l9g!"(B
+ $B2?$b$G$J$$$3$H$,$"$k%P%0$N=$@5(B
+ <LI>[l4vmono, l4vcolor] $B@~$NB@$5$,(B 720 dpi $B$rA[Dj$7$FIA$+$l$F$$$?$N$G(B
+ 600 dpi $B$G(B 1.2 $BG\$NB@$5$K$J$C$F$7$^$&%P%0$r=$@5!#$=$NB>$N2rA|EY$K$bBP1~(B
+ <LI>[l4vmono, l4vcolor] 600dpi $B0J30$GE@@~$,$*$+$7$$%P%0$r=$@5(B
+ <LI>[l4vmono, l4vcolor] $B6k7A$r8zN(NI$/IA$1$k$h$&$K$7$?!#(B
+</UL>
+
+<H3>gdevlips4-19980822 (release 16)</H3>
+<UL>
+ <LI>$B%0%l!<%9%1!<%k$N2hA|$r4^$s$@(B PostScript $B%U%!%$%k$G2hA|$,Gr9uH?E>$7$F$7$^$&(B
+$BLdBj$N2r7h(B
+ <LI>TeX $B$G(B EPS $B$r4^$s$@(B DVI $B%U%!%$%k$r%I%i%U%H=PNO$7$?$H$-$KIA$+$l$k6k7A$,(B
+$B$*$+$7$/$J$k(B LIPS IV $B$N;EMM$r2sHr$7$FLdBj$r2r7h(B
+</UL>
+
+<H3>gdevlips4-19980821 (release 15)</H3>
+<UL>
+ <LI>[l4vmono l4vcolor] $B1_$J$I$r@5>o$K%Q%?!<%s%U%#%k$G$-$J$$LdBj$N2r7h!#(B
+lips4v_copy_mono $B$H(B lips4v_copy_color $B4X?t$K%P%0$,$"$C$?!#(B
+ <LI>[l4vmono l4vcolor] $B@~$NB@$5$,HyL/$KB@$/$J$C$F$7$^$&$3$H$,$"$kLdBj$N2r7h(B
+</UL>
+
+<H3>gdevlips4-19980729 (release 14)</H3>
+<UL>
+ <LI>-sOutputFile=foo%d.xyz
+ $B$N7A<0$G=PNO%U%!%$%k$r;XDj$7$?>l9g$K%3%"%@%s%W$9$k%P%0$N2r7h(B
+ <LI>gdevlips4-19980707 $B$NJQ99$G(B lips4cfig$B!"(Blips4fig $B$,=PNO$G$-$J$/$J$C$?(B
+ $B%P%0$N2r7h(B
+ <LI>[l4vmono$B!"(Bl4vcolor] pswrite $BEy$N%G%P%$%9$,AH$_9~$^$l$F$$$J$$$H(B
+ $B%3%s%Q%$%k$G$-$J$$LdBj$N2r7h(B
+ <LI>[l4vmono$B!"(Bl4vcolor] $BJ8;z$N%^%9%/=hM}$,$*$+$7$$LdBj$N2r7h(B
+</UL>
+
+<H3>gdevlips4-19980716 (release 13)</H3>
+<UL>
+ <LI>gdevlips4-19980707 $B$G(B gdevlips.mak $B$,$*$+$7$$$?$a$K%3%s%Q%$%k$G$-$J$$(B
+ $BIT6q9g$r=$@5$7$?!#(B
+</UL>
+
+<H3>gdevlips4-19980707 (release 12)</H3>
+<UL>
+ <LI>LIPS IV $B$G(B High-level drawing $B$H(B High-level bitmap imaging
+ $B$r9T$J$&%Y%/%?!<%G%P%$%9(B $B$G$"$k(B l4vmono l4vcolor $B%G%P%$%9$rDI2C$7$?!#(B
+</UL>
+
+<H3>gdevlips4-19980704 (release 11)</H3>
+<UL>
+ <LI>lips4c$B!"(Blips4$B!"(Blips4g$B!"(Blips4cfig$B!"(Blips4fig $B%G%P%$%9$K$*$$$F!"(B $B@5>o(B
+ $B$K=PNO$G$-$J$$%P%0$,$"$C$?!#(B($BJ8K!4V0c$$!#(B)
+</UL>
+
+<H3>gdevlips4-19980623 (release 10)</H3>
+<UL>
+ <LI>lips4* $B%G%P%$%9$N05=LJ}K!$r%G%k%?05=L$KJQ99$7$?!#Nc30E*$K(Blips4.dev $B$G$N(B
+ tiger.ps $B$N05=LN($ONI$/$J$$$,!"$[$H$s$I$N>l9g0JA0$N%I%i%$%P$h$j$b(B
+ $B05=LN($,9b$/$J$k!#(B
+ <LI>lips4* $B%G%P%$%9$G(B gdevepag Ver. 3 $B$N$h$&$K(B -dcRowBuf $B%*%W%7%g%s$G(B
+ $B%i%9%?!<%$%a!<%8$rJ,3d$9$k$h$&$K$7$?!#$3$l$K$h$j!"(Blips4c$B!"(Blips4cfig $B$N(B
+ $B%i%9%?!<%$%a!<%8$r$^$H$a$FAw$l$k$h$&$K$J$C$?!#(B
+ <LI>lips4* $B%G%P%$%9$G$bHs05=L(B(-dCompress=false)$B$,;H$($k$h$&$K$J$C$?!#(B
+ ($B<g$K%G%P%C%0MQ(B)
+ <LI>$BG[I[>r7o$,(B GPL Ver.2 $B$K$J$C$?!#(B
+</UL>
+
+<H3>gdevlips4-19980612 (release 9)</H3>
+<UL>
+ <LI>lips2p $B%G%P%$%9$G(B LIPS II+ $B$KBP1~(B
+ <LI>lbp2030 $B%G%P%$%9$r(B lips4c $B%G%P%$%9$KE}9g(B
+ (600 dpi $B$G=PNO$9$k$H$-$O!"(B-r600 $B%*%W%7%g%s$r$D$1$k$3$H(B)
+ <LI>lips4g $B%G%P%$%9$G(B LIPS IV $B$N%0%l!<%9%1!<%k(B(8 bit = 256 $B3,D4(B)$B$KBP1~(B
+ <LI>$B%U%!%$%kL>$r(B 8.3 $B7A<0$KJQ99(B
+ <UL>
+ <LI>gdevlips4.c $B"*(B gdevlips.c
+ <LI>gdevlips4.h $B"*(B gdevlips.h
+ </UL>
+</UL>
+
+<H3>gdevlips4-19980429 (release 8)</H3>
+<UL>
+ <LI>lips3fig $B%G%P%$%9$,%3%"%@%s%W$9$kLdBj$N2r7h(B
+ <LI>lips3 $B%G%P%$%9$G05=L!&Hs05=L$r(B-dCompress$B%*%W%7%g%s$G@ZBX$($i$l$k$h$&$K$7$?!#(B
+</UL>
+
+<H3>gdevlips4-19980413 (release 7)</H3>
+<UL>
+ <LI>$BIUB0$N(Bgs_statd.ps$B$r;H$&$H(BGhostscript$B$,%$%s%?%i%/%F%#%V%b!<%I$G(B
+ $B5/F0$G$-$J$$%P%0$r=$@5(B($B@P4]$5$s$+$i$NJs9p(B)$B!#(B
+ -sPAPERSIZE=executive $B%*%W%7%g%s$O;HMQ$G$-$J$/$J$k(B
+ <LI>lbp2030 $B$G%G%U%)%k%H$,(B 360 dpi $B$K$J$C$F$$$?$N$r(B 600 dpi $B$K=$@5(B
+ <LI>lips4c$B!"(Blips4cfig $B$G%i%9%?!<%$%a!<%8$N05=L$r%5%]!<%H(B
+ ($B$H$$$&$h$j$b(Blbp2030$B$H$N%3!<%I$N6&DL2=(B)
+ <LI>$BN>LL0u:~$G$H$80LCV$rJQ99$G$-$k$h$&$K$J$C$?!#(B
+ (-dFlipBinding$B%*%W%7%g%s(B)
+ <LI>$BMQ;f%5%$%:$KESCf$N%Z!<%8$GJQ99$,$J$$>l9g$O!"(B
+ $B%Z!<%8!&%U%)!<%^%C%HA*BrL?Na$O0l2s$@$1H/9T$9$k$h$&$K$7$?!#(B
+ $B$3$l$O3F%Z!<%8$4$H$K%Z!<%8!&%U%)!<%^%C%HA*BrL?Na$rH/9T$9$k$H(B
+ $B0u;z8zN($,Dc2<$9$k$?$a$G$"$k(B
+ <LI>$B>e5-$HF1MM$KN>LL0u:~L?Na!&5k;f%b!<%IL?Na$bESCf$GJQ99$,$J$$>l9g$O!"(B
+ $B0l2s$NH/9T$7$+9T$J$o$J$$$h$&$K$7$?!#(B
+</UL>
+
+<H3>gdevlips4-19980403 (release 6)</H3>
+<UL>
+ <LI>LIPS IV $B$N05=LJ}<0$r%P%$%H%i%s%l%s%0%905=LK!$+$i%Q%C%/%S%C%D(B
+ (TIFF)$B05=LK!$KJQ99$7$?$?$a05=LN($,>e$,$j!";HMQ%a%b%j!<NL$,(B
+ $B8:$C$?!#(B
+ $B$3$l$O0KF#>M@2$5$s$,(Bfj$B$KEj9F$7$?(B<A HREF="news:605qpt$f50$1@kuma.fastnet.or.jp">gdevlips4-1.2.0$B$X$N%Q%C%A(B</A>&lt;605qpt$f50$1@kuma.fastnet.or.jp&gt;$B$+$i(B
+ $B%^!<%8$7$?!#(B
+ <LI>$B%W%j%s%?$N%9%F!<%?%9I=<(It$KI=<($9$k%3%a%s%H$rF0E*$KJQ99$9$k$3$H$,(B
+ $B$G$-$k$h$&$K$J$C$?!#(B
+ <LI>$B%b%N%/%m0u:~$K$*$$$F%S%C%H%^%C%W%9%`!<%8%s%0=hM}$r(BON/OFF$B$G$-$k$h$&$K$J$C$?!#(B
+ <LI>$B%+%i!<0u:~$K$*$$$F9b@::Y%$%a!<%8=hM}$r(BON/OFF$B$G$-$k$h$&$K$J$C$?!#(B
+</UL>
+
+
+<H3>gdevlips4-19980401-2 (release 5)</H3>
+<UL>
+ <LI>$BN>LL0u:~$N@_Dj$K$D$$$F%G%U%)%k%H$G$O%W%j%s%?B&$N@_Dj$r;H$&$h$&$K$7$?!#(B
+</UL>
+
+<H3>gdevlips4-19980401 (release 4)</H3>
+<UL>
+ <LI>$B5k;f%+%;%C%H$NA*Br$KBP1~$7$?!#(B
+ <LI>$BN>LL0u:~$K40A4BP1~$7$?!#(B
+</UL>
+
+<H3>gdevlips4-19980331-2 (release 3)</H3>
+<UL>
+ <LI>$B8x3+;~$K(BDEFAULT_HEIGHT_10THS_A4$B$N$H$3$m$K(BDEFAULT_WIDTH_10THS_A4$B$r$$$l$F(B
+ $B$7$^$C$?$?$a%G%U%)%k%H%5%$%:$,(BA4$B2#(BxA4$B2#$K$J$k$H$$$&CWL?E*$J%P%0$,$"$C$?!#(B
+ <LI>$BG$0U$NMQ;f%5%$%:$N;XDj$K%P%0$,$"$C$?!#(B
+</UL>
+
+<H3>gdevlips4-19980331 (release 2)</H3>
+<UL>
+ <LI>60dpi$B$h$jAF$$%5%$%:$r=hM}$G$-$J$$$h$&$K$7$?!#(B(LIPS$B$N5,3J$N$?$a(B)
+ <LI>lips3$B$G$O(B300dpi$B!"(Blips4c$B$G$O(B360dpi$B!"(Blips4$B$H(Blbp2030$B$G$O(B600dpi$B$h$j:Y$+$$(B
+ $B%5%$%:$r=hM}$G$-$J$$$h$&$K$7$?!#(B(LIPS$B$N5,3J$N$?$a(B)
+ <LI>$BIuE{$NMN7A(B4$B9f%5%$%:$,$*$+$7$+$C$?$N$GD>$7$?!#(B
+ <LI>$B=$@5$7$?(B gs_stad.ps $B$rImB0$7$?!#(B
+</UL>
+
+<H3>gdevlips4-19980330 (release 1)</H3>
+<UL>
+ <LI>lips3, lips4, lips4c, lbp2030
+ <UL>
+ <LI>$B>e%^!<%8%s$,(B 63/300 inch ($BLs(B10.3 mm)$B$G$"$C$?$N$r(B 5 mm (lips4c $B$O(B 8 mm)
+ $B$K$7$?!#(B
+ <LI>$B%Z!<%8%5%$%:JQ99$K40A4BP1~$7$?!#(B
+ <LI>$B%H%l%$5k;f$H<+F05k;f$N@ZBX$($KBP1~$7$?!#(B
+ <LI>$BJ#?tIt0u:~$KBP1~$7$?!#(B
+ </UL>
+ <LI>lips4
+ <UL>
+ <LI>$B%i%9%?!<%$%a!<%8$N05=L$KBP1~$7$?!#(B
+ <LI>$BN>LL0u:~%f%K%C%H$KBP1~$7$?!#(B
+ </UL>
+ <LI>lips3
+ <UL>
+ <LI>$B%i%9%?!<%$%a!<%8$N05=L$KBP1~$7$?!#(B
+ </UL>
+</UL>
+<HR>
+<H2><A HREF="#i_hireso" NAME="hireso">LIPS IV $B=PNO$K$*$1$k9b2rA|EY0u;z$K4X$9$kCm0U(B</A></H2>
+<P>
+600dpi $B0u;z$d(B 1200dpi $B0u;z$r9T$&>l9g$O(B, $B%W%j%s%?$KEk:\$5$l$F$$$kFbB"(B
+$B%a%b%j$NMFNL$KCm0U$7$F2<$5$$!#(B
+</P>
+<P>
+$B$3$l$OFbB"%a%b%j$NMFNL$,>/$J$$>l9g$K!"(B
+$B%W%j%s%?$,%G!<%?NL$NB?$5$KBP1~$G$-$:<+F0E*$K2rA|EY$rMn$7$F0u;z$5$;$k$+$i$G$9(B
+($B0u;z%G!<%?$K0MB8$9$k$N$G0l35$K$O8@$($^$;$s(B)$B!#(B
+$B$3$N=hM}$,9T$o$l$k$H(B, $B0u;z2rA|EY$,JQ$o$kB>$K(B 2 $BE@$N%G%a%j%C%H$,$"$j$^$9!#(B
+<UL>
+ <LI>$B0u;z$K;~4V$,$+$+$k$3$H$,B?$$(B($BFbIt=hM}$r(B 2 $BEY9T$C$F$$$k(B?)
+ <LI>$B%i%9%?%G!<%?$r0u;z$9$k>l9g$OC1=c$K4V0z$/$h$&$G!"(B
+ $B%0%l!<$NItJ,$,Gr$C$]$/(B/$B9u$C$]$/$J$C$?$j$J$I$7$F=jK>$N0u;z$,F@$i$l$J$$$3$H$,$"$k(B
+</UL>
+<P>
+$B$3$l$i$rHr$1$k$?$a$K$b!"Ek:\%a%b%j$K8+9g$C$?2rA|EY$G$N0u;z$r$*4+$a$7$^$9!#(B
+$B9b2rA|EY$G0u;z$r9T$&$?$a$KI,MW$J%a%b%jMFNL$O!"(B
+$B!V%W%j%s%?5!G=%^%K%e%"%k!W$X(B `$B0u;zJ]>Z%a%b%j(B' $B$H$7$F=q$+$l$F$$$^$9!#(B
+$B=PNOMQ;f%5%$%:$dN>LL0u;z$NM-L5$K$h$C$FJQ2=$9$kE@$bCm0U$7$F2<$5$$!#(B
+</P>
+<HR>
+<H2><A HREF="#i_bug" NAME="bug">$B%P%0(B</A></H2>
+<P>
+$B$3$3$K%j%9%H$5$l$F$$$k%P%0$O:n<T$,GD0.$7$F$$$k%P%0$G$9!#(B
+$B$3$l0J30$N%P%0$,$J$$$H$$$&0UL#$G$O$J$$$N$GCm0U$7$F2<$5$$!#(B
+</P>
+<P>
+$B$3$3$K%j%9%H$5$l$F$$$k0J30$G%P%0$rH/8+$7$^$7$?$i(B
+<A HREF="mailto:ohmori@p.chiba-u.ac.jp">$B:n<T(B</A>$B$^$GJs9p$r$*4j$$$7$^$9!#(B
+</P>
+<H3>[npdl.dev]</H3>
+<H4><A HREF="#i_marginbug" NAME="marginbug">1. $B0u:~0LCV$,$:$l$k(B</A></H4>
+<P>
+$B@)8f8@8l(B NPDL $B$G$O=PNO0LCV$N@_Dj$,5!<o0MB8$K$J$C$F$$$^$9!#(B
+$B5!<o$K$h$C$F0u:~2DG=HO0O$,0[$J$k$N$G0u:~0LCV$,$:$l$F$7$^$$$^$9!#(B
+<A HREF="#offset">$B0u:~0LCV$rD4@0$9$k$K$O$I$&$7$?$i$$$$$G$9$+(B?</A>
+$B$r;29M$K$7$FD4@0$9$k$+!"%=!<%9%U%!%$%k$rD>@\$$$8$C$FD>$7$F$/$@$5$$!#(B
+</P>
+<HR>
+<H4><A HREF="#i_nonduplex" NAME="nonduplex">2. $BJRLL0u:~$dN>LL0u:~;~$KC;JU$H$8$G0u:~$G$-$J$$(B</A></H4>
+<P>
+NPDL $BMQ$N%I%i%$%P$G$O8=:_$N$H$3$mJRLL0u:~$O$G$-$^$;$s!#(B
+$B$3$l$O(B NPDL $B$N;EMM=q$KJRLL0u:~$9$k$?$a$N%3%^%s%I$,5-:\$5$l$F$$$J$$$3$H$H!";d$,N>LL0u:~$G$-$k(B NPDL $BEk:\%W%j%s%?$,;H$($k4D6-$K$J$$$?$a$G$9!#(B
+$BF1MM$NM}M3$GN>LL0u:~;~$KC;JU$H$8$G0u:~$G$-$^$;$s!#(B
+</P>
+<P>
+$BN>LL0u:~$G$-$k(B NEC MultiWriter (NPDL(Level2) $BEk:\%W%j%s%?(B) $B$r$*;}$A$N$+$?$O(B
+$BN>LL0u:~$r@)8f$9$k%3%^%s%I(B($BJRLL0u:~%3%^%s%I$dC;JU$H$8$K$9$k%3%^%s%I(B)$B$r65$($F$$$?$@$1$k$H$3$N%I%i%$%P$KAH$_9~$`$3$H$,$G$-$^$9!#8f6(NO$h$m$7$/$*4j$$$7$^$9!#(B
+</P>
+<HR>
+<H3>[bjc880j.dev]</H3>
+<H4><A HREF="#i_landbug" NAME="landbug">1. $B%i%s%I%9%1!<%W2sE>;~$K0u:~0LCV$,$A$g$C$H$:$l$k(B</A></H4>
+<P>
+$BB>$N(B LIPS $B$N%I%i%$%P$G$O>e2<:81&$N%^!<%8%s$,6Q0l$J$N$G%i%s%I%9%1!<%W$O(B
+$B$=$N$^$^2sE>$7$F$d$l$P0u:~0LCV$,$"$$$^$9$,!"(B
+BJC-680J$B!"(BBJC-880J $B$G$O%^!<%8%s$,0c$&$N$G>/$7$:$l$F$7$^$$$^$9!#(B
+$B2sE>;~$K87L)$K0LCV$r7W;;$9$l$P$:$l$J$$(B?
+</P>
+<HR>
+<H3>[lips4v.dev]</H3>
+<H4><A HREF="#i_clipping" NAME="clipping">1. $B%Q%9$N%/%j%C%T%s%0=hM};~$N%a%b%jITB-(B ($B%7%9%F%`%a%b%j%U%k(B $B%(%i!<(B)</A></H4>
+<P>
+$B6k7A0J30$N%Q%9$GB?>/J#;($J%/%j%C%T%s%0=hM}$7$?$@$1$G%W%j%s%?$,%a%b%jITB-$K4Y$k!#(B
+$BNc$($P(B Tgif $B$G1_$r%Q%?!<%s%U%#%k$7$F=PNO$7$?(B PostScript $B%U%!%$%k$G$3$N8=>]$,$_$i$l$k!#(B
+</P>
+<P>
+$B$3$l$O(B Ghostsciprt 5.10 $B$,=PNO$9$k%/%j%C%T%s%0%Q%9$,8zN(0-$$$3$H$H!"(B
+LIPS IV $B$N%Q%9%/%j%C%T%s%0=hM}$,%a%b%j!<$r?)$$2a$.$k$?$a$K5/$3$j$^$9!#(B
+</P>
+<P>
+$B"($3$N%P%0$O(B Ghostscript 5.50 $B$G$O%Q%9$N%/%j%C%T%s%0=hM}$,8zN($h$/$J$C$?$?$a$KB?>/$^$7$K$J$C$F$$$^$9!#(B
+$B$^$?!"%-%d%N%s$K$h$k$H(B MaxiMem $BEk:\5!$G$O%/%j%C%T%s%0$K4X$9$k%a%b%j!<8zN($bNI$/$J$C$F$$$k$=$&$J$N$G$3$NLdBj$O2r7h$5$l$F$$$k$+$b$7$l$^$;$s!#(B($BL$3NG'(B)
+</P>
+<HR>
+<H4><A HREF="#i_zeroline" NAME="zeroline">2. $BI}$,%<%m$N%Q%9$r%U%#%k$7$?$H$-2?$bIA$+$l$J$$(B</A></H4>
+<P>
+PostScript $B$G$OI}$,%<%m$N%Q%9$r%U%#%k$7$?$H$-$bIA$+$l$J$1$l$P$J$i$J$$$,!"IA$+$l$J$$!#(B
+</P>
+<P>
+LIPS IV $B$G$OIA$+$l$J$$;EMM$G$9!#(B
+</P>
+<P>
+$B"((BGhostscript $B$KImB0$N(B zeroline.ps $B$r0u:~$9$k$H$3$N%P%0$,J,$+$j$^$9!#(B
+</P>
+<HR>
+<H4><A HREF="#i_zeromove" NAME="zeromove">3. $B0\F05wN%(B 0 $B$N%Q%9$N07$$(B</A></H4>
+<P>
+$B0\F05wN%(B 0 $B$N%Q%9$r%9%H%m!<%/$7$?;~!"(Bsetlinejoin $B$,(B 1 (Round join)
+$B$N$H$-$J$K$bIA$+$l$J$$!#(B
+</P>
+<P>
+PostScript $B$G$O$3$N$H$-1_$,IA$+$l$J$1$l$P$J$j$^$;$s$,!"(BLIPS IV $B$G$O(B
+$BIA$+$l$J$$;EMM$K$J$C$F$$$^$9!#(B
+</P>
+<P>
+$B"((BGhostscript $B$KImB0$N(B zeroline.ps $B$r0u:~$9$k$H$3$N%P%0$,J,$+$j$^$9!#(B
+</P>
+<HR>
+<H4><A HREF="#i_square_cap" NAME="square_cap">4. Projecting square cap $B$N%P%0(B</A></H4>
+<P>
+$B@~$N@\9gIt$G!"(Bsetlinecap $B$G(B 2 (Projecting square cap) $B$r;XDj$7$?;~!"%Q%9$r%/%m!<%:(B
+$B$7$?ItJ,$N@~@\9g$,$&$^$/$$$+$J$$!#$^$?!"%/%m!<%:$9$k:BI8$,%Q%9$N86E@$+$i(B
+$B0z$-?-$P$7$?J}8~$K$:$l$k!#(B
+</P>
+<P>
+LIPS IV $B$N%P%0$G$9!#(B
+</P>
+<P>
+$B"((BGhostscript $B$KImB0$N(B lines.ps $B$r0u:~$9$k$H$3$N%P%0$,J,$+$j$^$9!#(B
+</P>
+<HR>
+<H4><A HREF="#i_round_cap" NAME="round_cap">5. Round cap $B$N%P%0(B</A></H4>
+<P>
+$B@~$N@\9gIt$G(Bsetlinecap $B$G(B 1 (Round cap) $B$r;XDj$7$F!"(Bsetlinejoin $B$G(B 2 (Bevel join)$B$r;XDj$7$?$H$-!"(B
+$B%Q%9$r%/%m!<%:$7$?ItJ,$N@~@\9g$O(B $B!V%Y%Y%k(B($B@Z$jMn$H$7(B)$B!W(B $B$K$J$i$J$1$l$P$$$1$J$$$H$3$m!V4]!W$K$J$C$F$7$^$&!#(B
+</P>
+<P>
+LIPS IV $B$N%P%0$G$9!#(B
+</P>
+<P>
+$B"((BGhostscript $B$KImB0$N(B lines.ps $B$r0u:~$9$k$H$3$N%P%0$,J,$+$j$^$9!#(B
+</P>
+<HR>
+<H4><A HREF="#i_linewidth" NAME="linewidth">6. $B@~$NB@$5$,0c$&(B</A></H4>
+<P>
+LIPS IV $B$N@)8B$G@~$NB@$5$N>e8B$O(B 0.85 $B%$%s%A$H$J$C$F$$$^$9!#(B
+PostScript $B$K$O$=$N$h$&$J@)8B$,$J$$$N$G!"6KC<$KB@$$@~$rIA$/$H$-$K(B
+$B=PNO$N0c$$$,=P$F$7$^$$$^$9!#(B
+</P>
+<P>
+$B$^$?!"(BGhostscript $B$N(B $B%Y%/%?!<%I%i%$%P$N%P%0$K$h$j=D2#$N%9%1!<%k$,0[$J$k>l9g!"(B
+$B@~$NB@$5$,0c$C$F$-$F$7$^$$$9!#(B
+</P>
+<P>
+rectstroke $B%*%Z%l!<%?$r;H$C$?>l9g$G=D$H2#$NB@$5$,0c$&>l9g$b@5>o$KIA$+$l$^$;$s!#(B($B=D$H2#$NB@$5$,F1$8$K$J$C$F$7$^$$$^$9!#(B)
+</P>
+<HR>
+<H4><A HREF="#i_setdash" NAME="setdash">7. $BGK@~$N%Q%?!<%s$,IA$+$l$J$$(B</A></H4>
+<P>
+$BGK@~$N%Q%?!<%s$K(B 0 $B$,4^$^$l$F$$$k>l9g!"$3$N%I%i%$%P$G$OIA$+$l$^$;$s!#(B
+</P>
+<P>
+$BGK@~$N%Q%?!<%s$K(B 0 $B$,4^$^$l$F$$$k>l9g$N%*%Z%l!<%?$N5sF0$O$I$&$J$C$F$$$k$N$+(B
+Red Book $B$K=q$$$F$J$$$N$G;d$K$OJ,$+$j$^$;$s!#C/$+65$($F2<$5$$!#(B
+</P>
+<HR>
+<H4><A HREF="#i_pattern" NAME="pattern">8. lips4v $B%I%i%$%P$G%0%l!<%9%1!<%k=PNO$9$k$H$-$K%+%i!<%Q%?!<%s$rIA$$$?>l9g?'$,$*$+$7$$$3$H$,$"$k(B</A></H4>
+<P>
+$BB?J,!"(BGhostscript $B$N%P%0$G$9!#%+%i!<=PNO(B (-dBitsPerPixel=24) $B$G$O$3$N%P%0$O8+$i$l$^$;$s!#(B
+</P>
+<HR>
+<H2><A HREF="#i_faq" NAME="faq">FAQ</A></H2>
+<H3><A HREF="#i_slow" NAME="slow">$B%W%j%s%?$N=PNO$OB.$/$J$i$J$$$N(B?</A></H3>
+<P>
+LIPS IV $B5!$N>l9g(B -r300 $B%*%W%7%g%s$r$D$1$F2rA|EY$r(B 300 dpi ($B%/%$%C%/(B)
+$B$K$9$k$HB.$/$J$j$^$9!#(B($BEvA32h<A$OMn$A$^$9(B)
+</P>
+<P>
+LIPS IV $B5!$G(B 600 dpi $B0u:~$9$k>l9g$O(B lips4 $B%I%i%$%P$rMQ$$$k$N$,NI$$$G$7$g$&!#(B
+lips4v $B%I%i%$%P$r;H$C$F$bB.EYE*$J%a%j%C%H$O$"$j$^$;$s!#(B
+</P>
+<P>
+LIPS IV $B5!$G(B 1,200 dpi $B0u:~$9$k>l9g$O(B lips4v.dev $B$r;H$C$?$[$&$,(B
+$BB.$$$+$b$7$l$^$;$s$,!";d$O;H$C$?$3$H$J$$$N$GJ,$+$j$^$;$s!#(B
+</P>
+<P>
+Color LASER SHOT $B$G%+%i!<0u:~$9$k>l9g$O(B lips4.dev $B$G$J$/(B
+lips4v.dev $B$r;H$C$?J}$,9bB.$K=PNO$G$-$^$9!#(B
+($B$7$+$7!"%Y%/%?!<HG%I%i%$%P$O@)8B$,B?$$$N$GCm0U$7$F$/$@$5$$!#(B)
+</P>
+<HR>
+<H3><A HREF="#i_font" NAME="font">$B%W%j%s%?$NFbB"%U%)%s%H$O;H$($J$$$N(B?</A></H3>
+<P>
+$B;H$($^$;$s!#(B
+</P>
+<HR>
+<H3><A HREF="#i_nup_printing" NAME="nup_printing">n $BLL0u:~$r$9$k$K$O!"$I$&$7$?$i$$$$$N(B?</A></H3>
+<P>
+PSUtils $B$H$$$&%=%U%H%&%'%"$K4^$^$l$k(B psnup $B$rMQ$$$^$9!#(B
+PSUtils $B$O(B PostScript $B%U%!%$%k$NCf$+$iFCDj$N%Z!<%8$rCj=P$7$?$j!"(B
+$B%Z!<%8$NJB$S$rJQ99$7$?$j$G$-$k%3%^%s%I72$G$9!#(B
+</P>
+<P>
+PSUtils $B$O<!$N$H$3$m$+$iF@$i$l$^$9!#(B
+<UL>
+ <LI><A HREF="http://www.dcs.ed.ac.uk/home/ajcd/psutils/">&lt;URI:http://www.dcs.ed.ac.uk/home/ajcd/psutils/&gt;</A>
+</UL>
+<P>
+psnup $B$O<!$N$h$&$K;H$$$^$9!#$h$j>\$7$$$3$H$O%^%K%e%"%k$rFI$s$G2<$5$$!#(B
+</P>
+<DL>
+ <DT><KBD>psnup -2 [<VAR>infile</VAR>[<VAR>outfile</VAR>]]</KBD></DT>
+ <DD>2 $B%Z!<%8$r(B 1 $B%Z!<%8$K$^$H$a$F0u:~$7$^$9(B</DD>
+ <DT><KBD>psnup -4 [<VAR>infile</VAR>[<VAR>outfile</VAR>]]</KBD></DT>
+ <DD>4 $B%Z!<%8$r(B 1 $B%Z!<%8$K$^$H$a$F0u:~$7$^$9(B</DD>
+ <DT><KBD>psnup -8 [<VAR>infile</VAR>[<VAR>outfile</VAR>]]</KBD></DT>
+ <DD>8 $B%Z!<%8$r(B 1 $B%Z!<%8$K$^$H$a$F0u:~$7$^$9(B</DD>
+</DL>
+<P>
+$B$?$@$7!"(Bpsnup $B$G$&$^$/$$$+$J$$(B PostScript $B%U%!%$%k$b$"$j$^$9!#(B
+$B$=$N$h$&$J>l9g$K(B LIPS IV $B$K8B$j!"(B<A HREF="#nup">-dNup $B%*%W%7%g%s(B</A>$B$K$h$j(B 2 $BLL0u:~$H(B 4 $BLL0u:~$,2DG=$G$9!#(B
+$B$7$+$7!"$3$l$OHs8x3+5!G=$r;H$C$F$$$?$j!"0u;zB.EY$,CY$$$H$$$&LdBj$,$"$j$^$9$N$G2DG=$J8B$j(B psnup $B$rMQ$$$^$7$g$&!#(B
+</P>
+<HR>
+<H3><A HREF="#i_psresize" NAME="psresize">$BMQ;f%5%$%:$N3HBg!"=L>.0u:~$r$9$k$K$O$I$&$9$k$s$G$9$+(B?</A></H3>
+<P>
+PSUtils $B$K4^$^$l$k%3%^%s%I(B psresize $B$rMQ$$$^$9!#(B
+</P>
+<P>
+PSUtils $B$O<!$N$H$3$m$+$iF@$i$l$^$9!#(B
+<UL>
+ <LI><A HREF="http://www.dcs.ed.ac.uk/home/ajcd/psutils/">&lt;URI:http://www.dcs.ed.ac.uk/home/ajcd/psutils/&gt;</A>
+</UL>
+<P>
+psresize $B$O(B A3$B!&(BA4$B!&(BA5$B!&%l%?!<!&%j!<%,%k$dG$0U$N%5%$%:$KBP1~$7$F$$$^$9!#(B
+$B2<5-$K$$$/$D$+;HMQNc$r5s$2$^$9!#$/$o$7$/$O%^%K%e%"%k$r;2>H$7$F2<$5$$!#(B
+</P>
+<DL>
+ <DT><KBD>psresize -q -PA4 -pletter <VAR>in.ps</VAR> &gt; <VAR>out.ps</VAR></KBD></DT>
+ <DD>A4 $B%5%$%:$r%l%?!<%5%$%:$K$7$^$9!#(B</DD>
+ <DT><KBD>psresize -q -PA3 -pA4 <VAR>in.ps</VAR> &gt; <VAR>out.ps</VAR></KBD></DT>
+ <DD>A3 $B%5%$%:$r(B A4 $B%5%$%:$K$7$^$9!#(B</DD>
+ <DT><KBD>psresize -q -W729 -H1032 -w516 -h729 <VAR>in.ps</VAR> &gt; <VAR>out.ps</VAR></KBD></DT>
+ <DD>B4 $B%5%$%:$r(B B5 $B%5%$%:$K$7$^$9!#(B</DD>
+</DL>
+<P>
+NPDL $BEk:\%W%j%s%?$NCf$K$O;XDj$5$l$?MQ;f$,%[%C%Q(B($B5k;f%+%;%C%H(B)$B$K$J$$>l9g$G!"(B
+$B=L>.0u:~2DG=$JMQ;f%5%$%:$O$"$k>l9g!"=L>.0u:~$5$l$k$b$N$b$"$j$^$9!#(B
+</P>
+<HR>
+<H3><A HREF="#i_offset" NAME="offset">$B0u:~0LCV$rD4@0$9$k$K$O$I$&$7$?$i$$$$$G$9$+(B?</A></H3>
+<P>
+$B0u:~0LCV$,$:$l$F$7$^$&>l9g$O!"<!$NJ}K!$N$&$A$I$l$+$rMQ$$$FD4@0$7$^$9!#(B
+$B$J$*!"(BGhostscript $B$N86E@$OMQ;f$N(B<EM>$B:8>e(B</EM>$B$G$9$N$G(B<EM>$B:8>e(B</EM>$B$+$i$N0u:~0LCV$,$"$&$h$&$KD4@0$7$F$/$@$5$$!#(B
+</P>
+<OL>
+ <LI>$B%W%j%s%?$N%Q%M%k@_Dj$N!V=DJd@5!W!V2#Jd@5!W$N5!G=$rMQ$$$k(B
+ <LI>Ghostscript $B$N(B PageOffset $B%*%Z%l!<%?$GD4@0$9$k!#(B
+</OL>
+<P>
+$B%W%j%s%?$N%Q%M%k@_Dj$N!V=DJd@5!W!V2#Jd@5!W$N5!G=$rMQ$$$k>l9g!"(BGhostscript $B$NB>$K0u:~$9$k%=%U%H%&%'%"$r;H$&$H$=$N%=%U%H%&%'%"$G$bJd@5$,8z$$$F$7$^$&$N$GCm0U$,I,MW$G$9!#(B
+</P>
+<P>
+Ghostscript $B$G0u:~0LCV$rJQ99$7$?$$>l9g$O!"%U%!%$%k(B /usr/local/etc/offset.ps $B$J$I$HL>A0$r$D$1$?%U%!%$%k$r:n$C$F<!$N$h$&$JFbMF$r5-=R$7$^$9!#(B
+</P>
+<PRE>
+&lt;&lt;
+/PageOffset [0.0 0.0]
+&gt;&gt; setpagedevice
+</PRE>
+<P>
+$B<!$K$3$N%U%!%$%k$N(B [0.0 0.0] $B$H$J$C$F$$$kItJ,$K$:$i$7$?$$D9$5$r5-=R$7$^$9!#(B
+$BC10L$O%]%$%s%H(B(1/72 inch$B!"Ls(B 0.35 mm)$B$G$9!#Nc$($P1&$K(B 3 mm$B!">e$K(B 1.5 mm
+$B0u:~0LCV$r$:$i$7$?$$>l9g$O!"(B
+<PRE>
+3.0 $B!_(B 25.4 $B!`(B 72 $B!a(B 8.5039...
+1.5 $B!_(B 25.4 $B!`(B 72 $B!a(B 4.2519...
+</PRE>
+$B$J$N$G!"(B
+<PRE>
+&lt;&lt;
+/PageOffset [8.5 -4.25]
+&gt;&gt; setpagedevice
+</PRE>
+$B$H5-=R$7$^$9!#(B
+</P>
+<P>
+$B$=$7$F!"(BGhostscript $B$r5/F0$9$k$?$S$K$3$N(B offset.ps $B$r8F$S=P$7$F2<$5$$!#(B
+$BNc$($P<!$N$h$&$K$7$^$9!#(B
+</P>
+<PRE>
+<KBD>gs -q -dSAFER -dNOPAUSE -sDEVICE=lips4 -sOutputFile=- offset.ps -</KBD>
+</PRE>
+<HR>
+<H3><A HREF="#i_bsize" NAME="bsize">B4 $B$^$?$O(B B5 $B%5%$%:$NMQ;f;XDj$,$&$^$/$$$+$J$$$s$@$1$I(B</A></H3>
+<P>
+<A HREF="#install">$B%$%s%9%H!<%k(B</A>$B$N$H$3$m$G=R$Y$i$l$F$$$k$h$&$K!"(Bgs_statd.ps $B$K%Q%C%A$r$"$F$F2<$5$$!#(B
+Ghostscript $BI8=`$N(B B$B%5%$%:$O(B <EM>ISO</EM>$B$N(BB$B%5%$%:$G$"$C$F(B <EM>JIS</EM>$B$N(BB$B%5%$%:$G$O$"$j$^$;$s!#(B
+</P>
+<HR>
+<H3><A HREF="#i_vector" NAME="vector">$B%i%9%?!<HG%G%P%$%9$H%Y%/%?!<HG%G%P%$%9$N0c$$$O(B?</A></H3>
+<P>
+$B%i%9%?!<HG%G%P%$%9$O(B Ghostscript $B$,:n$k!"%Z!<%8$H$[$\F1$8Bg$-$5$N(B1$BKg$N%S%C%H%^%C%W$r0u:~$9$k%G%P%$%9$G$9!#(B
+LIPS $B$NL?Na$H$7$F$O<g$K%i%9%?!<!&%$%a!<%8IA2hL?Na$7$+;H$C$F$$$^$;$s!#(B
+$B$=$l$KBP$7$F%Y%/%?!<HG%G%P%$%9$O$h$j9b5!G=$J(B LIPS $B$NL?Na$r;H$C$F0u:~$9$k%G%P%$%9$G$9!#(B
+$B$=$l$>$l$KD9=j$HC;=j$,$"$k$N$G;H$$J,$1$F2<$5$$!#(B
+</P>
+<P>
+$B%Y%/%?!<HG%G%P%$%9$,(B LIPS $B$NL?Na$H$7$F;H$C$F$$$k$N$O<!$N$H$*$j$G$9!#(B
+</P>
+<UL>
+ <LI>$BIA2h>r7o@_Dj(B
+ <UL>
+ <LI>$B%/%j%C%T%s%0L?Na(B
+ <LI>$BIA2hO@M}@_DjL?Na(B
+ </UL>
+ <LI>$B?^7AIA2hB0@-@_Dj(B
+ <UL>
+ <LI>$B@~I};XDjL?Na(B
+ <LI>$B@~@\B3;XDjL?Na(B
+ <LI>$B%^%$%?!&%j%_%C%H;XDjL?Na(B
+ <LI>$B@hC<7A>u;XDjL?Na(B
+ <LI>$B%i%$%s!&%+%i!<;XDjL?Na(B
+ <LI>$BEI$j$D$V$7%+%i!<;XDjL?Na(B
+ <LI>$BB?3Q7AIA2h%b!<%I;XDjL?Na(B
+ </UL>
+ <LI>$B%Q%?!<%sEPO?(B
+ <UL>
+ <LI>$B@~%Q%?!<%sEPO?L?Na(B2
+ </UL>
+ <LI>$B?^7AIA2h(B
+ <UL>
+ <LI>$B6k7AIA2hL?Na(B
+ <LI>$BB?3Q7AIA2hL?Na(B2
+ </UL>
+ <LI>$B%$%a!<%8IA2h(B
+ <UL>
+ <LI>$B%$%a!<%8NN0h3NJ]L?Na(B1
+ <LI>$B%$%a!<%8NN0h3NJ]L?Na(B2
+ <LI>$BC1?'%$%a!<%8!&%+%i!<;XDjL?Na(B
+ <LI>$B%$%a!<%8IA2hL?Na(B
+ </UL>
+ <LI>$B%Q%99=C[(B
+ <UL>
+ <LI>$B%Q%99=C[3+;OL?Na(B
+ <LI>$B%Q%99=C[=*N;L?Na(B
+ <LI>$B%5%V%Q%93+;OL?Na(B
+ <LI>$B%Q%9!&%]%j%i%$%sL?Na(B
+ <LI>$B%Q%9!&%/%m!<%:L?Na(B
+ </UL>
+ <LI>$B%Q%9!&%W%l%$(B
+ <UL>
+ <LI>$B%Q%9!&%9%H%m!<%/L?Na(B
+ <LI>$B%Q%9!&%U%#%kL?Na(B
+ <LI>$B%Q%9!&%9%H%m!<%/!&%U%#%kL?Na(B
+ <LI>$B%Q%9!&%/%j%C%T%s%0L?Na(B
+ <LI>$B%Q%9J?3jEY;XDjL?Na(B
+ </UL>
+</UL>
+<P>
+$B>e5-$N$h$&$J5!G=$K$h$C$F%Y%/%?!<HG%G%P%$%9$O%i%9%?!<%G%P%$%9$HHf3S$9$k$H<!$N$h$&$JFCD'$,$"$j$^$9!#(B($BB?>/$NNc30$O$"$j$^$9!#(B)
+</P>
+<UL>
+ <LI>$B%W%j%s%?B&$NI,MW%a%b%jNL$,>/$J$/$F$9$`>l9g$,$"$k(B
+ <LI>$B05=L$r9T$J$C$F$$$J$$$K$b4X$o$i$:!"%G!<%?NL$,>.$5$$!#(B
+ <LI>$B0u:~;~4V$,C;=L$5$l$k>l9g$,$"$k!#FC$K(B lips4 $B$H(B lips4v $B$N%+%i!<=PNO$rHf3S$9$k$H05E]E*$J:9$,$G$k!#(B
+ <LI>$B0u;zNN0h$r%a%b%j$K3NJ]$7$J$/$F$$$$$N$G!"(B Ghostscript $B$N5/F0;~4V$,Hs>o$KC;$$!#$^$?(B Ghostscript $B<+BN$N;HMQ%a%b%jNL$b>/$J$$!#(B
+ <LI>$B%i%9%?!<HG%G%P%$%9$O0u:~B.EY$NN'B.CJ3,$,(B I/O $B$K$"$k$,!"(B
+ $B%Y%/%?!<HG$O%W%j%s%?FbIt$NIA2h%k!<%A%s$K$"$k$?$a!"(B
+ $B9bB.$J(B CPU $B$rEk:\$7$F$$$k%W%j%s%?$[$IB.$/$J$k!#(B
+</UL>
+<HR>
+<H3><A HREF="#i_l3vmono" NAME="l3vmono">LIPS IV $B0J30%I%i%$%P$N%Y%/%?!<HG$O:n$i$J$$$N(B?</A></H3>
+<P>
+$B:n$j$^$;$s!#$h$j@53N$K$$$&$H:n$l$^$;$s!#(B
+$B%Y%/%?!<HG%I%i%$%P$r:n$k$?$a$K$O(B PDL $B$,(B PostScript $B$K6a$$5!G=$r$b$C$F(B
+$B$$$J$1$l$P$$$1$^$;$s$,!"(BLIPS II+$B!"(BLIPS III$B!"(BLIPS IVc$B!"(BESC/Page$B!"(BNPDL
+$B$G$O5!G=$,B-$i$J$$$N$G:n$l$J$$$N$G$9!#(B
+</P>
+<HR>
+<H3><A HREF="#i_lbp2030" NAME="lbp2030">lbp2030.dev $B$O$I$3$$$C$?$N(B?</A></H3>
+<P>
+lbp2030.dev $B$O(B lips4.dev $B$N%+%i!<=PNO$H=PNO$9$kFbMF$,F1$8$K$J$C$?$N$GGQ;_$7$^$7$?!#(B
+$B$7$+$7$J$,$i!"(BColor LASER SHOT $B$G=PNO$9$k>l9g$O(B $B%Y%/%H%kHG%G%P%$%9$N(B lips4v.dev
+$B$G=PNO$9$k$[$&$,(B 10 $BG\0J>eB.$$$H;W$$$^$9!#(B
+</P>
+<HR>
+<H3><A HREF="#i_fig" NAME="fig">lips3fig$B!"(Blips4cfig$B!"(Blips4fig $B$,$J$$$s$@$1$I(B</A></H3>
+<P>
+*fig.dev $B$O(B dvipr $B$G$7$+MQ$$$i$l$^$;$s!#$^$?!"(Bdvipr $B<+BN$O$9$G$K;~BeCY$l$N(B
+$B%=%U%H%&%'%"$K$J$j$D$D$"$j$^$9!#(B
+$B$h$C$F%5%]!<%H$7$J$$$3$H$K$7$^$7$?!#(B
+</P>
+<HR>
+<H3><A HREF="#i_lips2p" NAME="lips2p">$B$I$&$7$F(B LIPS II+ $BBP1~%I%i%$%P$O(B lips2+ $B$d(B lips2plus $B$H$$$&L>A0$8$c$J$$$N(B?</A></H3>
+<P>
+Ghostscript $B$G$O%G%P%$%9$NL>A0$O(B1$B$+$i(B8$BJ8;z$H7h$^$C$F$$$^$9!#(B
+$B$^$?!"%"%s%@!<%9%3%"(B(_)$B0J30$N5-9f$O;H$($J$$$3$H$K$J$C$F$$$^$9!#(B
+</P>
+<HR>
+<H2><A HREF="#i_thanks" NAME="thanks">$B<U<-(B</A></H2>
+<P>
+$B0KF#>M@2;a$K$O05=L%k!<%A%sItJ,$NDs6!!"%9!<%Q!<%U%!%$%s(B LIPS $B$N%F%9%H$J$I$r<jEA$C$F$$$?$@$-$^$7$?!#(B
+$B$^$?!"(B<A HREF="#hireso">LIPS IV $B=PNO$K$*$1$k9b2rA|EY0u;z$K4X$9$kCm0U(B</A>$B$b0KF#;a$,=q$+$l$?J8=q$G$9!#(B
+</P>
+<P>
+$BFsLZ5*9T;a$K$O%W%m%0%i%_%s%0>e$NAjCL$K$N$C$F$$$?$@$-$^$7$?!#(B
+$B$^$?%Y%/%?!<HG%G%P%$%9$NIJ<A8~>e$K6(NO$7$F$$$?$@$-$^$7$?!#(B
+</P>
+<P>
+$B@.>>9(;a:n$N(B Ghostscript $B%I%i%$%P(B epag-3.08 $B$N%3!<%I$+$i=PNO%"%k%4%j%:%`ItJ,$HMQ;f%5%$%:7hDjItJ,$rMxMQ$5$;$F$$$?$@$-$^$7$?!#(B
+</P>
+<P>
+$BEOIt=$;a:n$N(B Ghostscript $B%I%i%$%P(B gdevnpdl-1.5 $B$N%3!<%I$r$b$H$K(B npdl $B%I%i%$%P$r:n@.$5$;$F$$$?$@$-$^$7$?!#(B
+</P>
+<P>
+$B:XF#1QIW;a$N(B Ghostscript $B%I%i%$%P(B gdevnpdl-1.5 $B$X$N(B $BN>LL0u:~BP1~%Q%C%A$rMxMQ$5$;$F$$$?$@$-$^$7$?!#(B
+</P>
+<P>
+$B$3$N%=%U%H%&%'%"$N2~A1$K4X$7$F!"0J2<$NJ}!9$+$i5.=E$J0U8+$r$$$?$@$-$^$7$?!#(B
+</P>
+<P>
+$BB@EDK'I'!"@P4]E/Li!";38}0lO:!"0KF#D>;K!"C]LnLP<#!"7'C+@5O/!";3Fb?N!"(B $B;{@n0&0u!";04d9,IW!"[X3@>-OB(B($B7I>NN,(B)
+</P>
+<HR>
+<H2><A HREF="#i_reference" NAME="reference">$B;29MJ88%(B</A></H2>
+<OL>
+ <LI>PostScript Language Reference Manual SECOUND EDITION, Adobe Systems Incorporated
+ <LI>LASER SHOT $B%W%m%0%i%^!<%:%^%K%e%"%k(B $B%=%U%H%&%'%"35@b=q(B 4.1, Canon
+ <LI>LASER SHOT $B%W%m%0%i%^!<%:%^%K%e%"%k(B $B%=%U%H%&%'%"35@b=q(B 4.2, Canon
+ <LI>LASER SHOT $B%W%m%0%i%^!<%:%^%K%e%"%k(B $B%3%^%s%I%j%U%!%l%s%9(B 4.1, Canon
+ <LI>LASER SHOT $B%W%m%0%i%^!<%:%^%K%e%"%k(B $B%3%^%s%I%j%U%!%l%s%9(B 4.2, Canon
+ <LI>LASER SHOT $B%W%m%0%i%^!<%:%^%K%e%"%k(B $B%/%C%/%V%C%/(B 4.1, Canon
+ <LI>LASER SHOT $B%W%m%0%i%^!<%:%^%K%e%"%k(B $B%/%C%/%V%C%/(B 4.2, Canon
+ <LI>ESC/Page $B%j%U%!%l%s%9%^%K%e%"%k(B $BBh(B4$BHG(B, EPSON
+ <LI>EPSON Remote $B%b!<%I(B(P) $B%j%U%!%l%s%9%^%K%e%"%k(B, EPSON
+ <LI>$BF|K\8l%Z!<%8%W%j%s%?8@8l(B NPDL(Level2) $B%j%U%!%l%s%9%^%K%e%"%k(B
+ (PC-PRNPDL2-RM Rev.02), NEC
+</OL>
+<HR>
+<P>
+<!-- hhmts start -->
+Last modified: Tue Jun 22 03:26:59 JST 1999
+<!-- hhmts end -->
+</P>
+<ADDRESS>
+$B@iMUBg3XLt3XItLtIJJ*M}2=3X8&5f<<(B $BBg?95*?M(B
+<A HREF="mailto:ohmori@p.chiba-u.ac.jp">&lt;URI:mailto:ohmori@p.chiba-u.ac.jp&gt;</A>
+</ADDRESS>
+</BODY>
+</HTML>
diff --git a/contrib/japanese/doc/README.gs550j b/contrib/japanese/doc/README.gs550j
new file mode 100644
index 00000000..55c63bc1
--- /dev/null
+++ b/contrib/japanese/doc/README.gs550j
@@ -0,0 +1,35 @@
+GNU Ghostscript version 5.50 ÆüËܸ첽¥Ñ¥Ã¥Á gs550j
+Version 0.3 Jun. 22, 1999 by Â翹µª¿Í (ohmori@p.chiba-u.ac.jp)
+Copyright (C) 1996-1999 Daisuke SUZUKI.
+Copyright (C) 1999 Norihito Ohmori.
+
+¡ü¤Ï¤¸¤á¤Ë
+
+¤³¤Î¥Ñ¥Ã¥Á¤ÏÊÒ»³µªÀ¸(katayama@nacsis.ac.jp)¤µ¤ó¤ÎºîÀ®¤µ¤ì¤¿¡¢
+ghostscript-2.6.1 ÆüËܸ첽¥Ñ¥Ã¥±¡¼¥¸¤Î¥É¥é¥¤¥Ð¤È¡¢ÞÉ»³ÏÂŵ¤µ¤ó¤Î
+ºîÀ®¤µ¤ì¤¿ ÆüËܸì Font Driver on VFlib version 1.0 ¤ò ghostscript 5.50 ¤Ë
+Âбþ¤µ¤»¤¿ ÅÄÃæů <akr@jaist.ac.jp> ¤µ¤ó¤Î gs5.50-vflib-1.1
+¤ò´ðËÜÉôʬ¤ËÍøÍѤ·¡¢¤¤¤¯¤Ä¤«¤Î¥Ñ¥Ã¥Á¤ò¤¢¤Æ¡¢Â¿¤¯¤Î¥×¥ê¥ó¥¿¥É¥é¥¤¥Ð·²¤ò
+Ʊº­¤·¤¿¤â¤Î¤Ç¤¹¡£
+
+
+¡üChanges
+¡¦gs550j03
+ gdevlips-2.3.3 (Update for lips4v.dev bugfix)
+¡¦gs550j02
+ gdevlbp3-0.2 (Update)
+¡¦gs550j01
+ ºÇ½é¤Î¥ê¥ê¡¼¥¹
+
+
+¡üºÇ¸å¤Ë
+
+¤³¤Î¥Ñ¥Ã¥Á¤Ë´Ø¤¹¤ëÃøºî¸¢¤½¤Î¾¤Ï GPL ¤Ë½¾¤¤¤Þ¤¹¡£
+¤Þ¤¿¡¢¤³¤Î¥Ñ¥Ã¥Á¤Ï̵ÊݾڤǤ¹¡£¤³¤ì¤ò»È¤Ã¤¿¤³¤È¤Ë¤è¤ê¤Ê¤ó¤é¤«¤ÎÉÔ¶ñ¹ç¤¬
+ȯÀ¸¤·¤¿¤È¤·¤Æ¤âºî¼Ô¤Ï¤Ê¤ó¤é¤ÎÀÕǤ¤âÉ餤¤Þ¤»¤ó¡£
+
+
+¡ü¼Õ¼­
+
+³Æ¥É¥é¥¤¥Ð¤ò¸ø³«¤·¤Æ夤¤¿ºî¼Ô¤Î³§Íͤ˴¶¼Õ¤·¤Þ¤¹¡£
+¤Þ¤¿¡¢¥Æ¥¹¥È¤ò¤·¤Æ¤¯¤À¤µ¤Ã¤¿³§ÍÍ¡¢ËÜÅö¤Ë¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤·¤¿¡£
diff --git a/contrib/japanese/doc/cdj880.txt b/contrib/japanese/doc/cdj880.txt
new file mode 100644
index 00000000..1b425f23
--- /dev/null
+++ b/contrib/japanese/doc/cdj880.txt
@@ -0,0 +1,120 @@
+Patched Ghostscript driver for HP DeskJet 880C/882C and 895C printers.
+
+Matthew J. Gelhaus (mgelhaus@proaxis.com)
+Updated March 30, 1999
+
+****************************************************
+* Ãí°Õ: *
+* cdj880 ¤Ë¤Ä¤¤¤Æ¤Î¤ß¼¡¤Î¤è¤¦¤ÊÊѹ¹¤ò¤·¤Æ¤¢¤ê¤Þ¤¹¡£*
+* 1. Time out Error ¤¬½Ð¤Ê¤¤¤è¤¦¤·¤¿¡£ *
+* 2. -r ¥ª¥×¥·¥ç¥ó¤Ç²òÁüÅÙ¤¬Êѹ¹¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿¡£ *
+* (¤è¤Ã¤Æ -dQuality ¥ª¥×¥·¥ç¥ó¤Ï»ÈÍѤǤ­¤Þ¤»¤ó¡£) *
+* *
+* Â翹µª¿Í <ohmori@p.chiba-u.ac.jp> *
+****************************************************
+
+This package is based very heavily on the work of Uli Wortmann
+(uli@bonk.ethz.ch), and I do not claim to be the original author of very
+much of this code. Uli has done a tremendous amount of excellent work, and
+this package is a modification to his driver by me to add the ability to print
+to the DeskJet 880C, 882C, and 895C printers. Under the terms of the GNU
+General Public License (see LICENSING TERMS below), I am distributing this
+package under the same license.
+
+Please also see the file readme.hp8 for Uli's notes about the package.
+
+It is my intent to submit this work as a patch to Uli Wortmann for inclusion
+in the original HP850C driver package.
+
+LICENSING TERMS:
+
+ Copyright (C) 1999 <Matthew J. Gelhaus mgelhaus@proaxis.com>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ To view the General Public License in its entirety, check the file
+ LICENSE.
+
+DISCLAIMER:
+
+This is a work still under development, and as such I do not guarantee
+it will work (see LICENSING TERMS above). However, please send bug
+reports to me (mgelhaus@proaxis.com), along with as much information
+as you can.
+
+SYSTEM REQUIREMENTS:
+
+This package is designed to work with Aladdin Ghostscript 5.50 (available
+from ftp://ftp.cs.wisc.edu/ghost/aladdin/gs550/). It may work with earlier
+versions of Ghostscript, but I have not tested it. You can follow the
+directions included to compile Ghostscript, but here are is a condensed
+version that worked for me:
+
+INSTALLATION INSTRUCTIONS:
+
+1. Obtain the files
+
+ ghostscript-5.50.tar.gz 2826251 bytes
+ jpegsrc.v6b.tar.gz 613261 bytes
+ libpng-1.0.2.tar.gz 225386 bytes
+ zlib-1.1.3.tar.gz 168463 bytes
+ ghostscript-fonts-std-5.50.tar.gz 1444863 bytes
+
+2. Create a directory to perform the build in, for example,
+ /usr/local/src/gs. Unpack each of the files into this directory:
+
+ $ cd /usr/local/src
+ $ mkdir gs ; cd gs
+ $ tar zxvf $HOME/ghostscript-5.50.tar.gz
+ $ tar zxvf $HOME/jpegsrc.v6b.tar.gz
+ $ tar zxvf $HOME/libpng-1.0.2.tar.gz
+ $ tar zxvf $HOME/zlib-1.1.3.tar.gz
+
+3. Copy all the files from this driver package into the ghostscript
+ directory. For example,
+
+ $ cp $HOME/hp850C-880p/* /usr/local/src/gs/gs5.50/
+
+ This will overwrite the files contrib.mak and makefile. This is OK.
+
+4. If desired, edit the makefile. This should only be necessary if you
+ want to build a ghostscript binary that uses your existing PNG and
+ ZLIB libraries dynamically. Normally ghostscript compiles these in
+ statically. Note that you still need to download the sources to those
+ libraries (as listed in step 1) even if you want to link dynamically.
+
+5. There is a bug (I think) in the ghostscript source. If during the make
+ it fails to build due to a missing "arch.h" in the file std.h, you can
+ fix it by changing line 28 of std.h from
+
+ #include "arch.h"
+
+ to
+
+ #include "obj/arch.h"
+
+6. Type 'make'.
+
+7. Type 'make install' (as root).
+
+7. To specify the 880C/882C/895C driver, use -sDEVICE=cdj880:
+
+ $ gs test.ps -sDEVICE=cdj880 -dNOPAUSE -dSAFER -sOutputFile=- | lpr
+
+
+Please, please, please report any bugs to me at mgelhaus@proaxis.com. This
+includes installation instruction bugs, because I was doing this from
+memory!
+
diff --git a/contrib/japanese/doc/dj505j.txt b/contrib/japanese/doc/dj505j.txt
new file mode 100644
index 00000000..15155e0e
--- /dev/null
+++ b/contrib/japanese/doc/dj505j.txt
@@ -0,0 +1,62 @@
+¢£ ¢£
+¢£ Ghostscript 5.10 ¢£
+¢£ DeskJet 505J ¥É¥é¥¤¥Ð ¢£
+¢£ ¢£
+
+ Â翹µª¿Í
+ ohmori@p.chiba-u.ac.jp
+
+¢¨¤Û¤È¤ó¤É¤³¤Î¥É¥­¥å¥á¥ó¥È¤Ï¥ª¥ê¥¸¥Ê¥ë¤Î¤Þ¤Þ¤Ç¤¹¡£
+
+ ¥ª¥ê¥¸¥Ê¥ë(Ghostscript 2.6.1 DeskJet 505J ¥É¥é¥¤¥Ð)¤Îºî¼Ô¤µ¤ó
+ ÞÉ»³ ÏÂŵ
+ TPM03937@pcvan.or.jp
+ GHF01532@niftyserve.or.jp
+
+
+========================================================================
+¡ü £±¡¥ ¤Ï¤¸¤á¤Ë
+========================================================================
+
+ Ghostscript 5.10 ¤ËÉÕ°¤Î DeskJet Íѥɥ饤¥Ð (gdevcdj.c) ¤Ë¼ê¤ò²Ã¤¨¤Æ
+Hewlett Packard ¼Ò¤Î DeskJet 505J (Plus) ÍѤΥɥ饤¥Ð¤òÄɲä·¤¿¤â¤Î¤Ç¤¹¡£
+¥«¥é¡¼°õºþ¤â²Äǽ¤Ç¤¹¡£
+
+========================================================================
+¡ü £²¡¥ Áȹþ¤ß
+========================================================================
+
+ ¼¡¤Î¼ê½ç¤ÇÁȤ߹þ¤ß¤Þ¤¹¡£
+
+(1) gdevcdj.c ¤Ë¥Ñ¥Ã¥Á gdevcdj.dif ¤òÅö¤Æ¤ë¡£
+(2) gdev505j.mak ¤ò makefile ¤ËÄɲ乤롣
+(3) makefile ¤Î DEVICE_DEVS(¤Þ¤¿¤Ï DEVICE_DEVS1¡ÁDEVICE_DEVS9 ¤Î²¿¤ì¤«)
+ ¤Ë dj505j.dev ¤òÄɲ乤롣
+(4) make ¤ò¼Â¹Ô¤¹¤ë¡£
+
+========================================================================
+¡ü £³¡¥ »È¤¤Êý
+========================================================================
+
+ ¥â¥Î¥¯¥í°õ»ú¤Î¾ì¹ç¤Ï¾¤Î¥É¥é¥¤¥Ð¤ÈƱÍͤǤ¹¡£¥ª¥×¥·¥ç¥ó
+"-sDEVICE=dj505j" ÉÕ¤­¤Ç gs ¤òµ¯Æ°¤·¤Æ¤¯¤À¤µ¤¤¡£
+
+ ¥«¥é¡¼°õ»ú¤Ï¡¢gs ¤Îµ¯Æ°¥ª¥×¥·¥ç¥ó¤Ë "-dBitsPerPixel=3" ¤òÄɲä·¤Þ¤¹¡£
+
+ ¾Ü¤·¤¯¤Ï Ghostscript 5.10 ¤ÎÇÛÉۤ˴ޤޤì¤ë devices.txt ¤Î DeskJet ·Ï
+¥É¥é¥¤¥Ð¤Î»È¤¤Êý¤ÎÀâÌÀ¤ò¤´Í÷¤¯¤À¤µ¤¤¡£
+
+========================================================================
+¡ü £´¡¥ È÷¹Í
+========================================================================
+
+ ¥«¥é¡¼°õºþ¤Î¾ì¹ç¡¢Á´ÂÎŪ¤Ë¿§¤¬ÎФ¬¤«¤ê¤Þ¤¹¤¬¡¢¤³¤ì¤Ï DeskJet ¤Î¥«¥é¡¼
+¥¤¥ó¥¯¤ÎÆÃÀ­¤Ç¤¹¡£DeskJet 505J ¤Ï CMY ¤Ë¤è¤ë 3 ¿§ºþ¤ê¤Ç¤¹¡£¤³¤Î¤¿¤á CMYK
+¤Î 4 ¿§ºþ¤ê¤ËÈæ¤Ù¤Æ¹õ¤¬¤­¤ì¤¤¤Ë½Ð¤Þ¤»¤ó¡£
+
+ ¥«¥é¡¼°õºþ¤Ï¿¤¯¤Î¥á¥â¥ê¤òɬÍפȤ·¤Þ¤¹¡£1 pixel Åö¤¿¤ê 1byte ¤Î¥Õ¥ì¡¼
+¥à¥Ð¥Ã¥Õ¥¡¤ò³ÎÊݤ¹¤ë¤¿¤á¤Ç¤¹¤¬¡¢¤³¤Î¥É¥é¥¤¥Ð¤ËɬÍפʥá¥â¥ê¤Î¾¤Ë gs ËÜÂÎ
+¤ÎÆ°ºî¤ËɬÍפʥá¥â¥ê¤â¤¢¤ê¤Þ¤¹¤«¤é¡¢A4 ¥µ¥¤¥º¤Î½ÐÎϤò¹Ô¤¦¤¿¤á¤Ë¤Ï 10 ¿ô
+MB ¤Î¥á¥â¥ê¤¬É¬ÍפǤ¹¡£
+
+=========================== End of document ============================
diff --git a/contrib/japanese/doc/gdev10v.txt b/contrib/japanese/doc/gdev10v.txt
new file mode 100644
index 00000000..bfbe3911
--- /dev/null
+++ b/contrib/japanese/doc/gdev10v.txt
@@ -0,0 +1,52 @@
+
+ gdev10v.c - BJ10vÍѥǥХ¤¥¹¥É¥é¥¤¥Ð
+
+
+¡û¥¤¥ó¥¹¥È¡¼¥ëÊýË¡
+
+1. gdev10v.c ¤ò gs261 ¤Î¥½¡¼¥¹¥×¥í¥°¥é¥à¤¬¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥³¥Ô¡¼¤·
+ ¤Æ²¼¤µ¤¤¡£
+
+2. Makefile ¤Ë gdev10v.mak ¤òÄɲ䷤Ʋ¼¤µ¤¤¡£ ¤³¤Î¤È¤­¡¢¤â¤·PC9801¾å¤Î
+ MS-DOS¤Ç¤ª»È¤¤¤Ê¤é¡¢-DPC9801¤ò²Ã¤¨¤Æ¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤è¤¦¤Ë¤·¤Æ²¼¤µ¤¤
+ (gdev10v.mak»²¾È)¡£
+
+3. Makefile ¤Î DEVICE_DEVS ¤Ë bj10v.dev, bj10vh.dev ¤ò²Ã¤¨¤Æ²¼¤µ¤¤¡£
+
+ Îã) DEVICE_DEVS=pc98.dev bj10v.dev bj10vh.dev
+ ^^^^^^^^^ ^^^^^^^^^^
+
+4. make ¥³¥Þ¥ó¥É¤Ç gs ¤ò¥³¥ó¥Ñ¥¤¥ë¤·¡¢¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ²¼¤µ¤¤¡£
+
+
+¡û»È¤¤Êý
+
+¡ö 2¤Ä¤Î¥Ç¥Ð¥¤¥¹¤òÍÑ°Õ¤·¤¿¤Î¤Ï BJ10v ¤Î DIP ¥¹¥¤¥Ã¥Á 4 ÈÖ(¾å¥Þ¡¼¥¸¥ó)
+ ¤ÎÀßÄê¤Ë¤è¤Ã¤Æ°õ»úÎΰè¤Î¥µ¥¤¥º¤¬°Û¤Ê¤ë¤¿¤á¤Ç¡¢°Ê²¼¤Î¤è¤¦¤ËÂбþ¤·¤Æ
+ ¤¤¤Þ¤¹¡£
+
+ ¥Ç¥Ð¥¤¥¹Ì¾ DIP¥¹¥¤¥Ã¥Á4 °ÕÌ£
+ ----------------------------------------------------------------
+ bj10vh ON ¾å¥Þ¡¼¥¸¥ó 8.5mm, °õ»ú¹â 10.8 ¥¤¥ó¥Á
+ bj10v OFF ¾å¥Þ¡¼¥¸¥ó 22mm, °õ»ú¹â 10.3 ¥¤¥ó¥Á
+
+ ¤ª»È¤¤¤Î DIP ¥¹¥¤¥Ã¥ÁÀßÄê¤Ë¹ç¤ï¤»¤¿¥Ç¥Ð¥¤¥¹Ì¾¤òÁª¤ó¤Ç²¼¤µ¤¤¡£ ¤Ê¤ª¡¢
+ BJ10v ¤Î½Ð²Ù»þ¤ÎÀßÄê¤Ç¤Ï DIP ¥¹¥¤¥Ã¥Á 4 ÈÖ¤Ï OFF ¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
+
+
+¡ö¥Ç¥Ð¥¤¥¹¤ÎÁªÂò¤Ï -sDEVICE ¥ª¥×¥·¥ç¥ó¤Ë¤è¤Ã¤Æ¹Ô¤Ê¤¤¤Þ¤¹¡£
+
+ Îã) gs -sDEVICE=bj10v (bj10v¤ò»ØÄê)
+
+¡ö²òÁüÅÙ¤ÎÁªÂò¤Ï -r ¥ª¥×¥·¥ç¥ó¤Ë¤è¤Ã¤Æ¹Ô¤Ê¤¤¤Þ¤¹¡£
+
+ Îã) gs -sDEVICE=bj10v -r360x180 (360x180dpi¤ò»ØÄê)
+
+ Âбþ¤·¤Æ¤¤¤ë²òÁüÅÙ¤Ï 360x360 (¥Ç¥Õ¥©¥ë¥È), 360x180, 180x180¤Î3¼ïÎà
+ ¤Ç¤¹¡£
+
+
+
+ ´ä°æµ±ÃË (oteru@nak.math.keio.ac.jp)
+ Á°ÅÄÆØ»Ê (mad@nak.math.keio.ac.jp)
+ ¾¾°æ¹§Íº (mat@slis.flet.mita.keio.ac.jp)
diff --git a/contrib/japanese/doc/gdevalps.txt b/contrib/japanese/doc/gdevalps.txt
new file mode 100644
index 00000000..e6af7146
--- /dev/null
+++ b/contrib/japanese/doc/gdevalps.txt
@@ -0,0 +1,50 @@
+
+ÇÛÉÛʪ·ï
+
+ gdevalps-0.2.tar.gz
+
+ README.gdevalps ¤³¤Î¥Õ¥¡¥¤¥ë
+ gdevalps.c ¥É¥é¥¤¥Ð¥½¡¼¥¹
+ gdevalps.mak ghostscript-5.10 ÍÑ Makefile ÄɲÃÉôʬ
+ gdevalps.mak-5.50 ghostscript-5.50 ÍÑ Makefile ÄɲÃÉôʬ
+
+ÀâÌÀ
+
+ ghostscript-5.10/ghostscript-5.50 ÍѤΠALPS MD¥·¥ê¡¼¥º¤Î¥â¥Î¥¯¥í 600x600dpi
+ Âбþ¤Î¥É¥é¥¤¥Ð¤Ç¤¹¡£MD¥·¥ê¡¼¥ºÈÆÍÑ(?)¥â¥Î¥¯¥í¥â¡¼¥É¡¢MD5000ÀìÍÑ¥â¥Î¥¯¥í¥â¡¼
+ ¥É¤Ç¤Î°õºþ¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤¹¡£MD5000¤Ç¤Ï¥¨¥³¥Ö¥é¥Ã¥¯¥¤¥ó¥¯¤ÎÁªÂò¤â²Äǽ¤Ç¤¹¡£
+ -sDEVICE ¥ª¥×¥·¥ç¥ó¤Ç²¼µ­3¼ïÎà¤Î¥â¡¼¥É¤ò»ØÄꤹ¤ë»ö¤¬²Äǽ¤Ç¤¹¡£
+
+ md50Mono µì¥Ð¡¼¥¸¥ç¥óƱÍͤΠMD5000 ¤Ç¤Î¥â¥Î¥¯¥í°õºþ¥â¡¼¥É¡£
+ md50Eco µì¥Ð¡¼¥¸¥ç¥ó¤Ç¤Ï¥½¡¼¥¹Êѹ¹¤¬É¬ÍפÀ¤Ã¤¿¥¨¥³¥Ö¥é¥Ã¥¯¥â¡¼¥É¤ò¥Ç¥Ð
+ ¥¤¥¹Ì¾¤Ç»ØÄê¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿¡£
+ md1xMono º£²óÄɲ嵥ݡ¼¥È¤·¤¿ MD1300, MD5000 ¤Ç¤ÎÆ°ºî¤ò³Îǧ¤·¤¿¥â¡¼¥É¡£
+ Kousuke Ikeda ¤µ¤ó¤«¤é¥½¡¼¥¹¥×¥í¥°¥é¥à¤ò夭¡¢µì¥Ð¡¼¥¸¥ç¥ó¤Î
+ ¥½¡¼¥¹¤ÈÅý¹ç¤·¤¿¤â¤Î¤Ç¤¹¡£
+ MD2000, MD4000 ¤Ê¤É¡¢¸Å¤¤¥·¥ê¡¼¥º¤â¤³¤Î¥â¡¼¥É¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë
+ ²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£
+
+»È¤¤Êý
+
+ ghostscript-5.10 ¤Þ¤¿¤Ï ghostscript-5.50 ¤òºîÀ®¤¹¤ë¤Î¤ËɬÍפʥ½¡¼¥¹Îà¤òŸ³«
+ ¤·¤¿¾å¤Ç¡¢²¼µ­¼ê½ç¤ÇÇÛÉÛ¥Õ¥¡¥¤¥ë¤ò»ÈÍѤ·¤Æ²¼¤µ¤¤¡£
+
+ ¡¦makefile ¤Ø¤ÎÄɲÃÀßÄê
+ * ghostscript-5.10 ¤Ç¤Ï makefile ¤Ë gdevalps.mk ¤ÎÆâÍƤòÄɲÃ
+ * ghostscript-5.50 ¤Ç¤Ï contrib.mk ¤Ë gdevalps.mk-5.50 ¤ÎÆâÍƤòÄɲÃ
+ ¡¦makefile Ãæ¤Î DEVICE_DEVS ¤Ë md50Mono.dev md50Eco.dev md1xMono.dev
+ ¤òÄɲ乤롣
+ ¡¦gdevalps.c ¤ò¥½¡¼¥¹¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥³¥Ô¡¼¤¹¤ë¡£
+ ¡¦¥³¥ó¥Ñ¥¤¥ë¤¹¤ë
+
+TODO
+ ¡¦¥¤¥ó¥¯¥«¡¼¥È¥ê¥Ã¥¸¤Î¥ª¥×¥·¥ç¥ó»ØÄê
+ ¡¦¥«¥é¡¼¥â¡¼¥É¥µ¥Ý¡¼¥È
+ ¡¦¤½¤Î¾
+
+ ¥Ð¥°Êó¹ð¤½¤Î¾¸æ°Õ¸«¤Ê¤É¤¢¤ê¤Þ¤·¤¿¤é»ä°¸¤Ë¥á¥¤¥ë¤Ç¤ª´ê¤¤Ãפ·¤Þ¤¹¡£
+
+ vVv
+ > ..< NEC Computer Systems, LTD. / umi@mpd.necs.nec.co.jp
+ o Umino, Shinya. / umi@necs.co.jp
+
diff --git a/contrib/japanese/doc/gdevcd8.txt b/contrib/japanese/doc/gdevcd8.txt
new file mode 100644
index 00000000..31cb14de
--- /dev/null
+++ b/contrib/japanese/doc/gdevcd8.txt
@@ -0,0 +1,146 @@
+ A printer driver for the HP670, HP690, HP850, HP855
+ HP870, HP890, HP1100 and HP1600 color printers.
+ To be used with the ghostscript printing system.
+ These drivers are currently not in the official distrib.
+ Please report all problems to uli@bonk.ethz.ch
+
+ CREDITS: Much of the driver is based on ideas derived
+ from the cdj550 driver of George Cameron.
+
+ The support for the hp670, hp690, hp890
+ and hp1600 was added by Martin Gerbershagen.
+
+ ----------------------------------------------------------------
+
+ Copyright (C) 1996-1998 <Uli Wortmann uli@bonk.ethz.ch>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ -------------------------------------------------------------------
+
+ 11.11.96. Initial release of the driver
+
+ 25.08.97 Version 1.2. Resolved all but one of the
+ known bugs, introduced a couple
+ of perfomance improvements. Complete
+ new color-transfer-function handling.
+ (see gamma).
+
+ 01.06.98 Version 1.3 Due to the most welcome contribution
+ of Martin Gerbershagen (ger@ulm.temic.de),
+ support for the hp670, hp690 and hp890
+ and hp1600 has been added. Martin has also
+ resolved all known bugs.
+
+ Problems : Dark colors are still pale.
+
+
+ The diver needs no longer special switches to be invoked
+ except -sDEVICE=cdj850, or -sDEVICE=CDJ890, or sDEVICE=CDJ670
+ or -sDevice=CDJ1600
+
+ The hp690 is supported through the hp670 device, the hp855, hp870
+ and the hp1100 trough the hp850 device.
+
+ The following switches are supported.
+
+ -dPapertype= 0 plain paper [default]
+ 1 bond paper
+ 2 special paper
+ 3 glossy film
+ 4 transparency film
+
+ Note, currently the lookuptables are not suited
+ for printing on special paper or transperencies.
+ Please revert to the gamma functions in this case.
+
+ -dQuality= -1 draft
+ 0 normal [default]
+ 1 presentation
+
+ -dRetStatus= 0 C-RET off
+ 1 C-RET on [default]
+
+ -dMasterGamma= 3.0 [default = 1.0]
+ __Note__: To take advantage of the calibrated color-transfer
+ functions, be sure not to have any Gamma-Statements
+ left! If you need to (i.e. overhead sheets),
+ you still can use the gamma-functions, but they will
+ override the built-in calibration. To use gamma in the
+ traditional way, set MasterGamma to any value greater
+ 1.0 and less 10.0. To adjust individual gamma-values,
+ you have to additionally set MasterGamma to a value
+ greater 1.0 and less 10.0
+
+ With the next release, gamma functions will be dropped.
+
+ When using the driver, be aware that printing in 600dpi involves
+ processing of large amounts of data (> 188MB !). Therefore, the
+ driver is not what you would expect to be a fast driver ;-)
+ This is no problem when printing a full sized color page (because
+ printing itself is slow), but it's really annoying if yoy print only
+ text pages. Maybe I can optimize the code for text-only pages in a
+ later release. Right now, it is recommended to use the highest
+ possible optimisation level your compiler offers....
+ For the time beeing, use the cdj550 device with -sBitsPerPixel=3
+ for fast proof-prints. If you simply want to print 600dpi b/w data,
+ use the cdj550 device with -sBitsPerPixel=8 (or 1).
+
+ Since the printer itself is slow, it may help to set the
+ process-priority of the gs-process to regular or even less. On a
+ 486/100MHZ this is still sufficient to maintain a continuos
+ data-flow.
+ Note to OS/2 users: Simply put the gs-window into the background,
+ or minimize it. Also make sure, that print01.sys is invoked without
+ the /irq switch (great speed improvement under warp4).
+
+ The printer default settings compensate for dot-gain by a
+ calibrated color-transfer function. If this appears to be to light
+ for your business-graphs, or for overhead-sheets, feel free to set
+ -dMasterGamma=1.7.
+
+ Furthermore, you may tweak the gammavalues independently by setting
+ -dGammaValC, -dGammaValM, -dGammaValY or -dGammaValK (if not set,
+ the values default to MasterGamma). This will only work, when
+ -dMasterGamma is set to a value greater than 1.0.
+
+ If you want to learn more about gamma, see:
+
+ ftp://ftp.igd.fhg.de/pub/doc/colour/GammaFAQ.pdf
+
+ Further information, bugs, tips etc, can be found
+ at my website.
+
+ Have fun!
+
+ Uli
+
+ uli@bonk.ethz.ch
+ http://bonk.ethz.ch
+
+ Note: Depending on how you transfered the files,
+ you might need to remove some CR-codes used on intel-based machines:
+
+ simply type: unzip -a hp850.zip
+
+ to compile with gs5.x, simply add
+
+ DEVICE_DEVS4=cdj850.dev cdj670.dev cdj890.dev cdj1600.dev
+
+ to your makefile.
+
+ BTW, it is always a good idea to read make.txt found in the
+ gs-distrib before attempting to recompile.....
+
diff --git a/contrib/japanese/doc/gdevdmpr.txt b/contrib/japanese/doc/gdevdmpr.txt
new file mode 100644
index 00000000..5c64d5d4
--- /dev/null
+++ b/contrib/japanese/doc/gdevdmpr.txt
@@ -0,0 +1,545 @@
+¢£ ¢£
+¢£ ¥É¥Ã¥È¥Þ¥È¥ê¥¯¥¹¥×¥ê¥ó¥¿ÈÆÍѥɥ饤¥Ð ¢£
+¢£ dmprt version 2.01 ¢£
+¢£ for Ghostscript version 4.03 ¢£
+¢£ ¢£
+¢£ ÞÉ»³ÏÂŵ ¢£
+¢£ TPM03937@pcvan.or.jp ¢£
+¢£ GHF01532@niftyserve.or.jp ¢£
+¢£ asayama@vsp.cpg.sony.co.jp ¢£
+¢£ ¢£
+
+========================================================================
+¡ü £±¡¥ ¥Õ¥¡¥¤¥ë¹½À®
+========================================================================
+
+ ¤³¤Î¥Ñ¥Ã¥±¡¼¥¸¤Ë¤Ï¼¡¤Î¥Õ¥¡¥¤¥ë¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£Ëܥɥ­¥å¥á¥ó¥ÈÃæ¤Ç¡ÖËÜ
+¥Ñ¥Ã¥±¡¼¥¸¡×¤È¤¤¤¦¾ì¹ç¤Ë¤Ï¤³¤ì¤éÁ´¤Æ¤Î¥Õ¥¡¥¤¥ë¤ò»Ø¤·¤Æ¤¤¤ë¤â¤Î¤È¤·¤Þ¤¹¡£
+
+ COPYING GNU General Public License
+ gdevdmpr.sj ¤³¤Î¥Õ¥¡¥¤¥ë(Shift JIS)
+ gdevdmpr.c ¥×¥ê¥ó¥¿¥É¥é¥¤¥Ð¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë
+ dviprlib.c ¡·
+ dviprlib.h ¡·
+ gdevdmpr.mak Makefile
+ escp_24.src dviprt¤Î¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤Î¥µ¥ó¥×¥ë
+ dmp_init.ps ½é´ü²½¥Õ¥¡¥¤¥ë
+ dmp_site.ps ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë¤Î¥µ¥ó¥×¥ë
+ testpage.ps °ÌÃÖ¹ç¤ï¤»¥Æ¥¹¥ÈÍѤÎPS¥Õ¥¡¥¤¥ë
+
+========================================================================
+¡ü £²¡¥ ³µÍ×
+========================================================================
+
+ ¤³¤Î¥×¥ê¥ó¥¿¥É¥é¥¤¥Ð¤Ï¡¢¥Ó¥Ã¥È¥Þ¥Ã¥×¥¤¥á¡¼¥¸¤Î°õ»ú¤Î¤¿¤á¤Î¥×¥ê¥ó¥¿Ì¿Îá
+¤ò¥æ¡¼¥¶¤¬ÄêµÁ¤Ç¤­¤ë¤è¤¦¤Ë¤·¡¢½ÐÍè¤ë¸Â¤ê¿¤¯¤Î¼ïÎà¤Î¥×¥ê¥ó¥¿¤ËÂбþ¤Ç¤­¤ë
+¤è¤¦¤Ë¤·¤¿¤â¤Î¤Ç¤¹¡£
+
+ ¥×¥ê¥ó¥¿¥³¡¼¥É¤ÎÄêµÁ¤Ï¡¢MS-DOS ¾å¤Ç¹­¤¯ÍѤ¤¤é¤ì¤Æ¤¤¤ë TeX ÍÑ¥×¥ê¥ó¥¿¥É
+¥é¥¤¥Ð dviprt.exe ¤Î¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë (³ÈÄ¥»Ò.cfg)¡¢¤Þ¤¿¤Ï¤½¤Î¥½¡¼¥¹
+¥Õ¥¡¥¤¥ë (³ÈÄ¥»Ò.src) ¤òÍѤ¤¤ë¡¢¤È¤¤¤¦ÊýË¡¤Ç¹Ô¤¤¤Þ¤¹¡£
+
+ ¢¨ ¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤Î½ñ¼°¤Ë¤Ä¤¤¤Æ¤Ï dviprt ¤Î¥Æ¥¯¥Ë¥«¥ë¥Þ¥Ë¥å¥¢
+ ¥ë texjman.tex (ver. 2.42 °Ê¹ß) ¤ò¤´Í÷¤¯¤À¤µ¤¤¡£tex???ma.lzh(???
+ ¤Ï¥Ð¡¼¥¸¥ç¥óÈÖ¹æ) ¤È¤¤¤¦¥Õ¥¡¥¤¥ë̾¤ÇÇÛÉÛ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
+
+ ¢¨ dviprt ¤Î¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤Î»ÅÍͤ¬¥Ð¡¼¥¸¥ç¥ó 2.41.8 °Ê¹ß¤Ç³È
+ Ä¥¤µ¤ì¤Þ¤·¤¿¡£dmprt ¤ÎËܥС¼¥¸¥ç¥ó¤Ç¤Ï¤³¤Î¿·¤·¤¤»ÅÍͤˤâÂбþ¤·¤Æ¤¤
+ ¤Þ¤¹¡£
+
+ ¢¨ dviprt.exe ¤Ï TSG(ÅìµþÂç³ØÍýÏÀ²Ê³Ø¥°¥ë¡¼¥×) µÚ¤Ó PC-VAN SSCIENCE
+ ¤Î SHIMA ¤µ¤ó¤Ë¤è¤ë TeX ÍÑ¥×¥ê¥ó¥¿¥É¥é¥¤¥Ð¤Ç¤¹¡£PC-VAN ¤Ç¤Ï
+ SSCIENCE ¤Î OSL¡¢Nifty Serve ¤Ç¤Ï FLABO ¤Î¥é¥¤¥Ö¥é¥ê¤Î 11 ÈÖ (TeX
+ ÀìÍÑ)¡¢ASCII NET ¤Ç¤Ï pool msdos ¤ÇÆþ¼ê²Äǽ¤Ç¤¹¡£¤Þ¤¿ annonymous
+ FTP ¤Ç¤âÆþ¼ê¤Ç¤­¤Þ¤¹¡£
+
+ ¢¨ ¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤Ï dviprt.exe ¤Î¥æ¡¼¥Æ¥£¥ê¥Æ¥£¥Ñ¥Ã¥±¡¼¥¸
+ tex???ut.lzh (??? ¤Ï¥Ð¡¼¥¸¥ç¥óÈÖ¹æ) ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£
+
+ ¢¨ dviprt v2.42 ¤Î»þÅÀ¤ÇÇÛÉۥѥ屡¼¥¸¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¥×¥ê¥ó¥¿ÄêµÁ¥Õ
+ ¥¡¥¤¥ë¤Ï°Ê²¼¤Î¤È¤ª¤ê¤Ç¤¹¡£
+
+ ¤³¤ì¤éÁ´¤Æ¤Î¥×¥ê¥ó¥¿¤Ç¤ÎÆ°ºî³Îǧ¤¬½ÐÍè¤Æ¤¤¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤³
+ ¤ì¤é¤Î¥×¥ê¥ó¥¿¤ÎÃæ¤ÇÀµ¾ï¤Ë°õ»ú½ÐÍè¤Ê¤¤¾ì¹ç¤Ë¤Ï¤´Ï¢Íí¤¯¤À¤µ¤¤¡£½ÐÍè
+ ¤ë¸Â¤êÂн褷¤Þ¤¹¡£
+
+ ap850.src EPSON AP-850/MJ-500ÍÑ (48¥É¥Ã¥È)
+ ap900.src EPSON AP-900ÍÑ (360dpi)
+ art.src Xerox ART mode (240dpi)
+ art2.src Xerox ART2 mode (240dpi, Hex mode)
+ bj_10v48.src Canon BJ-10/BJ-15ÍÑ (48¥É¥Ã¥È)
+ bj_130j.src Canon BJ-130J/BJ-330JÍÑ (48¥É¥Ã¥È)
+ dj500.src HP DeskJet 500ÍÑ (300dpi)
+ dj505j.src HP DeskJet 500J/300J/505J/505J plusÍÑ (300dpi)
+ dj505j1.src HP DeskJet 505J plusÍÑ (300dpi PCL mode1 °µ½Ì)
+ dj505j2.src HP DeskJet 505J plusÍÑ (300dpi PCl mode2 °µ½Ì)
+ dvi2pbm.src raw PBM ½ÐÎÏÍÑ (118dpi)
+ epsimage.src Encapsulated PostScript(TM) Image ½ÐÎÏÍÑ(118dpi)
+ escp_24.src EPSON ESC/P (24¥É¥Ã¥È)¥×¥ê¥ó¥¿ÍÑ
+ escp_48.src EPSON HG-4800ÍÑ (48¥É¥Ã¥È)
+ escp_48a.src EPSON HG-5130ÍÑ (48¥É¥Ã¥È, ÎÙÀܥɥåȲÄ)
+ escp_8.src EPSON ESC/P (8¥Ô¥ó)ÍÑ
+ fmpr-351.src Fujitsu FMPR-351ÍÑ (48¥É¥Ã¥È)
+ g3fax.src G3 FAXÍÑ(200dpi, Header ¤Ê¤·)
+ hl_8e.src Brother HL-8eÍÑ (300dpi)
+ hp_djp.src HP DeskJet PlusÍÑ (300dpi)
+ hp_ljp.src HP LaserJet PlusÍÑ (300dpi)
+ jt48escp.src Star JT-48 ESC/P (48 ¥É¥Ã¥È)
+ jt48nm.src Star JT-48CL/NM (48 ¥É¥Ã¥È)
+ lbp-b406.src Canon LBP-B406ÍÑ(240dpi)
+ lbp8_240.src Canon LBP-8/LIPS IIÍÑ (240dpi)
+ lbp8_300.src Canon LBP-8/LIPS IIÍÑ (300dpi)
+ lcs240.src Casio LCS-240ÍÑ (240dpi)
+ lips3.src Canon LIPS IIIÍÑ
+ lp3000.src EPSON LP-3000(2000)ÍÑ
+ lp7000.src EPSON LP-7000ÍÑ
+ lp_rpdl.src RICOH LP3320-SP4 mark2
+ / LP2310-SP5 (RPDL)ÍÑ (240dpi)
+ l_880.src Kyocera L-880ÍÑ (300dpi)
+ nec_page.src NEC PC-PR2000ÍÑ
+ nec_pgr.src NEC PC-PR1000,2000,4000ÍÑ (240dpi)
+ nec_pgr4.src NEC PC-PR2000,4000ÍÑ (400dpi)
+ nm_24.src NEC NM(24¥É¥Ã¥È)ÍÑ
+ pc-pr101.src NEC PC-PR101ÍÑ(24¥É¥Ã¥È)
+ pc-pr_24.src NEC PC-PR(24¥É¥Ã¥È)ÍÑ
+ pc150v48.src NEC PC-PR150V(48¥É¥Ã¥È)ÍÑ
+ pc8821.src NEC PC-8821(16¥É¥Ã¥È)ÍÑ
+ pc_pr406.src NEC PR406LM(48¥É¥Ã¥È)ÍÑ
+ pc_pr602.src NEC PC-PR602RÍÑ (240dpi)
+ pr_130ax.src SANYO PR_130AX, TOSHIBA PR-48(J31DPR02)ÍÑ (180dpi)
+ pr-48.src Toshiba PR-48 (360dpi)
+ r98_dma.src RICOH LP3320-SP4 R98 emulation mode
+ Direct Memory Access
+ rpdl_dma.src RICOH LP3320-SP4 Direct Memory Access (240dpi)
+ smdfax.src SONY SMD50/70 ¥·¥ê¡¼¥ºFAX (200dpi)
+ starfax.src StarfaxÍÑ (200dpi)
+
+
+========================================================================
+¡ü £³¡¥ Æ°ºî´Ä¶­
+========================================================================
+
+ ¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Ï´ðËÜŪ¤ËÈ󵡼ï°Í¸¤Î¤Ä¤â¤ê¤Ç½ñ¤¤¤Æ¤¢¤ê¤Þ¤¹ (¤¿¤À¤·
+FreeBSD ¾å¤Ç¤·¤«Æ°ºî³Îǧ¤Ï¤ª¤³¤Ê¤Ã¤Æ¤¤¤Þ¤»¤ó)¡£
+
+ ¤³¤Î¥É¥é¥¤¥Ð¤òÁȤ߹þ¤à¤³¤È¤¬½ÐÍè¤ë Ghostscript ¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤¹¤¬¡¢
+Ghostscript ¤ÎËÜÂΤȥǥХ¤¥¹¥É¥é¥¤¥Ð¤È¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤¬ Ghostscript
+version 4.03 ¤ÈƱÍͤΤâ¤Î¤Ê¤é¤Ð²Äǽ¤Ç¤¹ (2.6.x ¤Ë¤ÏÁȤ߹þ¤á¤Þ¤»¤ó¡£
+2.6.x ¤Ç¤Ï½¾Íè¤Î¤â¤Î¤òÍѤ¤¤Æ²¼¤µ¤¤)¡£
+
+
+========================================================================
+¡ü £´¡¥ ƳÆþ¤Î¼ê½ç
+========================================================================
+ ¤³¤³¤Ç¤Ï dmprt ¤¬ÁȤߤ³¤ó¤Ç¤¢¤ë¼Â¹Ô²Äǽ·Á¼°¤Î gs ¤¬´û¤Ë¼ê¸µ¤Ë¤¢¤ë¤â¤Î
+¤È¤·¤ÆÀâÌÀ¤·¤Þ¤¹¡£¥³¥ó¥Ñ¥¤¥ë¤¬É¬Íפʾì¹ç¤Ï¤³¤Î¥É¥­¥å¥á¥ó¥ÈËöÈø¤Î¡Ö¥³¥ó¥Ñ
+¥¤¥ë¡×¤Î¹àÌܤò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
+
+ dmprt ¤Ï¤ª¤ª¤è¤½ÈÆÍѤΥץê¥ó¥¿¥É¥é¥¤¥Ð¤Ç¤¹¤«¤é¡¢µÕ¤Ë¸À¤¦¤È¥æ¡¼¥¶¤¬ÀßÄê
+¤ò¤ª¤³¤Ê¤Ã¤Æ¤ä¤é¤Ê¤¤¤ÈÀµ¤·¤¯Æ°ºî¤·¤Æ¤¯¤ì¤Þ¤»¤ó¡£
+
+ °Ê²¼¤Îºî¶È¤ò¹Ô¤¤¤Þ¤¹¡£
+
+(1) ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë¤ÎÊÔ½¸
+(2) ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë¤Î»ØÄê
+
+-----------------------
+¡ú 4.1 ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë
+-----------------------
+
+ ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë¤Ç¤Ï¡¢¥×¥ê¥ó¥¿¤Îµ¡¼ïÊ̾ðÊó¤Ê¤É¤ò»ØÄꤷ¤Þ¤¹¡£¤Þ¤¿¡¢°õ»ú
+°ÌÃÖ¤ÎÊäÀµ¤Ê¤É¤¬É¬Íפʤé¤Ð¤µ¤é¤Ë¤½¤ì¤ò»ØÄꤷ¤Þ¤¹¡£
+
+
+-----------------------------
+¡ú 4.2 ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë¤Î½ñ¼°
+-----------------------------
+
+ ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë dmp_site.ps ¤ÎÂç¤Þ¤«¤Ê½ñ¼°¤òÀâÌÀ¤·¤Þ¤¹¡£¹àÌÜÊ̤ξܺÙ
+¤Ê½ñ¼°¤Ï³Æ¹àÌܤÎÀâÌÀ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
+
+(1) ÀßÄê¥Õ¥¡¥¤¥ë¤Î³«»Ï¡¦½ªÎ»¥³¥Þ¥ó¥É
+
+ ÉÕ°¤Î dmp_site.ps ¤ÎºÇ½é¤ÈºÇ¸å¤Î¹Ô¤Ë¤¢¤ë ¡ÖBeginConfig¡× ¤È
+ ¡ÖEndConfig¡× ¤È¤¤¤¦Ê¸»úÎó¤Î¤³¤È¤Ç¤¹¡£ÀßÄê¥Õ¥¡¥¤¥ë¤ÎºÇ½é¤ÈºÇ¸å¤Î¹Ô
+ ¤Ë¤½¤ì¤¾¤ì¤³¤ì¤é¤Îʸ»úÎ󤬤¢¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ÉÕ°¤Î dmp_site.ps ¤ò
+ ÊÔ½¸¤·¤Æ»È¤¦¾ì¹ç¤Ë¤Ï¡¢¤³¤ì¤é¤Î¹Ô¤òºï½ü¤·¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
+
+(2) ¥³¥á¥ó¥È
+
+ '%' °Ê¹ß¹ÔËö¤Þ¤Ç¤Ï¥³¥á¥ó¥È¤È¤·¤Æ̵»ë¤µ¤ì¤Þ¤¹¡£
+
+(3) ÏÀÍýÃÍ (¥¹¥¤¥Ã¥Á)
+
+ true (¿¿ / on) Ëô¤Ï false (µ¶ / off) ¤Î¤É¤Á¤é¤«¤ÎÃͤǤ¹¡£
+
+(4) ʸ»úÎó
+
+ '(' ¤È ')' ¤Ç°Ï¤Þ¤ì¤¿¤â¤Î¤¬Ê¸»úÎó¤Ç¤¹¡£¤³¤ì¤é¤Î³ç¸Ì¤Î´Ö¤Ë¤Ï;ʬ¤Ê
+ ¶õÇò¤ò´Þ¤á¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£
+
+(5) Ťµ
+ dmp_site.ps ¤ÎÃæ¤Ç¡ÖŤµ¡×¤Ç»ØÄꤹ¤ë¹àÌܤǤÏñ°Ì¤òÉÕ¤±¤ë¤³¤È¤¬½ÐÍè
+ ¤Þ¤¹¡£»ÈÍѤǤ­¤ëñ°Ì¤Ï¡¢
+
+ ¡¦ in ¥¤¥ó¥Á
+ ¡¦ cm ¥»¥ó¥Á¥á¡¼¥È¥ë
+ ¡¦ mm ¥ß¥ê¥á¡¼¥È¥ë
+ ¡¦ pt ¥Ý¥¤¥ó¥È (1/72.27 ¥¤¥ó¥Á)
+ ¡¦ bp ¥Ó¥Ã¥°¥Ý¥¤¥ó¥È (1/72 ¥¤¥ó¥Á)
+ ¡¦ dot ¥É¥Ã¥È
+
+ ¤Ç¤¹¡£Ã±°Ì¤¬»ØÄꤵ¤ì¤Ê¤¤¾ì¹ç¤Ï¡Ö¥¤¥ó¥Á¡×¤òñ°Ì¤È¤·¤Æ½èÍý¤·¤Þ¤¹¡£
+
+ ñ°Ì¤ò»ØÄꤹ¤ë¾ì¹ç¤Ë¤Ï¡¢¿ôÃͤȤδ֤˶õÇòʸ»ú¤ò¾¯¤Ê¤¯¤È¤â°ì¤ÄÁÞÆþ¤·
+ ¤Æ¤¯¤À¤µ¤¤¡£¶õÇòʸ»ú¤¬¿ôÃͤȤδ֤ˤʤ¤¾ì¹ç¡¢¤¦¤Þ¤¯²ò¼á¤Ç¤­¤Þ¤»¤ó¡£
+
+ (e.g.) /defaultsize [ 576 bp 792 bp ]
+
+
+ ¢¨´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë¤Ï¼ÂºÝ¤Ë¤Ï PostScript ¥×¥í¥°¥é¥à¤È¤·¤Æ¼Â¹Ô¤µ¤ì²ò¼á
+ ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£½¾¤Ã¤Æ¡¢´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Ç¤Ï PostScript ¸À¸ì¤¬µö¤¹
+ µ­½Ò¤Ï´ðËÜŪ¤Ëµö¤µ¤ì¤Þ¤¹¡£
+
+ ¤¿¤À¤·¡¢¤½¤Î¾ì¹ç¤Ëºî¶È¤ÎÅÔ¹ç¾å¼­½ñ¤ËÅÐÏ¿¤ò¹Ô¤Ê¤¦É¬Íפ¬¤¢¤ë¾ì¹ç¤Ë¤Ï
+ ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Ç¥í¡¼¥«¥ë¤Ê¼­½ñ¤òºî¤Ã¤Æ¡¢¤½¤Î¼­½ñ¤ËÂФ·¤ÆÅÐÏ¿¤ò
+ ¹Ô¤Ê¤Ã¤Æ¤¯¤À¤µ¤¤ (dictfull ¥¨¥é¡¼¤ä»×¤ï¤ÌÉûºîÍѤ¬µ¯¤­¤ë²ÄǽÀ­¤¬¤¢
+ ¤ê¤Þ¤¹)¡£¤Þ¤¿¡¢¥ª¥Ú¥é¥ó¥É¥¹¥¿¥Ã¥¯¤ä¼­½ñ¥¹¥¿¥Ã¥¯¤òÇ˲õ¤·¤Ê¤¤¤è¤¦¤Ë
+ ½½Ê¬¤Ëµ¤¤òÉÕ¤±¤Æ¤¯¤À¤µ¤¤ (¥´¥ß¤ò»Ä¤µ¤Ê¤¤¤è¤¦¤Ë!!)¡£
+
+ ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Ç¤Ï Level 2 ¤Î¥ª¥Ú¥ì¡¼¥¿¤Ï»È¤ï¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¯
+ ¤À¤µ¤¤¡£
+
+-----------------------------
+¡ú 4.3 ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë¤Î¹àÌÜ
+-----------------------------
+
+ ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë dmp_site.ps ¤Ï°Ê²¼¤Î¹àÌܤȥ³¥á¥ó¥È¤«¤é¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
+
+ /printer dviprt¤Î¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë
+ /resolution ²òÁüÅÙ
+ /offset ¸¶ÅÀ°ÜÆ°ÎÌ
+ /defaultsize ¥Ç¥Õ¥©¥ë¥È¤ÎÍѻ極¥¤¥º
+ /margin °õ»úÉÔ²ÄǽÎΰè
+ /maxsize °õ»ú²ÄǽÎΰè¤ÎºÇÂçÈÏ°Ï
+ /verbose ¤ª¤·¤ã¤Ù¤ê¥â¡¼¥É(^^;
+
+ ¤³¤ì¤é¤ÏÁ´¤Æ¾Êά²Äǽ¤Ê¹àÌܤǤ¹¡£¤¿¤À¤·¡¢/printer ¤òÀßÄꤷ¤Ê¤¤¾ì¹ç¤Ë¤Ï
+ESC/P 24 pins ¤Î¥×¥ê¥ó¥¿¥³¡¼¥É¤òÍѤ¤¤Æ½ÐÎϤ·¤Þ¤¹¤Î¤Ç¡¢¤³¤ì¤Ë³ºÅö¤·¤Ê¤¤¥×
+¥ê¥ó¥¿¤ò»ÈÍѤ¹¤ë¾ì¹ç¤Ë¤ÏºÇÄã¸Â¤³¤Î¹àÌܤÏÀßÄꤷ¤Æ¤¯¤À¤µ¤¤¡£
+
+ °Ê²¼¤Ë³Æ¹àÌܤλØÄêË¡¤òÀâÌÀ¤·¤Þ¤¹¡£³Æ¹àÌܤϹÔñ°Ì¤Ç»ØÄꤷ¡¢½ÅÊ£¤·¤¿»ØÄê
+¤ÏºÇ½é¤Î»ØÄê¤Î¤ß¤¬Í­¸ú¤È¤Ê¤ê¤Þ¤¹¡£¤Þ¤¿¡¢ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Îʸ»ú¤ÏÁ´¤ÆÂçʸ»ú¡¢
+¾®Ê¸»ú¤¬¶èÊ̤µ¤ì¤Þ¤¹¤Î¤ÇÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
+
+(1) /printer
+
+ ¡¦ ¡Ô»ØÄêË¡¡Õ
+
+ /printer (¥Õ¥¡¥¤¥ë̾)
+
+ dviprt ¤Î *.cfg/*.src ¤Î¥Õ¥¡¥¤¥ë̾¤òʸ»úÎó¤Ç»ØÄꤷ¤Þ¤¹¡£³ÈÄ¥»Ò
+ ¤Î¾Êά¤Ï¤Ç¤­¤Þ¤»¤ó¡£
+
+ MS-DOS ¾å¤Ç»ÈÍѤ¹¤ë¾ì¹ç¡¢¥Ç¥£¥ì¥¯¥È¥ê¤Î¶èÀÚ¤ê¤Ë¤Ï '\' ¤Ç¤Ï¤Ê¤¯
+ '/' ¤òÍѤ¤¤ë¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
+
+ ¡¦ ¡Ô»ØÄêÎã¡Õ
+
+ /printer (/usr/local/lib/tex/dviprt/escp_24.cfg)
+
+ ¡¦ ¡ÔÀâÌÀ¡Õ
+
+ dviprt.exe ¤ÇÍѤ¤¤é¤ì¤ë¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ï¤½¤Î¥½¡¼¥¹¥Õ
+ ¥¡¥¤¥ë¤ò»ØÄꤷ¤Þ¤¹¡£
+
+ ¤³¤³¤Ç»ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤Ï
+
+ (A) Ghostscript ¤Î¥é¥¤¥Ö¥é¥ê¸¡º÷ (use.doc ¤Î File searching ¤Î¹à
+ Ìܤò»²¾È) ¤Ë½¾¤Ã¤¿¸¡º÷
+ (B) »ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë̾¤ò´Ä¶­ÊÑ¿ô TEXCFG ¤ËÀßÄꤵ¤ì¤¿¥Ç¥£¥ì¥¯¥È
+ ¥ê̾¤ËÏ¢·ë¤·¤¿¥Õ¥¡¥¤¥ë̾¤Î¥Õ¥¡¥¤¥ë (´Ä¶­ÊÑ¿ô¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë
+ ¾ì¹ç¤Î¤ß)
+
+ ¤Î½ç¤Ëõ¤µ¤ì¤Þ¤¹¡£
+
+ ¤³¤Î¥Õ¥¡¥¤¥ë¤Ï»ÈÍѤ¹¤ë¥×¥ê¥ó¥¿¤Îµ¡¼ï¤Ë¤¢¤Ã¤¿¤â¤Î¤òÍÑ°Õ¤¹¤ëɬÍ×
+ ¤¬¤¢¤ê¤Þ¤¹¡£
+
+ dviprt ¤ÏÂçÊÑ¿¤¯¤Î¥æ¡¼¥¶¤ò»ý¤Ã¤Æ¤¤¤ë¤¿¤á¤¢¤ê¤¬¤¿¤¤¤³¤È¤Ë¤¿¤¯
+ ¤µ¤ó¤Î¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤¬´û¤ËºîÀ®¡¦¸ø³«¡¦ÇÛÉÛ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤Þ
+ ¤º¤Ï dviprt ¤Î¥æ¡¼¥Æ¥£¥ê¥Æ¥£¥Ñ¥Ã¥±¡¼¥¸ tex???ut.lzh ¤ËÌÜŪ¤Î¥×¥ê
+ ¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤¬Ìµ¤¤¤«¤É¤¦¤«³Î¤«¤á¤Æ¤¯¤À¤µ¤¤¡£
+
+ ±¿°­¤¯¤´»ÈÍѤΥץê¥ó¥¿ÍѤΥץê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤¬ tex???ut.lzh
+ ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢¤½¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Ï¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤Ç¤¹¤Î
+ ¤Ç¥¨¥Ç¥£¥¿¤ÇºîÀ®¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
+
+ ¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤È¤½¤ì¤ò¥³¥ó¥Ð¡¼¥È¤·¤¿¥Ð¥¤
+ ¥Ê¥ê¥Õ¥¡¥¤¥ë¤È¤Ï¤½¤ÎÆâÍƤ«¤é¼«Æ°È½Ê̤·¤Æ¤¤¤Þ¤¹¡£
+
+(2) /resolution
+
+ ¡¦ ¡Ô»ØÄêË¡¡Õ
+
+ /resolution [ ²£¤Î²òÁüÅÙ ½Ä¤Î²òÁüÅÙ ]
+
+ dot/inch(dpi) ñ°Ì¤Ç¤Î¼Â¿ôɽ¸½¡£
+
+ ¡¦ ¡ÔÀßÄêÎã¡Õ
+
+ /resolution [ 160 180 ]
+
+ ¡¦ ¡ÔÀâÌÀ¡Õ
+
+ ²òÁüÅÙ¤ò»ØÄꤷ¤Þ¤¹¡£Ä̾ï¤Ï¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤Ëµ­Ï¿¤·¤Æ¤¢¤ë¥×
+ ¥ê¥ó¥¿¸ÇÍ­¤Î²òÁüÅÙ¤ò»²¾È¤·¤Þ¤¹¤Î¤Ç¤³¤Î¹àÌܤÎÀßÄê¤ÏɬÍפ¢¤ê¤Þ¤»¤ó
+ ¤¬ dviprt ¤Î¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤Ï½Ä²£¤Î²òÁüÅÙ¤¬Æ±¤¸¤Ç¤¢¤ë¤³¤È¤ò
+ ²¾Äꤷ¤Æ¤¤¤Þ¤¹¤Î¤Ç¤³¤ì¤Ë³ºÅö¤·¤Ê¤¤¥×¥ê¥ó¥¿ (½Ä²£¤Î²òÁüÅÙ¤¬°Û¤Ê¤ë
+ ¥×¥ê¥ó¥¿) ¤Ç¤Ï¼Â¹ÔËè¤Ë (Ghostscript ¤Î)-r ¥ª¥×¥·¥ç¥ó¤ò»ØÄꤷ¤Ê¤±
+ ¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£¤Þ¤¿¡¢²òÁüÅÙ¤¬µ­Ï¿¤µ¤ì¤Æ¤¤¤Ê¤¤¸Å¤¤¥Ð¡¼¥¸¥ç¥ó¤Î¥×
+ ¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ë¤ò»ÈÍѤ¹¤ë¾ì¹ç¤Ç¤âƱÍͤǤ¹¡£
+
+ ²òÁüÅÙ¤ÎÍ¥Àè½ç°Ì¤Ï¡¢
+
+ (A) Ghostscript µ¯Æ°»þ¤Î -r ¥ª¥×¥·¥ç¥ó¤Ë¤è¤ë»ØÄê
+ (B) ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Î "/resolution" ¤Î¹àÌܤˤè¤ë»ØÄê
+ (C) ¥×¥ê¥ó¥¿ÄêµÁ¥Õ¥¡¥¤¥ëÃæ¤Î²òÁüÅÙ
+ (D) 180dpi(¥Ç¥Õ¥©¥ë¥È)
+
+ ¤Ç¤¹¡£
+
+(3) /offset
+
+ ¡¦ ¡ÔÀßÄêË¡¡Õ
+
+ /offset [ ²£¤Î°ÜÆ°ÎÌ ½Ä¤Î°ÜÆ°ÎÌ ]
+
+ Ťµ¤Ë¤è¤ë»ØÄê¡£
+
+ ¡¦ ¡ÔÀßÄêÎã¡Õ
+
+ /offset [ 0.0 -0.2 ]
+
+ ¡¦ ¡ÔÀâÌÀ¡Õ
+
+ ¸¶ÅÀ (½ÐÎÏ¥¤¥á¡¼¥¸¤Îº¸²¼³Ñ) ¤Î²£ / ½ÄÊý¸þ¤Î°ÜÆ°Î̤ò»ØÄꤷ¤Þ¤¹¡£
+
+ °õ»ú²ÄǽÎΰè¤ÎÏȤ«¤éÇÁ¤¤¤Æ¸«¤¨¤ëÉôʬ¤¬¤³¤³¤Ç»ØÄꤵ¤ì¤¿Ê¬¤À¤±Ê¿
+ ¹Ô°ÜÆ°¤¹¤ë¡¢¤È¤¤¤¦¥¤¥á¡¼¥¸¤ò»ý¤Ã¤Æ¤¤¤¿¤À¤±¤Ð¤¤¤¤¤Ç¤·¤ç¤¦¡£
+
+ Íѻ汦¡¢¾åÊý¸þ¤¬¤½¤ì¤¾¤ì¤ÎÀµÊý¸þ¤Ç¤¹¡£
+
+ ¾Êά¤µ¤ì¤¿¾ì¹ç¤Ï½Ä²£ÁÐÊý¸þ 0 ¥¤¥ó¥Á¤Ç¤¹¡£
+
+ ¤³¤Î¥Ñ¥Ã¥±¡¼¥¸¤Ë¤Ï°ÌÃÖ¹ç¤ï¤»¤Î¤¿¤á¤Î PS ¥Õ¥¡¥¤¥ë (testpage.ps)
+ ¤¬ÉÕ°¤·¤Æ¤¤¤Þ¤¹¡£¤³¤Î¥Õ¥¡¥¤¥ë¤ÏÍÑ»æ¤Î±ï¤«¤é¡¢Æ⦠1.5cm¡¢1inch¡¢
+ µÚ¤Ó 3cm ¤Î°ÌÃÖ¤Ë 1 dot Éý¤ÎºÙ¤¤Àþ¤ÇÏȤò½ñ¤¯¤À¤±¤Î¤â¤Î¤Ç¤¹¡£
+
+ testpage.ps ¤Ç¤ÏÍѻ極¥¤¥º¤Ï¡¢¥Ç¥Ð¥¤¥¹¥É¥é¥¤¥Ð¤ÎÉÁ²èÈϰϤËÅù¤·
+ ¤¤¤â¤Î¤È¤ß¤Ê¤µ¤ì¤Þ¤¹¡£Î㤨¤Ð -sPAPERSIZE=b5 ¤È¤¤¤¦¥ª¥×¥·¥ç¥ó¤òÉÕ
+ ¤±¤Æ Ghostscript ¤òµ¯Æ°¤¹¤ì¤ÐÍѻ極¥¤¥º¤Ï B5 ¤Ç¤¢¤ë¤È²¾Äꤵ¤ì¡¢
+ ¤Þ¤¿¡¢Ghostscript ¤ËÉÁ²èÈϰϤò»ØÄꤹ¤ë¥ª¥×¥·¥ç¥ó (-g¡¢
+ -sPAPERSIZE) ¤òÉÕ¤±¤º¤Ëµ¯Æ°¤·¤¿¾ì¹ç¤Ë¤Ï¡¢¥Ç¥Ð¥¤¥¹¥É¥é¥¤¥Ð¤Î¥Ç¥Õ
+ ¥©¥ë¥È¤ÎÉÁ²èÈϰϤ¬Íѻ極¥¤¥º¤Ç¤¢¤ë¤È¤µ¤ì¤Þ¤¹¡£
+
+ -sPAPERSIZE ¥ª¥×¥·¥ç¥ó¤È -g ¥ª¥×¥·¥ç¥ó¤Ë¤Ä¤¤¤Æ¤Ï Ghostscript
+ ¤Î¥É¥­¥å¥á¥ó¥È use.doc ¤ò¤´Í÷¤¯¤À¤µ¤¤¡£
+
+ Î㤨¤Ð¡¢¼¡¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£
+
+ gs -dNOPAUSE -sDEVICE=dmprt -sPAPERSIZE=b5 -- testpage.ps
+
+ ¤³¤Î¥Õ¥¡¥¤¥ë testpage.ps ¤Î½ÐÎÏ°ÌÃÖ¤¬¤º¤ì¤ë¾ì¹ç¤Ë¤ÏÀµ¤·¤¤°ÌÃÖ
+ ¤ËÏȤ¬¤¯¤ë¤è¤¦¤Ë /offset ¤ÎÃͤòÄ´Àᤷ¤Æ¤¯¤À¤µ¤¤¡£
+
+(4) /defaultsize
+
+ ¡¦ ¡ÔÀßÄêË¡¡Õ
+
+ /defaultsize [ Éý ¹â ]
+
+ Ťµ¤Ë¤è¤ë»ØÄê¡£
+
+ ¡¦ ¡ÔÀßÄêÎã¡Õ
+
+ /defaultsize [ 8.0 11.0 ]
+
+ ¡¦ ¡ÔÀâÌÀ¡Õ
+
+ Ghostscript ¤Îµ¯Æ°¥ª¥×¥·¥ç¥ó¤Ç°õ»úÎΰè¤ÎÉý¡¦¹â¤Î»ØÄê (-g ¥ª¥×
+ ¥·¥ç¥ó¡¢-sPAPERSIZE ¥ª¥×¥·¥ç¥ó) ¤¬¤Ê¤¤¾ì¹ç¤Î°õ»úÎΰè¤ò»ØÄꤷ¤Þ¤¹¡£
+
+ »ØÄꤵ¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤Ë¤Ï¡¢Éý 8.3 ¥¤¥ó¥Á¡¢¹â 11.7 ¥¤¥ó¥Á¤Ç¤¹¡£
+
+(5) /margin
+
+ ¡¦ ¡ÔÀßÄêË¡¡Õ
+
+ /margin [ º¸ ²¼ ±¦ ¾å ]
+
+ Ťµ¤Ë¤è¤ë»ØÄê¡£
+
+ ¡¦ ¡ÔÀßÄêÎã¡Õ
+
+ /margin [ 3.675 mm 12.7 mm 3.675 mm 6.5 mm ]
+
+ ¡¦ ¡ÔÀâÌÀ¡Õ
+
+ ÍÑ»æ¤Î¤¦¤Á¥×¥ê¥ó¥¿¤¬°õ»ú¤¹¤ë¤³¤È¤¬½ÐÍè¤Ê¤¤Éôʬ¤òÍÑ»æ¾å²¼º¸±¦¤Î
+ ü¤«¤é¤ÎŤµ¤Ç»ØÄꤷ¤Þ¤¹¡£
+
+ ¤³¤³¤Ç»ØÄꤵ¤ì¤¿Îΰè¤Î¥¤¥á¡¼¥¸¤Ï¥×¥ê¥ó¥¿¤Ë½ÐÎϤµ¤ì¤Þ¤»¤ó (c.f.
+ /maxsize)¡£
+
+ »ØÄꤵ¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¤Ï¾å²¼º¸±¦Á´¤Æ 0 ¥¤¥ó¥Á¤Ç¤¹¡£
+
+(6) /maxsize
+
+ ¡¦ ¡ÔÀßÄêË¡¡Õ
+
+ /maxsize [ Éý ¹â ]
+
+ Ťµ¤Ë¤è¤ë»ØÄê¡£
+
+ ¡¦ ¡ÔÀßÄêÎã¡Õ
+
+ /maxsize [ 8.0 11.0 ]
+
+ ¡¦ ¡ÔÀâÌÀ¡Õ
+
+ ¥×¥ê¥ó¥¿¤Î°õ»ú²ÄǽÎΰè¤ÎºÇÂ祵¥¤¥º¤ò»ØÄꤷ¤Þ¤¹¡£¤³¤Î¥µ¥¤¥º¤«¤é
+ ¤Ï¤ß½Ð¤¹Éôʬ¤Ï»ØÄꤵ¤ì¤¿Íѻ極¥¤¥º¤ä¥Þ¡¼¥¸¥ó¤Ë¤«¤«¤ï¤é¤º½ÐÎϤµ¤ì
+ ¤Ê¤¯¤Ê¤ê¤Þ¤¹ (±¦¡¢¾å¤¬ÀÚ¤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹)¡£
+
+ Î㤨¤ÐºÇÂç°õ»ú²ÄǽÉý¤ò±Û¤¨¤ë¥¤¥á¡¼¥¸¤òÁ÷¤Ã¤¿¾ì¹ç¤Ë¤½¤Î¤Ö¤ó¤ò̵
+ »ë¤»¤º¤Ë¼¡¤Î¹Ô¤ËÀÞ¤êÊÖ¤·¤Æ°õ»ú¤·¤Æ¤·¤Þ¤¦¥×¥ê¥ó¥¿¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì
+ ¹ç¤ä¡¢Ä¹¤¹¤®¤ë¥Ú¡¼¥¸¤ò½ÐÎϤ·¤¿¾ì¹ç¤Ë¼¡¤ÎÍÑ»æ¤Ë³¤­¤ò½ÐÎϤ·¤Æ¤·¤Þ
+ ¤¦¾ì¹ç¤Ê¤É¤Ë¤³¤Î¹àÌܤòÀßÄꤷ¤Æ¤¯¤À¤µ¤¤¡£
+
+ 0 Ëô¤ÏÉé¤ÎÃͤϡÖ̵¸ÂÂç¡×¤ò°ÕÌ£¤·¤Þ¤¹¡£Éý¡¢¹â¤µ¤Î»ØÄê¤ÏÆÈΩ¤Ç¤¹¡£
+ ¤¹¤Ê¤ï¤ÁÎ㤨¤ÐÉý¤¬ 8 ¥¤¥ó¥Á¡¢¹â¤µ¤¬Ìµ¸ÂÂç¡¢¤È¤¤¤¦»ØÄê¤â²Äǽ¤Ç¤¹¡£
+
+ (e.g.) /maxsize [ 8.0 0 ]
+
+ »ØÄꤵ¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤Ë¤Ï½Ä²£ÁÐÊý¸þ¤¬Ìµ¸ÂÂç¤Ç¤¹¡£
+
+ ½ÐÎϤµ¤ì¤ë¥¤¥á¡¼¥¸¤Î¥µ¥¤¥º¤¬Íѻ極¥¤¥º¤«¤é¥Þ¡¼¥¸¥ó¤òº¹¤·°ú¤¤¤¿
+ ¥µ¥¤¥º¤è¤êÂ礭¤¤¤È¤­¤Ë½ÐÎÏ¥¤¥á¡¼¥¸¤Î¥µ¥¤¥º¤ò¤³¤³¤ÇÀßÄꤵ¤ì¤¿ÃͤË
+ ÃÖ¤­´¹¤¨¤Æ½èÍý¤µ¤ì¤Þ¤¹ (ÀßÄꤵ¤ì¤¿Ãͤ¬ 0 °Ê²¼¤Ç¤¢¤ì¤Ð¤³¤ÎÃÖ¤­´¹
+ ¤¨¤Ï¹Ô¤ï¤ì¤Þ¤»¤ó)¡£
+
+(7) /verbose
+
+ ¡¦ ¡ÔÀßÄêË¡¡Õ
+
+ /verbose ÏÀÍýÃÍ
+
+ ¡¦ ¡ÔÀßÄêÎã¡Õ
+
+ /verbose true
+
+ ¡¦ ¡ÔÀâÌÀ¡Õ
+
+ ¥Ç¥Ð¥¤¥¹¥É¥é¥¤¥Ð¤ÎÆ°ºî¾õÂÖ¤ò¾Ü¤·¤¯É½¼¨¤¹¤ë¤«¤É¤¦¤«¤Î»ØÄê¤Ç¤¹¡£½Ð
+ ÎÏÃæ¤Î¥Ú¡¼¥¸¤ÎÄ̤·ÈÖ¹æ¤ä½ÐÎÏ¥³¡¼¥É¤Î¥Ð¥¤¥È¿ô¤Ê¤É¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£
+
+ ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï false (off) ¤Ç¤¹ (²¿¤âɽ¼¨¤µ¤ì¤Þ¤»¤ó)¡£
+
+ ¤³¤Î¹àÌܤ¬ true (on) ¤ËÀßÄꤷ¤Æ¤¢¤Ã¤Æ¤â¡¢Ghostscript ¤Îµ¯Æ°¥ª¥×
+ ¥·¥ç¥ó¤Ç -q ¥ª¥×¥·¥ç¥ó (QUIET) ¤¬»ØÄꤷ¤Æ¤¢¤ì¤Ð¡¢¤³¤Î¹àÌܤÎÀßÄê
+ ¤¬ off ¤Î¾ì¹ç¤ÈƱ¤¸Æ°ºî¤ò¤·¤Þ¤¹¡£
+
+-----------------------------
+¡ú 4.4 ´Ä¶­ÀßÄê¥Õ¥¡¥¤¥ë¤Î»ØÄê
+-----------------------------
+ dmprt ¥É¥é¥¤¥Ð¤¬ÁȤ߹þ¤Þ¤ì¤¿ Ghostscript ¤Ïµ¯Æ°»þ¤Ë dmp_init.ps µÚ¤Ó
+dmp_site.ps ¤ò Ghostscript ¤Î¥Õ¥¡¥¤¥ë¸¡º÷¥Ñ¥¹¾å¤«¤éÆɤ߹þ¤ß¤Þ¤¹¡£¤³¤ì¤é
+¤Î¥Õ¥¡¥¤¥ë¤Ï Ghostscript ¤Î¥Õ¥¡¥¤¥ë¸¡º÷¥Ñ¥¹¾å¤ËÃÖ¤¤¤Æ¤¯¤À¤µ¤¤¡£
+dmp_site.ps(´Ä¶­ÄêµÁ¥Õ¥¡¥¤¥ë) ¤¬¸«¤Ä¤«¤é¤Ê¤±¤ì¤ÐÆɤ߹þ¤ß¤òÄü¤á¤Æ¥Ç¥Õ¥©¥ë
+¥È¤ÎÀßÄê (ESC/P 24 pin) ¤òÍѤ¤¤Þ¤¹¡£
+
+ dmp_site.ps ¤ÎÂå¤ï¤ê¤ËÊ̤Υե¡¥¤¥ë¤ò»ØÄꤷ¤ÆÆɤ߹þ¤à¤³¤È¤â²Äǽ¤Ç¤¹¡£
+Ghostscript µ¯Æ°»þ¤Ë¤½¤Î¥Õ¥¡¥¤¥ë̾¤ò -sDMPCONFIG= ¥Õ¥¡¥¤¥ë̾ ¤Î¤è¤¦¤Ë»Ø
+Äꤷ¤Æ¤¯¤À¤µ¤¤¡£¤³¤Î¾ì¹ç¤Ë»ØÄꤹ¤ë¥Õ¥¡¥¤¥ë¤òÃÖ¤¯¥Ç¥£¥ì¥¯¥È¥ê¤â
+dmp_init.ps ¤Ê¤É¤ÈƱÍͤǤ¹¡£
+
+ (e.g.) gs -sDEVICE=dmprt -sDMPCONFIG=dmp_local.ps -dNOPAUSE -- tiger.ps
+
+
+========================================================================
+¡ü £µ¡¥ »ÈÍÑË¡
+========================================================================
+
+ dmp_site.ps ¤ÎÀßÄê°Ê³°¤Ë¤ÏÆÃÊ̤ʤ³¤È¤ò¹Ô¤¦É¬ÍפϤ¢¤ê¤Þ¤»¤ó¡£gs ¤Î¥Ç¥Ð
+¥¤¥¹¤È¤·¤Æ "dmprt" ¤ò»ØÄꤷ¤Æµ¯Æ°¤·¤Æ¤¯¤À¤µ¤¤ (¾¤Î¥Ç¥Ð¥¤¥¹¥É¥é¥¤¥Ð¤ÈƱ
+ÍͤλȤ¤Êý)¡£
+
+ (e.g.) gs -sDEVICE=dmprt sample.ps
+
+
+========================================================================
+¡ü £¶¡¥ ¼Õ¼­
+========================================================================
+
+ ¡þ PC-VAN SSCIENCE ¤Î FKR ¤µ¤ó¤Ë¤Ï 386BSD ¤Ç¤ÎÍøÍѤˤª¤±¤ëÉÔ¶ñ¹ç¤ò½¤Àµ
+ ¤·¤Æ¤¤¤¿¤À¤­¤Þ¤·¤¿¡£
+
+ ¡þ CCITTFax ¥¨¥ó¥³¡¼¥À¤Î¼ÂÁõ¤Ë¤¢¤¿¤Ã¤Æ¤Ï¡¢¤½¤Î¥³¡¼¥É¤ò Godohoji ¤µ¤óµÚ
+ ¤Ó SHIMA ¤µ¤ó¤Ë¤è¤ë Fax Endode/Decode ¥é¥¤¥Ö¥é¥êÃæ¤Î¤â¤Î¤ò¸µ¤Ë¤µ¤»¤Æ
+ ¤¤¤¿¤À¤­¤Þ¤·¤¿¡£
+
+ ¡þ ¤½¤·¤Æ²¿¤è¤ê dviprt/dviout ¤È¤¤¤¦¹âµ¡Ç½ DVI ¥É¥é¥¤¥Ð¤ò³«È¯¡¦³ÈÄ¥¤·¤Æ
+ ²¼¤µ¤Ã¤¿ PC-VAN SSCIENCE ¤Î SHIMA ¤µ¤ó¤ò¤Ï¤¸¤á¤È¤¹¤ë³«È¯¼Ô¤ÎÊý¡¹¤Ë´¶
+ ¼Õ¤·¤Þ¤¹¡£
+
+
+========================================================================
+¡ü £·¡¥ ¥³¥ó¥Ñ¥¤¥ë
+========================================================================
+
+ °Ê²¼¤Î¼ê½ç¤Ç¥³¥ó¥Ñ¥¤¥ë¤·¤Æ²¼¤µ¤¤¡£
+
+(1) gdevdmpr.c¡¢dviprlib.c¡¢dviprlib.h ¤ò¾¤Î Ghostscript ¤Î¥½¡¼¥¹¤ÈƱ¤¸
+ ¥Ç¥£¥ì¥¯¥È¥ê¤ËÃÖ¤¯¡£
+
+(2) devs.mak ¤Ë gdevdmpr.mak ¤ÎÆâÍƤòÄɲ乤롣
+
+(3) *-head.mak Ãæ¤Î¥Þ¥¯¥í "DEVICE_DEVS?" ¤Ë "dmprt.dev" ¤ò²Ã¤¨¤ë¡£
+
+(4) tar_cat ¤ò¼Â¹Ô¤¹¤ë¡£
+
+(5) make ¤¹¤ë¡£
+
+
+========================================================================
+¡ü £¸¡¥ Ãøºî¸¢¡¦Êݾڡ¦ºÆÇÛÉÛ¡¦²þÊÑ
+========================================================================
+
+ Ãøºî¸¢¤Ïºî¼Ô¤Ç¤¢¤ëÞÉ»³ (TPM03937@pcvan.or.jp) ¤¬ÊÝÍ­¤·¤Þ¤¹¡£Ëܥѥ屡¼
+¥¸¤Ë´Þ¤Þ¤ì¤ëÁ´¤Æ¤Î¥×¥í¥°¥é¥àµÚ¤Ó¥É¥­¥å¥á¥ó¥È¤Ï̵ÊݾڤǤ¹¡£
+
+ ÊݾڵڤӺÆÇÛÉÛ¡¦²þÊѤ˴ؤ¹¤ë¾ò·ï¤ÏÁ´¤Æ GNU General Public License (GNU
+GPL) ¤Ë½¾¤¤¤Þ¤¹¡£GNU GPL ¤ÏÉÕ°¤Î COPYING ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤Þ
+¤¹¡£
+
+
+========================================================================
+¡ü £¸¡¥ ÍúÎò
+========================================================================
+
+1997.5.13.
+
+ ¡þ Ghostscript 4.03 ¤ËÂбþ¡£
+ ¡þ *.src ¤¬Àµ¤·¤¯Æɤ߹þ¤á¤Ê¤¤¾ì¹ç (line_feed, form_feed ¤¬Ì¤ÄêµÁ¤Î *.src)
+ ¤¬¤¢¤ëÉÔ¶ñ¹ç¤ò½¤Àµ¡£
+ ¡þ -sDMPSITE ¤Î½èÍý¤¬Àµ¤·¤¯¤ª¤³¤Ê¤ï¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿ÉÔ¶ñ¹ç¤ò½¤Àµ¡£
+ ¡þ setpagedevice ¥ª¥Ú¥ì¡¼¥¿¤ÇÀßÄê²Äǽ¤ÊÀßÄê¹àÌܤο¤¯¤òºï½ü¡£
+ ¡þ DJ's GPP ¤Ø¤ÎÂбþ¤òÅà·ë (³«È¯´Ä¶­¤È²Ë¤¬¤Ê¤¯¤Ê¤Ã¤¿¤¿¤á)¡£
+ ¡þ testpage.ps ¤¬ Level 2 ¤Ç¤¦¤Þ¤¯½ÐÎϤǤ­¤Ê¤«¤Ã¤¿ÉÔ¶ñ¹ç¤ò½¤Àµ¡£
+
+
+ ÞÉ»³ ÏÂŵ (ASAYAMA Kazunori)
+ TPM03937@pcvan.or.jp
+ GHF01532@niftyserve.or.jp
+ asayama@vsp.cpg.sony.co.jp
diff --git a/contrib/japanese/doc/gdevfmlbp.txt b/contrib/japanese/doc/gdevfmlbp.txt
new file mode 100644
index 00000000..782867b7
--- /dev/null
+++ b/contrib/japanese/doc/gdevfmlbp.txt
@@ -0,0 +1,81 @@
+
+ gdevfmlbp.c - Fujitsu FMLBP2xx ÍѥǥХ¤¥¹¥É¥é¥¤¥Ð
+
+ Version 1.2 1998/03/30
+
+¢¡ ¤Ï¤¸¤á¤Ë
+
+ ¤³¤ì¤Ï¡¢ghostscript 2.6.1 ¤Ç¡¢FMLBP2xx ·Ï¤Î¥Ú¡¼¥¸¥×¥ê¥ó¥¿¤ò»È¤¦¤¿¤á¤Î
+ ¥Ç¥Ð¥¤¥¹¥É¥é¥¤¥Ð¤Ç¤¹¡£
+
+
+¢¡ ¥¤¥ó¥¹¥È¡¼¥ëÊýË¡
+
+ 1. gdevfmlbp.c ¤ò ghostscript 2.6.1 ¤Î¥½¡¼¥¹¥×¥í¥°¥é¥à¤òŸ³«¤·¤¿
+ ¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥³¥Ô¡¼¤·¤Þ¤¹¡£
+
+ 2. Makefile ¤Ë gdevfmlbp.mak ¤òÄɲä·¤Þ¤¹¡£
+
+ 3. Makefile ¤Î DEVICE_DEVS ¤Ë fmlbp.dev ¤ò²Ã¤¨¤Þ¤¹¡£
+
+ Îã: DEVICE_DEVS=x11.dev fmlbp.dev
+ ~~~~~~~~~
+ 4. make ¥³¥Þ¥ó¥É¤Ç gs ¤ò¥³¥ó¥Ñ¥¤¥ë¤·¡¢¥¤¥ó¥¹¥È¡¼¥ë¤·¤Þ¤¹¡£
+
+
+¢¡ »ÈÍÑÊýË¡
+
+ ¥Ç¥Ð¥¤¥¹¥É¥é¥¤¥Ð¤ÎÁªÂò¤Ï -sDEVICE ¥ª¥×¥·¥ç¥ó¤Ë¤è¤Ã¤Æ¹Ô¤Ê¤¤¤Þ¤¹¡£
+
+ Îã: gs -sDEVICE=fmlbp
+
+ (Ãí°Õ)¥×¥ê¥ó¥¿ËÜÂΤΥ¨¥ß¥å¥ì¡¼¥·¥ç¥óÀßÄê¤ò FM¥â¡¼¥É¤ËÀßÄꤷ¤Æ¤¯¤À¤µ¤¤¡£
+
+ ¥Ç¥Õ¥©¥ë¥È¤Î²òÁüÅÙ¤Ï 400dpi ¤Ç¤¹¡£240dpi ¤Ç°õºþ¤¹¤ë¾ì¹ç¤Ï¡¢¼¡¤Î¤è¤¦¤Ë
+ -r ¥ª¥×¥·¥ç¥ó¤Ç»ØÄꤷ¤Þ¤¹¡£
+
+ Îã: gs -sDEVICE=fmlbp -r240
+
+ (Ãí°Õ) -r ¥ª¥×¥·¥ç¥ó¤ÎÃͤϥÁ¥§¥Ã¥¯¤·¤Æ¤¤¤Þ¤»¤ó¡£
+
+ Íѻ極¥¤¥º¤ò»ØÄꤹ¤ë¾ì¹ç¤Ë¤Ï¡¢-sPAPERSIZE ¥ª¥×¥·¥ç¥ó¤Ç»ØÄꤷ¤Þ¤¹¡£
+ »ØÄê²Äǽ¤Ê¥µ¥¤¥º¤Ï¡¢a3, a4, a5, b4, b5, legal, letter ¤Ç¤¹¡£
+ ¥Ç¥Õ¥©¥ë¥È¤ÎÍÑ»æ¤Ï a4 ¤Ç¤¹¡£a3 ¤ò»ØÄꤹ¤ë»þ¤Ï¼¡¤Î¤è¤¦¤Ë»ØÄꤷ¤Þ¤¹¡£
+
+ Îã: gs -sDEVICE=fmlbp -sPAPERSIZE=a3
+
+
+¢¡ ¥Ð¥°/À©¸Â»ö¹à
+
+ o Æ°ºî³Îǧ¤Ï¡¢Solaris¾å¤Î ghostscript 2.6.1j ¤È FMLBP226 ¤Ç¹Ô¤Ê¤Ã¤Æ¤Þ¤¹¡£
+
+ o ¤ª¤½¤é¤¯ Aladdin ÈǤΠghostcript 5.01 ¤Ç¤âÆ°ºî¤¹¤ë¤È»×¤¤¤Þ¤¹¤¬¡¢³Îǧ
+ ¤·¤Æ¤¤¤Þ¤»¤ó¡£5.01 ¤Ç¤Ï gdevfmlbp.mk5 ¤ò gdevfmlbp.mak ¤ÎÂå¤ê¤Ë»î¤·¤Æ
+ ¤ß¤Æ¤¯¤À¤µ¤¤¡£
+
+ o ÍÑ»æ¤Ï a3, a4, a5, b4, b5, legal, letter, ¥Ï¥¬¥­ ¤ËÂбþ¤µ¤»¤Þ¤·¤¿¤¬¡¢
+ a4 °Ê³°¤Ï¡¢¤¢¤Þ¤ê¥Æ¥¹¥È¤·¤Æ¤¤¤Þ¤»¤ó¤Î¤Ç¡¢ÌäÂ꤬¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
+
+
+¢¡ ¤ª¤ï¤ê¤Ë
+
+ o ¤³¤Î FMLBP2xx Íѥɥ饤¥Ð¤Ï¡¢À®¾¾¹¨»á¤Î ESC/Page Íѥɥ饤¥Ð gdevepag ¤ò
+ ¸åÆ£ÏÂÌлá <goto@statabo.rim.or.jp> ¤¬¡¢FMLBP2xx ÍѤ˲þ¤¤·¤¿Êª¤Ç¤¹¡£
+ ½¤Àµ¤ª¤è¤Ó³ÈÄ¥¤ò Ã滳Àµ°ì <naka@fadev.fvd.fujitsu.co.jp> ¤¬¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£
+
+ ¤Ê¤ª¡¢ESC/Page Íѥɥ饤¥Ð¤Ï¡¢Tom Quinn»á <trq@prg.oxford.ac.uk> ºîÀ®¤Î
+ lbp8 Íѥɥ饤¥Ð¤òÀ®¾¾¹¨»á <nari@lsi.tmg.nec.co.jp> ¤¬¡¢ESC/Page ÍѤË
+ ²þ¤¤·¤¿Êª¤Ç¤¹¡£
+
+ o ÇÛÉÛ¾ò·ï¤Ï¡¢¤â¤È¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ÈƱÍÍ GPL ¤Ë½¾¤¤¤Þ¤¹¡£
+
+ o »ä¤âÉÙ»ÎÄÌVLSI(³ô)¤âÉÙ»ÎÄÌ(³ô)¤â¡¢ËÜ¥½¥Õ¥È¥¦¥§¥¢¤Î½¤Àµ¤½¤Î¾¡¢Ç¡²¿¤Ê¤ë
+ Êݼé¤Ë¤Ä¤¤¤Æ¤âµÁ̳¤òÉ餤¤Þ¤»¤ó¡£¤Þ¤¿¡¢ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ò»ÈÍѤ¹¤ë¤³¤È¤Ë
+ ¤è¤Ã¤ÆÇ¡²¿¤Ê¤ë»³²¤¬À¸¤¸¤Æ¤â°ìÀÚÀÕǤ¤òÉ餤¤Þ¤»¤ó¡£
+ ³Æ¼«¤ÎÀÕǤ¤Ç¥×¥í¥°¥é¥à¤ò¤´»ÈÍѤ¯¤À¤µ¤¤¡£
+
+ o ¤´°Õ¸«¡¦¤´Í×˾¤Ê¤É¤Ï¡¢naka@fadev.fvd.fujitsu.co.jp ¤Ø¤ª´ê¤¤¤·¤Þ¤¹¡£
+
+
+ ÉÙ»ÎÄÌVLSI(³ô) Ã滳 Àµ°ì <naka@fadev.fvd.fujitsu.co.jp>
+[EOF]
diff --git a/contrib/japanese/doc/gdevj100.txt b/contrib/japanese/doc/gdevj100.txt
new file mode 100644
index 00000000..78b34cc7
--- /dev/null
+++ b/contrib/japanese/doc/gdevj100.txt
@@ -0,0 +1,28 @@
+
+ gdevj100.c - Star JJ-100 ÍѥǥХ¤¥¹¥É¥é¥¤¥Ð
+
+
+¡û¥¤¥ó¥¹¥È¡¼¥ëÊýË¡
+
+1. gdevj100.c ¤ò gs261 ¤Î¥½¡¼¥¹¥×¥í¥°¥é¥à¤¬¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥³¥Ô¡¼¤·
+¤Æ²¼¤µ¤¤¡£
+
+2. Makefile ¤Ë gdevj100.mak ¤òÄɲ䷤Ʋ¼¤µ¤¤¡£
+
+3. Makefile ¤Î DEVICE_DEVS ¤Ë jj100.dev ¤ò²Ã¤¨¤Æ²¼¤µ¤¤¡£
+
+ Îã) DEVICE_DEVS=pc98.dev jj100.dev
+ ^^^^^^^^^
+4. make ¥³¥Þ¥ó¥É¤Ç gs ¤ò¥³¥ó¥Ñ¥¤¥ë¤·¡¢¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ²¼¤µ¤¤¡£
+
+
+¡û»È¤¤Êý
+
+¡ö¥Ç¥Ð¥¤¥¹¤ÎÁªÂò¤Ï -sDEVICE ¥ª¥×¥·¥ç¥ó¤Ë¤è¤Ã¤Æ¹Ô¤Ê¤¤¤Þ¤¹¡£
+
+ Îã) gs -sDEVICE=jj100 (jj100¤ò»ØÄê)
+ gs -sDEVICE=pc98 (pc98¤ò»ØÄê)
+
+
+
+ ²£»³ÏÂͳ (caz@psq.mei.co.jp)
diff --git a/contrib/japanese/doc/gdevlbp3.txt b/contrib/japanese/doc/gdevlbp3.txt
new file mode 100644
index 00000000..df023fd8
--- /dev/null
+++ b/contrib/japanese/doc/gdevlbp3.txt
@@ -0,0 +1,37 @@
++---------------------------------------------------------------------+
+| |
+| $BI8=`(B/$B%U%!%$%s%$%a!<%8%b!<%I(B $BBP1~(B Ghostscript $B%G%P%$%9%I%i%$%P(B |
+| Ver 1.0.0 1999/05/23 |
++---------------------------------------------------------------------+
+
+$B@bL@(B
+ LBP-310/320/Pro $B$N%$%a!<%8%b!<%I$r;H$C$F=PNO$r9T$&%I%i%$%P$G$9!#(B
+ LIPS3 $B$G$N=PNO;~$KHf$Y$F(B 600dpi$B$N9b2rA|EY$,;H$($k$H$$$&MxE@$,$"$j$^$9!#(B
+
+$B%$%s%9%H!<%kJ}K!(B
+ 1. Ghostscript $B$N%=!<%9%G%#%l%/%H%j$K(B gdevlbp3.c $B$r%3%T!<$9$k!#(B
+ 2a. 5.10 $B0JA0$N>l9g$O(B Makefile $B$K(B gdevlbp3.mak $B$rDI2C$9$k!#(B
+ 2b. 5.50 $B0J9_$N>l9g$O(B contrib.mak $B$K(B gdevlbp3.mak.gs55 $B$rDI2C$9$k!#(B
+ 3. Makefile $B$N(B DEVICE_DEVS $B$K(B lbp310.dev $B$H(B lbp320.dev $B$rDI2C$9$k!#(B
+ 4. Ghostscript $B$r%3%s%Q%$%k$9$k!#(B
+
+$B;HMQJ}K!(B
+ $B%G%P%$%9L>$K$O(B lbp310 $B$^$?$O(B lbp320 $B$r;XDj$7$F$/$@$5$$!#(B
+ [ $BNc(B ]
+ gs -sDEVICE=lbp310 -sOutputFile=|lpr -dNOPAUSE -dBATCH -q hoge.ps
+ $B2rA|EY$O(B -r $B$G;XDj$7$F$/$@$5$$!#(B
+ $B;XDj$G$-$k2rA|EY$O(B300,600$B$G%G%U%)%k%H$O(B600$B$G$9!#(B
+
+ $B!v$3$N%I%i%$%P$O0J2<$N4D6-$GF0:n3NG'$5$l$F$$$^$9!#(B
+ FreeBSD 4.0-current/3.1-stable
+ XFree86 3.3.3.1
+ LBP-310
+ Ghostscript 5.10/5.50($B6&$K(BVFlib$BBP1~(B)
+ 2.x $B$G$O@5>o$K%3%s%Q%$%k$G$-$J$$$H;W$$$^$9!#(B
+ $B!v(BB5$B%5%$%:$OF|K\%5%$%:$G$9!#(BGhostscript $B$N(B B5 $B$O(B ISO B5 $B$G$9$N$G!"0u;z(B
+ $B7k2L$,>/$7:8>e$K4s$C$?46$8$K$J$j$^$9!#(B
+ $B!v(BLBP-320 $B$K$D$$$F$OF0:n$9$k$H$$$&Js9p$r$$$?$@$-$^$7$?$,!"$^$@%P%0$,(B
+ $B;D$C$F$$$k$+$b$7$l$^$;$s!#(B
+ $B!v0l1~(B GPL $B=`5r$H$$$&$3$H$G;HMQ$7$F$/$@$5$$!#(B
+----------------------------------------
+$B@>B<(B $BD>Li(B <naoya@mahoroba.ne.jp> \ No newline at end of file
diff --git a/contrib/japanese/doc/gdevmd2k.txt b/contrib/japanese/doc/gdevmd2k.txt
new file mode 100644
index 00000000..879cdfb2
--- /dev/null
+++ b/contrib/japanese/doc/gdevmd2k.txt
@@ -0,0 +1,179 @@
+
+ ALPS MD series printer driver for Ghostscript 5.xx
+
+ 1999/ 4/18
+ 1999/ 5/ 2 ¹¹¿·
+
+³µÍ×
+---
+ Ëܥɥ饤¥Ð¤Ï Ghostscript 5.10/5.50(/5.82) ¤Ç ALPS MD ¥·¥ê¡¼¥º¥×¥ê¥ó¥¿¡¼¤Î
+½ÐÎϤò¤¹¤ë¤¿¤á¤Î¥É¥é¥¤¥Ð¤Ç¤¹¡£°Ê²¼¤Î¤è¤¦¤Êµ¡Ç½¤òÈ÷¤¨¤Æ¤¤¤Þ¤¹¡£
+
+ ¥«¥é¡¼¡¿¥â¥Î¥¯¥í°õºþ¤¬²Äǽ
+ 300dpi, 600dpi, 1200x600dpi ¤ËÂбþ
+ ÍÑ»æ¤Î¼ïÎࡦ¥µ¥¤¥º¤Î»ØÄ꤬²Äǽ
+ Floyd-Steinberg dithering ¤¬²Äǽ
+ dithering »ÈÍÑ»þ¤Ë¿§¤ÎÇ»ÅÙÄ´À°¤¬²Äǽ
+
+¸½ºß¡¢MD-2000/2010/4000/1300/1500/5000 ¤ÇÆ°ºî¤¬³Îǧ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£(md2k¤Î¤ß)
+
+
+¥¤¥ó¥¹¥È¡¼¥ë
+---
+1. ghostscript ¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤Î¤ËɬÍפʥ½¡¼¥¹Îà¤òŸ³«¤·¡¢
+ Ŭµ¹É¬ÍפʥѥåÁ¤òÅö¤Æ¤Þ¤¹¡£
+2. gdevmd2k.c ¤ò gs ¤Î¥½¡¼¥¹¤Î¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥³¥Ô¡¼¤·¤Þ¤¹¡£
+3. gs5.10 ¤Î¾ì¹ç¤Ï¡¢gdevmd2k.dev ¤ò Makefile ¤ËÄɲä·¤Þ¤¹¡£
+ gs5.50 ¤Î¾ì¹ç¤Ï¡¢gdevmd2k.mak-5.50 ¤ò contrib.mak ¤ËÄɲä·¤Þ¤¹¡£
+ (gs5.8x ¤Î¾ì¹ç¤Ï¡¢gdevmd2k.mak-5.8x ¤ò contrib.mak ¤ËÄɲÃ)
+4. ¼«Ê¬¤Î¥µ¥¤¥ÈÍÑ¤Ë Makefile ¤òÄ´À°¤·¡¢ DEVICE_DEVS ¤Ë md2k.dev ¤òÄɲä·¤Þ¤¹¡£
+ MD-5000 ¤ò»ÈÍѤ¹¤ë¾ì¹ç¤Ï¡¢md5k.dev ¤òÄɲä·¤Þ¤¹¡£
+5. make
+
+
+»ÈÍÑÊý
+---
+ ¥Ç¥Ð¥¤¥¹¤Î»ØÄê
+ gs ¤ò¼Â¹Ô¤¹¤ëºÝ¤Ë¡¢-sDEVICE ¥ª¥×¥·¥ç¥ó¤Ç°Ê²¼¤Î¤¤¤º¤ì¤«¤Î¥Ç¥Ð¥¤¥¹¤ò
+ ÁªÂò¤¹¤ë¤³¤È¤Ç¡¢ALPS MD ¥×¥ê¥ó¥¿¡¼ÍѤνÐÎϤ¬À¸À®¤µ¤ì¤Þ¤¹¡£
+
+ -sDEVICE=md2k
+ MD-2000/4000/1000 Åù¡¢MD-5000 °ÊÁ°¤Î MD ¥·¥ê¡¼¥º¤ËÂбþ¤·¤¿
+ ·Á¼°¤Î½ÐÎϤò¹Ô¤¤¤Þ¤¹¡£(MD-5000 ¤Ç¤â½ÐÎϲÄǽ¤Ç¤¹)
+ -sDEVICE=md5k
+ MD-5000 ÀìÍѤηÁ¼°¤Ç½ÐÎϤ·¤Þ¤¹¡£¥¨¥³¥Ö¥é¥Ã¥¯¥â¡¼¥É¤ò»ÈÍѤ¹¤ë
+ ¾ì¹ç¤Ï¡¢¤³¤Á¤é¤ò»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
+ (Ãí) md5k.dev ¤Ï99/5/2¸½ºß¡¢¼ÂºÝ¤Î¥×¥ê¥ó¥¿¡¼¤Ç¥Æ¥¹¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£
+ MD-5000 ¤Ç¡¢ËܥǥХ¤¥¹¤ò¥Æ¥¹¥È¤·¤Æ²¼¤µ¤Ã¤¿Êý¤ÏÀ§Èó·ë²Ì¤ò
+ ¤ªÃΤ餻²¼¤µ¤¤¡£
+
+ ¥«¥é¡¼¡¿¥â¥Î¥¯¥í¡¦dithering ¤ÎÁªÂò
+ -dBitsPerPixel=1 Ä̾ï¤Î¥â¥Î¥¯¥í°õºþ
+ -dBitsPerPixel=4 Ä̾ï¤Î¥«¥é¡¼°õºþ (default)
+ -dBitsPerPixel=8 Floyd-Steinberg dithering ¤òÍѤ¤¤¿¥â¥Î¥¯¥í°õºþ
+ -dBitsPerPixel=32 Floyd-Steinberg dithering ¤òÍѤ¤¤¿¥«¥é¡¼°õºþ
+
+ (Îã) tiger.ps ¤ò¥â¥Î¥¯¥í¡¦dithering »ÈÍѤǽÐÎÏ
+ gs -q -dNOPAUSE -sDEVICE=md2k -dBitsPerPixel=8 \
+ -sOutputFile=- tiger.ps -c quit | lpr
+
+ -dColor, -dDither ¤ò»ÈÍѤ·¤Æ¤âƱÍͤÎÀßÄ꤬²Äǽ¤Ç¤¹¡£
+ -dColor=false ¥â¥Î¥¯¥í
+ -dColor(=true) ¥«¥é¡¼
+ -dDither=false dithering¤·¤Ê¤¤
+ -dDither(=true) dithering ¤ò»ÈÍÑ
+
+ * ¥«¥é¡¼°õºþ¤òÁªÂò¤·¤Æ¤â PS ¥Õ¥¡¥¤¥ë¤¬¥â¥Î¥¯¥í¤Î¾ì¹ç¤Ë¤Ï¡¢
+ CMY¤Î¥¤¥ó¥¯¥ê¥Ü¥ó¤Ï»ÈÍѤ·¤Þ¤»¤ó¡£
+ * dithering ¤ò»ÈÍѤ¹¤ì¤Ð¡¢¼Ì¿¿Åù¤Î²èÁü¤Ï¤è¤êåºÎï¤Ë°õºþ¤µ¤ì¤ë¤Ï¤º
+ ¤Ç¤¹¤¬¡¢²èÁü¤Ë¤è¤Ã¤Æ¤Ï»ÈÍѤ·¤Ê¤¤Êý¤¬åºÎï¤Ê¾ì¹ç¤â¤¢¤ê¤Þ¤¹¡£
+
+ ²òÁüÅÙ¤ÎÁªÂò
+ -r300 300dpi
+ -r600 600dpi (default)
+ -r1200x600 1200x600dpi
+
+ (Îã) 1200x600dpi ¤Ç½ÐÎÏ
+ gs -q -dNOPAUSE -sDEVICE=md2k -r1200x600 -dBitsPerPixel=1 \
+ -sOutputFile=- tiger.ps -c quit | lpr
+
+ * MD-2000 ¤Ç¤â¡¢¥«¥é¡¼ 1200x600dpi ¤¬°ì±þ»ØÄê¤Ç¤­¤Þ¤¹¤¬¡¢
+ ²è¼Á¤Ï¤Û¤È¤ó¤É 600dpi ¤ÈÊѤï¤ê¤Þ¤»¤ó¡£
+
+ ÍÑ»æ»ØÄê
+ ÍÑ»æ¤Î¼ïÎà¤ò»ØÄꤷ¤Þ¤¹¡£Windows ¤Î¥É¥é¥¤¥Ð¤È°Û¤Ê¤ê¡¢
+ ²òÁüÅÙ¤ÏÍÑ»æ¤Î¼ïÎफ¤é¼«Æ°Åª¤Ë·èÄꤵ¤ì¤Þ¤»¤ó¡£
+ ²òÁüÅÙ¤Ï -r ¥ª¥×¥·¥ç¥ó¤ÇÊÌÅÓ»ØÄꤷ¤Æ²¼¤µ¤¤¡£
+ (Ãí) ¥¢¥¤¥í¥ó¥·¡¼¥ë¡¢¥ì¥Ù¥«¥Õ¥ê¡¼Åù¡¢Æ°ºî³Îǧ¤·¤Æ¤¤¤Ê¤¤¤â¤Î¤â
+ ¤¢¤ê¤Þ¤¹¡£
+
+ -sMediaType=PlainPaper ¥³¥Ô¡¼»æ (default)
+ -sMediaType=IronSeal ¥¢¥¤¥í¥ó¥·¡¼¥ë
+ -sMediaType=RebecaFree ¥ì¥Ù¥«¥Õ¥ê¡¼
+ -sMediaType=CardBoard ¸ü»æ
+ -sMediaType=PostCard ¤Ï¤¬¤­
+ -sMediaType=FinePaper ¾å¼Á»æ
+ -sMediaType=CoatedFilm ¸÷Âô¥Õ¥£¥ë¥à
+ -sMediaType=GlossyPaper ¸÷Âô»æ
+ -sMediaType=TransparencyFilm OHPÍÑ»æ (MD-2000 °Ê³°)
+ -sMediaType=OHP ¡·
+ -sMediaType=OHP_MD2000 OHP (MD-2000¤ÇÀìÍÑ¥¤¥ó¥¯¤ò»ÈÍѤ¹¤ë¾ì¹ç)
+
+ Íѻ極¥¤¥º¤Î»ØÄê
+ -sPAPERSIZE=letter ¥ì¥¿¡¼¥µ¥¤¥º
+ -sPAPERSIZE=a4 A4
+ -sPAPERSIZE=b5 B5
+ -sPAPERSIZE=postcard ¤Ï¤¬¤­ (*)
+ -d.MediaSize='{xx yy}' Ǥ°Õ¥µ¥¤¥º¤Î»ØÄê (xx, yy ¤Ï 1/72 inch)
+
+ (*) gdevlips ¤Ë´Þ¤Þ¤ì¤ë gs_statd.ps ¤Î¥Ñ¥Ã¥Á¤òÅö¤Æ¤¿¾ì¹ç¤Ë
+ »ÈÍѲÄǽ
+
+ ¿§¤ÎÇ»ÅÙÄ´À°
+ dithering ¤ò»ÈÍѤ¹¤ë¾ì¹ç¤Î¤ß¡¢°Ê²¼¤Îoption¤Çǻø¤ÎÄ´À°¤¬²Äǽ¡£
+ ¿ô¤¬Â礭¤¤Äø¡¢¿§¤¬Ç»¤¯½ÐÎϤµ¤ì¤Þ¤¹¡£
+
+ -dBlack=0-2048 (default 1024)
+ -dCyan=0-2048 (default 1024)
+ -dMagenta=0-2048 (default 1024)
+ -dYellow=0-2048 (default 1024)
+
+ (Îã) ¥·¥¢¥ó¤òÇ»¤¯¡¢¥Þ¥¼¥ó¥¿¤òÇö¤¯°õºþ¤¹¤ë
+ gs -q -dNOPAUSE -sDEVICE=md2k -dBitsPerPixel=32 \
+ -dCyan=1200 -dMagenta=800 -sOutputFile=- tiger.ps -c quit
+
+ ¤½¤Î¾
+ -dManualFeed ¼êº¹¤·°õºþ¤¹¤ë¾ì¹ç¤Ë»ØÄꤷ¤Þ¤¹¡£
+
+ -dEcoBlack ¥¨¥³¥Ö¥é¥Ã¥¯°õºþ¤ò¹Ô¤¤¤Þ¤¹¡£
+ ¥Ç¥Ð¥¤¥¹¤Ë md5k ¤ò»ÈÍѤ·¤¿»þ¤Î¤ßÍ­¸ú¤Ç¤¹¡£
+
+ -dReverseSide ΢Ì̤˰õºþ¤ò¹Ô¤¦ºÝ¤Ë¡¢¥«¡¼¥ë¶ºÀµ¤ò¶Ø»ß¤¹¤ë¤¿¤á
+ »ØÄꤷ¤Þ¤¹¡£
+
+
+Êѹ¹ÍúÎò
+---
+1999-05-02 Ver.0.2a
+ * MD-5000 ÍѥǥХ¤¥¹ md5k ¤ÎÄɲÃ
+ * ÍÑ»æ»ØÄꥪ¥×¥·¥ç¥ó -sMediaType ¤ÎÄɲÃ
+ * ¥ª¥×¥·¥ç¥ó -dManualFeed, -dEcoBlack, -dReverseSide ¤ÎÄɲÃ
+ * ¥«¥é¡¼¡¦dithering ¤Î̵ͭ¤ò -dBitsPerPixel ¤Ç»ØÄꤹ¤ë¤è¤¦
+ README ¤òÊѹ¹
+ * -dColor, -dDither ¤ò int ·¿¤«¤é bool ·¿¤ËÊѹ¹
+ * -dBitsPerPixel=1 ¤Î»þ¡¢Í¾Çò¤ò¥¹¥­¥Ã¥×¤·¤Ê¤¤¥Ð¥°¤ò½¤Àµ
+ * Íѻ極¥¤¥º¤Ë letter ¤òÄɲÃ
+ * MD-2000 ¤Ç¤Î OHP ½ÐÎϤËÂбþ
+
+1999-04-18 Ver.0.1
+ * MD-2000 Âбþ¤Î gdevmd2k-0.1 ¤ò¸ø³«
+
+
+TODO (or NOT TODO ?)
+---
+* ¸÷Âô°õºþ¤Ê¤ÉÆüì¤Ê¥â¡¼¥É¤Ø¤ÎÂбþ
+* dithering »þ¤Î²è¼Á¤Î¸þ¾å
+
+
+¼Õ¼­
+---
+ Floyd-Steinberg dithering ¤Î¥¢¥ë¥´¥ê¥º¥à¤Ï¡¢George Cameron »á¤Î½ñ¤«¤ì¤¿
+ gdevcdj.c ¤ò»²¹Í¤Ë¤µ¤»¤Æ夭¤Þ¤·¤¿¡£
+
+ MD-5000 Íѥɥ饤¥Ð gdevalps ¤Îºî¼Ô Shinya Umino¤µ¤ó¤«¤é¤Ï
+ MD-5000 ¤Ç¤ÎÆ°ºîÊó¹ð¤ÈËܥɥ饤¥Ð¤Ë´Ø¤¹¤ë¸æ°Õ¸«¤ò夭¤Þ¤·¤¿¡£
+ Ëܥɥ饤¥Ð¤Î MD-5000 ÂбþÉôʬ¤Ï gdevalps ¤ò¸µ¤Ëºî¤é¤ì¤Þ¤·¤¿¡£
+
+ gdevlips ¤Îºî¼Ô Â翹µª¿Í¤µ¤ó¤«¤é¤Ï¥«¥é¡¼¤ÎÀßÄêÅù¤Ë¤Ä¤¤¤Æ¸æ°Õ¸«¤ò
+ 夭¤Þ¤·¤¿¡£¤Þ¤¿¡¢gs ¤Î¥ª¥×¥·¥ç¥ó¤Ë¤Ä¤¤¤Æ¤Ï¡¢gdevlips ¤ò»²¹Í¤Ë¤µ¤»¤Æ
+ 夭¤Þ¤·¤¿¡£
+
+ Kousuke Ikeda ¤µ¤ó¡¢Ê¡µïµ£»ê¤µ¤ó¡¢À¶¿å·òÆ󤵤ó¡¢MIHIRA Yoshiro ¤µ¤ó
+ ¤«¤é¤Ï¡¢MD-1300, MD-1500, MD-4000 ¤Ç¤ÎÆ°ºîÊó¹ð¤ò夭¤Þ¤·¤¿¡£
+
+---
+ Ëܥɥ饤¥Ð¤Ë´Ø¤¹¤ë¸æ°Õ¸«¡¢¥Ð¥°Êó¹ð¡¢ALPS MD ³Æµ¡¼ï¤Ç¤Î¥Æ¥¹¥È·ë²ÌÅù
+¤¢¤ê¤Þ¤·¤¿¤é¡¢¥á¡¼¥ë¤Ë¤Æ¸æÏ¢Íí´ê¤¤¤Þ¤¹¡£
+
+ÛسÀ ¾­ÏÂ
+Masakazu Higaki <higamasa@dd.mbn.or.jp>
diff --git a/contrib/japanese/doc/gdevmjc.txt b/contrib/japanese/doc/gdevmjc.txt
new file mode 100644
index 00000000..11841a70
--- /dev/null
+++ b/contrib/japanese/doc/gdevmjc.txt
@@ -0,0 +1,58 @@
+gdevmjc-0.8no2 Â翹µª¿Í ohmori@p.chiba-u.ac.jp
+
+¤³¤Î¥É¥é¥¤¥Ð¤Ï gdevmjc-0.8 ¤ò¤â¤È¤Ë¤·¤Æºî¤é¤ì¤Æ¤¤¤Þ¤¹¡£
+¿§¤¢¤¤¤Ê¤É¤Ï gdevmjc-0.8 ¤½¤Î¤Þ¤Þ¤Ç¤¹¡£
+¤Þ¤¿¡¢Ghostscript 5.10 ¤ÇÆ°ºî¤µ¤»¤ë¤³¤È¤òÁ°Äó¤È¤·¤Æ¤¤¤Þ¤¹¡£
+
+1. Âбþ¥Ç¥Ð¥¤¥¹
+mj700v2c : EPSON MachJet ¥·¥ê¡¼¥º¤Ç CMYK 4¿§¤ò°õºþ¤Ç¤­¤ë¥«¥é¡¼ÍѤΥɥ饤¥Ð
+mj500c : EPSON MachJet ¥·¥ê¡¼¥º¤Ç CMY or K, CMY + K ÍѤΥץê¥ó¥¿ÍѤΥɥ饤¥Ð
+mj6000c : EPSON MJ-830C/MJ-930C/MJ-6000C
+ (¥â¥Î¥¯¥í°õºþ»þ¤Î¹â®²½¤ËÂбþ¤·¤Æ¤¤¤ë)
+mj8000c : EPSON MJ-8000C
+ (mj6000c ¤È A2 ¥µ¥¤¥º¤Î¥Þ¡¼¥¸¥ó¤¬°Û¤Ê¤ë)
+
+**************************************************************
+*¢¨ CMY or K ¥×¥ê¥ó¥¿: MJ-500C, MJ-510C *
+* CMY + K ¥×¥ê¥ó¥¿: MJ-800C, MJ-3000C *
+* (¤³¤ì¤ÏÉáÄÌ»æ¤Ë¤Ï CMYK °õºþ¤Ç¤­¤Ê¤¤»ÅÍͤˤʤäƤ¤¤Þ¤¹¡£)*
+**************************************************************
+
+¤Þ¤¿¥«¥é¡¼¤ËÂбþ¤·¤Æ¤¤¤Ê¤¤ MachJet ¤Ç¤â -dBitsBitsPerPixel=8 ¤ò
+»ØÄꤹ¤ì¤Ð¥â¥Î¥¯¥í¤Ç»È¤¨¤ë¤è¤¦¤Ç¤¹¡£
+
+2. Âбþ²òÁüÅÙ
+mj700v2c, mj6000c, mj8000c : 180x180 dpi (-r180 ¥ª¥×¥·¥ç¥ó)
+ 360x360 dpi (-r360 ¥ª¥×¥·¥ç¥ó) - ¥Ç¥Õ¥©¥ë¥È
+ 720x720 dpi (-r720 ¥ª¥×¥·¥ç¥ó)
+mj500c : 360x360 dpi (-r360 ¥ª¥×¥·¥ç¥ó) - ¥Ç¥Õ¥©¥ë¥È
+
+
+3. ¥«¥é¡¼/¥â¥Î¥¯¥íÀÚÂؤ¨
+-dBitsPerPixel=8 ¥â¥Î¥¯¥í°õºþ
+-dBitsPerPixel=32 ¥«¥é¡¼°õºþ (¥Ç¥Õ¥©¥ë¥È)
+
+4. ¤½¤Î¾¤Î¥ª¥×¥·¥ç¥ó
+-dMicroweave ¥Þ¥¤¥¯¥í¥¦¥£¡¼¥Ö¤ò¥ª¥ó¤Ë¤¹¤ë¡£
+ (180 dpi ¤Ç¤Ï¥Þ¥¤¥¯¥í¥¦¥£¡¼¥Ö¤Ï»È¤¨¤Þ¤»¤ó)
+ ¥Ç¥Õ¥©¥ë¥È¤Ç¥ª¥ó¤Ê¤Î¤Ç¥ª¥Õ¤Ë¤¹¤ë¤¿¤á¤Ë¤Ï¡¢
+ -dMicroweave=false ¥ª¥×¥·¥ç¥ó¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£
+-dUnidirectional ñÊý¸þ°õ»ú¤Ë¤¹¤ë¡£
+-dDotSize ¥É¥Ã¥È¥µ¥¤¥º¤òÀ©¸æ¤¹¤ë¡£
+-dDensity Á´ÂΤÎÇ»¤µ¤òÄ´À°¤¹¤ë - ¥Ç¥Õ¥©¥ë¥È 1024
+-dCyan ¥·¥¢¥ó¤ÎÇ»¤µ¤òÄ´À°¤¹¤ë - ¥Ç¥Õ¥©¥ë¥È 1024
+-dMagenta ¥Þ¥¼¥ó¥¿¤ÎÇ»¤µ¤òÄ´À°¤¹¤ë - ¥Ç¥Õ¥©¥ë¥È 1024
+-dYellow ²«¿§¤ÎÇ»¤µ¤òÄ´À°¤¹¤ë - ¥Ç¥Õ¥©¥ë¥È 1024
+-dBlack ¹õ¿§¤ÎÇ»¤µ¤òÄ´À°¤¹¤ë - ¥Ç¥Õ¥©¥ë¥È 1024
+
+¥â¥Î¥¯¥í°õºþ»þ¤Ë¤Ï -dDensity ¤ÏƯ¤­¤Þ¤»¤ó¡£-dBlack ¤Î¤ß¤Ç¿§Ä´À°¤ò
+¤·¤Æ¤¯¤À¤µ¤¤¡£
+
+5. ºÇ¹â²è¼Á
+¤³¤Î¥É¥é¥¤¥Ð¤ÇºÇ¹â²è¼Á¤ò¤À¤¹¤¿¤á¤Ë¤Ï
+-dMicroweave -dUnidirectional ¥ª¥×¥·¥ç¥ó¤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£
+
+6. gdevmjc-0.8 ¤Î¥Ð¥°¤Ç½¤Àµ¤·¤¿¤â¤Î
+¡ûCompaq Tru64 UNIX¡¢Alpha Linux ½ÐÎϤ¬¤ª¤«¤·¤¯¤Ê¤ë¥Ð¥°
+¡û¥â¥Î¥¯¥í°õºþ»þ¤Ë¿§Ä´À°¤¬¤Ç¤­¤Ê¤¤¥Ð¥°
+
diff --git a/contrib/japanese/doc/gdevml6.txt b/contrib/japanese/doc/gdevml6.txt
new file mode 100644
index 00000000..13f1bb91
--- /dev/null
+++ b/contrib/japanese/doc/gdevml6.txt
@@ -0,0 +1,47 @@
+
+ MICROLINE620CL ÍÑ ghostscript ¥É¥é¥¤¥Ð
+
+ Mar. 16, 1998 N.Tagawa
+
+ $Id: README,v 1.1 1998/03/16 13:32:32 tagawa Exp $
+
+
+ ¤³¤Î¥É¥é¥¤¥Ð¤Ï¡¢²­¥Ç¡¼¥¿¤Î MICROLINE620CL ¤ò ghostscript ¤Ç»È¤¦¤¿¤á
+¤Î¤â¤Î¤Ç¤¹¡£gs ¤Ï¡¢5.10 ¤ËÂбþ¤·¤Æ¤ª¤ê¡¢Linux-2.0.33(Debian-1.3.1) ¤Ç
+Æ°ºî¤ò³Îǧ¤·¤Æ¤¤¤Þ¤¹¡£
+
+
+ (1) ¥³¥ó¥Ñ¥¤¥ëÊýË¡
+ ¾¤Î¥×¥ê¥ó¥¿¥É¥é¥¤¥Ð¤ÈƱÍͤμê½ç¤Ç¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤ë¤Ï¤º¤Ç¤¹¡£
+gdevml6.c ¥Õ¥¡¥¤¥ë¤ò gs ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ËÃÖ¤­¡¢gdevml6.mak ¤ÎÆâÍƤò
+devs.mak ¤ÎŬÅö¤Ê¾ì½ê¤ËÄɲä·¤Þ¤¹¡£
+ gcc-head.mak ¤Ê¤É¤Î DEVICE_DEVS3 ¤¢¤¿¤ê¤Ë ml600.dev ¤òÄɲä·¡¢
+tar_cat ¤ò¼Â¹Ô¤·¤Þ¤¹¡£¤³¤³¤é¤Ø¤ó¤Ï¡¢´Ä¶­¤Ë¤è¤Ã¤ÆÊѤï¤Ã¤Æ¤¯¤ë¤Î¤Ç¡¢gs
+¤ËÉÕ°¤Î¥É¥­¥å¥á¥ó¥È¤ò»²¹Í¤Ë¤·¤Æ²¼¤µ¤¤¡£¸å¤Ï make ¤Ç¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤ë¤Ï
+¤º¤Ç¤¹¡£
+
+
+ (2) »È¤¤Êý
+ ¥Ç¥Ð¥¤¥¹¤È¤·¤Æ -sDEVICE=ml600 ¤ò»ØÄꤷ¤Þ¤¹¡£¥Ç¥Õ¥©¥ë¥È¤Î²òÁüÅÙ¤Ï 600
+x 600 DPI ¤Ç¤¹¤¬¡¢-r ¥ª¥×¥·¥ç¥ó¤Ç²òÁüÅÙ¤òÊѤ¨¤ë»ö¤¬¤Ç¤­¤Þ¤¹¡£-r300 ¤Ç
+300 DPI¡¢-r600x1200 ¤Ç 600 x 1200 DPI ¤Ë¤Ê¤ê¤Þ¤¹¡£
+
+ ¤¢¤Þ¤êºÙ¤«¤¤»ö¤Ï¤ï¤«¤é¤Ê¤¤¤Î¤Ç¤¹¤¬¡¢¥È¥ì¡¼¤ÎÀÚÂؤ¨¤ä¡¢ÍÑ»æ¤Î¸ü¤µ¤Ê¤É
+¤âÊѤ¨¤é¤ì¤ë¤Ï¤º¤Ç¤¹¡£¤¿¤À¡¢PS ¤«¤é¤É¤¦¤ä¤Ã¤Æ»ØÄꤹ¤ì¤Ð¤¤¤¤¤«¤ï¤«¤é¤Ê
+¤¤¤Î¤Ç¡¢¤È¤ê¤¢¤¨¤º¥Ç¥Õ¥©¥ë¥È¤Ë¤·¤Æ¤¢¤ê¤Þ¤¹¡£Ç¯²ì¾õ¤ò°õºþ¤·¤¿¤¤»þ¤Ï¡¢¥³¡¼
+¥É¤òÊѹ¹¤·¤ÆºÆ¥³¥ó¥Ñ¥¤¥ë¤·¤Æ²¼¤µ¤¤¡£^^;
+
+
+ (3) ¤½¤Î¾
+ ¤³¤Î¥É¥é¥¤¥Ð¤Ï¡¢MICROLINE620CL ÍѤǤ¹¤¬¡¢¤¿¤Ö¤ó MICROLINE600CL ¤Ç¤â
+Æ°¤¯¤È»×¤¤¤Þ¤¹(ξÊý¶¦ IPL ¤À¤½¤¦¤Ç¤¹¤«¤é)¡£ML-4w ¤ÇÆ°¤¯¤«¤É¤¦¤«¤Ï¤ï¤«
+¤ê¤Þ¤»¤ó¡£»ý¤Ã¤Æ¤¤¤ë¿Í¤¬¤¤¤¿¤é¤¼¤Ò»î¤·¤Æ¤ß¤Æ²¼¤µ¤¤¡£
+
+ ¤³¤Î¥É¥é¥¤¥Ð¤Ï̵ÊݾڤǤ¹¡¢¤¬¡¢¥Ð¥°¤Î»ØŦÅù¤¢¤ì¤Ð¤Ê¤ë¤Ù¤¯Âбþ¤·¤¿¤¤¤È
+»×¤Ã¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢¤è¤í¤·¤¯¤ª´ê¤¤¤·¤Þ¤¹¡£
+
+
+ ¤Ç¤Ï¡¢¤ª³Ú¤·¤ß²¼¤µ¤¤:-¡Ë
+
+
+ ÅÄÀî ŵÀ¸(tagawa@tcp-ip.or.jp)
diff --git a/contrib/japanese/doc/gdevp201.txt b/contrib/japanese/doc/gdevp201.txt
new file mode 100644
index 00000000..d06bbf03
--- /dev/null
+++ b/contrib/japanese/doc/gdevp201.txt
@@ -0,0 +1,30 @@
+
+ gdevp201.c - PC-PR201ÍѥǥХ¤¥¹¥É¥é¥¤¥Ð
+
+
+¡û¥¤¥ó¥¹¥È¡¼¥ëÊýË¡
+
+1. gdevp201.c ¤ò gs241 ¤Î¥½¡¼¥¹¥×¥í¥°¥é¥à¤¬¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥³¥Ô¡¼¤·
+¤Æ²¼¤µ¤¤¡£
+
+2. Makefile ¤Ë gdevp201.mak ¤òÄɲ䷤Ʋ¼¤µ¤¤¡£
+
+3. Makefile ¤Î DEVICE_DEVS ¤Ë pr201.dev ¤ò²Ã¤¨¤Æ²¼¤µ¤¤¡£
+
+ Îã) DEVICE_DEVS=pc98.dev pr201.dev
+ ^^^^^^^^^
+4. make ¥³¥Þ¥ó¥É¤Ç gs ¤ò¥³¥ó¥Ñ¥¤¥ë¤·¡¢¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ²¼¤µ¤¤¡£
+
+
+¡û»È¤¤Êý
+
+¡ö¥Ç¥Ð¥¤¥¹¤ÎÁªÂò¤Ï -sDEVICE ¥ª¥×¥·¥ç¥ó¤Ë¤è¤Ã¤Æ¹Ô¤Ê¤¤¤Þ¤¹¡£
+
+ Îã) gs -sDEVICE=pr201 (pr201¤ò»ØÄê)
+ gs -sDEVICE=pc98 (pc98¤ò»ØÄê)
+
+
+
+ ÊÒ»³ µªÀ¸(katayama@nacsis.ac.jp)
+
+
diff --git a/contrib/japanese/dviprlib.c b/contrib/japanese/dviprlib.c
new file mode 100644
index 00000000..97ad5526
--- /dev/null
+++ b/contrib/japanese/dviprlib.c
@@ -0,0 +1,2823 @@
+/* COPYRIGHT (C) 1990, 1992 Aladdin Enterprises. All rights reserved.
+ Distributed by Free Software Foundation, Inc.
+
+ This file is part of Ghostscript.
+
+ Ghostscript is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+ to anyone for the consequences of using it or for whether it serves any
+ particular purpose or works at all, unless he says so in writing. Refer
+ to the Ghostscript General Public License for full details.
+
+ Everyone is granted permission to copy, modify and redistribute
+ Ghostscript, but only under the conditions described in the Ghostscript
+ General Public License. A copy of this license is supposed to have been
+ given to you along with Ghostscript so you can know your rights and
+ responsibilities. It should be in a file named COPYING. Among other
+ things, the copyright notice and this notice must be preserved on all
+ copies. */
+
+/* dviprlib.c */
+
+#include "stdio_.h"
+#include "ctype_.h"
+#include "malloc_.h"
+#include "string_.h"
+#include "gstypes.h"
+#include "gsmemory.h"
+#include "gp.h"
+
+/* include library header. */
+#define dviprlib_implementation
+#include "dviprlib.h"
+
+/* The remainder of this file is a copy of the library for dviprt. */
+
+/***** From rcfg.c *****/
+/* $Id: RCFG.C 1.1 1994/08/30 02:27:02 kaz Exp kaz $ */
+
+/*--- forward declarations ---*/
+static int dviprt_read_S_cfg(dviprt_cfg_t *,dviprt_cfg_i *);
+static int dviprt_read_QR_cfg(dviprt_cfg_t *,dviprt_cfg_i *);
+
+/*--- library functions ---*/
+int
+dviprt_readcfg(const gs_memory_t *mem, char *ifname,dviprt_cfg_t *pcfg,uchar *pcodebuf,int codebuf_s,
+ uchar *pworkbuf,int workbuf_s)
+{
+ int code;
+ int ver;
+ dviprt_cfg_i info;
+
+ info.fname = ifname;
+ info.line_no = -1;
+ if (ifname) {
+ info.file = gp_fopen(mem,ifname,gp_fmode_rb);
+ if (info.file == NULL) {
+ dviprt_printcfgerror(&info,"Cannot open.\n",-1);
+ return CFG_ERROR_FILE_OPEN;
+ }
+ }
+ else {
+ /* Broken, but unused in gs. Just return an error for now. */
+ /* info.file = stdin; */
+ return CFG_ERROR_FILE_OPEN;
+ }
+
+ gp_fseek(info.file,16,0);
+ ver = gp_fgetc(info.file);
+ gp_fseek(info.file,0,0);
+ info.codebuf = pcodebuf;
+ info.readbuf = pworkbuf;
+ info.codebuf_size = codebuf_s;
+ info.readbuf_size = workbuf_s;
+ code = (ver == 'S') ? dviprt_read_S_cfg(pcfg,&info)
+ : dviprt_read_QR_cfg(pcfg,&info);
+
+ if (ifname) gp_fclose(info.file);
+ return code;
+}
+
+/*--- internal routines ---*/
+static int
+dviprt_read_S_cfg(dviprt_cfg_t *pcfg,dviprt_cfg_i *pinfo)
+{
+ gp_file *ifp;
+ long intoff,stroff,codeoff;
+ int i,count;
+ uchar *pbuf,*rbuf;
+ int code;
+ char *ptype;
+ int n;
+
+ if ((code = dviprt_setcfgbuffer_(pinfo,100,0)) < 0) return code;
+ dviprt_initcfg_(pcfg,pinfo);
+
+ ifp = pinfo->file;
+ rbuf = pinfo->readbuf;
+
+ if (gp_fread(rbuf,20,1,ifp) < 1) {
+ dviprt_printcfgerror(pinfo,"Read error.\n",-1);
+ }
+ if (rbuf[17] != 0xff || rbuf[18] != 0xff) {
+ not_cfg:
+ dviprt_printcfgerror(pinfo,"This file does not seem *.CFG.\n",-1);
+ return CFG_ERROR_OTHER;
+ }
+ if (memcmp(rbuf,CFG_MAGIC_NUMBER,2))
+ goto not_cfg;
+ pcfg->version = rbuf[2] | ((uint)rbuf[3] << 8);
+ if (pcfg->version > CFG_VERSION) {
+ gs_sprintf(dviprt_message_buffer,
+ "This *.CFG file is too new version(ver.%u).\n",pcfg->version);
+ dviprt_printcfgerror(pinfo,dviprt_message_buffer,-1);
+ return CFG_ERROR_OTHER;
+ }
+
+#define bytes2long(p) ((p)[0] | ((long)(p)[1]<<8) | \
+ ((long)(p)[2]<<16) | ((long)(p)[3]<<24))
+ intoff = bytes2long(rbuf+4);
+ stroff = bytes2long(rbuf+8);
+ codeoff = bytes2long(rbuf+12);
+#undef bytes2long
+
+ gp_fseek(ifp,intoff,0);
+ count = gp_fgetc(ifp);
+ gp_fread(rbuf,count*3,1,ifp);
+
+ pbuf = rbuf;
+ for (i=0;i<count;i++) {
+ n = pbuf[0];
+ if (n >= CFG_INTEGER_TYPE_COUNT) {
+ ptype = "integer";
+ unknown_no:
+ gs_sprintf(dviprt_message_buffer,
+ "Unknown %s type value No.%d is found.\n",ptype,n);
+ dviprt_printcfgerror(pinfo,dviprt_message_buffer,-1);
+ return CFG_ERROR_OTHER;
+ }
+ pcfg->integer[n] = pbuf[1] | ((uint)pbuf[2]<<8);
+ pbuf += 3;
+ }
+
+ gp_fseek(ifp,stroff,0);
+ count = gp_fgetc(ifp);
+ pbuf = NULL;
+ for (i=0;i<count;i++) {
+ int l;
+ gp_fread(rbuf,3,1,ifp);
+ n = rbuf[0];
+ l = rbuf[1] | ((uint)rbuf[2]<<8);
+ if (n >= CFG_STRINGS_TYPE_COUNT) {
+ ptype = "strings";
+ goto unknown_no;
+ }
+ if (pinfo->codebuf == NULL) {
+ pcfg->strings[n] = (uchar *)malloc(l+1);
+ if (pcfg->strings[n] == NULL) {
+ no_memory:
+ dviprt_printcfgerror(pinfo,"Memory exhausted.\n",-1);
+ return CFG_ERROR_MEMORY;
+ }
+ }
+ else {
+ pcfg->strings[n] = pinfo->pcodebuf;
+ pinfo->pcodebuf += (l+1);
+ }
+ gp_fread(pcfg->strings[n],l,1,ifp);
+ *(pcfg->strings[n]+l) = 0;
+ }
+
+ gp_fseek(ifp,codeoff,0);
+ count = gp_fgetc(ifp);
+ for (i=0;i<count;i++) {
+ int l;
+ gp_fread(rbuf,3,1,ifp);
+ n = rbuf[0];
+ l = rbuf[1] | ((uint)rbuf[2]<<8);
+
+ if (n >= CFG_PRTCODE_TYPE_COUNT) {
+ ptype = "printer code";
+ goto unknown_no;
+ }
+ if (pinfo->codebuf == NULL) {
+ pcfg->prtcode[n] = (uchar *)malloc(l+1);
+ if (pcfg->prtcode[n] == NULL)
+ goto no_memory;
+ }
+ else {
+ pcfg->prtcode[n] = pinfo->pcodebuf;
+ pinfo->pcodebuf += (l+1);
+ }
+ gp_fread(pcfg->prtcode[n],l,1,ifp);
+ *(pcfg->prtcode[n]+l) = 0;
+ pcfg->prtcode_size[n] = l;
+ }
+ dviprt_resetcfgbuffer_(pinfo);
+ return 0;
+}
+
+static int
+dviprt_read_QR_cfg(dviprt_cfg_t *pcfg,dviprt_cfg_i *pinfo)
+{
+#define TYPE_BIT 0xc0
+
+#define NO_NUM 0
+#define BINARY_LTOH 1
+#define BINARY_HTOL 2
+#define DECIMAL_3 3
+#define DECIMAL_4 4
+#define DECIMAL_5 5
+#define DECIMAL_V 6
+
+#define TOTAL_BYTE 0x80
+#define ISO_NUMBER 0x40
+#define DIVIDEBY_2 0x10
+#define DIVIDE_ALL 0x30
+#define MULT_CONST 0x08
+ enum {
+ BIT_IMAGE_MODE,
+ NORML_MODE,
+ SEND_BIT_IMAGE,
+ SKIP_SPACES,
+ LINE_FEED,
+ FORM_FEED,
+ AFTER_BIT_IMAGE,
+ BIT_ROW_HEADER,
+ };
+ uchar *cfg_buf,*ptr;
+ int ch, type, f_cont, f_type, pos, i, j, k, lens;
+ int f_r_format;
+ long offset;
+ int old2new[] = {
+ CFG_BIT_IMAGE_MODE,
+ CFG_NORMAL_MODE,
+ CFG_SEND_BIT_IMAGE,
+ CFG_SKIP_SPACES,
+ CFG_LINE_FEED,
+ CFG_FORM_FEED,
+ CFG_AFTER_BIT_IMAGE,
+ CFG_BIT_ROW_HEADER,
+ };
+
+ ch =dviprt_setcfgbuffer_(pinfo,300,TEMP_CODEBUF_SIZE);
+ if (ch < 0) return CFG_ERROR_MEMORY;
+ dviprt_initcfg_(pcfg,pinfo);
+ cfg_buf = pinfo->readbuf;
+ if (gp_fread(cfg_buf,30,1,pinfo->file) < 1) {
+ dviprt_printcfgerror(pinfo,"Read error.\n",-1);
+ }
+ if (cfg_buf[16] == 'P') {
+ dviprt_printcfgerror(pinfo,"This is made by old version.\n",-1);
+ return CFG_ERROR_OTHER;
+ }
+ else if (cfg_buf[16] == 'Q')
+ f_r_format = 0;
+ else if (cfg_buf[16] == 'R')
+ f_r_format = 1;
+ else
+ f_r_format = -1;
+ if (f_r_format == -1 || cfg_buf[18] != 0xff) {
+ dviprt_printcfgerror(pinfo,"This is not the *.CFG file for dviprt.\n",-1);
+ return CFG_ERROR_OTHER;
+ }
+ cfg_buf[16] = '\0';
+ pcfg->version = 0;
+ if (pinfo->temp_codebuf_f) {
+ pcfg->strings[CFG_NAME] = malloc(strlen(cfg_buf)+1);
+ if (pcfg->strings[CFG_NAME] == NULL) {
+ no_memory:
+ dviprt_printcfgerror(pinfo,"Memory exhausted.\n",-1);
+ return CFG_ERROR_MEMORY;
+ }
+ }
+ else {
+ pcfg->strings[CFG_NAME] = pinfo->pcodebuf;
+ pinfo->pcodebuf += strlen(cfg_buf);
+ pinfo->pcodebuf++;
+ }
+ strcpy(pcfg->strings[CFG_NAME],cfg_buf);
+
+ pcfg->integer[CFG_UPPER_POS] =
+ (cfg_buf[17] & (CFG_LEFT_IS_LOW|CFG_NON_MOVING));
+ pcfg->integer[CFG_ENCODE] =
+ (cfg_buf[17] & 0x10) ? CFG_ENCODE_HEX : CFG_ENCODE_NULL;
+ pcfg->integer[CFG_PINS] = ((uint) (cfg_buf[17]) & 0x0f);
+
+ ptr = cfg_buf+23;
+ pcfg->integer[CFG_MINIMAL_UNIT] = (uint)ptr[0] | ((uint)ptr[1]<<8);
+ pcfg->integer[CFG_MAXIMAL_UNIT] = (uint)ptr[2] | ((uint)ptr[3]<<8);
+ pcfg->integer[CFG_DPI] =
+ f_r_format ? ((uint)ptr[4] | ((uint)ptr[5]<<8)) : 180;
+ if (cfg_buf[20])
+ pcfg->integer[CFG_CONSTANT] = cfg_buf[20];
+ offset = cfg_buf[19];
+ gp_fseek(pinfo->file,offset,0);
+
+ for (i = 0; i <= BIT_ROW_HEADER; i++) {
+ uchar *pstart,*plength;
+ uchar prev = 1;
+ if (pinfo->temp_codebuf_f) {
+ pinfo->pcodebuf = pinfo->codebuf;
+ }
+ pstart = pinfo->pcodebuf;
+ do {
+ lens = gp_fgetc(pinfo->file);
+ if (lens == EOF) break;
+ gp_fread(cfg_buf,lens+3,1,pinfo->file);
+ ptr = cfg_buf;
+ f_cont = *ptr++;
+ pos = *ptr++;
+ f_type = *ptr++;
+ type = f_type & 0x7;
+
+ for (j = 0; j < lens; j++) {
+ ch = *ptr++;
+ if (pos == j && type != NO_NUM) {
+ uchar *pfmt = pinfo->pcodebuf++;
+ plength = pinfo->pcodebuf++;
+ *pinfo->pcodebuf++ = CFG_VAL_DEFAULT;
+ *plength = 1;
+ j++;
+ ptr++;
+ switch (type) {
+ case (BINARY_LTOH):
+ *pfmt = CFG_FMT_BIT | CFG_FMT_BIN_LTOH | 2;
+ break;
+ case (BINARY_HTOL):
+ *pfmt = CFG_FMT_BIT | CFG_FMT_BIN_HTOL | 2;
+ break;
+ case (DECIMAL_3):
+ *pfmt = CFG_FMT_BIT | CFG_FMT_DECIMAL | 3;
+ j++;
+ ptr++;
+ break;
+ case (DECIMAL_4):
+ *pfmt = CFG_FMT_BIT | CFG_FMT_DECIMAL | 4;
+ j += 2;
+ ptr += 2;
+ break;
+ case (DECIMAL_5):
+ *pfmt = CFG_FMT_BIT | CFG_FMT_DECIMAL | 5;
+ j += 3;
+ ptr += 3;
+ break;
+ case (DECIMAL_V):
+ *pfmt = CFG_FMT_BIT | CFG_FMT_DECIMAL;
+ j++;
+ ptr++;
+ break;
+ default:
+ gs_sprintf(dviprt_message_buffer,"Unknown format %02X",type);
+ dviprt_printcfgerror(pinfo,dviprt_message_buffer,-1);
+ goto ex_func;
+ }
+ if (f_type & TOTAL_BYTE) {
+ *pinfo->pcodebuf++ = CFG_VAL_PINS_BYTE;
+ *pinfo->pcodebuf++ = CFG_OP_MUL;
+ (*plength) += 2;
+ }
+ if ((k = (f_type & DIVIDE_ALL)) != 0) {
+ *pinfo->pcodebuf = 0;
+ for (; k > 0; k -= DIVIDEBY_2) {
+ (*pinfo->pcodebuf)++;
+ }
+ pinfo->pcodebuf++;
+ *pinfo->pcodebuf++ = CFG_OP_SHR;
+ (*plength) += 2;
+ }
+ if (f_type & ISO_NUMBER) {
+ *pfmt |= CFG_FMT_ISO_BIT;
+ }
+ if (f_type & MULT_CONST) {
+ *pinfo->pcodebuf++ = CFG_VAL_CONSTANT;
+ *pinfo->pcodebuf++ = CFG_OP_MUL;
+ (*plength) += 2;
+ }
+ prev = 1;
+ }
+ else {
+ if (prev == 1 || *plength >= 127) {
+ plength = pinfo->pcodebuf++;
+ *plength = 0;
+ }
+ (*plength)++;
+ *pinfo->pcodebuf++ = ch;
+ prev = 0;
+ }
+ }
+ } while (f_cont & 0x80);
+ *pinfo->pcodebuf++ = 0;
+ { int n = old2new[i];
+ uint l = pinfo->pcodebuf-pstart;
+ pcfg->prtcode_size[n] = l - 1;
+ if (pinfo->temp_codebuf_f) { /* allocate buffer */
+ pcfg->prtcode[n] = (uchar *)malloc(l);
+ if (pcfg->prtcode[n] == NULL)
+ goto no_memory;
+ memcpy(pcfg->prtcode[n],pstart,l);
+ }
+ else {
+ pcfg->prtcode[n] = pstart;
+ }
+ }
+ }
+ ex_func:
+ dviprt_resetcfgbuffer_(pinfo);
+ return 0;
+}
+/***** End of rcfg.c *****/
+
+/***** From rsrc.c *****/
+/* $Id: RSRC.C 1.1 1994/08/30 02:27:02 kaz Exp kaz $ */
+
+typedef struct {
+ char *name;
+ signed char type;
+ uchar no;
+ uchar spec_f;
+ uchar req_f;
+ char *info;
+} dviprt_cfg_item_t;
+
+typedef struct {
+ long min;
+ long max;
+} dviprt_cfg_limit_t;
+
+/*--- forward declarations ---*/
+static int dviprt_set_select
+ (dviprt_cfg_item_t *,uchar **,dviprt_cfg_t *,dviprt_cfg_i *);
+static int dviprt_set_integer
+ (dviprt_cfg_item_t *, uchar *, dviprt_cfg_t *,dviprt_cfg_i *);
+static int dviprt_set_strings
+ (dviprt_cfg_item_t *,uchar *,dviprt_cfg_t *,dviprt_cfg_i *);
+static int dviprt_set_rpexpr
+ (dviprt_cfg_item_t *,uchar *,int , dviprt_cfg_t *,dviprt_cfg_i *,int);
+static int dviprt_set_code
+ (dviprt_cfg_item_t *,uchar *,dviprt_cfg_t *,dviprt_cfg_i *);
+
+static long dviprt_oct2long(uchar *,uchar *,uchar **);
+static long dviprt_dec2long(uchar *,uchar *,uchar **);
+static long dviprt_hex2long(uchar *,uchar *,uchar **);
+
+static int dviprt_printtokenerror(dviprt_cfg_i *,char *,int ,int);
+
+/*--- macros ---*/
+#define strlcmp(tmplt,str,len) \
+ (!(strncmp(tmplt,str,(int)(len)) == 0 && (int)(len) == strlen(tmplt)))
+#define set_version(pcfg,v) ((pcfg)->version = MAX(v,(pcfg)->version))
+
+enum {
+ ERROR_UNKNOWN_VALUE,ERROR_UNKNOWN_FORMAT,ERROR_UNKNOWN_ESCSEQ,
+ ERROR_OUTOFRANGE,
+ ERROR_INVALID_VALUE,
+ ERROR_COMPLICATED_EXPR,
+ ERROR_INCOMPLETE,
+};
+
+/*--- library functions ---*/
+int
+dviprt_readsrc(const gs_memory_t *mem, char *fname,dviprt_cfg_t *pcfg,uchar *pcodebuf,int codebuf_s,
+ uchar *pworkbuf,int workbuf_s)
+{
+ dviprt_cfg_i info;
+ int code;
+ gp_file *ifp;
+ dviprt_cfg_item_t *pitem;
+ int enc = CFG_ENCODE_NULL;
+ enum { T_INTEGER,T_STRINGS,T_CODE,T_SELECT,T_UPPERPOS};
+ static dviprt_cfg_limit_t pins_limit = { 8, 128 };
+ static dviprt_cfg_limit_t positive_limit = { 1, 0x7fff };
+ static dviprt_cfg_limit_t nonnegative_limit = { 0, 0x7fff};
+ static dviprt_cfg_item_t dviprt_items[] = {
+ {NULL,T_STRINGS,CFG_NAME,0,1,NULL},
+ {NULL,T_INTEGER,CFG_PINS,0,1,(char*)&pins_limit},
+ {NULL,T_INTEGER,CFG_MINIMAL_UNIT,0,0,(char*)&positive_limit},
+ {NULL,T_INTEGER,CFG_MAXIMAL_UNIT,0,0,(char*)&positive_limit},
+ {NULL,T_INTEGER,CFG_DPI,0,0,(char*)&positive_limit},
+ {NULL,T_INTEGER,CFG_CONSTANT,0,0,(char*)&nonnegative_limit},
+ {NULL,T_INTEGER,CFG_Y_DPI,0,0,(char*)&positive_limit},
+ {NULL,T_CODE,CFG_BIT_IMAGE_MODE,0,1,NULL},
+ {NULL,T_CODE,CFG_SEND_BIT_IMAGE,0,1,NULL},
+ {NULL,T_CODE,CFG_BIT_ROW_HEADER,0,0,NULL},
+ {NULL,T_CODE,CFG_AFTER_BIT_IMAGE,0,0,NULL},
+ {NULL,T_CODE,CFG_LINE_FEED,0,0,NULL},
+ {NULL,T_CODE,CFG_FORM_FEED,0,0,NULL},
+ {NULL,T_CODE,CFG_NORMAL_MODE,0,1,NULL},
+ {NULL,T_CODE,CFG_SKIP_SPACES,0,1,NULL},
+ {NULL,T_UPPERPOS,CFG_UPPER_POS,0,1,NULL},
+ {NULL,T_SELECT,CFG_ENCODE,0,0,(char*)dviprt_encodename},
+ {NULL,-1},
+ };
+ static dviprt_cfg_item_t encode_info = {
+ "encode",T_STRINGS,CFG_ENCODE_INFO,0,0,NULL
+ };
+ int prtcode_output_bytes[CFG_PRTCODE_TYPE_COUNT];
+
+ info.line_no = -1;
+ info.fname = fname;
+ if (fname) {
+ info.file = gp_fopen(mem,fname,"r");
+ if (info.file == NULL) {
+ dviprt_printcfgerror(&info,"Cannot open.\n",-1);
+ return CFG_ERROR_FILE_OPEN;
+ }
+ }
+ else {
+ ifp = stdin;
+ }
+ ifp = info.file;
+
+ info.codebuf = pcodebuf;
+ info.readbuf = pworkbuf;
+ info.codebuf_size = codebuf_s;
+ info.readbuf_size = workbuf_s;
+ /* allocate buffer */
+ if (dviprt_setcfgbuffer_(&info,TEMP_READBUF_SIZE,TEMP_CODEBUF_SIZE) < 0) {
+ gp_fclose(info.file);
+ return CFG_ERROR_MEMORY;
+ }
+
+ /* initialize */
+ dviprt_initcfg_(pcfg,&info);
+ for (pitem = dviprt_items;pitem->type>=0;pitem++) {
+ if (pitem->name == NULL) {
+ switch (pitem->type) {
+ case T_INTEGER:
+ case T_SELECT:
+ case T_UPPERPOS:
+ pitem->name = dviprt_integername[pitem->no];
+ break;
+ case T_STRINGS:
+ pitem->name = dviprt_stringsname[pitem->no];
+ break;
+ case T_CODE:
+ pitem->name = dviprt_prtcodename[pitem->no];
+ break;
+ }
+ }
+ pitem->spec_f = 0;
+ }
+ encode_info.spec_f = 0;
+ { int i;
+ for (i=0;i<CFG_PRTCODE_TYPE_COUNT;i++)
+ prtcode_output_bytes[i] = 0;
+ }
+
+ pcfg->version = 1;
+ for ( ; ; ) {
+ uchar *pbuf = info.readbuf;
+ uchar *pchar;
+
+ if (fgets(info.readbuf,info.readbuf_size,ifp) == NULL) break;
+ info.line_no++;
+ {
+ int len = strlen(pbuf);
+ if ((pbuf[0] < 'a' || pbuf[0] > 'z') && pbuf[0] != '_') {
+ while (pbuf[len-1] != '\n') {
+ if (fgets(info.readbuf,info.readbuf_size,ifp) == NULL)
+ goto end_scan;
+ len = strlen(pbuf);
+ }
+ continue;
+ }
+ if ( len > 0 && pbuf[len-1] == '\n')
+ pbuf[len-1] = 0;
+ }
+ while (*pbuf && *pbuf != ':') pbuf++;
+ if (*pbuf != ':') {
+ dviprt_printcfgerror(&info,"Character ':' is expected.\n",-1);
+ code = CFG_ERROR_SYNTAX;
+ goto end_process;
+ }
+ pchar = pbuf-1;
+ while (pchar >= info.readbuf && isspace(*pchar)) pchar--;
+ *++pchar = 0;
+ pbuf++;
+ for (pitem = dviprt_items;pitem->name;pitem++) {
+ if (strcmp(pitem->name,info.readbuf) == 0) break;
+ }
+ if (pitem->name == NULL) {
+ dviprt_printcfgerror(&info,"Unknown item `",-1);
+ dviprt_printmessage(info.readbuf,-1);
+ dviprt_printmessage("'.\n",-1);
+ code = CFG_ERROR_RANGE;
+ goto end_process;
+ }
+ parse_more:
+ while (*pbuf && isspace(*pbuf)) pbuf++;
+ if (pitem->spec_f) {
+ dviprt_printcfgerror(&info,NULL,0);
+ gs_sprintf(dviprt_message_buffer,
+ "Item `%s' is specified twice.\n",pitem->name);
+ dviprt_printmessage(dviprt_message_buffer,-1);
+ code = CFG_ERROR_SYNTAX;
+ goto end_process;
+ }
+ switch (pitem->type) {
+ case T_INTEGER:
+ if ((code = dviprt_set_integer(pitem,pbuf,pcfg,&info)) < 0)
+ goto end_process;
+ if (pitem->no == CFG_PINS) {
+ if (pcfg->integer[CFG_PINS] % 8) {
+ dviprt_printcfgerror(&info,"Value must be a multiple of 8.\n",-1);
+ code = CFG_ERROR_RANGE;
+ goto end_process;
+ }
+ pcfg->integer[CFG_PINS] /= 8;
+ }
+ break;
+ case T_STRINGS:
+ if (info.temp_codebuf_f)
+ info.pcodebuf = info.codebuf;
+ if ((code = dviprt_set_strings(pitem,pbuf,pcfg,&info)) < 0)
+ goto end_process;
+ if (info.temp_codebuf_f) {
+ pcfg->strings[pitem->no] =
+ (uchar*)malloc(strlen(pcfg->strings[pitem->no])+1);
+ if (pcfg->strings[pitem->no] == NULL) {
+ goto no_more_memory;
+ }
+ strcpy(pcfg->strings[pitem->no],info.codebuf);
+ }
+ break;
+ case T_CODE:
+ if (info.temp_codebuf_f)
+ info.pcodebuf = info.codebuf;
+ if ((code = dviprt_set_code(pitem,pbuf,pcfg,&info)) < 0)
+ goto end_process;
+ prtcode_output_bytes[pitem->no] = code;
+ if (info.temp_codebuf_f) {
+ pcfg->prtcode[pitem->no] =
+ (uchar*)malloc(pcfg->prtcode_size[pitem->no]+1);
+ if (pcfg->prtcode[pitem->no] == NULL) {
+ no_more_memory:
+ dviprt_printcfgerror(&info,"Memory exhausted.\n",-1);
+ code = CFG_ERROR_MEMORY;
+ goto end_process;
+ }
+ memcpy(pcfg->prtcode[pitem->no],info.codebuf,
+ pcfg->prtcode_size[pitem->no]+1);
+ }
+ break;
+ case T_SELECT:
+ if ((code = dviprt_set_select(pitem,&pbuf,pcfg,&info)) < 0)
+ goto end_process;
+ if (pitem->no == CFG_ENCODE) {
+ pitem = &encode_info;
+ goto parse_more;
+ }
+ break;
+ case T_UPPERPOS:
+ { uchar *ptmp;
+ uchar upos=0;
+ uchar opt = 0;
+ if (*pbuf == 0) {
+ dviprt_printcfgerror(&info,"No value.\n",-1);
+ code = CFG_ERROR_SYNTAX;
+ goto end_process;
+ }
+ while (*pbuf) {
+ ptmp = pbuf;
+ while (*ptmp && !isspace(*ptmp)) ptmp++;
+ if (strlcmp("HIGH_BIT",pbuf,ptmp-pbuf) == 0)
+ upos = CFG_TOP_IS_HIGH;
+ else if (strlcmp("LOW_BIT",pbuf,ptmp-pbuf) == 0)
+ upos = CFG_TOP_IS_LOW;
+ else if (strlcmp("LEFT_IS_HIGH",pbuf,ptmp-pbuf) == 0)
+ upos = CFG_LEFT_IS_HIGH;
+ else if (strlcmp("LEFT_IS_LOW",pbuf,ptmp-pbuf) == 0)
+ upos = CFG_LEFT_IS_LOW;
+ else if (strlcmp("NON_MOVING",pbuf,ptmp-pbuf) == 0)
+ opt = CFG_NON_MOVING;
+ else if (strlcmp("HEX_MODE",pbuf,ptmp-pbuf) == 0)
+ enc = CFG_ENCODE_HEX;
+ else {
+ dviprt_printtokenerror(&info,pbuf,(int)(ptmp-pbuf),ERROR_UNKNOWN_VALUE);
+ code = CFG_ERROR_RANGE;
+ goto end_process;
+ }
+ pbuf = ptmp;
+ while (*pbuf && isspace(*pbuf)) pbuf++;
+ }
+ pcfg->integer[CFG_UPPER_POS] = upos | opt;
+ }
+ break;
+ }
+ pitem->spec_f = 1;
+ }
+ end_scan:
+
+ info.line_no = -1;
+ code = 0;
+ for (pitem = dviprt_items;pitem->name;pitem++) {
+ if (!pitem->spec_f && pitem->req_f) {
+ gs_sprintf(dviprt_message_buffer,"%s not found.\n",pitem->name);
+ dviprt_printcfgerror(&info,dviprt_message_buffer,-1);
+ code++;
+ }
+ }
+ if (code) { code = CFG_ERROR_RANGE; goto end_process; }
+
+ if (pcfg->prtcode[CFG_LINE_FEED] == NULL) {
+ if (info.temp_codebuf_f) {
+ pcfg->prtcode[CFG_LINE_FEED] = info.pcodebuf;
+ info.pcodebuf += 4;
+ }
+ else pcfg->prtcode[CFG_LINE_FEED] = (byte*)malloc(4);
+ memcpy(pcfg->prtcode[CFG_LINE_FEED],"\002\x0d\x0a\000",4);
+ pcfg->prtcode_size[CFG_LINE_FEED] = 3;
+ }
+ if (pcfg->prtcode[CFG_FORM_FEED] == NULL) {
+ if (info.temp_codebuf_f) {
+ pcfg->prtcode[CFG_FORM_FEED] = info.pcodebuf;
+ info.pcodebuf += 4;
+ }
+ else pcfg->prtcode[CFG_FORM_FEED] = (byte*)malloc(4);
+ memcpy(pcfg->prtcode[CFG_FORM_FEED],"\002\x0d\x0c\000",4);
+ pcfg->prtcode_size[CFG_FORM_FEED] = 3;
+ }
+ if (pcfg->integer[CFG_DPI] < 0 && pcfg->integer[CFG_Y_DPI] < 0) {
+ pcfg->integer[CFG_DPI] = 180;
+ }
+ else if (pcfg->integer[CFG_DPI] < 0 || pcfg->integer[CFG_Y_DPI] < 0) {
+ if (pcfg->integer[CFG_DPI] < 0)
+ pcfg->integer[CFG_DPI] = pcfg->integer[CFG_Y_DPI];
+ pcfg->integer[CFG_Y_DPI] = -1;
+ }
+ else if (pcfg->integer[CFG_DPI] == pcfg->integer[CFG_Y_DPI]) {
+ pcfg->integer[CFG_Y_DPI] = -1;
+ }
+ else if (pcfg->integer[CFG_Y_DPI] >= 0) { /* has y_dpi. */
+ set_version(pcfg,2);
+ }
+ if (pcfg->integer[CFG_ENCODE] < 0) {
+ pcfg->integer[CFG_ENCODE] = enc;
+ }
+ if (pcfg->integer[CFG_MAXIMAL_UNIT] < 0) {
+ pcfg->integer[CFG_MAXIMAL_UNIT] = 0x7fff;
+ }
+ if (pcfg->integer[CFG_MINIMAL_UNIT] < 0) {
+ uint v;
+ v = (MAX(prtcode_output_bytes[CFG_SEND_BIT_IMAGE],0) +
+ MAX(prtcode_output_bytes[CFG_AFTER_BIT_IMAGE],0) +
+ MAX(prtcode_output_bytes[CFG_SKIP_SPACES],0))
+ / (pcfg->integer[CFG_PINS]*8) +
+ MAX(prtcode_output_bytes[CFG_BIT_ROW_HEADER],0);
+ if (v == 0) v = 1;
+ pcfg->integer[CFG_MINIMAL_UNIT] = v;
+ }
+
+ for (pitem = dviprt_items;pitem->type>=0;pitem++) {
+ if (pitem->spec_f == 0) {
+ gs_sprintf(dviprt_message_buffer,": %s:",pitem->name);
+ switch (pitem->type) {
+ case T_INTEGER:
+ if (pcfg->integer[pitem->no] >= 0) {
+ uint v = pcfg->integer[pitem->no];
+ dviprt_printmessage(fname,-1);
+ dviprt_printmessage(dviprt_message_buffer,-1);
+ gs_sprintf(dviprt_message_buffer," %d\n",v);
+ dviprt_printmessage(dviprt_message_buffer,-1);
+ }
+ break;
+ default: break; /* do nothing */
+ }
+ }
+ }
+
+ end_process:
+ if (fname) gp_fclose(ifp);
+ dviprt_resetcfgbuffer_(&info);
+
+ return code;
+}
+
+/*--- internal routines ---*/
+static int
+dviprt_set_integer(dviprt_cfg_item_t *pitem,uchar *buf,dviprt_cfg_t *pcfg,
+ dviprt_cfg_i *pinfo)
+{
+ uchar *pbuf = buf;
+ long v = 0;
+ long max = -1 ,min = -1;
+
+ if (pitem->info != NULL) {
+ dviprt_cfg_limit_t *plimit = (dviprt_cfg_limit_t *)pitem->info;
+ min = plimit->min;
+ max = plimit->max;
+ }
+ if (min < 0) min = 0;
+ if (max < 0) max = 0xffff;
+ if (*pbuf == 0) {
+ dviprt_printcfgerror(pinfo,"No value.\n",-1);
+ return CFG_ERROR_SYNTAX;
+ }
+ while (*pbuf) {
+ if (!isdigit(*pbuf)) {
+ if (isspace(*pbuf)) break;
+ else goto invalid_val;
+ }
+ v = v*10 + *pbuf - '0';
+ if (v > max) {
+ out_of_range:
+ dviprt_printtokenerror(pinfo,buf,strlen(buf),ERROR_OUTOFRANGE);
+ dviprt_printcfgerror(pinfo,"",-1);
+ gs_sprintf(dviprt_message_buffer,
+ "(%u <= value <= %u).\n",(uint)min,(uint)max);
+ dviprt_printmessage(dviprt_message_buffer,-1);
+ return CFG_ERROR_RANGE;
+ }
+ pbuf++;
+ }
+ if (v < min) goto out_of_range;
+
+ while (*pbuf) {
+ if (!isspace(*pbuf)) {
+ invalid_val:
+ dviprt_printtokenerror(pinfo,buf,strlen(buf),ERROR_INVALID_VALUE);
+ return CFG_ERROR_RANGE;
+ }
+ pbuf++;
+ }
+ pcfg->integer[pitem->no] = v;
+
+ return 0;
+}
+
+static int
+dviprt_set_strings(dviprt_cfg_item_t *pitem,uchar *buf,dviprt_cfg_t *pcfg,
+ dviprt_cfg_i *pinfo)
+{
+ uchar *pend;
+ long len;
+ pend = buf+strlen(buf)-1;
+ while (pend >= buf && isspace(*pend)) pend--;
+ pend++;
+ len = pend - buf;
+ if (len > 0x7fffL) {
+ dviprt_printcfgerror(pinfo,"Too long strings.\n",-1);
+ return CFG_ERROR_RANGE;
+ }
+
+ pcfg->strings[pitem->no] = pinfo->pcodebuf;
+ strncpy(pinfo->pcodebuf,buf,(int)len);
+ pinfo->pcodebuf[len] = 0;
+ pinfo->pcodebuf += len;
+ pinfo->pcodebuf++;
+ return 0;
+}
+
+static int
+dviprt_set_select(dviprt_cfg_item_t *pitem,uchar **buf,dviprt_cfg_t *pcfg,
+ dviprt_cfg_i *pinfo)
+{
+ int i;
+ uchar *ptmp = *buf;
+ uchar *pstart = *buf;
+ uchar **opt;
+ if (*pstart == 0) {
+ dviprt_printcfgerror(pinfo,"No value.\n",-1);
+ return CFG_ERROR_SYNTAX;
+ }
+ while (*ptmp && !isspace(*ptmp)) ptmp++;
+
+ for (i=0,opt=(uchar**)pitem->info;*opt;i++,opt++) {
+ if (strlcmp(*opt,pstart,ptmp-pstart) == 0) {
+ pcfg->integer[pitem->no] = i;
+ *buf = ptmp;
+ return 0;
+ }
+ }
+ dviprt_printtokenerror(pinfo,pstart,(int)(ptmp-pstart),ERROR_UNKNOWN_VALUE);
+ return CFG_ERROR_RANGE;
+}
+
+#define CFG_TOKEN_ERROR -1
+#define CFG_TOKEN_LIMIT_BIT 0x100
+#define CFG_TOKEN_FMT 0x200
+
+static int
+dviprt_get_codetype_token(dviprt_cfg_i *pinfo,uchar *pstart,uchar *pend,uchar *stopescseqchars,
+ uchar *limitchars)
+{
+ while (pstart < pend && isspace(*pstart)) pstart++;
+ if (pstart >= pend) {
+ pinfo->token = pinfo->endtoken = pstart;
+ return CFG_TOKEN_LIMIT_BIT;
+ }
+ else if (strchr(limitchars,*pstart)) {
+ pinfo->token = pstart;
+ pinfo->endtoken = pstart+1;
+ return CFG_TOKEN_LIMIT_BIT | *pstart;
+ }
+ else if (*pstart == '\\') {
+ int c;
+ long v;
+ uchar *pexpr,*pnext;
+
+ pexpr = pinfo->token = pstart++;
+ while (pstart < pend && !isspace(*pstart) &&
+ *pstart != '\\' && !strchr(stopescseqchars,*pstart)) {
+ pstart++;
+ }
+ pinfo->endtoken = pstart;
+ if (pinfo->token + 1 == pinfo->endtoken) { /* '\\' only */
+ return '\\';
+ }
+ pexpr++;
+ if (pinfo->endtoken - pexpr == 1) {
+ if (isdigit(*pexpr)) goto parse_decimal_numb;
+ switch (*pexpr) {
+ case 't': c = '\t'; break; /* tab */
+ case 'v': c = '\v'; break; /* tab */
+ case 'n': c = '\n'; break; /* line feed */
+ case 'f': c = '\f'; break; /* form feed */
+ case 'r': c = '\r'; break; /* carrige return */
+ case 'e': c = 0x1b; break; /* escape code */
+ case 's': c = 0x20; break; /* space */
+ default:
+ dviprt_printtokenerror(pinfo,pinfo->token,2,ERROR_UNKNOWN_ESCSEQ);
+ return CFG_TOKEN_ERROR;
+ }
+ return c;
+ }
+ else if (strlcmp("SP",pexpr,pinfo->endtoken - pexpr) == 0)
+ return 0x20;
+ else if (strlcmp("ESC",pexpr,pinfo->endtoken - pexpr) == 0)
+ return 0x1b;
+ switch (*pexpr) {
+ case 'x':
+ case 'X':
+ v = dviprt_hex2long(pexpr+1,pinfo->endtoken,&pnext);
+ check_numb_range:
+ if (pstart != pnext) {
+ dviprt_printtokenerror(pinfo,pinfo->token,
+ (int)(pinfo->endtoken - pinfo->token), ERROR_INVALID_VALUE);
+ return CFG_TOKEN_ERROR;
+ }
+ if (v >= 256) {
+ dviprt_printtokenerror(pinfo,pinfo->token,
+ (int)(pinfo->endtoken - pinfo->token), ERROR_OUTOFRANGE);
+ return CFG_TOKEN_ERROR;
+ }
+ pinfo->endtoken = pnext;
+ return v;
+ case '0':
+ v = dviprt_oct2long(pexpr,pinfo->endtoken,&pnext);
+ goto check_numb_range;
+ case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ parse_decimal_numb:
+ v = dviprt_dec2long(pexpr,pinfo->endtoken,&pnext);
+ goto check_numb_range;
+ default:
+ return CFG_TOKEN_FMT;
+ }
+ }
+ else {
+ pinfo->token = pstart;
+ pinfo->endtoken = pstart+1;
+ return *pstart;
+ }
+}
+
+static long
+dviprt_dec2long(uchar *start,uchar *end,uchar **next)
+{
+ long v = 0;
+ while (start < end) {
+ int c = *start;
+ if (isdigit(c)) v = v*10 + c - '0';
+ else break;
+ start++;
+ }
+ *next = start;
+ return v;
+}
+
+static long
+dviprt_oct2long(uchar *start,uchar *end,uchar **next)
+{
+ long v = 0;
+ while (start < end) {
+ int c = *start;
+ if (c >= '0' && c <= '7') v = v*8 + c - '0';
+ else break;
+ start++;
+ }
+ *next = start;
+ return v;
+}
+
+static long
+dviprt_hex2long(uchar *start,uchar *end,uchar **next)
+{
+ long v = 0;
+ while (start < end) {
+ int c = *start;
+ if (isdigit(c)) v = v*16 + c - '0';
+ else if (c >= 'A' && c <= 'F') v = v*16 + c - 'A' + 10;
+ else if (c >= 'a' && c <= 'f') v = v*16 + c - 'a' + 10;
+ else break;
+ start++;
+ }
+ *next = start;
+ return v;
+}
+
+static int
+dviprt_set_rpexpr(dviprt_cfg_item_t *pitem,uchar *pbuf,int len,dviprt_cfg_t *pcfg,
+ dviprt_cfg_i *pinfo,int sp)
+{
+ uchar *pend = pbuf + len;
+ uchar *plastop = NULL;
+ int code;
+
+ /* get left expr */
+ while (pbuf < pend) {
+ int par_count = 0;
+ uchar *pcur = pbuf;
+ while (pcur < pend) {
+ if (*pcur == '(') par_count++;
+ else if (*pcur == ')') par_count--;
+ else if (!isdigit(*pcur) && !isalpha(*pcur) && par_count == 0) {
+ /* operator */
+ plastop = pcur;
+ }
+ pcur++;
+ }
+ if (par_count != 0) {
+ dviprt_printtokenerror(pinfo,pbuf,(int)(pend-pbuf),ERROR_INCOMPLETE);
+ return CFG_ERROR_SYNTAX;
+ }
+ if (plastop == NULL) {
+ if (*pbuf != '(') break;
+ pbuf++;
+ pend--;
+ }
+ else break;
+ }
+
+ if (plastop == NULL) { /* no operator */
+ ulong v;
+ uchar *pdummy;
+ if (*pbuf == '0') {
+ uchar a,b,c;
+ v = dviprt_oct2long(pbuf,pend,&pdummy);
+ check_intval:
+ if (pdummy != pend) goto unknown_value;
+ if (v > 0xffff) {
+ dviprt_printtokenerror(pinfo,pbuf,(int)(pend-pbuf),ERROR_OUTOFRANGE);
+ return CFG_ERROR_RANGE;
+ }
+ a = v & 0x7f;
+ b = (v>>7) & 0x7f;
+ c = (v>>14) & 0x03;
+ if (c) {
+ *pinfo->pcodebuf++ = c;
+ *pinfo->pcodebuf++ = 14;
+ *pinfo->pcodebuf++ = CFG_OP_SHL;
+ }
+ if (b) {
+ *pinfo->pcodebuf++ = b;
+ *pinfo->pcodebuf++ = 7;
+ *pinfo->pcodebuf++ = CFG_OP_SHL;
+ if (c) *pinfo->pcodebuf++ = CFG_OP_OR;
+ }
+ if (a) {
+ *pinfo->pcodebuf++ = a;
+ if (b || c) *pinfo->pcodebuf++ = CFG_OP_OR;
+ }
+ code = 0;
+ }
+ else if (isdigit(*pbuf)) {
+ v = dviprt_dec2long(pbuf,pend,&pdummy);
+ goto check_intval;
+ }
+ else if (pend - pbuf > 1 && (*pbuf == 'x' || *pbuf == 'X')) {
+ v = dviprt_hex2long(pbuf+1,pend,&pdummy);
+ goto check_intval;
+ }
+ else if (pend - pbuf > 1) {
+ unknown_value:
+ dviprt_printtokenerror(pinfo,pbuf,(int)(pend-pbuf),ERROR_UNKNOWN_VALUE);
+ return CFG_ERROR_RANGE;
+ }
+ else {
+ switch (*pbuf) {
+ case 'd': v = CFG_VAL_DEFAULT;
+ if (pitem->no != CFG_SEND_BIT_IMAGE &&
+ pitem->no != CFG_BIT_ROW_HEADER &&
+ pitem->no != CFG_AFTER_BIT_IMAGE &&
+ pitem->no != CFG_SKIP_SPACES)
+ goto unavailable_value;
+ break;
+ case 'c': v = CFG_VAL_CONSTANT; break;
+ case 'w': v = CFG_VAL_WIDTH; break;
+ case 'h': v = CFG_VAL_HEIGHT; break;
+ case 'r': v = CFG_VAL_X_DPI; break;
+ case 'R': v = CFG_VAL_Y_DPI; break;
+ case 'p': v = CFG_VAL_PAGE; break;
+ case 'x': v = CFG_VAL_X_POS; break;
+ case 'y': v = CFG_VAL_Y_POS; break;
+ case 'v': v = CFG_VAL_PINS_BYTE; break;
+ case 's':
+ v = CFG_VAL_DATASIZE;
+ if (pitem->no != CFG_SEND_BIT_IMAGE &&
+ pitem->no != CFG_BIT_ROW_HEADER &&
+ pitem->no != CFG_AFTER_BIT_IMAGE) {
+ unavailable_value:
+ dviprt_printcfgerror(pinfo,"",-1);
+ gs_sprintf(dviprt_message_buffer,"Variable `%c' in ",(int)*pbuf);
+ dviprt_printmessage(dviprt_message_buffer,-1);
+ dviprt_printmessage(pbuf,(int)(pend-pbuf));
+ gs_sprintf(dviprt_message_buffer," cannot be used in %s.\n",pitem->name);
+ dviprt_printmessage(dviprt_message_buffer,-1);
+ return CFG_ERROR_RANGE;
+ }
+ break;
+ default:
+ goto unknown_value;
+ }
+ *pinfo->pcodebuf++ = v;
+ code = 0;
+ }
+ }
+ else { /* has operator */
+ uchar op;
+
+ code = dviprt_set_rpexpr(pitem,pbuf,(int)(plastop-pbuf),pcfg,pinfo,sp+1);
+ if (code < 0) return code;
+ code = dviprt_set_rpexpr(pitem,plastop+1,(int)(pend-plastop-1),pcfg,pinfo,sp+2);
+ if (code < 0) return code;
+
+ switch (*plastop) {
+ case '+': op = CFG_OP_ADD; break;
+ case '-': op = CFG_OP_SUB; break;
+ case '*': op = CFG_OP_MUL; break;
+ case '/': op = CFG_OP_DIV; break;
+ case '%': op = CFG_OP_MOD; break;
+ case '<': op = CFG_OP_SHL; break;
+ case '>': op = CFG_OP_SHR; break;
+ case '&': op = CFG_OP_AND; break;
+ case '|': op = CFG_OP_OR ; break;
+ case '^': op = CFG_OP_XOR; break;
+ default:
+ dviprt_printcfgerror(pinfo,NULL,0);
+ gs_sprintf(dviprt_message_buffer,"Unknown operator %c in ",(int)*pbuf);
+ dviprt_printmessage(dviprt_message_buffer,-1);
+ dviprt_printmessage(pbuf,(int)(pend-pbuf));
+ dviprt_printmessage(".\n",-1);
+ return CFG_ERROR_SYNTAX;
+ }
+ *pinfo->pcodebuf++ = op;
+ }
+
+ return code;
+}
+
+static int
+dviprt_set_code(dviprt_cfg_item_t *pitem,uchar *buf,dviprt_cfg_t *pcfg,
+ dviprt_cfg_i *pinfo)
+{
+ long prev_line;
+ int prev_type = 1;
+ uchar *pcount;
+ uchar *pcode_begin;
+ uchar *rbuf;
+ int obytes = 0;
+
+ prev_line = ftell(pinfo->file);
+ pcode_begin = pinfo->pcodebuf;
+ rbuf = pinfo->readbuf;
+
+ for ( ; ; ) {
+ while (*buf) {
+ int c;
+ c = dviprt_get_codetype_token(pinfo,buf,buf+strlen(buf),",","");
+ if (c == CFG_TOKEN_LIMIT_BIT) break; /* no elements remain */
+ else if (c == CFG_TOKEN_ERROR) return CFG_ERROR_SYNTAX;
+ if ( c < 256) { /* character code (raw data) */
+ if (prev_type) {
+ new_unit:
+ pcount = pinfo->pcodebuf++;
+ (*pcount) = 0;
+ prev_type = 0;
+ }
+ if (*pcount == 127) goto new_unit;
+ (*pcount)++;
+ *pinfo->pcodebuf++ = c;
+ buf = pinfo->endtoken;
+ obytes++;
+ }
+ else if (c == CFG_TOKEN_FMT) { /* format */
+ uchar *pexpr = pinfo->token;
+ int div=0,iso=0,mul=0,tl=0;
+ int cols=0;
+ int fmt;
+ uchar *plength;
+ uchar *pstart;
+
+ buf = pinfo->token+1;
+
+ /* formats */
+ switch (*buf) {
+ case 'b': fmt = CFG_FMT_BIN_LTOH; break;
+ case 'B': fmt = CFG_FMT_BIN_HTOL; break;
+ case 'H': fmt = CFG_FMT_HEX_UPPER; break;
+ case 'h': fmt = CFG_FMT_HEX_LOWER; break;
+ case 'd': fmt = CFG_FMT_DECIMAL; break;
+ case 'o': fmt = CFG_FMT_OCTAL; break;
+ case 's':
+ buf++;
+ if (*buf != 't') goto unknown_format;
+ fmt = CFG_FMT_STRINGS;
+ break;
+ default:
+ unknown_format:
+ dviprt_printtokenerror(pinfo,pexpr,(int)(pinfo->endtoken-pexpr),
+ ERROR_UNKNOWN_FORMAT);
+ return CFG_ERROR_SYNTAX;
+ }
+ buf++;
+
+ /* columns */
+ if (fmt == CFG_FMT_STRINGS) ;
+ else {
+ if (buf >= pinfo->endtoken) {
+ dviprt_printtokenerror(pinfo,pexpr,(int)(pinfo->token-pexpr),ERROR_INCOMPLETE);
+ return CFG_ERROR_SYNTAX;
+ }
+
+ if (!(*buf >= '1' && *buf <= '7') && *buf != '?') {
+ invalid_cols:
+ dviprt_printtokenerror(pinfo,pexpr,(int)(pinfo->endtoken-pexpr),
+ ERROR_UNKNOWN_FORMAT);
+ return CFG_ERROR_SYNTAX;
+ }
+ cols = (*buf == '?') ? 0 : *buf - '0';
+ if (cols == 0 &&
+ (fmt == CFG_FMT_BIN_LTOH || fmt == CFG_FMT_BIN_HTOL))
+ goto invalid_cols;
+
+ buf++;
+ obytes += (cols == 0) ? 5 : cols;
+ }
+
+ /* additional format */
+ while (buf < pinfo->endtoken) {
+ switch (*buf) {
+ case 'D': div++; break;
+ case 'I': iso++; break;
+ case 'M': mul++; break;
+ case 'T': tl++; break;
+ default:
+ dviprt_printtokenerror(pinfo,pexpr,(int)(buf-pexpr),ERROR_UNKNOWN_FORMAT);
+ return CFG_ERROR_SYNTAX;
+ }
+ if (div > 3 || iso > 1 || mul > 1 || tl > 1) {
+ dviprt_printtokenerror(pinfo,pexpr,(int)(buf-pexpr),ERROR_UNKNOWN_FORMAT);
+ return CFG_ERROR_SYNTAX;
+ }
+ buf++;
+ }
+ *pinfo->pcodebuf++ =
+ CFG_FMT_BIT | fmt | (iso ? CFG_FMT_ISO_BIT : 0) | cols;
+ plength = pinfo->pcodebuf;
+ pinfo->pcodebuf++;
+ pstart = pinfo->pcodebuf;
+
+ if (*buf == ',' && *(buf+1) != '\"') {
+ int code;
+ buf++;
+ pinfo->token = buf;
+ while (*pinfo->token && *pinfo->token != ',' &&
+ *pinfo->token != '\\' && !isspace(*pinfo->token))
+ pinfo->token++;
+ if (pinfo->token == buf) {
+ dviprt_printcfgerror(pinfo,"No expression is specified in ",-1);
+ dviprt_printmessage(pexpr,(int)(buf-pexpr));
+ dviprt_printmessage(".\n",-1);
+ return CFG_ERROR_SYNTAX;
+ }
+ if ((code = dviprt_set_rpexpr(pitem,buf,(int)(pinfo->token-buf),pcfg,pinfo,0)) < 0)
+ return code;
+ buf = pinfo->token;
+ }
+ else {
+ *pinfo->pcodebuf++ = CFG_VAL_DEFAULT;
+ }
+ if (mul) {
+ *pinfo->pcodebuf++ = CFG_VAL_CONSTANT;
+ *pinfo->pcodebuf++ = CFG_OP_MUL;
+ }
+ if (tl) {
+ *pinfo->pcodebuf++ = CFG_VAL_PINS_BYTE;
+ *pinfo->pcodebuf++ = CFG_OP_MUL;
+ }
+ if (div) {
+ *pinfo->pcodebuf++ = div;
+ *pinfo->pcodebuf++ = CFG_OP_SHR;
+ }
+ {
+ int length = pinfo->pcodebuf-pstart;
+ if (length > 255) {
+ dviprt_printtokenerror(pinfo,pexpr,(int)(buf-pexpr),ERROR_COMPLICATED_EXPR);
+ return CFG_ERROR_RANGE;
+ }
+ *plength++ = length & 0xff;
+ }
+ if (fmt == CFG_FMT_STRINGS) {
+ uchar *pslen = pinfo->pcodebuf++;
+ int len;
+ if (strlen(buf) < 2 || *buf != ',' || *(buf+1) != '\"') {
+ dviprt_printcfgerror(pinfo,"No strings specified in ",-1);
+ dviprt_printmessage(pexpr,(int)(buf-pexpr));
+ dviprt_printmessage(".\n",-1);
+ return CFG_ERROR_SYNTAX;
+ }
+ buf += 2;
+ for (len=0; ;len++) {
+ c = dviprt_get_codetype_token(pinfo,buf,buf+strlen(buf),"\"","\"");
+ if (c == CFG_TOKEN_ERROR) return CFG_ERROR_SYNTAX;
+ else if (c == CFG_TOKEN_FMT) {
+ dviprt_printcfgerror(pinfo,"The format ",-1);
+ dviprt_printmessage(pinfo->token,
+ (int)(pinfo->endtoken-pinfo->token));
+ dviprt_printmessage(" cannot to be specified here.\n",-1);
+ return CFG_ERROR_SYNTAX;
+ }
+ else if (c & CFG_TOKEN_LIMIT_BIT) {
+ if ((c & 0xff) != '\"') {
+ dviprt_printcfgerror(pinfo,
+ "Strings must be enclosed with "
+ "double quotations (\").\n",-1);
+ return CFG_ERROR_SYNTAX;
+ }
+ buf = pinfo->endtoken;
+ break;
+ }
+ *pinfo->pcodebuf++ = c;
+ buf = pinfo->endtoken;
+ }
+ if (len > 255) {
+ dviprt_printcfgerror(pinfo,"Too long strings.\n",-1);
+ return CFG_ERROR_RANGE;
+ }
+ *pslen = len;
+ }
+ prev_type = 1;
+ }
+ else {
+ dviprt_printcfgerror(pinfo,"Parse error. Unexpected token ",-1);
+ dviprt_printmessage(pinfo->token,(int)(pinfo->endtoken-pinfo->token));
+ dviprt_printmessage(".\n",-1);
+ return CFG_ERROR_SYNTAX;
+ }
+ }
+ next_line:
+ if (fgets(rbuf,pinfo->readbuf_size,pinfo->file) == NULL) break;
+ if (!isspace(rbuf[0]) && rbuf[0] != ';') {
+ gp_fseek(pinfo->file,prev_line,0);
+ break;
+ }
+ prev_line = ftell(pinfo->file);
+ pinfo->line_no++;
+ buf = rbuf;
+ while (*buf && isspace(*buf)) buf++;
+ if (*buf == ';')
+ goto next_line; /* comment */
+ {
+ int len = strlen(rbuf);
+ if (len > 0 && rbuf[len-1] == '\n')
+ rbuf[len-1] = 0;
+ }
+ }
+ pcfg->prtcode[pitem->no] = pcode_begin;
+ pcfg->prtcode_size[pitem->no] = (pinfo->pcodebuf - pcode_begin) & 0xffff;
+ *pinfo->pcodebuf++ = 0;
+ return obytes;
+}
+
+static char *
+dviprt_src_errorno2message(int type)
+{
+ switch (type) {
+ case ERROR_OUTOFRANGE:
+ return "Out of range.\n";
+ case ERROR_UNKNOWN_VALUE:
+ return "Unknown value.\n";
+ case ERROR_UNKNOWN_ESCSEQ:
+ return "Unknown escape sequence.\n";
+ case ERROR_COMPLICATED_EXPR:
+ return "Too complicated expression.\n";
+ case ERROR_INCOMPLETE:
+ return "Incomplete specification.\n";
+ case ERROR_UNKNOWN_FORMAT:
+ return "Unknown format.\n";
+ case ERROR_INVALID_VALUE:
+ return "Invalid value.\n";
+ default:
+ return NULL;
+ }
+}
+
+static int
+dviprt_printtokenerror(dviprt_cfg_i *pinfo,char *token,int len,int type)
+{
+ char *msg;
+
+ dviprt_printcfgerror(pinfo,token,len);
+ dviprt_printmessage("\n",-1);
+
+ if ((msg = dviprt_src_errorno2message(type)) != NULL)
+ dviprt_printcfgerror(pinfo,msg,-1);
+ return 0;
+}
+
+#undef strlcmp
+#undef set_version
+/***** End of rsrc.c *****/
+
+/***** From util.c *****/
+/* $Id: UTIL.C 1.1 1994/08/30 02:27:02 kaz Exp kaz $ */
+
+char *dviprt_integername[] = { CFG_INTEGER_NAME, NULL };
+char *dviprt_stringsname[] = { CFG_STRINGS_NAME, NULL };
+char *dviprt_prtcodename[] = { CFG_PRTCODE_NAME, NULL };
+char *dviprt_encodename[] = { CFG_ENCODE_NAME, NULL };
+
+#if 0
+static FILE *dviprt_messagestream = stderr;
+#else /* patch for glibc 2.1.x by Shin Fukui <shita@april.co.jp> */
+static FILE *dviprt_messagestream;
+#endif
+
+/*--- library functions ---*/
+int
+dviprt_setmessagestream(FILE *fp)
+{
+ dviprt_messagestream = fp;
+ return 0;
+}
+
+/*--- internal routines ---*/
+static int
+dviprt_initcfg_(dviprt_cfg_t *pcfg,dviprt_cfg_i *pinfo)
+{
+ int i;
+
+ for (i=0;i<CFG_INTEGER_TYPE_COUNT;i++)
+ pcfg->integer[i] = -1;
+ for (i=0;i<CFG_STRINGS_TYPE_COUNT;i++)
+ pcfg->strings[i] = NULL;
+ for (i=0;i<CFG_PRTCODE_TYPE_COUNT;i++) {
+ pcfg->prtcode[i] = NULL;
+ pcfg->prtcode_size[i] = 0;
+ }
+ pinfo->pcodebuf = pinfo->codebuf;
+ pinfo->line_no = 0;
+ return 0;
+}
+
+static int
+dviprt_setcfgbuffer_(dviprt_cfg_i *pinfo,int rsize,int csize)
+{
+ pinfo->temp_readbuf_f = pinfo->temp_codebuf_f = 0;
+
+ if (pinfo->readbuf == NULL) {
+ pinfo->readbuf_size = rsize;
+ if (rsize>0) {
+ pinfo->temp_readbuf_f = 1;
+ pinfo->readbuf = (uchar *)malloc(rsize);
+ if (pinfo->readbuf == NULL) {
+ no_mem:
+ dviprt_printmessage(pinfo->fname,-1);
+ dviprt_printmessage("Memory exhausted.\n",-1);
+ return CFG_ERROR_MEMORY;
+ }
+ }
+ }
+ if (pinfo->codebuf == NULL) {
+ pinfo->codebuf_size = csize;
+ if (csize>0) {
+ pinfo->temp_codebuf_f = 1;
+ pinfo->codebuf = (uchar *)malloc(csize);
+ if (pinfo->codebuf == NULL) goto no_mem;
+ }
+ }
+ return 0;
+}
+
+static int
+dviprt_resetcfgbuffer_(dviprt_cfg_i *pinfo)
+{
+ if (pinfo->temp_readbuf_f) free(pinfo->readbuf);
+ if (pinfo->temp_codebuf_f) free(pinfo->codebuf);
+ pinfo->temp_codebuf_f = pinfo->temp_readbuf_f = 0;
+ return 0;
+}
+
+char dviprt_message_buffer[128];
+
+static int
+dviprt_printmessage(char *str,int len)
+{
+ if (dviprt_messagestream && str) {
+ if (len >= 0) fwrite(str,len,1,dviprt_messagestream);
+ else fputs(str,dviprt_messagestream);
+ fflush(dviprt_messagestream);
+ }
+ return 0;
+}
+
+static int
+dviprt_printcfgerrorheader(dviprt_cfg_i *pinfo)
+{
+ if (pinfo) {
+ char *fn = pinfo->fname;
+ if (fn == NULL) fn = "-";
+ dviprt_printmessage(fn,-1);
+ dviprt_printmessage(": ",-1);
+ if (pinfo->line_no>0) {
+ gs_sprintf(dviprt_message_buffer,"%d: ",pinfo->line_no);
+ dviprt_printmessage(dviprt_message_buffer,-1);
+ }
+ }
+ return 0;
+}
+
+static int
+dviprt_printerror(char *msg,int len)
+{
+ dviprt_printmessage("*ERROR* ",-1);
+ dviprt_printmessage(msg,len);
+ return 0;
+}
+
+static int
+dviprt_printcfgerror(dviprt_cfg_i *pinfo,char *msg,int len)
+{
+ dviprt_printcfgerrorheader(pinfo);
+ dviprt_printerror(msg,len);
+ return 0;
+}
+
+static int
+dviprt_printwarning(char *msg,int len)
+{
+ dviprt_printmessage("*WARNING* ",-1);
+ dviprt_printmessage(msg,len);
+ return 0;
+}
+
+static int
+dviprt_printcfgwarning(dviprt_cfg_i *pinfo,char *msg,int len)
+{
+ dviprt_printcfgerrorheader(pinfo);
+ dviprt_printwarning(msg,len);
+ return 0;
+}
+/***** End of util.c *****/
+
+/***** From print.c *****/
+/* $Id: PRINT.C 1.1 1994/08/30 02:27:02 kaz Exp kaz $ */
+
+/*--- forward declarations ---*/
+static int dviprt_getmaximalwidth(dviprt_print *);
+static int dviprt_flush_buffer(dviprt_print *,uchar far *);
+static int dviprt_output_transpose(dviprt_print *,uchar far *,uint);
+static int dviprt_output_nontranspose(dviprt_print *,uchar far *,uint);
+static int dviprt_output_nontranspose_reverse(dviprt_print *,uchar far *,uint);
+static int dviprt_reverse_bits(uchar far *,uint);
+static int dviprt_transpose8x8(uchar far *,uint, uchar far *,uint);
+static int dviprt_output_expr(dviprt_print *,int,uint,uint);
+static int dviprt_default_outputproc(uchar far *,long ,void *);
+static long dviprt_getbuffersize(dviprt_print *);
+
+/*--- library functions ---*/
+long
+dviprt_initlibrary(dviprt_print *pprint,dviprt_cfg_t *pprt,uint width,uint height)
+{
+ dviprt_encoder *pencode;
+ uint pins = pprt->integer[CFG_PINS]*8;
+
+ pprint->printer = pprt;
+ height += (pins-1);
+ height /= pins;
+ height *= pins;
+ pprint->bitmap_width = width; /* width by bytes */
+ pprint->bitmap_height = height;
+ pprint->buffer_width = MIN(width,pprt->integer[CFG_MAXIMAL_UNIT]);
+ pprint->page_count = 0;
+ pprint->output_bytes = 0;
+ pprint->tempbuffer_f = 0;
+ pencode = dviprt_getencoder_((int)pprt->integer[CFG_ENCODE]);
+ if (pencode == NULL) return CFG_ERROR_NOT_SUPPORTED;
+ pprint->encode_getbuffersize_proc = pencode->getworksize;
+ pprint->encode_encode_proc = pencode->encode;
+
+ pprint->output_bytes = 0;
+ pprint->pstream = NULL;
+ pprint->output_proc = NULL;
+
+ if (pprt->integer[CFG_UPPER_POS] & CFG_NON_TRANSPOSE_BIT) {
+ pprint->output_maximal_unit =
+ (pprt->integer[CFG_UPPER_POS] & CFG_REVERSE_BIT) ?
+ dviprt_output_nontranspose_reverse : dviprt_output_nontranspose;
+ }
+ else
+ pprint->output_maximal_unit = dviprt_output_transpose;
+ return dviprt_getbuffersize(pprint);
+}
+
+int
+ dviprt_setstream
+#ifdef __PROTOTYPES__
+ (dviprt_print *pprint,int (*func)(uchar far *,long ,void*),void *pstream)
+#else
+(pprint,func,pstream)
+dviprt_print *pprint;
+int (*func)();
+void *pstream;
+#endif
+{
+ if (pprint->page_count) {
+ int code = dviprt_output_expr(pprint,CFG_FORM_FEED,0,0);
+ if (code < 0) return code;
+ pprint->page_count = 0;
+ }
+ pprint->output_bytes = 0;
+ pprint->pstream = pstream;
+ pprint->output_proc = (func == NULL) ? dviprt_default_outputproc : func;
+ return 0;
+}
+
+int
+dviprt_setbuffer(dviprt_print *pprint,uchar far *buf)
+{
+ if (pprint->tempbuffer_f) {
+ BufferFree(pprint->encode_buffer);
+ }
+ pprint->tempbuffer_f = 0;
+ if (buf == NULL) {
+ long s = dviprt_getbuffersize(pprint);
+ if (s) {
+ buf = (uchar far *)BufferAlloc(s);
+ if (buf == NULL) return CFG_ERROR_MEMORY;
+ pprint->tempbuffer_f = 1;
+ }
+ }
+ pprint->encode_buffer = buf;
+ pprint->source_buffer =
+ buf + pprint->encode_getbuffersize_proc(pprint,dviprt_getmaximalwidth(pprint));
+ return 0;
+}
+
+int
+dviprt_beginpage(dviprt_print *pprint)
+{
+ int code;
+ pprint->device_x = pprint->device_y = 0;
+ pprint->bitmap_x = pprint->bitmap_y = 0;
+ if (pprint->page_count == 0) { /* bit_image_mode */
+ code = dviprt_output_expr(pprint,CFG_BIT_IMAGE_MODE,0,0);
+ }
+ else { /* form_feed */
+ code = dviprt_output_expr(pprint,CFG_FORM_FEED,0,0);
+ }
+ pprint->page_count++;
+ if (code < 0) return code;
+ return 0;
+}
+
+int
+dviprt_outputscanlines(dviprt_print *pprint,uchar far *fb)
+{
+ dviprt_cfg_t *pprt;
+ int code;
+ uint bw;
+
+ pprt = pprint->printer;
+ bw = pprint->bitmap_width;
+
+ if (pprt->prtcode_size[CFG_SKIP_SPACES] <= 0) {
+ pprint->bitmap_x = bw;
+ pprint->last_x = 0;
+ }
+ else {
+ uint uw,rw;
+ uint mu;
+ uint bx,lx;
+ uint pins = dviprt_getscanlines(pprint);
+ mu = pprt->integer[CFG_MINIMAL_UNIT];
+ bx = lx = 0;
+
+ for (rw= bw; rw > 0 ;rw -= uw) {
+ uint x,y;
+ uchar far *in;
+
+ uw = MIN(mu,rw);
+ in = fb + bx;
+ for (x = uw; x>0 ; x--) {
+ uchar far *test;
+ test = in;
+ for (y = pins ; y > 0 ;y--) {
+ if (*test) goto next_unit;
+ test += bw;
+ }
+ in++;
+ }
+
+ if (bx > lx) {
+ pprint->bitmap_x = bx;
+ pprint->last_x = lx;
+ code = dviprt_flush_buffer(pprint,fb); /* output buffered unit */
+ if (code < 0) return code;
+ lx = pprint->last_x + uw;
+ }
+ else lx += uw;
+
+ next_unit:
+ bx += uw;
+ }
+ pprint->bitmap_x = bx;
+ pprint->last_x = lx;
+ }
+ code = (pprint->last_x < pprint->bitmap_x) ? dviprt_flush_buffer(pprint,fb) : 0;
+ pprint->bitmap_y++;
+ return code;
+}
+
+int
+dviprt_endbitmap(dviprt_print *pprint)
+{
+ if (pprint->page_count) {
+ int code = dviprt_output_expr(pprint,CFG_NORMAL_MODE,0,0);
+ if (code < 0) return code;
+ }
+ return 0;
+}
+
+int
+dviprt_unsetbuffer(dviprt_print *pprint)
+{
+ if (pprint->tempbuffer_f) {
+ BufferFree(pprint->encode_buffer);
+ pprint->tempbuffer_f = 0;
+ }
+ return 0;
+}
+
+int
+dviprt_output(dviprt_print *pprint,uchar far *buf,long s)
+{
+ int c = pprint->output_proc(buf,s,pprint->pstream);
+ pprint->output_bytes += s;
+ return c;
+}
+
+/*--- internal routines ---*/
+static int
+dviprt_getmaximalwidth(dviprt_print *pprint)
+{
+ return MIN(pprint->printer->integer[CFG_MAXIMAL_UNIT],pprint->bitmap_width);
+}
+
+static long
+dviprt_getbuffersize(dviprt_print *pprint)
+{
+ long w = dviprt_getmaximalwidth(pprint);
+ long e = pprint->encode_getbuffersize_proc(pprint,w);
+ switch (pprint->printer->integer[CFG_UPPER_POS]
+ & (CFG_NON_TRANSPOSE_BIT | CFG_REVERSE_BIT)) {
+ case CFG_LEFT_IS_HIGH:
+ return e;
+ default:
+ return w * dviprt_getscanlines(pprint) + e;
+ }
+}
+
+static int
+dviprt_flush_buffer(dviprt_print *pprint,uchar far *fb)
+{
+ dviprt_cfg_t *pprt;
+ int code;
+
+ pprt = pprint->printer;
+ while (pprint->device_y < pprint->bitmap_y) { /* skip vertical spaces */
+ pprint->device_y++;
+ code = dviprt_output_expr(pprint,CFG_LINE_FEED,0,0);
+ pprint->device_x = 0;
+ }
+ while (pprint->last_x < pprint->bitmap_x) {
+ int w;
+ while (pprint->device_x < pprint->last_x) { /* skip horizontal spaces */
+ w = MIN(pprt->integer[CFG_MAXIMAL_UNIT],
+ pprint->last_x - pprint->device_x);
+ code = dviprt_output_expr(pprint,CFG_SKIP_SPACES,w,0);
+ pprint->device_x += w;
+ }
+ w = MIN(pprt->integer[CFG_MAXIMAL_UNIT],pprint->bitmap_x-pprint->last_x);
+ code = pprint->output_maximal_unit(pprint,fb+pprint->last_x,w);
+ if (code < 0) return code;
+ pprint->last_x += w;
+ if (!(pprt->integer[CFG_UPPER_POS] & CFG_NON_MOVING))
+ pprint->device_x += w;
+ }
+ return 0;
+}
+
+static int
+dviprt_output_nontranspose(dviprt_print *pprint,uchar far *fb,uint width)
+{
+ int code;
+ uint dsize;
+ uint y;
+ uint pins;
+
+ pins = dviprt_getscanlines(pprint);
+
+ dsize = 0;
+ pprint->psource = fb;
+ for (y = pins ; y>0 ; y--) {
+ int dsize_line;
+ dsize_line = pprint->encode_encode_proc(pprint,(long)width,0);
+ if (dsize_line < 0) return dsize_line;
+ dsize += dsize_line;
+ pprint->psource += pprint->bitmap_width;
+ }
+
+ code = dviprt_output_expr(pprint,CFG_SEND_BIT_IMAGE,width,dsize);
+ if (code < 0) return code;
+
+ pprint->psource = fb;
+ for (y = pins ; y>0 ; y--) {
+ int dsize_line;
+ dsize_line = pprint->encode_encode_proc(pprint,(long)width,1);
+ code = dviprt_output_expr(pprint,CFG_BIT_ROW_HEADER,width,dsize_line);
+ if (code < 0) return code;
+ code = dviprt_output(pprint,pprint->poutput,dsize_line);
+ if (code < 0) return code;
+ pprint->psource += pprint->bitmap_width;
+ }
+
+ code = dviprt_output_expr(pprint,CFG_AFTER_BIT_IMAGE,width,dsize);
+ if (code < 0) return code;
+
+ return 0;
+}
+
+static int
+dviprt_output_nontranspose_reverse(dviprt_print *pprint,uchar far *fb,uint width)
+{
+ uchar far *psrc;
+ uchar far *pbuf;
+ int code;
+ uint src_size;
+ uint dsize;
+ uint y;
+ uint pins;
+
+ pins = dviprt_getscanlines(pprint);
+ src_size = width * pins;
+
+ psrc = pprint->source_buffer;
+ for (y = pins ; y > 0; y--) {
+ uint i;
+ pbuf = fb;
+ for (i=width;i>0;i--) *psrc++ = *pbuf++;
+ fb += pprint->bitmap_width;
+ }
+
+ /* here, reverse bits */
+ psrc = pprint->source_buffer;
+ dviprt_reverse_bits(psrc,src_size);
+
+ dsize = 0;
+ pprint->psource = pprint->source_buffer;
+ for (y = pins ; y>0 ; y--) {
+ int dsize_line;
+ dsize_line = pprint->encode_encode_proc(pprint,(long)width,0);
+ if (dsize_line < 0) return dsize_line;
+ dsize += dsize_line;
+ pprint->psource += width;
+ }
+
+ code = dviprt_output_expr(pprint,CFG_SEND_BIT_IMAGE,width,dsize);
+ if (code < 0) return code;
+
+ pprint->psource = pprint->source_buffer;
+ for (y = pins ; y>0 ; y--) {
+ int dsize_line;
+ dsize_line = pprint->encode_encode_proc(pprint,(long)width,1);
+ code = dviprt_output_expr(pprint,CFG_BIT_ROW_HEADER,width,dsize_line);
+ if (code < 0) return code;
+ code = dviprt_output(pprint,pprint->poutput,dsize_line);
+ if (code < 0) return code;
+ pprint->psource += width;
+ }
+
+ code = dviprt_output_expr(pprint,CFG_AFTER_BIT_IMAGE,width,dsize);
+ if (code < 0) return code;
+
+ return 0;
+}
+
+static int
+dviprt_output_transpose(dviprt_print *pprint,uchar far *fb,uint width)
+{
+ uchar far *psrc;
+ uchar far *pbuf;
+ int code;
+ uint src_size;
+ uint dsize;
+ uint pins,pins8;
+ int y;
+
+ pins8 = pprint->printer->integer[CFG_PINS];
+ pins = pins8 * 8;
+ src_size = width * pins;
+ psrc = pprint->source_buffer;
+ {
+ uchar far *pdst;
+ uint sskip;
+ sskip = pprint->bitmap_width * 8;
+ for (y = pins8-1; y >= 0 ; y--) {
+ uint i;
+ pbuf = fb;
+ pdst = psrc;
+ for (i=width;i>0;i--) {
+ dviprt_transpose8x8(pbuf,pprint->bitmap_width,pdst,pins8);
+ pbuf ++;
+ pdst += pins;
+ }
+ fb += sskip;
+ psrc++;
+ }
+ }
+
+ psrc = pprint->source_buffer;
+
+ /* here, reverse bits */
+ if (pprint->printer->integer[CFG_UPPER_POS] & CFG_REVERSE_BIT)
+ dviprt_reverse_bits(psrc,src_size);
+
+ dsize = 0;
+ pprint->psource = pprint->source_buffer;
+ for (y = pins ; y>0 ; y--) {
+ int dsize_line;
+ dsize_line = pprint->encode_encode_proc(pprint,(long)width,0);
+ if (dsize_line < 0) return dsize_line;
+ dsize += dsize_line;
+ pprint->psource += width;
+ }
+
+ code = dviprt_output_expr(pprint,CFG_SEND_BIT_IMAGE,width,dsize);
+ if (code < 0) return code;
+
+ pprint->psource = pprint->source_buffer;
+ for (y = pins ; y>0 ; y--) {
+ uint dsize_line;
+ dsize_line = pprint->encode_encode_proc(pprint,(long)width,1);
+ code = dviprt_output(pprint,pprint->poutput,dsize_line);
+ if (code < 0) return code;
+ pprint->psource += width;
+ }
+
+ code = dviprt_output_expr(pprint,CFG_AFTER_BIT_IMAGE,width,dsize);
+ if (code < 0) return code;
+
+ return 0;
+}
+
+static int
+dviprt_transpose8x8(uchar far *inp,uint line_size,uchar far *outp,uint dist)
+{
+ register uint ae, bf, cg, dh;
+ {
+ uchar far *ptr4 = inp + (line_size << 2);
+ ae = ((uint)*inp << 8) + *ptr4;
+ inp += line_size, ptr4 += line_size;
+ bf = ((uint)*inp << 8) + *ptr4;
+ inp += line_size, ptr4 += line_size;
+ cg = ((uint)*inp << 8) + *ptr4;
+ inp += line_size, ptr4 += line_size;
+ dh = ((uint)*inp << 8) + *ptr4;
+ }
+ /* Check for all 8 bytes being the same. */
+ /* This is especially worth doing for the case where all are zero. */
+ if ( ae == bf && ae == cg && ae == dh && (ae >> 8) == (ae & 0xff) ) {
+ if ( ae == 0 ) goto store;
+ *outp = -((ae >> 7) & 1);
+ outp += dist;
+ *outp = -((ae >> 6) & 1);
+ outp += dist;
+ *outp = -((ae >> 5) & 1);
+ outp += dist;
+ *outp = -((ae >> 4) & 1);
+ outp += dist;
+ *outp = -((ae >> 3) & 1);
+ outp += dist;
+ *outp = -((ae >> 2) & 1);
+ outp += dist;
+ *outp = -((ae >> 1) & 1);
+ outp += dist;
+ *outp = -(ae & 1);
+ }
+ else {
+ register uint temp;
+
+ /* Transpose a block of bits between registers. */
+#define transpose(r,s,mask,shift)\
+ r ^= (temp = ((s >> shift) ^ r) & mask);\
+ s ^= temp << shift
+
+ /* Transpose blocks of 4 x 4 */
+#define transpose4(r) transpose(r,r,0x00f0,4)
+ transpose4(ae);
+ transpose4(bf);
+ transpose4(cg);
+ transpose4(dh);
+
+ /* Transpose blocks of 2 x 2 */
+ transpose(ae, cg, 0x3333, 2);
+ transpose(bf, dh, 0x3333, 2);
+
+ /* Transpose blocks of 1 x 1 */
+ transpose(ae, bf, 0x5555, 1);
+ transpose(cg, dh, 0x5555, 1);
+
+ store: *outp = ae >> 8;
+ outp += dist;
+ *outp = bf >> 8;
+ outp += dist;
+ *outp = cg >> 8;
+ outp += dist;
+ *outp = dh >> 8;
+ outp += dist;
+ *outp = (uchar)ae;
+ outp += dist;
+ *outp = (uchar)bf;
+ outp += dist;
+ *outp = (uchar)cg;
+ outp += dist;
+ *outp = (uchar)dh;
+ }
+ return 0;
+}
+
+static int
+dviprt_reverse_bits(uchar far *buf,uint s)
+{
+ static uchar rev[256] = {
+ 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,
+ };
+ while (s-- > 0) {
+ *buf = rev[*buf];
+ buf++;
+ }
+ return 0;
+}
+
+static int
+dviprt_output_expr(dviprt_print *pprint,int numb,uint width,uint dsize)
+{
+ uchar *pcode;
+ dviprt_cfg_t *pprt;
+ uint v;
+ uint len;
+
+ pprt = pprint->printer;
+ if (pprt->prtcode[numb] == NULL) return 0;
+ pcode = pprt->prtcode[numb];
+ len = pprt->prtcode_size[numb];
+
+ while (*pcode && len>0) {
+ if (*pcode & CFG_FMT_BIT) {
+ uint stack[CFG_STACK_DEPTH];
+ int stack_p = -1;
+ uchar fmt = *pcode++;
+ uint l = *pcode++;
+ len -=2;
+ while (l>0) {
+ if ((*pcode & CFG_EXPR_TYPE_BIT) == CFG_OP) {
+ uint v2 = stack[stack_p--];
+ v = stack[stack_p--];
+ switch (*pcode) {
+ case CFG_OP_ADD: v += v2; break;
+ case CFG_OP_SUB: v -= v2; break;
+ case CFG_OP_MUL: v *= v2; break;
+ case CFG_OP_DIV:
+ if (v2 == 0) { /* divided by zero. */
+ div_by_zero:
+ return CFG_ERROR_DIV0;
+ }
+ v /= v2;
+ break;
+ case CFG_OP_MOD:
+ if (v2 == 0) goto div_by_zero;
+ v %= v2;
+ break;
+ case CFG_OP_SHL: v <<= v2; break;
+ case CFG_OP_SHR: v >>= v2; break;
+ case CFG_OP_AND: v &= v2; break;
+ case CFG_OP_OR : v |= v2; break;
+ case CFG_OP_XOR: v ^= v2; break;
+ default:
+ ;
+ }
+ stack[++stack_p] = v;
+ }
+ else if ((*pcode & CFG_EXPR_TYPE_BIT) == CFG_VAL) {
+ {
+ switch (*pcode) {
+ case CFG_VAL_DEFAULT: v = width*8; break;
+ case CFG_VAL_CONSTANT: v = pprt->integer[CFG_CONSTANT]; break;
+ case CFG_VAL_WIDTH: v = pprint->bitmap_width*8; break;
+ case CFG_VAL_HEIGHT: v = pprint->bitmap_height; break;
+ case CFG_VAL_PAGE:
+ case CFG_VAL_PAGECOUNT: v = pprint->page_count; break;
+ case CFG_VAL_DATASIZE: v = dsize; break;
+ case CFG_VAL_X_DPI: v = (int)pprt->integer[CFG_DPI]; break;
+ case CFG_VAL_Y_DPI:
+ v = pprt->integer[CFG_Y_DPI] > 0 ?
+ pprt->integer[CFG_Y_DPI] : pprt->integer[CFG_DPI];
+ break;
+ case CFG_VAL_PINS_BYTE: v = pprt->integer[CFG_PINS]; break;
+ case CFG_VAL_X_POS: v = pprint->device_x*8; break;
+ case CFG_VAL_Y_POS:
+ v = pprint->device_y * dviprt_getscanlines(pprint);
+ break;
+ }
+ }
+ stack[++stack_p] = v;
+ }
+ else {
+ stack[++stack_p] = *pcode;
+ }
+ l--; pcode++; len--;
+ }
+ v = stack[stack_p];
+ if ((fmt & CFG_FMT_FORMAT_BIT) == CFG_FMT_STRINGS) {
+ uint l = *pcode++;
+ len--;
+ while (v-- > 0)
+ dviprt_output(pprint,(uchar far *)pcode,l);
+ pcode += l;
+ len -= l;
+ }
+ else if ((fmt & CFG_FMT_FORMAT_BIT) == CFG_FMT_ASSIGNMENT) {
+ pprint->uservar[fmt&0x0f] = v;
+ }
+ else { uchar valbuf[10];
+ int cols = fmt & CFG_FMT_COLUMN_BIT;
+ int i;
+
+ switch (fmt & CFG_FMT_FORMAT_BIT) {
+ case CFG_FMT_BIN_LTOH:
+ for (i=0;i<cols;i++) {
+ valbuf[i] = v&0xff;
+ v >>= 8;
+ }
+ break;
+ case CFG_FMT_BIN_HTOL:
+ for (i=cols-1;i>=0;i--) {
+ valbuf[i] = v&0xff;
+ v >>= 8;
+ }
+ break;
+ default:
+ { char *f;
+ char fmtbuf[10];
+ switch(fmt & CFG_FMT_FORMAT_BIT) {
+ case CFG_FMT_HEX_UPPER: f = "X"; break;
+ case CFG_FMT_HEX_LOWER: f = "x"; break;
+ case CFG_FMT_DECIMAL: f = "u"; break;
+ case CFG_FMT_OCTAL: f = "o"; break;
+ }
+ if (cols == 0)
+ strcpy(fmtbuf,"%");
+ else
+ gs_sprintf(fmtbuf,"%%0%d",cols);
+ strcat(fmtbuf,f);
+ gs_sprintf(valbuf,fmtbuf,stack[stack_p]);
+ cols = strlen(valbuf);
+ if (fmt & CFG_FMT_ISO_BIT)
+ valbuf[cols-1] |= 0x10;
+ }
+ break;
+ }
+ dviprt_output(pprint,(uchar far *)valbuf, cols);
+ }
+ }
+ else {
+ uint l = *pcode++;
+ len--;
+ dviprt_output(pprint,(uchar far *)pcode,l);
+ pcode += l;
+ len -= l;
+ }
+ }
+ return 0;
+}
+
+static int
+dviprt_default_outputproc(uchar far *buf,long s,void *fp)
+{
+#ifdef __MSDOS_REAL__
+ while (s-- > 0) {
+ if (fputc(*buf++,fp) == EOF)
+ return CFG_ERROR_OUTPUT;
+ }
+ return 0;
+#else
+ return fwrite(buf,s,1,fp) == 1 ? 0 : CFG_ERROR_OUTPUT;
+#endif
+}
+/***** End of print.c *****/
+
+/***** From encode.c *****/
+/* $Id: ENCODE.C 1.1 1994/08/30 02:27:02 kaz Exp kaz $ */
+
+#define DVIPRT_SUPPORT_FAX 1
+#define DVIPRT_SUPPORT_PCL 1
+
+/*--- forward declarations ---*/
+static long dviprt_null_getworksize(dviprt_print *,long );
+static long dviprt_null_encode(dviprt_print *,long ,int );
+static long dviprt_hex_getworksize(dviprt_print *,long );
+static long dviprt_hex_encode(dviprt_print *,long ,int );
+#if DVIPRT_SUPPORT_FAX
+static long dviprt_fax_getworksize(dviprt_print *,long );
+static long dviprt_fax_encode(dviprt_print *,long ,int );
+#endif
+#if DVIPRT_SUPPORT_PCL
+static long dviprt_pcl1_getworksize(dviprt_print *,long );
+static long dviprt_pcl1_encode(dviprt_print *,long ,int );
+static long dviprt_pcl2_getworksize(dviprt_print *,long );
+static long dviprt_pcl2_encode(dviprt_print *,long ,int );
+#endif
+
+static dviprt_encoder dviprt_encoder_list[] = {
+ { CFG_ENCODE_NULL, dviprt_null_getworksize,dviprt_null_encode},
+ { CFG_ENCODE_HEX, dviprt_hex_getworksize,dviprt_hex_encode},
+#if DVIPRT_SUPPORT_FAX
+ { CFG_ENCODE_FAX, dviprt_fax_getworksize,dviprt_fax_encode},
+#endif
+#if DVIPRT_SUPPORT_PCL
+ { CFG_ENCODE_PCL1, dviprt_pcl1_getworksize,dviprt_pcl1_encode},
+ { CFG_ENCODE_PCL2, dviprt_pcl2_getworksize,dviprt_pcl2_encode},
+#endif
+ { -1 },
+};
+
+/*--- internal routines ---*/
+/* The users MUST NOT USE these functions */
+static dviprt_encoder *
+dviprt_getencoder_(int no)
+{
+ int i;
+ for (i=0;dviprt_encoder_list[i].no >= 0;i++)
+ if (no == dviprt_encoder_list[i].no)
+ return dviprt_encoder_list+i;
+ return NULL;
+}
+
+static long
+dviprt_null_getworksize(dviprt_print *pprint,long s)
+{
+ return 0;
+}
+static long
+dviprt_null_encode(dviprt_print *pprint,long s,int f)
+{
+ pprint->poutput = pprint->psource;
+ return s;
+}
+
+static long
+dviprt_hex_getworksize(dviprt_print *pprint,long s)
+{
+ return s*2;
+}
+static long
+dviprt_hex_encode(dviprt_print *pprint,long s,int f)
+{
+ if (f) {
+ uchar far *w;
+ uchar far *buf;
+ static uchar hex[] = "0123456789ABCDEF";
+ int i=s;
+ w = pprint->poutput = pprint->encode_buffer;
+ buf = pprint->psource;
+ while (i-->0) {
+ *w++ = hex[(*buf>>4)&0x0f];
+ *w++ = hex[*buf&0x0f];
+ buf++;
+ }
+ }
+ return s*2;
+}
+
+#if DVIPRT_SUPPORT_PCL
+static long
+dviprt_pcl1_getworksize(dviprt_print *pprint,long s)
+{
+ return s*2;
+}
+static long
+dviprt_pcl1_encode(dviprt_print *pprint,long s,int f)
+{
+ uchar far *src;
+ uchar far *end;
+ uchar far *out;
+ long total = 0;
+
+ src = pprint->psource;
+ end = src + s;
+ out = pprint->poutput = pprint->encode_buffer;
+
+ while ( src < end ) {
+ uchar test = *src++;
+ uchar far *run = src;
+ while ( src < end && *src == test ) src++;
+ if (f) {
+ while ( src - run > 255 ) {
+ *out++ = 255;
+ *out++ = test;
+ total += 2;
+ run += 256;
+ }
+ *out++ = src - run;
+ *out++ = test;
+ total += 2;
+ }
+ else {
+ total += (((src-run)/255 + ((src-run)%255) ? 1 : 0)) * 2;
+ }
+ }
+ return total;
+}
+
+static long
+dviprt_pcl2_getworksize(dviprt_print *pprint,long s)
+{
+ return s + s/127 + 1;
+}
+static long
+dviprt_pcl2_encode(dviprt_print *pprint,long s,int f)
+{
+ uchar far *exam;
+ uchar far *cptr;
+ uchar far *end;
+ uchar far *src;
+ long total = 0;
+
+ src = pprint->psource;
+ exam = src;
+ cptr = pprint->poutput = pprint->encode_buffer;
+ end = exam + s;
+
+ for ( ; ; ) {
+ uchar test = *exam++;
+ int len;
+ while ((test != *exam) && (exam < end))
+ test = *exam++;
+ if (exam < end) exam--;
+ len = exam - src;
+ if (f) {
+ while (len > 0){
+ int i;
+ int count = len;
+ if (count>127) count=127;
+ *cptr++=count-1;
+ for (i = 0 ; i < count ; i++) *cptr++ = *src++;
+ len -= count;
+ total += (count+1);
+ }
+ }
+ else {
+ total += len + ((len/127)+(len%127 ? 1 : 0));
+ }
+ if (exam >= end) break;
+ exam++;
+ while ((test == *exam) && (exam < end))
+ exam++;
+ len = exam - src;
+ if (f) {
+ while (len > 0) {
+ int count = len;
+ if (count > 127) count = 127;
+ *cptr++ = (257-count);
+ *cptr++ = test;
+ len -= count;
+ total += 2;
+ }
+ }
+ else {
+ total += ((len/127 + (len%127) ? 1 : 0)) * 2;
+ }
+ if (exam >= end) break;
+ src = exam;
+ }
+ return total;
+}
+#endif /* DVIPRT_SUPPORT_PCL */
+
+#if DVIPRT_SUPPORT_FAX
+static long
+dviprt_fax_getworksize(dviprt_print *pprint,long s)
+{
+ long size = s * 8 + 7;
+ return MAX(size*2/9+4,size/8) * dviprt_getscanlines(pprint) + 1;
+}
+
+#define MAX_FAX_WIDTH 2623
+typedef struct {
+ int data;
+ int length;
+} FaxEncode_t;
+typedef struct {
+ uchar i_bitbuf;
+ uchar far *i_buf;
+ int i_count;
+
+ uchar o_bitbuf;
+ uchar far *o_buf;
+ int o_count;
+ int o_bufcount;
+} FaxEncodeInfo;
+static int dviprt_fax_set_white(int,FaxEncodeInfo *);
+static int dviprt_fax_set_black(int,FaxEncodeInfo *);
+static int dviprt_fax_set_bitcount(FaxEncode_t *,FaxEncodeInfo *);
+
+static long
+dviprt_fax_encode(dviprt_print *pprint,long s,int f)
+{
+ static FaxEncode_t eol_code = {0x800,12};
+ int allruns = 0;
+ int width = s * 8;
+ int top_bit_count = 8;
+ FaxEncodeInfo info;
+ uchar far *src_end;
+ uchar recover;
+
+ src_end = pprint->psource + s;
+ recover = *src_end;
+ *src_end = 0xaa;
+
+ /* initializing */
+ info.i_buf = pprint->psource;
+ info.i_bitbuf = *info.i_buf++;
+ info.i_count = 8;
+ info.o_buf = pprint->poutput = pprint->encode_buffer;
+ info.o_bitbuf = 0;
+ info.o_count = 8;
+ info.o_bufcount = 0;
+
+ dviprt_fax_set_bitcount(&eol_code,&info);
+
+ for(;;){
+ static uchar ROW[9] =
+ {0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
+ static uchar MASK[9] =
+ {0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff};
+ int white_run_length;
+ int black_run_length;
+
+ /* count run-length */
+ /* remaining bits in the current byte are white? */
+ if (!(info.i_bitbuf &= MASK[info.i_count])){
+ do{
+ top_bit_count += 8; /* next byte is also white */
+ } while(!(info.i_bitbuf = *info.i_buf++));
+ info.i_count = 8;
+ }
+ /* current byte contains white and black bits */
+ while(!(info.i_bitbuf & ROW[info.i_count]))
+ info.i_count--; /* skip white bits */
+ white_run_length = top_bit_count - (black_run_length = info.i_count);
+
+ /* remaining bits in the current byte are black? */
+ if (info.i_bitbuf == MASK[info.i_count]){
+ do{
+ black_run_length += 8;
+ /* next byte is also black */
+ } while((info.i_bitbuf = *info.i_buf++) == 0xff);
+ info.i_count = 8;
+ }
+ else info.i_count--; /* skip the top black bit */
+
+ /* current byte contains white and black bits */
+ while(info.i_bitbuf & ROW[info.i_count])
+ info.i_count--; /* skip black bits */
+ black_run_length -= (top_bit_count = info.i_count);
+
+ /* output */
+ if((allruns += white_run_length) < width)
+ dviprt_fax_set_white(white_run_length,&info);
+ else{
+ dviprt_fax_set_white(white_run_length + width - allruns,&info);
+ break;
+ }
+ if((allruns += black_run_length) < width)
+ dviprt_fax_set_black(black_run_length,&info);
+ else{
+ dviprt_fax_set_black(black_run_length + width - allruns,&info);
+ break;
+ }
+ }
+
+ info.o_bufcount++;
+ if (info.o_count < 8)
+ *info.o_buf++ = info.o_bitbuf;
+ else
+ *info.o_buf++ = 0;
+ *src_end = recover;
+
+ return info.o_bufcount;
+}
+
+static int
+dviprt_fax_set_bitcount(FaxEncode_t *pt,FaxEncodeInfo *info)
+{
+ int data, length;
+
+ data = pt->data;
+ length = pt->length;
+ while( (length -= info->o_count) >= 0 ){
+ *info->o_buf++ = ((data << (8 - info->o_count))|info->o_bitbuf);
+ info->o_bitbuf = 0;
+ info->o_bufcount++;
+ data >>= info->o_count;
+ info->o_count = 8;
+ }
+ info->o_bitbuf |= (data << (8 - info->o_count));
+ info->o_count = -length;
+ return 0;
+}
+
+static int
+dviprt_fax_set_white(int count,FaxEncodeInfo *info)
+{
+ static FaxEncode_t white_count_list[]={
+ { 0x00AC, 8, }, /* 0 */
+ { 0x0038, 6, }, /* 1 */
+ { 0x000E, 4, }, /* 2 */
+ { 0x0001, 4, }, /* 3 */
+ { 0x000D, 4, }, /* 4 */
+ { 0x0003, 4, }, /* 5 */
+ { 0x0007, 4, }, /* 6 */
+ { 0x000F, 4, }, /* 7 */
+ { 0x0019, 5, }, /* 8 */
+ { 0x0005, 5, }, /* 9 */
+ { 0x001C, 5, }, /* 10 */
+ { 0x0002, 5, }, /* 11 */
+ { 0x0004, 6, }, /* 12 */
+ { 0x0030, 6, }, /* 13 */
+ { 0x000B, 6, }, /* 14 */
+ { 0x002B, 6, }, /* 15 */
+ { 0x0015, 6, }, /* 16 */
+ { 0x0035, 6, }, /* 17 */
+ { 0x0072, 7, }, /* 18 */
+ { 0x0018, 7, }, /* 19 */
+ { 0x0008, 7, }, /* 20 */
+ { 0x0074, 7, }, /* 21 */
+ { 0x0060, 7, }, /* 22 */
+ { 0x0010, 7, }, /* 23 */
+ { 0x000A, 7, }, /* 24 */
+ { 0x006A, 7, }, /* 25 */
+ { 0x0064, 7, }, /* 26 */
+ { 0x0012, 7, }, /* 27 */
+ { 0x000C, 7, }, /* 28 */
+ { 0x0040, 8, }, /* 29 */
+ { 0x00C0, 8, }, /* 30 */
+ { 0x0058, 8, }, /* 31 */
+ { 0x00D8, 8, }, /* 32 */
+ { 0x0048, 8, }, /* 33 */
+ { 0x00C8, 8, }, /* 34 */
+ { 0x0028, 8, }, /* 35 */
+ { 0x00A8, 8, }, /* 36 */
+ { 0x0068, 8, }, /* 37 */
+ { 0x00E8, 8, }, /* 38 */
+ { 0x0014, 8, }, /* 39 */
+ { 0x0094, 8, }, /* 40 */
+ { 0x0054, 8, }, /* 41 */
+ { 0x00D4, 8, }, /* 42 */
+ { 0x0034, 8, }, /* 43 */
+ { 0x00B4, 8, }, /* 44 */
+ { 0x0020, 8, }, /* 45 */
+ { 0x00A0, 8, }, /* 46 */
+ { 0x0050, 8, }, /* 47 */
+ { 0x00D0, 8, }, /* 48 */
+ { 0x004A, 8, }, /* 49 */
+ { 0x00CA, 8, }, /* 50 */
+ { 0x002A, 8, }, /* 51 */
+ { 0x00AA, 8, }, /* 52 */
+ { 0x0024, 8, }, /* 53 */
+ { 0x00A4, 8, }, /* 54 */
+ { 0x001A, 8, }, /* 55 */
+ { 0x009A, 8, }, /* 56 */
+ { 0x005A, 8, }, /* 57 */
+ { 0x00DA, 8, }, /* 58 */
+ { 0x0052, 8, }, /* 59 */
+ { 0x00D2, 8, }, /* 60 */
+ { 0x004C, 8, }, /* 61 */
+ { 0x00CC, 8, }, /* 62 */
+ { 0x002C, 8, }, /* 63 */
+
+ { 0x001B, 5, }, /* 64 */
+ { 0x0009, 5, }, /* 128 */
+ { 0x003A, 6, }, /* 192 */
+ { 0x0076, 7, }, /* 256 */
+ { 0x006C, 8, }, /* 320 */
+ { 0x00EC, 8, }, /* 384 */
+ { 0x0026, 8, }, /* 448 */
+ { 0x00A6, 8, }, /* 512 */
+ { 0x0016, 8, }, /* 576 */
+ { 0x00E6, 8, }, /* 640 */
+ { 0x0066, 9, }, /* 704 */
+ { 0x0166, 9, }, /* 768 */
+ { 0x0096, 9, }, /* 832 */
+ { 0x0196, 9, }, /* 896 */
+ { 0x0056, 9, }, /* 960 */
+ { 0x0156, 9, }, /* 1024 */
+ { 0x00D6, 9, }, /* 1088 */
+ { 0x01D6, 9, }, /* 1152 */
+ { 0x0036, 9, }, /* 1216 */
+ { 0x0136, 9, }, /* 1280 */
+ { 0x00B6, 9, }, /* 1344 */
+ { 0x01B6, 9, }, /* 1408 */
+ { 0x0032, 9, }, /* 1472 */
+ { 0x0132, 9, }, /* 1536 */
+ { 0x00B2, 9, }, /* 1600 */
+ { 0x0006, 6, }, /* 1664 */
+ { 0x01B2, 9, }, /* 1728 */
+
+ { 0x0080, 11, }, /* 1792 */
+ { 0x0180, 11, }, /* 1856 */
+ { 0x0580, 11, }, /* 1920 */
+ { 0x0480, 12, }, /* 1984 */
+ { 0x0C80, 12, }, /* 2048 */
+ { 0x0280, 12, }, /* 2112 */
+ { 0x0A80, 12, }, /* 2176 */
+ { 0x0680, 12, }, /* 2240 */
+ { 0x0E80, 12, }, /* 2304 */
+ { 0x0380, 12, }, /* 2368 */
+ { 0x0B80, 12, }, /* 2432 */
+ { 0x0780, 12, }, /* 2496 */
+ { 0x0F80, 12, }, /* 2560 */
+ };
+ while (count >= 64){
+ if(count <= MAX_FAX_WIDTH){
+ dviprt_fax_set_bitcount((white_count_list + 63) + (count/64),info);
+ break;
+ }
+ dviprt_fax_set_white(MAX_FAX_WIDTH,info);
+ dviprt_fax_set_black(0,info);
+ count -= MAX_FAX_WIDTH;
+ }
+ dviprt_fax_set_bitcount(white_count_list + (count & 63) ,info);
+ return 0;
+}
+
+static int
+dviprt_fax_set_black(int count,FaxEncodeInfo *info)
+{
+ static FaxEncode_t black_count_list[]={
+ { 0x03B0, 10, }, /* 0 */
+ { 0x0002, 3, }, /* 1 */
+ { 0x0003, 2, }, /* 2 */
+ { 0x0001, 2, }, /* 3 */
+ { 0x0006, 3, }, /* 4 */
+ { 0x000C, 4, }, /* 5 */
+ { 0x0004, 4, }, /* 6 */
+ { 0x0018, 5, }, /* 7 */
+ { 0x0028, 6, }, /* 8 */
+ { 0x0008, 6, }, /* 9 */
+ { 0x0010, 7, }, /* 10 */
+ { 0x0050, 7, }, /* 11 */
+ { 0x0070, 7, }, /* 12 */
+ { 0x0020, 8, }, /* 13 */
+ { 0x00E0, 8, }, /* 14 */
+ { 0x0030, 9, }, /* 15 */
+ { 0x03A0, 10, }, /* 16 */
+ { 0x0060, 10, }, /* 17 */
+ { 0x0040, 10, }, /* 18 */
+ { 0x0730, 11, }, /* 19 */
+ { 0x00B0, 11, }, /* 20 */
+ { 0x01B0, 11, }, /* 21 */
+ { 0x0760, 11, }, /* 22 */
+ { 0x00A0, 11, }, /* 23 */
+ { 0x0740, 11, }, /* 24 */
+ { 0x00C0, 11, }, /* 25 */
+ { 0x0530, 12, }, /* 26 */
+ { 0x0D30, 12, }, /* 27 */
+ { 0x0330, 12, }, /* 28 */
+ { 0x0B30, 12, }, /* 29 */
+ { 0x0160, 12, }, /* 30 */
+ { 0x0960, 12, }, /* 31 */
+ { 0x0560, 12, }, /* 32 */
+ { 0x0D60, 12, }, /* 33 */
+ { 0x04B0, 12, }, /* 34 */
+ { 0x0CB0, 12, }, /* 35 */
+ { 0x02B0, 12, }, /* 36 */
+ { 0x0AB0, 12, }, /* 37 */
+ { 0x06B0, 12, }, /* 38 */
+ { 0x0EB0, 12, }, /* 39 */
+ { 0x0360, 12, }, /* 40 */
+ { 0x0B60, 12, }, /* 41 */
+ { 0x05B0, 12, }, /* 42 */
+ { 0x0DB0, 12, }, /* 43 */
+ { 0x02A0, 12, }, /* 44 */
+ { 0x0AA0, 12, }, /* 45 */
+ { 0x06A0, 12, }, /* 46 */
+ { 0x0EA0, 12, }, /* 47 */
+ { 0x0260, 12, }, /* 48 */
+ { 0x0A60, 12, }, /* 49 */
+ { 0x04A0, 12, }, /* 50 */
+ { 0x0CA0, 12, }, /* 51 */
+ { 0x0240, 12, }, /* 52 */
+ { 0x0EC0, 12, }, /* 53 */
+ { 0x01C0, 12, }, /* 54 */
+ { 0x0E40, 12, }, /* 55 */
+ { 0x0140, 12, }, /* 56 */
+ { 0x01A0, 12, }, /* 57 */
+ { 0x09A0, 12, }, /* 58 */
+ { 0x0D40, 12, }, /* 59 */
+ { 0x0340, 12, }, /* 60 */
+ { 0x05A0, 12, }, /* 61 */
+ { 0x0660, 12, }, /* 62 */
+ { 0x0E60, 12, }, /* 63 */
+
+ { 0x03C0, 10, }, /* 64 */
+ { 0x0130, 12, }, /* 128 */
+ { 0x0930, 12, }, /* 192 */
+ { 0x0DA0, 12, }, /* 256 */
+ { 0x0CC0, 12, }, /* 320 */
+ { 0x02C0, 12, }, /* 384 */
+ { 0x0AC0, 12, }, /* 448 */
+ { 0x06C0, 13, }, /* 512 */
+ { 0x16C0, 13, }, /* 576 */
+ { 0x0A40, 13, }, /* 640 */
+ { 0x1A40, 13, }, /* 704 */
+ { 0x0640, 13, }, /* 768 */
+ { 0x1640, 13, }, /* 832 */
+ { 0x09C0, 13, }, /* 896 */
+ { 0x19C0, 13, }, /* 960 */
+ { 0x05C0, 13, }, /* 1024 */
+ { 0x15C0, 13, }, /* 1088 */
+ { 0x0DC0, 13, }, /* 1152 */
+ { 0x1DC0, 13, }, /* 1216 */
+ { 0x0940, 13, }, /* 1280 */
+ { 0x1940, 13, }, /* 1344 */
+ { 0x0540, 13, }, /* 1408 */
+ { 0x1540, 13, }, /* 1472 */
+ { 0x0B40, 13, }, /* 1536 */
+ { 0x1B40, 13, }, /* 1600 */
+ { 0x04C0, 13, }, /* 1664 */
+ { 0x14C0, 13, }, /* 1728 */
+
+ { 0x0080, 11, }, /* 1792 */
+ { 0x0180, 11, }, /* 1856 */
+ { 0x0580, 11, }, /* 1920 */
+ { 0x0480, 12, }, /* 1984 */
+ { 0x0C80, 12, }, /* 2048 */
+ { 0x0280, 12, }, /* 2112 */
+ { 0x0A80, 12, }, /* 2176 */
+ { 0x0680, 12, }, /* 2240 */
+ { 0x0E80, 12, }, /* 2304 */
+ { 0x0380, 12, }, /* 2368 */
+ { 0x0B80, 12, }, /* 2432 */
+ { 0x0780, 12, }, /* 2496 */
+ { 0x0F80, 12, }, /* 2560 */
+ };
+
+ while (count >= 64){
+ if(count <= MAX_FAX_WIDTH){
+ dviprt_fax_set_bitcount((black_count_list + 63) + (count/64),info);
+ break;
+ }
+ dviprt_fax_set_black(MAX_FAX_WIDTH,info);
+ dviprt_fax_set_white(0,info);
+ count -= MAX_FAX_WIDTH;
+ }
+ dviprt_fax_set_bitcount(black_count_list + (count & 63),info);
+ return 0;
+}
+#endif /* DVIPRT_SUPPORT_FAX */
+/***** End of encode.c *****/
diff --git a/contrib/japanese/dviprlib.h b/contrib/japanese/dviprlib.h
new file mode 100644
index 00000000..bf5a444f
--- /dev/null
+++ b/contrib/japanese/dviprlib.h
@@ -0,0 +1,357 @@
+/* COPYRIGHT (C) 1990, 1992 Aladdin Enterprises. All rights reserved.
+ Distributed by Free Software Foundation, Inc.
+
+ This file is part of Ghostscript.
+
+ Ghostscript is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+ to anyone for the consequences of using it or for whether it serves any
+ particular purpose or works at all, unless he says so in writing. Refer
+ to the Ghostscript General Public License for full details.
+
+ Everyone is granted permission to copy, modify and redistribute
+ Ghostscript, but only under the conditions described in the Ghostscript
+ General Public License. A copy of this license is supposed to have been
+ given to you along with Ghostscript so you can know your rights and
+ responsibilities. It should be in a file named COPYING. Among other
+ things, the copyright notice and this notice must be preserved on all
+ copies. */
+
+/* dviprlib.h */
+
+/* $Id: S_CFGBLD.H 1.1 1994/08/30 02:27:18 kaz Exp kaz $ */
+
+#ifndef s_cfgbld_h_INCLUDED
+
+/* $Id: S_CFG.H 1.1 1994/08/30 02:27:18 kaz Exp kaz $ */
+
+#ifndef s_cfg_h_INCLUDED
+#define CFG_MAGIC_NUMBER ":K"
+#define CFG_VERSION 2
+
+#define CFG_NAME 0
+#define CFG_ENCODE_INFO 1
+#define CFG_STRINGS_TYPE_COUNT 2
+
+#define CFG_STRINGS_NAME "name", "encode_info"
+
+#define CFG_PINS 0
+#define CFG_MINIMAL_UNIT 1
+#define CFG_MAXIMAL_UNIT 2
+#define CFG_DPI 3
+#define CFG_UPPER_POS 4
+#define CFG_ENCODE 5
+#define CFG_CONSTANT 6
+#define CFG_Y_DPI 7
+#define CFG_INTEGER_TYPE_COUNT 8
+
+#define CFG_INTEGER_NAME "pins","minimal_unit","maximal_unit","dpi",\
+"upper_position","encode","constant","y_dpi"
+
+#define CFG_BIT_IMAGE_MODE 0
+#define CFG_SEND_BIT_IMAGE 1
+#define CFG_BIT_ROW_HEADER 2
+#define CFG_AFTER_BIT_IMAGE 3
+#define CFG_LINE_FEED 4
+#define CFG_FORM_FEED 5
+#define CFG_NORMAL_MODE 6
+#define CFG_SKIP_SPACES 7
+#define CFG_PRTCODE_TYPE_COUNT 8
+
+#define CFG_PRTCODE_NAME "bit_image_mode", "send_bit_image", "bit_row_header",\
+ "after_bit_image", "line_feed", "form_feed",\
+ "normal_mode", "skip_spaces"
+
+#define CFG_FMT_BIT 0x80
+#define CFG_FMT_FORMAT_BIT 0x70
+#define CFG_FMT_COLUMN_BIT 0x07
+#define CFG_FMT_ISO_BIT 0x08
+
+#define CFG_FMT_BIN_LTOH 0x00
+#define CFG_FMT_BIN_HTOL 0x10
+#define CFG_FMT_HEX_UPPER 0x20
+#define CFG_FMT_HEX_LOWER 0x30
+#define CFG_FMT_DECIMAL 0x40
+#define CFG_FMT_OCTAL 0x50
+#define CFG_FMT_ASSIGNMENT 0x60 /* assignment(user variables) */
+#define CFG_FMT_STRINGS 0x70
+
+#define CFG_EXPR_TYPE_BIT 0xe0
+#define CFG_EXPR_VAL_BIT 0x1f
+#define CFG_VAL 0x80
+#define CFG_VAL_DEFAULT (0x00 | CFG_VAL)
+#define CFG_VAL_CONSTANT (0x01 | CFG_VAL)
+#define CFG_VAL_WIDTH (0x02 | CFG_VAL)
+#define CFG_VAL_HEIGHT (0x03 | CFG_VAL)
+#define CFG_VAL_PAGE (0x04 | CFG_VAL)
+#define CFG_VAL_PAGECOUNT (0x05 | CFG_VAL)
+#define CFG_VAL_DATASIZE (0x06 | CFG_VAL)
+#define CFG_VAL_X_DPI (0x07 | CFG_VAL)
+#define CFG_VAL_Y_DPI (0x08 | CFG_VAL)
+#define CFG_VAL_PINS_BYTE (0x09 | CFG_VAL)
+#define CFG_VAL_X_POS (0x0a | CFG_VAL)
+#define CFG_VAL_Y_POS (0x0b | CFG_VAL)
+
+/* user variable 'A' -- 'P' (0xa0 -- 0xaf) */
+#define CFG_USERVAL (0x20 | CFG_VAL)
+#define CFG_USERVAL_COUNT 16
+
+#define CFG_OP 0xc0
+/* logic 2 operand */
+#define CFG_OP_ADD (0x00 | CFG_OP)
+#define CFG_OP_SUB (0x01 | CFG_OP)
+#define CFG_OP_MUL (0x02 | CFG_OP)
+#define CFG_OP_DIV (0x03 | CFG_OP)
+#define CFG_OP_MOD (0x04 | CFG_OP)
+
+#define CFG_OP_SHL (0x05 | CFG_OP)
+#define CFG_OP_SHR (0x06 | CFG_OP)
+#define CFG_OP_AND (0x07 | CFG_OP)
+#define CFG_OP_OR (0x08 | CFG_OP)
+#define CFG_OP_XOR (0x09 | CFG_OP)
+/* extra operation (user cannot use) */
+#define CFG_OP_POP (0x2e | CFG_OP)
+#define CFG_OP_NULL (0x2f | CFG_OP)
+
+#define CFG_OP_NAME "+","-","*","/",\
+"%","<",">","&",\
+ "|","^",\
+ /* 0x0a -- 0x0f */ NULL,NULL,\
+ /* Undefined */ NULL,NULL,NULL,NULL,\
+ \
+ /* 0x10 -- 0x1f*/ NULL,NULL,NULL,NULL,\
+ /* Undefined */ NULL,NULL,NULL,NULL,\
+ NULL,NULL,NULL,NULL,\
+ NULL,NULL,NULL,NULL,\
+ \
+ /* 0x20 -- 0x2d*/ NULL,NULL,NULL,NULL,\
+ /* Undefined */ NULL,NULL,NULL,NULL,\
+ NULL,NULL,NULL,NULL,\
+ NULL,NULL,\
+ \
+ "pop","null"
+
+#define CFG_TOP_IS_HIGH 0x00
+#define CFG_TOP_IS_LOW 0x80
+#define CFG_LEFT_IS_HIGH 0x40
+#define CFG_LEFT_IS_LOW 0xc0
+#define CFG_NON_MOVING 0x20
+#define CFG_NON_TRANSPOSE_BIT 0x40
+#define CFG_REVERSE_BIT 0x80
+#define CFG_PIN_POSITION_BITS 0xc0
+
+#define CFG_ENCODE_NAME "NULL","HEX","FAX","PCL1","PCL2"
+#define CFG_ENCODE_NULL 0x00
+#define CFG_ENCODE_HEX 0x01
+#define CFG_ENCODE_FAX 0x02
+#define CFG_ENCODE_PCL1 0x03
+#define CFG_ENCODE_PCL2 0x04
+#define CFG_ENCODE_LIPS3 0x05 /* Not implemented yet. */
+#define CFG_ENCODE_ESCPAGE 0x06 /* Not implemented yet. */
+#define CFG_ENCODE_COUNT 0x05
+
+#define CFG_STACK_DEPTH 20
+
+#define CFG_ERROR_OTHER -1
+
+#define CFG_ERROR_SYNTAX -2
+#define CFG_ERROR_RANGE -3
+#define CFG_ERROR_TYPE -4
+
+#define CFG_ERROR_FILE_OPEN -5
+#define CFG_ERROR_OUTPUT -6
+#define CFG_ERROR_MEMORY -7
+#define CFG_ERROR_DIV0 -8
+#define CFG_ERROR_NOT_SUPPORTED -9
+
+#if defined(MSDOS) || defined(_MSDOS)
+# ifndef __MSDOS__
+# define __MSDOS__
+# endif
+#endif
+#if defined(__MSDOS__) || defined(__STDC__)
+# ifndef __PROTOTYPES__
+# define __PROTOTYPES__
+# endif
+#endif
+#ifdef __NO_PROTOTYPES__
+# undef __PROTOTYPES__
+#endif
+
+#if defined(__MSDOS__) && !defined(__GNUC__) && !defined(__WATCOMC__)
+# ifndef __MSDOS_REAL__
+# define __MSDOS_REAL__
+# endif
+#else
+# ifndef far
+# define far /* */
+# endif
+#endif
+
+typedef struct {
+ unsigned int version;
+
+ long integer[CFG_INTEGER_TYPE_COUNT];
+ unsigned char *strings[CFG_STRINGS_TYPE_COUNT];
+ unsigned char *prtcode[CFG_PRTCODE_TYPE_COUNT];
+ unsigned int prtcode_size[CFG_PRTCODE_TYPE_COUNT];
+} dviprt_cfg_t;
+
+typedef struct dviprt_print_s dviprt_print;
+struct dviprt_print_s {
+ dviprt_cfg_t *printer;
+ unsigned int bitmap_width;
+ unsigned int bitmap_height;
+ unsigned int buffer_width;
+
+ unsigned int device_x;
+ unsigned int device_y;
+ unsigned int bitmap_x;
+ unsigned int bitmap_y;
+ unsigned int last_x;
+
+ int page_count;
+ unsigned char far *source_buffer;
+ unsigned char far *encode_buffer;
+ unsigned char far *psource;
+ unsigned char far *poutput;
+ int tempbuffer_f;
+
+#ifdef __PROTOTYPES__
+ int (*output_proc)(unsigned char far *,long ,void *);
+ int (*output_maximal_unit)(dviprt_print *,unsigned char far *,unsigned int );
+ long (*encode_getbuffersize_proc)(dviprt_print *,long);
+ long (*encode_encode_proc)(dviprt_print *,long ,int);
+#else
+ int (*output_proc)();
+ int (*output_maximal_unit)();
+ long (*encode_getbuffersize_proc)();
+ long (*encode_encode_proc)();
+#endif
+ void *pstream;
+
+ unsigned long output_bytes;
+ unsigned int uservar[CFG_USERVAL_COUNT];
+};
+
+#define dviprt_getscanlines(p) ((int)(p)->printer->integer[CFG_PINS]*8)
+#define dviprt_getoutputbytes(p) ((unsigned long)(p)->output_bytes)
+
+#ifdef __PROTOTYPES__
+extern int dviprt_readsrc(const gs_memory_t *mem, char *,dviprt_cfg_t *,
+ unsigned char *,int ,unsigned char *, int);
+extern int dviprt_readcfg(const gs_memory_t *mem, char *,dviprt_cfg_t *,
+ unsigned char *,int , unsigned char *,int);
+
+extern int dviprt_beginpage(dviprt_print *);
+extern long dviprt_initlibrary(dviprt_print *,dviprt_cfg_t *,
+ unsigned int ,unsigned int );
+extern int dviprt_endbitmap(dviprt_print *);
+extern int dviprt_setstream
+ (dviprt_print *p,int(*f)(unsigned char far*,long,void*),void *s);
+extern int dviprt_setbuffer(dviprt_print *,unsigned char far *);
+extern int dviprt_outputscanlines(dviprt_print *, unsigned char far *);
+extern int dviprt_output(dviprt_print *,unsigned char far *,long );
+extern int dviprt_unsetbuffer(dviprt_print *);
+
+extern int dviprt_setmessagestream(FILE *);
+extern int dviprt_writesrc(char *,char *,dviprt_cfg_t *,unsigned char *,int );
+extern int dviprt_writecfg(char *,char *,dviprt_cfg_t *,unsigned char *,int );
+extern int dviprt_writec(char *,char *,dviprt_cfg_t *,unsigned char *,int );
+#else /* !__PROTOTYPES__ */
+extern int dviprt_readsrc();
+extern int dviprt_readcfg();
+extern long dviprt_initlibrary();
+extern int dviprt_setstream();
+extern int dviprt_setbuffer();
+extern int dviprt_beginpage();
+extern int dviprt_outputscanlines();
+extern int dviprt_endbitmap();
+extern int dviprt_output ();
+extern int dviprt_unsetbuffer();
+extern int dviprt_setmessagestream();
+extern int dviprt_writesrc();
+extern int dviprt_writecfg();
+extern int dviprt_writec();
+#endif /* __PROTOTYPES__ */
+
+extern char *dviprt_integername[];
+extern char *dviprt_stringsname[];
+extern char *dviprt_prtcodename[];
+extern char *dviprt_encodename[];
+
+#define s_cfg_h_INCLUDED
+#endif /* s_cfg_h_INCLUDED */
+
+#define TEMP_CODEBUF_SIZE 2048
+#define TEMP_READBUF_SIZE 1024
+
+/* MS-DOS (real-mode) */
+#ifdef __MSDOS_REAL__
+# define BufferCpy(a,b,c) _fmemcpy(a,b,c)
+# define BufferCmp(a,b,c) _fmemcmp(a,b,c)
+# define BufferAlloc(a) _fmalloc(a)
+# define BufferFree(a) _ffree(a)
+#else
+# define BufferCpy(a,b,c) memcpy(a,b,c)
+# define BufferCmp(a,b,c) memcmp(a,b,c)
+# define BufferAlloc(a) malloc(a)
+# define BufferFree(a) free(a)
+#endif
+
+#ifndef MIN
+#define MIN(a,b) ((a)<(b) ? (a) : (b))
+#endif
+#ifndef MAX
+#define MAX(a,b) ((a)>(b) ? (a) : (b))
+#endif
+
+#define CFG_LIBERROR_UNKNOWN_VALUE -256
+#define CFG_LIBERROR_UNKNOWN_FORMAT -257
+#define CFG_LIBERROR_UNKNOWN_ESCSEQ -258
+#define CFG_LIBERROR_OUTOFRANGE -259
+#define CFG_LIBERROR_INVALID_VALUE -260
+#define CFG_LIBERROR_COMPLICATED_EXPR -261
+#define CFG_LIBERROR_INCOMPLETE -262
+
+typedef struct {
+ uchar *fname;
+ gp_file *file;
+ int line_no;
+
+ char temp_readbuf_f;
+ char temp_codebuf_f;
+ uchar *readbuf;
+ uchar *codebuf;
+ int readbuf_size;
+ int codebuf_size;
+
+ uchar *pcodebuf;
+
+ uchar *token;
+ uchar *endtoken;
+} dviprt_cfg_i;
+
+#ifdef dviprlib_implementation
+typedef struct {
+ int no;
+ long (*getworksize)(dviprt_print *,long);
+ long (*encode)(dviprt_print *,long,int);
+} dviprt_encoder;
+
+static dviprt_encoder *dviprt_getencoder_(int);
+static int dviprt_setcfgbuffer_(dviprt_cfg_i *,int ,int);
+static int dviprt_resetcfgbuffer_(dviprt_cfg_i *);
+static int dviprt_initcfg_(dviprt_cfg_t *,dviprt_cfg_i *);
+static int dviprt_printmessage(char *,int);
+static int dviprt_printerror(char *,int);
+static int dviprt_printwarning(char *,int);
+static int dviprt_printcfgerror(dviprt_cfg_i *,char *,int);
+static int dviprt_printcfgwarning(dviprt_cfg_i *,char *,int);
+
+extern int dviprt_print_headercomment_(char *,char *,char *,FILE *);
+extern char dviprt_message_buffer[];
+#endif dviprlib_implementation
+
+#define s_cfgbld_h_INCLUDED
+#endif /* s_cfgbld_h_INCLUDED */
diff --git a/contrib/japanese/escp_24.src b/contrib/japanese/escp_24.src
new file mode 100644
index 00000000..5536aa23
--- /dev/null
+++ b/contrib/japanese/escp_24.src
@@ -0,0 +1,12 @@
+name : ESC/P 24 pin
+pins : 24
+minimal_unit : 1
+maximal_unit : 180
+dpi : 180
+upper_position : HIGH_BIT
+bit_image_mode : \e 3 \x18 \e ?Z'
+send_bit_image : \e Z \b2,d
+line_feed : \r \n
+form_feed : \r \f
+normal_mode : \r \f \e 2
+skip_spaces : \e \ \b2,d
diff --git a/contrib/japanese/gdev10v.c b/contrib/japanese/gdev10v.c
new file mode 100644
index 00000000..510a74e8
--- /dev/null
+++ b/contrib/japanese/gdev10v.c
@@ -0,0 +1,333 @@
+/* Copyright (C) 1990, 1992, 1993 Aladdin Enterprises. All rights reserved.
+ Distributed by Free Software Foundation, Inc.
+
+This file is part of Ghostscript.
+
+Ghostscript is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+to anyone for the consequences of using it or for whether it serves any
+particular purpose or works at all, unless he says so in writing. Refer
+to the Ghostscript General Public License for full details.
+
+Everyone is granted permission to copy, modify and redistribute
+Ghostscript, but only under the conditions described in the Ghostscript
+General Public License. A copy of this license is supposed to have been
+given to you along with Ghostscript so you can know your rights and
+responsibilities. It should be in a file named COPYING. Among other
+things, the copyright notice and this notice must be preserved on all
+copies. */
+
+/* gdev10v.c */
+/* Canon Bubble Jet BJ-10v printer driver for Ghostscript.
+
+ Based on BJ-10e driver (gdevbj10.c) and Epson driver (gdevepsn.c).
+ Modified for BJ-10v by MAEDA Atusi (maeda@is.uec.ac.jp) and
+ IWAI Teruo (oteru@nak.ics.keio.ac.jp). PC9801 support by MATUI
+ Takao (mat@nuis.ac.jp).
+ */
+
+/* Fixed for GNU Ghostscript 5.10
+ by Norihito Ohmori (ohmori@p.chiba-u.ac.jp)
+ */
+
+#include "gdevprn.h"
+
+/*
+ The only available resolutions are 360x360, 360x180, and 180x180.
+ No checking on resolutions are being made.
+ */
+
+#if 0
+#define prn_matrix_procs(p_open, p_get_initial_matrix, p_output_page, p_close) {\
+ p_open,\
+ p_get_initial_matrix,\
+ NULL, /* sync_output */\
+ p_output_page,\
+ p_close,\
+ gdev_prn_map_rgb_color,\
+ gdev_prn_map_color_rgb,\
+ NULL, /* fill_rectangle */\
+ NULL, /* tile_rectangle */\
+ NULL, /* copy_mono */\
+ NULL, /* copy_color */\
+ NULL, /* draw_line */\
+ NULL, /* get_bits */\
+ gdev_prn_get_params,\
+ gdev_prn_put_params,\
+ NULL, /* map_cmyk_color */\
+ NULL, /* get_xfont_procs */\
+ NULL, /* get_xfont_device */\
+ NULL, /* map_rgb_alpha_color */\
+ gx_page_device_get_page_device\
+}
+#endif
+
+/* The device descriptor */
+static dev_proc_print_page(bj10v_print_page);
+#if 0
+static dev_proc_get_initial_matrix(bj10v_get_initial_matrix);
+#endif
+
+#if 0
+gx_device_procs prn_bj10v_procs =
+ prn_matrix_procs(gdev_prn_open, bj10v_get_initial_matrix,
+ gdev_prn_output_page, gdev_prn_close);
+#endif
+gx_device_procs prn_bj10v_procs =
+ prn_procs(gdev_prn_open, gdev_prn_output_page, gdev_prn_close);
+
+gx_device_printer gs_bj10v_device =
+ prn_device(prn_bj10v_procs, "bj10v",
+ DEFAULT_WIDTH_10THS, /* width_10ths */
+ DEFAULT_HEIGHT_10THS, /* height_10ths */
+ 360, /* x_dpi */
+ 360, /* y_dpi */
+ 0.134, 0.507, 0.166, 0.867, /* l, b, r, t margins */
+ 1, bj10v_print_page);
+
+gx_device_printer gs_bj10vh_device =
+ prn_device(prn_bj10v_procs, "bj10vh",
+ DEFAULT_WIDTH_10THS, /* width_10ths */
+ DEFAULT_HEIGHT_10THS, /* height_10ths */
+ 360, /* x_dpi */
+ 360, /* y_dpi */
+ 0.134, 0.507, 0.166, 0.335, /* l, b, r, t margins */
+ 1, bj10v_print_page);
+
+/* ------ Internal routines ------ */
+
+#if 0
+/* Shift the origin from the top left corner of the pysical page to the
+ first printable pixel, as defined by the top and left margins. */
+static void
+bj10v_get_initial_matrix(gx_device *dev, gs_matrix *pmat)
+{ gx_default_get_initial_matrix(dev, pmat);
+ pmat->tx -= dev_l_margin(dev) * dev->x_pixels_per_inch;
+ pmat->ty -= dev_t_margin(dev) * dev->y_pixels_per_inch;
+}
+#endif
+
+/* ---- Printer output routines ---- */
+
+/* Note: Following code is stolen from gdevp201.c. On NEC PC9801 series,
+ which is very popular PC in Japan, DOS printer driver strips off
+ some control characters. So we must bypass the driver and put
+ data directly to get correct results. */
+
+#ifdef PC9801
+static int
+is_printer(gx_device_printer *pdev)
+{
+ return (strlen(pdev->fname) == 0 || strcmp(pdev->fname, "PRN") == 0);
+}
+
+static void
+pc98_prn_out(int c)
+{
+ while(!(inportb(0x42) & 0x04));
+ outportb(0x40, c);
+ outportb(0x46, 0x0e);
+ outportb(0x46, 0x0f);
+}
+
+static int
+prn_putc(gx_device_printer *pdev, int c)
+{
+ if(is_printer(pdev)) {
+ pc98_prn_out(c);
+ return 0;
+ }
+ return gp_fputc(c, pdev->file);
+}
+
+static int
+prn_puts(gx_device_printer *pdev, char *ptr)
+{
+ if(is_printer(pdev)) {
+ while(*ptr)
+ pc98_prn_out(*ptr ++);
+ return 0;
+ }
+ return gp_fputs(ptr, pdev->file);
+}
+
+static int
+prn_write(gx_device_printer *pdev, char *ptr, int size)
+{
+ if(is_printer(pdev)) {
+ while(size --)
+ pc98_prn_out(*ptr ++);
+ return size;
+ }
+ return fwrite(ptr, 1, size, pdev->file);
+}
+
+static int
+prn_flush(gx_device_printer *pdev)
+{
+ if(is_printer(pdev))
+ return 0;
+ return fflush(pdev->file);
+}
+
+#else /* PC9801 */
+
+#define prn_putc(pdev, c) gp_fputc(c, pdev->file)
+#define prn_puts(pdev, ptr) gp_fputs(ptr, pdev->file)
+#define prn_write(pdev, ptr, size) gp_fwrite(ptr, 1, size, pdev->file)
+#define prn_flush(pdev) gp_fflush(pdev->file)
+
+#endif
+
+/* ------ internal routines ------ */
+
+static void
+bj10v_output_run(byte *data, int dnum, int bytes,
+ const char *mode, gx_device_printer *pdev)
+{
+ prn_putc(pdev, '\033');
+ prn_puts(pdev, mode);
+ prn_putc(pdev, dnum & 0xff);
+ prn_putc(pdev, dnum >> 8);
+ prn_write(pdev, data, bytes);
+}
+
+/* Send the page to the printer. */
+static int
+bj10v_print_page(gx_device_printer *pdev, gp_file *prn_stream)
+{ int line_size = gdev_prn_raster((gx_device *)pdev);
+ int xres = pdev->x_pixels_per_inch;
+ int yres = pdev->y_pixels_per_inch;
+ const char *mode = (yres == 180 ?
+ (xres == 180 ? "\052\047" : "\052\050") :
+ "|*");
+ int bits_per_column = 24 * (yres / 180);
+ int bytes_per_column = bits_per_column / 8;
+ int x_skip_unit = bytes_per_column * (xres / 180);
+ int y_skip_unit = (yres / 180);
+ byte *in = (byte *)gs_malloc(pdev->memory->non_gc_memory, 8, line_size, "bj10v_print_page(in)");
+ byte *out = (byte *)gs_malloc(pdev->memory->non_gc_memory, bits_per_column, line_size, "bj10v_print_page(out)");
+ int lnum = 0;
+ int y_skip = 0;
+ int code = 0;
+ int blank_lines = 0;
+ int bytes_per_data = ((xres == 360) && (yres == 360)) ? 1 : 3;
+
+ if ( in == 0 || out == 0 )
+ return -1;
+
+ /* Initialize the printer. */
+ prn_puts(pdev, "\033@");
+ /* Transfer pixels to printer */
+ while ( lnum < pdev->height )
+ { byte *out_beg;
+ byte *out_end;
+ byte *outl, *outp;
+ int count, bnum;
+
+ /* Copy 1 scan line and test for all zero. */
+ code = gdev_prn_get_bits(pdev, lnum + blank_lines, in, NULL);
+ if ( code < 0 ) goto xit;
+ /* The mem... or str... functions should be faster than */
+ /* the following code, but all systems seem to implement */
+ /* them so badly that this code is faster. */
+ { register long *zip = (long *)in;
+ register int zcnt = line_size;
+ static const long zeroes[4] = { 0, 0, 0, 0 };
+ for ( ; zcnt >= 4 * sizeof(long); zip += 4, zcnt -= 4 * sizeof(long) )
+ { if ( zip[0] | zip[1] | zip[2] | zip[3] )
+ goto notz;
+ }
+ if ( !memcmp(in, (const char *)zeroes, zcnt) )
+ { /* Line is all zero, skip */
+ if (++blank_lines >= y_skip_unit) {
+ lnum += y_skip_unit;
+ y_skip++;
+ blank_lines = 0;
+ }
+ continue;
+ }
+ }
+notz:
+ blank_lines = 0;
+ out_end = out + bytes_per_column * pdev->width;
+ /* Vertical tab to the appropriate position. */
+ while ( y_skip > 255 )
+ { prn_puts(pdev, "\033J\377");
+ y_skip -= 255;
+ }
+ if ( y_skip ) {
+ prn_puts(pdev, "\033J");
+ prn_putc(pdev, y_skip);
+ }
+
+ /* Transpose in blocks of 8 scan lines. */
+ for ( bnum = 0, outl = out; bnum < bits_per_column; bnum += 8, lnum += 8 )
+ { int lcnt = gdev_prn_copy_scan_lines(pdev,
+ lnum, in, 8 * line_size);
+ byte *inp = in;
+ if ( lcnt < 0 )
+ { code = lcnt;
+ goto xit;
+ }
+ if ( lcnt < 8 )
+ memset(in + lcnt * line_size, 0,
+ (8 - lcnt) * line_size);
+ for (outp = outl ; inp < in + line_size; inp++, outp += bits_per_column )
+ { memflip8x8(inp, line_size,
+ outp, bytes_per_column);
+ }
+ outl++;
+ }
+
+ /* Remove trailing 0s. */
+ /* Note that non zero byte always exists. */
+ outl = out_end;
+ while ( *--outl == 0 )
+ ;
+ count = ((out_end - (outl + 1)) / bytes_per_column) * bytes_per_column;
+ out_end -= count;
+ *out_end = 1; /* sentinel */
+
+ for ( out_beg = outp = out; outp < out_end; )
+ { /* Skip a run of leading 0s. */
+ /* At least 10 bytes are needed to make tabbing worth it. */
+ byte *zp = outp;
+ int x_skip;
+ while ( *outp == 0 )
+ outp++;
+ x_skip = ((outp - zp) / x_skip_unit) * x_skip_unit;
+ outp = zp + x_skip;
+ if (x_skip >= 10) {
+ /* Output preceding bit data. */
+ int bytes = zp - out_beg;
+ if (bytes > 0)
+ /* Only false at beginning of line. */
+ bj10v_output_run(out_beg, bytes / bytes_per_data, bytes,
+ mode, pdev);
+ /* Tab over to the appropriate position. */
+ { int skip = x_skip / x_skip_unit;
+ prn_puts(pdev, "\033\\");
+ prn_putc(pdev, skip & 0xff);
+ prn_putc(pdev, skip >> 8);
+ }
+ out_beg = outp;
+ } else
+ outp += x_skip_unit;
+ }
+ if (out_end > out_beg) {
+ int bytes = out_end - out_beg;
+ bj10v_output_run(out_beg, bytes / bytes_per_data, bytes,
+ mode, pdev);
+ }
+ prn_putc(pdev, '\r');
+ y_skip = 24;
+ }
+
+ /* Eject the page */
+xit: prn_putc(pdev, 014); /* form feed */
+ prn_flush(pdev);
+ gs_free(pdev->memory->non_gc_memory, (char *)out, bits_per_column, line_size, "bj10v_print_page(out)");
+ gs_free(pdev->memory->non_gc_memory, (char *)in, 8, line_size, "bj10v_print_page(in)");
+ return code;
+}
diff --git a/contrib/japanese/gdevalps.c b/contrib/japanese/gdevalps.c
new file mode 100644
index 00000000..e6af9cf1
--- /dev/null
+++ b/contrib/japanese/gdevalps.c
@@ -0,0 +1,394 @@
+/* Copyright (C) 1990, 1995, 1997 Aladdin Enterprises. All rights reserved.
+
+ This file is part of Aladdin Ghostscript.
+
+ Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND. No author
+ or distributor accepts any responsibility for the consequences of using it,
+ or for whether it serves any particular purpose or works at all, unless he
+ or she says so in writing. Refer to the Aladdin Ghostscript Free Public
+ License (the "License") for full details.
+
+ Every copy of Aladdin Ghostscript must include a copy of the License,
+ normally in a plain ASCII text file named PUBLIC. The License grants you
+ the right to copy, modify and redistribute Aladdin Ghostscript, but only
+ under certain conditions described in the License. Among other things, the
+ License requires that the copyright notice and this notice be preserved on
+ all copies.
+*/
+
+/*
+ This driver supports ALPS MD Series printer 600dpi monochrome mode only.
+
+ Feb. 3 1999 Ver. 0.1 MD5000 monochrome mode support.
+ Mar. 19 1999 Ver. 0.2 old MD series monochrome compressed mode
+ support. contributed by Kousuke Ikeda.
+
+ There is no printer command refernces, so the sequence of initializing,
+ inc cartridge selecting, paper feeding and many specs are not clear yet.
+
+ ESC 0x2a 0x62 n2 n1 0x59 raster line skip command.
+ skip (n1 * 0x100 + n2) lines.
+ ESC 0x2a 0x62 n2 n1 0x54 s2 s1 raster line print command.
+ skip (s1 * 0x100 + s2) * 8 dots from
+ paper side, then (n1 * 0x100 + n2) bytes
+ of MSB first data streams following.
+ ESC 0x2a 0x62 n2 n1 0x57 raster line print command for MD1300.
+ (applicable to MD1xxx and MD2xxx ?)
+ (n1 * 0x100 + n2) bytes of MSB first data
+ streams following,
+ but the data must be compressed.
+*/
+
+/* gdevalps.c */
+/* Alps Micro Dry 600dpi monochrome printer driver */
+#include "gdevprn.h"
+
+#define MD_TOP_MARGIN 0.47
+#define MD_BOTTOM_MARGIN 0.59
+#define MD_SIDE_MARGIN 0.13
+
+#define X_DPI 600
+#define Y_DPI 600
+#define LINE_SIZE ((X_DPI * 84 / 10 + 7) / 8) /* bytes per line for letter */
+
+static int md50_print_page(gx_device_printer *, gp_file *, const char *, int);
+static dev_proc_open_device(md_open);
+static dev_proc_print_page(md50m_print_page);
+static dev_proc_print_page(md50e_print_page);
+static dev_proc_print_page(md1xm_print_page);
+
+static gx_device_procs prn_md_procs =
+ prn_procs(md_open, gdev_prn_output_page, gdev_prn_close);
+
+gx_device_printer far_data gs_md50Mono_device =
+ prn_device(prn_md_procs, "md50Mono",
+ DEFAULT_WIDTH_10THS,
+ DEFAULT_HEIGHT_10THS,
+ 600, /* x_dpi */
+ 600, /* y_dpi */
+ 0, 0, 0, 0, /* margins */
+ 1, md50m_print_page);
+
+gx_device_printer far_data gs_md50Eco_device =
+ prn_device(prn_md_procs, "md50Eco",
+ DEFAULT_WIDTH_10THS,
+ DEFAULT_HEIGHT_10THS,
+ 600, /* x_dpi */
+ 600, /* y_dpi */
+ 0, 0, 0, 0, /* margins */
+ 1, md50e_print_page);
+
+gx_device_printer far_data gs_md1xMono_device =
+ prn_device(prn_md_procs, "md1xMono",
+ DEFAULT_WIDTH_10THS,
+ DEFAULT_HEIGHT_10THS,
+ 600, /* x_dpi */
+ 600, /* y_dpi */
+ 0, 0, 0, 0, /* margins */
+ 1, md1xm_print_page);
+
+/* Normal black 600 x 600 dpi mode. */
+static const char init_50mono[] = {
+0x1b, 0x65,
+0x1b, 0x25, 0x80, 0x41,
+0x1b, 0x1a, 0x00, 0x00, 0x4c,
+0x1b, 0x26, 0x6c, 0x01, 0x00, 0x48,
+0x1b, 0x26, 0x6c, 0x07, 0x00, 0x4d,
+0x1b, 0x26, 0x6c, 0x04, 0x00, 0x41,
+0x1b, 0x2a, 0x72, 0x00, 0x55,
+0x1b, 0x2a, 0x74, 0x03, 0x52,
+0x1b, 0x26, 0x6c, 0xe5, 0x18, 0x50,
+0x1b, 0x1a, 0x00, 0x00, 0x41,
+0x1b, 0x26, 0x6c, 0x01, 0x00, 0x43, 0x00,
+0x1b, 0x1a, 0x00, 0x00, 0x55,
+0x1b, 0x2a, 0x72, 0x01, 0x41,
+0x1b, 0x2a, 0x62, 0x00, 0x00, 0x4d,
+0x1b, 0x1a, 0x00, 0x80, 0x72,
+};
+
+/* ECO black 600 x 600 dpi mode. */
+/* If you wanto to use ECO black casette, use this sequence for initialize. */
+static const char init_50eco[] = {
+0x1b, 0x65,
+0x1b, 0x25, 0x80, 0x41,
+0x1b, 0x1a, 0x00, 0x00, 0x4c,
+0x1b, 0x26, 0x6c, 0x01, 0x00, 0x48,
+0x1b, 0x26, 0x6c, 0x07, 0x00, 0x4d,
+0x1b, 0x26, 0x6c, 0x04, 0x00, 0x41,
+0x1b, 0x2a, 0x72, 0x01, 0x55,
+0x1b, 0x2a, 0x74, 0x03, 0x52,
+0x1b, 0x26, 0x6c, 0xe5, 0x18, 0x50,
+0x1b, 0x1a, 0x00, 0x00, 0x41,
+0x1b, 0x1a, 0x01, 0x00, 0x43,
+0x1b, 0x26, 0x6c, 0x01, 0x00, 0x43, 0x17,
+0x1b, 0x1a, 0x00, 0x00, 0x55,
+0x1b, 0x2a, 0x72, 0x01, 0x41,
+0x1b, 0x2a, 0x62, 0x00, 0x00, 0x4d,
+0x1b, 0x1a, 0x16, 0x80, 0x72,
+};
+
+/* Mono Black 600x600 mode for MD1300 */
+static const char init_md13[] = {
+0x1b, 0x65,
+0x1b, 0x25, 0x80, 0x41,
+0x1b, 0x1a, 0x00, 0x00, 0x4c,
+0x1b, 0x26, 0x6c, 0x01, 0x00, 0x48,
+0x1b, 0x26, 0x6c, 0x00, 0x00, 0x4d,
+0x1b, 0x26, 0x6c, 0x04, 0x00, 0x41,
+0x1b, 0x2a, 0x72, 0x00, 0x55,
+0x1b, 0x2a, 0x74, 0x03, 0x52,
+0x1b, 0x26, 0x6c, 0xe5, 0x18, 0x50,
+0x1b, 0x1a, 0x00, 0x00, 0x41,
+0x1b, 0x2a, 0x72, 0x00, 0x41,
+0x1b, 0x2a, 0x62, 0x02, 0x00, 0x4d,
+0x1b, 0x1a, 0x00, 0x00, 0x72,
+};
+
+static const char end_md[] = {
+0x0c,
+0x1b, 0x2a, 0x72, 0x43,
+0x1b, 0x25, 0x00, 0x58
+};
+/* ------ Internal routines ------ */
+
+/* Open the printer, and set the margins. */
+static int
+md_open(gx_device *pdev)
+{
+ static const float md_margins[4] =
+ { MD_SIDE_MARGIN, MD_BOTTOM_MARGIN,
+ MD_SIDE_MARGIN, MD_TOP_MARGIN
+ };
+
+ gx_device_set_margins(pdev, md_margins, true);
+ return gdev_prn_open(pdev);
+}
+
+/* MD5000 monochrome mode entrance. */
+static int
+md50m_print_page(gx_device_printer *pdev, gp_file *prn_stream)
+{
+ return(md50_print_page(pdev, prn_stream, init_50mono, sizeof(init_50mono)));
+}
+
+/* MD5000 Eco mode monochrome mode entrance. */
+static int
+md50e_print_page(gx_device_printer *pdev, gp_file *prn_stream)
+{
+ return(md50_print_page(pdev, prn_stream, init_50eco, sizeof(init_50eco)));
+}
+
+/* MD5000 monochrome mode print. */
+static int
+md50_print_page(gx_device_printer *pdev, gp_file *prn_stream,
+ const char *init_str, int init_size)
+{
+ int lnum;
+ int line_size = gdev_mem_bytes_per_scan_line((gx_device *)pdev);
+ byte *data = (byte *)gs_malloc(pdev->memory->non_gc_memory, 8, line_size, "md50_print_page(data)" );
+ int skipping = 0;
+ int nbyte;
+ int nskip;
+ int n;
+
+ /* Load Paper & Select Inc Cartridge */
+ gp_fwrite(init_str, sizeof(char), init_size, prn_stream);
+ gp_fflush(prn_stream);
+
+ for ( lnum = 0; lnum <= pdev->height; lnum++ ) {
+ byte *end_data = data + line_size;
+ byte *start_data = data;
+ memset(data, 0, LINE_SIZE);
+ n = gdev_prn_copy_scan_lines(pdev, lnum,
+ (byte *)data, line_size);
+ if (n != 1)
+ return n;
+
+ /* Remove trailing 0s. */
+ while ( end_data > data && end_data[-1] == 0 )
+ end_data--;
+ /* Count pre print skip octets */
+ while ( start_data < end_data && *start_data == 0 )
+ start_data++;
+ nbyte = end_data - start_data;
+ nskip = start_data - data;
+
+ if(nbyte == 0)
+ {
+ skipping++;
+ continue;
+ }
+ else
+ {
+ if(skipping)
+ {
+ gp_fprintf(prn_stream, "%c%c%c%c%c%c", 0x1b, 0x2a, 0x62,
+ skipping & 0xff, (skipping & 0xff00) / 0x100, 0x59);
+ skipping = 0;
+ }
+ gp_fprintf(prn_stream, "%c%c%c%c%c%c%c%c", 0x1b, 0x2a, 0x62,
+ nbyte & 0xff, (nbyte & 0xff00) / 0x100, 0x54,
+ nskip & 0xff, (nskip & 0xff00) / 0x100);
+ gp_fwrite(start_data, sizeof(char), nbyte, prn_stream);
+ }
+ }
+
+ /* Eject Page */
+ gp_fwrite(end_md, sizeof(char), sizeof(end_md), prn_stream);
+ gp_fflush(prn_stream);
+
+ return 0;
+}
+
+/* all? MD series monochrome mode print with data compression. */
+static int
+md1xm_print_page(gx_device_printer *pdev, gp_file *prn_stream)
+{
+ int lnum;
+ int line_size = gdev_mem_bytes_per_scan_line((gx_device *)pdev);
+ byte *data = (byte *)gs_malloc(pdev->memory->non_gc_memory, 8, line_size, "md1xm_print_page(data)");
+ byte *out_start = (byte *)gs_malloc(pdev->memory->non_gc_memory, 8, line_size, "md1xm_print_page(data)");
+ int skipping = 0;
+ int nbyte;
+
+ /* Load Paper & Select Inc Cartridge */
+ gp_fwrite(&init_md13[0], sizeof(char), sizeof(init_md13), prn_stream);
+ gp_fflush(prn_stream);
+
+ for ( lnum = 0; lnum <= pdev->height; lnum++ ) {
+ byte *end_data = data + line_size;
+ byte *data_p = data;
+ byte *out_data = out_start;
+ byte *p, *q;
+ int count;
+
+ gdev_prn_copy_scan_lines(pdev, lnum, data, line_size);
+ /* Remove trailing 0s. */
+ while ( end_data > data && end_data[-1] == 0 )
+ end_data--;
+
+ nbyte = end_data - data_p;
+
+ if(nbyte == 0)
+ {
+ skipping++;
+ continue;
+ }
+ else
+ {
+ if(skipping)
+ {
+ gp_fprintf(prn_stream, "%c%c%c%c%c%c", 0x1b, 0x2a, 0x62,
+ skipping & 0xff, (skipping & 0xff00) / 0x100, 0x59);
+ skipping = 0;
+ }
+
+ /* Following codes are borrowed from gdevescp.c */
+
+ for ( p = data_p, q = data_p + 1; q < end_data; ){
+
+ if( *p != *q ) {
+
+ p += 2;
+ q += 2;
+
+ } else {
+ /*
+ ** Check behind us, just in case:
+ */
+
+ if( p > data_p && *p == *(p-1) )
+ p--;
+
+ /*
+ ** walk forward, looking for matches:
+ */
+
+ for( q++ ; *q == *p && q < end_data ; q++ ) {
+ if( (q-p) >= 128 ) {
+ if( p > data_p ) {
+ count = p - data_p;
+ while( count > 128 ) {
+ *out_data++ = '\177';
+ memcpy(out_data, data_p, 128); /* data */
+ data_p += 128;
+ out_data += 128;
+ count -= 128;
+ }
+ *out_data++ = (char) (count - 1); /* count */
+ memcpy(out_data, data_p, count); /* data */
+ out_data += count;
+ }
+ *out_data++ = '\201'; /* Repeat 128 times */
+ *out_data++ = *p;
+ p += 128;
+ data_p = p;
+ }
+ }
+
+ if( (q - p) > 2 ) { /* output this sequence */
+ if( p > data_p ) {
+ count = p - data_p;
+ while( count > 128 ) {
+ *out_data++ = '\177';
+ memcpy(out_data, data_p, 128); /* data */
+ data_p += 128;
+ out_data += 128;
+ count -= 128;
+ }
+ *out_data++ = (char) (count - 1); /* byte count */
+ memcpy(out_data, data_p, count); /* data */
+ out_data += count;
+ }
+ count = q - p;
+ *out_data++ = (char) (256 - count + 1);
+ *out_data++ = *p;
+ p += count;
+ data_p = p;
+ } else /* add to non-repeating data list */
+ p = q;
+ if( q < end_data )
+ q++;
+ }
+ }
+ /*
+ ** copy remaining part of line:
+ */
+
+ if( data_p < end_data ) {
+
+ count = end_data - data_p;
+
+ /*
+ ** If we've had a long run of varying data followed by a
+ ** sequence of repeated data and then hit the end of line,
+ ** it's possible to get data counts > 128.
+ */
+
+ while( count > 128 ) {
+ *out_data++ = '\177';
+ memcpy(out_data, data_p, 128); /* data */
+ data_p += 128;
+ out_data += 128;
+ count -= 128;
+ }
+
+ *out_data++ = (char) (count - 1); /* byte count */
+ memcpy(out_data, data_p, count); /* data */
+ out_data += count;
+ }
+
+ nbyte = out_data - out_start;
+
+ gp_fprintf(prn_stream, "%c%c%c%c%c%c", 0x1b, 0x2a, 0x62,
+ nbyte & 0xff, (nbyte & 0xff00) / 0x100, 0x57);
+ gp_fwrite(out_start, sizeof(char), nbyte, prn_stream);
+ }
+ }
+
+ /* Eject Page */
+ gp_fwrite(end_md, sizeof(char), sizeof(end_md), prn_stream);
+ gp_fflush(prn_stream);
+
+ return 0;
+}
diff --git a/contrib/japanese/gdevdmpr.c b/contrib/japanese/gdevdmpr.c
new file mode 100644
index 00000000..f675cbb5
--- /dev/null
+++ b/contrib/japanese/gdevdmpr.c
@@ -0,0 +1,888 @@
+/* COPYRIGHT (C) 1990, 1992 Aladdin Enterprises. All rights reserved.
+ Distributed by Free Software Foundation, Inc.
+
+ This file is part of Ghostscript.
+
+ Ghostscript is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+ to anyone for the consequences of using it or for whether it serves any
+ particular purpose or works at all, unless he says so in writing. Refer
+ to the Ghostscript General Public License for full details.
+
+ Everyone is granted permission to copy, modify and redistribute
+ Ghostscript, but only under the conditions described in the Ghostscript
+ General Public License. A copy of this license is supposed to have been
+ given to you along with Ghostscript so you can know your rights and
+ responsibilities. It should be in a file named COPYING. Among other
+ things, the copyright notice and this notice must be preserved on all
+ copies. */
+
+/* gdevdmpr.c
+ *
+ * Dot matrix printer driver for Ghostscript
+ *
+ * The first version written by ... K.Asayama Nov 1992
+ * NEC PC-H98 high resolution mode supported by ... OkI Dec 1992
+ * IBM PC AT/Compatible machines supported by ... hero.h Mar 1993
+ * Modified for 386BSD by ... FKR Mar 1993
+ * Modified for Ghostscript version 2.5.2 by ... K.Asayama Mar 1993
+ * Modified for Ghostscript version 2.6.1 by ... K.Asayama Oct 1993
+ * Modified for Ghostscript version 4.03 by ... K.Asayama May 1997
+ */
+
+#include "gdevprn.h"
+#include "gp.h"
+#include "gserrors.h"
+#include "gsparam.h"
+#include "gsstate.h"
+#include "math_.h"
+#include "malloc_.h"
+
+/* include library header. */
+#include "dviprlib.h"
+
+#define LOCAL_DEBUG 0
+
+#define DEVICE_NAME "dmprt"
+#define DEVICE_VERSION 201 /* 2.01 */
+
+typedef struct gx_device_dmprt_local_s gx_device_dmprt_local;
+struct gx_device_dmprt_local_s {
+ int orig_x_dpi;
+ int orig_y_dpi;
+
+ int x_offset;
+ int y_offset;
+
+ int spec_width;
+ int spec_height;
+ int max_width;
+ int max_height;
+ int dev_margin[4]; /* left bottom right top */
+
+ int prtcfg_init_f;
+ int verbose_f;
+ int debug_f;
+ dviprt_cfg_t prtcfg;
+ dviprt_print prtinfo;
+};
+
+/* declaration of the structure to describe `DMPRT' device driver */
+typedef struct gx_device_dmprt_s gx_device_dmprt;
+struct gx_device_dmprt_s {
+ gx_device_common;
+ gx_prn_device_common;
+
+ gx_device_dmprt_local dmprt;
+};
+
+/* declarations of main functions */
+static dev_proc_get_params(gdev_dmprt_get_params);
+static dev_proc_put_params(gdev_dmprt_put_params);
+static dev_proc_get_initial_matrix(gdev_dmprt_get_initial_matrix);
+static dev_proc_open_device(gdev_dmprt_open);
+static dev_proc_print_page(gdev_dmprt_print_page);
+static dev_proc_close_device(gdev_dmprt_close);
+
+/* declarations of sub functions to get printer properties. */
+static void gdev_dmprt_init_printer_props(gx_device_dmprt *);
+static int gdev_dmprt_get_printer_props(gx_device_dmprt *,char *);
+static int gdev_dmprt_check_code_props(byte * ,int );
+static gp_file *gdev_dmprt_dviprt_lib_fopen(const gs_memory_t *mem,const char *,char *);
+
+static int gdev_dmprt_error_no_dviprt_to_gs(int );
+
+/* The device descriptor */
+gx_device_procs prn_dmprt_procs = {
+ gdev_dmprt_open,
+ gdev_dmprt_get_initial_matrix,
+ 0, /* sync_output */
+ gdev_prn_output_page,
+ gdev_dmprt_close,
+ gdev_prn_map_rgb_color,
+ gdev_prn_map_color_rgb,
+ 0, /* fill_rectangle */
+ 0, /* tile_rectangle */
+ 0, /* copy_mono */
+ 0, /* copy_color */
+ 0, /* draw_line */
+ 0, /* get_bits */
+ gdev_dmprt_get_params,
+ gdev_dmprt_put_params,
+ gx_default_map_cmyk_color,
+ 0,
+};
+
+#define DEFAULT_DPI 180
+#define DEFAULT_WIDTH 8.3
+#define DEFAULT_HEIGHT 11.7
+
+gx_device_dmprt gs_dmprt_device = {
+ prn_device_body(gx_device_dmprt, prn_dmprt_procs, DEVICE_NAME,
+ DEFAULT_WIDTH*10, /* width 10'th */
+ DEFAULT_HEIGHT*10, /* height 10'th */
+ DEFAULT_DPI, /* X resolution */
+ DEFAULT_DPI, /* Y resolution */
+ 0,0,0,0, /* margins (top,left,bottom,right) */
+ 1,1,1,1,2,2, /* color info. */
+ gdev_dmprt_print_page),
+
+ {
+ DEFAULT_DPI, DEFAULT_DPI,
+ 0, 0, /* offset */
+ DEFAULT_DPI*DEFAULT_WIDTH, /* specified width */
+ DEFAULT_DPI*DEFAULT_HEIGHT, /* specified height */
+ -1,-1, /* maximal width,height */
+ { 0,0,0,0 }, /* margins */
+
+ /* status of the device */
+ 0, /* printer configuration is not initialized */
+ 0, /* verbose mode */
+ 0, /* debug flag */
+ },
+};
+
+#define ppdev ((gx_device_printer *)pdev)
+#define pddev ((gx_device_dmprt *)pdev)
+
+typedef struct {
+ char *name;
+ int no;
+} dmprt_encoding;
+static dmprt_encoding gdev_dmprt_encode_list[] = {
+ {"Null",CFG_ENCODE_NULL},
+ {"AsciiHex",CFG_ENCODE_HEX },
+ {"CCITTFax",CFG_ENCODE_FAX },
+ {"PCLMode1Compress",CFG_ENCODE_PCL1 },
+ {"PCLMode2Compress",CFG_ENCODE_PCL2 },
+ {0},
+};
+
+/* --- Get properties of printer device. --- */
+static int gdev_dmprt_get_dmprt_params(gx_device *pdev, gs_param_list *plist);
+static int
+gdev_dmprt_get_dviprt_params(gx_device *pdev, gs_param_list *plist);
+
+static int
+gdev_dmprt_get_params(gx_device *pdev, gs_param_list *plist)
+{
+ int code;
+ gs_param_dict dict;
+ const char *param_name;
+
+ if (!pddev->dmprt.prtcfg_init_f)
+ gdev_dmprt_init_printer_props(pddev);
+
+ dict.size = 30;
+ code = param_begin_write_dict(plist, (param_name = "DmprtParams"),
+ &dict, false);
+ if (code < 0) return code;
+ if (code == 0) {
+ code = gdev_dmprt_get_dmprt_params(pdev, dict.list);
+ param_end_write_dict(plist, param_name, &dict);
+ if (code < 0) return code;
+ }
+
+ dict.size = 30;
+ code = param_begin_write_dict(plist, (param_name = "DviprtParams"),
+ &dict, false);
+ if (code < 0) return code;
+ if (code == 0) {
+ code = gdev_dmprt_get_dviprt_params(pdev, dict.list);
+ param_end_write_dict(plist, param_name, &dict);
+ if (code < 0) return code;
+ }
+
+ {
+ int w = pddev->width;
+ int h = pddev->height;
+ pddev->width = pddev->dmprt.spec_width;
+ pddev->height = pddev->dmprt.spec_height;
+ code = gdev_prn_get_params(pdev, plist);
+ pddev->width = w;
+ pddev->height = h;
+ }
+
+ return code;
+}
+
+/* internal routines for get_params */
+static int
+gdev_dmprt_get_dmprt_params(gx_device *pdev, gs_param_list *plist)
+{
+ int code;
+ long vlong;
+ bool vbool;
+ gs_param_int_array vaint;
+ int int_data[4];
+
+ vlong = DEVICE_VERSION;
+ code = param_write_long(plist, "Version", &vlong);
+ if (code < 0) return code;
+
+ vbool = pddev->dmprt.debug_f;
+ code = param_write_bool(plist, "Debug", &vbool);
+ if (code < 0) return code;
+
+ vbool = pddev->dmprt.verbose_f;
+ code = param_write_bool(plist, "Verbose", &vbool);
+ if (code < 0) return code;
+
+ vaint.size = 2;
+ vaint.data = int_data;
+ vaint.persistent = false;
+ int_data[0] = pddev->dmprt.max_width;
+ int_data[1] = pddev->dmprt.max_height;
+ code = param_write_int_array(plist, "MaxSize", &vaint);
+ if (code < 0) return code;
+
+ vaint.size = 2;
+ vaint.data = int_data;
+ vaint.persistent = false;
+ int_data[0] = pddev->dmprt.x_offset;
+ int_data[1] = pddev->dmprt.y_offset;
+ code = param_write_int_array(plist, "Offsets", &vaint);
+ if (code < 0) return code;
+
+ vaint.size = 4;
+ vaint.data = int_data;
+ vaint.persistent = false;
+ { int i;
+ for (i=0;i<4;i++) int_data[i] = pddev->dmprt.dev_margin[i];
+ }
+ code = param_write_int_array(plist, "Margins", &vaint);
+ if (code < 0) return code;
+
+ return code;
+}
+
+static int
+gdev_dmprt_get_dviprt_params(gx_device *pdev, gs_param_list *plist)
+{
+ dviprt_cfg_t *pprt = &pddev->dmprt.prtcfg;
+ long vlong;
+ bool vbool;
+ gs_param_string vstr;
+ const char *vchar;
+ int code;
+ int i;
+
+ vlong = pprt->integer[CFG_PINS] * 8;
+ code = param_write_long(plist,"Pins", &vlong);
+ if (code < 0) return code;
+ code = param_write_long(plist, "MinimalUnit",
+ pprt->integer+CFG_MINIMAL_UNIT);
+ if (code < 0) return code;
+ code = param_write_long(plist,"MaximalUnit",
+ pprt->integer+CFG_MAXIMAL_UNIT);
+ if (code < 0) return code;
+ code = param_write_int(plist,"HDpi" , &pddev->dmprt.orig_x_dpi);
+ if (code < 0) return code;
+ code = param_write_int(plist,"VDpi", &pddev->dmprt.orig_y_dpi);
+ if (code < 0) return code;
+ code = param_write_long(plist,"Constant", pprt->integer+CFG_CONSTANT);
+ if (code < 0) return code;
+
+ vbool = pprt->integer[CFG_UPPER_POS] & CFG_NON_TRANSPOSE_BIT ? 0 : 1;
+ code = param_write_bool(plist,"Transpose", &vbool);
+ if (code < 0) return code;
+ vbool = pprt->integer[CFG_UPPER_POS] & CFG_REVERSE_BIT ? 1 : 0;
+ code = param_write_bool(plist,"Reverse", &vbool);
+ if (code < 0) return code;
+ vbool = (pprt->integer[CFG_UPPER_POS] & CFG_NON_MOVING) ? 1 : 0;
+ code = param_write_bool(plist,"NonMoving", &vbool);
+ if (code < 0) return code;
+
+ vchar = pprt->strings[CFG_NAME] ? (const char*)pprt->strings[CFG_NAME] : "";
+ param_string_from_string(vstr, vchar);
+ code = param_write_string(plist, "Name", &vstr);
+ if (code < 0) return code;
+
+ for (i=0;gdev_dmprt_encode_list[i].name;i++) {
+ if (pprt->integer[CFG_ENCODE] == gdev_dmprt_encode_list[i].no)
+ break;
+ }
+ if (gdev_dmprt_encode_list[i].name == 0) i = 0;
+ param_string_from_string(vstr, gdev_dmprt_encode_list[i].name);
+ code = param_write_string(plist, "Encoding", &vstr);
+ if (code < 0) return code;
+
+#define param_string_from_prt(ps, pprt, n) \
+ ((ps).data = pprt->prtcode[n] ? pprt->prtcode[n] : (const byte*)"", \
+ (ps).size = pprt->prtcode[n] ? pprt->prtcode_size[n] : 0, \
+ (ps).persistent = true)
+#define param_write_prt(plist, name, pprt, n) \
+ (param_string_from_prt(vstr, pprt, n), \
+ param_write_string(plist, name, &vstr))
+
+ code = param_write_prt(plist, "BitImageMode",
+ pprt, CFG_BIT_IMAGE_MODE);
+ if (code < 0) return code;
+ code = param_write_prt(plist, "SendBitImage",
+ pprt, CFG_SEND_BIT_IMAGE);
+ if (code < 0) return code;
+ code = param_write_prt(plist, "BitRowHeader",
+ pprt, CFG_BIT_ROW_HEADER);
+ if (code < 0) return code;
+ code = param_write_prt(plist, "AfterBitImage",
+ pprt, CFG_AFTER_BIT_IMAGE);
+ if (code < 0) return code;
+ code = param_write_prt(plist, "LineFeed", pprt, CFG_LINE_FEED);
+ if (code < 0) return code;
+ code = param_write_prt(plist, "FormFeed", pprt, CFG_FORM_FEED);
+ if (code < 0) return code;
+ code = param_write_prt(plist, "NormalMode", pprt, CFG_NORMAL_MODE);
+ if (code < 0) return code;
+ code = param_write_prt(plist, "SkipSpaces", pprt, CFG_SKIP_SPACES);
+ if (code < 0) return code;
+
+ return code;
+}
+/* end of internal routines for get_params */
+
+/* --- Put properties of printer device. --- */
+static int gdev_dmprt_put_dmprt_params(gx_device *pdev, gs_param_list *plist);
+static int
+gdev_dmprt_put_dviprt_params(gx_device *pdev, gs_param_list *plist);
+static int gdev_dmprt_put_prt_code_param(gs_param_list *plist,
+ dviprt_cfg_t *pprt,
+ const char* name, int idx);
+static int
+gdev_dmprt_put_prt_string_param(gs_param_list *plist,
+ dviprt_cfg_t *pprt, const char* name, int idx);
+
+static int
+gdev_dmprt_put_params(gx_device *pdev, gs_param_list *plist)
+{
+ int code = 0;
+ const char *param_name;
+ gs_param_dict dict;
+
+ if (!pddev->dmprt.prtcfg_init_f)
+ gdev_dmprt_init_printer_props(pddev);
+
+ /* dmprt parameters */
+ code = param_begin_read_dict(plist, (param_name = "DmprtParams"),
+ &dict, false);
+ if (code < 0) return code;
+ if (code == 0) {
+ code = gdev_dmprt_put_dmprt_params(pdev, dict.list);
+ param_end_read_dict(plist, param_name, &dict);
+ if (code < 0) return code;
+ }
+
+ /* dviprt parameters */
+ code = param_begin_read_dict(plist, (param_name = "DviprtParams"),
+ &dict, false);
+ if (code < 0) return code;
+ if (code == 0) {
+ code = gdev_dmprt_put_dviprt_params(pdev, dict.list);
+ param_end_read_dict(plist, param_name, &dict);
+ if (code < 0) return code;
+ }
+
+ if (pdev->is_open && code) {
+ int ccode = gs_closedevice(pdev);
+ if (ccode < 0) return ccode;
+ }
+
+ pddev->width = pddev->dmprt.spec_width;
+ pddev->height = pddev->dmprt.spec_height;
+ code = gdev_prn_put_params(pdev, plist);
+ pddev->dmprt.spec_width = pddev->width;
+ pddev->dmprt.spec_height = pddev->height;
+ pddev->width -= (pddev->dmprt.dev_margin[0] + pddev->dmprt.dev_margin[2]);
+ pddev->height -= (pddev->dmprt.dev_margin[1] + pddev->dmprt.dev_margin[3]);
+ if (code < 0) return code;
+
+ if (pddev->dmprt.max_width>0 && pddev->dmprt.max_width<pddev->width)
+ pddev->width = pddev->dmprt.max_width;
+ if (pddev->dmprt.max_height>0 && pddev->dmprt.max_height<pddev->height)
+ pddev->height = pddev->dmprt.max_height;
+
+ dviprt_setmessagestream(pddev->dmprt.debug_f ? stderr : NULL);
+
+ return code;
+}
+
+/* internal routines for put_params */
+
+static int
+gdev_dmprt_put_dmprt_params(gx_device *pdev, gs_param_list *plist)
+{
+ int code;
+ long vlong;
+ bool vbool;
+ gs_param_int_array vaint;
+
+ /* debug flag */
+ code = param_read_bool(plist, "Debug", &vbool);
+ if (code < 0) return code;
+ if (code == 0) pddev->dmprt.debug_f = vbool;
+
+ dviprt_setmessagestream(pddev->dmprt.debug_f ? stderr : NULL);
+
+ code = param_read_bool(plist, "Verbose", &vbool);
+ if (code < 0) return code;
+ pddev->dmprt.verbose_f = vbool;
+
+ /* dummy */
+ code = param_read_long(plist, "Version", &vlong);
+ if (code < 0) return code;
+
+ code = param_read_int_array(plist, "MaxSize", &vaint);
+ if (code < 0) return code;
+ if (code == 0) {
+ if (vaint.size != 2) return_error(gs_error_typecheck);
+ pddev->dmprt.max_width = vaint.data[0];
+ pddev->dmprt.max_height = vaint.data[1];
+ }
+
+ code = param_read_int_array(plist, "Offsets", &vaint);
+ if (code < 0) return code;
+ if (code == 0) {
+ if (vaint.size != 2) return_error(gs_error_typecheck);
+ pddev->dmprt.x_offset = vaint.data[0];
+ pddev->dmprt.y_offset = vaint.data[1];
+ }
+
+ code = param_read_int_array(plist, "Margins", &vaint);
+ if (code < 0) return code;
+ if (code == 0) {
+ int i;
+ if (vaint.size != 4) return_error(gs_error_typecheck);
+ for (i=0;i<4;i++) pddev->dmprt.dev_margin[i] = vaint.data[i];
+ }
+
+ return code;
+}
+
+static int
+gdev_dmprt_put_dviprt_params(gx_device *pdev, gs_param_list *plist)
+{
+ int code;
+ dviprt_cfg_t *pprt = &pddev->dmprt.prtcfg;
+ gs_param_string vstr;
+ long vlong;
+ bool vbool;
+
+ /* load .cfg/.src file */
+ code = param_read_string(plist, "FileName", &vstr);
+ if (code < 0) return code;
+ if (code == 0) {
+ char *filename = gs_malloc(pdev->memory->non_gc_memory, vstr.size + 1, 1,
+ "gdev_dmprt_put_props(filename)");
+ int ccode;
+ if (filename == 0) return_error(gs_error_VMerror);
+ strncpy(filename, (const char*)vstr.data, vstr.size);
+ filename[vstr.size] = '\0';
+ ccode = gdev_dmprt_get_printer_props(pddev,filename);
+ gs_free(pdev->memory->non_gc_memory, filename, vstr.size+1, 1, "gdev_dmprt_put_props(filename)");
+ if (ccode < 0) return ccode;
+ }
+
+ code = param_read_long(plist, "Pins", &vlong);
+ if (code < 0) return code;
+ if (code == 0) pprt->integer[CFG_PINS] = vlong / 8;
+
+ code = param_read_long(plist, "MinimalUnit", &vlong);
+ if (code < 0) return code;
+ if (code == 0) pprt->integer[CFG_MINIMAL_UNIT] = vlong;
+
+ code = param_read_long(plist, "MaximalUnit", &vlong);
+ if (code < 0) return code;
+ if (code == 0) pprt->integer[CFG_MAXIMAL_UNIT] = vlong;
+
+ code = param_read_long(plist, "HDpi", &vlong);
+ if (code < 0) return code;
+ if (code == 0) pddev->dmprt.orig_x_dpi = vlong;
+
+ code = param_read_long(plist, "VDpi", &vlong);
+ if (code < 0) return code;
+ if (code == 0) pddev->dmprt.orig_y_dpi = vlong;
+
+ code = param_read_long(plist, "Constant", &vlong);
+ if (code < 0) return code;
+ if (code == 0) pprt->integer[CFG_CONSTANT] = vlong;
+
+ {
+ long tr = pprt->integer[CFG_UPPER_POS] & CFG_NON_TRANSPOSE_BIT;
+ long rv = pprt->integer[CFG_UPPER_POS] & CFG_REVERSE_BIT;
+ long nm = pprt->integer[CFG_UPPER_POS] & CFG_NON_MOVING;
+ param_read_bool(plist,"Transpose", &vbool);
+ if (code < 0) return code;
+ if (code == 0) tr = vbool ? 0 : CFG_NON_TRANSPOSE_BIT;
+ param_read_bool(plist,"Reverse", &vbool);
+ if (code < 0) return code;
+ if (code == 0) rv = vbool ? CFG_REVERSE_BIT : 0;
+ param_read_bool(plist,"NonMoving", &vbool);
+ if (code < 0) return code;
+ if (code == 0) nm = vbool ? CFG_NON_MOVING : 0;
+ pprt->integer[CFG_UPPER_POS] = tr | rv | nm;
+ }
+
+ code = gdev_dmprt_put_prt_code_param(plist, pprt, "BitImageMode",
+ CFG_BIT_IMAGE_MODE);
+ if (code < 0) return code;
+ code = gdev_dmprt_put_prt_code_param(plist, pprt, "SendBitImage",
+ CFG_SEND_BIT_IMAGE);
+ if (code < 0) return code;
+ code = gdev_dmprt_put_prt_code_param(plist, pprt, "BitRowHeader",
+ CFG_BIT_ROW_HEADER);
+ if (code < 0) return code;
+ code = gdev_dmprt_put_prt_code_param(plist, pprt, "AfterBitImage",
+ CFG_AFTER_BIT_IMAGE);
+ if (code < 0) return code;
+ code = gdev_dmprt_put_prt_code_param(plist, pprt, "LineFeed",
+ CFG_LINE_FEED);
+ if (code < 0) return code;
+ code = gdev_dmprt_put_prt_code_param(plist, pprt, "FormFeed",
+ CFG_FORM_FEED);
+ if (code < 0) return code;
+ code = gdev_dmprt_put_prt_code_param(plist, pprt, "NormalMode",
+ CFG_NORMAL_MODE);
+ if (code < 0) return code;
+ code = gdev_dmprt_put_prt_code_param(plist, pprt, "SkipSpaces",
+ CFG_SKIP_SPACES);
+ if (code < 0) return code;
+
+ code = gdev_dmprt_put_prt_string_param(plist, pprt, "Name",
+ CFG_NAME);
+ if (code < 0) return code;
+
+ code = param_read_string(plist, "Encoding", &vstr);
+ if (code < 0) return code;
+ if (code == 0) {
+ int i;
+ for (i=0; gdev_dmprt_encode_list[i].name ; i++) {
+ if (strlen(gdev_dmprt_encode_list[i].name) == vstr.size) {
+ if (strncmp(gdev_dmprt_encode_list[i].name,
+ vstr.data, vstr.size) == 0) {
+ pprt->integer[CFG_ENCODE] = gdev_dmprt_encode_list[i].no;
+ break;
+ }
+ }
+ }
+ if (gdev_dmprt_encode_list[i].name == 0)
+ return_error(gs_error_rangecheck);
+ }
+
+ return code;
+}
+
+static int
+gdev_dmprt_put_prt_code_param(gs_param_list *plist,
+ dviprt_cfg_t *pprt, const char* name, int idx)
+{
+ gs_param_string vstr;
+
+ int code = param_read_string(plist, name, &vstr);
+ if (code == 0) {
+ int ccode = gdev_dmprt_check_code_props(vstr.data, vstr.size);
+ byte *pbyte;
+ if (ccode < 0) return_error(gs_error_rangecheck);
+ pbyte = (byte *)malloc(vstr.size+1);
+ if (pbyte == 0) return_error(gs_error_VMerror);
+ memcpy(pbyte, vstr.data, vstr.size);
+ pbyte[vstr.size] = 0;
+ pprt->prtcode[idx] = pbyte;
+ pprt->prtcode_size[idx] = vstr.size;
+ if (code == 0) code = 1;
+ }
+ return code;
+}
+
+static int
+gdev_dmprt_put_prt_string_param(gs_param_list *plist,
+ dviprt_cfg_t *pprt, const char* name, int idx)
+{
+ gs_param_string vstr;
+
+ int code = param_read_string(plist, name, &vstr);
+ if (code == 0) {
+ byte *pbyte;
+ pbyte = (byte *)malloc(vstr.size+1);
+ if (pbyte == 0) return_error(gs_error_VMerror);
+ memcpy(pbyte, vstr.data, vstr.size);
+ pbyte[vstr.size] = 0;
+ pprt->strings[idx] = pbyte;
+ if (code == 0) code = 1;
+ }
+ return code;
+}
+/* end of internal routines for put_params */
+
+/* --- Get initial matrix. --- */
+static void
+gdev_dmprt_get_initial_matrix(gx_device *pdev, gs_matrix *pmat)
+{
+ gx_default_get_initial_matrix(pdev,pmat);
+ pmat->tx += (pddev->dmprt.x_offset - pddev->dmprt.dev_margin[0]);
+ pmat->ty += (pddev->dmprt.y_offset + pddev->dmprt.dev_margin[3]);
+}
+
+/* --- Open printer device. --- */
+static int
+gdev_dmprt_open(gx_device *pdev)
+{
+ int code;
+ dviprt_cfg_t *pcfg;
+ dviprt_print *pprint;
+
+ pprint = &pddev->dmprt.prtinfo;
+ pcfg = &pddev->dmprt.prtcfg;
+
+ if ((code = gdev_prn_open(pdev)) < 0)
+ return code;
+ pcfg->integer[CFG_DPI] = (int)ppdev->x_pixels_per_inch;
+ pcfg->integer[CFG_Y_DPI] = (int)ppdev->y_pixels_per_inch;
+ code = dviprt_initlibrary(pprint,pcfg,gdev_prn_raster(pdev),pdev->height);
+ if (code < 0) return gdev_dmprt_error_no_dviprt_to_gs(code);
+ code = dviprt_setbuffer(pprint,NULL);
+ if (code < 0) return gdev_dmprt_error_no_dviprt_to_gs(code);
+
+ return 0;
+}
+
+/* --- Close printer device. --- */
+static int
+gdev_dmprt_close(gx_device *pdev)
+{
+ int code;
+ dviprt_print *pprint;
+
+ pprint = &pddev->dmprt.prtinfo;
+
+ if (!strchr(pddev->fname,'%')) {
+ code = dviprt_endbitmap(pprint);
+ if (code < 0) return gdev_dmprt_error_no_dviprt_to_gs(code);
+ }
+ if (pddev->dmprt.verbose_f && pddev->PageCount>0) {
+ emprintf2(pdev->memory,
+ "%s: Total %lu bytes output.\n",
+ pddev->dname,
+ dviprt_getoutputbytes(pprint));
+ }
+ code = dviprt_unsetbuffer(pprint);
+ if (code < 0) return gdev_dmprt_error_no_dviprt_to_gs(code);
+ return gdev_prn_close(pdev);
+}
+
+/* Output the PAGE. */
+static int
+gdev_dmprt_print_page(gx_device_printer *pdev, gp_file *prn_stream)
+{
+ int code = 0;
+ dviprt_print *pprint = &pddev->dmprt.prtinfo;
+ int line_size = gdev_prn_raster((gx_device *)pdev);
+ int pins = dviprt_getscanlines(pprint);
+ int i_buf_size = pins * line_size;
+ int lnum = 0;
+ ulong prev_bytes;
+ byte *in;
+
+ /* get work buffer */
+ in = (byte *)gs_malloc(pdev->memory->non_gc_memory, 1, i_buf_size ,"gdev_dmprt_print_page(in)");
+ if ( in == 0 )
+ return_error(gs_error_VMerror);
+
+ /* Initialize this printer driver */
+ if (pdev->file_is_new) {
+ code = dviprt_setstream(pprint,NULL,prn_stream);
+ if (code < 0) return gdev_dmprt_error_no_dviprt_to_gs(code);
+ }
+ if (pddev->dmprt.verbose_f) {
+ if (pddev->PageCount == 1)
+ emprintf2(pdev->memory,
+ "%s: %s\n",
+ pddev->dname,
+ pddev->dmprt.prtcfg.strings[CFG_NAME]);
+ emprintf2(pdev->memory,
+ "%s: [%ld]",
+ pddev->dname,
+ pddev->PageCount);
+ }
+ prev_bytes = dviprt_getoutputbytes(pprint);
+ code = dviprt_beginpage(pprint);
+ if (code < 0) return gdev_dmprt_error_no_dviprt_to_gs(code);
+
+ /* Transfer pixels to printer */
+ while ( lnum < pdev->height ) {
+ int num_lines;
+
+ num_lines = pdev->height-lnum;
+ if (num_lines > pins)
+ num_lines = pins;
+
+ code = gdev_prn_copy_scan_lines(pdev,lnum,in,line_size*num_lines);
+ if (code < 0) goto error_ex;
+
+ lnum += num_lines;
+ if (num_lines < pins) {
+ memset(in+line_size*num_lines,0,line_size*(pins-num_lines));
+ }
+
+ code = dviprt_outputscanlines(pprint,in);
+ if (code < 0) {
+ code = gdev_dmprt_error_no_dviprt_to_gs(code);
+ goto error_ex;
+ }
+ }
+
+ /* Eject the page and set printer normal mode. */
+ if (strchr(pdev->fname,'%')) {
+ code = dviprt_endbitmap(pprint);
+ if (code < 0) return gdev_dmprt_error_no_dviprt_to_gs(code);
+ }
+ fflush(pddev->file);
+ if (pddev->dmprt.verbose_f) {
+ emprintf1(pdev->memory,
+ " %lu bytes\n",
+ dviprt_getoutputbytes(pprint)-prev_bytes);
+ }
+error_ex:
+ gs_free(pdev->memory->non_gc_memory, (char *)in, 1, i_buf_size,"gdev_dmprt_print_page(in)");
+
+ return code;
+}
+
+/************************** Internal Routines **************************/
+
+/************************ Get printer properties. ***********************/
+static int
+gdev_dmprt_check_code_props(byte *str,int len)
+{
+ byte *end = str+len;
+ while (str < end) {
+ byte fmt = *str++;
+ if (fmt & CFG_FMT_BIT) {
+ int s = *str++;
+ str += s;
+ if (str > end) return_error(gs_error_rangecheck);
+ if ((fmt & CFG_FMT_FORMAT_BIT) == CFG_FMT_STRINGS) {
+ s = *str++;
+ str += s;
+ if (str > end) return_error(gs_error_rangecheck);
+ }
+ }
+ else {
+ str += fmt;
+ if (str > end) return_error(gs_error_rangecheck);
+ }
+ }
+ return str == end ? 0 : gs_error_rangecheck;
+}
+
+static void
+gdev_dmprt_init_printer_props(gx_device_dmprt *pdev)
+{
+ dviprt_cfg_t *pprt;
+ int i;
+
+ pprt = &pdev->dmprt.prtcfg;
+
+ for (i=0;i<CFG_INTEGER_TYPE_COUNT;i++)
+ pprt->integer[i] = 0;
+ for (i=0;i<CFG_STRINGS_TYPE_COUNT;i++)
+ pprt->strings[i] = 0;
+ for (i=0;i<CFG_PRTCODE_TYPE_COUNT;i++) {
+ pprt->prtcode[i] = 0;
+ pprt->prtcode_size[i] = 0;
+ }
+ pdev->dmprt.prtcfg_init_f = 1;
+}
+
+static int
+gdev_dmprt_get_printer_props(gx_device_dmprt *pdev,char *fnamebase)
+{
+ int code;
+ gp_file *fp;
+ dviprt_cfg_t cfg;
+ char *fname;
+
+ fname = gs_malloc(pdev->memory->non_gc_memory, 256,1,"dviprt_lib_fname");
+ if (fname == NULL) return_error(gs_error_VMerror);
+
+ fp = gdev_dmprt_dviprt_lib_fopen(pdev->memory,fnamebase,fname);
+ if (fp == NULL) {
+ return_error(gs_error_undefinedfilename);
+ }
+ if (fseek(fp,18,0) < 0)
+ return_error(gs_error_ioerror);
+ code = fgetc(fp);
+ fclose(fp);
+
+ if (code == EOF)
+ code = gs_error_ioerror;
+ else if (code == 0xff) {
+ code = dviprt_readcfg(pdev->memory,fname,&cfg,NULL,0,NULL,0);
+ }
+ else {
+ code = dviprt_readsrc(pdev->memory,fname,&cfg,NULL,0,NULL,0);
+ }
+
+ if (code < 0) {
+ code = gdev_dmprt_error_no_dviprt_to_gs(code);
+ }
+ else { /* success */
+ memcpy(&pdev->dmprt.prtcfg,&cfg,sizeof(dviprt_cfg_t));
+ pddev->dmprt.orig_x_dpi = cfg.integer[CFG_DPI];
+ pddev->dmprt.orig_y_dpi =
+ cfg.integer[CFG_Y_DPI] > 0 ? cfg.integer[CFG_Y_DPI] : pddev->dmprt.orig_x_dpi;
+ }
+
+ gs_free(pdev->memory->non_gc_memory, fname,256,1,"dviprt_lib_fname");
+
+ return code;
+}
+
+static const char * gp_file_name_concat_string(const char *, unsigned);
+static gp_file *
+gdev_dmprt_dviprt_lib_fopen(const gs_memory_t *mem,const char *fnamebase,char *fname)
+{
+ gp_file *fp = NULL;
+ char *env;
+
+ strcpy(fname,fnamebase);
+ /* lib_fopen is no longer called like this. Use gp_fopen
+ * instead. */
+ /* fp = lib_fopen(fname); */
+ gp = gp_fopen(mem, fname, gp_fmode_rb);
+ if (fp == NULL)
+ {
+ env = getenv("TEXCFG");
+ if (env) {
+ strcpy(fname,env);
+ strcat(fname, gp_file_name_concat_string(env,strlen(env)));
+ strcat(fname,fnamebase);
+ fp = gp_fopen(mem,fname,gp_fmode_rb);
+ }
+ }
+ return fp;
+}
+
+/* Misc. */
+static int
+gdev_dmprt_error_no_dviprt_to_gs(int code)
+{
+ switch (code) {
+ case CFG_ERROR_MEMORY:
+ return_error(gs_error_VMerror);
+ case CFG_ERROR_FILE_OPEN:
+ case CFG_ERROR_OUTPUT:
+ return gs_errpr_ioerror;
+ default:
+ return -1;
+ }
+}
+
+/* Answer the string to be used for combining a directory/device prefix */
+/* with a base file name. The prefix directory/device is examined to */
+/* determine if a separator is needed and may return an empty string */
+static const char *
+gp_file_name_concat_string(const char *prefix, unsigned plen)
+{
+ if (plen > 0 && prefix[plen - 1] == '/')
+ return "";
+ return "/";
+}
diff --git a/contrib/japanese/gdevespg.c b/contrib/japanese/gdevespg.c
new file mode 100644
index 00000000..18ce6ca4
--- /dev/null
+++ b/contrib/japanese/gdevespg.c
@@ -0,0 +1,303 @@
+/* Copyright (C) 1999 Norihito Ohmori.
+
+ Ghostscript driver for EPSON ESC/Page printer.
+
+ This software is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+ to anyone for the consequences of using it or for whether it serves any
+ particular purpose or works at all, unless he says so in writing. Refer
+ to the GNU General Public License for full details.
+
+ Everyone is granted permission to copy, modify and redistribute
+ this software, but only under the conditions described in the GNU
+ General Public License. A copy of this license is supposed to have been
+ given to you along with this software so you can know your rights and
+ responsibilities. It should be in a file named COPYING. Among other
+ things, the copyright notice and this notice must be preserved on all
+ copies.
+ */
+
+/*$Id: gdevespg.c $ */
+/* EPSON ESC/Page driver for Ghostscript */
+
+/*
+ Main part of this driver is taked from Hiroshi Narimatsu's
+ Ghostscript driver, epag-3.08.
+ <ftp://ftp.humblesoft.com/pub/epag-3.08.tar.gz>
+ */
+
+#include "gdevlprn.h"
+#include "gdevlips.h"
+
+#define DPI 300
+
+/* The device descriptors */
+static dev_proc_open_device(escpage_open);
+static dev_proc_open_device(lp2000_open);
+static dev_proc_close_device(escpage_close);
+static dev_proc_print_page_copies(escpage_print_page_copies);
+static dev_proc_print_page_copies(lp2000_print_page_copies);
+static dev_proc_image_out(escpage_image_out);
+
+static void escpage_printer_initialize(gx_device_printer * pdev, gp_file * fp, int);
+static void escpage_paper_set(gx_device_printer * pdev, gp_file * fp);
+
+static gx_device_procs lp2000_prn_procs =
+lprn_procs(lp2000_open, gdev_prn_output_page, gdev_prn_close);
+
+static gx_device_procs escpage_prn_procs =
+lprn_procs(escpage_open, gdev_prn_output_page, escpage_close);
+
+gx_device_lprn far_data gs_lp2000_device =
+lprn_device(gx_device_lprn, lp2000_prn_procs, "lp2000",
+ DPI, DPI, 0.0, 0.0, 0.0, 0.0, 1,
+ lp2000_print_page_copies, escpage_image_out);
+
+gx_device_lprn far_data gs_escpage_device =
+lprn_duplex_device(gx_device_lprn, escpage_prn_procs, "escpage",
+ DPI, DPI, 0.0, 0.0, 0.0, 0.0, 1,
+ escpage_print_page_copies, escpage_image_out);
+
+#define ppdev ((gx_device_printer *)pdev)
+
+static const char *epson_remote_start = "\033\001@EJL \r\n";
+
+/* Open the printer. */
+static int
+escpage_open(gx_device * pdev)
+{
+ int xdpi = pdev->x_pixels_per_inch;
+ int ydpi = pdev->y_pixels_per_inch;
+
+ /* Resolution Check */
+ if (xdpi != ydpi)
+ return_error(gs_error_rangecheck);
+ if (xdpi < 60 || xdpi > 600)
+ return_error(gs_error_rangecheck);
+
+ return gdev_prn_open(pdev);
+}
+
+static int
+lp2000_open(gx_device * pdev)
+{
+ int xdpi = pdev->x_pixels_per_inch;
+ int ydpi = pdev->y_pixels_per_inch;
+
+ /* Resolution Check */
+ if (xdpi != ydpi)
+ return_error(gs_error_rangecheck);
+ if (xdpi < 60 || xdpi > 300)
+ return_error(gs_error_rangecheck);
+
+ return gdev_prn_open(pdev);
+}
+
+static int
+escpage_close(gx_device * pdev)
+{
+ int code = gdev_prn_open_printer(pdev, 1);
+ if (code >= 0) {
+ if (ppdev->Duplex && (pdev->PageCount & 1)) {
+ gp_fprintf(ppdev->file, "%c0dpsE", GS);
+ }
+ gp_fputs(epson_remote_start, ppdev->file);
+ gp_fputs(epson_remote_start, ppdev->file);
+ }
+ return gdev_prn_close(pdev);
+}
+
+static int
+escpage_print_page_copies(gx_device_printer * pdev, gp_file * fp, int num_coipes)
+{
+ gx_device_lprn *const lprn = (gx_device_lprn *) pdev;
+
+ if (pdev->PageCount == 0) {
+ double xDpi = pdev->x_pixels_per_inch;
+
+ /* Goto REMOTE MODE */
+ gp_fputs(epson_remote_start, fp);
+ gp_fprintf(fp, "@EJL SELECT LANGUAGE=ESC/PAGE\r\n");
+
+ /* RIT (Resolution Improvement Technology) Setting */
+ if (lprn->RITOff)
+ gp_fprintf(fp, "@EJL SET RI=OFF\r\n");
+ else
+ gp_fprintf(fp, "@EJL SET RI=ON\r\n");
+
+ /* Resolution Setting */
+ gp_fprintf(fp, "@EJL SET RS=%s\r\n", xDpi > 300 ? "FN" : "QK");
+ gp_fprintf(fp, "@EJL ENTER LANGUAGE=ESC/PAGE\r\n");
+ }
+ return lp2000_print_page_copies(pdev, fp, num_coipes);
+}
+
+static int
+lp2000_print_page_copies(gx_device_printer * pdev, gp_file * fp, int num_coipes)
+{
+ gx_device_lprn *const lprn = (gx_device_lprn *) pdev;
+ int code = 0;
+ int bpl = gdev_mem_bytes_per_scan_line(pdev);
+ int maxY = lprn->BlockLine / lprn->nBh * lprn->nBh;
+
+ /* printer initialize */
+ if (pdev->PageCount == 0)
+ escpage_printer_initialize(pdev, fp, num_coipes);
+
+ if (!(lprn->CompBuf = gs_malloc(pdev->memory->non_gc_memory, bpl * 3 / 2 + 1, maxY, "lp2000_print_page_copies(CompBuf)")))
+ return_error(gs_error_VMerror);
+
+ if (lprn->NegativePrint) {
+ gp_fprintf(fp, "%c1dmG", GS);
+ gp_fprintf(fp, "%c0;0;%d;%d;0rG", GS, pdev->width, pdev->height);
+ gp_fprintf(fp, "%c2owE", GS);
+ }
+ code = lprn_print_image(pdev, fp);
+ if (code < 0)
+ return code;
+
+ gs_free(pdev->memory->non_gc_memory, lprn->CompBuf, bpl * 3 / 2 + 1, maxY, "lp2000_print_page_copies(CompBuf)");
+
+ if (pdev->Duplex)
+ gp_fprintf(fp, "%c0dpsE", GS);
+ else
+ gp_fprintf(fp, "\014"); /* eject page */
+ return code;
+}
+
+/* Output data */
+static void
+escpage_image_out(gx_device_printer * pdev, gp_file * fp, int x, int y, int width, int height)
+{
+ gx_device_lprn *const lprn = (gx_device_lprn *) pdev;
+ int Len;
+
+ gp_fprintf(fp, "%c%dY%c%dX", GS, y, GS, x);
+
+ Len = lips_mode3format_encode(lprn->TmpBuf, lprn->CompBuf, width / 8 * height);
+
+ gp_fprintf(fp, "%c%d;%d;%d;0bi{I", GS, Len,
+ width, height);
+ gp_fwrite(lprn->CompBuf, 1, Len, fp);
+
+ if (lprn->ShowBubble) {
+ gp_fprintf(fp, "%c0dmG", GS);
+ gp_fprintf(fp, "%c%d;%d;%d;%d;0rG", GS,
+ x, y, x + width, y + height);
+ }
+}
+
+/* output printer initialize code */
+
+/* ------ Internal routines ------ */
+
+static char can_inits[] =
+{
+ ESC, 'S', ESC, ESC, 'S', 034,
+ ESC, 'z', 0, 0, /* Go to ESC/Page */
+ GS, 'r', 'h', 'E', /* hard reset */
+ GS, '1', 'm', 'm', 'E', /* Page Memory Mode (for LP-3000/7000/7000G) */
+ GS, '3', 'b', 'c', 'I', /* Style of Compression */
+ GS, '0', ';', '0', 'i', 'u', 'E', /* Paper Feed Unit (Auto) */
+};
+
+static void
+escpage_printer_initialize(gx_device_printer * pdev, gp_file * fp, int copies)
+{
+ gx_device_lprn *const lprn = (gx_device_lprn *) pdev;
+ double xDpi, yDpi;
+
+ xDpi = pdev->x_pixels_per_inch;
+ yDpi = pdev->y_pixels_per_inch;
+
+ /* Initialize */
+ gp_fwrite(can_inits, sizeof(can_inits), 1, fp);
+ /* Duplex Setting */
+ if (pdev->Duplex_set > 0) {
+ if (pdev->Duplex) {
+ gp_fprintf(fp, "%c1sdE", GS);
+ if (lprn->Tumble == 0)
+ gp_fprintf(fp, "%c0bdE", GS);
+ else
+ gp_fprintf(fp, "%c1bdE", GS);
+ } else
+ gp_fprintf(fp, "%c0sdE", GS);
+ }
+ /* Set the Size Unit */
+ gp_fprintf(fp, "%c0;%4.2fmuE", GS, 72.0 / xDpi);
+ /* Set the Resolution */
+ gp_fprintf(fp, "%c0;%d;%ddrE", GS, (int)(xDpi + 0.5), (int)(yDpi + 0.5));
+ /* Set the Paper Size */
+ escpage_paper_set(pdev, fp);
+ /* Set the desired number of Copies */
+ gp_fprintf(fp, "%c%dcoO", GS, copies < 256 ? copies : 255);
+ /* Set the Position to (0, 0) */
+ gp_fprintf(fp, "%c0;0loE", GS);
+}
+
+typedef struct {
+ int width; /* paper width (unit: point) */
+ int height; /* paper height (unit: point) */
+ int escpage; /* number of papersize in ESC/PAGE */
+} EpagPaperTable;
+
+static EpagPaperTable epagPaperTable[] =
+{
+ {842, 1190, 13}, /* A3 */
+ {595, 842, 14}, /* A4 */
+ {597, 842, 14}, /* A4 (8.3x11.7 inch) */
+ {421, 595, 15}, /* A5 */
+ {297, 421, 16}, /* A6 */
+ {729, 1032, 24}, /* B4 JIS */
+ {516, 729, 25}, /* B5 JIS */
+ {612, 792, 30}, /* Letter */
+ {396, 612, 31}, /* Half Letter */
+ {612, 1008, 32}, /* Legal */
+ {522, 756, 33}, /* Executive */
+ {612, 936, 34}, /* Government Legal */
+ {576, 756, 35}, /* Government Letter */
+ {792, 1224, 36}, /* Ledger */
+ {593, 935, 37}, /* F4 */
+ {284, 419, 38}, /* PostCard */
+ {933, 1369, 72}, /* A3 NOBI */
+ {279, 540, 80}, /* Monarch */
+ {297, 684, 81}, /* Commercial 10 */
+ {312, 624, 90}, /* DL */
+ {459, 649, 91}, /* C5 */
+ {0, 0, -1}, /* Undefined */
+};
+
+static void
+escpage_paper_set(gx_device_printer * pdev, gp_file * fp)
+{
+ int width, height, w, h, wp, hp, bLandscape;
+ EpagPaperTable *pt;
+
+ width = pdev->MediaSize[0];
+ height = pdev->MediaSize[1];
+
+ if (width < height) {
+ bLandscape = 0;
+ w = width;
+ h = height;
+ wp = width / 72.0 * pdev->x_pixels_per_inch;
+ hp = height / 72.0 * pdev->y_pixels_per_inch;
+ } else {
+ bLandscape = 1;
+ w = height;
+ h = width;
+ wp = height / 72.0 * pdev->y_pixels_per_inch;
+ hp = width / 72.0 * pdev->x_pixels_per_inch;
+ }
+
+ for (pt = epagPaperTable; pt->escpage > 0; pt++)
+ if (pt->width == w && pt->height == h)
+ break;
+
+ gp_fprintf(fp, "%c%d", GS, pt->escpage);
+ if (pt->escpage < 0)
+ gp_fprintf(fp, ";%d;%d", wp, hp);
+ gp_fprintf(fp, "psE");
+
+ gp_fprintf(fp, "%c%dpoE", GS, bLandscape);
+}
diff --git a/contrib/japanese/gdevfmlbp.c b/contrib/japanese/gdevfmlbp.c
new file mode 100644
index 00000000..0e0ab425
--- /dev/null
+++ b/contrib/japanese/gdevfmlbp.c
@@ -0,0 +1,229 @@
+/* Copyright (C) 1991 Aladdin Enterprises. All rights reserved.
+ Distributed by Free Software Foundation, Inc.
+
+This file is part of Ghostscript.
+
+Ghostscript is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+to anyone for the consequences of using it or for whether it serves any
+particular purpose or works at all, unless he says so in writing. Refer
+to the Ghostscript General Public License for full details.
+
+Everyone is granted permission to copy, modify and redistribute
+Ghostscript, but only under the conditions described in the Ghostscript
+General Public License. A copy of this license is supposed to have been
+given to you along with Ghostscript so you can know your rights and
+responsibilities. It should be in a file named COPYING. Among other
+things, the copyright notice and this notice must be preserved on all
+copies. */
+
+/* gdevfmlbp.c */
+/* Fujitsu FMLBP2xx driver for Ghostscript */
+/*
+ * Based on LBP-8II driver(gdevlbp8.c) and ESC/Page driver(gdevepag.c).
+ * Modified for FMLBP by Kazushige Goto <goto@statabo.rim.or.jp> and
+ * Shoichi Nakayama <naka@fadev.fvd.fujitsu.co.jp>.
+ *
+ * ver 0.9 1997/03/08 goto@statabo.rim.or.jp
+ * -- Initial release.
+ * ver 1.0 1997/12/24 naka@fadev.fvd.fujitsu.co.jp
+ * -- Fixed bug.
+ * ver 1.1 1998/03/12 naka@fadev.fvd.fujitsu.co.jp
+ * -- Added 240dpi and paper size support.
+ * ver 1.2 1998/03/30 naka@fadev.fvd.fujitsu.co.jp
+ * -- Added adjust margin for gs261.
+ */
+#include "gdevprn.h"
+
+#define X_DPI 400
+#define Y_DPI 400
+
+/* The device descriptors */
+static dev_proc_print_page(fmlbp_print_page);
+
+#ifdef FMLBP_NOADJUST_MARGIN
+#define PRNFMLBP prn_std_procs
+#else
+/* Adjust margin for ghostscript 2.6.1 */
+#define PRNFMLBP prn_fmlbp_procs
+static dev_proc_get_initial_matrix(fmlbp_get_initial_matrix);
+gx_device_procs prn_fmlbp_procs =
+ prn_matrix_procs(gdev_prn_open, fmlbp_get_initial_matrix,
+ gdev_prn_output_page, gdev_prn_close);
+
+/* Shift the origin from the top left corner of the pysical page to the
+ first printable pixel, as defined by the top and left margins. */
+/* modified from gdevsppr.c. */
+static void
+fmlbp_get_initial_matrix(gx_device *dev, gs_matrix *pmat)
+{ gx_default_get_initial_matrix(dev, pmat);
+ pmat->tx -= (dev->l_margin * dev->x_pixels_per_inch);
+ pmat->ty -= (dev->t_margin * dev->y_pixels_per_inch);
+}
+#endif/*FMLBP_NOADJUST_MARGIN*/
+
+gx_device_printer gs_fmlbp_device =
+ prn_device(PRNFMLBP, "fmlbp",
+ DEFAULT_WIDTH_10THS_A4, /* width_10ths, 8.3" */
+ DEFAULT_HEIGHT_10THS_A4, /* height_10ths, 11.7" */
+ X_DPI, Y_DPI,
+ 0.20, 0.35, 0.21, 0.20, /* left,bottom,right,top margins */
+ 1, fmlbp_print_page);
+
+/* ------ Internal routines ------ */
+
+#define ESC 0x1b
+#define CEX 0x1c
+#define CSI 0x1b,0x5b
+#define PU1 0x1b,0x51
+
+static char can_inits[] ={ ESC, 'c', /* Software reset */
+#ifdef OLD_FMLBP_400DPI
+ PU1, '4', '0', '0', '!', 'A' /* 400dpi */
+/*PU1, '0', ';','4', ';','0', ';','0','!','@' */ /* landscape */
+#endif/*OLD_FMLBP_400DPI*/
+};
+
+#ifdef FMLBP_NOPAPERSIZE
+#define LINE_SIZE ((4520+7) / 8) /* bytes per line */
+#else
+/* Paper sizes */
+#define PAPER_SIZE_A3 "0;3"
+#define PAPER_SIZE_A4 "0;4"
+#define PAPER_SIZE_A5 "0;5"
+#define PAPER_SIZE_B4 "1;4"
+#define PAPER_SIZE_B5 "1;5"
+#define PAPER_SIZE_LEGAL "2;0"
+#define PAPER_SIZE_LETTER "3;0"
+#define PAPER_SIZE_HAGAKI "4;0"
+
+/* Get the paper size code, based on width and height. */
+/* modified from gdevpcl.c, gdevmjc.c and gdevnpdl.c. */
+static char *
+gdev_fmlbp_paper_size(gx_device_printer *dev, char *paper)
+{
+ int landscape = 0; /* portrait */
+ float height_inches = dev->height / dev->y_pixels_per_inch;
+ float width_inches = dev->width / dev->x_pixels_per_inch;
+
+ if (width_inches > height_inches){ /* landscape */
+ float t = width_inches;
+ width_inches = height_inches;
+ height_inches = t;
+ landscape = 1;
+ }
+ gs_sprintf(paper, "%s;%d",
+ (height_inches >= 15.9 ? PAPER_SIZE_A3 :
+ height_inches >= 11.8 ?
+ (width_inches >= 9.2 ? PAPER_SIZE_B4 : PAPER_SIZE_LEGAL) :
+ height_inches >= 11.1 ? PAPER_SIZE_A4 :
+ height_inches >= 10.4 ? PAPER_SIZE_LETTER :
+ height_inches >= 9.2 ? PAPER_SIZE_B5 :
+ height_inches >= 7.6 ? PAPER_SIZE_A5 : PAPER_SIZE_HAGAKI), landscape);
+#ifdef FMLBP_DEBUG
+ dprintf5("w=%d(%f) x h=%d(%f) -> %s\n",
+ dev->width, width_inches, dev->height, height_inches, paper);
+#endif/*FMLBP_DEBUG*/
+ return paper;
+}
+#endif/*FMLBP_NOPAPERSIZE*/
+
+/* move down and move across */
+static void goto_xy(gp_file *prn_stream,int x,int y)
+ {
+ unsigned char buff[20];
+ unsigned char *p=buff;
+
+ gp_fputc(CEX,prn_stream);
+ gp_fputc('"',prn_stream);
+ gs_sprintf((char *)buff,"%d",x);
+ while (*p)
+ {
+ if (!*(p+1)) gp_fputc((*p)+0x30,prn_stream);
+ else
+ gp_fputc((*p)-0x10,prn_stream);
+ p++;
+ }
+
+ p=buff;
+ gs_sprintf((char *)buff,"%d",y);
+ while (*p)
+ {
+ if (!*(p+1)) gp_fputc((*p)+0x40,prn_stream);
+ else
+ gp_fputc((*p)-0x10,prn_stream);
+ p++;
+ }
+ }
+
+/* Send the page to the printer. */
+static int
+fmlbp_print_page(gx_device_printer *pdev, gp_file *prn_stream)
+{
+ int line_size = gdev_mem_bytes_per_scan_line((gx_device *)pdev);
+#ifdef FMLBP_NOPAPERSIZE
+ char data[LINE_SIZE*2];
+#else
+ char paper[16];
+ byte *data = (byte *)gs_malloc(pdev->memory->non_gc_memory, 1, line_size, "fmlpr_print_page(data)");
+ if(data == NULL) return_error(gs_error_VMerror);
+#endif/*FMLBP_NOPAPERSIZE*/
+
+ /* initialize */
+ gp_fwrite(can_inits, sizeof(can_inits), 1, prn_stream);
+ gp_fprintf(prn_stream, "%c%c%d!I", PU1, 0); /* 100% */
+#ifndef OLD_FMLBP_400DPI
+ gp_fprintf(prn_stream, "%c%c%d!A", PU1,
+ (int)(pdev->x_pixels_per_inch)); /* 240dpi or 400dpi */
+#endif/*!OLD_FMLBP_400DPI*/
+#ifndef FMLBP_NOPAPERSIZE
+ gp_fprintf(prn_stream, "%c%c%s!F", PU1,
+ gdev_fmlbp_paper_size(pdev, paper)); /* Paper size */
+#endif/*!FMLBP_NOPAPERSIZE*/
+
+ /* Send each scan line in turn */
+ { int lnum;
+ byte rmask = (byte)(0xff << (-pdev->width & 7));
+
+ for ( lnum = 0; lnum < pdev->height; lnum++ )
+ { byte *end_data = data + line_size;
+ int s = gdev_prn_copy_scan_lines(pdev, lnum,
+ (byte *)data, line_size);
+ if(s < 0) return_error(s);
+ /* Mask off 1-bits beyond the line width. */
+ end_data[-1] &= rmask;
+ /* Remove trailing 0s. */
+ while ( end_data > data && end_data[-1] == 0 )
+ end_data--;
+ if ( end_data != data ) {
+ int num_cols = 0;
+ int out_count = 0;
+ byte *out_data = data;
+
+ while(out_data < end_data && *out_data == 0) {
+ num_cols += 8;
+ out_data++;
+ }
+ out_count = end_data - out_data;
+
+ /* move down */ /* move across */
+ goto_xy(prn_stream, num_cols, lnum);
+
+ /* transfer raster graphics */
+ gp_fprintf(prn_stream, "%c%c%d;%d;0!a",
+ PU1, out_count, out_count*8 );
+
+ /* send the row */
+ gp_fwrite(out_data, sizeof(byte), out_count, prn_stream);
+ }
+ }
+ }
+ /* eject page */
+ gp_fputc(0x0c,prn_stream);
+ gp_fflush(prn_stream);
+#ifndef FMLBP_NOPAPERSIZE
+ gs_free(pdev->memory->non_gc_memory, (char *)data, line_size, sizeof(byte), "fmlbp_print_page(data)");
+#endif/*!FMLBP_NOPAPERSIZE*/
+
+ return 0;
+}
diff --git a/contrib/japanese/gdevfmpr.c b/contrib/japanese/gdevfmpr.c
new file mode 100644
index 00000000..cd34d4fd
--- /dev/null
+++ b/contrib/japanese/gdevfmpr.c
@@ -0,0 +1,210 @@
+/* Copyright (C) 1990, 1992 Aladdin Enterprises. All rights reserved.
+ Distributed by Free Software Foundation, Inc.
+
+This file is part of Ghostscript.
+
+Ghostscript is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+to anyone for the consequences of using it or for whether it serves any
+particular purpose or works at all, unless he says so in writing. Refer
+to the Ghostscript General Public License for full details.
+
+Everyone is granted permission to copy, modify and redistribute
+Ghostscript, but only under the conditions described in the Ghostscript
+General Public License. A copy of this license is supposed to have been
+given to you along with Ghostscript so you can know your rights and
+responsibilities. It should be in a file named COPYING. Among other
+things, the copyright notice and this notice must be preserved on all
+copies. */
+
+/* gdevfmpr.c */
+/* Fujitsu FMPR printer driver for Ghostscript */
+
+/* This derives from "gdevp201.c" programed by Norio KATAYAMA. */
+
+#include "gdevprn.h"
+
+static dev_proc_print_page(fmpr_print_page);
+
+#define A4
+
+/* The device descriptor */
+gx_device_printer gs_fmpr_device =
+ prn_device(prn_std_procs, "fmpr",
+ DEFAULT_WIDTH_10THS,
+ DEFAULT_HEIGHT_10THS,
+ 180, /* x_dpi */
+ 180, /* y_dpi */
+ 0, /* 0.35, */ /* left margins */
+ 0, /* bottom margins */
+ 0, /* 0.84, */ /* top margins */
+ 0, /* right margins */
+ 1, fmpr_print_page);
+
+/* ---- Printer output routines ---- */
+
+static int
+prn_putc(gx_device_printer *pdev, int c)
+{
+ return gp_fputc(c, pdev->file);
+}
+
+static int
+prn_puts(gx_device_printer *pdev, const char *ptr)
+{
+ return gp_fputs(ptr, pdev->file);
+}
+
+static int
+prn_write(gx_device_printer *pdev, const char *ptr, int size)
+{
+ return gp_fwrite(ptr, 1, size, pdev->file);
+}
+
+static void
+prn_flush(gx_device_printer *pdev)
+{
+ gp_fflush(pdev->file);
+}
+
+/* ------ internal routines ------ */
+
+/* Transpose a block of 8x8 bits */
+static int
+fmpr_transpose_8x8(byte *src, int src_step, byte *dst, int dst_step)
+{
+ byte mask, s, d0, d1, d2, d3, d4, d5, d6, d7;
+ int i;
+
+ d0 = d1 = d2 = d3 = d4 = d5 = d6 = d7 = 0;
+
+ for(i=0, mask=0x80; i<8; i++, mask >>= 1) {
+ s = *src;
+ if(s & 0x80) d0 |= mask;
+ if(s & 0x40) d1 |= mask;
+ if(s & 0x20) d2 |= mask;
+ if(s & 0x10) d3 |= mask;
+ if(s & 0x08) d4 |= mask;
+ if(s & 0x04) d5 |= mask;
+ if(s & 0x02) d6 |= mask;
+ if(s & 0x01) d7 |= mask;
+ src += src_step;
+ }
+
+ *dst = d0;
+ *(dst += dst_step) = d1;
+ *(dst += dst_step) = d2;
+ *(dst += dst_step) = d3;
+ *(dst += dst_step) = d4;
+ *(dst += dst_step) = d5;
+ *(dst += dst_step) = d6;
+ *(dst += dst_step) = d7;
+
+ return 0;
+}
+
+/* Send the page to the printer. */
+static int
+fmpr_print_page(gx_device_printer *pdev, gp_file *prn_stream)
+{
+ int line_size = gdev_prn_raster(pdev);
+ int height = pdev->height;
+ int bits_per_column = 24;
+ int bytes_per_column = bits_per_column / 8;
+ int chunk_size = bits_per_column * line_size;
+ byte *in, *out;
+ int lnum;
+ char prn_buf[16];
+
+ in = (byte *)
+ gs_malloc(pdev->memory->non_gc_memory, bits_per_column, line_size, "fmpr_print_page(in)");
+ out = (byte *)
+ gs_malloc(pdev->memory->non_gc_memory, bits_per_column, line_size, "fmpr_print_page(out)");
+ if(in == 0 || out == 0)
+ return -1;
+
+ /* Initialize printer */
+ prn_puts(pdev, "\033c");
+ prn_puts(pdev, "\033Q1 `\033[24;18 G");
+
+ /* Send Data to printer */
+ lnum = 0;
+ while(lnum < height) {
+ byte *inp, *outp, *out_beg, *out_end;
+ int x, y, num_lines, size, mod;
+
+ if(gdev_prn_copy_scan_lines(pdev, lnum, in, chunk_size) < 0)
+ break;
+
+ if((num_lines = height - lnum) > bits_per_column)
+ num_lines = bits_per_column;
+
+ size = line_size * num_lines;
+ if(in[0] == 0 &&
+ !memcmp((char *)in, (char *)in + 1, size - 1)) {
+ lnum += bits_per_column;
+ prn_putc(pdev, '\n');
+ continue;
+ }
+
+ if(num_lines < bits_per_column) {
+ size = line_size * (bits_per_column - num_lines);
+ memset(in + line_size * num_lines, 0, size);
+ }
+ lnum += bits_per_column;
+
+ for(y = 0; y < bytes_per_column; y ++) {
+ inp = in + line_size * 8 * y;
+ outp = out + y;
+ for(x = 0; x < line_size; x ++) {
+ fmpr_transpose_8x8(inp, line_size,
+ outp, bytes_per_column);
+ inp ++;
+ outp += bits_per_column;
+ }
+ }
+
+ /* Remove trailing 0s. */
+ out_end = out + chunk_size - 1;
+ while(out_end >= out) {
+ if(*out_end)
+ break;
+ out_end --;
+ }
+ size = (out_end - out) + 1;
+ if((mod = size % bytes_per_column) != 0)
+ out_end += bytes_per_column - mod;
+
+ /* Remove leading 0s. */
+ out_beg = out;
+ while(out_beg <= out_end) {
+ if(*out_beg)
+ break;
+ out_beg ++;
+ }
+ out_beg -= (out_beg - out) % bytes_per_column;
+
+ gs_sprintf(prn_buf, "\033[%da",
+ (out_beg - out) / bytes_per_column);
+ prn_puts(pdev, prn_buf);
+
+ /* Dot graphics */
+ size = out_end - out_beg + 1;
+ gs_sprintf(prn_buf, "\033Q%d W", size / bytes_per_column);
+ prn_puts(pdev, prn_buf);
+ prn_write(pdev, (const char *)out_beg, size);
+
+ prn_putc(pdev, '\n');
+ }
+
+ /* Form Feed */
+ prn_putc(pdev, '\f');
+ prn_flush(pdev);
+
+ gs_free(pdev->memory->non_gc_memory, (char *)out,
+ bits_per_column, line_size, "fmpr_print_page(out)");
+ gs_free(pdev->memory->non_gc_memory, (char *)in,
+ bits_per_column, line_size, "fmpr_print_page(in)");
+
+ return 0;
+}
diff --git a/contrib/japanese/gdevj100.c b/contrib/japanese/gdevj100.c
new file mode 100644
index 00000000..f8a70179
--- /dev/null
+++ b/contrib/japanese/gdevj100.c
@@ -0,0 +1,198 @@
+/* Copyright (C) 1990, 1992 Aladdin Enterprises. All rights reserved.
+ Distributed by Free Software Foundation, Inc.
+
+This file is part of Ghostscript.
+
+Ghostscript is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+to anyone for the consequences of using it or for whether it serves any
+particular purpose or works at all, unless he says so in writing. Refer
+to the Ghostscript General Public License for full details.
+
+Everyone is granted permission to copy, modify and redistribute
+Ghostscript, but only under the conditions described in the Ghostscript
+General Public License. A copy of this license is supposed to have been
+given to you along with Ghostscript so you can know your rights and
+responsibilities. It should be in a file named COPYING. Among other
+things, the copyright notice and this notice must be preserved on all
+copies. */
+
+/* gdevjj100.c */
+/* Star JJ-100 printer driver for Ghostscript */
+#include "gdevprn.h"
+
+static dev_proc_print_page(jj100_print_page);
+
+/*
+ * The only available resolutions are 360 x 360.
+ */
+
+/* The device descriptor */
+gx_device_printer gs_jj100_device =
+ prn_device(prn_std_procs, "jj100",
+ 82, /* width_10ths, 8.2" = 210mm(A4) */
+ 115 /*113, 117*/, /* height_10ths, 11.7" = 297mm(A4) */
+ 360, /* x_dpi */
+ 360, /* y_dpi */
+ 0,0,0,0, /* margins */
+ 1, jj100_print_page);
+
+/* ------ internal routines ------ */
+
+/* Transpose a block of 8x8 bits */
+static int
+jj100_transpose_8x8(byte *src, int src_step, byte *dst, int dst_step)
+{
+ byte mask, s, d0, d1, d2, d3, d4, d5, d6, d7;
+ int i;
+
+ d0 = d1 = d2 = d3 = d4 = d5 = d6 = d7 = 0;
+
+ for(i=0, mask=0x01; i<8; i++, mask <<= 1) {
+ s = *src;
+ if(s & 0x80) d0 |= mask;
+ if(s & 0x40) d1 |= mask;
+ if(s & 0x20) d2 |= mask;
+ if(s & 0x10) d3 |= mask;
+ if(s & 0x08) d4 |= mask;
+ if(s & 0x04) d5 |= mask;
+ if(s & 0x02) d6 |= mask;
+ if(s & 0x01) d7 |= mask;
+ src += src_step;
+ }
+
+ *dst = d0;
+ *(dst += dst_step) = d1;
+ *(dst += dst_step) = d2;
+ *(dst += dst_step) = d3;
+ *(dst += dst_step) = d4;
+ *(dst += dst_step) = d5;
+ *(dst += dst_step) = d6;
+ *(dst += dst_step) = d7;
+
+ return 0;
+}
+
+/* Send the page to the printer. */
+static int
+jj100_print_page(gx_device_printer *pdev, gp_file *prn_stream)
+{ int line_size = gdev_prn_raster(pdev);
+ int height = pdev->height;
+ int bits_per_column = 48;
+ int bytes_per_column = bits_per_column / 8;
+ int chunk_size = bits_per_column * line_size;
+ byte *in, *out;
+ int lnum, skip;
+ char prn_buf[16];
+
+ in = (byte *)gs_malloc(pdev->memory->non_gc_memory, bits_per_column, line_size, "jj100_print_page(in)");
+ out = (byte *)gs_malloc(pdev->memory->non_gc_memory, bits_per_column, line_size, "jj100_print_page(out)");
+ if(in == 0 || out == 0)
+ return -1;
+
+ /* Initialize printer */
+ gp_fputs("\033P", pdev->file); /* Proportional Mode */
+ gp_fputs("\033G", pdev->file); /* 1/180 inch per line */
+ gp_fputs("\033T16", pdev->file); /* 16/180 inch per line */
+
+ /* Send Data to printer */
+ lnum = 0;
+ skip = 0;
+ while(lnum < height) {
+ byte *inp, *outp, *out_beg, *out_end;
+ int x, y, num_lines, size, mod;
+
+ /* Copy scan lines */
+ if(gdev_prn_copy_scan_lines(pdev, lnum, in, chunk_size) < 0)
+ break;
+
+ /* The number of lines to process */
+ if((num_lines = height - lnum) > bits_per_column)
+ num_lines = bits_per_column;
+
+ /* Test for all zero */
+ size = line_size * num_lines;
+ if(in[0] == 0 &&
+ !memcmp((char *)in, (char *)in + 1, size - 1)) {
+ lnum += bits_per_column;
+ skip ++;
+ continue;
+ }
+
+ /* Fill zero */
+ if(num_lines < bits_per_column) {
+ size = line_size * (bits_per_column - num_lines);
+ memset(in + line_size * num_lines, 0, size);
+ }
+ lnum += bits_per_column;
+
+ /* Vertical tab to the appropriate position. */
+ while(skip > 15) {
+ gs_sprintf(prn_buf, "\037%c", 16 + 15);
+ gp_fputs(prn_buf, pdev->file);
+ skip -= 15;
+ }
+ if(skip > 0) {
+ gs_sprintf(prn_buf, "\037%c", 16 + skip);
+ gp_fputs(prn_buf, pdev->file);
+ }
+
+ /* Transpose in blocks of 8 scan lines. */
+ for(y = 0; y < bytes_per_column; y ++) {
+ inp = in + line_size * 8 * y;
+ outp = out + y;
+ for(x = 0; x < line_size; x ++) {
+ jj100_transpose_8x8(inp, line_size,
+ outp, bytes_per_column);
+ inp ++;
+ outp += bits_per_column;
+ }
+ }
+
+ /* Remove trailing 0s. */
+ out_end = out + chunk_size - 1;
+ while(out_end >= out) {
+ if(*out_end)
+ break;
+ out_end --;
+ }
+ size = (out_end - out) + 1;
+ if((mod = size % bytes_per_column) != 0)
+ out_end += bytes_per_column - mod;
+
+ /* Remove leading 0s. */
+ out_beg = out;
+ while(out_beg <= out_end) {
+ if(*out_beg)
+ break;
+ out_beg ++;
+ }
+ out_beg -= (out_beg - out) % (bytes_per_column * 2);
+
+ /* Dot addressing */
+ gs_sprintf(prn_buf, "\033F%04d",
+ (out_beg - out) / bytes_per_column / 2);
+ gp_fputs(prn_buf, pdev->file);
+
+ /* Dot graphics */
+ size = out_end - out_beg + 1;
+ gs_sprintf(prn_buf, "\034bP,48,%04d.", size / bytes_per_column);
+ gp_fputs(prn_buf, pdev->file);
+ gp_fwrite(out_beg, 1, size, pdev->file);
+
+ /* Carriage Return */
+ gp_fputc('\r', pdev->file);
+ skip = 1;
+ }
+
+ /* Form Feed */
+ gp_fputc('\f', pdev->file);
+ gp_fflush(pdev->file);
+
+ gs_free(pdev->memory->non_gc_memory, (char *)out,
+ bits_per_column, line_size, "jj100_print_page(out)");
+ gs_free(pdev->memory->non_gc_memory, (char *)in,
+ bits_per_column, line_size, "jj100_print_page(in)");
+
+ return 0;
+}
diff --git a/contrib/japanese/gdevlbp3.c b/contrib/japanese/gdevlbp3.c
new file mode 100644
index 00000000..096aecf6
--- /dev/null
+++ b/contrib/japanese/gdevlbp3.c
@@ -0,0 +1,277 @@
+/* gdevlbp3.c */
+/* Canon LASER SHOT LBP-310/320 printer driver for Ghostscript
+ * working on standerd/fine image mode.
+ *
+ * If any comment, write to naoya@mahoroba.ne.jp
+ */
+
+#include "gdevprn.h"
+
+#define mm_to_inch(x) (x)/25.4
+
+/* The device descriptor */
+
+static dev_proc_print_page(lbp310PrintPage);
+static dev_proc_print_page(lbp320PrintPage);
+
+gx_device_printer far_data gs_lbp310_device =
+ prn_device(prn_std_procs,
+ "lbp310",
+ DEFAULT_WIDTH_10THS,
+ DEFAULT_HEIGHT_10THS,
+ 600, 600,
+ mm_to_inch(5.0),
+ mm_to_inch(5.0),
+ mm_to_inch(5.0),
+ mm_to_inch(5.0),
+ 1, lbp310PrintPage);
+
+gx_device_printer far_data gs_lbp320_device =
+ prn_device(prn_std_procs,
+ "lbp320",
+ DEFAULT_WIDTH_10THS,
+ DEFAULT_HEIGHT_10THS,
+ 600, 600,
+ mm_to_inch(5.0),
+ mm_to_inch(5.0),
+ mm_to_inch(5.0),
+ mm_to_inch(5.0),
+ 1, lbp320PrintPage);
+
+enum Paper
+ {
+ a4, a5, postcard, b5, letter
+ };
+
+struct bounding
+ {
+ enum Paper paper;
+ int Top, Bottom, Left, Right;
+ };
+
+struct ppi
+ {
+ int w;
+ int h;
+ int id;
+ };
+
+static const struct ppi PaperInfo[] =
+ {
+ {2100, 2960, 14}, /* A4 */
+ {1485, 2098, 16}, /* A5 */
+ {1000, 1480, 18}, /* Postcard */
+ {1820, 2570, 26}, /* B5 */
+ {2100, 2790, 14} /* Letter */
+ };
+
+static void BoundImage(gx_device_printer *, struct bounding *);
+static long CompressImage(gx_device_printer *, struct bounding *, gp_file *, const char *);
+
+static int
+lbp310PrintPage(gx_device_printer *pDev, gp_file *fp)
+{
+ int i;
+ char Buf[10];
+ long DataSize;
+ struct bounding Box;
+
+ BoundImage(pDev, &Box);
+
+ DataSize = CompressImage(pDev, &Box, fp, "\x1b[1;%d;%d;11;%d;.r");
+
+ /* ----==== Set size ====---- */
+ gs_sprintf(Buf, "0%ld", DataSize);
+ i = (DataSize+strlen(Buf)+1)&1;
+ /* ----==== escape to LIPS ====---- */
+ gp_fprintf(fp, "\x80%s\x80\x80\x80\x80\x0c",Buf+i);
+ gp_fprintf(fp, "\x1bP0J\x1b\\");
+
+ return(0);
+}
+
+static int
+lbp320PrintPage(gx_device_printer *pDev, gp_file *fp)
+{
+ int i;
+ char Buf[16];
+ long DataSize;
+ struct bounding Box;
+
+ BoundImage(pDev, &Box);
+
+ /* ----==== fix bounding box 4-byte align ====---- */
+ Box.Left &= ~1;
+ Box.Right |= 1;
+
+ /* ----==== JOB start ??? ====---- */
+ gp_fprintf(fp, "\x1b%%-12345X@PJL CJLMODE\n@PJL JOB\n");
+
+ DataSize = CompressImage(pDev, &Box, fp, "\x1b[1;%d;%d;11;%d;.&r");
+
+ /* ----==== Set size ====---- */
+ gs_sprintf(Buf, "000%ld", DataSize);
+ i = (DataSize+strlen(Buf)+1)&3;
+ /* ----==== escape to LIPS ====---- */
+ gp_fprintf(fp, "\x80%s\x80\x80\x80\x80\x0c",Buf+i);
+ gp_fprintf(fp, "\x1bP0J\x1b\\");
+ gp_fprintf(fp, "\x1b%%-12345X@PJL CJLMODE\n@PJL EOJ\n\x1b%%-12345X");
+
+ return(0);
+}
+
+static void
+BoundImage(gx_device_printer *pDev, struct bounding *pBox)
+{
+ int x, y, flag;
+ int LineSize = gdev_mem_bytes_per_scan_line((gx_device *)pDev);
+ int Xsize, Ysize, Pt, Pb, Pl, Pr;
+ int Xres = (int)pDev->x_pixels_per_inch,
+ Yres = (int)pDev->y_pixels_per_inch,
+ height = pDev->height;
+ byte *Buf;
+ enum Paper paper;
+
+ /* ----==== Check parameters ====---- */
+ paper = height*10/Yres < 82 ? postcard :\
+ height*10/Yres < 98 ? a5 :\
+ height*10/Yres < 109 ? b5 :\
+ height*10/Yres < 116 ? letter : a4;
+ Xsize = Xres * mm_to_inch(PaperInfo[paper].w-100) / 160;
+ Ysize = Yres * mm_to_inch(PaperInfo[paper].h-100) / 10;
+ /* ----==== Allocate momory ====---- */
+ if (LineSize < Xsize*2+1) {
+ LineSize = Xsize*2+1;
+ }
+ Buf = (byte *)gs_malloc(pDev->memory->non_gc_memory, 1, LineSize, "LineBuffer");
+ /* ----==== bounding image ====---- */
+ Pt = Pb = Pl = Pr = -1;
+ for(y=0 ; y<height && y<Ysize ; y++){
+ flag = 0;
+ gdev_prn_copy_scan_lines(pDev, y, Buf, LineSize);
+ for (x=0 ; x<min(LineSize/2, Xsize) ; x++) {
+ if (*(Buf+x*2) || *(Buf+x*2+1)) {
+ if (Pl == -1 || Pl > x) {
+ Pl = x;
+ }
+ if (Pr < x) {
+ Pr = x;
+ }
+ flag = 1;
+ }
+ }
+ if (flag) {
+ if (Pt == -1) {
+ Pt = y;
+ }
+ Pb = y;
+ }
+ }
+ pBox->paper = paper;
+ pBox->Top = Pt;
+ pBox->Bottom = Pb;
+ pBox->Left = Pl;
+ pBox->Right = Pr;
+ gs_free(pDev->memory->non_gc_memory, Buf, 1, LineSize, "LineBuffer");
+}
+
+static long
+CompressImage(gx_device_printer *pDev, struct bounding *pBox, gp_file *fp, const char *format)
+{
+ int x, y, i, count = 255;
+ int Xres = (int)pDev->x_pixels_per_inch;
+ int LineSize = gdev_mem_bytes_per_scan_line((gx_device *)pDev);
+ byte *Buf, oBuf[128], c_prev = 0, c_cur, c_tmp;
+ long DataSize = 0;
+
+ /* ----==== Printer initialize ====---- */
+ /* ----==== start TEXT mode ====---- */
+ gp_fprintf(fp, "\x1b%%@");
+ /* ----==== job start ====---- */
+ gp_fprintf(fp, "\x1bP35;%d;1J;GhostScript\x1b\\", Xres);
+ /* ----==== soft reset ====---- */
+ gp_fprintf(fp, "\x1b<");
+ /* ----==== select size as dot ====---- */
+ gp_fprintf(fp, "\x1b[7 I");
+ /* ----==== ??? ====---- */
+ gp_fprintf(fp, "\x1b[;1;'v");
+ /* ----==== set paper size ====---- */
+ gp_fprintf(fp, "\x1b[%d;;p", PaperInfo[pBox->paper].id);
+ /* ----==== select sheet feeder ====---- */
+ gp_fprintf(fp, "\x1b[1q");
+ /* ----==== disable automatic FF ====---- */
+ gp_fprintf(fp, "\x1b[?2h");
+ /* ----==== set number of copies ====---- */
+ gp_fprintf(fp, "\x1b[%dv", 1);
+ /* ----==== move CAP location ====---- */
+ gp_fprintf(fp, "\x1b[%d;%df", pBox->Top, pBox->Left*16);
+ /* ----==== draw raster image ====---- */
+ gp_fprintf(fp, format, pBox->Right-pBox->Left+1,
+ Xres, pBox->Bottom-pBox->Top+1);
+
+ /* ----==== Allocate momory ====---- */
+ Buf = (byte *)gs_malloc(pDev->memory->non_gc_memory, 1, LineSize, "LineBuffer");
+ /* ----==== transfer raster image ====---- */
+ for (y=pBox->Top ; y<=pBox->Bottom ; y++) {
+ gdev_prn_copy_scan_lines(pDev, y, Buf, LineSize);
+ for (x=pBox->Left*2 ; x<=pBox->Right*2+1 ; x++) {
+ /* ----==== check pointer & Reverse bit order ====---- */
+ c_cur = 0;
+ if (x<LineSize) {
+ c_tmp = *(Buf+x);
+ for (i=0 ; i<8 ; i++) {
+ c_cur = (c_cur << 1) | (c_tmp & 1);
+ c_tmp = c_tmp >> 1;
+ }
+ }
+ /* ----==== Compress data ====---- */
+ if (count < 0) {
+ if (c_prev == c_cur && count > -127) {
+ count--;
+ continue;
+ } else {
+ gp_fprintf(fp, "%c%c", count, c_prev);
+ DataSize += 2;
+ }
+ } else if (count == 0) {
+ if (c_prev == c_cur) {
+ count--;
+ } else {
+ count++;
+ c_prev = *(oBuf+count) = c_cur;
+ }
+ continue;
+ } else if (count < 127) {
+ if (c_prev == c_cur) {
+ gp_fprintf(fp, "%c", count-1);
+ gp_fwrite(oBuf, 1, count, fp);
+ DataSize += (count+1);
+ count = -1;
+ } else {
+ count++;
+ c_prev = *(oBuf+count) = c_cur;
+ }
+ continue;
+ } else if (count == 127) {
+ gp_fprintf(fp, "%c", count);
+ gp_fwrite(oBuf, 1, count+1, fp);
+ DataSize += (count+2);
+ }
+ c_prev = *oBuf = c_cur;
+ count = 0;
+ }
+ }
+
+ /* ----==== flush data ====---- */
+ if (count < 0) {
+ gp_fprintf(fp, "%c%c", count, c_prev);
+ DataSize += 2;
+ } else {
+ gp_fprintf(fp, "%c", count);
+ gp_fwrite(oBuf, 1, count+1, fp);
+ DataSize += (count+2);
+ }
+
+ gs_free(pDev->memory->non_gc_memory, Buf, 1, LineSize, "LineBuffer");
+ return(DataSize);
+}
diff --git a/contrib/japanese/gdevmjc.c b/contrib/japanese/gdevmjc.c
new file mode 100644
index 00000000..85fa6a8a
--- /dev/null
+++ b/contrib/japanese/gdevmjc.c
@@ -0,0 +1,1848 @@
+/* Copyright (C) 1991, 1992, 1993 Aladdin Enterprises. All rights reserved.
+
+This file is part of Ghostscript.
+
+Ghostscript is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+to anyone for the consequences of using it or for whether it serves any
+particular purpose or works at all, unless he says so in writing. Refer
+to the Ghostscript General Public License for full details.
+
+Everyone is granted permission to copy, modify and redistribute
+Ghostscript, but only under the conditions described in the Ghostscript
+General Public License. A copy of this license is supposed to have been
+given to you along with Ghostscript so you can know your rights and
+responsibilities. It should be in a file named COPYING. Among other
+things, the copyright notice and this notice must be preserved on all
+copies. */
+
+/* gdevmjc.c */
+/* Many parts of this file are copied from gdevcdj.c and gdevescp.c */
+
+/* EPSON MJ-700V2C colour printer drivers for Ghostscript */
+
+/*
+ These drivers may also work with EPSON Stylus color printer,
+ though the author hasn't tried.
+*/
+
+/*
+ Any comments, suggestions, and bug reports are welcomed.
+ The e-mail address of the author Kubo, Hiroshi is
+
+ h-kubo@kuee.kyoto-u.ac.jp
+
+ or
+
+ JBD02172@niftyserve.or.jp
+
+*/
+
+/*
+
+ Modified by Norihito Ohmori.
+ Support -r / -dBitsPerPixel option.
+ Change -dMicroweave / -dUnidirectional option.
+
+ */
+
+#include "std.h" /* to stop stdlib.h redefining types */
+#include <stdlib.h> /* for rand() */
+#include <limits.h>
+#include "gdevprn.h"
+#include "gdevpcl.h"
+#include "gdevmjc.h"
+
+/***
+ *** Note: Original driver gdevcdj.c for HP color printer was written
+ *** by a user, George Cameron.
+ ***
+ *** An idea of Kuniyoshi Yoshio to borrow the codes of gdevcdj.c
+ *** for another color printer BJC-600J inspired the author.
+ ***
+ *** Basic control sequences and compression algorithm for ESC/P
+ *** V2 printer are taken from gdevescp.c, written by Richard Brown.
+ ***
+ *** The author Kubo, Hiroshi gathered necessary codes for EPSON
+ *** MJ-700V2C and Sylus color printer in gdevmjc.c.
+ ***/
+
+/*
+ available drivers
+
+ 1. mj700v2c EPSON Mach Jet Color, for ALL CMYK printer
+
+ 2. mj500c EPSON Mach Jet Color,
+ CMY or K printer: MJ-500C, MJ-510C,
+ CMY + K printer: MJ-800C (for plane paper),
+ MJ-3000C (for plane paper)
+ 3. mj6000c EPSON MJ-830C, MJ-930C, MJ-6000C
+ Use "High Performance Monochrome Mode"
+ 4. mj8000c EPSON MJ-8000C
+ Use "High Performance Monochrome Mode"
+ A2 Paper Size Margin is different from mj6000c
+*/
+
+/*
+ ** Options **
+ *
+ name type description
+
+ Density int Controls densty of dots. 1024 is normal setting
+ for 360dpi.
+ Cyan int Controls depth of Cyan. 1024 is normal setting.
+ Magenta int Controls depth of Magenta. 1024 is normal setting.
+ Yellow int Controls depth of Yellow. 1024 is normal setting.
+ Black int Controls depth of Black. 1024 is normal setting.
+ Unidirectional bool if true, Force unidirectional printing.
+ Microweave bool if true, set micro weave mode.
+ DotSize int Controls the size of the dots. 0 means default,
+ 1 means small, 2 means normal.
+
+ ** Examples **
+
+ % gs -sDEVICE=mj700v2c -sOutputFile=tiger.mj gdevmjc.ps tiger.ps
+
+ % gs -sDEVICE=mj700v2c -dDensity=1152 -dCyan=1000 -dMagenta=896 \
+ -dYellow=1024 -dBlack=512 -dUnidirectional -sOutputFile=tiger.mj \
+ gdevmjc.ps tiger.ps
+
+ */
+
+#define MJ700V2C_PRINT_LIMIT 0.34 /* taken from gdevescp.c */
+
+/* Margins are left, bottom, right, top. */
+/* left bottom right top */
+#define MJ700V2C_MARGINS_A4 0.118, 0.52, 0.118, 0.33465
+#define MJ6000C_MARGINS_A2 0.948, 0.52, 1.969, 0.33465
+#define MJ8000C_MARGINS_A2 0.194, 0.52, 0.194, 0.33465
+
+/* Define bits-per-pixel for generic drivers - default is 24-bit mode */
+#ifndef BITSPERPIXEL
+#define BITSPERPIXEL 32
+#endif
+
+#define W sizeof(word)
+#define I sizeof(int)
+
+/* Printer types */
+#define MJ700V2C 1
+#define MJ500C 2
+#define MJ6000C 3
+#define MJ8000C 4
+
+/* No. of ink jets (used to minimise head movements) */
+#define HEAD_ROWS_MONO 50
+#define HEAD_ROWS_COLOUR 16
+/* only for mj700v2c */
+#define MJ_HEAD_ROWS_MONO 64
+#define MJ_HEAD_ROWS_COLOUR 16
+
+/* Colour mapping procedures */
+static dev_proc_map_rgb_color (gdev_mjc_map_rgb_color);
+static dev_proc_map_color_rgb (gdev_mjc_map_color_rgb);
+static dev_proc_encode_color(gdev_mjc_encode_color);
+static dev_proc_decode_color(gdev_mjc_decode_color);
+
+/* Print-page, properties and miscellaneous procedures */
+static dev_proc_open_device(mj700v2c_open);
+static dev_proc_open_device(mj500c_open);
+static dev_proc_open_device(mj6000c_open);
+static dev_proc_open_device(mj8000c_open);
+static dev_proc_print_page(mj700v2c_print_page);
+static dev_proc_print_page(mj500c_print_page);
+static dev_proc_print_page(mj6000c_print_page);
+static dev_proc_print_page(mj8000c_print_page);
+
+static dev_proc_get_params(mj_get_params);
+static dev_proc_put_params(mj700v2c_put_params);
+static dev_proc_put_params(mj500c_put_params);
+
+static int mj_open(gx_device * pdev, int ptype);
+static int mj_put_params(gx_device * pdev, gs_param_list * plist, int ptype);
+static int mj_print_page(gx_device_printer * pdev, gp_file * prn_stream, int ptype);
+static void expand_line(word *, int, int, int);
+static int put_param_int(gs_param_list *, gs_param_name, int *, int, int, int);
+static void set_bpp(gx_device *, int);
+static void mj500c_set_bpp(gx_device *, int);
+static gx_color_index mjc_correct_color(gx_device_printer *, gx_color_index);
+
+/* The device descriptors */
+struct gx_device_mj_s {
+ gx_device_common;
+ gx_prn_device_common;
+ int colorcomp; /* 1: grayscale 3: CMY 4: CMYK */
+ int density; /* (color depth) * density/1024 = otuput */
+ int cyan; /* weight for cyan */
+ int magenta; /* weight for magenta */
+ int yellow; /* weight for yellow */
+ int black; /* weight for black */
+ bool direction; /* direction of the head. 1: one way 2: both way */
+ bool microweave; /* Micro weave switch. 0: off 1: on */
+ int dotsize; /* dot size switch.
+ 0: default, 1: small, 2: normal */
+};
+
+typedef struct gx_device_mj_s gx_device_mj;
+
+#define mj ((gx_device_mj *) pdev)
+
+#define prn_hp_colour_device(procs, dev_name, x_dpi, y_dpi, bpp, print_page)\
+ prn_device_body(gx_device_mj, procs, dev_name,\
+ DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS, x_dpi, y_dpi,\
+ 0.118, 0.52, 0.118, 0.33465,\
+ (bpp == 32 ? 4 : (bpp == 1 || bpp == 8) ? 1 : 3), bpp,\
+ (bpp >= 8 ? 255 : 1), (bpp >= 8 ? 255 : bpp > 1 ? 1 : 0),\
+ (bpp >= 8 ? 5 : 2), (bpp >= 8 ? 5 : bpp > 1 ? 2 : 0),\
+ print_page)
+
+#define mjcmyk_device(procs, dev_name, x_dpi, y_dpi, bpp, print_page,\
+ dns, r, g, b, k, drct, mcrwv, dtsz)\
+{ prn_hp_colour_device(procs, dev_name, x_dpi, y_dpi, bpp, print_page),\
+ (bpp == 32 ? 4 : 1), dns, r, g, b, k, drct, mcrwv, dtsz \
+}
+
+#define mjcmy_device(procs, dev_name, x_dpi, y_dpi, bpp, print_page,\
+ dns, r, g, b, k, drct, mcrwv, dtsz)\
+{ prn_hp_colour_device(procs, dev_name, x_dpi, y_dpi, bpp, print_page),\
+ (bpp == 32 ? 3 : 1), dns, r, g, b, k, drct, mcrwv, dtsz \
+}
+
+#define mj_colour_procs(proc_colour_open, proc_get_params, proc_put_params)\
+{ proc_colour_open,\
+ gx_default_get_initial_matrix,\
+ gx_default_sync_output,\
+ gdev_prn_output_page,\
+ gdev_prn_close,\
+ gdev_mjc_map_rgb_color,\
+ gdev_mjc_map_color_rgb,\
+ NULL, /* fill_rectangle */\
+ NULL, /* tile_rectangle */\
+ NULL, /* copy_mono */\
+ NULL, /* copy_color */\
+ NULL, /* draw_line */\
+ gx_default_get_bits,\
+ proc_get_params,\
+ proc_put_params,\
+ NULL, /* map_cmyk_color */\
+ NULL, /* get_xfont_procs */\
+ NULL, /* get_xfont_device */\
+ NULL, /* map_rgb_alpha_color */\
+ NULL, /* get_page_device */\
+ NULL, /* get_alpha_bits */\
+ NULL, /* copy_alpha */\
+ NULL, /* get_band */\
+ NULL, /* copy_rop */\
+ NULL, /* fill_path */\
+ NULL, /* stroke_path */\
+ NULL, /* fill_mask */\
+ NULL, /* fill_trapezoid */\
+ NULL, /* fill_parallelogram */\
+ NULL, /* fill_triangle */\
+ NULL, /* draw_thin_line */\
+ NULL, /* begin_image */\
+ NULL, /* image_data */\
+ NULL, /* end_image */\
+ NULL, /* strip_tile_rectangle */\
+ NULL, /* strip_copy_rop, */\
+ NULL, /* get_clipping_box */\
+ NULL, /* begin_typed_image */\
+ NULL, /* get_bits_rectangle */\
+ NULL, /* map_color_rgb_alpha */\
+ NULL, /* create_compositor */\
+ NULL, /* get_hardware_params */\
+ NULL, /* text_begin */\
+ NULL, /* finish_copydevice */\
+ NULL, /* begin_transparency_group */\
+ NULL, /* end_transparency_group */\
+ NULL, /* begin_transparency_mask */\
+ NULL, /* end_transparency_mask */\
+ NULL, /* discard_transparency_layer */\
+ NULL, /* get_color_mapping_procs */\
+ NULL, /* get_color_comp_index */\
+ gdev_mjc_encode_color,\
+ gdev_mjc_decode_color\
+}
+
+static gx_device_procs mj700v2c_procs =
+mj_colour_procs(mj700v2c_open, mj_get_params, mj700v2c_put_params);
+
+static gx_device_procs mj500c_procs =
+mj_colour_procs(mj500c_open, mj_get_params, mj500c_put_params);
+
+static gx_device_procs mj6000c_procs =
+mj_colour_procs(mj6000c_open, mj_get_params, mj700v2c_put_params);
+
+static gx_device_procs mj8000c_procs =
+mj_colour_procs(mj8000c_open, mj_get_params, mj700v2c_put_params);
+
+gx_device_mj far_data gs_mj700v2c_device =
+mjcmyk_device(mj700v2c_procs, "mj700v2c", 360, 360, BITSPERPIXEL,
+ mj700v2c_print_page, 1024, 1024, 1024, 1024, 1024, 0, 1, 1);
+
+gx_device_mj far_data gs_mj500c_device =
+mjcmy_device(mj500c_procs, "mj500c", 360, 360, BITSPERPIXEL,
+ mj500c_print_page, 1024, 1024, 1024, 1024, 1024, 0, 1, 1);
+
+gx_device_mj far_data gs_mj6000c_device =
+mjcmyk_device(mj6000c_procs, "mj6000c", 360, 360, BITSPERPIXEL,
+ mj6000c_print_page, 1024, 1024, 1024, 1024, 1024, 0, 1, 1);
+
+gx_device_mj far_data gs_mj8000c_device =
+mjcmyk_device(mj8000c_procs, "mj8000c", 360, 360, BITSPERPIXEL,
+ mj8000c_print_page, 1024, 1024, 1024, 1024, 1024, 0, 1, 1);
+
+/* Get the paper size code, based on width and height. */
+static int
+gdev_mjc_paper_size(gx_device *dev)
+{
+ int width = dev->MediaSize[0];
+ int height = dev->MediaSize[1];
+
+ if (width == 1190 && height == 1684)
+ return PAPER_SIZE_A2;
+ else
+ return PAPER_SIZE_A4;
+}
+
+static int
+mj700v2c_open(gx_device * pdev)
+{
+ return mj_open(pdev, MJ700V2C);
+}
+
+static int
+mj500c_open(gx_device * pdev)
+{
+ return mj_open(pdev, MJ700V2C);
+}
+
+static int
+mj6000c_open(gx_device * pdev)
+{
+ return mj_open(pdev, MJ700V2C);
+}
+
+static int
+mj8000c_open(gx_device * pdev)
+{
+ return mj_open(pdev, MJ700V2C);
+}
+
+/* Open the printer and set up the margins. */
+static int
+mj_open(gx_device *pdev, int ptype)
+{ /* Change the margins if necessary. */
+ int xdpi = pdev->x_pixels_per_inch;
+ int ydpi = pdev->y_pixels_per_inch;
+
+ static const float mj_margin[4] = { MJ700V2C_MARGINS_A4 };
+ static const float mj6000c_a2[4] = { MJ6000C_MARGINS_A2 };
+ static const float mj8000c_a2[4] = { MJ8000C_MARGINS_A2 };
+
+ const float *m;
+
+ int paper_size;
+
+#if 0
+ /* Set up colour params if put_props has not already done so */
+ if (pdev->color_info.num_components == 0)
+ set_bpp(pdev, pdev->color_info.depth);
+#endif
+
+ paper_size = gdev_mjc_paper_size(pdev);
+ if (paper_size == PAPER_SIZE_A2 ) {
+ if (ptype == MJ6000C)
+ m = mj6000c_a2;
+ else if (ptype == MJ8000C)
+ m = mj8000c_a2;
+ else
+ m = mj_margin;
+ } else {
+ m = mj_margin;
+ }
+
+ gx_device_set_margins(pdev, m, true);
+
+ if (mj->colorcomp == 3)
+ mj->density = mj->density * 720 / ydpi * 1.5;
+ else
+ mj->density = mj->density * 720 / ydpi;
+
+ /* Print Resolution Check */
+ if (!((xdpi == 180 && ydpi == 180) ||
+ (xdpi == 360 && ydpi == 360) ||
+ (xdpi == 720 && ydpi == 720) ||
+ (xdpi == 360 && ydpi == 720) ||
+ (xdpi == 720 && ydpi == 360)))
+ return_error(gs_error_rangecheck);
+
+ return gdev_prn_open(pdev);
+}
+
+/* Get properties. In addition to the standard and printer
+ * properties, we supply shingling and depletion parameters,
+ * and control over the bits-per-pixel used in output rendering */
+/* Added properties for DeskJet 5xxC */
+
+static int
+mj_get_params(gx_device *pdev, gs_param_list *plist)
+{
+ int code = gdev_prn_get_params(pdev, plist);
+
+ if ( code < 0 ||
+ (code = param_write_int(plist, "Density", &mj->density)) < 0 ||
+ (code = param_write_int(plist, "Cyan", &mj->cyan)) < 0 ||
+ (code = param_write_int(plist, "Magenta", &mj->magenta)) < 0 ||
+ (code = param_write_int(plist, "Yellow", &mj->yellow)) < 0 ||
+ (code = param_write_int(plist, "Black", &mj->black)) < 0 ||
+ (code = param_write_bool(plist, "Unidirectional", &mj->direction)) < 0 ||
+ (code = param_write_bool(plist, "Microweave", &mj->microweave)) < 0 ||
+ (code = param_write_int(plist, "DotSize", &mj->dotsize)) < 0
+ )
+ return code;
+
+ return code;
+}
+
+/* Put properties. */
+static int
+mj700v2c_put_params(gx_device *pdev, gs_param_list *plist)
+{
+ return mj_put_params(pdev, plist, MJ700V2C);
+}
+
+static int
+mj500c_put_params(gx_device *pdev, gs_param_list *plist)
+{
+ return mj_put_params(pdev, plist, MJ500C);
+}
+
+static int
+mj_put_params(gx_device *pdev, gs_param_list *plist, int ptype)
+{
+ int old_bpp = mj->color_info.depth;
+ int bpp = 0;
+ int code = 0;
+ int density = mj->density;
+ int cyan = mj->cyan;
+ int magenta = mj->magenta;
+ int yellow = mj->yellow;
+ int black = mj->black;
+ bool direction = mj->direction;
+ bool microweave = mj->microweave;
+ int dotsize = mj->dotsize;
+ gs_param_name param_name;
+ int ecode = 0;
+
+ code = put_param_int(plist, "Density", &density, 0, INT_MAX, code);
+ code = put_param_int(plist, "Cyan", &cyan, 0, INT_MAX, code);
+ code = put_param_int(plist, "Magenta", &magenta, 0, INT_MAX, code);
+ code = put_param_int(plist, "Yellow", &yellow, 0, INT_MAX, code);
+ code = put_param_int(plist, "Black", &black, 0, INT_MAX, code);
+
+ if ((code = param_read_bool(plist,
+ (param_name = "Unidirectional"),
+ &direction))< 0) {
+ param_signal_error(plist, param_name, ecode = code);
+ }
+
+ if ((code = param_read_bool(plist,
+ (param_name = "Microweave"),
+ &microweave))< 0) {
+ param_signal_error(plist, param_name, ecode = code);
+ }
+ if (ecode < 0)
+ return code;
+
+ if (microweave && pdev->x_pixels_per_inch == 180)
+ return_error(gs_error_rangecheck);
+
+ code = put_param_int(plist, "DotSize", &dotsize, 0, 1, code);
+ code = put_param_int(plist, "BitsPerPixel", &bpp, 1, 32, code);
+
+ if ( code < 0 )
+ return code;
+
+ mj->density = density;
+ mj->cyan = cyan;
+ mj->magenta = magenta;
+ mj->yellow = yellow;
+ mj->black = black;
+ mj->direction = direction;
+ mj->microweave = microweave;
+ mj->dotsize = dotsize;
+
+ if ( bpp != 0 ) {
+ if (bpp != 8 && bpp != 32)
+ return_error(gs_error_rangecheck);
+
+ if (ptype == MJ500C)
+ mj500c_set_bpp(pdev, bpp);
+ else
+ set_bpp(pdev, bpp);
+ gdev_prn_put_params(pdev, plist);
+ if ( bpp != old_bpp && pdev->is_open )
+ return gs_closedevice(pdev);
+ return 0;
+ }
+ else
+ return gdev_prn_put_params(pdev, plist);
+}
+
+/* ------ Internal routines ------ */
+/* MACROS FOR DITHERING (we use macros for compact source and faster code) */
+/* Floyd-Steinberg dithering. Often results in a dramatic improvement in
+ * subjective image quality, but can also produce dramatic increases in
+ * amount of printer data generated and actual printing time!! Mode 9 2D
+ * compression is still useful for fairly flat colour or blank areas but its
+ * compression is much less effective in areas where the dithering has
+ * effectively randomised the dot distribution. */
+
+#define SHIFT (I * I)
+#define MINVALUE 0
+#define MAXVALUE ((256 << SHIFT) - 1)
+#define THRESHOLD (128 << SHIFT)
+
+#define FSditherI(inP, out, errP, Err, Bit, Offset)\
+ oldErr = Err;\
+ Err = (*errP + ((Err * 7) >> 4) + (*inP++ << SHIFT));\
+ if (Err > MAXVALUE) Err = MAXVALUE;\
+ else if (Err < MINVALUE) Err = MINVALUE;\
+ if (Err > THRESHOLD) {\
+ out |= Bit;\
+ Err -= MAXVALUE;\
+ }\
+ errP[Offset] += ((Err * 3) >> 4);\
+ *errP++ = ((Err * 5 + oldErr) >> 4);
+
+#define FSditherD(inP, out, errP, Err, Bit, Offset)\
+ oldErr = Err;\
+ Err = (*--errP + ((Err * 7) >> 4) + (*--inP << SHIFT));\
+ if (Err > MAXVALUE) Err = MAXVALUE;\
+ else if (Err < MINVALUE) Err = MINVALUE;\
+ if (Err > THRESHOLD) {\
+ out |= Bit;\
+ Err -= MAXVALUE;\
+ }\
+ errP[Offset] += ((Err * 3) >> 4);\
+ *errP = ((Err * 5 + oldErr) >> 4);
+
+#define MATRIX_I(inP, out, Bit, Offset)\
+ if ((*inP++ << 6) > Offset) {\
+ out |= Bit;\
+ }
+
+#define MATRIX_D(inP, out, Bit, Offset)\
+ if ((*--inP << 6) > Offset) {\
+ out |= Bit;\
+ }
+
+/* Here we rely on compiler optimisation to remove lines of the form
+ * (if (1 >= 4) {...}, ie. the constant boolean expressions */
+
+#define FSDline(scan, i, j, plane_size, cErr, mErr, yErr, kErr, cP, mP, yP, kP, n)\
+{\
+ unsigned short *mat = matrix2 + (lnum & 127)*128;\
+ int x;\
+ (void)cErr; /* Stop compiler warning */\
+ if (scan == 0) { /* going_up */\
+ x = 0;\
+ for (i = 0; i < plane_size; i++) {\
+ byte c, y, m, k, bitmask;\
+ int val;\
+ bitmask = 0x80;\
+ for (c = m = y = k = j = 0; j < 8; j++) {\
+ val = *(mat + (x++ & 127));\
+ if (n >= 4)\
+ {\
+ MATRIX_I(dp, k, bitmask, val);\
+ }\
+ if (n >= 3)\
+ { MATRIX_I(dp, c, bitmask, val);\
+ MATRIX_I(dp, m, bitmask, val);\
+ }\
+ MATRIX_I(dp, y, bitmask, val);\
+ bitmask >>= 1;\
+ }\
+ if (n >= 4)\
+ *kP++ = k;\
+ if (n >= 3)\
+ { *cP++ = c;\
+ *mP++ = m;\
+ }\
+ *yP++ = y;\
+ }\
+ } else { /* going_down */\
+ x = plane_size*8;\
+ for (i = 0; i < plane_size; i++) {\
+ byte c, y, m, k, bitmask;\
+ int val;\
+ bitmask = 0x01;\
+ for (c = m = y = k = j = 0; j < 8; j++) {\
+ val = *(mat + (--x & 127));\
+ MATRIX_D(dp, y, bitmask, val);\
+ if (n >= 3)\
+ { MATRIX_D(dp, m, bitmask, val);\
+ MATRIX_D(dp, c, bitmask, val);\
+ }\
+ if (n >= 4)\
+ { MATRIX_D(dp, k, bitmask, val);\
+ }\
+ bitmask <<= 1;\
+ }\
+ *--yP = y;\
+ if (n >= 3)\
+ { *--mP = m;\
+ *--cP = c;\
+ }\
+ if (n >= 4)\
+ *--kP = k;\
+ }\
+ }\
+}
+/* END MACROS FOR DITHERING */
+
+/* Some convenient shorthand .. */
+#define x_dpi (pdev->x_pixels_per_inch)
+#define y_dpi (pdev->y_pixels_per_inch)
+#define CONFIG_16BIT "\033*v6W\000\003\000\005\006\005"
+#define CONFIG_24BIT "\033*v6W\000\003\000\010\010\010"
+
+/* To calculate buffer size as next greater multiple of both parameter and W */
+#define calc_buffsize(a, b) (((((a) + ((b) * W) - 1) / ((b) * W))) * W)
+
+/*
+ * Miscellaneous functions for Canon BJC-600J printers in raster command mode.
+ */
+#define fputshort(n, f) gp_fputc((n)%256,f);gp_fputc((n)/256,f)
+
+#define row_bytes (img_rows / 8)
+#define row_words (row_bytes / sizeof(word))
+#define min_rows (32) /* for optimization of text image printing */
+
+static int
+mj_raster_cmd(int c_id, int in_size, byte* in, byte* buf2,
+ gx_device_printer* pdev, gp_file* prn_stream)
+{
+ int band_size = 1; /* 1, 8, or 24 */
+
+ byte *out = buf2;
+
+ int width = in_size;
+ int count;
+
+ byte* in_end = in + in_size;
+
+ static char colour_number[] = "\004\001\002\000"; /* color ID for MJ700V2C */
+
+ byte *inp = in;
+ byte *outp = out;
+ register byte *p, *q;
+
+ /* specifying a colour */
+
+ gp_fputs("\033r",prn_stream); /* secape sequence to specify a color */
+ gp_fputc(colour_number[c_id], prn_stream);
+
+ /* end of specifying a colour */
+
+ /* Following codes for compression are borrowed from gdevescp.c */
+
+ for( p = inp, q = inp + 1 ; q < in_end ; ) {
+
+ if( *p != *q ) {
+ p += 2;
+ q += 2;
+ } else {
+
+ /*
+ ** Check behind us, just in case:
+ */
+
+ if( p > inp && *p == *(p-1) )
+ p--;
+
+ /*
+ ** walk forward, looking for matches:
+ */
+
+ for( q++ ; *q == *p && q < in_end ; q++ ) {
+ if( (q-p) >= 128 ) {
+ if( p > inp ) {
+ count = p - inp;
+ while( count > 128 ) {
+ *outp++ = '\177';
+ memcpy(outp, inp, 128); /* data */
+ inp += 128;
+ outp += 128;
+ count -= 128;
+ }
+ *outp++ = (char) (count - 1); /* count */
+ memcpy(outp, inp, count); /* data */
+ outp += count;
+ }
+ *outp++ = '\201'; /* Repeat 128 times */
+ *outp++ = *p;
+ p += 128;
+ inp = p;
+ }
+ }
+
+ if( (q - p) > 2 ) { /* output this sequence */
+ if( p > inp ) {
+ count = p - inp;
+ while( count > 128 ) {
+ *outp++ = '\177';
+ memcpy(outp, inp, 128); /* data */
+ inp += 128;
+ outp += 128;
+ count -= 128;
+ }
+ *outp++ = (char) (count - 1); /* byte count */
+ memcpy(outp, inp, count); /* data */
+ outp += count;
+ }
+ count = q - p;
+ *outp++ = (char) (256 - count + 1);
+ *outp++ = *p;
+ p += count;
+ inp = p;
+ } else /* add to non-repeating data list */
+ p = q;
+ if( q < in_end )
+ q++;
+ }
+ }
+
+ /*
+ ** copy remaining part of line:
+ */
+
+ if( inp < in_end ) {
+
+ count = in_end - inp;
+
+ /*
+ ** If we've had a long run of varying data followed by a
+ ** sequence of repeated data and then hit the end of line,
+ ** it's possible to get data counts > 128.
+ */
+
+ while( count > 128 ) {
+ *outp++ = '\177';
+ memcpy(outp, inp, 128); /* data */
+ inp += 128;
+ outp += 128;
+ count -= 128;
+ }
+
+ *outp++ = (char) (count - 1); /* byte count */
+ memcpy(outp, inp, count); /* data */
+ outp += count;
+ }
+ /*
+ ** Output data:
+ */
+
+ gp_fwrite("\033.\001", 1, 3, prn_stream);
+
+ if(pdev->y_pixels_per_inch == 720)
+ gp_fputc('\005', prn_stream);
+ else if(pdev->y_pixels_per_inch == 180)
+ gp_fputc('\024', prn_stream);
+ else /* pdev->y_pixels_per_inch == 360 */
+ gp_fputc('\012', prn_stream);
+
+ if(pdev->x_pixels_per_inch == 720)
+ gp_fputc('\005', prn_stream);
+ else if(pdev->x_pixels_per_inch == 180)
+ gp_fputc('\024', prn_stream);
+ else /* pdev->x_pixels_per_inch == 360 */
+ gp_fputc('\012', prn_stream);
+
+ gp_fputc(band_size, prn_stream);
+
+ gp_fputc((width << 3) & 0xff, prn_stream);
+ gp_fputc( width >> 5, prn_stream);
+
+ gp_fwrite(out, 1, (outp - out), prn_stream);
+
+ gp_fputc('\r', prn_stream);
+
+ return 0;
+}
+
+static int
+mj_v_skip(int n, gx_device_printer *pdev, gp_file *stream)
+{
+ /* This is a kind of magic number. */
+ static const int max_y_step = (256 * 15 + 255);
+
+ int l = n - max_y_step;
+ for (; l > 0; l -= max_y_step) { /* move 256 * 15 + 255 dots at once*/
+ gp_fwrite("\033(v\2\0\xff\x0f", sizeof(byte), 7, stream);
+ }
+ l += max_y_step;
+ /* move to the end. */
+ {
+ int n2 = l / 256;
+ int n1 = l - n2 * 256;
+ gp_fwrite("\033(v\2\0", sizeof(byte) ,5 ,stream);
+ gp_fputc(n1, stream);
+ gp_fputc(n2, stream);
+ gp_fputc('\r', stream);
+ }
+ return 0;
+}
+
+/* NOZ */
+
+static void
+bld_barrier( short **bar , int x )
+{
+ int i , j;
+
+ short t;
+ short *p;
+ short *b;
+ short *dat = barrier_dat + 1;
+
+ p = *bar++ + x + 1;
+
+ for ( i = 0 ; i < 11 ; i++ ) {
+ t = *dat++;
+ if (*p < t )
+ *p = t;
+ p++;
+ }
+
+ for ( j = 0 ; j < 11 ; j++ ) {
+ p = *bar++ + x;
+ b = p;
+
+ t = *dat++;
+ if (*p < t )
+ *p = t;
+ p++;
+ for ( i = 0 ; i < 11 ; i++ ) {
+ t = *dat++;
+ if (*p < t )
+ *p = t;
+ p++;
+
+ if (*(--b) < t )
+ *b = t;
+ }
+ }
+}
+
+static void
+DifSubK( int d0 , short *a4 , short *a5 )
+{
+/*
+ +---+---+---+
+ | | X |1/2|
+ +---+---+---+
+ |1/4|1/8|1/8|
+ +---+---+---+
+*/
+ *a4++ = 0;
+ d0 >>= 1;
+ *a4 += d0;
+ d0 >>= 1;
+ *(a5-1) += d0;
+ d0 >>= 1;
+ *a5++ += d0;
+ *a5 += d0;
+}
+
+/* a4.w , a5.w , */
+static byte
+Xtal( byte bitmask , short d0 , int x , short **bar , short *b1 , short *b2 )
+{
+ short *a2;
+
+ if (d0 != 0)
+ d0 += *b1;
+
+ a2 = *bar + x;
+
+/*dprintf1("[%02X]",*a2);*/
+ if (*a2 < d0) {
+ d0 -= 16400;
+ if (-4096 >= d0) {
+ DifSubK( d0 , b1 , b2 );
+ bld_barrier( bar , x );
+ } else {
+ DifSubK( d0 , b1 , b2 );
+ }
+ return( bitmask );
+ } else {
+ if (d0 > 56)
+ d0 -= 56;
+ DifSubK( d0 , b1 , b2 );
+ return( 0 );
+ }
+}
+
+static void
+xtal_plane( byte *dp , short *buf[] , byte *oP , short **bar , int plane_size , int xtalbuff_size )
+{
+ int i;
+ int j;
+ int x = 0;
+ byte bitmask;
+ byte out;
+ short *p;
+ short *b1 , *b2;
+
+ b1 = buf[0];
+ b2 = buf[1];
+/*
+ for ( i = 0 ; i < 100 ; i++ ) {
+ dprintf1("[%04X]",bar[0][i]);
+ }
+ dprintf("\n");
+*/
+ for ( i = 0 ; i < plane_size ; i++ ) {
+ bitmask = 0x80;
+ out = 0;
+ for ( j = 0 ; j < 8 ; j++ ) {
+ out |= Xtal( bitmask , (short)(*dp) << 6 , x++ , bar , b1++ , b2++ );
+ dp += 4;
+ bitmask >>= 1;
+ }
+ *oP++ = out;
+ }
+/*dprintf("\n");*/
+ p = buf[0];
+/* dprintf("\n"); */
+ buf[0] = buf[1];
+ buf[1] = p;
+
+ p = bar[0];
+ for ( i = 0 ; i < plane_size*8 ; i++ )
+ *p++ = 0;
+
+ /* memset( p, 0, (xtalbuff_size-16) * W);*/
+ p = bar[0];
+ for ( i = 0 ; i <= 14 ; i++ )
+ bar[i] = bar[i+1];
+ bar[15] = p;
+}
+
+static int
+mj700v2c_print_page(gx_device_printer * pdev, gp_file * prn_stream)
+{
+ return mj_print_page(pdev, prn_stream, MJ700V2C);
+}
+
+static int
+mj500c_print_page(gx_device_printer * pdev, gp_file * prn_stream)
+{
+ return mj_print_page(pdev, prn_stream, MJ500C);
+}
+
+static int
+mj6000c_print_page(gx_device_printer * pdev, gp_file * prn_stream)
+{
+ return mj_print_page(pdev, prn_stream, MJ6000C);
+}
+
+static int
+mj8000c_print_page(gx_device_printer * pdev, gp_file * prn_stream)
+{
+ return mj_print_page(pdev, prn_stream, MJ8000C);
+}
+
+/* Send the page to the printer. Compress each scan line. */
+static int
+mj_print_page(gx_device_printer * pdev, gp_file * prn_stream, int ptype)
+{
+/* int line_size = gdev_prn_rasterwidth(pdev, 0); */
+ int line_size = gdev_prn_raster(pdev);
+ int line_size_words = (line_size + W - 1) / W;
+ int num_comps = pdev->color_info.num_components;
+ int bits_per_pixel = pdev->color_info.depth;
+ int storage_bpp = bits_per_pixel;
+ int expanded_bpp = bits_per_pixel;
+ int plane_size, databuff_size;
+ int errbuff_size = 0;
+ int outbuff_size = 0;
+ int scan = 0;
+ int *errors[2];
+ byte *data[4], *plane_data[4][4], *out_data;
+ byte *out_row;
+ word *storage;
+ uint storage_size_words;
+ uint mj_tmp_buf_size;
+ byte* mj_tmp_buf;
+ int xtalbuff_size;
+ short *xtalbuff;
+ short *Cbar[16];
+ short *Mbar[16];
+ short *Ybar[16];
+ short *Kbar[16];
+ short *Cbuf[2];
+ short *Mbuf[2];
+ short *Ybuf[2];
+ short *Kbuf[2];
+
+ /* Tricks and cheats ... */
+ if (num_comps == 3) num_comps = 4; /* print CMYK */
+
+ if (storage_bpp == 8 && num_comps >= 3)
+ bits_per_pixel = expanded_bpp = 3; /* Only 3 bits of each byte used */
+
+ plane_size = calc_buffsize(line_size, storage_bpp);
+
+ if (bits_per_pixel == 1) { /* Data printed direct from i/p */
+ databuff_size = 0; /* so no data buffer required, */
+ outbuff_size = plane_size * 4; /* but need separate output buffers */
+ }
+
+ if (bits_per_pixel > 4) { /* Error buffer for FS dithering */
+ expanded_bpp = storage_bpp = /* 8, 24 or 32 bits */
+ num_comps * 8;
+ errbuff_size = /* 4n extra values for line ends */
+ calc_buffsize((plane_size * expanded_bpp + num_comps * 4) * I, 1);
+ }
+
+ databuff_size = plane_size * storage_bpp;
+
+ storage_size_words = ((plane_size + plane_size) * num_comps +
+ databuff_size + errbuff_size + outbuff_size) / W;
+
+/* NOZ */
+ xtalbuff_size = plane_size*8 + 64;
+ xtalbuff = (short *) gs_malloc(pdev->memory->non_gc_memory, xtalbuff_size*(16*4+2*4) , W, "mj_colour_print_barrier");
+ memset(xtalbuff, 0, xtalbuff_size*(16*4+2*4) * W);
+ {
+ int i;
+ short *p = xtalbuff + 16;
+ for ( i = 0 ; i < 16 ; i++ ) {
+ Cbar[i] = p;
+ p += xtalbuff_size;
+ }
+ for ( i = 0 ; i < 16 ; i++ ) {
+ Mbar[i] = p;
+ p += xtalbuff_size;
+ }
+ for ( i = 0 ; i < 16 ; i++ ) {
+ Ybar[i] = p;
+ p += xtalbuff_size;
+ }
+ for ( i = 0 ; i < 16 ; i++ ) {
+ Kbar[i] = p;
+ p += xtalbuff_size;
+ }
+ Cbuf[0] = p;
+ p += xtalbuff_size;
+ Cbuf[1] = p;
+ p += xtalbuff_size;
+ Mbuf[0] = p;
+ p += xtalbuff_size;
+ Mbuf[1] = p;
+ p += xtalbuff_size;
+ Ybuf[0] = p;
+ p += xtalbuff_size;
+ Ybuf[1] = p;
+ p += xtalbuff_size;
+ Kbuf[0] = p;
+ p += xtalbuff_size;
+ Kbuf[1] = p;
+ p += xtalbuff_size;
+ }
+
+ storage = (word *) gs_malloc(pdev->memory->non_gc_memory, storage_size_words, W, "mj_colour_print_page");
+
+/* prepare a temporary buffer for mj_raster_cmd */
+
+ mj_tmp_buf_size = plane_size;
+ mj_tmp_buf = (byte *) gs_malloc(pdev->memory->non_gc_memory, mj_tmp_buf_size, W ,"mj_raster_buffer");
+
+#if 0
+ dprintf1("storage_size_words :%d\n", storage_size_words);
+ dprintf1("mj_tmp_buf_size :%d\n", mj_tmp_buf_size);
+#endif
+ /*
+ * The principal data pointers are stored as pairs of values, with
+ * the selection being made by the 'scan' variable. The function of the
+ * scan variable is overloaded, as it controls both the alternating
+ * raster scan direction used in the Floyd-Steinberg dithering and also
+ * the buffer alternation required for line-difference compression.
+ *
+ * Thus, the number of pointers required is as follows:
+ *
+ * errors: 2 (scan direction only)
+ * data: 4 (scan direction and alternating buffers)
+ * plane_data: 4 (scan direction and alternating buffers)
+ */
+
+ if (storage == NULL || mj_tmp_buf == NULL) /* can't allocate working area */
+ return_error(gs_error_VMerror);
+ else {
+ int i;
+ byte *p = out_data = out_row = (byte *)storage;
+ data[0] = data[1] = data[2] = p;
+ data[3] = p + databuff_size;
+ if (bits_per_pixel > 1) {
+ p += databuff_size;
+ }
+ if (bits_per_pixel > 4) {
+ errors[0] = (int *)p + num_comps * 2;
+ errors[1] = errors[0] + databuff_size;
+ p += errbuff_size;
+ }
+ for (i = 0; i < num_comps; i++) {
+ plane_data[0][i] = plane_data[2][i] = p;
+ p += plane_size;
+ }
+ for (i = 0; i < num_comps; i++) {
+ plane_data[1][i] = p;
+ plane_data[3][i] = p + plane_size;
+ p += plane_size;
+ }
+ if (bits_per_pixel == 1) {
+ out_data = out_row = p; /* size is outbuff_size * 4 */
+ data[1] += databuff_size; /* coincides with plane_data pointers */
+ data[3] += databuff_size;
+ }
+ }
+
+ /* Clear temp storage */
+ memset(storage, 0, storage_size_words * W);
+
+ /* Initialize printer. */
+ {
+ /** Reset printer, enter graphics mode: */
+
+ gp_fwrite("\033@\033(G\001\000\001", sizeof(byte), 8, prn_stream);
+
+ /** Micro-weave-Mode */
+ if (mj->microweave) {
+ gp_fwrite("\033(i\001\000\001", sizeof(byte), 6, prn_stream);
+ }
+ /** Dot-Size define */
+ if (mj->dotsize) {
+ gp_fwrite("\033(e\002\000\000\001", sizeof(byte), 7, prn_stream);
+ }
+
+ if (ptype == MJ6000C || ptype == MJ8000C) {
+ /* Select Monochrome/Color Printing Mode Command */
+ if (pdev->color_info.depth == 8)
+ gp_fwrite("\033(K\002\000\000\001", sizeof(byte), 7, prn_stream);
+ }
+
+ if (mj->direction) /* set the direction of the head */
+ gp_fwrite("\033U\1", 1, 3, prn_stream); /* Unidirectional Printing */
+ else
+ gp_fwrite("\033U\0", 1, 3, prn_stream);
+
+#if 0
+#ifdef A4
+ /*
+ ** After reset, the Stylus is set up for US letter paper.
+ ** We need to set the page size appropriately for A4 paper.
+ ** For some bizarre reason the ESC/P2 language wants the bottom
+ ** margin measured from the *top* of the page:
+ */
+
+ gp_fwrite("\033(U\001\0\n\033(C\002\0t\020\033(c\004\0\0\0t\020",
+ 1, 22, prn_stream);
+#endif
+#endif
+
+ /*
+ ** Set the line spacing to match the band height:
+ */
+
+ if( pdev->y_pixels_per_inch >= 720 )
+ gp_fwrite("\033(U\001\0\005\033+\001", sizeof(byte), 9, prn_stream);
+ else if( pdev->y_pixels_per_inch >= 360 )
+ gp_fwrite("\033(U\001\0\012\033+\001", sizeof(byte), 9, prn_stream);
+ else /* 180 dpi */
+ gp_fwrite("\033(U\001\0\024\033+\002", sizeof(byte), 9, prn_stream);
+
+ /* set the length of the page */
+ gp_fwrite("\033(C\2\0", sizeof(byte), 5, prn_stream);
+ gp_fputc(((pdev->height) % 256), prn_stream);
+ gp_fputc(((pdev->height) / 256), prn_stream);
+ }
+
+#define MOFFSET (pdev->t_margin - MJ700V2C_PRINT_LIMIT) /* Print position */
+
+ {
+ int MJ_MARGIN_MM = 55;
+ uint top_skip = ( MJ_MARGIN_MM * pdev->y_pixels_per_inch ) / 254;
+ top_skip = (top_skip ^ (-1)) & 65536;
+ gp_fwrite("\033(V\2\0\0\0",sizeof(byte), 7, prn_stream);
+ gp_fwrite("\033(v\2\0\0\xff",sizeof(byte), 7, prn_stream);
+ }
+
+ /* Send each scan line in turn */
+ {
+ long int lend = pdev->height -
+ (dev_t_margin_points(pdev) + dev_b_margin_points(pdev));
+ int cErr, mErr, yErr, kErr;
+ int this_pass, i;
+ long int lnum;
+ int num_blank_lines = 0;
+ int start_rows = (num_comps == 1) ?
+ HEAD_ROWS_MONO - 1 : HEAD_ROWS_COLOUR - 1;
+ word rmask = ~(word) 0 << ((-pdev->width * storage_bpp) & (W * 8 - 1));
+
+ cErr = mErr = yErr = kErr = 0;
+
+ if (bits_per_pixel > 4) { /* Randomly seed initial error buffer */
+ int *ep = errors[0];
+ for (i = 0; i < databuff_size; i++) {
+ *ep++ = (rand() % (MAXVALUE / 2)) - MAXVALUE / 4;
+ }
+ }
+
+ this_pass = start_rows;
+
+ lnum = 0;
+
+ /* for Debug */
+
+ for (; lnum < lend; lnum++) {
+ word *data_words = (word *)data[scan];
+ register word *end_data = data_words + line_size_words;
+ gx_color_index *p_data;
+
+ gdev_prn_copy_scan_lines(pdev, lnum, data[scan], line_size);
+
+ /* Mask off 1-bits beyond the line width. */
+ end_data[-1] &= rmask;
+
+ /* Remove trailing 0s. */
+ while (end_data > data_words && end_data[-1] == 0)
+ end_data--;
+ if (end_data == data_words) { /* Blank line */
+ num_blank_lines++;
+ continue; /* skip to for (lnum) loop */
+ }
+ /* Skip blank lines if any */
+ if (num_blank_lines > 0 ) {
+ mj_v_skip(num_blank_lines, pdev, prn_stream);
+ memset(plane_data[1 - scan][0], 0, plane_size * num_comps);
+ num_blank_lines = 0;
+ this_pass = start_rows;
+ }
+
+ /* Correct color depth. */
+ if (mj->density != 1024 || mj->yellow != 1024 || mj->cyan != 1024
+ || mj->magenta != 1024 || mj->black != 1024 ) {
+ for (p_data = (gx_color_index*) data_words; p_data < (gx_color_index *)end_data; p_data++) {
+ *p_data = mjc_correct_color(pdev, *p_data);
+ }
+ }
+
+ { /* Printing non-blank lines */
+ register byte *kP = plane_data[scan + 2][3];
+ register byte *cP = plane_data[scan + 2][2];
+ register byte *mP = plane_data[scan + 2][1];
+ register byte *yP = plane_data[scan + 2][0];
+ register byte *dp = data[scan + 2];
+ int i, j;
+ byte *odp;
+
+ if (this_pass)
+ this_pass--;
+ else
+ this_pass = start_rows;
+
+ if (expanded_bpp > bits_per_pixel) /* Expand line if required */
+ expand_line(data_words, line_size, bits_per_pixel, expanded_bpp);
+
+ /* In colour modes, we have some bit-shuffling to do before
+ * we can print the data; in FS mode we also have the
+ * dithering to take care of. */
+ switch (expanded_bpp) { /* Can be 1, 3, 8, 24 or 32 */
+ case 3:
+ /* Transpose the data to get pixel planes. */
+ for (i = 0, odp = plane_data[scan][0]; i < databuff_size;
+ i += 8, odp++) { /* The following is for 16-bit
+ * machines */
+#define spread3(c)\
+ { 0, c, c*0x100, c*0x101, c*0x10000L, c*0x10001L, c*0x10100L, c*0x10101L }
+ static word spr40[8] = spread3(0x40);
+ static word spr08[8] = spread3(8);
+ static word spr02[8] = spread3(2);
+ register byte *dp = data[scan] + i;
+ register word pword =
+ (spr40[dp[0]] << 1) +
+ (spr40[dp[1]]) +
+ (spr40[dp[2]] >> 1) +
+ (spr08[dp[3]] << 1) +
+ (spr08[dp[4]]) +
+ (spr08[dp[5]] >> 1) +
+ (spr02[dp[6]]) +
+ (spr02[dp[7]] >> 1);
+ odp[0] = (byte) (pword >> 16);
+ odp[plane_size] = (byte) (pword >> 8);
+ odp[plane_size * 2] = (byte) (pword);
+ }
+ break;
+
+ case 8:
+ FSDline(scan, i, j, plane_size, cErr, mErr, yErr, kErr,
+ cP, mP, yP, kP, 1);
+ break;
+ case 24:
+ FSDline(scan, i, j, plane_size, cErr, mErr, yErr, kErr,
+ cP, mP, yP, kP, 3);
+ break;
+ case 32:
+ if (scan == 1) {
+ dp -= plane_size*8*4;
+ cP -= plane_size;
+ mP -= plane_size;
+ yP -= plane_size;
+ kP -= plane_size;
+ }
+/*
+{
+ byte *p = dp;
+ int i;
+ for ( i = 0 ; i < plane_size ; i++ ) {
+ dprintf4 ( "[%02X%02X%02X%02X]" , p[0] , p[1] , p[2] , p[3] );
+ p += 4;
+ }
+ dprintf("\n");
+
+}
+*/
+/*
+ FSDline(scan, i, j, plane_size, cErr, mErr, yErr, kErr,
+ cP, mP, yP, kP, 4);
+*/
+/* NOZ */
+ xtal_plane( dp++ , Kbuf , kP , Kbar , plane_size , xtalbuff_size );
+ xtal_plane( dp++ , Cbuf , cP , Cbar , plane_size , xtalbuff_size );
+ xtal_plane( dp++ , Mbuf , mP , Mbar , plane_size , xtalbuff_size );
+ xtal_plane( dp++ , Ybuf , yP , Ybar , plane_size , xtalbuff_size );
+
+ break;
+
+ } /* switch(expanded_bpp) */
+
+ /* Make sure all black is in the k plane */
+ if (num_comps == 4 ) {
+ if (mj->colorcomp > 3 ) {
+ register word *kp = (word *)plane_data[scan][3];
+ register word *cp = (word *)plane_data[scan][2];
+ register word *mp = (word *)plane_data[scan][1];
+ register word *yp = (word *)plane_data[scan][0];
+ if (bits_per_pixel > 4) { /* This has been done as 4 planes */
+#if 0
+ for (i = 0; i < plane_size / W; i++) {
+ word bits = ~*kp++;
+ *cp++ &= bits;
+ *mp++ &= bits;
+ *yp++ &= bits;
+ }
+#endif
+ } else { /* This has really been done as 3 planes */
+ for (i = 0; i < plane_size / W; i++) {
+ word bits = *cp & *mp & *yp;
+ *kp++ = bits;
+ bits = ~bits;
+ *cp++ &= bits;
+ *mp++ &= bits;
+ *yp++ &= bits;
+ }
+ }
+ } else if (mj->colorcomp == 3 ) {
+ register word *kp = (word *)plane_data[scan][3];
+ register word *cp = (word *)plane_data[scan][2];
+ register word *mp = (word *)plane_data[scan][1];
+ register word *yp = (word *)plane_data[scan][0];
+ if (bits_per_pixel > 4) { /* This has been done as 4 planes */
+ for (i = 0; i < plane_size / W; i++) {
+ word bits = *kp++; /* kp will not be used when printing */
+ *cp++ |= bits;
+ *mp++ |= bits;
+ *yp++ |= bits;
+ }
+ } else { /* This has really been done as 3 planes */
+ }
+ }
+ }
+
+ /* Transfer raster graphics
+ * in the order (K), C, M, Y. */
+ switch (mj->colorcomp) {
+ case 1:
+ out_data = (byte*) plane_data[scan][0];
+ /* 3 for balck */
+ mj_raster_cmd(3, plane_size, out_data, mj_tmp_buf, pdev, prn_stream);
+ break;
+ case 3:
+ for (i = 3 - 1; i >= 0; i--) {
+ out_data = (byte*) plane_data[scan][i];
+ mj_raster_cmd(i, plane_size, out_data, mj_tmp_buf, pdev, prn_stream);
+ }
+ break;
+ default:
+ for (i = num_comps - 1; i >= 0; i--) {
+ out_data = (byte*) plane_data[scan][i];
+ mj_raster_cmd(i, plane_size, out_data, mj_tmp_buf, pdev, prn_stream);
+ }
+ break;
+ } /* Transfer Raster Graphics ... */
+
+ {
+ if ( pdev->y_pixels_per_inch > 360 ) {
+ gp_fwrite("\033(v\2\0\1\0",sizeof(byte),7, prn_stream);
+ } else {
+ gp_fputc('\n', prn_stream);
+ }
+ }
+ scan = 1 - scan; /* toggle scan direction */
+ } /* Printing non-blank lines */
+ } /* for lnum ... */
+ } /* send each scan line in turn */
+
+ /* end raster graphics & reset printer */
+
+ /* eject page */
+ {
+ gp_fputs("\f\033@", prn_stream);
+ gp_fflush(prn_stream);
+ }
+ /* free temporary storage */
+ gs_free(pdev->memory->non_gc_memory, (char *) storage, storage_size_words, W, "mj_colour_print_page");
+ gs_free(pdev->memory->non_gc_memory, (char *) mj_tmp_buf, mj_tmp_buf_size, W, "mj_raster_buffer");
+ gs_free(pdev->memory->non_gc_memory, (char *) xtalbuff , xtalbuff_size*(16*4+2*4) , W, "mj_colour_print_barrier");
+
+ return 0;
+}
+
+static void
+mj_color_correct(gx_color_value *Rptr ,gx_color_value *Gptr , gx_color_value *Bptr )
+ /* R,G,B : 0 to 255 */
+{
+ short R,G,B; /* R,G,B : 0 to 255 */
+ short C,M,Y; /* C,M,Y : 0 to 1023 */
+ short H,D,Wa; /* ese-HSV */
+ long S; /* HSV */
+
+ R = *Rptr;
+ G = *Gptr;
+ B = *Bptr;
+ if (R==G) {
+ if (G==B) { /* R=G=B */
+ C=M=Y=1023-v_tbl[R];
+ *Rptr = C;
+ *Gptr = M;
+ *Bptr = Y;
+ return;
+ } else if (G>B) { /* R=G>B */
+ D = G-B;
+ Wa = R;
+ H = 256;
+ } else { /* B>R=G */
+ D = G-B;
+ Wa = R;
+ H = 1024;
+ }
+ }
+
+ if (R>G) {
+ if (G>=B) { /* R>G>B */
+ Wa=R;
+ D=R-B;
+ H=(G-B)*256/D;
+ } else if (R>B) { /* R>B>G */
+ Wa=R;
+ D=R-G;
+ H=1536-(B-G)*256/D;
+ } else { /* B>R>G */
+ Wa=B;
+ D=B-G;
+ H=1024+(R-G)*256/D;
+ }
+ } else {
+ if (R>B) { /* G>R>B */
+ Wa=G;
+ D=G-B;
+ H=512-(R-B)*256/D;
+ } else if (G>B) { /* G>B>R */
+ Wa=G;
+ D=G-R;
+ H=512+(B-R)*256/D;
+ } else { /* B>G>R */
+ Wa=B;
+ D=B-R;
+ H=1024-(G-R)*256/D;
+ }
+ }
+
+ if(Wa!=0){
+ if(Wa==D){
+ Wa=v_tbl[Wa];
+ D=Wa/4;
+ } else {
+ S=((long)D<<16)/Wa;
+ Wa=v_tbl[Wa];
+ D= ( ((long)S*Wa)>>18 );
+ }
+ }
+ Wa=1023-Wa;
+
+ C=(HtoCMY[H*3 ])*D/256+Wa;
+ M=(HtoCMY[H*3+1])*D/256+Wa;
+ Y=(HtoCMY[H*3+2])*D/256+Wa;
+ if (C<0)
+ C=0;
+ if (M<0)
+ M=0;
+ if (Y<0)
+ Y=0;
+
+ if(H>256 && H<1024){ /* green correct */
+ short work;
+ work=(((long)grnsep[M]*(long)grnsep2[H-256])>>16);
+ C+=work;
+ Y+=work+work;
+ M-=work+work;
+ if(C>1023) C=1023;
+ if(Y>1023) Y=1023;
+ }
+
+ *Rptr = C;
+ *Gptr = M;
+ *Bptr = Y;
+}
+
+/*
+ * Map a r-g-b color to a color index.
+ * We complement the colours, since we're using cmy anyway, and
+ * because the buffering routines expect white to be zero.
+ * Includes colour balancing, following HP recommendations, to try
+ * and correct the greenish cast resulting from an equal mix of the
+ * c, m, y, inks by reducing the cyan component to give a truer black.
+ */
+static gx_color_index
+gdev_mjc_map_rgb_color(gx_device *pdev, const gx_color_value cv[])
+{
+ gx_color_value r, g, b;
+
+ r = cv[0]; g = cv[1]; b = cv[2];
+ if (gx_color_value_to_byte(r & g & b) == 0xff)
+ return (gx_color_index)0; /* white */
+ else {
+ gx_color_value c = gx_max_color_value - r;
+ gx_color_value m = gx_max_color_value - g;
+ gx_color_value y = gx_max_color_value - b;
+
+ switch (pdev->color_info.depth) {
+ case 1:
+ return ((c | m | y) > gx_max_color_value / 2 ?
+ (gx_color_index)1 : (gx_color_index)0);
+ case 8:
+ if (pdev->color_info.num_components >= 3)
+#define gx_color_value_to_1bit(cv) ((cv) >> (gx_color_value_bits - 1))
+ return (gx_color_value_to_1bit(c) +
+ (gx_color_value_to_1bit(m) << 1) +
+ (gx_color_value_to_1bit(y) << 2));
+ else
+#define red_weight 306
+#define green_weight 601
+#define blue_weight 117
+ return ((((word)c * red_weight +
+ (word)m * green_weight +
+ (word)y * blue_weight)
+ >> (gx_color_value_bits + 2)));
+ case 16:
+#define gx_color_value_to_5bits(cv) ((cv) >> (gx_color_value_bits - 5))
+#define gx_color_value_to_6bits(cv) ((cv) >> (gx_color_value_bits - 6))
+ return (gx_color_value_to_5bits(y) +
+ (gx_color_value_to_6bits(m) << 5) +
+ (gx_color_value_to_5bits(c) << 11));
+ case 24:
+ return (gx_color_value_to_byte(y) +
+ (gx_color_value_to_byte(m) << 8) +
+ ((word)gx_color_value_to_byte(c) << 16));
+ case 32:
+ {
+ gx_color_value k;
+ c = gx_color_value_to_byte(r);
+ m = gx_color_value_to_byte(g);
+ y = gx_color_value_to_byte(b);
+
+ mj_color_correct( &c , &m , &y );
+
+ c = esp_dat_c[c];
+ m = esp_dat_m[m];
+ y = esp_dat_y[y];
+
+ k = c <= m ? (c <= y ? c : y) : (m <= y ? m : y);
+ k = black_sep[ k >> 4 ] >> 6;
+ c >>= 6;
+ m >>= 6;
+ y >>= 6;
+
+ return ( (y - k) + ((m - k) << 8) +
+ ((word)(c - k) << 16) + ((word)(k) << 24) );
+ }
+ }
+ }
+ return (gx_color_index)0; /* This never happens */
+}
+
+/* Map a color index to a r-g-b color. */
+static int
+gdev_mjc_map_color_rgb(gx_device *pdev, gx_color_index color,
+ gx_color_value prgb[3])
+{
+ /* For the moment, we simply ignore any black correction */
+ switch (pdev->color_info.depth) {
+ case 1:
+ prgb[0] = prgb[1] = prgb[2] = -((gx_color_value)color ^ 1);
+ break;
+ case 8:
+ if (pdev->color_info.num_components >= 3)
+ { gx_color_value c = (gx_color_value)color ^ 7;
+ prgb[0] = -(c & 1);
+ prgb[1] = -((c >> 1) & 1);
+ prgb[2] = -(c >> 2);
+ }
+ else
+ { gx_color_value value = (gx_color_value)color ^ 0xff;
+ prgb[0] = prgb[1] = prgb[2] = (value << 8) + value;
+ }
+ break;
+ case 16:
+ { gx_color_value c = (gx_color_value)color ^ 0xffff;
+ ushort value = c >> 11;
+ prgb[0] = ((value << 11) + (value << 6) + (value << 1) +
+ (value >> 4)) >> (16 - gx_color_value_bits);
+ value = (c >> 6) & 0x3f;
+ prgb[1] = ((value << 10) + (value << 4) + (value >> 2))
+ >> (16 - gx_color_value_bits);
+ value = c & 0x1f;
+ prgb[2] = ((value << 11) + (value << 6) + (value << 1) +
+ (value >> 4)) >> (16 - gx_color_value_bits);
+ }
+ break;
+ case 24:
+ { gx_color_value c = (gx_color_value)color ^ 0xffffff;
+ prgb[0] = gx_color_value_from_byte(c >> 16);
+ prgb[1] = gx_color_value_from_byte((c >> 8) & 0xff);
+ prgb[2] = gx_color_value_from_byte(c & 0xff);
+ }
+ break;
+ case 32:
+#define gx_maxcol gx_color_value_from_byte(gx_color_value_to_byte(gx_max_color_value))
+ { gx_color_value w = gx_maxcol - gx_color_value_from_byte(color >> 24);
+ prgb[0] = w - gx_color_value_from_byte((color >> 16) & 0xff);
+ prgb[1] = w - gx_color_value_from_byte((color >> 8) & 0xff);
+ prgb[2] = w - gx_color_value_from_byte(color & 0xff);
+ }
+ break;
+ }
+ return 0;
+}
+
+/*
+* Encode a list of colorant values into a gx_color_index_value.
+*/
+static gx_color_index
+gdev_mjc_encode_color(gx_device *dev, const gx_color_value colors[])
+{
+ return gdev_mjc_map_rgb_color(dev, colors);
+}
+
+/*
+* Decode a gx_color_index value back to a list of colorant values.
+*/
+static int
+gdev_mjc_decode_color(gx_device * dev, gx_color_index color, gx_color_value * out)
+{
+ return gdev_mjc_map_color_rgb(dev, color, out);
+}
+
+/*
+ * Convert and expand scanlines:
+ *
+ * (a) 16 -> 24 bit (1-stage)
+ * (b) 16 -> 32 bit (2-stage)
+ * or (c) 24 -> 32 bit (1-stage)
+ */
+static void
+expand_line(word *line, int linesize, int bpp, int ebpp)
+{
+ int endline = linesize;
+ byte *start = (byte *)line;
+ register byte *in, *out;
+
+ if (bpp == 16) /* 16 to 24 (cmy) if required */
+ { register byte b0, b1;
+ endline = ((endline + 1) / 2);
+ in = start + endline * 2;
+ out = start + (endline *= 3);
+
+ while (in > start)
+ { b0 = *--in;
+ b1 = *--in;
+ *--out = (b0 << 3) + ((b0 >> 2) & 0x7);
+ *--out = (b1 << 5) + ((b0 >> 3) & 0x1c) + ((b1 >> 1) & 0x3);
+ *--out = (b1 & 0xf8) + (b1 >> 5);
+ }
+ }
+
+ if (ebpp == 32) /* 24 (cmy) to 32 (cmyk) if required */
+ { register byte c, m, y, k;
+ endline = ((endline + 2) / 3);
+ in = start + endline * 3;
+ out = start + endline * 4;
+
+ while (in > start)
+ { y = *--in;
+ m = *--in;
+ c = *--in;
+ k = c < m ? (c < y ? c : y) : (m < y ? m : y);
+ *--out = y - k;
+ *--out = m - k;
+ *--out = c - k;
+ *--out = k;
+ }
+ }
+}
+
+static int
+put_param_int(gs_param_list *plist, gs_param_name pname, int *pvalue, int minval, int maxval, int ecode)
+{ int code, value;
+ switch ( code = param_read_int(plist, pname, &value) )
+ {
+ default:
+ return code;
+ case 1:
+ return ecode;
+ case 0:
+ if ( value < minval || value > maxval )
+ param_signal_error(plist, pname, gs_error_rangecheck);
+ *pvalue = value;
+ return (ecode < 0 ? ecode : 1);
+ }
+}
+
+static void
+set_bpp(gx_device *pdev, int bits_per_pixel)
+{ gx_device_color_info *ci = &pdev->color_info;
+ /* Only valid bits-per-pixel are 1, 3, 8, 16, 24, 32 */
+ int bpp = bits_per_pixel < 3 ? 1 : bits_per_pixel < 8 ? 3 :
+ (bits_per_pixel >> 3) << 3;
+ ci->num_components = ((bpp == 1) || (bpp == 8) ? 1 : 3);
+ ci->depth = ((bpp > 1) && (bpp < 8) ? 8 : bpp);
+ ci->max_gray = (bpp >= 8 ? 255 : 1);
+ ci->max_color = (bpp >= 8 ? 255 : bpp > 1 ? 1 : 0);
+ ci->dither_grays = (bpp >= 8 ? 5 : 2);
+ ci->dither_colors = (bpp >= 8 ? 5 : bpp > 1 ? 2 : 0);
+ mj->colorcomp = (bpp == 8 ? 1 : 4);
+}
+
+static void
+mj500c_set_bpp(gx_device *pdev, int bits_per_pixel)
+{ gx_device_color_info *ci = &pdev->color_info;
+ /* Only valid bits-per-pixel are 1, 3, 8, 16, 24, 32 */
+ int bpp = bits_per_pixel < 3 ? 1 : bits_per_pixel < 8 ? 3 :
+ (bits_per_pixel >> 3) << 3;
+ ci->num_components = ((bpp == 1) || (bpp == 8) ? 1 : 3);
+ ci->depth = ((bpp > 1) && (bpp < 8) ? 8 : bpp);
+ ci->max_gray = (bpp >= 8 ? 255 : 1);
+ ci->max_color = (bpp >= 8 ? 255 : bpp > 1 ? 1 : 0);
+ ci->dither_grays = (bpp >= 8 ? 5 : 2);
+ ci->dither_colors = (bpp >= 8 ? 5 : bpp > 1 ? 2 : 0);
+ mj->colorcomp = (bpp == 8 ? 1 : 3);
+}
+
+static gx_color_index
+mjc_correct_color(gx_device_printer *pdev, gx_color_index ci)
+{
+ gx_color_index c, m, y, k, co;
+ gx_color_index k2, k3, k4;
+#if __WORDSIZE == 64
+ gx_color_index c2, m2, y2, k5, k6, k7, k8;
+#endif
+ const uint cmask = 0xff;
+ uint dn = mj->density;
+ uint mjy = mj->yellow;
+ uint mjc = mj->cyan;
+ uint mjm = mj->magenta;
+ uint mjb = mj->black;
+ switch (pdev->color_info.depth) {
+ case 8:
+ k = ((ci & cmask) * (mjb)) >> 10;
+ k = (k < cmask) ? k : cmask;
+ k2 = (((ci >> 8) & cmask) * (mjb)) >> 10;
+ k2 = (k2 < cmask) ? k2 : cmask;
+ k3 = (((ci >> 16) & cmask) * (mjb)) >> 10;
+ k3 = (k3 < cmask) ? k3 : cmask;
+ k4 = (((ci >> 24) & cmask) * (mjb)) >> 10;
+ k4 = (k4 < cmask) ? k4 : cmask;
+#if __WORDSIZE == 64
+ /* This code is ugly... (for 64 bit OS) */
+ if (sizeof(word) == 8)
+ {
+ k5 = (((ci >> 32) & cmask) * (mjb)) >> 10;
+ k5 = (k5 < cmask) ? k5 : cmask;
+ k6 = (((ci >> 40) & cmask) * (mjb)) >> 10;
+ k6 = (k6 < cmask) ? k6 : cmask;
+ k7 = (((ci >> 48) & cmask) * (mjb)) >> 10;
+ k7 = (k7 < cmask) ? k7 : cmask;
+ k8 = (((ci >> 56) & cmask) * (mjb)) >> 10;
+ k8 = (k8 < cmask) ? k8 : cmask;
+ co = k + (k2 << 8) + (k3 << 16) + (k4 << 24)
+ + (k5 << 32) + (k6 << 40) + (k7 << 48) + (k8 << 56);
+ if (ci != co)
+ dprintf1("%s\n", "error");
+ return co;
+ }
+#endif
+ return k + (k2 << 8) + (k3 << 16) + (k << 24);
+ break;
+ case 32:
+ y = ((ci & cmask) * mjy * dn) >> 20;
+ y = (y < cmask) ? y : cmask;
+ m = (((ci >> 8) & cmask) * mjm * dn) >> 20;
+ m = (m < cmask) ? m : cmask;
+ c = (((ci >> 16) & cmask) * mjc * dn) >> 20;
+ c = (c < cmask) ? c : cmask;
+ k = (((ci >> 24) & cmask) * mjb * dn) >> 20;
+ k = (k < cmask) ? k : cmask;
+#if __WORDSIZE == 64
+ /* This code is ugly... (for 64 bit OS) */
+ if (sizeof(word) == 8)
+ {
+ y2 = (((ci >> 32) & cmask) * mjy * dn) >> 20;
+ y2 = (y2 < cmask) ? y2 : cmask;
+ m2 = (((ci >> 40) & cmask) * mjm * dn) >> 20;
+ m2 = (m2 < cmask) ? m2 : cmask;
+ c2 = (((ci >> 48) & cmask) * mjc * dn) >> 20;
+ c2 = (c2 < cmask) ? c2 : cmask;
+ k2 = (((ci >> 56) & cmask) * mjb * dn) >> 20;
+ k2 = (k2 < cmask) ? k2 : cmask;
+
+ co = y + (m << 8) + (c << 16) + (k << 24)
+ + (y2 << 32) + (m2 << 40) + (c2 << 48) + (k2 << 56);
+
+ return co;
+ }
+#endif
+ co = (y + (m << 8) + (c << 16) + (k << 24));
+/* dprintf6("%d,%d:%d,%d,%d,%d\n", ci,co, y, m, c, k); */
+ return co;
+/* return (gx_color_value_to_byte(y) +
+ (gx_color_value_to_byte(m) << 8) +
+ ((word)gx_color_value_to_byte(c) << 16) +
+ ((word)gx_color_value_to_byte(k) << 24)); */
+ break;
+ }
+ return ci;
+}
diff --git a/contrib/japanese/gdevmjc.h b/contrib/japanese/gdevmjc.h
new file mode 100644
index 00000000..782bdd3f
--- /dev/null
+++ b/contrib/japanese/gdevmjc.h
@@ -0,0 +1,3220 @@
+unsigned short matrix2[] = { /* 128 x 128 */
+ 0x0C3E,0x31BE,0x249A,0x0B88,0x2898,0x162F,0x2AEE,0x12D4,
+ 0x20F1,0x3E08,0x0E3C,0x244A,0x3C5C,0x102A,0x36AE,0x0DB5,
+ 0x27D2,0x3774,0x01D0,0x3A3B,0x18C7,0x356C,0x0E6C,0x2938,
+ 0x1AB3,0x3B3E,0x04D9,0x2BF8,0x1C80,0x087C,0x2F7E,0x043B,
+ 0x295E,0x097F,0x30AE,0x1722,0x38C5,0x1F2A,0x0491,0x2B7B,
+ 0x169B,0x2887,0x1413,0x325B,0x03CD,0x2CF4,0x119A,0x2471,
+ 0x19A8,0x2735,0x14AA,0x3D50,0x20F5,0x0141,0x22B3,0x2FA0,
+ 0x0656,0x23CF,0x1BE4,0x3010,0x0712,0x1D9F,0x375C,0x1205,
+ 0x3080,0x06B0,0x2922,0x0307,0x2CC4,0x0823,0x3E98,0x2587,
+ 0x0CA3,0x2954,0x038C,0x3073,0x2549,0x0DE1,0x3124,0x0445,
+ 0x2C5E,0x07B5,0x2A4E,0x0A5E,0x35B0,0x0332,0x2382,0x3192,
+ 0x04A9,0x2C00,0x171D,0x2F1A,0x0DDC,0x2927,0x03A5,0x261E,
+ 0x083F,0x3B04,0x1DFE,0x044C,0x2B6C,0x09BA,0x1735,0x3D78,
+ 0x1D30,0x08BD,0x37CD,0x20D0,0x0682,0x22CF,0x2FCC,0x1155,
+ 0x326E,0x1845,0x2364,0x2C10,0x19E2,0x088A,0x3B49,0x1873,
+ 0x3482,0x0FF4,0x27F5,0x0CD4,0x2E0A,0x1382,0x22D3,0x2B6E,
+ 0x3BFF,0x016F,0x1992,0x3F5F,0x05CB,0x38EF,0x0CFB,0x356B,
+ 0x275C,0x0403,0x2DAF,0x1D82,0x010F,0x2645,0x1A9D,0x2EF8,
+ 0x05D7,0x1C57,0x30C4,0x0BA3,0x2E75,0x0429,0x1DF0,0x3D8E,
+ 0x0960,0x2096,0x3321,0x0EF7,0x3AAE,0x2316,0x1939,0x37FD,
+ 0x1469,0x3B05,0x1034,0x2CAE,0x0842,0x2EB8,0x22EC,0x0C54,
+ 0x3443,0x0143,0x2F86,0x1859,0x39D5,0x15D1,0x3584,0x0019,
+ 0x3C08,0x09C2,0x2B6F,0x073C,0x2F02,0x1B5B,0x3A29,0x1058,
+ 0x1F25,0x3CEB,0x03E2,0x24FA,0x18A2,0x31A8,0x0922,0x2611,
+ 0x1A5B,0x3F46,0x11A2,0x3515,0x1543,0x3105,0x0F0C,0x1FAF,
+ 0x2D16,0x17D3,0x3D90,0x1F42,0x0699,0x3BFD,0x1355,0x37A8,
+ 0x10CD,0x3FA7,0x12A9,0x27DA,0x160A,0x2DBE,0x1AE2,0x10A4,
+ 0x3E93,0x1DD2,0x0A31,0x21BC,0x3BFB,0x155A,0x35CD,0x13C5,
+ 0x32B2,0x22D7,0x105B,0x33BE,0x1AA7,0x221E,0x3243,0x0377,
+ 0x2F55,0x1FFF,0x0EB8,0x32F2,0x1B3E,0x3A3C,0x03AB,0x28B3,
+ 0x0829,0x3F37,0x029E,0x154A,0x3D3D,0x2269,0x14C2,0x2EE5,
+ 0x0798,0x2A1B,0x02FD,0x3251,0x1B18,0x3DEC,0x0467,0x1CB9,
+ 0x104F,0x220F,0x2C3C,0x1118,0x2DD5,0x1ADD,0x2407,0x06E0,
+ 0x1928,0x37FC,0x13AB,0x34E2,0x1772,0x3ABA,0x08A2,0x22D6,
+ 0x3D59,0x10FF,0x25AF,0x1ED2,0x0F89,0x394D,0x23CC,0x14F4,
+ 0x2D0A,0x1286,0x24D3,0x1E4A,0x00A5,0x3409,0x0C91,0x208F,
+ 0x26C4,0x01A7,0x23A8,0x198B,0x35B5,0x0F08,0x3C7E,0x1929,
+ 0x21C5,0x3B6A,0x0D90,0x2594,0x07F0,0x29F6,0x0BF1,0x28A2,
+ 0x13FA,0x30B3,0x1890,0x389C,0x10DB,0x291C,0x0B24,0x259C,
+ 0x31ED,0x0EE0,0x2AC5,0x0C6C,0x3C50,0x157E,0x20B0,0x3B87,
+ 0x04B0,0x1FFC,0x24C1,0x09CD,0x27A8,0x18F8,0x35AD,0x015E,
+ 0x39AB,0x08C8,0x2300,0x1515,0x3478,0x1C1E,0x2378,0x094E,
+ 0x25F0,0x1D94,0x33B2,0x0590,0x3D54,0x0D15,0x3840,0x268E,
+ 0x0882,0x2819,0x36C8,0x1C99,0x0674,0x2E0F,0x09A0,0x2A2F,
+ 0x1C23,0x0126,0x37F3,0x2014,0x0640,0x3AB3,0x112E,0x2A22,
+ 0x14B0,0x3C39,0x2744,0x00D1,0x2BDF,0x1465,0x31C8,0x1330,
+ 0x2DEA,0x1AF8,0x2179,0x2E74,0x0C89,0x2ADF,0x0127,0x1D92,
+ 0x382E,0x162D,0x3CED,0x2143,0x08D9,0x2745,0x180B,0x3045,
+ 0x1F0F,0x3956,0x0857,0x369A,0x207B,0x0256,0x3C98,0x1D3B,
+ 0x2CC1,0x1057,0x28E2,0x0B17,0x2C13,0x155E,0x3148,0x0E65,
+ 0x203F,0x336D,0x0721,0x3F48,0x2A60,0x19D6,0x0853,0x35A3,
+ 0x0335,0x3891,0x0753,0x3F18,0x27C0,0x12E6,0x2CD6,0x06BD,
+ 0x32E4,0x1B13,0x3F98,0x0594,0x2569,0x1E35,0x0265,0x321C,
+ 0x08AF,0x1B82,0x2CAF,0x1304,0x32F8,0x1DED,0x3D27,0x0FFC,
+ 0x34F8,0x1D1A,0x0300,0x21D3,0x32D2,0x04F2,0x3E36,0x1A8F,
+ 0x023B,0x3811,0x1406,0x3350,0x1D51,0x0157,0x2EFF,0x103E,
+ 0x33C9,0x0E9A,0x3728,0x1B00,0x3B2E,0x0523,0x1CD1,0x2A38,
+ 0x11C7,0x1E8F,0x36FE,0x0D0A,0x2762,0x0105,0x2F49,0x1A9A,
+ 0x3244,0x01C8,0x18BA,0x2E6E,0x1DFB,0x24F9,0x0116,0x1861,
+ 0x3520,0x15FA,0x02D0,0x2CCE,0x178F,0x22CB,0x38C1,0x0ED0,
+ 0x3DC7,0x18D5,0x29E2,0x0B5E,0x2E3D,0x16A7,0x2652,0x0C06,
+ 0x317D,0x072F,0x1988,0x355F,0x0C2C,0x248C,0x08F1,0x3834,
+ 0x1FB3,0x0D5B,0x340E,0x064F,0x36BE,0x113B,0x3A1D,0x256B,
+ 0x0DF3,0x2C2B,0x0C0F,0x196C,0x33AB,0x11DA,0x37BC,0x066B,
+ 0x326C,0x0F18,0x1DBD,0x2513,0x14C6,0x3023,0x0F72,0x3425,
+ 0x0907,0x3FC1,0x030D,0x3670,0x2217,0x04DD,0x1CB2,0x3836,
+ 0x026C,0x184D,0x2DA6,0x165B,0x004B,0x2616,0x305D,0x11D1,
+ 0x289B,0x17E4,0x2E62,0x1685,0x0A47,0x370B,0x1855,0x3D62,
+ 0x10E5,0x2E22,0x0E19,0x2BD3,0x1182,0x3A07,0x28F0,0x104D,
+ 0x2048,0x35F4,0x04E2,0x3FC7,0x1A0A,0x0299,0x2183,0x2E4B,
+ 0x05D9,0x25EC,0x3F5E,0x0D2F,0x1D95,0x2A52,0x13A4,0x2DCC,
+ 0x217B,0x1818,0x2C96,0x05A4,0x26C5,0x392A,0x0B6F,0x2B16,
+ 0x1850,0x2E72,0x00A2,0x2C36,0x1320,0x230C,0x3CB8,0x0D59,
+ 0x340F,0x2512,0x0330,0x2D9C,0x185D,0x3B23,0x1204,0x38A8,
+ 0x0EA0,0x2111,0x39EB,0x14D2,0x08DB,0x3AB7,0x1C61,0x30DB,
+ 0x0E0B,0x2457,0x3952,0x1009,0x3E4B,0x01B0,0x1EDD,0x30A0,
+ 0x0562,0x2788,0x0F85,0x3CB0,0x1447,0x357D,0x019B,0x3F72,
+ 0x1003,0x246B,0x3931,0x1196,0x1EA8,0x3EA2,0x18CA,0x2620,
+ 0x018E,0x3A95,0x1703,0x269A,0x1BAF,0x31F0,0x0933,0x19AA,
+ 0x30CD,0x0555,0x24A5,0x39B5,0x00E3,0x29A0,0x0D84,0x247E,
+ 0x02E4,0x2805,0x3D48,0x047B,0x3359,0x0A70,0x2A68,0x1797,
+ 0x2568,0x1414,0x2E1C,0x1C39,0x0D69,0x3DE2,0x2834,0x116C,
+ 0x2978,0x3C1C,0x0968,0x21E9,0x3227,0x13BE,0x1FEA,0x3E14,
+ 0x0BEB,0x349B,0x0D6C,0x20E3,0x30FE,0x1C05,0x02D8,0x245E,
+ 0x1F4C,0x080E,0x386D,0x1EBA,0x313B,0x09E4,0x16F9,0x3E62,
+ 0x26B7,0x0B8A,0x2A64,0x0F94,0x2750,0x3717,0x0B06,0x17E7,
+ 0x3AA6,0x1247,0x2360,0x19CE,0x37B1,0x0C3B,0x3607,0x07B7,
+ 0x39F6,0x0976,0x1E03,0x3FD4,0x0DA2,0x1964,0x34FA,0x22EF,
+ 0x07FB,0x1D79,0x395D,0x2158,0x0954,0x3208,0x15CB,0x2EE6,
+ 0x06FB,0x19A7,0x3FD4,0x13A6,0x3331,0x0BAD,0x2A9B,0x0476,
+ 0x26D3,0x347E,0x0C34,0x2331,0x2BAE,0x0FF8,0x2D57,0x06A6,
+ 0x3D10,0x1E54,0x0B85,0x3219,0x1A77,0x2994,0x0C3F,0x23DD,
+ 0x158B,0x36F8,0x20A9,0x03FB,0x2BE2,0x0EF6,0x2893,0x17B0,
+ 0x2CBF,0x1DAE,0x031B,0x21E6,0x2E89,0x049B,0x324A,0x1101,
+ 0x3032,0x22B0,0x098B,0x3DD1,0x03EF,0x23C9,0x1E0B,0x3F5A,
+ 0x11D3,0x3522,0x0E61,0x1C04,0x2F7A,0x15A6,0x3EA8,0x1AB0,
+ 0x3A8B,0x1875,0x0C74,0x2BF0,0x130B,0x3B22,0x1C73,0x0130,
+ 0x38C0,0x1F32,0x0698,0x3B50,0x1903,0x239D,0x0A5F,0x34A2,
+ 0x2110,0x0F04,0x1DD7,0x380C,0x0C9A,0x3B76,0x052A,0x1AC4,
+ 0x2B8B,0x01E1,0x2442,0x3BC4,0x0545,0x268A,0x39AD,0x0DC6,
+ 0x362A,0x2760,0x1521,0x0042,0x1A4D,0x367C,0x2218,0x038B,
+ 0x1498,0x394F,0x1D77,0x31FB,0x0718,0x2348,0x1CDD,0x2AD3,
+ 0x0E17,0x2ED7,0x0844,0x2CD2,0x0103,0x2691,0x173E,0x2837,
+ 0x12CE,0x3143,0x24A6,0x11A0,0x2DAC,0x2195,0x0439,0x1468,
+ 0x3E12,0x29C5,0x0E00,0x1696,0x3ED9,0x1C46,0x0297,0x2200,
+ 0x385D,0x285D,0x09E5,0x298C,0x05E4,0x24C6,0x16E3,0x3EB8,
+ 0x1CA2,0x0719,0x1FFB,0x3DA7,0x03BE,0x3625,0x16D4,0x2097,
+ 0x28AA,0x04C2,0x2B63,0x1F84,0x0735,0x3784,0x140E,0x3C3D,
+ 0x1DCC,0x08E7,0x31F5,0x1885,0x21E5,0x38DE,0x0A64,0x34BF,
+ 0x05BA,0x3B71,0x1A7B,0x3432,0x0F4D,0x2A95,0x0B0C,0x3C62,
+ 0x1D48,0x0E79,0x2C8C,0x129F,0x2A7C,0x1404,0x2D42,0x0225,
+ 0x29CE,0x16B7,0x3C61,0x21B8,0x0A37,0x348F,0x076C,0x2B43,
+ 0x099B,0x2247,0x352B,0x1647,0x2669,0x0605,0x2E7C,0x225E,
+ 0x0E82,0x3264,0x2709,0x10EC,0x2F20,0x009D,0x2D32,0x1A21,
+ 0x0666,0x3638,0x26B6,0x0461,0x29DD,0x0F63,0x2766,0x360E,
+ 0x103F,0x3913,0x1D47,0x0F0D,0x2D70,0x1138,0x1E34,0x29C0,
+ 0x04A2,0x1803,0x3CD5,0x200D,0x2B19,0x0789,0x2D82,0x1CA3,
+ 0x3056,0x22A3,0x00BF,0x1839,0x386E,0x10EB,0x3DEA,0x019F,
+ 0x3540,0x1E70,0x397E,0x1695,0x3CA0,0x115A,0x3418,0x0419,
+ 0x3C09,0x1BFB,0x0071,0x36C9,0x078E,0x3B0B,0x1CE0,0x3252,
+ 0x1777,0x0355,0x27E0,0x3090,0x0636,0x2452,0x2CEF,0x0C11,
+ 0x1450,0x1E26,0x35CF,0x1121,0x3C3E,0x1488,0x317E,0x0F69,
+ 0x2C58,0x181A,0x3044,0x10A7,0x1D41,0x2770,0x0AE5,0x333F,
+ 0x11BE,0x3A75,0x10E2,0x2F4A,0x169C,0x224E,0x3164,0x032F,
+ 0x2EC7,0x2317,0x1360,0x3ED8,0x078C,0x1B19,0x2F00,0x15C5,
+ 0x270A,0x10F9,0x2915,0x07AC,0x3D66,0x1724,0x2767,0x2083,
+ 0x055E,0x385A,0x1A32,0x35EC,0x0800,0x3A88,0x0DAA,0x3741,
+ 0x0B75,0x27AE,0x0422,0x2D94,0x1341,0x25AE,0x1F93,0x143A,
+ 0x1C91,0x2FC8,0x0066,0x3EE5,0x0F4E,0x36E3,0x1511,0x3E1E,
+ 0x1DB3,0x0AA4,0x2101,0x35AA,0x0C70,0x3982,0x11E8,0x3F12,
+ 0x1D27,0x2333,0x1301,0x2F92,0x1790,0x33B0,0x20D2,0x082E,
+ 0x1E6A,0x25DE,0x06DB,0x3289,0x1764,0x3F6B,0x089F,0x32AA,
+ 0x1C6F,0x2FC9,0x0B2A,0x336F,0x1089,0x3B85,0x0CF8,0x378E,
+ 0x06C1,0x167F,0x3BD4,0x2555,0x0C8E,0x2C69,0x15F2,0x3154,
+ 0x1A80,0x053A,0x26F4,0x0A46,0x212F,0x2E16,0x0E4E,0x29B0,
+ 0x1039,0x2384,0x2F74,0x1502,0x28C3,0x1271,0x2AAE,0x0BF6,
+ 0x254E,0x3893,0x0AB6,0x1BA9,0x364B,0x0F80,0x3A79,0x1FC5,
+ 0x3DC6,0x0047,0x2169,0x2E4D,0x0D76,0x2B7C,0x026B,0x369C,
+ 0x09BF,0x3BD0,0x008F,0x2271,0x3861,0x0EE9,0x3F2E,0x0240,
+ 0x2596,0x19D7,0x33EA,0x0053,0x3FC0,0x0952,0x1B2A,0x2B32,
+ 0x0CF7,0x3A8C,0x00B2,0x1C72,0x2D75,0x2346,0x02C3,0x3DB6,
+ 0x0D0B,0x36BB,0x1539,0x3003,0x1C97,0x0205,0x3524,0x1085,
+ 0x2F3A,0x236F,0x008E,0x2017,0x30F3,0x1909,0x2429,0x1C27,
+ 0x3087,0x0FD8,0x332A,0x1E64,0x3B7C,0x01F5,0x3829,0x294A,
+ 0x342B,0x0D5C,0x2A12,0x1E98,0x3150,0x09F7,0x27B3,0x043F,
+ 0x2921,0x3A4A,0x0283,0x1D0B,0x2A88,0x1607,0x27A9,0x0B4D,
+ 0x30D6,0x0202,0x38EB,0x0A98,0x3FD4,0x0134,0x15AC,0x3AE0,
+ 0x2A35,0x13EB,0x3CF3,0x21BE,0x00E7,0x2847,0x1F87,0x0E5B,
+ 0x3B2D,0x13B1,0x2832,0x040A,0x24F1,0x18A1,0x29B6,0x123A,
+ 0x27B2,0x341B,0x0901,0x1BD3,0x3024,0x046B,0x2889,0x0D50,
+ 0x2401,0x375F,0x1294,0x32AB,0x1B75,0x0614,0x3F16,0x17BB,
+ 0x35AE,0x0AFD,0x19AF,0x3D9D,0x0CF9,0x3535,0x01EA,0x3D22,
+ 0x207E,0x10F3,0x337E,0x2387,0x136E,0x2A15,0x0450,0x16CF,
+ 0x25DD,0x30EA,0x1925,0x04E1,0x377D,0x1DBB,0x260F,0x1A00,
+ 0x2054,0x272C,0x14E9,0x3229,0x0601,0x2EE9,0x2172,0x1B68,
+ 0x301A,0x0805,0x2481,0x1ECC,0x0F15,0x3459,0x2687,0x1128,
+ 0x32D3,0x1659,0x2968,0x35EE,0x0D86,0x3986,0x13E3,0x2132,
+ 0x2D9A,0x0021,0x2B40,0x09F0,0x3384,0x229B,0x0BB7,0x3B25,
+ 0x1E72,0x14F3,0x3EF1,0x0F2C,0x26E1,0x034B,0x3CC3,0x070A,
+ 0x2161,0x3E76,0x15EF,0x0938,0x1AE0,0x2BE4,0x16DC,0x0592,
+ 0x11F3,0x39B6,0x17D8,0x080C,0x1A90,0x2C7A,0x12AE,0x33CD,
+ 0x0F9D,0x2381,0x1807,0x3D08,0x07A3,0x33A2,0x03BB,0x3736,
+ 0x16C1,0x28BB,0x193C,0x2BC9,0x1166,0x2257,0x3292,0x198C,
+ 0x0373,0x3033,0x0B57,0x1BC7,0x3600,0x120B,0x381D,0x23D9,
+ 0x01F7,0x2C73,0x0FA3,0x3EF4,0x14FB,0x34B3,0x01C0,0x3D88,
+ 0x1FA5,0x0F4F,0x20DC,0x3F13,0x11F6,0x363D,0x1408,0x3B44,
+ 0x0752,0x1D91,0x2A16,0x0250,0x3A7B,0x252F,0x13FC,0x2BC5,
+ 0x02F7,0x25C6,0x3275,0x04CB,0x235A,0x1C3B,0x2FCF,0x1893,
+ 0x072B,0x2C4C,0x1A31,0x0131,0x3BD6,0x0C64,0x3332,0x229A,
+ 0x0957,0x126F,0x342A,0x27D1,0x153D,0x0AAE,0x3E26,0x055A,
+ 0x3470,0x0B79,0x3990,0x1E32,0x2B4F,0x177B,0x0C9B,0x3BA8,
+ 0x1387,0x3671,0x0C29,0x3B29,0x2818,0x198F,0x0435,0x3D71,
+ 0x236C,0x0638,0x1FE4,0x09DA,0x2631,0x19AC,0x3100,0x084A,
+ 0x1E9B,0x3AC4,0x1948,0x2592,0x0F99,0x393E,0x19DE,0x27FE,
+ 0x06E8,0x34AA,0x09CB,0x2EF4,0x121C,0x3378,0x1520,0x2E6B,
+ 0x1856,0x0010,0x2A58,0x22CC,0x3552,0x0B58,0x3FD4,0x20F3,
+ 0x2482,0x03A4,0x2BA1,0x1FB2,0x3BBA,0x01D6,0x384F,0x1A08,
+ 0x3074,0x0C13,0x2D03,0x12E7,0x287E,0x19CA,0x24A4,0x1417,
+ 0x2C81,0x0CB0,0x3D4D,0x05C5,0x1E25,0x2E51,0x0996,0x241F,
+ 0x34D1,0x110C,0x2704,0x2ED3,0x0A6F,0x2BD7,0x0714,0x18FB,
+ 0x34FE,0x1FCC,0x3188,0x0668,0x291D,0x0C19,0x2EB0,0x1C2B,
+ 0x0553,0x3231,0x2622,0x02CE,0x29C9,0x0A88,0x1F6E,0x2DBB,
+ 0x188D,0x3EB4,0x101E,0x2F21,0x1FDF,0x08D7,0x3650,0x0C95,
+ 0x38E3,0x1EB3,0x0F34,0x292D,0x3A4C,0x0904,0x159C,0x2759,
+ 0x398A,0x0E41,0x3F6D,0x25F4,0x152A,0x2E97,0x1176,0x3809,
+ 0x1CC5,0x39F5,0x0811,0x1B64,0x3AAB,0x21CE,0x1742,0x2D3C,
+ 0x119E,0x29B9,0x1AF3,0x07A1,0x135D,0x37BD,0x2650,0x0503,
+ 0x298E,0x0FA4,0x2D02,0x1734,0x0688,0x3832,0x219D,0x0B9E,
+ 0x18C0,0x3892,0x2A9F,0x16F0,0x3C6B,0x04B7,0x22EA,0x37DA,
+ 0x0E18,0x243D,0x0662,0x3FB6,0x1E4E,0x0501,0x2E2D,0x0ECF,
+ 0x31A1,0x139B,0x25CA,0x1B8F,0x39CB,0x0880,0x2AE2,0x0A96,
+ 0x36F7,0x1CF5,0x3947,0x0693,0x17BD,0x28BF,0x10CA,0x3050,
+ 0x1B3C,0x3CEF,0x1086,0x34BE,0x0E5E,0x2613,0x2137,0x06FD,
+ 0x1FF1,0x390E,0x056B,0x3579,0x0EBC,0x3E61,0x0D4C,0x3A26,
+ 0x051D,0x335F,0x0FEC,0x251F,0x3706,0x150B,0x3C85,0x1332,
+ 0x1FAA,0x3E60,0x058E,0x179A,0x3BF0,0x138A,0x2649,0x3D7D,
+ 0x1551,0x091E,0x1B62,0x3730,0x1776,0x3A54,0x12F7,0x2423,
+ 0x3813,0x0D8B,0x18CD,0x33B8,0x1599,0x39C2,0x23B3,0x005B,
+ 0x2904,0x0B7D,0x342E,0x197A,0x0DD4,0x3093,0x227D,0x1A06,
+ 0x29CF,0x0816,0x3E78,0x1CC7,0x10BE,0x2104,0x3665,0x03A0,
+ 0x1F31,0x3220,0x05EB,0x1DCF,0x36BA,0x07C7,0x281C,0x0237,
+ 0x2D61,0x1609,0x2118,0x2BEA,0x0147,0x2F35,0x08E4,0x2302,
+ 0x381F,0x02AD,0x3F8D,0x23F8,0x3146,0x016A,0x1FAE,0x34BD,
+ 0x18EB,0x3DF1,0x0314,0x213D,0x2E5F,0x1084,0x2C20,0x1CA6,
+ 0x31A4,0x12E3,0x0269,0x3021,0x0E69,0x3421,0x0BE6,0x1D01,
+ 0x2C59,0x1620,0x2FB2,0x11D5,0x3242,0x21A6,0x178B,0x3DF5,
+ 0x0290,0x20F4,0x3BBC,0x046A,0x1FE3,0x2508,0x1A5E,0x321F,
+ 0x0EE3,0x28EC,0x1308,0x252B,0x3B1F,0x0318,0x366C,0x08D8,
+ 0x3308,0x152D,0x2F43,0x05E0,0x1D9A,0x3296,0x157A,0x3F8E,
+ 0x11BC,0x257D,0x1BDD,0x21CB,0x2E35,0x018C,0x2962,0x1AFC,
+ 0x268D,0x164E,0x2FD6,0x200E,0x07C8,0x2951,0x02CF,0x2BFD,
+ 0x0875,0x1A11,0x3217,0x221C,0x027B,0x314B,0x1AF7,0x0428,
+ 0x2F09,0x1EB7,0x2B61,0x0DA9,0x266C,0x0354,0x2CB7,0x09F9,
+ 0x1A4E,0x2AAA,0x3B1B,0x098D,0x2F8C,0x069A,0x1AD5,0x3CDE,
+ 0x1314,0x2BF5,0x03CC,0x244C,0x3D79,0x15EC,0x00CC,0x3BB9,
+ 0x138D,0x2167,0x2C93,0x018B,0x3786,0x2868,0x0E9E,0x30E8,
+ 0x1074,0x246D,0x190A,0x2DC2,0x0EED,0x2B21,0x12ED,0x3C94,
+ 0x2211,0x057A,0x3F08,0x0DD0,0x34E1,0x1233,0x3CDB,0x1BD9,
+ 0x0EA6,0x31D5,0x17EA,0x0ABB,0x1ED8,0x3AD1,0x14A5,0x2BB8,
+ 0x09B4,0x23DC,0x1BC9,0x39FF,0x1467,0x3510,0x0135,0x3BB5,
+ 0x08B7,0x2776,0x3FA6,0x21C7,0x1B98,0x290D,0x14B5,0x3E89,
+ 0x0341,0x3580,0x0AB1,0x2A23,0x016B,0x37BB,0x092B,0x2646,
+ 0x1ADC,0x2D77,0x105F,0x2A8D,0x0D55,0x311A,0x01B4,0x21C6,
+ 0x3E0D,0x04ED,0x34D9,0x0A5A,0x1FB8,0x2E4E,0x13B7,0x205E,
+ 0x00C6,0x295D,0x0BA9,0x24C9,0x3DA6,0x03E1,0x298D,0x0AC2,
+ 0x2F96,0x002F,0x3C8B,0x0A26,0x1926,0x37D5,0x1366,0x34F5,
+ 0x0BB6,0x3C27,0x00AE,0x1AAB,0x3B20,0x0E56,0x3543,0x1068,
+ 0x39FE,0x2528,0x0F26,0x380A,0x1E65,0x0FE1,0x3958,0x2123,
+ 0x0D20,0x33F1,0x0082,0x3C53,0x11D8,0x358A,0x15C7,0x3FD4,
+ 0x220B,0x0113,0x201A,0x1393,0x24E1,0x1DB2,0x312D,0x0F75,
+ 0x3549,0x16DE,0x38B3,0x1DE8,0x078F,0x331A,0x203E,0x2AFB,
+ 0x056C,0x34B6,0x15B4,0x2664,0x1E2B,0x0697,0x3CCC,0x1ACB,
+ 0x2A43,0x0A16,0x3820,0x02CA,0x3E3A,0x1D23,0x3147,0x0B59,
+ 0x1BE2,0x2FF4,0x13AF,0x26C7,0x1840,0x299B,0x04AB,0x2DF6,
+ 0x210C,0x0854,0x228F,0x2FD1,0x1072,0x27F3,0x08BE,0x1D31,
+ 0x38CF,0x11FB,0x32D8,0x0778,0x29AC,0x0C3A,0x26EE,0x0FBC,
+ 0x2F24,0x1E59,0x1529,0x0973,0x3A2F,0x00FA,0x31F1,0x1A2C,
+ 0x2558,0x129C,0x3CC2,0x18A4,0x277F,0x1310,0x304C,0x1584,
+ 0x3909,0x0B2E,0x3577,0x17CD,0x3FD4,0x1640,0x37E4,0x0C01,
+ 0x1E58,0x2EC1,0x1144,0x2C32,0x19C9,0x0CFA,0x3DE6,0x2667,
+ 0x3914,0x0EC1,0x3733,0x20D5,0x0F47,0x2EC9,0x1322,0x3538,
+ 0x1884,0x2B04,0x14CA,0x3235,0x2127,0x0944,0x2B54,0x0626,
+ 0x2D49,0x1278,0x2290,0x3240,0x13B0,0x279E,0x1707,0x2DC5,
+ 0x205F,0x0010,0x2B53,0x0C17,0x2F79,0x2597,0x09BD,0x288E,
+ 0x3EAD,0x12A3,0x245D,0x1D03,0x2DC4,0x0ABE,0x28BC,0x076B,
+ 0x2F05,0x1709,0x2913,0x3DC5,0x03FE,0x38FD,0x0B0A,0x27CC,
+ 0x053C,0x2608,0x0CEB,0x2E3A,0x1B23,0x280E,0x0A1B,0x170C,
+ 0x399B,0x1BCC,0x08D4,0x33A8,0x0CEA,0x2D5B,0x1F74,0x0012,
+ 0x3B62,0x1451,0x2794,0x16F3,0x23C1,0x063C,0x1756,0x35B1,
+ 0x2560,0x0A1A,0x32EF,0x032D,0x3731,0x0CA4,0x39B2,0x14C3,
+ 0x35CE,0x1C37,0x3C54,0x040B,0x363E,0x1660,0x3ED4,0x2547,
+ 0x00C5,0x28FF,0x0DB7,0x2FC7,0x1D05,0x3F35,0x1345,0x372A,
+ 0x228D,0x03CB,0x3475,0x2390,0x1889,0x2084,0x269D,0x07F3,
+ 0x3367,0x1F26,0x05ED,0x2C21,0x0CF2,0x3BDD,0x1D8D,0x05C1,
+ 0x2897,0x1F02,0x00E6,0x2CED,0x069E,0x2864,0x133E,0x2B76,
+ 0x14EC,0x2310,0x3BF9,0x0183,0x3796,0x2230,0x0715,0x1917,
+ 0x1239,0x2ADA,0x1D22,0x07F6,0x3A0D,0x1B90,0x23FE,0x0772,
+ 0x3B86,0x0BF5,0x27D4,0x0468,0x3AF5,0x1C06,0x2216,0x3ECE,
+ 0x0E68,0x1E97,0x3885,0x0AED,0x2B05,0x04E6,0x3EEB,0x092E,
+ 0x1B6F,0x3679,0x1644,0x3FB7,0x05F6,0x1981,0x31D2,0x169F,
+ 0x076E,0x20B4,0x38D6,0x0595,0x1825,0x328D,0x1D55,0x3888,
+ 0x10B4,0x369D,0x0C73,0x1B0E,0x2D36,0x1518,0x2B3E,0x194B,
+ 0x3293,0x1581,0x3C67,0x0206,0x3588,0x12C4,0x3F49,0x22F0,
+ 0x0DCD,0x3017,0x20E0,0x118C,0x3FB4,0x1367,0x356A,0x17B7,
+ 0x2224,0x31AC,0x0886,0x2F60,0x0D36,0x3A1E,0x28F5,0x00A7,
+ 0x19BE,0x3B0C,0x15C2,0x2906,0x1B0A,0x2488,0x0FA9,0x288B,
+ 0x0026,0x2A2B,0x0E20,0x26FA,0x0C7B,0x2DC0,0x05F8,0x1A9F,
+ 0x358F,0x154D,0x3C9F,0x1851,0x02B0,0x20CB,0x2867,0x0599,
+ 0x182A,0x39A8,0x0EE1,0x2F9E,0x06B8,0x355E,0x0CC6,0x3B8D,
+ 0x0EA3,0x23C3,0x3850,0x1016,0x3400,0x0400,0x2420,0x372B,
+ 0x0E1D,0x3CFA,0x24AF,0x127B,0x32B9,0x0CC3,0x3B4C,0x03DB,
+ 0x3681,0x0858,0x1B6A,0x2827,0x0FDF,0x2F5E,0x1DB4,0x2D60,
+ 0x3CBC,0x02D4,0x324F,0x1A10,0x26E6,0x0165,0x30DE,0x1EDF,
+ 0x110F,0x31BC,0x176F,0x2BB4,0x106B,0x2ED4,0x021A,0x1871,
+ 0x3301,0x24DD,0x0393,0x2F2F,0x1CAF,0x31C4,0x1217,0x2439,
+ 0x30D8,0x0CB9,0x297F,0x1445,0x23B9,0x3AC3,0x0186,0x36F2,
+ 0x1C9A,0x3086,0x0E90,0x26B2,0x3E19,0x1471,0x0236,0x216D,
+ 0x2B0E,0x04FC,0x309B,0x2434,0x0891,0x3408,0x0180,0x3FA2,
+ 0x0915,0x2CBC,0x1173,0x28E7,0x0EFC,0x25A9,0x045C,0x2DFD,
+ 0x1E09,0x0274,0x37E5,0x2716,0x03EE,0x2984,0x0A44,0x2E69,
+ 0x0512,0x1EAD,0x393B,0x1A5C,0x33E4,0x1F4D,0x1197,0x3FD4,
+ 0x20D3,0x075E,0x2CB5,0x0B8C,0x3D3B,0x05B5,0x335B,0x12EA,
+ 0x3E65,0x15C9,0x3511,0x1942,0x3B5F,0x1446,0x2399,0x317F,
+ 0x0A09,0x2B1D,0x0541,0x2374,0x37E8,0x0B05,0x35BB,0x1C32,
+ 0x2CE2,0x0A8D,0x2A67,0x16A0,0x3D2A,0x1319,0x2B56,0x1726,
+ 0x2D4C,0x01C9,0x1B15,0x3089,0x146D,0x29B1,0x0C04,0x1C4B,
+ 0x2F19,0x1676,0x08C2,0x3A00,0x22B7,0x1BFE,0x213E,0x2F25,
+ 0x0F62,0x2004,0x33A3,0x144B,0x3F85,0x0425,0x35A5,0x09FA,
+ 0x163B,0x25A7,0x13FD,0x3F40,0x1193,0x3655,0x149D,0x3889,
+ 0x21F1,0x0282,0x3F1F,0x0DAF,0x35C3,0x1536,0x395E,0x27BF,
+ 0x0841,0x15D7,0x3D24,0x183E,0x0DFB,0x2102,0x37C5,0x0239,
+ 0x18ED,0x3B5D,0x048B,0x3483,0x0ADD,0x1ED4,0x2AA4,0x0F82,
+ 0x2C05,0x03AD,0x364E,0x1A9E,0x08F7,0x230E,0x3AE6,0x19CF,
+ 0x0EC9,0x3C77,0x13CE,0x1ED1,0x3ABF,0x111B,0x2370,0x0ED6,
+ 0x24B3,0x1BCA,0x37A9,0x06F6,0x3B24,0x18FE,0x368D,0x11F4,
+ 0x3C22,0x225B,0x0B95,0x184E,0x31F6,0x1CFA,0x385C,0x103D,
+ 0x3D74,0x0D5E,0x24AD,0x01E4,0x2681,0x082F,0x2E01,0x0DE5,
+ 0x274C,0x3666,0x10E8,0x3066,0x16AE,0x2ACD,0x1968,0x264F,
+ 0x0BFE,0x2C9E,0x06C9,0x2F03,0x0212,0x2A87,0x0D8D,0x1EF3,
+ 0x3A7A,0x199B,0x325D,0x10B8,0x2A1F,0x1DC0,0x0F24,0x30A5,
+ 0x144E,0x3E34,0x1FCB,0x021E,0x1E15,0x28CE,0x0462,0x32A1,
+ 0x1136,0x3F7E,0x27DB,0x077C,0x1F7E,0x3E49,0x1843,0x350F,
+ 0x0333,0x20B6,0x2BF3,0x1918,0x025C,0x35B9,0x0A0E,0x1863,
+ 0x3D73,0x25FA,0x05B3,0x2B17,0x0C14,0x24A3,0x172D,0x28AE,
+ 0x32DE,0x0AFE,0x2A51,0x0559,0x2DEB,0x09DC,0x2A9A,0x0637,
+ 0x2D12,0x158E,0x1FD2,0x26DB,0x0738,0x2449,0x0B16,0x1D2B,
+ 0x3720,0x294E,0x0C51,0x2660,0x398B,0x070C,0x2738,0x1C52,
+ 0x2C6B,0x0FA1,0x27F4,0x12EF,0x2E84,0x1510,0x21B2,0x3D11,
+ 0x0BCF,0x278F,0x1177,0x2CDF,0x1DE4,0x2FC4,0x065E,0x34A3,
+ 0x22A7,0x092D,0x31EF,0x028B,0x283D,0x186F,0x3746,0x1C88,
+ 0x334E,0x0353,0x2148,0x2E91,0x145C,0x2991,0x0BFD,0x2792,
+ 0x07CE,0x32F1,0x1C7A,0x3A08,0x14F7,0x0779,0x2285,0x2BD5,
+ 0x1613,0x2A7B,0x1542,0x3BCE,0x12AA,0x3766,0x17E2,0x327B,
+ 0x04C7,0x1D67,0x23D3,0x01A9,0x3922,0x0A81,0x3626,0x02E7,
+ 0x3A72,0x1B38,0x249E,0x1236,0x37BE,0x16EE,0x3D1C,0x0387,
+ 0x262A,0x0C88,0x2150,0x3E92,0x066D,0x24BF,0x3C43,0x003D,
+ 0x2688,0x07B3,0x337A,0x1B10,0x3689,0x0FF9,0x3AF3,0x0A59,
+ 0x249C,0x1EB5,0x1246,0x39EE,0x238E,0x0050,0x2B4E,0x0DBF,
+ 0x2573,0x3EBE,0x0F7D,0x3709,0x2713,0x1187,0x2DB3,0x226A,
+ 0x009F,0x16AC,0x3A37,0x1AB1,0x3435,0x1297,0x3ADF,0x05F5,
+ 0x1D6B,0x3BCD,0x0F64,0x378A,0x194C,0x23B8,0x0FC0,0x3D32,
+ 0x19A5,0x393A,0x0579,0x345B,0x1AB5,0x3DB4,0x13AE,0x2CB4,
+ 0x04A8,0x1EE4,0x32A0,0x015F,0x1DD5,0x3336,0x0D0C,0x3DF9,
+ 0x08B8,0x3582,0x1D7F,0x3DA9,0x02A1,0x376F,0x07C0,0x1AEE,
+ 0x338C,0x1749,0x3BEE,0x012D,0x3970,0x0C93,0x2809,0x104C,
+ 0x2D64,0x1946,0x20BB,0x3E7E,0x0BA2,0x3016,0x05E5,0x29C3,
+ 0x0C1D,0x3E31,0x1819,0x099D,0x33D1,0x003C,0x3049,0x16A1,
+ 0x2B7A,0x13C1,0x2D25,0x013B,0x2342,0x3E02,0x192F,0x02B2,
+ 0x3514,0x06DE,0x30F4,0x099F,0x2C9B,0x1E4C,0x034E,0x2047,
+ 0x38A0,0x13F8,0x3DD4,0x1F3E,0x11E9,0x296B,0x1479,0x2DA0,
+ 0x21C9,0x0F7E,0x3200,0x20A8,0x092A,0x2C04,0x1056,0x2FEC,
+ 0x1652,0x3933,0x0194,0x1AAC,0x2DE8,0x0D21,0x204B,0x320F,
+ 0x1258,0x2C06,0x0F57,0x2822,0x0B7A,0x2EC0,0x2207,0x1B9D,
+ 0x3778,0x0534,0x2F81,0x09DB,0x19F1,0x3632,0x1402,0x3A76,
+ 0x1D0C,0x09A2,0x315F,0x05FA,0x1B29,0x3F26,0x0771,0x38DF,
+ 0x1D5C,0x30B8,0x0D64,0x27A5,0x0213,0x29AF,0x0DE7,0x2CEE,
+ 0x004F,0x2281,0x2FE7,0x1DEE,0x036A,0x31E6,0x1C43,0x2628,
+ 0x0B20,0x22A1,0x2DF7,0x0D12,0x2A21,0x0078,0x30C6,0x1BC8,
+ 0x3B79,0x0ED3,0x2319,0x3F58,0x12BC,0x28CD,0x1F49,0x11DE,
+ 0x3040,0x16FB,0x06B3,0x229E,0x2B80,0x111E,0x312C,0x2409,
+ 0x04CC,0x296A,0x0D54,0x2523,0x1365,0x33A9,0x14DC,0x3F75,
+ 0x001D,0x3805,0x0DF5,0x265B,0x1E20,0x106A,0x3A45,0x164B,
+ 0x2EE7,0x11BD,0x2BA2,0x2206,0x1C33,0x3D4A,0x0E0C,0x3877,
+ 0x04A0,0x3E9A,0x0C7E,0x1EC7,0x2F83,0x0AAB,0x3353,0x2128,
+ 0x0F4B,0x3EF6,0x198E,0x23DE,0x0F06,0x3D17,0x1A23,0x2A37,
+ 0x0A33,0x2B48,0x07B4,0x279C,0x3508,0x0641,0x3EDE,0x1CE5,
+ 0x0974,0x371D,0x03E3,0x3FAB,0x19D5,0x221B,0x340A,0x074D,
+ 0x2932,0x0E2D,0x253F,0x3612,0x13C8,0x384E,0x18A9,0x0A0B,
+ 0x3B30,0x1E81,0x3710,0x0588,0x3F00,0x1802,0x00A6,0x3197,
+ 0x0CBE,0x299A,0x15E0,0x32F3,0x2524,0x0B4A,0x2953,0x0676,
+ 0x2E30,0x1715,0x23DB,0x1DF2,0x2FF1,0x142F,0x2621,0x0EC4,
+ 0x2967,0x08EF,0x36CD,0x136A,0x3CE0,0x1826,0x3724,0x1A74,
+ 0x346C,0x1595,0x089A,0x2694,0x3DF7,0x0C86,0x3518,0x00F3,
+ 0x36F1,0x129B,0x1E28,0x3BC6,0x16F6,0x368B,0x238B,0x0909,
+ 0x1665,0x2F93,0x17C6,0x09E7,0x2EA4,0x0436,0x3A25,0x2472,
+ 0x00F1,0x2853,0x36CA,0x1923,0x0970,0x3A73,0x1F39,0x121F,
+ 0x3F3D,0x15E7,0x305A,0x18B4,0x2A27,0x047C,0x2C61,0x1C28,
+ 0x2580,0x16C8,0x2F62,0x041F,0x3492,0x27AA,0x1FD4,0x00D7,
+ 0x1F1B,0x3659,0x0509,0x3992,0x107A,0x24D4,0x1A57,0x23B6,
+ 0x1F5A,0x0FD9,0x2684,0x3B42,0x1172,0x28CC,0x1325,0x2DD4,
+ 0x1C34,0x25BC,0x00F5,0x36DC,0x1F91,0x05B8,0x337D,0x1507,
+ 0x3B6D,0x129D,0x31E7,0x0EB1,0x1DF4,0x241B,0x0E77,0x3159,
+ 0x1827,0x29A3,0x1E83,0x0D53,0x2E4A,0x008C,0x1B7A,0x3DD9,
+ 0x14E0,0x32C7,0x1BF8,0x08DE,0x2AF3,0x03BA,0x2F72,0x272D,
+ 0x16B4,0x0322,0x1A5D,0x2D14,0x10FA,0x20CF,0x2AC3,0x1546,
+ 0x3D87,0x1062,0x38F1,0x0276,0x1DC2,0x3C28,0x162A,0x347D,
+ 0x0FDC,0x3882,0x0123,0x3B91,0x0B11,0x2B2C,0x02F3,0x31AA,
+ 0x1245,0x2C97,0x1993,0x243E,0x0678,0x2DD9,0x0948,0x20BE,
+ 0x0B9D,0x27C6,0x3969,0x17A8,0x10AE,0x2C0E,0x1430,0x299D,
+ 0x0DD1,0x3046,0x0398,0x24AE,0x09A5,0x1F67,0x0FEA,0x3430,
+ 0x2107,0x02D5,0x389A,0x21BA,0x1A76,0x3485,0x0BB5,0x1C2E,
+ 0x3CB7,0x20BA,0x0F54,0x2E21,0x1CBE,0x251A,0x0070,0x2EDF,
+ 0x0A2D,0x34E6,0x0683,0x3819,0x0B7C,0x3C96,0x21EF,0x09A6,
+ 0x3166,0x06F0,0x1CDE,0x39A7,0x15DC,0x07FF,0x3DB0,0x1AEC,
+ 0x3128,0x0F0A,0x275F,0x0B63,0x2DAB,0x0382,0x313E,0x094D,
+ 0x2A0D,0x35B2,0x1ABA,0x06CF,0x3444,0x0446,0x3A7F,0x07FE,
+ 0x37CA,0x0C39,0x2B55,0x1134,0x308A,0x26DC,0x0CCE,0x2D2C,
+ 0x0067,0x2491,0x1BFC,0x3812,0x037F,0x3AE4,0x1F9C,0x00FB,
+ 0x3C31,0x080B,0x2504,0x3973,0x1151,0x3684,0x242D,0x0B66,
+ 0x2A66,0x04D4,0x3BE3,0x1FFA,0x111A,0x3FD4,0x20ED,0x0776,
+ 0x343B,0x1F94,0x3CB5,0x094F,0x2476,0x351C,0x0D7B,0x2E56,
+ 0x0448,0x265E,0x20FB,0x18CE,0x2CFC,0x080D,0x2728,0x03A7,
+ 0x2BBB,0x1A09,0x27D3,0x111D,0x33F3,0x1513,0x3C56,0x1EFA,
+ 0x35EA,0x0417,0x3E6A,0x0C99,0x3282,0x14F9,0x2559,0x3EF0,
+ 0x2C45,0x1BBD,0x0238,0x30F9,0x2198,0x0667,0x3A93,0x1CB8,
+ 0x3E8B,0x18C8,0x2085,0x3355,0x15BE,0x3FD4,0x22FC,0x067E,
+ 0x3CA9,0x2A6C,0x0CE4,0x3189,0x065B,0x25A5,0x1864,0x2D83,
+ 0x14AC,0x09FB,0x3908,0x03EC,0x3E63,0x0E75,0x3548,0x14EA,
+ 0x2AFC,0x1B9F,0x260B,0x1266,0x2D13,0x1AE9,0x0FC9,0x371A,
+ 0x1571,0x3B8C,0x22D9,0x0A72,0x21AF,0x2DA9,0x0F8C,0x2AE8,
+ 0x08FD,0x3CBE,0x1E91,0x34DF,0x13A8,0x3F33,0x152F,0x3725,
+ 0x1680,0x0244,0x30BE,0x2400,0x1291,0x2CC0,0x1B8B,0x243B,
+ 0x171C,0x326D,0x1A87,0x3AC0,0x0B03,0x1D83,0x3E32,0x1019,
+ 0x1EC8,0x343C,0x06A5,0x1872,0x2BEC,0x1418,0x3029,0x25A6,
+ 0x12D0,0x34A4,0x173D,0x04FB,0x2878,0x1F48,0x1225,0x37D4,
+ 0x180A,0x2ED5,0x1293,0x2661,0x331F,0x0BB2,0x19DB,0x3A1B,
+ 0x1388,0x2B28,0x11CA,0x320D,0x1CFE,0x064A,0x3B9D,0x2028,
+ 0x1A3B,0x33EC,0x0BA0,0x3F3B,0x0F3C,0x3592,0x12C7,0x3DC0,
+ 0x1DA4,0x0937,0x32C0,0x1F71,0x0517,0x29AA,0x18BE,0x0807,
+ 0x1C02,0x2701,0x15A2,0x2942,0x1047,0x38B6,0x0389,0x171F,
+ 0x06D5,0x3B6C,0x1FB9,0x0E9D,0x37A5,0x1B50,0x23C5,0x04F9,
+ 0x25D5,0x0A67,0x3831,0x07A0,0x29AE,0x01B2,0x309C,0x1C86,
+ 0x10DC,0x1E04,0x278D,0x15EB,0x3E6D,0x0DBE,0x377C,0x0311,
+ 0x351B,0x2637,0x15C6,0x29DC,0x1711,0x290E,0x082B,0x39DA,
+ 0x2196,0x031D,0x3DFE,0x1F11,0x01CA,0x32B7,0x2058,0x0394,
+ 0x2996,0x0D6A,0x2B96,0x19C0,0x330C,0x02E3,0x37C6,0x135A,
+ 0x28AD,0x1794,0x01F2,0x1B46,0x2828,0x0D57,0x2A94,0x0645,
+ 0x2553,0x3D05,0x1798,0x09E6,0x3950,0x2081,0x0E14,0x3C90,
+ 0x0366,0x27FA,0x062B,0x21B1,0x2EFD,0x0306,0x22BB,0x35AB,
+ 0x2811,0x0B6A,0x3F94,0x269E,0x0D38,0x33DE,0x0B35,0x1B05,
+ 0x2B8D,0x0F02,0x2D3F,0x1C60,0x3CC4,0x085D,0x312A,0x02EE,
+ 0x27FB,0x0A75,0x34EF,0x00EA,0x175C,0x2C64,0x2327,0x023C,
+ 0x305C,0x0ADB,0x28AC,0x0144,0x39E8,0x1912,0x255B,0x0A9D,
+ 0x3843,0x1199,0x2F63,0x056A,0x2802,0x1D28,0x2D91,0x0BC7,
+ 0x25A1,0x3AE5,0x1232,0x239F,0x3E16,0x0E0D,0x369B,0x206D,
+ 0x3979,0x0A74,0x3369,0x0150,0x2F57,0x225C,0x1D36,0x332F,
+ 0x287F,0x1302,0x356E,0x252C,0x0A8F,0x2D2E,0x1241,0x318B,
+ 0x16BB,0x2ACA,0x117D,0x2F46,0x1A1F,0x38F0,0x0E22,0x280B,
+ 0x36E8,0x07FD,0x3AE7,0x0041,0x1CE2,0x2982,0x11AE,0x2C39,
+ 0x1E76,0x05C6,0x2FAA,0x0C50,0x33C2,0x1066,0x31B4,0x1E3F,
+ 0x1399,0x2DC3,0x10F7,0x23D1,0x3A6B,0x0CE3,0x275A,0x3D86,
+ 0x12AD,0x3621,0x0181,0x3EC3,0x0E2A,0x24C8,0x18EE,0x3259,
+ 0x05FF,0x3853,0x1FC7,0x3BD7,0x0744,0x3303,0x19B3,0x39DF,
+ 0x1EFC,0x0F33,0x2C01,0x1CDA,0x286C,0x007E,0x3011,0x1429,
+ 0x33FE,0x1587,0x3F5C,0x0D9F,0x1B0D,0x39BE,0x16CD,0x054F,
+ 0x147E,0x2EBE,0x2094,0x1065,0x3A3A,0x048D,0x21AB,0x3D9B,
+ 0x02A7,0x38C8,0x09AF,0x3315,0x152B,0x2614,0x1D54,0x3F1E,
+ 0x0F74,0x39BA,0x229D,0x1CF7,0x3CE1,0x0817,0x3797,0x1E43,
+ 0x101D,0x3DE7,0x1596,0x2FBB,0x0E9C,0x2BAB,0x14DD,0x303E,
+ 0x01A2,0x1EA6,0x2450,0x1762,0x3962,0x00D5,0x19A6,0x3757,
+ 0x16AF,0x023D,0x2F8E,0x089B,0x1A6B,0x2D63,0x0036,0x28C7,
+ 0x0F53,0x2CB0,0x16BC,0x3A14,0x1B09,0x081E,0x3C35,0x0D3F,
+ 0x1010,0x2E54,0x0496,0x1967,0x3FAF,0x0174,0x39F1,0x0BBE,
+ 0x3609,0x024C,0x3D99,0x22E9,0x0F5B,0x215D,0x2E94,0x0455,
+ 0x1F19,0x3137,0x1778,0x222F,0x3570,0x08F4,0x3C24,0x2142,
+ 0x0EC0,0x3FCC,0x1BBA,0x3785,0x01FC,0x2026,0x2498,0x053B,
+ 0x3BF8,0x0BE0,0x3368,0x073E,0x19EC,0x2EB9,0x16E0,0x08BC,
+ 0x2404,0x1BF5,0x304B,0x1755,0x2059,0x3A80,0x0B87,0x1CCD,
+ 0x2BEF,0x1282,0x29C8,0x1100,0x2C79,0x1E00,0x0118,0x232C,
+ 0x0A7E,0x34A7,0x0405,0x3FD4,0x1552,0x3711,0x0C0A,0x2516,
+ 0x0931,0x2C71,0x109E,0x262F,0x3486,0x08C0,0x2B0A,0x1E1E,
+ 0x3C9B,0x1913,0x018A,0x30FB,0x22F7,0x19FC,0x2F0D,0x10A2,
+ 0x274E,0x18F3,0x204F,0x23F3,0x01B1,0x2F6F,0x0AF2,0x1686,
+ 0x2C49,0x1A05,0x06A0,0x2F9F,0x0F8B,0x29D6,0x14C8,0x31A7,
+ 0x21AE,0x04FA,0x25B5,0x1AB4,0x3613,0x03FA,0x3EC5,0x0D49,
+ 0x27A6,0x3C65,0x0912,0x3298,0x1478,0x22ED,0x30D2,0x0631,
+ 0x2239,0x2C1D,0x13F4,0x391F,0x2489,0x1147,0x328E,0x1718,
+ 0x3F7A,0x0475,0x24FC,0x10F8,0x2B08,0x2062,0x138B,0x3144,
+ 0x3E2C,0x1D7C,0x217C,0x3006,0x14A4,0x28C2,0x1A41,0x2765,
+ 0x15DF,0x2CA6,0x1BA8,0x058D,0x3B11,0x0921,0x189E,0x3D25,
+ 0x1415,0x2526,0x0EBB,0x2E47,0x12B1,0x2BCA,0x19E8,0x0702,
+ 0x31E5,0x2273,0x0FF0,0x256E,0x1A6D,0x3CEA,0x124C,0x3494,
+ 0x1821,0x2A04,0x1575,0x38F4,0x24FD,0x04C4,0x35B7,0x1D6D,
+ 0x33B9,0x0615,0x259E,0x0A20,0x2DE9,0x0566,0x26D2,0x3F9A,
+ 0x0DA5,0x35DE,0x0423,0x3407,0x0B1D,0x3AE9,0x1495,0x36A3,
+ 0x28B1,0x12AB,0x2D98,0x2240,0x08A8,0x270F,0x1B5F,0x3DA0,
+ 0x1878,0x1FF0,0x384A,0x014B,0x183A,0x30A9,0x1227,0x32AF,
+ 0x0C7D,0x28D2,0x3749,0x168F,0x0A27,0x357A,0x0775,0x1ED6,
+ 0x30D1,0x0600,0x3E53,0x0FE2,0x3837,0x178A,0x354B,0x21F8,
+ 0x045E,0x33A4,0x208D,0x1324,0x38BA,0x040C,0x270B,0x09D9,
+ 0x3AFE,0x1BDA,0x373D,0x08F3,0x23B1,0x1F64,0x12D9,0x3267,
+ 0x1B7E,0x1042,0x2AC0,0x1F10,0x076A,0x3D19,0x0D68,0x2027,
+ 0x3FC4,0x099E,0x3457,0x1F2D,0x04EB,0x3C97,0x1E93,0x07AB,
+ 0x1FC9,0x341E,0x0C5C,0x3D84,0x0574,0x3770,0x2410,0x00B8,
+ 0x17D5,0x086A,0x34C6,0x0C37,0x2A9D,0x0E01,0x32F0,0x0709,
+ 0x3C57,0x09EF,0x1FE9,0x3512,0x161F,0x2673,0x318E,0x0B72,
+ 0x2B9C,0x033A,0x33E2,0x0987,0x3A5C,0x0266,0x22F6,0x394B,
+ 0x179D,0x0117,0x3AB6,0x0A24,0x2EBF,0x075F,0x2A6F,0x0AE4,
+ 0x27B8,0x00F8,0x2F68,0x0A84,0x1DD6,0x3F10,0x1213,0x2ADE,
+ 0x0ECD,0x3C32,0x1347,0x38E2,0x15A8,0x3509,0x1D98,0x0081,
+ 0x23D0,0x1A8B,0x25D6,0x20B5,0x17D0,0x2717,0x2174,0x07E1,
+ 0x18AC,0x3BF1,0x0C96,0x1A22,0x3168,0x102C,0x2E88,0x0279,
+ 0x353F,0x06F7,0x2884,0x1C4E,0x3C60,0x0E13,0x2581,0x0253,
+ 0x393F,0x1F69,0x07CC,0x2606,0x3EA3,0x132C,0x2858,0x3BB0,
+ 0x0DE8,0x3411,0x13DC,0x2C22,0x0CBF,0x2A07,0x0724,0x3BCF,
+ 0x1E0E,0x0E07,0x3D81,0x25CF,0x0BD1,0x326B,0x185B,0x2CA3,
+ 0x1275,0x2998,0x1433,0x2D96,0x113A,0x396F,0x2856,0x06CE,
+ 0x237D,0x371F,0x036C,0x3A9B,0x1BB9,0x25F2,0x1822,0x331B,
+ 0x0F03,0x1C90,0x2671,0x0DD6,0x308D,0x1002,0x2B57,0x1AC0,
+ 0x2E46,0x13D3,0x2817,0x1781,0x3051,0x0CE2,0x1BCD,0x2B5A,
+ 0x36D7,0x2700,0x1191,0x3CFE,0x041D,0x3802,0x11E3,0x2D72,
+ 0x13CC,0x24E5,0x3071,0x1035,0x2BE5,0x00E5,0x1C14,0x3760,
+ 0x1203,0x3F41,0x1952,0x2050,0x26A1,0x1560,0x2DD0,0x0D24,
+ 0x273D,0x2FED,0x14C9,0x28D4,0x1335,0x32FF,0x1D3A,0x3F82,
+ 0x0F9A,0x382F,0x228B,0x1908,0x30D5,0x0D43,0x27E9,0x006E,
+ 0x2FF7,0x1B14,0x2C1C,0x0340,0x2872,0x10CF,0x309F,0x1701,
+ 0x3910,0x0878,0x3DE3,0x09C1,0x3565,0x0325,0x3ECC,0x1C9D,
+ 0x32A2,0x01C2,0x2023,0x37B2,0x0499,0x3A49,0x21A3,0x15BD,
+ 0x2322,0x319B,0x0D11,0x2E06,0x050E,0x1F23,0x2F2B,0x1766,
+ 0x23E8,0x118A,0x2FD7,0x1B21,0x035B,0x2DD8,0x1C7C,0x0091,
+ 0x2468,0x1BB2,0x26BB,0x03D6,0x3B2A,0x12C0,0x27B7,0x148F,
+ 0x3001,0x2309,0x01CF,0x1C6B,0x2E6C,0x140D,0x3E4C,0x0089,
+ 0x3561,0x07A6,0x3F9B,0x0241,0x32E2,0x0A12,0x16E4,0x3D63,
+ 0x1927,0x0C2A,0x2EE4,0x120F,0x3422,0x0B39,0x2E8D,0x03F3,
+ 0x281F,0x38AD,0x017F,0x2AC2,0x180C,0x3572,0x02B7,0x3B39,
+ 0x0B26,0x37FB,0x01B9,0x2BF6,0x0FBA,0x25C5,0x3ABB,0x0AC7,
+ 0x2018,0x029A,0x2ED0,0x18B5,0x24D5,0x1C66,0x235B,0x0022,
+ 0x38A3,0x19CD,0x03D5,0x3ECD,0x0CAF,0x3439,0x226E,0x0762,
+ 0x20C9,0x25D9,0x05AC,0x37E7,0x0B15,0x3E13,0x1E5B,0x3631,
+ 0x08CE,0x1C44,0x36A5,0x04AC,0x3B8A,0x21B4,0x02E6,0x16C3,
+ 0x3084,0x1AF4,0x088C,0x3B2F,0x0378,0x2BA7,0x14B3,0x3A3D,
+ 0x213B,0x0967,0x2263,0x36C7,0x0C4B,0x3CEE,0x079F,0x2B46,
+ 0x0E8A,0x2D97,0x164A,0x2F5F,0x11E4,0x2B24,0x13D6,0x2DF2,
+ 0x0F98,0x25B3,0x2F13,0x1379,0x2949,0x1D1D,0x07A2,0x3B92,
+ 0x0E4D,0x1DA9,0x3E58,0x164C,0x2238,0x3A13,0x0AD8,0x3637,
+ 0x05AD,0x3D6A,0x0B33,0x3448,0x219A,0x0ECE,0x3924,0x1800,
+ 0x2E79,0x0899,0x362C,0x195B,0x2241,0x322E,0x0010,0x2B2A,
+ 0x0A00,0x34B5,0x192B,0x3AB2,0x065A,0x2A96,0x0D01,0x24C0,
+ 0x1097,0x203A,0x2412,0x1989,0x264B,0x1D13,0x2B36,0x001F,
+ 0x3536,0x24FB,0x15DD,0x2A0B,0x01D4,0x28DF,0x13A5,0x3BA9,
+ 0x210A,0x10D3,0x1E52,0x3EAF,0x07D8,0x1C4A,0x2972,0x153F,
+ 0x263F,0x1226,0x3165,0x1D42,0x3526,0x03BD,0x15CE,0x30DD,
+ 0x1697,0x3BCC,0x22A2,0x0988,0x339F,0x0796,0x3F39,0x1ECD,
+ 0x0E47,0x33DF,0x20AC,0x1540,0x2976,0x1292,0x3A2B,0x19B9,
+ 0x3295,0x0ED8,0x2D44,0x1186,0x2934,0x1A38,0x0527,0x1442,
+ 0x3186,0x245A,0x1112,0x2C03,0x19C4,0x0D06,0x37DB,0x2729,
+ 0x05CE,0x2CC5,0x1FFD,0x1289,0x3314,0x1753,0x3534,0x07BD,
+ 0x189A,0x3FCF,0x105A,0x19EE,0x2D06,0x1400,0x246A,0x1984,
+ 0x36F6,0x1FFE,0x021B,0x1CC2,0x3984,0x0CBB,0x28FA,0x05B4,
+ 0x35AF,0x197D,0x0840,0x3E43,0x0D73,0x35D9,0x16D6,0x23B7,
+ 0x302D,0x03C2,0x277C,0x09C6,0x31EB,0x13BF,0x26E5,0x1D2D,
+ 0x2D71,0x14D9,0x2A55,0x127D,0x3B0F,0x1E80,0x0BA1,0x34FC,
+ 0x10BA,0x3FD3,0x1564,0x2FCA,0x0A50,0x1D68,0x3771,0x1059,
+ 0x3F60,0x157D,0x28A5,0x0F19,0x35D7,0x2184,0x1A4C,0x3373,
+ 0x1C0C,0x3A50,0x0C4A,0x37C1,0x0582,0x349D,0x0DAB,0x2F45,
+ 0x20A2,0x05E3,0x39B1,0x0D4E,0x3E88,0x1011,0x35E2,0x1B2B,
+ 0x0984,0x3516,0x28F1,0x0E57,0x23FC,0x3A89,0x0A8C,0x3654,
+ 0x05F3,0x3D2D,0x2243,0x08BF,0x19E3,0x3FD4,0x22E7,0x0748,
+ 0x325A,0x0D82,0x1B95,0x3997,0x1580,0x2BC1,0x135C,0x26CA,
+ 0x2F56,0x0846,0x279A,0x395C,0x05E2,0x2EDD,0x0A29,0x2B37,
+ 0x020F,0x3B9A,0x1B42,0x3586,0x00A4,0x33A6,0x1F8E,0x3C8A,
+ 0x18C4,0x034C,0x3EDA,0x0A62,0x2666,0x3255,0x11EC,0x20C4,
+ 0x35FF,0x0E52,0x3DF8,0x2544,0x0BB3,0x2941,0x0F65,0x26F2,
+ 0x3225,0x0440,0x23DF,0x337C,0x01D8,0x1E9F,0x3194,0x0482,
+ 0x2695,0x0BEF,0x3C92,0x250D,0x0681,0x3344,0x1EC6,0x3D33,
+ 0x0D3B,0x2109,0x31E9,0x11D7,0x2B98,0x00C8,0x2D4F,0x0991,
+ 0x1E5E,0x38ED,0x1207,0x36BD,0x1C10,0x0029,0x3F6F,0x091C,
+ 0x1A13,0x37EA,0x0119,0x275D,0x0687,0x3038,0x228A,0x0522,
+ 0x2AFF,0x2036,0x02BC,0x1F09,0x3DBE,0x11D6,0x2556,0x20B8,
+ 0x04A5,0x2DDE,0x085C,0x30B1,0x1E84,0x0334,0x3C4E,0x088D,
+ 0x2E50,0x044A,0x2912,0x1007,0x2C42,0x15F1,0x3B13,0x1E11,
+ 0x0F61,0x31AB,0x1A73,0x26EB,0x1DB5,0x310B,0x0705,0x24D0,
+ 0x2FF9,0x178E,0x05C9,0x36EB,0x1FA9,0x0F44,0x2D92,0x190D,
+ 0x27E6,0x1EE0,0x10BF,0x3943,0x2A84,0x0A54,0x2F2E,0x1D16,
+ 0x059A,0x217F,0x2CCF,0x01A3,0x2869,0x0B31,0x315E,0x035C,
+ 0x1ABF,0x3D3E,0x0F36,0x1DDD,0x244E,0x13E0,0x3D65,0x16A4,
+ 0x2807,0x1EBD,0x08A3,0x1FF4,0x2A54,0x1358,0x2E52,0x0808,
+ 0x2298,0x2AA7,0x1638,0x30CA,0x1FBF,0x0016,0x3D8D,0x09AC,
+ 0x1CD5,0x2B42,0x01DB,0x1BC2,0x3927,0x053F,0x3D40,0x1E27,
+ 0x1159,0x1F76,0x394A,0x0E5D,0x21D5,0x3E41,0x0F22,0x3A1F,
+ 0x124D,0x32D6,0x20EC,0x0DDA,0x2CF1,0x1AA3,0x0010,0x1737,
+ 0x27CD,0x3926,0x039D,0x248E,0x1B8E,0x3C89,0x190B,0x3481,
+ 0x0F6E,0x2270,0x2CEB,0x06A3,0x2548,0x2FBC,0x157F,0x2BCB,
+ 0x21F3,0x0E7A,0x3223,0x18B8,0x2B64,0x1323,0x3CDD,0x1D89,
+ 0x0E50,0x31D4,0x1AA9,0x29B7,0x0597,0x2C62,0x090E,0x3A53,
+ 0x1DD4,0x1228,0x38D9,0x2340,0x0C83,0x2CE0,0x1189,0x27AF,
+ 0x0E6A,0x3647,0x171E,0x3C21,0x1F1D,0x08C5,0x2353,0x0386,
+ 0x3FD4,0x2147,0x0945,0x36B5,0x0466,0x18C6,0x2B9B,0x1630,
+ 0x0083,0x3D55,0x1D21,0x255C,0x036D,0x306C,0x1CD3,0x00E2,
+ 0x33AD,0x09D6,0x2FEB,0x02F9,0x15FD,0x2565,0x126D,0x38B8,
+ 0x19A3,0x3E86,0x12F3,0x3593,0x173C,0x3AC8,0x108C,0x3777,
+ 0x23A9,0x147B,0x3261,0x0187,0x3718,0x1F51,0x042A,0x332C,
+ 0x0D74,0x365F,0x14FD,0x3E5A,0x0C8A,0x39CC,0x0F3A,0x1DFF,
+ 0x3B0A,0x109C,0x3759,0x064E,0x151C,0x2E8E,0x22B5,0x17C5,
+ 0x3A47,0x10E1,0x23BF,0x31BF,0x133A,0x2DB5,0x232B,0x013F,
+ 0x3780,0x29E0,0x0802,0x1D43,0x2E63,0x06DC,0x2A5F,0x1C82,
+ 0x2EB5,0x074F,0x1860,0x3787,0x131F,0x3B58,0x1FAB,0x2FB4,
+ 0x091A,0x14CB,0x1EF9,0x3085,0x0C58,0x2641,0x0569,0x20CD,
+ 0x3F24,0x0218,0x1CC9,0x3C06,0x181C,0x0A7D,0x35B8,0x0489,
+ 0x3B64,0x1ED9,0x0849,0x3EDC,0x0A8E,0x337B,0x01EE,0x265A,
+ 0x38BD,0x0799,0x3BEB,0x0F78,0x364C,0x170A,0x33AE,0x139E,
+ 0x3131,0x224C,0x0121,0x189B,0x3EA7,0x154E,0x32BA,0x17AA,
+ 0x2AF1,0x1493,0x2507,0x011B,0x2E76,0x1BB1,0x3140,0x175B,
+ 0x261C,0x131E,0x2CA9,0x14B8,0x242A,0x3C81,0x0A04,0x3801,
+ 0x238D,0x1122,0x3286,0x12D6,0x38C2,0x1497,0x3C1F,0x21F7,
+ 0x167E,0x3E09,0x1B67,0x2988,0x2078,0x3C5F,0x0057,0x27D9,
+ 0x31EC,0x0B92,0x267A,0x0E64,0x2E14,0x0620,0x2546,0x1F03,
+ 0x06E9,0x2D66,0x0C65,0x2918,0x10B3,0x2FEF,0x239B,0x1024,
+ 0x2A4F,0x0633,0x2DF5,0x182F,0x26D1,0x057B,0x21DA,0x34A5,
+ 0x0184,0x2D56,0x0C52,0x23EB,0x3C41,0x1AC3,0x07E7,0x313D,
+ 0x03EB,0x2D1C,0x1A37,0x06BA,0x36D1,0x09D1,0x1965,0x311E,
+ 0x1656,0x0BEC,0x22C3,0x3B80,0x12DA,0x3597,0x1815,0x00DF,
+ 0x22B2,0x3F64,0x26F8,0x035E,0x2B06,0x0B60,0x3434,0x0FEE,
+ 0x3FAC,0x237B,0x36E1,0x06DD,0x39B7,0x1612,0x327D,0x0B6D,
+ 0x2839,0x154F,0x2AC1,0x10E3,0x34BC,0x2408,0x0F40,0x28DA,
+ 0x10F5,0x2F82,0x24DF,0x119B,0x2877,0x1717,0x2CFB,0x1441,
+ 0x1F52,0x248F,0x17C0,0x2D93,0x0B51,0x279B,0x0229,0x2939,
+ 0x09C3,0x3C78,0x1C53,0x33FB,0x07A9,0x2566,0x01FD,0x3844,
+ 0x0621,0x3F15,0x0B86,0x33EF,0x11AB,0x3DB2,0x0D1D,0x38D4,
+ 0x07EA,0x34CD,0x012B,0x3AEA,0x0C76,0x20A7,0x2D4A,0x1C01,
+ 0x0B91,0x2F07,0x0722,0x29E1,0x0A3B,0x275E,0x0673,0x2C6D,
+ 0x0BE3,0x24BC,0x055D,0x37C2,0x0AFF,0x140B,0x3471,0x1549,
+ 0x1F99,0x2C66,0x03E9,0x3BEF,0x2226,0x1BF2,0x3DF4,0x115B,
+ 0x3608,0x18E8,0x38B9,0x1658,0x3B3A,0x0AEF,0x1AD3,0x3F90,
+ 0x15F8,0x3852,0x1DC4,0x028E,0x3113,0x1BBC,0x2C8A,0x0BA8,
+ 0x27C3,0x16E7,0x3429,0x1C75,0x0DA8,0x353D,0x29A6,0x1349,
+ 0x387B,0x0F1A,0x3EB9,0x25E6,0x1531,0x2AF2,0x21A8,0x0DCC,
+ 0x3E90,0x1BF7,0x33F6,0x02D7,0x2BC6,0x0ACD,0x2617,0x388B,
+ 0x15A7,0x0A02,0x1B60,0x30D4,0x165D,0x258F,0x04F8,0x2990,
+ 0x1B4A,0x025A,0x1805,0x2A7E,0x12E1,0x2916,0x1049,0x387A,
+ 0x19DF,0x33BB,0x08C4,0x3063,0x030E,0x1BE8,0x3DCC,0x15E8,
+ 0x38F8,0x029F,0x1B77,0x3761,0x04D5,0x3A0C,0x0DB4,0x34C7,
+ 0x0BD0,0x306A,0x00DD,0x1D15,0x39D1,0x117F,0x3D30,0x1B16,
+ 0x2EE0,0x0E1F,0x2B18,0x107C,0x1F5C,0x3B06,0x1AA8,0x21FC,
+ 0x2F61,0x12B9,0x2971,0x18DE,0x273B,0x059E,0x2A86,0x1B1A,
+ 0x2DDF,0x1107,0x27D5,0x1962,0x3232,0x1576,0x02C4,0x3F23,
+ 0x27A4,0x1391,0x34C8,0x1B11,0x3F9F,0x11E2,0x362E,0x1838,
+ 0x3A39,0x11A6,0x32FC,0x1940,0x230F,0x2DB6,0x1E37,0x07F2,
+ 0x3A77,0x11D0,0x33AA,0x1934,0x0982,0x30C7,0x00AA,0x29D5,
+ 0x0AB7,0x264E,0x02BF,0x2B59,0x0684,0x253C,0x34F9,0x0051,
+ 0x285A,0x0B52,0x24CA,0x3D00,0x1120,0x3715,0x12C2,0x3FD4,
+ 0x1457,0x2A02,0x04FE,0x3991,0x2612,0x0245,0x1F15,0x2448,
+ 0x0925,0x27D6,0x1E6F,0x0C5E,0x3BC2,0x031C,0x34B2,0x1ECB,
+ 0x05B7,0x2D46,0x1023,0x27AB,0x1601,0x3CCB,0x2092,0x0D4B,
+ 0x326F,0x1F12,0x3A70,0x10B2,0x3652,0x0E6E,0x3C25,0x1158,
+ 0x2EDA,0x1E23,0x3379,0x0DA6,0x3EB0,0x0176,0x2E67,0x22DD,
+ 0x04D0,0x2008,0x3960,0x0DEB,0x2144,0x2DF9,0x0655,0x2B8F,
+ 0x0C24,0x32E5,0x23A1,0x14C7,0x29A7,0x1A6E,0x2598,0x0401,
+ 0x3E85,0x1331,0x3827,0x21DF,0x0706,0x31FD,0x2001,0x05EE,
+ 0x233B,0x352E,0x039F,0x26BD,0x3054,0x0D7D,0x2BF9,0x0918,
+ 0x1E14,0x3571,0x0327,0x3A35,0x0ECC,0x3624,0x201D,0x0268,
+ 0x1EA9,0x3BED,0x0A87,0x3769,0x0650,0x25A0,0x30DC,0x17DA,
+ 0x04FD,0x3A5E,0x2037,0x01A1,0x1EAE,0x314A,0x0DEC,0x2A0F,
+ 0x0263,0x2D34,0x2146,0x090C,0x3EFB,0x0458,0x3747,0x1A99,
+ 0x020E,0x2825,0x0DB8,0x2B91,0x2073,0x12BD,0x391C,0x16C7,
+ 0x3469,0x1230,0x3EFC,0x1F1A,0x32BE,0x1CF6,0x0CE8,0x2F3D,
+ 0x1284,0x3187,0x193F,0x09E3,0x23BE,0x0750,0x25AB,0x03CA,
+ 0x3246,0x0E60,0x2EFC,0x0AF0,0x1955,0x3F2A,0x0FE7,0x349C,
+ 0x18FC,0x2F94,0x00C2,0x327A,0x1862,0x2EDC,0x0B3D,0x39FB,
+ 0x2362,0x1721,0x3AB9,0x09C0,0x328A,0x052C,0x1A36,0x2E18,
+ 0x062F,0x2A25,0x02A0,0x2823,0x07E6,0x2CA2,0x1973,0x32B3,
+ 0x09FE,0x3AAC,0x0824,0x2579,0x1A92,0x3502,0x1E8B,0x0ACB,
+ 0x3D97,0x138C,0x24C5,0x1B07,0x3C9E,0x0EB9,0x36EA,0x18F5,
+ 0x26AC,0x1F70,0x07F7,0x3416,0x0CC9,0x3D6E,0x1263,0x2A98,
+ 0x1674,0x2866,0x0F13,0x2BFC,0x1A54,0x251C,0x1459,0x3035,
+ 0x10A8,0x17D7,0x39A6,0x19BD,0x0548,0x36A7,0x1689,0x3D47,
+ 0x10EA,0x20BD,0x263A,0x165C,0x2D7F,0x0A2C,0x2C14,0x16C4,
+ 0x2FDA,0x12A6,0x2911,0x165F,0x2B7D,0x1C2D,0x0DEF,0x370E,
+ 0x245F,0x0FA8,0x2ACB,0x187E,0x2D67,0x04C1,0x25E8,0x15B5,
+ 0x3532,0x1BFA,0x0EE5,0x30B9,0x16B2,0x2723,0x0FDE,0x29F7,
+ 0x3D5D,0x1E85,0x37B4,0x052B,0x3FD4,0x2440,0x0D3A,0x2BD6,
+ 0x0572,0x2849,0x1B4B,0x0959,0x139C,0x3CB2,0x1879,0x2201,
+ 0x3C0D,0x0493,0x3955,0x1D72,0x35CB,0x1738,0x3AC9,0x2072,
+ 0x19FE,0x3CAF,0x1C1D,0x214C,0x31DB,0x13F2,0x2E9E,0x047F,
+ 0x3A9C,0x1500,0x3789,0x24D8,0x0E04,0x1C70,0x28D3,0x1420,
+ 0x30A7,0x0034,0x1C3F,0x2AB9,0x1361,0x249B,0x375E,0x1076,
+ 0x3D93,0x175F,0x34E8,0x1425,0x3E6C,0x1D75,0x0122,0x211D,
+ 0x277A,0x15EE,0x2065,0x2FF3,0x05BE,0x240A,0x14EE,0x2F3F,
+ 0x0F2A,0x318A,0x009B,0x2C0F,0x0871,0x28B5,0x1D73,0x013E,
+ 0x3FD4,0x0FCE,0x3859,0x135F,0x2F14,0x006A,0x3190,0x0A19,
+ 0x2E73,0x0580,0x336A,0x0A76,0x3F8A,0x0365,0x3688,0x0C59,
+ 0x3E1C,0x2157,0x08FA,0x31B1,0x22E1,0x0C0E,0x2A28,0x00C4,
+ 0x2DF1,0x0A93,0x3C93,0x0797,0x1DD0,0x385F,0x105C,0x3F3E,
+ 0x0889,0x359A,0x03BF,0x3DCF,0x0CEF,0x3461,0x21D8,0x082C,
+ 0x1D85,0x32DC,0x0BFC,0x3C59,0x1505,0x377E,0x0CD7,0x3E73,
+ 0x06F9,0x23E0,0x3B99,0x014C,0x2AEF,0x0C35,0x3364,0x13AD,
+ 0x1C21,0x08F9,0x1651,0x2FF8,0x1B0C,0x02DE,0x3226,0x1EAA,
+ 0x3BAF,0x0EC3,0x366B,0x20E1,0x2ADD,0x039A,0x2D7B,0x0870,
+ 0x1C3C,0x2B9A,0x0D40,0x28E3,0x0128,0x2D19,0x0AA1,0x3078,
+ 0x085B,0x24A1,0x0093,0x37DC,0x06D2,0x2734,0x0C32,0x2BBE,
+ 0x2208,0x0D48,0x1FC3,0x067B,0x2246,0x3FC2,0x03FF,0x36F4,
+ 0x0F59,0x228E,0x342D,0x071D,0x3F50,0x1CE9,0x01B5,0x287C,
+ 0x211E,0x0C4D,0x1C18,0x2D5D,0x0EF5,0x2397,0x3A40,0x13CF,
+ 0x355C,0x03E5,0x3CBD,0x0E1E,0x37DF,0x0C07,0x3B73,0x0356,
+ 0x2800,0x18D7,0x3A60,0x164D,0x363F,0x1240,0x3272,0x22EB,
+ 0x16FC,0x2D2A,0x045A,0x2AD5,0x1DEA,0x2444,0x1858,0x36B2,
+ 0x1BF0,0x3B4E,0x18D6,0x2720,0x11C4,0x2D2F,0x16A8,0x28FE,
+ 0x0046,0x2BB5,0x1E7E,0x0F0F,0x3FC9,0x1DB9,0x1219,0x3883,
+ 0x14F0,0x328F,0x2335,0x1941,0x3114,0x0060,0x1F06,0x25D8,
+ 0x199A,0x23BB,0x1F2C,0x100D,0x2F76,0x00A3,0x39A1,0x1A43,
+ 0x3E4A,0x0284,0x2E82,0x1F1E,0x086F,0x1FE7,0x2928,0x1795,
+ 0x2FB5,0x0B53,0x1F0D,0x34AD,0x1105,0x39C5,0x05D4,0x2FD4,
+ 0x2605,0x35DA,0x211C,0x0EE8,0x26F0,0x370A,0x150F,0x0832,
+ 0x1A66,0x298B,0x013C,0x3101,0x1583,0x39AA,0x0F84,0x3636,
+ 0x2561,0x14D5,0x2FD9,0x11F9,0x33EE,0x1B12,0x266F,0x1677,
+ 0x38BF,0x0F73,0x2CDC,0x12E9,0x2B14,0x16F4,0x3B5E,0x1D1C,
+ 0x084B,0x3D53,0x29FA,0x1782,0x2F2D,0x10F1,0x2C92,0x0AAC,
+ 0x1E06,0x3C4B,0x1117,0x2833,0x0E35,0x2DA4,0x18B1,0x3230,
+ 0x07A7,0x3972,0x2748,0x0472,0x3815,0x0B07,0x2AE4,0x0725,
+ 0x1C85,0x2A32,0x16BF,0x2C53,0x1208,0x26CB,0x1A1E,0x3262,
+ 0x1198,0x2AF8,0x0CA9,0x25CB,0x0421,0x2DA3,0x0B28,0x3AB0,
+ 0x072D,0x1D17,0x3C74,0x19BC,0x0986,0x3AA7,0x0632,0x2156,
+ 0x0BE8,0x23DA,0x0188,0x37C3,0x20F6,0x07BB,0x3C0F,0x0FB2,
+ 0x3568,0x13C3,0x3A92,0x25B1,0x02AF,0x2EEC,0x2210,0x0760,
+ 0x2B84,0x1C65,0x040D,0x379E,0x0F7A,0x2A30,0x3A99,0x0521,
+ 0x33C1,0x0B55,0x3941,0x250F,0x15E3,0x2A80,0x12E8,0x2D09,
+ 0x1178,0x26C2,0x1448,0x368A,0x19F2,0x3AFD,0x0011,0x3325,
+ 0x1352,0x2B9E,0x14B7,0x25B8,0x1B41,0x21D0,0x2CA8,0x0CFD,
+ 0x159B,0x008D,0x297B,0x3A03,0x0703,0x18FA,0x2D1E,0x1FC2,
+ 0x37FE,0x140C,0x3DB3,0x1E1B,0x08E8,0x1F9B,0x2940,0x17C7,
+ 0x01E7,0x380B,0x07CA,0x3EE6,0x2199,0x0DBD,0x3D4F,0x0302,
+ 0x1D60,0x335C,0x1841,0x3E42,0x0D91,0x33E1,0x019A,0x302B,
+ 0x1A1B,0x23AC,0x02B3,0x3949,0x0906,0x35A6,0x194A,0x217A,
+ 0x2BA0,0x05F1,0x2F78,0x1ED7,0x3682,0x0B25,0x3BA4,0x118B,
+ 0x1DFC,0x235D,0x11D2,0x301D,0x1D09,0x33AC,0x1705,0x21FD,
+ 0x3DC8,0x0AA9,0x3653,0x005A,0x1F21,0x30EF,0x0784,0x214E,
+ 0x3F8B,0x05F7,0x3566,0x142E,0x3E0E,0x1B88,0x2711,0x15C1,
+ 0x215F,0x34D7,0x0ED7,0x25C4,0x321E,0x0FB9,0x2814,0x3EF8,
+ 0x1593,0x2F3B,0x1E16,0x0CE5,0x30E6,0x1970,0x1FA6,0x2680,
+ 0x09DD,0x312F,0x06AE,0x1C35,0x36F9,0x135E,0x3B84,0x1EA1,
+ 0x0C9E,0x3EE1,0x13D5,0x280A,0x1F8D,0x0BB4,0x17AE,0x2935,
+ 0x1483,0x2E23,0x1AF9,0x05F2,0x3D06,0x0A66,0x262E,0x0691,
+ 0x316D,0x0AA3,0x29B8,0x057E,0x2B27,0x1103,0x2782,0x0F5E,
+ 0x3D77,0x03FD,0x382C,0x07FA,0x3F74,0x0369,0x1896,0x3B18,
+ 0x2031,0x3E22,0x173F,0x0B6E,0x2267,0x3CD7,0x0C94,0x32DD,
+ 0x045D,0x2618,0x0D88,0x2CA4,0x195A,0x342C,0x05A8,0x3E77,
+ 0x222A,0x0E83,0x273C,0x1EDB,0x0528,0x2BD4,0x1424,0x2F8D,
+ 0x2435,0x0972,0x29A8,0x04B6,0x255D,0x146E,0x2931,0x0F2F,
+ 0x35DB,0x137E,0x32DA,0x11D4,0x1F04,0x255E,0x016E,0x3DDA,
+ 0x0CED,0x37ED,0x1A58,0x02DF,0x1779,0x2A6E,0x04CF,0x26B1,
+ 0x3629,0x0076,0x3F17,0x19CC,0x08B9,0x264D,0x024B,0x2DF4,
+ 0x0F3E,0x289D,0x1455,0x2464,0x3E6B,0x132D,0x371E,0x1BE5,
+ 0x0B68,0x2DDD,0x1006,0x290A,0x1EFD,0x08E6,0x3976,0x032B,
+ 0x2A6A,0x0A61,0x3059,0x01FE,0x174D,0x3735,0x1D39,0x0321,
+ 0x330F,0x0898,0x3DAE,0x238F,0x14ED,0x398C,0x026F,0x3742,
+ 0x1B43,0x2417,0x174F,0x2D5A,0x0ACA,0x2830,0x04C0,0x3454,
+ 0x22FD,0x1816,0x3357,0x06D3,0x3D1D,0x23C0,0x352C,0x0985,
+ 0x3E3D,0x01C3,0x209D,0x30F6,0x170D,0x3403,0x1416,0x3BD2,
+ 0x1B47,0x35D3,0x0F0B,0x3CC6,0x1CB0,0x33F0,0x0940,0x2ECF,
+ 0x1D0F,0x2430,0x10C4,0x2F65,0x0E5F,0x32C9,0x2894,0x0847,
+ 0x24E3,0x0E15,0x324D,0x1D5F,0x348B,0x01D9,0x28B2,0x131A,
+ 0x2AFE,0x119F,0x3372,0x0326,0x3AD4,0x0CB4,0x2EA3,0x10F0,
+ 0x30BD,0x19CB,0x3300,0x13B9,0x3A59,0x0B30,0x3639,0x2021,
+ 0x126A,0x3BA7,0x1614,0x3554,0x0B37,0x397A,0x1B7C,0x3F84,
+ 0x062E,0x2C6F,0x0A6E,0x270D,0x3B27,0x0ED2,0x3177,0x12C1,
+ 0x2772,0x1428,0x3349,0x2063,0x3E29,0x0FB7,0x34B9,0x1F75,
+ 0x0BC2,0x2BAF,0x0EAF,0x24B5,0x3BD1,0x0FC8,0x36D2,0x1C40,
+ 0x38FF,0x04EA,0x330E,0x1AFF,0x0953,0x2CD5,0x0227,0x29E8,
+ 0x227A,0x185C,0x3C1E,0x01A6,0x2FAB,0x18DF,0x232F,0x3377,
+ 0x1095,0x3E39,0x1CAC,0x2214,0x2D74,0x07A8,0x2BA4,0x19FA,
+ 0x2763,0x2009,0x1372,0x34CE,0x05FB,0x2282,0x2E8A,0x1300,
+ 0x2A8A,0x03FC,0x3CD3,0x101B,0x32CA,0x16DD,0x29D4,0x0EBA,
+ 0x2C8F,0x01BD,0x2177,0x2E27,0x1605,0x030F,0x1B91,0x2B3F,
+ 0x0EAB,0x2479,0x387C,0x10DF,0x2BBD,0x0372,0x28ED,0x1FB1,
+ 0x016C,0x1E53,0x2DC7,0x22DC,0x033C,0x16E6,0x3918,0x196E,
+ 0x061D,0x31AD,0x20C8,0x191C,0x26DD,0x1ECF,0x122C,0x33FC,
+ 0x1A20,0x2D0B,0x053E,0x280C,0x0EA7,0x2F2C,0x1CCC,0x38D5,
+ 0x0A68,0x3ED5,0x2145,0x1BC1,0x26C0,0x161B,0x243C,0x1E6C,
+ 0x0942,0x391A,0x0359,0x2CFF,0x1001,0x28A0,0x1A7A,0x06FE,
+ 0x313F,0x023E,0x2835,0x10C8,0x2A8B,0x1FEF,0x038F,0x1EBC,
+ 0x287B,0x1566,0x3CD1,0x1B02,0x0552,0x2D33,0x1C94,0x38F3,
+ 0x046E,0x2A11,0x0A1F,0x2E40,0x0815,0x1D37,0x244D,0x14AB,
+ 0x3A65,0x168C,0x32D1,0x03F5,0x2020,0x306E,0x15D6,0x09B3,
+ 0x22F2,0x2F85,0x1194,0x39DE,0x21C4,0x1036,0x3AF9,0x1547,
+ 0x3466,0x0518,0x1CC8,0x32E1,0x12D1,0x3676,0x0C00,0x16AA,
+ 0x2C9A,0x1950,0x06F5,0x3627,0x1427,0x3BE7,0x11F8,0x37CF,
+ 0x0DC3,0x39F8,0x042C,0x1C76,0x2C3F,0x1869,0x0C8C,0x3F32,
+ 0x0E84,0x34C5,0x1D7D,0x26F1,0x013D,0x3E9B,0x0964,0x37EC,
+ 0x127C,0x3B15,0x1AF0,0x0AC6,0x370D,0x1E42,0x3BA0,0x1235,
+ 0x324E,0x19EF,0x083E,0x2697,0x0CD0,0x39FC,0x1026,0x3763,
+ 0x17C2,0x3ECF,0x07D2,0x162C,0x3070,0x2133,0x0E25,0x2A45,
+ 0x3AA1,0x0C0C,0x36DE,0x010D,0x3CF1,0x099A,0x38E5,0x02A2,
+ 0x3BEC,0x0AE7,0x3838,0x1362,0x3F83,0x1876,0x0774,0x220D,
+ 0x3028,0x17FD,0x06A2,0x2EF0,0x0A0D,0x35C2,0x00DE,0x3B89,
+ 0x2AE6,0x1690,0x2505,0x1B6C,0x3745,0x002E,0x3F68,0x223D,
+ 0x0EDB,0x376A,0x1CEC,0x3DC9,0x0768,0x3390,0x17EF,0x2ECC,
+ 0x0E02,0x324B,0x0069,0x22FB,0x374C,0x1627,0x089D,0x22AE,
+ 0x3068,0x15CD,0x3B1C,0x1220,0x28FC,0x397F,0x0216,0x2FC2,
+ 0x068A,0x28C9,0x110A,0x3881,0x1832,0x063F,0x29BB,0x3FD1,
+ 0x18E2,0x0BCD,0x2B72,0x0310,0x30AA,0x1E46,0x0812,0x2BC3,
+ 0x0D02,0x392D,0x2525,0x0DCB,0x296F,0x05B9,0x3F4F,0x20AF,
+ 0x0024,0x38FA,0x2564,0x1013,0x293D,0x0C1A,0x267F,0x00EE,
+ 0x2E13,0x17AF,0x2313,0x3291,0x0FE8,0x3ADE,0x20AA,0x0679,
+ 0x2CAD,0x1924,0x0833,0x38DA,0x206F,0x112C,0x301F,0x1A27,
+ 0x260C,0x085F,0x3138,0x2372,0x1340,0x2D1F,0x07E3,0x27DF,
+ 0x0464,0x36A6,0x1CD2,0x3FA5,0x1882,0x2185,0x3214,0x0B70,
+ 0x2C35,0x12B5,0x24FF,0x3664,0x0C33,0x3FD4,0x2554,0x0201,
+ 0x1EE9,0x263B,0x1691,0x2D78,0x0FBE,0x2BD0,0x1CA1,0x2294,
+ 0x142A,0x29E7,0x195D,0x2E49,0x0413,0x2473,0x3A56,0x15F0,
+ 0x0010,0x2315,0x3551,0x0F70,0x3D41,0x1A26,0x2808,0x0D5A,
+ 0x2051,0x06EF,0x3D9A,0x0C15,0x215A,0x3248,0x1149,0x2E9A,
+ 0x18CF,0x258B,0x0BDE,0x1975,0x3015,0x1317,0x3835,0x07F8,
+ 0x3A6C,0x218A,0x1852,0x2B67,0x0B00,0x2076,0x3EFE,0x17DF,
+ 0x0B76,0x351A,0x00CF,0x23E3,0x1F58,0x0E70,0x2B38,0x1306,
+ 0x3D4E,0x18DB,0x2E8C,0x0CA2,0x27C1,0x3533,0x2134,0x00F2,
+ 0x1FA0,0x3573,0x1723,0x27BE,0x13EF,0x3D76,0x25EA,0x1307,
+ 0x2F6C,0x20D8,0x09C4,0x3B33,0x1F8C,0x2EC8,0x111C,0x2756,
+ 0x323E,0x0E0A,0x2005,0x3D1E,0x0380,0x2F75,0x16C6,0x3452,
+ 0x21E2,0x090D,0x3CCF,0x0B5F,0x29E9,0x00AB,0x3559,0x25E3,
+ 0x1422,0x322A,0x24D9,0x0EF3,0x2D22,0x1BEC,0x23F9,0x035A,
+ 0x3519,0x1FE1,0x1573,0x3F76,0x00EB,0x219C,0x3980,0x1662,
+ 0x2A03,0x0FC4,0x2CBD,0x0038,0x30A6,0x0700,0x1D62,0x26F5,
+ 0x04F1,0x33A0,0x0DC2,0x1E0D,0x28A6,0x06CB,0x1C2C,0x3558,
+ 0x0D89,0x3C51,0x0757,0x1D9B,0x34DE,0x177D,0x06C3,0x3129,
+ 0x355B,0x00F4,0x269F,0x0CD6,0x36B0,0x1BE0,0x094B,0x341C,
+ 0x1D65,0x3C3B,0x12EB,0x2B6D,0x1D2A,0x0603,0x3318,0x14B2,
+ 0x2975,0x34F0,0x10D0,0x2F58,0x05DB,0x1DDA,0x2B58,0x093A,
+ 0x3442,0x0452,0x39D8,0x2B02,0x00E8,0x2462,0x0C84,0x276B,
+ 0x1DE7,0x0506,0x2FB6,0x1249,0x346E,0x266D,0x0242,0x2DD3,
+ 0x1D81,0x2503,0x199D,0x3FD0,0x0731,0x35E6,0x1AA2,0x339A,
+ 0x0A90,0x25B7,0x0193,0x3E40,0x1DC9,0x0910,0x1436,0x3A6D,
+ 0x26E7,0x066C,0x3C15,0x0AB9,0x34B4,0x048C,0x1B33,0x3863,
+ 0x00BE,0x193B,0x313C,0x161D,0x02B6,0x1A94,0x3506,0x0863,
+ 0x1A03,0x2BE1,0x054A,0x1BDB,0x32E8,0x14AD,0x3FA3,0x0D46,
+ 0x1AE5,0x2CC7,0x1476,0x27EA,0x1625,0x307C,0x1A67,0x0B21,
+ 0x3BB4,0x0211,0x1B6B,0x343E,0x0530,0x39BC,0x0C41,0x3DA2,
+ 0x0DD5,0x2EAF,0x0596,0x1C42,0x333C,0x183F,0x0DBC,0x346F,
+ 0x0BD4,0x3C8E,0x21FA,0x15E4,0x2391,0x3B70,0x0EDD,0x2FE2,
+ 0x19AB,0x20F7,0x3B2C,0x00B5,0x385E,0x151E,0x2E04,0x1243,
+ 0x2923,0x158C,0x3103,0x246F,0x049F,0x3ECA,0x20F2,0x106C,
+ 0x0BE9,0x3DD7,0x1610,0x2B13,0x125E,0x2F9C,0x25EB,0x1063,
+ 0x2D0D,0x0BEA,0x2722,0x027E,0x30FF,0x21B3,0x1844,0x3FBD,
+ 0x03D2,0x1E7F,0x26A8,0x1799,0x3C20,0x0D96,0x237E,0x3AF8,
+ 0x133D,0x2881,0x1E69,0x10A3,0x1F6D,0x3C9D,0x16AB,0x2E05,
+ 0x1067,0x3E91,0x0D35,0x3901,0x06F2,0x1971,0x32AE,0x0DA0,
+ 0x3BB2,0x0627,0x30F1,0x0CCC,0x297A,0x1E7B,0x03AF,0x1FEB,
+ 0x2AB8,0x11F5,0x31EA,0x2236,0x1031,0x3792,0x295B,0x1ACC,
+ 0x0CEC,0x2EBD,0x15CC,0x2A3C,0x10CB,0x23AE,0x3285,0x1152,
+ 0x24B7,0x3EBC,0x07C2,0x2B62,0x1DFA,0x3CFC,0x0F6D,0x245B,
+ 0x3B8B,0x1256,0x383E,0x26D9,0x09FC,0x2B29,0x069D,0x1FB4,
+ 0x3900,0x0259,0x366D,0x0653,0x3E9D,0x0A1C,0x1FA2,0x2BFF,
+ 0x1157,0x2042,0x3E2B,0x0BAF,0x2848,0x159D,0x31B3,0x1757,
+ 0x2A2E,0x11C6,0x3590,0x26B0,0x093B,0x2FE3,0x25C7,0x02C1,
+ 0x2E5A,0x1E48,0x05D2,0x381E,0x0A3F,0x1EA7,0x34F3,0x0247,
+ 0x3DCB,0x09BB,0x25FF,0x18B9,0x201E,0x32E7,0x0900,0x3E04,
+ 0x0385,0x388F,0x09F4,0x1A88,0x2AA0,0x0EB5,0x300E,0x253E,
+ 0x2A5E,0x112A,0x3215,0x07A5,0x3D20,0x0246,0x2002,0x3B21,
+ 0x048F,0x29BA,0x172C,0x35E7,0x0E6D,0x389D,0x0908,0x2330,
+ 0x3018,0x0B71,0x362F,0x01AF,0x2280,0x31B8,0x1667,0x02BB,
+ 0x20D1,0x3E15,0x06C6,0x234D,0x3127,0x0916,0x358C,0x02FA,
+ 0x3343,0x2227,0x1A71,0x24E8,0x1D5E,0x3D0E,0x11C5,0x29D9,
+ 0x148E,0x2C1A,0x10D5,0x3707,0x1371,0x39D7,0x16B3,0x3CBF,
+ 0x07C1,0x36AF,0x1B86,0x057D,0x3004,0x209C,0x034D,0x33DB,
+ 0x2487,0x1004,0x3238,0x01A8,0x3F34,0x1EFE,0x0770,0x2CB6,
+ 0x0D51,0x1E86,0x3587,0x0E80,0x308B,0x0695,0x2A42,0x1D66,
+ 0x0251,0x2E2C,0x0AEC,0x189F,0x355A,0x11CB,0x247B,0x3149,
+ 0x0F1B,0x2A8E,0x1B5D,0x2EB3,0x12B0,0x2698,0x3A38,0x056E,
+ 0x368F,0x2446,0x14F1,0x2FCB,0x1052,0x2B4C,0x0010,0x2773,
+ 0x077E,0x3C2D,0x20A3,0x0E7C,0x3D6C,0x1FBA,0x12B8,0x3A86,
+ 0x224F,0x10E6,0x2AFA,0x1758,0x2DA2,0x11C2,0x2292,0x2A93,
+ 0x143D,0x2CE6,0x1202,0x30C0,0x04C5,0x26BC,0x1AF1,0x22C6,
+ 0x2C50,0x1048,0x205B,0x36B3,0x14B4,0x3985,0x02E8,0x1AD1,
+ 0x0671,0x3755,0x2314,0x180E,0x21E8,0x319D,0x0D9D,0x1B63,
+ 0x3347,0x149F,0x3F27,0x07DD,0x2A6D,0x13F5,0x2C1F,0x1028,
+ 0x19D9,0x3A2E,0x1517,0x2E64,0x1B93,0x086B,0x372C,0x1C64,
+ 0x2F54,0x0E6B,0x1BF9,0x3649,0x0F17,0x2B82,0x189C,0x25E1,
+ 0x1F17,0x095B,0x30A3,0x0159,0x2C52,0x0A49,0x27C9,0x03D3,
+ 0x3886,0x1ADF,0x25D0,0x0271,0x2EC6,0x0956,0x313A,0x0F14,
+ 0x2CFD,0x13B4,0x2668,0x3C2E,0x0D34,0x160F,0x3ECB,0x17CB,
+ 0x0543,0x3A01,0x20D6,0x19DD,0x2862,0x123D,0x3AC1,0x1591,
+ 0x33E7,0x04B2,0x2675,0x1829,0x223E,0x376E,0x0BBC,0x33BC,
+ 0x17BE,0x22F4,0x3279,0x208E,0x0166,0x3A83,0x1C56,0x048E,
+ 0x3D85,0x20CA,0x0876,0x234B,0x37F8,0x0328,0x1716,0x3112,
+ 0x19FB,0x0804,0x2A39,0x03C7,0x3B61,0x1D97,0x3825,0x12D2,
+ 0x30B5,0x1A48,0x025D,0x2D5E,0x1910,0x04B8,0x328B,0x09F6,
+ 0x1A82,0x3E4E,0x0CD5,0x35D6,0x03A3,0x3F2B,0x0864,0x1C5A,
+ 0x329D,0x066E,0x3A51,0x0EBE,0x3D31,0x1333,0x3779,0x0CD2,
+ 0x173A,0x334C,0x2754,0x003F,0x2D37,0x0B44,0x1FD7,0x3B5B,
+ 0x2F4F,0x1DA3,0x03C0,0x2E77,0x0A32,0x1655,0x37D1,0x2780,
+ 0x0AE9,0x2E08,0x0F43,0x247A,0x1A83,0x3AE2,0x0104,0x345E,
+ 0x2074,0x070F,0x2AD8,0x0E11,0x3EA6,0x25CD,0x0CBD,0x2933,
+ 0x079C,0x334F,0x26A5,0x01DD,0x3F1A,0x1CCA,0x05E8,0x3BB8,
+ 0x128F,0x36D8,0x160D,0x3B07,0x16F5,0x3674,0x13D2,0x33F5,
+ 0x2222,0x087B,0x3D80,0x2112,0x181B,0x24CD,0x1BB4,0x2705,
+ 0x0028,0x3A9D,0x0935,0x1976,0x2C76,0x234F,0x096B,0x308E,
+ 0x1C8F,0x28F4,0x0867,0x37D8,0x0B65,0x300C,0x02C8,0x2AB6,
+ 0x1FE2,0x3C7B,0x0C66,0x39AF,0x013A,0x15E1,0x2D53,0x13CA,
+ 0x3F22,0x07E5,0x1514,0x3C70,0x25E9,0x0CAD,0x3041,0x1806,
+ 0x253B,0x11A1,0x3193,0x18C5,0x0DAD,0x219B,0x2B68,0x0FB4,
+ 0x257E,0x3AA8,0x124E,0x3312,0x1ACA,0x0A91,0x22C9,0x33D3,
+ 0x0CB7,0x2480,0x39D6,0x105D,0x3628,0x2973,0x151F,0x2518,
+ 0x33B4,0x017B,0x2F9D,0x14B6,0x1F6F,0x27AC,0x1808,0x389F,
+ 0x0FA2,0x2758,0x1D2E,0x2AA5,0x0A6D,0x2D24,0x0192,0x2175,
+ 0x3BA6,0x05DF,0x1986,0x3F57,0x1279,0x248D,0x3410,0x0FE9,
+ 0x20FE,0x0E48,0x3FD4,0x1EAF,0x39E0,0x235E,0x05C4,0x18B0,
+ 0x3BD9,0x0191,0x1F44,0x319E,0x054C,0x1D87,0x2F37,0x0C80,
+ 0x3CE2,0x24B0,0x11D9,0x32A4,0x0502,0x1867,0x397C,0x12BE,
+ 0x3C73,0x1ED5,0x1381,0x2D15,0x1524,0x2422,0x304F,0x0CE0,
+ 0x2A17,0x0495,0x28B7,0x0B94,0x26C3,0x0672,0x2E42,0x1D1B,
+ 0x0EF1,0x303D,0x1555,0x343D,0x0AF4,0x3E9C,0x052F,0x386F,
+ 0x20FC,0x1713,0x22AD,0x358E,0x022E,0x38C4,0x1E60,0x1161,
+ 0x3D2F,0x0EEE,0x3319,0x16CC,0x2567,0x1BB8,0x373F,0x1466,
+ 0x093E,0x19B0,0x29C6,0x124B,0x27F1,0x3DF6,0x217D,0x041C,
+ 0x2786,0x1CAD,0x2D0E,0x05AE,0x1E66,0x29C1,0x13E8,0x3890,
+ 0x0A30,0x35F2,0x0044,0x3B95,0x1CDC,0x35BA,0x0B6C,0x3FCD,
+ 0x011C,0x1E4D,0x2DD1,0x092C,0x26D0,0x3EEF,0x1813,0x05AF,
+ 0x2C34,0x1D18,0x08B2,0x271B,0x20EA,0x0C56,0x3C0E,0x072A,
+ 0x1D35,0x2A72,0x0F49,0x2405,0x398F,0x0B1C,0x2C9F,0x0108,
+ 0x2373,0x3712,0x02F4,0x182E,0x35DD,0x2358,0x1B8A,0x2EF7,
+ 0x0B7E,0x2AF5,0x1F96,0x0D1B,0x31B5,0x1881,0x07E2,0x27CE,
+ 0x0168,0x34D5,0x1A0E,0x0836,0x1396,0x304E,0x1D11,0x2CBB,
+ 0x1190,0x23EA,0x36D6,0x10A9,0x3D57,0x2625,0x12BB,0x29F8,
+ 0x17EB,0x02FF,0x38DD,0x1AB8,0x2130,0x2B3C,0x009C,0x2DAA,
+ 0x229C,0x0414,0x38AE,0x0D71,0x33AF,0x0AB2,0x19E5,0x35EB,
+ 0x144F,0x3FA8,0x10F6,0x34AE,0x1329,0x3DFA,0x22D1,0x007F,
+ 0x39EF,0x1FA1,0x0565,0x1E31,0x2BBF,0x1251,0x333D,0x1508,
+ 0x2F50,0x0C44,0x3173,0x10F2,0x2B0D,0x0DF1,0x2E57,0x21EB,
+ 0x0094,0x26BE,0x203C,0x0411,0x3CD6,0x0A2E,0x22FF,0x31D3,
+ 0x1DE2,0x2F10,0x03C5,0x3327,0x1ED0,0x0883,0x1B5A,0x3501,
+ 0x1045,0x38EE,0x0E54,0x360F,0x15DE,0x3ED7,0x02B9,0x1D20,
+ 0x2C7E,0x1327,0x293F,0x0C31,0x2891,0x05E1,0x2D9D,0x1933,
+ 0x3180,0x0E51,0x227E,0x3740,0x149A,0x01F0,0x2171,0x3942,
+ 0x13D0,0x36C0,0x17A2,0x3FD4,0x00AF,0x1DDC,0x2845,0x1958,
+ 0x38C6,0x1380,0x3D28,0x0649,0x19E6,0x323A,0x13A9,0x3C29,
+ 0x1AB2,0x0D4F,0x20A1,0x2E1D,0x14E2,0x059F,0x3F06,0x0FAD,
+ 0x3578,0x12FB,0x39E6,0x25B9,0x0410,0x38DC,0x1CC1,0x3C8F,
+ 0x2DB4,0x11DD,0x2875,0x32F4,0x20C5,0x0086,0x3E8E,0x0C6B,
+ 0x34AB,0x1BD7,0x0B54,0x2C55,0x1763,0x0994,0x37EB,0x066A,
+ 0x325C,0x1D2F,0x273F,0x09F1,0x2FDE,0x0DDF,0x3530,0x1DBE,
+ 0x1168,0x3139,0x17B6,0x2A91,0x04D2,0x3A98,0x27BD,0x0010,
+ 0x237F,0x1C22,0x2C8E,0x0298,0x2F11,0x1DDB,0x101A,0x2D2D,
+ 0x0B9B,0x2A44,0x1A78,0x3BDE,0x017E,0x2886,0x1FCD,0x0773,
+ 0x1DE9,0x3F92,0x0451,0x2737,0x1C58,0x3BC0,0x05DC,0x3696,
+ 0x1954,0x34A8,0x0DCE,0x2F9B,0x12D7,0x2E11,0x1784,0x0043,
+ 0x3FBE,0x0D70,0x383C,0x2343,0x0FA7,0x36C1,0x28C6,0x14E4,
+ 0x2EDE,0x0087,0x1F65,0x285F,0x0941,0x2278,0x33ED,0x2685,
+ 0x074E,0x3E4D,0x1FC1,0x3383,0x1071,0x3D0F,0x2305,0x118F,
+ 0x2024,0x38D3,0x04C6,0x16E9,0x2C87,0x1D3C,0x2EC5,0x0FD5,
+ 0x2874,0x0374,0x2F42,0x14FE,0x2BE9,0x37AD,0x0D9C,0x3065,
+ 0x0349,0x28A8,0x0B9C,0x347A,0x25E2,0x0463,0x2983,0x0A1D,
+ 0x3341,0x2470,0x3E46,0x092F,0x3928,0x2223,0x18D3,0x27E8,
+ 0x0291,0x309D,0x08AC,0x1B20,0x2A56,0x0F38,0x2C3B,0x1481,
+ 0x0A7F,0x3AB8,0x04C3,0x15DA,0x383F,0x2672,0x0FCD,0x29D7,
+ 0x0514,0x27D7,0x392E,0x0396,0x2232,0x307E,0x1C45,0x2529,
+ 0x0ECA,0x3EF5,0x1309,0x3716,0x15B8,0x3B48,0x2192,0x062D,
+ 0x29CB,0x0BB9,0x3D1F,0x10B0,0x254C,0x1E1D,0x0FDA,0x2BF7,
+ 0x392F,0x0861,0x1877,0x3C18,0x23F0,0x07AF,0x374E,0x18E0,
+ 0x3F59,0x1171,0x34E9,0x0E28,0x2EFB,0x0FCB,0x31DE,0x1A44,
+ 0x2C3D,0x0F4C,0x1F4A,0x37AE,0x083D,0x17B8,0x2A77,0x1472,
+ 0x2CD0,0x07E0,0x3AE1,0x1A85,0x2769,0x06B7,0x396C,0x20FF,
+ 0x11ED,0x2B3B,0x1A3F,0x0AE3,0x2FB0,0x187B,0x05D8,0x3A61,
+ 0x0C53,0x23ED,0x3B1A,0x1280,0x3027,0x1A1C,0x0AF8,0x1673,
+ 0x2F36,0x1A91,0x03AE,0x16B8,0x2AFD,0x1C5E,0x0292,0x3428,
+ 0x08A1,0x271F,0x1BA3,0x3CD9,0x0A2F,0x3616,0x0710,0x3E18,
+ 0x0D10,0x34E5,0x224D,0x0BE7,0x1FA3,0x0624,0x24A7,0x11FE,
+ 0x336B,0x1558,0x2DFB,0x1E22,0x0FE6,0x361C,0x1D00,0x2F52,
+ 0x145A,0x051B,0x1633,0x3120,0x11E0,0x29EC,0x082A,0x386A,
+ 0x20DA,0x16FA,0x2336,0x3DB8,0x13A0,0x366F,0x0647,0x2406,
+ 0x1785,0x2593,0x1D63,0x2B9D,0x08C7,0x1B03,0x35ED,0x14FF,
+ 0x3CA1,0x191F,0x0E38,0x1E4B,0x3E67,0x155C,0x004E,0x3A97,
+ 0x1FF2,0x07DF,0x2CE3,0x0243,0x2A53,0x08B6,0x1961,0x3FD4,
+ 0x1421,0x3467,0x0171,0x201C,0x2FF6,0x08EC,0x3DED,0x1CBC,
+ 0x0E27,0x210F,0x3134,0x1553,0x0C81,0x1F0A,0x282B,0x0392,
+ 0x2197,0x311F,0x0648,0x23AF,0x17C9,0x3816,0x0A0C,0x3CFB,
+ 0x0289,0x360C,0x24B4,0x1273,0x31FF,0x2539,0x0C0B,0x3E87,
+ 0x0FC6,0x1F3F,0x23EF,0x024A,0x3E2D,0x1E47,0x0E29,0x3473,
+ 0x2603,0x050C,0x3C0A,0x2040,0x0221,0x3D43,0x2519,0x12DB,
+ 0x2BB6,0x1B1E,0x081C,0x3304,0x0454,0x3C19,0x1F4F,0x3702,
+ 0x0F27,0x3A15,0x1EDA,0x3562,0x0917,0x3987,0x17C4,0x2394,
+ 0x3C17,0x0DC1,0x2F8B,0x1142,0x2AA2,0x18AD,0x25C1,0x1356,
+ 0x2D01,0x19B8,0x081F,0x3C30,0x2A08,0x187F,0x3EC8,0x2032,
+ 0x0920,0x3A22,0x2117,0x004A,0x3F7F,0x22FE,0x072C,0x17A0,
+ 0x3D01,0x1EAB,0x2B99,0x1C71,0x0084,0x349E,0x1F7B,0x1378,
+ 0x323C,0x0AF7,0x2E87,0x00F7,0x3123,0x0C8F,0x2006,0x3E51,
+ 0x2ED8,0x0D6E,0x3477,0x0F09,0x3D98,0x238A,0x0338,0x30B4,
+ 0x0A11,0x209B,0x3280,0x28C5,0x090B,0x34D8,0x2710,0x116A,
+ 0x2DE6,0x1AE8,0x222B,0x348C,0x0FF7,0x2679,0x30A2,0x0CAB,
+ 0x2BDE,0x22EE,0x19C2,0x3800,0x123C,0x34D0,0x2339,0x0347,
+ 0x29CC,0x379D,0x0533,0x22B9,0x39AE,0x2A31,0x0DE0,0x3233,
+ 0x0A56,0x19D2,0x29AD,0x3AD5,0x0361,0x1C95,0x27FD,0x1463,
+ 0x2A1E,0x192D,0x09AD,0x3DC4,0x0120,0x1B25,0x2D9F,0x034A,
+ 0x27BB,0x38A5,0x13D7,0x32D7,0x11A7,0x3055,0x2268,0x08CA,
+ 0x1920,0x2EA1,0x13F1,0x274A,0x329F,0x0E93,0x1E3B,0x35C8,
+ 0x035F,0x3FD4,0x2624,0x0FB5,0x2B45,0x14AF,0x2DC9,0x00D6,
+ 0x2A69,0x06A9,0x2E7A,0x1385,0x2820,0x0EFE,0x2FE8,0x0686,
+ 0x1C9C,0x2A24,0x0079,0x346B,0x220A,0x03F6,0x3B4B,0x1F40,
+ 0x0137,0x3846,0x1CD9,0x2385,0x0E8F,0x31A2,0x021C,0x3544,
+ 0x1B71,0x2530,0x1135,0x2FFC,0x18F2,0x0CF1,0x3A9A,0x27DD,
+ 0x0222,0x341A,0x0AC0,0x3A1A,0x22F3,0x15AE,0x3C9C,0x0459,
+ 0x1C1F,0x3B08,0x10A6,0x1E24,0x26AE,0x1914,0x3260,0x02D2,
+ 0x1C4C,0x39A3,0x01FF,0x2FBF,0x1F35,0x12D8,0x2D38,0x1727,
+ 0x2433,0x39C8,0x01CC,0x1370,0x2E4C,0x205C,0x0D31,0x3691,
+ 0x0485,0x3BE5,0x0B3E,0x18C2,0x3D5E,0x1F7A,0x033B,0x3865,
+ 0x1E08,0x0551,0x2E28,0x0ACE,0x2AEB,0x0663,0x175A,0x3278,
+ 0x1FCA,0x0F5D,0x1CCE,0x3329,0x01A5,0x176C,0x3CA3,0x1376,
+ 0x38B5,0x2653,0x1577,0x0C55,0x2261,0x3575,0x06EC,0x3959,
+ 0x0B77,0x345D,0x28C1,0x1390,0x2388,0x399F,0x0EC5,0x35F5,
+ 0x1DAD,0x0717,0x2A09,0x0A95,0x2B86,0x0449,0x37AB,0x1C9B,
+ 0x3B36,0x1078,0x371B,0x061A,0x1AD0,0x2C72,0x08FC,0x20EE,
+ 0x3170,0x0D2E,0x190E,0x386B,0x21E3,0x0A6B,0x1C03,0x3DEE,
+ 0x12BA,0x2583,0x0CD9,0x3F89,0x018F,0x364F,0x2225,0x163E,
+ 0x3254,0x100A,0x3F5B,0x1E36,0x0E2E,0x30D3,0x1083,0x32EA,
+ 0x24A8,0x0D77,0x2FEE,0x045B,0x3A6F,0x1648,0x2870,0x0F01,
+ 0x2D84,0x04E0,0x3C6C,0x08AE,0x1FF7,0x31B0,0x11A3,0x20C6,
+ 0x2E99,0x12D5,0x26FD,0x0F48,0x2D6C,0x08D1,0x2917,0x2135,
+ 0x2B3A,0x0741,0x2251,0x3727,0x0544,0x3C14,0x1443,0x2749,
+ 0x079A,0x234E,0x1AAD,0x24E0,0x0694,0x3B0D,0x0B1F,0x3732,
+ 0x074C,0x1589,0x25F9,0x355D,0x182D,0x05BF,0x2FF5,0x13E4,
+ 0x2997,0x1604,0x27A2,0x2F44,0x06BE,0x1570,0x33D8,0x239E,
+ 0x0E46,0x3AD0,0x1663,0x3E69,0x1BC6,0x216B,0x3B90,0x14DB,
+ 0x0936,0x3EC9,0x276C,0x11C8,0x2CE4,0x2136,0x0746,0x2FB8,
+ 0x1EC2,0x010B,0x3E47,0x1CF4,0x30C3,0x10A0,0x2D1B,0x21CC,
+ 0x15D3,0x1F77,0x04A4,0x2F95,0x1D12,0x08BA,0x308C,0x20AB,
+ 0x1114,0x338B,0x18F9,0x3A0E,0x1557,0x268C,0x132A,0x29E6,
+ 0x018D,0x2BF4,0x0BA6,0x21FE,0x3E9F,0x1592,0x39EC,0x11B3,
+ 0x248A,0x1CE6,0x2E44,0x01DA,0x1692,0x35DF,0x2357,0x08DF,
+ 0x210B,0x31F4,0x18DA,0x22AF,0x2D40,0x14D0,0x0B2F,0x3A8D,
+ 0x046C,0x2791,0x206E,0x08FB,0x39AC,0x1C0A,0x2BA5,0x09EB,
+ 0x1B36,0x3D7F,0x13F7,0x2957,0x0B5C,0x2F08,0x07DB,0x3DC3,
+ 0x132E,0x291B,0x1698,0x35AC,0x2657,0x0397,0x3824,0x097D,
+ 0x1A1A,0x3799,0x05AA,0x3FC5,0x1842,0x3388,0x0D67,0x14DA,
+ 0x3EA9,0x1788,0x2FE9,0x12A2,0x2BFE,0x21E0,0x0969,0x305B,
+ 0x376D,0x1237,0x3F11,0x10D8,0x32D4,0x1945,0x2B0B,0x1167,
+ 0x2860,0x3F88,0x1A96,0x0831,0x3C47,0x22CA,0x1B28,0x3A21,
+ 0x0999,0x330A,0x0111,0x2022,0x38F7,0x2328,0x0961,0x16ED,
+ 0x2FA1,0x21B5,0x081B,0x25A8,0x0258,0x2DE5,0x0B2D,0x263C,
+ 0x340D,0x20D7,0x05FD,0x3AA5,0x0AD5,0x3489,0x1A97,0x2563,
+ 0x0E99,0x2D7A,0x113E,0x2B22,0x047E,0x3C80,0x1B2E,0x0077,
+ 0x3F38,0x241A,0x3698,0x0F28,0x3B63,0x169A,0x26E4,0x04DE,
+ 0x3FA1,0x2460,0x00D3,0x1D56,0x2E78,0x0822,0x3EEA,0x0F2D,
+ 0x3392,0x14F6,0x1E9A,0x30EE,0x0CAE,0x28EE,0x00FC,0x2D39,
+ 0x06C7,0x3414,0x0B73,0x3DA1,0x28E9,0x0542,0x3162,0x181E,
+ 0x3790,0x03F9,0x3929,0x09A9,0x1D7E,0x3C8C,0x1BEB,0x2993,
+ 0x192E,0x350B,0x127F,0x2EC2,0x2354,0x0654,0x15B6,0x37C9,
+ 0x27B1,0x059D,0x3453,0x170B,0x3782,0x1264,0x241C,0x1ACD,
+ 0x32E3,0x0C08,0x2E55,0x0E1C,0x1A70,0x2B1F,0x14DE,0x24F6,
+ 0x30E2,0x0E8C,0x294C,0x1FB0,0x02C5,0x1E01,0x38BB,0x260E,
+ 0x01BE,0x29D3,0x0BD3,0x3A7D,0x0DEA,0x1B52,0x344A,0x15E5,
+ 0x0C26,0x2909,0x03B2,0x2A01,0x0C3D,0x2731,0x00CD,0x33E5,
+ 0x1E7C,0x0426,0x2F7B,0x1FD3,0x1069,0x3153,0x02AE,0x25C8,
+ 0x1E6B,0x1214,0x3E3B,0x17CA,0x0CF5,0x2CA0,0x1CB1,0x3CF8,
+ 0x006D,0x1ADE,0x36CE,0x0EF9,0x34F4,0x1354,0x3988,0x1B74,
+ 0x00B9,0x17E5,0x2E7D,0x15DB,0x2AE1,0x12CF,0x3DBA,0x0465,
+ 0x37AA,0x1880,0x339E,0x0B1E,0x28AF,0x0E81,0x2678,0x316A,
+ 0x131D,0x0895,0x1996,0x2B6A,0x01ED,0x3269,0x109D,0x2CAB,
+ 0x17BA,0x0D5D,0x2205,0x3C4F,0x0EA5,0x350A,0x1C20,0x2789,
+ 0x076F,0x3CE6,0x258D,0x0368,0x381C,0x13A2,0x361F,0x1503,
+ 0x3CAD,0x1783,0x26E8,0x1154,0x1D99,0x3AB4,0x1053,0x2BCE,
+ 0x0E1B,0x1E3A,0x27E1,0x160E,0x2AC8,0x02F8,0x3324,0x07D1,
+ 0x2465,0x0A7B,0x3876,0x02AB,0x177C,0x3E72,0x2245,0x020A,
+ 0x1846,0x2E31,0x0F6F,0x2665,0x008A,0x20B7,0x3106,0x03D0,
+ 0x1FC0,0x3ADA,0x01AE,0x215B,0x395A,0x07A4,0x3E84,0x1C2A,
+ 0x0132,0x3B7B,0x13E6,0x35E3,0x1AA4,0x3057,0x06A7,0x1F34,
+ 0x3651,0x1A24,0x336C,0x037C,0x211A,0x3FB1,0x002A,0x2B1A,
+ 0x3A23,0x1BF1,0x3513,0x1556,0x3C5D,0x1684,0x385B,0x21C1,
+ 0x0D37,0x2C17,0x0ED9,0x38BE,0x24EF,0x0BC0,0x3F51,0x0E74,
+ 0x379C,0x21EC,0x088E,0x2366,0x32B0,0x03DF,0x356F,0x0DA4,
+ 0x2627,0x3171,0x1449,0x2947,0x1938,0x27EF,0x06DF,0x30E5,
+ 0x1EBB,0x3D3A,0x09C5,0x3821,0x02CB,0x242F,0x0D23,0x2F5A,
+ 0x200B,0x06E2,0x235F,0x39FD,0x13D9,0x373B,0x0793,0x17FF,
+ 0x3539,0x1E82,0x3C13,0x0C02,0x25BA,0x1A33,0x3D18,0x0B23,
+ 0x36BF,0x1C6D,0x2DBF,0x05EF,0x29AB,0x1809,0x02E0,0x3157,
+ 0x1FBE,0x1679,0x0A5D,0x2D8F,0x18BD,0x26B4,0x07BF,0x2ADB,
+ 0x1C69,0x03CF,0x3699,0x206C,0x07AD,0x22D5,0x2F91,0x022F,
+ 0x20AD,0x3B82,0x0726,0x33FA,0x0F96,0x304D,0x1321,0x1F1C,
+ 0x3DE9,0x16E5,0x2642,0x1D19,0x3161,0x0FC1,0x33DA,0x1D76,
+ 0x3B94,0x08C3,0x1EEE,0x3FA0,0x1B26,0x39F3,0x10AC,0x36D9,
+ 0x14A7,0x2483,0x1BA5,0x3245,0x1410,0x2F6D,0x109B,0x33E8,
+ 0x2193,0x0C2D,0x2E39,0x07C3,0x2B07,0x0CB5,0x3C55,0x1146,
+ 0x23A0,0x0F93,0x2543,0x1C68,0x2DD7,0x11A5,0x2633,0x17E3,
+ 0x05CD,0x2461,0x0A42,0x2F1E,0x052D,0x2CCC,0x09D2,0x1B83,
+ 0x3CF9,0x128A,0x3365,0x014F,0x1CBD,0x2AF4,0x14A8,0x2C70,
+ 0x0457,0x3203,0x196A,0x39CF,0x0F68,0x287D,0x12A5,0x2B44,
+ 0x1BFD,0x0A13,0x3A32,0x04A6,0x3F4E,0x0C2E,0x365D,0x106E,
+ 0x2BA6,0x0E55,0x29FC,0x2173,0x18D0,0x3553,0x1B9E,0x26CC,
+ 0x1216,0x3F1C,0x1AD7,0x026E,0x3088,0x218E,0x1D46,0x2AAD,
+ 0x05A3,0x2E24,0x1533,0x20C0,0x390A,0x0729,0x1DE6,0x2A33,
+ 0x039B,0x312E,0x0C87,0x3791,0x1165,0x3297,0x22E5,0x0D05,
+ 0x39BD,0x23A4,0x354C,0x0FE4,0x3BD8,0x0DE2,0x3370,0x102D,
+ 0x241E,0x312B,0x0EDF,0x29BF,0x3974,0x0C1F,0x155F,0x3EE4,
+ 0x25F7,0x1127,0x2E12,0x1CBF,0x3E99,0x0979,0x21C2,0x359F,
+ 0x012F,0x2C25,0x0BA5,0x3BD3,0x07AA,0x2BE0,0x0C79,0x29DE,
+ 0x11FD,0x3356,0x23A7,0x0C49,0x2E98,0x0759,0x2A46,0x0A38,
+ 0x2C09,0x06B9,0x3F0C,0x0AD3,0x26C6,0x0320,0x28B8,0x094A,
+ 0x2C6A,0x164F,0x2283,0x39DD,0x1255,0x26DE,0x1740,0x32F9,
+ 0x049C,0x3E1A,0x0A07,0x393C,0x06B2,0x3694,0x0ADF,0x3119,
+ 0x3DD5,0x165A,0x37C4,0x1A63,0x255A,0x143B,0x30E1,0x22F1,
+ 0x05FE,0x204E,0x2793,0x15AA,0x3B51,0x0708,0x33D7,0x1760,
+ 0x2838,0x0FD4,0x2A13,0x0217,0x2ECE,0x1FC4,0x3F81,0x0629,
+ 0x375A,0x23E5,0x10D6,0x2C4B,0x125D,0x2EA0,0x158D,0x26FE,
+ 0x041E,0x36ED,0x1B3B,0x0727,0x301B,0x0A4D,0x3B9B,0x004D,
+ 0x32ED,0x0A9A,0x212E,0x2B8E,0x1767,0x0C46,0x3B17,0x11C9,
+ 0x384B,0x22A6,0x02FE,0x2C30,0x0DB9,0x317B,0x23E9,0x11B2,
+ 0x3A64,0x15FB,0x253A,0x1A4F,0x2841,0x0A9C,0x3D89,0x1D8F,
+ 0x137B,0x0063,0x1B27,0x289F,0x0532,0x2FF2,0x1A72,0x3AFF,
+ 0x0ABC,0x1F60,0x3F6A,0x0015,0x188A,0x284D,0x3397,0x19D4,
+ 0x0ADA,0x3589,0x17B2,0x008B,0x2496,0x1ABC,0x2A47,0x0E85,
+ 0x2F6E,0x1224,0x349F,0x13DA,0x2531,0x19A0,0x3AD3,0x060F,
+ 0x2FAE,0x19DA,0x033E,0x363A,0x1681,0x2752,0x13BB,0x3CF6,
+ 0x1D29,0x303C,0x117E,0x2A26,0x1733,0x3BC1,0x122E,0x3658,
+ 0x1E67,0x3DD8,0x03C6,0x1B89,0x2EFA,0x00DC,0x2A36,0x0EAD,
+ 0x2D58,0x1364,0x319C,0x15A0,0x2AE0,0x19B5,0x2846,0x1475,
+ 0x0CE1,0x295F,0x017A,0x2BA3,0x0B6B,0x3ED2,0x0304,0x396D,
+ 0x18E9,0x3583,0x091B,0x3094,0x199E,0x2659,0x0F1E,0x3D75,
+ 0x0AF3,0x3634,0x1E8A,0x3C03,0x16FE,0x07C4,0x1A2E,0x2D88,
+ 0x1675,0x02BD,0x3386,0x1D45,0x251D,0x0164,0x3C58,0x1966,
+ 0x2D6E,0x133F,0x24D7,0x3FCB,0x10EF,0x2813,0x144D,0x2D5C,
+ 0x22F9,0x1694,0x34DD,0x0F60,0x3D29,0x25EE,0x0152,0x320A,
+ 0x0AEB,0x1B61,0x3DAF,0x1426,0x35C4,0x1887,0x0010,0x3031,
+ 0x1CF2,0x096D,0x3E10,0x01D1,0x3920,0x1EDE,0x0515,0x291F,
+ 0x363B,0x1EFF,0x3F47,0x1268,0x2B4D,0x2025,0x01CE,0x1E74,
+ 0x2E1F,0x0659,0x24DA,0x1C30,0x303F,0x13C6,0x0494,0x1FAC,
+ 0x2C9D,0x0612,0x26FC,0x3A34,0x0D45,0x3743,0x04F0,0x3C44,
+ 0x1DB0,0x26CE,0x044F,0x20A5,0x307D,0x0027,0x240C,0x1F37,
+ 0x0EAA,0x3E3C,0x2600,0x1140,0x2CB2,0x04AA,0x3216,0x21DB,
+ 0x0101,0x18EF,0x3830,0x0511,0x34F6,0x0DC0,0x2D8E,0x1AFD,
+ 0x0616,0x134D,0x2896,0x3529,0x0FDB,0x3F69,0x0B2C,0x382D,
+ 0x1E19,0x276D,0x0162,0x240B,0x0BA7,0x3C9A,0x02BA,0x2D11,
+ 0x35BC,0x1106,0x3B98,0x1215,0x34B8,0x16D0,0x2806,0x0CB6,
+ 0x2B60,0x1386,0x3DDE,0x2119,0x04DC,0x374B,0x1F33,0x0017,
+ 0x302A,0x1B97,0x05D6,0x13D4,0x328C,0x1EF0,0x3948,0x0D56,
+ 0x26B3,0x3DD6,0x18AF,0x080A,0x3133,0x1F5F,0x0ED5,0x33CE,
+ 0x0B5A,0x3A2A,0x01E5,0x1EED,0x3433,0x050F,0x3869,0x1C8A,
+ 0x08BB,0x3A6A,0x04BB,0x2F9A,0x0809,0x1BE3,0x2CC3,0x15E6,
+ 0x2497,0x2F69,0x0A18,0x297E,0x067A,0x2629,0x3F0B,0x0E7D,
+ 0x2BB1,0x2256,0x16FD,0x2D4B,0x104A,0x2428,0x31F3,0x1492,
+ 0x0934,0x2C43,0x069B,0x3228,0x0B0F,0x3DBD,0x1833,0x36F3,
+ 0x11CF,0x34B1,0x0CFF,0x3868,0x08C1,0x3CC8,0x2395,0x372F,
+ 0x0FD6,0x3D58,0x20E7,0x143C,0x2BB0,0x15D5,0x2DE1,0x184A,
+ 0x085A,0x37B6,0x1A69,0x3F09,0x0DF7,0x35D1,0x1192,0x38A9,
+ 0x293B,0x0A4E,0x205A,0x3965,0x0D07,0x3BE2,0x1A52,0x0BCB,
+ 0x3685,0x2619,0x0D3D,0x2CE7,0x19BB,0x254B,0x0018,0x3CD2,
+ 0x239C,0x373E,0x17F1,0x0879,0x244F,0x1CEB,0x310D,0x196D,
+ 0x0765,0x3BDF,0x18AA,0x360A,0x1F16,0x109A,0x32B4,0x181F,
+ 0x0473,0x2379,0x1CB5,0x25E7,0x0651,0x2EA5,0x0FB1,0x31DC,
+ 0x1D8C,0x01E2,0x243A,0x0D18,0x2DB8,0x144C,0x2F0E,0x24BA,
+ 0x1113,0x2787,0x383B,0x2188,0x09FF,0x294B,0x00E4,0x3484,
+ 0x1DA1,0x0A5B,0x2265,0x3B43,0x12E4,0x37A7,0x2393,0x05B2,
+ 0x2AB3,0x17B3,0x306B,0x1201,0x2274,0x2E09,0x0E4A,0x2A8F,
+ 0x181D,0x26FF,0x1FDC,0x123E,0x226C,0x36F0,0x1064,0x3FD4,
+ 0x0539,0x1836,0x3333,0x1EF2,0x3873,0x0F97,0x203B,0x3476,
+ 0x0479,0x3622,0x0839,0x1C59,0x33CC,0x0C48,0x194D,0x3854,
+ 0x2190,0x17CC,0x3945,0x1BDF,0x2623,0x1501,0x2CFA,0x04DA,
+ 0x2892,0x16F1,0x2985,0x12FC,0x2C40,0x2105,0x157C,0x01AD,
+ 0x3156,0x1DCB,0x0BC8,0x344B,0x0363,0x283A,0x0B36,0x32B8,
+ 0x23A5,0x0F67,0x2955,0x097A,0x2C98,0x1729,0x27E5,0x0481,
+ 0x1828,0x31CF,0x0153,0x1B6D,0x2873,0x120D,0x2BB3,0x1DD9,
+ 0x2350,0x12A8,0x3D68,0x1D3D,0x08E2,0x3122,0x2129,0x150E,
+ 0x1F79,0x0BC5,0x31FA,0x1DC3,0x3AD6,0x058C,0x155D,0x2B74,
+ 0x2234,0x14BF,0x2CCB,0x05A5,0x2E8B,0x217E,0x08D6,0x26A0,
+ 0x1512,0x38EC,0x0825,0x3371,0x1B56,0x2191,0x3C16,0x0856,
+ 0x3521,0x158F,0x2FD2,0x1E0F,0x103A,0x3ACF,0x0A92,0x19F5,
+ 0x3C95,0x0B78,0x1621,0x2B11,0x3E64,0x112F,0x2FDF,0x141B,
+ 0x2A9E,0x1554,0x2E4F,0x0376,0x2A3E,0x0923,0x1AEF,0x3E0B,
+ 0x13FB,0x2840,0x0C2F,0x3BFC,0x07E8,0x1DCD,0x3E7B,0x0305,
+ 0x361B,0x0C9D,0x3DEF,0x1A39,0x323D,0x03D7,0x29D0,0x0D2D,
+ 0x2781,0x39A9,0x135B,0x0223,0x1BAB,0x2F23,0x07C6,0x1B22,
+ 0x2A63,0x12FA,0x3C1D,0x272E,0x0402,0x3FB0,0x2638,0x0169,
+ 0x2E33,0x0BF2,0x2437,0x029B,0x3064,0x08E5,0x22BA,0x38FE,
+ 0x109F,0x3E5E,0x02F0,0x3615,0x1A2F,0x057C,0x3938,0x1BD1,
+ 0x2784,0x06EE,0x2FB9,0x1090,0x3826,0x12A1,0x3F91,0x1C16,
+ 0x01AA,0x3AF6,0x151B,0x36C6,0x1C07,0x06EA,0x3D02,0x1CD8,
+ 0x373C,0x1000,0x226F,0x3449,0x07DE,0x37A6,0x028F,0x3F4D,
+ 0x0897,0x3323,0x0407,0x2812,0x3ACA,0x12F8,0x3488,0x06C2,
+ 0x3939,0x27A7,0x01F8,0x2BC4,0x0D1E,0x262B,0x3713,0x0260,
+ 0x3A6E,0x09B7,0x1D4F,0x3DA5,0x12B2,0x370C,0x1BCB,0x3F4A,
+ 0x315C,0x18FF,0x2E71,0x0DE9,0x3A2D,0x0061,0x1804,0x2A71,
+ 0x1FDA,0x3FD2,0x06D9,0x38B2,0x22C8,0x02CC,0x2154,0x3195,
+ 0x0490,0x33FF,0x2055,0x0285,0x1CF8,0x24DE,0x094C,0x3CC7,
+ 0x056F,0x383D,0x1C87,0x3346,0x0F83,0x2495,0x31E3,0x0D83,
+ 0x2F1B,0x03E4,0x32E0,0x1561,0x29FD,0x1394,0x21D9,0x31F9,
+ 0x110E,0x2C4F,0x01A4,0x28DE,0x0B4F,0x3BBE,0x1437,0x3569,
+ 0x1D78,0x08DC,0x2231,0x3E71,0x2844,0x1262,0x3C83,0x24F4,
+ 0x0A60,0x2FDC,0x2080,0x0E8D,0x2EE1,0x201F,0x11EA,0x3AD2,
+ 0x1579,0x34C9,0x1222,0x3C6D,0x1747,0x3431,0x0E26,0x1DEB,
+ 0x257B,0x0A89,0x2DC1,0x0F00,0x2644,0x31EE,0x110B,0x2B51,
+ 0x0E2F,0x3A81,0x231B,0x18EA,0x2194,0x2C68,0x05BD,0x2609,
+ 0x2FA2,0x10FD,0x2B7F,0x02E5,0x3117,0x22F8,0x10C2,0x2D45,
+ 0x0B62,0x1E8E,0x3C76,0x141F,0x2EF6,0x166B,0x3160,0x17DD,
+ 0x2B01,0x0F10,0x2F47,0x160B,0x2045,0x02C0,0x1C8B,0x2AD2,
+ 0x100E,0x19A1,0x3E9E,0x162B,0x3290,0x12EE,0x2060,0x2FCE,
+ 0x0F6C,0x331E,0x259D,0x0D4D,0x28F9,0x0095,0x2BEE,0x0A25,
+ 0x2501,0x024E,0x276F,0x20A6,0x161C,0x235C,0x36AB,0x12CA,
+ 0x0424,0x1A3A,0x28BA,0x0BD9,0x3351,0x1B4E,0x3F1B,0x11CC,
+ 0x2B89,0x0DE4,0x265D,0x3A5B,0x121B,0x3542,0x1F56,0x0F2B,
+ 0x2D21,0x21A2,0x0C47,0x16C2,0x3EFF,0x1DE0,0x003A,0x3935,
+ 0x20D4,0x19D8,0x2320,0x38B0,0x00F9,0x3729,0x0B34,0x1EB8,
+ 0x254D,0x1900,0x3814,0x0F37,0x2E92,0x1C6C,0x2454,0x0097,
+ 0x3098,0x197F,0x2C95,0x1578,0x096A,0x33BD,0x02C6,0x16BA,
+ 0x39E9,0x19C8,0x00E9,0x3557,0x1857,0x0732,0x30F2,0x0AE1,
+ 0x28DB,0x04A1,0x2A5D,0x1F4E,0x071A,0x2053,0x3B67,0x0112,
+ 0x35BD,0x195C,0x2272,0x3BAA,0x0B3A,0x1F20,0x3F21,0x0828,
+ 0x332E,0x1EC4,0x0264,0x3E21,0x08CD,0x1AA0,0x38D7,0x1641,
+ 0x0A4A,0x3387,0x1C9E,0x24D2,0x0E43,0x392C,0x1F7C,0x021D,
+ 0x3250,0x2582,0x051A,0x29F9,0x0A8A,0x24E7,0x0635,0x27CB,
+ 0x1350,0x3A7C,0x21B9,0x09BE,0x36A4,0x2485,0x3FD4,0x0993,
+ 0x3598,0x23CA,0x0DE6,0x294F,0x04B9,0x3D46,0x0A08,0x1A18,
+ 0x29DB,0x1B78,0x03D4,0x353A,0x168A,0x39D4,0x11F2,0x1EC9,
+ 0x0F5F,0x37E0,0x0BE5,0x3E75,0x0561,0x2C4A,0x0AE2,0x2E25,
+ 0x1E55,0x3136,0x116F,0x2C8D,0x13DE,0x299E,0x0658,0x2855,
+ 0x15C3,0x37E3,0x1A7C,0x0884,0x2E9B,0x03EA,0x27EC,0x3739,
+ 0x1901,0x01BF,0x3A78,0x2751,0x066F,0x2CD9,0x187A,0x267D,
+ 0x08AD,0x3115,0x0D2B,0x1D6E,0x2B94,0x1022,0x3019,0x0571,
+ 0x3C2F,0x08A6,0x2160,0x317A,0x16D2,0x0777,0x3964,0x1F5D,
+ 0x10C3,0x3B69,0x04D8,0x367B,0x233E,0x1A75,0x215C,0x2C63,
+ 0x0FCA,0x31C7,0x258A,0x113D,0x3B93,0x2262,0x1AD2,0x35D5,
+ 0x1D86,0x3DFB,0x0F87,0x379B,0x1B37,0x2EF2,0x149E,0x29DA,
+ 0x0F46,0x311C,0x0607,0x1CC4,0x3005,0x00BB,0x23F2,0x19B1,
+ 0x2586,0x11B0,0x2D8B,0x0EC6,0x28B9,0x33C7,0x0D1C,0x2044,
+ 0x3C5B,0x18AE,0x065F,0x3DD3,0x1DA2,0x0819,0x28D1,0x3FD4,
+ 0x18E4,0x0DED,0x339D,0x1296,0x3EAB,0x1977,0x39EA,0x0CF0,
+ 0x3463,0x016D,0x1C00,0x30E4,0x153E,0x0C5A,0x1719,0x2DE2,
+ 0x1BA2,0x0384,0x33C5,0x1384,0x2C5D,0x1143,0x2585,0x38A6,
+ 0x06A4,0x3EEC,0x23E7,0x10AA,0x2EFE,0x07DA,0x2275,0x3C46,
+ 0x2F5C,0x1E0A,0x309E,0x1038,0x32E9,0x1A9C,0x3D56,0x1530,
+ 0x3874,0x095E,0x3B7A,0x00E0,0x3667,0x0E45,0x3903,0x0C5B,
+ 0x30F8,0x0158,0x2C6C,0x2219,0x179E,0x3FD4,0x14BD,0x0788,
+ 0x22BC,0x3206,0x10B5,0x1BC4,0x35BE,0x1343,0x3CF2,0x1040,
+ 0x3610,0x163F,0x3F54,0x0751,0x2361,0x3D0A,0x1616,0x289C,
+ 0x150A,0x2D20,0x1AE4,0x0447,0x3EE2,0x292E,0x0E2C,0x31E4,
+ 0x251B,0x0B7F,0x291E,0x114B,0x305E,0x0C6D,0x3A96,0x061B,
+ 0x36CF,0x0929,0x1BB7,0x2B34,0x0B9F,0x2CCA,0x0288,0x24A2,
+ 0x098C,0x18F6,0x2DA8,0x0C7A,0x2910,0x03ED,0x3257,0x09CC,
+ 0x3FD4,0x20F8,0x1780,0x2AAF,0x1470,0x3468,0x0D16,0x36C2,
+ 0x043C,0x3B56,0x1623,0x365C,0x1BFF,0x0056,0x2F32,0x243F,
+ 0x0399,0x286B,0x3574,0x0F23,0x2761,0x327C,0x148A,0x0997,
+ 0x21BF,0x3B3B,0x15B0,0x2743,0x0068,0x2A75,0x102F,0x2E6D,
+ 0x1628,0x245C,0x3E57,0x0680,0x2859,0x38DB,0x22B1,0x05E6,
+ 0x3C6A,0x274D,0x0AF9,0x3B47,0x1D90,0x3617,0x0062,0x17A6,
+ 0x2DCB,0x163A,0x095D,0x3AEE,0x207C,0x19F0,0x3464,0x04BD,
+ 0x1ABE,0x0782,0x16F2,0x29EE,0x1F0C,0x0946,0x2334,0x0286,
+ 0x206B,0x2726,0x18B2,0x2467,0x1C48,0x2FFA,0x197E,0x25C2,
+ 0x1DAF,0x3DB7,0x10BC,0x3697,0x0BF7,0x1D4D,0x3309,0x1C13,
+ 0x3C4C,0x09C9,0x2522,0x30BB,0x0BB0,0x2ABF,0x04CD,0x2E6F,
+ 0x2000,0x028D,0x1F3A,0x2DEC,0x1774,0x03B3,0x33DC,0x0D5F,
+ 0x367D,0x10CE,0x3A30,0x22F5,0x119D,0x2069,0x36A8,0x0628,
+ 0x1C36,0x2F39,0x1650,0x3D5B,0x014E,0x1E75,0x279F,0x1631,
+ 0x23D5,0x1DBA,0x3D35,0x0488,0x3446,0x1646,0x3EC7,0x1405,
+ 0x3847,0x26BF,0x0088,0x32A7,0x15F5,0x3D37,0x12A4,0x1E13,
+ 0x2510,0x027A,0x386C,0x095A,0x3CAC,0x1041,0x2BDA,0x133C,
+ 0x2E83,0x0B9A,0x2708,0x0644,0x2170,0x3BAB,0x1748,0x1021,
+ 0x30C1,0x12B3,0x1FF3,0x2E9D,0x00D0,0x2103,0x374F,0x1BD2,
+ 0x2EC4,0x03F4,0x2B87,0x0C18,0x35F9,0x1BA1,0x380F,0x0460,
+ 0x2961,0x0AC9,0x185E,0x2C5F,0x1A30,0x00EC,0x3196,0x1EE5,
+ 0x0E7E,0x16AD,0x2F40,0x1A68,0x0767,0x2306,0x308F,0x1FF5,
+ 0x0E4C,0x35D2,0x1CC6,0x26B8,0x01A0,0x2CB1,0x0CDF,0x2926,
+ 0x3661,0x202D,0x3CB6,0x0110,0x38CA,0x13ED,0x35C0,0x2B92,
+ 0x0E49,0x3268,0x0756,0x3D16,0x0A57,0x2376,0x034F,0x3AE3,
+ 0x08D2,0x1899,0x292F,0x04F7,0x30A8,0x260D,0x0090,0x29B5,
+ 0x130A,0x2BFA,0x17FE,0x02FB,0x38EA,0x1A28,0x25D3,0x0E0F,
+ 0x3AEF,0x1AE3,0x3496,0x09E1,0x3998,0x2233,0x1BB6,0x2E2E,
+ 0x0020,0x2736,0x0B01,0x3417,0x1D61,0x01DC,0x2635,0x17DB,
+ 0x3E37,0x0358,0x3491,0x0CDE,0x2284,0x377B,0x0DF0,0x3F61,
+ 0x0367,0x2E02,0x0D9B,0x27D8,0x1285,0x299C,0x0DC4,0x2ED1,
+ 0x06D6,0x1CFF,0x3A46,0x10AB,0x25DA,0x083C,0x2213,0x39E2,
+ 0x118E,0x32E6,0x1373,0x2F38,0x1C7E,0x262C,0x072E,0x3DB9,
+ 0x2235,0x1B2F,0x316F,0x1403,0x2CA5,0x0C43,0x25B2,0x37EE,
+ 0x0A03,0x3EBD,0x0749,0x1A04,0x3A67,0x16BE,0x0576,0x29A2,
+ 0x0D65,0x38CD,0x1C5D,0x3039,0x1EF6,0x075D,0x2351,0x14E3,
+ 0x3CD8,0x1DA5,0x352D,0x0FED,0x3BDA,0x2159,0x0B99,0x3762,
+ 0x2392,0x3316,0x0199,0x283B,0x3953,0x1499,0x0C28,0x3E3E,
+ 0x2890,0x0357,0x2B88,0x0FF5,0x3360,0x1338,0x3FD4,0x14A3,
+ 0x030A,0x27AD,0x0DC8,0x2DCA,0x1847,0x287A,0x0675,0x1D84,
+ 0x37C7,0x163C,0x292B,0x1153,0x3179,0x1754,0x2C0C,0x149C,
+ 0x2413,0x3499,0x0D92,0x3BB3,0x20C2,0x1020,0x3B26,0x0CFC,
+ 0x3678,0x059B,0x3EB2,0x1D6F,0x23A6,0x0FAE,0x3270,0x1E3D,
+ 0x06E5,0x2C78,0x112D,0x28D7,0x0EAC,0x2B41,0x0850,0x2131,
+ 0x3F95,0x167D,0x2C08,0x0692,0x2863,0x3CC5,0x0DBB,0x2D47,
+ 0x100F,0x2ACC,0x2153,0x1527,0x2D95,0x07B1,0x2B12,0x1892,
+ 0x329A,0x14F8,0x3603,0x1768,0x3AF7,0x0634,0x373A,0x21F9,
+ 0x16DF,0x2C7C,0x0A97,0x1F97,0x3645,0x19F3,0x2D7E,0x0567,
+ 0x2A3A,0x0CBC,0x286D,0x1936,0x038A,0x39B0,0x1FBC,0x15B3,
+ 0x0172,0x37A4,0x08A5,0x3FB3,0x19F9,0x3258,0x0540,0x1E12,
+ 0x28CF,0x17AB,0x22C0,0x3487,0x0AD4,0x260A,0x3D7A,0x1200,
+ 0x34CA,0x229F,0x084D,0x145B,0x3E03,0x1765,0x32A5,0x1FA7,
+ 0x08E3,0x2D9B,0x033D,0x26EF,0x0D22,0x2E43,0x1E05,0x1485,
+ 0x07D3,0x1FBD,0x3F45,0x0D04,0x1810,0x3440,0x20E9,0x060A,
+ 0x1E49,0x37A2,0x0BB8,0x3CE5,0x18BC,0x248B,0x0862,0x2D68,
+ 0x3B3C,0x15F4,0x3395,0x1C51,0x0B8E,0x3F70,0x220E,0x0CB1,
+ 0x23AA,0x01BB,0x395F,0x1F78,0x04BC,0x3EE9,0x0BD7,0x35D4,
+ 0x062C,0x1B72,0x2D89,0x167A,0x0983,0x2F88,0x1865,0x247F,
+ 0x1DFD,0x2DF8,0x0DCA,0x29F2,0x0803,0x3B7F,0x0133,0x3754,
+ 0x220C,0x182B,0x3E2E,0x01BA,0x35FB,0x130F,0x3B4A,0x18BF,
+ 0x0C4E,0x3311,0x1267,0x38C3,0x0FC2,0x1F46,0x32D9,0x0873,
+ 0x3906,0x1E21,0x06C4,0x3B31,0x19E4,0x333A,0x116B,0x28A9,
+ 0x0B19,0x2689,0x004C,0x2D28,0x0C09,0x2533,0x1EB0,0x01C7,
+ 0x33FD,0x0FC5,0x3F29,0x2425,0x02C9,0x3130,0x0DFF,0x36EC,
+ 0x1AAF,0x3E38,0x07BC,0x37E6,0x22A4,0x0BE4,0x33DD,0x2A40,
+ 0x1D40,0x24E4,0x1837,0x281B,0x02B4,0x206A,0x3CC1,0x14CF,
+ 0x32EE,0x020C,0x2CF9,0x1353,0x2AC6,0x1126,0x1EBE,0x3069,
+ 0x017C,0x17E1,0x3AA2,0x26B9,0x02F6,0x2C51,0x0C7F,0x3B02,
+ 0x25C0,0x125F,0x3923,0x1671,0x3602,0x0508,0x3E1F,0x24B2,
+ 0x39C3,0x10B6,0x25AC,0x1CF0,0x2D76,0x02E2,0x2785,0x32B1,
+ 0x0DC9,0x21FF,0x30B7,0x1C3E,0x044B,0x3828,0x1FA8,0x10D7,
+ 0x0ADC,0x2946,0x0526,0x3A9E,0x20D9,0x03AA,0x3420,0x17C1,
+ 0x3D9E,0x1E99,0x0DB0,0x348D,0x2589,0x156B,0x2E6A,0x11CD,
+ 0x282D,0x3E5B,0x0226,0x2299,0x3894,0x1C50,0x03C3,0x31F7,
+ 0x0A52,0x174C,0x3406,0x1170,0x3022,0x14B1,0x2A48,0x12CC,
+ 0x2EDB,0x0BD2,0x24F0,0x2098,0x19F4,0x2FCD,0x049E,0x3132,
+ 0x2347,0x02F1,0x27A1,0x1CD4,0x2FBD,0x03F2,0x23E1,0x1A64,
+ 0x26F6,0x1244,0x3025,0x23B0,0x0278,0x20DD,0x3C26,0x0570,
+ 0x38B7,0x107B,0x3DCD,0x212A,0x1A0F,0x3302,0x1102,0x3CA7,
+ 0x1990,0x2774,0x051C,0x1820,0x3912,0x143F,0x2803,0x2007,
+ 0x002C,0x1EB4,0x2C24,0x0F92,0x3062,0x1E29,0x1496,0x05E7,
+ 0x3B28,0x0C60,0x34D2,0x1160,0x3917,0x0D85,0x2AD7,0x07FC,
+ 0x1F8A,0x370F,0x0CDB,0x3B75,0x036B,0x33F4,0x0913,0x2490,
+ 0x1CF9,0x2D1D,0x0F8A,0x2088,0x3798,0x1050,0x292A,0x01D2,
+ 0x1A93,0x3116,0x0813,0x2A2C,0x107F,0x2930,0x17C8,0x025F,
+ 0x1ABD,0x3224,0x04A3,0x37E1,0x0A85,0x3D5F,0x0F25,0x1C81,
+ 0x3B9C,0x1590,0x0701,0x2816,0x2E60,0x11AF,0x31FC,0x23FD,
+ 0x3079,0x12F2,0x2C0B,0x0FCC,0x25FE,0x2F97,0x0EB7,0x2ABB,
+ 0x06F1,0x26DF,0x2F22,0x16E2,0x09D8,0x2A00,0x003B,0x39C0,
+ 0x1F53,0x0EE6,0x1E2E,0x3423,0x075B,0x266E,0x3F2F,0x12C3,
+ 0x3A52,0x21DD,0x01F1,0x3DD2,0x1B94,0x2415,0x09B9,0x3C99,
+ 0x0412,0x350C,0x142D,0x3A58,0x0AC3,0x2604,0x2019,0x0FAB,
+ 0x37FA,0x1A46,0x3D94,0x0943,0x1812,0x3BC8,0x146A,0x3738,
+ 0x0075,0x3FA4,0x0AFB,0x17B1,0x383A,0x0EF2,0x1C0D,0x2C1E,
+ 0x1637,0x3178,0x1BE9,0x0881,0x3975,0x03C4,0x2FA3,0x2321,
+ 0x0958,0x30A1,0x1CA4,0x2D1A,0x0D3C,0x2B15,0x08A9,0x3BE8,
+ 0x1792,0x3391,0x13EC,0x2682,0x0208,0x3EE3,0x2368,0x310E,
+ 0x0FAA,0x298A,0x04BF,0x2E36,0x21F6,0x16D9,0x233D,0x3A10,
+ 0x0F35,0x26DA,0x1A86,0x2034,0x2F64,0x186E,0x388D,0x0DC7,
+ 0x3F73,0x05D3,0x337F,0x09CA,0x1B06,0x30AF,0x1348,0x34DA,
+ 0x23E2,0x0E72,0x3F9D,0x1CEA,0x335D,0x0947,0x3002,0x1F68,
+ 0x2CD1,0x0EDC,0x2974,0x114C,0x2B9F,0x22E3,0x16B0,0x2FA9,
+ 0x011A,0x2634,0x3971,0x1730,0x099C,0x3DF2,0x0010,0x1CF3,
+ 0x0720,0x3EB6,0x1EC3,0x3767,0x0892,0x1BA0,0x39CE,0x13AA,
+ 0x3306,0x199F,0x031F,0x3A57,0x2079,0x36E0,0x1AEB,0x238C,
+ 0x07D6,0x32DF,0x2747,0x1444,0x2CFE,0x108E,0x2057,0x2ABA,
+ 0x06B6,0x2CA1,0x19AD,0x2721,0x053D,0x31CE,0x1EF1,0x157B,
+ 0x2B90,0x107D,0x2944,0x0606,0x31B9,0x14F2,0x3D21,0x1DF5,
+ 0x07E9,0x2CF8,0x0F05,0x2577,0x3528,0x0C1B,0x2979,0x0EA4,
+ 0x2C12,0x13F0,0x3234,0x21A9,0x08AB,0x2307,0x307B,0x0BDF,
+ 0x255F,0x0441,0x2ACE,0x223F,0x0F39,0x280F,0x1DAB,0x0E78,
+ 0x3AA4,0x14D3,0x359B,0x077A,0x3DEB,0x1E73,0x34EE,0x0DBA,
+ 0x2FC1,0x06AC,0x3ACD,0x0B40,0x34BB,0x17D1,0x0924,0x1B8D,
+ 0x3642,0x1569,0x3E5F,0x1C3D,0x08EE,0x30F0,0x010E,0x1BCE,
+ 0x321D,0x04DF,0x3EFA,0x0A15,0x2514,0x068C,0x2178,0x2DD6,
+ 0x1565,0x27F8,0x16D8,0x3C12,0x2209,0x067D,0x3E83,0x1F2E,
+ 0x0537,0x2D31,0x1963,0x0030,0x20DF,0x3B78,0x13FE,0x3643,
+ 0x0B50,0x3BF5,0x15E9,0x35C6,0x1B81,0x06BF,0x3AC6,0x0B2B,
+ 0x2ABD,0x1A47,0x0D00,0x34BA,0x1DA6,0x24C7,0x193E,0x369E,
+ 0x2995,0x1AEA,0x0207,0x166A,0x327F,0x2380,0x0080,0x28F2,
+ 0x0A6C,0x3C2A,0x1D4E,0x24C4,0x1328,0x05C0,0x3212,0x0D72,
+ 0x3BF3,0x19E0,0x0433,0x3CF5,0x0AE6,0x3614,0x00E1,0x1AB6,
+ 0x36D0,0x0CC4,0x396A,0x152E,0x359C,0x0E44,0x384D,0x256F,
+ 0x08CF,0x3FD4,0x1E87,0x36AD,0x0DDB,0x2AD0,0x00DB,0x2E9C,
+ 0x2253,0x1618,0x3361,0x0163,0x20B1,0x2E58,0x0625,0x3441,
+ 0x1CB3,0x25D2,0x0471,0x3C71,0x1B35,0x35A4,0x0100,0x3E80,
+ 0x1490,0x37F0,0x124F,0x362B,0x178C,0x3FD4,0x060B,0x2C0D,
+ 0x20B3,0x00C9,0x1F7D,0x299F,0x167B,0x022C,0x1B7D,0x26FB,
+ 0x126E,0x29F3,0x2090,0x2EA8,0x1130,0x2A61,0x1F5B,0x2DAD,
+ 0x007B,0x2798,0x0E21,0x2477,0x3772,0x107E,0x3DDB,0x25D4,
+ 0x130D,0x29ED,0x1626,0x314C,0x1438,0x3D49,0x1B4F,0x026D,
+ 0x35A7,0x0B0D,0x2A92,0x0099,0x2F67,0x193A,0x2550,0x0B5D,
+ 0x3978,0x113C,0x3692,0x233F,0x156D,0x2418,0x05A7,0x1E5F,
+ 0x28AB,0x0716,0x2538,0x0085,0x2ED6,0x2189,0x1960,0x3198,
+ 0x104B,0x3F28,0x22E6,0x02A5,0x3125,0x0DF8,0x2C83,0x11FC,
+ 0x0A3A,0x33F2,0x1FAD,0x2CF0,0x0E16,0x18D9,0x3E94,0x15F9,
+ 0x2B6B,0x1055,0x30BA,0x0826,0x3F9C,0x27A3,0x1664,0x2AA1,
+ 0x1253,0x2466,0x304A,0x117B,0x290B,0x159E,0x24EC,0x315A,
+ 0x11E1,0x288F,0x1F2B,0x0851,0x2043,0x2E19,0x0055,0x1A6C,
+ 0x2F27,0x1787,0x027F,0x1B5C,0x281E,0x12A7,0x33B7,0x0CCF,
+ 0x39F9,0x0547,0x1C74,0x3F0F,0x102E,0x1AE1,0x3AC2,0x186A,
+ 0x0905,0x2F3E,0x1EDC,0x0F58,0x2E0E,0x12E0,0x2987,0x18D1,
+ 0x283C,0x0D3E,0x2DBA,0x0209,0x3097,0x0C4F,0x3382,0x114A,
+ 0x3734,0x1A6F,0x3CE7,0x0A79,0x32CE,0x2030,0x2EEF,0x04E8,
+ 0x3F97,0x1B01,0x0324,0x18F4,0x3D15,0x0478,0x38A4,0x1334,
+ 0x3B83,0x1706,0x2F71,0x03B9,0x1A7F,0x2C90,0x17DE,0x0AEE,
+ 0x3845,0x0DFE,0x3662,0x0010,0x2C2D,0x0E95,0x3201,0x267B,
+ 0x11A8,0x3AEC,0x13CB,0x32C5,0x0F6B,0x2C18,0x0E42,0x31A3,
+ 0x1D50,0x2A82,0x06ED,0x31DA,0x0A48,0x3818,0x1B9A,0x3D7E,
+ 0x120C,0x34A9,0x184F,0x3FC3,0x0D9E,0x38BC,0x03E7,0x202E,
+ 0x357C,0x0639,0x2EAA,0x1F59,0x13DD,0x391B,0x054D,0x3BE4,
+ 0x2843,0x1339,0x3B52,0x06B1,0x37F9,0x2783,0x0BFF,0x33B6,
+ 0x0513,0x3722,0x1506,0x2D23,0x1CB7,0x0AEA,0x3904,0x02C7,
+ 0x2EEB,0x0B93,0x1FDB,0x3752,0x06C8,0x3A0F,0x1C19,0x08F6,
+ 0x3D60,0x02DA,0x3493,0x1932,0x3EDB,0x0FD3,0x2259,0x3B54,
+ 0x0EFF,0x3497,0x1F92,0x3919,0x0763,0x3E74,0x1CEE,0x2714,
+ 0x1741,0x2311,0x2B5C,0x09B0,0x3047,0x2458,0x02CD,0x2768,
+ 0x3E25,0x0E10,0x3794,0x24AC,0x06FA,0x3A1C,0x0A7A,0x341D,
+ 0x0516,0x3A71,0x1B54,0x1FE5,0x242E,0x195E,0x2632,0x1E92,
+ 0x0834,0x2D8A,0x0F88,0x274B,0x13BC,0x39B9,0x1046,0x35EF,
+ 0x0AFA,0x31C2,0x1F1F,0x2CDE,0x0E59,0x2702,0x103C,0x2B65,
+ 0x06DA,0x3376,0x0CE9,0x3C86,0x21BB,0x0622,0x354E,0x20C7,
+ 0x032C,0x2DC8,0x1D80,0x23C4,0x19A4,0x399E,0x073B,0x200F,
+ 0x2B77,0x04CA,0x2432,0x1DB8,0x36F5,0x0443,0x3CFD,0x1831,
+ 0x027D,0x2187,0x3C8D,0x1752,0x2B09,0x0F81,0x2E1A,0x01FA,
+ 0x29BC,0x0D1F,0x2B3D,0x12F6,0x286F,0x161E,0x2C3A,0x11DB,
+ 0x258C,0x1D69,0x0EB4,0x3C6F,0x27E4,0x0B56,0x25BE,0x17E9,
+ 0x036E,0x2EEE,0x0C9F,0x2562,0x1E79,0x0418,0x300D,0x1B44,
+ 0x23E4,0x0D13,0x2663,0x0142,0x344C,0x13F3,0x223B,0x3345,
+ 0x153C,0x3E11,0x01AB,0x1B79,0x2B50,0x0EF8,0x2E37,0x21C8,
+ 0x182C,0x2D41,0x0D94,0x2AF9,0x0497,0x1D64,0x2C2C,0x0A0A,
+ 0x28D9,0x05C7,0x29FF,0x0C82,0x2D29,0x197B,0x038E,0x361D,
+ 0x0A58,0x3B9F,0x1456,0x36FB,0x1F00,0x11E7,0x3930,0x137D,
+ 0x1F8B,0x3141,0x01C1,0x1A0B,0x2BBC,0x1683,0x266B,0x1357,
+ 0x2C89,0x21BD,0x0865,0x3D4B,0x0A43,0x36B9,0x02FC,0x3E28,
+ 0x2264,0x172A,0x3839,0x037D,0x2BC7,0x0704,0x24C2,0x16EA,
+ 0x2A9C,0x1462,0x3A3E,0x0792,0x36B8,0x1B51,0x32A3,0x0B38,
+ 0x24F7,0x19B6,0x29D1,0x13B3,0x3185,0x1E07,0x0FC7,0x2945,
+ 0x3AAA,0x1550,0x0845,0x3CB1,0x0C6E,0x2591,0x1E2C,0x0BBB,
+ 0x3472,0x1A01,0x3EA4,0x079D,0x1B53,0x2A05,0x1383,0x271E,
+ 0x3A4F,0x14E6,0x097B,0x2F99,0x0388,0x2778,0x13B6,0x3263,
+ 0x1AA1,0x3A33,0x046F,0x33D2,0x084C,0x36E6,0x0A45,0x3E07,
+ 0x01B3,0x338F,0x2260,0x07AE,0x1C83,0x36C5,0x14C1,0x32BD,
+ 0x3D23,0x22BF,0x1906,0x35CA,0x1179,0x3BBD,0x2166,0x0FE5,
+ 0x3DCE,0x1C38,0x3879,0x172F,0x20E2,0x3CE8,0x0893,0x1D1E,
+ 0x28A4,0x0F91,0x31B7,0x23E6,0x1474,0x3FBA,0x0391,0x33B1,
+ 0x0A9B,0x1CE8,0x39D0,0x122B,0x2693,0x3AA3,0x12DE,0x3693,
+ 0x158A,0x3D91,0x115F,0x32C1,0x13DF,0x2486,0x314E,0x11AA,
+ 0x2CD8,0x1BEE,0x025E,0x25ED,0x071F,0x3277,0x0B08,0x2DB0,
+ 0x05BC,0x23EC,0x1CE7,0x3D8B,0x10FC,0x34FB,0x0329,0x3F25,
+ 0x1E63,0x11A9,0x2F0A,0x15B7,0x29C2,0x13A1,0x2E96,0x0D08,
+ 0x31CD,0x0589,0x1D59,0x323B,0x17F7,0x3C49,0x0C05,0x332D,
+ 0x00FD,0x25CC,0x0CA5,0x29A9,0x1E45,0x0190,0x1FCE,0x3F66,
+ 0x14D6,0x35E8,0x023F,0x39D2,0x09E8,0x2676,0x3F3F,0x0C0D,
+ 0x1AFE,0x2730,0x34ED,0x1044,0x2FB1,0x03F8,0x2A3B,0x380D,
+ 0x12F5,0x282E,0x0CEE,0x21D1,0x39C9,0x10BD,0x3419,0x0A65,
+ 0x1C31,0x3126,0x2478,0x1060,0x3F07,0x0C72,0x38D8,0x230D,
+ 0x0AE8,0x1FCF,0x26E9,0x19AE,0x23CE,0x1C08,0x2E80,0x14EF,
+ 0x2936,0x1377,0x3AAF,0x1617,0x300A,0x00FF,0x2B39,0x0D42,
+ 0x1B5E,0x089E,0x31C6,0x015A,0x2B95,0x19F8,0x0930,0x2CCD,
+ 0x0254,0x29E4,0x09A8,0x2FDB,0x0584,0x2A06,0x18E5,0x367E,
+ 0x04B1,0x3A31,0x2099,0x060E,0x34F7,0x0BE2,0x2790,0x16F7,
+ 0x3BB1,0x253D,0x0179,0x3110,0x1EA4,0x07C5,0x2D9E,0x0301,
+ 0x23C6,0x1ACF,0x26D5,0x0185,0x3C07,0x08B0,0x1EBF,0x38C7,
+ 0x06A1,0x218D,0x3398,0x16B6,0x3EB3,0x156A,0x28F3,0x176D,
+ 0x3606,0x1094,0x322C,0x0646,0x28D5,0x0C77,0x2D6A,0x22AC,
+ 0x0939,0x38D2,0x0156,0x354A,0x0660,0x3BE9,0x168D,0x278E,
+ 0x12B4,0x39FA,0x24EE,0x0EBF,0x28CA,0x1206,0x2DDB,0x1CCB,
+ 0x3D67,0x10D2,0x3495,0x15F3,0x3C10,0x141E,0x2C75,0x0520,
+ 0x290C,0x0C40,0x27F6,0x11C1,0x2E0B,0x1888,0x014A,0x2286,
+ 0x3075,0x058A,0x193D,0x2B1C,0x137C,0x3FD4,0x15FC,0x2296,
+ 0x011D,0x326A,0x186D,0x2E3C,0x0B4E,0x28C4,0x0160,0x24F2,
+ 0x375B,0x0578,0x1AFA,0x3541,0x1672,0x2BCF,0x1BEF,0x04E3,
+ 0x3E6E,0x1452,0x3683,0x0CC7,0x3D36,0x0309,0x21CD,0x39A0,
+ 0x0C45,0x2DFC,0x0486,0x26D8,0x1979,0x3F63,0x122A,0x28E1,
+ 0x3862,0x20F0,0x10C6,0x3FD4,0x0E03,0x250A,0x3A27,0x147C,
+ 0x35E5,0x1274,0x3B2B,0x1A6A,0x25D7,0x0E3D,0x30D0,0x1368,
+ 0x2BE6,0x1A9B,0x0CA0,0x2E15,0x194F,0x29F5,0x12B7,0x3091,
+ 0x065D,0x1528,0x3601,0x221F,0x10FE,0x3381,0x14A0,0x1F4B,
+ 0x341F,0x0877,0x3981,0x204D,0x17D6,0x2F1C,0x0F3B,0x2658,
+ 0x18FD,0x3CDF,0x0FE0,0x2A83,0x0D30,0x2ECB,0x00C1,0x3BBF,
+ 0x0CF6,0x2A8C,0x15CA,0x38A1,0x17F4,0x3B72,0x1B45,0x1005,
+ 0x31B6,0x1746,0x2854,0x1A8D,0x2537,0x0BA4,0x2BB9,0x006B,
+ 0x2E0C,0x1AE7,0x091D,0x3F0D,0x0196,0x353C,0x1A3D,0x05CA,
+ 0x22CE,0x2F29,0x0444,0x27C8,0x0A35,0x30C9,0x18C1,0x37F5,
+ 0x0F4A,0x3D70,0x1F89,0x34AF,0x0505,0x38B1,0x1F6B,0x3635,
+ 0x116E,0x3C01,0x2484,0x01C6,0x32B6,0x1CAA,0x08CB,0x3B03,
+ 0x2061,0x1523,0x3D38,0x0362,0x3604,0x1454,0x3F65,0x18B6,
+ 0x0DA7,0x2151,0x2D08,0x00CA,0x26A2,0x07F4,0x33CA,0x21F0,
+ 0x0E2B,0x3167,0x010C,0x2D17,0x116D,0x2A79,0x1891,0x0689,
+ 0x32EB,0x0FA5,0x202C,0x3556,0x09AE,0x219E,0x3465,0x04EC,
+ 0x0F21,0x2AAC,0x17BC,0x21F5,0x2F8A,0x0598,0x1C6E,0x30A4,
+ 0x073A,0x1F3C,0x237A,0x0F8E,0x3253,0x1EF7,0x00AD,0x3F42,
+ 0x0A23,0x265C,0x37D3,0x1316,0x3C7C,0x0010,0x3898,0x0D60,
+ 0x204A,0x2BD8,0x1A1D,0x0568,0x3C7A,0x0B98,0x25E5,0x3F52,
+ 0x0D7C,0x2BF2,0x155B,0x3205,0x0D0D,0x22C7,0x3F6E,0x0049,
+ 0x2C33,0x0AAA,0x284A,0x0456,0x388E,0x2341,0x19B4,0x21ED,
+ 0x2FE1,0x03B1,0x27E2,0x0AB0,0x259F,0x0010,0x302F,0x2035,
+ 0x0556,0x3C7D,0x0DD8,0x33D0,0x120A,0x3851,0x1D06,0x3ADB,
+ 0x0E3F,0x34CB,0x23B2,0x14C4,0x2B2B,0x0AB8,0x2643,0x391E,
+ 0x13E2,0x1E8C,0x3EBB,0x122F,0x3870,0x21B0,0x0764,0x234C,
+ 0x3042,0x1AA5,0x0801,0x1789,0x2BBA,0x2344,0x150D,0x069C,
+ 0x2C41,0x0AC1,0x1E94,0x3905,0x0EB2,0x26C9,0x30B2,0x0DD9,
+ 0x2C5B,0x06FF,0x25CE,0x1FDE,0x1A3E,0x2C85,0x0C38,0x3009,
+ 0x1D2C,0x3D95,0x11B1,0x3842,0x1359,0x3B4F,0x0FA6,0x2F4B,
+ 0x1A3C,0x2066,0x25C3,0x17CF,0x3AF0,0x09D4,0x34EC,0x1DD1,
+ 0x24FE,0x1A0C,0x3CB9,0x1311,0x2FA5,0x10EE,0x1E1C,0x2D79,
+ 0x3DA3,0x02D9,0x36FD,0x0787,0x1526,0x3897,0x2696,0x114D,
+ 0x2885,0x3500,0x0360,0x3E48,0x07E4,0x378F,0x240F,0x1109,
+ 0x2E90,0x1CE4,0x02DD,0x24E9,0x0F55,0x2D65,0x1654,0x24AB,
+ 0x3E7C,0x0926,0x37FF,0x270E,0x16C0,0x2F90,0x00B1,0x18B7,
+ 0x30BF,0x1C2F,0x03DD,0x2500,0x37D2,0x058F,0x1CA7,0x33E9,
+ 0x12F4,0x35A9,0x14BA,0x30ED,0x1D70,0x083B,0x31E8,0x09A3,
+ 0x1DC7,0x3FD4,0x1276,0x365E,0x13E9,0x2B2F,0x0EB3,0x34AC,
+ 0x24D1,0x1432,0x2A4D,0x03E0,0x2D2B,0x1902,0x07B2,0x20C1,
+ 0x2880,0x0430,0x1DBC,0x366A,0x1098,0x3B74,0x2068,0x0D81,
+ 0x2C48,0x0838,0x2212,0x2DA5,0x02AA,0x1BBE,0x3673,0x1634,
+ 0x00B6,0x2CBE,0x1E6D,0x3BB7,0x12DC,0x09AA,0x3E79,0x284C,
+ 0x1669,0x33E0,0x1229,0x2229,0x2E59,0x0546,0x1B76,0x3594,
+ 0x163D,0x3896,0x0F95,0x3342,0x0664,0x2332,0x3921,0x03C8,
+ 0x2992,0x0734,0x27F7,0x0AA8,0x2DED,0x1D8A,0x2A3F,0x029D,
+ 0x3C2C,0x0A22,0x3768,0x0742,0x1CC3,0x2FC5,0x12AC,0x3EE7,
+ 0x005E,0x3109,0x081D,0x2A74,0x024D,0x3A4D,0x08F0,0x22A0,
+ 0x0C30,0x315D,0x1ADB,0x236D,0x3247,0x186B,0x0040,0x3EC4,
+ 0x0A0F,0x19BF,0x2DDC,0x1666,0x2AEC,0x13D1,0x1DF6,0x3564,
+ 0x0766,0x3AC7,0x17D9,0x3385,0x212D,0x0A63,0x365A,0x03F7,
+ 0x13FF,0x2DDA,0x1E2A,0x1054,0x2A20,0x0EC7,0x38E7,0x2453,
+ 0x06E3,0x3ABE,0x212B,0x0B3F,0x1DC1,0x3052,0x0E98,0x2777,
+ 0x1FD8,0x07BE,0x3AF1,0x2113,0x10F4,0x3DA4,0x1643,0x382A,
+ 0x0FB3,0x227C,0x2C65,0x073D,0x30FD,0x1CA5,0x3DFD,0x0A14,
+ 0x1E10,0x375D,0x0B29,0x3F8F,0x0FA0,0x267E,0x363C,0x10D1,
+ 0x3E97,0x184B,0x2FF0,0x071B,0x28FD,0x198D,0x0319,0x3783,
+ 0x11AD,0x33CF,0x1956,0x0CC0,0x34EA,0x2948,0x09B8,0x207A,
+ 0x3A69,0x0D14,0x32CC,0x0364,0x2126,0x31C1,0x1FE0,0x0DA1,
+ 0x2FE0,0x037A,0x3DBF,0x0872,0x1751,0x3C52,0x2396,0x02B1,
+ 0x28D6,0x0AD1,0x2DEF,0x1720,0x3C45,0x1032,0x1E02,0x322F,
+ 0x128C,0x2F01,0x15D0,0x3490,0x2295,0x0618,0x18F1,0x34FD,
+ 0x15AD,0x2B0F,0x1257,0x30D9,0x249F,0x0404,0x288A,0x0D29,
+ 0x2C11,0x16EF,0x378D,0x2087,0x1A7E,0x2369,0x33B5,0x176A,
+ 0x1CBA,0x2753,0x101C,0x3ADD,0x0B47,0x215E,0x2C88,0x15E2,
+ 0x2447,0x3999,0x0EA2,0x2725,0x0CD3,0x3B7D,0x043E,0x2852,
+ 0x20DB,0x0D80,0x28F6,0x063A,0x3F02,0x19EB,0x27D0,0x1C63,
+ 0x343F,0x22E8,0x0252,0x3DA8,0x0781,0x34CF,0x1EB6,0x134B,
+ 0x2B47,0x108B,0x2861,0x3DDF,0x121A,0x225D,0x3A4B,0x032A,
+ 0x2E95,0x1A42,0x2506,0x01B7,0x2BA9,0x1F24,0x04CE,0x2029,
+ 0x2DEE,0x0230,0x1AA6,0x3A74,0x16FF,0x0480,0x2326,0x2EB2,
+ 0x028C,0x28B4,0x1B70,0x2186,0x30EB,0x020B,0x1BB5,0x31FE,
+ 0x0B0B,0x25A2,0x154C,0x3CBA,0x0E8E,0x3313,0x2338,0x1C5C,
+ 0x3067,0x0023,0x3B41,0x2584,0x174A,0x0EEA,0x3D2C,0x26A6,
+ 0x1124,0x2A1A,0x13C0,0x2610,0x3833,0x1598,0x0039,0x39E4,
+ 0x2100,0x19B2,0x2771,0x1D5A,0x2F80,0x0D78,0x1916,0x3701,
+ 0x1411,0x3E0C,0x1C7B,0x005C,0x2958,0x2089,0x08E0,0x22D0,
+ 0x37D0,0x0D6F,0x3BB6,0x0316,0x170E,0x3FD4,0x2656,0x0B32,
+ 0x28A7,0x0564,0x3DAD,0x1E61,0x0ED1,0x345F,0x1409,0x3925,
+ 0x1D38,0x0BC3,0x268B,0x0DC5,0x3E55,0x0609,0x14B9,0x2C82,
+ 0x3BFA,0x084E,0x2EBB,0x03D8,0x1DB1,0x3CAE,0x106D,0x3620,
+ 0x04E5,0x1C1B,0x3204,0x01E3,0x2C6E,0x1811,0x3082,0x1265,
+ 0x3D9C,0x1653,0x2F98,0x1FB7,0x14D7,0x2ABE,0x06FC,0x3A90,
+ 0x09EC,0x1870,0x316E,0x15A3,0x2C44,0x21AA,0x0350,0x3CCA,
+ 0x0BF0,0x3714,0x198A,0x01D3,0x2D5F,0x090F,0x1895,0x34C3,
+ 0x125B,0x3E5D,0x0F8D,0x2FB7,0x0DF9,0x3330,0x19E9,0x3567,
+ 0x0E67,0x3CA8,0x26A3,0x0966,0x2908,0x37F2,0x0D52,0x188B,
+ 0x3C0C,0x1088,0x357F,0x06E7,0x1668,0x3B10,0x22E4,0x05A2,
+ 0x1FEC,0x38F9,0x012C,0x1C78,0x2BEB,0x0577,0x3FD4,0x0963,
+ 0x151A,0x282C,0x1DF9,0x0617,0x3983,0x22A9,0x03B5,0x191D,
+ 0x35C5,0x055C,0x3FBF,0x1B1C,0x08A0,0x2DB2,0x1C9F,0x257A,
+ 0x078D,0x37A0,0x0BCE,0x34F2,0x00B3,0x24D6,0x3169,0x0965,
+ 0x2A90,0x05B0,0x2459,0x3560,0x0E3B,0x3A44,0x2B2D,0x1538,
+ 0x01AC,0x261F,0x1AB9,0x2149,0x3092,0x0F3D,0x200A,0x3954,
+ 0x1137,0x3393,0x2220,0x01DE,0x39E3,0x19D3,0x2E5C,0x0657,
+ 0x2474,0x3C23,0x03A9,0x2D90,0x15C8,0x2829,0x3672,0x00A9,
+ 0x12CB,0x3288,0x1473,0x20CE,0x30E0,0x068F,0x2919,0x0C63,
+ 0x2E70,0x222D,0x0B3B,0x3D0C,0x115E,0x36D4,0x0BAE,0x2535,
+ 0x0151,0x3320,0x098E,0x394E,0x0235,0x3283,0x1F3B,0x11EE,
+ 0x2EC3,0x20A0,0x0E37,0x37BA,0x0C75,0x1B0B,0x321B,0x1710,
+ 0x2F1F,0x054E,0x2012,0x3581,0x15BB,0x3C33,0x25F6,0x0BD5,
+ 0x2AC7,0x0685,0x35FA,0x1B85,0x3A5D,0x0A2A,0x288C,0x0785,
+ 0x24E2,0x1EA3,0x10CC,0x32F5,0x1F9D,0x1184,0x2114,0x3284,
+ 0x0BED,0x271D,0x1978,0x2258,0x2B20,0x0980,0x2E2F,0x17B4,
+ 0x2A7A,0x101F,0x3104,0x26A9,0x1129,0x2F7F,0x174B,0x2A0A,
+ 0x20EB,0x3DB5,0x0BF4,0x2B8A,0x1061,0x2E2A,0x1D4C,0x3135,
+ 0x0BC1,0x2D3D,0x0FAC,0x23D7,0x3462,0x0E87,0x3DE8,0x0FFA,
+ 0x3155,0x130C,0x2AC4,0x16A5,0x3EF3,0x11CE,0x1F50,0x3B45,
+ 0x19EA,0x320C,0x10E7,0x1EC0,0x2707,0x0487,0x1BB3,0x3EAC,
+ 0x1CFC,0x3413,0x0843,0x2BB2,0x09BC,0x32FA,0x001B,0x1B3F,
+ 0x2E9F,0x0932,0x1736,0x2C07,0x205D,0x098F,0x1F22,0x36EE,
+ 0x10B1,0x1B1D,0x3328,0x1017,0x38E4,0x095C,0x1F86,0x252D,
+ 0x1E38,0x0B8D,0x3F0A,0x26EA,0x0D87,0x37EF,0x1EB1,0x3405,
+ 0x11C3,0x3ABD,0x1725,0x2052,0x27B4,0x0550,0x1F95,0x38D1,
+ 0x1B84,0x2389,0x18C9,0x2739,0x1DE1,0x0F20,0x3D51,0x261B,
+ 0x0107,0x3BE6,0x2824,0x049D,0x2599,0x3EC6,0x0F5C,0x28B0,
+ 0x145F,0x23F7,0x311B,0x0CC5,0x290F,0x0608,0x2077,0x3294,
+ 0x15D2,0x289E,0x1EE1,0x037B,0x236E,0x141D,0x3F43,0x17E8,
+ 0x38D0,0x042B,0x3687,0x192C,0x0145,0x3ED1,0x29E3,0x04EE,
+ 0x1E3E,0x3957,0x00B0,0x3E52,0x0D98,0x35C9,0x141A,0x3D9F,
+ 0x0C1C,0x36AC,0x1F85,0x09A4,0x3A5A,0x2291,0x0D27,0x395B,
+ 0x0406,0x1344,0x32FD,0x1FB5,0x3619,0x096C,0x3EC2,0x1460,
+ 0x2727,0x1B9B,0x377F,0x020D,0x184C,0x2924,0x04D3,0x2C16,
+ 0x1A84,0x3B8E,0x0575,0x286E,0x0A40,0x2D3A,0x041B,0x2636,
+ 0x0CA6,0x20E4,0x3FAD,0x0818,0x372E,0x17B9,0x3281,0x0B18,
+ 0x2FA6,0x100B,0x3D5A,0x1987,0x387E,0x1687,0x22D8,0x3E17,
+ 0x13C4,0x254F,0x37C0,0x0E30,0x3F77,0x151D,0x2AB2,0x0139,
+ 0x2CF2,0x21DE,0x087E,0x2712,0x1D08,0x3207,0x0E3E,0x3963,
+ 0x2CD4,0x227B,0x0267,0x1930,0x2C15,0x16CA,0x0177,0x1A14,
+ 0x2865,0x0339,0x2D07,0x0835,0x33A1,0x197C,0x2FE4,0x0FEF,
+ 0x2AD6,0x0C8B,0x3C36,0x0531,0x3723,0x2237,0x07DC,0x17F9,
+ 0x351F,0x0B81,0x1980,0x33BA,0x1D6A,0x086E,0x2E07,0x0064,
+ 0x331D,0x0A10,0x1AC8,0x3FD4,0x137F,0x3848,0x1A98,0x00F0,
+ 0x3A02,0x0A8B,0x3380,0x169E,0x2EBC,0x20E6,0x0092,0x307A,
+ 0x1545,0x2D48,0x0C2B,0x278A,0x31D0,0x0AF5,0x15AB,0x3474,
+ 0x2469,0x130E,0x316C,0x154B,0x2F7C,0x20B9,0x02B8,0x23F4,
+ 0x2C94,0x0477,0x18CC,0x344E,0x1606,0x01F6,0x3199,0x1A17,
+ 0x2375,0x2E61,0x187C,0x0233,0x1682,0x29DF,0x1C55,0x0138,
+ 0x393D,0x08FE,0x24F3,0x1DF8,0x3B14,0x1250,0x36AA,0x1E39,
+ 0x029C,0x2202,0x3030,0x10C1,0x332B,0x1461,0x3968,0x15FF,
+ 0x35FD,0x0200,0x281A,0x1D96,0x0EEC,0x2D86,0x1397,0x293C,
+ 0x05D1,0x1F73,0x2438,0x042E,0x272A,0x0B69,0x2D51,0x0795,
+ 0x2A73,0x036F,0x1BC0,0x302E,0x0498,0x32BF,0x177E,0x3D09,
+ 0x0E5A,0x35E9,0x1823,0x3FB5,0x01EB,0x19A2,0x2977,0x04C8,
+ 0x0F5A,0x37A3,0x1C79,0x3550,0x0747,0x3A2C,0x1F98,0x3F80,
+ 0x0A80,0x3675,0x1BD6,0x3DE4,0x1548,0x25E4,0x08ED,0x3FD4,
+ 0x03B8,0x33CB,0x1482,0x2EF5,0x0BD8,0x31A9,0x1C98,0x2A50,
+ 0x1132,0x3083,0x242B,0x1027,0x398E,0x168B,0x21F2,0x37F6,
+ 0x1164,0x3B19,0x252A,0x0294,0x2CF6,0x0AB3,0x300F,0x24B8,
+ 0x1489,0x2C84,0x1029,0x3C68,0x081A,0x3700,0x1B0F,0x2557,
+ 0x0896,0x1C3A,0x3D82,0x2141,0x0FEB,0x201B,0x3B46,0x1A5F,
+ 0x07CD,0x2C37,0x0A83,0x29A5,0x061E,0x1BD4,0x396E,0x19C5,
+ 0x0DF6,0x3B6F,0x2363,0x075C,0x214D,0x3E3F,0x1E40,0x07C9,
+ 0x3737,0x09ED,0x38AC,0x1EF5,0x3BC7,0x073F,0x3273,0x21E1,
+ 0x17BF,0x2F48,0x0DFD,0x321A,0x06BC,0x2CB8,0x0A69,0x2655,
+ 0x34B7,0x17ED,0x0928,0x3858,0x1BF6,0x23F1,0x07D7,0x2C38,
+ 0x0FF6,0x30AC,0x1336,0x38CE,0x24AA,0x0270,0x3CAA,0x0E1A,
+ 0x39B3,0x2A18,0x1412,0x35A2,0x121E,0x3B81,0x1D0A,0x361E,
+ 0x1081,0x3C02,0x23F6,0x0CE6,0x2950,0x1FE8,0x07D4,0x1E9E,
+ 0x28E0,0x04FF,0x2F41,0x142C,0x22C4,0x3591,0x10DE,0x3D72,
+ 0x25DF,0x0810,0x2DE0,0x148D,0x29F4,0x123F,0x2E34,0x0F12,
+ 0x2B7E,0x21AC,0x0DA3,0x2421,0x00A0,0x3A20,0x209A,0x1A55,
+ 0x2CEA,0x10D4,0x2888,0x1739,0x2B73,0x132F,0x39ED,0x039C,
+ 0x3F93,0x1FF6,0x0611,0x2BAD,0x028A,0x303A,0x0955,0x1CC0,
+ 0x2952,0x0643,0x1F6A,0x29B3,0x17C3,0x3680,0x1E1A,0x0E23,
+ 0x3EED,0x0591,0x25AD,0x1D10,0x2AEA,0x0DB6,0x320E,0x10BB,
+ 0x3B32,0x2A76,0x147A,0x05DE,0x3996,0x296D,0x0331,0x25A3,
+ 0x378B,0x1163,0x3D12,0x16B1,0x33A5,0x2386,0x0949,0x21B6,
+ 0x2FD8,0x1305,0x325E,0x1B04,0x2A34,0x0FB0,0x2DB9,0x1594,
+ 0x2797,0x1D7B,0x0E97,0x2D27,0x136F,0x27E7,0x1014,0x3CA5,
+ 0x0630,0x22DE,0x3E24,0x1484,0x277E,0x1997,0x3CF7,0x1602,
+ 0x0D28,0x3F8C,0x1DB6,0x2542,0x015B,0x3D3F,0x1AF2,0x216C,
+ 0x3BC9,0x0A55,0x2A70,0x06CC,0x1F13,0x3396,0x18C3,0x23CD,
+ 0x1E5D,0x0102,0x2EB1,0x0CF3,0x2C74,0x188E,0x0248,0x208B,
+ 0x2FD5,0x08D5,0x1849,0x3841,0x1210,0x3B59,0x1B3A,0x347F,
+ 0x1299,0x3ACC,0x2122,0x0A1E,0x2BCC,0x06D1,0x2E7E,0x17EE,
+ 0x3121,0x1F41,0x0ECB,0x3E66,0x0BDB,0x261D,0x0474,0x348A,
+ 0x1B1F,0x067C,0x316B,0x176B,0x2FC3,0x13B2,0x3498,0x0E62,
+ 0x22B4,0x3878,0x0791,0x3E20,0x0054,0x2571,0x0D7E,0x2CC8,
+ 0x0A99,0x1B34,0x36D5,0x13A3,0x3DB1,0x231D,0x1A35,0x3C3F,
+ 0x14CC,0x3507,0x0FDD,0x39E1,0x07EC,0x2352,0x03B6,0x3445,
+ 0x2106,0x19C3,0x38AA,0x023A,0x1801,0x3DF0,0x0536,0x28DC,
+ 0x1DA8,0x0280,0x22C2,0x339B,0x1835,0x0CA8,0x3013,0x0EA9,
+ 0x1EE3,0x2F3C,0x01B8,0x276E,0x0E33,0x374A,0x149B,0x3F20,
+ 0x0058,0x2AB4,0x0A86,0x3CF0,0x0342,0x3823,0x0B4B,0x352F,
+ 0x00AC,0x3F44,0x2349,0x0484,0x3438,0x0D2A,0x2B5D,0x15A9,
+ 0x306D,0x1AC9,0x0375,0x2B85,0x0B96,0x2F04,0x0106,0x23C2,
+ 0x2E7B,0x061C,0x2B52,0x1174,0x2F2A,0x0F3F,0x33E6,0x03D9,
+ 0x190C,0x2F06,0x1C41,0x3D7C,0x0D47,0x2795,0x076D,0x3222,
+ 0x0C10,0x378C,0x1A25,0x3F56,0x06A8,0x2248,0x31BD,0x115D,
+ 0x268F,0x1C62,0x323F,0x00BA,0x2D4D,0x0A9F,0x27C5,0x030C,
+ 0x2E00,0x0B64,0x1AAA,0x374D,0x15A4,0x3B3D,0x1D5B,0x0313,
+ 0x1269,0x3B9E,0x23C7,0x00CB,0x31A6,0x18D4,0x3995,0x1318,
+ 0x2517,0x3C42,0x1145,0x37D7,0x0B74,0x29F0,0x06C0,0x2EAD,
+ 0x0261,0x1D88,0x2683,0x1272,0x32C4,0x1953,0x35CC,0x1535,
+ 0x2699,0x2FD3,0x0EA1,0x2A4B,0x1830,0x0AD6,0x31C0,0x0415,
+ 0x2BFB,0x0C36,0x2EAC,0x12F1,0x1EF4,0x3D8A,0x1509,0x2815,
+ 0x0874,0x2F4C,0x0CCA,0x33D6,0x2402,0x11BB,0x2D0C,0x0E96,
+ 0x3145,0x18CB,0x2DF0,0x0975,0x280D,0x37F7,0x129E,0x3FBC,
+ 0x06BB,0x2365,0x14E7,0x3A12,0x1FD6,0x03DE,0x285B,0x1834,
+ 0x31DD,0x11B9,0x2732,0x146B,0x2CB9,0x2308,0x169D,0x21AD,
+ 0x2C28,0x0F52,0x2F15,0x18F7,0x2164,0x39F2,0x02AC,0x35F7,
+ 0x0A17,0x2015,0x33F7,0x16C5,0x390D,0x13E5,0x3703,0x1C15,
+ 0x0E76,0x33C0,0x1791,0x3A63,0x0C57,0x29BD,0x13B8,0x27A0,
+ 0x3806,0x148B,0x0096,0x222E,0x350D,0x1290,0x3AF4,0x1670,
+ 0x28C0,0x20FA,0x104E,0x2551,0x1BE1,0x39CA,0x0A3C,0x36E2,
+ 0x04F3,0x3EC0,0x147F,0x2575,0x1DAC,0x3648,0x1169,0x3E8A,
+ 0x16B5,0x2534,0x31E1,0x002D,0x28A1,0x0C16,0x24B6,0x381A,
+ 0x2B78,0x05DA,0x1B49,0x36A0,0x1537,0x28A3,0x0D6D,0x2F18,
+ 0x0214,0x1D9D,0x2A1C,0x042F,0x26ED,0x108A,0x3BCB,0x1FED,
+ 0x35A8,0x0EEB,0x3B01,0x1F5E,0x09B5,0x2960,0x04D1,0x3C87,
+ 0x2091,0x01CB,0x3B6B,0x0783,0x2163,0x361A,0x11B4,0x23D8,
+ 0x1DA0,0x3E70,0x0173,0x24DB,0x317C,0x0CA1,0x2E26,0x173B,
+ 0x3B37,0x12D3,0x291A,0x1E2F,0x08E9,0x3630,0x1CCF,0x3A16,
+ 0x0A53,0x35FC,0x134E,0x3E95,0x1F80,0x0052,0x1D58,0x26C1,
+ 0x1897,0x3183,0x1D8B,0x0BDC,0x30E7,0x1A8A,0x2EE8,0x0890,
+ 0x2116,0x3A8A,0x04F6,0x35A0,0x1CFD,0x087D,0x3B8F,0x0538,
+ 0x1C8D,0x36D3,0x06CD,0x3C64,0x0ACC,0x1B87,0x28F7,0x125A,
+ 0x24C3,0x3AFB,0x0D95,0x292C,0x051E,0x257C,0x09CF,0x288D,
+ 0x3C1B,0x21A0,0x033F,0x22C5,0x32C3,0x0500,0x3E6F,0x1D44,
+ 0x0852,0x232A,0x311D,0x1814,0x0510,0x2CB3,0x1CA0,0x02ED,
+ 0x3E2A,0x0885,0x3366,0x03B7,0x2B31,0x12E2,0x28BD,0x16CB,
+ 0x2C46,0x1E2D,0x09B2,0x3A8E,0x06B5,0x195F,0x2EF1,0x0D75,
+ 0x2A0C,0x075A,0x1EC1,0x3D64,0x11BF,0x333B,0x196F,0x0A94,
+ 0x1600,0x3517,0x273E,0x09F5,0x2AF6,0x0519,0x3DD0,0x2152,
+ 0x17E6,0x329E,0x0C8D,0x3E8C,0x14BC,0x2DB1,0x1AE6,0x093C,
+ 0x179C,0x2A29,0x0586,0x2455,0x34EB,0x136D,0x2E65,0x0FD2,
+ 0x18E1,0x3211,0x140A,0x1E68,0x2E17,0x00C3,0x277B,0x3944,
+ 0x0DAC,0x176E,0x2AED,0x1C4F,0x05E9,0x37A1,0x20B2,0x001C,
+ 0x1BD0,0x327E,0x044D,0x3BFE,0x18E6,0x26E3,0x0136,0x1704,
+ 0x2B4B,0x1F01,0x045F,0x2456,0x156C,0x2345,0x352A,0x09F8,
+ 0x36CC,0x04C9,0x3C69,0x2242,0x0730,0x3DFF,0x102B,0x37B9,
+ 0x1BA4,0x0C6F,0x29B4,0x0F11,0x2EA6,0x1853,0x2419,0x3176,
+ 0x10B9,0x2670,0x2056,0x1714,0x2323,0x31E0,0x0814,0x3F7C,
+ 0x1D3F,0x005F,0x2FAF,0x1180,0x3E96,0x18AB,0x3274,0x1661,
+ 0x074B,0x1B2C,0x2FD0,0x0B3C,0x1E62,0x25F3,0x0E9F,0x2EA2,
+ 0x1728,0x345A,0x09E2,0x3F6C,0x264A,0x0FE3,0x30F7,0x21F4,
+ 0x1150,0x2FFE,0x17FA,0x3C48,0x0DD3,0x3527,0x015C,0x3D3C,
+ 0x0C61,0x23A3,0x318F,0x15D8,0x2B79,0x2266,0x0203,0x38C9,
+ 0x14C5,0x34C1,0x1099,0x22E2,0x2B26,0x0560,0x3EF9,0x2377,
+ 0x2ECD,0x0C42,0x2049,0x3B00,0x118D,0x33BF,0x1E41,0x0977,
+ 0x3895,0x1431,0x25AA,0x1C17,0x343A,0x0189,0x3677,0x1E90,
+ 0x3F53,0x1156,0x320B,0x0DFA,0x1DE5,0x3EEE,0x0894,0x232D,
+ 0x397B,0x0BC9,0x22DA,0x380E,0x1248,0x3F30,0x199C,0x06E4,
+ 0x21CF,0x36B4,0x0B14,0x3BAD,0x1937,0x271C,0x108F,0x34C2,
+ 0x265F,0x0EEF,0x2A19,0x1125,0x2C47,0x0E09,0x3F7D,0x24CC,
+ 0x074A,0x3C6E,0x1B4D,0x389E,0x0827,0x2E3E,0x0F30,0x2A14,
+ 0x137A,0x2882,0x0F77,0x2D35,0x1773,0x263D,0x2046,0x0257,
+ 0x236B,0x3305,0x13EA,0x3FA9,0x0167,0x3776,0x0D99,0x1F9A,
+ 0x3DE1,0x09D0,0x33D4,0x0178,0x38CB,0x1541,0x2C2E,0x10B7,
+ 0x2DA7,0x1943,0x2228,0x34DC,0x0B0E,0x27EE,0x01E9,0x39B4,
+ 0x1EF8,0x359D,0x14CD,0x3CA4,0x1313,0x388C,0x20A4,0x022B,
+ 0x3A94,0x1567,0x2B93,0x0E58,0x200C,0x3A17,0x0AD9,0x36E7,
+ 0x1AD8,0x26AA,0x0BC6,0x1CEF,0x2D50,0x15B1,0x2746,0x13C7,
+ 0x2E68,0x1A81,0x0346,0x3576,0x0FBD,0x3CA6,0x1BA6,0x214A,
+ 0x2C02,0x0420,0x39B8,0x08FF,0x1770,0x30AD,0x1C4D,0x0197,
+ 0x11DC,0x3D2E,0x180F,0x02DC,0x2D52,0x21FB,0x10C0,0x3026,
+ 0x2312,0x05CC,0x3AD7,0x08A7,0x2182,0x2BD1,0x0D1A,0x2799,
+ 0x0317,0x2C77,0x185F,0x38FB,0x012A,0x25FB,0x1A4A,0x30B6,
+ 0x02D3,0x1D49,0x2D10,0x05B6,0x2ADC,0x09A1,0x3012,0x1C8E,
+ 0x3236,0x0469,0x2F1D,0x13F9,0x3322,0x09FD,0x3F67,0x1DAA,
+ 0x0B02,0x3D2B,0x1C84,0x3803,0x06D8,0x32F6,0x207F,0x11A4,
+ 0x3191,0x1522,0x2F77,0x0FBB,0x32AD,0x17A3,0x3DC1,0x031A,
+ 0x3911,0x1F18,0x3427,0x0124,0x39C7,0x0CC2,0x3480,0x1657,
+ 0x3BD5,0x05CF,0x25DC,0x1AC5,0x2AC9,0x134C,0x2FDD,0x02EA,
+ 0x19FD,0x2980,0x1212,0x2B0C,0x0CB2,0x2775,0x03CE,0x3352,
+ 0x0A78,0x3A42,0x0733,0x1CE3,0x2AE9,0x127A,0x30B0,0x0F9C,
+ 0x2C54,0x0BFB,0x2883,0x0014,0x2A57,0x0919,0x34B0,0x1AC7,
+ 0x2536,0x05BB,0x1C6A,0x3644,0x01C5,0x1957,0x2AB5,0x0661,
+ 0x2CDB,0x0032,0x38E8,0x247D,0x052E,0x3ACE,0x0B4C,0x349A,
+ 0x06D7,0x391D,0x2615,0x0CD1,0x296E,0x05C3,0x3077,0x0A51,
+ 0x132B,0x3151,0x1CD0,0x2181,0x3C4D,0x0F1F,0x2662,0x3704,
+ 0x2C26,0x067F,0x256C,0x377A,0x1A29,0x088F,0x3B6E,0x0013,
+ 0x1BBF,0x2B2E,0x1632,0x31D6,0x1008,0x19BA,0x3CEC,0x15CF,
+ 0x37AF,0x1F07,0x07D9,0x2075,0x2F26,0x1494,0x3773,0x0E86,
+ 0x21A4,0x3E00,0x0F71,0x357B,0x17E0,0x263E,0x0EFA,0x3AD8,
+ 0x11EB,0x28E6,0x0E5C,0x2572,0x0272,0x2C80,0x221D,0x04D7,
+ 0x3099,0x2329,0x0204,0x16EC,0x2DBD,0x1A51,0x0395,0x3750,
+ 0x0B7B,0x2674,0x01DF,0x2965,0x1FE6,0x0585,0x1E7A,0x2BB7,
+ 0x162E,0x08D3,0x1BAC,0x28FB,0x1223,0x2A41,0x065C,0x2E66,
+ 0x0DE3,0x1E71,0x3102,0x0A77,0x21C3,0x3C40,0x0C20,0x20F9,
+ 0x39A4,0x0642,0x3618,0x1B2D,0x3E59,0x12EC,0x3804,0x14A2,
+ 0x1F72,0x269B,0x1769,0x37BF,0x0432,0x3D7B,0x1A62,0x246E,
+ 0x055B,0x3F5D,0x108D,0x36DA,0x19E7,0x2F51,0x113F,0x2C19,
+ 0x0DDD,0x3D03,0x27F9,0x1119,0x3048,0x2509,0x0F76,0x3CD0,
+ 0x131B,0x3404,0x2038,0x0E34,0x31E2,0x1D9E,0x2905,0x186C,
+ 0x23FF,0x1F8F,0x1270,0x3FD4,0x146C,0x36B1,0x17F2,0x2426,
+ 0x3F2D,0x18D2,0x0B90,0x2D4E,0x02A3,0x2A1D,0x084F,0x1ACE,
+ 0x0F6A,0x3060,0x1D93,0x0ADE,0x325F,0x293E,0x1519,0x2703,
+ 0x3F31,0x0BE1,0x3708,0x0343,0x22CD,0x30C8,0x04F5,0x28EB,
+ 0x0A28,0x32CF,0x1B7F,0x3C0B,0x10A1,0x2963,0x048A,0x1EB9,
+ 0x335A,0x0820,0x2902,0x1C1A,0x0370,0x3CF4,0x2359,0x01E6,
+ 0x2C60,0x189D,0x3E1B,0x15BA,0x38E0,0x1D0E,0x0D9A,0x39F4,
+ 0x1F2F,0x134F,0x3525,0x2288,0x09A7,0x397D,0x286A,0x143E,
+ 0x2AF0,0x12DD,0x3BA5,0x0B09,0x3668,0x1A34,0x3A28,0x0B48,
+ 0x3335,0x23FB,0x3F55,0x0A39,0x353E,0x1D4A,0x3D45,0x1931,
+ 0x223C,0x38E6,0x1015,0x36CB,0x046D,0x171A,0x32C6,0x26E0,
+ 0x0E3A,0x2B8C,0x1E96,0x0431,0x1FD0,0x2A10,0x07CB,0x2499,
+ 0x3CFF,0x0249,0x32C2,0x0DFC,0x2EA7,0x1DC8,0x08B4,0x31BB,
+ 0x20E8,0x17D4,0x3007,0x230A,0x05EC,0x1F81,0x3ED0,0x03A6,
+ 0x32F7,0x1EC5,0x08CC,0x390C,0x20DE,0x0BFA,0x3256,0x1D0D,
+ 0x27BA,0x0927,0x1743,0x3FAA,0x1635,0x0848,0x3744,0x0295,
+ 0x3DDD,0x0A9E,0x2FAC,0x0065,0x2879,0x1D1F,0x08AA,0x344D,
+ 0x0146,0x22B6,0x3872,0x1562,0x35C7,0x1374,0x3A87,0x23BC,
+ 0x3FD4,0x14FA,0x38FC,0x133B,0x209F,0x056D,0x3623,0x0A3E,
+ 0x18EC,0x2D6F,0x125C,0x1F0E,0x2A89,0x0B41,0x3A06,0x13BA,
+ 0x2EAE,0x1288,0x2AA6,0x0563,0x33C4,0x0CB8,0x3A5F,0x24EA,
+ 0x12A0,0x2BDD,0x1434,0x38AF,0x20EF,0x1093,0x1DC6,0x379A,
+ 0x0C5F,0x30DF,0x0737,0x2850,0x0B8F,0x2E3F,0x1AC6,0x25DB,
+ 0x07CF,0x2EE2,0x0E4B,0x3EA1,0x1DCA,0x0F42,0x210E,0x3D14,
+ 0x06AD,0x3436,0x1CA9,0x2D00,0x0ED4,0x27C7,0x126B,0x2989,
+ 0x1AFB,0x0232,0x1588,0x2DFA,0x183C,0x03A1,0x2576,0x09B1,
+ 0x2CE1,0x00B4,0x2B35,0x1CBB,0x233A,0x2D73,0x0713,0x1969,
+ 0x34D4,0x1435,0x3CBB,0x16CE,0x3266,0x1025,0x2F6B,0x1CAB,
+ 0x0C85,0x2CF5,0x115C,0x28EA,0x13B5,0x2521,0x3B16,0x0D62,
+ 0x3641,0x02D1,0x1F9E,0x0C90,0x3B68,0x0F51,0x26D6,0x18F0,
+ 0x240D,0x1254,0x2D43,0x19D0,0x04DB,0x3E56,0x17D2,0x0345,
+ 0x3A55,0x211B,0x2A4A,0x03DA,0x2ED9,0x221A,0x19ED,0x30C2,
+ 0x11AC,0x2C1B,0x1534,0x3348,0x0EC2,0x3B96,0x2303,0x1688,
+ 0x202F,0x2F17,0x05D5,0x25F8,0x0992,0x31A5,0x1F36,0x0408,
+ 0x0CA7,0x2AE3,0x012E,0x2796,0x3E05,0x1796,0x2445,0x1DE3,
+ 0x3095,0x06B4,0x24F5,0x3C88,0x0F66,0x3354,0x1C5F,0x2588,
+ 0x00A1,0x3E27,0x0C1E,0x2779,0x165E,0x2D85,0x1B48,0x09EA,
+ 0x3BCA,0x002B,0x318D,0x0B83,0x281D,0x34E4,0x0A71,0x271A,
+ 0x1F55,0x134A,0x365B,0x16DA,0x3437,0x03F1,0x3CB3,0x10DD,
+ 0x3751,0x1603,0x2AAB,0x051F,0x31F2,0x2403,0x009E,0x1C67,
+ 0x30CF,0x17F3,0x0437,0x22A8,0x3EC1,0x00EF,0x3555,0x0736,
+ 0x3C3C,0x1F6C,0x36DD,0x0D7A,0x22D2,0x3A84,0x110D,0x35E4,
+ 0x12CD,0x3E7A,0x17F6,0x0CF4,0x382B,0x1287,0x3EF2,0x1FF8,
+ 0x0025,0x28BE,0x088B,0x2DE7,0x0A4C,0x3ADC,0x010A,0x340C,
+ 0x1848,0x228C,0x3F14,0x0859,0x3887,0x00C7,0x1985,0x2AB1,
+ 0x12E5,0x283F,0x396B,0x1693,0x2355,0x3202,0x0761,0x381B,
+ 0x0AF6,0x3AFC,0x00D2,0x3505,0x28E8,0x1218,0x2427,0x2FBE,
+ 0x14D4,0x0D03,0x3793,0x1E78,0x1110,0x3B55,0x0EA8,0x24EB,
+ 0x1F27,0x050B,0x39DC,0x1A60,0x2AF7,0x03C9,0x3111,0x0CFE,
+ 0x3DAA,0x1030,0x1E30,0x3BF2,0x19C6,0x2463,0x0E8B,0x33E3,
+ 0x2857,0x1624,0x3310,0x1B8C,0x095F,0x3460,0x025B,0x3810,
+ 0x144A,0x3A41,0x1A8C,0x0129,0x2CF7,0x17FB,0x0623,0x3866,
+ 0x1F45,0x14DF,0x34CC,0x0FF3,0x3D6D,0x0215,0x2221,0x3523,
+ 0x159F,0x26AF,0x177A,0x3FCE,0x064D,0x1A15,0x2D8D,0x04F4,
+ 0x3CA2,0x239A,0x007A,0x2986,0x1185,0x246C,0x17F5,0x29EA,
+ 0x0114,0x324C,0x0C3C,0x2692,0x1139,0x3B66,0x167C,0x2BA8,
+ 0x097E,0x273A,0x39E5,0x11BA,0x1E51,0x315B,0x1947,0x2DA1,
+ 0x0E94,0x2BD9,0x05F0,0x1DEC,0x3239,0x07EB,0x3020,0x19D1,
+ 0x278C,0x08B5,0x2162,0x2F34,0x030B,0x29C7,0x0B27,0x251E,
+ 0x3A48,0x10AD,0x3764,0x190F,0x26B5,0x1BCF,0x240E,0x1574,
+ 0x39D3,0x055F,0x1E1F,0x31DF,0x1C0F,0x218B,0x357E,0x0670,
+ 0x3D44,0x1BE7,0x08F2,0x3375,0x0149,0x1B30,0x29CD,0x1392,
+ 0x2ECA,0x1745,0x25BD,0x1E9D,0x0AA5,0x31B2,0x07B9,0x1B4C,
+ 0x3611,0x26BA,0x06AB,0x3158,0x259B,0x00ED,0x3399,0x093D,
+ 0x3C1A,0x284E,0x1E17,0x080F,0x1F83,0x37C8,0x1221,0x2CAA,
+ 0x071C,0x26F3,0x322D,0x0C62,0x2B97,0x0074,0x2E93,0x1281,
+ 0x0610,0x3AA9,0x0AC8,0x22AB,0x2F87,0x121D,0x2C56,0x0EFB,
+ 0x283E,0x0C78,0x346A,0x218C,0x0A5C,0x3FBB,0x2337,0x0E73,
+ 0x3036,0x22DB,0x03F0,0x2F5D,0x2011,0x1874,0x2B71,0x0739,
+ 0x3058,0x0D8A,0x2EED,0x1133,0x1FD9,0x3A24,0x147D,0x32A9,
+ 0x1959,0x0F86,0x3967,0x1A59,0x3FAE,0x0690,0x35D0,0x0D2C,
+ 0x3A8F,0x2140,0x1919,0x3043,0x1F82,0x07B0,0x3451,0x0CDC,
+ 0x3FD4,0x2039,0x0E63,0x2E81,0x086C,0x2532,0x0C67,0x20C3,
+ 0x3849,0x166C,0x2215,0x3E2F,0x1261,0x2A78,0x1CB6,0x02A9,
+ 0x3961,0x1B58,0x350E,0x11B7,0x3B35,0x161A,0x358B,0x1A79,
+ 0x09F2,0x2CF3,0x1CFB,0x035D,0x3FD4,0x0BAA,0x35DC,0x06F8,
+ 0x2801,0x12B6,0x2BC0,0x15FE,0x0C27,0x303B,0x1559,0x2999,
+ 0x1104,0x23D4,0x2EF9,0x0FD1,0x204C,0x3DFC,0x0EB0,0x35F8,
+ 0x2138,0x063E,0x3FD4,0x0EE7,0x3748,0x1487,0x3C05,0x2AD9,
+ 0x0161,0x18A6,0x3D13,0x0FF2,0x1A2D,0x2D18,0x14F5,0x29C4,
+ 0x179B,0x0D19,0x33C8,0x1423,0x2F59,0x09DF,0x2590,0x1C7D,
+ 0x399C,0x1944,0x0383,0x37E9,0x13EE,0x3E44,0x1B3D,0x36B6,
+ 0x2D69,0x216E,0x1744,0x3C37,0x047D,0x2648,0x1A07,0x3EB1,
+ 0x03E8,0x29FB,0x1033,0x2EB7,0x1E5C,0x1111,0x3547,0x1D33,
+ 0x077F,0x3B0E,0x1951,0x2602,0x08C6,0x376C,0x0E12,0x3E82,
+ 0x1D07,0x2899,0x0529,0x367F,0x2520,0x019C,0x29D8,0x0CCB,
+ 0x2502,0x2FC6,0x0887,0x2B1E,0x0BF8,0x3163,0x156F,0x27CA,
+ 0x1BBB,0x08DA,0x3E01,0x02F5,0x390B,0x1AD6,0x224B,0x2F0C,
+ 0x1A12,0x0255,0x35B3,0x1702,0x37CC,0x159A,0x3D96,0x0348,
+ 0x2654,0x09D3,0x2ED2,0x0010,0x26F7,0x0AD0,0x3CDC,0x2318,
+ 0x1491,0x2E32,0x04E4,0x2626,0x0BF3,0x2821,0x05C2,0x3182,
+ 0x241D,0x11F0,0x30E3,0x225A,0x1363,0x2BE8,0x1116,0x2FFB,
+ 0x1D71,0x3788,0x02B5,0x3AB1,0x25D1,0x04AF,0x3BE0,0x0B1B,
+ 0x3456,0x03AC,0x1922,0x37CE,0x275B,0x09E9,0x2DCE,0x0312,
+ 0x1A4B,0x2B25,0x12C8,0x2E2B,0x02A8,0x284B,0x2010,0x0E71,
+ 0x227F,0x2D7D,0x0A21,0x23D2,0x3817,0x0C22,0x3EE0,0x0453,
+ 0x35E0,0x2250,0x01B6,0x3E8F,0x1817,0x20FD,0x3C66,0x0219,
+ 0x153A,0x2FFD,0x23AB,0x0F9B,0x2920,0x1FDD,0x07D5,0x1E77,
+ 0x139D,0x01F4,0x318C,0x0DB2,0x2003,0x3951,0x07F5,0x1D74,
+ 0x339C,0x13AC,0x3D69,0x05A9,0x36E9,0x2740,0x0296,0x2C7B,
+ 0x213C,0x0BDA,0x35F1,0x15B2,0x30EC,0x1234,0x2929,0x19E1,
+ 0x02C2,0x3880,0x2324,0x0C71,0x1B80,0x347B,0x120E,0x3EDD,
+ 0x0344,0x1E44,0x3389,0x1407,0x26A7,0x1037,0x2C7D,0x039E,
+ 0x30CB,0x231A,0x16A3,0x2BED,0x0DF2,0x2A4C,0x04B4,0x13E7,
+ 0x3867,0x2356,0x0C23,0x2C29,0x04D6,0x28EF,0x0DAE,0x32D0,
+ 0x1A89,0x3B09,0x0FD0,0x35FE,0x1866,0x2C3E,0x0F9E,0x31D1,
+ 0x0780,0x1D52,0x3F62,0x16EB,0x338D,0x1070,0x3DCA,0x1ECE,
+ 0x0220,0x3C75,0x07F1,0x366E,0x1EEA,0x04E9,0x3B5C,0x21CA,
+ 0x0CE7,0x18DD,0x30FA,0x2095,0x0F16,0x2CE8,0x11F1,0x27DE,
+ 0x1477,0x3FB9,0x2570,0x06F3,0x14E1,0x3A04,0x1CDB,0x22E0,
+ 0x3C72,0x0A41,0x368E,0x21A1,0x1B08,0x39DB,0x0557,0x1DBF,
+ 0x3F3C,0x1398,0x32D5,0x1D5D,0x05AB,0x27F2,0x1B73,0x2BDB,
+ 0x114E,0x2DFE,0x1B24,0x274F,0x059C,0x31C5,0x0D79,0x29FE,
+ 0x35E1,0x08A4,0x1BED,0x330B,0x0525,0x35B4,0x17EC,0x3CE9,
+ 0x27CF,0x388A,0x2325,0x1991,0x2BDC,0x1188,0x30FC,0x2416,
+ 0x0AD7,0x2CBA,0x1C89,0x254A,0x0D26,0x1775,0x3276,0x12F0,
+ 0x3EB5,0x1AF6,0x279D,0x0148,0x21D6,0x3C34,0x05B1,0x334D,
+ 0x2093,0x0EE4,0x16E1,0x3CDA,0x27DC,0x0989,0x2CDD,0x202B,
+ 0x359E,0x0E9B,0x21B7,0x3BF7,0x0228,0x36A2,0x1ECA,0x3B7E,
+ 0x0F90,0x37F1,0x0BDD,0x21E4,0x3695,0x1586,0x3DAB,0x25BF,
+ 0x07EE,0x2DE3,0x14CE,0x216A,0x3C04,0x123B,0x2B49,0x1EA5,
+ 0x0821,0x1FBB,0x289A,0x14BB,0x310A,0x054B,0x37DD,0x1731,
+ 0x21D2,0x2B5F,0x0AA6,0x297C,0x0140,0x2DAE,0x2204,0x13C9,
+ 0x2C5C,0x18B3,0x2925,0x0D8E,0x2640,0x32EC,0x177F,0x01BC,
+ 0x3D92,0x2970,0x140F,0x0978,0x3EAA,0x1CD7,0x3337,0x019D,
+ 0x2F84,0x1F08,0x0E4F,0x32BB,0x2AD1,0x1708,0x05A0,0x33D5,
+ 0x11B8,0x3014,0x188C,0x0723,0x2C9C,0x1091,0x2647,0x30F5,
+ 0x0903,0x2907,0x02E9,0x3A9F,0x16A6,0x3657,0x0EFD,0x214F,
+ 0x38F2,0x0769,0x3B1D,0x1051,0x36FC,0x1649,0x2431,0x1EE2,
+ 0x10C7,0x278B,0x3F79,0x0E0E,0x2DC6,0x1073,0x2A5C,0x0BF9,
+ 0x1F57,0x1532,0x0652,0x3F71,0x09C8,0x3669,0x00BC,0x16BD,
+ 0x3B60,0x1886,0x01E0,0x38A7,0x2287,0x3C11,0x09D7,0x2871,
+ 0x04B3,0x331C,0x11E5,0x39BF,0x1D57,0x0D09,0x2C0A,0x0B46,
+ 0x3B38,0x2441,0x3241,0x069F,0x15D4,0x3A85,0x1AC2,0x07F9,
+ 0x17AC,0x2B81,0x05F4,0x1C26,0x2EE3,0x171B,0x07B6,0x1B6E,
+ 0x2943,0x0554,0x2E3B,0x1C09,0x015D,0x2D7C,0x0A73,0x1E6E,
+ 0x3504,0x188F,0x3A68,0x0669,0x1D24,0x2FE6,0x0195,0x3503,
+ 0x17B5,0x36FF,0x03D1,0x3FD4,0x0C03,0x1F28,0x2515,0x01D5,
+ 0x3BA3,0x0EF4,0x3656,0x139A,0x39F0,0x1DD8,0x0962,0x3401,
+ 0x0677,0x3705,0x12FE,0x3A09,0x1A8E,0x0995,0x2F12,0x24DC,
+ 0x1C0E,0x0740,0x36E5,0x233C,0x2A2A,0x06AA,0x1793,0x394C,
+ 0x22FA,0x082D,0x3AAD,0x1D9C,0x007C,0x2254,0x2CDA,0x0E31,
+ 0x2956,0x01E8,0x249D,0x3DAC,0x1544,0x3363,0x0C97,0x191A,
+ 0x389B,0x1238,0x2F4D,0x0D61,0x2601,0x0888,0x309A,0x0231,
+ 0x1D6C,0x2690,0x0B61,0x209E,0x2AD4,0x0ABD,0x3D6F,0x04A7,
+ 0x3857,0x18A7,0x0109,0x24BE,0x1A2A,0x3AE8,0x02EB,0x3455,
+ 0x0950,0x3061,0x1D32,0x28E5,0x1608,0x24A9,0x1DD3,0x2E7F,
+ 0x0868,0x26AB,0x329B,0x15D9,0x071E,0x1B59,0x2FFF,0x1563,
+ 0x2A7F,0x0F0E,0x2D04,0x0837,0x31D7,0x1525,0x22BD,0x2F4E,
+ 0x145E,0x00BD,0x1BB0,0x2EAB,0x23BD,0x0308,0x314F,0x1EEB,
+ 0x3DBC,0x1260,0x3808,0x24BD,0x09AB,0x3E7F,0x1F90,0x34A0,
+ 0x1211,0x3F2C,0x141C,0x33F8,0x2071,0x12C9,0x3993,0x0FFF,
+ 0x28F8,0x0059,0x2279,0x31C3,0x0F32,0x230B,0x3E7D,0x10A5,
+ 0x27E3,0x0E66,0x2E10,0x12F9,0x298F,0x3902,0x0D97,0x3326,
+ 0x18E7,0x2FE5,0x0470,0x2041,0x24A0,0x1108,0x38A2,0x17A5,
+ 0x26F9,0x0CAA,0x2E5D,0x0098,0x2064,0x3ED3,0x14E8,0x0B43,
+ 0x33C3,0x2715,0x1AB7,0x0045,0x1629,0x37B8,0x21D7,0x0A34,
+ 0x1A0D,0x2DBC,0x12C6,0x29EF,0x1AAE,0x3E81,0x0951,0x37AC,
+ 0x13F6,0x39A5,0x1D3E,0x0B22,0x27B9,0x0031,0x3AED,0x234A,
+ 0x0442,0x34C0,0x21D4,0x1BC5,0x3E33,0x1854,0x231C,0x3CCD,
+ 0x0F7C,0x2F0B,0x19C7,0x347C,0x0010,0x282F,0x179F,0x2D81,
+ 0x0B67,0x2B5B,0x1DCE,0x3934,0x0998,0x2383,0x1C25,0x2541,
+ 0x36A9,0x0F79,0x3A0A,0x037E,0x34D6,0x0D25,0x3D34,0x1131,
+ 0x36BC,0x20BC,0x0FBF,0x2E38,0x1E89,0x2B23,0x0033,0x3A0B,
+ 0x0AA2,0x3D1B,0x1BD5,0x24CE,0x17DC,0x3F1D,0x03A8,0x1911,
+ 0x3415,0x1F29,0x3F87,0x0A36,0x18E3,0x37B3,0x136C,0x28C8,
+ 0x00D4,0x2E20,0x0AFC,0x1894,0x2D55,0x1303,0x29F1,0x0037,
+ 0x259A,0x0AC5,0x2831,0x0855,0x3CE3,0x264C,0x043A,0x30AB,
+ 0x16A9,0x3F4B,0x0E39,0x1EE7,0x3795,0x08EB,0x1C24,0x2AA9,
+ 0x061F,0x3B77,0x1D7A,0x2451,0x0707,0x16A2,0x2D0F,0x213A,
+ 0x08B1,0x2595,0x1BDC,0x3D4C,0x0790,0x2FA7,0x02E1,0x2A81,
+ 0x0F56,0x3E30,0x1639,0x23C8,0x34A1,0x0613,0x27B0,0x38E9,
+ 0x1678,0x0DB1,0x3BEA,0x1F3D,0x2D30,0x0FAF,0x314D,0x1D53,
+ 0x3C4A,0x041A,0x36B7,0x0BCC,0x34DB,0x10E0,0x30CC,0x19A9,
+ 0x2630,0x085E,0x32AC,0x1786,0x35C1,0x208A,0x1012,0x2DE4,
+ 0x1F14,0x15F6,0x0971,0x2E5E,0x009A,0x3424,0x1175,0x1E88,
+ 0x3317,0x0427,0x3FC6,0x14C0,0x1FC6,0x3A91,0x0E32,0x219F,
+ 0x34A6,0x13D8,0x3000,0x1115,0x34E3,0x14EB,0x3EBA,0x129A,
+ 0x0048,0x2E03,0x17A1,0x25FC,0x1A65,0x2D54,0x0573,0x2937,
+ 0x1BDE,0x032E,0x398D,0x0B97,0x3DC2,0x10D9,0x3595,0x1998,
+ 0x2574,0x207D,0x026A,0x37B0,0x06CA,0x26A4,0x1DC5,0x3946,
+ 0x087A,0x2AE5,0x11B5,0x34FF,0x25B0,0x0CAC,0x2BF1,0x0FD7,
+ 0x3937,0x1BF3,0x2203,0x3412,0x0381,0x39CD,0x0D4A,0x376B,
+ 0x1A45,0x32A8,0x1771,0x2FEA,0x0F1C,0x18D8,0x371C,0x2176,
+ 0x09B6,0x23AD,0x2F28,0x0409,0x272B,0x18A3,0x340B,0x13A7,
+ 0x329C,0x1999,0x00FE,0x30BC,0x1C29,0x3C5A,0x0336,0x1AC1,
+ 0x3EAE,0x1464,0x342F,0x11E6,0x28D0,0x14E5,0x3CB4,0x1B92,
+ 0x3174,0x04B5,0x2B75,0x0ABF,0x17F0,0x305F,0x1D25,0x031E,
+ 0x21E7,0x2EBA,0x0507,0x334A,0x0AC4,0x3E0F,0x02EC,0x2B33,
+ 0x0D6B,0x2733,0x156E,0x2C4E,0x063D,0x256A,0x203D,0x0293,
+ 0x3CD4,0x212C,0x1326,0x2EB6,0x0619,0x3EB7,0x1C93,0x078B,
+ 0x3BF4,0x2475,0x37F4,0x0FB6,0x296C,0x0B82,0x2C7F,0x068B,
+ 0x27FC,0x172E,0x24F8,0x0CDA,0x301C,0x064C,0x3213,0x1A95,
+ 0x0273,0x3B53,0x07B8,0x270C,0x0434,0x2D05,0x0728,0x2B00,
+ 0x3BF6,0x2125,0x08D0,0x3E23,0x0C12,0x21C0,0x3871,0x0F1D,
+ 0x32FE,0x168E,0x27ED,0x211F,0x044E,0x2719,0x1FB6,0x068E,
+ 0x3447,0x100C,0x2E86,0x1395,0x319F,0x0E7F,0x2BC2,0x1315,
+ 0x2764,0x0F45,0x30C5,0x0416,0x1D8E,0x3C38,0x06E1,0x330D,
+ 0x2139,0x058B,0x3D0B,0x1096,0x27BC,0x1AD9,0x2443,0x1458,
+ 0x2CC6,0x064B,0x3B34,0x02EF,0x1FD1,0x2D26,0x070B,0x1BAA,
+ 0x3394,0x1079,0x1A53,0x38E1,0x1298,0x3C91,0x02D6,0x2D62,
+ 0x0A06,0x25E0,0x3936,0x0E08,0x348E,0x1018,0x2297,0x3596,
+ 0x0C92,0x2810,0x007D,0x2C4D,0x0D0E,0x3209,0x216F,0x09D5,
+ 0x2293,0x362D,0x114F,0x3A82,0x2493,0x0E05,0x3CE4,0x19B7,
+ 0x351D,0x0FFB,0x29BE,0x126C,0x27FF,0x1935,0x250E,0x145D,
+ 0x33F9,0x18A5,0x3F04,0x0FFD,0x1E3C,0x3B97,0x0DD7,0x2E85,
+ 0x15BF,0x353B,0x03C1,0x1EAC,0x29CA,0x0EDE,0x26CD,0x3181,
+ 0x1486,0x0234,0x1ABB,0x31CA,0x13E1,0x3BA2,0x2013,0x3899,
+ 0x0DD2,0x3686,0x083A,0x3977,0x18DC,0x2651,0x1075,0x3F19,
+ 0x25A4,0x124A,0x2A3D,0x15B9,0x319A,0x11B6,0x2804,0x16D5,
+ 0x0EBD,0x1ADA,0x2AB7,0x12C5,0x31C9,0x019E,0x1CE1,0x2C27,
+ 0x079E,0x3EDF,0x0E06,0x360B,0x18BB,0x3338,0x0C6A,0x2F0F,
+ 0x1750,0x38F5,0x0914,0x242C,0x1AD4,0x3AA0,0x09F3,0x35B6,
+ 0x01F3,0x3DE0,0x222C,0x170F,0x2DFF,0x14A6,0x282A,0x1B40,
+ 0x0E53,0x3034,0x15BC,0x2B03,0x0BAB,0x32C8,0x050A,0x3D6B,
+ 0x0C7C,0x28D8,0x1572,0x2494,0x35F6,0x0CD8,0x3C3A,0x22BE,
+ 0x0287,0x3D42,0x2851,0x0794,0x2CC2,0x0D8F,0x24ED,0x1CD6,
+ 0x3F0E,0x0F8F,0x208C,0x2B70,0x0866,0x1EE6,0x2F6A,0x05D0,
+ 0x2AB0,0x106F,0x3A3F,0x1E8D,0x36EF,0x057F,0x194E,0x2DF3,
+ 0x1351,0x1EE8,0x2876,0x0281,0x1DA7,0x2CEC,0x0786,0x28DD,
+ 0x091F,0x3F86,0x1B32,0x39C4,0x060D,0x368C,0x0BB1,0x3B12,
+ 0x077B,0x2F66,0x0170,0x21EA,0x3008,0x049A,0x3458,0x1D26,
+ 0x08F8,0x2741,0x1AF5,0x3210,0x1439,0x2F73,0x0AAD,0x20CC,
+ 0x34F1,0x1E50,0x3F7B,0x05FC,0x27B6,0x1A16,0x0390,0x16B9,
+ 0x2DD2,0x2244,0x1B99,0x294D,0x0337,0x2E45,0x1EA2,0x08F5,
+ 0x1C11,0x333E,0x0CB3,0x3D0D,0x1BAD,0x39D9,0x0BBF,0x32CD,
+ 0x267C,0x3585,0x04AE,0x37D6,0x2398,0x1642,0x3BA1,0x1181,
+ 0x25B6,0x1C77,0x2D8C,0x0981,0x2B69,0x13CD,0x3F9E,0x2165,
+ 0x0352,0x27C4,0x1C12,0x3E45,0x00F6,0x2155,0x2DCD,0x1619,
+ 0x2903,0x1CF1,0x0758,0x39F7,0x0AA0,0x35F0,0x0262,0x3EFD,
+ 0x2289,0x0911,0x36E4,0x017D,0x3AEB,0x1699,0x2A65,0x1907,
+ 0x33B3,0x10C5,0x3855,0x093F,0x19DC,0x2A97,0x11C0,0x31AE,
+ 0x152C,0x1F38,0x0BD6,0x3599,0x1759,0x20E5,0x3142,0x0754,
+ 0x1824,0x354F,0x0483,0x15C4,0x3D8F,0x2742,0x1389,0x3ACB,
+ 0x1611,0x32FB,0x1B31,0x08DD,0x1712,0x26AD,0x3B4D,0x0155,
+ 0x3860,0x086D,0x3FCA,0x1585,0x3758,0x11F7,0x3307,0x14D1,
+ 0x2C31,0x1E7D,0x022A,0x1FD5,0x3081,0x1597,0x2C67,0x1732,
+ 0x2981,0x1242,0x1F54,0x3856,0x0EB6,0x2901,0x1195,0x247C,
+ 0x3F78,0x0F2E,0x3765,0x0BAC,0x3A05,0x0154,0x3D61,0x17AD,
+ 0x050D,0x293A,0x10DA,0x2CD3,0x0E92,0x35D8,0x1F63,0x3D52,
+ 0x12FD,0x014D,0x3299,0x1419,0x3D8C,0x0D93,0x364A,0x23D6,
+ 0x38AB,0x05A6,0x2BCD,0x2121,0x0198,0x2255,0x2E48,0x03A2,
+ 0x1F9F,0x0D41,0x2D6D,0x1E33,0x0DEE,0x300B,0x063B,0x2086,
+ 0x31AF,0x00D8,0x172B,0x3BE1,0x1ED3,0x01EF,0x23B5,0x15A5,
+ 0x3AD9,0x0E36,0x336E,0x128E,0x3053,0x1868,0x060C,0x3B88,
+ 0x0B8B,0x351E,0x1982,0x2511,0x1F7F,0x10ED,0x2A62,0x13C2,
+ 0x346D,0x1A49,0x2578,0x1EEC,0x0F29,0x2FC0,0x1295,0x2677,
+ 0x01D7,0x2E8F,0x1C1C,0x2120,0x3F99,0x00CE,0x2706,0x08E1,
+ 0x39BB,0x23EE,0x307F,0x1C92,0x00A8,0x3753,0x0C68,0x39C1,
+ 0x2A6B,0x117A,0x22DF,0x2EA9,0x19F6,0x0182,0x33EB,0x0A82,
+ 0x25BB,0x02F2,0x2EB4,0x1FEE,0x3F36,0x0EE2,0x1F43,0x3265,
+ 0x0FF1,0x261A,0x1A02,0x30CE,0x09C7,0x256D,0x0125,0x3989,
+ 0x0D58,0x3249,0x16C9,0x2B83,0x0A3D,0x26D4,0x00D9,0x32DB,
+ 0x0D0F,0x3D07,0x25FD,0x09DE,0x3339,0x1C7F,0x3A7E,0x00B7,
+ 0x183D,0x2959,0x0581,0x2BAC,0x1974,0x258E,0x0D7F,0x226D,
+ 0x392B,0x0C21,0x3726,0x1D02,0x3076,0x070E,0x2A5B,0x0B04,
+ 0x26C8,0x37D9,0x213F,0x0A6A,0x236A,0x3172,0x15C0,0x00C0,
+ 0x16D3,0x2F16,0x1994,0x0A7C,0x37B5,0x0E89,0x191B,0x3DDC,
+ 0x1568,0x399D,0x22D4,0x077D,0x3FD4,0x2276,0x1A5A,0x35F3,
+ 0x0B49,0x3A36,0x24BB,0x06E6,0x3107,0x1B39,0x3781,0x0860,
+ 0x1CED,0x2C99,0x0524,0x2AA3,0x0B13,0x3875,0x24B9,0x1504,
+ 0x2A49,0x1231,0x2D3B,0x0010,0x297D,0x3B1E,0x08B3,0x2F30,
+ 0x0492,0x2C5A,0x112B,0x3FD4,0x23B4,0x0696,0x379F,0x0AB4,
+ 0x3E54,0x225F,0x04BE,0x2BD2,0x1342,0x2FAD,0x16DB,0x2C86,
+ 0x1AED,0x0535,0x1312,0x3E4F,0x2304,0x15ED,0x26E2,0x1FA4,
+ 0x01FB,0x1E18,0x3374,0x0BC4,0x387D,0x2492,0x111F,0x2DCF,
+ 0x183B,0x3C79,0x0F41,0x2966,0x040E,0x301E,0x0BCA,0x23CB,
+ 0x1C0B,0x2F7D,0x03E6,0x2367,0x1C47,0x3BC3,0x187D,0x20AE,
+ 0x266A,0x068D,0x37DE,0x0F7F,0x3DBB,0x1375,0x3A18,0x1BC3,
+ 0x2414,0x0549,0x1995,0x2D59,0x1700,0x0711,0x2A7D,0x1BE6,
+ 0x356D,0x1123,0x3BAC,0x21DC,0x105E,0x3646,0x1B9C,0x3108,
+ 0x1283,0x2BC8,0x231F,0x011E,0x18A0,0x3AB5,0x139F,0x3362,
+ 0x1C54,0x098A,0x1636,0x3A43,0x1972,0x06D0,0x21EE,0x3BBB,
+ 0x1FC8,0x0EF0,0x3EA0,0x231E,0x131C,0x338E,0x2964,0x0830,
+ 0x2371,0x011F,0x1898,0x3218,0x16D1,0x02BE,0x2BE7,0x1077,
+ 0x2A85,0x202A,0x0D8C,0x369F,0x11EF,0x2ABC,0x0FC3,0x31F8,
+ 0x25F5,0x1141,0x3C84,0x1A50,0x26D7,0x1E95,0x0DF4,0x32CB,
+ 0x03BC,0x3D39,0x0F07,0x3822,0x1346,0x1DF3,0x23F5,0x1905,
+ 0x38F6,0x0C4C,0x30D7,0x03B0,0x1B96,0x31BA,0x0EC8,0x2C2F,
+ 0x1E9C,0x0FFE,0x3A19,0x0CBA,0x3563,0x06C5,0x3B5A,0x0F7B,
+ 0x36A1,0x1E4F,0x2B1B,0x0A2B,0x2D87,0x06AF,0x3BDC,0x0E40,
+ 0x2969,0x3DE5,0x0602,0x2C23,0x12FF,0x1E56,0x3FB8,0x0665,
+ 0x28B6,0x0B80,0x34E0,0x1C96,0x38B4,0x117C,0x2BAA,0x05F9,
+ 0x358D,0x0CC1,0x3C63,0x0E6F,0x3546,0x05A1,0x2EEA,0x1043,
+ 0x3E68,0x1A40,0x24B1,0x1F05,0x042D,0x310F,0x223A,0x08EA,
+ 0x3640,0x1DB7,0x3916,0x02A4,0x3E1D,0x22AA,0x0C9C,0x3184,
+ 0x0806,0x2CA7,0x1EFB,0x0371,0x2E1E,0x0869,0x2AE7,0x0303,
+ 0x3C5E,0x079B,0x1622,0x3E0A,0x25EF,0x0BBD,0x2895,0x02DB,
+ 0x3ED6,0x23BA,0x2F5B,0x040F,0x2B66,0x1D34,0x3072,0x0B89,
+ 0x354D,0x26CF,0x0351,0x2F8F,0x1E57,0x04E7,0x2082,0x360D,
+ 0x3096,0x1D04,0x3B57,0x0AA7,0x26EC,0x3721,0x14AE,0x3D83,
+ 0x0558,0x19F7,0x2E53,0x15F7,0x2826,0x04AD,0x3D04,0x2070,
+ 0x0073,0x3545,0x21A7,0x0990,0x364D,0x02A6,0x3FD4,0x22A5,
+ 0x1B7B,0x2033,0x2FA4,0x09CE,0x334B,0x05C8,0x3CAB,0x0DB3,
+ 0x2639,0x1FF9,0x17CE,0x3660,0x2A0E,0x138E,0x3BC5,0x21A5,
+ 0x05EA,0x2F33,0x1645,0x2836,0x1A7D,0x24E6,0x0C25,0x27C2,
+ 0x01CD,0x31D9,0x14FC,0x3A66,0x1915,0x3334,0x1259,0x302C,
+ 0x1C8C,0x0B10,0x257F,0x0EAE,0x36DB,0x03B4,0x2108,0x3221,
+ 0x1401,0x2FBA,0x2277,0x0755,0x166F,0x335E,0x1883,0x3E06,
+ 0x14A1,0x2A5A,0x1761,0x2C8B,0x127E,0x2757,0x0C5D,0x34C4,
+ 0x0379,0x2E41,0x0B1A,0x3426,0x2842,0x0E91,0x1904,0x2FB3,
+ 0x11FA,0x2AA8,0x10FB,0x285E,0x14D8,0x2E5B,0x1EA0,0x128B,
+ 0x3D1A,0x237C,0x0D32,0x3864,0x1CDF,0x3F03,0x1369,0x276A,
+ 0x16E8,0x3037,0x218F,0x096E,0x1DF7,0x3118,0x150C,0x2C2A,
+ 0x17A4,0x078A,0x1B55,0x3450,0x119C,0x3E5C,0x148C,0x2914,
+ 0x0604,0x1A56,0x33D9,0x0D17,0x284F,0x3A62,0x166E,0x0B12,
+ 0x10E9,0x2CC9,0x1277,0x2A59,0x1B66,0x0902,0x2FA8,0x0C98,
+ 0x22B8,0x387F,0x022D,0x3F3A,0x0AE0,0x2CE5,0x0CC8,0x196B,
+ 0x2F70,0x0EDA,0x175D,0x3152,0x14BE,0x2D6B,0x180D,0x0ABA,
+ 0x310C,0x062A,0x25C9,0x19FF,0x2115,0x285C,0x16D7,0x3237,
+ 0x0115,0x3A4E,0x07BA,0x210D,0x0A01,0x272F,0x0072,0x19C1,
+ 0x3932,0x1162,0x34D3,0x024F,0x3CC0,0x146F,0x3402,0x178D,
+ 0x3EF7,0x1F61,0x087F,0x2249,0x0323,0x2545,0x1F0B,0x047A,
+ 0x3633,0x17A7,0x3AFA,0x1B1B,0x224A,0x30E9,0x174E,0x096F,
+ 0x3BAE,0x00DA,0x192A,0x3D5C,0x2686,0x0224,0x29E5,0x0A4F,
+ 0x2724,0x001A,0x390F,0x07EF,0x1F62,0x31CB,0x1949,0x2436,
+ 0x1E5A,0x1183,0x3940,0x17FC,0x0745,0x3C82,0x2016,0x01F9,
+ 0x3F4C,0x06F4,0x338A,0x0AAF,0x372D,0x04EF,0x3966,0x2180,
+ 0x01EC,0x17F8,0x31D8,0x166D,0x0B45,0x2301,0x3271,0x0C69,
+ 0x29A4,0x1080,0x345C,0x1A61,0x36DF,0x04BA,0x399A,0x0E88,
+ 0x35A1,0x1EEF,0x3C7F,0x0AD2,0x2755,0x01C4,0x2CD7,0x0DDE,
+ 0x39E7,0x2424,0x1209,0x3C2B,0x17A9,0x09E0,0x2900,0x3F05,
+ 0x25F1,0x07D0,0x3807,0x03DC,0x3CCE,0x1DDF,0x252E,0x185A,
+ 0x30DA,0x10E4,0x269C,0x1CA8,0x33C6,0x1440,0x39A2,0x22C1,
+ 0x07ED,0x3EA5,0x29D2,0x0587,0x3C00,0x08C9,0x2552,0x39C6,
+ 0x1582,0x3690,0x1082,0x3EBF,0x027C,0x3756,0x0ACF,0x1CB4,
+ 0x2B4A,0x12AF,0x27F0,0x3D26,0x15EA,0x3358,0x1D4B,0x2DB7,
+ 0x0B42,0x2607,0x1B57,0x2B30,0x0AB5,0x2EF3,0x0583,0x295A,
+ 0x1087,0x2E0D,0x1BAE,0x29B2,0x37E2,0x0F9F,0x3F96,0x27B5,
+ 0x0D63,0x2A2D,0x0035,0x2CE9,0x09EE,0x1516,0x3994,0x232E,
+ 0x1BA7,0x2168,0x2D99,0x0AF1,0x1F30,0x37CB,0x12BF,0x32B5,
+ 0x1A2B,0x2E29,0x15A1,0x23A2,0x3F01,0x021F,0x384C,0x097C,
+ 0x3CC9,0x226B,0x006C,0x214B,0x2F31,0x13BD,0x34E7,0x24CB,
+ 0x1480,0x295C,0x1A19,0x2527,0x1337,0x27EB,0x0BBA,0x306F,
+ 0x1C5B,0x36C3,0x06D4,0x20BF,0x2F89,0x006F,0x1B65,0x367A,
+ 0x05DD,0x3B40,0x0210,0x2D3E,0x0DCF,0x2A99,0x1CAE,0x2540,
+ 0x003E,0x2D80,0x138F,0x29EB,0x103B,0x3884,0x128D,0x322B,
+ 0x1BD8,0x090A,0x2CAC,0x005D,0x24CF,0x32A6,0x1C49,0x0277,
+ 0x35BF,0x1F66,0x1453,0x2F53,0x0FCF,0x33A7,0x001E,0x3ABC,
+ 0x089C,0x1EB2,0x32BC,0x0743,0x18A8,0x29A1,0x038D,0x31CC,
+ 0x1E0C,0x122D,0x1F88,0x244B,0x10AF,0x2ACF,0x1F47,0x0175,
+ 0x2E1B,0x0CCD,0x28E4,0x13DB,0x3175,0x160C,0x2252,0x3E50,
+ 0x0F50,0x3531,0x1D14,0x0315,0x250C,0x0D39,0x3DF3,0x11FF,
+ 0x36C4,0x06EB,0x3EE8,0x0F31,0x23FA,0x1BF4,0x3AF2,0x0D33,
+ 0x36FA,0x0438,0x344F,0x0B84,0x16F8,0x31A0,0x0A4B,0x1983,
+ 0x38CC,0x136B,0x3537,0x1148,0x3E8D,0x277D,0x0275,0x2BE3,
+ 0x0D44,0x3663,0x14A9,0x3A11,0x10C9,0x2411,0x1DF1,0x0504,
+ 0x3AC5,0x1092,0x3605,0x0BEE,0x1B17,0x2B5E,0x1615,0x28CB,
+ 0x142B,0x3287,0x1B69,0x3B3F,0x0FB8,0x2B10,0x0B5B,0x1BEA,
+ 0x3775,0x0D66,0x3B65,0x0010,0x3479,0x1921,0x3FC8,0x11DF,
+ 0x2C57,0x0E7B,0x2718,0x3E35,0x12DF,0x3907,0x250B,0x0E24,
+ 0x2C91,0x191E,0x25B4,0x1252,0x3FD4,0x175E,0x0A05,0x3BDB,
+ 0x2067,0x0CDD,0x37B7,0x0593,0x3340,0x1DEF,0x262D,0x043D,
+ 0x2124,0x3FB2,0x15AF,0x3719,0x1DDE,0x070D,0x3915,0x153B,
+};
+
+unsigned short black_sep[] = {
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0081,0x008A,0x0094,0x009F,
+ 0x00A9,0x00B4,0x00BE,0x00C9,0x00D4,0x00E0,0x00EB,0x00F6,
+ 0x0102,0x010E,0x011A,0x0126,0x0133,0x013F,0x014C,0x0159,
+ 0x0166,0x0173,0x0180,0x018E,0x019B,0x01A9,0x01B7,0x01C5,
+ 0x01D4,0x01E2,0x01F1,0x0200,0x020F,0x021E,0x022D,0x023C,
+ 0x024C,0x025C,0x026C,0x027C,0x028C,0x029C,0x02AD,0x02BE,
+ 0x02CF,0x02DF,0x02F1,0x0302,0x0313,0x0325,0x0336,0x0348,
+ 0x035A,0x036C,0x037F,0x0391,0x03A3,0x03B6,0x03C9,0x03DC,
+ 0x03EF,0x0402,0x0415,0x0428,0x043C,0x044F,0x0463,0x0477,
+ 0x048A,0x049E,0x04B2,0x04C7,0x04DB,0x04EF,0x0504,0x0518,
+ 0x052D,0x0541,0x0556,0x056B,0x0580,0x0595,0x05AA,0x05BF,
+ 0x05D4,0x05EA,0x05FF,0x0614,0x062A,0x063F,0x0655,0x066A,
+ 0x0680,0x0696,0x06AC,0x06C1,0x06D7,0x06ED,0x0703,0x0719,
+ 0x072F,0x0745,0x075B,0x0771,0x0787,0x079D,0x07B3,0x07C9,
+ 0x07E0,0x07F6,0x080C,0x0822,0x0838,0x084F,0x0865,0x087B,
+ 0x0891,0x08A7,0x08BE,0x08D4,0x08EA,0x0900,0x0917,0x092D,
+ 0x0943,0x0959,0x096F,0x0986,0x099C,0x09B2,0x09C8,0x09DE,
+ 0x09F4,0x0A0A,0x0A20,0x0A36,0x0A4C,0x0A62,0x0A78,0x0A8E,
+ 0x0AA4,0x0ABA,0x0AD0,0x0AE6,0x0AFB,0x0B11,0x0B27,0x0B3D,
+ 0x0B52,0x0B68,0x0B7E,0x0B93,0x0BA9,0x0BBE,0x0BD4,0x0BE9,
+ 0x0BFE,0x0C14,0x0C29,0x0C3E,0x0C54,0x0C69,0x0C7E,0x0C93,
+ 0x0CA8,0x0CBD,0x0CD2,0x0CE7,0x0CFC,0x0D11,0x0D26,0x0D3B,
+ 0x0D50,0x0D64,0x0D79,0x0D8E,0x0DA2,0x0DB7,0x0DCC,0x0DE0,
+ 0x0DF4,0x0E09,0x0E1D,0x0E32,0x0E46,0x0E5A,0x0E6E,0x0E83,
+ 0x0E97,0x0EAB,0x0EBF,0x0ED3,0x0EE7,0x0EFB,0x0F0F,0x0F23,
+ 0x0F36,0x0F4A,0x0F5E,0x0F72,0x0F85,0x0F99,0x0FAD,0x0FC0,
+ 0x0FD4,0x0FE7,0x0FFB,0x100E,0x1021,0x1035,0x1048,0x105B,
+ 0x106F,0x1082,0x1095,0x10A8,0x10BB,0x10CE,0x10E1,0x10F4,
+ 0x1107,0x111A,0x112D,0x1140,0x1153,0x1166,0x1178,0x118B,
+ 0x119E,0x11B1,0x11C3,0x11D6,0x11E8,0x11FB,0x120E,0x1220,
+ 0x1232,0x1245,0x1257,0x126A,0x127C,0x128E,0x12A1,0x12B3,
+ 0x12C5,0x12D8,0x12EA,0x12FC,0x130E,0x1320,0x1332,0x1344,
+ 0x1356,0x1368,0x137A,0x138C,0x139E,0x13B0,0x13C2,0x13D4,
+ 0x13E6,0x13F8,0x140A,0x141B,0x142D,0x143F,0x1451,0x1462,
+ 0x1474,0x1486,0x1497,0x14A9,0x14BB,0x14CC,0x14DE,0x14F0,
+ 0x1501,0x1513,0x1524,0x1536,0x1547,0x1559,0x156A,0x157B,
+ 0x158D,0x159E,0x15B0,0x15C1,0x15D2,0x15E4,0x15F5,0x1606,
+ 0x1618,0x1629,0x163A,0x164B,0x165C,0x166E,0x167F,0x1690,
+ 0x16A1,0x16B2,0x16C4,0x16D5,0x16E6,0x16F7,0x1708,0x1719,
+ 0x172A,0x173B,0x174C,0x175D,0x176E,0x177F,0x1790,0x17A1,
+ 0x17B2,0x17C3,0x17D4,0x17E5,0x17F6,0x1807,0x1818,0x1829,
+ 0x183A,0x184B,0x185C,0x186C,0x187D,0x188E,0x189F,0x18B0,
+ 0x18C1,0x18D1,0x18E2,0x18F3,0x1904,0x1915,0x1925,0x1936,
+ 0x1947,0x1958,0x1968,0x1979,0x198A,0x199B,0x19AB,0x19BC,
+ 0x19CD,0x19DD,0x19EE,0x19FF,0x1A10,0x1A20,0x1A31,0x1A41,
+ 0x1A52,0x1A63,0x1A73,0x1A84,0x1A95,0x1AA5,0x1AB6,0x1AC7,
+ 0x1AD7,0x1AE8,0x1AF8,0x1B09,0x1B1A,0x1B2A,0x1B3B,0x1B4B,
+ 0x1B5C,0x1B6C,0x1B7D,0x1B8D,0x1B9E,0x1BAF,0x1BBF,0x1BD0,
+ 0x1BE0,0x1BF1,0x1C01,0x1C12,0x1C22,0x1C33,0x1C43,0x1C54,
+ 0x1C64,0x1C75,0x1C85,0x1C96,0x1CA6,0x1CB7,0x1CC7,0x1CD8,
+ 0x1CE8,0x1CF9,0x1D09,0x1D19,0x1D2A,0x1D3A,0x1D4B,0x1D5B,
+ 0x1D6C,0x1D7C,0x1D8D,0x1D9D,0x1DAD,0x1DBE,0x1DCE,0x1DDF,
+ 0x1DEF,0x1E00,0x1E10,0x1E20,0x1E31,0x1E41,0x1E52,0x1E62,
+ 0x1E72,0x1E83,0x1E93,0x1EA4,0x1EB4,0x1EC4,0x1ED5,0x1EE5,
+ 0x1EF5,0x1F06,0x1F16,0x1F27,0x1F37,0x1F47,0x1F58,0x1F68,
+ 0x1F78,0x1F89,0x1F99,0x1FAA,0x1FBA,0x1FCA,0x1FDB,0x1FEB,
+ 0x1FFB,0x200C,0x201C,0x202C,0x203D,0x204D,0x205D,0x206E,
+ 0x207E,0x208E,0x209F,0x20AF,0x20BF,0x20D0,0x20E0,0x20F0,
+ 0x2101,0x2111,0x2121,0x2132,0x2142,0x2152,0x2163,0x2173,
+ 0x2183,0x2194,0x21A4,0x21B4,0x21C5,0x21D5,0x21E5,0x21F6,
+ 0x2206,0x2216,0x2226,0x2237,0x2247,0x2257,0x2268,0x2278,
+ 0x2288,0x2299,0x22A9,0x22B9,0x22CA,0x22DA,0x22EA,0x22FA,
+ 0x230B,0x231B,0x232B,0x233C,0x234C,0x235C,0x236D,0x237D,
+ 0x238D,0x239D,0x23AE,0x23BE,0x23CE,0x23DF,0x23EF,0x23FF,
+ 0x240F,0x2420,0x2430,0x2440,0x2451,0x2461,0x2471,0x2481,
+ 0x2492,0x24A2,0x24B2,0x24C3,0x24D3,0x24E3,0x24F3,0x2504,
+ 0x2514,0x2524,0x2534,0x2545,0x2555,0x2565,0x2576,0x2586,
+ 0x2596,0x25A6,0x25B7,0x25C7,0x25D7,0x25E8,0x25F8,0x2608,
+ 0x2618,0x2629,0x2639,0x2649,0x2659,0x266A,0x267A,0x268A,
+ 0x269A,0x26AB,0x26BB,0x26CB,0x26DC,0x26EC,0x26FC,0x270C,
+ 0x271D,0x272D,0x273D,0x274D,0x275E,0x276E,0x277E,0x278E,
+ 0x279F,0x27AF,0x27BF,0x27D0,0x27E0,0x27F0,0x2800,0x2811,
+ 0x2821,0x2831,0x2841,0x2852,0x2862,0x2872,0x2882,0x2893,
+ 0x28A3,0x28B3,0x28C3,0x28D4,0x28E4,0x28F4,0x2905,0x2915,
+ 0x2925,0x2935,0x2946,0x2956,0x2966,0x2976,0x2987,0x2997,
+ 0x29A7,0x29B7,0x29C8,0x29D8,0x29E8,0x29F8,0x2A09,0x2A19,
+ 0x2A29,0x2A39,0x2A4A,0x2A5A,0x2A6A,0x2A7A,0x2A8B,0x2A9B,
+ 0x2AAB,0x2ABC,0x2ACC,0x2ADC,0x2AEC,0x2AFD,0x2B0D,0x2B1D,
+ 0x2B2D,0x2B3E,0x2B4E,0x2B5E,0x2B6E,0x2B7F,0x2B8F,0x2B9F,
+ 0x2BAF,0x2BC0,0x2BD0,0x2BE0,0x2BF0,0x2C01,0x2C11,0x2C21,
+ 0x2C31,0x2C42,0x2C52,0x2C62,0x2C72,0x2C83,0x2C93,0x2CA3,
+ 0x2CB3,0x2CC4,0x2CD4,0x2CE4,0x2CF4,0x2D05,0x2D15,0x2D25,
+ 0x2D35,0x2D46,0x2D56,0x2D66,0x2D76,0x2D87,0x2D97,0x2DA7,
+ 0x2DB7,0x2DC8,0x2DD8,0x2DE8,0x2DF9,0x2E09,0x2E19,0x2E29,
+ 0x2E3A,0x2E4A,0x2E5A,0x2E6A,0x2E7B,0x2E8B,0x2E9B,0x2EAB,
+ 0x2EBC,0x2ECC,0x2EDC,0x2EEC,0x2EFD,0x2F0D,0x2F1D,0x2F2D,
+ 0x2F3E,0x2F4E,0x2F5E,0x2F6E,0x2F7F,0x2F8F,0x2F9F,0x2FAF,
+ 0x2FC0,0x2FD0,0x2FE0,0x2FF0,0x3001,0x3011,0x3021,0x3031,
+ 0x3042,0x3052,0x3062,0x3072,0x3083,0x3093,0x30A3,0x30B3,
+ 0x30C4,0x30D4,0x30E4,0x30F4,0x3105,0x3115,0x3125,0x3135,
+ 0x3146,0x3156,0x3166,0x3176,0x3187,0x3197,0x31A7,0x31B7,
+ 0x31C8,0x31D8,0x31E8,0x31F8,0x3209,0x3219,0x3229,0x3239,
+ 0x324A,0x325A,0x326A,0x327A,0x328B,0x329B,0x32AB,0x32BB,
+ 0x32CC,0x32DC,0x32EC,0x32FC,0x330D,0x331D,0x332D,0x333D,
+ 0x334E,0x335E,0x336E,0x337E,0x338F,0x339F,0x33AF,0x33BF,
+ 0x33D0,0x33E0,0x33F0,0x3400,0x3411,0x3421,0x3431,0x3441,
+ 0x3452,0x3462,0x3472,0x3482,0x3493,0x34A3,0x34B3,0x34C3,
+ 0x34D4,0x34E4,0x34F4,0x3504,0x3515,0x3525,0x3535,0x3545,
+ 0x3556,0x3566,0x3576,0x3586,0x3597,0x35A7,0x35B7,0x35C7,
+ 0x35D8,0x35E8,0x35F8,0x3608,0x3619,0x3629,0x3639,0x3649,
+ 0x365A,0x366A,0x367A,0x368A,0x369B,0x36AB,0x36BB,0x36CB,
+ 0x36DC,0x36EC,0x36FC,0x370C,0x371D,0x372D,0x373D,0x374D,
+ 0x375E,0x376E,0x377E,0x378E,0x379F,0x37AF,0x37BF,0x37CF,
+ 0x37E0,0x37F0,0x3800,0x3810,0x3821,0x3831,0x3841,0x3851,
+ 0x3862,0x3872,0x3882,0x3892,0x38A3,0x38B3,0x38C3,0x38D3,
+ 0x38E4,0x38F4,0x3904,0x3914,0x3925,0x3935,0x3945,0x3955,
+ 0x3966,0x3976,0x3986,0x3996,0x39A7,0x39B7,0x39C7,0x39D7,
+ 0x39E8,0x39F8,0x3A08,0x3A18,0x3A29,0x3A39,0x3A49,0x3A59,
+ 0x3A6A,0x3A7A,0x3A8A,0x3A9A,0x3AAB,0x3ABB,0x3ACB,0x3ADB,
+ 0x3AEC,0x3AFC,0x3B0C,0x3B1C,0x3B2D,0x3B3D,0x3B4D,0x3B5D,
+ 0x3B6E,0x3B7E,0x3B8E,0x3B9E,0x3BAF,0x3BBF,0x3BCF,0x3BDF,
+ 0x3BF0,0x3C00,0x3C10,0x3C20,0x3C31,0x3C41,0x3C51,0x3C61,
+ 0x3C72,0x3C82,0x3C92,0x3CA2,0x3CB3,0x3CC3,0x3CD3,0x3CE3,
+ 0x3CF4,0x3D04,0x3D14,0x3D24,0x3D35,0x3D45,0x3D55,0x3D65,
+ 0x3D76,0x3D86,0x3D96,0x3DA6,0x3DB7,0x3DC7,0x3DD7,0x3DE7,
+ 0x3DF8,0x3E08,0x3E18,0x3E28,0x3E39,0x3E49,0x3E59,0x3E69,
+ 0x3E7A,0x3E8A,0x3E9A,0x3EAA,0x3EBB,0x3ECB,0x3EDB,0x3EEB,
+ 0x3EFC,0x3F0C,0x3F1C,0x3F2C,0x3F3D,0x3F4D,0x3F5D,0x3F6D,
+ 0x3F7E,0x3F8E,0x3F9E,0x3FAE,0x3FBF,0x3FCF,0x3FDF,0x3FEF
+};
+#ifdef __STDC__
+static signed short HtoCMY[]
+#else
+static short HtoCMY[]
+#endif
+ = {
+ 0xFFAF,0x03E6,0x03E4,0xFFAF,0x03E4,0x03E4,0xFFAF,0x03E1,0x03E4,0xFFAF,0x03DE,0x03E4,
+ 0xFFAF,0x03DB,0x03E4,0xFFAF,0x03D7,0x03E4,0xFFAF,0x03D3,0x03E4,0xFFAF,0x03D0,0x03E4,
+ 0xFFAF,0x03CC,0x03E4,0xFFAF,0x03C8,0x03E4,0xFFAF,0x03C4,0x03E4,0xFFAF,0x03C0,0x03E4,
+ 0xFFAF,0x03BB,0x03E4,0xFFAF,0x03B7,0x03E4,0xFFAF,0x03B3,0x03E4,0xFFAF,0x03AE,0x03E4,
+ 0xFFAF,0x03AA,0x03E4,0xFFAF,0x03A5,0x03E3,0xFFAF,0x03A1,0x03E3,0xFFAF,0x039C,0x03E3,
+ 0xFFAF,0x0397,0x03E3,0xFFAF,0x0393,0x03E3,0xFFAF,0x038E,0x03E3,0xFFAF,0x0389,0x03E3,
+ 0xFFAF,0x0384,0x03E3,0xFFAF,0x037F,0x03E3,0xFFAF,0x037A,0x03E3,0xFFAF,0x0375,0x03E3,
+ 0xFFAF,0x0370,0x03E3,0xFFAF,0x036B,0x03E3,0xFFAF,0x0366,0x03E3,0xFFAF,0x0361,0x03E3,
+ 0xFFAF,0x035C,0x03E2,0xFFAF,0x0357,0x03E2,0xFFAF,0x0352,0x03E2,0xFFAF,0x034C,0x03E2,
+ 0xFFAF,0x0347,0x03E2,0xFFAF,0x0342,0x03E2,0xFFAF,0x033C,0x03E2,0xFFAE,0x0337,0x03E2,
+ 0xFFAE,0x0332,0x03E2,0xFFAE,0x032C,0x03E2,0xFFAE,0x0327,0x03E2,0xFFAE,0x0321,0x03E1,
+ 0xFFAE,0x031C,0x03E1,0xFFAE,0x0316,0x03E1,0xFFAE,0x0311,0x03E1,0xFFAE,0x030B,0x03E1,
+ 0xFFAE,0x0305,0x03E1,0xFFAE,0x0300,0x03E1,0xFFAE,0x02FA,0x03E1,0xFFAE,0x02F4,0x03E1,
+ 0xFFAE,0x02EF,0x03E0,0xFFAE,0x02E9,0x03E0,0xFFAE,0x02E3,0x03E0,0xFFAE,0x02DE,0x03E0,
+ 0xFFAE,0x02D8,0x03E0,0xFFAE,0x02D2,0x03E0,0xFFAE,0x02CC,0x03E0,0xFFAE,0x02C6,0x03E0,
+ 0xFFAE,0x02C0,0x03DF,0xFFAD,0x02BB,0x03DF,0xFFAD,0x02B5,0x03DF,0xFFAD,0x02AF,0x03DF,
+ 0xFFAD,0x02A9,0x03DF,0xFFAD,0x02A3,0x03DF,0xFFAD,0x029D,0x03DF,0xFFAD,0x0297,0x03DE,
+ 0xFFAD,0x0291,0x03DE,0xFFAD,0x028B,0x03DE,0xFFAD,0x0285,0x03DE,0xFFAD,0x027F,0x03DE,
+ 0xFFAD,0x0279,0x03DE,0xFFAD,0x0273,0x03DE,0xFFAD,0x026C,0x03DD,0xFFAC,0x0266,0x03DD,
+ 0xFFAC,0x0260,0x03DD,0xFFAC,0x025A,0x03DD,0xFFAC,0x0254,0x03DD,0xFFAC,0x024E,0x03DD,
+ 0xFFAC,0x0247,0x03DD,0xFFAC,0x0241,0x03DC,0xFFAC,0x023B,0x03DC,0xFFAC,0x0235,0x03DC,
+ 0xFFAC,0x022E,0x03DC,0xFFAC,0x0228,0x03DC,0xFFAC,0x0222,0x03DC,0xFFAB,0x021C,0x03DB,
+ 0xFFAB,0x0215,0x03DB,0xFFAB,0x020F,0x03DB,0xFFAB,0x0208,0x03DB,0xFFAB,0x0202,0x03DB,
+ 0xFFAB,0x01FC,0x03DB,0xFFAB,0x01F5,0x03DA,0xFFAB,0x01EF,0x03DA,0xFFAB,0x01E8,0x03DA,
+ 0xFFAA,0x01E2,0x03DA,0xFFAA,0x01DC,0x03DA,0xFFAA,0x01D5,0x03D9,0xFFAA,0x01CF,0x03D9,
+ 0xFFAA,0x01C8,0x03D9,0xFFAA,0x01C2,0x03D9,0xFFAA,0x01BB,0x03D9,0xFFAA,0x01B5,0x03D9,
+ 0xFFA9,0x01AE,0x03D8,0xFFA9,0x01A9,0x03D8,0xFFA9,0x01A3,0x03D8,0xFFA9,0x019E,0x03D8,
+ 0xFFA9,0x0199,0x03D8,0xFFA9,0x0194,0x03D7,0xFFA9,0x018F,0x03D7,0xFFA9,0x018A,0x03D7,
+ 0xFFA8,0x0184,0x03D7,0xFFA8,0x017F,0x03D7,0xFFA8,0x017A,0x03D6,0xFFA8,0x0175,0x03D6,
+ 0xFFA8,0x0170,0x03D6,0xFFA8,0x016B,0x03D6,0xFFA8,0x0166,0x03D6,0xFFA7,0x0161,0x03D5,
+ 0xFFA7,0x015C,0x03D5,0xFFA7,0x0157,0x03D5,0xFFA7,0x0152,0x03D5,0xFFA7,0x014E,0x03D4,
+ 0xFFA7,0x0149,0x03D4,0xFFA6,0x0144,0x03D4,0xFFA6,0x013F,0x03D4,0xFFA6,0x013A,0x03D4,
+ 0xFFA6,0x0136,0x03D3,0xFFA6,0x0131,0x03D3,0xFFA6,0x012C,0x03D3,0xFFA5,0x0127,0x03D3,
+ 0xFFA5,0x0123,0x03D2,0xFFA5,0x011E,0x03D2,0xFFA5,0x011A,0x03D2,0xFFA5,0x0115,0x03D2,
+ 0xFFA5,0x0110,0x03D2,0xFFA4,0x010C,0x03D1,0xFFA4,0x0107,0x03D1,0xFFA4,0x0103,0x03D1,
+ 0xFFA4,0x00FE,0x03D1,0xFFA4,0x00FA,0x03D0,0xFFA3,0x00F6,0x03D0,0xFFA3,0x00F1,0x03D0,
+ 0xFFA3,0x00ED,0x03D0,0xFFA3,0x00E9,0x03CF,0xFFA3,0x00E4,0x03CF,0xFFA2,0x00E0,0x03CF,
+ 0xFFA2,0x00DC,0x03CF,0xFFA2,0x00D8,0x03CE,0xFFA2,0x00D3,0x03CE,0xFFA2,0x00CF,0x03CE,
+ 0xFFA1,0x00CB,0x03CE,0xFFA1,0x00C7,0x03CD,0xFFA1,0x00C3,0x03CD,0xFFA1,0x00BF,0x03CD,
+ 0xFFA0,0x00BB,0x03CD,0xFFA0,0x00B7,0x03CC,0xFFA0,0x00B3,0x03CC,0xFFA0,0x00AF,0x03CC,
+ 0xFFA0,0x00AB,0x03CC,0xFF9F,0x00A7,0x03CB,0xFF9F,0x00A3,0x03CB,0xFF9F,0x00A0,0x03CB,
+ 0xFF9F,0x009C,0x03CB,0xFF9E,0x0098,0x03CA,0xFF9E,0x0094,0x03CA,0xFF9E,0x0091,0x03CA,
+ 0xFF9E,0x008D,0x03CA,0xFF9D,0x0089,0x03C9,0xFF9D,0x0086,0x03C9,0xFF9D,0x0082,0x03C9,
+ 0xFF9D,0x007F,0x03C9,0xFF9C,0x007B,0x03C8,0xFF9C,0x0078,0x03C8,0xFF9C,0x0074,0x03C8,
+ 0xFF9C,0x0071,0x03C7,0xFF9B,0x006D,0x03C7,0xFF9B,0x006A,0x03C7,0xFF9B,0x0067,0x03C7,
+ 0xFF9A,0x0064,0x03C6,0xFF9A,0x0060,0x03C6,0xFF9A,0x005D,0x03C6,0xFF9A,0x005A,0x03C5,
+ 0xFF99,0x0057,0x03C5,0xFF99,0x0054,0x03C5,0xFF99,0x0051,0x03C5,0xFF98,0x004E,0x03C4,
+ 0xFF98,0x004B,0x03C4,0xFF98,0x0048,0x03C4,0xFF98,0x0045,0x03C3,0xFF97,0x0042,0x03C3,
+ 0xFF97,0x003F,0x03C3,0xFF97,0x003C,0x03C3,0xFF96,0x003A,0x03C2,0xFF96,0x0037,0x03C2,
+ 0xFF96,0x0034,0x03C2,0xFF95,0x0032,0x03C1,0xFF95,0x002F,0x03C1,0xFF95,0x002D,0x03C1,
+ 0xFF95,0x002A,0x03C1,0xFF94,0x0028,0x03C0,0xFF94,0x0026,0x03C0,0xFF94,0x0023,0x03C0,
+ 0xFF93,0x0021,0x03BF,0xFF93,0x001F,0x03BF,0xFF93,0x001D,0x03BF,0xFF92,0x001A,0x03BE,
+ 0xFF92,0x0018,0x03BE,0xFF92,0x0016,0x03BE,0xFF91,0x0014,0x03BD,0xFF91,0x0013,0x03BD,
+ 0xFF91,0x0011,0x03BD,0xFF90,0x000F,0x03BC,0xFF90,0x000D,0x03BC,0xFF90,0x000C,0x03BC,
+ 0xFF8F,0x000A,0x03BC,0xFF8F,0x0009,0x03BB,0xFF8E,0x0007,0x03BB,0xFF8E,0x0006,0x03BB,
+ 0xFF8E,0x0005,0x03BA,0xFF8D,0x0004,0x03BA,0xFF8D,0x0003,0x03BA,0xFF8D,0x0002,0x03B9,
+ 0xFF8C,0x0001,0x03B9,0xFF8C,0x0000,0x03B9,0xFF8C,0x0000,0x03B8,0xFF8B,0xFFFD,0x03B8,
+ 0xFF8B,0xFFFB,0x03B8,0xFF8A,0xFFF8,0x03B7,0xFF8A,0xFFF5,0x03B7,0xFF8A,0xFFF2,0x03B7,
+ 0xFF89,0xFFF0,0x03B6,0xFF89,0xFFED,0x03B6,0xFF88,0xFFEA,0x03B6,0xFF88,0xFFE7,0x03B5,
+ 0xFF88,0xFFE5,0x03B5,0xFF87,0xFFE2,0x03B5,0xFF87,0xFFDF,0x03B4,0xFF86,0xFFDC,0x03B4,
+ 0xFF86,0xFFDA,0x03B4,0xFF88,0xFFD7,0x03B3,0xFF8B,0xFFD4,0x03B3,0xFF8D,0xFFD1,0x03B3,
+ 0xFF8F,0xFFCF,0x03B2,0xFF92,0xFFCC,0x03B2,0xFF94,0xFFC9,0x03B2,0xFF96,0xFFC6,0x03B1,
+ 0xFF99,0xFFC4,0x03B1,0xFF9B,0xFFC1,0x03B0,0xFF9D,0xFFBE,0x03B0,0xFFA0,0xFFBC,0x03B0,
+ 0xFFA2,0xFFB9,0x03AF,0xFFA5,0xFFB6,0x03AF,0xFFA7,0xFFB3,0x03AF,0xFFA9,0xFFB1,0x03AE,
+ 0xFFAC,0xFFAE,0x03AE,0xFFAE,0xFFAB,0x03AE,0xFFB0,0xFFA8,0x03AE,0xFFB3,0xFFA6,0x03AE,
+ 0xFFB5,0xFFA3,0x03AE,0xFFB7,0xFFA0,0x03AE,0xFFBA,0xFF9D,0x03AE,0xFFBC,0xFF9B,0x03AE,
+ 0xFFBE,0xFF98,0x03AE,0xFFC1,0xFF95,0x03AE,0xFFC3,0xFF92,0x03AE,0xFFC5,0xFF90,0x03AE,
+ 0xFFC8,0xFF8D,0x03AE,0xFFCA,0xFF8A,0x03AE,0xFFCC,0xFF87,0x03AE,0xFFCF,0xFF85,0x03AE,
+ 0xFFD1,0xFF82,0x03AE,0xFFD3,0xFF82,0x03AE,0xFFD6,0xFF81,0x03AE,0xFFD8,0xFF81,0x03AD,
+ 0xFFDA,0xFF80,0x03AD,0xFFDD,0xFF80,0x03AD,0xFFDF,0xFF7F,0x03AD,0xFFE2,0xFF7F,0x03AD,
+ 0xFFE4,0xFF7E,0x03AD,0xFFE6,0xFF7E,0x03AD,0xFFE9,0xFF7E,0x03AD,0xFFEB,0xFF7D,0x03AD,
+ 0xFFED,0xFF7D,0x03AD,0xFFF0,0xFF7C,0x03AD,0xFFF2,0xFF7C,0x03AD,0xFFF4,0xFF7B,0x03AD,
+ 0xFFF7,0xFF7B,0x03AD,0xFFF9,0xFF7B,0x03AD,0xFFFB,0xFF7A,0x03AD,0xFFFE,0xFF7A,0x03AD,
+ 0x0000,0xFF79,0x03AD,0x0001,0xFF79,0x03AC,0x0001,0xFF78,0x03AC,0x0002,0xFF78,0x03AC,
+ 0x0002,0xFF78,0x03AC,0x0003,0xFF77,0x03AC,0x0004,0xFF77,0x03AC,0x0005,0xFF76,0x03AC,
+ 0x0006,0xFF76,0x03AC,0x0007,0xFF76,0x03AC,0x0008,0xFF75,0x03AC,0x0009,0xFF75,0x03AC,
+ 0x000A,0xFF74,0x03AC,0x000C,0xFF74,0x03AC,0x000D,0xFF74,0x03AC,0x000E,0xFF73,0x03AB,
+ 0x000F,0xFF73,0x03AB,0x0011,0xFF72,0x03AB,0x0012,0xFF72,0x03AB,0x0014,0xFF72,0x03AB,
+ 0x0015,0xFF71,0x03AB,0x0017,0xFF71,0x03AB,0x0018,0xFF71,0x03AB,0x001A,0xFF70,0x03AB,
+ 0x001B,0xFF70,0x03AB,0x001D,0xFF6F,0x03AB,0x001F,0xFF6F,0x03AA,0x0021,0xFF6F,0x03AA,
+ 0x0022,0xFF6E,0x03AA,0x0024,0xFF6E,0x03AA,0x0026,0xFF6E,0x03AA,0x0028,0xFF6D,0x03AA,
+ 0x002A,0xFF6D,0x03AA,0x002C,0xFF6C,0x03AA,0x002E,0xFF6C,0x03AA,0x0030,0xFF6C,0x03AA,
+ 0x0031,0xFF6B,0x03AA,0x0034,0xFF6B,0x03A9,0x0036,0xFF6B,0x03A9,0x0038,0xFF6A,0x03A9,
+ 0x003A,0xFF6A,0x03A9,0x003C,0xFF6A,0x03A9,0x003E,0xFF69,0x03A9,0x0040,0xFF69,0x03A9,
+ 0x0042,0xFF69,0x03A9,0x0045,0xFF68,0x03A9,0x0047,0xFF68,0x03A8,0x0049,0xFF68,0x03A8,
+ 0x004B,0xFF67,0x03A8,0x004E,0xFF67,0x03A8,0x0050,0xFF67,0x03A8,0x0052,0xFF66,0x03A8,
+ 0x0055,0xFF66,0x03A8,0x0057,0xFF66,0x03A8,0x005A,0xFF65,0x03A8,0x005C,0xFF65,0x03A8,
+ 0x005F,0xFF65,0x03A7,0x0061,0xFF64,0x03A7,0x0064,0xFF64,0x03A7,0x0066,0xFF64,0x03A7,
+ 0x0069,0xFF63,0x03A7,0x006B,0xFF63,0x03A7,0x006E,0xFF63,0x03A7,0x0071,0xFF62,0x03A7,
+ 0x0073,0xFF62,0x03A6,0x0076,0xFF62,0x03A6,0x0079,0xFF62,0x03A6,0x007B,0xFF61,0x03A6,
+ 0x007E,0xFF61,0x03A6,0x0081,0xFF61,0x03A6,0x0084,0xFF60,0x03A6,0x0086,0xFF60,0x03A6,
+ 0x0089,0xFF60,0x03A5,0x008C,0xFF5F,0x03A5,0x008F,0xFF5F,0x03A5,0x0092,0xFF5F,0x03A5,
+ 0x0095,0xFF5F,0x03A5,0x0097,0xFF5E,0x03A5,0x009A,0xFF5E,0x03A5,0x009D,0xFF5E,0x03A5,
+ 0x00A0,0xFF5D,0x03A4,0x00A3,0xFF5D,0x03A4,0x00A6,0xFF5D,0x03A4,0x00A9,0xFF5D,0x03A4,
+ 0x00AC,0xFF5C,0x03A4,0x00AF,0xFF5C,0x03A4,0x00B2,0xFF5C,0x03A4,0x00B6,0xFF5C,0x03A3,
+ 0x00B9,0xFF5B,0x03A3,0x00BC,0xFF5B,0x03A3,0x00BF,0xFF5B,0x03A3,0x00C2,0xFF5B,0x03A3,
+ 0x00C5,0xFF5A,0x03A3,0x00C8,0xFF5A,0x03A3,0x00CC,0xFF5A,0x03A3,0x00CF,0xFF5A,0x03A2,
+ 0x00D2,0xFF59,0x03A2,0x00D5,0xFF59,0x03A2,0x00D9,0xFF59,0x03A2,0x00DC,0xFF59,0x03A2,
+ 0x00DF,0xFF58,0x03A2,0x00E3,0xFF58,0x03A1,0x00E6,0xFF58,0x03A1,0x00E9,0xFF58,0x03A1,
+ 0x00ED,0xFF57,0x03A1,0x00F0,0xFF57,0x03A1,0x00F0,0xFF57,0x03A1,0x00F2,0xFF57,0x03A1,
+ 0x00F3,0xFF56,0x03A0,0x00F5,0xFF56,0x03A0,0x00F6,0xFF56,0x03A0,0x00F8,0xFF56,0x03A0,
+ 0x00F9,0xFF56,0x03A0,0x00FB,0xFF55,0x03A0,0x00FC,0xFF55,0x03A0,0x00FE,0xFF55,0x039F,
+ 0x00FF,0xFF55,0x039F,0x0101,0xFF54,0x039F,0x0102,0xFF54,0x039F,0x0104,0xFF54,0x039F,
+ 0x0105,0xFF54,0x039F,0x0106,0xFF54,0x039E,0x0108,0xFF53,0x039E,0x0109,0xFF53,0x039E,
+ 0x010B,0xFF53,0x039E,0x010C,0xFF53,0x039E,0x010D,0xFF53,0x039E,0x010F,0xFF52,0x039D,
+ 0x0110,0xFF52,0x039D,0x0112,0xFF52,0x039D,0x0113,0xFF52,0x039D,0x0114,0xFF52,0x039D,
+ 0x0116,0xFF51,0x039D,0x0117,0xFF51,0x039D,0x0118,0xFF51,0x039C,0x011A,0xFF51,0x039C,
+ 0x011B,0xFF51,0x039C,0x011C,0xFF51,0x039C,0x011D,0xFF50,0x039C,0x011F,0xFF50,0x039C,
+ 0x0120,0xFF50,0x039B,0x0121,0xFF50,0x039B,0x0123,0xFF50,0x039B,0x0124,0xFF50,0x039B,
+ 0x0125,0xFF4F,0x039B,0x0126,0xFF4F,0x039A,0x0127,0xFF4F,0x039A,0x0129,0xFF4F,0x039A,
+ 0x012A,0xFF4F,0x039A,0x012B,0xFF4F,0x039A,0x012C,0xFF4E,0x039A,0x012D,0xFF4E,0x0399,
+ 0x012E,0xFF4E,0x0399,0x0130,0xFF4E,0x0399,0x0131,0xFF4E,0x0399,0x0132,0xFF4E,0x0399,
+ 0x0133,0xFF4E,0x0399,0x0134,0xFF4D,0x0398,0x0135,0xFF4D,0x0398,0x0136,0xFF4D,0x0398,
+ 0x0137,0xFF4D,0x0398,0x0138,0xFF4D,0x0398,0x0139,0xFF4D,0x0397,0x013A,0xFF4D,0x0397,
+ 0x013B,0xFF4D,0x0397,0x013C,0xFF4C,0x0397,0x013D,0xFF4C,0x0397,0x013E,0xFF4C,0x0397,
+ 0x013F,0xFF4C,0x0396,0x0140,0xFF4C,0x0396,0x0141,0xFF4C,0x0396,0x0142,0xFF4C,0x0396,
+ 0x0143,0xFF4C,0x0396,0x0144,0xFF4C,0x0395,0x0145,0xFF4B,0x0395,0x0146,0xFF4B,0x0395,
+ 0x0147,0xFF4B,0x0395,0x0148,0xFF4B,0x0395,0x0149,0xFF4B,0x0394,0x0149,0xFF4B,0x0394,
+ 0x014A,0xFF4B,0x0394,0x014B,0xFF4B,0x0394,0x014C,0xFF4B,0x0394,0x014D,0xFF4B,0x0394,
+ 0x014D,0xFF4B,0x0393,0x014E,0xFF4A,0x0393,0x014F,0xFF4A,0x0393,0x0150,0xFF4A,0x0393,
+ 0x0150,0xFF4A,0x0393,0x0151,0xFF4A,0x0392,0x0152,0xFF4A,0x0392,0x0153,0xFF4A,0x0392,
+ 0x0153,0xFF4A,0x0392,0x0154,0xFF4A,0x0392,0x0155,0xFF4A,0x0391,0x0155,0xFF4A,0x0391,
+ 0x0156,0xFF4A,0x0391,0x0156,0xFF4A,0x0391,0x0157,0xFF4A,0x0391,0x0158,0xFF4A,0x0390,
+ 0x0158,0xFF4A,0x0390,0x0159,0xFF49,0x0390,0x0159,0xFF49,0x0390,0x015A,0xFF49,0x0390,
+ 0x015A,0xFF49,0x038F,0x015B,0xFF49,0x038F,0x015B,0xFF49,0x038F,0x015C,0xFF49,0x038F,
+ 0x015C,0xFF49,0x038F,0x015C,0xFF49,0x038E,0x015D,0xFF49,0x038E,0x015D,0xFF49,0x038E,
+ 0x015D,0xFF49,0x038E,0x015E,0xFF49,0x038D,0x015E,0xFF49,0x038D,0x015E,0xFF49,0x038D,
+ 0x015E,0xFF49,0x038D,0x015F,0xFF49,0x038D,0x015F,0xFF49,0x038C,0x015F,0xFF49,0x038C,
+ 0x015F,0xFF49,0x038C,0x015F,0xFF49,0x038C,0x015F,0xFF48,0x038B,0x015F,0xFF48,0x038A,
+ 0x015F,0xFF48,0x038A,0x015F,0xFF48,0x0389,0x015F,0xFF47,0x0387,0x015F,0xFF47,0x0386,
+ 0x015F,0xFF47,0x0385,0x015F,0xFF47,0x0384,0x015F,0xFF46,0x0382,0x015F,0xFF46,0x0381,
+ 0x015F,0xFF46,0x037F,0x015F,0xFF46,0x037E,0x015F,0xFF45,0x037C,0x015F,0xFF45,0x037A,
+ 0x015F,0xFF45,0x0378,0x015F,0xFF45,0x0377,0x015F,0xFF44,0x0375,0x015F,0xFF44,0x0373,
+ 0x015F,0xFF44,0x0371,0x015F,0xFF44,0x036F,0x015F,0xFF43,0x036C,0x015F,0xFF43,0x036A,
+ 0x015F,0xFF43,0x0368,0x015F,0xFF43,0x0366,0x015F,0xFF42,0x0363,0x015F,0xFF42,0x0361,
+ 0x015F,0xFF42,0x035F,0x015F,0xFF42,0x035C,0x015F,0xFF41,0x035A,0x015F,0xFF41,0x0357,
+ 0x015F,0xFF41,0x0355,0x015F,0xFF41,0x0352,0x015F,0xFF41,0x034F,0x015F,0xFF40,0x034D,
+ 0x015F,0xFF40,0x034A,0x015F,0xFF40,0x0347,0x015F,0xFF40,0x0344,0x015F,0xFF3F,0x0341,
+ 0x015F,0xFF3F,0x033E,0x015F,0xFF3F,0x033C,0x015F,0xFF3F,0x0339,0x015F,0xFF3F,0x0336,
+ 0x015F,0xFF3E,0x0333,0x015F,0xFF3E,0x032F,0x015F,0xFF3E,0x032C,0x015F,0xFF3E,0x0329,
+ 0x015E,0xFF3D,0x0326,0x015E,0xFF3D,0x0323,0x015E,0xFF3D,0x0320,0x015E,0xFF3D,0x031C,
+ 0x015E,0xFF3D,0x0319,0x015E,0xFF3C,0x0316,0x015E,0xFF3C,0x0312,0x015E,0xFF3C,0x030F,
+ 0x015E,0xFF3C,0x030C,0x015E,0xFF3C,0x0308,0x015E,0xFF3B,0x0305,0x015E,0xFF3B,0x0301,
+ 0x015E,0xFF3B,0x02FE,0x015E,0xFF3B,0x02FA,0x015E,0xFF3A,0x02F6,0x015E,0xFF3A,0x02F3,
+ 0x015E,0xFF3A,0x02EF,0x015E,0xFF3A,0x02EB,0x015E,0xFF3A,0x02E8,0x015E,0xFF39,0x02E4,
+ 0x015E,0xFF39,0x02E0,0x015E,0xFF39,0x02DC,0x015E,0xFF39,0x02D9,0x015E,0xFF39,0x02D5,
+ 0x015E,0xFF39,0x02D1,0x015E,0xFF38,0x02CD,0x015E,0xFF38,0x02C9,0x015D,0xFF38,0x02C5,
+ 0x015D,0xFF38,0x02C1,0x015D,0xFF38,0x02BD,0x015D,0xFF37,0x02B9,0x015D,0xFF37,0x02B5,
+ 0x015D,0xFF37,0x02B1,0x015D,0xFF37,0x02AD,0x015D,0xFF37,0x02A8,0x015D,0xFF36,0x02A4,
+ 0x015D,0xFF36,0x02A0,0x015D,0xFF36,0x029C,0x015D,0xFF36,0x0298,0x015D,0xFF36,0x0293,
+ 0x015D,0xFF36,0x028F,0x015D,0xFF35,0x028B,0x015D,0xFF35,0x0286,0x015D,0xFF35,0x0282,
+ 0x015D,0xFF35,0x027E,0x015C,0xFF35,0x0279,0x015C,0xFF35,0x0275,0x015C,0xFF34,0x0270,
+ 0x015C,0xFF34,0x026C,0x015C,0xFF34,0x0267,0x015C,0xFF34,0x0263,0x015C,0xFF34,0x025E,
+ 0x015C,0xFF34,0x025A,0x015C,0xFF33,0x0255,0x015C,0xFF33,0x0250,0x015C,0xFF33,0x024C,
+ 0x015C,0xFF33,0x0247,0x015C,0xFF33,0x0242,0x015C,0xFF33,0x023E,0x015B,0xFF32,0x0239,
+ 0x015B,0xFF32,0x0234,0x015B,0xFF32,0x022F,0x015B,0xFF32,0x022A,0x015B,0xFF32,0x0226,
+ 0x015B,0xFF32,0x0221,0x015B,0xFF32,0x021C,0x015B,0xFF31,0x0217,0x015B,0xFF31,0x0212,
+ 0x015B,0xFF31,0x020D,0x015B,0xFF31,0x0208,0x015A,0xFF31,0x0203,0x015A,0xFF31,0x01FE,
+ 0x015A,0xFF31,0x01F9,0x015A,0xFF30,0x01F4,0x015A,0xFF30,0x01EF,0x015A,0xFF30,0x01EA,
+ 0x015A,0xFF30,0x01E5,0x015A,0xFF30,0x01E0,0x015A,0xFF30,0x01DB,0x015A,0xFF30,0x01D5,
+ 0x015A,0xFF2F,0x01D0,0x0159,0xFF2F,0x01CB,0x0159,0xFF2F,0x01C6,0x0159,0xFF2F,0x01C1,
+ 0x0159,0xFF2F,0x01BB,0x0159,0xFF2F,0x01B6,0x0159,0xFF2F,0x01B1,0x0159,0xFF2F,0x01AB,
+ 0x0159,0xFF2E,0x01A6,0x0159,0xFF2E,0x01A1,0x0158,0xFF2E,0x019C,0x0158,0xFF2E,0x0197,
+ 0x0158,0xFF2E,0x0193,0x0158,0xFF2E,0x018E,0x0158,0xFF2E,0x0189,0x0158,0xFF2E,0x0184,
+ 0x0158,0xFF2E,0x017F,0x0158,0xFF2D,0x017A,0x0157,0xFF2D,0x0176,0x0157,0xFF2D,0x0171,
+ 0x0157,0xFF2D,0x016C,0x0157,0xFF2D,0x0167,0x0157,0xFF2D,0x0163,0x0157,0xFF2D,0x015E,
+ 0x0157,0xFF2D,0x0159,0x0157,0xFF2D,0x0155,0x0156,0xFF2C,0x0150,0x0156,0xFF2C,0x014B,
+ 0x0156,0xFF2C,0x0147,0x0156,0xFF2C,0x0142,0x0156,0xFF2C,0x013E,0x0156,0xFF2C,0x0139,
+ 0x0156,0xFF2C,0x0134,0x0155,0xFF2C,0x0130,0x0155,0xFF2C,0x012B,0x0155,0xFF2C,0x0127,
+ 0x0155,0xFF2B,0x0122,0x0155,0xFF2B,0x011E,0x0155,0xFF2B,0x0119,0x0155,0xFF2B,0x0115,
+ 0x0154,0xFF2B,0x0110,0x0154,0xFF2B,0x010C,0x0154,0xFF2B,0x0108,0x0154,0xFF2B,0x0103,
+ 0x0154,0xFF2B,0x00FF,0x0154,0xFF2B,0x00FB,0x0154,0xFF2B,0x00F6,0x0153,0xFF2B,0x00F2,
+ 0x0153,0xFF2A,0x00EE,0x0153,0xFF2A,0x00E9,0x0153,0xFF2A,0x00E5,0x0153,0xFF2A,0x00E1,
+ 0x0153,0xFF2A,0x00DD,0x0152,0xFF2A,0x00D8,0x0152,0xFF2A,0x00D4,0x0152,0xFF2A,0x00D0,
+ 0x0152,0xFF2A,0x00CC,0x0152,0xFF2A,0x00C8,0x0152,0xFF2A,0x00C4,0x0151,0xFF2A,0x00C0,
+ 0x0151,0xFF2A,0x00BB,0x0151,0xFF2A,0x00B7,0x0151,0xFF29,0x00B3,0x0151,0xFF29,0x00AF,
+ 0x0150,0xFF29,0x00AB,0x0150,0xFF29,0x00A7,0x0150,0xFF29,0x00A3,0x0150,0xFF29,0x00A0,
+ 0x0150,0xFF29,0x009C,0x0150,0xFF29,0x0098,0x014F,0xFF29,0x0094,0x014F,0xFF29,0x0090,
+ 0x014F,0xFF29,0x008C,0x014F,0xFF29,0x0088,0x014F,0xFF29,0x0085,0x014E,0xFF29,0x0081,
+ 0x014E,0xFF29,0x007D,0x014E,0xFF29,0x007A,0x014E,0xFF29,0x0076,0x014E,0xFF29,0x0072,
+ 0x014D,0xFF29,0x006F,0x014D,0xFF29,0x006B,0x014D,0xFF28,0x0068,0x014D,0xFF28,0x0064,
+ 0x014D,0xFF28,0x0060,0x014C,0xFF28,0x005D,0x014C,0xFF28,0x005A,0x014C,0xFF28,0x0056,
+ 0x014C,0xFF28,0x0053,0x014B,0xFF28,0x004F,0x014B,0xFF28,0x004C,0x014B,0xFF28,0x0049,
+ 0x014B,0xFF28,0x0046,0x014B,0xFF28,0x0042,0x014A,0xFF28,0x003F,0x014A,0xFF28,0x003C,
+ 0x014A,0xFF28,0x0039,0x014A,0xFF28,0x0036,0x0149,0xFF28,0x0033,0x0149,0xFF28,0x0030,
+ 0x0149,0xFF28,0x002D,0x0149,0xFF28,0x002A,0x0149,0xFF28,0x0027,0x0148,0xFF28,0x0024,
+ 0x0148,0xFF28,0x0022,0x0148,0xFF28,0x001F,0x0148,0xFF28,0x001C,0x0147,0xFF28,0x001A,
+ 0x0147,0xFF28,0x0017,0x0147,0xFF2B,0x0015,0x0147,0xFF2E,0x0012,0x0146,0xFF31,0x0010,
+ 0x0146,0xFF33,0x000E,0x0146,0xFF36,0x000B,0x0146,0xFF39,0x0009,0x0145,0xFF3C,0x0007,
+ 0x0145,0xFF3F,0x0006,0x0145,0xFF42,0x0004,0x0145,0xFF44,0x0002,0x0144,0xFF47,0x0001,
+ 0x0144,0xFF4A,0x0000,0x0144,0xFF4D,0xFFF7,0x0144,0xFF50,0xFFEE,0x0143,0xFF53,0xFFE5,
+ 0x0143,0xFF55,0xFFDD,0x0143,0xFF58,0xFFD4,0x0143,0xFF5B,0xFFCC,0x0142,0xFF5E,0xFFC3,
+ 0x0142,0xFF61,0xFFBB,0x0146,0xFF64,0xFFB3,0x0149,0xFF67,0xFFAB,0x014D,0xFF69,0xFFA2,
+ 0x0151,0xFF6C,0xFF9B,0x0154,0xFF6F,0xFF93,0x0158,0xFF72,0xFF8B,0x015C,0xFF75,0xFF83,
+ 0x015F,0xFF78,0xFF7C,0x0163,0xFF7A,0xFF75,0x0166,0xFF7D,0xFF6D,0x016A,0xFF80,0xFF66,
+ 0x016E,0xFF83,0xFF5F,0x0171,0xFF86,0xFF58,0x0175,0xFF89,0xFF52,0x0178,0xFF8B,0xFF4B,
+ 0x017C,0xFF8E,0xFF44,0x0180,0xFF91,0xFF3E,0x0183,0xFF94,0xFF38,0x0187,0xFF97,0xFF32,
+ 0x018A,0xFF9A,0xFF2C,0x018E,0xFF9D,0xFF26,0x0191,0xFF9F,0xFF21,0x0195,0xFFA2,0xFF1B,
+ 0x0199,0xFFA5,0xFF16,0x019C,0xFFA8,0xFF11,0x01A0,0xFFAB,0xFF0C,0x01A3,0xFFAE,0xFF08,
+ 0x01A7,0xFFB0,0xFF04,0x01AA,0xFFB3,0xFF00,0x01AE,0xFFB6,0xFEFC,0x01B1,0xFFB9,0xFEF9,
+ 0x01B5,0xFFBC,0xFEF6,0x01B8,0xFFBF,0xFEF3,0x01BC,0xFFC1,0xFEF2,0x01BF,0xFFC4,0xFEF2,
+ 0x01C2,0xFFC7,0xFEF1,0x01C6,0xFFCA,0xFEF1,0x01C9,0xFFCD,0xFEF0,0x01CD,0xFFD0,0xFEF0,
+ 0x01D0,0xFFD3,0xFEEF,0x01D4,0xFFD5,0xFEEF,0x01D7,0xFFD8,0xFEEE,0x01DB,0xFFDB,0xFEEE,
+ 0x01DE,0xFFDE,0xFEED,0x01E1,0xFFE1,0xFEED,0x01E5,0xFFE4,0xFEEC,0x01E8,0xFFE6,0xFEEC,
+ 0x01EC,0xFFE9,0xFEEB,0x01EF,0xFFEC,0xFEEB,0x01F2,0xFFEF,0xFEEA,0x01F6,0xFFF2,0xFEEA,
+ 0x01F9,0xFFF5,0xFEEA,0x01FC,0xFFF7,0xFEE9,0x0200,0xFFFA,0xFEE9,0x0203,0xFFFD,0xFEE8,
+ 0x0206,0x0000,0xFEE8,0x020A,0x0000,0xFEE7,0x020D,0x0000,0xFEE7,0x0210,0x0001,0xFEE6,
+ 0x0214,0x0001,0xFEE6,0x0217,0x0002,0xFEE6,0x021A,0x0002,0xFEE5,0x021E,0x0003,0xFEE5,
+ 0x0221,0x0004,0xFEE4,0x0224,0x0004,0xFEE4,0x0227,0x0005,0xFEE4,0x022B,0x0006,0xFEE3,
+ 0x022E,0x0007,0xFEE3,0x0231,0x0008,0xFEE2,0x0234,0x0009,0xFEE2,0x0238,0x000A,0xFEE1,
+ 0x023B,0x000B,0xFEE1,0x023E,0x000C,0xFEE1,0x0241,0x000D,0xFEE0,0x0244,0x000E,0xFEE0,
+ 0x0248,0x000F,0xFEE0,0x024B,0x0010,0xFEDF,0x024E,0x0011,0xFEDF,0x0251,0x0012,0xFEDE,
+ 0x0254,0x0013,0xFEDE,0x0257,0x0015,0xFEDE,0x025B,0x0016,0xFEDD,0x025E,0x0017,0xFEDD,
+ 0x0261,0x0018,0xFEDD,0x0264,0x001A,0xFEDC,0x0267,0x001B,0xFEDC,0x026A,0x001C,0xFEDB,
+ 0x026D,0x001E,0xFEDB,0x0270,0x001F,0xFEDB,0x0274,0x0021,0xFEDA,0x0277,0x0022,0xFEDA,
+ 0x027A,0x0024,0xFEDA,0x027D,0x0025,0xFED9,0x0280,0x0027,0xFED9,0x0283,0x0028,0xFED9,
+ 0x0286,0x002A,0xFED8,0x0289,0x002B,0xFED8,0x028C,0x002D,0xFED8,0x028F,0x002E,0xFED7,
+ 0x0292,0x0030,0xFED7,0x0295,0x0032,0xFED7,0x0298,0x0033,0xFED6,0x029B,0x0035,0xFED6,
+ 0x029E,0x0037,0xFED6,0x02A1,0x0039,0xFED5,0x02A4,0x003A,0xFED5,0x02A7,0x003C,0xFED5,
+ 0x02AA,0x003E,0xFED4,0x02AD,0x0040,0xFED4,0x02B0,0x0041,0xFED4,0x02B3,0x0043,0xFED4,
+ 0x02B6,0x0045,0xFED3,0x02B9,0x0047,0xFED3,0x02BC,0x0049,0xFED3,0x02BE,0x004B,0xFED2,
+ 0x02C1,0x004D,0xFED2,0x02C4,0x004E,0xFED2,0x02C7,0x0050,0xFED2,0x02CA,0x0052,0xFED1,
+ 0x02CD,0x0054,0xFED1,0x02D0,0x0056,0xFED1,0x02D2,0x0058,0xFED0,0x02D5,0x005A,0xFED0,
+ 0x02D8,0x005C,0xFED0,0x02DB,0x005E,0xFED0,0x02DE,0x0060,0xFECF,0x02E1,0x0063,0xFECF,
+ 0x02E3,0x0065,0xFECF,0x02E6,0x0067,0xFECF,0x02E9,0x0069,0xFECE,0x02EC,0x006B,0xFECE,
+ 0x02EE,0x006D,0xFECE,0x02F1,0x006F,0xFECE,0x02F4,0x0071,0xFECD,0x02F7,0x0074,0xFECD,
+ 0x02F9,0x0076,0xFECD,0x02FC,0x0078,0xFECD,0x02FF,0x007A,0xFECC,0x0301,0x007D,0xFECC,
+ 0x0304,0x007F,0xFECC,0x0307,0x0081,0xFECC,0x0309,0x0083,0xFECC,0x030C,0x0086,0xFECB,
+ 0x030F,0x0088,0xFECB,0x0311,0x008A,0xFECB,0x0314,0x008D,0xFECB,0x0317,0x008F,0xFECA,
+ 0x0319,0x0091,0xFECA,0x031C,0x0094,0xFECA,0x031E,0x0096,0xFECA,0x0321,0x0099,0xFECA,
+ 0x0324,0x009B,0xFEC9,0x0326,0x009D,0xFEC9,0x0329,0x00A0,0xFEC9,0x032B,0x00A2,0xFEC9,
+ 0x032E,0x00A5,0xFEC9,0x0330,0x00A7,0xFEC8,0x0333,0x00AA,0xFEC8,0x0335,0x00AC,0xFEC8,
+ 0x0338,0x00AF,0xFEC8,0x033A,0x00B1,0xFEC8,0x033D,0x00B4,0xFEC8,0x033F,0x00B6,0xFEC7,
+ 0x0342,0x00B9,0xFEC7,0x0344,0x00BB,0xFEC7,0x0346,0x00BE,0xFEC7,0x0349,0x00C1,0xFEC7,
+ 0x034B,0x00C3,0xFEC7,0x034E,0x00C6,0xFEC6,0x0350,0x00C9,0xFEC6,0x0352,0x00CB,0xFEC6,
+ 0x0355,0x00CE,0xFEC6,0x0357,0x00D1,0xFEC6,0x0359,0x00D3,0xFEC6,0x035C,0x00D6,0xFEC5,
+ 0x035E,0x00D9,0xFEC5,0x0360,0x00DB,0xFEC5,0x0363,0x00DE,0xFEC5,0x0365,0x00E1,0xFEC5,
+ 0x0367,0x00E3,0xFEC5,0x036A,0x00E6,0xFEC5,0x036C,0x00E9,0xFEC4,0x036E,0x00EC,0xFEC4,
+ 0x0370,0x00EF,0xFEC4,0x0372,0x00F1,0xFEC4,0x0375,0x00F4,0xFEC4,0x0377,0x00F7,0xFEC4,
+ 0x0379,0x00FA,0xFEC4,0x037B,0x00FD,0xFEC4,0x037D,0x0100,0xFEC3,0x037F,0x0102,0xFEC3,
+ 0x0382,0x0105,0xFEC3,0x0384,0x0108,0xFEC3,0x0386,0x010B,0xFEC3,0x0388,0x010E,0xFEC3,
+ 0x038A,0x0111,0xFEC3,0x038C,0x0114,0xFEC3,0x038E,0x0117,0xFEC3,0x0390,0x011A,0xFEC3,
+ 0x0392,0x011D,0xFEC2,0x0394,0x0120,0xFEC2,0x0396,0x0123,0xFEC2,0x0398,0x0126,0xFEC2,
+ 0x039A,0x0129,0xFEC2,0x039C,0x012C,0xFEC2,0x039E,0x012F,0xFEC2,0x03A0,0x0132,0xFEC2,
+ 0x03A1,0x0135,0xFEC2,0x03A3,0x0138,0xFEC2,0x03A5,0x013B,0xFEC2,0x03A7,0x013E,0xFEC1,
+ 0x03A9,0x0141,0xFEC1,0x03AB,0x0144,0xFEC1,0x03AC,0x0147,0xFEC1,0x03AE,0x014A,0xFEC1,
+ 0x03B0,0x014D,0xFEC1,0x03B2,0x0151,0xFEC1,0x03B3,0x0154,0xFEC1,0x03B5,0x0157,0xFEC1,
+ 0x03B7,0x015A,0xFEC1,0x03B9,0x015D,0xFEC1,0x03BA,0x0160,0xFEC1,0x03BC,0x0164,0xFEC1,
+ 0x03BD,0x0167,0xFEC1,0x03BF,0x016A,0xFEC1,0x03C1,0x016D,0xFEC1,0x03C2,0x0170,0xFEC1,
+ 0x03C4,0x0174,0xFEC1,0x03C5,0x0177,0xFEC0,0x03C7,0x017A,0xFEC0,0x03C8,0x017D,0xFEC0,
+ 0x03CA,0x0181,0xFEC0,0x03CB,0x0184,0xFEC0,0x03CC,0x0187,0xFEC0,0x03CE,0x018B,0xFEC0,
+ 0x03CF,0x018E,0xFEC0,0x03D0,0x0191,0xFEC0,0x03D2,0x0195,0xFEC0,0x03D3,0x0198,0xFEC0,
+ 0x03D4,0x019B,0xFEC0,0x03D5,0x019F,0xFEC0,0x03D7,0x01A2,0xFEC0,0x03D8,0x01A5,0xFEC0,
+ 0x03D9,0x01A9,0xFEC0,0x03DA,0x01AC,0xFEC0,0x03DB,0x01AF,0xFEC0,0x03DC,0x01B3,0xFEC0,
+ 0x03DD,0x01B6,0xFEC0,0x03DE,0x01BA,0xFEC0,0x03DE,0x01BD,0xFEC0,0x03DF,0x01C1,0xFEC0,
+ 0x03E0,0x01C4,0xFEC0,0x03E1,0x01C8,0xFEC0,0x03E1,0x01CB,0xFEC0,0x03E2,0x01CF,0xFEC0,
+ 0x03E2,0x01D2,0xFEC0,0x03E1,0x01D3,0xFEC0,0x03DF,0x01D5,0xFEC0,0x03DD,0x01D6,0xFEC0,
+ 0x03DB,0x01D8,0xFEC0,0x03D9,0x01D9,0xFEC0,0x03D6,0x01DB,0xFEC0,0x03D4,0x01DC,0xFEC0,
+ 0x03D1,0x01DD,0xFEC0,0x03CE,0x01DF,0xFEC0,0x03CB,0x01E0,0xFEC0,0x03C8,0x01E2,0xFEC0,
+ 0x03C5,0x01E3,0xFEC0,0x03C2,0x01E4,0xFEC0,0x03BF,0x01E6,0xFEC0,0x03BC,0x01E7,0xFEC0,
+ 0x03B8,0x01E9,0xFEC0,0x03B5,0x01EA,0xFEC0,0x03B1,0x01EB,0xFEC0,0x03AE,0x01ED,0xFEC0,
+ 0x03AA,0x01EE,0xFEC0,0x03A7,0x01EF,0xFEC1,0x03A3,0x01F1,0xFEC1,0x039F,0x01F2,0xFEC1,
+ 0x039B,0x01F4,0xFEC1,0x0398,0x01F5,0xFEC1,0x0394,0x01F6,0xFEC1,0x0390,0x01F8,0xFEC1,
+ 0x038C,0x01F9,0xFEC1,0x0388,0x01FA,0xFEC1,0x0384,0x01FC,0xFEC1,0x0380,0x01FD,0xFEC1,
+ 0x037B,0x01FE,0xFEC1,0x0377,0x0200,0xFEC2,0x0373,0x0201,0xFEC2,0x036F,0x0202,0xFEC2,
+ 0x036B,0x0204,0xFEC2,0x0366,0x0205,0xFEC2,0x0362,0x0206,0xFEC2,0x035D,0x0207,0xFEC2,
+ 0x0359,0x0209,0xFEC2,0x0354,0x020A,0xFEC3,0x0350,0x020B,0xFEC3,0x034B,0x020D,0xFEC3,
+ 0x0347,0x020E,0xFEC3,0x0342,0x020F,0xFEC3,0x033E,0x0210,0xFEC3,0x0339,0x0212,0xFEC4,
+ 0x0334,0x0213,0xFEC4,0x0330,0x0214,0xFEC4,0x032B,0x0216,0xFEC4,0x0326,0x0217,0xFEC4,
+ 0x0321,0x0218,0xFEC4,0x031C,0x0219,0xFEC5,0x0318,0x021B,0xFEC5,0x0313,0x021C,0xFEC5,
+ 0x030E,0x021D,0xFEC5,0x0309,0x021E,0xFEC6,0x0304,0x0220,0xFEC6,0x02FF,0x0221,0xFEC6,
+ 0x02FA,0x0222,0xFEC6,0x02F5,0x0223,0xFEC6,0x02F0,0x0224,0xFEC7,0x02EB,0x0226,0xFEC7,
+ 0x02E6,0x0227,0xFEC7,0x02E0,0x0228,0xFEC8,0x02DB,0x0229,0xFEC8,0x02D6,0x022A,0xFEC8,
+ 0x02D1,0x022C,0xFEC8,0x02CC,0x022D,0xFEC9,0x02C6,0x022E,0xFEC9,0x02C1,0x022F,0xFEC9,
+ 0x02BC,0x0230,0xFEC9,0x02B6,0x0232,0xFECA,0x02B1,0x0233,0xFECA,0x02AC,0x0234,0xFECA,
+ 0x02A6,0x0235,0xFECB,0x02A1,0x0236,0xFECB,0x029C,0x0237,0xFECB,0x0296,0x0239,0xFECC,
+ 0x0291,0x023A,0xFECC,0x028B,0x023B,0xFECC,0x0286,0x023C,0xFECD,0x0280,0x023D,0xFECD,
+ 0x027A,0x023E,0xFECE,0x0275,0x023F,0xFECE,0x026F,0x0241,0xFECE,0x026A,0x0242,0xFECF,
+ 0x0264,0x0243,0xFECF,0x025E,0x0244,0xFECF,0x0259,0x0245,0xFED0,0x0253,0x0246,0xFED0,
+ 0x024D,0x0247,0xFED1,0x0248,0x0248,0xFED1,0x0242,0x0249,0xFED2,0x023C,0x024A,0xFED2,
+ 0x0236,0x024C,0xFED2,0x0231,0x024D,0xFED3,0x022B,0x024E,0xFED3,0x0225,0x024F,0xFED4,
+ 0x021F,0x0250,0xFED4,0x0219,0x0251,0xFED5,0x0213,0x0252,0xFED5,0x020D,0x0253,0xFED6,
+ 0x0207,0x0254,0xFED6,0x0202,0x0255,0xFED7,0x01FC,0x0256,0xFED7,0x01F6,0x0257,0xFED8,
+ 0x01F0,0x0258,0xFED8,0x01EA,0x0259,0xFED9,0x01E4,0x025A,0xFED9,0x01DE,0x025B,0xFEDA,
+ 0x01D7,0x025C,0xFEDA,0x01D1,0x025D,0xFEDB,0x01CB,0x025E,0xFEDB,0x01C5,0x025F,0xFEDC,
+ 0x01BF,0x0260,0xFEDC,0x01B9,0x0261,0xFEDD,0x01B3,0x0262,0xFEDE,0x01AD,0x0263,0xFEDE,
+ 0x01A6,0x0264,0xFEDF,0x01A0,0x0265,0xFEDF,0x019A,0x0266,0xFEE0,0x0195,0x0267,0xFEE1,
+ 0x0190,0x0268,0xFEE1,0x018B,0x0269,0xFEE2,0x0186,0x026A,0xFEE2,0x0181,0x026B,0xFEE3,
+ 0x017C,0x026C,0xFEE4,0x0177,0x026D,0xFEE4,0x0172,0x026E,0xFEE5,0x016E,0x026F,0xFEE6,
+ 0x0169,0x0270,0xFEE6,0x0164,0x0271,0xFEE7,0x015F,0x0272,0xFEE8,0x015A,0x0273,0xFEE8,
+ 0x0156,0x0274,0xFEE9,0x0151,0x0274,0xFEEA,0x014C,0x0275,0xFEEA,0x0148,0x0276,0xFEEB,
+ 0x0143,0x0277,0xFEEC,0x013E,0x0278,0xFEED,0x013A,0x0279,0xFEED,0x0135,0x027A,0xFEEE,
+ 0x0131,0x027B,0xFEEF,0x012C,0x027C,0xFEEF,0x0128,0x027C,0xFEF0,0x0123,0x027D,0xFEF1,
+ 0x011F,0x027E,0xFEF2,0x011A,0x027F,0xFEF3,0x0116,0x0280,0xFEF3,0x0112,0x0281,0xFEF4,
+ 0x010D,0x0282,0xFEF5,0x0109,0x0282,0xFEF6,0x0105,0x0283,0xFEF7,0x0101,0x0284,0xFEF7,
+ 0x00FC,0x0285,0xFEF8,0x00F8,0x0286,0xFEF9,0x00F4,0x0287,0xFEFA,0x00F0,0x0287,0xFEFB,
+ 0x00EC,0x0288,0xFEFC,0x00E8,0x0289,0xFEFC,0x00E4,0x028A,0xFEFD,0x00E0,0x028A,0xFEFE,
+ 0x00DC,0x028B,0xFEFF,0x00D8,0x028C,0xFF00,0x00D4,0x028D,0xFF01,0x00D0,0x028E,0xFF02,
+ 0x00CC,0x028E,0xFF03,0x00C8,0x028F,0xFF04,0x00C4,0x0290,0xFF04,0x00C0,0x0291,0xFF05,
+ 0x00BD,0x0291,0xFF06,0x00B9,0x0292,0xFF07,0x00B5,0x0293,0xFF08,0x00B1,0x0294,0xFF09,
+ 0x00AE,0x0294,0xFF0A,0x00AA,0x0295,0xFF0B,0x00A6,0x0296,0xFF0C,0x00A3,0x0296,0xFF0D,
+ 0x009F,0x0297,0xFF0E,0x009C,0x0298,0xFF0F,0x0098,0x0298,0xFF10,0x0095,0x0299,0xFF11,
+ 0x0091,0x029A,0xFF12,0x008E,0x029A,0xFF13,0x008B,0x029B,0xFF14,0x0087,0x029C,0xFF15,
+ 0x0084,0x029C,0xFF16,0x0081,0x029D,0xFF17,0x007D,0x029E,0xFF18,0x007A,0x029E,0xFF1A,
+ 0x0077,0x029F,0xFF1B,0x0074,0x02A0,0xFF1C,0x0071,0x02A0,0xFF1D,0x006E,0x02A1,0xFF1E,
+ 0x006B,0x02A1,0xFF1F,0x0068,0x02A2,0xFF20,0x0065,0x02A3,0xFF21,0x0062,0x02A3,0xFF22,
+ 0x005F,0x02A4,0xFF24,0x005C,0x02A4,0xFF25,0x0059,0x02A5,0xFF26,0x0056,0x02A5,0xFF27,
+ 0x0053,0x02A6,0xFF28,0x0051,0x02A7,0xFF29,0x004E,0x02A7,0xFF2B,0x004B,0x02A8,0xFF2C,
+ 0x0048,0x02A8,0xFF2D,0x0046,0x02A9,0xFF2E,0x0043,0x02A9,0xFF2F,0x0041,0x02AA,0xFF31,
+ 0x003E,0x02AA,0xFF32,0x003C,0x02AB,0xFF33,0x0039,0x02AB,0xFF34,0x0037,0x02AC,0xFF36,
+ 0x0035,0x02AC,0xFF37,0x0032,0x02AD,0xFF38,0x0030,0x02AD,0xFF39,0x002E,0x02AE,0xFF3B,
+ 0x002C,0x02AE,0xFF3C,0x0029,0x02AE,0xFF3D,0x0027,0x02AF,0xFF3F,0x0025,0x02AF,0xFF40,
+ 0x0023,0x02B0,0xFF41,0x0021,0x02B0,0xFF42,0x001F,0x02B1,0xFF44,0x001D,0x02B1,0xFF45,
+ 0x001B,0x02B1,0xFF47,0x001A,0x02B2,0xFF48,0x0018,0x02B2,0xFF49,0x0016,0x02B2,0xFF4B,
+ 0x0015,0x02B3,0xFF4C,0x0013,0x02B3,0xFF4F,0x0011,0x02B3,0xFF52,0x0010,0x02B4,0xFF55,
+ 0x000E,0x02B4,0xFF58,0x000D,0x02B4,0xFF5B,0x000C,0x02B5,0xFF5D,0x000A,0x02B5,0xFF60,
+ 0x0009,0x02B5,0xFF63,0x0008,0x02B6,0xFF66,0x0007,0x02B6,0xFF69,0x0006,0x02B6,0xFF6C,
+ 0x0005,0x02B6,0xFF6F,0x0004,0x02B7,0xFF72,0x0003,0x02B7,0xFF75,0x0002,0x02B7,0xFF78,
+ 0x0002,0x02B7,0xFF7A,0x0001,0x02B7,0xFF7D,0x0001,0x02B7,0xFF80,0x0000,0x02B8,0xFF83,
+ 0x0000,0x02B8,0xFF86,0xFFFD,0x02B8,0xFF89,0xFFFA,0x02B8,0xFF8C,0xFFF7,0x02B8,0xFF8F,
+ 0xFFF4,0x02B8,0xFF92,0xFFF1,0x02BA,0xFF95,0xFFEE,0x02BC,0xFF97,0xFFEB,0x02BE,0xFF9A,
+ 0xFFE9,0x02C0,0xFF9D,0xFFE6,0x02C1,0xFFA0,0xFFE3,0x02C3,0xFFA3,0xFFE0,0x02C5,0xFFA6,
+ 0xFFDD,0x02C7,0xFFA9,0xFFDB,0x02C9,0xFFAC,0xFFD8,0x02CB,0xFFAF,0xFFD5,0x02CC,0xFFB2,
+ 0xFFD3,0x02CE,0xFFB5,0xFFD0,0x02D0,0xFFB7,0xFFCE,0x02D2,0xFFBA,0xFFCB,0x02D4,0xFFBD,
+ 0xFFC9,0x02D6,0xFFC0,0xFFC6,0x02D7,0xFFC3,0xFFC4,0x02D9,0xFFC6,0xFFC2,0x02DB,0xFFC9,
+ 0xFFBF,0x02DD,0xFFCC,0xFFBD,0x02DF,0xFFCF,0xFFBB,0x02E0,0xFFD2,0xFFB9,0x02E2,0xFFD4,
+ 0xFFB6,0x02E4,0xFFD7,0xFFB4,0x02E6,0xFFDA,0xFFB2,0x02E8,0xFFDD,0xFFB0,0x02E9,0xFFE0,
+ 0xFFAE,0x02EB,0xFFE3,0xFFAD,0x02ED,0xFFE6,0xFFAB,0x02EF,0xFFE9,0xFFA9,0x02F0,0xFFEC,
+ 0xFFA8,0x02F2,0xFFEF,0xFFA6,0x02F4,0xFFF1,0xFFA5,0x02F6,0xFFF4,0xFFA4,0x02F7,0xFFF7,
+ 0xFFA3,0x02F9,0xFFFA,0xFFA3,0x02FB,0xFFFD,0xFFA3,0x02FC,0x0000,0xFFA3,0x02FE,0x0000,
+ 0xFFA3,0x0300,0x0001,0xFFA3,0x0302,0x0002,0xFFA4,0x0303,0x0002,0xFFA4,0x0305,0x0003,
+ 0xFFA4,0x0307,0x0005,0xFFA4,0x0308,0x0006,0xFFA4,0x030A,0x0007,0xFFA4,0x030C,0x0008,
+ 0xFFA4,0x030D,0x000A,0xFFA4,0x030F,0x000B,0xFFA4,0x0311,0x000D,0xFFA4,0x0312,0x000F,
+ 0xFFA4,0x0314,0x0010,0xFFA4,0x0316,0x0012,0xFFA5,0x0317,0x0014,0xFFA5,0x0319,0x0016,
+ 0xFFA5,0x031B,0x0018,0xFFA5,0x031C,0x001A,0xFFA5,0x031E,0x001C,0xFFA5,0x031F,0x001E,
+ 0xFFA5,0x0321,0x0020,0xFFA5,0x0323,0x0022,0xFFA5,0x0324,0x0024,0xFFA5,0x0326,0x0027,
+ 0xFFA5,0x0327,0x0029,0xFFA5,0x0329,0x002B,0xFFA6,0x032B,0x002E,0xFFA6,0x032C,0x0030,
+ 0xFFA6,0x032E,0x0033,0xFFA6,0x032F,0x0035,0xFFA6,0x0331,0x0038,0xFFA6,0x0332,0x003B,
+ 0xFFA6,0x0334,0x003D,0xFFA6,0x0335,0x0040,0xFFA6,0x0337,0x0043,0xFFA6,0x0339,0x0046,
+ 0xFFA6,0x033A,0x0048,0xFFA6,0x033C,0x004B,0xFFA6,0x033D,0x004E,0xFFA7,0x033F,0x0051,
+ 0xFFA7,0x0340,0x0054,0xFFA7,0x0342,0x0057,0xFFA7,0x0343,0x005A,0xFFA7,0x0345,0x005D,
+ 0xFFA7,0x0346,0x0061,0xFFA7,0x0348,0x0064,0xFFA7,0x0349,0x0067,0xFFA7,0x034B,0x006A,
+ 0xFFA7,0x034C,0x006D,0xFFA7,0x034E,0x0071,0xFFA7,0x034F,0x0074,0xFFA7,0x0350,0x0077,
+ 0xFFA8,0x0352,0x007B,0xFFA8,0x0353,0x007E,0xFFA8,0x0355,0x0082,0xFFA8,0x0356,0x0085,
+ 0xFFA8,0x0358,0x0089,0xFFA8,0x0359,0x008C,0xFFA8,0x035A,0x0090,0xFFA8,0x035C,0x0093,
+ 0xFFA8,0x035D,0x0097,0xFFA8,0x035F,0x009B,0xFFA8,0x0360,0x009E,0xFFA8,0x0361,0x00A2,
+ 0xFFA8,0x0363,0x00A6,0xFFA8,0x0364,0x00AA,0xFFA8,0x0366,0x00AE,0xFFA9,0x0367,0x00B1,
+ 0xFFA9,0x0368,0x00B5,0xFFA9,0x036A,0x00B9,0xFFA9,0x036B,0x00BD,0xFFA9,0x036C,0x00C1,
+ 0xFFA9,0x036E,0x00C5,0xFFA9,0x036F,0x00C9,0xFFA9,0x0370,0x00CD,0xFFA9,0x0372,0x00D1,
+ 0xFFA9,0x0373,0x00D5,0xFFA9,0x0374,0x00D9,0xFFA9,0x0376,0x00DD,0xFFA9,0x0377,0x00E2,
+ 0xFFA9,0x0378,0x00E6,0xFFAA,0x037A,0x00EA,0xFFAA,0x037B,0x00EE,0xFFAA,0x037C,0x00F2,
+ 0xFFAA,0x037D,0x00F7,0xFFAA,0x037F,0x00FB,0xFFAA,0x0380,0x00FF,0xFFAA,0x0381,0x0104,
+ 0xFFAA,0x0382,0x0108,0xFFAA,0x0384,0x010D,0xFFAA,0x0385,0x0111,0xFFAA,0x0386,0x0116,
+ 0xFFAA,0x0387,0x011A,0xFFAA,0x0389,0x011F,0xFFAA,0x038A,0x0123,0xFFAA,0x038B,0x0128,
+ 0xFFAA,0x038C,0x012C,0xFFAB,0x038D,0x0131,0xFFAB,0x038F,0x0135,0xFFAB,0x0390,0x013A,
+ 0xFFAB,0x0391,0x013F,0xFFAB,0x0392,0x0143,0xFFAB,0x0393,0x0148,0xFFAB,0x0394,0x014D,
+ 0xFFAB,0x0396,0x0152,0xFFAB,0x0397,0x0156,0xFFAB,0x0398,0x015B,0xFFAB,0x0399,0x0160,
+ 0xFFAB,0x039A,0x0165,0xFFAB,0x039B,0x016A,0xFFAB,0x039C,0x016F,0xFFAB,0x039D,0x0174,
+ 0xFFAB,0x039F,0x0179,0xFFAB,0x03A0,0x017E,0xFFAB,0x03A1,0x0183,0xFFAC,0x03A2,0x0188,
+ 0xFFAC,0x03A3,0x018D,0xFFAC,0x03A4,0x0192,0xFFAC,0x03A5,0x0197,0xFFAC,0x03A6,0x019C,
+ 0xFFAC,0x03A7,0x01A1,0xFFAC,0x03A8,0x01A6,0xFFAC,0x03A9,0x01AB,0xFFAC,0x03AA,0x01B0,
+ 0xFFAC,0x03AB,0x01B6,0xFFAC,0x03AC,0x01BB,0xFFAC,0x03AD,0x01C0,0xFFAC,0x03AE,0x01C5,
+ 0xFFAC,0x03AF,0x01CB,0xFFAC,0x03B0,0x01D0,0xFFAC,0x03B1,0x01D5,0xFFAC,0x03B2,0x01DB,
+ 0xFFAC,0x03B3,0x01E0,0xFFAC,0x03B4,0x01E5,0xFFAD,0x03B5,0x01EB,0xFFAD,0x03B6,0x01F0,
+ 0xFFAD,0x03B7,0x01F6,0xFFAD,0x03B8,0x01FB,0xFFAD,0x03B9,0x0201,0xFFAD,0x03BA,0x0206,
+ 0xFFAD,0x03BB,0x020C,0xFFAD,0x03BC,0x0211,0xFFAD,0x03BD,0x0217,0xFFAD,0x03BD,0x021C,
+ 0xFFAD,0x03BE,0x0222,0xFFAD,0x03BF,0x0228,0xFFAD,0x03C0,0x022D,0xFFAD,0x03C1,0x0233,
+ 0xFFAD,0x03C2,0x0238,0xFFAD,0x03C3,0x023E,0xFFAD,0x03C3,0x0244,0xFFAD,0x03C4,0x024A,
+ 0xFFAD,0x03C5,0x024F,0xFFAD,0x03C6,0x0255,0xFFAD,0x03C7,0x025B,0xFFAD,0x03C8,0x0261,
+ 0xFFAD,0x03C8,0x0267,0xFFAE,0x03C9,0x026C,0xFFAE,0x03CA,0x0272,0xFFAE,0x03CB,0x0278,
+ 0xFFAE,0x03CB,0x027E,0xFFAE,0x03CC,0x0284,0xFFAE,0x03CD,0x028A,0xFFAE,0x03CE,0x0290,
+ 0xFFAE,0x03CE,0x0296,0xFFAE,0x03CF,0x029C,0xFFAE,0x03D0,0x02A2,0xFFAE,0x03D1,0x02A8,
+ 0xFFAE,0x03D1,0x02AE,0xFFAE,0x03D2,0x02B4,0xFFAE,0x03D3,0x02BA,0xFFAE,0x03D3,0x02C0,
+ 0xFFAE,0x03D4,0x02C6,0xFFAE,0x03D5,0x02CC,0xFFAE,0x03D5,0x02D3,0xFFAE,0x03D6,0x02D9,
+ 0xFFAE,0x03D7,0x02DF,0xFFAE,0x03D7,0x02E5,0xFFAE,0x03D8,0x02EB,0xFFAE,0x03D8,0x02F2,
+ 0xFFAE,0x03D9,0x02F8,0xFFAE,0x03D9,0x02FE,0xFFAE,0x03DA,0x0304,0xFFAE,0x03DB,0x030B,
+ 0xFFAE,0x03DB,0x0311,0xFFAE,0x03DC,0x0317,0xFFAF,0x03DC,0x031E,0xFFAF,0x03DD,0x0324,
+ 0xFFAF,0x03DD,0x032A,0xFFAF,0x03DE,0x0331,0xFFAF,0x03DE,0x0337,0xFFAF,0x03DF,0x033E,
+ 0xFFAF,0x03DF,0x0344,0xFFAF,0x03E0,0x034B,0xFFAF,0x03E0,0x0351,0xFFAF,0x03E0,0x0358,
+ 0xFFAF,0x03E1,0x035E,0xFFAF,0x03E1,0x0365,0xFFAF,0x03E2,0x036B,0xFFAF,0x03E2,0x0372,
+ 0xFFAF,0x03E2,0x0378,0xFFAF,0x03E3,0x037F,0xFFAF,0x03E3,0x0386,0xFFAF,0x03E3,0x038C,
+ 0xFFAF,0x03E4,0x0393,0xFFAF,0x03E4,0x039A,0xFFAF,0x03E4,0x03A0,0xFFAF,0x03E5,0x03A7,
+ 0xFFAF,0x03E5,0x03AE,0xFFAF,0x03E5,0x03B4,0xFFAF,0x03E5,0x03BB,0xFFAF,0x03E5,0x03C2,
+ 0xFFAF,0x03E6,0x03C9,0xFFAF,0x03E6,0x03D0,0xFFAF,0x03E6,0x03D6,0xFFAF,0x03E6,0x03DD
+};
+#ifdef __STDC__
+static signed short v_tbl[] = {
+#else
+static short v_tbl[] = {
+#endif
+ 0x0000,0x0005,0x000B,0x0010,0x0016,0x001B,0x0020,0x0026,
+ 0x002B,0x0030,0x0036,0x003B,0x0040,0x0046,0x004B,0x0050,
+ 0x0056,0x005B,0x0060,0x0066,0x006B,0x0070,0x0075,0x007B,
+ 0x0080,0x0085,0x008A,0x008F,0x0095,0x009A,0x009F,0x00A4,
+ 0x00A9,0x00AF,0x00B4,0x00B9,0x00BE,0x00C3,0x00C8,0x00CD,
+ 0x00D2,0x00D8,0x00DD,0x00E2,0x00E7,0x00EC,0x00F1,0x00F6,
+ 0x00FB,0x0100,0x0105,0x010A,0x010F,0x0114,0x0119,0x011E,
+ 0x0123,0x0128,0x012D,0x0132,0x0137,0x013C,0x0141,0x0146,
+ 0x014A,0x014F,0x0154,0x0159,0x015E,0x0163,0x0168,0x016D,
+ 0x0171,0x0176,0x017B,0x0180,0x0185,0x0189,0x018E,0x0193,
+ 0x0198,0x019C,0x01A1,0x01A6,0x01AB,0x01AF,0x01B4,0x01B9,
+ 0x01BD,0x01C2,0x01C7,0x01CB,0x01D0,0x01D5,0x01D9,0x01DE,
+ 0x01E2,0x01E7,0x01EB,0x01F0,0x01F5,0x01F9,0x01FE,0x0202,
+ 0x0207,0x020B,0x0210,0x0214,0x0219,0x021D,0x0222,0x0226,
+ 0x022A,0x022F,0x0233,0x0238,0x023C,0x0240,0x0245,0x0249,
+ 0x024D,0x0252,0x0256,0x025A,0x025F,0x0263,0x0267,0x026C,
+ 0x0270,0x0274,0x0278,0x027C,0x0281,0x0285,0x0289,0x028D,
+ 0x0291,0x0296,0x029A,0x029E,0x02A2,0x02A6,0x02AA,0x02AE,
+ 0x02B2,0x02B6,0x02BA,0x02BE,0x02C2,0x02C6,0x02CA,0x02CE,
+ 0x02D2,0x02D6,0x02DA,0x02DE,0x02E2,0x02E6,0x02EA,0x02ED,
+ 0x02F1,0x02F5,0x02F9,0x02FD,0x0300,0x0304,0x0308,0x030C,
+ 0x030F,0x0313,0x0317,0x031B,0x031E,0x0322,0x0325,0x0329,
+ 0x032D,0x0330,0x0334,0x0337,0x033B,0x033E,0x0342,0x0345,
+ 0x0349,0x034C,0x0350,0x0353,0x0357,0x035A,0x035D,0x0361,
+ 0x0364,0x0367,0x036B,0x036E,0x0371,0x0374,0x0378,0x037B,
+ 0x037E,0x0381,0x0384,0x0387,0x038B,0x038E,0x0391,0x0394,
+ 0x0397,0x039A,0x039D,0x03A0,0x03A2,0x03A5,0x03A8,0x03AB,
+ 0x03AE,0x03B1,0x03B3,0x03B6,0x03B9,0x03BC,0x03BE,0x03C1,
+ 0x03C4,0x03C6,0x03C9,0x03CB,0x03CE,0x03D0,0x03D3,0x03D5,
+ 0x03D7,0x03DA,0x03DC,0x03DE,0x03E0,0x03E2,0x03E5,0x03E7,
+ 0x03E9,0x03EB,0x03ED,0x03EE,0x03F0,0x03F2,0x03F4,0x03F5,
+ 0x03F7,0x03F9,0x03FA,0x03FB,0x03FC,0x03FE,0x03FE,0x03FF
+};
+static unsigned short grnsep[] = {
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
+ 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
+ 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
+ 0x0001,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,
+ 0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,
+ 0x0002,0x0002,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,
+ 0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,
+ 0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,
+ 0x0004,0x0004,0x0004,0x0004,0x0005,0x0005,0x0005,0x0005,
+ 0x0005,0x0005,0x0005,0x0005,0x0005,0x0005,0x0005,0x0006,
+ 0x0006,0x0006,0x0006,0x0006,0x0006,0x0006,0x0006,0x0006,
+ 0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,
+ 0x0008,0x0008,0x0008,0x0008,0x0008,0x0008,0x0008,0x0008,
+ 0x0009,0x0009,0x0009,0x0009,0x0009,0x0009,0x0009,0x0009,
+ 0x000A,0x000A,0x000A,0x000A,0x000A,0x000A,0x000B,0x000B,
+ 0x000B,0x000B,0x000B,0x000B,0x000B,0x000C,0x000C,0x000C,
+ 0x000C,0x000C,0x000C,0x000D,0x000D,0x000D,0x000D,0x000D,
+ 0x000D,0x000E,0x000E,0x000E,0x000E,0x000E,0x000F,0x000F,
+ 0x000F,0x000F,0x000F,0x000F,0x0010,0x0010,0x0010,0x0010,
+ 0x0010,0x0011,0x0011,0x0011,0x0011,0x0011,0x0012,0x0012,
+ 0x0012,0x0012,0x0012,0x0013,0x0013,0x0013,0x0013,0x0014,
+ 0x0014,0x0014,0x0014,0x0014,0x0015,0x0015,0x0015,0x0015,
+ 0x0015,0x0016,0x0016,0x0016,0x0016,0x0017,0x0017,0x0017,
+ 0x0017,0x0018,0x0018,0x0018,0x0018,0x0018,0x0019,0x0019,
+ 0x0019,0x0019,0x001A,0x001A,0x001A,0x001A,0x001B,0x001B,
+ 0x001B,0x001B,0x001C,0x001C,0x001C,0x001C,0x001D,0x001D,
+ 0x001D,0x001D,0x001E,0x001E,0x001E,0x001E,0x001F,0x001F,
+ 0x001F,0x001F,0x0020,0x0020,0x0020,0x0021,0x0021,0x0021,
+ 0x0021,0x0022,0x0022,0x0022,0x0022,0x0023,0x0023,0x0023,
+ 0x0023,0x0024,0x0024,0x0024,0x0025,0x0025,0x0025,0x0025,
+ 0x0026,0x0026,0x0026,0x0026,0x0027,0x0027,0x0027,0x0028,
+ 0x0028,0x0028,0x0028,0x0029,0x0029,0x0029,0x0029,0x002A,
+ 0x002A,0x002A,0x002B,0x002B,0x002B,0x002B,0x002C,0x002C,
+ 0x002C,0x002D,0x002D,0x002D,0x002D,0x002E,0x002E,0x002E,
+ 0x002E,0x002F,0x002F,0x002F,0x0030,0x0030,0x0030,0x0030,
+ 0x0031,0x0031,0x0031,0x0032,0x0032,0x0032,0x0032,0x0033,
+ 0x0033,0x0033,0x0033,0x0034,0x0034,0x0034,0x0035,0x0035,
+ 0x0035,0x0035,0x0036,0x0036,0x0036,0x0036,0x0037,0x0037,
+ 0x0037,0x0038,0x0038,0x0038,0x0038,0x0039,0x0039,0x0039,
+ 0x0039,0x003A,0x003A,0x003A,0x003B,0x003B,0x003B,0x003B,
+ 0x003C,0x003C,0x003C,0x003C,0x003D,0x003D,0x003D,0x003D,
+ 0x003E,0x003E,0x003E,0x003E,0x003F,0x003F,0x003F,0x003F,
+ 0x0040,0x0040,0x0040,0x0040,0x0041,0x0041,0x0041,0x0041,
+ 0x0042,0x0042,0x0042,0x0042,0x0043,0x0043,0x0043,0x0043,
+ 0x0044,0x0044,0x0044,0x0044,0x0045,0x0045,0x0045,0x0045,
+ 0x0046,0x0046,0x0046,0x0046,0x0047,0x0047,0x0047,0x0047,
+ 0x0047,0x0048,0x0048,0x0048,0x0048,0x0049,0x0049,0x0049,
+ 0x0049,0x004A,0x004A,0x004A,0x004A,0x004A,0x004B,0x004B,
+ 0x004B,0x004B,0x004B,0x004C,0x004C,0x004C,0x004C,0x004D,
+ 0x004D,0x004D,0x004D,0x004D,0x004E,0x004E,0x004E,0x004E,
+ 0x004E,0x004F,0x004F,0x004F,0x004F,0x004F,0x0050,0x0050,
+ 0x0050,0x0050,0x0050,0x0050,0x0051,0x0051,0x0051,0x0051,
+ 0x0051,0x0052,0x0052,0x0052,0x0052,0x0052,0x0052,0x0053,
+ 0x0053,0x0053,0x0053,0x0053,0x0053,0x0054,0x0054,0x0054,
+ 0x0054,0x0054,0x0054,0x0055,0x0055,0x0055,0x0055,0x0055,
+ 0x0055,0x0055,0x0056,0x0056,0x0056,0x0056,0x0056,0x0056,
+ 0x0056,0x0057,0x0057,0x0057,0x0057,0x0057,0x0057,0x0057,
+ 0x0058,0x0058,0x0058,0x0058,0x0058,0x0058,0x0058,0x0058,
+ 0x0058,0x0059,0x0059,0x0059,0x0059,0x0059,0x0059,0x0059,
+ 0x0059,0x0059,0x005A,0x005A,0x005A,0x005A,0x005A,0x005A,
+ 0x005A,0x005A,0x005A,0x005A,0x005A,0x005A,0x005B,0x005B,
+ 0x005B,0x005B,0x005B,0x005B,0x005B,0x005B,0x005B,0x005B,
+ 0x005B,0x005B,0x005B,0x005B,0x005B,0x005B,0x005B,0x005C,
+ 0x005C,0x005C,0x005C,0x005C,0x005C,0x005C,0x005C,0x005C,
+ 0x005C,0x005C,0x005C,0x005C,0x005C,0x005C,0x005C,0x005C,
+ 0x005C,0x005C,0x005C,0x005C,0x005C,0x005C,0x005C,0x005C,
+ 0x005C,0x005C,0x005C,0x005C,0x005C,0x005C,0x005C,0x005C,
+ 0x005C,0x005C,0x005C,0x005C,0x005C,0x005C,0x005C,0x005B,
+ 0x005B,0x005B,0x005B,0x005B,0x005B,0x005B,0x005B,0x005B,
+ 0x005B,0x005B,0x005B,0x005B,0x005B,0x005B,0x005B,0x005A,
+ 0x005A,0x005A,0x005A,0x005A,0x005A,0x005A,0x005A,0x005A,
+ 0x005A,0x0059,0x0059,0x0059,0x0059,0x0059,0x0059,0x0059,
+ 0x0059,0x0059,0x0058,0x0058,0x0058,0x0058,0x0058,0x0058,
+ 0x0058,0x0057,0x0057,0x0057,0x0057,0x0057,0x0057,0x0057,
+ 0x0056,0x0056,0x0056,0x0056,0x0056,0x0056,0x0055,0x0055,
+ 0x0055,0x0055,0x0055,0x0055,0x0054,0x0054,0x0054,0x0054,
+ 0x0054,0x0053,0x0053,0x0053,0x0053,0x0053,0x0052,0x0052,
+ 0x0052,0x0052,0x0051,0x0051,0x0051,0x0051,0x0051,0x0050,
+ 0x0050,0x0050,0x0050,0x004F,0x004F,0x004F,0x004F,0x004E,
+ 0x004E,0x004E,0x004E,0x004D,0x004D,0x004D,0x004D,0x004C,
+ 0x004C,0x004C,0x004C,0x004B,0x004B,0x004B,0x004B,0x004A,
+ 0x004A,0x004A,0x004A,0x0049,0x0049,0x0049,0x0048,0x0048,
+ 0x0048,0x0048,0x0047,0x0047,0x0047,0x0046,0x0046,0x0046,
+ 0x0046,0x0045,0x0045,0x0045,0x0044,0x0044,0x0044,0x0044,
+ 0x0043,0x0043,0x0043,0x0042,0x0042,0x0042,0x0041,0x0041,
+ 0x0041,0x0041,0x0040,0x0040,0x0040,0x003F,0x003F,0x003F,
+ 0x003E,0x003E,0x003E,0x003D,0x003D,0x003D,0x003D,0x003C,
+ 0x003C,0x003C,0x003B,0x003B,0x003B,0x003A,0x003A,0x003A,
+ 0x0039,0x0039,0x0039,0x0038,0x0038,0x0038,0x0038,0x0037,
+ 0x0037,0x0037,0x0036,0x0036,0x0036,0x0035,0x0035,0x0035,
+ 0x0034,0x0034,0x0034,0x0033,0x0033,0x0033,0x0033,0x0032,
+ 0x0032,0x0032,0x0031,0x0031,0x0031,0x0030,0x0030,0x0030,
+ 0x002F,0x002F,0x002F,0x002F,0x002E,0x002E,0x002E,0x002D,
+ 0x002D,0x002D,0x002C,0x002C,0x002C,0x002C,0x002B,0x002B,
+ 0x002B,0x002A,0x002A,0x002A,0x002A,0x0029,0x0029,0x0029,
+ 0x0028,0x0028,0x0028,0x0028,0x0027,0x0027,0x0027,0x0026,
+ 0x0026,0x0026,0x0026,0x0025,0x0025,0x0025,0x0025,0x0024,
+ 0x0024,0x0024,0x0023,0x0023,0x0023,0x0023,0x0022,0x0022,
+ 0x0022,0x0022,0x0021,0x0021,0x0021,0x0021,0x0020,0x0020,
+ 0x0020,0x0020,0x001F,0x001F,0x001F,0x001F,0x001E,0x001E,
+ 0x001E,0x001E,0x001D,0x001D,0x001D,0x001D,0x001D,0x001C,
+ 0x001C,0x001C,0x001C,0x001B,0x001B,0x001B,0x001B,0x001B,
+ 0x001A,0x001A,0x001A,0x001A,0x0019,0x0019,0x0019,0x0019,
+ 0x0019,0x0018,0x0018,0x0018,0x0018,0x0018,0x0017,0x0017,
+ 0x0017,0x0017,0x0017,0x0016,0x0016,0x0016,0x0016,0x0016,
+ 0x0016,0x0015,0x0015,0x0015,0x0015,0x0015,0x0014,0x0014,
+ 0x0014,0x0014,0x0014,0x0014,0x0013,0x0013,0x0013,0x0013,
+ 0x0013,0x0013,0x0012,0x0012,0x0012,0x0012,0x0012,0x0012,
+ 0x0011,0x0011,0x0011,0x0011,0x0011,0x0011,0x0011,0x0010,
+ 0x0010,0x0010,0x0010,0x0010,0x0010,0x0010,0x000F,0x000F,
+ 0x000F,0x000F,0x000F,0x000F,0x000F,0x000E,0x000E,0x000E,
+ 0x000E,0x000E,0x000E,0x000E,0x000E,0x000D,0x000D,0x000D,
+ 0x000D,0x000D,0x000D,0x000D,0x000D,0x000C,0x000C,0x000C,
+ 0x000C,0x000C,0x000C,0x000C,0x000C,0x000C,0x000B,0x000B,
+ 0x000B,0x000B,0x000B,0x000B,0x000B,0x000B,0x000B,0x000B,
+ 0x000A,0x000A,0x000A,0x000A,0x000A,0x000A,0x000A,0x000A,
+ 0x000A,0x000A,0x000A,0x0009,0x0009,0x0009,0x0009,0x0009,
+ 0x0009,0x0009,0x0009,0x0009,0x0009,0x0009,0x0008,0x0008,
+ 0x0008,0x0008,0x0008,0x0008,0x0008,0x0008,0x0008,0x0008,
+ 0x0008,0x0008,0x0008,0x0007,0x0007,0x0007,0x0007,0x0007,
+ 0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,
+ 0x0007,0x0007,0x0006,0x0006,0x0006,0x0006,0x0006,0x0006,
+ 0x0006,0x0006,0x0006,0x0006,0x0006,0x0006,0x0006,0x0006,
+ 0x0006,0x0006,0x0006,0x0005,0x0005,0x0005,0x0005,0x0005,
+ 0x0005,0x0005,0x0005,0x0005,0x0005,0x0005,0x0005,0x0005,
+ 0x0005,0x0005,0x0005,0x0005,0x0005,0x0005,0x0005,0x0005
+};
+static unsigned short grnsep2[] = {
+ 0x0000,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
+ 0x0001,0x0001,0x0001,0x0001,0x0001,0x0002,0x0002,0x0002,
+ 0x0002,0x0002,0x0002,0x0003,0x0003,0x0003,0x0003,0x0004,
+ 0x0004,0x0004,0x0005,0x0005,0x0006,0x0006,0x0007,0x0007,
+ 0x0008,0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,
+ 0x000F,0x0010,0x0011,0x0013,0x0014,0x0016,0x0017,0x0019,
+ 0x001B,0x001D,0x0020,0x0022,0x0025,0x0027,0x002A,0x002E,
+ 0x0031,0x0035,0x0038,0x003D,0x0041,0x0046,0x004B,0x0050,
+ 0x0056,0x005C,0x0063,0x006A,0x0071,0x0079,0x0081,0x008A,
+ 0x0094,0x009E,0x00A9,0x00B4,0x00C0,0x00CD,0x00DB,0x00E9,
+ 0x00F8,0x0109,0x011A,0x012C,0x013F,0x0153,0x0169,0x0180,
+ 0x0197,0x01B1,0x01CC,0x01E8,0x0206,0x0225,0x0246,0x0269,
+ 0x028E,0x02B4,0x02DD,0x0308,0x0334,0x0364,0x0395,0x03C9,
+ 0x0400,0x043A,0x0476,0x04B5,0x04F7,0x053C,0x0585,0x05D1,
+ 0x0620,0x0674,0x06CB,0x0725,0x0784,0x07E7,0x084F,0x08BB,
+ 0x092B,0x09A1,0x0A1B,0x0A9A,0x0B1F,0x0BA9,0x0C39,0x0CCE,
+ 0x0D69,0x0E0A,0x0EB2,0x0F60,0x1014,0x10CF,0x1191,0x125A,
+ 0x132B,0x1402,0x14E2,0x15C9,0x16B7,0x17AE,0x18AD,0x19B5,
+ 0x1AC5,0x1BDE,0x1CFF,0x1E2A,0x1F5D,0x209A,0x21E0,0x2330,
+ 0x2489,0x25EC,0x2759,0x28D0,0x2A51,0x2BDC,0x2D71,0x2F11,
+ 0x30BB,0x326F,0x342E,0x35F7,0x37CB,0x39A9,0x3B92,0x3D86,
+ 0x3F84,0x418C,0x439F,0x45BC,0x47E3,0x4A15,0x4C50,0x4E96,
+ 0x50E6,0x533F,0x55A2,0x580E,0x5A83,0x5D02,0x5F89,0x6219,
+ 0x64B1,0x6751,0x69F9,0x6CA8,0x6F5F,0x721C,0x74E0,0x77AA,
+ 0x7A79,0x7D4E,0x8028,0x8307,0x85E9,0x88D0,0x8BB9,0x8EA5,
+ 0x9193,0x9484,0x9775,0x9A67,0x9D59,0xA04B,0xA33C,0xA62B,
+ 0xA918,0xAC03,0xAEEA,0xB1CE,0xB4AD,0xB787,0xBA5B,0xBD29,
+ 0xBFF0,0xC2B0,0xC568,0xC817,0xCABC,0xCD58,0xCFE9,0xD26E,
+ 0xD4E8,0xD756,0xD9B7,0xDC0A,0xDE4E,0xE085,0xE2AC,0xE4C3,
+ 0xE6CA,0xE8C0,0xEAA4,0xEC77,0xEE37,0xEFE5,0xF17F,0xF306,
+ 0xF479,0xF5D7,0xF720,0xF854,0xF973,0xFA7C,0xFB6F,0xFC4B,
+ 0xFD11,0xFDC1,0xFE59,0xFEDA,0xFF44,0xFF96,0xFFD1,0xFFF4,
+ 0xFFFF,0xFFF4,0xFFD1,0xFF96,0xFF44,0xFEDA,0xFE59,0xFDC1,
+ 0xFD11,0xFC4B,0xFB6F,0xFA7C,0xF973,0xF854,0xF720,0xF5D7,
+ 0xF479,0xF306,0xF17F,0xEFE5,0xEE37,0xEC77,0xEAA4,0xE8C0,
+ 0xE6CA,0xE4C3,0xE2AC,0xE085,0xDE4E,0xDC0A,0xD9B7,0xD756,
+ 0xD4E8,0xD26E,0xCFE9,0xCD58,0xCABC,0xC817,0xC568,0xC2B0,
+ 0xBFF0,0xBD29,0xBA5B,0xB787,0xB4AD,0xB1CE,0xAEEA,0xAC03,
+ 0xA918,0xA62B,0xA33C,0xA04B,0x9D59,0x9A67,0x9775,0x9484,
+ 0x9193,0x8EA5,0x8BB9,0x88D0,0x85E9,0x8307,0x8028,0x7D4E,
+ 0x7A79,0x77AA,0x74E0,0x721C,0x6F5F,0x6CA8,0x69F9,0x6751,
+ 0x64B1,0x6219,0x5F89,0x5D02,0x5A83,0x580E,0x55A2,0x533F,
+ 0x50E6,0x4E96,0x4C50,0x4A15,0x47E3,0x45BC,0x439F,0x418C,
+ 0x3F84,0x3D86,0x3B92,0x39A9,0x37CB,0x35F7,0x342E,0x326F,
+ 0x30BB,0x2F11,0x2D71,0x2BDC,0x2A51,0x28D0,0x2759,0x25EC,
+ 0x2489,0x2330,0x21E0,0x209A,0x1F5D,0x1E2A,0x1CFF,0x1BDE,
+ 0x1AC5,0x19B5,0x18AD,0x17AE,0x16B7,0x15C9,0x14E2,0x1402,
+ 0x132B,0x125A,0x1191,0x10CF,0x1014,0x0F60,0x0EB2,0x0E0A,
+ 0x0D69,0x0CCE,0x0C39,0x0BA9,0x0B1F,0x0A9A,0x0A1B,0x09A1,
+ 0x092B,0x08BB,0x084F,0x07E7,0x0784,0x0725,0x06CB,0x0674,
+ 0x0620,0x05D1,0x0585,0x053C,0x04F7,0x04B5,0x0476,0x043A,
+ 0x0400,0x03C9,0x0395,0x0364,0x0334,0x0308,0x02DD,0x02B4,
+ 0x028E,0x0269,0x0246,0x0225,0x0206,0x01E8,0x01CC,0x01B1,
+ 0x0197,0x0180,0x0169,0x0153,0x013F,0x012C,0x011A,0x0109,
+ 0x00F8,0x00E9,0x00DB,0x00CD,0x00C0,0x00B4,0x00A9,0x009E,
+ 0x0094,0x008A,0x0081,0x0079,0x0071,0x006A,0x0063,0x005C,
+ 0x0056,0x0050,0x004B,0x0046,0x0041,0x003D,0x0038,0x0035,
+ 0x0031,0x002E,0x002A,0x0027,0x0025,0x0022,0x0020,0x001D,
+ 0x001B,0x0019,0x0017,0x0016,0x0014,0x0013,0x0011,0x0010,
+ 0x000F,0x000E,0x000D,0x000C,0x000B,0x000A,0x0009,0x0008,
+ 0x0008,0x0007,0x0007,0x0006,0x0006,0x0005,0x0005,0x0004,
+ 0x0004,0x0004,0x0003,0x0003,0x0003,0x0003,0x0002,0x0002,
+ 0x0002,0x0002,0x0002,0x0002,0x0001,0x0001,0x0001,0x0001,
+ 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001
+};
+static short esp_dat_c[] = {
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x004A,0x0050,0x0056,0x005B,0x0061,0x0067,0x006C,
+ 0x0072,0x0078,0x007D,0x0083,0x0089,0x008F,0x0095,0x009B,
+ 0x00A0,0x00A6,0x00AC,0x00B2,0x00B8,0x00BE,0x00C4,0x00CA,
+ 0x00D0,0x00D6,0x00DC,0x00E2,0x00E8,0x00EE,0x00F5,0x00FB,
+ 0x0101,0x0107,0x010D,0x0113,0x011A,0x0120,0x0126,0x012D,
+ 0x0133,0x0139,0x013F,0x0146,0x014C,0x0153,0x0159,0x015F,
+ 0x0166,0x016C,0x0173,0x0179,0x0180,0x0186,0x018D,0x0193,
+ 0x019A,0x01A1,0x01A7,0x01AE,0x01B5,0x01BB,0x01C2,0x01C9,
+ 0x01CF,0x01D6,0x01DD,0x01E3,0x01EA,0x01F1,0x01F8,0x01FF,
+ 0x0205,0x020C,0x0213,0x021A,0x0221,0x0228,0x022F,0x0236,
+ 0x023D,0x0243,0x024A,0x0251,0x0258,0x025F,0x0266,0x026D,
+ 0x0274,0x027C,0x0283,0x028A,0x0291,0x0298,0x029F,0x02A6,
+ 0x02AD,0x02B4,0x02BC,0x02C3,0x02CA,0x02D1,0x02D8,0x02E0,
+ 0x02E7,0x02EE,0x02F5,0x02FD,0x0304,0x030B,0x0312,0x031A,
+ 0x0321,0x0328,0x0330,0x0337,0x033E,0x0346,0x034D,0x0355,
+ 0x035C,0x0363,0x036B,0x0372,0x037A,0x0381,0x0389,0x0390,
+ 0x0398,0x039F,0x03A7,0x03AE,0x03B6,0x03BD,0x03C5,0x03CC,
+ 0x03D4,0x03DB,0x03E3,0x03EA,0x03F2,0x03F9,0x0401,0x0409,
+ 0x0410,0x0418,0x041F,0x0427,0x042F,0x0436,0x043E,0x0445,
+ 0x044D,0x0455,0x045C,0x0464,0x046C,0x0473,0x047B,0x0483,
+ 0x048A,0x0492,0x049A,0x04A1,0x04A9,0x04B1,0x04B9,0x04C0,
+ 0x04C8,0x04D0,0x04D7,0x04DF,0x04E7,0x04EF,0x04F6,0x04FE,
+ 0x0506,0x050E,0x0515,0x051D,0x0525,0x052D,0x0534,0x053C,
+ 0x0544,0x054C,0x0553,0x055B,0x0563,0x056B,0x0572,0x057A,
+ 0x0582,0x058A,0x0592,0x0599,0x05A1,0x05A9,0x05B1,0x05B9,
+ 0x05C0,0x05C8,0x05D0,0x05D8,0x05DF,0x05E7,0x05EF,0x05F7,
+ 0x05FF,0x0606,0x060E,0x0616,0x061E,0x0626,0x062D,0x0635,
+ 0x063D,0x0645,0x064D,0x0654,0x065C,0x0664,0x066C,0x0674,
+ 0x067B,0x0683,0x068B,0x0693,0x069B,0x06A2,0x06AA,0x06B2,
+ 0x06BA,0x06C1,0x06C9,0x06D1,0x06D9,0x06E1,0x06E8,0x06F0,
+ 0x06F8,0x0700,0x0707,0x070F,0x0717,0x071F,0x0727,0x072E,
+ 0x0736,0x073E,0x0746,0x074D,0x0755,0x075D,0x0765,0x076C,
+ 0x0774,0x077C,0x0783,0x078B,0x0793,0x079B,0x07A2,0x07AA,
+ 0x07B2,0x07BA,0x07C1,0x07C9,0x07D1,0x07D8,0x07E0,0x07E8,
+ 0x07F0,0x07F7,0x07FF,0x0807,0x080E,0x0816,0x081E,0x0825,
+ 0x082D,0x0835,0x083C,0x0844,0x084C,0x0853,0x085B,0x0863,
+ 0x086A,0x0872,0x087A,0x0881,0x0889,0x0891,0x0898,0x08A0,
+ 0x08A7,0x08AF,0x08B7,0x08BE,0x08C6,0x08CE,0x08D5,0x08DD,
+ 0x08E4,0x08EC,0x08F4,0x08FB,0x0903,0x090A,0x0912,0x091A,
+ 0x0921,0x0929,0x0930,0x0938,0x093F,0x0947,0x094F,0x0956,
+ 0x095E,0x0965,0x096D,0x0974,0x097C,0x0983,0x098B,0x0993,
+ 0x099A,0x09A2,0x09A9,0x09B1,0x09B8,0x09C0,0x09C7,0x09CF,
+ 0x09D6,0x09DE,0x09E5,0x09ED,0x09F4,0x09FC,0x0A03,0x0A0B,
+ 0x0A12,0x0A1A,0x0A21,0x0A29,0x0A30,0x0A38,0x0A3F,0x0A47,
+ 0x0A4E,0x0A56,0x0A5D,0x0A65,0x0A6C,0x0A74,0x0A7B,0x0A83,
+ 0x0A8A,0x0A92,0x0A99,0x0AA1,0x0AA8,0x0AB0,0x0AB7,0x0ABE,
+ 0x0AC6,0x0ACD,0x0AD5,0x0ADC,0x0AE4,0x0AEB,0x0AF3,0x0AFA,
+ 0x0B02,0x0B09,0x0B11,0x0B18,0x0B1F,0x0B27,0x0B2E,0x0B36,
+ 0x0B3D,0x0B45,0x0B4C,0x0B54,0x0B5B,0x0B63,0x0B6A,0x0B71,
+ 0x0B79,0x0B80,0x0B88,0x0B8F,0x0B97,0x0B9E,0x0BA6,0x0BAD,
+ 0x0BB4,0x0BBC,0x0BC3,0x0BCB,0x0BD2,0x0BDA,0x0BE1,0x0BE9,
+ 0x0BF0,0x0BF8,0x0BFF,0x0C07,0x0C0E,0x0C15,0x0C1D,0x0C24,
+ 0x0C2C,0x0C33,0x0C3B,0x0C42,0x0C4A,0x0C51,0x0C59,0x0C60,
+ 0x0C68,0x0C6F,0x0C77,0x0C7E,0x0C86,0x0C8D,0x0C95,0x0C9C,
+ 0x0CA4,0x0CAB,0x0CB3,0x0CBA,0x0CC2,0x0CC9,0x0CD1,0x0CD8,
+ 0x0CE0,0x0CE8,0x0CEF,0x0CF7,0x0CFE,0x0D06,0x0D0D,0x0D15,
+ 0x0D1C,0x0D24,0x0D2C,0x0D33,0x0D3B,0x0D42,0x0D4A,0x0D52,
+ 0x0D59,0x0D61,0x0D68,0x0D70,0x0D78,0x0D7F,0x0D87,0x0D8E,
+ 0x0D96,0x0D9E,0x0DA5,0x0DAD,0x0DB5,0x0DBC,0x0DC4,0x0DCC,
+ 0x0DD3,0x0DDB,0x0DE3,0x0DEB,0x0DF2,0x0DFA,0x0E02,0x0E0A,
+ 0x0E11,0x0E19,0x0E21,0x0E29,0x0E30,0x0E38,0x0E40,0x0E48,
+ 0x0E4F,0x0E57,0x0E5F,0x0E67,0x0E6F,0x0E77,0x0E7E,0x0E86,
+ 0x0E8E,0x0E96,0x0E9E,0x0EA6,0x0EAE,0x0EB6,0x0EBE,0x0EC6,
+ 0x0ECD,0x0ED5,0x0EDD,0x0EE5,0x0EED,0x0EF5,0x0EFD,0x0F05,
+ 0x0F0D,0x0F15,0x0F1D,0x0F25,0x0F2E,0x0F36,0x0F3E,0x0F46,
+ 0x0F4E,0x0F56,0x0F5E,0x0F66,0x0F6E,0x0F77,0x0F7F,0x0F87,
+ 0x0F8F,0x0F97,0x0FA0,0x0FA8,0x0FB0,0x0FB8,0x0FC1,0x0FC9,
+ 0x0FD1,0x0FD9,0x0FE2,0x0FEA,0x0FF2,0x0FFB,0x1003,0x100C,
+ 0x1014,0x101C,0x1025,0x102D,0x1036,0x103E,0x1047,0x104F,
+ 0x1058,0x1060,0x1069,0x1071,0x107A,0x1083,0x108B,0x1094,
+ 0x109C,0x10A5,0x10AE,0x10B6,0x10BF,0x10C8,0x10D1,0x10D9,
+ 0x10E2,0x10EB,0x10F4,0x10FD,0x1105,0x110E,0x1117,0x1120,
+ 0x1129,0x1132,0x113B,0x1144,0x114D,0x1156,0x115F,0x1168,
+ 0x1171,0x117A,0x1183,0x118C,0x1195,0x119F,0x11A8,0x11B1,
+ 0x11BA,0x11C3,0x11CD,0x11D6,0x11DF,0x11E9,0x11F2,0x11FB,
+ 0x1205,0x120E,0x1218,0x1221,0x122B,0x1234,0x123E,0x1247,
+ 0x1251,0x125A,0x1264,0x126E,0x1277,0x1281,0x128B,0x1294,
+ 0x129E,0x12A8,0x12B2,0x12BC,0x12C5,0x12CF,0x12D9,0x12E3,
+ 0x12ED,0x12F7,0x1301,0x130B,0x1315,0x131F,0x132A,0x1334,
+ 0x133E,0x1348,0x1352,0x135D,0x1367,0x1371,0x137C,0x1386,
+ 0x1390,0x139B,0x13A5,0x13B0,0x13BA,0x13C5,0x13D0,0x13DA,
+ 0x13E5,0x13F0,0x13FA,0x1405,0x1410,0x141B,0x1426,0x1430,
+ 0x143B,0x1446,0x1451,0x145C,0x1467,0x1472,0x147E,0x1489,
+ 0x1494,0x149F,0x14AA,0x14B6,0x14C1,0x14CC,0x14D8,0x14E3,
+ 0x14EF,0x14FA,0x1506,0x1511,0x151D,0x1529,0x1534,0x1540,
+ 0x154C,0x1558,0x1564,0x1570,0x157C,0x1588,0x1594,0x15A0,
+ 0x15AC,0x15B8,0x15C4,0x15D0,0x15DD,0x15E9,0x15F5,0x1602,
+ 0x160E,0x161B,0x1627,0x1634,0x1641,0x164D,0x165A,0x1667,
+ 0x1674,0x1681,0x168D,0x169A,0x16A7,0x16B5,0x16C2,0x16CF,
+ 0x16DC,0x16E9,0x16F7,0x1704,0x1711,0x171F,0x172C,0x173A,
+ 0x1748,0x1755,0x1763,0x1771,0x177F,0x178D,0x179B,0x17A9,
+ 0x17B7,0x17C5,0x17D3,0x17E1,0x17F0,0x17FE,0x180C,0x181B,
+ 0x1829,0x1838,0x1847,0x1855,0x1864,0x1873,0x1882,0x1891,
+ 0x18A0,0x18AF,0x18BE,0x18CD,0x18DD,0x18EC,0x18FC,0x190B,
+ 0x191B,0x192A,0x193A,0x194A,0x195A,0x196A,0x197A,0x198A,
+ 0x199A,0x19AA,0x19BA,0x19CB,0x19DB,0x19EC,0x19FC,0x1A0D,
+ 0x1A1E,0x1A2F,0x1A40,0x1A51,0x1A62,0x1A73,0x1A84,0x1A95,
+ 0x1AA7,0x1AB8,0x1ACA,0x1ADB,0x1AED,0x1AFF,0x1B11,0x1B23,
+ 0x1B35,0x1B47,0x1B5A,0x1B6C,0x1B7E,0x1B91,0x1BA4,0x1BB6,
+ 0x1BC9,0x1BDC,0x1BEF,0x1C02,0x1C16,0x1C29,0x1C3C,0x1C50,
+ 0x1C64,0x1C77,0x1C8B,0x1C9F,0x1CB3,0x1CC7,0x1CDC,0x1CF0,
+ 0x1D05,0x1D19,0x1D2E,0x1D43,0x1D58,0x1D6D,0x1D82,0x1D97,
+ 0x1DAD,0x1DC2,0x1DD8,0x1DEE,0x1E04,0x1E1A,0x1E30,0x1E46,
+ 0x1E5D,0x1E73,0x1E8A,0x1EA1,0x1EB8,0x1ECF,0x1EE6,0x1EFE,
+ 0x1F15,0x1F2D,0x1F45,0x1F5D,0x1F75,0x1F8D,0x1FA5,0x1FBE,
+ 0x1FD7,0x1FF0,0x2009,0x2022,0x203B,0x2055,0x206E,0x2088,
+ 0x20A2,0x20BC,0x20D7,0x20F1,0x210C,0x2127,0x2142,0x215D,
+ 0x2178,0x2194,0x21AF,0x21CB,0x21E7,0x2204,0x2220,0x223D,
+ 0x225A,0x2277,0x2294,0x22B2,0x22CF,0x22ED,0x230B,0x232A,
+ 0x2348,0x2367,0x2386,0x23A5,0x23C5,0x23E4,0x2404,0x2424,
+ 0x2445,0x2465,0x2486,0x24A7,0x24C9,0x24EA,0x250C,0x252E,
+ 0x2550,0x2573,0x2596,0x25B9,0x25DD,0x2600,0x2624,0x2648,
+ 0x266D,0x2692,0x26B7,0x26DC,0x2702,0x2728,0x274F,0x2775,
+ 0x279C,0x27C4,0x27EB,0x2813,0x283C,0x2864,0x288D,0x28B7,
+ 0x28E0,0x290A,0x2935,0x2960,0x298B,0x29B6,0x29E2,0x2A0F,
+ 0x2A3B,0x2A69,0x2A96,0x2AC4,0x2AF2,0x2B21,0x2B50,0x2B80,
+ 0x2BB0,0x2BE1,0x2C12,0x2C43,0x2C75,0x2CA8,0x2CDB,0x2D0E,
+ 0x2D42,0x2D76,0x2DAB,0x2DE1,0x2E17,0x2E4D,0x2E85,0x2EBC,
+ 0x2EF4,0x2F2D,0x2F67,0x2FA1,0x2FDB,0x3016,0x3052,0x308F,
+ 0x30CC,0x310A,0x3148,0x3187,0x31C7,0x3208,0x3249,0x328B,
+ 0x32CE,0x3311,0x3355,0x339A,0x33E0,0x3427,0x346E,0x34B6,
+ 0x3500,0x354A,0x3595,0x35E0,0x362D,0x367B,0x36CA,0x3719,
+ 0x376A,0x37BB,0x380E,0x3862,0x38B7,0x390D,0x3964,0x39BC,
+ 0x3A15,0x3A70,0x3ACB,0x3B28,0x3B87,0x3BE6,0x3C47,0x3CA9,
+ 0x3D0D,0x3D72,0x3DD8,0x3E40,0x3EAA,0x3F15,0x3F81,0x3FF0
+};
+static short esp_dat_m[] = {
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x004A,0x004E,0x0052,0x0057,0x005B,0x005F,0x0064,
+ 0x0068,0x006C,0x0071,0x0075,0x007A,0x007E,0x0083,0x0087,
+ 0x008C,0x0090,0x0095,0x0099,0x009E,0x00A2,0x00A7,0x00AB,
+ 0x00B0,0x00B5,0x00B9,0x00BE,0x00C2,0x00C7,0x00CC,0x00D1,
+ 0x00D5,0x00DA,0x00DF,0x00E3,0x00E8,0x00ED,0x00F2,0x00F6,
+ 0x00FB,0x0100,0x0105,0x010A,0x010F,0x0114,0x0118,0x011D,
+ 0x0122,0x0127,0x012C,0x0131,0x0136,0x013B,0x0140,0x0145,
+ 0x014A,0x014F,0x0154,0x0159,0x015E,0x0163,0x0168,0x016E,
+ 0x0173,0x0178,0x017D,0x0182,0x0187,0x018C,0x0192,0x0197,
+ 0x019C,0x01A1,0x01A6,0x01AC,0x01B1,0x01B6,0x01BC,0x01C1,
+ 0x01C6,0x01CB,0x01D1,0x01D6,0x01DC,0x01E1,0x01E6,0x01EC,
+ 0x01F1,0x01F6,0x01FC,0x0201,0x0207,0x020C,0x0212,0x0217,
+ 0x021D,0x0222,0x0228,0x022D,0x0233,0x0238,0x023E,0x0243,
+ 0x0249,0x024F,0x0254,0x025A,0x025F,0x0265,0x026B,0x0270,
+ 0x0276,0x027C,0x0281,0x0287,0x028D,0x0292,0x0298,0x029E,
+ 0x02A4,0x02A9,0x02AF,0x02B5,0x02BB,0x02C0,0x02C6,0x02CC,
+ 0x02D2,0x02D8,0x02DE,0x02E3,0x02E9,0x02EF,0x02F5,0x02FB,
+ 0x0301,0x0307,0x030D,0x0312,0x0318,0x031E,0x0324,0x032A,
+ 0x0330,0x0336,0x033C,0x0342,0x0348,0x034E,0x0354,0x035A,
+ 0x0360,0x0366,0x036C,0x0372,0x0378,0x037E,0x0384,0x038A,
+ 0x0391,0x0397,0x039D,0x03A3,0x03A9,0x03AF,0x03B5,0x03BB,
+ 0x03C1,0x03C8,0x03CE,0x03D4,0x03DA,0x03E0,0x03E6,0x03ED,
+ 0x03F3,0x03F9,0x03FF,0x0405,0x040C,0x0412,0x0418,0x041E,
+ 0x0425,0x042B,0x0431,0x0437,0x043E,0x0444,0x044A,0x0450,
+ 0x0457,0x045D,0x0463,0x046A,0x0470,0x0476,0x047D,0x0483,
+ 0x0489,0x0490,0x0496,0x049C,0x04A3,0x04A9,0x04AF,0x04B6,
+ 0x04BC,0x04C2,0x04C9,0x04CF,0x04D6,0x04DC,0x04E2,0x04E9,
+ 0x04EF,0x04F6,0x04FC,0x0502,0x0509,0x050F,0x0516,0x051C,
+ 0x0523,0x0529,0x052F,0x0536,0x053C,0x0543,0x0549,0x0550,
+ 0x0556,0x055D,0x0563,0x056A,0x0570,0x0577,0x057D,0x0584,
+ 0x058A,0x0591,0x0597,0x059E,0x05A4,0x05AB,0x05B1,0x05B8,
+ 0x05BE,0x05C5,0x05CB,0x05D2,0x05D8,0x05DF,0x05E6,0x05EC,
+ 0x05F3,0x05F9,0x0600,0x0606,0x060D,0x0613,0x061A,0x0621,
+ 0x0627,0x062E,0x0634,0x063B,0x0641,0x0648,0x064F,0x0655,
+ 0x065C,0x0662,0x0669,0x0670,0x0676,0x067D,0x0683,0x068A,
+ 0x0691,0x0697,0x069E,0x06A4,0x06AB,0x06B2,0x06B8,0x06BF,
+ 0x06C6,0x06CC,0x06D3,0x06DA,0x06E0,0x06E7,0x06ED,0x06F4,
+ 0x06FB,0x0701,0x0708,0x070F,0x0715,0x071C,0x0723,0x0729,
+ 0x0730,0x0737,0x073D,0x0744,0x074B,0x0751,0x0758,0x075F,
+ 0x0765,0x076C,0x0773,0x0779,0x0780,0x0787,0x078D,0x0794,
+ 0x079B,0x07A2,0x07A8,0x07AF,0x07B6,0x07BC,0x07C3,0x07CA,
+ 0x07D0,0x07D7,0x07DE,0x07E5,0x07EB,0x07F2,0x07F9,0x07FF,
+ 0x0806,0x080D,0x0814,0x081A,0x0821,0x0828,0x082F,0x0835,
+ 0x083C,0x0843,0x0849,0x0850,0x0857,0x085E,0x0864,0x086B,
+ 0x0872,0x0879,0x0880,0x0886,0x088D,0x0894,0x089B,0x08A1,
+ 0x08A8,0x08AF,0x08B6,0x08BC,0x08C3,0x08CA,0x08D1,0x08D8,
+ 0x08DE,0x08E5,0x08EC,0x08F3,0x08FA,0x0900,0x0907,0x090E,
+ 0x0915,0x091C,0x0922,0x0929,0x0930,0x0937,0x093E,0x0945,
+ 0x094B,0x0952,0x0959,0x0960,0x0967,0x096E,0x0975,0x097B,
+ 0x0982,0x0989,0x0990,0x0997,0x099E,0x09A5,0x09AB,0x09B2,
+ 0x09B9,0x09C0,0x09C7,0x09CE,0x09D5,0x09DC,0x09E3,0x09EA,
+ 0x09F0,0x09F7,0x09FE,0x0A05,0x0A0C,0x0A13,0x0A1A,0x0A21,
+ 0x0A28,0x0A2F,0x0A36,0x0A3D,0x0A44,0x0A4B,0x0A52,0x0A59,
+ 0x0A60,0x0A67,0x0A6E,0x0A75,0x0A7C,0x0A83,0x0A8A,0x0A91,
+ 0x0A98,0x0A9F,0x0AA6,0x0AAD,0x0AB4,0x0ABB,0x0AC2,0x0AC9,
+ 0x0AD0,0x0AD7,0x0ADE,0x0AE5,0x0AEC,0x0AF4,0x0AFB,0x0B02,
+ 0x0B09,0x0B10,0x0B17,0x0B1E,0x0B25,0x0B2D,0x0B34,0x0B3B,
+ 0x0B42,0x0B49,0x0B50,0x0B58,0x0B5F,0x0B66,0x0B6D,0x0B74,
+ 0x0B7C,0x0B83,0x0B8A,0x0B91,0x0B98,0x0BA0,0x0BA7,0x0BAE,
+ 0x0BB6,0x0BBD,0x0BC4,0x0BCB,0x0BD3,0x0BDA,0x0BE1,0x0BE9,
+ 0x0BF0,0x0BF7,0x0BFF,0x0C06,0x0C0D,0x0C15,0x0C1C,0x0C24,
+ 0x0C2B,0x0C32,0x0C3A,0x0C41,0x0C49,0x0C50,0x0C58,0x0C5F,
+ 0x0C67,0x0C6E,0x0C76,0x0C7D,0x0C85,0x0C8C,0x0C94,0x0C9B,
+ 0x0CA3,0x0CAA,0x0CB2,0x0CBA,0x0CC1,0x0CC9,0x0CD0,0x0CD8,
+ 0x0CE0,0x0CE7,0x0CEF,0x0CF7,0x0CFE,0x0D06,0x0D0E,0x0D16,
+ 0x0D1D,0x0D25,0x0D2D,0x0D35,0x0D3C,0x0D44,0x0D4C,0x0D54,
+ 0x0D5C,0x0D63,0x0D6B,0x0D73,0x0D7B,0x0D83,0x0D8B,0x0D93,
+ 0x0D9B,0x0DA3,0x0DAB,0x0DB3,0x0DBB,0x0DC3,0x0DCB,0x0DD3,
+ 0x0DDB,0x0DE3,0x0DEB,0x0DF3,0x0DFB,0x0E03,0x0E0B,0x0E14,
+ 0x0E1C,0x0E24,0x0E2C,0x0E34,0x0E3D,0x0E45,0x0E4D,0x0E55,
+ 0x0E5E,0x0E66,0x0E6E,0x0E77,0x0E7F,0x0E87,0x0E90,0x0E98,
+ 0x0EA1,0x0EA9,0x0EB2,0x0EBA,0x0EC2,0x0ECB,0x0ED4,0x0EDC,
+ 0x0EE5,0x0EED,0x0EF6,0x0EFF,0x0F07,0x0F10,0x0F19,0x0F21,
+ 0x0F2A,0x0F33,0x0F3B,0x0F44,0x0F4D,0x0F56,0x0F5F,0x0F68,
+ 0x0F71,0x0F79,0x0F82,0x0F8B,0x0F94,0x0F9D,0x0FA6,0x0FAF,
+ 0x0FB8,0x0FC2,0x0FCB,0x0FD4,0x0FDD,0x0FE6,0x0FEF,0x0FF9,
+ 0x1002,0x100B,0x1014,0x101E,0x1027,0x1030,0x103A,0x1043,
+ 0x104D,0x1056,0x1060,0x1069,0x1073,0x107C,0x1086,0x108F,
+ 0x1099,0x10A3,0x10AC,0x10B6,0x10C0,0x10CA,0x10D3,0x10DD,
+ 0x10E7,0x10F1,0x10FB,0x1105,0x110F,0x1119,0x1123,0x112D,
+ 0x1137,0x1141,0x114B,0x1156,0x1160,0x116A,0x1174,0x117F,
+ 0x1189,0x1193,0x119E,0x11A8,0x11B3,0x11BD,0x11C8,0x11D2,
+ 0x11DD,0x11E8,0x11F2,0x11FD,0x1208,0x1213,0x121D,0x1228,
+ 0x1233,0x123E,0x1249,0x1254,0x125F,0x126A,0x1275,0x1280,
+ 0x128B,0x1297,0x12A2,0x12AD,0x12B9,0x12C4,0x12CF,0x12DB,
+ 0x12E6,0x12F2,0x12FD,0x1309,0x1315,0x1320,0x132C,0x1338,
+ 0x1344,0x1350,0x135B,0x1367,0x1373,0x137F,0x138C,0x1398,
+ 0x13A4,0x13B0,0x13BC,0x13C9,0x13D5,0x13E1,0x13EE,0x13FA,
+ 0x1407,0x1414,0x1420,0x142D,0x143A,0x1446,0x1453,0x1460,
+ 0x146D,0x147A,0x1487,0x1494,0x14A2,0x14AF,0x14BC,0x14C9,
+ 0x14D7,0x14E4,0x14F2,0x14FF,0x150D,0x151A,0x1528,0x1536,
+ 0x1544,0x1552,0x1560,0x156E,0x157C,0x158A,0x1598,0x15A6,
+ 0x15B5,0x15C3,0x15D1,0x15E0,0x15EF,0x15FD,0x160C,0x161B,
+ 0x1629,0x1638,0x1647,0x1656,0x1665,0x1675,0x1684,0x1693,
+ 0x16A3,0x16B2,0x16C2,0x16D1,0x16E1,0x16F1,0x1700,0x1710,
+ 0x1720,0x1730,0x1741,0x1751,0x1761,0x1771,0x1782,0x1792,
+ 0x17A3,0x17B4,0x17C5,0x17D5,0x17E6,0x17F7,0x1808,0x181A,
+ 0x182B,0x183C,0x184E,0x185F,0x1871,0x1883,0x1895,0x18A7,
+ 0x18B9,0x18CB,0x18DD,0x18EF,0x1902,0x1914,0x1927,0x1939,
+ 0x194C,0x195F,0x1972,0x1985,0x1998,0x19AC,0x19BF,0x19D3,
+ 0x19E6,0x19FA,0x1A0E,0x1A22,0x1A36,0x1A4A,0x1A5F,0x1A73,
+ 0x1A88,0x1A9C,0x1AB1,0x1AC6,0x1ADB,0x1AF0,0x1B06,0x1B1B,
+ 0x1B31,0x1B46,0x1B5C,0x1B72,0x1B88,0x1B9E,0x1BB5,0x1BCB,
+ 0x1BE2,0x1BF8,0x1C0F,0x1C26,0x1C3E,0x1C55,0x1C6C,0x1C84,
+ 0x1C9C,0x1CB4,0x1CCC,0x1CE4,0x1CFC,0x1D15,0x1D2E,0x1D47,
+ 0x1D60,0x1D79,0x1D92,0x1DAC,0x1DC5,0x1DDF,0x1DF9,0x1E14,
+ 0x1E2E,0x1E49,0x1E63,0x1E7E,0x1E99,0x1EB5,0x1ED0,0x1EEC,
+ 0x1F08,0x1F24,0x1F40,0x1F5D,0x1F79,0x1F96,0x1FB4,0x1FD1,
+ 0x1FEE,0x200C,0x202A,0x2048,0x2067,0x2085,0x20A4,0x20C3,
+ 0x20E3,0x2102,0x2122,0x2142,0x2163,0x2183,0x21A4,0x21C5,
+ 0x21E6,0x2208,0x222A,0x224C,0x226E,0x2291,0x22B4,0x22D7,
+ 0x22FB,0x231F,0x2343,0x2367,0x238C,0x23B1,0x23D6,0x23FC,
+ 0x2422,0x2448,0x246F,0x2496,0x24BD,0x24E5,0x250D,0x2535,
+ 0x255E,0x2587,0x25B0,0x25DA,0x2604,0x262F,0x265A,0x2685,
+ 0x26B1,0x26DD,0x2709,0x2736,0x2764,0x2791,0x27C0,0x27EE,
+ 0x281E,0x284D,0x287D,0x28AE,0x28DF,0x2910,0x2942,0x2974,
+ 0x29A7,0x29DB,0x2A0F,0x2A43,0x2A79,0x2AAE,0x2AE4,0x2B1B,
+ 0x2B52,0x2B8A,0x2BC3,0x2BFC,0x2C36,0x2C70,0x2CAB,0x2CE7,
+ 0x2D23,0x2D60,0x2D9D,0x2DDC,0x2E1B,0x2E5A,0x2E9B,0x2EDC,
+ 0x2F1E,0x2F61,0x2FA4,0x2FE9,0x302E,0x3074,0x30BB,0x3102,
+ 0x314B,0x3194,0x31DF,0x322A,0x3276,0x32C3,0x3311,0x3361,
+ 0x33B1,0x3402,0x3454,0x34A8,0x34FC,0x3552,0x35A9,0x3601,
+ 0x365A,0x36B4,0x3710,0x376D,0x37CB,0x382B,0x388C,0x38EE,
+ 0x3952,0x39B7,0x3A1E,0x3A86,0x3AF0,0x3B5B,0x3BC9,0x3C37,
+ 0x3CA8,0x3D1A,0x3D8E,0x3E04,0x3E7C,0x3EF6,0x3F72,0x3FF0
+};
+static short esp_dat_y[] = {
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x004B,0x004F,0x0054,0x0058,0x005D,0x0061,0x0066,
+ 0x006A,0x006F,0x0073,0x0078,0x007D,0x0081,0x0086,0x008B,
+ 0x008F,0x0094,0x0099,0x009D,0x00A2,0x00A7,0x00AC,0x00B1,
+ 0x00B5,0x00BA,0x00BF,0x00C4,0x00C9,0x00CE,0x00D3,0x00D8,
+ 0x00DD,0x00E2,0x00E7,0x00EC,0x00F1,0x00F6,0x00FB,0x0100,
+ 0x0105,0x010A,0x010F,0x0115,0x011A,0x011F,0x0124,0x012A,
+ 0x012F,0x0134,0x0139,0x013F,0x0144,0x0149,0x014F,0x0154,
+ 0x015A,0x015F,0x0164,0x016A,0x016F,0x0175,0x017A,0x0180,
+ 0x0185,0x018B,0x0191,0x0196,0x019C,0x01A1,0x01A7,0x01AD,
+ 0x01B3,0x01B8,0x01BE,0x01C4,0x01C9,0x01CF,0x01D5,0x01DB,
+ 0x01E1,0x01E7,0x01EC,0x01F2,0x01F8,0x01FE,0x0204,0x020A,
+ 0x0210,0x0216,0x021C,0x0222,0x0228,0x022E,0x0234,0x023A,
+ 0x0240,0x0246,0x024C,0x0253,0x0259,0x025F,0x0265,0x026B,
+ 0x0272,0x0278,0x027E,0x0284,0x028B,0x0291,0x0297,0x029E,
+ 0x02A4,0x02AA,0x02B1,0x02B7,0x02BE,0x02C4,0x02CB,0x02D1,
+ 0x02D8,0x02DE,0x02E5,0x02EB,0x02F2,0x02F8,0x02FF,0x0305,
+ 0x030C,0x0313,0x0319,0x0320,0x0327,0x032D,0x0334,0x033B,
+ 0x0341,0x0348,0x034F,0x0356,0x035D,0x0363,0x036A,0x0371,
+ 0x0378,0x037F,0x0386,0x038C,0x0393,0x039A,0x03A1,0x03A8,
+ 0x03AF,0x03B6,0x03BD,0x03C4,0x03CB,0x03D2,0x03D9,0x03E0,
+ 0x03E7,0x03EE,0x03F5,0x03FD,0x0404,0x040B,0x0412,0x0419,
+ 0x0420,0x0427,0x042F,0x0436,0x043D,0x0444,0x044C,0x0453,
+ 0x045A,0x0461,0x0469,0x0470,0x0477,0x047F,0x0486,0x048D,
+ 0x0495,0x049C,0x04A3,0x04AB,0x04B2,0x04BA,0x04C1,0x04C9,
+ 0x04D0,0x04D7,0x04DF,0x04E6,0x04EE,0x04F5,0x04FD,0x0504,
+ 0x050C,0x0514,0x051B,0x0523,0x052A,0x0532,0x0539,0x0541,
+ 0x0549,0x0550,0x0558,0x0560,0x0567,0x056F,0x0577,0x057E,
+ 0x0586,0x058E,0x0595,0x059D,0x05A5,0x05AD,0x05B4,0x05BC,
+ 0x05C4,0x05CC,0x05D3,0x05DB,0x05E3,0x05EB,0x05F3,0x05FB,
+ 0x0602,0x060A,0x0612,0x061A,0x0622,0x062A,0x0632,0x0639,
+ 0x0641,0x0649,0x0651,0x0659,0x0661,0x0669,0x0671,0x0679,
+ 0x0681,0x0689,0x0691,0x0699,0x06A1,0x06A9,0x06B1,0x06B9,
+ 0x06C1,0x06C9,0x06D1,0x06D9,0x06E1,0x06E9,0x06F1,0x06F9,
+ 0x0701,0x0709,0x0711,0x0719,0x0722,0x072A,0x0732,0x073A,
+ 0x0742,0x074A,0x0752,0x075A,0x0762,0x076B,0x0773,0x077B,
+ 0x0783,0x078B,0x0793,0x079C,0x07A4,0x07AC,0x07B4,0x07BC,
+ 0x07C5,0x07CD,0x07D5,0x07DD,0x07E5,0x07EE,0x07F6,0x07FE,
+ 0x0806,0x080F,0x0817,0x081F,0x0827,0x0830,0x0838,0x0840,
+ 0x0848,0x0851,0x0859,0x0861,0x086A,0x0872,0x087A,0x0883,
+ 0x088B,0x0893,0x089B,0x08A4,0x08AC,0x08B4,0x08BD,0x08C5,
+ 0x08CD,0x08D6,0x08DE,0x08E6,0x08EF,0x08F7,0x0900,0x0908,
+ 0x0910,0x0919,0x0921,0x0929,0x0932,0x093A,0x0943,0x094B,
+ 0x0953,0x095C,0x0964,0x096D,0x0975,0x097D,0x0986,0x098E,
+ 0x0997,0x099F,0x09A8,0x09B0,0x09B8,0x09C1,0x09C9,0x09D2,
+ 0x09DA,0x09E3,0x09EB,0x09F4,0x09FC,0x0A04,0x0A0D,0x0A15,
+ 0x0A1E,0x0A26,0x0A2F,0x0A37,0x0A40,0x0A48,0x0A51,0x0A59,
+ 0x0A62,0x0A6A,0x0A73,0x0A7B,0x0A84,0x0A8C,0x0A95,0x0A9D,
+ 0x0AA6,0x0AAE,0x0AB7,0x0ABF,0x0AC8,0x0AD0,0x0AD9,0x0AE2,
+ 0x0AEA,0x0AF3,0x0AFB,0x0B04,0x0B0C,0x0B15,0x0B1D,0x0B26,
+ 0x0B2F,0x0B37,0x0B40,0x0B48,0x0B51,0x0B5A,0x0B62,0x0B6B,
+ 0x0B73,0x0B7C,0x0B84,0x0B8D,0x0B96,0x0B9E,0x0BA7,0x0BB0,
+ 0x0BB8,0x0BC1,0x0BC9,0x0BD2,0x0BDB,0x0BE3,0x0BEC,0x0BF5,
+ 0x0BFD,0x0C06,0x0C0F,0x0C17,0x0C20,0x0C29,0x0C31,0x0C3A,
+ 0x0C43,0x0C4B,0x0C54,0x0C5D,0x0C65,0x0C6E,0x0C77,0x0C80,
+ 0x0C88,0x0C91,0x0C9A,0x0CA2,0x0CAB,0x0CB4,0x0CBD,0x0CC5,
+ 0x0CCE,0x0CD7,0x0CE0,0x0CE9,0x0CF1,0x0CFA,0x0D03,0x0D0C,
+ 0x0D14,0x0D1D,0x0D26,0x0D2F,0x0D38,0x0D40,0x0D49,0x0D52,
+ 0x0D5B,0x0D64,0x0D6D,0x0D75,0x0D7E,0x0D87,0x0D90,0x0D99,
+ 0x0DA2,0x0DAB,0x0DB4,0x0DBC,0x0DC5,0x0DCE,0x0DD7,0x0DE0,
+ 0x0DE9,0x0DF2,0x0DFB,0x0E04,0x0E0D,0x0E16,0x0E1F,0x0E28,
+ 0x0E31,0x0E3A,0x0E43,0x0E4C,0x0E55,0x0E5E,0x0E67,0x0E70,
+ 0x0E79,0x0E82,0x0E8B,0x0E94,0x0E9D,0x0EA6,0x0EAF,0x0EB8,
+ 0x0EC1,0x0ECA,0x0ED4,0x0EDD,0x0EE6,0x0EEF,0x0EF8,0x0F01,
+ 0x0F0A,0x0F14,0x0F1D,0x0F26,0x0F2F,0x0F38,0x0F42,0x0F4B,
+ 0x0F54,0x0F5D,0x0F67,0x0F70,0x0F79,0x0F82,0x0F8C,0x0F95,
+ 0x0F9E,0x0FA8,0x0FB1,0x0FBA,0x0FC4,0x0FCD,0x0FD6,0x0FE0,
+ 0x0FE9,0x0FF3,0x0FFC,0x1006,0x100F,0x1018,0x1022,0x102B,
+ 0x1035,0x103E,0x1048,0x1051,0x105B,0x1065,0x106E,0x1078,
+ 0x1081,0x108B,0x1094,0x109E,0x10A8,0x10B1,0x10BB,0x10C5,
+ 0x10CE,0x10D8,0x10E2,0x10EC,0x10F5,0x10FF,0x1109,0x1113,
+ 0x111C,0x1126,0x1130,0x113A,0x1144,0x114E,0x1158,0x1161,
+ 0x116B,0x1175,0x117F,0x1189,0x1193,0x119D,0x11A7,0x11B1,
+ 0x11BB,0x11C5,0x11CF,0x11DA,0x11E4,0x11EE,0x11F8,0x1202,
+ 0x120C,0x1217,0x1221,0x122B,0x1235,0x1240,0x124A,0x1254,
+ 0x125E,0x1269,0x1273,0x127E,0x1288,0x1292,0x129D,0x12A7,
+ 0x12B2,0x12BC,0x12C7,0x12D1,0x12DC,0x12E7,0x12F1,0x12FC,
+ 0x1306,0x1311,0x131C,0x1327,0x1331,0x133C,0x1347,0x1352,
+ 0x135C,0x1367,0x1372,0x137D,0x1388,0x1393,0x139E,0x13A9,
+ 0x13B4,0x13BF,0x13CA,0x13D5,0x13E0,0x13EB,0x13F6,0x1402,
+ 0x140D,0x1418,0x1423,0x142F,0x143A,0x1445,0x1451,0x145C,
+ 0x1468,0x1473,0x147E,0x148A,0x1496,0x14A1,0x14AD,0x14B8,
+ 0x14C4,0x14D0,0x14DB,0x14E7,0x14F3,0x14FF,0x150A,0x1516,
+ 0x1522,0x152E,0x153A,0x1546,0x1552,0x155E,0x156A,0x1576,
+ 0x1582,0x158F,0x159B,0x15A7,0x15B3,0x15C0,0x15CC,0x15D8,
+ 0x15E5,0x15F1,0x15FE,0x160A,0x1617,0x1623,0x1630,0x163D,
+ 0x1649,0x1656,0x1663,0x1670,0x167D,0x168A,0x1696,0x16A3,
+ 0x16B0,0x16BE,0x16CB,0x16D8,0x16E5,0x16F2,0x16FF,0x170D,
+ 0x171A,0x1727,0x1735,0x1742,0x1750,0x175D,0x176B,0x1779,
+ 0x1786,0x1794,0x17A2,0x17B0,0x17BD,0x17CB,0x17D9,0x17E7,
+ 0x17F5,0x1803,0x1812,0x1820,0x182E,0x183C,0x184B,0x1859,
+ 0x1867,0x1876,0x1884,0x1893,0x18A2,0x18B0,0x18BF,0x18CE,
+ 0x18DD,0x18EC,0x18FB,0x190A,0x1919,0x1928,0x1937,0x1946,
+ 0x1956,0x1965,0x1974,0x1984,0x1993,0x19A3,0x19B3,0x19C2,
+ 0x19D2,0x19E2,0x19F2,0x1A02,0x1A12,0x1A22,0x1A32,0x1A42,
+ 0x1A53,0x1A63,0x1A73,0x1A84,0x1A94,0x1AA5,0x1AB6,0x1AC6,
+ 0x1AD7,0x1AE8,0x1AF9,0x1B0A,0x1B1B,0x1B2C,0x1B3E,0x1B4F,
+ 0x1B60,0x1B72,0x1B83,0x1B95,0x1BA7,0x1BB8,0x1BCA,0x1BDC,
+ 0x1BEE,0x1C00,0x1C13,0x1C25,0x1C37,0x1C4A,0x1C5C,0x1C6F,
+ 0x1C81,0x1C94,0x1CA7,0x1CBA,0x1CCD,0x1CE0,0x1CF3,0x1D06,
+ 0x1D1A,0x1D2D,0x1D41,0x1D55,0x1D68,0x1D7C,0x1D90,0x1DA4,
+ 0x1DB8,0x1DCD,0x1DE1,0x1DF5,0x1E0A,0x1E1E,0x1E33,0x1E48,
+ 0x1E5D,0x1E72,0x1E87,0x1E9D,0x1EB2,0x1EC7,0x1EDD,0x1EF3,
+ 0x1F09,0x1F1F,0x1F35,0x1F4B,0x1F61,0x1F78,0x1F8E,0x1FA5,
+ 0x1FBC,0x1FD2,0x1FE9,0x2001,0x2018,0x202F,0x2047,0x205F,
+ 0x2076,0x208E,0x20A6,0x20BF,0x20D7,0x20EF,0x2108,0x2121,
+ 0x213A,0x2153,0x216C,0x2185,0x219F,0x21B9,0x21D2,0x21EC,
+ 0x2206,0x2221,0x223B,0x2256,0x2271,0x228B,0x22A7,0x22C2,
+ 0x22DD,0x22F9,0x2315,0x2330,0x234D,0x2369,0x2385,0x23A2,
+ 0x23BF,0x23DC,0x23F9,0x2416,0x2434,0x2452,0x2470,0x248E,
+ 0x24AC,0x24CB,0x24EA,0x2509,0x2528,0x2547,0x2567,0x2587,
+ 0x25A7,0x25C7,0x25E8,0x2609,0x262A,0x264B,0x266C,0x268E,
+ 0x26B0,0x26D2,0x26F4,0x2717,0x273A,0x275D,0x2781,0x27A4,
+ 0x27C8,0x27ED,0x2811,0x2836,0x285B,0x2880,0x28A6,0x28CC,
+ 0x28F2,0x2919,0x2940,0x2967,0x298E,0x29B6,0x29DE,0x2A06,
+ 0x2A2F,0x2A58,0x2A81,0x2AAB,0x2AD5,0x2B00,0x2B2A,0x2B55,
+ 0x2B81,0x2BAD,0x2BD9,0x2C06,0x2C33,0x2C60,0x2C8E,0x2CBC,
+ 0x2CEA,0x2D19,0x2D49,0x2D78,0x2DA9,0x2DD9,0x2E0A,0x2E3C,
+ 0x2E6E,0x2EA0,0x2ED3,0x2F07,0x2F3B,0x2F6F,0x2FA4,0x2FD9,
+ 0x300F,0x3046,0x307C,0x30B4,0x30EC,0x3124,0x315E,0x3197,
+ 0x31D1,0x320C,0x3248,0x3284,0x32C0,0x32FE,0x333C,0x337A,
+ 0x33B9,0x33F9,0x343A,0x347B,0x34BD,0x3500,0x3543,0x3587,
+ 0x35CC,0x3612,0x3658,0x369F,0x36E7,0x3730,0x377A,0x37C4,
+ 0x3810,0x385C,0x38A9,0x38F7,0x3946,0x3996,0x39E7,0x3A39,
+ 0x3A8C,0x3AE0,0x3B35,0x3B8B,0x3BE2,0x3C3B,0x3C94,0x3CEF,
+ 0x3D4A,0x3DA7,0x3E05,0x3E65,0x3EC6,0x3F28,0x3F8B,0x3FF0
+};
+#ifdef __STDC__
+static signed short barrier_dat[] = {
+#else
+static short barrier_dat[] = {
+#endif
+ 0x3FF0,0x3FF0,0x3000,0x1555,0x0C00,0x07AE,0x0555,0x03EB,
+ 0x0300,0x025E,0x01EB,0x0196,0x3FF0,0x3FF0,0x2666,0x1333,
+ 0x0B4B,0x0762,0x0530,0x03D7,0x02F4,0x0257,0x01E6,0x0192,
+ 0x3000,0x2666,0x1800,0x0EC4,0x0999,0x069E,0x04CC,0x039F,
+ 0x02D2,0x0242,0x01D8,0x0189,0x1555,0x1333,0x0EC4,0x0AAA,
+ 0x07AE,0x05A5,0x0444,0x034F,0x02A1,0x0222,0x01C2,0x017A,
+ 0x0C00,0x0B4B,0x0999,0x07AE,0x0600,0x04AE,0x03B1,0x02F4,
+ 0x0266,0x01FA,0x01A7,0x0166,0x07AE,0x0762,0x069E,0x05A5,
+ 0x04AE,0x03D7,0x0325,0x0298,0x0228,0x01CF,0x0189,0x0150,
+ 0x0555,0x0530,0x04CC,0x0444,0x03B1,0x0325,0x02AA,0x0242,
+ 0x01EB,0x01A4,0x0169,0x0139,0x03EB,0x03D7,0x039F,0x034F,
+ 0x02F4,0x0298,0x0242,0x01F5,0x01B2,0x017A,0x0149,0x0121,
+ 0x0300,0x02F4,0x02D2,0x02A1,0x0266,0x0228,0x01EB,0x01B2,
+ 0x0180,0x0152,0x012B,0x0109,0x025E,0x0257,0x0242,0x0222,
+ 0x01FA,0x01CF,0x01A4,0x017A,0x0152,0x012F,0x010F,0x00F3,
+ 0x01EB,0x01E6,0x01D8,0x01C2,0x01A7,0x0189,0x0169,0x0149,
+ 0x012B,0x010F,0x00F5,0x00DE,0x0196,0x0192,0x0189,0x017A,
+ 0x0166,0x0150,0x0139,0x0121,0x0109,0x00F3,0x00DE,0x00CB
+};
diff --git a/contrib/japanese/gdevml6.c b/contrib/japanese/gdevml6.c
new file mode 100644
index 00000000..d8eaa1c3
--- /dev/null
+++ b/contrib/japanese/gdevml6.c
@@ -0,0 +1,342 @@
+/* Copyright (C) 1991 Aladdin Enterprises. All rights reserved.
+ Distributed by Free Software Foundation, Inc.
+
+This file is part of Ghostscript.
+
+Ghostscript is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+to anyone for the consequences of using it or for whether it serves any
+particular purpose or works at all, unless he says so in writing. Refer
+to the Ghostscript General Public License for full details.
+
+Everyone is granted permission to copy, modify and redistribute
+Ghostscript, but only under the conditions described in the Ghostscript
+General Public License. A copy of this license is supposed to have been
+given to you along with Ghostscript so you can know your rights and
+responsibilities. It should be in a file named COPYING. Among other
+things, the copyright notice and this notice must be preserved on all
+copies. */
+
+/* gdevml6.c */
+/* OKI MICROLINE 620CL IPL mode driver for Ghostscript */
+/*
+ Mar. 14, 1998 N.Tagawa
+
+ $Id: gdevml6.c,v 1.4 2002/07/30 18:53:22 easysw Exp $
+*/
+
+#include "gdevprn.h"
+
+/* The device descriptors */
+static dev_proc_open_device(ml600_open);
+static dev_proc_close_device(ml600_close);
+static dev_proc_print_page(ml600_print_page);
+
+static gx_device_procs ml600_procs =
+ prn_procs(ml600_open, gdev_prn_output_page, ml600_close);
+
+gx_device_printer gs_ml600_device =
+ prn_device(ml600_procs, "ml600",
+ 83, /* width_10ths, 8.3" */
+ 117, /* height_10ths, 11.7" */
+ 600, 600,
+ 0.20, 0.20, 0.20, 0.20, /* margins, lbrt */
+ 1, ml600_print_page);
+
+/* ------ prototype ------ */
+static int
+ml_finish(
+ gx_device_printer *pdev,
+ gp_file *fp);
+
+static int
+ml_init(
+ gx_device_printer *pdev,
+ gp_file *fp);
+
+static int
+move_pos(
+ gp_file *fp,
+ int n,
+ int m);
+
+static int
+make_line_data(
+ byte *curr_data,
+ byte *last_data,
+ int line_size,
+ byte *buf);
+
+static int
+send_line(
+ byte *buf,
+ int cnt,
+ gp_file *fp);
+
+static int
+page_header(
+ gx_device_printer *pdev,
+ gp_file *fp);
+
+/* ------ Internal routines ------ */
+
+#define ESC 0x1b
+#define LINE_SIZE ((7016+7) / 8) /* bytes per line (A4 600 DPI) */
+#define ppdev ((gx_device_printer *)pdev)
+
+static int
+ml600_open(
+ gx_device *pdev)
+{
+ int code = gdev_prn_open(pdev);
+ gp_file *prn_stream;
+
+ /* dprintf("gdevml6: ml600_open called\n");*/
+
+ if (code < 0)
+ return code;
+
+ code = gdev_prn_open_printer(pdev, true);
+ if (code < 0)
+ return code;
+
+ prn_stream = ppdev->file;
+ return ml_init(ppdev, prn_stream);
+}
+
+static int
+ml600_close(
+ gx_device *pdev)
+{
+ int code = gdev_prn_open_printer(pdev, true);
+ gp_file *prn_stream;
+
+ /* dprintf("gdevml6: ml600_close called\n"); */
+ if (code < 0)
+ return code;
+
+ prn_stream = ppdev->file;
+ ml_finish(ppdev, prn_stream);
+
+ return gdev_prn_close(pdev);
+}
+
+/* Send the page to the printer. */
+static int
+ml600_print_page(
+ gx_device_printer *pdev,
+ gp_file *prn_stream)
+{
+ int ystep;
+ byte data[2][LINE_SIZE*2];
+ byte buf[LINE_SIZE*2];
+ int skip;
+ int current;
+ int c_size;
+ int lnum;
+ int line_size;
+ byte rmask;
+ int i;
+
+#define LAST ((current ^ 1) & 1)
+
+ /* initialize this page */
+ ystep = page_header(pdev, prn_stream);
+ ystep /= 300;
+
+ /* clear last sent line buffer */
+ skip = 0;
+ current = 0;
+ for (i = 0; i < LINE_SIZE*2; i++)
+ data[LAST][i] = 0;
+
+ /* Send each scan line */
+ line_size = gdev_mem_bytes_per_scan_line((gx_device *)pdev);
+ if (line_size > LINE_SIZE || line_size == 0)
+ return 0;
+
+ rmask = (byte)(0xff << (-pdev->width & 7)); /* right edge */
+
+ for (lnum = 0; lnum < pdev->height; lnum++) {
+ (void)gdev_prn_copy_scan_lines(pdev, lnum, data[current],
+ line_size);
+ /* Mask right edge bits */
+ *(data[current] + line_size - 1) &= rmask;
+
+ /* blank line ? */
+ for (i = 0; i < line_size; i++)
+ if (data[current][i] != 0)
+ break;
+
+ if (i == line_size) {
+ skip = 1;
+ current = LAST;
+ continue;
+ }
+
+ /* move position, if previous lines are skipped */
+ if (skip) {
+ move_pos(prn_stream, lnum / ystep, lnum % ystep);
+ skip = 0;
+ }
+
+ /* create one line data */
+ c_size = make_line_data(data[current], data[LAST],
+ line_size, buf);
+
+ /* send one line data */
+ send_line(buf, c_size, prn_stream);
+
+ /* swap line buffer */
+ current = LAST;
+ }
+
+ /* eject page */
+ gp_fprintf(prn_stream, "\014");
+
+ return 0;
+}
+
+static int
+move_pos(
+ gp_file *fp,
+ int n,
+ int m)
+{
+ gp_fprintf(fp, "%c%c%c%c%c%c", ESC, 0x7c, 0xa6, 1, 0, 2);
+ gp_fprintf(fp, "%c%c%c%c%c%c%c%c%c", ESC, 0x7c, 0xa4, 4, 0,
+ (n >> 8) & 0xff, n & 0xff, 0, 0);
+ if (m > 0) {
+ int i;
+
+ gp_fprintf(fp, "%c%c%c%c%c%c", ESC, 0x7c, 0xa6, 1, 0, 0);
+ for (i = 0; i < m; i++) {
+ gp_fprintf(fp, "%c%c%c%c%c%c", ESC, 0x7c, 0xa7, 0, 1, 0);
+ }
+ }
+ gp_fprintf(fp, "%c%c%c%c%c%c", ESC, 0x7c, 0xa6, 1, 0, 3);
+
+ return 0;
+}
+
+static int
+make_line_data(
+ byte *curr_data,
+ byte *last_data,
+ int line_size,
+ byte *buf)
+{
+ int i; /* raster data index */
+ int n; /* output data index */
+ int bytes; /* num of bitimage bytes in one block */
+ int offs;
+
+#define TOP_BYTE(bytes,offs) ((((bytes - 1) & 7) << 5) | (offs & 0x1f))
+
+ i = 0;
+ n = 0;
+
+ while (i < line_size) {
+ /* skip unchanged bytes */
+ offs = 0;
+ while (i < line_size && curr_data[i] == last_data[i]) {
+ i++;
+ offs++;
+ }
+ if (i >= line_size)
+ break;
+
+ /* count changed bytes (max 8) */
+ bytes = 1;
+ while (i + bytes < line_size && bytes < 8 &&
+ curr_data[i + bytes] != last_data[i + bytes]) {
+ bytes++;
+ }
+
+ /* make data */
+ if (offs < 0x1f) {
+ buf[n++] = TOP_BYTE(bytes, offs);
+ }
+ else {
+ offs -= 0x1f;
+ buf[n++] = TOP_BYTE(bytes, 0x1f);
+
+ while (offs >= 0xff) {
+ offs -= 0xff;
+ buf[n++] = 0xff;
+ }
+ buf[n++] = offs;
+ }
+
+ /* write bitimage */
+ while (bytes > 0) {
+ buf[n++] = curr_data[i++];
+ --bytes;
+ }
+ }
+
+ return n;
+}
+
+static int
+send_line(
+ byte *buf,
+ int cnt,
+ gp_file *fp)
+{
+ gp_fprintf(fp, "%c%c%c", ESC, 0x7c, 0xa7);
+ gp_fprintf(fp, "%c%c", (cnt >> 8) & 0xff, cnt & 0xff);
+ return gp_fwrite(buf, sizeof(byte), cnt, fp);
+}
+
+static int
+ml_init(
+ gx_device_printer *pdev,
+ gp_file *fp)
+{
+ /* dprintf("gdevml6: ml_init called\n"); */
+
+ gp_fprintf(fp, "%c%c%c", ESC, 0x2f, 0xf2);
+
+ return 0;
+}
+
+static int
+page_header(
+ gx_device_printer *pdev,
+ gp_file *fp)
+{
+ int ydpi;
+
+ gp_fprintf(fp, "%c%c%c%c%c%c", ESC, 0x7c, 0xa0, 1, 0, 1);
+ gp_fprintf(fp, "%c%c%c%c%c%c", ESC, 0x7c, 0xa1, 1, 0, 1);
+ gp_fprintf(fp, "%c%c%c%c%c%c", ESC, 0x7c, 0xa2, 1, 0, 1);
+ if (pdev->y_pixels_per_inch > 600) { /* 600 x 1200 dpi */
+ gp_fprintf(fp, "%c%c%c%c%c%c%c%c%c",
+ ESC, 0x7c, 0xa5, 4, 0, 2, 0x58, 4, 0xb0);
+ ydpi = 1200;
+ }
+ else if (pdev->y_pixels_per_inch > 300) { /* 600 dpi */
+ gp_fprintf(fp, "%c%c%c%c%c%c%c", ESC, 0x7c, 0xa5, 2, 0, 2, 0x58);
+ ydpi = 600;
+ }
+ else {
+ gp_fprintf(fp, "%c%c%c%c%c%c%c", ESC, 0x7c, 0xa5, 2, 0, 1, 0x2c);
+ ydpi = 300;
+ }
+ gp_fprintf(fp, "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
+ ESC, 0x7c, 0xf1, 0x0c, 0, 0, 1 , 0, 2, 0, 0, 0, 0, 0, 0, 0, 0);
+ gp_fprintf(fp, "%c%c%c%c%c%c", ESC, 0x7c, 0xa6, 1, 0, 3);
+
+ return ydpi;
+}
+
+static int
+ml_finish(
+ gx_device_printer *pdev,
+ gp_file *fp)
+{
+ gp_fprintf(fp, "%c%c%c", ESC, 0x2f, 0xfe);
+
+ return 0;
+}
diff --git a/contrib/japanese/gdevnpdl.c b/contrib/japanese/gdevnpdl.c
new file mode 100644
index 00000000..4ecace50
--- /dev/null
+++ b/contrib/japanese/gdevnpdl.c
@@ -0,0 +1,710 @@
+/* Copyright (C) 1989, 1992, 1993 Aladdin Enterprises. All rights reserved.
+
+ This file is part of Ghostscript.
+
+ Ghostscript is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+ to anyone for the consequences of using it or for whether it serves any
+ particular purpose or works at all, unless he says so in writing. Refer
+ to the Ghostscript General Public License for full details.
+
+ Everyone is granted permission to copy, modify and redistribute
+ Ghostscript, but only under the conditions described in the Ghostscript
+ General Public License. A copy of this license is supposed to have been
+ given to you along with Ghostscript so you can know your rights and
+ responsibilities. It should be in a file named COPYING. Among other
+ things, the copyright notice and this notice must be preserved on all
+ copies. */
+
+/* gdevnpdl.c */
+/*
+ * NEC NPDL/NPDL(level 2) language printer driver for Ghostscript.
+ * Version 1.5
+ *
+ * This driver was designed to work with any NEC NPDL/NPDL(level 2)
+ * language printers such as NEC MultiWriter series.
+ *
+ * Any test reports, comments, suggestions, and bug reports are welcome.
+ *
+ * -- Osamu Watanabe <owatanab@ceres.dti.ne.jp>
+ *
+ * $Id: gdevnpdl.c,v 1.10 1998/09/28 16:20:04 watanabe Exp $
+ *
+ */
+
+/*
+ Modified by Norihito Ohmori, May 15 1999
+ 1. Landscape Support
+ 2. PostCard Size Support
+ 3. Output Speed UP
+ 4. Copy Mode Support (-dNumCopies Option)
+ 5. Default Resolution Chage from 400 dpi to 240 dpi
+ 6. NegativePrint Support
+ */
+
+/*
+ Modified by Norihito Ohmori, Jul 18 1999
+ 1. Envelope 4 and BPostCard Size Support
+ 2. Tumble (When Duplex) Support
+ 3. Margin size change.
+ */
+
+#include "gdevlprn.h"
+
+/*
+ * Valid values for IMAGE resolutions, that is, X_DPI and Y_DPI, are
+ * 160, 200, 240, and 400 (Mr. Keita Kawabe reported that the 600dpi
+ * printer, MultiWriter 2000X, accepts 600).
+ * These two values must be the same.
+ *
+ * The resolution specified below is the default value.
+ * You can also specify the resolution at runtime with -r option.
+ */
+#define X_DPI 240
+#define Y_DPI 240
+
+/*
+ * Left, bottom, right, and top margins.
+ *
+ * The values defined below are more accurate for my printer,
+ * and it is recommended that you adjust these values suitable to yours.
+ * The commented values are from the PC-PR1000E/4 User's Manual.
+ */
+/* margins of A3 paper */
+#define L_MARGIN_A3 0.20
+#define B_MARGIN_A3 0.24
+#define R_MARGIN_A3 0.20
+#define T_MARGIN_A3 0.20
+/* margins of A4 paper */
+#define L_MARGIN_A4 0.31
+#define B_MARGIN_A4 0.20
+#define R_MARGIN_A4 0.16
+#define T_MARGIN_A4 0.20
+/* margins of A5 paper */
+#define L_MARGIN_A5 0.31
+#define B_MARGIN_A5 0.16
+#define R_MARGIN_A5 0.16
+#define T_MARGIN_A5 0.20
+/* margins of B4 paper */
+#define L_MARGIN_B4 0.31
+#define B_MARGIN_B4 0.24
+#define R_MARGIN_B4 0.31
+#define T_MARGIN_B4 0.20
+/* margins of B5 paper */
+#define L_MARGIN_B5 0.31
+#define B_MARGIN_B5 0.24
+#define R_MARGIN_B5 0.16
+#define T_MARGIN_B5 0.20
+/* margins of letter size paper */
+#define L_MARGIN_LETTER 0.31
+#define B_MARGIN_LETTER 0.24
+#define R_MARGIN_LETTER 0.20
+#define T_MARGIN_LETTER 0.20
+/* margins of postcard size paper */
+#define L_MARGIN_POSTCARD 0.31
+#define B_MARGIN_POSTCARD 0.12
+#define R_MARGIN_POSTCARD 0.24
+#define T_MARGIN_POSTCARD 0.20
+/* margins of env4 size paper */
+#define L_MARGIN_ENV4 0.20
+#define B_MARGIN_ENV4 0.20
+#define R_MARGIN_ENV4 0.20
+#define T_MARGIN_ENV4 0.20
+
+/* The device descriptors */
+static dev_proc_open_device(npdl_open);
+static dev_proc_open_device(npdl_close);
+static dev_proc_print_page_copies(npdl_print_page_copies);
+static dev_proc_put_params(npdl_put_params);
+static dev_proc_image_out(npdl_image_out);
+
+static gx_device_procs npdl_prn_procs =
+prn_params_procs(npdl_open, gdev_prn_output_page, npdl_close,
+ lprn_get_params, npdl_put_params);
+
+gx_device_lprn far_data gs_npdl_device =
+lprn_duplex_device(gx_device_lprn, npdl_prn_procs, "npdl",
+ X_DPI, Y_DPI, /* default resolution */
+ 0.0, 0.0, 0.0, 0.0, /* margins */
+ 1, npdl_print_page_copies, npdl_image_out);
+
+/* ------ internal routines ------ */
+
+/* paper size code */
+/* modified from gdevpcl.h and gdevmjc.c */
+#define PAPER_SIZE_LETTER 2
+#define PAPER_SIZE_A5 25
+#define PAPER_SIZE_A4 26
+#define PAPER_SIZE_A3 27
+#define PAPER_SIZE_B4 30
+#define PAPER_SIZE_B5 31
+#define PAPER_SIZE_POSTCARD 32
+#define PAPER_SIZE_BPOSTCARD 33
+#define PAPER_SIZE_ENV4 34
+
+/* terminating code */
+static char
+terminating[2][64][13] = {{
+/* white */
+"00110101", "000111", "0111", "1000", /* 0 - 3 */
+"1011", "1100", "1110", "1111", /* 4 - 7 */
+"10011", "10100", "00111", "01000", /* 8 - 11 */
+"001000", "000011", "110100", "110101", /* 12 - 15 */
+"101010", "101011", "0100111", "0001100", /* 16 - 19 */
+"0001000", "0010111", "0000011", "0000100", /* 20 - 23 */
+"0101000", "0101011", "0010011", "0100100", /* 24 - 27 */
+"0011000", "00000010", "00000011", "00011010", /* 28 - 31 */
+"00011011", "00010010", "00010011", "00010100", /* 32 - 35 */
+"00010101", "00010110", "00010111", "00101000", /* 36 - 39 */
+"00101001", "00101010", "00101011", "00101100", /* 40 - 43 */
+"00101101", "00000100", "00000101", "00001010", /* 44 - 47 */
+"00001011", "01010010", "01010011", "01010100", /* 48 - 51 */
+"01010101", "00100100", "00100101", "01011000", /* 52 - 55 */
+"01011001", "01011010", "01011011", "01001010", /* 56 - 59 */
+"01001011", "00110010", "00110011", "00110100" /* 60 - 63 */
+},{
+/* black */
+"0000110111", "010", "11", "10", /* 0 - 3 */
+"011", "0011", "0010", "00011", /* 4 - 7 */
+"000101", "000100", "0000100", "0000101", /* 8 - 11 */
+"0000111", "00000100", "00000111", "000011000", /* 12 - 15 */
+"0000010111", "0000011000", "0000001000", "00001100111", /* 16 - 19 */
+"00001101000", "00001101100", "00000110111", "00000101000", /* 20 - 23 */
+"00000010111", "00000011000", "000011001010", "000011001011", /* 24 - 27 */
+"000011001100", "000011001101", "000001101000", "000001101001", /* 28 - 31 */
+"000001101010", "000001101011", "000011010010", "000011010011", /* 32 - 35 */
+"000011010100", "000011010101", "000011010110", "000011010111", /* 36 - 39 */
+"000001101100", "000001101101", "000011011010", "000011011011", /* 40 - 43 */
+"000001010100", "000001010101", "000001010110", "000001010111", /* 44 - 47 */
+"000001100100", "000001100101", "000001010010", "000001010011", /* 48 - 51 */
+"000000100100", "000000110111", "000000111000", "000000100111", /* 52 - 55 */
+"000000101000", "000001011000", "000001011001", "000000101011", /* 56 - 59 */
+"000000101100", "000001011010", "000001100110", "000001100111" /* 60 - 63 */
+}};
+
+/* make-up code */
+static char
+makeup[2][40][14] = {{
+/* white */
+"11011", "10010", "010111", "0110111", /* 64- 256 */
+"00110110", "00110111", "01100100", "01100101", /* 320- 512 */
+"01101000", "01100111", "011001100", "011001101", /* 576- 768 */
+"011010010", "011010011", "011010100", "011010101", /* 832-1024 */
+"011010110", "011010111", "011011000", "011011001", /* 1088-1280 */
+"011011010", "011011011", "010011000", "010011001", /* 1344-1536 */
+"010011010", "011000", "010011011", "00000001000", /* 1600-1792 */
+"00000001100", "00000001101", "000000010010", "000000010011", /* 1856-2048 */
+"000000010100", "000000010101", "000000010110", "000000010111", /* 2112-2304 */
+"000000011100", "000000011101", "000000011110", "000000011111" /* 2368-2560 */
+},{
+/* black */
+"0000001111", "000011001000", "000011001001", "000001011011", /* 64- 256 */
+"000000110011", "000000110100", "000000110101", "0000001101100",/* 320- 512 */
+"0000001101101","0000001001010","0000001001011","0000001001100",/* 576- 768 */
+"0000001001101","0000001110010","0000001110011","0000001110100",/* 832-1024 */
+"0000001110101","0000001110110","0000001110111","0000001010010",/* 1088-1280 */
+"0000001010011","0000001010100","0000001010101","0000001011010",/* 1344-1536 */
+"0000001011011","0000001100100","0000001100101","00000001000", /* 1600-1792 */
+"00000001100", "00000001101", "000000010010", "000000010011", /* 1856-2048 */
+"000000010100", "000000010101", "000000010110", "000000010111", /* 2112-2304 */
+"000000011100", "000000011101", "000000011110", "000000011111" /* 2368-2560 */
+}};
+
+/* EOL (end of line) code */
+static char
+ eol[] = "000000000001";
+
+/* FILL bit */
+static char
+ fill[] = "0";
+
+#define MAX_RUNLENGTH 2623 /* Max value of makeup(2560) + terminating(63) */
+#define EOL_SIZE 12 /* Size of EOL (end of line) code */
+
+static byte
+ mask[] =
+{0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
+
+/* Write MH code to buffer */
+static int
+mh_write_to_buffer(byte * out, int chunk_size, int num_bits, char *code)
+{
+ int code_length, i, p, q;
+
+ for (code_length = 0; code[code_length] != '\0'; code_length++);
+ if (((num_bits + code_length) / 8) >= chunk_size)
+ return 0;
+
+ p = num_bits / 8;
+ q = num_bits % 8;
+ for (i = 0; i < code_length; i++) {
+ /*
+ * MH compressed data are stored from 2^0 to 2^7,
+ * whereas uncompressed data are stored from 2^7 to 2^0.
+ */
+ if (code[i] == '0')
+ out[p] &= ~(mask[7 - q]);
+ else
+ out[p] |= mask[7 - q];
+
+ if (q < 7)
+ q++;
+ else {
+ p++;
+ q = 0;
+ }
+ }
+
+ return code_length;
+}
+
+/* Set run-length code */
+static int
+mh_set_runlength(byte * out, int chunk_size, int num_bits, int phase, int count)
+{
+ int n, code_length;
+
+ code_length = 0;
+
+ /* Set makeup code */
+ if (count / 64 > 0) {
+ if ((n = mh_write_to_buffer(out, chunk_size, num_bits,
+ makeup[phase][(count / 64) - 1])) == 0)
+ return 0;
+ code_length += n;
+ }
+ /* Set terminating code */
+ if ((n = mh_write_to_buffer(out, chunk_size, num_bits + code_length,
+ terminating[phase][count % 64])) == 0)
+ return 0;
+ code_length += n;
+
+ return code_length;
+}
+
+/* Set EOL (end of line) code */
+static int
+mh_set_eol(byte * out, int chunk_size, int num_bits)
+{
+ return mh_write_to_buffer(out, chunk_size, num_bits, eol);
+}
+
+/* Set RTC (return to control) code and FILL bits */
+static int
+mh_set_rtc(byte * out, int chunk_size, int num_bits)
+{
+ int i, n, code_length, num_fills;
+
+ code_length = 0;
+
+ /* Set FILL bits */
+ num_fills = (EOL_SIZE * 6 + (num_bits % 8)) % 8;
+ if (num_fills != 0) {
+ for (i = 0; i < 8 - num_fills; i++) {
+ if ((n = mh_write_to_buffer(out, chunk_size, num_bits + code_length,
+ fill)) == 0)
+ return 0;
+ code_length += n;
+ }
+ }
+ /* Set RTC (that is, six EOL) code */
+ for (i = 0; i < 6; i++) {
+ if ((n = mh_write_to_buffer(out, chunk_size, num_bits + code_length,
+ eol)) == 0)
+ return 0;
+ code_length += n;
+ }
+
+ return code_length;
+}
+
+/* Data compression by MH coding */
+static int
+mh_compression(byte * in, byte * out, int line_size, int column_size)
+{
+ int i, p, q, r, n;
+ int num_bits, phase, count;
+ int chunk_size = line_size * column_size;
+ byte src;
+
+ num_bits = 0;
+ for (i = 0; i < column_size; i++) {
+ r = i * line_size;
+
+ /* Synchronization of 1-dot line */
+ if ((n = mh_set_eol(out, chunk_size, num_bits)) == 0)
+ return 0;
+ num_bits += n;
+
+ /* Data compression of 1-dot line */
+ phase = count = 0;
+ for (p = 0; p < line_size; p++) {
+ if (phase == 0)
+ src = ~(in[r + p]);
+ else
+ src = in[r + p];
+ for (q = 0; q < 8; q++) {
+
+ /*
+ * If the dot has reversed, write the
+ * run-length of the continuous dots.
+ */
+ if (!(src & mask[q])) {
+ if ((n = mh_set_runlength(out, chunk_size, num_bits,
+ phase, count)) == 0)
+ return 0;
+ num_bits += n;
+ phase = (phase == 0) ? 1 : 0;
+ count = 1;
+ src = ~src;
+ }
+ /*
+ * If the dot is not reversed, check the
+ * length of this continuous dots,
+ */
+ else {
+ if (count < MAX_RUNLENGTH)
+ count++;
+ /*
+ * and if the length >= MAX_RUNLENGTH,
+ * stop and restart counting.
+ */
+ else {
+ if ((n = mh_set_runlength(out, chunk_size, num_bits,
+ phase, MAX_RUNLENGTH)) == 0)
+ return 0;
+ num_bits += n;
+ phase = (phase == 0) ? 1 : 0;
+ if ((n = mh_set_runlength(out, chunk_size, num_bits,
+ phase, 0)) == 0)
+ return 0;
+ num_bits += n;
+ phase = (phase == 0) ? 1 : 0;
+ count = 1;
+ }
+ }
+ }
+ }
+
+ /* Write the last run-length of 1-dot line */
+ if ((n = mh_set_runlength(out, chunk_size, num_bits, phase,
+ count)) == 0)
+ return 0;
+ num_bits += n;
+ }
+
+ /* RTC (return to control) */
+ if ((n = mh_set_rtc(out, chunk_size, num_bits)) == 0)
+ return 0;
+ num_bits += n;
+
+ return (num_bits / 8);
+}
+
+/* Get the paper size code based on the width and the height.
+ modified from gdevpcl.c and gdevmjc.c */
+static int
+npdl_get_paper_size(gx_device * dev)
+{
+ float media_height = (dev->MediaSize[0] > dev->MediaSize[1]) ? dev->MediaSize[0] : dev->MediaSize[1];
+
+ return (media_height > 1032 ? PAPER_SIZE_A3 :
+ media_height > 842 ? PAPER_SIZE_B4 :
+ media_height > 792 ? PAPER_SIZE_A4 :
+ media_height > 756 ? PAPER_SIZE_LETTER :
+ media_height > 729 ? PAPER_SIZE_ENV4 :
+ media_height > 595 ? PAPER_SIZE_BPOSTCARD :
+ media_height > 568 ? PAPER_SIZE_B5 :
+ media_height > 419 ? PAPER_SIZE_A5 :
+ PAPER_SIZE_POSTCARD);
+}
+
+static int
+npdl_set_page_layout(gx_device * dev)
+{
+ int code;
+ float margins[4];
+
+ /* Change the margins according to the paper size. */
+ switch (npdl_get_paper_size(dev)) {
+ case PAPER_SIZE_A3:
+ if (dev->MediaSize[0] > dev->MediaSize[1]) { /* Landscape */
+ margins[0] = L_MARGIN_A3;
+ margins[1] = B_MARGIN_A3;
+ margins[2] = R_MARGIN_A3;
+ margins[3] = T_MARGIN_A3;
+ } else { /* Portrait */
+ margins[1] = L_MARGIN_A3;
+ margins[2] = B_MARGIN_A3;
+ margins[3] = R_MARGIN_A3;
+ margins[0] = T_MARGIN_A3;
+ }
+ break;
+ case PAPER_SIZE_A5:
+ if (dev->MediaSize[0] > dev->MediaSize[1]) { /* Landscape */
+ margins[0] = L_MARGIN_A5;
+ margins[1] = B_MARGIN_A5;
+ margins[2] = R_MARGIN_A5;
+ margins[3] = T_MARGIN_A5;
+ } else { /* Portrait */
+ margins[1] = L_MARGIN_A5;
+ margins[2] = B_MARGIN_A5;
+ margins[3] = R_MARGIN_A5;
+ margins[0] = T_MARGIN_A5;
+ }
+ break;
+ case PAPER_SIZE_B5:
+ if (dev->MediaSize[0] > dev->MediaSize[1]) { /* Landscape */
+ margins[1] = L_MARGIN_B5;
+ margins[2] = B_MARGIN_B5;
+ margins[3] = R_MARGIN_B5;
+ margins[0] = T_MARGIN_B5;
+ } else { /* Portrait */
+ margins[0] = L_MARGIN_B5;
+ margins[1] = B_MARGIN_B5;
+ margins[2] = R_MARGIN_B5;
+ margins[3] = T_MARGIN_B5;
+ }
+ break;
+ case PAPER_SIZE_LETTER:
+ if (dev->MediaSize[0] > dev->MediaSize[1]) { /* Landscape */
+ margins[1] = L_MARGIN_LETTER;
+ margins[2] = B_MARGIN_LETTER;
+ margins[3] = R_MARGIN_LETTER;
+ margins[0] = T_MARGIN_LETTER;
+ } else { /* Portrait */
+ margins[0] = L_MARGIN_LETTER;
+ margins[1] = B_MARGIN_LETTER;
+ margins[2] = R_MARGIN_LETTER;
+ margins[3] = T_MARGIN_LETTER;
+ }
+ break;
+ case PAPER_SIZE_POSTCARD:
+ if (dev->MediaSize[0] > dev->MediaSize[1]) { /* Landscape */
+ margins[1] = L_MARGIN_POSTCARD;
+ margins[2] = B_MARGIN_POSTCARD;
+ margins[3] = R_MARGIN_POSTCARD;
+ margins[0] = T_MARGIN_POSTCARD;
+ } else { /* Portrait */
+ margins[0] = L_MARGIN_POSTCARD;
+ margins[1] = B_MARGIN_POSTCARD;
+ margins[2] = R_MARGIN_POSTCARD;
+ margins[3] = T_MARGIN_POSTCARD;
+ }
+ break;
+ case PAPER_SIZE_ENV4:
+ case PAPER_SIZE_BPOSTCARD:
+ margins[1] = L_MARGIN_ENV4;
+ margins[2] = B_MARGIN_ENV4;
+ margins[3] = R_MARGIN_ENV4;
+ margins[0] = T_MARGIN_ENV4;
+ break;
+ default: /* A4 */
+ if (dev->MediaSize[0] > dev->MediaSize[1]) { /* Landscape */
+ margins[1] = L_MARGIN_A4;
+ margins[2] = B_MARGIN_A4;
+ margins[3] = R_MARGIN_A4;
+ margins[0] = T_MARGIN_A4;
+ } else { /* Portrait */
+ margins[0] = L_MARGIN_A4;
+ margins[1] = B_MARGIN_A4;
+ margins[2] = R_MARGIN_A4;
+ margins[3] = T_MARGIN_A4;
+ }
+ break;
+ }
+ gx_device_set_margins(dev, margins, true);
+ if (dev->is_open) {
+ gdev_prn_close(dev);
+ code = gdev_prn_open(dev);
+ if (code < 0)
+ return code;
+ }
+ return 0;
+}
+
+/* Open the printer, and set the margins. */
+static int
+npdl_open(gx_device * dev)
+{
+ int xdpi = dev->x_pixels_per_inch;
+ int ydpi = dev->y_pixels_per_inch;
+
+ /* Print Resolution Check */
+ if (xdpi != ydpi)
+ return_error(gs_error_rangecheck);
+ else if (xdpi != 160 && xdpi != 200 && xdpi != 240 &&
+ xdpi != 400 && xdpi != 600)
+ return_error(gs_error_rangecheck);
+
+ npdl_set_page_layout(dev);
+
+ return gdev_prn_open(dev);
+}
+
+static int
+npdl_close(gx_device *pdev)
+{
+ gx_device_printer *const ppdev = (gx_device_printer *) pdev;
+ int code = gdev_prn_open_printer(pdev, 1);
+ if (code >= 0)
+ gp_fputs("\033c1", ppdev->file);
+
+ return gdev_prn_close(pdev);
+}
+
+static int
+npdl_put_params(gx_device * pdev, gs_param_list * plist)
+{
+ gx_device_lprn *const lprn = (gx_device_lprn *) pdev;
+ int code;
+
+ code = lprn_put_params(pdev, plist);
+ if (code < 0)
+ return code;
+ if (pdev->is_open && !lprn->initialized) {
+ npdl_set_page_layout(pdev);
+ }
+ return 0;
+}
+
+/* Send the page to the printer. For speed, compress each scan line,
+ since computer-to-printer communication time is often a bottleneck. */
+static int
+npdl_print_page_copies(gx_device_printer * pdev, gp_file * prn_stream, int num_copies)
+{
+ gx_device_lprn *const lprn = (gx_device_lprn *) pdev;
+ int line_size = gdev_prn_raster(pdev);
+ int x_dpi = (int)(pdev->x_pixels_per_inch);
+ char paper_command[5];
+ int code;
+ int maxY = lprn->BlockLine / lprn->nBh * lprn->nBh;
+
+ if (!(lprn->CompBuf = gs_malloc(pdev->memory->non_gc_memory, line_size * maxY, sizeof(byte), "npdl_print_page_copies(CompBuf)")))
+ return_error(gs_error_VMerror);
+
+ /* Initialize printer */
+ if (pdev->PageCount == 0) {
+
+ /* Initialize printer */
+ gp_fputs("\033c1", prn_stream); /* Software Reset */
+ gp_fputs("\034d240.", prn_stream); /* Page Printer Mode */
+
+ /* Check paper size */
+ switch (npdl_get_paper_size((gx_device *) pdev)) {
+ case PAPER_SIZE_POSTCARD:
+ gs_sprintf(paper_command, "PC");
+ break;
+ case PAPER_SIZE_A5:
+ gs_sprintf(paper_command, "A5");
+ break;
+ case PAPER_SIZE_A4:
+ gs_sprintf(paper_command, "A4");
+ break;
+ case PAPER_SIZE_A3:
+ gs_sprintf(paper_command, "A3");
+ break;
+ case PAPER_SIZE_B5:
+ gs_sprintf(paper_command, "B5");
+ break;
+ case PAPER_SIZE_B4:
+ gs_sprintf(paper_command, "B4");
+ break;
+ case PAPER_SIZE_LETTER:
+ gs_sprintf(paper_command, "LT");
+ break;
+ case PAPER_SIZE_ENV4:
+ gs_sprintf(paper_command, "ENV4");
+ break;
+ case PAPER_SIZE_BPOSTCARD:
+ gs_sprintf(paper_command, "UPPC");
+ break;
+ }
+
+ if (lprn->ManualFeed) {
+ gp_fprintf(prn_stream, "\034f%cM0.",
+ (pdev->MediaSize[0] > pdev->MediaSize[1]) ? 'L' : 'P');
+ /* Page Orientation P: Portrait, L: Landscape */
+ } else {
+ gp_fprintf(prn_stream, "\034f%c%s.",
+ (pdev->MediaSize[0] > pdev->MediaSize[1]) ? 'L' : 'P',
+ /* Page Orientation P: Portrait, L: Landscape */
+ paper_command); /* Paper Size */
+ }
+
+ gp_fprintf(prn_stream, "\034<1/%d,i.", x_dpi); /* Image Resolution */
+
+ /* Duplex Setting */
+ if (pdev->Duplex_set > 0) {
+ if (pdev->Duplex) {
+ if (lprn->Tumble == 0)
+ gp_fprintf(prn_stream, "\034'B,,1,0.");
+ else
+ gp_fprintf(prn_stream, "\034'B,,2,0.");
+ } else
+ gp_fprintf(prn_stream, "\034'S,,,0.");
+ }
+ }
+
+ if (num_copies > 99)
+ num_copies = 99;
+ gp_fprintf(prn_stream, "\034x%d.", num_copies);
+
+ lprn->initialized = false;
+
+ if (lprn->NegativePrint) {
+ gp_fprintf(prn_stream, "\034e0,0."); /* move to (0, 0) */
+ gp_fprintf(prn_stream, "\034Y"); /* goto figure mode */
+ gp_fprintf(prn_stream, "SU1,%d,0;", (int)pdev->x_pixels_per_inch);
+ /* Setting Printer Unit */
+ gp_fprintf(prn_stream, "SG0,0;"); /* select black color */
+ gp_fprintf(prn_stream, "NP;"); /* begin path */
+ gp_fprintf(prn_stream, "PA%d,0,%d,%d,0,%d;",
+ pdev->width, pdev->width, pdev->height, pdev->height);
+ /* draw rectangle */
+ gp_fprintf(prn_stream, "CP"); /* close path */
+ gp_fprintf(prn_stream, "EP;"); /* end path */
+ gp_fprintf(prn_stream, "FL0;"); /* fill path */
+ gp_fprintf(prn_stream, "\034Z"); /* end of figure mode */
+ gp_fprintf(prn_stream, "\034\"R."); /* `R'eplace Mode */
+ }
+ code = lprn_print_image(pdev, prn_stream);
+ if (code < 0)
+ return code;
+
+ /* Form Feed */
+ gp_fputs("\014", prn_stream);
+
+ gs_free(pdev->memory->non_gc_memory, lprn->CompBuf, line_size * maxY, sizeof(byte), "npdl_print_page_copies(CompBuf)");
+ return 0;
+}
+
+/* Output data */
+static void
+npdl_image_out(gx_device_printer * pdev, gp_file * prn_stream, int x, int y, int width, int height)
+{
+ gx_device_lprn *const lprn = (gx_device_lprn *) pdev;
+ int num_bytes;
+ int x_dpi = (int)(pdev->x_pixels_per_inch);
+
+ gp_fprintf(prn_stream, "\034e%d,%d.", x, y);
+ /* Data compression */
+ num_bytes = mh_compression(lprn->TmpBuf, lprn->CompBuf, width / 8, height);
+
+ /*
+ * If the compression ratio >= 100%, send uncompressed data
+ */
+ if (num_bytes == 0) {
+ gp_fprintf(prn_stream, "\034i%d,%d,0,1/1,1/1,%d,%d.", width,
+ height, width * height / 8, x_dpi);
+ gp_fwrite(lprn->TmpBuf, 1, width * height / 8, prn_stream);
+ }
+ /*
+ * If the compression ratio < 100%, send compressed data
+ */
+ else {
+ gp_fprintf(prn_stream, "\034i%d,%d,1,1/1,1/1,%d,%d.", width,
+ height, num_bytes, x_dpi);
+ gp_fwrite(lprn->CompBuf, 1, num_bytes, prn_stream);
+ }
+}
diff --git a/contrib/japanese/gdevp201.c b/contrib/japanese/gdevp201.c
new file mode 100644
index 00000000..11f8f98e
--- /dev/null
+++ b/contrib/japanese/gdevp201.c
@@ -0,0 +1,273 @@
+/* Copyright (C) 1990, 1992 Aladdin Enterprises. All rights reserved.
+ Distributed by Free Software Foundation, Inc.
+
+This file is part of Ghostscript.
+
+Ghostscript is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+to anyone for the consequences of using it or for whether it serves any
+particular purpose or works at all, unless he says so in writing. Refer
+to the Ghostscript General Public License for full details.
+
+Everyone is granted permission to copy, modify and redistribute
+Ghostscript, but only under the conditions described in the Ghostscript
+General Public License. A copy of this license is supposed to have been
+given to you along with Ghostscript so you can know your rights and
+responsibilities. It should be in a file named COPYING. Among other
+things, the copyright notice and this notice must be preserved on all
+copies. */
+
+/* gdevp201.c */
+/* NEC PC-PR201 printer driver for Ghostscript */
+/* modified by m.mori for printers other than pr-201 */
+/* modified by OkI for hires-98 */
+/* modified by ASAYAMA Kazunori for Ghostscript version 2.6.1 */
+#include "gdevprn.h"
+
+/* There are NEC PC-PR printer paramaters.
+ MODEL DEVICE_NAME X_DPI,Y_DPI HEAD_PINS LF_PITCH
+ PC-PR201 "nec160" 160 24 18
+ PC-PR1000 "nec240" 240 40 20
+ PC-PR150 "nec320" 320 48 18
+ PC-PR1000/4 "nec400" 400 60 18
+*/
+
+#define WIDTH 80 /* width_10ths, 8" */
+#define HEIGHT 110 /* height_10ths, 11" */
+
+enum{PR201, PR1000, PR150, PR1K4};
+
+static dev_proc_print_page(pr201_print_page);
+
+/* The device descriptor */
+gx_device_printer gs_pr201_device =
+ prn_device(prn_std_procs, "pr201",
+ WIDTH,
+ HEIGHT,
+ 160,
+ 160,
+ 0,0,0,0, /* margins */
+ 1, pr201_print_page);
+
+gx_device_printer gs_pr1000_device =
+ prn_device(prn_std_procs, "pr1000",
+ WIDTH,
+ HEIGHT,
+ 240,
+ 240,
+ 0,0,0,0, /* margins */
+ 1, pr201_print_page);
+
+gx_device_printer gs_pr150_device =
+ prn_device(prn_std_procs, "pr150",
+ WIDTH,
+ HEIGHT,
+ 320,
+ 320,
+ 0,0,0,0, /* margins */
+ 1, pr201_print_page);
+
+gx_device_printer gs_pr1000_4_device =
+ prn_device(prn_std_procs, "pr1000_4",
+ WIDTH,
+ HEIGHT,
+ 400,
+ 400,
+ 0,0,0,0, /* margins */
+ 1, pr201_print_page);
+
+/* Transpose a block of 8x8 bits */
+static int
+pr201_transpose_8x8(byte *src, int src_step, byte *dst, int dst_step)
+{
+ byte mask, s, d0, d1, d2, d3, d4, d5, d6, d7;
+ int i;
+
+ d0 = d1 = d2 = d3 = d4 = d5 = d6 = d7 = 0;
+
+ for(i=0, mask=0x01; i<8; i++, mask <<= 1) {
+ s = *src;
+ if(s & 0x80) d0 |= mask;
+ if(s & 0x40) d1 |= mask;
+ if(s & 0x20) d2 |= mask;
+ if(s & 0x10) d3 |= mask;
+ if(s & 0x08) d4 |= mask;
+ if(s & 0x04) d5 |= mask;
+ if(s & 0x02) d6 |= mask;
+ if(s & 0x01) d7 |= mask;
+ src += src_step;
+ }
+
+ *dst = d0;
+ *(dst += dst_step) = d1;
+ *(dst += dst_step) = d2;
+ *(dst += dst_step) = d3;
+ *(dst += dst_step) = d4;
+ *(dst += dst_step) = d5;
+ *(dst += dst_step) = d6;
+ *(dst += dst_step) = d7;
+
+ return 0;
+}
+
+static int
+check_mode(const char* modename)
+{
+ if (!strcmp(modename, "pr201"))
+ return PR201;
+ else if (!strcmp(modename, "pr1000"))
+ return PR1000;
+ else if (!strcmp(modename, "pr150"))
+ return PR150;
+ else
+ return PR1K4;
+}
+
+/* Send the page to the printer. */
+static int
+pr201_print_page(gx_device_printer *pdev, gp_file *prn_stream)
+{ int line_size;
+ int height;
+ int bits_per_column;
+ int bytes_per_column;
+ int chunk_size;
+ byte *in, *out;
+ int lnum, skip;
+ int head_pins, lr_pitch, x_dpi;
+
+ switch (check_mode(pdev->dname)){
+ case PR201:
+ head_pins=24; lr_pitch=18; x_dpi=160; break;
+ case PR1000:
+ head_pins=40; lr_pitch=20; x_dpi=240; break;
+ case PR150:
+ head_pins=48; lr_pitch=18; x_dpi=320; break;
+ case PR1K4:
+ default:
+ head_pins=60; lr_pitch=18; x_dpi=400; break;
+ }
+
+ line_size = gdev_mem_bytes_per_scan_line((gx_device *)pdev);
+ height = pdev->height;
+ bits_per_column = head_pins;
+ bytes_per_column = bits_per_column / 8;
+ chunk_size = bits_per_column * line_size;
+
+ in = (byte *)
+ gs_malloc(pdev->memory->non_gc_memory, bits_per_column, line_size, "pr201_print_page(in)");
+ out = (byte *)
+ gs_malloc(pdev->memory->non_gc_memory, bits_per_column, line_size, "pr201_print_page(out)");
+ if(in == 0 || out == 0)
+ return -1;
+
+ /* Initialize printer */
+ gp_fputs("\033cl", pdev->file); /* Software Reset */
+ gp_fputs("\033P", pdev->file); /* Proportional Mode */
+ if (check_mode(pdev->dname)==PR150){
+ gp_fprintf(pdev->file, "\034d%d.", x_dpi); /* 320 dpi mode. */
+ }
+ gp_fprintf(pdev->file, "\033T%d" , lr_pitch);
+ /* 18/120 inch per line */
+
+ /* Send Data to printer */
+ lnum = 0;
+ skip = 0;
+ while(lnum < height) {
+ byte *inp, *outp, *out_beg, *out_end;
+ int x, y, num_lines, size, mod;
+
+ /* Copy scan lines */
+ if(gdev_prn_copy_scan_lines(pdev, lnum, in, chunk_size) < 0)
+ break;
+
+ /* The number of lines to process */
+ if((num_lines = height - lnum) > bits_per_column)
+ num_lines = bits_per_column;
+
+ /* Test for all zero */
+ size = line_size * num_lines;
+ if(in[0] == 0 &&
+ !memcmp((char *)in, (char *)in + 1, size - 1)) {
+ lnum += bits_per_column;
+ skip ++;
+ continue;
+ }
+
+ /* Fill zero */
+ if(num_lines < bits_per_column) {
+ size = line_size * (bits_per_column - num_lines);
+ memset(in + line_size * num_lines, 0, size);
+ }
+ lnum += bits_per_column;
+
+ /* Vertical tab to the appropriate position. */
+ while(skip > 72) {
+ gp_fprintf(pdev->file, "\037%c", 16 + 72);
+ skip -= 72;
+ }
+ if(skip > 0) {
+ gp_fprintf(pdev->file, "\037%c", 16 + skip);
+ }
+
+ /* Transpose in blocks of 8 scan lines. */
+ for(y = 0; y < bytes_per_column; y ++) {
+ inp = in + line_size * 8 * y;
+ outp = out + y;
+ for(x = 0; x < line_size; x ++) {
+ pr201_transpose_8x8(inp, line_size,
+ outp, bytes_per_column);
+ inp ++;
+ outp += bits_per_column;
+ }
+ }
+
+ /* Remove trailing 0s. */
+ out_end = out + chunk_size - 1;
+ while(out_end >= out) {
+ if(*out_end)
+ break;
+ out_end --;
+ }
+ size = (out_end - out) + 1;
+ if((mod = size % bytes_per_column) != 0)
+ out_end += bytes_per_column - mod;
+
+ /* Remove leading 0s. */
+ out_beg = out;
+ while(out_beg <= out_end) {
+ if(*out_beg)
+ break;
+ out_beg ++;
+ }
+ out_beg -= (out_beg - out) % bytes_per_column;
+
+ /* Dot addressing */
+ gp_fprintf(pdev->file, "\033F%04d",
+ (out_beg - out) / bytes_per_column);
+
+ /* Dot graphics */
+ size = out_end - out_beg + 1;
+ if (check_mode(pdev->dname)==PR201){
+ gp_fprintf(pdev->file,"\033J%04d", size / bytes_per_column);
+ }else{
+ gp_fprintf(pdev->file,"\034bP,48,%04d.",
+ size / bytes_per_column);
+ }
+ gp_fwrite(out_beg, size, 1, pdev->file);
+
+ /* Carriage Return */
+ gp_fputc('\r', pdev->file);
+ skip = 1;
+ }
+
+ /* Form Feed */
+ gp_fputc('\f',pdev->file);
+ gp_fflush(pdev->file);
+
+ gs_free(pdev->memory->non_gc_memory, (char *)out,
+ bits_per_column, line_size, "pr201_print_page(out)");
+ gs_free(pdev->memory->non_gc_memory, (char *)in,
+ bits_per_column, line_size, "pr201_print_page(in)");
+
+ return 0;
+}
diff --git a/contrib/japanese/gdevrpdl.c b/contrib/japanese/gdevrpdl.c
new file mode 100644
index 00000000..dee81bb5
--- /dev/null
+++ b/contrib/japanese/gdevrpdl.c
@@ -0,0 +1,295 @@
+/* Copyright (C) 1999, 2000 Norihito Ohmori.
+
+ Ghostscript driver for Ricoh RPDL printer.
+
+ This software is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
+ to anyone for the consequences of using it or for whether it serves any
+ particular purpose or works at all, unless he says so in writing. Refer
+ to the GNU General Public License for full details.
+
+ Everyone is granted permission to copy, modify and redistribute
+ this software, but only under the conditions described in the GNU
+ General Public License. A copy of this license is supposed to have been
+ given to you along with this software so you can know your rights and
+ responsibilities. It should be in a file named COPYING. Among other
+ things, the copyright notice and this notice must be preserved on all
+ copies.
+ */
+
+/*$Id: gdevrpdl.c,v 1.1 2002/10/12 23:24:34 tillkamppeter Exp $ */
+/* Ricoh RPDL driver for Ghostscript */
+
+#include "gdevlprn.h"
+#include "gdevlips.h"
+#include <stdlib.h>
+
+#define DPI 240
+
+/* The device descriptors */
+static dev_proc_open_device(rpdl_open);
+static dev_proc_close_device(rpdl_close);
+static dev_proc_print_page_copies(rpdl_print_page_copies);
+static dev_proc_image_out(rpdl_image_out);
+static void rpdl_printer_initialize(gx_device_printer * pdev, gp_file * prn_stream, int num_copies);
+static void rpdl_paper_set(gx_device_printer * pdev, gp_file * prn_stream);
+
+static gx_device_procs rpdl_prn_procs =
+lprn_procs(rpdl_open, gdev_prn_output_page, rpdl_close);
+
+gx_device_lprn far_data gs_rpdl_device =
+lprn_device(gx_device_lprn, rpdl_prn_procs, "rpdl",
+ DPI, DPI, 0.0, 0.0, 0.0, 0.0, 1,
+ rpdl_print_page_copies, rpdl_image_out);
+
+#define ppdev ((gx_device_printer *)pdev)
+
+/* Open the printer. */
+static int
+rpdl_open(gx_device * pdev)
+{
+ int xdpi = pdev->x_pixels_per_inch;
+ int ydpi = pdev->y_pixels_per_inch;
+
+ /* Resolution Check */
+ if (xdpi != ydpi)
+ return_error(gs_error_rangecheck);
+ if (xdpi != 240 && xdpi != 400 && xdpi != 600)
+ return_error(gs_error_rangecheck);
+
+ return gdev_prn_open(pdev);
+}
+
+static int
+rpdl_close(gx_device * pdev)
+{
+ int code = gdev_prn_open_printer(pdev, 1);
+ if (code < 0)
+ return code;
+ if (ppdev->Duplex && (pdev->PageCount & 1)) {
+ gp_fprintf(ppdev->file, "\014"); /* Form Feed */
+ }
+ return gdev_prn_close(pdev);
+}
+
+static int
+rpdl_print_page_copies(gx_device_printer * pdev, gp_file * prn_stream, int num_coipes)
+{
+ gx_device_lprn *const lprn = (gx_device_lprn *) pdev;
+ int code = 0;
+ int bpl = gdev_mem_bytes_per_scan_line(pdev);
+ int maxY = lprn->BlockLine / lprn->nBh * lprn->nBh;
+
+ /* printer initialize */
+ if (pdev->PageCount == 0)
+ rpdl_printer_initialize(pdev, prn_stream, num_coipes);
+
+ if (!(lprn->CompBuf = gs_malloc(pdev->memory->non_gc_memory, bpl * 3 / 2 + 1, maxY, "rpdl_print_page_copies(CompBuf)")))
+ return_error(gs_error_VMerror);
+
+ lprn->NegativePrint = false; /* Not Support */
+
+ code = lprn_print_image(pdev, prn_stream);
+ if (code < 0)
+ return code;
+
+ gs_free(pdev->memory->non_gc_memory, lprn->CompBuf, bpl * 3 / 2 + 1, maxY, "rpdl_print_page_copies(CompBuf)");
+
+ gp_fprintf(prn_stream, "\014"); /* Form Feed */
+
+ return code;
+}
+
+/* Output data */
+static void
+rpdl_image_out(gx_device_printer * pdev, gp_file * prn_stream, int x, int y, int width, int height)
+{
+ gx_device_lprn *const lprn = (gx_device_lprn *) pdev;
+ int Len;
+
+ Len = lips_mode3format_encode(lprn->TmpBuf, lprn->CompBuf, width / 8 * height);
+
+ if (Len < width / 8 * height) {
+ if (pdev->x_pixels_per_inch == 240) {
+ /* Unit Size is 1/720 inch */
+ gp_fprintf(prn_stream, "\033\022G3,%d,%d,,4,%d,%d,%d@",
+ width, height, x * 3, y * 3, Len);
+ } else {
+ gp_fprintf(prn_stream, "\033\022G3,%d,%d,,4,%d,%d,%d@",
+ width, height, x, y, Len);
+ }
+ gp_fwrite(lprn->CompBuf, 1, Len, prn_stream);
+ } else { /* compression result is bad. So, raw data is used. */
+ if (pdev->x_pixels_per_inch == 240) {
+ /* Unit Size is 1/720 inch */
+ gp_fprintf(prn_stream, "\033\022G3,%d,%d,,,%d,%d@",
+ width, height, x * 3, y * 3);
+ gp_fwrite(lprn->TmpBuf, 1, width / 8 * height, prn_stream);
+ } else {
+ gp_fprintf(prn_stream, "\033\022G3,%d,%d,,,%d,%d@",
+ width, height, x, y);
+ gp_fwrite(lprn->TmpBuf, 1, width / 8 * height, prn_stream);
+ }
+ }
+}
+
+/* output printer initialize code */
+
+/* ------ Internal routines ------ */
+
+static void
+rpdl_printer_initialize(gx_device_printer * pdev, gp_file * prn_stream, int num_copies)
+{
+ gx_device_lprn *const lprn = (gx_device_lprn *) pdev;
+ int xdpi = (int) pdev->x_pixels_per_inch;
+
+ /* Initialize */
+ gp_fprintf(prn_stream, "\033\022!@R00\033 "); /* Change to RPDL Mode */
+ gp_fprintf(prn_stream, "\0334"); /* Graphic Mode kaijyo */
+ gp_fprintf(prn_stream, "\033\022YP,2 "); /* Select RPDL Mode */
+ gp_fprintf(prn_stream, "\033\022YB,2 "); /* Printable Area - Maximum */
+ gp_fprintf(prn_stream, "\033\022YK,1 "); /* Left Margin - 0 mm */
+ gp_fprintf(prn_stream, "\033\022YL,1 "); /* Top Margin - 0 mm */
+ gp_fprintf(prn_stream, "\033\022YM,1 "); /* 100 % */
+ gp_fprintf(prn_stream, "\033\022YQ,2 "); /* Page Length - Maximum */
+
+ /* Paper Size Selection */
+ rpdl_paper_set(pdev, prn_stream);
+
+ /* Option Setting */
+ /* Duplex Setting */
+ if (pdev->Duplex_set > 0) {
+ if (pdev->Duplex) {
+ gp_fprintf(prn_stream, "\033\02261,");
+ if (lprn->Tumble == 0)
+ gp_fprintf(prn_stream, "\033\022YA01,2 ");
+ else
+ gp_fprintf(prn_stream, "\033\022YA01,1 ");
+ } else
+ gp_fprintf(prn_stream, "\033\02260,");
+ }
+
+ /* Resolution and Unit Setting */
+ /* Resolution Seting */
+ switch(xdpi) {
+ case 600:
+ gp_fprintf(prn_stream, "\033\022YA04,3 ");
+ break;
+ case 400:
+ gp_fprintf(prn_stream, "\033\022YA04,1 ");
+ break;
+ default: /* 240 dpi */
+ gp_fprintf(prn_stream, "\033\022YA04,2 ");
+ break;
+ }
+
+ /* Unit Setting */
+ /* Graphics Unit */
+ switch(xdpi) {
+ case 600:
+ gp_fprintf(prn_stream, "\033\022YW,3 ");
+ break;
+ case 400:
+ gp_fprintf(prn_stream, "\033\022YW,1 ");
+ break;
+ default: /* 240 dpi */
+ gp_fprintf(prn_stream, "\033\022YW,2 ");
+ break;
+ }
+
+ /* Spacing Unit */
+ switch(xdpi) {
+ case 600:
+ gp_fprintf(prn_stream, "\033\022Q5 ");
+ break;
+ case 400:
+ gp_fprintf(prn_stream, "\033\022Q4 ");
+ break;
+ default: /* 240 dpi */
+ gp_fprintf(prn_stream, "\033\022Q0 ");
+ break;
+ }
+
+ /* Cartecian Unit */
+ switch(xdpi) {
+ case 600:
+ gp_fprintf(prn_stream, "\033\022#4 ");
+ break;
+ case 400:
+ gp_fprintf(prn_stream, "\033\022#2 ");
+ break;
+ }
+
+ /* Paper Setting */
+ if (pdev->MediaSize[0] > pdev->MediaSize[1])
+ gp_fprintf(prn_stream, "\033\022D2 "); /* landscape */
+ else
+ gp_fprintf(prn_stream, "\033\022D1 "); /* portrait */
+
+ /* Number of Copies */
+ gp_fprintf(prn_stream, "\033\022N%d ", num_copies);
+}
+
+static void
+rpdl_paper_set(gx_device_printer * pdev, gp_file * prn_stream)
+{
+ int width, height, w, h;
+
+ /* Page size match tolerance in points */
+ #define TOL 5
+
+ width = pdev->MediaSize[0];
+ height = pdev->MediaSize[1];
+
+ if (width < height) {
+ w = width;
+ h = height;
+ } else {
+ w = height;
+ h = width;
+ }
+
+ if (abs(w - 1684) <= TOL && abs(h - 2380) <= TOL) /* A1 */
+ gp_fprintf(prn_stream, "\033\02251@A1R\033 ");
+ else if (abs(w - 1190) <= TOL && abs(h - 1684) <= TOL) { /* A2 */
+ gp_fprintf(prn_stream, "\033\02251@A2R\033 ");
+ gp_fprintf(prn_stream, "\033\02251@A2\033 ");
+ } else if (abs(w - 842) <= TOL && abs(h - 1190) <= TOL) { /* A3 */
+ gp_fprintf(prn_stream, "\033\02251@A3R\033 ");
+ gp_fprintf(prn_stream, "\033\02251@A3\033 ");
+ } else if (abs(w - 595) <= TOL && abs(h - 842) <= TOL) { /* A4 */
+ gp_fprintf(prn_stream, "\033\02251@A4R\033 ");
+ gp_fprintf(prn_stream, "\033\02251@A4\033 ");
+ } else if (abs(w - 421) <= TOL && abs(h - 595) <= TOL) { /* A5 */
+ gp_fprintf(prn_stream, "\033\02251@A5R\033 ");
+ gp_fprintf(prn_stream, "\033\02251@A5\033 ");
+ } else if (abs(w - 297) <= TOL && abs(h - 421) <= TOL) { /* A6 */
+ gp_fprintf(prn_stream, "\033\02251@A6R\033 ");
+ gp_fprintf(prn_stream, "\033\02251@A6\033 ");
+ } else if (abs(w - 729) <= TOL && abs(h - 1032) <= TOL) { /* B4 */
+ gp_fprintf(prn_stream, "\033\02251@B4R\033 ");
+ gp_fprintf(prn_stream, "\033\02251@B4\033 ");
+ } else if (abs(w - 516) <= TOL && abs(h - 729) <= TOL) { /* B5 */
+ gp_fprintf(prn_stream, "\033\02251@B5R\033 ");
+ gp_fprintf(prn_stream, "\033\02251@B5\033 ");
+ } else if (abs(w - 363) <= TOL && abs(h - 516) <= TOL) { /* B6 */
+ gp_fprintf(prn_stream, "\033\02251@A6R\033 ");
+ gp_fprintf(prn_stream, "\033\02251@A6\033 ");
+ } else if (abs(w - 612) <= TOL && abs(h - 792) <= TOL) { /* Letter */
+ gp_fprintf(prn_stream, "\033\02251@LTR\033 ");
+ gp_fprintf(prn_stream, "\033\02251@LT\033 ");
+ } else if (abs(w - 612) <= TOL && abs(h - 1008) <= TOL) { /* Legal */
+ gp_fprintf(prn_stream, "\033\02251@LGR\033 ");
+ gp_fprintf(prn_stream, "\033\02251@LG\033 ");
+ } else if (abs(w - 396) <= TOL && abs(h - 612) <= TOL) { /* Half Letter */
+ gp_fprintf(prn_stream, "\033\02251@HLR\033 ");
+ gp_fprintf(prn_stream, "\033\02251@HLT\033 ");
+ } else if (abs(w - 792) <= TOL && abs(h - 1224) <= TOL) { /* Ledger */
+ gp_fprintf(prn_stream, "\033\02251@DLT\033 ");
+ gp_fprintf(prn_stream, "\033\02251@DLR\033 ");
+ } else { /* Free Size (mm) */
+ gp_fprintf(prn_stream, "\033\022?5%d,%d\033 ",
+ (int)((w * 25.4) / 72),
+ (int)((h * 25.4) / 72));
+ }
+}