]> git.pld-linux.org Git - packages/xv.git/commitdiff
15ef57d3c831c615082697db964731fc xv-3.10a-FLmask.v2.1.patch
authorJan Rękorajski <baggins@pld-linux.org>
Fri, 15 Oct 1999 15:17:43 +0000 (15:17 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
c8cbe14db6e2104ed4eb5330cdaba420  xv-3.10a-png-1.2d.tar.gz
7a26b6d62ad59e14cce049697f430a0f  xv-3.10a.JPEG-patch
305f2f0273368bb6e029c3f212a14249  xv-3.10a.TIFF-patch
2d4fbeec1561304362781cc8e2f7f72d  xv-3.10a.tar.gz
03ebab2b331322f07f50b208c251804c  xv-PLD.patch
75c44ef08903167ef19a89a8e9c4fd74  xv-croppad.patch
bc81180d9e9dce234d092ff4334cafc0  xv-deepcolor.patch
a97c5823b4e1b05581afd21781276353  xv-exceed_grab_patch.txt
476a786f60fee70812a4b59588db2049  xv-gifpatch
fd9b9e735a1ed68e3792d904f1df422a  xv-grabpatch
04f2f162a2f66c8eca6bd6e2e1e9777d  xv-longname.patch
acc754bea43bf957c37d2df293ed41e7  xv-mp-tiff-patch
f057517331a6cb9b231c828d57514295  xv-pdf.patch
672f2f82c94828d91b6929ed87139937  xv-png-fix2.patch
4bc978d266bf1af9e29e8f21fc21e9d7  xv-vispatch
05fd4380bddf77b94edb6f193ea6a79a  xv-xpm.patch
af7614a734c6576499044234f7130093  xv.desktop
78dce344e3e85faf01e1f13014aa659b  xvman310a-html.tar.gz

Changed files:
    xv-FLmask.v2.1.patch -> 1.1
    xv-JPEG.patch -> 1.1
    xv-PLD.patch -> 1.1
    xv-TIFF.patch -> 1.1
    xv-croppad.patch -> 1.1
    xv-deepcolor.patch -> 1.1
    xv-exceed_grab_patch.txt -> 1.1
    xv-gifpatch -> 1.1
    xv-grabpatch -> 1.1
    xv-longname.patch -> 1.1
    xv-mp-tiff-patch -> 1.1
    xv-pdf.patch -> 1.1
    xv-png-fix2.patch -> 1.1
    xv-vispatch -> 1.1
    xv.desktop -> 1.1

15 files changed:
xv-FLmask.v2.1.patch [new file with mode: 0644]
xv-JPEG.patch [new file with mode: 0644]
xv-PLD.patch [new file with mode: 0644]
xv-TIFF.patch [new file with mode: 0644]
xv-croppad.patch [new file with mode: 0644]
xv-deepcolor.patch [new file with mode: 0644]
xv-exceed_grab_patch.txt [new file with mode: 0644]
xv-gifpatch [new file with mode: 0644]
xv-grabpatch [new file with mode: 0644]
xv-longname.patch [new file with mode: 0644]
xv-mp-tiff-patch [new file with mode: 0644]
xv-pdf.patch [new file with mode: 0644]
xv-png-fix2.patch [new file with mode: 0644]
xv-vispatch [new file with mode: 0644]
xv.desktop [new file with mode: 0644]

diff --git a/xv-FLmask.v2.1.patch b/xv-FLmask.v2.1.patch
new file mode 100644 (file)
index 0000000..0abd444
--- /dev/null
@@ -0,0 +1,2728 @@
+diff -c --new-file xv-3.10a.org/00_README xv+flmask/00_README
+*** xv-3.10a.org/00_README     Sun Sep 14 02:29:10 1997
+--- xv+flmask/00_README        Sun Sep 14 03:18:49 1997
+***************
+*** 0 ****
+--- 1,101 ----
++ 
++             XV+FLmask version 2.1.
++ 
++                   97.09.14.
++           matu@alice.lb.u-tokai.ac.jp.
++                   ¤Þ¤Ä¤à¤é¤·¤²¤ë¡£¡£
++ 
++ 
++ [¤³¤Î¥Ñ¥Ã¥Á¤Ï²¿?]
++      ¤Ê¤ó¤À¤í¤¦¡£¤Ê¤Ë¤«¤·¤é¡£
++      ¤­¤Ã¤Èµ¤¤Þ¤°¤ì¤Çºî¤é¤ì¤¿¤â¤Î¤Ç¤¹¡£(^^)
++ 
++ 
++ [¤³¤Î¥¢¡¼¥«¥¤¥Ö¤¬´Þ¤à¤â¤Î]
++      README                  ¤³¤Î¥Õ¥¡¥¤¥ë¡£
++      XV+FLmask.v2.1.patch    ¥Ñ¥Ã¥Á¡£
++ 
++ 
++ [ºî¤êÊý]
++      (1)¤Þ¤º¡¢ºàÎÁ¤ò½¸¤á¤Þ¤·¤ç¤¦¡£
++              xv-3.10a.tar.gz
++              libjpeg-6a.tar.gz
++              xv310a-jp-extension-rev5.3.3.tar.gz
++ 
++      (2)¤³¤ì¤é¤Ë¡¢
++              XV+FLmask.v2.1.patch
++         ¤ò²Ã¤¨¤Æ¤°¤Ä¤°¤Ä¼Ñ¹þ¤ß¤Þ¤·¤ç¤¦¡£(jvimÉ÷¡£)
++ 
++      (3)°Ê¾å¡£(¤³¤ì¤À¤±¡Ë
++ 
++ 
++ [»ÈÍѤˤ¢¤¿¤Ã¤Æ]
++      FLmask menu ¤È Mask button ¤¬Áý¤¨¤Æ¤¤¤ë¤À¤±¤Ç¤¹¡£
++      Æñ¤·¤¤¤È¤³¤í¤Ï̵¤¤¤Ç¤·¤ç¤¦¡£
++      Mask button ¤Ï¾å¼ê¤Ë»È¤¦¤ÈÊØÍø¤Ç¤¹¡£
++ 
++ 
++ [·Ù¹ð]
++      ¤³¤Î patch ¤Ï¤¢¤Ê¤¿¼«¿È¤ÎÀÕǤ¤Î¤â¤È¤Ë»ÈÍѤ·¤Æ²¼
++      ¤µ¤¤¡£¤â¤·¡¢¤³¤Î patch ¤ò»ÈÍѤ¹¤ë»ö¤Ë¤è¤Ã¤Æ¡¢¤¢
++      ¤Ê¤¿¤Î HDD ¤Î data ¤¬Á´Éô¾Ã¤¨¤Æ¤·¤Þ¤Ã¤¿¤ê¡¢¥Ï¡¼
++      ¥É¥¦¥§¥¢¤¬¥À¥á¡¼¥¸¤ò¼õ¤±¤¿¤ê¡¢¤¢¤Ê¤¿¤Î¸¤¤¬»à¤ó¤Ç
++      ¤·¤Þ¤Ã¤Æ¤â¡¢ÅöÊý¤Ï°ìÀÚ´ØÃΤ·¤Þ¤»¤ó¡£(mgettyÉ÷¡£)
++ 
++ 
++ [Æ°ºî´Ä¶­]
++      ³«È¯´Ä¶­¤Ï Linux-2.0.30 ¤Ç¤¹¤¬¡¢¤¿¤Ö¤ó original 
++      ¤Î xv ¤¬Æ°¤¯´Ä¶­¤Ç¤¢¤ì¤ÐÌäÂê̵¤¯Æ°¤¯¤Ç¤·¤ç¤¦¡£
++      (¤¿¤Ö¤ó)
++ 
++ 
++ [¤½¤Î¾]
++      ¤³¤Î¥Ñ¥Ã¥Á¤Ï¥·¥§¥¢¥¦¥¨¥¢¤Ç¤¹¡£
++      500±ßÌé¡£ÉÏ˳¤Ê³ØÀ¸¤Ê¤Î¤Ç¡¢free ¤Ë¤·¤Þ¤»¤ó¤Ç¤·¤¿¡£
++      Æ±¤¸¤¯À¸³è¤Î¶ì¤·¤¤Êý¤Ï¡¢ÌȽüÃפ·¤Þ¤¹¡£¡£
++      ¤½¤Î¾¡¢ software ¤Î¼«Í³¤ÊÇÛÉÕ¤¬¤¦¤ó¤¿¤é¤«¤ó¤¿¤é
++      ¤Ç¤É¤¦¤È¤«¤³¤¦¤È¤«¸À¤¦¿Í¤âʧ¤ï¤Ê¤¯¤Æ¤âÎɤ¤¤Ç¤¹¡£¡£
++                                                 (^^;;;
++ 
++      ¤¤¤Ä¤ÎÆü¤«¤¦¤Á¤Ë¤âP¤«¤é»Ï¤Þ¤ëCPU¤òƳÆþ¤¹¤ë»ö¤òÌ´
++      ¸«¤Æ¡£¡£(K¤Ç¤â¤è¤¤¡£D¤Ï¤â¤¦¤¤¤ä¡£¡£)
++ 
++      ËÜÅö¤Ë»Ùʧ¤Ã¤Æ¤¯¤ì¤ëÊý¤Ï
++              E-mail: matu@alice.lb.u-tokai.ac.jp
++      ¤Þ¤Ç Mail ¤·¤Æ²¼¤µ¤¤¡£(^^)
++ 
++ 
++      ÉÔ¶ñ¹ç¤ä, Í×µá, ´¶Áۤʤɤʤó¤Ç¤â, ¾å¤Î¥¢¥É¥ì¥¹¤Þ¤Ç
++      ¤ª´ê¤¤¤·¤Þ¤¹¡£
++      (v2.0 ¤Î»þ mail Á÷¤Ã¤Æ²¼¤µ¤Ã¤¿Âô»³¤ÎÊý¡¢Í­Æñ¤¦¤´¤¶
++      ¤¤¤Þ¤¹¡£¸æ°Õ¸«È¿±Ç¤Ç¤­¤ë¤è¤¦ÅØÎϤ·¤Æ¤ß¤Þ¤¹¡£¡£)
++ 
++ 
++      ¤Þ¤¿¡ÖXV+FLmask Home Page.¡×
++      http://www.lb.u-tokai.ac.jp/~matu/flmask/
++      ¤Ë¤Æ Version UP ¤Î¤ªÃΤ餻Åù¤¬¤¢¤ë¤«¤âÃΤì¤Þ¤»¤ó¡£
++ 
++ 
++ [¼Õ¼­]
++      ¤³¤Î¥Ñ¥Ã¥Á¥­¥Ã¥È¤òºîÀ®¤¹¤ë¤Ë¤¢¤¿¤Ã¤Æ¡¢°Ê²¼¤ÎÊý¡¹
++      ¤Î¸æ¶¨ÎϤòÆÀ¤Þ¤·¤¿¡£ ¿´¤è¤ê´¶¼ÕÃפ·¤Þ¤¹¡£
++ 
++        o Gmask ¤Îºî¼Ô¤Î¸Å¹Â ¹ä ÍÍ¡£
++        o ¤¢¤Î¿Í¡£
++        o ¤³¤Î¿Í¡£
++        o ¤½¤Î¾¡£
++ 
++ 
++ --
++ o `XV'¤Ï, X Window System¾å¤Î²èÁüɽ¼¨¥×¥í¥°¥é¥à¤Ç¤¹.
++    XV is Copyright 1989, 1994 by John Bradley.
++    X Window System is a trademark of X Consortium, Inc.
++ o MEKOMASK ¤Ï ¸Þ½½Íò ÍÎÆ󤵤óºî¤Î¥Þ¥¹¥¯¥Ä¡¼¥ë¡£
++ o WINMASK  ¤Ï ³°Â¼ ¹â¾Ï¤µ¤óºî¤Î¥Þ¥¹¥¯¥Ä¡¼¥ë¡£
++ o FLMASK   ¤Ï £Çenesis ¤µ¤óºî¤Î¥Þ¥¹¥¯¥Ä¡¼¥ë¡£
++ o CPMASK   ¤Ï ÆâÌ¤ó¤È£Çenesis ¤µ¤ó¹çºî¤Î¥Þ¥¹¥¯µ»Ë¡¡£
++ o Gmask    ¤Ï ¸Å¹Â¹ä¤µ¤ó¤Î¥Þ¥¹¥¯¥Ä¡¼¥ë¡£
++ 
++ (jp-extensionÉ÷¤Î README)
++ 
++ 
+diff -c --new-file xv-3.10a.org/CPMASK xv+flmask/CPMASK
+*** xv-3.10a.org/CPMASK        Sun Sep 14 02:29:10 1997
+--- xv+flmask/CPMASK   Sun Sep 14 03:18:49 1997
+***************
+*** 0 ****
+--- 1,21 ----
++ [CPMASK¤Ë¤Ä¤¤¤Æ]
++      ¤³¤Î patch ¤Ë¤è¤Ã¤Æ¤«¤±¤é¤ì¤¿ CPmask ¤Ï FLMASK ¥×¥í¥°¥é¥àÅù
++      ¤Ç¤«¤±¤¿¤â¤Î¤È¤Ï°ã¤¤file ¤Ë passwd ¤Î¾ðÊó¤ò»Ä¤·¤Þ¤»¤ó¡£
++ 
++      xv ¤Ï jpeg file ¤ò save ¤¹¤ë»þ¤Ë
++      ¡ÖCREATOR: XV Version 3.10a Rev: 12/29/94 Quality = 75, 
++        Smoothing = 0¡×
++      ¤È¤¤¤¦¤è¤¦¤Ê¾ðÊó¤ò²Ã¤¨¤Þ¤¹¡£
++ 
++      CPmask ¤Ï¤³¤ÎÉôʬ¤Ë¤³¤Ã¤½¤êpasswd¾ðÊó¤ò½ñ¤­¹þ¤à¤Î¤Ç¤¹¤¬¡¢¤³
++      ¤ì¤¬¸¶°ø¤Ç CPmask ¤Î¤«¤±¤é¤ì¤¿ file ¤ò xv ¤ÇÆɤ߹þ¤ó¤Ç¤½¤Î
++      ¤Þ¤Þ save ¤·¤Ê¤ª¤¹¤È passwd ¤òÄ´¤Ù¤ë tool ¤È¤«¤ÇȽÄê¤Ç¤­¤Ê¤¤
++      file ¤¬½ÐÍè¾å¤¬¤ë¤ï¤±¤Ç¤¹¡£
++ 
++      ¤½¤Î¤¿¤á¤Ë¡¢Á°¤Î version ¤Ç¤Ï CPmask ¤¬¤«¤±¤é¤ì¤Æ¤¤¤Ê¤¤ file
++      ¤Î¾ì¹ç¤Ï error pop up ¤¹¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤¿¤Î¤Ç¤¹¤¬¡¢ÉÔÊؤǤ¢¤ë
++      ¤È¤Î mail ¤òÂô»³¼õ¤±¤¿¤Î¤ÇÊѤ¨¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£
++ 
++      ¤Ç¤¹¤«¤é¡¢¤³¤Î patch ¤Ç¤Ï¿·¤·¤¯ CPmask ¤ò¤«¤±¤º¤Ë¡¢¤Ï¤º¤¹¤À
++      ¤±¤Ë¤·¤Æ²¼¤µ¤¤¡£
++ 
+diff -c --new-file xv-3.10a.org/Makefile xv+flmask/Makefile
+*** xv-3.10a.org/Makefile      Sun Sep 14 02:29:10 1997
+--- xv+flmask/Makefile Sun Sep 14 03:18:49 1997
+***************
+*** 209,214 ****
+--- 209,215 ----
+  
+  OBJS =       xv.o xvevent.o xvroot.o xvmisc.o xvimage.o xvcolor.o xvsmooth.o \
+       xv24to8.o xvgif.o xvpm.o xvinfo.o xvctrl.o xvscrl.o xvalg.o \
++      xvmask.o xvcpmask.o xvmeko.o \
+       xvgifwr.o xvdir.o xvbutt.o xvpbm.o xvxbm.o xvgam.o xvbmp.o \
+       xvdial.o xvgraf.o xvsunras.o xvjpeg.o xvps.o xvpopup.o xvdflt.o \
+       xvtiff.o xvtiffwr.o xvpds.o xvrle.o xviris.o xvgrab.o vprintf.o \
+diff -c --new-file xv-3.10a.org/Imakefile xv+flmask/Imakefile
+*** xv-3.10a.org/Imakefile     Sun Sep 14 02:29:10 1997
+--- xv+flmask/Imakefile        Sun Sep 14 03:18:49 1997
+***************
+*** 160,165 ****
+--- 160,166 ----
+  
+  SRCS1 =      xv.c xvevent.c xvroot.c xvmisc.c xvimage.c xvcolor.c xvsmooth.c \
+       xv24to8.c xvgif.c xvpm.c xvinfo.c xvctrl.c xvscrl.c xvalg.c \
++      xvmask.c xvcpmask.c xvmeko.c \
+       xvgifwr.c xvdir.c xvbutt.c xvpbm.c xvxbm.c xvgam.c xvbmp.c \
+       xvdial.c xvgraf.c xvsunras.c xvjpeg.c xvps.c xvpopup.c xvdflt.c \
+       xvtiff.c xvtiffwr.c xvpds.c xvrle.c xviris.c xvgrab.c vprintf.c \
+***************
+*** 170,175 ****
+--- 171,177 ----
+  
+  OBJS1 =      xv.o xvevent.o xvroot.o xvmisc.o xvimage.o xvcolor.o xvsmooth.o \
+       xv24to8.o xvgif.o xvpm.o xvinfo.o xvctrl.o xvscrl.o xvalg.o \
++      xvmask.o xvcpmask.o xvmeko.o \
+       xvgifwr.o xvdir.o xvbutt.o xvpbm.o xvxbm.o xvgam.o xvbmp.o \
+       xvdial.o xvgraf.o xvsunras.o xvjpeg.o xvps.o xvpopup.o xvdflt.o \
+       xvtiff.o xvtiffwr.o xvpds.o xvrle.o xviris.o xvgrab.o vprintf.o \
+diff -c --new-file xv-3.10a.org/xv.h xv+flmask/xv.h
+*** xv-3.10a.org/xv.h  Sun Sep 14 02:29:12 1997
+--- xv+flmask/xv.h     Sun Sep 14 06:50:03 1997
+***************
+*** 8,15 ****
+  #include "config.h"
+  
+  
+! #define REVDATE   "Version 3.10a  Rev: 12/29/94 (PNG patch 1.2)"
+! #define VERSTR    "3.10a(PNG)"
+  
+  /*
+   * uncomment the following, and modify for your site, but only if you've
+--- 8,16 ----
+  #include "config.h"
+  
+  
+! #define REVDATE   "Version 3.10a+FLmask  Rev: 12/29/94"
+! #define VERSTR    "3.10a+FLmask"
+! 
+  
+  /*
+   * uncomment the following, and modify for your site, but only if you've
+***************
+*** 415,424 ****
+  #define BCROP    19
+  #define BUNCROP  20
+  #define BACROP   21
+! #define BABOUT   22
+! #define BQUIT    23
+! #define BXV      24
+! #define NBUTTS   25    /* # of butts */
+  
+  
+  /* buttons in the load/save window */
+--- 416,426 ----
+  #define BCROP    19
+  #define BUNCROP  20
+  #define BACROP   21
+! #define BMASKS   22
+! #define BABOUT   23
+! #define BQUIT    24
+! #define BXV      25
+! #define NBUTTS   26    /* # of butts */
+  
+  
+  /* buttons in the load/save window */
+***************
+*** 719,740 ****
+  #define PIC24 CONV24_24BIT
+  
+  /* indicies into algMB */
+  #define ALG_NONE      0
+! #define ALG_SEP1      1  /* separator */
+! #define ALG_BLUR      2
+! #define ALG_SHARPEN   3
+! #define ALG_EDGE      4
+! #define ALG_TINF      5
+! #define ALG_OIL       6
+! #define ALG_BLEND     7
+! #define ALG_ROTATE    8
+! #define ALG_ROTATECLR 9
+  #define ALG_PIXEL     10
+  #define ALG_SPREAD    11
+  #define ALG_MEDIAN    12
+  #define ALG_MAX       13
+  
+- 
+  /* indicies into sizeMB */
+  #define SZMB_NORM     0
+  #define SZMB_MAXPIC   1
+--- 721,753 ----
+  #define PIC24 CONV24_24BIT
+  
+  /* indicies into algMB */
++ #define MSK_NONE      0
++ #define MSK_SEP1      1  /* separator */
++ #define MSK_FLMASK    2 
++ #define MSK_Q0MASK    3 
++ #define MSK_WIN            4 
++ #define MSK_MEKO      5 
++ #define MSK_CPMASK    6 
++ #define MSK_RGB            7 
++ #define MSK_BITREV    8 
++ #define MSK_COLREV    9 
++ #define MSK_MAX            10
++                       
+  #define ALG_NONE      0
+! #define ALG_SEP1      1   /* separator */
+! #define ALG_BLUR      2 
+! #define ALG_SHARPEN   3 
+! #define ALG_EDGE      4 
+! #define ALG_TINF      5 
+! #define ALG_OIL       6 
+! #define ALG_BLEND     7 
+! #define ALG_ROTATE    8 
+! #define ALG_ROTATECLR 9 
+  #define ALG_PIXEL     10
+  #define ALG_SPREAD    11
+  #define ALG_MEDIAN    12
+  #define ALG_MAX       13
+  
+  /* indicies into sizeMB */
+  #define SZMB_NORM     0
+  #define SZMB_MAXPIC   1
+***************
+*** 1209,1214 ****
+--- 1222,1228 ----
+  WHERE MBUTT         dispMB;              /* display mode menu button */
+  WHERE MBUTT         conv24MB;            /* 24-to-8 conversion mode mbutt */
+  WHERE MBUTT         algMB;               /* Algorithms mbutt */
++ WHERE MBUTT         flmaskMB;            /* FLmask mbutt */
+  WHERE MBUTT         rootMB;
+  WHERE MBUTT         sizeMB;
+  WHERE MBUTT         windowMB;
+diff -c --new-file xv-3.10a.org/xvalg.c xv+flmask/xvalg.c
+*** xv-3.10a.org/xvalg.c       Fri Dec 23 04:12:20 1994
+--- xv+flmask/xvalg.c  Wed Sep  3 12:49:55 1997
+***************
+*** 26,32 ****
+  static void Pixelize       PARM((void));
+  static void Spread         PARM((void));
+  static void MedianFilter   PARM((void));
+! static void saveOrigPic    PARM((void));
+  
+  static void doBlurConvolv  PARM((byte *,int,int,byte *, int,int,int,int, int));
+  static void doSharpConvolv PARM((byte *,int,int,byte *, int,int,int,int, int));
+--- 26,33 ----
+  static void Pixelize       PARM((void));
+  static void Spread         PARM((void));
+  static void MedianFilter   PARM((void));
+! 
+! void saveOrigPic    PARM((void));
+  
+  static void doBlurConvolv  PARM((byte *,int,int,byte *, int,int,int,int, int));
+  static void doSharpConvolv PARM((byte *,int,int,byte *, int,int,int,int, int));
+***************
+*** 41,47 ****
+  static void doSpread       PARM((byte *,int,int,byte *, int,int,int,int, 
+                                int, int));
+  static void doMedianFilter PARM((byte *,int,int,byte *, int,int,int,int, int));
+- 
+  static void add2bb         PARM((int *, int *, int *, int *, int, int));
+  static void rotXfer        PARM((int, int, double *,double *,
+                                double,double, double));
+--- 42,47 ----
+***************
+*** 50,62 ****
+  static void intsort        PARM((int *, int));
+  #endif
+  
+! static int  start24bitAlg  PARM((byte **, byte **));
+! static void end24bitAlg    PARM((byte *, byte *));
+! 
+! static void printUTime     PARM((char *));
+  
+! static byte *origPic = (byte *) NULL;
+! static int  origPicType;
+  static byte origrmap[256], origgmap[256], origbmap[256];
+  
+  
+--- 50,61 ----
+  static void intsort        PARM((int *, int));
+  #endif
+  
+! int  start24bitAlg  PARM((byte **, byte **));
+! void end24bitAlg    PARM((byte *, byte *));
+! void printUTime     PARM((char *));
+  
+! byte *origPic = (byte *) NULL;
+! int  origPicType;
+  static byte origrmap[256], origgmap[256], origbmap[256];
+  
+  
+***************
+*** 69,75 ****
+  
+  
+  /***************************/
+! static void printUTime(str)
+       char *str;
+  {
+  #ifdef TIMING_TEST
+--- 68,74 ----
+  
+  
+  /***************************/
+! void printUTime(str)
+       char *str;
+  {
+  #ifdef TIMING_TEST
+***************
+*** 82,91 ****
+  }
+  
+  
+- 
+- 
+- 
+- 
+  /************************************************************/
+  void AlgInit()
+  {
+--- 81,86 ----
+***************
+*** 96,101 ****
+--- 91,97 ----
+    origPic = (byte *) NULL;
+  
+    algMB.dim[ALG_NONE] = 1;    /* can't undo when init'ed already */
++   flmaskMB.dim[MSK_NONE]=1;
+  }
+  
+  
+***************
+*** 107,127 ****
+       algorithm */
+  
+    switch (anum) {
+!   case ALG_NONE:      NoAlg();        break;
+!   case ALG_BLUR:      Blur();         break;
+!   case ALG_SHARPEN:   Sharpen();      break;
+!   case ALG_EDGE:      EdgeDetect();   break;
+!   case ALG_TINF:      TinFoil();      break;
+!   case ALG_OIL:       OilPaint();     break;
+!   case ALG_BLEND:     Blend();        break;
+!   case ALG_ROTATE:    FineRotate(0);  break;
+!   case ALG_ROTATECLR: FineRotate(1);  break;
+!   case ALG_PIXEL:     Pixelize();     break;
+!   case ALG_SPREAD:    Spread();       break;
+!   case ALG_MEDIAN:    MedianFilter(); break;
+    }
+  
+    algMB.dim[ALG_NONE] = (origPic == (byte *) NULL);
+  }
+  
+  
+--- 103,124 ----
+       algorithm */
+  
+    switch (anum) {
+!   case ALG_NONE:      NoAlg();               break;
+!   case ALG_BLUR:      Blur();                break;
+!   case ALG_SHARPEN:   Sharpen();             break;
+!   case ALG_EDGE:      EdgeDetect();          break;
+!   case ALG_TINF:      TinFoil();             break;
+!   case ALG_OIL:       OilPaint();            break;
+!   case ALG_BLEND:     Blend();               break;
+!   case ALG_ROTATE:    FineRotate(0);         break;
+!   case ALG_ROTATECLR: FineRotate(1);         break;
+!   case ALG_PIXEL:     Pixelize();            break;
+!   case ALG_SPREAD:    Spread();              break;
+!   case ALG_MEDIAN:    MedianFilter();        break;
+    }
+  
+    algMB.dim[ALG_NONE] = (origPic == (byte *) NULL);
++   flmaskMB.dim[MSK_NONE] = (origPic == (byte *) NULL);
+  }
+  
+  
+***************
+*** 1567,1573 ****
+  
+  
+  /***********************************************/
+! static int start24bitAlg(pic24, tmpPic)
+       byte **pic24, **tmpPic;
+  {
+    /* generates a 24-bit version of 'pic', if neccessary, and also mallocs
+--- 1564,1570 ----
+  
+  
+  /***********************************************/
+! int start24bitAlg(pic24, tmpPic)
+       byte **pic24, **tmpPic;
+  {
+    /* generates a 24-bit version of 'pic', if neccessary, and also mallocs
+***************
+*** 1600,1606 ****
+  
+  
+  /***********************************************/
+! static void end24bitAlg(pic24, outPic)
+       byte *pic24, *outPic;
+  {
+    /* given pic24, and outPic, which has the new 24-bit image, installs it */
+--- 1597,1603 ----
+  
+  
+  /***********************************************/
+! void end24bitAlg(pic24, outPic)
+       byte *pic24, *outPic;
+  {
+    /* given pic24, and outPic, which has the new 24-bit image, installs it */
+***************
+*** 1629,1635 ****
+  
+  
+  /************************/
+! static void saveOrigPic()
+  {
+    /* saves original picture into origPic, if it hasn't already been done.
+       This allows us to undo algorithms...  
+--- 1626,1632 ----
+  
+  
+  /************************/
+! void saveOrigPic()
+  {
+    /* saves original picture into origPic, if it hasn't already been done.
+       This allows us to undo algorithms...  
+***************
+*** 1669,1674 ****
+      pic = NULL;
+    }
+  }
+- 
+- 
+  
+--- 1666,1669 ----
+diff -c --new-file xv-3.10a.org/xvcpmask.c xv+flmask/xvcpmask.c
+*** xv-3.10a.org/xvcpmask.c    Thu Jan  1 09:00:00 1970
+--- xv+flmask/xvcpmask.c       Sun Sep 14 07:17:54 1997
+***************
+*** 0 ****
+--- 1,108 ----
++ #include <sys/types.h>
++ #include <sys/stat.h>
++ #include <fcntl.h>
++ #include <stdio.h>
++ #include <stdlib.h>
++ #include <string.h>
++ 
++ #include "xv.h"
++ 
++ typedef struct { int n; char flg; } CPS;
++ 
++ static unsigned char CPTbl[] = {
++     0x10, 0x17, 0x13, 0x15, 0x09,
++     0x08, 0x0a, 0x14, 0x06, 0x05,
++     0x16, 0x02, 0x0d, 0x03, 0x01,
++     0x04, 0x19, 0x0c, 0x0f, 0x0e,
++     0x12, 0x07, 0x0b, 0x18, 0x11, 0x1a
++ };
++ 
++ void cpcode(char *filename,unsigned char *buff,int code_num)
++ {
++      int i,j,fd;
++      unsigned char *wp, *cp;
++      unsigned char *CP_KEY = "kIUCHIuCHINO";
++ 
++      if(code_num>=3) return;
++      if((fd=open(filename,O_RDONLY))==-1) return;
++ 
++      lseek(fd,20+16*code_num,SEEK_SET);
++      read(fd,buff,16);
++ 
++      wp = buff;
++      cp = CP_KEY;
++ 
++              for ( i = 0; i < 16; i++ ) {
++              *wp ^= *cp;
++              if ( *wp & 0x80 ) *wp = '\0';
++              cp++;
++              wp++;
++              if ( *cp == '\0' ) cp = CP_KEY;
++      }
++ 
++      for (i=0;i<16;i++) {
++              if (buff[i]<'A' || 'Z'<buff[i]){
++                      buff[i]=0;
++                      break;
++              }
++      }
++      close(fd);
++ }
++ 
++ 
++ static void GetCPTbl(int nTbl, char *CPcode, int *tbl, CPS *cps)
++ {
++     int i, k, vl1, vl2, len;
++ 
++     for(i = 0; i < nTbl; i++) {
++         tbl[i] = -1;
++         cps[i].n = i;
++         cps[i].flg = 0;
++     }
++     len = strlen(CPcode);
++     vl1 = nTbl - 1;
++     vl2 = len + nTbl % len;
++     for(k = 0; k < nTbl; k++) {
++         vl1 = CPTbl[CPcode[k % len] - 'A'] + vl1 + vl2;
++         if(vl1 >= nTbl) vl1 %= nTbl;
++          while(tbl[vl1] != -1) {
++             if(k & 01) {
++                 if(vl1 == 0) vl1 = nTbl;
++                 vl1--;
++             }
++             else {
++                 if(++vl1 >= nTbl) vl1 = 0;
++             }
++         }
++         tbl[vl1] = k;
++         vl2++;
++     }
++     for(i = 0, k = nTbl - 1; i < k; i++, k--) {
++         cps[tbl[i]].n = tbl[k];
++         cps[tbl[k]].n = tbl[i];
++         if((tbl[i] ^ tbl[k]) & 0x01)
++             cps[tbl[i]].flg = cps[tbl[k]].flg = 1;
++     }
++ }
++ 
++ 
++ CPS *calcCPmask(char *code, int ntbl)
++ {
++     int *tbl;
++     int len,i;
++     CPS *cps;
++ 
++     len = strlen(code);
++     tbl = (int *)malloc(sizeof(int) * ntbl);
++     cps = (CPS *)malloc(sizeof(CPS) * ntbl);
++     if(!tbl || !cps) {
++      ErrPopUp ("Error:  No memory!!", "\nOk");
++         if(tbl) free(tbl);
++         exit(1);
++     }
++     GetCPTbl(ntbl, code, tbl, cps);
++     
++     free(tbl);
++     return(cps);
++ }
++ 
+diff -c --new-file xv-3.10a.org/xvctrl.c xv+flmask/xvctrl.c
+*** xv-3.10a.org/xvctrl.c      Fri Dec 23 04:12:16 1994
+--- xv+flmask/xvctrl.c Wed Sep  3 12:49:54 1997
+***************
+*** 112,117 ****
+--- 112,128 ----
+                              "Slow 24->8",
+                              "Best 24->8" };
+  
++ static char *mskMList[]    = { "Undo All\t\244u",
++                             MBSEP,
++                             "FLmask\t\244f",
++                             "Q0mask\t\244g",
++                             "WIN\t\244h",
++                             "MEKO\t\244i",
++                             "CPmask\t\244j",
++                             "RGB\t\244l",
++                             "BitRev.\t\244n",
++                             "ColRev.\t\244w"};
++ 
+  static char *algMList[]    = { "Undo All\t\244u",
+                              MBSEP,
+                              "Blur...\t\244b",
+***************
+*** 303,311 ****
+    BTCreate(&but[BPAD],    ctrlW,BX0,          BY1,BUTTW/2,BUTTH,"",BCLS);
+    BTCreate(&but[BANNOT],  ctrlW,BX0+BUTTW/2+1,BY1,BUTTW/2,BUTTH,"",BCLS);
+  
+!   BTCreate(&but[BCROP],   ctrlW,BX1,  BY1,BUTTW,BUTTH,"Crop",    BCLS);
+!   BTCreate(&but[BUNCROP], ctrlW,BX2,  BY1,BUTTW,BUTTH,"UnCrop",  BCLS);
+!   BTCreate(&but[BACROP],  ctrlW,BX3,  BY1,BUTTW,BUTTH,"AutoCrop",BCLS);
+    BTCreate(&but[BABOUT],  ctrlW,BX4,  BY1,BUTTW,BUTTH,"About XV",BCLS);
+    BTCreate(&but[BQUIT],   ctrlW,BX5,  BY1,BUTTW,BUTTH,"Quit",    BCLS);
+  
+--- 314,324 ----
+    BTCreate(&but[BPAD],    ctrlW,BX0,          BY1,BUTTW/2,BUTTH,"",BCLS);
+    BTCreate(&but[BANNOT],  ctrlW,BX0+BUTTW/2+1,BY1,BUTTW/2,BUTTH,"",BCLS);
+  
+! #define NEW_BUTW BUTTW*3/4
+!   BTCreate(&but[BCROP],   ctrlW,BX1            ,BY1,NEW_BUTW,BUTTH,"Crp",    BCLS);
+!   BTCreate(&but[BUNCROP], ctrlW,BX1+NEW_BUTW+1   ,BY1,NEW_BUTW,BUTTH,"UCrp",  BCLS);
+!   BTCreate(&but[BACROP],  ctrlW,BX1+NEW_BUTW*2+2,BY1,NEW_BUTW,BUTTH,"ACrp",BCLS);
+!   BTCreate(&but[BMASKS],  ctrlW,BX1+NEW_BUTW*3+3,BY1,NEW_BUTW,BUTTH,"Mask",BCLS);
+    BTCreate(&but[BABOUT],  ctrlW,BX4,  BY1,BUTTW,BUTTH,"About XV",BCLS);
+    BTCreate(&but[BQUIT],   ctrlW,BX5,  BY1,BUTTW,BUTTH,"Quit",    BCLS);
+  
+***************
+*** 341,356 ****
+    /* have to create menu buttons after XMapSubWindows, as we *don't* want 
+       the popup menus mapped */
+  
+!   MBCreate(&dispMB,   ctrlW, CTRLWIDE - 8 - 112 - 2*(112+2), 5,112,19, 
+          "Display",    dispMList,   DMB_MAX,    BCLS);
+!   MBCreate(&conv24MB, ctrlW, CTRLWIDE - 8 - 112 - (112+2),   5,112,19, 
+          "24/8 Bit",   conv24MList, CONV24_MAX, BCLS);
+!   MBCreate(&algMB,    ctrlW, CTRLWIDE - 8 - 112,             5,112,19, 
+!         "Algorithms", algMList,    ALG_MAX,    BCLS);
+  
+!   MBCreate(&rootMB,   ctrlW, CTRLWIDE - 8 - 112 - 2*(112+2), 5+21,112,19, 
+          "Root",       rootMList,   RMB_MAX,    BCLS);
+!   MBCreate(&windowMB, ctrlW, CTRLWIDE - 8 - 112 - (112+2),   5+21,112,19, 
+          "Windows",    windowMList, WMB_MAX,    BCLS);
+    MBCreate(&sizeMB,   ctrlW, CTRLWIDE - 8 - 112,             5+21,112,19, 
+          "Image Size", sizeMList,   SZMB_MAX,   BCLS);
+--- 354,371 ----
+    /* have to create menu buttons after XMapSubWindows, as we *don't* want 
+       the popup menus mapped */
+  
+!   MBCreate(&dispMB,   ctrlW, CTRLWIDE - 8 - 84 - 3*(84+2), 5,84,19, 
+          "Display",    dispMList,   DMB_MAX,    BCLS);
+!   MBCreate(&conv24MB, ctrlW, CTRLWIDE - 8 - 84 - 2*(84+2), 5,84,19, 
+          "24/8 Bit",   conv24MList, CONV24_MAX, BCLS);
+!   MBCreate(&algMB,    ctrlW, CTRLWIDE - 8 - 84 - (84+2),   5,84,19, 
+!         "Algo.", algMList,    ALG_MAX,    BCLS);
+!   MBCreate(&flmaskMB, ctrlW, CTRLWIDE - 8 - 84,          5,84,19, 
+!         "FLmask", mskMList,    MSK_MAX,    BCLS);
+  
+!   MBCreate(&rootMB,   ctrlW, CTRLWIDE - 8 - 112 - 2*(112+3), 5+21,112,19, 
+          "Root",       rootMList,   RMB_MAX,    BCLS);
+!   MBCreate(&windowMB, ctrlW, CTRLWIDE - 8 - 112 - (112+3),   5+21,112,19, 
+          "Windows",    windowMList, WMB_MAX,    BCLS);
+    MBCreate(&sizeMB,   ctrlW, CTRLWIDE - 8 - 112,             5+21,112,19, 
+          "Image Size", sizeMList,   SZMB_MAX,   BCLS);
+***************
+*** 437,442 ****
+--- 452,458 ----
+    MBRedraw(&dispMB);
+    MBRedraw(&conv24MB);
+    MBRedraw(&algMB);
++   MBRedraw(&flmaskMB);
+    MBRedraw(&rootMB);
+    MBRedraw(&windowMB);
+    MBRedraw(&sizeMB);
+diff -c --new-file xv-3.10a.org/xvcut.c xv+flmask/xvcut.c
+*** xv-3.10a.org/xvcut.c       Fri Sep  5 21:12:32 1997
+--- xv+flmask/xvcut.c  Wed Sep  3 12:49:55 1997
+***************
+*** 101,107 ****
+  static Cursor cutcurs  = (Cursor) 0;
+  
+  
+! 
+  
+  /********************************************/
+  int CutAllowed()
+--- 101,108 ----
+  static Cursor cutcurs  = (Cursor) 0;
+  
+  
+! /* FLmask: Mask Select. */
+! void MaskSelect (int,int,int,int);
+  
+  /********************************************/
+  int CutAllowed()
+***************
+*** 1859,1862 ****
+--- 1860,1870 ----
+    CoordC2P(cx, cy, px_ret, py_ret);
+  }
+  
++ 
++ void MaskSelect (x1,x2,y1,y2)
++ int x1,x2,y1,y2;
++ {
++      selrx = x1;  selry = y1;  selrw = x2;  selrh = y2;
++      EnableSelection(1);
++ }
+  
+diff -c --new-file xv-3.10a.org/xvevent.c xv+flmask/xvevent.c
+*** xv-3.10a.org/xvevent.c     Sun Sep 14 02:29:13 1997
+--- xv+flmask/xvevent.c        Wed Sep  3 12:51:25 1997
+***************
+*** 1245,1250 ****
+--- 1245,1256 ----
+         if (i>=0) DoAlg(i);
+         break;
+       }
++ 
++      else if (MBClick(&flmaskMB, x,y)) {
++        i = MBTrack(&flmaskMB);
++        if (i>=0) DoMask(i);
++        break;
++      }
+       
+       i=ClickCtrl(x,y);
+       
+***************
+*** 1271,1276 ****
+--- 1277,1283 ----
+       case BCROP:   Crop();                       break;
+       case BUNCROP: UnCrop();                     break;
+       case BACROP:  AutoCrop();                   break;
++      case BMASKS:  MaskCr();                     break;      
+         
+       case BPAD:
+         {
+***************
+*** 1587,1592 ****
+--- 1594,1609 ----
+        else if (ks==XK_d) FakeButtonPress(&but[BCLEAR]);
+  
+        else if (ks==XK_u) DoAlg(ALG_NONE);
++ 
++       else if (ks==XK_f) DoMask(MSK_FLMASK);
++       else if (ks==XK_g) DoMask(MSK_Q0MASK);
++       else if (ks==XK_h) DoMask(MSK_WIN);
++       else if (ks==XK_i) DoMask(MSK_MEKO);
++       else if (ks==XK_j) DoMask(MSK_CPMASK);
++       else if (ks==XK_l) DoMask(MSK_RGB);
++       else if (ks==XK_n) DoMask(MSK_BITREV);
++       else if (ks==XK_w) DoMask(MSK_COLREV);
++ 
+        else if (ks==XK_b) DoAlg(ALG_BLUR);
+        else if (ks==XK_s) DoAlg(ALG_SHARPEN);
+        else if (ks==XK_e) DoAlg(ALG_EDGE);
+***************
+*** 1625,1631 ****
+      }
+      else {                               /* commands valid in any window */
+        switch (buf[0]) {
+!      
+       /* things in dispMB */
+        case 'r':    SelectDispMB(DMB_RAW);           break;
+        case 'd':    SelectDispMB(DMB_DITH);          break;
+--- 1642,1648 ----
+      }
+      else {                               /* commands valid in any window */
+        switch (buf[0]) {
+! 
+       /* things in dispMB */
+        case 'r':    SelectDispMB(DMB_RAW);           break;
+        case 'd':    SelectDispMB(DMB_DITH);          break;
+***************
+*** 1689,1694 ****
+--- 1706,1712 ----
+        case 'c':    FakeButtonPress(&but[BCROP]);    break;
+        case 'u':    FakeButtonPress(&but[BUNCROP]);  break;
+        case 'C':    FakeButtonPress(&but[BACROP]);   break;
++       case 'f':    FakeButtonPress(&but[BMASKS]);   break;
+        case 'P':    FakeButtonPress(&but[BPAD]);     break;
+        case 'A':    FakeButtonPress(&but[BANNOT]);   break;
+       
+diff -c --new-file xv-3.10a.org/xvimage.c xv+flmask/xvimage.c
+*** xv-3.10a.org/xvimage.c     Fri Sep  5 21:12:33 1997
+--- xv+flmask/xvimage.c        Wed Sep  3 12:49:54 1997
+***************
+*** 45,51 ****
+  static int  doPadPaste        PARM((byte *, int, int, int, int));
+  static int  ReadImageFile1    PARM((char *, PICINFO *));
+  
+! 
+  
+  #define DO_CROP 0
+  #define DO_ZOOM 1
+--- 45,52 ----
+  static int  doPadPaste        PARM((byte *, int, int, int, int));
+  static int  ReadImageFile1    PARM((char *, PICINFO *));
+  
+! byte *origPic;
+! int  origPicType;
+  
+  #define DO_CROP 0
+  #define DO_ZOOM 1
+***************
+*** 910,915 ****
+--- 911,922 ----
+    /* dir=0: 90 degrees clockwise, else 90 degrees counter-clockwise */
+    WaitCursor();
+    
++   if (origPic!=NULL) {
++        int tmp_pw,tmp_ph;
++        tmp_pw=pWIDE;
++        tmp_ph=pHIGH;
++        RotatePic(origPic,origPicType,&tmp_pw,&tmp_ph,dir);
++   }
+    RotatePic(pic, picType, &pWIDE, &pHIGH, dir);
+    
+    /* rotate clipped version and modify 'clip' coords */
+diff -c --new-file xv-3.10a.org/xvmask.c xv+flmask/xvmask.c
+*** xv-3.10a.org/xvmask.c      Thu Jan  1 09:00:00 1970
+--- xv+flmask/xvmask.c Sun Sep 14 07:17:12 1997
+***************
+*** 0 ****
+--- 1,912 ----
++ /*
++  * xvmask.c - image mask algorithms (FLmask, etc.)
++  *
++  *  Contains:
++  *         void DoMask(int algnum);
++  */
++ 
++ #include "copyright.h"
++ #include "xv.h"
++ 
++ typedef struct { int n; char flg; } CPS;
++ typedef struct { int n; unsigned short int r; } MKT;
++ 
++ /* Flmask */
++ void cpcode          PARM ((char *, unsigned char *, int));
++ void MaskCr          PARM ((void));
++ static void FLmask   PARM ((void));
++ static void Q0mask   PARM ((void));
++ static void WINmask  PARM ((void));
++ static void MEKOmask         PARM ((void));
++ static void CPmask   PARM ((void));
++ static void XOR80    PARM ((void));
++ static void RGBchange        PARM ((void));
++ static void BitReverse       PARM ((void));
++ static void ColReverse       PARM ((void));
++ 
++ /***** Flmask *****/
++ static void doMaskCr                 PARM ((byte *, int, int, int, int, int, int));
++ static void doFLmask                 PARM ((byte *, int, int, byte *, int, int, int, int));
++ static void doCPmask                 PARM ((byte *, int, int, byte *, int, int, int, int, char *));
++ static void doMEKOmask               PARM ((byte *, int, int, byte *, int, int, int, int, int));
++ static void doColReverse     PARM ((byte *, int, int, byte *, int, int, int, int, int));
++ static void doRGBchange      PARM ((byte *, int, int, byte *, int, int, int, int));
++ static void doQ0mask                 PARM ((byte *, int, int, byte *, int, int, int, int, int, int));
++ static int *calcFLmask               PARM ((int, int));
++ static void move8bit                 PARM ((byte *, byte *, int));
++ static void move16bit                PARM ((byte *, byte *, int));
++ static void moveCP           PARM ((byte *, byte *, int, int));
++ static void doWINmask                PARM ((byte *, int, int, byte *, int, int, int, int));
++ static void wincp            PARM ((int, int, byte *, byte *));
++ 
++ /******************/
++ 
++ int start24bitAlg            PARM ((byte **, byte **));
++ void end24bitAlg             PARM ((byte *, byte *));
++ void saveOrigPic             PARM ((void));
++ void printUTime              PARM ((char *));
++ 
++ byte *origPic;
++ 
++ #undef TIMING_TEST
++ 
++ #ifdef TIMING_TEST
++ #include <sys/time.h>
++ #include <sys/resource.h>
++ #endif
++ 
++ /************************/
++ void
++ DoMask (anum)
++      int anum;
++ {
++     switch (anum)
++     {
++     case MSK_NONE:   DoAlg (ALG_NONE);       break;
++     case MSK_FLMASK:         FLmask ();              break;
++     case MSK_Q0MASK:         Q0mask ();              break;
++     case MSK_WIN:    WINmask ();             break;
++     case MSK_MEKO:   MEKOmask ();            break;
++     case MSK_CPMASK:         CPmask ();              break;
++     case MSK_RGB:    RGBchange ();           break;
++     case MSK_BITREV:         BitReverse ();          break;
++     case MSK_COLREV:         ColReverse ();          break;
++     }
++ 
++     algMB.dim[ALG_NONE] = (origPic == (byte *) NULL);
++     flmaskMB.dim[ALG_NONE] = (origPic == (byte *) NULL);
++ }
++ 
++ 
++ /******************************
++       Flmask:  FLMASK.
++ ******************************/
++ static void
++ FLmask ()
++ {
++     byte *pic24, *p24, *tmpPic, *tlp;
++     char *str;
++     int i, j, v, maxv, sx, sy, sw, sh;
++ 
++     WaitCursor ();
++ 
++     if (HaveSelection ()) GetSelRCoords (&sx, &sy, &sw, &sh);
++     else { sx = 0; sy = 0; sw = pWIDE; sh = pHIGH; }
++ 
++     CropRect2Rect (&sx, &sy, &sw, &sh, 0, 0, pWIDE, pHIGH);
++ 
++     str = "Doing FLMASK...";
++     SetISTR (ISTR_INFO, str);
++ 
++     if (start24bitAlg (&pic24, &tmpPic))
++      return;
++     xvbcopy ((char *) pic24, (char *) tmpPic,
++           (size_t) (pWIDE * pHIGH * 3));
++ 
++     doFLmask (pic24, pWIDE, pHIGH, tmpPic, sx, sy, sw, sh);
++ 
++     end24bitAlg (pic24, tmpPic);
++ }
++ 
++ /******************************
++       Flmask:  BitReverse.
++ ******************************/
++ static void
++ BitReverse ()
++ {
++     byte *pic24, *p24, *tmpPic, *tlp;
++     char *str;
++     int i, j, v, maxv, sx, sy, sw, sh;
++ 
++     WaitCursor ();
++ 
++     if (HaveSelection ()) GetSelRCoords (&sx, &sy, &sw, &sh);
++     else { sx = 0; sy = 0; sw = pWIDE; sh = pHIGH; }
++ 
++     CropRect2Rect (&sx, &sy, &sw, &sh, 0, 0, pWIDE, pHIGH);
++ 
++     str = "Doing reverse bit...";
++     SetISTR (ISTR_INFO, str);
++ 
++     if (start24bitAlg (&pic24, &tmpPic))
++      return;
++     xvbcopy ((char *) pic24, (char *) tmpPic,
++           (size_t) (pWIDE * pHIGH * 3));
++ 
++     doColReverse (pic24, pWIDE, pHIGH, tmpPic, sx, sy, sw, sh, 1);
++ 
++     end24bitAlg (pic24, tmpPic);
++ }
++ 
++ /******************************
++       Flmask:  ColReverse.
++ ******************************/
++ static void
++ ColReverse ()
++ {
++     byte *pic24, *p24, *tmpPic, *tlp;
++     char *str;
++     int i, j, v, maxv, sx, sy, sw, sh;
++ 
++     WaitCursor ();
++ 
++     if (HaveSelection ()) GetSelRCoords (&sx, &sy, &sw, &sh);
++     else { sx = 0; sy = 0; sw = pWIDE; sh = pHIGH; }
++ 
++     CropRect2Rect (&sx, &sy, &sw, &sh, 0, 0, pWIDE, pHIGH);
++ 
++     str = "Doing reverse colormap...";
++     SetISTR (ISTR_INFO, str);
++ 
++     if (start24bitAlg (&pic24, &tmpPic))
++      return;
++     xvbcopy ((char *) pic24, (char *) tmpPic,
++           (size_t) (pWIDE * pHIGH * 3));
++ 
++     doColReverse (pic24, pWIDE, pHIGH, tmpPic, sx, sy, sw, sh, 0);
++     end24bitAlg (pic24, tmpPic);
++ }
++ 
++ 
++ /******************************
++       Flmask:  Q0 MASK.
++ ******************************/
++ static void
++ Q0mask ()
++ {
++     int pixX, pixY, err;
++     static char *labels[] = {"\nOk", "\033Cancel"};
++     char txt[256];
++     static char buf[64] = {'8', '\0'};
++     byte *pic24, *p24, *tmpPic, *tp, *tlp;
++     char *str;
++     int i, j, v, maxv, sx, sy, sw, sh;
++ 
++     sprintf (txt, "FLmask: Q0mask        \n\nEnter mask pixels size: %s\n", "(ex. '8', '8x16')");
++ 
++     i = GetStrPopUp (txt, labels, 2, buf, 64, "0123456789x", 1);
++     if (i == 1 || strlen (buf) == 0) return;
++ 
++     pixX = pixY = err = 0;
++ 
++     if (index (buf, 'x'))
++     {
++      if (sscanf (buf, "%d x %d", &pixX, &pixY) != 2) err++;
++     }
++     else
++     {
++      if (sscanf (buf, "%d", &pixX) != 1) err++;
++      pixY = pixX;
++     }
++ 
++     if (pixX < 1 || pixY < 1 || err)
++     {
++      ErrPopUp ("Error:  The entered string is not valid.",
++                "\nWho Cares!");
++      return;
++     }
++     WaitCursor ();
++ 
++     str = "Doing Q0 MASK...";
++     SetISTR (ISTR_INFO, str);
++ 
++     if (HaveSelection ()) GetSelRCoords (&sx, &sy, &sw, &sh);
++     else { sx = 0; sy = 0; sw = pWIDE; sh = pHIGH; }
++ 
++     CropRect2Rect (&sx, &sy, &sw, &sh, 0, 0, pWIDE, pHIGH);
++ 
++     if (start24bitAlg (&pic24, &tmpPic)) return;
++     xvbcopy ((char *) pic24, (char *) tmpPic,
++           (size_t) (pWIDE * pHIGH * 3));
++ 
++     doQ0mask (pic24, pWIDE, pHIGH, tmpPic, sx, sy, sw, sh, pixX, pixY);
++     end24bitAlg (pic24, tmpPic);
++ }
++ 
++ /******************************
++       Flmask:  RGBchange.
++ ******************************/
++ static void
++ RGBchange ()
++ {
++     byte *pic24, *p24, *tmpPic, *tlp;
++     char *str;
++     int i, j, v, maxv, sx, sy, sw, sh;
++ 
++     WaitCursor ();
++ 
++     if (HaveSelection ()) GetSelRCoords (&sx, &sy, &sw, &sh);
++     else { sx = 0; sy = 0; sw = pWIDE; sh = pHIGH; }
++ 
++     CropRect2Rect (&sx, &sy, &sw, &sh, 0, 0, pWIDE, pHIGH);
++ 
++     str = "Doing RGB change...";
++     SetISTR (ISTR_INFO, str);
++ 
++     if (start24bitAlg (&pic24, &tmpPic)) return;
++     xvbcopy ((char *) pic24, (char *) tmpPic,
++           (size_t) (pWIDE * pHIGH * 3));
++ 
++     doRGBchange (pic24, pWIDE, pHIGH, tmpPic, sx, sy, sw, sh);
++ 
++     end24bitAlg (pic24, tmpPic);
++ }
++ 
++ /******************************
++       Flmask:  WINmask.
++ ******************************/
++ static void
++ WINmask ()
++ {
++     byte *pic24, *p24, *tmpPic, *tlp;
++     char *str;
++     int i, j, v, maxv, sx, sy, sw, sh;
++ 
++     WaitCursor ();
++ 
++     if (HaveSelection ()) GetSelRCoords (&sx, &sy, &sw, &sh);
++     else { sx = 0; sy = 0; sw = pWIDE; sh = pHIGH; }
++ 
++     CropRect2Rect (&sx, &sy, &sw, &sh, 0, 0, pWIDE, pHIGH);
++ 
++     str = "Doing WIN mask...";
++     SetISTR (ISTR_INFO, str);
++ 
++     if (start24bitAlg (&pic24, &tmpPic)) return;
++     xvbcopy ((char *) pic24, (char *) tmpPic,
++           (size_t) (pWIDE * pHIGH * 3));
++ 
++     doWINmask (pic24, pWIDE, pHIGH, tmpPic, sx, sy, sw, sh);
++ 
++     end24bitAlg (pic24, tmpPic);
++ }
++ 
++ /******************************
++       Flmask:  MEKOmask.
++ ******************************/
++ static
++ void
++ MEKOmask ()
++ {
++     static char *labels[] = {"\nForward", "\nBackward"};
++     char txt[256], key[48];
++     byte *pic24, *p24, *tmpPic, *tp, *tlp;
++     char *str;
++     int i, j, v, maxv, sx, sy, sw, sh;
++ 
++     memset (key, 0, 48);
++ 
++     sprintf (txt, "FLmask: MEKO mask  \n\n    Select MEKOmask type ",
++           key);
++     i = PopUp (txt, labels, 2);
++ 
++     WaitCursor ();
++     str = "Doing MEKOmask...";
++     SetISTR (ISTR_INFO, str);
++ 
++     if (HaveSelection ()) GetSelRCoords (&sx, &sy, &sw, &sh);
++     else { sx = 0; sy = 0; sw = pWIDE; sh = pHIGH; }
++ 
++     CropRect2Rect (&sx, &sy, &sw, &sh, 0, 0, pWIDE, pHIGH);
++ 
++     if (start24bitAlg (&pic24, &tmpPic)) return;
++     xvbcopy ((char *) pic24, (char *) tmpPic,
++           (size_t) (pWIDE * pHIGH * 3));
++     doMEKOmask (pic24, pWIDE, pHIGH, tmpPic, sx, sy, sw, sh, i);
++     end24bitAlg (pic24, tmpPic);
++ }
++ 
++ /************************/
++ static void
++ doMEKOmask (pic24, w, h, results, selx, sely, selw, selh, flag)
++      byte *pic24, *results;
++      int w, h, selx, sely, selw, selh, flag;
++ {
++     register byte *dst, *src;
++     register int x, y, i;
++     register int xmax, ymax;
++     MKT *mt;
++ 
++     printUTime ("start of MEKOmask.");
++ 
++     xmax = selw / 16;
++     ymax = selh / 16;
++ 
++     mt = (MKT *) calcMEKO (xmax * ymax);
++     if (mt == NULL)
++      return;
++ 
++     for (i = 0; i < xmax * ymax; i++)
++     {
++      ProgressMeter (1, (xmax * ymax) - 1, i, "MEKOmask");
++      if ((i & 63) == 0)
++          WaitCursor ();
++ 
++      if (flag == 0)
++      {
++          dst = results + ((sely + ((mt[i].n - 1) / xmax) * 16) * w
++                           + selx + ((mt[i].n - 1) % xmax) * 16) * 3;
++          src = pic24 + ((sely + (i / xmax) * 16) * w
++                         + selx + (i % xmax) * 16) * 3;
++      }
++      else
++      {
++          src = pic24 + ((sely + ((mt[i].n - 1) / xmax) * 16) * w
++                         + selx + ((mt[i].n - 1) % xmax) * 16) * 3;
++          dst = results + ((sely + (i / xmax) * 16) * w
++                           + selx + (i % xmax) * 16) * 3;
++      }
++      move16bit (dst, src, w);
++     }
++ 
++     free (mt);
++     printUTime ("end of MEKOmask.");
++ }
++ 
++ static void
++ move16bit (byte * dest, byte * src, int w)
++ {
++     int y, x;
++     byte *tmp1, *tmp2;
++ 
++     for (y = 0; y < 16; y++)
++     {
++      tmp1 = dest + y * w * 3;
++      tmp2 = src + y * w * 3;
++      for (x = 0; x < 16 * 3; x++)
++      {
++          *tmp1 = *tmp2;
++          tmp1++;
++          tmp2++;
++      }
++     }
++ }
++ 
++ /******************************
++       Flmask:  CP MASK.
++ ******************************/
++ static void
++ CPmask ()
++ {
++     static char *labels[] = {"\nOk", "\033Cancel"};
++     char buf[64];
++     char txt[256], key[48];
++     byte *pic24, *p24, *tmpPic, *tp, *tlp;
++     char *str;
++     int i, j, v, maxv, sx, sy, sw, sh;
++ 
++     memset (key, 0, 48);
++     cpcode (fullfname, key, 0);
++     if (key[0] == 0)
++     {
++      memset (key, 0, 48);
++      cpcode (fullfname, key, 1);
++      if (key[0] == 0)
++      {
++          memset (key, 0, 48);
++          cpcode (fullfname, key, 2);
++      }
++     }
++ 
++     strcpy(buf,key);
++     if (strlen(buf)==0)strcpy(buf,"SAMPLE");
++     sprintf (txt, "FLmask: CPmask          \n\nEnter CPmask code: %s \n",
++      "(ex. 'SAMPLE')");
++ 
++     i = GetStrPopUp (txt, labels, 2, buf, 64, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 1);
++     if (i == 1 || strlen (buf) == 0) return; 
++     strcpy(key,buf);
++ 
++     /*  Old version.
++     sprintf (txt, "FLmask: CP mask  \n\n   CP code = %s ", key);
++     i = PopUp (txt, labels, 2);
++     if (i == 1) return;
++     */
++ 
++     WaitCursor ();
++     str = "Doing CP mask...";
++     SetISTR (ISTR_INFO, str);
++ 
++     if (HaveSelection ()) GetSelRCoords (&sx, &sy, &sw, &sh);
++     else { sx = 0; sy = 0; sw = pWIDE; sh = pHIGH; }
++ 
++     CropRect2Rect (&sx, &sy, &sw, &sh, 0, 0, pWIDE, pHIGH);
++ 
++     if (start24bitAlg (&pic24, &tmpPic)) return;
++     xvbcopy ((char *) pic24, (char *) tmpPic,
++           (size_t) (pWIDE * pHIGH * 3));
++     doCPmask (pic24, pWIDE, pHIGH, tmpPic, sx, sy, sw, sh, key);
++     end24bitAlg (pic24, tmpPic);
++ }
++ 
++ /************************/
++ static void
++ doCPmask (pic24, w, h, results, selx, sely, selw, selh, key)
++      byte *pic24, *results;
++      int w, h, selx, sely, selw, selh;
++      char *key;
++ {
++     register byte *dst, *src;
++     register int x, y, i;
++     register int xmax, ymax;
++     CPS *cps;
++ 
++     printUTime ("start of CPmask.");
++ 
++     xmax = selw / 8;
++     ymax = selh / 8;
++ 
++     cps = (CPS *) calcCPmask (key, xmax * ymax);
++ 
++     for (i = 0; i < xmax * ymax; i++)
++     {
++      ProgressMeter (1, (xmax * ymax) - 1, i, "CPmask");
++      if ((i & 63) == 0) WaitCursor ();
++ 
++      dst = results + ((sely + (cps[i].n / xmax) * 8) * w
++                       + selx + (cps[i].n % xmax) * 8) * 3;
++      src = pic24 + ((sely + (i / xmax) * 8) * w
++                     + selx + (i % xmax) * 8) * 3;
++      moveCP (dst, src, w, cps[i].flg);
++     }
++ 
++     free (cps);
++     printUTime ("end of CPmask.");
++ }
++ 
++ static void
++ moveCP (byte * dest, byte * src, int w, int cp_flag)
++ {
++     int y, x;
++     byte *tmp1, *tmp2;
++ 
++     if (cp_flag == 0)
++     {
++      for (y = 0; y < 8; y++)
++      {
++          tmp1 = dest + y * w * 3;
++          tmp2 = src + y * w * 3;
++          for (x = 0; x < 8 * 3; x += 3)
++          {
++              tmp1[0] = (byte) ~ tmp2[1];
++              tmp1[1] = (byte) ~ tmp2[0];
++              tmp1[2] = (byte) ~ tmp2[2];
++              tmp1 += 3;
++              tmp2 += 3;
++          }
++      }
++     }
++     else
++     {
++      for (y = 0; y < 8; y++)
++      {
++          tmp1 = dest + y * 3;
++          tmp2 = src + y * w * 3;
++          for (x = 0; x < 8 * 3; x += 3)
++          {
++              tmp1[0] = (byte) ~ tmp2[1];
++              tmp1[1] = (byte) ~ tmp2[0];
++              tmp1[2] = (byte) ~ tmp2[2];
++              tmp1 += w * 3;
++              tmp2 += 3;
++          }
++      }
++     }
++ }
++ 
++ /************************/
++ static void
++ doFLmask (pic24, w, h, results, selx, sely, selw, selh)
++      byte *pic24, *results;
++      int w, h, selx, sely, selw, selh;
++ {
++     register byte *dst, *src;
++     register int x, y, i;
++     register int *ar, xmax, ymax;
++ 
++     printUTime ("start of FLMASK.");
++ 
++     xmax = selw / 8;
++     ymax = selh / 8;
++     ar = (int *) calcFLmask (xmax, ymax);
++ 
++     for (i = 0; i < xmax * ymax; i++)
++     {
++      ProgressMeter (1, (xmax * ymax * 2) - 1,
++              i + xmax * ymax, "FLMASK");
++      if ((i & 63) == 0) WaitCursor ();
++ 
++      dst=results+((sely+(ar[xmax*ymax-i-1]/xmax)*8)*w
++              +selx+(ar[xmax*ymax-i-1]%xmax)*8)*3;
++      src=pic24+((sely+(ar[i]/xmax)*8)*w
++              +selx+(ar[i]%xmax)*8)*3;
++      if (ar[i] != ar[xmax * ymax - i - 1])
++          move8bit (dst, src, w);
++     }
++ 
++     free (ar);
++     printUTime ("end of FLMASK.");
++ }
++ 
++ static int *
++ calcFLmask (int xmax, int ymax)
++ {
++     int *spc, *tmp_ar;
++     int i, l, x, y, c;
++     struct direction { int x; int y; } dir[4];
++ 
++     dir[0].x = 0;  dir[0].y = -1;
++     dir[1].x = -1; dir[1].y = 0;
++     dir[2].x = 0;  dir[2].y = 1;
++     dir[3].x = 1;  dir[3].y = 0;
++ 
++     spc = (int *) malloc (sizeof (int) * xmax * ymax);
++     tmp_ar = (int *) malloc (sizeof (int) * xmax * ymax);
++ 
++     c = 0;
++     for (l = 0; l < ymax; l++)
++     {
++      for (i = 0; i < xmax; i++)
++      {
++          spc[c] = c;
++          c++;
++      }
++     }
++ 
++     c = 3;
++     x = 0;
++     y = ymax - 1;
++     for (i = 0; i < xmax * ymax; i++)
++     {
++      ProgressMeter (1, (xmax * ymax * 2) - 1, i, "FLmask");
++      if ((i & 63) == 0) WaitCursor ();
++ 
++      tmp_ar[i] = spc[x + y * xmax];
++      if ((x + dir[c].x) == xmax || (x + dir[c].x) < 0)
++      {
++          c++;
++          if (c == 4) c = 0;
++      }
++      if ((y + dir[c].y) == ymax || (y + dir[c].y) < 0)
++      {
++          c++;
++          if (c == 4) c = 0;
++      }
++      for (l = 0; l < i; l++)
++      {
++              if(spc[x+(dir[c].x)+(y+(dir[c].y))*xmax]==tmp_ar[l])
++          {
++              c++;
++              if (c == 4) c = 0;
++              break;
++          }
++      }
++      x = x + dir[c].x;
++      y = y + dir[c].y;
++     }
++     free (spc);
++     return (tmp_ar);
++ }
++ 
++ static void
++ move8bit (byte * dest, byte * src, int w)
++ {
++     int y, x;
++     byte *tmp1, *tmp2;
++ 
++     for (y = 0; y < 8; y++)
++     {
++      tmp1 = dest + y * w * 3;
++      tmp2 = src + y * w * 3;
++      for (x = 0; x < 8 * 3; x++)
++      {
++          *tmp1 = (byte) ~ (*tmp2);
++          tmp1++;
++          tmp2++;
++      }
++     }
++ }
++ 
++ /************************/
++ static void
++ doColReverse (pic24, w, h, results, selx, sely, selw, selh, bit_flag)
++      byte *pic24, *results;
++      int w, h, selx, sely, selw, selh, bit_flag;
++ {
++     register byte *p24;
++     register byte *rp;
++     register int x, y;
++ 
++     printUTime ("start of Reverse.");
++ 
++     for (y = sely; y < sely + selh; y++)
++     {
++ 
++      ProgressMeter (sely + 1, (sely + selh - 1) - 1, y, "Reverse");
++      if ((y & 63) == 0) WaitCursor ();
++ 
++      rp = results + (y * w + selx) * 3;
++      p24 = pic24 + (y * w + selx) * 3;
++ 
++      if (bit_flag == 1)
++      {
++          /* BitReverse. */
++          for (x = selx; x < selx + selw * 3; x++, p24++, rp++)
++              *rp = (byte) ~ (*p24);
++ 
++      }
++      else
++      {
++          /* ColReverse. */
++          for (x = selx; x < selx + selw * 3; x++, p24++, rp++)
++              *rp = *p24 ^ 0x80;
++      }
++     }
++     printUTime ("end of Reverse.");
++ }
++ 
++ /************************/
++ static void
++ doQ0mask (pic24, w, h, results, selx, sely, selw, selh, pixX, pixY)
++      byte *pic24, *results;
++      int w, h, selx, sely, selw, selh, pixX, pixY;
++ {
++     register byte *p24;
++     register int bperlin, rsum, gsum, bsum;
++     byte *rp;
++     int i, x, y;
++     int skip, y0, x0;
++ 
++     printUTime ("start of Q0mask.");
++ 
++     bperlin = w * 3;
++ 
++     for (y = sely; y < sely + ((selh / pixY) * pixY); y++)
++     {
++      ProgressMeter(sely+1,(sely+((selh/pixY)*pixY))-1,y,"Q0mask");
++      if ((y & 63) == 0) WaitCursor ();
++ 
++      rp = results + (y * w + selx) * 3;
++      y0 = y - sely;
++      p24=pic24+((((y0/pixY+1)*pixY)-1-(y0%pixY)+sely)*w+selx)*3;
++ 
++      for(x=selx;x<selx+((selw/pixX)*pixX);x++,p24+=3,rp+=3)
++      {
++          x0 = x - selx;
++          skip = (pixX - 1 - 2 * (x0 % pixX)) * 3;
++ 
++          rp[0] = (byte) ~ p24[skip];
++          rp[1] = (byte) ~ p24[skip + 1];
++          rp[2] = (byte) ~ p24[skip + 2];
++      }
++     }
++     printUTime ("end of Q0 MASK.");
++ }
++ 
++ /************************/
++ static void
++ doWINmask (pic24, w, h, results, selx, sely, selw, selh)
++      byte *pic24, *results;
++      int w, h, selx, sely, selw, selh;
++ {
++     register byte *p24;
++     register byte *rp;
++     register int x, y;
++ 
++     printUTime ("start of WIN mask.");
++ 
++     for (y = sely; y < sely + selh; y++)
++     {
++ 
++      ProgressMeter (sely + 1, (sely + selh - 1) - 1, y, "WINmask");
++      if ((y & 63) == 0) WaitCursor ();
++ 
++      rp = results + (y * w + selx) * 3;
++      p24 = pic24 + (y * w + selx) * 3;
++ 
++      for(x=selx;x<selx+(selw/16)*16*3;x+=48,p24+=48,rp+=48)
++      {
++          wincp ( 0,12, p24, rp);
++          wincp ( 1, 8, p24, rp);
++          wincp ( 2, 6, p24, rp);
++          wincp ( 3,15, p24, rp);
++          wincp ( 4, 9, p24, rp);
++          wincp ( 5,13, p24, rp);
++          wincp ( 6, 2, p24, rp);
++          wincp ( 7,11, p24, rp);
++          wincp ( 8, 1, p24, rp);
++          wincp ( 9, 4, p24, rp);
++          wincp (10,14, p24, rp);
++          wincp (11, 7, p24, rp);
++          wincp (12, 0, p24, rp);
++          wincp (13, 5, p24, rp);
++          wincp (14,10, p24, rp);
++          wincp (15, 3, p24, rp);
++      }
++     }
++     printUTime ("end of WIN mask.");
++ }
++ 
++ static void
++ wincp (int src, int dst, byte * p24, byte * rp)
++ {
++     *(rp + dst * 3) = *(p24 + src * 3);
++     *(rp + dst * 3 + 1) = *(p24 + src * 3 + 1);
++     *(rp + dst * 3 + 2) = *(p24 + src * 3 + 2);
++ }
++ 
++ /************************/
++ static void
++ doRGBchange (pic24, w, h, results, selx, sely, selw, selh)
++      byte *pic24, *results;
++      int w, h, selx, sely, selw, selh;
++ {
++     register byte *p24;
++     register byte *rp;
++     register int x, y;
++ 
++     printUTime ("start of RGB change.");
++ 
++     for (y = sely; y < sely + selh; y++)
++     {
++ 
++      ProgressMeter (sely + 1, (sely + selh - 1) - 1, y, "Change");
++      if ((y & 63) == 0) WaitCursor ();
++ 
++      rp = results + (y * w + selx) * 3;
++      p24 = pic24 + (y * w + selx) * 3;
++ 
++      for (x = selx; x < selx + selw * 3; x += 3, p24 += 3, rp += 3)
++      {
++          *rp = *(p24 + 1);
++          *(rp + 1) = *(p24 + 2);
++          *(rp + 2) = *(p24);
++      }
++     }
++     printUTime ("end of Reverse.");
++ }
++ 
++ 
++ /******************************
++       Flmask:  MaskCrop.
++ ******************************/
++ void
++ MaskCr ()
++ {
++     byte *pic24, *p24, *tmpPic, *tlp;
++     char str[] = "Doing AutoMaskCrop...";
++     int i, j, v, maxv, sx, sy, sw, sh;
++ 
++     WaitCursor ();
++ 
++     if (HaveSelection ())
++      GetSelRCoords (&sx, &sy, &sw, &sh);
++     else
++     {
++      sx = 0;
++      sy = 0;
++      sw = pWIDE - 1;
++      sh = pHIGH - 1;
++     }
++ 
++     CropRect2Rect (&sx, &sy, &sw, &sh, 0, 0, pWIDE, pHIGH);
++ 
++     SetISTR (ISTR_INFO, str);
++ 
++     if (start24bitAlg (&pic24, &tmpPic)) return;
++     xvbcopy ((char *) pic24, (char *) tmpPic,
++           (size_t) (pWIDE * pHIGH * 3));
++ 
++     doMaskCr (pic24, pWIDE, pHIGH, sx, sy, sw, sh);
++ 
++     end24bitAlg (pic24, tmpPic);
++ }
++ 
++ /************************/
++ static void
++ doMaskCr (pic24, w, h, selx, sely, selw, selh)
++      byte *pic24;
++      int w, h, selx, sely, selw, selh;
++ {
++     register byte *p24, *p24u;
++     register int x, y;
++     double edge, *edgeX, *edgeY, maxX, maxY, tmp;
++     int x1, x2, y1, y2, i;
++     int xp1, xp2, yp1, yp2;
++ 
++     printUTime ("start of MaskCrop.");
++ 
++     edgeX = (double *) malloc (sizeof (edge) * selw);
++     edgeY = (double *) malloc (sizeof (edge) * selh);
++     memset (edgeX, 0, sizeof (edge) * selw);
++     memset (edgeY, 0, sizeof (edge) * selh);
++ 
++     for (y = sely + 1; y < sely + selh - 1; y++)
++     {
++      ProgressMeter (sely + 1, (sely + selh - 1) - 1, y, "Search");
++      if ((y & 63) == 0) WaitCursor ();
++ 
++      p24u = pic24 + ((y - 1) * w + selx) * 3;
++      p24 = pic24 + (y * w + selx) * 3;
++ 
++ #define DBL(x)       ((x)*(x))
++      for (x = selx; x < selx + selw * 3; x += 3)
++      {
++          edgeX[(x - selx) / 3] += (double) DBL (p24[3] - p24[0]) +
++              DBL (p24[4] - p24[1]) + DBL (p24[5] - p24[2]);
++          edgeY[y - sely] += (double) DBL (p24[0] - p24u[0]) +
++              DBL (p24[1] - p24u[1]) + DBL (p24[2] - p24u[2]);
++          p24u += 3;
++          p24 += 3;
++      }
++     }
++ 
++     maxX = 0;
++     for (x = 0; x < selw; x++)
++     {
++      if (maxX < edgeX[x])
++          maxX = edgeX[x];
++     }
++     maxY = 0;
++     for (y = 0; y < selh; y++)
++     {
++      if (maxY < edgeY[y])
++          maxY = edgeY[y];
++     }
++ 
++     tmp = 0.3;       /* ¢«¢­¤³¤ÎÊդοôÃͤÏŬÅö¤Ë·èÄꤵ¤ì¤Þ¤·¤¿(?)¡£ */
++     for (;;)
++     {
++      xp1 = 0; xp2 = 0;
++      yp1 = 0; yp2 = 0;
++      for (x = 1; x < selw - 1; x++) {
++          if (edgeX[x] > maxX * tmp) { xp1 = x; break; }
++      }
++      for (x = selw - 1; x >= 1; x--) {
++          if (edgeX[x] > maxX * tmp) { xp2 = x; break; }
++      }
++      for (y = 1; y < selh - 1; y++) {
++          if (edgeY[y] >= maxY * tmp) { yp1 = y; break; }
++      }
++      for (y = selh - 1; y >= 1; y--) {
++          if (edgeY[y] >= maxY * tmp) { yp2 = y; break; }
++      }
++      if(xp2-xp1 > 4 && yp2-yp1 > 4 && xp1*xp2*yp1*yp2 != 0) break;
++ 
++      if (tmp <= 0.01) return;
++      else tmp = tmp / 2.0;
++     }
++ 
++     free (edgeY);
++     free (edgeX);
++ 
++     x1 = xp1 + selx + 1;
++     x2 = xp2 - xp1;
++     y1 = yp1 + sely;
++     y2 = yp2 - yp1;
++ 
++     /* crop1(x1,y1,x2,y2,0);  <-- DO_CROP  */
++     MaskSelect (x1, x2, y1, y2);
++ 
++     printUTime ("end of MaskSearch.");
++ }
+diff -c --new-file xv-3.10a.org/xvmeko.c xv+flmask/xvmeko.c
+*** xv-3.10a.org/xvmeko.c      Thu Jan  1 09:00:00 1970
+--- xv+flmask/xvmeko.c Tue Sep  9 21:59:21 1997
+***************
+*** 0 ****
+--- 1,962 ----
++ #include <stdio.h>
++ #include <stdlib.h>
++ 
++ unsigned short int mekornd[9216] = {
++     0x2064,0x16F2,0x0AD2,0x0E1F,0x0A31,0x17CE,0x0DE8,0x1C41,0x0878,0x1349,
++     0x184B,0x1B51,0x0841,0x19A3,0x0820,0x0C12,0x1117,0x2117,0x1BC1,0x1F13,
++     0x19ED,0x0230,0x040D,0x1957,0x116D,0x0FD6,0x1E4F,0x0C28,0x1D28,0x077A,
++     0x205E,0x053D,0x0686,0x13AC,0x1A0E,0x16DE,0x1607,0x1504,0x0CED,0x088F,
++     0x159D,0x0EF4,0x0C3F,0x1120,0x225D,0x0B43,0x1B2D,0x184C,0x043D,0x1221,
++     0x0A12,0x225C,0x04F0,0x1399,0x1289,0x1899,0x1B0B,0x1A2B,0x1383,0x084A,
++     0x1DEE,0x118C,0x2395,0x00F5,0x16CD,0x0A9C,0x0E73,0x1FF9,0x0288,0x0014,
++     0x0EA9,0x17B3,0x13AF,0x03A7,0x0CE7,0x20AC,0x0E93,0x1F1E,0x207D,0x00B4,
++     0x1833,0x1DD4,0x09FD,0x0819,0x052A,0x16C9,0x1893,0x2134,0x0D8F,0x1597,
++     0x1573,0x22B5,0x1B55,0x04CE,0x0BB1,0x02FD,0x0685,0x0AAD,0x18DA,0x0A6C,
++     0x0E92,0x15C5,0x0695,0x0A70,0x1D67,0x11D0,0x0CC9,0x1E8A,0x12AC,0x0EF1,
++     0x220D,0x04FB,0x1034,0x00F4,0x0E6D,0x1F90,0x1649,0x108C,0x0AAA,0x1160,
++     0x238F,0x056C,0x0E0C,0x20A7,0x0658,0x0502,0x1973,0x0FB2,0x12D8,0x0D94,
++     0x1201,0x03BA,0x167E,0x237F,0x0D38,0x00E0,0x2183,0x201B,0x1192,0x08C1,
++     0x1240,0x20CB,0x073F,0x10DE,0x1379,0x163A,0x1D2E,0x0A15,0x19DB,0x02CD,
++     0x01BC,0x032C,0x23B9,0x1FD2,0x1E7D,0x1518,0x2148,0x0E72,0x235E,0x1DF0,
++     0x0538,0x1BCB,0x0926,0x1C17,0x0134,0x175A,0x1872,0x0ECF,0x06EB,0x0045,
++     0x100D,0x06EF,0x1EFE,0x0777,0x006C,0x0386,0x1DA4,0x1351,0x07AB,0x21EA,
++     0x1FF2,0x1017,0x182B,0x047B,0x1531,0x19DE,0x0F3A,0x186C,0x052E,0x1A15,
++     0x23E5,0x1901,0x0B44,0x0458,0x20E8,0x20AF,0x0793,0x23DD,0x1F3B,0x17D4,
++     0x1879,0x2262,0x101D,0x224A,0x0D12,0x01F0,0x1B7D,0x1BEE,0x224F,0x04C7,
++     0x1D8F,0x132F,0x1E94,0x0F26,0x2193,0x164A,0x1B0A,0x22F2,0x0393,0x00DA,
++     0x0924,0x1DCD,0x17A2,0x038D,0x0263,0x10AA,0x2344,0x089B,0x0085,0x0C80,
++     0x196A,0x16E7,0x09C5,0x0903,0x08D3,0x21AE,0x0255,0x049D,0x1F67,0x207C,
++     0x0CCA,0x055C,0x0E8F,0x1FD3,0x15A9,0x1B9E,0x1640,0x0983,0x08CC,0x0CE6,
++     0x0E5E,0x15CF,0x2248,0x0BDB,0x1FB4,0x1BD6,0x08B2,0x092B,0x10B7,0x1832,
++     0x1558,0x214F,0x005A,0x1E9D,0x15DC,0x1DAB,0x0435,0x199F,0x0B42,0x23DA,
++     0x1BCD,0x1339,0x095C,0x1A89,0x08FA,0x2379,0x0F74,0x060A,0x1408,0x0EB3,
++     0x1559,0x00AC,0x0D0D,0x14D4,0x07B1,0x1ACC,0x1707,0x03C4,0x0FBE,0x0C76,
++     0x21A8,0x0A0B,0x0D60,0x1E97,0x1625,0x117A,0x0415,0x008F,0x1F9C,0x00A6,
++     0x19C5,0x04E7,0x21F2,0x0E08,0x17BA,0x10B9,0x0656,0x22C4,0x2048,0x070E,
++     0x15CB,0x01F3,0x0488,0x1167,0x14A2,0x08CF,0x0AC2,0x12BE,0x20A1,0x0501,
++     0x01B2,0x004B,0x10E2,0x09C9,0x01FA,0x05B7,0x0E20,0x0D55,0x003B,0x1413,
++     0x1F7E,0x1A03,0x06CB,0x21C4,0x1FA5,0x1E15,0x0C14,0x0A93,0x133B,0x0498,
++     0x1EB7,0x0BFB,0x1774,0x1F14,0x21D0,0x1930,0x04FF,0x0245,0x1B0C,0x2368,
++     0x198C,0x1487,0x08C2,0x20A0,0x18BE,0x010B,0x16AE,0x1C65,0x08EA,0x23E8,
++     0x09D0,0x158B,0x237D,0x1F72,0x2051,0x188E,0x04A7,0x2074,0x1E91,0x1557,
++     0x07DC,0x2136,0x0F50,0x234C,0x1602,0x0572,0x20DB,0x00B8,0x1929,0x17A5,
++     0x0E82,0x0D86,0x03BD,0x1B02,0x2323,0x0445,0x1AB6,0x02B4,0x0D1A,0x1524,
++     0x03FE,0x1231,0x189A,0x18DE,0x15F6,0x17EB,0x0B89,0x14CA,0x0910,0x09B9,
++     0x1380,0x0559,0x169D,0x22A0,0x00D0,0x0F7A,0x0FB7,0x1FFF,0x1996,0x06FF,
++     0x0FA5,0x1C83,0x0C61,0x1ECE,0x061F,0x193E,0x232E,0x048E,0x0B5A,0x03D4,
++     0x1CF9,0x0B0F,0x2274,0x18EF,0x1CB5,0x1CAF,0x18B1,0x0FF3,0x0712,0x19CD,
++     0x1E6E,0x0A25,0x1375,0x0525,0x19DA,0x0042,0x0BF4,0x1FFC,0x03D0,0x1974,
++     0x1C33,0x0DB3,0x0180,0x0E8C,0x22EB,0x1121,0x00A1,0x02FC,0x1B3C,0x1D68,
++     0x15FD,0x22BF,0x1C5D,0x15AB,0x1BB7,0x00F6,0x2219,0x09FB,0x18DF,0x19D5,
++     0x1396,0x044A,0x1381,0x218D,0x1AEF,0x0603,0x22E1,0x237B,0x0BD3,0x110B,
++     0x171A,0x201F,0x0C92,0x059C,0x1B10,0x14AB,0x21E1,0x074B,0x1C8D,0x083E,
++     0x1684,0x117C,0x0D73,0x1740,0x0F45,0x016C,0x153E,0x15FE,0x08C5,0x2080,
++     0x166E,0x05A2,0x1897,0x18EB,0x0038,0x1F4B,0x1EBA,0x07F5,0x0DB4,0x22E9,
++     0x0977,0x0724,0x0287,0x0DCB,0x0EFD,0x11A7,0x0C66,0x1393,0x078E,0x2017,
++     0x1849,0x03B6,0x175F,0x1E05,0x1FB7,0x0AF6,0x03AC,0x02FF,0x10EE,0x07E6,
++     0x1529,0x1EC1,0x005D,0x14BB,0x074F,0x098E,0x214B,0x0EB2,0x0B96,0x1940,
++     0x11FB,0x0721,0x180F,0x2346,0x1163,0x1BE9,0x1BC4,0x1B7E,0x03D7,0x19C0,
++     0x23F6,0x0C0C,0x1F60,0x0CD4,0x1882,0x22FB,0x21EB,0x0948,0x122B,0x0474,
++     0x121B,0x09C2,0x17CF,0x1993,0x2112,0x2259,0x2292,0x142A,0x00D2,0x125B,
++     0x0E63,0x0F81,0x0E2E,0x01EC,0x0D11,0x1791,0x2353,0x0BC5,0x239B,0x1B97,
++     0x1F68,0x173C,0x1DAD,0x0778,0x165C,0x09E2,0x0D5D,0x0E9C,0x1FBB,0x22FF,
++     0x14DF,0x0F96,0x1D08,0x1ECD,0x2114,0x10EF,0x21F4,0x0F04,0x040B,0x07D6,
++     0x01E1,0x1C95,0x0441,0x163D,0x17EE,0x032B,0x0FE6,0x2273,0x18F5,0x21FA,
++     0x0ED3,0x18DC,0x0001,0x014C,0x1144,0x032A,0x0717,0x1D14,0x04F1,0x0225,
++     0x14E3,0x026F,0x147D,0x076C,0x135B,0x1966,0x15BF,0x12D3,0x0785,0x097D,
++     0x036F,0x1B88,0x1CE2,0x1360,0x0A8B,0x1FBC,0x101F,0x005B,0x0A29,0x1303,
++     0x1CD5,0x0706,0x066E,0x04D7,0x0D9C,0x1B25,0x014F,0x1182,0x1FF0,0x1452,
++     0x0683,0x096C,0x0F79,0x0C1C,0x2394,0x1306,0x1FAD,0x081F,0x1A7D,0x181F,
++     0x0D45,0x219A,0x167A,0x1813,0x0329,0x1876,0x126D,0x097C,0x0EB6,0x1820,
++     0x1374,0x2121,0x11E4,0x0AB4,0x071E,0x03AB,0x0FA1,0x1E0A,0x1E59,0x1C85,
++     0x0197,0x1CCA,0x1148,0x1A81,0x0D04,0x1955,0x1705,0x0ED9,0x01D9,0x102E,
++     0x0480,0x0475,0x1641,0x0101,0x18A1,0x09B3,0x1B5F,0x1CFD,0x054E,0x06D5,
++     0x1A95,0x0301,0x05F6,0x150C,0x0086,0x04DC,0x05BD,0x004E,0x043C,0x1020,
++     0x136B,0x0B6D,0x00B3,0x0FCA,0x1CFC,0x16D4,0x1E32,0x09E3,0x1588,0x1B58,
++     0x0A9A,0x036A,0x0C8B,0x11EF,0x1823,0x0AF3,0x1448,0x1DCA,0x1931,0x05D6,
++     0x0CF9,0x1207,0x063F,0x0F88,0x0D46,0x1FCE,0x162F,0x08CD,0x13A6,0x181B,
++     0x2107,0x2197,0x01AF,0x09A1,0x07AA,0x01BF,0x1932,0x118F,0x1EB0,0x0A7F,
++     0x087D,0x0E2F,0x1FE0,0x12EF,0x1BEF,0x1D4D,0x1C19,0x1856,0x1D19,0x1294,
++     0x1D57,0x176C,0x02DC,0x101C,0x22B7,0x0135,0x17B5,0x0310,0x1548,0x1D2A,
++     0x1626,0x0B31,0x1E7C,0x1BE7,0x140C,0x1B81,0x019E,0x1F11,0x11C6,0x0939,
++     0x2182,0x05BB,0x06C8,0x00E4,0x0529,0x1B26,0x13FC,0x1202,0x1A32,0x07F3,
++     0x098D,0x0E58,0x01B7,0x1DB0,0x0152,0x189C,0x2073,0x0D56,0x1D5B,0x0D36,
++     0x09CC,0x18A8,0x0E5D,0x143C,0x1063,0x16CA,0x13CA,0x1E38,0x2359,0x1B9C,
++     0x0A8A,0x0A84,0x046C,0x0FF5,0x0D97,0x0A27,0x0E6B,0x10C2,0x1619,0x0DEE,
++     0x1DDC,0x0576,0x01C8,0x1069,0x0D4F,0x20AD,0x198B,0x09D5,0x0B22,0x033F,
++     0x20AA,0x1CCC,0x005F,0x0D68,0x19CB,0x1081,0x1D97,0x0AE2,0x1C5C,0x0F05,
++     0x123C,0x0B20,0x2371,0x0CEB,0x00CB,0x1F06,0x00BB,0x191B,0x0117,0x2376,
++     0x17BC,0x19CE,0x216D,0x1F07,0x1455,0x14B8,0x1C6A,0x1B80,0x0E5B,0x1851,
++     0x0172,0x23AA,0x0A22,0x0D7F,0x0720,0x0136,0x0666,0x1019,0x13FE,0x1ACE,
++     0x0B51,0x0C24,0x050E,0x1873,0x08AE,0x16AB,0x1A90,0x0A76,0x1552,0x19C4,
++     0x0FAB,0x0ABC,0x06C1,0x050A,0x0E49,0x1FCB,0x11A1,0x1387,0x0C47,0x2174,
++     0x0570,0x1BA2,0x1104,0x00AD,0x1444,0x2383,0x08C7,0x1127,0x056D,0x0D7E,
++     0x1CB9,0x02FA,0x100A,0x0C51,0x0FBA,0x1A94,0x128B,0x1859,0x2190,0x1B20,
++     0x1F56,0x186F,0x01D8,0x01F2,0x10A3,0x192C,0x0528,0x211B,0x1C92,0x0239,
++     0x0334,0x14C0,0x1D5A,0x1DE9,0x12F2,0x0A44,0x17CA,0x0F62,0x15D8,0x069F,
++     0x1D07,0x11FA,0x0816,0x153C,0x1C81,0x02F1,0x2342,0x23F7,0x0160,0x117F,
++     0x1BB9,0x1039,0x2063,0x1E3B,0x0C57,0x13E1,0x139A,0x1F12,0x15EA,0x1D48,
++     0x19C3,0x1A31,0x050C,0x13C5,0x0091,0x13A7,0x1765,0x01F8,0x1B75,0x0EA2,
++     0x1B6D,0x09EC,0x0312,0x113D,0x012D,0x18C3,0x08A0,0x0452,0x0D87,0x167D,
++     0x1DA9,0x0FF6,0x2340,0x19AD,0x007B,0x0CBC,0x1D1A,0x1AE4,0x09B4,0x11B2,
++     0x1B2C,0x14CE,0x1C5E,0x0222,0x162D,0x0C63,0x0584,0x0040,0x1D1F,0x1AF7,
++     0x0C96,0x132C,0x086B,0x136F,0x19E1,0x0DDA,0x22A5,0x22F7,0x2249,0x20C5,
++     0x0A19,0x0FDC,0x1834,0x0C58,0x1C56,0x01DC,0x1D84,0x0A66,0x2336,0x0955,
++     0x0900,0x1ED6,0x0361,0x0D58,0x1D4B,0x10C0,0x1852,0x040E,0x0F0B,0x1978,
++     0x12E8,0x2261,0x05FE,0x0BD2,0x13C8,0x0F3C,0x07A4,0x18CC,0x0A00,0x0642,
++     0x0D65,0x1DA8,0x0D15,0x2168,0x05B5,0x0DF8,0x2352,0x0408,0x07D9,0x15FA,
++     0x0E88,0x0C85,0x1FAB,0x16F5,0x1798,0x12BD,0x1FB3,0x09B6,0x12C2,0x17FA,
++     0x1BE6,0x1434,0x1DD6,0x0E18,0x08F5,0x07A7,0x0AA9,0x0099,0x1E5B,0x09F4,
++     0x1C02,0x0737,0x08B9,0x0504,0x0C05,0x0813,0x1716,0x06BE,0x1ECA,0x1995,
++     0x0D63,0x0745,0x1870,0x221D,0x0C6E,0x20D2,0x23C0,0x11D8,0x0D23,0x1924,
++     0x0D34,0x10AF,0x2339,0x1F37,0x0ACC,0x228E,0x20B1,0x127E,0x0293,0x0294,
++     0x18D2,0x0F77,0x1C89,0x035F,0x1441,0x0143,0x219C,0x042F,0x092E,0x1AC0,
++     0x0932,0x1D93,0x1AE6,0x1E03,0x0F87,0x16B4,0x15B1,0x066F,0x07A1,0x21A6,
++     0x20BD,0x201C,0x10F2,0x16B2,0x13B8,0x0C90,0x013E,0x191C,0x1ACA,0x10E0,
++     0x12DA,0x0047,0x15B8,0x1E51,0x0693,0x02CF,0x169A,0x1571,0x2167,0x022F,
++     0x2150,0x11A0,0x137D,0x143A,0x02D9,0x07AC,0x0B18,0x1730,0x0E1B,0x0BC3,
++     0x2178,0x1656,0x1041,0x1FDE,0x044C,0x21EC,0x1CF0,0x04A0,0x17F2,0x1D8B,
++     0x172B,0x0826,0x0B38,0x1FB6,0x07BA,0x1632,0x0BFF,0x12B8,0x0073,0x1D94,
++     0x0457,0x05B8,0x0CA6,0x08EC,0x1663,0x07CF,0x0E04,0x2116,0x23D6,0x1F6F,
++     0x0884,0x17D1,0x0B14,0x1222,0x0774,0x16C8,0x16A8,0x1DCF,0x1E21,0x1A42,
++     0x0CF4,0x184F,0x1AD3,0x1DA5,0x04F9,0x0F39,0x2173,0x091B,0x0648,0x21A7,
++     0x1481,0x15FB,0x0C69,0x064B,0x00BE,0x08D5,0x211D,0x07E5,0x22F6,0x10A7,
++     0x0791,0x1F88,0x0FB6,0x2004,0x014E,0x187E,0x17D7,0x2345,0x0C83,0x0DE6,
++     0x12B6,0x0365,0x1D4A,0x1C43,0x1266,0x083D,0x1A5F,0x0029,0x223B,0x1809,
++     0x0589,0x001C,0x0F90,0x1B77,0x10CC,0x12CB,0x0703,0x0471,0x0E6E,0x05E6,
++     0x0E95,0x0912,0x18DD,0x1EEA,0x02CA,0x04C2,0x0BDC,0x0EE6,0x158A,0x189B,
++     0x17AD,0x0CD8,0x1246,0x1457,0x0938,0x1D87,0x175C,0x0A85,0x1F20,0x17EC,
++     0x08E7,0x0678,0x0978,0x145E,0x00CF,0x001F,0x0D90,0x09F6,0x20E4,0x217D,
++     0x13E7,0x1CE0,0x1400,0x156D,0x084C,0x1881,0x0140,0x208B,0x21E5,0x041A,
++     0x02A0,0x0F23,0x22CA,0x0520,0x087A,0x1FAC,0x0FE2,0x15CD,0x05CF,0x1C34,
++     0x0BA3,0x033D,0x14DB,0x1251,0x0071,0x15FF,0x0139,0x21FB,0x003C,0x0629,
++     0x008A,0x03ED,0x0EA7,0x018B,0x146D,0x19D4,0x167F,0x1F24,0x21FC,0x04E9,
++     0x057F,0x0CB5,0x0F76,0x1B1A,0x19B0,0x1CDB,0x211E,0x0775,0x17D9,0x0494,
++     0x0C1F,0x0DB6,0x2184,0x1702,0x1165,0x1C4A,0x1043,0x0A5A,0x1004,0x03BE,
++     0x0B33,0x151A,0x038B,0x12ED,0x1287,0x2205,0x1F05,0x1AC8,0x19E3,0x1506,
++     0x0891,0x05DA,0x1C04,0x1ED3,0x0A11,0x061C,0x0DC5,0x01D5,0x1459,0x032E,
++     0x1A7B,0x12E3,0x1A8B,0x17D3,0x1391,0x0ADA,0x0A24,0x13E9,0x05DB,0x2050,
++     0x12C9,0x216A,0x0A09,0x149D,0x142B,0x0FD3,0x229D,0x19FA,0x0547,0x1984,
++     0x0E06,0x1827,0x0477,0x19D1,0x05DF,0x1248,0x12FF,0x01A2,0x10E8,0x095B,
++     0x2227,0x1262,0x00DC,0x0354,0x07E8,0x03DF,0x01FC,0x1AC1,0x0272,0x1AED,
++     0x090B,0x209E,0x1CCB,0x1AA5,0x218B,0x1D9C,0x1467,0x12B2,0x0D2C,0x1B3D,
++     0x0EC1,0x13F3,0x1330,0x1629,0x1576,0x2275,0x0684,0x0C41,0x0CD9,0x1836,
++     0x1280,0x104D,0x168D,0x1DE8,0x0E66,0x0A8C,0x2027,0x0448,0x0DA8,0x0A50,
++     0x1A4F,0x1A1A,0x0CF1,0x2180,0x03C5,0x1CAA,0x0B84,0x18EE,0x026B,0x1E44,
++     0x1F92,0x14F6,0x210E,0x0444,0x030A,0x140E,0x0F6B,0x0F44,0x0894,0x1407,
++     0x085A,0x091E,0x02B7,0x0B83,0x2238,0x1E25,0x0A32,0x19F5,0x06A9,0x239E,
++     0x10D9,0x2019,0x21A2,0x08A7,0x17DF,0x1A82,0x138F,0x08AA,0x12E6,0x074D,
++     0x1CDD,0x1FE1,0x0691,0x1F89,0x0810,0x05A9,0x00AB,0x0AD4,0x0623,0x02D4,
++     0x09D3,0x1232,0x2002,0x1FC3,0x1B73,0x0704,0x0150,0x197D,0x1646,0x0595,
++     0x1BAD,0x2146,0x0AD5,0x074C,0x03FD,0x1018,0x1F08,0x0989,0x1204,0x0499,
++     0x17E4,0x001E,0x0A23,0x13BC,0x1150,0x119C,0x056B,0x0BD7,0x0B8A,0x0AD7,
++     0x05A1,0x0AA6,0x1B27,0x18D1,0x0D42,0x14E9,0x0779,0x027A,0x1C76,0x01A7,
++     0x1FB0,0x1270,0x16C6,0x0142,0x1FF6,0x1172,0x11EB,0x212C,0x071D,0x1543,
++     0x170C,0x0F2F,0x1F9D,0x0F95,0x1CC7,0x043B,0x12EA,0x0F10,0x1D6E,0x0722,
++     0x00D6,0x1829,0x1244,0x1E0B,0x18CF,0x1C16,0x22DE,0x093B,0x01FD,0x15EF,
++     0x2087,0x1E24,0x02FB,0x1F1A,0x009D,0x0C20,0x0A35,0x18F9,0x0363,0x16ED,
++     0x0F4C,0x22B3,0x20A6,0x23C9,0x0C9D,0x10CF,0x0FC2,0x0AB1,0x1514,0x1D88,
++     0x1637,0x0844,0x06AF,0x06A7,0x0400,0x1F96,0x15D3,0x1566,0x0A06,0x1A38,
++     0x006A,0x03EA,0x1E4B,0x119F,0x1B8B,0x1049,0x1080,0x1B21,0x13BE,0x0F57,
++     0x18F6,0x22E4,0x1E9F,0x1BE1,0x1353,0x1644,0x0A45,0x1AA3,0x01C9,0x06F7,
++     0x10EB,0x0032,0x07F8,0x1CED,0x202C,0x0957,0x17B2,0x006B,0x1456,0x03DA,
++     0x061B,0x1A60,0x1C9A,0x137B,0x1EA2,0x1D61,0x0000,0x17FB,0x1BE2,0x046A,
++     0x1CBF,0x2192,0x1F0E,0x1968,0x0AE9,0x1508,0x0182,0x2324,0x2113,0x13CC,
++     0x09F5,0x0B62,0x1283,0x0FFC,0x150B,0x0794,0x0A0D,0x236B,0x1590,0x0808,
++     0x05D2,0x105A,0x1C80,0x207F,0x05CB,0x12FB,0x22BE,0x012A,0x0DC3,0x01CF,
++     0x023C,0x063D,0x060F,0x0447,0x2257,0x01C2,0x050B,0x03A1,0x0780,0x1782,
++     0x12E7,0x1E52,0x135C,0x151C,0x14EB,0x1B4E,0x2250,0x168C,0x118D,0x031D,
++     0x0680,0x2088,0x12D7,0x2133,0x14E0,0x1BE5,0x201E,0x0C3B,0x23AC,0x1B22,
++     0x01D0,0x0B17,0x1904,0x139F,0x1DAA,0x1418,0x0327,0x1527,0x0920,0x0715,
++     0x03C3,0x052C,0x0E8A,0x0812,0x017D,0x0C1D,0x02AA,0x1A7F,0x1DE4,0x058F,
++     0x194E,0x2343,0x0F11,0x1F18,0x0B05,0x2271,0x08E1,0x1CC6,0x1D38,0x20E7,
++     0x12DE,0x00E5,0x180C,0x0AC7,0x0C27,0x1C97,0x2304,0x10E6,0x071F,0x0C03,
++     0x0249,0x1FAA,0x0374,0x1E99,0x1FD5,0x2254,0x1B4C,0x0A92,0x2172,0x0B36,
++     0x011B,0x1CB2,0x0560,0x18F4,0x0460,0x0B24,0x1910,0x0596,0x1C30,0x0BE5,
++     0x1B79,0x1E40,0x21CA,0x0997,0x0F89,0x0173,0x215C,0x0D4E,0x1E14,0x1A45,
++     0x227E,0x18F7,0x1314,0x0C71,0x1D55,0x02B8,0x0C45,0x2232,0x10DC,0x155A,
++     0x1581,0x14A6,0x1683,0x108B,0x0247,0x2247,0x1F69,0x1EC7,0x0F1D,0x0A2A,
++     0x10FA,0x1660,0x16CE,0x0D18,0x0DDD,0x0BC6,0x0269,0x1911,0x187B,0x16F7,
++     0x188A,0x1FA0,0x1EA6,0x11B5,0x04C9,0x214E,0x065F,0x017A,0x05CE,0x1C32,
++     0x194D,0x1C44,0x02C1,0x1BCF,0x235B,0x228D,0x1A2C,0x03A3,0x017B,0x12D0,
++     0x19E8,0x08EF,0x1F25,0x1E65,0x0BA9,0x0DD9,0x1CF8,0x103A,0x1E22,0x15DD,
++     0x03D3,0x1EDE,0x1CF7,0x03C1,0x04F3,0x2240,0x1FFE,0x03BB,0x0D7D,0x1EBF,
++     0x1BA5,0x18E6,0x1CCF,0x1D8C,0x202E,0x0BA2,0x1A75,0x0065,0x104E,0x0661,
++     0x1B85,0x1A7A,0x0DD5,0x0450,0x1CEE,0x026E,0x1C0C,0x10B2,0x20F2,0x0AA7,
++     0x12F4,0x08EB,0x23AB,0x07B3,0x130B,0x094D,0x1EA3,0x18F2,0x0C9C,0x1363,
++     0x2036,0x13A8,0x16B1,0x1428,0x1F02,0x01E8,0x039E,0x1BED,0x1D98,0x08E2,
++     0x14D6,0x1E56,0x2388,0x0C1E,0x19EE,0x04AA,0x0EB8,0x09E5,0x233E,0x1D66,
++     0x07C5,0x211A,0x1088,0x0954,0x0E2A,0x1BC8,0x07A3,0x1E1E,0x1D36,0x1B87,
++     0x1544,0x0137,0x11DB,0x01C0,0x0845,0x216B,0x1BFC,0x08F6,0x0A5D,0x1EDF,
++     0x0FDE,0x0731,0x110A,0x0FB9,0x0E86,0x1415,0x14E7,0x17A3,0x02BC,0x0C60,
++     0x2111,0x0B41,0x234B,0x1C60,0x118A,0x0FDF,0x17CD,0x1323,0x087F,0x0025,
++     0x165D,0x1606,0x0823,0x1368,0x07F2,0x0743,0x02E4,0x23D0,0x0803,0x14AE,
++     0x1465,0x0FE3,0x02BB,0x0ACF,0x137F,0x2212,0x1272,0x01B6,0x0C07,0x08AB,
++     0x11E1,0x0274,0x171F,0x1126,0x09D2,0x1C01,0x23C5,0x1AB0,0x0F3E,0x0DAC,
++     0x00D5,0x14C2,0x17C1,0x028F,0x0DE9,0x06C3,0x0DE2,0x1A70,0x1AEC,0x1638,
++     0x1727,0x15ED,0x1532,0x13FD,0x123F,0x207E,0x0825,0x0066,0x14EC,0x1EE4,
++     0x1FE9,0x14B3,0x1692,0x0557,0x07A0,0x11D6,0x21DD,0x05FA,0x2014,0x0A0C,
++     0x152B,0x0425,0x00D7,0x00F2,0x0316,0x0ECA,0x1B14,0x0896,0x15B3,0x0B80,
++     0x1D20,0x0AF5,0x09C8,0x0BF6,0x134F,0x0E00,0x1B99,0x0953,0x2341,0x21C7,
++     0x1811,0x1032,0x1898,0x1286,0x1998,0x06B0,0x19FB,0x0790,0x15A6,0x16FB,
++     0x16C4,0x0B28,0x0C7B,0x0FED,0x19AC,0x113F,0x1EC3,0x0A52,0x132A,0x048D,
++     0x1B07,0x11D1,0x1F75,0x0838,0x04A5,0x04CB,0x046E,0x0A58,0x076E,0x12DB,
++     0x0AE8,0x185F,0x15E3,0x18A5,0x18CE,0x0236,0x0A46,0x1886,0x0B69,0x03CD,
++     0x17E6,0x0A21,0x06D1,0x0964,0x0630,0x231B,0x1642,0x19FF,0x1880,0x1B6B,
++     0x105C,0x0FCC,0x0043,0x1A4E,0x1554,0x0781,0x0034,0x1D16,0x1522,0x1ABF,
++     0x0F03,0x1B47,0x1A21,0x1E8E,0x007A,0x1E3E,0x0EB0,0x0DD7,0x0534,0x0241,
++     0x051D,0x0C8F,0x0B55,0x1589,0x0256,0x194B,0x1D31,0x0828,0x09AD,0x075F,
++     0x02AF,0x0BAF,0x1C49,0x20ED,0x1D21,0x0E6A,0x1723,0x19F6,0x114E,0x1419,
++     0x1952,0x0F40,0x0B0D,0x2201,0x1D29,0x19C9,0x0A2F,0x1515,0x1F27,0x1CDE,
++     0x0DD3,0x1768,0x0E56,0x1A9C,0x12A4,0x11BE,0x0B46,0x0DAE,0x0AFC,0x164B,
++     0x08D7,0x003A,0x0BDD,0x1E4E,0x0BCF,0x105E,0x2000,0x1BA1,0x19F4,0x2100,
++     0x20D7,0x2398,0x1C2E,0x04BE,0x0199,0x221E,0x0532,0x07B7,0x155B,0x006D,
++     0x16C1,0x1C74,0x0D61,0x17E2,0x0AFF,0x1AC4,0x00E9,0x09E4,0x11BB,0x0674,
++     0x22BD,0x1186,0x0578,0x202A,0x123B,0x15E8,0x0E8B,0x0403,0x097A,0x0105,
++     0x14ED,0x14CB,0x0FDD,0x03FF,0x17AF,0x1E39,0x02F3,0x13D3,0x0C89,0x20BC,
++     0x20B2,0x15BC,0x1CAC,0x2372,0x1B48,0x08D2,0x0446,0x1177,0x0D1F,0x17C6,
++     0x1989,0x0516,0x0DDC,0x024D,0x16AA,0x09EE,0x1062,0x0B50,0x1F77,0x037F,
++     0x07D2,0x093C,0x238A,0x0583,0x2375,0x0CA3,0x18EA,0x182A,0x0621,0x1036,
++     0x02B5,0x01E2,0x22DB,0x0963,0x2399,0x060C,0x1152,0x0F91,0x048A,0x1A7E,
++     0x1E87,0x1BB0,0x15C4,0x1112,0x1021,0x11E2,0x0C56,0x07DD,0x1D46,0x0210,
++     0x04F5,0x1C0E,0x0B8E,0x1040,0x1A6C,0x1AF8,0x08D8,0x1313,0x1C8A,0x20B8,
++     0x0B54,0x08A4,0x0094,0x131E,0x0A86,0x0A28,0x0D10,0x0A74,0x1AD2,0x0653,
++     0x172C,0x21C1,0x1490,0x04FC,0x0BFA,0x1347,0x0B2F,0x1DC4,0x23DB,0x0FB8,
++     0x23BB,0x0C72,0x03E5,0x186A,0x0F9D,0x1295,0x1808,0x04C6,0x1960,0x1FA7,
++     0x0DE0,0x239F,0x1D5F,0x0EED,0x1F79,0x2068,0x06B8,0x0D99,0x15F5,0x1028,
++     0x0202,0x0BAD,0x0098,0x060D,0x0E84,0x18FB,0x1549,0x1E63,0x0ED6,0x009A,
++     0x0B72,0x0B7B,0x06B1,0x0341,0x08F4,0x112A,0x18D5,0x0919,0x1731,0x19A5,
++     0x16FA,0x0195,0x0F9C,0x123D,0x0968,0x0E17,0x0EBF,0x0D27,0x1A33,0x17FD,
++     0x221B,0x208C,0x0694,0x1713,0x1696,0x0692,0x0006,0x1C3E,0x1617,0x0267,
++     0x111D,0x2122,0x025E,0x200E,0x0D22,0x1627,0x1329,0x0048,0x1265,0x0D7A,
++     0x1402,0x149C,0x02A1,0x022C,0x0F75,0x0783,0x124A,0x1134,0x0E1E,0x1C4C,
++     0x1CB0,0x17F1,0x046F,0x0280,0x068B,0x1C46,0x1FDA,0x0D82,0x1CD1,0x0590,
++     0x056E,0x015A,0x121F,0x0B1D,0x019D,0x1EB5,0x0A82,0x16E8,0x117D,0x098F,
++     0x1513,0x122A,0x0C18,0x0FA0,0x1EB1,0x0DD0,0x0E4A,0x23F8,0x190B,0x2053,
++     0x16C0,0x18A3,0x0127,0x0AE1,0x0F52,0x12AF,0x0E24,0x0C32,0x08A6,0x1D3F,
++     0x00CA,0x229B,0x11F6,0x1A46,0x1BF3,0x1EC6,0x0275,0x13B4,0x1210,0x0A49,
++     0x057C,0x0E3F,0x206B,0x05DC,0x21D5,0x18A7,0x14D3,0x1F57,0x1FF8,0x2220,
++     0x0962,0x1BFF,0x2301,0x08AF,0x1EEC,0x20CF,0x17E9,0x2302,0x0FBD,0x1BC9,
++     0x0585,0x0784,0x17BE,0x1B2B,0x111A,0x0AB3,0x1F1F,0x0505,0x0019,0x235F,
++     0x0B59,0x039A,0x03F7,0x193C,0x1994,0x1C1E,0x0CBB,0x0D72,0x1706,0x1C37,
++     0x0002,0x098B,0x2046,0x056A,0x0A1E,0x0A04,0x11C2,0x0883,0x06B3,0x0B48,
++     0x07DF,0x1122,0x04EE,0x215D,0x11D7,0x12A9,0x0F9A,0x0104,0x1618,0x175E,
++     0x1A28,0x1D13,0x1DC9,0x0111,0x110C,0x1779,0x146E,0x1928,0x15B0,0x072C,
++     0x0773,0x1CA2,0x0C3C,0x0BF2,0x1587,0x2269,0x10B0,0x0A6F,0x214D,0x0EEC,
++     0x1EF6,0x14EE,0x20C4,0x1A65,0x1A0B,0x23FA,0x0336,0x1603,0x0946,0x0D6B,
++     0x0545,0x1B9A,0x0605,0x0C95,0x2185,0x0EE3,0x1F98,0x1EB3,0x0A39,0x05EC,
++     0x1A5C,0x123A,0x0848,0x234E,0x023A,0x183E,0x16BD,0x014D,0x106A,0x0EF5,
++     0x213C,0x0046,0x0395,0x2321,0x238D,0x1AEE,0x1170,0x03DD,0x1C70,0x1D65,
++     0x0CF0,0x224D,0x1F87,0x1D0A,0x09A4,0x14CF,0x0A02,0x0093,0x121A,0x02EF,
++     0x22CC,0x0B8D,0x1E00,0x0B58,0x0FF9,0x1D62,0x1E6B,0x2387,0x138B,0x052D,
++     0x081C,0x10A0,0x0194,0x22F9,0x1E5F,0x1E3D,0x06C9,0x167C,0x0096,0x1570,
++     0x19A7,0x0B98,0x18BA,0x12AA,0x11CC,0x22C7,0x0064,0x0440,0x0B7E,0x23BF,
++     0x01A6,0x09ED,0x000B,0x0834,0x008E,0x0A7E,0x0D32,0x0744,0x207A,0x03AF,
++     0x062B,0x21DB,0x1B37,0x1FB1,0x1653,0x1807,0x141F,0x18AF,0x1343,0x0D28,
++     0x221A,0x1064,0x1BAB,0x199D,0x19E9,0x23FF,0x22EF,0x0CB1,0x0EC2,0x0958,
++     0x09D7,0x20EE,0x1AAF,0x1267,0x020B,0x1E58,0x0F2A,0x1B2F,0x0A7B,0x0EF2,
++     0x2334,0x0131,0x164D,0x238E,0x0352,0x1C71,0x1B9B,0x1F54,0x08DD,0x069C,
++     0x0C65,0x1FEB,0x21C2,0x0C38,0x1743,0x23E1,0x10C1,0x110E,0x13EE,0x239A,
++     0x125D,0x21DC,0x057B,0x1B1F,0x0D26,0x0121,0x02C5,0x0189,0x0867,0x190F,
++     0x0A8E,0x064E,0x0C31,0x2149,0x0A5C,0x1B06,0x0A6D,0x2277,0x0DFC,0x1B2A,
++     0x0FBC,0x051A,0x0767,0x00BF,0x1862,0x1414,0x1CDA,0x1484,0x1098,0x0657,
++     0x1C29,0x1C9F,0x0DBF,0x1B28,0x1AAD,0x204C,0x077B,0x0888,0x0ACA,0x1575,
++     0x1780,0x1AC5,0x085E,0x14CD,0x1CB3,0x033C,0x1E62,0x1650,0x0F7E,0x1CE4,
++     0x059E,0x20D6,0x072D,0x1371,0x2332,0x115F,0x204E,0x0282,0x11BF,0x08CE,
++     0x1C10,0x11AD,0x10FF,0x15BD,0x04E1,0x22D9,0x1634,0x048B,0x0346,0x185A,
++     0x083B,0x06F9,0x2124,0x072E,0x1ABA,0x050D,0x18BC,0x003E,0x090A,0x1F2C,
++     0x1734,0x0EE7,0x131A,0x0BB5,0x042E,0x12AD,0x1D5E,0x20EF,0x0C7F,0x1245,
++     0x1AD5,0x0895,0x00ED,0x2314,0x19B9,0x055D,0x20A5,0x112C,0x0436,0x16DA,
++     0x0E12,0x0276,0x178B,0x0EBD,0x0B2E,0x23D5,0x0941,0x1C14,0x1FA2,0x0A90,
++     0x1A99,0x1891,0x02BF,0x1305,0x1B18,0x0E0F,0x0BC1,0x0CD7,0x05AB,0x1ED5,
++     0x1D53,0x04D0,0x0D98,0x062F,0x0BCC,0x0B88,0x2031,0x0295,0x1F29,0x1ECB,
++     0x0DB9,0x00C8,0x2396,0x0A17,0x1773,0x1AC9,0x0459,0x1AD6,0x22CF,0x1DC2,
++     0x1BB8,0x1A23,0x1DFE,0x0604,0x213A,0x1357,0x1EA1,0x20D3,0x1137,0x1233,
++     0x198D,0x1B04,0x041E,0x200D,0x233A,0x02A5,0x0CA7,0x0E15,0x17FE,0x216E,
++     0x07C0,0x0BB0,0x0B9C,0x0A8F,0x0B15,0x0BDA,0x14B0,0x15CA,0x189E,0x19DC,
++     0x1ED9,0x0076,0x0A97,0x0918,0x0BED,0x0B81,0x0E0A,0x11DC,0x165A,0x037D,
++     0x1B74,0x1438,0x1129,0x22A2,0x0373,0x0D43,0x20F0,0x0DDE,0x0AB2,0x0771,
++     0x22F5,0x05F5,0x0662,0x1B39,0x16B0,0x1EF3,0x0AF2,0x0E44,0x0221,0x0A6E,
++     0x0D47,0x1DAC,0x18F1,0x10F6,0x2094,0x2294,0x0B21,0x0192,0x1A1E,0x03C9,
++     0x1777,0x1462,0x2089,0x0A4F,0x1A12,0x1A6B,0x1737,0x1D18,0x0C98,0x2207,
++     0x1FDD,0x2176,0x0109,0x0537,0x00BD,0x1916,0x1C2A,0x1377,0x1094,0x1D72,
++     0x00EE,0x0057,0x1463,0x171B,0x00EB,0x1AF0,0x15B9,0x0368,0x04CC,0x05AC,
++     0x07CA,0x1A62,0x0AFD,0x0C00,0x0548,0x153B,0x00AE,0x08F1,0x17C9,0x0428,
++     0x07F0,0x23D8,0x0DD4,0x201D,0x0C4D,0x04EA,0x0161,0x0C02,0x016D,0x145D,
++     0x1CA8,0x02F7,0x17F3,0x1FEC,0x1933,0x0E23,0x0639,0x1CD8,0x20B7,0x0284,
++     0x1016,0x0DC7,0x05A5,0x0E70,0x1A43,0x1DCB,0x09E8,0x13A9,0x06F5,0x1454,
++     0x033A,0x1E82,0x088D,0x0736,0x14C5,0x14FB,0x190E,0x0B60,0x13EA,0x1260,
++     0x0F8D,0x140B,0x1EDC,0x1E93,0x1095,0x2258,0x088E,0x22F0,0x08F2,0x2364,
++     0x1F97,0x1024,0x064F,0x0C5F,0x2052,0x1BE4,0x1EE9,0x1FE3,0x15A8,0x0DB1,
++     0x0D1D,0x17F7,0x20D8,0x07F6,0x2077,0x15E0,0x1C2F,0x1709,0x05BE,0x1B1B,
++     0x2162,0x1A39,0x1C2C,0x13F7,0x19EC,0x20D4,0x0655,0x049C,0x17AA,0x20E6,
++     0x04F4,0x01DE,0x038F,0x21FF,0x12BB,0x14C3,0x1D23,0x0730,0x0E5A,0x1ADD,
++     0x2300,0x1118,0x21D7,0x0FC5,0x0497,0x0390,0x11EA,0x18E5,0x1EF4,0x1EAE,
++     0x028A,0x102B,0x1365,0x05B1,0x18ED,0x0016,0x0012,0x0887,0x1E68,0x0933,
++     0x1166,0x0F5D,0x1297,0x06B9,0x18C5,0x0F80,0x2305,0x12A0,0x0AA8,0x1766,
++     0x1E2C,0x021D,0x1B30,0x0D3C,0x1585,0x1815,0x1B8D,0x00C1,0x02DD,0x0BD6,
++     0x06DC,0x06AD,0x025B,0x0A59,0x1D6B,0x15E2,0x1388,0x1AE3,0x1E26,0x21AF,
++     0x1CAD,0x02B0,0x09B8,0x0CFA,0x1DED,0x2267,0x0ABA,0x21F9,0x0AB8,0x1278,
++     0x1C58,0x1BCA,0x1042,0x1F4D,0x1F5B,0x1B09,0x0B08,0x0217,0x2097,0x05BC,
++     0x1219,0x1C6B,0x1885,0x1A69,0x01D1,0x0246,0x077C,0x13C4,0x11E9,0x01DD,
++     0x206F,0x0A41,0x16DD,0x08E9,0x1578,0x0846,0x0B99,0x0C4E,0x03A6,0x17F5,
++     0x13AB,0x1D2D,0x1B03,0x1F7F,0x0A96,0x1726,0x1AD9,0x1180,0x0B0C,0x0796,
++     0x1718,0x0CEA,0x0D8B,0x1B78,0x1C66,0x1BFA,0x07C3,0x1195,0x06C2,0x041C,
++     0x11EC,0x148E,0x0E52,0x1987,0x08BC,0x0B7C,0x02C8,0x073D,0x23DE,0x1A8E,
++     0x1D7C,0x220E,0x01E0,0x14C7,0x18B7,0x20E0,0x0739,0x088B,0x0CF5,0x1498,
++     0x0487,0x1699,0x035D,0x0416,0x0406,0x0C67,0x1188,0x1A30,0x00F7,0x063C,
++     0x09B7,0x030F,0x09BD,0x0D5F,0x022D,0x1D00,0x1C45,0x1AFA,0x0D16,0x0325,
++     0x1794,0x21E0,0x18AD,0x09FC,0x0F48,0x1F49,0x0463,0x11E0,0x1BF4,0x2169,
++     0x077D,0x0644,0x1497,0x1A51,0x0FC0,0x14DE,0x2049,0x0110,0x0A3D,0x062D,
++     0x08BE,0x16B3,0x0021,0x20C3,0x0BA5,0x21B4,0x05AA,0x0B16,0x19C1,0x2128,
++     0x0468,0x0E07,0x1F3A,0x052B,0x1161,0x0B9A,0x13FF,0x17D8,0x161B,0x2029,
++     0x0FA3,0x0E29,0x0B70,0x1605,0x1A3F,0x1E78,0x1EC4,0x1429,0x1906,0x19BF,
++     0x07EC,0x1DFA,0x2035,0x0A67,0x22A8,0x1863,0x21E4,0x04E2,0x1175,0x0411,
++     0x1B56,0x037C,0x0262,0x0865,0x000A,0x2287,0x1279,0x1FD9,0x1667,0x1DC1,
++     0x1AF3,0x0148,0x0C59,0x199A,0x0943,0x0D07,0x233C,0x073A,0x14AD,0x12CF,
++     0x0971,0x19EB,0x1EF9,0x15F9,0x0ADC,0x1101,0x1AD4,0x0540,0x0727,0x0986,
++     0x0D69,0x0A20,0x21A5,0x10CA,0x21C6,0x0EAA,0x06FC,0x0E47,0x15F4,0x222C,
++     0x02C2,0x0580,0x05C0,0x11DA,0x10D4,0x0DCF,0x0451,0x021A,0x228C,0x2104,
++     0x1E7A,0x150F,0x043F,0x1B4B,0x0B76,0x1384,0x0208,0x0F33,0x001B,0x1A04,
++     0x21BD,0x006E,0x1889,0x00AA,0x12C5,0x03FC,0x11F8,0x0D2F,0x0CDF,0x1F8C,
++     0x0526,0x1659,0x17EA,0x0BCA,0x119D,0x12B7,0x1392,0x0AB6,0x1331,0x1198,
++     0x15EC,0x01C1,0x22AB,0x130C,0x14F0,0x227B,0x07E9,0x1E4C,0x016B,0x0A13,
++     0x0E37,0x1136,0x1C8E,0x112F,0x1CE8,0x18D8,0x0372,0x011A,0x1411,0x07D1,
++     0x076B,0x085C,0x0084,0x0714,0x0E3C,0x21F7,0x0F6C,0x23E9,0x0385,0x1B17,
++     0x179C,0x159A,0x0506,0x135A,0x0882,0x1C36,0x1AA6,0x1E11,0x1A1F,0x1EF5,
++     0x0E9D,0x0335,0x1658,0x04B8,0x06A2,0x061E,0x17B6,0x1DB6,0x12BF,0x0443,
++     0x220A,0x1983,0x07B0,0x1890,0x177A,0x038A,0x1496,0x1220,0x18B3,0x1149,
++     0x0FA4,0x10EA,0x0620,0x11B1,0x01B1,0x08BA,0x0081,0x0FEC,0x111C,0x0C1B,
++     0x1382,0x0427,0x1582,0x1D54,0x0EE2,0x022A,0x0AAB,0x23EA,0x1922,0x0399,
++     0x2127,0x06CA,0x12D5,0x0A0A,0x1745,0x1F8F,0x009B,0x21B6,0x1BC2,0x0EEE,
++     0x00B6,0x0672,0x16D7,0x13E4,0x0ABF,0x0F29,0x03D2,0x20E3,0x185B,0x08FE,
++     0x0FB0,0x1CBC,0x2024,0x0A16,0x0C2C,0x0B23,0x134A,0x0ADE,0x03E2,0x0A0F,
++     0x2102,0x0CAA,0x19D0,0x220F,0x06E2,0x2391,0x13CF,0x1EDD,0x15B4,0x1012,
++     0x1F15,0x23DF,0x0735,0x223F,0x144B,0x12FC,0x1C86,0x1CE7,0x0DA7,0x082F,
++     0x1720,0x15C7,0x0212,0x22FD,0x133F,0x068C,0x169E,0x0C4F,0x1C31,0x139B,
++     0x0DA6,0x1A91,0x1D99,0x1493,0x160A,0x0077,0x1F45,0x1473,0x1B1E,0x028E,
++     0x0FAC,0x137C,0x2390,0x10A6,0x0129,0x0B67,0x1F53,0x0B97,0x21AC,0x0792,
++     0x0758,0x1AB2,0x0C44,0x1482,0x1436,0x0036,0x1B3A,0x1CC9,0x1AF4,0x152A,
++     0x2355,0x0519,0x1747,0x1275,0x10B3,0x2086,0x14D1,0x20E9,0x12CD,0x0EA4,
++     0x1F48,0x0DBD,0x0265,0x0A55,0x145F,0x2216,0x0D0F,0x103B,0x2381,0x0994,
++     0x1337,0x0CF7,0x06E8,0x2253,0x0936,0x1ECC,0x2208,0x10C3,0x0DE4,0x0A2D,
++     0x09DD,0x1690,0x234D,0x031E,0x0824,0x04A2,0x0F46,0x17B9,0x1F81,0x02E2,
++     0x04D5,0x13A2,0x0A10,0x01B3,0x1523,0x2013,0x0B06,0x1108,0x0244,0x06F6,
++     0x041B,0x03A5,0x21EF,0x052F,0x08FF,0x0855,0x1FC4,0x1E1D,0x2385,0x0B77,
++     0x1B86,0x2123,0x018C,0x2203,0x181A,0x01EB,0x07E1,0x1334,0x1D12,0x0A9D,
++     0x01ED,0x1EDA,0x1A2E,0x18AA,0x0598,0x1A83,0x162A,0x1A84,0x072B,0x2397,
++     0x0166,0x00C0,0x091C,0x2350,0x010A,0x157E,0x142C,0x1F4F,0x1B93,0x1355,
++     0x08F9,0x218E,0x1C57,0x0627,0x06AE,0x2186,0x230D,0x0C6F,0x1229,0x02C9,
++     0x0972,0x0F68,0x217B,0x1130,0x0CDB,0x06B5,0x1045,0x1321,0x0AA0,0x0CCE,
++     0x121E,0x0C0A,0x07EF,0x02D8,0x061D,0x1003,0x0761,0x20FE,0x1519,0x027B,
++     0x1105,0x174A,0x028B,0x0300,0x1EFD,0x1711,0x03BC,0x1FCC,0x1DFF,0x21FE,
++     0x1AE0,0x12C0,0x2266,0x1DEC,0x15E4,0x036B,0x0382,0x01B5,0x2067,0x20C6,
++     0x0B2C,0x0F7F,0x1BEB,0x0988,0x1491,0x0697,0x0F12,0x1096,0x0E78,0x103D,
++     0x02A3,0x21BB,0x1563,0x11D2,0x150D,0x2308,0x21B3,0x0333,0x1213,0x009F,
++     0x08A5,0x10EC,0x0E60,0x009E,0x1530,0x0FC6,0x110F,0x1BA3,0x027E,0x2223,
++     0x009C,0x1B4D,0x1F62,0x1CF6,0x1E86,0x0FB1,0x0332,0x1BAF,0x0C1A,0x0E2C,
++     0x0360,0x197A,0x01D3,0x10F3,0x1B76,0x02EB,0x18CA,0x065B,0x1164,0x103E,
++     0x0C39,0x0F8C,0x073E,0x07CE,0x183C,0x04EC,0x0E9A,0x0BDE,0x0738,0x1093,
++     0x0F0D,0x076A,0x0349,0x0DA9,0x19F9,0x1154,0x1DD0,0x0ED0,0x1D22,0x22D3,
++     0x015B,0x0052,0x0A5B,0x0CE2,0x1D89,0x1565,0x1752,0x0254,0x028C,0x18FD,
++     0x12B9,0x1CA4,0x1F73,0x0567,0x1B01,0x0414,0x1510,0x1ED8,0x05FD,0x1ACF,
++     0x19EA,0x0163,0x0B73,0x1CBE,0x07B6,0x10D1,0x050F,0x1635,0x0413,0x17ED,
++     0x1C40,0x1336,0x0EFF,0x1199,0x1236,0x07BD,0x2312,0x04B1,0x2163,0x1AD1,
++     0x0764,0x21D1,0x14DD,0x0CE8,0x1728,0x0348,0x236D,0x1BA6,0x2119,0x1405,
++     0x0625,0x034C,0x0A1F,0x09E0,0x231C,0x0D4C,0x0839,0x04AF,0x2153,0x12AB,
++     0x0D8C,0x148F,0x03CE,0x2081,0x05A6,0x0F02,0x1D41,0x090F,0x0D8D,0x1CE5,
++     0x0BF5,0x0358,0x0BBD,0x1981,0x1A5E,0x1312,0x103F,0x0347,0x23B0,0x0FAD,
++     0x08D1,0x00D8,0x08E0,0x212A,0x0DC4,0x1EBE,0x169F,0x07A6,0x1BF5,0x1FA3,
++     0x0EE8,0x17B1,0x14A8,0x0EC8,0x2057,0x0586,0x19AF,0x1C1A,0x1D10,0x15D7,
++     0x06CD,0x0901,0x163C,0x1A20,0x1107,0x0879,0x1533,0x1EDB,0x0E94,0x1FC9,
++     0x20F5,0x00A9,0x20BE,0x1011,0x1AFE,0x21DF,0x1D7E,0x0D25,0x13D1,0x099C,
++     0x0A64,0x1729,0x113B,0x17C4,0x21DE,0x0D8A,0x0B4B,0x00E2,0x0C10,0x2358,
++     0x162E,0x1470,0x1DDE,0x0050,0x1468,0x213B,0x106E,0x0490,0x09F2,0x0190,
++     0x1F7A,0x03FB,0x215E,0x02EC,0x01CD,0x0F83,0x1503,0x00A0,0x17E8,0x0ABE,
++     0x019F,0x053A,0x2278,0x1A66,0x12A3,0x0B04,0x23D7,0x144F,0x131B,0x2099,
++     0x0159,0x1D3E,0x1FE4,0x14D8,0x0100,0x130F,0x23F0,0x1623,0x1F40,0x0F13,
++     0x1082,0x221F,0x12FE,0x0B9D,0x080B,0x1EE6,0x14B9,0x2351,0x05D7,0x065E,
++     0x09BB,0x0209,0x0FDA,0x03D5,0x1B82,0x204B,0x1073,0x131C,0x1358,0x230B,
++     0x1BC0,0x1EB9,0x166A,0x11AA,0x1D85,0x08BB,0x1B7B,0x05F7,0x1B40,0x0E11,
++     0x02DB,0x13A3,0x0C15,0x14EA,0x0AB9,0x22E7,0x013A,0x07F4,0x0696,0x1228,
++     0x0FCF,0x1561,0x09E7,0x2221,0x039F,0x028D,0x1171,0x098C,0x1B5B,0x0F93,
++     0x1789,0x1269,0x0A3C,0x14A4,0x1864,0x16A9,0x0493,0x0B5E,0x0BD1,0x0646,
++     0x1A52,0x11FC,0x0934,0x0CA1,0x16C5,0x045B,0x0EAC,0x0EE1,0x1671,0x1918,
++     0x0C4C,0x1D9A,0x2062,0x160D,0x1555,0x0677,0x0F58,0x1621,0x17AB,0x0DB7,
++     0x0F63,0x094B,0x1902,0x23BE,0x0C35,0x0F51,0x149A,0x08FB,0x021F,0x1970,
++     0x0995,0x19E2,0x1DBD,0x1E48,0x0B90,0x02CC,0x15DB,0x2022,0x0CEE,0x2161,
++     0x0A57,0x11AE,0x0B6F,0x05CA,0x1450,0x19B8,0x0F4F,0x1F5A,0x1E2E,0x229A,
++     0x15EB,0x074E,0x2317,0x0ECB,0x0B6C,0x0510,0x091F,0x0F85,0x101B,0x1BD3,
++     0x0E7C,0x11FF,0x0F2C,0x1F9A,0x2382,0x232F,0x23DC,0x0DF7,0x01CB,0x0DCA,
++     0x21D3,0x1857,0x0C6D,0x0FEE,0x0509,0x0543,0x2331,0x1424,0x08FD,0x01E9,
++     0x1CA9,0x23EF,0x100C,0x029A,0x1065,0x1078,0x0F9B,0x14DA,0x0D09,0x0998,
++     0x088C,0x019C,0x10C4,0x20AB,0x20E5,0x16A4,0x0682,0x0424,0x1C15,0x0C13,
++     0x0A36,0x0856,0x07A5,0x1AD7,0x05D0,0x020C,0x16CC,0x1D8D,0x07DA,0x2204,
++     0x1D9F,0x1797,0x1C67,0x09C0,0x0237,0x1BB6,0x10A9,0x0417,0x0949,0x1E49,
++     0x017E,0x0979,0x1753,0x0AA2,0x0362,0x0B8B,0x0536,0x1EA7,0x0EE5,0x04CA,
++     0x2285,0x0DEB,0x05A0,0x0853,0x12BA,0x0491,0x0423,0x11C0,0x0E36,0x1674,
++     0x2010,0x1DC5,0x0709,0x125F,0x0C33,0x2349,0x0481,0x108A,0x0404,0x094F,
++     0x09CB,0x0D3F,0x18C4,0x0EA3,0x060E,0x0654,0x1814,0x09CA,0x1CA3,0x0C34,
++     0x1A17,0x1406,0x14FF,0x0F0E,0x0204,0x0C0F,0x11CB,0x1925,0x16B9,0x1488,
++     0x1D01,0x0E96,0x0562,0x0C04,0x185E,0x0D2D,0x23D4,0x2328,0x030C,0x19A9,
++     0x01EF,0x20FF,0x08F7,0x122E,0x1AC2,0x0C52,0x0296,0x1A59,0x0326,0x1089,
++     0x1DD3,0x1C63,0x06BB,0x146F,0x1237,0x1950,0x203B,0x17A8,0x01A5,0x09D1,
++     0x0591,0x1B15,0x0147,0x0F20,0x17B4,0x1A36,0x1FC5,0x1F5F,0x0C37,0x1BAE,
++     0x06BC,0x12C1,0x10D2,0x0A14,0x0875,0x120A,0x182D,0x0D6D,0x0F1B,0x0FA2,
++     0x1CC2,0x1A64,0x11C4,0x1CF3,0x1FBD,0x0027,0x0C49,0x21CB,0x0462,0x107C,
++     0x0CFD,0x1398,0x0633,0x06A5,0x00B0,0x0BFD,0x1665,0x102A,0x1915,0x150E,
++     0x23A0,0x1344,0x0F69,0x097B,0x023F,0x18BF,0x1423,0x1290,0x22DF,0x1060,
++     0x0168,0x04FA,0x1B72,0x03C0,0x0B49,0x202D,0x227F,0x0D31,0x121C,0x0762,
++     0x1980,0x05EE,0x20DA,0x04BB,0x06FB,0x16E5,0x117B,0x079F,0x1BF1,0x02A6,
++     0x0A5F,0x22ED,0x1517,0x034E,0x1628,0x1A72,0x02F2,0x1761,0x1E2D,0x161C,
++     0x05C1,0x0757,0x138C,0x0438,0x1193,0x1A68,0x0340,0x111F,0x1440,0x1CDF,
++     0x0634,0x23F9,0x064A,0x0C8A,0x1059,0x13A5,0x1B23,0x13D4,0x2210,0x12E4,
++     0x0E03,0x0CA0,0x0355,0x0E0D,0x1D24,0x2155,0x0B93,0x0531,0x0B1C,0x1CFE,
++     0x22BB,0x1B64,0x1D02,0x1F83,0x0C2A,0x01D4,0x000C,0x2213,0x2151,0x1F3C,
++     0x200F,0x0469,0x0B79,0x086F,0x139E,0x1ADA,0x00C4,0x07E0,0x1005,0x013C,
++     0x1869,0x05B6,0x0944,0x0652,0x1EBB,0x047E,0x0D3A,0x05F0,0x2085,0x0342,
++     0x0165,0x236A,0x03DB,0x1E69,0x120B,0x0EDB,0x156A,0x00CD,0x1F2F,0x0797,
++     0x066C,0x0AE7,0x063A,0x1C7D,0x18A4,0x07B5,0x0E87,0x092F,0x213E,0x10D6,
++     0x1F0A,0x1DD7,0x1B4F,0x0E68,0x1958,0x158D,0x14B6,0x0CB8,0x23E2,0x15D0,
++     0x1249,0x1562,0x03D6,0x0513,0x1A3E,0x171E,0x1F09,0x0DF9,0x0A07,0x12AE,
++     0x0690,0x05C6,0x120D,0x20D1,0x17A0,0x2189,0x1D34,0x1799,0x1E5E,0x20C7,
++     0x1B45,0x1359,0x174B,0x0CCC,0x0187,0x21D9,0x15A7,0x1E1F,0x13B1,0x05FF,
++     0x10D5,0x1905,0x01A8,0x0277,0x1FF4,0x0EB5,0x1476,0x1E1C,0x1390,0x018E,
++     0x0484,0x0FCB,0x146B,0x151B,0x1DC6,0x1A76,0x169B,0x0B64,0x0024,0x187A,
++     0x1230,0x2132,0x0ECE,0x149F,0x109A,0x1839,0x0568,0x1F84,0x0BF0,0x092D,
++     0x0C77,0x13EF,0x14F9,0x138D,0x0832,0x0C68,0x0A37,0x0248,0x16EF,0x0125,
++     0x087B,0x09A9,0x17C8,0x02DF,0x06A0,0x0FC3,0x0D75,0x1A10,0x0EAB,0x0D96,
++     0x0CC2,0x1DA2,0x13AA,0x1760,0x0146,0x1636,0x0082,0x1255,0x1206,0x19DF,
++     0x1D71,0x0D67,0x1DB4,0x0F15,0x065C,0x20C0,0x12F9,0x1796,0x1997,0x13B5,
++     0x087E,0x19FC,0x173B,0x163F,0x06CC,0x05F1,0x19B1,0x1D1E,0x16E1,0x1A3B,
++     0x0C3D,0x07C1,0x1A7C,0x00A5,0x181C,0x1593,0x0259,0x167B,0x0120,0x0889,
++     0x0A51,0x0DA1,0x129D,0x1F76,0x045D,0x1471,0x03CC,0x07B2,0x07EE,0x16AF,
++     0x0549,0x1046,0x2217,0x0BBF,0x12C6,0x0AA5,0x1C51,0x1C94,0x0DF4,0x22B8,
++     0x0DBA,0x1284,0x1D15,0x1433,0x1D17,0x15AE,0x0387,0x1052,0x0880,0x107B,
++     0x09E9,0x2012,0x1151,0x0641,0x0ECC,0x156E,0x1771,0x1972,0x09F9,0x12C3,
++     0x0C42,0x0B9E,0x02A4,0x12EB,0x16B7,0x054D,0x1742,0x0600,0x0BF1,0x11C5,
++     0x223E,0x0B35,0x1843,0x1A5D,0x081B,0x1DB2,0x0020,0x0BC7,0x155F,0x015E,
++     0x1341,0x1FD0,0x136D,0x062A,0x1E6C,0x1DA3,0x00C3,0x12EC,0x03C2,0x10D7,
++     0x15F3,0x1489,0x19FD,0x067D,0x12D6,0x1847,0x0F9F,0x0ED7,0x1D9E,0x1ADB,
++     0x10A4,0x0710,0x1866,0x0F32,0x1EC0,0x2309,0x00E8,0x025F,0x135F,0x0C54,
++     0x0FFF,0x0BF9,0x0959,0x14F3,0x17A1,0x0EE9,0x20F3,0x10BE,0x0DF6,0x1D49,
++     0x1111,0x0D2B,0x0226,0x1AB4,0x2337,0x021B,0x019A,0x22C0,0x1C06,0x08E5,
++     0x2047,0x07F9,0x1612,0x0822,0x0E31,0x00F3,0x134C,0x1919,0x189D,0x23FB,
++     0x0EFE,0x07D8,0x10F5,0x1143,0x22D1,0x0476,0x10F9,0x16CB,0x0053,0x16D3,
++     0x0366,0x1B6A,0x0074,0x1DF6,0x165B,0x0308,0x116E,0x0837,0x1A0D,0x15F8,
++     0x0D57,0x1875,0x1A8C,0x0EC0,0x239C,0x0BBE,0x0FB4,0x0009,0x1698,0x0AFE,
++     0x1992,0x23BA,0x0EE0,0x2096,0x00FE,0x1BF7,0x1239,0x23FD,0x1F8E,0x113C,
++     0x084F,0x09B1,0x0931,0x1E2F,0x0976,0x07AF,0x0B45,0x0ABD,0x0F37,0x0C7E,
++     0x06D3,0x238B,0x0759,0x17AC,0x0923,0x1D05,0x14FA,0x1755,0x187C,0x0E02,
++     0x0B03,0x02AE,0x1735,0x0283,0x033B,0x1C77,0x23C1,0x185C,0x0010,0x1595,
++     0x1C96,0x09E1,0x1055,0x19F7,0x1226,0x1790,0x01A9,0x1A8A,0x06B7,0x1A48,
++     0x1A96,0x121D,0x14BE,0x1681,0x131D,0x00BC,0x0D52,0x1401,0x0610,0x1A6F,
++     0x1354,0x0DD6,0x0155,0x07D4,0x017F,0x2154,0x1C9D,0x176B,0x1C4B,0x1C68,
++     0x1F33,0x082D,0x0616,0x23A4,0x0C86,0x1B00,0x0097,0x2357,0x10E4,0x149B,
++     0x0B8F,0x0E71,0x0636,0x062E,0x14AC,0x07C7,0x20FD,0x12BC,0x0228,0x106D,
++     0x0AB0,0x140F,0x2214,0x0C30,0x143B,0x1D77,0x1241,0x1FDB,0x1757,0x17E3,
++     0x0CB4,0x1F93,0x1C75,0x02B3,0x237A,0x0928,0x0CDE,0x12B4,0x11D4,0x1ADC,
++     0x2105,0x1B5C,0x1DF5,0x22FC,0x085F,0x08BF,0x0E1A,0x1564,0x06BF,0x1D59,
++     0x0B7A,0x22D7,0x0AED,0x10F8,0x0D48,0x1B33,0x20C2,0x205D,0x1801,0x228F,
++     0x13BD,0x0F5C,0x062C,0x1F2B,0x1AB7,0x09BE,0x0914,0x0C97,0x1941,0x151E,
++     0x0676,0x01BA,0x0207,0x09F3,0x1F4E,0x1B7A,0x07C2,0x0059,0x1BB4,0x1BA4,
++     0x1025,0x1102,0x0617,0x074A,0x0AF9,0x0915,0x1D3C,0x0B1B,0x0E05,0x0D66,
++     0x06C6,0x1C4D,0x0708,0x21C9,0x08E6,0x1DD9,0x235D,0x1D90,0x0095,0x0814,
++     0x0E4D,0x21C5,0x1DC3,0x0430,0x1E0D,0x235A,0x15DE,0x1B89,0x0729,0x066B,
++     0x23A3,0x2028,0x0398,0x229E,0x1845,0x212F,0x0740,0x029E,0x1D0F,0x1D11,
++     0x151D,0x023E,0x1B05,0x188F,0x0185,0x1584,0x044F,0x0033,0x0133,0x178D,
++     0x0C9A,0x10BC,0x0815,0x2206,0x1AC3,0x0CBA,0x115E,0x1772,0x0909,0x161A,
++     0x015C,0x1E83,0x1E96,0x0A1A,0x1D75,0x179E,0x2175,0x143E,0x17C5,0x12E9,
++     0x0F09,0x0885,0x0D71,0x18F8,0x0359,0x1615,0x0C6C,0x0809,0x1F10,0x1C18,
++     0x199C,0x1553,0x0D1B,0x0C0B,0x1ADF,0x0E4B,0x1B35,0x0B66,0x1264,0x22CB,
++     0x0181,0x154F,0x0D74,0x134D,0x18C1,0x0E43,0x13EC,0x1E37,0x01BE,0x0755,
++     0x0579,0x154B,0x0893,0x19D6,0x2072,0x208E,0x22C2,0x0719,0x04E6,0x00D3,
++     0x02C0,0x194A,0x0486,0x0DC1,0x06FD,0x1A86,0x0BEC,0x1191,0x0840,0x196C,
++     0x1959,0x12A5,0x08F8,0x17B0,0x16CF,0x0602,0x0D85,0x1F21,0x13A4,0x1946,
++     0x06E1,0x14BA,0x20F9,0x182C,0x0E09,0x13D8,0x159C,0x0881,0x0542,0x1948,
++     0x0829,0x1668,0x2060,0x1138,0x172D,0x17C3,0x0013,0x08E8,0x034F,0x1D80,
++     0x018D,0x0E90,0x0551,0x1CAE,0x0643,0x0ECD,0x005C,0x0223,0x0B29,0x10F1,
++     0x0B5D,0x0C5B,0x132B,0x02D1,0x2316,0x147F,0x1335,0x0679,0x06C4,0x04A3,
++     0x108D,0x02C3,0x075A,0x01EA,0x23AE,0x22B6,0x2138,0x232A,0x23EC,0x02AC,
++     0x227C,0x0E39,0x168F,0x0F35,0x06DA,0x0782,0x0556,0x042D,0x11AB,0x224C,
++     0x0F1E,0x0561,0x17A4,0x1B42,0x0AC6,0x1B91,0x0483,0x118B,0x1EED,0x0741,
++     0x177C,0x21E8,0x1AFC,0x209D,0x0FE0,0x1AD0,0x13B2,0x0637,0x20A4,0x1C1D,
++     0x0EAF,0x03E8,0x15F7,0x1686,0x21B2,0x2215,0x1091,0x01CE,0x135E,0x18C8,
++     0x1E46,0x2322,0x0618,0x23CA,0x1795,0x1F03,0x1A3D,0x0C5D,0x2298,0x01AE,
++     0x02E1,0x0D41,0x09D4,0x219D,0x2084,0x0F98,0x0375,0x13C9,0x0AC4,0x09FE,
++     0x1D81,0x0FF0,0x11C7,0x1FA9,0x1301,0x0BEF,0x1031,0x0B07,0x1FBF,0x1370,
++     0x1AA1,0x1956,0x15C0,0x1858,0x13BB,0x0937,0x1804,0x109D,0x03D8,0x0635,
++     0x1E41,0x0999,0x1079,0x15CC,0x15FC,0x09A2,0x1DA7,0x142E,0x03EC,0x1954,
++     0x1215,0x15E9,0x05C5,0x0831,0x13DA,0x14EF,0x22FE,0x1A54,0x06FE,0x23F1,
++     0x17A6,0x1CD2,0x068A,0x0E4C,0x03C8,0x007C,0x02E5,0x0C25,0x0C48,0x0A26,
++     0x1A9F,0x09B2,0x20F6,0x14AF,0x1B6F,0x233F,0x11F7,0x00B2,0x1076,0x1E70,
++     0x0726,0x1F59,0x222D,0x175D,0x1986,0x0AD8,0x2095,0x0214,0x231F,0x10C6,
++     0x1944,0x1816,0x093A,0x1EA5,0x0B4F,0x174E,0x1087,0x0C0E,0x1DDD,0x1CF2,
++     0x15AA,0x2231,0x22E8,0x0B52,0x040C,0x1CE3,0x0B7D,0x197C,0x0234,0x05EF,
++     0x1BDB,0x124E,0x1E95,0x03B4,0x226A,0x0149,0x137A,0x1AF5,0x20D5,0x1D4F,
++     0x0CDA,0x145B,0x026A,0x0473,0x0FF1,0x168A,0x16A5,0x23E4,0x13C6,0x0EB7,
++     0x0D7B,0x0D76,0x178E,0x23B7,0x05E2,0x16EB,0x0535,0x071B,0x2293,0x06E6,
++     0x1903,0x1526,0x1C23,0x0EC7,0x0CCB,0x1F65,0x0D89,0x147C,0x23F5,0x1446,
++     0x228B,0x0063,0x19DD,0x10FE,0x2023,0x0BAC,0x096A,0x22A4,0x1770,0x176D,
++     0x01C7,0x0E83,0x1E08,0x213F,0x2365,0x1EBD,0x1A16,0x0818,0x11FD,0x0E30,
++     0x024E,0x2256,0x0314,0x02D7,0x129B,0x0303,0x1BC7,0x01CC,0x1586,0x0752,
++     0x194C,0x168E,0x1099,0x10A5,0x1009,0x016A,0x0BA6,0x0DCC,0x0124,0x15A3,
++     0x2152,0x1072,0x0EBC,0x2018,0x1EEE,0x1139,0x0CCF,0x1FA1,0x035B,0x19D9,
++     0x1029,0x1048,0x1397,0x18D0,0x075B,0x0C55,0x0188,0x19CA,0x2229,0x20D9,
++     0x132D,0x0179,0x14A9,0x1A9D,0x1F6C,0x173F,0x18FF,0x12B0,0x00F8,0x14D9,
++     0x0CE4,0x0732,0x0169,0x21AA,0x1F0B,0x1F0F,0x16AD,0x0869,0x1DB7,0x0BA8,
++     0x1A55,0x0F6D,0x01BD,0x1DDA,0x1E1B,0x096B,0x09FF,0x2327,0x107D,0x0530,
++     0x11E3,0x0558,0x16A1,0x0CB0,0x1C7E,0x160F,0x1840,0x187D,0x0EEB,0x14B1,
++     0x079E,0x0C22,0x049E,0x0AE3,0x15BB,0x08E4,0x0F4A,0x1920,0x1ECF,0x12DD,
++     0x1A01,0x0C2B,0x0507,0x0AF7,0x04B9,0x0E35,0x209F,0x1805,0x1E66,0x1169,
++     0x2041,0x1EFC,0x1DDB,0x1E89,0x1EF2,0x1430,0x1DFC,0x1E98,0x0D9A,0x0D03,
++     0x0BDF,0x09DC,0x15D5,0x08DB,0x1250,0x0DC6,0x099B,0x07ED,0x1FEE,0x0753,
++     0x1C20,0x1EB8,0x17D2,0x23B2,0x1E34,0x22A3,0x0B5F,0x0ED1,0x0960,0x029B,
++     0x1977,0x0A7D,0x12A1,0x00C9,0x04D3,0x1271,0x1A74,0x08B8,0x1035,0x231A,
++     0x1300,0x047D,0x2202,0x0338,0x115C,0x01A3,0x2209,0x1CFB,0x193F,0x0BE3,
++     0x1E1A,0x1445,0x06A8,0x1F9B,0x1307,0x0916,0x0E34,0x1806,0x23CC,0x144C,
++     0x214A,0x1CE9,0x22B4,0x198A,0x126E,0x0F82,0x0D80,0x0167,0x0AC9,0x04A1,
++     0x184D,0x0E8E,0x190A,0x0268,0x1395,0x20BA,0x170F,0x16E6,0x0601,0x1E81,
++     0x1662,0x19B2,0x165E,0x0E3A,0x0D0B,0x0EDC,0x1235,0x23EE,0x0E28,0x0C88,
++     0x0C8E,0x2196,0x10B5,0x0BEB,0x230F,0x2367,0x0392,0x1404,0x0AEA,0x1A9B,
++     0x0439,0x03FA,0x1DB9,0x1100,0x11C1,0x222B,0x0787,0x007E,0x0E76,0x0261,
++     0x06D4,0x18B5,0x1B4A,0x0647,0x0DDB,0x1976,0x05AE,0x0F34,0x0186,0x0068,
++     0x1075,0x151F,0x0C3A,0x002C,0x233B,0x0A56,0x0DFA,0x0857,0x137E,0x12B1,
++     0x100B,0x0C21,0x0AA4,0x08B4,0x11ED,0x0EEA,0x13EB,0x0614,0x1BD2,0x0356,
++     0x16BA,0x1403,0x0AAE,0x0F00,0x1FFD,0x054A,0x01BB,0x2181,0x21CD,0x013B,
++     0x1F8D,0x2369,0x08C3,0x1669,0x195B,0x1884,0x02EA,0x1090,0x053C,0x11F2,
++     0x0472,0x034A,0x042A,0x223C,0x10AE,0x19A2,0x147E,0x0D6F,0x13AE,0x1CD0,
++     0x1FB5,0x093D,0x19D2,0x10C7,0x0258,0x0106,0x1D44,0x1ABC,0x0B3D,0x1F86,
++     0x1598,0x12E5,0x013D,0x1234,0x0F8A,0x0C6A,0x2318,0x0993,0x222E,0x1CC1,
++     0x106F,0x1A61,0x05BF,0x19B4,0x0EA8,0x03B1,0x1C6C,0x2030,0x0725,0x0E62,
++     0x064D,0x1469,0x2211,0x0004,0x1525,0x0B9F,0x0CB9,0x0EFC,0x0D02,0x1A1B,
++     0x17C0,0x1C50,0x14C4,0x0C0D,0x1CF1,0x02D0,0x1A92,0x0B26,0x0FDB,0x109E,
++     0x0905,0x0E8D,0x1D60,0x1C91,0x23F2,0x111E,0x06F2,0x1A88,0x22F3,0x0AB5,
++     0x1D83,0x0FEA,0x05EB,0x1E55,0x056F,0x08B7,0x18E1,0x1CD3,0x0A94,0x0E3E,
++     0x0E5F,0x1282,0x0CC7,0x0AB7,0x1DBF,0x0213,0x1BD1,0x044D,0x20EC,0x19E0,
++     0x071A,0x0DF1,0x07D5,0x1311,0x0007,0x0F92,0x00C5,0x0433,0x0465,0x073B,
++     0x0851,0x1542,0x05E9,0x0D39,0x0A1B,0x17F6,0x114D,0x0A9F,0x00A4,0x1A98,
++     0x0ACD,0x1835,0x1D8A,0x0649,0x1002,0x1038,0x1E7B,0x0FF2,0x1CF4,0x21B8,
++     0x1A58,0x0FE4,0x038E,0x1458,0x1538,0x1550,0x025A,0x0B82,0x16F0,0x0191,
++     0x171D,0x081E,0x0BD4,0x15DA,0x0849,0x21E2,0x0B7F,0x1A0F,0x18B6,0x1FD7,
++     0x02B9,0x04C1,0x0289,0x1F55,0x13DD,0x0FE1,0x1B1D,0x191D,0x17BB,0x0E4E,
++     0x0175,0x1AC6,0x0044,0x23AD,0x1D03,0x210F,0x17C7,0x05E8,0x0CC0,0x00D1,
++     0x0A60,0x0B3A,0x2299,0x2311,0x13E8,0x0BC8,0x0AC8,0x1E07,0x0380,0x0D50,
++     0x0B56,0x0555,0x2143,0x0479,0x1545,0x1285,0x13E6,0x1926,0x2042,0x2075,
++     0x1D79,0x2362,0x206A,0x187F,0x14B7,0x138E,0x1AA0,0x1C2D,0x0899,0x22CD,
++     0x115B,0x00D4,0x1014,0x1701,0x02CB,0x0028,0x1A2F,0x1FFA,0x21EE,0x16C3,
++     0x1158,0x15CE,0x1831,0x1639,0x04B7,0x00CE,0x0431,0x011F,0x1D35,0x23ED,
++     0x093F,0x0B91,0x0ED2,0x0EDA,0x0369,0x1BC3,0x0B1A,0x21C3,0x040A,0x206C,
++     0x17F9,0x1FB9,0x0CAD,0x1938,0x1661,0x0E19,0x1C1F,0x0A68,0x079B,0x1580,
++     0x0005,0x1D56,0x0CBD,0x0306,0x1F3E,0x0872,0x1D2C,0x0A3A,0x06E9,0x1B43,
++     0x0C8D,0x0113,0x0023,0x1675,0x0218,0x026D,0x1622,0x22A1,0x03F0,0x177F,
++     0x20F4,0x0EF3,0x1D96,0x2281,0x053E,0x0CD2,0x0C70,0x159E,0x1691,0x0713,
++     0x1F5E,0x205B,0x15C6,0x1C09,0x16E0,0x04CF,0x1C1C,0x0C74,0x15E5,0x12F7,
++     0x16D8,0x2245,0x07E2,0x0566,0x0345,0x1FE2,0x2093,0x114B,0x19D8,0x0313,
++     0x2108,0x1E09,0x2110,0x1FA8,0x03F6,0x0D93,0x0BD8,0x067F,0x06DE,0x2242,
++     0x2282,0x120F,0x04E5,0x0E97,0x05DE,0x1D9B,0x09C1,0x19C8,0x029D,0x19A4,
++     0x18BB,0x12F5,0x13D5,0x1AB3,0x11CF,0x0D59,0x094A,0x1574,0x16F6,0x0C08,
++     0x22C3,0x20BB,0x18E3,0x0A73,0x1842,0x093E,0x1114,0x1211,0x1733,0x09DA,
++     0x1ABE,0x1BD0,0x202F,0x0E41,0x222F,0x1F94,0x0D21,0x0553,0x08F0,0x10DA,
++     0x0711,0x11FE,0x1B52,0x07BC,0x0BF3,0x076F,0x0AD1,0x0D1E,0x004F,0x170D,
++     0x107A,0x1103,0x0681,0x02D2,0x0FA7,0x10DD,0x12D4,0x2083,0x0D9F,0x1DEB,
++     0x0422,0x1776,0x1767,0x029F,0x0C7A,0x10E1,0x1C11,0x08D6,0x069A,0x1F47,
++     0x14AA,0x1810,0x0CF6,0x09A3,0x0235,0x180A,0x1708,0x0A72,0x1BEC,0x1026,
++     0x1754,0x0B0B,0x043A,0x2040,0x1119,0x0612,0x0628,0x1187,0x14B4,0x157F,
++     0x1DB3,0x0156,0x01F9,0x082C,0x13FB,0x1218,0x0003,0x19CC,0x1764,0x14DC,
++     0x1F30,0x0011,0x0AA1,0x096F,0x14FE,0x23C3,0x0CAE,0x04DB,0x0F18,0x1F4A,
++     0x039B,0x15E1,0x08CB,0x0ADF,0x1FDF,0x1B50,0x08ED,0x1721,0x2296,0x040F,
++     0x1A29,0x128E,0x0C84,0x218A,0x01CA,0x1D78,0x05D8,0x0D19,0x0B94,0x13C0,
++     0x02E8,0x0426,0x2272,0x10ED,0x1179,0x1E4D,0x1781,0x0219,0x21A9,0x0088,
++     0x2091,0x19E4,0x115A,0x1116,0x17D0,0x1A49,0x14B2,0x0DAD,0x0608,0x1F6E,
++     0x2001,0x1BE0,0x17F0,0x0897,0x004C,0x11C3,0x22E3,0x05C8,0x06E5,0x1678,
++     0x140D,0x1BA9,0x05FC,0x08E3,0x096D,0x03A9,0x092C,0x17F8,0x04BF,0x0902,
++     0x16DB,0x1EE2,0x15E7,0x12E2,0x05AF,0x0C64,0x1345,0x03F2,0x128A,0x0811,
++     0x0716,0x0582,0x031F,0x13DF,0x1E47,0x1B1C,0x0E77,0x1EE3,0x22B2,0x1FBA,
++     0x0E2D,0x2082,0x1A8D,0x1596,0x11B4,0x129C,0x1F95,0x1710,0x1A57,0x1736,
++     0x0D84,0x1B34,0x1D30,0x0D95,0x0B6E,0x1F2A,0x0E64,0x060B,0x0A91,0x0CE9,
++     0x14A7,0x20B3,0x1442,0x1803,0x195C,0x06B2,0x11F9,0x10DF,0x1784,0x0B53,
++     0x10BA,0x1317,0x1420,0x114F,0x1871,0x17C2,0x0742,0x16A2,0x06EC,0x19B7,
++     0x0367,0x0C2E,0x129E,0x06CF,0x0D01,0x0FE7,0x03A8,0x08C4,0x124D,0x139C,
++     0x04AB,0x1CC5,0x0574,0x082B,0x1C79,0x126C,0x216F,0x023B,0x17D5,0x066A,
++     0x0F01,0x0AE6,0x06F0,0x13B6,0x1227,0x0A78,0x230E,0x2348,0x222A,0x0FF4,
++     0x1E9B,0x1FD8,0x136A,0x2335,0x10AC,0x134B,0x1939,0x0273,0x0BC4,0x01E3,
++     0x1D37,0x1AA8,0x0123,0x0609,0x069E,0x03B5,0x1874,0x1896,0x22DA,0x08B3,
++     0x04B4,0x0304,0x1FCD,0x0F6F,0x04B6,0x0A77,0x02A2,0x2109,0x2393,0x23B5,
++     0x21B5,0x2330,0x1CD7,0x15D6,0x0ACB,0x0F94,0x20DE,0x0836,0x1C7A,0x0FFE,
++     0x1645,0x15AD,0x188B,0x184A,0x1B41,0x158E,0x046D,0x173E,0x0B40,0x0378,
++     0x0281,0x0F3D,0x11AC,0x1D70,0x1BF9,0x101E,0x145C,0x0083,0x058E,0x160C,
++     0x1FA6,0x1364,0x1FF1,0x0E48,0x0992,0x086C,0x16D6,0x08DA,0x0C40,0x0253,
++     0x03F9,0x2065,0x2032,0x03B0,0x1281,0x2118,0x1F23,0x1722,0x22FA,0x0328,
++     0x01AA,0x146A,0x12C4,0x2329,0x03EF,0x0DF3,0x0C53,0x09EA,0x01C4,0x1FCA,
++     0x1792,0x09D9,0x1540,0x1F6A,0x0279,0x0145,0x1AA7,0x013F,0x1E19,0x15B6,
++     0x000D,0x0A53,0x186E,0x217F,0x0CE3,0x1853,0x1A11,0x1936,0x1828,0x08BD,
++     0x08DF,0x1EA8,0x12EE,0x1D0C,0x1664,0x20DF,0x04DE,0x083A,0x0D24,0x2361,
++     0x0F2B,0x2354,0x126F,0x109B,0x1DF8,0x174F,0x09A0,0x0D53,0x00C2,0x06BA,
++     0x087C,0x0CC3,0x21B9,0x128C,0x01A1,0x0688,0x1162,0x0C7C,0x1C27,0x20D0,
++     0x0A6B,0x1B44,0x002D,0x119B,0x1855,0x102F,0x19BB,0x20FB,0x11C8,0x05FB,
++     0x058A,0x1C5F,0x1CE6,0x09C7,0x192F,0x0E1D,0x03CB,0x20EA,0x1CC3,0x01DB,
++     0x05C9,0x1B60,0x069B,0x001D,0x2295,0x1C4E,0x0A40,0x105F,0x0141,0x01AC,
++     0x0640,0x032D,0x15B5,0x229F,0x1E17,0x19F0,0x194F,0x0102,0x0675,0x0B5B,
++     0x203A,0x1010,0x1412,0x02E7,0x155C,0x176A,0x0866,0x21A1,0x18E9,0x0565,
++     0x12CA,0x1F44,0x1274,0x1B32,0x0260,0x196F,0x1838,0x13C3,0x003F,0x19C6,
++     0x01C6,0x1600,0x0EDF,0x0FD1,0x0A69,0x0062,0x1ED0,0x0F56,0x0377,0x2333,
++     0x0EA5,0x0350,0x1DF1,0x19A6,0x224B,0x0EA0,0x112D,0x204D,0x04D2,0x1613,
++     0x1793,0x0817,0x1D4E,0x1BF2,0x1913,0x0233,0x0B34,0x0A71,0x109C,0x1775,
++     0x0CDD,0x02DE,0x1EB4,0x1C28,0x021C,0x1D1C,0x1C93,0x1189,0x1999,0x16AC,
++     0x1670,0x1738,0x1E2A,0x2078,0x14BD,0x00EA,0x0898,0x1015,0x0EFA,0x19D7,
++     0x113E,0x1630,0x1DBB,0x0EC9,0x1560,0x1FC8,0x16EC,0x10E3,0x0CF2,0x07C8,
++     0x1174,0x0C5A,0x002E,0x1DB1,0x01D6,0x07E7,0x18CD,0x19A8,0x0CC5,0x0D5C,
++     0x1541,0x12CC,0x0BE9,0x0A1C,0x21CF,0x0171,0x067B,0x1DE3,0x1EE8,0x022B,
++     0x17A9,0x19AB,0x0D20,0x1C03,0x1E45,0x0E80,0x0B19,0x107F,0x124F,0x18AE,
++     0x1907,0x1614,0x18BD,0x0A9B,0x059B,0x0D70,0x12F3,0x10C5,0x2140,0x0BB4,
++     0x2384,0x01F7,0x0748,0x0FFB,0x13B3,0x01AD,0x076D,0x1083,0x1125,0x0018,
++     0x1C39,0x0925,0x19EF,0x0E4F,0x210C,0x159F,0x037E,0x0A62,0x219E,0x211C,
++     0x1C54,0x0BE0,0x1E02,0x09BA,0x1CBB,0x147B,0x1389,0x0B68,0x1023,0x23CB,
++     0x0E75,0x1086,0x1145,0x0BE4,0x1BFD,0x2059,0x2007,0x0022,0x05D5,0x1BF6,
++     0x02F0,0x1D1D,0x129A,0x06E4,0x0F47,0x0673,0x0ADD,0x0871,0x1C52,0x1449,
++     0x232C,0x1E67,0x085B,0x20AE,0x0B74,0x16A7,0x0B85,0x1717,0x0FC7,0x0DFB,
++     0x097F,0x0624,0x1CD6,0x15AF,0x0EFB,0x0E42,0x03B9,0x1369,0x0927,0x047C,
++     0x0D5A,0x0982,0x0E7F,0x217C,0x02D5,0x06DD,0x1E79,0x0D9D,0x1964,0x1153,
++     0x1F70,0x04CD,0x1123,0x22F1,0x1F2D,0x1EA4,0x19B6,0x1C3B,0x1356,0x0E01,
++     0x16C7,0x11C9,0x191A,0x09AC,0x1DE6,0x1FDC,0x0581,0x1F04,0x1178,0x06AB,
++     0x1D06,0x0A48,0x0F5B,0x1E4A,0x15D2,0x0FF8,0x01C3,0x1A14,0x0D17,0x086D,
++     0x0CEF,0x1D50,0x03CF,0x0B3E,0x003D,0x06AC,0x008B,0x1185,0x1732,0x11BD,
++     0x12F8,0x03B8,0x1068,0x18A2,0x1BA0,0x10F0,0x0868,0x03E6,0x1DC8,0x1AA2,
++     0x1B13,0x1C82,0x0055,0x099F,0x2222,0x034B,0x179D,0x1E6F,0x1261,0x0FC8,
++     0x166D,0x1F42,0x127F,0x0C9B,0x00B9,0x1D26,0x181D,0x1320,0x09AE,0x01DA,
++     0x1A35,0x05E3,0x04D6,0x1141,0x1BB2,0x0669,0x1B70,0x1F22,0x1B9D,0x19BE,
++     0x0D2A,0x1057,0x0A3B,0x11D3,0x157B,0x1B49,0x14F7,0x095D,0x0A88,0x0126,
++     0x031B,0x03DE,0x1422,0x0BF8,0x1030,0x1F34,0x210B,0x1B12,0x0379,0x0806,
++     0x1252,0x18A0,0x1778,0x1EE7,0x23C6,0x1611,0x22EC,0x0BE8,0x0950,0x1008,
++     0x0906,0x1D51,0x10A2,0x1DAE,0x22D8,0x1499,0x152F,0x0D08,0x00DB,0x0860,
++     0x0162,0x0AD3,0x2233,0x18A6,0x0DD2,0x1477,0x11B3,0x1CBD,0x2043,0x183A,
++     0x1077,0x15E6,0x1FEA,0x0FE8,0x0396,0x0B0A,0x1296,0x0049,0x2303,0x1818,
++     0x03A2,0x03F8,0x1225,0x05ED,0x15D4,0x030D,0x089D,0x107E,0x0A43,0x14A0,
++     0x235C,0x1426,0x0733,0x0D1C,0x1B96,0x09CE,0x155D,0x0F6E,0x238C,0x0876,
++     0x1DE0,0x1223,0x0FEF,0x078B,0x1EC2,0x09BF,0x1D52,0x1FA4,0x202B,0x14E1,
++     0x0864,0x1F78,0x0FA9,0x1821,0x0E38,0x06A6,0x0211,0x1F9E,0x020A,0x1AF2,
++     0x0981,0x1CC0,0x0766,0x1047,0x1EA9,0x0C16,0x1BE8,0x0464,0x22C8,0x183B,
++     0x0B32,0x2106,0x0D79,0x14F5,0x0A33,0x18D4,0x0482,0x0158,0x13E2,0x1651,
++     0x03C6,0x1750,0x1A5A,0x1C3C,0x1825,0x1DFB,0x1D76,0x2218,0x1F16,0x08EE,
++     0x210A,0x0747,0x0DF5,0x0CD3,0x10D3,0x1BBA,0x1F5D,0x1A78,0x19C7,0x177E,
++     0x13F0,0x2315,0x1F82,0x0922,0x22C6,0x17CC,0x1A50,0x1FE5,0x193D,0x122D,
++     0x03E3,0x07C9,0x20B0,0x217A,0x23F4,0x0DFD,0x1268,0x080E,0x192D,0x0698,
++     0x1EAF,0x170A,0x1E60,0x1947,0x1CE1,0x10BB,0x1505,0x016E,0x207B,0x11E7,
++     0x1F85,0x0F72,0x191E,0x2015,0x04AD,0x0AC1,0x1D73,0x2003,0x02F9,0x1C26,
++     0x1F64,0x0C7D,0x0B2D,0x004D,0x1E2B,0x1432,0x026C,0x1E04,0x218C,0x0CE1,
++     0x000F,0x0A01,0x16D0,0x20C8,0x0E25,0x0C09,0x2199,0x091A,0x0E3B,0x0F5F,
++     0x0D5E,0x223D,0x025D,0x0699,0x00DD,0x20EB,0x1352,0x1B92,0x21A4,0x1E10,
++     0x05E5,0x1292,0x0750,0x0552,0x0061,0x0058,0x07CB,0x02B6,0x12F0,0x0F67,
++     0x070D,0x1837,0x196B,0x09F7,0x153F,0x0BEE,0x1769,0x0B00,0x1142,0x1AE9,
++     0x1B98,0x1B8A,0x11A8,0x1DD2,0x16D2,0x1C7C,0x0F38,0x0F3B,0x1601,0x0151,
++     0x0320,0x1085,0x0B61,0x0DAF,0x1308,0x0E21,0x0371,0x1F7C,0x04DD,0x0F49,
++     0x1146,0x169C,0x1E31,0x1258,0x1E50,0x1F8B,0x205F,0x145A,0x084D,0x23B8,
++     0x0FAF,0x2055,0x160E,0x13D7,0x0908,0x0A7C,0x1022,0x0AC5,0x02DA,0x1962,
++     0x1F9F,0x0467,0x1E9C,0x04E3,0x0F4E,0x1DF9,0x23A5,0x10E7,0x11A9,0x215F,
++     0x117E,0x223A,0x149E,0x01E6,0x18D6,0x03B7,0x104B,0x0FBB,0x1273,0x18C9,
++     0x0A4A,0x215A,0x024C,0x1378,0x1ED2,0x212D,0x0F22,0x1F99,0x212E,0x2044,
++     0x10D0,0x22D2,0x20F7,0x19B5,0x1416,0x1741,0x20B6,0x1159,0x23A6,0x186D,
++     0x0515,0x04A8,0x2171,0x0E9E,0x2325,0x111B,0x1EC8,0x1620,0x1687,0x22BC,
++     0x059F,0x06E7,0x11DD,0x1C88,0x2125,0x0FAA,0x10DB,0x1854,0x1410,0x141C,
++     0x23AF,0x21D6,0x0B8C,0x0AD9,0x0B6B,0x0597,0x0C06,0x0619,0x198F,0x0339,
++     0x0802,0x0859,0x0107,0x0410,0x208A,0x2291,0x0E10,0x1DA6,0x19AA,0x0324,
++     0x10FB,0x049A,0x0CAC,0x2252,0x0299,0x0FD0,0x1DE7,0x086E,0x0FFA,0x09FA,
++     0x23C8,0x18C7,0x0489,0x2195,0x1802,0x19F2,0x1967,0x0FBF,0x02EE,0x0AE4,
++     0x0B63,0x1509,0x178F,0x0843,0x05E7,0x0613,0x1739,0x065A,0x0201,0x06D7,
++     0x21DA,0x11F4,0x0503,0x090D,0x0E32,0x09A8,0x1B5A,0x1EFB,0x20BF,0x11F1,
++     0x1D40,0x1DF2,0x1E75,0x01B0,0x0BCE,0x1346,0x1D5C,0x0546,0x1B0E,0x07B4,
++     0x11E8,0x018A,0x19E6,0x0177,0x134E,0x18E2,0x1546,0x0861,0x054C,0x0119,
++     0x1A77,0x1CEF,0x1110,0x1953,0x1CD9,0x0B65,0x0CD0,0x1E5A,0x1E0F,0x07EB,
++     0x13C2,0x1949,0x16E3,0x0409,0x007F,0x1CFF,0x0485,0x14D0,0x0CD1,0x0E46,
++     0x055E,0x1C48,0x016F,0x1C7B,0x1109,0x18B2,0x0ED5,0x13B0,0x0DFF,0x2061,
++     0x0795,0x2076,0x1A4A,0x029C,0x13BF,0x119A,0x1819,0x227A,0x0388,0x1C24,
++     0x036E,0x1D82,0x0F4B,0x084E,0x23EB,0x13A1,0x0632,0x13DC,0x150A,0x0112,
++     0x05A4,0x073C,0x161D,0x04AC,0x2283,0x0D0A,0x172E,0x2142,0x0319,0x1673,
++     0x17D6,0x0F73,0x0E26,0x14E6,0x1F46,0x13E0,0x1841,0x130E,0x2363,0x10CE,
++     0x0980,0x15A2,0x1FC7,0x04D9,0x11A2,0x0CA8,0x00EF,0x07BF,0x1C12,0x09DE,
++     0x0AE0,0x00DF,0x0D49,0x06C0,0x206E,0x1EE1,0x0A38,0x22F8,0x1DC7,0x0A79,
++     0x1800,0x179B,0x1386,0x1A22,0x01D2,0x094E,0x125C,0x2244,0x1746,0x0EDE,
++     0x002A,0x1CA7,0x099A,0x07E4,0x0264,0x1C6F,0x2389,0x0987,0x1F3D,0x1E88,
++     0x02E0,0x0D44,0x0E6C,0x1E8F,0x0F55,0x2066,0x1CC4,0x0917,0x1DB8,0x089F,
++     0x0615,0x11A5,0x12C8,0x0A42,0x079C,0x0D13,0x0B6A,0x131F,0x136C,0x04AE,
++     0x130D,0x16F8,0x01A0,0x13C7,0x0B4C,0x2279,0x0196,0x1464,0x0F60,0x0231,
++     0x19A0,0x1E9A,0x0397,0x170B,0x133C,0x2265,0x017C,0x1C78,0x048C,0x08D0,
++     0x06A4,0x071C,0x0BBA,0x0DE7,0x0B3F,0x0229,0x1EAD,0x140A,0x037B,0x0EC6,
++     0x0E16,0x0442,0x1894,0x156C,0x0F8F,0x23A1,0x0DCE,0x13CD,0x1AA4,0x0E59,
++     0x162B,0x1AA9,0x1BFB,0x09A7,0x1703,0x0A81,0x2056,0x21BC,0x078F,0x07AD,
++     0x1A24,0x0F31,0x19F3,0x09E6,0x11CD,0x23B6,0x234F,0x0FD2,0x196D,0x06D6,
++     0x035A,0x0AFA,0x005E,0x035C,0x1AB9,0x15A4,0x1318,0x0132,0x08D9,0x0512,
++     0x1693,0x0DB0,0x16A6,0x07FC,0x0B02,0x1D0D,0x09F0,0x21F5,0x0799,0x13E3,
++     0x0768,0x0EF9,0x1176,0x014A,0x15C1,0x0BA1,0x0E99,0x112B,0x1AAE,0x1C0B,
++     0x0178,0x1C69,0x1C0F,0x0130,0x1FC2,0x0E45,0x1694,0x1F0D,0x1A79,0x0911,
++     0x0FE9,0x09AF,0x18C2,0x1B67,0x1DF3,0x0B01,0x14B5,0x1DFD,0x0DCD,0x161E,
++     0x19A1,0x19E5,0x1500,0x14C9,0x0B2A,0x2366,0x1B46,0x14F4,0x0B5C,0x063E,
++     0x03E1,0x0CA5,0x04F7,0x1409,0x0EC3,0x1D5D,0x012C,0x1277,0x1310,0x1214,
++     0x112E,0x1F80,0x0AD6,0x1FD6,0x105B,0x226C,0x1F41,0x19CF,0x2033,0x0D29,
++     0x03CA,0x1A47,0x0756,0x125A,0x06F4,0x1B53,0x0527,0x1D91,0x20CE,0x1975,
++     0x0072,0x1431,0x1EEF,0x0BD0,0x0BE1,0x0C01,0x00E1,0x0A7A,0x23E6,0x0323,
++     0x219F,0x1367,0x07A2,0x1CB6,0x2191,0x0CB2,0x234A,0x1288,0x17DD,0x030B,
++     0x15F2,0x02A8,0x0D83,0x04BD,0x2347,0x0522,0x051B,0x225A,0x228A,0x1B9F,
++     0x13F9,0x1B7C,0x1D7F,0x0A30,0x0220,0x1C3F,0x22EA,0x1680,0x0FC9,0x1190,
++     0x1EF1,0x21CC,0x155E,0x20DD,0x0F27,0x13F6,0x07FF,0x0F71,0x1E6A,0x05B9,
++     0x0F0A,0x2228,0x02E9,0x0ACE,0x205C,0x01E5,0x200B,0x002F,0x1E27,0x0116,
++     0x1B38,0x190C,0x2307,0x07EA,0x152C,0x04C8,0x01FE,0x199B,0x1001,0x1535,
++     0x0930,0x1EC9,0x086A,0x0080,0x141E,0x1066,0x16DF,0x0C79,0x1E42,0x0A4C,
++     0x0667,0x1B7F,0x1679,0x1A3C,0x1A25,0x00E6,0x0611,0x0518,0x0B87,0x16F9,
++     0x22B0,0x1C3A,0x14FD,0x04BC,0x080F,0x21BF,0x1943,0x0266,0x1124,0x002B,
++     0x0670,0x01AB,0x1EC5,0x08B6,0x091D,0x0FA6,0x0541,0x20DC,0x0E65,0x0128,
++     0x08C9,0x11E5,0x1647,0x0D3D,0x01B8,0x1C61,0x2319,0x200C,0x1053,0x1027,
++     0x05F8,0x1A27,0x1133,0x210D,0x11E6,0x0935,0x054B,0x0754,0x02C6,0x0723,
++     0x0852,0x106B,0x161F,0x10B1,0x0E81,0x2054,0x156B,0x1113,0x22C5,0x21B7,
++     0x0AC0,0x042B,0x17DB,0x01B9,0x0CA2,0x055B,0x1A87,0x0D62,0x0A47,0x077F,
++     0x1D25,0x0FB5,0x1F3F,0x04E0,0x16C2,0x011D,0x158C,0x209C,0x0D6E,0x18FE,
++     0x05DD,0x1C05,0x123E,0x1BC6,0x0892,0x232B,0x1E3F,0x11B6,0x10B6,0x144A,
++     0x203F,0x02AD,0x2237,0x1BB3,0x03EB,0x0BBC,0x0311,0x1054,0x011E,0x1712,
++     0x05C2,0x2129,0x0292,0x22D0,0x0E6F,0x1F17,0x2234,0x16B6,0x00B5,0x1502,
++     0x0B0E,0x1299,0x2170,0x08C0,0x1BD4,0x1475,0x141B,0x0D00,0x2026,0x0318,
++     0x1567,0x0A4E,0x03E9,0x1CDC,0x23A8,0x1D8E,0x0DD8,0x0470,0x0286,0x1C22,
++     0x1315,0x1785,0x048F,0x1786,0x1EE0,0x0B37,0x0952,0x02BE,0x0873,0x04DF,
++     0x2101,0x0FCD,0x04B0,0x059D,0x1FCF,0x05E0,0x1C7F,0x0CBE,0x0461,0x024A,
++     0x027C,0x05F4,0x092A,0x0DC9,0x01E7,0x1147,0x03B2,0x1AB8,0x0238,0x174C,
++     0x02B2,0x1C6E,0x04D8,0x0DBC,0x1AB1,0x17FF,0x1443,0x054F,0x1128,0x0370,
++     0x14CC,0x1F35,0x1173,0x0A03,0x1D32,0x12D1,0x02AB,0x09DB,0x153D,0x1425,
++     0x122F,0x06BD,0x17B8,0x1579,0x0890,0x1B0F,0x1050,0x0DDF,0x23E3,0x1860,
++     0x1203,0x11D5,0x0EBB,0x0A80,0x00B7,0x1951,0x15B7,0x1FF3,0x0D14,0x143D,
++     0x164C,0x0E67,0x0C91,0x01F4,0x2243,0x1474,0x03A4,0x2147,0x0270,0x10C9,
++     0x116F,0x127D,0x0B1E,0x10FC,0x1A0A,0x1846,0x1F63,0x1067,0x0BB3,0x191F,
++     0x0EA6,0x0EEF,0x1E29,0x18B9,0x2079,0x090C,0x16FD,0x0EB4,0x0BC9,0x2098,
++     0x080A,0x0183,0x1BFE,0x1631,0x0769,0x1DD8,0x142F,0x0F66,0x1316,0x02A9,
++     0x22EE,0x1C4F,0x0285,0x1013,0x065D,0x0C2D,0x0466,0x033E,0x00E7,0x1900,
++     0x226F,0x1276,0x03AE,0x0EA1,0x23E7,0x174D,0x216C,0x1CA1,0x1A06,0x0665,
++     0x1461,0x2260,0x1F7D,0x1156,0x14E8,0x1327,0x0257,0x089A,0x15DF,0x16F4,
++     0x0EB9,0x03B3,0x0EAD,0x0FD9,0x085D,0x1259,0x1BA8,0x1E90,0x114C,0x2236,
++     0x02C7,0x1E53,0x2115,0x1D33,0x1FF5,0x1AFD,0x185D,0x06EE,0x0DC0,0x078C,
++     0x0AF4,0x15D1,0x0030,0x2131,0x1EB6,0x06E0,0x06B6,0x038C,0x05A8,0x080C,
++     0x0E98,0x1682,0x1DC0,0x1340,0x13B7,0x1C1B,0x0434,0x1AB5,0x1CAB,0x1A1C,
++     0x07D0,0x1ABB,0x22C1,0x0F08,0x027D,0x1238,0x1591,0x07F7,0x0D30,0x13F8,
++     0x1909,0x212B,0x1826,0x0749,0x0D06,0x0D2E,0x104F,0x1F39,0x09EB,0x0EF6,
++     0x22E6,0x16F1,0x0AEE,0x116B,0x17DE,0x0B12,0x0322,0x0BEA,0x064C,0x03D9,
++     0x2374,0x0CA4,0x1293,0x0E5C,0x04B3,0x03A0,0x13AD,0x0E33,0x0353,0x081A,
++     0x0BB2,0x0DA3,0x1E01,0x1322,0x0EBE,0x0D0E,0x0DBB,0x11A3,0x1B57,0x16FF,
++     0x0298,0x1A8F,0x09EF,0x08AD,0x1877,0x22AC,0x147A,0x1B36,0x095A,0x1B08,
++     0x0455,0x10AD,0x0343,0x1B16,0x0CF8,0x082E,0x144D,0x1A37,0x1B5D,0x0702,
++     0x09C4,0x1E16,0x157A,0x1965,0x0A63,0x1C6D,0x0D9E,0x0ED8,0x1E57,0x05CC,
++     0x1758,0x008D,0x0BFE,0x1168,0x04ED,0x1917,0x2251,0x1074,0x2356,0x1719,
++     0x1D3B,0x1FBE,0x22AA,0x14C8,0x211F,0x16D1,0x124B,0x2241,0x1C08,0x0AAC,
++     0x0F06,0x12B5,0x01FB,0x1C72,0x0089,0x23B3,0x02BA,0x15A5,0x1A00,0x1483,
++     0x13F2,0x2016,0x1AEB,0x2187,0x0BF7,0x07FA,0x2005,0x1516,0x13D6,0x0122,
++     0x0420,0x039D,0x0193,0x193B,0x2360,0x0453,0x0A75,0x0BD9,0x1197,0x1923,
++     0x1DB5,0x2225,0x1194,0x2058,0x0E9F,0x1106,0x06A1,0x02F5,0x1B63,0x00FF,
++     0x1F4C,0x2289,0x0CE0,0x1F1D,0x1247,0x19AE,0x1FC0,0x182E,0x05B3,0x0DB2,
++     0x229C,0x0E3D,0x232D,0x1961,0x1B95,0x0CA9,0x1A9E,0x183F,0x0203,0x1E76,
++     0x16BB,0x00B1,0x0A3F,0x237E,0x08A8,0x1B6E,0x0B2B,0x215B,0x119E,0x0945,
++     0x0F86,0x0A4B,0x12C7,0x1616,0x046B,0x20A3,0x0454,0x0405,0x0C19,0x1A08,
++     0x1E33,0x10BD,0x1861,0x2135,0x0C23,0x0F36,0x0C5C,0x049B,0x032F,0x1A19,
++     0x03DC,0x1E84,0x011C,0x1E61,0x096E,0x1F66,0x0798,0x104C,0x1C62,0x1E73,
++     0x03E4,0x0638,0x190D,0x1AF6,0x17EF,0x10FD,0x1B0D,0x1263,0x1512,0x09A5,
++     0x1439,0x0EF7,0x041D,0x04BA,0x08D4,0x1714,0x1B62,0x164F,0x1787,0x114A,
++     0x05B2,0x1812,0x0D33,0x176E,0x1480,0x12FA,0x0E61,0x084B,0x0801,0x079A,
++     0x2034,0x154A,0x23BC,0x20A9,0x1985,0x2286,0x148C,0x0DC2,0x06D8,0x1D4C,
++     0x183D,0x1A41,0x22DD,0x21F1,0x103C,0x14BC,0x0827,0x0850,0x157D,0x02BD,
++     0x03BF,0x00DE,0x0C9E,0x1CB7,0x1BF8,0x0805,0x20A8,0x1DA1,0x1F50,0x1DA0,
++     0x0DA0,0x068E,0x1979,0x0650,0x1F52,0x2239,0x0594,0x1534,0x1C38,0x0351,
++     0x0DE3,0x1672,0x21E3,0x10AB,0x11BC,0x1788,0x1547,0x2071,0x07DE,0x012F,
++     0x22AF,0x2377,0x179A,0x12B3,0x0CF3,0x0B92,0x0BB7,0x070F,0x11CA,0x2039,
++     0x0DAA,0x1521,0x0278,0x0F4D,0x0C87,0x0956,0x0967,0x067E,0x08B0,0x11AF,
++     0x051F,0x099E,0x0C78,0x0E27,0x19BD,0x1DCC,0x15F1,0x01F5,0x1453,0x043E,
++     0x1E8C,0x018F,0x1B54,0x2166,0x1BBC,0x1FE8,0x059A,0x0C6B,0x00C7,0x1E92,
++     0x13DE,0x0B3B,0x05E4,0x15EE,0x22A9,0x2090,0x2276,0x0631,0x105D,0x2038,
++     0x195A,0x17E5,0x1AFF,0x10A8,0x0384,0x0886,0x0456,0x1599,0x0B4E,0x1D47,
++     0x1830,0x051E,0x1C3D,0x20E1,0x1895,0x2092,0x10E9,0x07C6,0x23BD,0x201A,
++     0x209A,0x04C4,0x0315,0x019B,0x237C,0x047A,0x23FC,0x11A6,0x195F,0x2006,
++     0x1328,0x1CCE,0x1DEA,0x0970,0x0067,0x058D,0x1934,0x2120,0x01C5,0x2263,
++     0x04FD,0x1AE1,0x125E,0x1CA0,0x19BC,0x226E,0x0734,0x0BB8,0x0A54,0x19FE,
++     0x0E85,0x1FC6,0x0224,0x171C,0x1FFB,0x1115,0x0524,0x133E,0x0EDD,0x2280,
++     0x1D2F,0x0200,0x0CB3,0x23FE,0x0F19,0x1569,0x1537,0x19C2,0x08DC,0x1F6D,
++     0x068D,0x10F4,0x055A,0x1E30,0x21F0,0x1CF5,0x0D35,0x04A6,0x139D,0x23D3,
++     0x0A8D,0x1D3D,0x0763,0x0575,0x1511,0x1676,0x1304,0x0E13,0x10CD,0x0E55,
++     0x199E,0x236E,0x1257,0x2288,0x13E5,0x0037,0x1D04,0x04EF,0x100E,0x0FAE,
++     0x1E9E,0x067A,0x2320,0x0539,0x21D8,0x07C4,0x045F,0x1D0B,0x1196,0x020E,
++     0x1B68,0x04B5,0x031C,0x00FD,0x1184,0x0F7C,0x166C,0x23D2,0x0C9F,0x2380,
++     0x0B78,0x0F14,0x18F0,0x05AD,0x0252,0x138A,0x13FA,0x1A93,0x1F01,0x126A,
++     0x1D6A,0x11D9,0x182F,0x1492,0x1822,0x0D54,0x16E2,0x05D1,0x1155,0x0C4A,
++     0x1F58,0x00A3,0x17E0,0x0CD6,0x1D43,0x0250,0x16F3,0x0CFB,0x0C29,0x0B86,
++     0x11A4,0x1ED7,0x14FC,0x10D8,0x0F59,0x2338,0x1C5A,0x0F42,0x142D,0x12FD,
++     0x2373,0x11CE,0x0800,0x23E0,0x2025,0x0FFD,0x0A99,0x2264,0x1FF7,0x04A9,
++     0x1A67,0x1ED4,0x0BE2,0x21F3,0x1DF4,0x1927,0x04A4,0x1C84,0x0B09,0x11B9,
++     0x21A0,0x1D7B,0x1EF7,0x006F,0x18C6,0x1478,0x0985,0x1E23,0x0039,0x1EBC,
++     0x13D2,0x0391,0x039C,0x0118,0x1061,0x21C8,0x1A40,0x1EAA,0x175B,0x036C,
++     0x204F,0x19BA,0x1F91,0x193A,0x197B,0x0F24,0x176F,0x1592,0x0854,0x0804,
++     0x0FD4,0x0A2B,0x16FE,0x0D64,0x0587,0x1F00,0x1539,0x203C,0x1E54,0x01B4,
++     0x02E6,0x1B11,0x0A98,0x157C,0x1868,0x0786,0x15C8,0x083C,0x0F84,0x1209,
++     0x0B47,0x0F1C,0x0D77,0x188C,0x06C7,0x0521,0x203E,0x1921,0x0996,0x2020,
++     0x1E5D,0x12CE,0x0940,0x0309,0x1991,0x12A7,0x1E77,0x0830,0x1B94,0x1C73,
++     0x02C4,0x1D86,0x0F0F,0x192B,0x0BFC,0x1451,0x1969,0x09F1,0x010C,0x1865,
++     0x09C6,0x1AE8,0x17B7,0x21F8,0x14A1,0x21F6,0x07D7,0x0C36,0x1CB4,0x1883,
++     0x1655,0x1DDF,0x0863,0x00F0,0x0961,0x0687,0x1070,0x0FE5,0x072F,0x0BC2,
++     0x08C8,0x1AAA,0x0645,0x09CF,0x0FA8,0x2130,0x23CF,0x2246,0x1990,0x1744,
++     0x0D4B,0x0090,0x143F,0x166F,0x1DE5,0x0331,0x09CD,0x1447,0x1CEB,0x0D3B,
++     0x0CCD,0x2159,0x0F78,0x0251,0x068F,0x07BB,0x0877,0x1A2A,0x0700,0x23C2,
++     0x08A2,0x1C98,0x1427,0x0E79,0x15AC,0x0F8B,0x153A,0x0AEC,0x0DEC,0x03EE,
++     0x1AE2,0x1F6B,0x13F4,0x1EFA,0x172F,0x1C87,0x1B3F,0x192A,0x1C53,0x1BB1,
++     0x0297,0x0772,0x1385,0x173D,0x0707,0x17BD,0x007D,0x1A07,0x08C6,0x1D6F,
++     0x09D8,0x1850,0x1C8B,0x180D,0x1CB1,0x148A,0x0492,0x0847,0x0D78,0x0DEF,
++     0x0E7E,0x1D3A,0x0E91,0x1888,0x1C59,0x1AE7,0x1FC1,0x154C,0x058C,0x0078,
++     0x22BA,0x225B,0x0F5E,0x1A4C,0x0D3E,0x195D,0x06DF,0x02A7,0x14E5,0x0CFC,
++     0x16EE,0x0F7D,0x0321,0x178A,0x1097,0x0E0B,0x1479,0x079D,0x1C5B,0x1208,
++     0x0B1F,0x0D7C,0x1963,0x0835,0x1C99,0x2226,0x1417,0x045E,0x18E0,0x0051,
++     0x1243,0x181E,0x0659,0x172A,0x1373,0x1ABD,0x1F0C,0x1749,0x113A,0x06ED,
++     0x09A6,0x027F,0x015D,0x1084,0x022E,0x1A5B,0x1685,0x1D1B,0x0054,0x0FB3,
++     0x20CC,0x23A9,0x220B,0x045A,0x1B24,0x2145,0x148B,0x18EC,0x16BC,0x0B9B,
++     0x120C,0x18B0,0x02E3,0x1A1D,0x0BE7,0x133D,0x0DE1,0x21D4,0x0357,0x1715,
++     0x20A2,0x0A18,0x239D,0x22D6,0x0CD5,0x1942,0x16E9,0x0E54,0x1007,0x069D,
++     0x1CB8,0x12DC,0x0381,0x0C93,0x1EFF,0x04E4,0x1C25,0x1FE7,0x20C1,0x0412,
++     0x0215,0x1594,0x1BC5,0x217E,0x221C,0x173A,0x1F19,0x1183,0x0765,0x20F8,
++     0x05F2,0x130A,0x036D,0x012E,0x06EA,0x0B3C,0x1C42,0x1F43,0x0A95,0x1B8C,
++     0x1F36,0x0622,0x04DA,0x2070,0x089E,0x04D4,0x184E,0x1520,0x1CC8,0x127B,
++     0x1302,0x13D0,0x0626,0x0429,0x004A,0x18C0,0x2144,0x0A34,0x1AEA,0x1212,
++     0x12A2,0x06D2,0x0751,0x1D2B,0x104A,0x133A,0x1E80,0x12F6,0x1C9E,0x1460,
++     0x13BA,0x16D9,0x1648,0x1E3A,0x1B29,0x0592,0x11BA,0x1D0E,0x0153,0x0ADB,
++     0x15C3,0x1507,0x17FC,0x122C,0x14D7,0x21AD,0x1A53,0x14F2,0x16DC,0x20F1,
++     0x118E,0x1AAB,0x04EB,0x0606,0x0D05,0x170E,0x05D9,0x0A83,0x10F7,0x070B,
++     0x04F8,0x0B27,0x2224,0x0F97,0x075E,0x180E,0x2194,0x010E,0x0B57,0x1A80,
++     0x1610,0x1B19,0x1BAC,0x0B30,0x0376,0x1697,0x0668,0x00EC,0x1256,0x1F74,
++     0x110D,0x0807,0x03D1,0x1326,0x0577,0x067C,0x1E5C,0x1D6D,0x06F1,0x075C,
++     0x0394,0x0184,0x1E7E,0x12F1,0x0216,0x0990,0x208D,0x1332,0x1044,0x0EF8,
++     0x0F70,0x075D,0x042C,0x030E,0x17CB,0x0AA3,0x04B2,0x1A63,0x04FE,0x097E,
++     0x213D,0x11DF,0x166B,0x0A2E,0x0664,0x0C75,0x21A3,0x102D,0x1F32,0x1D42,
++     0x0A65,0x14BF,0x0B11,0x22B9,0x08AC,0x1394,0x11B7,0x1FAE,0x1CCD,0x1A05,
++     0x177D,0x0D81,0x1E85,0x0D88,0x0A5E,0x0330,0x0EC4,0x13D9,0x1583,0x1CA6,
++     0x2126,0x0F99,0x158F,0x00F9,0x0176,0x1528,0x1C2B,0x1D69,0x049F,0x0418,
++     0x18B4,0x1ACB,0x236F,0x04C5,0x0705,0x0031,0x20B9,0x15B2,0x1FD4,0x18FC,
++     0x1A6E,0x21B1,0x0DEA,0x0432,0x1F1B,0x0CB7,0x2011,0x07CC,0x21FD,0x1216,
++     0x1F51,0x21AB,0x0974,0x0833,0x06F8,0x1935,0x10B4,0x0164,0x1421,0x1A4D,
++     0x1824,0x07DB,0x1551,0x0E53,0x152D,0x23CE,0x0DFE,0x0D51,0x1A6A,0x1E3C,
++     0x20B4,0x1BAA,0x0C62,0x0973,0x01E4,0x0035,0x01D7,0x0496,0x1A73,0x1435,
++     0x2290,0x22F4,0x1E71,0x0F7B,0x066D,0x0874,0x0DB5,0x0F1A,0x0F2D,0x218F,
++     0x17AE,0x0170,0x1BEA,0x1908,0x204A,0x0728,0x0746,0x18B8,0x0242,0x0F17,
++     0x1F8A,0x0B10,0x0966,0x1DD5,0x0174,0x07AE,0x1485,0x146C,0x0975,0x1556,
++     0x1783,0x2021,0x21E7,0x06DB,0x227D,0x19E7,0x22DC,0x2297,0x1FD1,0x1A26,
++     0x07CD,0x233D,0x1B84,0x1E18,0x21CE,0x0EE4,0x2255,0x0862,0x1887,0x057A,
++     0x20C9,0x17F4,0x1BDD,0x2284,0x1817,0x0929,0x0079,0x18F3,0x0E14,0x1131,
++     0x16B8,0x144E,0x120E,0x16BF,0x058B,0x1C9B,0x05D4,0x0E7B,0x07D3,0x1D27,
++     0x1051,0x1E12,0x2157,0x0A89,0x03E0,0x0DC8,0x219B,0x0495,0x04C0,0x090E,
++     0x1914,0x1A13,0x05C4,0x1C0D,0x0564,0x178C,0x2069,0x0291,0x08B5,0x0138,
++     0x1224,0x14C6,0x14C1,0x1AC7,0x0689,0x1E72,0x1751,0x1E0C,0x2270,0x080D,
++     0x1C00,0x03AD,0x1EF8,0x15C9,0x0F28,0x0E40,0x0F9E,0x0344,0x1D58,0x11F5,
++     0x1EAC,0x17A7,0x188D,0x05BA,0x1472,0x154E,0x0017,0x05C7,0x1ACD,0x2370,
++     0x1140,0x2230,0x0F2E,0x1EB2,0x1CA5,0x1B5E,0x1633,0x09B5,0x08B1,0x1B3E,
++     0x0CFE,0x02ED,0x1CEC,0x020F,0x2103,0x13ED,0x0C99,0x07E3,0x00D9,0x1342,
++     0x2179,0x03AA,0x13F5,0x124C,0x1EAB,0x15BA,0x0F41,0x02F6,0x1652,0x057E,
++     0x0157,0x0BE6,0x09AB,0x148D,0x072A,0x1071,0x09B0,0x0500,0x1B65,0x0A6A,
++     0x13A0,0x0F65,0x21BE,0x01FF,0x19B3,0x1CBA,0x109F,0x1EF0,0x0517,0x0307,
++     0x18AC,0x0FD5,0x1FEF,0x0F16,0x197E,0x1291,0x078A,0x1657,0x13C1,0x0E7A,
++     0x1466,0x07BE,0x164E,0x0419,0x2158,0x0FC4,0x0E7D,0x18D9,0x0942,0x0AEF,
++     0x163E,0x2200,0x226D,0x037A,0x1B66,0x0CAF,0x07FB,0x0CEC,0x0D4A,0x0CB6,
++     0x000E,0x1ADE,0x1BD5,0x1892,0x15A1,0x1DD1,0x1DBC,0x01EE,0x12E0,0x0671,
++     0x0ABB,0x1E0E,0x189F,0x1D9D,0x0DF2,0x0008,0x13CB,0x11B8,0x0571,0x00BA,
++     0x0AC3,0x1568,0x070A,0x21B0,0x16EA,0x1000,0x10BF,0x0C8C,0x0AE5,0x186B,
++     0x1366,0x12DF,0x2156,0x0C82,0x05CD,0x0B25,0x08CA,0x1695,0x0FCE,0x055F,
++     0x0D37,0x1748,0x13DB,0x1E43,0x03E7,0x0D8E,0x095E,0x0AF1,0x0103,0x02F4,
++     0x02F8,0x01F6,0x07FD,0x095F,0x1376,0x1643,0x1350,0x1372,0x06E3,0x14D5,
++     0x0870,0x15D9,0x20CD,0x128D,0x1878,0x0FC1,0x0907,0x127C,0x0A2C,0x0041,
++     0x03F4,0x116C,0x02B1,0x1CEA,0x1A18,0x00FB,0x08DE,0x0660,0x06AA,0x23D1,
++     0x0092,0x230C,0x0D91,0x14A3,0x0478,0x0FF7,0x1AF1,0x001A,0x0E69,0x1F5C,
++     0x162C,0x19F8,0x141A,0x1FE6,0x100F,0x047F,0x1DAF,0x231E,0x236C,0x1725,
++     0x108E,0x0290,0x1006,0x0E74,0x1C0A,0x1E35,0x1B90,0x05A7,0x1C21,0x0F1F,
++     0x0514,0x1937,0x22A6,0x0B4A,0x1A3A,0x1217,0x0E50,0x078D,0x2198,0x1B3B,
++     0x1A44,0x0BAB,0x2268,0x16D5,0x03F3,0x06D0,0x0523,0x1D45,0x18DB,0x0BA7,
++     0x1DBA,0x0776,0x1CFA,0x1E13,0x0271,0x200A,0x0D9B,0x0C4B,0x0588,0x0593,
++     0x18E4,0x082A,0x0533,0x1988,0x0317,0x1848,0x0DAB,0x2177,0x1945,0x126B,
++     0x0842,0x07B9,0x1DE1,0x06F3,0x224E,0x0AF0,0x0026,0x0240,0x010F,0x18E7,
++     0x0E51,0x0947,0x1C35,0x1F28,0x1688,0x07A9,0x1759,0x1608,0x1437,0x0B39,
++     0x2009,0x0389,0x0858,0x15BE,0x08A9,0x22D4,0x0EAE,0x015F,0x0337,0x034D,
++     0x23D9,0x081D,0x1D74,0x0C26,0x1BD9,0x0651,0x1F7B,0x2008,0x16B5,0x23A2,
++     0x05E1,0x1325,0x1E20,0x225F,0x0DED,0x101A,0x1254,0x00A8,0x1F1C,0x1F26,
++     0x1C8C,0x0563,0x12D2,0x0821,0x2160,0x115D,0x11EE,0x0232,0x192E,0x1BDF,
++     0x05F3,0x0E57,0x11F3,0x044E,0x20B5,0x1BDE,0x0F25,0x0DBE,0x1361,0x1971,
++     0x17E7,0x0C46,0x16FC,0x1B2E,0x18CB,0x23C4,0x1912,0x214C,0x0BA4,0x2392,
++     0x1037,0x1666,0x0BBB,0x180B,0x041F,0x20FA,0x1577,0x18D7,0x0115,0x0904,
++     0x136E,0x1867,0x0F53,0x0E2B,0x1A02,0x1FB2,0x1A9A,0x1D6C,0x0EBA,0x0BD5,
++     0x09F8,0x083F,0x0227,0x0E89,0x1495,0x1033,0x0F07,0x0D4D,0x0B4D,0x0F6A,
++     0x07FE,0x1AFB,0x05B0,0x1205,0x06CE,0x02D6,0x09DF,0x1A0C,0x0C3E,0x22C9,
++     0x22E5,0x0FEB,0x0A0E,0x21E6,0x088A,0x1C64,0x10B8,0x0383,0x14F8,0x0ED4,
++     0x05B4,0x2188,0x226B,0x025C,0x020D,0x0D0C,0x0449,0x0C81,0x0965,0x1135,
++     0x0CC1,0x08FC,0x16E4,0x1ED1,0x1BBD,0x1BE3,0x06D9,0x00A2,0x04C3,0x0CBF,
++     0x1324,0x2235,0x116A,0x0789,0x0198,0x05C3,0x1181,0x106C,0x1C8F,0x0984,
++     0x1A71,0x05F9,0x1F61,0x1298,0x2310,0x0075,0x063B,0x0B71,0x10C8,0x1E6D,
++     0x08A3,0x045C,0x1157,0x1DCE,0x0A05,0x1AAC,0x03F5,0x0DD1,0x2137,0x1200,
++     0x0CC4,0x17DA,0x1DF7,0x06C5,0x1C07,0x1B59,0x1AD8,0x0C43,0x15A0,0x0EF0,
++     0x0243,0x1BDA,0x1338,0x0C2F,0x132E,0x1D63,0x0969,0x23F3,0x077E,0x0991,
++     0x1DBE,0x23C7,0x05A3,0x1253,0x1FB8,0x1BCE,0x053B,0x1B8F,0x00E3,0x20E2,
++     0x1B61,0x22CE,0x04E8,0x17E1,0x06A3,0x04D1,0x02D3,0x23B1,0x031A,0x2045,
++     0x1319,0x1E7F,0x20CA,0x21E9,0x0C50,0x1E8D,0x209B,0x2306,0x0A1D,0x044B,
++     0x08A1,0x0437,0x102C,0x11F0,0x159B,0x0913,0x0A08,0x1E36,0x128F,0x06FA,
++     0x0DF0,0x160B,0x1F2E,0x094C,0x0788,0x1309,0x1CD4,0x0599,0x179F,0x0F54,
++     0x1362,0x1763,0x1B6C,0x0302,0x0921,0x231D,0x13F1,0x09C3,0x1348,0x12E1,
++     0x00FA,0x1689,0x16BE,0x18AB,0x1604,0x19F1,0x21BA,0x0D6A,0x20FC,0x21D2,
++     0x21ED,0x0663,0x0421,0x0D92,0x061A,0x165F,0x1D92,0x152E,0x070C,0x12A8,
++     0x1C90,0x0951,0x0CE5,0x1D39,0x0B75,0x168B,0x0A61,0x23B4,0x1572,0x1E06,
++     0x1AF9,0x0F5A,0x00CC,0x2139,0x0114,0x18FA,0x1654,0x18A9,0x0B13,0x0AF8,
++     0x14E4,0x051C,0x098A,0x1C9C,0x0554,0x1BBE,0x0DE5,0x198E,0x1BBB,0x0BCD,
++     0x0511,0x0E22,0x1D95,0x0C11,0x14E2,0x0108,0x1A56,0x0401,0x11B0,0x00C6,
++     0x2165,0x0F64,0x17BF,0x0154,0x0B95,0x14A5,0x0CC8,0x1B8E,0x1D7A,0x024F,
++     0x1762,0x1F71,0x1501,0x1844,0x15C2,0x010D,0x1092,0x0060,0x00AF,0x154D,
++     0x0DA5,0x0DB8,0x196E,0x1EE5,0x035E,0x05D3,0x00FC,0x0BCB,0x0364,0x0CAB,
++     0x16A3,0x23A7,0x014B,0x1536,0x0550,0x0407,0x127A,0x0A9E,0x1D64,0x0FD8,
++     0x14D2,0x0701,0x17DC,0x0BC0,0x1BA7,0x2141,0x0CFF,0x1B31,0x0205,0x22A7,
++     0x0C5E,0x1A09,0x11DE,0x13CE,0x08F3,0x208F,0x0015,0x2037,0x0AAF,0x057D,
++     0x0087,0x0AFB,0x1A85,0x1A97,0x0FD7,0x12D9,0x1FED,0x1DE2,0x197F,0x22B1,
++     0x205A,0x0544,0x0AD0,0x01DF,0x1E64,0x0AEB,0x12A6,0x0F30,0x07F1,0x1BF0,
++     0x230A,0x0573,0x0F61,0x2386,0x1242,0x1C55,0x0DA4,0x0F43,0x22AE,0x0CC6,
++     0x1BB5,0x0CDC,0x16A0,0x02FE,0x053F,0x008C,0x18E8,0x02CE,0x0C17,0x1B71,
++     0x1494,0x15F0,0x0D5B,0x089C,0x0F21,0x0A87,0x10CB,0x1EEB,0x1A2D,0x1F38,
++     0x0508,0x1C13,0x09D6,0x1B83,0x03C7,0x177B,0x0BA0,0x0760,0x00A7,0x07B8,
++     0x0F3F,0x0070,0x163B,0x0718,0x1609,0x2313,0x1058,0x10A1,0x0DA2,0x1BD8,
++     0x19D3,0x203D,0x09AA,0x0F0C,0x0A4D,0x22AD,0x0E9B,0x07A8,0x14F1,0x1056,
++     0x1E74,0x0402,0x0D40,0x0D6C,0x021E,0x1756,0x0056,0x0EB1,0x0E1C,0x0206,
++     0x0C94,0x2326,0x1F31,0x23CD,0x1BBF,0x0BB6,0x0607,0x0E0E,0x13B9,0x1724,
++     0x03F1,0x1BCC,0x01F1,0x1624,0x129F,0x1A6D,0x22E0,0x1132,0x1AE5,0x1B69,
++     0x00F1,0x225E,0x1E28,0x05EA,0x0F8E,0x024B,0x108F,0x0A3E,0x135D,0x0C73,
++     0x18D3,0x1BDC,0x1E8B,0x0BAA,0x1D09,0x0305,0x22E2,0x1D7D,0x012B,0x2164,
++     0x156F,0x0069,0x1333,0x206D,0x04F2,0x1982,0x141D,0x023D,0x0144,0x1EA0,
++     0x2378,0x1486,0x0EC5,0x1677,0x0770,0x06B4,0x04F6,0x09BC,0x1704,0x1DEF,
++     0x1FAF,0x22D5,0x1A34,0x21C0,0x099D,0x1BD7,0x1C47,0x1A4B,0x195E,0x0569,
++     0x10E5,0x0BAE,0x01A4,0x220C,0x0BB9,0x1700};
++ 
++ #define MX_MTBL              (sizeof(mekornd) / sizeof(unsigned short))
++ 
++ typedef struct { int n; unsigned short int r; } MKT;
++ 
++ static int comp_mt(const void *s, const void *d)
++ {
++     MKT *mt1 = (MKT *)s;
++     MKT *mt2 = (MKT *)d;
++     return (int)(short)(mt1->r - mt2->r);
++ }
++ 
++ MKT *calcMEKO(int n)
++ {
++     int i;
++     MKT *mt;
++ 
++     if(n <= 0 || n > MX_MTBL){
++          ErrPopUp ("Error:  Over max array.", "\nOk");
++          return(NULL);
++     }
++ 
++     mt = malloc(sizeof(MKT) * n);
++ 
++     if(!mt) {
++          ErrPopUp ("Error:  No memory.", "\nOk");
++          return(NULL);
++     }
++ 
++     for(i = 0; i < n; i++) {
++         mt[i].r = mekornd[i];
++         mt[i].n = i + 1;
++     }
++     qsort(mt, n, sizeof(MKT), comp_mt);
++     return(mt);
++ }
diff --git a/xv-JPEG.patch b/xv-JPEG.patch
new file mode 100644 (file)
index 0000000..69dc247
--- /dev/null
@@ -0,0 +1,107 @@
+You'll need to apply the following (trivial) patch to get XV 3.10a to compile
+with version 6 of the Independent JPEG Group's JPEG library, which
+supports progressive JPEG and such.  
+
+Note that XV 3.10a is still shipped with version 5a of said library.  If 
+you'd like the newer library, it is available for anonymous ftp at this
+location:  ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
+
+John Bradley
+-----------------------------------------------------------------------------
+
+
+*** xvjpeg.c.old       Thu Jan  5 03:17:13 1995
+--- xvjpeg.c   Tue Jul 23 16:37:01 1996
+***************
+*** 51,61 ****
+  static    void         clickJD            PARM((int, int));
+  static    void         doCmd              PARM((int));
+  static    void         writeJPEG          PARM((void));
+! METHODDEF void         xv_error_exit      PARM((j_common_ptr));
+! METHODDEF void         xv_error_output    PARM((j_common_ptr));
+! METHODDEF void         xv_prog_meter      PARM((j_common_ptr));
+  static    unsigned int j_getc             PARM((j_decompress_ptr));
+! METHODDEF boolean      xv_process_comment PARM((j_decompress_ptr));
+  static    int          writeJFIF          PARM((FILE *, byte *, int,int,int));
+  
+  
+--- 51,61 ----
+  static    void         clickJD            PARM((int, int));
+  static    void         doCmd              PARM((int));
+  static    void         writeJPEG          PARM((void));
+! METHODDEF(void)        xv_error_exit      PARM((j_common_ptr));
+! METHODDEF(void)        xv_error_output    PARM((j_common_ptr));
+! METHODDEF(void)        xv_prog_meter      PARM((j_common_ptr));
+  static    unsigned int j_getc             PARM((j_decompress_ptr));
+! METHODDEF(boolean)     xv_process_comment PARM((j_decompress_ptr));
+  static    int          writeJFIF          PARM((FILE *, byte *, int,int,int));
+  
+  
+***************
+*** 400,406 ****
+  
+  
+  /**************************************************/
+! METHODDEF void xv_error_exit(cinfo) 
+       j_common_ptr cinfo;
+  {
+    my_error_ptr myerr;
+--- 400,406 ----
+  
+  
+  /**************************************************/
+! METHODDEF(void) xv_error_exit(cinfo) 
+       j_common_ptr cinfo;
+  {
+    my_error_ptr myerr;
+***************
+*** 412,418 ****
+  
+  
+  /**************************************************/
+! METHODDEF void xv_error_output(cinfo) 
+       j_common_ptr cinfo;
+  {
+    my_error_ptr myerr;
+--- 412,418 ----
+  
+  
+  /**************************************************/
+! METHODDEF(void) xv_error_output(cinfo) 
+       j_common_ptr cinfo;
+  {
+    my_error_ptr myerr;
+***************
+*** 426,432 ****
+  
+  
+  /**************************************************/
+! METHODDEF void xv_prog_meter(cinfo)
+       j_common_ptr cinfo;
+  {
+    struct jpeg_progress_mgr *prog;
+--- 426,432 ----
+  
+  
+  /**************************************************/
+! METHODDEF(void) xv_prog_meter(cinfo)
+       j_common_ptr cinfo;
+  {
+    struct jpeg_progress_mgr *prog;
+***************
+*** 671,677 ****
+  
+  
+  /**************************************************/
+! METHODDEF boolean xv_process_comment(cinfo)
+       j_decompress_ptr cinfo;
+  {
+    int          length, hasnull;
+--- 671,677 ----
+  
+  
+  /**************************************************/
+! METHODDEF(boolean) xv_process_comment(cinfo)
+       j_decompress_ptr cinfo;
+  {
+    int          length, hasnull;
diff --git a/xv-PLD.patch b/xv-PLD.patch
new file mode 100644 (file)
index 0000000..bbf843c
--- /dev/null
@@ -0,0 +1,137 @@
+diff -urN xv-3.10a.orig/Makefile xv-3.10a/Makefile
+--- xv-3.10a.orig/Makefile     Fri Oct 15 17:27:01 1999
++++ xv-3.10a/Makefile  Fri Oct 15 17:36:01 1999
+@@ -1,7 +1,7 @@
+ # Makefile for xv
+ # your C compiler (and options) of choice
+-CC = cc
++CC = gcc
+ # CC = gcc -ansi
+ # use this if you're using 'cc' on a DEC Alpha (OSF/1) or MIPS (Ultrix) system:
+@@ -14,7 +14,7 @@
+ #       -Wuninitialized -Wparentheses
+-CCOPTS = -O 
++CCOPTS = $(RPM_OPT_FLAGS)
+ ### NOTE: Sun running OpenWindows:
+@@ -45,45 +45,49 @@
+ ### if, for whatever reason, you're unable to get the JPEG library to compile
+ ### on your machine, *COMMENT OUT* the following lines
+ ###
+-JPEG    = -DDOJPEG
+-JPEGDIR = jpeg
+-JPEGINC = -I$(JPEGDIR)
+-JPEGLIB = $(JPEGDIR)/libjpeg.a
+-$(JPEGDIR)/jconfig.h:
+-      cd $(JPEGDIR) ; ./configure CC='$(CC)'
+-$(JPEGLIB):  $(JPEGDIR)/jconfig.h
+-      cd $(JPEGDIR) ; make
++#JPEG    = -DDOJPEG
++#JPEGDIR = jpeg
++#JPEGINC = -I$(JPEGDIR)
++#JPEGLIB = $(JPEGDIR)/libjpeg.a
++#$(JPEGDIR)/jconfig.h:
++#     cd $(JPEGDIR) ; ./configure CC='$(CC)'
++#$(JPEGLIB):  $(JPEGDIR)/jconfig.h
++#     cd $(JPEGDIR) ; make
++JPEGLIB = -ljpeg
+ ###
+ ### if, for whatever reason, you're unable to get the PNG library to compile
+ ### on your machine, *COMMENT OUT* the following lines
+ ###
+-PNG    = -DDOPNG
+-PNGDIR = /usr/local/src/libpng
+-PNGINC = -I$(PNGDIR)
+-PNGLIB = -L$(PNGDIR) -lpng
++#PNG    = -DDOPNG
++#PNGDIR = /usr/local/src/libpng
++#PNGINC = -I$(PNGDIR)
++#PNGLIB = -L$(PNGDIR) -lpng
++PNGLIB = -lpng
+ ###
+ ### if, for whatever reason, you're unable to get the PNG library to compile
+ ### on your machine, *COMMENT OUT* the following lines
+ ###
+-ZLIBDIR = /usr/local/src/zlib
+-ZLIBINC = -I$(ZLIBDIR)
+-ZLIBLIB = -L$(ZLIBDIR) -lz
++#ZLIBDIR = /usr/local/src/zlib
++#ZLIBINC = -I$(ZLIBDIR)
++#ZLIBLIB = -L$(ZLIBDIR) -lz
++ZLIBLIB = -lz
+ ###
+ ### if, for whatever reason, you're unable to get the TIFF library to compile
+ ### on your machine, *COMMENT OUT* the following lines
+ ###
+-TIFF    = -DDOTIFF
+-TIFFDIR = tiff
+-TIFFINC = -I$(TIFFDIR)
+-TIFFLIB = $(TIFFDIR)/libtiff.a
+-$(TIFFLIB):
+-      ( cd $(TIFFDIR) ; make CC='$(CC)' )
++#TIFF    = -DDOTIFF
++#TIFFDIR = tiff
++#TIFFINC = -I$(TIFFDIR)
++#TIFFLIB = $(TIFFDIR)/libtiff.a
++#$(TIFFLIB):
++#     ( cd $(TIFFDIR) ; make CC='$(CC)' )
++TIFFLIB = -ltiff
+ ###
+@@ -121,7 +125,7 @@
+ ### for LINUX, uncomment the following line
+-#MCHN = -DLINUX
++MCHN = -DLINUX
+ # For SCO 1.1 (UNIX 3.2v2) machines, uncomment the following:
+@@ -207,7 +211,7 @@
+       $(NODIRENT) $(VPRINTF) $(TIMERS) $(UNIX) $(BSDTYPES) $(RAND) \
+       $(DXWM) $(MCHN) $(PNG) $(PNGINC) $(ZLIBINC)
+-LIBS = -lX11 $(JPEGLIB) $(TIFFLIB) $(PNGLIB) $(ZLIBLIB) -lm
++LIBS = -lX11 $(JPEGLIB) $(TIFFLIB) $(PNGLIB) $(ZLIBLIB) -lm -L/usr/X11R6/lib
+ OBJS =        xv.o xvevent.o xvroot.o xvmisc.o xvimage.o xvcolor.o xvsmooth.o \
+       xv24to8.o xvgif.o xvpm.o xvinfo.o xvctrl.o xvscrl.o xvalg.o \
+@@ -226,10 +230,10 @@
+-all: $(JPEGLIB) $(TIFFLIB) xv bggen vdcomp xcmap xvpictoppm
++all: xv bggen vdcomp xcmap xvpictoppm
+-xv: $(OBJS) $(JPEGLIB) $(TIFFLIB)
++xv: $(OBJS)
+       $(CC) -o xv $(CFLAGS) $(OBJS) $(LIBS)
+ bggen: bggen.c
+diff -urN xv-3.10a.orig/xv.h xv-3.10a/xv.h
+--- xv-3.10a.orig/xv.h Fri Oct 15 17:27:01 1999
++++ xv-3.10a/xv.h      Fri Oct 15 17:33:35 1999
+@@ -115,10 +115,6 @@
+ #ifndef VMS
+ #  include <errno.h>
+-   extern int   errno;             /* SHOULD be in errno.h, but often isn't */
+-#  ifndef __NetBSD__
+-     extern char *sys_errlist[];     /* this too... */
+-#  endif
+ #endif
diff --git a/xv-TIFF.patch b/xv-TIFF.patch
new file mode 100644 (file)
index 0000000..935baa7
--- /dev/null
@@ -0,0 +1,101 @@
+The following patch should allow you to compile XV 3.10a against the latest
+version of Sam Leffler's TIFF Library (libtiff 3.4).  
+
+You do *not* need to apply this patch to compile XV 3.10a against the
+older version of the TIFF library (3.3) that is included in the XV
+3.10a distribution.  This is only necessary if you wish to upgrade to 
+the newer version of the TIFF library.
+
+You can get the latest version of the TIFF library via anonymous ftp on
+ftp.sgi.com, in 'graphics/tiff'.
+
+Thanks to Dan McCoy (mccoy@pixar.com) for supplying this patch!
+
+John Bradley
+-----------------------------------------------------------------------
+
+
+*** xvtiff.c.orig      Fri Jan 13 14:53:34 1995
+--- xvtiff.c   Thu Sep  5 16:55:46 1996
+***************
+*** 301,306 ****
+--- 301,310 ----
+  static       byte **BWmap;
+  static       byte **PALmap;
+  
++ /* XXXX Work around some collisions with the new library. */
++ #define tileContigRoutine _tileContigRoutine
++ #define tileSeparateRoutine _tileSeparateRoutine
++ 
+  typedef void (*tileContigRoutine)   PARM((byte*, u_char*, RGBvalue*, 
+                                         uint32, uint32, int, int));
+  
+***************
+*** 340,346 ****
+                                            uint32, uint32, int, int));
+  static void   put4bitbwtile            PARM((byte *, u_char *, RGBvalue *,
+                                            uint32, uint32, int, int));
+! static void   put16bitbwtile           PARM((byte *, u_char *, RGBvalue *,
+                                            uint32, uint32, int, int));
+  
+  static void   putRGBcontig8bittile     PARM((byte *, u_char *, RGBvalue *,
+--- 344,350 ----
+                                            uint32, uint32, int, int));
+  static void   put4bitbwtile            PARM((byte *, u_char *, RGBvalue *,
+                                            uint32, uint32, int, int));
+! static void   put16bitbwtile           PARM((byte *, u_short *, RGBvalue *,
+                                            uint32, uint32, int, int));
+  
+  static void   putRGBcontig8bittile     PARM((byte *, u_char *, RGBvalue *,
+***************
+*** 1218,1224 ****
+   */
+  static void put16bitbwtile(cp, pp, Map, w, h, fromskew, toskew)
+       byte  *cp;
+!      u_char *pp;
+       RGBvalue *Map;
+       uint32 w, h;
+       int fromskew, toskew;
+--- 1222,1228 ----
+   */
+  static void put16bitbwtile(cp, pp, Map, w, h, fromskew, toskew)
+       byte  *cp;
+!      u_short *pp;
+       RGBvalue *Map;
+       uint32 w, h;
+       int fromskew, toskew;
+***************
+*** 1227,1234 ****
+    
+    while (h-- > 0) {
+      for (x=w; x>0; x--) {
+!       *cp++ = Map[(pp[0] << 8) + pp[1]];
+!       pp += 2;
+      }
+      cp += toskew;
+      pp += fromskew;
+--- 1231,1237 ----
+    
+    while (h-- > 0) {
+      for (x=w; x>0; x--) {
+!       *cp++ = Map[*pp++];
+      }
+      cp += toskew;
+      pp += fromskew;
+***************
+*** 1514,1520 ****
+    case PHOTOMETRIC_MINISWHITE:
+    case PHOTOMETRIC_MINISBLACK:
+      switch (bitspersample) {
+!     case 16: put = put16bitbwtile; break;
+      case 8:  put = putgreytile;    break;
+      case 4:  put = put4bitbwtile;  break;
+      case 2:  put = put2bitbwtile;  break;
+--- 1517,1523 ----
+    case PHOTOMETRIC_MINISWHITE:
+    case PHOTOMETRIC_MINISBLACK:
+      switch (bitspersample) {
+!     case 16: put = (tileContigRoutine) put16bitbwtile; break;
+      case 8:  put = putgreytile;    break;
+      case 4:  put = put4bitbwtile;  break;
+      case 2:  put = put2bitbwtile;  break;
diff --git a/xv-croppad.patch b/xv-croppad.patch
new file mode 100644 (file)
index 0000000..85914c4
--- /dev/null
@@ -0,0 +1,89 @@
+As pointed out by long-time Friend-of-XV Rick Dyson, the XV 3.10a does an
+unexpected thing if you crop an image, and then 'pad' it.  3.10a would 
+effectively 'UnCrop' the image first, then pad it.  There is a workaround
+(save and reload the cropped image), but that's every bit as tedious as it
+sounds.
+
+This should do the trick, with any luck.
+
+--jhb, 7/9/98
+
+
+
+
+*** xvimage.c.old      Fri Jul 10 01:18:07 1998
+--- xvimage.c  Fri Jul 10 01:21:57 1998
+***************
+*** 2530,2536 ****
+  
+    rv = 1;
+  
+!   if ((mode != PAD_LOAD) && (wide == pWIDE && high == pHIGH && opaque==100)) {
+      ErrPopUp("Padding to same size as pic while fully opaque has no effect.", 
+            "\nI see");
+      return 0;
+--- 2530,2536 ----
+  
+    rv = 1;
+  
+!   if ((mode != PAD_LOAD) && (wide == cWIDE && high == cHIGH && opaque==100)) {
+      ErrPopUp("Padding to same size as pic while fully opaque has no effect.", 
+            "\nI see");
+      return 0;
+***************
+*** 2806,2832 ****
+  
+    /* copy 'pic' centered onto pic24.  */
+  
+!   sx = (wide - pWIDE) / 2;
+!   sy = (high - pHIGH) / 2;
+    
+!   for (py = 0; py<pHIGH; py++) {
+!     ProgressMeter(0, pHIGH-1, py, "Pad");
+      if ((py & 0x1f)==0) WaitCursor();
+  
+      p24y = sy + py;
+      if (p24y >= 0 && p24y < high) {
+!       for (px=0; px<pWIDE; px++) {
+       p24x = sx + px;
+       if (p24x >= 0 && p24x < wide) {
+         p24 = pic24 + (p24y*wide  + p24x)*3;
+         
+         
+         if (picType == PIC24) {                       /* src is PIC24 */
+!          pp  = pic + (py * pWIDE + px)  *3;
+           r = pp[0];  g = pp[1];  b = pp[2];
+         }
+         else {                                        /* src is PIC8 */
+!          pp  = pic + (py*pWIDE + px);
+           r = rMap[*pp];  g = gMap[*pp];  b = bMap[*pp];
+         }
+         
+--- 2806,2832 ----
+  
+    /* copy 'pic' centered onto pic24.  */
+  
+!   sx = (wide - cWIDE) / 2;
+!   sy = (high - cHIGH) / 2;
+    
+!   for (py = 0; py<cHIGH; py++) {
+!     ProgressMeter(0, cHIGH-1, py, "Pad");
+      if ((py & 0x1f)==0) WaitCursor();
+  
+      p24y = sy + py;
+      if (p24y >= 0 && p24y < high) {
+!       for (px=0; px<cWIDE; px++) {
+       p24x = sx + px;
+       if (p24x >= 0 && p24x < wide) {
+         p24 = pic24 + (p24y*wide  + p24x)*3;
+         
+         
+         if (picType == PIC24) {                       /* src is PIC24 */
+!          pp  = cpic + (py * cWIDE + px)  *3;
+           r = pp[0];  g = pp[1];  b = pp[2];
+         }
+         else {                                        /* src is PIC8 */
+!          pp  = cpic + (py*cWIDE + px);
+           r = rMap[*pp];  g = gMap[*pp];  b = bMap[*pp];
+         }
+         
diff --git a/xv-deepcolor.patch b/xv-deepcolor.patch
new file mode 100644 (file)
index 0000000..81aed78
--- /dev/null
@@ -0,0 +1,54 @@
+This fixes a byte-ordering problem when displaying 8-bit colormapped images
+on certain 12, 15, or 16-bit displays.
+
+Thanks to Mr. Ryo Shimizu for coming up with the patch, and to Yuuki Harano
+for sending it to me.
+
+--jhb
+
+*** xvimage.c.old      Fri Jan 13 19:11:36 1995
+--- xvimage.c  Fri Oct 16 12:34:11 1998
+***************
+*** 1736,1745 ****
+      if (xim->byte_order == MSBFirst) {
+        for (i=wide*high, ip=imagedata; i>0; i--,pp++) {
+       if (((i+1)&0x1ffff) == 0) WaitCursor();
+!      if (dithpic) {
+!        *ip++ = ((*pp) ? white : black) & 0xffff;
+!      }
+!      else *ip++ = xcolors[*pp] & 0xffff;
+        }
+      }
+      else {   /* LSBFirst */
+--- 1736,1747 ----
+      if (xim->byte_order == MSBFirst) {
+        for (i=wide*high, ip=imagedata; i>0; i--,pp++) {
+       if (((i+1)&0x1ffff) == 0) WaitCursor();
+! 
+!      if (dithpic) xcol = ((*pp) ? white : black) & 0xffff;
+!              else xcol = xcolors[*pp] & 0xffff;
+! 
+!      *((unsigned char *)ip)++ = (xcol>>8) & 0xff;
+!      *((unsigned char *)ip)++ = (xcol) & 0xff;
+        }
+      }
+      else {   /* LSBFirst */
+***************
+*** 1749,1756 ****
+       if (dithpic) xcol = ((*pp) ? white : black) & 0xffff;
+               else xcol = xcolors[*pp];
+  
+!      /*  WAS *ip++ = ((xcol>>8) & 0xff) | ((xcol&0xff) << 8);  */
+!      *ip++ = (unsigned short) (xcol);
+        }
+      }
+    }
+--- 1751,1758 ----
+       if (dithpic) xcol = ((*pp) ? white : black) & 0xffff;
+               else xcol = xcolors[*pp];
+  
+!      *((unsigned char *)ip)++ = (xcol) & 0xff;
+!      *((unsigned char *)ip)++ = (xcol>>8) & 0xff;
+        }
+      }
+    }
diff --git a/xv-exceed_grab_patch.txt b/xv-exceed_grab_patch.txt
new file mode 100644 (file)
index 0000000..74a23d4
--- /dev/null
@@ -0,0 +1,108 @@
+This patch fixes an inability to GRAB or display XWD files on the eXceed
+X server running in 24-bits.  It may also fix GRAB problems on other X 
+servers.  It shouldn't *break* anything, and as such, can and should be
+applied by everybody.
+
+The bits_per_item of the returned XImage is less than bits_per_pixel, which
+is wrong, as far as I can tell.  (Hard to really know, as the X11 docs aren't
+at *all* clear on the subject.)  I do know that it breaks my code, and the netpbm
+code, and god only knows what else.
+
+Maybe they're wrong, maybe I'm wrong - who knows.  In any event, this patch 
+fixes it, as far as XV is concerned.
+
+Thanks to Nadim Saeed (nadim@xlnt.com)!
+
+--jhb
+
+
+
+*** xvgrab.c.orig      Thu Oct  7 10:41:15 1999
+--- xvgrab.c   Thu Oct  7 12:03:36 1999
+***************
+*** 641,648 ****
+  
+  
+    bits_per_item = image->bitmap_unit;
+-   bits_used = bits_per_item;
+    bits_per_pixel = image->bits_per_pixel;
+  
+    if (bits_per_pixel == 32) pixmask = 0xffffffff;
+    else pixmask = (((CARD32) 1) << bits_per_pixel) - 1;
+--- 641,667 ----
+  
+  
+    bits_per_item = image->bitmap_unit;
+    bits_per_pixel = image->bits_per_pixel;
++ 
++ 
++   /* add code for freako 'exceed' server, where bitmapunit = 8
++      and bitsperpix = 32 (and depth=24)... */
++ 
++   if (bits_per_item < bits_per_pixel) {
++     bits_per_item = bits_per_pixel;
++   
++     /* round bits_per_item up to next legal value, if necc */
++     if      (bits_per_item <  8) bits_per_item = 8;
++     else if (bits_per_item < 16) bits_per_item = 16;
++     else                         bits_per_item = 32;
++   }
++ 
++ 
++   /* which raises the question:  how (can?) you ever have a 24 bits per pix,
++      (ie, 3 bytes, no alpha/padding) */
++ 
++ 
++   bits_used = bits_per_item;  /* so it will get a new item first time */
+  
+    if (bits_per_pixel == 32) pixmask = 0xffffffff;
+    else pixmask = (((CARD32) 1) << bits_per_pixel) - 1;
+
+
+
+*** xvxwd.c.orig       Thu Oct  7 12:13:09 1999
+--- xvxwd.c    Thu Oct  7 12:13:13 1999
+***************
+*** 396,406 ****
+      h11P->pixmap_width;
+    
+    bits_per_item  = h11P->bitmap_unit;
+-   bits_used      = bits_per_item;
+    bits_per_pixel = h11P->bits_per_pixel;
+    byte_order     = h11P->byte_order;
+    bit_order      = h11P->bitmap_bit_order;
+    
+    if (bits_per_pixel == sizeof(pixel_mask) * 8)  pixel_mask = (CARD32) -1;
+    else pixel_mask = (1 << bits_per_pixel) - 1;
+    
+--- 396,425 ----
+      h11P->pixmap_width;
+    
+    bits_per_item  = h11P->bitmap_unit;
+    bits_per_pixel = h11P->bits_per_pixel;
+    byte_order     = h11P->byte_order;
+    bit_order      = h11P->bitmap_bit_order;
+    
++  
++   /* add sanity-code for freako 'exceed' server, where bitmapunit = 8
++      and bitsperpix = 32 (and depth=24)... */
++  
++   if (bits_per_item < bits_per_pixel) {
++     bits_per_item = bits_per_pixel;
++    
++     /* round bits_per_item up to next legal value, if necc */
++     if      (bits_per_item <  8) bits_per_item = 8;
++     else if (bits_per_item < 16) bits_per_item = 16;
++     else                         bits_per_item = 32;
++   }
++  
++  
++   /* which raises the question:  how (can?) you ever have a 24 bits per pix,
++      (ie, 3 bytes, no alpha/padding) */
++  
++  
++   bits_used      = bits_per_item;
++ 
+    if (bits_per_pixel == sizeof(pixel_mask) * 8)  pixel_mask = (CARD32) -1;
+    else pixel_mask = (1 << bits_per_pixel) - 1;
+    
diff --git a/xv-gifpatch b/xv-gifpatch
new file mode 100644 (file)
index 0000000..dd30a8a
--- /dev/null
@@ -0,0 +1,49 @@
+This patch fixes a bug in XVs gif-reading code.  The bug could conceivably
+hit when viewing a number of interlaced GIFs.  Thanks to Mark Hanson 
+<mbh@netcom.com> for spotting this one.  
+
+--jhb, 10/29/98
+
+
+*** xvgif.c.old        Tue Jan 10 14:54:41 1995
+--- xvgif.c    Thu Oct 29 17:43:30 1998
+***************
+*** 113,119 ****
+    int            aspect, gotimage;
+  
+    /* initialize variables */
+!   BitOffset = XC = YC = Pass = OutCount = gotimage = 0;
+    RawGIF = Raster = pic8 = NULL;
+    gif89 = 0;
+  
+--- 113,120 ----
+    int            aspect, gotimage;
+  
+    /* initialize variables */
+!   BitOffset = XC = YC = OutCount = gotimage = 0;
+!   Pass = -1;
+    RawGIF = Raster = pic8 = NULL;
+    gif89 = 0;
+  
+***************
+*** 692,698 ****
+  {
+    static byte *ptr = NULL;
+    static int   oldYC = -1;
+!   
+    if (oldYC != YC) {  ptr = pic8 + YC * Width;  oldYC = YC; }
+    
+    if (YC<Height)
+--- 693,704 ----
+  {
+    static byte *ptr = NULL;
+    static int   oldYC = -1;
+! 
+!   if (Pass == -1) {  /* first time through - init stuff */
+!     oldYC = -1;
+!     Pass = 0;
+!   }
+! 
+    if (oldYC != YC) {  ptr = pic8 + YC * Width;  oldYC = YC; }
+    
+    if (YC<Height)
diff --git a/xv-grabpatch b/xv-grabpatch
new file mode 100644 (file)
index 0000000..b64bcb6
--- /dev/null
@@ -0,0 +1,40 @@
+This patch fixes problems with the Grab function going out to lunch and/or 
+getting all weird-ass on some X servers.
+
+*** ../xv-3.10a/xvgrab.c       Thu Dec 22 17:34:47 1994
+--- xvgrab.c   Fri Apr 28 02:09:22 1995
+***************
+*** 341,356 ****
+        ConfigureNotify on mainW */
+  
+        state = 0;
+!       while (1) {
+       XEvent event;
+       XNextEvent(theDisp, &event);
+       HandleEvent(&event, &i);
+  
+!      if (state==0 && event.type == MapNotify &&
+!          event.xmap.window == mainW) state = 1;
+  
+!      if (state==1 && event.type == ConfigureNotify && 
+!          event.xconfigure.window == mainW) break;
+        }
+  
+        if (DEBUG) fprintf(stderr,"==after remapping mainW, GOT Config.\n");
+--- 317,332 ----
+        ConfigureNotify on mainW */
+  
+        state = 0;
+!       while (state != 3) {
+       XEvent event;
+       XNextEvent(theDisp, &event);
+       HandleEvent(&event, &i);
+  
+!      if (!(state&1) && event.type == MapNotify &&
+!          event.xmap.window == mainW) state |= 1;
+  
+!      if (!(state&2) && event.type == ConfigureNotify && 
+!          event.xconfigure.window == mainW) state |= 2;
+        }
+  
+        if (DEBUG) fprintf(stderr,"==after remapping mainW, GOT Config.\n");
diff --git a/xv-longname.patch b/xv-longname.patch
new file mode 100644 (file)
index 0000000..e7d558b
--- /dev/null
@@ -0,0 +1,81 @@
+From: Michael Rausch <M.Rausch@Ernie.MI.Uni-Koeln.DE>
+Subject: bug in xv visual schnauzer
+
+while using xv's visual schnauzer, I ran across some problems with rather
+long file names. Namely these were (spurious) segmentation faults when
+generation icons or selecting icons with the rubber-band.
+The problem turned out to be a strncpy() without appending a terminating
+null byte in case the limiting length was reached. Appended to this mail
+you'll find a set of context diffs where this specific and other possible
+occurances of the same bug are fixed.
+I think it will be not too hard to integrate the patches into your actual
+working version if patch should fail on them. Speaking of which, when do
+you think we can expect a new (bigger, better, etc.) version of xv?
+
+Ciao
+       Michael
+
+---*snip*---*snip*---*snip*--
+
+diff -ru /tmp/xv-3.10a.orig/xvbrowse.c xv-3.10a/xvbrowse.c
+--- /tmp/xv-3.10a.orig/xvbrowse.c      Thu Jan 19 18:49:17 1995
++++ xv-3.10a/xvbrowse.c        Mon Feb  5 23:46:28 1996
+@@ -956,6 +956,7 @@
+      char *str;
+ {
+   strncpy(br->dispstr, str, (size_t) 256);
++  br->dispstr[255] = '\0';
+   drawBrowStr(br);
+   XFlush(theDisp);
+ }
+@@ -1490,6 +1491,7 @@
+   if (StringWidth(str) > ISPACE_WIDE-6) {
+     int dotpos; 
+     strncpy(tmpstr, str, (size_t) 56);
++    tmpstr[56] = '\0'; /* MR: otherwise it dies on long file names */
+     dotpos = strlen(tmpstr);
+     strcat(tmpstr,"...");
+@@ -1505,7 +1507,7 @@
+     nstr = tmpstr;
+   }
+   else nstr = str;
+-  
++ 
+   /* draw the title */
+   sw = StringWidth(nstr);
+diff -ru /tmp/xv-3.10a.orig/xvdir.c xv-3.10a/xvdir.c
+--- /tmp/xv-3.10a.orig/xvdir.c Tue Jan  3 22:21:39 1995
++++ xv-3.10a/xvdir.c   Mon Feb  5 21:49:21 1996
+@@ -1200,6 +1200,7 @@
+      char *st;
+ {
+   strncpy(deffname, st, (size_t) MAXFNLEN-1);
++  deffname[MAXFNLEN-1] = '\0';
+   setFName(st);
+ }
+diff -ru /tmp/xv-3.10a.orig/xvpopup.c xv-3.10a/xvpopup.c
+--- /tmp/xv-3.10a.orig/xvpopup.c       Thu Jan 19 19:09:31 1995
++++ xv-3.10a/xvpopup.c Mon Feb  5 21:50:13 1996
+@@ -560,6 +560,7 @@
+       nams[*lenp] = (char *) malloc((size_t) 32);
+       if (!nams[*lenp]) { free(vals[*lenp]); continue; }
+       strncpy(nams[*lenp], vals[*lenp], (size_t) 31);
++      nams[*lenp][31] = '\0';
+       }
+       
+       if (strlen(nams[*lenp]) > (size_t) 20) {   /* fix long names */
+diff -ru /tmp/xv-3.10a.orig/xvtext.c xv-3.10a/xvtext.c
+--- /tmp/xv-3.10a.orig/xvtext.c        Sat Jan 14 00:46:28 1995
++++ xv-3.10a/xvtext.c  Mon Feb  5 21:50:54 1996
+@@ -293,6 +293,7 @@
+   tv->textlen     = len;
+   tv->freeonclose = freeonclose;
+   strncpy(tv->title, title, (size_t) TITLELEN-1);
++  tv->title[TITLELEN-1] = '\0';
+   computeText(tv);      /* compute # lines and linestarts array */
+
+---*snap*---*snap*---*snap*--
diff --git a/xv-mp-tiff-patch b/xv-mp-tiff-patch
new file mode 100644 (file)
index 0000000..cb0e298
--- /dev/null
@@ -0,0 +1,570 @@
+This patch adds multi-page TIFF support to XV 3.10a
+
+
+diff -r -c ../xv-3.10a/xv.c ./xv.c
+*** ../xv-3.10a/xv.c   Thu Jan 19 13:08:43 1995
+--- ./xv.c     Mon Apr 14 18:21:48 1997
+***************
+*** 2668,2674 ****
+  #endif
+  
+  #ifdef HAVE_TIFF
+!   case RFT_TIFF:    rv = LoadTIFF  (fname, pinfo);           break;
+  #endif
+  
+  #ifdef HAVE_PDS
+--- 2668,2674 ----
+  #endif
+  
+  #ifdef HAVE_TIFF
+!   case RFT_TIFF:    rv = LoadTIFF  (fname, pinfo, quick);    break;
+  #endif
+  
+  #ifdef HAVE_PDS
+
+
+*** ../xv-3.10a/xv.h   Mon Jan 23 15:22:23 1995
+--- ./xv.h     Mon Apr 14 18:22:52 1997
+***************
+*** 1248,1253 ****
+--- 1248,1254 ----
+  void xv_getwd               PARM((char *, size_t));
+  char *xv_strstr             PARM((char *, char *));
+  FILE *xv_fopen              PARM((char *, char *));
++ void xv_mktemp              PARM((char *, char *));
+  void Timer                  PARM((int));
+  
+  /*************************** XVCOLOR.C ***************************/
+***************
+*** 1607,1613 ****
+  void JPEGSaveParams        PARM((char *, int));
+  
+  /**************************** XVTIFF.C ***************************/
+! int   LoadTIFF             PARM((char *, PICINFO *));
+  void  CreateTIFFW          PARM((void));
+  void  TIFFDialog           PARM((int));
+  int   TIFFCheckEvent       PARM((XEvent *));
+--- 1608,1614 ----
+  void JPEGSaveParams        PARM((char *, int));
+  
+  /**************************** XVTIFF.C ***************************/
+! int   LoadTIFF             PARM((char *, PICINFO *, int));
+  void  CreateTIFFW          PARM((void));
+  void  TIFFDialog           PARM((int));
+  int   TIFFCheckEvent       PARM((XEvent *));
+
+
+*** ../xv-3.10a/xvmisc.c       Fri Jan 13 18:41:34 1995
+--- ./xvmisc.c Mon Apr 14 18:21:48 1997
+***************
+*** 28,33 ****
+--- 28,35 ----
+   *     int    xvbcmp (s1,  s2,  length)
+   *     void   xvbzero(s, length)
+   *     char  *xv_strstr(s1, s2)
++  *     FILE  *xv_fopen(str, str)
++  *     void   xv_mktemp(str)
+   *     void   Timer(milliseconds)
+   */
+  
+***************
+*** 1066,1071 ****
+--- 1068,1083 ----
+  }
+  
+  
++ /***************************************************/
++ void xv_mktemp(buf, fname)
++      char *buf, *fname;
++ {
++ #ifndef VMS
++   sprintf(buf, "%s/%s", tmpdir, fname);
++ #else
++   sprintf(buf, "Sys$Disk:[]%s", fname);
++ #endif
++ }
+  
+  
+  /*******/
+
+
+*** ../xv-3.10a/xvtiff.c       Fri Jan 13 14:53:34 1995
+--- ./xvtiff.c Mon Apr 14 18:21:48 1997
+***************
+*** 1,7 ****
+  /*
+   * xvtiff.c - load routine for 'TIFF' format pictures
+   *
+!  * LoadTIFF(fname, numcols)  -  load a TIFF file
+   */
+  
+  #ifndef va_start
+--- 1,7 ----
+  /*
+   * xvtiff.c - load routine for 'TIFF' format pictures
+   *
+!  * LoadTIFF(fname, numcols, quick)  -  load a TIFF file
+   */
+  
+  #ifndef va_start
+***************
+*** 15,20 ****
+--- 15,49 ----
+  #include "tiffio.h"     /* has to be after xv.h, as it needs varargs/stdarg */
+  
+  
++ /* Portions fall under the following copyright:
++  *
++  * Copyright (c) 1992, 1993, 1994 Sam Leffler
++  * Copyright (c) 1992, 1993, 1994 Silicon Graphics, Inc.
++  *
++  * Permission to use, copy, modify, distribute, and sell this software and 
++  * its documentation for any purpose is hereby granted without fee, provided
++  * that (i) the above copyright notices and this permission notice appear in
++  * all copies of the software and related documentation, and (ii) the names of
++  * Sam Leffler and Silicon Graphics may not be used in any advertising or
++  * publicity relating to the software without the specific, prior written
++  * permission of Sam Leffler and Silicon Graphics.
++  * 
++  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
++  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
++  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
++  * 
++  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
++  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
++  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
++  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
++  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
++  * OF THIS SOFTWARE.
++  */
++ 
++ 
++ static int   copyTiff    PARM((TIFF *, char *));
++ static int   cpStrips    PARM((TIFF *, TIFF *));
++ static int   cpTiles     PARM((TIFF *, TIFF *));
+  static byte *loadPalette PARM((TIFF *, uint32, uint32, int, int, PICINFO *));
+  static byte *loadColor   PARM((TIFF *, uint32, uint32, int, int, PICINFO *));
+  static int   loadImage   PARM((TIFF *, uint32, uint32, byte *, int));
+***************
+*** 28,46 ****
+  static int   error_occurred;
+  
+  /*******************************************/
+! int LoadTIFF(fname, pinfo)
+!      char *fname;
+       PICINFO *pinfo;
+  /*******************************************/
+  {
+    /* returns '1' on success, '0' on failure */
+  
+    TIFF  *tif;
+    uint32 w, h;
+    short       bps, spp, photo, orient;
+    FILE  *fp;
+    byte  *pic8;
+    char  *desc, oldpath[MAXPATHLEN+1], tmppath[MAXPATHLEN+1], *sp;
+  
+    error_occurred = 0;
+  
+--- 57,79 ----
+  static int   error_occurred;
+  
+  /*******************************************/
+! int LoadTIFF(fname, pinfo, quick)
+!      char    *fname;
+       PICINFO *pinfo;
++      int      quick;
+  /*******************************************/
+  {
+    /* returns '1' on success, '0' on failure */
+  
+    TIFF  *tif;
+    uint32 w, h;
++   float  xres, yres;
+    short       bps, spp, photo, orient;
+    FILE  *fp;
+    byte  *pic8;
+    char  *desc, oldpath[MAXPATHLEN+1], tmppath[MAXPATHLEN+1], *sp;
++   char   tmp[256], tmpname[256];
++   int    i, nump;
+  
+    error_occurred = 0;
+  
+***************
+*** 60,65 ****
+--- 93,100 ----
+    filesize = ftell(fp);
+    fclose(fp);
+  
++ 
++ 
+    rmap = pinfo->r;  gmap = pinfo->g;  bmap = pinfo->b;
+  
+    /* a kludge:  temporarily cd to the directory that the file is in (if
+***************
+*** 81,89 ****
+      }
+    }
+        
+      
+  
+!   tif=TIFFOpen(filename,"r");
+    if (!tif) return 0;
+  
+    /* flip orientation so that image comes in X order */
+--- 116,172 ----
+      }
+    }
+        
++ 
++   nump = 1;
++ 
++   if (!quick) {
++     /* see if there's more than 1 image in tiff file, to determine if we 
++        should do multi-page thing... */
++     
++     tif = TIFFOpen(filename,"r");
++     if (!tif) return 0;
++     while (TIFFReadDirectory(tif)) nump++;
++     TIFFClose(tif);
++     if (DEBUG) 
++       fprintf(stderr,"LoadTIFF: %d page%s found\n", nump, nump==1 ? "" : "s");
++     
++     
++     /* if there are multiple images, copy them out to multiple tmp files,
++        and load the first one... */
++ 
++     xv_mktemp(tmpname, "xvpgXXXXXX");
++ 
++     if (tmpname[0] == '\0') {   /* mktemp() blew up */
++       sprintf(str,"LoadTIFF: Unable to create temporary filename???");
++       ErrPopUp(str, "\nHow unlikely!");
++       return 0;
++     }
+      
++     if (nump>1) {
++       TIFF *in, *out;
++       
++       in = TIFFOpen(filename, "r");
++       if (!in) return 0;
++       for (i=1; i<=nump; i++) {
++      sprintf(tmp, "%s%d", tmpname, i);
++      if (!copyTiff(in, tmp)) {
++        SetISTR(ISTR_WARNING, "LoadTIFF:  Error writing page files!");
++        break;
++      }
++      
++      if (!TIFFReadDirectory(in)) break;
++       }
++       if (DEBUG)
++      fprintf(stderr,"LoadTIFF: %d page%s written\n", 
++              i-1, (i-1)==1 ? "" : "s");
++       
++       sprintf(tmp, "%s%d", tmpname, 1);           /* open page #1 */
++       filename = tmp;
++     }
++   }  /* if (!quick) ... */
+  
+! 
+!   tif = TIFFOpen(filename,"r");
+    if (!tif) return 0;
+  
+    /* flip orientation so that image comes in X order */
+***************
+*** 107,112 ****
+--- 190,200 ----
+    TIFFGetFieldDefaulted(tif, TIFFTAG_BITSPERSAMPLE, &bps);
+    TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &photo);
+    TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, &spp);
++   if ((TIFFGetField(tif, TIFFTAG_XRESOLUTION, &xres) == 1) &&
++       (TIFFGetField(tif, TIFFTAG_YRESOLUTION, &yres) == 1)) {
++     normaspect = yres / xres;
++     if (DEBUG) fprintf(stderr,"TIFF aspect = %f\n", normaspect);
++   }
+  
+    if (spp == 1) {
+        pic8 = loadPalette(tif, w, h, photo, bps, pinfo);
+***************
+*** 139,144 ****
+--- 227,234 ----
+      if (pic8) free(pic8);
+      if (pinfo->comment) free(pinfo->comment);
+      pinfo->comment = (char *) NULL;
++     if (!quick && nump>1) KillPageFiles(tmpname, nump);
++     SetCursors(-1);
+      return 0;
+    }
+  
+***************
+*** 148,164 ****
+--- 238,404 ----
+    pinfo->normw = pinfo->w;   pinfo->normh = pinfo->h;
+    pinfo->frmType = F_TIFF;
+  
++   if (nump>1) strcpy(pinfo->pagebname, tmpname);
++   pinfo->numpages = nump;
+  
+    if (pinfo->pic) return 1;
+  
++ 
+    /* failed.  if we malloc'd a comment, free it */
+    if (pinfo->comment) free(pinfo->comment);
+    pinfo->comment = (char *) NULL;
+  
++   if (!quick && nump>1) KillPageFiles(tmpname, nump);
++   SetCursors(-1);
++ 
+    return 0;
+  }  
+  
+  
++ 
++ 
++ /*******************************************/
++ 
++ #define CopyField(tag, v) \
++   if (TIFFGetField(in, tag, &v))            TIFFSetField(out, tag, v)
++ #define CopyField2(tag, v1, v2) \
++   if (TIFFGetField(in, tag, &v1, &v2))      TIFFSetField(out, tag, v1, v2)
++ #define CopyField3(tag, v1, v2, v3) \
++   if (TIFFGetField(in, tag, &v1, &v2, &v3)) TIFFSetField(out, tag, v1, v2, v3)
++ 
++ 
++ /*******************************************/
++ static int copyTiff(in, fname)
++      TIFF *in;
++      char *fname;
++ {
++   /* copies tiff image to given filename.  Returns 0 on error */
++ 
++   TIFF   *out;
++   short   bitspersample, samplesperpixel, shortv, *shortav;
++   uint32  w, l;
++   float   floatv;
++   char   *stringv;
++   uint32  longv;
++   uint16 *red, *green, *blue, shortv2;
++   int     rv;
++   
++   out = TIFFOpen(fname, "w");
++   if (!out) return 0;
++   
++   CopyField (TIFFTAG_SUBFILETYPE,     longv);
++   CopyField (TIFFTAG_TILEWIDTH,       w);
++   CopyField (TIFFTAG_TILELENGTH,      l);
++   CopyField (TIFFTAG_IMAGEWIDTH,      w);
++   CopyField (TIFFTAG_IMAGELENGTH,     l);
++   CopyField (TIFFTAG_BITSPERSAMPLE,   bitspersample);
++   CopyField (TIFFTAG_COMPRESSION,     shortv);
++   CopyField (TIFFTAG_PREDICTOR,       shortv);
++   CopyField (TIFFTAG_PHOTOMETRIC,     shortv);
++   CopyField (TIFFTAG_THRESHHOLDING,   shortv);
++   CopyField (TIFFTAG_FILLORDER,       shortv);
++   CopyField (TIFFTAG_ORIENTATION,     shortv);
++   CopyField (TIFFTAG_SAMPLESPERPIXEL, samplesperpixel);
++   CopyField (TIFFTAG_MINSAMPLEVALUE,  shortv);
++   CopyField (TIFFTAG_MAXSAMPLEVALUE,  shortv);
++   CopyField (TIFFTAG_XRESOLUTION,     floatv);
++   CopyField (TIFFTAG_YRESOLUTION,     floatv);
++   CopyField (TIFFTAG_GROUP3OPTIONS,   longv);
++   CopyField (TIFFTAG_GROUP4OPTIONS,   longv);
++   CopyField (TIFFTAG_RESOLUTIONUNIT,  shortv);
++   CopyField (TIFFTAG_PLANARCONFIG,    shortv);
++   CopyField (TIFFTAG_ROWSPERSTRIP,    longv);
++   CopyField (TIFFTAG_XPOSITION,       floatv);
++   CopyField (TIFFTAG_YPOSITION,       floatv);
++   CopyField (TIFFTAG_IMAGEDEPTH,      longv);
++   CopyField (TIFFTAG_TILEDEPTH,       longv);
++   CopyField2(TIFFTAG_EXTRASAMPLES,    shortv, shortav);
++   CopyField3(TIFFTAG_COLORMAP,        red, green, blue);
++   CopyField2(TIFFTAG_PAGENUMBER,      shortv, shortv2);
++   CopyField (TIFFTAG_ARTIST,          stringv);
++   CopyField (TIFFTAG_IMAGEDESCRIPTION,stringv);
++   CopyField (TIFFTAG_MAKE,            stringv);
++   CopyField (TIFFTAG_MODEL,           stringv);
++   CopyField (TIFFTAG_SOFTWARE,        stringv);
++   CopyField (TIFFTAG_DATETIME,        stringv);
++   CopyField (TIFFTAG_HOSTCOMPUTER,    stringv);
++   CopyField (TIFFTAG_PAGENAME,        stringv);
++   CopyField (TIFFTAG_DOCUMENTNAME,    stringv);
++ 
++   if (TIFFIsTiled(in)) rv = cpTiles (in, out);
++                   else rv = cpStrips(in, out);
++ 
++   TIFFClose(out);
++   return rv;
++ }
++ 
++ 
++ /*******************************************/
++ static int cpStrips(in, out)
++      TIFF *in, *out;
++ {
++   tsize_t bufsize;
++   byte *buf;
++ 
++   bufsize = TIFFStripSize(in);  
++   buf = (byte *) malloc((size_t) bufsize);
++   if (buf) {
++     tstrip_t s, ns = TIFFNumberOfStrips(in);
++     uint32 *bytecounts;
++     
++     TIFFGetField(in, TIFFTAG_STRIPBYTECOUNTS, &bytecounts);
++     for (s = 0; s < ns; s++) {
++       if (bytecounts[s] > bufsize) {
++      buf = (unsigned char *) realloc(buf, (size_t) bytecounts[s]);
++      if (!buf) return (0);
++      bufsize = bytecounts[s];
++       }
++       if (TIFFReadRawStrip (in,  s, buf, (tsize_t) bytecounts[s]) < 0 ||
++        TIFFWriteRawStrip(out, s, buf, (tsize_t) bytecounts[s]) < 0) {
++      free(buf);
++      return 0;
++       }
++     }
++     free(buf);
++     return 1;
++   }
++   return 0;
++ }
++ 
++ 
++ /*******************************/
++ static int cpTiles(in, out)
++      TIFF *in, *out;
++ {
++   tsize_t bufsize;
++   byte   *buf;
++ 
++   bufsize = TIFFTileSize(in);  
++   buf = (unsigned char *) malloc((size_t) bufsize);
++   if (buf) {
++     ttile_t t, nt = TIFFNumberOfTiles(in);
++     uint32 *bytecounts;
++     
++     TIFFGetField(in, TIFFTAG_TILEBYTECOUNTS, &bytecounts);
++     for (t = 0; t < nt; t++) {
++       if (bytecounts[t] > bufsize) {
++      buf = (unsigned char *)realloc(buf, (size_t) bytecounts[t]);
++      if (!buf) return (0);
++      bufsize = bytecounts[t];
++       }
++       if (TIFFReadRawTile (in,  t, buf, (tsize_t) bytecounts[t]) < 0 ||
++        TIFFWriteRawTile(out, t, buf, (tsize_t) bytecounts[t]) < 0) {
++      free(buf);
++      return 0;
++       }
++     }
++     free(buf);
++     return 1;
++   }
++   return 0;
++ }
++ 
++ 
+  /*******************************************/
+  static byte *loadPalette(tif, w, h, photo, bps, pinfo)
+       TIFF *tif;
+***************
+*** 186,192 ****
+      break;
+    }
+  
+!   sprintf(pinfo->shrtInfo, "%ux%u TIFF.",w,h);
+  
+    pic8 = (byte *) malloc((size_t) w*h);
+    if (!pic8) FatalError("loadPalette() - couldn't malloc 'pic8'");
+--- 426,432 ----
+      break;
+    }
+  
+!   sprintf(pinfo->shrtInfo, "%ux%u TIFF.",(u_int) w, (u_int) h);
+  
+    pic8 = (byte *) malloc((size_t) w*h);
+    if (!pic8) FatalError("loadPalette() - couldn't malloc 'pic8'");
+***************
+*** 214,220 ****
+          "???"),
+         filesize);
+  
+!   sprintf(pinfo->shrtInfo, "%ux%u TIFF.",w,h);
+  
+    /* allocate 24-bit image */
+    pic24 = (byte *) malloc((size_t) w*h*3);
+--- 454,460 ----
+          "???"),
+         filesize);
+  
+!   sprintf(pinfo->shrtInfo, "%ux%u TIFF.",(u_int) w, (u_int) h);
+  
+    /* allocate 24-bit image */
+    pic24 = (byte *) malloc((size_t) w*h*3);
+***************
+*** 1014,1020 ****
+  #define      CASE4(x,op)     switch (x) { case 3: op; case 2: op; case 1: op; }
+  
+  #define      UNROLL8(w, op1, op2) {          \
+!      uint32 x;                       \
+       for (x = w; x >= 8; x -= 8) {   \
+               op1;                    \
+               REPEAT8(op2);           \
+--- 1254,1260 ----
+  #define      CASE4(x,op)     switch (x) { case 3: op; case 2: op; case 1: op; }
+  
+  #define      UNROLL8(w, op1, op2) {          \
+!      uint32 x;                       \
+       for (x = w; x >= 8; x -= 8) {   \
+               op1;                    \
+               REPEAT8(op2);           \
+***************
+*** 1026,1032 ****
+  }
+  
+  #define      UNROLL4(w, op1, op2) {          \
+!      register uint32 x;              \
+       for (x = w; x >= 4; x -= 4) {   \
+               op1;                    \
+               REPEAT4(op2);           \
+--- 1266,1272 ----
+  }
+  
+  #define      UNROLL4(w, op1, op2) {          \
+!      uint32 x;                       \
+       for (x = w; x >= 4; x -= 4) {   \
+               op1;                    \
+               REPEAT4(op2);           \
+***************
+*** 1038,1044 ****
+  }
+  
+  #define      UNROLL2(w, op1, op2) {          \
+!      register uint32 x;              \
+       for (x = w; x >= 2; x -= 2) {   \
+               op1;                    \
+               REPEAT2(op2);           \
+--- 1278,1284 ----
+  }
+  
+  #define      UNROLL2(w, op1, op2) {          \
+!      uint32 x;                       \
+       for (x = w; x >= 2; x -= 2) {   \
+               op1;                    \
+               REPEAT2(op2);           \
+***************
+*** 1381,1387 ****
+    }
+  }
+  
+! #define Code2V(c, RB, RW, CR)  ((((c)-(int)RB)*(float)CR)/(float)(RW-RB))
+  
+  #define      CLAMP(f,min,max) \
+      (int)((f)+.5 < (min) ? (min) : (f)+.5 > (max) ? (max) : (f)+.5)
+--- 1621,1627 ----
+    }
+  }
+  
+! #define Code2V(c, RB, RW, CR)  (((((int)c)-(int)RB)*(float)CR)/(float)(RW-RB))
+  
+  #define      CLAMP(f,min,max) \
+      (int)((f)+.5 < (min) ? (min) : (f)+.5 > (max) ? (max) : (f)+.5)
+
diff --git a/xv-pdf.patch b/xv-pdf.patch
new file mode 100644 (file)
index 0000000..e97b9ff
--- /dev/null
@@ -0,0 +1,24 @@
+If you have one of the newer versions of GhostScript which can read PDF 
+files, then there's no reason you can't read PDF files in XV, either.  
+
+All you need is this simple patch to detect PDF files as being
+'PostScript-y'.
+
+--jhb, 4/1/98
+
+
+*** xv.c.orig  Wed Apr  1 01:30:58 1998
+--- xv.c       Wed Apr  1 01:31:52 1998
+***************
+*** 2625,2630 ****
+--- 2625,2634 ----
+          strncmp((char *) magicno, "\004%!", (size_t) 3)==0)   rv = RFT_PS;
+  #endif
+  
++ #ifdef GS_PATH
++   else if (strncmp((char *) magicno, "%PDF",   (size_t) 4)==0)   rv = RFT_PS;
++ #endif
++ 
+    return rv;
+  }
+  
diff --git a/xv-png-fix2.patch b/xv-png-fix2.patch
new file mode 100644 (file)
index 0000000..30b74ff
--- /dev/null
@@ -0,0 +1,218 @@
+This patch to Andreas Dilger's XV PNG patch 1.2d addresses the following
+bugs, buglets and typos:
+
+ - fixes a core-dump triggered by an unfortunate "feature" in libpng 0.97
+   and later (i.e., libpng frees text buffers it didn't allocate)
+
+ - forces text comments inherited from GIF or elsewhere to be in proper
+   PNG format (i.e., Unix-style "LF" line-endings); inherited PNG comments
+   are still assumed to be in proper format
+
+ - corrects argument types for png_xv_error() and png_xv_warning() to
+   match what png_create_write_struct() and png_create_read_struct()
+   expect
+
+ - changes default ">>" increment on compression dial from 2 to 3 so that
+   maximum compression (level 9) is one click away from default (level 6)
+
+ - fixes some comment typos and removes overlooked debug code
+
+This code has been tested with various versions of libpng, most recently
+version 1.0.1c4 (precursor to 1.0.2), with no apparent problems.
+
+Greg Roelofs, newt@pobox.com
+10 May 1998
+
+
+
+*** xvpng.c.stock      Thu Jun 13 16:42:11 1996
+--- xvpng.c    Sun May 10 13:02:07 1998
+***************
+*** 49,54 ****
+--- 49,57 ----
+  
+  #define BUTTH    24
+  
++ #define LF       10   /* a.k.a. '\n' on ASCII machines */
++ #define CR       13   /* a.k.a. '\r' on ASCII machines */
++ 
+  /*** local functions ***/
+  static    void drawPD         PARM((int, int, int, int));
+  static    void clickPD        PARM((int, int));
+***************
+*** 57,64 ****
+  static    int  WritePNG       PARM((FILE *, byte *, int, int, int,
+                                      byte *, byte *, byte *, int));
+  
+! static    void png_xv_error   PARM((png_struct *png_ptr, char *message));
+! static    void png_xv_warning PARM((png_struct *png_ptr, char *message));
+  
+  /*** local variables ***/
+  static char *filename;
+--- 60,69 ----
+  static    int  WritePNG       PARM((FILE *, byte *, int, int, int,
+                                      byte *, byte *, byte *, int));
+  
+! static    void png_xv_error   PARM((png_structp png_ptr,
+!                                     png_const_charp message));
+! static    void png_xv_warning PARM((png_structp png_ptr,
+!                                     png_const_charp message));
+  
+  /*** local variables ***/
+  static char *filename;
+***************
+*** 87,93 ****
+    XSelectInput(theDisp, pngW, ExposureMask | ButtonPressMask | KeyPressMask);
+  
+    DCreate(&cDial, pngW,  12, 25, DWIDE, DHIGH, (double)Z_NO_COMPRESSION,
+!           (double)Z_BEST_COMPRESSION, COMPRESSION, 1.0, 2.0,
+            infofg, infobg, hicol, locol, "Compression", NULL);
+  
+    DCreate(&gDial, pngW, DWIDE+27, 25, DWIDE, DHIGH, 1.0, 3.5,DISPLAY_GAMMA,0.01,0.2,
+--- 92,98 ----
+    XSelectInput(theDisp, pngW, ExposureMask | ButtonPressMask | KeyPressMask);
+  
+    DCreate(&cDial, pngW,  12, 25, DWIDE, DHIGH, (double)Z_NO_COMPRESSION,
+!           (double)Z_BEST_COMPRESSION, COMPRESSION, 1.0, 3.0,
+            infofg, infobg, hicol, locol, "Compression", NULL);
+  
+    DCreate(&gDial, pngW, DWIDE+27, 25, DWIDE, DHIGH, 1.0, 3.5,DISPLAY_GAMMA,0.01,0.2,
+***************
+*** 594,607 ****
+      int j;
+      p = pic;
+      for(j = 0; j < h; j++) {
+-   fflush(stdout);
+        if(info_ptr->color_type == PNG_COLOR_TYPE_GRAY) {
+          int k;
+          for(k = 0; k < w; k++)
+            png_line[k] = ptype==PIC24 ? MONO(p[k*3], p[k*3+1], p[k*3+2]) :
+                                         remap[p[k]];
+          png_write_row(png_ptr, png_line);
+!       } else  /* rbg or palette */
+          png_write_row(png_ptr, p);
+        if((j & 0x1f) == 0) WaitCursor();
+        p += linesize;
+--- 606,618 ----
+      int j;
+      p = pic;
+      for(j = 0; j < h; j++) {
+        if(info_ptr->color_type == PNG_COLOR_TYPE_GRAY) {
+          int k;
+          for(k = 0; k < w; k++)
+            png_line[k] = ptype==PIC24 ? MONO(p[k*3], p[k*3+1], p[k*3+2]) :
+                                         remap[p[k]];
+          png_write_row(png_ptr, png_line);
+!       } else  /* RGB or palette */
+          png_write_row(png_ptr, p);
+        if((j & 0x1f) == 0) WaitCursor();
+        p += linesize;
+***************
+*** 690,700 ****
+              tp++;
+            }
+          }
+!         /* It is just a generic comment */
+          else {
+            tp->key = "Comment";
+            tp->text = key;
+!           tp->text_length = strlen(tp->text);
+            tp->compression = tp->text_length > 750 ? 0 : -1;
+            info_ptr->num_text++;
+            key = NULL;
+--- 701,725 ----
+              tp++;
+            }
+          }
+!         /* Just a generic comment:  make sure line-endings are valid for PNG */
+          else {
++           char *p=key, *q=key;     /* only deleting chars, not adding any */
++ 
++           while (*p) {
++             if (*p == CR) {        /* lone CR or CR/LF:  EOL either way */
++               *q++ = LF;           /* LF is the only allowed PNG line-ending */
++               if (p[1] == LF)      /* get rid of any original LF */
++                 ++p;
++             } else if (*p == LF)   /* lone LF */
++               *q++ = LF;
++             else
++               *q++ = *p;
++             ++p;
++           }
++           *q = '\0';               /* unnecessary...but what the heck */
+            tp->key = "Comment";
+            tp->text = key;
+!           tp->text_length = q - key;
+            tp->compression = tp->text_length > 750 ? 0 : -1;
+            info_ptr->num_text++;
+            key = NULL;
+***************
+*** 712,726 ****
+    info_ptr->valid |= PNG_INFO_tIME;
+  
+    png_write_end(png_ptr, info_ptr);
+!   png_destroy_write_struct(&png_ptr, &info_ptr);
+  
+    if (text)
+    {
+      free(text);
+      if (savecmnt)
+        free(savecmnt);
+    }
+  
+    return 0;
+  }
+  
+--- 737,758 ----
+    info_ptr->valid |= PNG_INFO_tIME;
+  
+    png_write_end(png_ptr, info_ptr);
+!   fflush(fp);   /* just in case we core-dump before finishing... */
+  
+    if (text)
+    {
+      free(text);
++     /* must do this or png_destroy_write_struct() 0.97+ will free text again: */
++     info_ptr->text = (png_textp)NULL;
+      if (savecmnt)
++     {
+        free(savecmnt);
++       savecmnt = (char *)NULL;
++     }
+    }
+  
++   png_destroy_write_struct(&png_ptr, &info_ptr);
++ 
+    return 0;
+  }
+  
+***************
+*** 941,948 ****
+--- 999,1010 ----
+  /*******************************************/
+  static void
+  png_xv_error(png_ptr, message)
++ /*
+       png_struct *png_ptr;
+       char *message;
++  */
++      png_structp png_ptr;
++      png_const_charp message;
+  {
+    SetISTR(ISTR_WARNING,"%s:  libpng error: %s", fbasename, message);
+  
+***************
+*** 953,960 ****
+--- 1015,1026 ----
+  /*******************************************/
+  static void
+  png_xv_warning(png_ptr, message)
++ /*
+       png_struct *png_ptr;
+       char *message;
++  */
++      png_structp png_ptr;
++      png_const_charp message;
+  {
+    if (!png_ptr)
+      return;
diff --git a/xv-vispatch b/xv-vispatch
new file mode 100644 (file)
index 0000000..6343c8a
--- /dev/null
@@ -0,0 +1,118 @@
+This patch fixes problems with picking a good visual on certain 24-bit Sun
+systems.
+
+
+*** ../xv-3.10a/xv.c   Thu Jan 19 13:08:43 1995
+--- xv.c       Mon Mar 06 17:59:59 1995
+***************
+*** 326,363 ****
+     */
+  
+  
+- 
+    /* if we *haven't* had a non-default visual specified,
+       see if we have a TrueColor or DirectColor visual of 24 or 32 bits, 
+       and if so, use that as the default visual (prefer TrueColor) */
+  
+    if (!visualstr && !useroot) {
+      XVisualInfo *vinfo, rvinfo;
+      int          best,  numvis;
+      long         flags;
+  
+!     best = -1;
+      rvinfo.class  = TrueColor;
+      rvinfo.screen = theScreen;
+!     flags = VisualClassMask | VisualScreenMask;
+      
+      vinfo = XGetVisualInfo(theDisp, flags, &rvinfo, &numvis);
+!     if (vinfo) {     /* look for a TrueColor, 24-bit or more (pref 24) */
+!       for (i=0, best = -1; i<numvis; i++) {
+       if (vinfo[i].depth == 24) best = i;
+-      else if (vinfo[i].depth>24 && best<0) best = i;
+        }
+      }
+! 
+      if (best == -1) {   /* look for a DirectColor, 24-bit or more (pref 24) */
+        rvinfo.class = DirectColor;
+        if (vinfo) XFree((char *) vinfo);
+        vinfo = XGetVisualInfo(theDisp, flags, &rvinfo, &numvis);
+        if (vinfo) {
+!      for (i=0, best = -1; i<numvis; i++) {
+         if (vinfo[i].depth == 24) best = i;
+-        else if (vinfo[i].depth>24 && best<0) best = i;
+       }
+        }
+      }
+      
+--- 326,377 ----
+     */
+  
+  
+    /* if we *haven't* had a non-default visual specified,
+       see if we have a TrueColor or DirectColor visual of 24 or 32 bits, 
+       and if so, use that as the default visual (prefer TrueColor) */
+  
+    if (!visualstr && !useroot) {
++     VisualID     defvid;
+      XVisualInfo *vinfo, rvinfo;
+      int          best,  numvis;
+      long         flags;
+  
+!     best          = -1;
+      rvinfo.class  = TrueColor;
+      rvinfo.screen = theScreen;
+!     flags         = VisualClassMask | VisualScreenMask;
+!     defvid        = XVisualIDFromVisual(DefaultVisual(theDisp, 
+!                                                    DefaultScreen(theDisp)));
+      
+      vinfo = XGetVisualInfo(theDisp, flags, &rvinfo, &numvis);
+!     if (vinfo) {
+!       /* Check list, use 'default', first 24-bit, or first >24-bit */
+!       for (i=0; i<numvis && best==-1; i++) {   /* default? */
+!      if ((vinfo[i].visualid == defvid) && (vinfo[i].depth >= 24)) best=i;
+!       }
+!       for (i=0; i<numvis && best==-1; i++) {   /* 24-bit ? */
+       if (vinfo[i].depth == 24) best = i;
+        }
++       for (i=0; i<numvis && best==-1; i++) {   /* >24-bit ? */
++      if (vinfo[i].depth >= 24) best = i;
++       }
+      }
+!     
+      if (best == -1) {   /* look for a DirectColor, 24-bit or more (pref 24) */
+        rvinfo.class = DirectColor;
+        if (vinfo) XFree((char *) vinfo);
++       
+        vinfo = XGetVisualInfo(theDisp, flags, &rvinfo, &numvis);
+        if (vinfo) {
+!      for (i=0; i<numvis && best==-1; i++) {   /* default? */
+!        if ((vinfo[i].visualid == defvid) && (vinfo[i].depth >= 24)) best=i;
+!      }
+!      for (i=0; i<numvis && best==-1; i++) {   /* 24-bit ? */
+         if (vinfo[i].depth == 24) best = i;
+       }
++      for (i=0; i<numvis && best==-1; i++) {   /* >24-bit ? */
++        if (vinfo[i].depth >= 24) best = i;
++      }
+        }
+      }
+      
+***************
+*** 364,371 ****
+      if (best>=0 && best<numvis) useOtherVisual(vinfo, best);
+      if (vinfo) XFree((char *) vinfo);
+    }
+! 
+! 
+                          
+    if (visualstr && useroot) {
+      fprintf(stderr, "%s: %sUsing default visual.\n",
+--- 378,385 ----
+      if (best>=0 && best<numvis) useOtherVisual(vinfo, best);
+      if (vinfo) XFree((char *) vinfo);
+    }
+!   
+!   
+                          
+    if (visualstr && useroot) {
+      fprintf(stderr, "%s: %sUsing default visual.\n",
diff --git a/xv.desktop b/xv.desktop
new file mode 100644 (file)
index 0000000..54d46e2
--- /dev/null
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Name=xv
+Comment=XV Image Viewer and Conversion Util
+Comment[pl]=Przegl±darka o konwerter obrazków
+Exec=xv
+Terminal=0
+Type=Application
This page took 0.26173 seconds and 4 git commands to generate.