diff options
author | Thomas Deutschmann <whissi@gentoo.org> | 2019-10-15 12:24:12 +0200 |
---|---|---|
committer | Thomas Deutschmann <whissi@gentoo.org> | 2020-08-13 11:26:55 +0200 |
commit | e088156d5b620e5e639580dacf85c6dc13823c74 (patch) | |
tree | 57f5c025e203279944da512166c20bc0521d8ccd /contrib/japanese | |
download | ghostscript-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')
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 & ESC/Page & NPDL</TITLE> +<!-- $Id: Lips.htm $ --> +</HEAD> +<BODY lang="ja"> + +<H1>LIPS & ESC/Page & 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/"><URI:http://www.bukka.p.chiba-u.ac.jp/~ohmori/></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"><URI:mailto:ohmori@p.chiba-u.ac.jp></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 >>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 >>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 <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"0"$B$^$?$O(B"10"$B!A(B"17"$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><605qpt$f50$1@kuma.fastnet.or.jp>$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/"><URI:http://www.dcs.ed.ac.uk/home/ajcd/psutils/></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/"><URI:http://www.dcs.ed.ac.uk/home/ajcd/psutils/></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> > <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> > <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> > <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> +<< +/PageOffset [0.0 0.0] +>> 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> +<< +/PageOffset [8.5 -4.25] +>> 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"><URI:mailto:ohmori@p.chiba-u.ac.jp></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"), + µweave))< 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)); + } +} |