From d25339adda9ba6332d1a773015f6ae55598299ce Mon Sep 17 00:00:00 2001
From: Thomas Feuvrier <thomas.feuvrier@c-s.fr>
Date: Wed, 5 Jul 2006 15:44:36 +0000
Subject: [PATCH] Suppression de la CAI de la CONF

---
 Utilities/CAI/cai_dll/CMakeLists.txt          |     3 -
 Utilities/CAI/cai_dll/README                  |    71 -
 Utilities/CAI/cai_dll/cai_dll.dsp             |   299 -
 Utilities/CAI/cai_dll/cai_dll.dsw             |    29 -
 Utilities/CAI/cai_dll/cai_dll.ncb             |   Bin 295936 -> 0 bytes
 Utilities/CAI/cai_dll/cai_dll.opt             |   Bin 54784 -> 0 bytes
 Utilities/CAI/cai_dll/cai_dll.plg             |    16 -
 Utilities/CAI/cai_dll/dll/hd421md.dll         |   Bin 1151061 -> 0 bytes
 Utilities/CAI/cai_dll/dll/hm421md.dll         |   Bin 266325 -> 0 bytes
 Utilities/CAI/cai_dll/dll/szlibdll.dll        |   Bin 77824 -> 0 bytes
 Utilities/CAI/cai_dll/dll/tiff.dll            |   Bin 679994 -> 0 bytes
 Utilities/CAI/cai_dll/dll/zlib1.dll           |   Bin 70656 -> 0 bytes
 Utilities/CAI/cai_dll/inc/CMakeLists.txt      |     5 -
 Utilities/CAI/cai_dll/inc/cai_image.h         |   782 -
 Utilities/CAI/cai_dll/inc/cderror.h           |   132 -
 Utilities/CAI/cai_dll/inc/cdjpeg.h            |   179 -
 Utilities/CAI/cai_dll/inc/g3states.h          |     0
 Utilities/CAI/cai_dll/inc/inc_hdf/atom.h      |   300 -
 Utilities/CAI/cai_dll/inc/inc_hdf/bitvect.h   |   385 -
 Utilities/CAI/cai_dll/inc/inc_hdf/cdeflate.h  |   102 -
 Utilities/CAI/cai_dll/inc/inc_hdf/cnbit.h     |   111 -
 Utilities/CAI/cai_dll/inc/inc_hdf/crle.h      |   113 -
 Utilities/CAI/cai_dll/inc/inc_hdf/cskphuff.h  |   104 -
 Utilities/CAI/cai_dll/inc/inc_hdf/df.h        |   212 -
 Utilities/CAI/cai_dll/inc/inc_hdf/dfan.h      |    65 -
 Utilities/CAI/cai_dll/inc/inc_hdf/dfgr.h      |    73 -
 Utilities/CAI/cai_dll/inc/inc_hdf/dfi.h       |   220 -
 Utilities/CAI/cai_dll/inc/inc_hdf/dfrig.h     |    73 -
 Utilities/CAI/cai_dll/inc/inc_hdf/dfsd.h      |   136 -
 Utilities/CAI/cai_dll/inc/inc_hdf/dfstubs.h   |    75 -
 Utilities/CAI/cai_dll/inc/inc_hdf/dfufp2i.h   |    85 -
 Utilities/CAI/cai_dll/inc/inc_hdf/dynarray.h  |   156 -
 Utilities/CAI/cai_dll/inc/inc_hdf/hbitio.h    |    85 -
 Utilities/CAI/cai_dll/inc/inc_hdf/hchunks.h   |   294 -
 Utilities/CAI/cai_dll/inc/inc_hdf/hcomp.h     |   143 -
 Utilities/CAI/cai_dll/inc/inc_hdf/hcompi.h    |   114 -
 Utilities/CAI/cai_dll/inc/inc_hdf/hconv.h     |   272 -
 .../CAI/cai_dll/inc/inc_hdf/hdf2netcdf.h      |    56 -
 Utilities/CAI/cai_dll/inc/inc_hdf/herr.h      |   457 -
 Utilities/CAI/cai_dll/inc/inc_hdf/hfile.h     |  1015 -
 Utilities/CAI/cai_dll/inc/inc_hdf/hkit.h      |   171 -
 Utilities/CAI/cai_dll/inc/inc_hdf/hntdefs.h   |   275 -
 Utilities/CAI/cai_dll/inc/inc_hdf/hproto.h    |  4221 ---
 Utilities/CAI/cai_dll/inc/inc_hdf/linklist.h  |   210 -
 Utilities/CAI/cai_dll/inc/inc_hdf/mfan.h      |   372 -
 Utilities/CAI/cai_dll/inc/inc_hdf/mfgr.h      |   143 -
 Utilities/CAI/cai_dll/inc/inc_hdf/mstdio.h    |    89 -
 Utilities/CAI/cai_dll/inc/inc_hdf/netcdf.h    |   581 -
 Utilities/CAI/cai_dll/inc/inc_hdf/tbbt.h      |   327 -
 Utilities/CAI/cai_dll/inc/inc_hdf/vg.h        |    72 -
 .../CAI/cai_dll/inc/inc_unix2win/asm/atomic.h |   107 -
 .../CAI/cai_dll/inc/inc_unix2win/dirent.h     |   186 -
 .../CAI/cai_dll/inc/inc_unix2win/dlfcn.h      |   142 -
 Utilities/CAI/cai_dll/inc/inc_unix2win/glob.h |   173 -
 .../CAI/cai_dll/inc/inc_unix2win/sys/mman.h   |   160 -
 .../CAI/cai_dll/inc/inc_unix2win/sys/time.h   |   136 -
 .../CAI/cai_dll/inc/inc_unix2win/sys/uio.h    |   107 -
 .../CAI/cai_dll/inc/inc_unix2win/unistd.h     |   247 -
 .../inc/inc_unix2win/unixem/implicit_link.h   |   185 -
 .../inc/inc_unix2win/unixem/internal/util.h   |    97 -
 .../cai_dll/inc/inc_unix2win/unixem/unixem.h  |    98 -
 Utilities/CAI/cai_dll/inc/jchuff.h            |    34 -
 Utilities/CAI/cai_dll/inc/jconfig.h           |    50 -
 Utilities/CAI/cai_dll/inc/jdct.h              |   176 -
 Utilities/CAI/cai_dll/inc/jdhuff.h            |   202 -
 Utilities/CAI/cai_dll/inc/jerror.h            |   291 -
 Utilities/CAI/cai_dll/inc/jinclude.h          |    91 -
 Utilities/CAI/cai_dll/inc/jmemsys.h           |   183 -
 Utilities/CAI/cai_dll/inc/jmorecfg.h          |   369 -
 Utilities/CAI/cai_dll/inc/jpegint.h           |   388 -
 Utilities/CAI/cai_dll/inc/jpeglib.h           |  1096 -
 Utilities/CAI/cai_dll/inc/jversion.h          |    14 -
 Utilities/CAI/cai_dll/inc/machdep.h           |   258 -
 Utilities/CAI/cai_dll/inc/port.h              |    32 -
 Utilities/CAI/cai_dll/inc/t4.h                |   285 -
 Utilities/CAI/cai_dll/inc/tif_dir.h           |   268 -
 Utilities/CAI/cai_dll/inc/tif_fax3.h          |   522 -
 Utilities/CAI/cai_dll/inc/tif_predict.h       |    61 -
 Utilities/CAI/cai_dll/inc/tiff.h              |   440 -
 Utilities/CAI/cai_dll/inc/tiffcomp.h          |   214 -
 Utilities/CAI/cai_dll/inc/tiffconf.h          |   143 -
 Utilities/CAI/cai_dll/inc/tiffio.h            |   334 -
 Utilities/CAI/cai_dll/inc/tiffiop.h           |   279 -
 Utilities/CAI/cai_dll/inc/uvcode.h            |   173 -
 Utilities/CAI/cai_dll/inc/version.h           |     1 -
 Utilities/CAI/cai_dll/lib/hd421md.lib         |   Bin 86972 -> 0 bytes
 Utilities/CAI/cai_dll/lib/hm421md.lib         |   Bin 17280 -> 0 bytes
 Utilities/CAI/cai_dll/lib/libjpeg.lib         |   Bin 233802 -> 0 bytes
 Utilities/CAI/cai_dll/lib/tiff.lib            |   Bin 21044 -> 0 bytes
 Utilities/CAI/cai_dll/lib/unix2win.lib        |   Bin 27558 -> 0 bytes
 Utilities/CAI/cai_dll/src/CMakeLists.txt      |    25 -
 Utilities/CAI/cai_dll/src/cai_DonAux.c        |  3873 ---
 Utilities/CAI/cai_dll/src/cai_arcinfo.c       |  1402 -
 Utilities/CAI/cai_dll/src/cai_atg2.c          |  2170 --
 Utilities/CAI/cai_dll/src/cai_bandeau.c       |   730 -
 Utilities/CAI/cai_dll/src/cai_bil.c           |  1810 --
 Utilities/CAI/cai_dll/src/cai_bip.c           |  1807 --
 Utilities/CAI/cai_dll/src/cai_bsq.c           |  2009 --
 Utilities/CAI/cai_dll/src/cai_fonctions.c     |  2499 --
 Utilities/CAI/cai_dll/src/cai_gessimu.c       |  1233 -
 Utilities/CAI/cai_dll/src/cai_grilles.c       |  1916 --
 Utilities/CAI/cai_dll/src/cai_hdf.c           |  1779 --
 Utilities/CAI/cai_dll/src/cai_inria.c         |  1529 --
 Utilities/CAI/cai_dll/src/cai_jpeg.c          |  1008 -
 Utilities/CAI/cai_dll/src/cai_lum.c           |  1765 --
 Utilities/CAI/cai_dll/src/cai_mapsat.c        |  1080 -
 Utilities/CAI/cai_dll/src/cai_multis.c        |  1985 --
 Utilities/CAI/cai_dll/src/cai_onera.c         |  1296 -
 Utilities/CAI/cai_dll/src/cai_radar.c         |  1466 -
 Utilities/CAI/cai_dll/src/cai_rasterfile.c    |  1440 -
 Utilities/CAI/cai_dll/src/cai_spot.c          | 22134 ----------------
 Utilities/CAI/cai_dll/src/cai_tiff.c          |  1534 --
 112 files changed, 76655 deletions(-)
 delete mode 100755 Utilities/CAI/cai_dll/CMakeLists.txt
 delete mode 100755 Utilities/CAI/cai_dll/README
 delete mode 100755 Utilities/CAI/cai_dll/cai_dll.dsp
 delete mode 100755 Utilities/CAI/cai_dll/cai_dll.dsw
 delete mode 100755 Utilities/CAI/cai_dll/cai_dll.ncb
 delete mode 100755 Utilities/CAI/cai_dll/cai_dll.opt
 delete mode 100755 Utilities/CAI/cai_dll/cai_dll.plg
 delete mode 100755 Utilities/CAI/cai_dll/dll/hd421md.dll
 delete mode 100755 Utilities/CAI/cai_dll/dll/hm421md.dll
 delete mode 100755 Utilities/CAI/cai_dll/dll/szlibdll.dll
 delete mode 100755 Utilities/CAI/cai_dll/dll/tiff.dll
 delete mode 100755 Utilities/CAI/cai_dll/dll/zlib1.dll
 delete mode 100755 Utilities/CAI/cai_dll/inc/CMakeLists.txt
 delete mode 100755 Utilities/CAI/cai_dll/inc/cai_image.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/cderror.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/cdjpeg.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/g3states.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/atom.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/bitvect.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/cdeflate.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/cnbit.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/crle.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/cskphuff.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/df.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/dfan.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/dfgr.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/dfi.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/dfrig.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/dfsd.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/dfstubs.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/dfufp2i.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/dynarray.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/hbitio.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/hchunks.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/hcomp.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/hcompi.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/hconv.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/hdf2netcdf.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/herr.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/hfile.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/hkit.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/hntdefs.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/hproto.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/linklist.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/mfan.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/mfgr.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/mstdio.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/netcdf.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/tbbt.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_hdf/vg.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_unix2win/asm/atomic.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_unix2win/dirent.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_unix2win/dlfcn.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_unix2win/glob.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_unix2win/sys/mman.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_unix2win/sys/time.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_unix2win/sys/uio.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_unix2win/unistd.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_unix2win/unixem/implicit_link.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_unix2win/unixem/internal/util.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/inc_unix2win/unixem/unixem.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/jchuff.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/jconfig.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/jdct.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/jdhuff.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/jerror.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/jinclude.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/jmemsys.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/jmorecfg.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/jpegint.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/jpeglib.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/jversion.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/machdep.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/port.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/t4.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/tif_dir.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/tif_fax3.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/tif_predict.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/tiff.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/tiffcomp.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/tiffconf.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/tiffio.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/tiffiop.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/uvcode.h
 delete mode 100755 Utilities/CAI/cai_dll/inc/version.h
 delete mode 100755 Utilities/CAI/cai_dll/lib/hd421md.lib
 delete mode 100755 Utilities/CAI/cai_dll/lib/hm421md.lib
 delete mode 100755 Utilities/CAI/cai_dll/lib/libjpeg.lib
 delete mode 100755 Utilities/CAI/cai_dll/lib/tiff.lib
 delete mode 100755 Utilities/CAI/cai_dll/lib/unix2win.lib
 delete mode 100755 Utilities/CAI/cai_dll/src/CMakeLists.txt
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_DonAux.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_arcinfo.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_atg2.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_bandeau.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_bil.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_bip.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_bsq.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_fonctions.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_gessimu.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_grilles.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_hdf.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_inria.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_jpeg.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_lum.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_mapsat.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_multis.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_onera.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_radar.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_rasterfile.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_spot.c
 delete mode 100755 Utilities/CAI/cai_dll/src/cai_tiff.c

diff --git a/Utilities/CAI/cai_dll/CMakeLists.txt b/Utilities/CAI/cai_dll/CMakeLists.txt
deleted file mode 100755
index a90eb09083..0000000000
--- a/Utilities/CAI/cai_dll/CMakeLists.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-
-SUBDIRS(src inc)
-
diff --git a/Utilities/CAI/cai_dll/README b/Utilities/CAI/cai_dll/README
deleted file mode 100755
index 4a0b9fe13c..0000000000
--- a/Utilities/CAI/cai_dll/README
+++ /dev/null
@@ -1,71 +0,0 @@
-# Version :$Header: README,v 1.5 01/01/15 15:24:06 cmf Exp $
-		INSTALLATION COUCHE_ACCES_IMAGE ATLAS
-		-------------------------------------
-##########################################################################
-# MOD : VERSION : 4.1 : DM : installation sur DEC UNIX
-##########################################################################
-
-##########################################################################
-# MOD : VERSION : 4.3 : DM : installation sur HP64Bits, pCNT, PC LINUX
-##########################################################################
-
-La Couche Acces Image peut etre installee sur HP 32 bits et 64 bits Sun OS et SUN SOLARIS 32 bits et 64 bits, sur HP ITANIUM2 , sur DEC UNIX ainsi que PC LINUX et PC NT ainsi que station XEON EMT64 Linux Redhat
-
-
-
-Pour la generer, quatre variables d'environnement doivent etre positionnees :
-
-
-MACHINE_ATLAS  represente le type de machine sur lequel se fait l'installation
-	       Les valeurs possibles : SOLARIS, SOLARIS64, HPUX, HPUX64, 
-			               WIN, LINUX, ITANIUM2, AIX, DEC, SUNOS
-
-RACINE_ATLAS  indique le repertoire racine de stockage de CAI.
-		(exle : /home/ATALGO/regine/COUCHE_IMA_V5.2)
-
-RACINE_HDF    indique le repertoire racine de stockage du freeware HDF
-		(exle : /home/ATALGO/HDF)
-
-##########################################################################
-# MOD : VERSION : 4.0 : DM : s'affranchir du compilateur 
-##########################################################################
-COMPILO : si cette variable n'est pas positionnee, le compilateur par defaut est
-	  utilise : cc. 
-	  si elle est positionnee, c'est le compilateur indique qui est utilise
-
-
-Pour generer, lancer $(RACINE_ATLAS)/ins/COUCHE_IMA.install
-
-Si vous ne voulez pas de bibliotheque dynamique, dans le fichier COUCHE_IMA.install,
-enlever l'appel au deuxieme makefile
-
-Si vous n'avez pas la biblitheque HDF a votre disposition, dans le fichier 
-$(RACINE_ATLAS)/gen/genere.mk preciser all: CAI_NOHD
-
-
-
-Remarque : 
-----------
-Pour PC LINUX et PC NT et ITANIUM2 ainsi que XEON, seule la bibliotheque simple est generee
-
-Vérifier que la variable d'environnement $PATH est à jour de façon à pouvoir 
- acceder au précompilateur cpp
-
-
-
-		INSTALLATION COUCHE_ACCES_IMAGE QIV SUR HP
-		------------------------------------------
-
-Pour generer libimage.a , deux variables d'environnement doivent etre positionnees :
-
-
-MACHINE_ATLAS  represente le type de machine sur lequel se fait l'installation
-	       Les valeurs possibles : HPUX 
-
-
-RACINE_HDF    indique le repertoire racine de stockage du freeware HDF
-		(exle : /home/ATALGO/HDF)
-
-
-Pour generer : sous gen :
-   make -f cai_libimage.mk
diff --git a/Utilities/CAI/cai_dll/cai_dll.dsp b/Utilities/CAI/cai_dll/cai_dll.dsp
deleted file mode 100755
index e1be2de439..0000000000
--- a/Utilities/CAI/cai_dll/cai_dll.dsp
+++ /dev/null
@@ -1,299 +0,0 @@
-# Microsoft Developer Studio Project File - Name="cai_dll" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=cai_dll - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "cai_dll.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "cai_dll.mak" CFG="cai_dll - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "cai_dll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "cai_dll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "cai_dll - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CAI_DLL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CAI_DLL_EXPORTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40c /d "NDEBUG"
-# ADD RSC /l 0x40c /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-
-!ELSEIF  "$(CFG)" == "cai_dll - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CAI_DLL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "inc" /I "inc/inc_hdf" /I "inc/inc_unix2win" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CAI_DLL_EXPORTS" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40c /d "_DEBUG"
-# ADD RSC /l 0x40c /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 lib/hd421md.lib lib/hm421md.lib lib/libjpeg.lib lib/tiff.lib lib/unix2win.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"libcmtd.lib" /out:"Debug/cai.dll" /pdbtype:sept
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF 
-
-# Begin Target
-
-# Name "cai_dll - Win32 Release"
-# Name "cai_dll - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\src\cai_arcinfo.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_atg2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_bandeau.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_bil.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_bip.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_bsq.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_DonAux.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_fonctions.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_gessimu.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_grilles.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_hdf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_inria.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_jpeg.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_lum.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_mapsat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_multis.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_onera.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_radar.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_rasterfile.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_spot.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\cai_tiff.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\inc\cai_image.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\cderror.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\cdjpeg.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\g3states.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\jchuff.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\jconfig.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\jdct.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\jdhuff.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\jerror.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\jinclude.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\jmemsys.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\jmorecfg.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\jpegint.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\jpeglib.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\jversion.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\machdep.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\port.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\t4.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\tif_dir.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\tif_fax3.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\tif_predict.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\tiff.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\tiffcomp.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\tiffconf.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\tiffio.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\tiffiop.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\uvcode.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\inc\version.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/Utilities/CAI/cai_dll/cai_dll.dsw b/Utilities/CAI/cai_dll/cai_dll.dsw
deleted file mode 100755
index d13fe7a6bb..0000000000
--- a/Utilities/CAI/cai_dll/cai_dll.dsw
+++ /dev/null
@@ -1,29 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "cai_dll"=".\cai_dll.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/Utilities/CAI/cai_dll/cai_dll.ncb b/Utilities/CAI/cai_dll/cai_dll.ncb
deleted file mode 100755
index 45842ab1cb5b10253660132b54f9ced67649c82d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 295936
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%0D_Ef17b(G2bG|GC{w!Pj+!?r;@
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
F_#bPWZ3O@T

diff --git a/Utilities/CAI/cai_dll/cai_dll.opt b/Utilities/CAI/cai_dll/cai_dll.opt
deleted file mode 100755
index 141839befae186f752518f390b3cd73e3cfad446..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 54784
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

diff --git a/Utilities/CAI/cai_dll/cai_dll.plg b/Utilities/CAI/cai_dll/cai_dll.plg
deleted file mode 100755
index 6a4ce7b042..0000000000
--- a/Utilities/CAI/cai_dll/cai_dll.plg
+++ /dev/null
@@ -1,16 +0,0 @@
-<html>
-<body>
-<pre>
-<h1>Build Log</h1>
-<h3>
---------------------Configuration: cai_dll - Win32 Debug--------------------
-</h3>
-<h3>Command Lines</h3>
-
-
-
-<h3>Results</h3>
-cai.dll - 0 error(s), 0 warning(s)
-</pre>
-</body>
-</html>
diff --git a/Utilities/CAI/cai_dll/dll/hd421md.dll b/Utilities/CAI/cai_dll/dll/hd421md.dll
deleted file mode 100755
index ac89adeda270f270fa9141a1ed28c432713d43bc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1151061
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
zC;=s)1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwO5neRfM_Sze@Z|JC;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
z1eAahPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwN<axH0VSXWlz<XY0!ly$C;=s)
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

diff --git a/Utilities/CAI/cai_dll/dll/hm421md.dll b/Utilities/CAI/cai_dll/dll/hm421md.dll
deleted file mode 100755
index ffb7c04c35d423ac1fb7fba7f502a79432603e08..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 266325
zcmeFa4SZC^)jz&THn_s#E*LN>YOJ8Bh$yIFP(#dWv_yATqS&hS1?iglR^2FCViRw+
zvRt>tN~-N+t*C9SwZ%TQZKOsM9%RvCMN3=S(&q^@wRhe4G_9#d8_oawJu~<2-6TMw
zwm!elANb_%z4LnJoHJ+6oS8XO^Ql#yB9F)8#oxey$J2^m{;QDZ?jJpf-tVw=`+1()
z_oc&I3l_d~_@dY~H<#Ub(+!`!>5A*huDas->u-pcU3qocP4(B8U2}a|)%h2cU3bHh
zt7ncMKX$4vdQ#{2H$<AAzt8@A^_#!A?*e?E{@}~^Et203`99{GFWh&rq}y=ctN5M$
z;BO@UX{4*f_Yc=}+!w`f^qQ+;ENfSgheICE!h&MYx5rGbw9|BY_B(uB!5EL{Nnj$Z
zLbog{^mu}J=O3T?op|Cu`_~i1n@ZzB4*bK1eA~b3v*MK^&(HTobWf3IiKN@r!|Pe)
zM_hZ6XUeXU3=`h`W|60igxtlynenTa#Syn<EfNtvwpHNFWhnD_E}wbRk}Kj@cs&0+
z2;qRigFyMkkNvL#>@ia%^Q`tEv{RSGU)R41<eYhpO4zg?BG7iJlfSNi6-;;2)z{u|
zmB({cfDtxM9V|;~q;qH{0ec^NF|Zc{doi#V1A8&B7Xy1SuonY+F|Zc{doi#V10%-3
zX8y~3slnsPe10w-3qOy?DW?^BGL`f2sF{Y(75f%=GWTMBoH;Lyu!|?+ZO&zQtUVu}
z2mJ$Yzh(hFZ{RU5g2&0r@c8_lcuctqj{{Ca0Tcg;$4is(Iky&X7rchInN4_P&O#|&
zcjImC{&>5cZ&wqREq}q|;A4^amXq=Jw-UT<?!w!B7bD$&Vn&&Hk5Fx5@xQ|4I`jT}
zcsxB0kEsS8$Df3Bb>(>bi3dqMbMW~2A$a_z2Vqxy0&jN*@i_Z7d_H^{9*1B$n|W*!
z9z~daXMXr4JdVB|k4MMi@s)E>-nuW~t(X|{lp^mZ+5E442ag{SO$)z_xBJTQ_)iva
zX+IvDR^ai-DTsX*7M9G>ry%dvlkxd7vGJ*Scspq!!pdgi?bCG#8*@J1P9P4RxDapm
z9f3!b*nRJCJQmN#=bzrf+hza2+q@(2_EZ*+&k$kj&Oumc3?2`Wg1=}+*e%`oyy9zk
zd*&oOjyegSg%9KHy;XR`h|?cWL)huCn`DkY2HB>L$LI0);B(#Q@F*t9Jcr?J9E=8;
z*Umta2<f(YE*?kCL)c9d@OIqccx-wXiGRh|>&x(%mqF~D<MDPFsdf8Bh<%=v3D3gA
zB*RU91dpadL_BaI-Yy~{DrX|L;TC-MorTW}_Q%_K#Ktu&s+WAVb^<;>MLbU;3xtWB
zFPwnK$wW3y4w>#sB>wI3czgAAg#F+`d@g3akMQ$6VlsIgVy8~U<6FJ>Tz3o}-#!$N
z#!n*bb0v6u>Cbp9AQ?BaMc*a27m_z>j=*R2-;wyL>3Dm8F5YgdLPQDpO8VB`$6gHV
z#lXJ|1GQ$i(OrGPg%_nm5VanU8S*7VeMUo{|JKXRn!bUlsf!Qr1X~LbmA$%^7TWA(
ztzQ0I)JoH3HaxpMyRgn<o%qjz0b_$VTal{mk6KmlsIL=Kq5iP7zy6w<s_Bnd=DR9x
zvRUhk#-_9v1?$FJZ%B5(v1#Blmwnp&^QHe)h-zP(tp47>Z?FFQCw}K6ZVdkTI}v|n
z_?wBp4}c|Ue-+v<4evK=`i)FM63>SIakrjh*7grfZJAYSW8hSUf!PWJGt|#Cg@{Ad
z*8%D$sDAcUKZUc~b+ash$-lqi?=Aejhd(dMKMH^2^zTIc9*Dm({EfCryJ=7Ht;ebM
z^r2iu(GyjBj#W@jRX>NQ_Dlvw!m$cPp7VreF7mXp4E#NZzm52N34dGhw<mZ7zJ)fv
z`@mvFHGbgRtPLh>d(BX<VHG6tZ0Icx-1Sp1m|4>cCY*hcCur9CqjgPYs4r~Ya%rK*
z*x=7RE(!dRI*(b~7qvd4gYRW<sINTKfAjvRVQIRcpb-g-^@YjWzU-f~x9G?cL?X`P
zQL$dec4Zgm#lq^oT=MGJQ+4dYk{1<u(hJZZ9z0tT`B=msvy;q_KOBRy0`U7HR{9bF
zSF^z94)g@?#NXHP_f!0B#oyoYw<pwnpm?W$*Od%Rn(<aq5PdWmB71x4i!(nKM1kvl
zNgsQomHmhGO>~3g0)+IV9mz^RK7ste+6bFRwy=(~(;;*d(k0LJ8V!C={6b(S>{KMh
zfNuT9?Lkj{VfJjJ0lx>b1mcC|R|dn@Mk&mnJwOEpqh_eztPV!3Z+%+umK}?f=}K8`
zK~y#nTLiAO9#k+mUF!qkXK*G5U!<V5y;slyiD=dY18Zyggj0QJfO#%jUhSJ#(|?N>
z67XVR&kO|xSHPP;Ie}@AzS_q&$4@pIO4xF+Fj|1t`^-o%YHgPC*>VXi0ZM#=l5c-X
zT8=_A(+q}lSKk7EEGN&62A?O;JOCa?S;n#;KK{%P05Bn0YZ(oeKXBI%CB&NDzOv~T
zhkAkoQxiYNPv!{*3qXPZfb0i(Qwvx1Cu{n$0g3XXzmk0x`0;7n?)Tg>3u#PWvZl+d
z?LuSw3=0g`XPu*{W%Lcy`!UuG;9n+&3bL)4Dh*IXi2$Ejjlz0URV(`;2~ZD_<u_h0
zKns##Fr&}7P3nQXC`^Vr&6-Z&t=D)RJ+#-l@$W*iym~NsVLjW0+fjTlS<|DSH*0!Q
zi<<hAwLPc@6sz__{39xPE}9B_Nj*pmTx~Z)+d;S<BjZJO>wsbExgQl|TeG)H*}-I}
zTY+wdx)sv8cZsy)kcLRxX4Y;4(z*p{-PVtCmF%mLmOVN9bI2FcFKSEYClwn>1A>u(
zNz+w72N==ZN2p)3(jTUHf}QxQKExAz5`U9G>s#>$;Q6n(pt!KeyDR?sxWk3N7c2gz
z{*ey#5@^NdCy<dqMIh2L!Q8JGC>9?VxN8d%nIQ|Ty}1lS3D8&DUlj2tDdPI46=4Xt
zt+?9Q)L)^rA5T2^G_{;#Yx<b*6_qaYD=9@WXn)FkE+i>rT+<Gf{~Y6m{srh7(4LTg
zo#dyy>@Ql+grWY73{1k#_)7U#QJg@aebHvd{!~easw(?AwCs$Do?!MsynF`h=h+}$
z=JRDAysV#qR*+%I%jr-z0P|$`HEX+#^=NcAqiVX#tNk~ZnYBI90d$WIUVvJ($(CR}
zMU~L>da|1VfM$%J9)<x4e}Bi{iNF&7&cfev{C!IQUWMOl@mG((e+MrJy{Vs(!u6A5
zaq1&p>)F4tm-}Y7XA%xcj1KnPz}j<t5vM0im7V}%`;wK!7bRf*gxC^}AD8`ABn6~*
zmGFblT!7ph?I@g!wg@4BVHBsuwzXfa63aqDU>YSViDWJaj#5x-<T>rbcw^T1%`iZ)
z*%H#m&tU?!gspoQxpjzLqF%~dBK<=;hGq>S1ihluXz29BkHoVeem$Or@xts)Xq{OY
zw!Hr<=n%y)gBd=?2){AUQ-4C8hyShLzrlD&W`D8}z#4N&jzt|HN11hek4=uZMV9-`
z31+2VMh(6~O82BVc=o1hdxSf?IRr+mJ8IY{U!omF%~eHp2~|j0HT?9d<{$dWT*@gb
z<vJ(jooWCv<`vXm!Y**Cr~Y87k^m9<pFfRg?9Aaa1LFxAgW&>AMh}4ywF-2@pofBi
z{LDQ$W|7aztP7nwV9<a7@tfq0WNnw0*V~PT?fzS@Fl)DCo-lEm2Ys}E;^zy4nRZl$
z_czglGf%1adDj;Pvrz;#UW=D=@Uo3B6?i$2-TD-~bfQ~lXX52ce3^!qUr+{2k?JC`
zc0x7YY8O)Zfg_kyP>sc=vG@0h$b$f~Jn^F_hHg3B40Q>v2cU&*K#zxD1i8(cuA*u%
zL|67jCaw>}9#ajzT8f4)V`Y!GvD8Ji1Tq8#fTq+Lm|>O5FvrQDJ3w%%Cusjo!TWUl
zoq)en@%LH$ovD8p;<pxmm*H=h?EHT|!s)+ten;)K_3Ogy5_VnT^xwns3lSW)zWcg#
z6^ttEM*ZZ`!t8vrhPofSI<(FkB?-g<lyEN+8n=6y2udO%XGtVwIW=_AhU4fD)+!Y~
zT5Z^YAFKu@l7TdSmWYdp)shvFKwZjFKaP>H3Juws85%jBZ5>AC*fklQ`cb9E+Z_SS
zPR86(nB7NBQmO1jY*puZ0ST<X3vnyu>G>sbOXd7_6hMIljSR!JKVsFu?k@A7-gKys
zt<FxA*&9Yq4%bFIr${OjW|5Wtn@<M1DaSAwEwA?0PeacDsrn%dDCa<7KUy8`<?PB2
zVOC7Kc(dQ%C6pt;N4mJGt0?#YNK3L41=cFkhkaO2-(W1sUSKqodKya2+R|vOnR3x<
zJ*?P=u_u|K63nmuB9tOv3@kHirhwT>(Si~b9K?IS60)4I8XHP?f!bk#7JSowL{7IN
zmegcJNaQcayl|j?KOnHFV=Cknrw&(>sn<=X)QX?MdE@eV#O4ZyKs=R4{5Ma}1yJ6C
zEa(q?sgfpn#{|RZfacSeJqYQevBy-)9}||u^g@V=xyNW)qM9e|3ES;yQkb*b;{*CK
zx607iZ{Fhrw8qYY#H;lZ{uzd=adBB4=R^_fYl03AZ;}FQ9%$Ya;JOreR~_EEO45Ke
zMQv0GOOP;yiF92-o!`3hHR6=YfipZwX@4cMWI$TLNm%B81bJG7Bvj4Hl7cxOR&F@#
z5vT$is5mCAGK1<F%n;TurQMjh_fkm7KpF(^LzPTUAP#Ppx_iP_P=JFpQX@X$;0SAm
zrl5tT;H(m~wwHsZH)_58XSO5=bQ}=#tOu`-vEGu3q&<g8KCtU~k_=_`V%k+n8E38#
zT<<7Lyb!Mj@0fS`kvI+Z0iIw|bb`Xxd{v;0@)wbUeOHLpxbqAYmR!ZcIEAu<Uu<-O
z-3`G?ltOURZT?oQiQROF8ak`}k=SN3oZmV{YNJ^!dlhI-3(CWS5zst-UOpCJ=(ttl
z99m0nJQj)(8XziI($1?oDp2mAHCu#AM$gW}_St`Dpd%lYJi7#BcjQ^S*nDky7Uz_V
z%9o&J8O<ik$CLO74?-l|R0;!2I5vljGtO!gCK1fnDB(=;PBRT8dCI#|-upymS9^iq
zJ_v7`5k%-&XJH{y`jnjljJnY~7UcebYP^F|X)ot1s=YBni)lg--N6qqz#v$kMBN;V
zlo5{1GmGY-I4lrsZNv+~Y>rLBa#V_WB$>O=tcD^`YA%58Era5SIl;ldgY|R8lxt&M
z2FR0?>H$lAO&7Z;A|Z_c(Sg(<sY3@NvA9Bfm875{XhbkL@>Jntwa_0U#Zf!+MhcMt
z*H8l3z0xIFBM2Xa#Az@e2@+jW6YGwYaWbfBT)+RmmN;>#fE{0~Q?%#wFfAbYn?S-2
zd#)17B~fd}*;-qBr&HsD7HN-?&g(@kU<jgkgq;s!@LJUxHN|*XWDdnUO4^BKT<U$2
zY{3qe1|3?JCX9Y7hBdHhh>|wf_OisQ@hY;z3Xybx8<I|jX&n@?qBh*B!$4byTx1KU
zo`HgrO(Nw=oKSzG6FNE$a#;H#d2#qr@x!A-`^UNOY0|p-N3A_%T6e##38DxuC_KgK
zA~IRleMs~&YHgKXlT&z(jD6^aB@yd@J{B@6J;!dmz`w{fzZNy^N!<*v)5D5m>;dRV
zvYg%ZUw%siFHM8MQ~JN~CU#y3^D8}-f-GWvyGrY+-RV#dS%7+Kk63tm&=}EEk&=xJ
z^-xbOSIh)Xg6+p!4_&>Rtp=-VJ(bqMoSq81I^-gatcBU{xXP(7b@%wFv`9qlr=99C
z+YI#>?O3bnab>)DG66uLm0l<-u!MEMR@#@{stKfws}N^NSa@rCBi1W_BtpFZMursn
z<>d1-L;3GTk&pTE`5;>|tKs96{}wuq1Z<~1$QomAAu)?FJ!<`Sd#>e~Ceohq1@%X}
z=8;J1sC*M*n*gfyxXK2-8WIJ@2sNav`h&m&o}<Qnvcv%OD)Md>iSb6lIlREylaWxR
zxG5!TMB?1;2F`DO`#kmgs5Qjn)$9os9i&Li>eVa^Q^!WTa&3=vERasIyL@r#bIn%+
z%|BBJ3|s6)V5mIn|2G(ky6>SV1!o$|rg-90oDh)Ir^GB!GZ3AE>`sVlE?es}*3Ciz
z1@#pYJp=C%>&?@phvv<YvC8T*?__+~dTE&W(NB_hiH)HV!{H}>nLu175Fhe;VZ1zu
zPZx+eI|BxPH#GiGLDqD{N3B2R;$erDbsTh#5i^g#cZtZ)ept<6ypp*ZEZX?+#41on
zUBSR4pR(K9v!VlIQ~wLx|AeYrC(b;B0w~?kO=N;lSL&ExAcK-JNuZc)CE>C97Hei9
zpUp4iRu%$F=Z->5F0iK6m%dZTj2zi(fH$Zrn74r`pder=sxRH-M4v1A+>5aD+tH!E
zbR(lNfAeII1=b?g_pxWoj<yR&tS5_Us<b)t52R)@Rxl^5`9?#J*l2qSptUsg6vofW
zeu}ePNyDZ@tRMeYI()WLh0AiP;_s++=r+c|4AJ1!a4%}eVm+UBgg!gn4XO;3nr<X(
z@Sn7gd>|hLmqeEjCJWjhL<4pcsu(7lVt+7MDL%NqN5a%}8x7roTaSkUbM~t%S3OwH
z<;9kj_yO~9g(Q10S2%<hxWduTg1EvVAp)+TMV2ZH;xG+ag@NYRkSKF8lEQcpsHeFf
zLZ#d$)2U7?UA^6Iw}VBex7&2M4&~{3W1CO`*c$i(3CpBpSiZqi?A9p4XyuD6Whx>P
zNU4_LQR^?KI&#6G0(Jx{cI{8Dn9Fw}juUhKi+LqhC<&=kt!zozWf(b)orTZ_4~R8_
zd)d-~Ned+wT6$M@QfxVc0j4_`MVq0n<ek`_N2rXa`QoWRCh**(sjw<Ft$zZa(O5OI
zt|>)8xUSHeDIf=7RQ^699TXa;7SxAnjBr9Qcq!Jwcmu;Uwqs2CwaAS8zML&Xj)=8R
z(uzce4N;Jl9Ya)NNs21<>9SfjSIRl#pHhxMOh)&__h(C_Bcs{&vL=enePD4+Z5TRl
zo+lW>->LXJ6Mq-s&r{&F{}tk;XsEp08<LL!k<V`ZHq=c*C@#xqKBb?7y=Cz+6Gl2N
z6hR#XdFCqyetX-&?Hp=mfb*t<(Tw#an(czZc7E$;*v*TXoL$OTl)@6~ymbXB?CBYp
zR3Rk=u_A64c3j}OVkxZs;IQzpIi96O>c(2v<d^mgKu0NRXVL5zR{ENDG$QEj-yQsd
zv4g8X*z!;~jb_h|&eCyM8|{HwigiS+ROLsahxMp<uq{_uxm8IOD7klFGT1W?%f!&j
zdqpkoMM;o&6Pk9)HlR??I4lC^if?Mbk{P-r`h*~uB2Vy$4v$7xNu!~NbdPvs&8OoB
z{rcear_|pQ<xU0VW{?fqOKi%OXv(d{j%M&dUh{3HXd@XzeVC{?NEI^v{@_=Qosg+{
zlqgkX*ae+X!S3kPu@jTBL8NkX!Voq99ShE?I&&C0V)XbJ=qU7a?dQ}oSrjWrJF;z0
z2gaVj2w>H2af|QFQ6yw2sEw{K&@7i+No#^zzoLbKBAVmVI+4}TukL4Q`{bAQJJ1dz
zsawbBPdDXsjDEL{fn+%y1Icna29o7;3``}0<~^bptdfCOuaE#3Jy=+!FWXuWdYD?{
ziApZQn#N9faummR6vUvYRrm^X&{*%}D5DBs^{EDFjaij72Ar;UdT<2m_r&MsFo99a
zw%oV|DsGFtOzkIQv91wpWR|oK+M{=$FW2A2kns$a32IY!{Ze?s<`gke;Cu!YF6?HT
zfz}&Oi)t93AV}vsHcvr-Qjm$Q0u~o^rDUNP5>*bNy3WCO$<gf+eI*chVh1yx7L_y(
zGca})syY|~mC_7jcb%9<FNReptu;;9@+DrZz_y+-(Iw5X`;$93g))+|wwLQn*s00I
zq}#B<3Py*C8FskrrtG0o@4l!`Z61*Nu)toLE)>mn)cf*wPla5pyZ@rS=sMhTpm-h2
z``lSH15cS6^cBWW%2q429%|}WUlIl;pHhEDW>5A6dxBtHfKRn}h}{IXLFy=>GHt=4
zax)7MG@2nt;H5nUT;sNH#ASnyvg~9GQVv|jX(Z>^+=Pnh)G^8eYloJo-d7U4djrHs
z`!9q6p^k=-TlG~ma`Mp}CfG|k&8BiXA+{Ll>-M)ESMAS^k5#aMFFFNyRrNHloZi&X
zPk9|bi7yKwxF^TTnB8N2PGv`hTY-j{PZe70gg#5;i19``$ePWzxR@O4L$ASRk)xfo
zU$xUVttYS1#1OWMUbJ)UAG1`Bw^bo9+FT_?H?3#4P|3HxkW0QzCEw&EpQDqr->Kx^
zb|v4Wl7HPvUOW<0RgMWi!Z$a6C}A?@RsfG}^{JcA#ujp!0#0i!0m8C}woc~H0oYfL
zpI~b-fA(#~1lp6$?Vvvc+0Mcre{1l!2!Ef(-<9~=GvID`MDYVqlxCSCY>a~-pM2|l
z^Z-s(PpX!w>Vf!CyX21)BxVn5rQIT1sz9Hhpd729bS={T8Q>HkuMdCScz+Xr@8U0j
zZ&;BE$GHC$6?whI#e0T+XbNc$_dDnwpFal!-<d1OfqK{9og(?TXAt@=?Sa_uhK+)~
z+!jcU*Ir!5LemI^fYh(|V*)LhKzCC>%8*!?y&hu$YDeb}8q2(%_&AQY5y)XHixnil
zxq@T5+N=qcI@XFlN6kYP>gphjd%`K0iDOSP9809ysP^!&lmSzeaY(kNNS&Bga*rAI
zK7I(L+0`By#hmtFHH=doHZJ1<)VfJj7A!Uq264M>*gU0|cxZxASzaO*YI-|%6hb9%
z_Th`IM<z$Jx;QyHLQjsS;454=$NC125~|6O)XUvos6|FADzZ5gj?GTDMLtHUewm_x
zzWwE)-UjZyki`8-@5=0s*al(~u*#AEunY_%I;yZtqRc>hBG!DVdpIm}LItx9tW;Q^
z?Qv@|9|G}1S$o(J7ky-ebNJl?Zb%fp)*;<m+US)%vRIV}s%2E}uEgw3xD4kRNCIy?
zmR@_YUmJ>p(2|oezF-|C65A%+$1O5F7{Q3FzG!R<19QllB*Rh}x7UTN5q6zjwXdoB
zT1Z89>BKhJSJ|$Ig3lKPS0uK<KJxS#_@3RKYWp2N-u(X3??0YSY{e^+r4!qA1~bLC
zbaU!Ptbjhg4_d<J1AM(O`iKAG;Nn-wlFg}3q&8ca$9SfN9|QFPRjx4J=|F}lg>!Bz
zFTz2_?LJR@iHb=#C+x~-1OV=VF}-u?#tp14sA@<yOAWfbXA(oJdl_v}pm8oPO%eDh
zLvVUP(BcI~vSZbIKZsGcPprpbY^;~(@5nlsi?OjTBuEJs!L)Ofg#tT>q%TO8R0~lY
zwJuazhAB0LQz?c<6!g)Q0E|Gk7R=y?r2~#)XXVlv_pLy_DM6NOA$d$8(ud)UVcBKW
zf#^T2%P#kLECc6lhYlNw?ccIlX`A!5*?HTd-*nrQLM_e29<6>bjE=`S2YDB6VIYl%
zEqp1TaPue41j_-xEW;%22V_pfVp&SEnEpG7)Ts4DJ9)-urkEHk+QVX6_(AC=FWIki
zoC!3qCBI-C$H0~%uz7$;wUR{uL9&zpg1zy#tMby#Erdk6NrL%v{p5=E1OokJC=k!I
z5F+U(L>2#Keh-y}fCv=aU@I?!pw3)_q=LcOuP!wsGhp1En}?ETxgbC;n%%zCtei1i
z<u(R1A*z~oQma5ohsPFF5e6YjRn+><R5GP6@N9cBvFTd_1KC3qyH{3C^HjhRM*Cc6
zk<f|JD^q-~z#y9A>r15w?^2krHbOo+`6+T%g#Mwwt2;W2R)pSKS<}6u=IuIf3Ogj1
zQexKCQB}Q%V@lNWOHn19qCmVjXnO?mE)N6TBLh=Q6ZT8sMQEM8Tky>?mnIY4fKuT_
zBm}7g>)&^AnjBM$WTFe-MjM}=26siLvLZ^t*)J?Lt7l-v=S2DBM<gbAZ(%M-04d5p
z7}9s3``OJ(F=fP>F?`CGkuufN2^o=W*^Y#mXD&5;OOq*!A1!>sG>GPPyzbLBLg{=f
zf{=WORFZE{+TAAH9oHvVA2!W+JoBWN1yVZ%#WF&ok4e`kS&?k%WYukadg_mb{5D!?
zU@52%YBJAHCK$<6S)i(@Z<5E9;0~))lxo$46$KEPERWpE7dugKB#C@`PPDrenRkHt
zJd_NQNJ0q3Ve_Q@fv><L0l1BjZY<<@hZi;8;YBrRV?o`JHjx(vwH?+TV0KdO7VrxO
zh^g%;HI*X&9NQ6AjHEhLtWCs&)2CYDQNh?Sq))*EhT>F}UNh?#CGilph9?i*&9p3(
zIzm0ttlh~U=?k$}2$8Pgkl|}+Cu-UA(A8!|Vq2I)bv2h3^@qdQ6l@U9>$GyhM`VBo
zPBK%%iTs?UBu8>}g7SEfP>7X4O^|xkq(Y^|;LWs=l*oOmDYnvkfk05o9AlFUrmLLQ
z(~~L6DyRc^e*9zjs0aPM8Agl&=toW6tHG?I8+G9YQ`%1Tvt9jcQ$Ms4A#RKM*{psx
zsGoNA)2e=+Qa?}fhbpnPa~%W=&tY?MTo#d^9KgTK{TQC~ghuQ;#yZZ|J#m;t#R@31
z_fTI^?r4?0i{4HlcGy8Fl-1QvA$HeX3T&xQu@0;`IkVC(j8!Rrg2C>|Dh`izdE#Su
zgp5ac707?aFsEmpR2d45RslKC4Bt5z!nuE0j1I}rR@awI$+nxdTg^&;M`t0lai{Vv
zX3dsl&E{d_HkdUVk~Qr{!xn*KgA0yJ1&&^TESuz<MY`>>Np8DYgFR?s@STNYypRR8
zo6QAYnwmGu9yQdrU3Li9w&N5a!`mgiJ^N#6ma?MA(XZ{cbs0P0oTWZpdcddz)?g7J
z9B!h~EWHhrN3(W|$<4`|<b8v@KV!FeL$bEr-stDvUe{Az(;G+`EE3>_o+&S^zZig<
zwVTQ()Ss`~gB^g|(5wRUTwi&$FAl536Qp1Ea2zPkZGC3TW!i5&HAVEoWatT_;R#uW
zR91{K7e?B}WR4oQ2@<zuVqj7^{S^_DLRZ?mQq*@@NZBrPA<i*jrrr1xayTR}jBA}q
z?>%B|>NMuBa&i0P0Fb6PF1Nx!v0ZB0p7{=jJVBjaVF)zS8MUSY`8!Ek@(i0gFT&#?
zt-GPg&7Y=5UISp81lZbE5%_xRTu1=LZbU!;Kvzmy0NUgNlpZ3;kD*pMGu!F_okhEZ
z=cS7UnkhFlmop^C^U~>Pc6%xZXl{WLJp;#z{5LNaECJ9}G8L(L%8k+AYCwm<D2Oec
zG5cv@^QVgFr{O8Igvtv{`>SJ9I0|apH5a{jV4jEbMXD&({NhqF1ZJ=3vPs#NqNBM(
zC0YBVbUN63w&d(RM#Bc0fND16R=Gq(jA!A_`j#9yMaIrtMl<x}-cfYKL(+#zDE2bt
z4?=`eI<)ICjn-nH)9YRquJ_sfOgVHgDafpxsWI1mF=+H-3v$4?kNI%^Ud>)-p7tCD
zf<Qt}3^}1#4rBsM!p@yl-VtbqcQo`c%bu5sG1~r`iABYw5Z+4r<zf+r6!L7?`t>C8
zEcVko<0$sNVI1YMvD9GPK4*YOfi29u(hFwjN|vT8W<Fb(>6G5uJ!ptigPSUcgF3_l
zYwis%#e@{yMi9d4BUV_d2ST_mC-OpNYmsb#UsWWKC>YG>tfk4w4EaF8MUgq;R|4Rf
z5uV4}j=l-RaMmAI(@}SGe~EKp(Dd#4j?ig2A+DThfAr#GMmi*rWMTTXWE`_H5r|dY
z711K6cS5-TpYDpHk1YcWK_AmrP_FnseFkt$D`){e#0t7{yx2%njcDi7hw0cRe5lw-
z65HZ&#}?SJ=|tCioEu~4PHc7FdYrdD=dB-a{FhGHVKB9Xt%u-v5enT<rAZ2gC4vQr
zMOEj|6w^}F!s0-7l(1Mz@Ff!rGTNk`K=YTO5Sl4|fb-xlW`;_YXb&`BkEqyG%5}*C
z#&KqZ9!cfLOkK+2a{%XuSEUkce%MSgBx3z)B7yd469?PPf0@s*U|LjDf~}~P6t?35
znJF<^U3D?m=k4%7qJ!F3Vhf5;NZhR7QYjKEl4{wGfGDQ__z7E!q+)v#>Qwx9DWn@o
z_|Hu74MtbyiCS|Nu(15#(`b`af#!3N#grhYReysUMOh#YG#`mrg`yUwm+?+7Zagok
zfTC?u9G}YK%@_R3T#dY`7BUmSW^@?+a#(zovz86Sm+)T1y4WUC{UU`E2n+1*B<3_m
zPq9<PPgKqo>O850#Y)T+>xx(hN?oOcY4b8Vf~=Bh(5yEUT87Z(*LHXy!L?`@<aNR8
zg2OiA78DFn3Q{ebP`}gUFG=d4f&B(t4nUM3r<!0$gHq(Eh_%$NuKwV(G=ywG-6+B0
zlCpIND}E{YO0lJRtvJfb4uk$?#1dmR+WP~9ST>NlVc38)>4e=!%~T(<(REv@7cVeR
zweXkj5Y$T>KRtoF??lN)n`EoM%}g*9mJ2>hnlRL1*#JaBBcs+=ZAPkJI5?d&vAoh-
zf1=SQ;MN~zw2}J@>L;550Bjp9)4MWV;bUVIq<qU<iPAL$frP<^3PPNE|L{2CY4>J}
zR5{d3Mc^n<p`GRn6V5a95c(TMW$coe?9PZbrYn6&4CD&FxR}G2%$K?Tqvb+kKL_Dh
zYuSou{>xsNS@=&v&h(ymxq=Lw!tXGQuj{@?xS>h=lT9*Fg)0p;f8~;mQ%oQWUC^J~
z4ra7T6pW47gs*q~97fiWX=B*BPKxD0m9!K~=(Rw_*+@aNYc!L3{!b5RA4;41e?PN~
z=WvJT8qc>uggkAJ=fA^8-gq8oEH{L3w6Aw!^?1(y>x}mQz=vKDwdF!u1_$y?PA<7d
zd$mgn^L28#jKjYfC(N(b?`24^RfEh#2zuMp0Z%qV>?W?ENxG+#@povhy$KQXdYs$C
zw5$({UNW!$GGbG;Rx}mr#vsnK;27vXD_}tI=7aDRq-|>G=JYU-2;)NyZz0P){Ab3p
z3DAnUw4I;-eAXpG4;gwQR;whnRR9NIEDd^O**hh|GirUw&my4$1QKl!Vpu~3A;PJe
zE=VmBD2f3L6Fe#NGAYv@x|}k%A|Hk!Y&5W%RjtX;c6iUp2T(lGK@GO<{SKuGOk~@P
zhHd$2R-z=#=i!d86Sf1F`Yxk^E!;6yICU>3%nDF0Nm=jhE6o{<UAhnB(lutsEo2}l
z3`l&ZBpyNvFA@W^!g>th((Z><p~(>JWS#jC(_*NKEUN94r3Drbba5WOEvnIJEtWP1
zX^RkrMVli;5wc~z)23#Y31fh8o#|f%14=UDGX)2^nYL?$%uUrmg75l>0ew!+K~(m{
z%%uQKHt!s4>s8#0@3*!;BGNr6Lm!r}kSr;}*H&&zjW!1I6uVMotRG7juO<kDb&9Qa
z*$PC9;|X`Ap5^8w0?=M5KAf}{`8geuXr%KYneo`t)tT|E)bg_t6mjHd6F#*3TuxGo
z)LiDg-RQh6!W;jk6Z4(0xz5`Z=j{^bZ6V%N4m(VwZETFN;V|>2<;Y;P@hP%&iq4<0
z)LxdTb)3%X6+5-df}9|nMw>v(DVLK~?KHr#>c1CDt;xjYl9Es9uTDw>m826h5KbIW
zndG}HWAeq6sB+03NEIV-D#Zpu7>4l!ortN>y;0YLQkN|~oEi>CrlvNgCRBmM&#}o-
zPgPiwd#ZAxlz^$qR74nUd=9{MD{Zlu1xR9v3R{Je(w62<T|Z&jTnEDh1<4`x1$83L
zk3d{H5l671_H^eh=DaO--f}cvqQkVZoJv$90J9fD7qM>k62bNa&jDnHR5nXzC0h9|
zXyuEU;Imwc3Z!lVkEc>q2+5(9@lGXGQppg^re$IsM#^MMDV|Mjd~U&r_Qex(?}27o
zpACtt3pC>z0FZ+Txd$N7{2;zFS-h&i@qi`J{G5}BG>aE!UgR*Trr?AV1b3$34Ml>1
zWTFfaMjM~`ELH|EQwh=o4Ptb}I#cotA>UiM`8bnDt#_p1?)kVBW9_iR1Bq{gntFo9
zxQO+<9aoPT7Kw+pU`V8J!0=On00)ep77k0i8vusR0R25|o$?SG#%T(f$85O~Pno93
zXNsR<M0a<<87RVRVFIDKq!a{&tqD@8J;`%8=3O8@a}{7Ug%gsg`N*7!GN6ShPqvUv
zmzoK|zqXh;MEGfeCc<Lo;$8)nFqxRkfN=;&rLM(mWT`3+hQ0(j$4$x4Ng+en>~cV6
zCayzbS<6o*7U9)Q@fopx^G)Ig`%u`Oj5a>=ss9P)Zei7GM~CrlL4BE-xB&rD9Om;k
znkjx_g90dJyi*YWjM*Xqa-Ph1*IPfqlu8>nSE$;vr<p&I6t6Lh+6SZodI%?yK`be|
zya%j%ELhiUA+(LZ3?}6za~<b^B0a$iBo5Rdf({1Zj5us%A7HbBX6h1znk~!m6q3tl
zil3ZB3sA|*Dt9ujb0wA`fzifizDS1^74)5oaA-r=`1JzV1i&T}b0h<wo;yBaDj|nH
zhE#B)Gx3`Q1~vs2m|PIVw6cY-Y3(Oksxw6{C#$EcIFMKP1r}134@O~Ff>opoaFzp>
zn9rYN1RD$(fSQxlQ;oK{c=ur0L)W$lTm(*F3VTygpqU5Oj5hW&$c;ysz?smhiX+xL
z-yr-$dONKJ8XmYHPAq1zufBbP3QAVaS2Y>Su<vqzRg@WVd-+vZhTq~`wBJ2HCY-QI
z03_gCJ{I`-kwf2n)gTg8Hoqw93VE!$_X}KV;}j&}KbQu7-$&Xqsh9?q;|0SYzr%3W
z^sTQeTG2GX6+B==FI>|!;1pw<2AG8Zj5dj?hx-AT1|&2N2PiNN@I7orrC2DKtd4r5
z@St14q!<zflP_*Gu;9H4=5Pw;-ms4p1EQ~U<A{5&t(Y71Y6kT<M+4{1P_2P4Vb8)p
z3OuU<cR$H&m}ll?D6yk6Z=>v-aREofcsd!!+;IB=HVtrhN~*?+q?98d4r~!?tdwRC
zX--K$Kw8JRK&!FRZD5*^V<c+L>u%gl<T5Ux``Y=lH>O(H7^KFm`7%i-;?13Ap)xC^
zm@r};-_OFJ$<(_KEg-i~a@*5Wr-uD92Mb2}lPQLoQun{N8-t!kH~mAx5(E$iobv}g
zK$u4@w7ZwpAALufsMqY`7ifbG-6_c47`2djo}_}whDVSF>W>XPH-1hR4uo`6M&y8d
zY#aR)-DIuoV`(@n-^02y+$T>zBI>IHUzCp6ywaCk!DV~c2S5!h@~a{9p?gIP+qNwy
z;|gY!JsfmRBxltw$xn(M22w}%au_E#O4EhV;gF$1y*scHX@|=0k6T)lyhpmR$tG@o
zfU?g_=|+C=A9Gj-OLK(GJT=NTiOFgru@LtYeCus^lm_dAss6o$)>1&|t<G2V3Eaw&
zw)n1yPeN}jh%dzxK1pbV&xoamEj3z608jidp>x#w(>+9q=I9VcOOWqBi3j_LM6uwE
zM=^y3Kpd4Q#bSj*;sOTe2oDt6I4KvfPm4<QldlRv>>{S)u>D+eQTuV~uzjqXTy(ir
z^_J!$sUbTvi{*Gy-m1v~35u&&5Jno#1ELZF(ef{(gy8#f>0e!FxozN-b0qdI@-l&6
zyU~+%_b$Pw@;us$*@Ps3@z7bAR|!rANrv0I&|hBL7fA7VGmWq*S?6cZK~evWsUdnC
zO@$zdD(0`GTTKt#sW&xrstMx*2*L*qv+)|d=o#W&2*%z8I$^^>JS9ONml7!%<Jg=f
zQDN)1tAuoU)sX1fo3QPmo8-0kJY1d2K7CMBm5Ra!4Q$eqb8!N1wlX^-dyJF=SbE&B
z_$7x-)Io5Sx+Jp`vqEmTu)feMeGh(S;7#UVNc7!|xP$oth}2z6=m8Yrjye!d<j!9O
zi*_ed#Nsv<J&*y1?356_I8jYvM6F-H$rd_-*CFxOStJktZ<GXJC1p%^5-dXk91>&w
zJo(oxyV$xx&+^(H*n|+90{bZ6uB0)Fx>t(IXC<1Pn;QDaF7-1&BAzaDNZlwIgj0e#
zDr)`U%fcz>g|IZ+EH~F?xk9*#$}ePrD#T_ArvY@C#tmb6H5Tq7@k%D1De!@X`rIt^
z0xs_p3=U$tPi0;cHi8JBBT0lT4wscnk03eREnY1tA=(BNMwe;nCXuLs<YQyT-SDX$
z1%7SnCR@1mJrSUK=bu*lE`h{y)V@pcq1C>{ctvjVv$GRRNq?{fr#+DF!oPesxf=^U
z%tiMg8}<kr_Q*a$aR>=s?}eWVdQmDgmQ@VIr}3;6wt!ZIt=WH*-mO<bSTX-)p5b(y
ziPDu73;^$<5V<X&H~WCFrw?@-ofX`M!qqE%##Qw)_AL_1%_BG95U}t_7xo8=`s&nn
z9%~aR*cG-ekaQrw?B@zJPZm%p{<@;pEEUO0p)J`11J}%)-n@@pkFx~h)bkp$q!PqB
zGIYX31NYgv>9>=NHa@*ogK4AI-GU^sl`ch`vsB0xHx#o*6{8t8(9G?>*vN*)cZRK{
zDv}USW4Y70TL;RxtBao|Ng#imr7#B+A~BUB6v(h0XQzgTm|n%y_7l}Q>-RRE;-zX&
zfGWdUZ->|4AppqPox~!PuTK8fY>!x7|2r&Jz6XZn+8v;{efSg{=w$zh6bRg)u$Lq$
z<Xr(yPABYkWj`b394V1nROccqGixX{h`smUaM;tGy)5$*^iHh*MXc?)6tHUA6~JhM
zHhny!l`RE6zF!$H#lLB&-v^?|wK?<(N+)@07kk9=tPo`sV#2xQW(5`Vi1pfCLt`ju
zBG%@?F(Y#mBJfl|7(&st&ytO8MTxk>77r?(;+wr`rw4&Jz=*r~;7G(%e?6j%r-Mv+
z$CaEsU>>uQJR4ZMq69w-x|7jG9bh+^;lSJ9Kv;VbnGg%3w^_F<sL_6mi~gn#7Qp@&
zwO;BHR>$0v*qL948Ai@QiBrf77IKnP2=DbPW*JhYl~iSXl)NVRx>n)KtS-f_+jOWC
zIFR;MmW1nqR8OsYzeGCuW33b^u%@lYo`HLWs*s+PexCU4=tbODiiTktR$g6#OBiZ9
zxyQ+i`_l^Iyg5Pbc#5q;DY#bV8Y#e^tzZo5vi_J5Zh&+`rMR3dRXZ@Rb{npg(j`O8
zZ3|mR3wq#2Vp~zocBIN~Q~724`&PM5bF0y?wfNR0*hCNKj|F%0>Z+~|3!aD3I%^fa
zvsa==cVr5sy;eIz!jSqMuj9r>rjfgIPIu>$OLQ=CK`yxNU>dniM_L8gV~wg!Edm_w
z3(20Z&-8Pg>=LLj8g+}0^DfUV`{QOJ4q4#=c$%aG^zJNn9(2R`dF)1(RAzlrH4`P}
zc~d#X^aS~L4*oukzw7Y#Mf`nCBEacyWN3Z*zE0S5c#j^r^t{wbvGu`<xrSwHNl*DQ
z%zcuD*>iO#ide5_M0$s<pBdyKaUzzx@8%QS<A95#$ejJ@3hCttN-v<uqT-D^9ybB)
z);h_J9y%;A!{FF~PtWrx|KQjiGG$q?;0_#bK#vI8cL~zpC@ah!&2UVBA8i(fr%D7(
zwIAci0Jp2r=ces^a&+#IHVZuBPf`49t=<S;;<aI6>o%#2#xHTM1)Cg|zKAtmHCfH#
zwafYcMkGCNHNcNSFdA!QDPHSoDS?i;Gu)K}wCU4V^%rpM83>MAsXGPzYAUQtTZP0a
z`0d2?B4e#0Nq}v8aOkGC?ZKg&oZ(V%arG^8zA9dgAGi)<#s0VsV=C25?NJ6-Vk{(3
z`&v_TK#7V<ApZClVFq+6DwE=nMvhWBs_R6UcVt&o4^&Oru#S^bcHuQWI2;o&<T?&`
z?%+KRm}W)1^=HA;3pf_ngeW=22D{yxA4yB3D?V065XV|gg5e<XmLR*aP;o7BG;v%H
zYZf>9tD10QL~I)cz+~%OCtEg>`6O6_TNp5^M6Bsec}Nzg^fT$b(rIqQ`hg+@$Su*Z
zhuQ6`;Povd<?mrw{$Cm-{HyL$!lG{p)M&9oWA_@gZs8X_2T>gf9@m@$T{wdW2NAts
zc1`lyetKMkdvaa~g9B^0T8Vcl$(}a{+mu3XBFbG#rP=Qi(Xod}!2PUt!8aLy)M%6T
zi2YXjV=D@j-gw^^rRV4My2r^JXph>Js=CA1gkiwb`~F#@qQ@b!@N}Pj!V5g@91qlv
z@N+a*2fj|0c^Ub+hx|NE@vFX*ghsu5eg-OfvqS|@WTWCIjfDFHp<-CR5&Ve%NWsqr
z8$Y++F%&;yzZ`_02L(SiYuEVEb#D^+rh1wk!Lx9fl|rk-Nz+y0NfCYpXWRI|Z9#|;
zE|F^-u#x88KM~)s3G16&FmePpdV>&)@XQ2D7_cVyq=B3zAe#0~z-3`6sJ29%_Y4g`
z3=WHnkpv39#Q&AxYm1Gqvm1uu3sWBQ(~z5^exszTExZL?>m@DPy=JH8Gb_hEf<4>%
zgcVWe(offw5UO*Ax_K?cMQYNIg#nA#LY$>$sCoExcex|ggxra@<>ooU10pw%0C?Fi
zNn;!#0GUAY<Xyf4^8~j?Vpv-#2;r`kYK~#D{p<N1(zdYm)h`fR(7I@4)1y?o^gecm
z5WGl2j7O|ug;el==3(J8T~328M-pw9vM{AqW$8;+gl(Y2qOXAml>ws+z=Wg?el#Zy
zV*|%Uo{t2L7!<YMST2CsQX6i}^<`9zJI+8!$}cLf`?iB$Xmo-B=BUNfNLcPer4fEr
z^D*()h-<LK^gr)5;a8cNW#bTuhFnIGyEGi>T$fRFg3ql(ZkIgJh|km+xci@mqaaa<
z_S-8@e_dvyk&`XXqIiLuzM$go;C~SRgW*crqvyNWH-btzdyI>s2elw<eM12WnyR~R
z_n^N?dDPd|RB-8}vyj%C3<@5Y6okVlUZUEUg63M=zlQhog=4-nLdTcTnN&vw_8ycf
zw^HB&@Hl3auBa(0N-Le{D$4tq2bZvxVcVKjBxqYBWwlq}OvS*YGRfl0ep1C#A?0{E
zFlnkpz%H%4s6$)r?g35cS{+{epl5Z5W1d}rHc4t&U%?F#su<O{G^ys%4KG0F7;laz
z7Es*`r2Ak5+5@*b^aHXUAqrHL>N<w&%t=IYRFLf8#ldl^CMYMzWs!4tn06ZMLaD1b
zjRd>q0=Na5Y@8<a0174%1whqDg92$U$5&2Fmg8O-UwQEpe<=z!$TjCBsj06O@w!7<
zZ6h@>df7V30hFV$Ac$I5V6{n);=Hy9!e`{9$*=#2T>a8xRQ<MmggkZuLf?v9oAlJ5
zCC+gxqy^((Oevql7A!}%_JwWu4pH#YyPD5b#YST@2>TeTK*fy;Zkvq+e#$R(f7BwB
z2x%hy6nlg0mC%!cIf#_(#8@?}^jcrORRqwUHAV+N_OfUGfsOG(s|o14#{3r2iWjpM
zX8!;(DLU34Wt_$|Wy=pWC2=IyOb`mKaRP$O){-PFlsh8K>bONfv#ER{8e!}R81Ia$
z{{#(H1C#u!kD@<fC<KNtM|swoxZR-a>FVwXv4PQdyuLevdJiUb{sh4Uz=}%s<JS;8
zOtv23FA|NMcWfH$?spJ<o&u~6eM)R<cvO=?jcm}N*_|-_?s*uH@<rZ@zSSk=1B<`C
znYkek6^n`v)hs%cqi^}-7L85FQMZrPP;cWeb19SA1GupR-9OO$W1$c<1<?%ffh4x(
z*0i$`pD1kJAZ4Ll(Zrt7a}m%fH&0)<zzH^XR6yFCsYVOuYPV2+LC>&u`dOca5)0xv
zZNu2{oTF`I?qn)9LqNu^RVXtu2sy=;sbZ1EZWqeK_Mp5AH2*1xq*>z7*fYSDb;?bG
zSu`KM&OR^iBpmJ*!_wY%g?1WDMA0g7Ac$BmtGJQdZg$64A2bg9($sx9+UbalZkuHu
zRgKAGnY_zglPx`5j7aclbdIGa@IDZxyIX%G)zXU?SC7*vsWT+FH%BDob&!DNN^Zc8
z?K8b1H;mR&B7gZQIr(Vb$sj!(VBd%>H&wW)Ix_snp-wu!<S$CVZc)DBFpduAuY@P~
z7Pgk%VAIdMhZUq108FApfd!X-{qvd_2S2DH%Xw~AUO>*=eLfkk@;Kc<E@+J3>JVHx
zN*Cs$dOfWXi6OJ54&tx>5Ue|9uQ5oPh0Jq$X$3mgCs3$c3qL78&#MH3oX-A`Om(A~
z!i-<OUbQsA5S)I;6Rzy=^u))hmxB1b?6o+D#F!mp(etJ|G|Wlal2n3p)q-}epwEY^
zlyx@V6Se1T1u7e;nD)w`4wyX-a_80hY(Z=(LHzOdk`LOuHY@vPP9FE!o$G8x3%hfP
zaLD=a-gSK<-{pQVk?(Uiar}UMfBQP2tzDkT_ZVcHi*q2~1I_fkA>Hl@WYc}=!dzc6
z)~Rkc2eG<Gsa~N*#|GSIlpn6UD;9XEl37B<8Vd^!{FEI^Sf&tn$XH6iy$?{kO93-R
zn1h7_WW499vI|gN84af-{o$CGNsFx>L6#(4t&$o~i>$Ao?(`==7FhJHo(M~etUy{E
zi_K8H*;XgFQ>tDqcA&2G4pvus_oS{|l7q=Zm_!YBR_QL>RkxRI0dYvRyg?-{)N?w$
z_-oB|`R7oWx|NyPtaDJE4CUO%5Uqo2X6y+4nv{T9J-2k}JAyx#!|98>OH-Ah#WPK~
zygta$hI)xVTN~;fUK@hU#jH$g!PK96lPkzD|F8B=-9PR7%wvy26|`>KBJ=IKOXPE4
zl2`OgD*J+3OeOo6j_YKwTf#Y4-@3>CQWQKEI`6x_TPJKRW~`@`&&*#a)k1w6F)Gf-
zG>LOl>no~!VA5C*M^wGAS|Z+h?9~Fbd8Jnt-(cY9l^pYGdvAi>6CU@U9*eTx{+qFW
z7BavKsw)h=KAXli7pVgKtDY@1`fkVhmzti91y{g$Dtn%LvR&Ymz_UKcXV{^7Ru+0O
zu=T(RX>ISu!Yk@Ly16}XLj9FZ$J0^KN?&6KQ>++^4`eppx&4m)+)d2xlieU~{b=>%
zT}eR5zt)N}pzBY+ETGQPgcS*V-V%-R2PbhlWe1BGhh@Fn2csyIwZiOeDn*JZ!23SV
zF0j@+5b@h7E`s5$>2;QqtPN(rO%og(w5a5qjQAzFQy^qdFzVEpTVZ#~+o!d_gVB3J
ztcqd`_g~aeM*BWgXBnj5haLI<**y6#<H=E2Nuz1;cx;<j6qR61c9iYKIv(Kdc}kH-
z3egv@MZ2gks_W{s7Uv8nSgN*FGkZ8WW$>_}hm*qwhug!6C@0k7L_GnRaJ~VZ1HR7j
zWH^5j4DF6@V$repPk_6*=(Mv~#3YUAGD|@xfrL|97%WtvC-xj3hmH0MHItM!f6Y?C
zBQ*F-1?*+kJNV{|Q;#=TUqo@#-=>~~V0DW$hL{qhMU;JNr#SNlPq2Ywaz6Na>>2Y!
z2n5^30XC%J24DzseP{;)LKgF$W7BYf0oL8HJ`3AJ4>zUxX1@UAU0`(w{H<y{@RxWn
z+T;zUvNaBfGV8Ce<nBv-ItU9Y-D;bhs_5ovkTSpomkBYl{0|PGs?H$#!x?Bp=6sse
z>_$)HP{*l{0HjcO=+!m~CDT}DI!Nqrdh3eZ&j@!6$U598j7_1v<>DzhU~nVghrk*g
ziS8C_TQ%1BtFR_-kPg6Fx9u$SR3JnX4rT!?$sG;Z2Mp2ogx;%qwO|UKc-5*GkLYDS
z?QXQK2>?~N)sDgev%xp7%0t!v03#W=5FW_90eIMM_!U<^qgQbg4MI>Wu&8Y9=jS7O
zjY^@fA>;L|fyAv01B@v>xB1}<GL$)mKqA_=``X0{x><qTJjC05b!N9=r6iT&WGSL-
zD<Rd4luW6>1YD5xs6i4Fn(K91FikXe3FMPCNz!923o2T-qhf&LsXC;+Vt^qvltBoi
zAF|F{$;d&I0JI}wZMwqgp<GN8btVrKt<g~UsbN66f7qG^&qBi84I&1Y0GNn%yDCjM
z`~!fKmT4hKnCl~Xg5lpYDCSA%|9^eRc&P5z(YuIcvoCnfXq^rYf-0Q3o7~NTaKmSW
zb)d=7&>-7|#nUeKS=h_-xw~PoIL+k)4rceTB#akaD?C>=OvuF^Ff?(cK7tY5I2B^K
zox7qi?U7yYvUjR5`$I_%iJz=2vtNrUOKCa2mqkOJz9%T9`_hfvx5t0EI!Cm5K%i5b
z2W}9MjN341OoCkHz7Kc-H|7Dl^}JQco}-DET0$o+01%Nf`?V-iDhK4)G-8QB6)m9o
zJ1O@KO0ify%wPh<<47KuBiN80Q=-c&OGWcEBhul=CiQMaU+#j!kF!%a`jf~#!5kgr
z;x3>dhQL%wlf3tntYs8!%3KKX4RIw>k{YAl{<wc^nNsY+my@r+2HC?P=ZW;vTn>nE
zu-<=PCc<abO&>YDgpjlfti=NVIb}tg@<7nyUQ}WS{8bA4d!$<^@G<LzqEYG^chHr>
z)?ptI{K58*Cv1K7>`Qf5blIb&ALORJv`6EL1zNg*K;s{RV_H%tP<yxjhOOTitunty
zhf({K@@&-cdXi$d_UWmE?9*k^NM{z_go3lV6>VjTCV{E<Xuh!4NjsQF29+?PwH>-1
z{0|ND3#y@_UyX-~0FVLxFh<6CAs@_(VhH5~P+mUNRAEE|f$*2>{GM7i>a@x9kb*eR
ztn_6t8JgqXrlG7go5)VZR;9F9tTp1A!cMAGqPKA=t$Kr$X~ON5D6Jmre88v=uZ=HZ
z^w;|aGKV98YiWT*5$m+mH0=;I6w45=Q&`$$=GwE`7RQ2&POi{m)llzMP}>(=Wi%o$
zrowXvEdm@YY~?V)8oLITIrR(_r*!`8`BJZ{sRA`I3O!D<T-aJ8m~$B85=84s1l-j#
znH2b(Q=k*p*!6yXpokq<T721(SSwNNwf;vH&UFSXZ+^r}R3qXWJJAsS(R0Gn{1%KL
z@xU7X=C+5XizS>$<xU8&fNfLh#b`2+U4Yhvty>W<7A^`0*=nj{k1%wxSOsS}Iada*
za-9p$Z4gKGi}o~iuYfv_`K>yN6ngS$?B=9<y@nsjAtdcdx8@04uaT_%!HU|oOVf#K
z0X>viIdP5Dc*B?=bBuJN%6Y4B-sU@RbDcN8^X7Bjyw01)dFzKNuIjMYIPA0Xh;R-~
zU4svOXzFq&!y**21bN|!1#kJc?Ij4E(Izm~ACC*k!?0Kx>*r&G=L<!_H4E{@JNJ(K
zIp-8XG!UioU*`8Sc2OW3X|zdGT?JMRD)86q1{avzRe{76JdEJ!aTU05P=U=u3Y?1q
zjnjf;$@+yc4<_r*jS7!2)Q+2lgXPldj*D=w9a?QpVzZ-Y_VGgs{nN1|bC|#g!57+Z
zp~qAJms$9R!`-sv!b!h+X=7AjAoUQ6fU{nvtA_{f(CRIP*)jZmrmzkNV{2AJqBzGL
z-xCO6;(fqqcz_OzzX$Jix(Yav<69tc*D-R?h=+~vKUK2|t_@bh{h%3oAZ-0aN|>ro
zv^n%U2vDFdb=ObRJ3Qc4kHd_$tD@FvbEPLjz8!+y(7Z5bHHPB{BGwXxj-)`4ZIskH
z);Vr=stxc%M#DpL(Ueo=cL64P4K_LeLvTC87hGGloIh|=B40HuwGmyc83i}vdaV_}
z$cm-On!D2pm~94N-vRzFao(!&rVwv;6;oW*CR^B@%mkmw1Ur<O;xn0IhfB5Gh$m*u
zar~fd4@IoyPm>{GH4G$XPXuaO7zIZ}C_UNo%zG@0&*OLrP*PrvHU=CTxa<81OwW(m
zFRWZyXz_~F)NlUc38Iax2VT-sEX_^VX{x$p=zgQ&emVW;psDd_6gQq68mTKZYwwR*
zzlTi`uni{RMM$`Y>EM76i~yIpc;c4U32HH354ymMDe(Z#r#vSGp6lr7^o`rHG}%HC
zrZUp1EhVV6)7kAS3&k}OfM=qm<2K=*E=ewHtKzMS6$YLYIhcQAiHJlv`$0zWYveTU
zk?BxYpObP138E^bHQM;h&+&Q5A%J%5EX3l4eJhFxTchprAvw-K4#7*<Rg)m{o}Uei
z$o=dL3Xy49>eQV$#br;y4POG!2_W-ikvovuj~a>#xsAy5_U{gU!Puc!pdBoBbe4|W
z1pmt@LwV>(!aJp)dslex=nTSbGSjyZji!I)s0)B2vJX?hD064F5ZFm%$S4om+z)RU
zKOGj|4<2cA_^=!Y-h^1Vgr)5kL*Ps%Qk*Ht^EuN^848Jx9lUC8v7nTk>#*?Pgm81k
zR7=Obf*vC2g~lSvnK4!K1ihm%hThRwHRmh#`T3fs*lOFAjKlhmO+%|gKhUnxD8c|g
zo)PQk7*DABh=eoRDChD;!gb7A`$Wz!8g%Eiwo|mvn>A~59?`BcYuDQ8#2p%|5O-*N
z$yS;5Yn$A@&=dr#e@u{ZBjT3wzte}B$^^k8nc%O^X~oW|6u@Mwk#vw=bP&}Q!4Wn0
zN34M0W{4=e8>K4NNeT@IQ$&$&1T+R&6i<+Jl0KhwZXqc=u@gKo9E}Gj1f3O6tOsuj
zPvrAvs`d%;0%IueS+!f<&->3|d1CbuXm`yI6!~oNK#4~2Q1gUCR&IOKWaWbX{lLA=
z0XRw=XjYq095(RcypEPNEDWA-8(*q$hoJcEg~PK#@<%RKI09bY(GoKy#gsI`F`hdl
zS<;ksGsp9vz_k2z41^#9M?Q?>cZ(p{E``d;W_S7)rhg7=oWPh$U$Y{!R=(~0&6#h>
zw~VCF2O2Y9$)%6PHefh*sY~0QB=GPHx(HAkZG7hUq$5xx^kBy3yGibs419X(Pt<yF
z(|XQj2Pv8dOBHTa_~pY{CbLp1upLna7i{0!zsad86G!mFaKi<XVj$C}=UkmD!IBb;
zE|L~tiC7iPQ5}|%FQ~|{uFd+oLTk9LFt!<rt95J*1qplyQ!O%6)R}qDl=@8Y6Sqy}
z53dsicuC*F1j;=>lx5V+P#K<7bUxUbefAYCPSH)YxJ<9lMamTQyUY#*=|N#P>d--J
zhwUEqWlniSEtM$PVH~W!{zIX*(Kj`aSOrE9{kNdbTQ>$?w}@jUdaTt_`jo-?(*Y<w
zm14pO^xQGAXNW=zhuB7m!j})Tk!8A2h{dA8D1_QcsHC#TSlJhJWrAsyS)51a$Y;z~
z*BUtT_exggA}IPcPKZin5-Nil^QRKaP#MoNj)~pR%Jv(5W&b#I#FaHVl{K@nHRmcc
zj-q8NMp~IBb3t8cDnaUDm%Gg8I?5u}_kKW@7((h9C|mOc5aNx+3FCX`j2gzSLxw|0
zDM_7={mk8Nek{%dG-4GE59OCodJf8B#gG?`9?H{)g_2XJK~Sa=*J`pA$AlqY2j`Ic
zM?tn%rr5=rB4HFm4qF+ypA1>77_wpXl`R>0WpSr6VaVX<D|`Fk5w^@>$jNzhHac)r
zt@QiDGUR`t>>R0!6hmHn_NcLc!LTq+9!l!WVyw|Cd8h~5;Uwx;zc;KLe&ZlVxWX|k
zbwbRYU0p9?odDO-!}PnSkkM%-9L*wUI2L2)YdmYzZT&0?8zlM^FyiAM^i{rD`Jy!I
z#+N{Vd!$L;)aqgx60kz7!MKEAyb~HV7@Y@>7>vxHpg#<@vJ__;{t5`yL}@o;;+V&V
zrNtGjUIgB5CQo57{~jk#Or$1Hl6)kSr-dwc_X#mhGnJY=N&1m!-~z$!69QEVVrt-$
zK3@YLWVcYWNC9BC>ChV#ytHpf^8EIpT84(L?_d&!S=wMN;*|rS!+!q_;H72-^mR-s
zcvj*q^gvj$Rzzd%)KGIe%gNs%RiU9)qfn!b&wLHF3FU#y8N0s7ZSJ7q%4p+LG}L0+
zEQ^1J(!<JXIi6O_2&|U3eOnmErB@y&Wil(~D4`W$1ypXv`X4IC;HJF=IbtT5tw_M#
zSb-bB#ei0nB7hqg6aZ9-7l1bwdbmwXK%@i;HDjX-_YT?ksA-PGI*5;)f%8bI8u+LZ
zeDIl%kIxf`l*D!v@zmX0+^UGlvKJ|hHa^`N`!*CmNMpa|(ZTpQM9O4V2*KLsr~)cS
zBva)WjE~nQ0hAVID{3J?8!LGux_k@x8!LbhF*6nkz#9t$9|9urQQN2tik!l|EesNB
z49C_JAvs!1lDdJA3PA{;`3Sk3P^j4UBCN7F2=O4L(Z;8zezrDhH+A%(_`!DViyj$_
zk#SNe^YTu|#)yI{N2c3Uj=>n&S^`+)KD(k6A>FtD7!d<(QHy-T_m?T2(u)LQOlZg<
z0wXaZR^ME&c~OwkvK(MUW4t5N)p6c?Sa+QHf)_sX@ls7#S{Ux`H9jOW+W2(!no^8~
zgL}=HQoeg$_coS*OtB+#W>28P3aA{hu2h)@qooZw*-ohzZPGT<WMT=RQ(n0c$~A)2
zV!}t$D_<P*qI{%&yAN$GbJ<e-ODE>wjrr1vS<c%G=dDkt+ZcKhcw3>n9)0GsLnc$q
zooBfb3xUiRdJ&~ugu%u&Pp140hntckV$BiKd(9RWkg6)gdIsOJ&#44~XE`%PV_83;
z%XNF!P3BLg2=D0XW)9rSA^1hz{8V-Gjdk;Pn7SKX?IxQgQ^e5d>Sm6JHQ%nApQ>)Y
zv2OkjQ}<)ZL@SIRW{S^9tZM_V7pZ*`GuFpwIt)EFFlmnLn1h4<uz*I=nk{@6GVle1
z9G>OkGA@vKp7@kyyH|E3<rfzeAfA?R$N;=S08AB$h`Ry!ZLj6!1i(@-`(OcZ;kO10
zfU#V}kXmWUH&gRb7LQchW%Ju!*2~#Pu1DE}r0qX(PY9+EuF+>Lj&LhR*QRXm%5bXY
zNw_X3N11Sg)FOCD5qvRM$fs(}U~|P)uCl6-9&--h5R+!y!G{-5{WRU#aq%>a7-ouH
zut++WvY`Z;mor@a;W=h4T%{?X@OBE6g4-$Z%$F{&2cXGHWthR3DJH-w+mli2^;6l1
zAhZaA(?UGS99}*JjYH<}527q+Nlc$$dQ6#?;?jlZpj+n$;ywvP%k8*{TzPV#1SN!q
z-`m8SC2~Tk<C~;_*9{R?50)ku%yMue_CgVDMJ+6e>l9e;yE!ipE?5-AISUZU>iL5p
zL=+H_jLaE=(1U~x0E7T)FJT1MViAN{ie5>|Zx(kk=Cv$cIS25-h4`bCB}N-XjVF#<
zDftq%zN?B&wBG`~jX@D5m*CV%#n2WOre=Sbrc2GE$>vm$*s6Whc&3GK`4+I?exOF^
zQS<Hu<6uk?;};UsY5b!`8wHI(z!&T&bwj`)K)|1<H7*B1H6i%sJjEG%gy75LcMk!@
zjX=Pcu=R+dufhR?00Dn+E3Jwl4k`%2!6Svhzk3K89)$<zl;8&o9gp(vv(A&*IKSox
z;d8U(o@6EL!+G>HZpZSw+vdB*kAZI})y2(&$}8(Est`WQMeYR>8z>7!`n|Ffx3iF<
zE_p@a;g(l!S(uYo`-8TF<kcs?F<4#=j6+4vUJ2Eup;GKh6e>mhV3a&qrRagj<a|;1
zD2mSP(?@1prF6k)Y!)b$3Oxxy?u-tUY!R&tK+ebTsU&8DU>yeD9F9d|%BRSZAqL(P
zq&1R2gcA(B`U-BB#9|<>K0!T8lhreZbn;6Ok&ILgA}yv8t8lUQtaM^3xR3wRi88#g
z<KhMr{bt`m-HS2tX(%*uXQjH8@^RNZpi6KC0nD;+qZdoe<D1Vx9fWGSiW)mMH((mi
zG-2!83dzYtiDcx{6KFn-%43QjgO-^IAnu-Gs=VTHnIpK1;hZ9^q87XwW?{31wM4CX
zQcFp>)WUmzFGn!{WqySzex7<E>XYzrFVd(*)N%nOkiz5-wMe+23X(r!{q}y5*U3aF
z(&PFqmYfIMjmU+2Ul5L+EM|)&TVLSTav5i*a05r@?xrfYy&#MoAt|PeSm#P}(0lE&
zOraOXeSuBz0G<e2Ckbpr*6aS8ebHVTkHn^eg=165$LelOo0TC9SRaa2)n-&nA)j<Y
z>o!RH5f~id?AAtj_Ub`4AX{SR8({5aDpC{!X4Ja+KEbla5<Gn>&|J$fgps_PnTHq6
zBfLO|MdWs!Y2L&xL(Ljv?1BYCY(0NY)b<|mJO2%L+p6BW)$Z;R9r$?j`;WWE@mId4
z`GQ5M8zb}iLUjp;S;1LMiCdZ_BUW!aB_p49myn=Ado{Wx6`#X&33cN*`rIn^i`BwI
ztR-R{DYc+Wu>9S3iNP}sGMUP!yM$&t!XRw7p+z^n3nA(@&HSdTE@2^-T|zFa9<-px
zIDP$QUT2anp>F9!A3~SVH*=mM&4FqzRbp`v_9PSm@vFMAz(z*;gupg@m$3VOIOcb{
zM2chv|0wAW*{zG^PuTj6YAL&fN@y)T0f6s$5ih?>xD56{ATF~KB}PJBD|kxqNJ}Vq
zqN{b6ASfPm2?d&~OGrenO9+pkOQ_rBophQv(IwPvrq-MH>VoYq@dUupwyQw1czO}D
zkybmupr)w6xE~!RYOPmrIjY>ESqdYrM($~utQ-}NNKR-Al7>o*Iov3PO~PMLrXDZ=
z=dfXGMh+@b@18w=)KGmJ)1?tY<w2e3w1O+Km*k*g6rkb{&VVaaJ1XDw(L)s&IaJkz
zDjrrVJrL{srZ)KM4C3MgXoL4+*!|eF!Dp~aHAovgZ527!J$r?(`_XHI8&L9KZE)vT
z1{V#9WA_SP_$$os>QtP%@}f2|BjvVJYmVi}M8<TFOu{rQN?62I)DpWWzPO93(h(`X
zxQn`6N3`$-s)pXIfYm!_VfKd53lz50hS1ElzouUMK-BtQY3UG4`F9~mjJB{8T&}Gb
z$`TTR1KO_~qgbfcmsI|9d77&X81nEwJP{<wnY|j$D|zpQ#7KcuZRLVJPNmT=_{|IU
zPS*wU4AXQHvDRlF)pZwGBF>D{jZDISnX0V-q)jReB<Phv3oas@BywZPCXuodI#|k)
zNXZUYgiRtbn!1a!NhDL{9K!XMNU{M*<fffXBH5hdE~)|v<%U1LxQil&groT4E^4lh
zkS!y*qD;ZNKELE^^90{}-V=Nse<yD61S|0u#oyO|;R#-e-~C?l1cMtr!N2{|6Z8}m
z7I}-u>@(Ikc9?(rj%s)Q-o$$`uonY+F|Zc{doi#V1A8&B7Xy1SuonaWmoeb@FVIJK
z<u<7^ZGRi^#@8?F;dISZKHi7(LJhn&MNSR#x_CIisr9MVk@6SowL>j$cGHLt#yj=v
zDs3?4r;EL)Z3*UdYxwd?C+0wU`^+OeTWlwE?zyQ?7ZX0t3r&I4oWyjP0pr++_goc5
z1DlRy;_^u>yZ%&N#UuPO$4h-XA}T-TWO_9zuUa_j=*L71UV%p8ym}Z$aL#Af`JDFI
zr}>LB&1?*g)ni`lqZ_aIXMt{PC{SMMav0%(^ab!+&@Wd=6lTvC57%><wHp4b`rr!>
zGio?R#S_Kc0;flC4#)%E@Kfhpy5JXQSN`m;vSU$Hx)OFdsUDXZ1z*Gx<r{Dtg~jR-
z({`BVy8KNjmoCz(BS9lxV1t=6md0^;hBFCAL~iao5?l*DmA{!@S_!x-34RCUE`>nz
zj}QWvC<XB&@GOiMXU2=ML9T=ThiY9bbIGmb>he=~vbYj%o0Jo>ec(!LJK}j>7w6!w
zKadE4*QDIl0!*<^>ctfSXbRkw0QtbNg<U0bnEsYyaNn{gK9w|sKPi2KF1`f&{nnYc
zNNsR!lTE|tOZEo(Ho>Jq;<#U~E)82-R2q1-;C%!&LQ1#}p`StVdI<j%@O=nJlTKyu
z*-&elA&ZCK=mtUVw&}NiQ=ebiNL-u_N7fOCx%)f$OX$C!Pzg}U-5c=rvg<x2`FX!w
z3RkzWEd!G*<q%Q#ng%U|PKY)B7do?eAYW*Eh~zzP9{6_%Z3S0VNvKx{o*ik!rGB{&
zOWj(ky$Pj@>17}7!7=ty2oX>HNmd6qiM!2k8+!2~#2W1r!?AvJq}U8R>dvs1e?eIp
zL*0}lnM25nbe>KRy%1}{zw`*y%W}a5#!fG`Z=J_JVO=Av=LHAwvUMrG<B*7}_(JQD
z{NkTQA$4?jAGJ<Ud`otL%U8NiqXU=8!psVd1NFFldy*8p{-~&{*nO;xx4WUv)`41K
ztMmX74fdra$gE+S;fCo{E1949IJzZLo;Kcw%R1${1ANf2vlPXqcras(2dqptOmZp2
zsQvSdm@#*e(9N$TL%NvcrHqKRP4M8PjvyIyh#v_uFBUTItI1rZ$lP+9M%V`#Fr<FB
z{};^-A)joX1GVbL2>H$=xA6)Z<*@_zB=-tey#i2yK80m*x)NyqA;W-Gaa?CRUg=W~
zUYd3^A{HDtPh9|pU^+O7SPv`y0LPIxS$1}rQ!qWR^l8s47dWBHneLg&Gao=;L1F8t
zp#>d}BrfkO8rrGwzM=~SPeiSACTS+4OV)o8CkVdf{wQ^AJUUxPUr-$c=0MzEUgKxy
z>;sZK*+V%Tzgwyf@hZ<$Vas2l!R&+F-xHWppWNrA#zS2)h{|3rF1$!o<%Nm$3gQ=Y
zxX?Z$Cjd9LuQWeA?6@Tc@WiW!kaj9r78fuuE#J**r0rqa9<~IoQq?s@dxki_qqz7}
zT(oJ{(D46|tMhsAE5<o52Y-&6=D8aJG~ev-*<nDlQZhv__(d>y9l`Kn*g@b|@?1!&
zrL9H_@6(G<lq<UYMnkD5KE`O6;t`2{iFEbxx~tD&S3lKyT!vFz%h)4*FA7BSFg2v>
zqgb}h@182j@uUU3?5vYD4c-Z_!Vh3LSb%-Ux(gqYSzVUnB>FojCz>AQsQ8lOjYRUI
zE?=__70m^XuEY->4*L6f<rw|k@#e~)IhOZH^%}QVdFm%KQFRI29|whf&DzprVRoDu
zf@e7-ucD^di%Tdy@%<zqXja12NzR|1Su+K?Omf0-QwI#g{pAxH4v;EPBS!cVv%cT-
z|A>d1e`D5`z&~I8QB;#!XQ8bH^;kH97p7jba(=QPiwf}pp+KjbxWp;cv!`B_&!ZpZ
zmy6%s`~u9{@)+c{yXG8TH?w>uxYu^-+7IusHy@G<(D%pzA^IM<ESa7?G7CK6syKQ$
z9F4F8d`;br$S?kXb(hqTZf3dZ&?fb>LH)GzN0<m4j;rXv;iX*03$+Uib4isRA|Q-*
zyqnjVPp&H#&VDgJ*va`b<U~WUr5gG{Ek<(1{;r<yB)!|6^c%L!*kUwnaY6D~Budq6
zi=;$j-m=uJo&j#hZ{<w%5_l1tfdtrBc{4}b5~Ya@#P3K!*P|y<OymB+(<ngeR$TpH
zyjTb?_EgO-myTSaJ8}g(@?vYp=k=Jau#g3g%$luoxe7B)l1%I2DM|D>$+XaVB0tkl
znTbBpIP9eh@Bp6sJn_RZd$8phu+vBABi5geB8Gxg`{Dgti#wU;p_^?+4@lN*f|O3y
zZjehp4@bvDMmiDPj6$fxp^$Z0^i++{!gFw`_!ZhPG}(dsG1(N2BT8UtCP#yIKnbWv
zd|&NH*|$DOStIO^vIHG>_eX{RXSx0;0so5rXmqRbMY^>fSTJp1_tL}UU2p52<;Zt6
zBY2p!z=g7Eq-Up8;VT&q_q|q?a2)1+P&In<eOXJ_&rSpb+6ElQmvwKRG{Ue8Kh~J6
z(wDLqH#P`I(w{Z_WU6t*eYv7sQ~<fZZ}w3Q4!kjcbn;l}DfegO=|lO$vOVci_gUzB
zEVPs=e=AQ)0cTwz$mR&WwWH^gZJFgL%PLU-iDGkpfq5f_qV{0edT*SYGI4kb<ZZo`
z7}NXAV0omZ9#=D~u~kj4;m#F3(lRT9=yf>J`pp|CN6?`W#KGLc9jlmy7lk1g=`6WH
z#b>?-ippVI>H@qBz1gm~C&t6CHayqa!QJB76~Y=<e53yg_*q<=OuB&^&h?d7SJh+O
z?FJPAYuHyFsiNMh5*{N?uW4z)zy*zbthAEut=TvQ`a~TV>iX!YJNh0j<Jq+!i;QRP
zA=mCnjtly9VjG4I{?pxR7L-kw&V|jkc7n_gv5!gyJ>DOQ<3Yx|WpUh~fLClMtA`x)
zSAh#KAQs#KcP=m(lp4!d!POy>m&o-GCCbG;0F%>W+fg%K(JM;^dA{o8aHekY;oe3E
zf*ArqN!cClzylCCoC1YeM~QY}MO{%zGeCvOnTV~3KiRSs74aY&e+3kIONys)?36^P
zKISB6W?^Epx3F_sQ_6j}DLK>|whr7!<4xT_>IU!@jN{-Z`%2-HdFwp(8I84;k6|8o
zNXLXtKyu*BYxT*<pFKJy_gZ8A$&^tmimf@I6K0m~s>ZP@R}1CR^L~BLKuJ^Pk7yBZ
zc(A4mxDbLCye7-mQwPbsO~4ce0Z*5(XDWu@A<%NLr7bS6TI?L8%uO#?NZLXNO;?5m
zo#^Mdud%vH>ikO``!&QsZ*oDksL<8<HP^5hX6Z{-!(tBQmFfvBch}e%dB}$<u3VLn
ztXxDvf7>Ejr&#A=U1z%D5_u!e)f53Z?<LO1S-#>N&eg6dXCC23<a!j4JzG%8RQC1f
z?j+wr5*F(uidb!eA`%5Vuxx~8Z<D5wY(OY(w0+Ynq@$V3oh%9s22-^rRE=pGEjQp)
z0g+y(yHg8;17iEs6McW9@Qsf+Yhj0R8-Tl$QoSk9k5d$lUU>Z*a>#h8^ox9DU+EW0
zb3Y1B3`7trGlHW>$nt`+2V<}Fn>vvi6ERju5!ow2JTcB=PS(eHV_|tn=H@Dz)*Xb(
z!h@4%CJA2cm070W^xr90Xh5e0n_<PIN9OOvn7{Xe*FRdrp5SB2Fq5A_+7~;Oz7H!M
z+RiUbXE@9GC)@+%<7zvHl*|{&oHnk$q?}#5jBP5>r<jN%>i02Q;mP+<mrPAWB5Ggp
zovaLsSxqMwqiQ-SJ@iHMm@6pR*@;^%0tQzrlzM?Ny$hGk2NGXrP)!#k*)A`fzYQIe
zy4-}gayHK%Tj?!d;EjXs3QV~jl2axJE(=XlXS*RI#R`uQSRQr`ybo+(Wl5|GxFQ(d
zpYfWk4pNtq*8+{d?B$v1Kor>leuI0622pVyS}LdrTi1CsW}&+%two^8PA7z+ZW^k3
zBG!%qrs7(bGFehK*!PBowtwvXU--*qAJkgs^VvMEK}S%Ax&s}&f@CmZUV4}_4<4DN
zP4u6KK=ol*n!)zuyec06koqBETQUFIY<q?+2OPCmC3*toh&BX$5=$3O=G6$7o?IpF
zS^j>NX6i?chDXKivt-ZSh~t_VI&d3P&0`Vk@g+<Jm6u`Ufk#t|#y^IWE-E|~dJG%j
zMQC99?AEoL2*rjHjwQgKDjNEhc4Xf8Vk71<`kJ-SL;os9*rhzx@}nC-0w<Un{OEn@
z8uldG5vpe?L4i9R>X&d14qF$H!0X&FVLM6s6BLg@l6Zm$4k%*KFnsiQjsf0p9rYfo
zfKugy)eB3vFp@dd{14y|-}(y4Ffm4?Y<mSD{wa1Vu^-j&wu2G?(xZChlL9#=2Yu*s
z5bkq5^(7<-WHHQlYKqw?&Ftf}Fi4+0urOGE>X#O0KMR1&2~D^ATXA0TCP(Opl}UnX
zR*#V0I$KqQ){=};kX*p*WI056_(y3`YoR2j!U6SLfcQu!mLnXCh5keB@p`hsPC^nW
z8|@2<6{cYiH5{i<ysB`K+noJ%T&_C|)l6zgI>9PrY-+$VfyeX307w&9Tie@&DXGVE
z2T&u0WN#p9oF(X=AO|=>_YIYz#&*rFK2Oh~Kd5^iEJ8EH?re7|l~Nf~scpFxuYZkI
zbwvG13(>~c+(I;71vUdOL2BOhx{h$<mSR%&NiuMIkR6BD5>Z4HYV$zm*NDbc5T#ht
z@{7ituD@x$tb>Gtuxw*11Qy82{K(?TJiv@f9q9gZ9!z&QFd4R<pr#NGOJBvk0cvp$
zy{%U@U`z?ghi;Eyk)05PX?vHQ$?mO`cuJo-0^QPBj|u-!xM-jIcXy0E(N9*7G~Q&j
z#BD{Ud3A}HR|DF-x=^i?+<6H*2G&Uw9sdjXCaZHcDN5Kz;aXvLN8mk(L|VBJ;Tgx;
z1mubz7QCDcS`IowAO_Y}Vpm2#j4ef5)Lt11IS0oV3Z%2CD2bKJUN*so4c<Ek;r{1K
z)gb1ifb`nv9ShRhD=DSsxqewap@F3Y29_k0w2#mbwhMVRT6&0yJC;X-#fk>+Ls@mv
z;2VQ!P}xt;w?&R(&SiTfz=b0sz$}G&+R;dYbG>F5G>dStK;zdopj{%I!b#)5X2b_R
zo4Tpzh<>#dFPIi=Q9rw0FG+`<VUi)sCS>?)1=&+H!!J?DzUN|%>}NzP`y*@{5PFnM
zCj5|z9N5aeDfL`c;TDZ}elU80%J~R#vWs9fB4Q0#I`0-PYUGv>Rnledq*b;Y+h#Ou
zlQB#sx`2slxADF#j!!D^bOio??0pS<TveI=<f9ncsWXKXBUFgkN;L&4MFmnIjTsHt
zfh013D+-0Cq@^F&OiE!1q)g&=dOL2}B`dD1!peWe-R{D=RjX1+Y9)p3V)@XmS~OtQ
z8z;LPHA>KE{?GHAd+*F7nS4|b)C<4f+`0EX=e*}V?|IMrb<Ryida?XaejP%HWf2<0
z-}*B!LeIJ<<(@1KLa2penW2{0VGbZtYur#v^e{puiN}%9qNs^Tv-kZ@)I_AY(%y7s
z4r%sE6FO|ZjR<<qR-x`oojej1T5d1PEtF!R*t6N66Jqd4p%&M$K~D}6dwfwGr-(=z
z4<pp#zD^=a&S>v7B)`Dsz*nk~*_CMBl|>yIO$e0Wia)!_2TZ!!Eo*MK7275E@b1cz
zW_;mmH>3%Uc_@gxp_TNvAhMFt16cKwvHg_tk$q-OdA7m+%nzLwAF?73B{nY)#4oj?
z59w=R$6K+7;6nC3Fd5y+)qsjSxNv8n1;JNzpKJPp04`8RW};}%vO1!PvOU$y4J^6{
zEx)UvWmE)-pK$_9ZT>lzC64L%5hMrfzkfk6M36M}l&s<$;-r~jMIL@-=4&3Y_^LgY
zJU00`!z8eizv09y9L45y&pG4jY5hur=xfK|V3~3~dzgRbIsM&+4G}us=1Kxj`7uE6
z1CRtzH8=_`Y@~*r;~Cu*S8!4l*WvtJp0HzdiU#{+`FNxadW}KrL_J`OYH*|Z{O~#S
zacUj>;pJXE+(-@auai>0{d0CGx1KMn9z>8Yq(=J)&nSAQak`c^*q_SO!_#hz(pG1G
zJW~%?Nc~E0RH6m)iONi;-f8sOvU>aSOeH)*+wIgv<5Y6GG<9Td(41vlyG3zrd~}Zi
zSx%F-$J?m$ZIjb+IuZ6)mer=jPgi_ze13Xc9)6N_>4xIZ`+-w<6hBe*O(7-)%hQ~%
z?b5doR>SDQew4s4Yz6#47H2#>4)EU)I5v+qtvTP?9sa-00DHsVl#0$bIPffB7l+1i
zATLNo77>9moyhC5X5~1LFnGrECcRQQWD{}7l*ad_@8pcHN1I!+goXF8(UTO{xMIeP
ztOo%XEr%7fw5n_Bns$F9Gm&S@BjlQgW&*yV)KdS)v#)8(L3+xb(B!2qb)$5t*E_n@
zjYgM>U`><aijjt6mfYp&QWqW?O*et0H)8x<^$1ik4?k?wD41dk59iDX52DhL%8AJS
z93KIeI^Y?6rXKezqfRXKd;J1~o%gaVfK#HEv&>ZecTV>q;SGiEq>h)f%$VmlOZTI;
zgJtF|u1xX7f&sb=Kpc-yy9Gj<)x=o^dQDfIC|bP9@e;%BAFPbcYd$xl%+n3%1kP*2
zP{e`=@Hn3V&H@6PK30r#Sdkw!4@hNO0zu^OI0e$jpgfMRrEGVQ($XY9K%M>m(MWj>
z2P>mQ%DA$L<fu0IxjGlA3=oz<=F9=9=saL9KR61T_0cN;q@rP*A<L!4K}zeK!#iI}
zXY&py<#jGt86i>`BuBMT3T@g&Dg%TSmewecip(2D+R_YZfmEav$GCDqb&%4!=?veS
zM<eBRZnEJk%e0Zz6Rg<zhOaC`S`J?shVSK?AQK7OKft@`%+GtD8GnAR8?$VisTbpO
zciB$3lY7+sWWJ=nKHx5Z7x!iJTE^-4I@M<QS5welYztDK6L6R0V4l+Qbvg_Pj)Qaa
z=RYx}`N0ZznSRpL=*HDO2}IH1atdZ$X`Q{xDXm4`VaOf1r9C-Z=T1AIUDjaV>=fmP
zAzZX$d5R)_VB`*Po>y;QV2ZwqyeEFSM$QH*Tv+jJ^XG{9)5|ptYCQM*^wXh<BrNXW
z0w1_Z-r;1_c9TSo<I2XvFX8pF^+9Y#^0GgO9ZDQ8_Oj*biVjuQB8>POG=?$5P}uPB
zBj<+#x}PF3E7dF1L3fCeXw>%%aI6$*PtFzs4&*=oh-?5~1{z3KBPRtlCT=d3w_Ba*
zQ$__6py(%4{)BEzlo!EUCLJ$9eu|=gHgb}e!I*{3khn;;hf{N{Q#0}`z*eT_^UMUX
zbO;T402CVRYgAQ<Nl9=3o$yLB(%W|o%Je;k90OSeuvbfQ{tuQ%An^l(gyG(-W}XqX
zka{`5#1$w~a*OnnYW62o23Gu$MC%bb2@GnVQKd&{=HoEN%yH!hVYaEGM|d2gUMvJg
zZc+w#UgZ&Wj~&6=Wc7TFCw&eWts`~zmLF=`IgtPZ{LYj@!VZVj*##OChElxx5N~$b
zqB^L}XuVdX_hnI0{s2-o(}d<v-h6$>5$*Wy7eAS!*MV(}yZIWjjbaN!4ffY?5>l30
z=K)m$XpAc#@Rh@acOrOV5>x3cRtiN5Vz}P!eL;g{VuRue1N38Xg=4eFV6)RkK8MOV
zH6r^a!y2B=9vM&y;u<-HTwB}JLtnUTc9_Yq*=hU3Om=b(&&<>##V9s_cmnb}GWCEf
zR8RVYoCGk~BQV%`j@mmp@g$#riZG_*K#(GX9hCe;%5(V2W+p~!D#;U0dW9Ue8CDqg
zPW+MAAEVuda3<rpD$Y8E1dP#hD~ILQIhk1!3077IH-S>-{Z*Ma%;R9-0ixI0uZTzk
zKb6eIXmeE{{#Gu<H&>0sp~%AIs;aZM)`*(Uq%}3dKR48~tjfsyqc%m=-|_NgwVpT=
z;k5sBc--?pDGjub>6B(7AjtNGryU?q!7xCQe(V|c=e_|rgIAF!%xI^1uVfPOo|8cW
zZsy7Yn<Dg*Ggp{MsJUW_w5i>k4}Uu|7b_p~_$ZB2$kj_l`Z1pvItPB=N5Y>xleE8-
zBB09B@A5)w0ZMg-)J8$%F=+oFd97LN{W$(XNPCb%A|bP?y_1s1L?72bK6>EH>T(=~
zjT;?(>EP&rGeG}?nsX%BkRjyF$~FfRGY=<gncD++xyOR2-RxIzv=gd#w_x}YabsFn
zGI}H(kx8x1I@l0Ir<ykB;7x_u(v0Chcpz&$G}p{>bp@5O`lU&(a6tqaj%ctE;=y3U
z9RKC_oPjo6<1Jz3Ud3;a48}kk2rS~N_|;g@CL3RAcg|?u+cSDJ5x;>4;{lB(+`wGr
zwOW|xJNVqy|BwIX=utL6HvmXW3inV_m1Fw0Zm82C#r#Bk`9=9S$Od6f9*k$2jv7k_
zJd=!?hgk-@)uB)iJF+p<{yQ>+Qz^IwgX1WcP9~dtHOyqg+JH>90jTL&nQRoW$OKU)
z+b*#d4SEJimC1IGDyMQztiYMHOq>905JqpE`TPQOm=^gi#A+>X6I^2R(m)*Ph*Irq
zpnEayAb|(T0mUgfhX)0+Iizkct6^ptKodCL948DI)7xxc>t(@SV1j;@S+QQG0BFS0
zZ|K8*E-2!qJ$%d8Jscb=!LKQ$N&I)~ILTqz{xnCpdbY-4_QYYzS>G7Vl<<auDb1&D
zvSSnG`9Ehnjc#*ixXBd9nqYuB0OUkMGLENE`^QN@qy}Qd5d*WCj%{zbKuaT3b4d|#
zO+9q&L1#p{h2@C0upGfC>WqXz$R2kK%Motiahy6BZX`}>3rjC}-{CE4S9Z2t)52^f
zou`mSBHNHAoI(3ZXD)@>cL39z$jRV$9F0!Ni}7_}V{$9<Ys;u7VE&lB6YALkIXRNC
z16JffGI9u^Q{cdz7)*(!=ZFmMd3C&kmC>?h7<4Wmrlq!P(zg_pZ;1{sVP^C?vs2_R
zri0mj2Qx$-_a_m_MaVDH;3%I~R+q+NW}IR<UN2#m?e*$H+PK!^snBengV{bSvM(7q
zXhjc>!Ys!VHUZ7x8H2kHn3aNN)@vYTbX-04<$9?3KVJT~gtHa~C3Uu9ZW^!Bhrr~H
z!#LEPJ@?}XhGV{)HQfW}wgs*AMq&1zm-4w15wK+cc;D#7$+Y!<n(#wQx|l)$W9JO$
zBk&#3+<_{gEu2k{NT6Usn++1*JeTsI3`$&jl@_HkC5S`8;CpOOK1cEbDhUkeMW}_x
z5Y;Y1h5-}>wVFl}P(SLYImF42c96ed+Tjw$dK&EOy>_Th#+T(+-v86In3H>lyk026
zgUR|TG>T3JxR9vzSJAgbo)SOYIL>--kXXvd5kK6HfjlTdFGCk{47u+kk4(f520S>1
zAIx*EHy%HHd+%s|FhJiVkit+Bi`dh87%shJ46+}3KLk8|TL5qwrUgokH)5UdG9w?w
z$S+%z4TX_c{ppR|AdKVLG5*wi$LFx-ce5VkE<B5jn-Ln|wAN_0QO%XvMm4vp-hRro
z=#0E+0{NOS^qx&tS3!6tqX(_X!9S!zfbreZ&-I%_+_4fPh<kK3=vuVc*2Aa#&m2S~
zGXd^}YIm}m_*FI>LugzRu{<$#-%%HMZc)EhUZ{TkmC=FLcT@X9(iXMIeyjLSq<?^T
zn$C8!D+1t&l&T1A@~)1xKqHML7}Q;pOf}&bJq-AkE$%Qq2lUwvKGuA-zYp7olV4r1
zbbXnLEBdveznUWZ(K5bYv=6_%xe+|(R?H3b1_b;CWK$|~K!PNb)f79Bvw=LWAmxcp
zkg|<I%H{UGOV|@+IGT#2HAN5TY#*gUsnFh&om40ly3)QOw@?dOUjvUS6YCEmzgxr!
zLUzL@us`s%QFE1wyC=I%t7lWR<^=xC^LY}vPT=qDkB*+J2IxgjbWRPE8D<{7pxMt2
zB`&jg*7rtt&Kv&nX!xLt;E;)8X<DY9zsExeqZuvlT>}Ci1c8UaM(EayPf}+HbILIQ
zY-k(HrfsENb5;&*FENNNc^dg?i?FHxEGd#^wOAogP;AU<;o-+UzbU1L8Cw*BBhQj?
zo`wg4V}GJ`|46*jT{7NgB*;j-oU(!bp1V!6?1k43k5mVs72A(hLq!(`;>}G9O*G!B
zUx+E-t#ZG82fGNF*o9mzIXgr*d{D&|j_!iiRd4^BT5~fs4d7BM*41F&qH1)yJ7lDJ
zbE=vtL9eq@V3wev{Uf2yu39FfMfSbS)9&R`cYg1Bv_6{r1G(Xx<@>%W9u9F%AU*@%
z^Z@DM3}l)dvWJ+0xS2B??oV^t!w!>%@W`1C7Y;~NAmNH?6?u5~m-9}|Ol_sPwcVIo
z+p*;7Owt0Uf{^Gs!I=sU66fX?ds;l^WX;#R62dt2GIhK$w~k+)k<$?wY0)8XI^irY
zr|na6%k9Z2m;T^r&CX1toWnW#g)XuSjfaj$W|?ly&#t=CzBZ@oS5u`Dzl`T!&9$$O
zkOxvYIUyx?C77T{{u(!hUGMuuTCACf?HNxjCZ*n_Z=y*nw~Bl=Yegq+X?E9Q+Jy@A
z^<yzrpbvYChw%{p6*toYz7-q36&&FZwINOOI#iGv-%lT2Vfvq8Tfe+BUGy5)|4s@y
zcE=}njhY}Cy8{$4?(z3zvA_2a`%0Pm42vVaJ7?AMAmEiZ+T&s{8AvtV-et*$Tz{=*
zxpT0<fB(ls_zN=q(Omq^!>e+A97E_VRS)_&FsL{o5`&5iOB3+*d>n)Hah%AtrBKGs
zVjPYICkD694&WS)ufLp@N7ncaLI$~(;*Y+N-D8?s2Jw|y>V^04QqO7m<d?>blKOkP
zt5~oMn@OL<?p2pK+ceBGm{e-zD2CBnC)A(u>|<yC_Gfi6klRVD+zQe6@l(fH{q&xH
zfzMt4><_<~(^U^BrNY`GeO>`i;82~|NH149JxJK2H{eA%7JbF3#%NI<{6&Q4n8S;7
zQ89w}nW}KU6rbv>7WsJL^zE#mOh*Jb0|siUvrx~cJ1IPBPJWYj{x~BEl}5h8jbVg@
z3O3<5+JR%^g%Cv`m?nPTy&xFm1ouX4cqp6e;Gf`%XmngM4kb!Djw$8ZKHkHtz2L}l
zSJaqA(1SSNC~qSzCxaCsED>P(i?7RF<yd>BcASbvH#&x|s=;nReyxcw{XQI-OT(=B
zmMd>WFGpTp|6n#9H2c)|3a^`uu0$HuO&&dq6(w1V)bJ_E!m;>>5RTyc{=bcn$SFX?
zY#&#uio84c{OUf(|2GXmJhuJpGhZB^^%Z&0c)v%FALY(QZ`j|aX;;ES9C3Cd4EbQv
z>=e6G3USUJ<0;WAcQhUUOaArGg!Ml0uj7+3GoB0b;IHwlh5j&Al7gOF`VU}AjpGt>
zL?GY7TYta#bFcYxkNI;q|2!7C3!D7gc)Mo4vDfTfZ{=K|G0KVh*v{+@#SuzzCu$44
z*xvla9B(7z_C0Y7C90#Re%_tsUf|gP{XYUR@N5iF^Kb_rrgj09q`rZg*s~cG7Q|07
zH%0Lpb29^;a)|c6U*M98A;@(=zIdEj)ysZ3!38HGl8Wv`wpA+Dg$1?mzgU9qr~};2
zj^ov=JK9hpdsou~IlG!}rFF3P633Lkm)60R_PuX$lxl<acaUVnZ;SUL<wGWg3UxO)
zMt}+}w{OTTbUzEh+3;1iKO>Gn_km=DJ-{hJAm0J&PQE}G)eX}|4$RofCpcjx+J%5z
zpYrZv2k>oVw-k<&+p1Dgx0LBN{S2lwRM?&M_7QB3Rn+i)MB#U4?DH!g&9Tqbjjrn*
z?OoldwC_JPr|-`dgP@{tIzDPB*bxi`+!6Srz?)=kO)|C<=vZ6To9IItgzf6tuB?8;
zuLPKOK94?}itU7>I2Gx_0>j0`(0v8kMwOm1bG8&P;~R(w%{;yVQ~XpE&s0{*%BZFk
zQ-i<Tirsy~)6AH2j-^jV4kua<%gJF%AJJ(}2f<Gm`@7-s?1>OrZ5L}-$h6&xwO7XO
z4yCxi+lVGSNi4mSUwEW~fEB+TjUbF+wY2NJ%y0&ucGQpe_#ig7nB7`tMcZ$99E;>(
zE7ESY+;0_sELk(NI0Jtf;klL}0M>3r?`M_8TPlmc&~m(2w5MifiExB5(SAc0LIQ_-
zY6>VEou&|&2|XCx0ncaOyD;-a5BLlaN<zi8$=JPC<X+4bk0$pdTJOoC$w7>D&JKi6
zJ>o7BJc<e3Hp&bm!uQ}y;d}J9?*Y;0o@B?ZY?DpZIEU_b#`&a!*Mwb^G&g(r^MspL
zTY8JnF>c#&ML~FEekzVXmMVD+;}Ek_tnaacE$NG$@3;397PO_$Hy}OSN!OM>(?Bu)
zJ8*0I%?8k%n%u)P@<08)42gdRpr&Ot&S2IcGI9#%Ldn+1j?g2q9f@DdA!OL&8-Udy
z1MJv06O6}5pJ9rV&1&!sb+`ET&?C|9iI=j9e+<Rb^F)6D?nUkZDtPhGNnMHFBG?jJ
zBP_yJw=e0cd;*@GWMpfibt`u`&Yp)etSh7Uw#E|Ym-Do8gvICb2F&byJP@P!Swb0D
zq;I?5ULcrLs^x^98H6FfxD$@S5Vg|02FWMpppVGCpM3G=T4eF6Pu6T!VTSjg)V+C*
zpUjZu-%x{Gf-c;>4cqh)LwNJ+7d4nTPR3LAbyGz$(w08Uxbg0Rw7R!`8@@aZ>W&*@
z`fIODqP1-V`EPk60N*@WWOZ~xA(#%cBat>l0MKb5i~ioDbcB0ACWm|!1jtaphFI?r
zia2`rFD@$x&yN*^&%(do;r>|sJpupThkrQyw(ywj|B8x=i)YLjt!DVY|4b+#{cQ)B
zY#jZKT99j?*L-%A2Ijd`pn+u^iC7qSLE??{Es*eWoGGV$&ME9^U<Qct56sS>7`F>M
zC)J+yCCOxG(i+Hb1CvzjVMN`s|Ce+_9PPQ2IE&^dBfGGZdL-0NX&!ns_Hg3YGeR8<
zK4IDRtgK=rlF7;va6B$w>=~Jz){))vl<dZq>&j?<EAoAy2VkArZM6(o!H@Gq>F@Cb
znyiU;D2eUVtq%p_FgG76jL*hbY@=b5;g&}Ea8Ds~z!~of_XMbua6>l$a0dy!>lHMY
z$8fR6y9@1(Gu~}@3_+`5&-GBxXj2Tzb?ojm9_o2-Bqb4pGJ-XUo;mvZ3HOcSmPz#W
zOQbnC`ua=vkLDIr|Jw+p6j*YLYgHHT%H|dWIRYgh71<9>^Dx!{6Q4%`=X?P#2=a*V
zhqoB9i7uTlun!{raJDACFGmv>74|N5G;vYkO8bPe94aKxHsTu@O<aY#s~k;Sg_hgT
zzagj4B}ACVE{@CIzf%if?=~(cq4sh>gS`jE-a)m8J_W%}hNV)mb}mf{F`uA5B9+l8
z`#nNM2FQBOR(kLvW(xOsJd9oSm63;9k#YAh&l!jegdQy3Mt%1=szfpTqy{#C7cc>g
z9wAk!!M<Akff{0m9>GQt6PGfBu@P;tczsQSeTRCIrG^kos3+xa@gvYDj^t=Dh>1}R
zaR4h#1=(r{i?G!rOCGO080zfCk#~vKUaBE;=R*;wjP*A|4OvJ%A|ASre=)$W76M20
zY(g2>jIRAz!a1d=h7iWg4%4ZBzz?<3s3AiFAeQX@B~QQj(JVcLb%6hn8-KF;Cp`qN
z0#%Xzu))R2AyHUwgTP=KYOr{wLmL}SpOqE*(5SvQ58$y(6H)a%Qi2M?u53BwDhOkw
z!k_Phqm+m3Ir8vfBM*bfSsGs+9&^v{ArJdLGaY$2h;L$GdCQrCQ<R7QCj6%%4@HH&
zm5w|V6|S_8IX;I9o;)mYJQFI^eW4={RcN{W)Nwh5CYFc)s}`mv4=L!f<>4{v<0~!?
zFI9ggm4_SEld<wJ>=vI)9#)tNrYH{=K_EHua4`iM<RSl#l81z{=JJ{)4+)nzU!^Dy
z`Ie%|UHdcg(A1bM)jp%ncv5YdBqlbwjg^>8-J8oc8tnc#WQbgeS(%ZCndCbO&ZW6c
zc!G0`JdEzj*iadR>CadEjp;e$VWNM$^AiR*+|UXOGMSz~*AuW2&p|23oKN^&Ja-}s
zvp+FP@Z~id6u|7$wnjGwJMi~8f)6XFiE_5OHUmF1DA%F=yU%-4&jY(Wzecq)MDBtF
zVXSB*zR1z0aLUmr#_AIwc-MT&h^Eaen=K&vkL%wj{T-@)xig!pOaU4sW_|Rgdv5P9
zd~!7P1eD$cYsTGlka1jMy9S<8TEc6UmDY-BI$CZ1-s>f+vyv?4Zk3DrZO%flpUYvT
z{aa|HS`O9j6yrl<7;@AD(Z`&R>&CO#btiuG>ASKC!`P&vJL&g1cFApH->b`~A@IY@
znvaZq5A|Bfw>obZ{5DNvP59Qp*g|GO)>poC#y@j3mfW-yF5@LnZ`;wanjXZ?)%dep
zjlOlaa64tUEXK0ka0Ld^b9T#=oVgouia@$3v46xtXer9Q2mda{zk2+;693+be^=vQ
zpx_wC>65uDDt5g<-pw(AV~%kiAGJpa{oOryRUlx$XLf;X%#K>bZh$L{B5gWHP6-kZ
zmZEFPj*?+yM|KST#sFYlD6vv}1{uB7Y|qic25aIpd=qDfnCu-5O<VElg!{JRR~^o<
z{lrXh89s}7PYW6`<<~4;Q;_N`MO9eBs#H}tVJ~)TW6F_g>pHtmwOO-ST|K@tQ0r9}
zMRlf*WM>#PSslE>*NaGG8~XF&cTRdd@qED2%Ozdg3N^gly=AlZCsRQdNU;F@@VXfT
z7`6oFfvX}KVq=;k{koqou{v4ptf!LtYw)43LWr5xz({k9<J#&F@ZO~U=Ep@{kyjVQ
zQxCl=aKip9x4hcO+gSGt@On?JJ@us*11)fuR1^1o${kl{zI)Qsi5CLd!)54KM#@!z
z8_h^eK<Th0I1hfZ&X-snte3=6{Sywnl@cs^J_#=B%tTDKlzo}7t?phh8NtY80-u=B
zVlu&lRDz$l>sE(=(Qg6g#bt6PJBNLlxG^yq;Yeq}=WWkpGJ&J-0-w0=R;Pf`aRKMY
zWpXAvo1K}sweIJ^WP~G=2|j;=>dgyaGQp$sf}gPSR!XqwxnT3-GAWZSW?v?3OH4*E
zGMT{hH)m!dB$?pRb-_>Eb*n?b=(m9L;xajtQRGa8$^IxLnL0BWrNLzC3@AON&V$LO
z-uWrZ@JX3$(bSlXU}Q3ZPu6uXnc&fN!B56y0tS-_*k`imwOqdDnT#UA_}ckp^iSRZ
z8+8vwUO~LV+!V%7H8(TjZ!|Zri-*n4tT@Xwq73$AXf>|4I;np`X&j}0W;Di+<Z6sT
z`vh1`Fmq7TNvO%GV9in}pdC~|;au?)(4|=l=xiyV-7D&i0y>upXaf|`9*9U&-GMbw
zKvl<B4R7)_=ruobf2P{>LW;VHWswve!cox?d|q+nDLMj&XcYLwqS5LUFyx|u^W!o(
zlg(#mCT>lN4&kWi2tI#<o}wdobYAcicHT+}7Cjeieq1J9gUZ>L3EPsQLolvE0?*%^
zr|1YCT^IbsUAH;}jD8C^FD~lJpO48lZ;DJtI5L^wC#G~awQ0eF*n-bXY!0NA5-dht
zu=z)QQYI^#8j}%>OeXOB&3Q~FcywLx6L;O}5HR{J;Jp2woXJYrmx&vbBqJOpnc(xb
zr@qiHAaL|u;1l=V>J%_KF5vvQs52A#1;Xsi#H~q^5spkI`1}p3H)Jxwqw|8Fu=9{T
ztQ$QSY<^rOWwIdqGGSYiWCUY#0?*%^$7F&>*9AXu*I`Ala`aokd2yMX$);qr{INKn
ze4Pvm@dSQ1-@`esnV#4~iBNtUt(7l-1k2GE`Mdkag^srya*MxTD8vc)qm7P=ffv7j
z(ytP~8)<<F<JcU3Iojs<z%N{z<4RPYZFBT=3_9NVo{nM+UI724Lsp9S@@(_Q>g2Uj
zScFom;MzCK!jydFrf_n5XFonrHkIW>EpG21_^c<UR~qv8s7p_)s9L!zMI0MU!Mdi+
zh+3pl%l}2;4fAbecxMFJuFlsvZ|#>-3T9fJq<ylzbFC=DA9BF+rtfB+MYx9wJkD&o
z^dw`#@@HNX_U%s4V+LdOqm9`5pSc`xIf6H?5nDW#pAxpo0XOF-h@rN0--{YY^VA3e
z#>S2<Mvd7#WtJursc1vV7bjepU-L4P2!bkZoJH{~<8>QnIvST*#eM~kkZq4aQCw@w
zULN0&6WW?-KaAsz3<<mc0whe)oiHYrBntld7y~j{CsS51uLwsyP4E*dD>4QI4}C@O
zdG!^_KT9??6(_;w$3-JEQT(O^I8H%NBN&?#c>d-*Jx%cFy5J}7y44|I^jpAr`#m|6
z6|*lBHzs3%aMTM0pSL~rg~ouu(RYDQ+;_-Q){Tw}I6p4x%!D#0z|KtEnv4O$u|dJ-
zZ&1CVF(7z!Uhork-bx7;Jr`_#Tqb3*VJtXPU^0S{$poIiIgiN%kFE=T;;vgA0!F_D
zoVVYTGuaUPGI3*KGQyF`1fRD(kI4j%z6*TfzFVCFM#lx5AD79Q>@~lz{h2ywH7@xF
z)=XyK;xsc%#F}u1O(94)gOlZGVjP2%2NO?N$!Wq-P78jrp@p0lJmiPqC+VGFAv^?|
z9~a4kiIjl>_GQAh<g_6e<+Q-_H|NP|!K3SfpSbH*hk(&<0q4a<UHS9TIA7y(dQFvC
z5n(;<1aH*a+kQl=A^2EFKYlvtX^Fj6CabKcBLE`;(+ws%??R7kpTS~@m&)UBu{zD8
z_PKn7y~1;#hS0iU3L9_Iu($d5F#{3k=@@pr1D4j>L@$#3L+#8ib+Bo=kydZ#N^Af`
zP}Nwy!NeX;mV(<Bn3)F5`M%yRxP7eMn_iySL+5UQ(7f@WpSf)u=#z1LL<eiDv;V_+
zpE6c-N>+3y5k|AP(y-=_6d$RJdMBe>J}Lrb=moEbC?*q}L@>0el(#mNVlt``MM?#1
z!%vfx|3{itm)JwT55!M3^fBX}yelP=Y1l;wlB^G3i~%)hLDbt{5!GQ0_v1}U6ov<c
zV0BiC&+1d1<gNyLPb<d{`Dx7mOtz<%qde3r{IJ?P`6H>+(Zrrw+y`{11w-ary8A)f
zTyMkK_MN@1sr+~ECvOv(WJeu0t?uD<R=m{Q1mh=~o7cz7@hO26EALrWGZ%GYmszKN
zR@c0NKWAG)pr@+ljriHqQA0fNpMkRUJ6U~AVh>excwxSHEcWKN1HjwNp6s}WJ74$k
zn%#piTx6qr@Xa5%J$UwF-0e|oEpM_^MN*9!Y^_edO4eVKKH1=4rC5Jb$8K1ix)+Ek
z+SArXr12k<9Ej@V9wHnTFvdf4rib6zz;C)9BAoUys>d_!=f3au_=Ssn50RTClHWsA
z0UD0-5dHmgE(t$V>wAby%F-kTGpFz$iSh1C=9yD5c{%N^5<0{s046U3HFuh2rd6N~
zWS+>e>&Ugb;wk97!n3}3*1;(kg6C+ug{Dv<Cj=tTz4QdR@C`8)7pW`>rLawTI_iK4
zs5oO+vkhaTtpoXT`;8|}I*7Viv!!I#-f7o?R)o4C)zQ>3?F#z70aYP~jH4q->W}cM
zEDWWvc|Avenw+aLJxX4-W${#u!>r-EY{%kRPi1#%N_8M=`Fqwe?F#yE@?9<+MKY;m
z848$cE9Zn#b4f?>)HGsp&TL!0<H{+_QMD@BV=doy<*fbLT}n=&3i^7<&_`Xxw9EJH
z2Mzl!_?4@5YA#d#?7JUl<|g*cH(K3S=Sg!?DjHPS@wX>s!Z>xK7wMq=%Wt`h^slSP
z&Z=S!V{2n}D0#6pFIe{h)R!Bqn`z(gRrq;S_@}!^i55uWr^RkeoOHto@F|Y<A5Fac
zdedKw9+H{%wa>aka{YzA-emM9^7~ZeCE@5y6Z~ZB6xJBQ!>J_ryiO&mWiMYYC(XYp
z2rYv7k+n&O9kSdRbN-z`H<@gCb|Phyxh)aCr4sK))+VC0CX63h!(w1m8e`Y}aco-g
zBWn{{HeBJAJBq)PNpa|n0!K)Me<xYMro0<&a!EFY*5qaoc33V2KZWH|@K`PdKgn__
z*ok^RgZ=O$Ym>7P+|UYs`H?k$3b`jRjESr*#)lgIK#{d+80*e{feA&0LdQ%Jrnbw!
zlgLS(10Z-vF2PSMxqvP!hu9KuE-pDSG{p~PYAc4OkXofmg;E7D)Qr5JT5_lf$l)t+
z%(I<rp}-7RizX|VzC`|<VqvT@M_YIrCHuZFuMUG{5Zj12u}$6~_BavUZkQ(BoW*Dg
zYPc4dKm6k51Rq1~Jd@oFlw~r$5xXLJ8d4n$BGxsnR8sY3MEG!Kj0rE78d@QUNVY(@
zSa0q7uNfOIHi1dYM2NR{D7LBk#h`4+go-n1*Kv%H8|r*=1#6s2sPk#H4Gx@IsFQjA
z-#kOEBFw5}YPrIgyef>z8-+1>W5Sqj+|mhSx^YV<jG1zRoJSwVj0*!^v%{EQ1K*7f
zW0ri~^{mWB53<6TEIdgVQy@+lQ}<37llMmx#ykN0a(!n(yJ@eB-@4O5VYA&^&bTqV
zwLNDXKdNRz&)*!=<C*peUX3TAMnBQroVJwT9rta}a8wxcnJ#xw4psQ>xIeuxrY7^`
zAxR`v64Hb*r&tCK#%Y$BR)IDwKof^Ch3AyQn8MS9F{fAvYR7a7O`$|i{B3j?Q|<k}
zVN7*zT478zn-hYZavfe6^Qh}^BYsn^VDd1gs`|adn4-b7!kB6|CyY7eI=nFEQP<(d
z{H9#N<Y7!zB_91f!k8k#6k?E2&`b<ct>%O=r&@&<#yr|8rj0`WFy^^GoFqof&Q|J-
zfl$hRi^7~brUD6jinWb71t+5j{br0J6tri5#a+dZn@_b}bx5_+&NV3L-a$B?YLy9`
z{%)*V@bGT8!fs&qr@Q}+R#u{~*!5tNZWsbStwWr16!DA;v*MsuC4BD3ixkhmp`p3j
z?o9iZFS``H{Zvp;@#e9|OKOpuC^wy`Ou@dEwK$PGGTT%CYVGwdr}txGZ-&xq2uFv8
z;By@s#(9!;<R@mmz|nVsPi$FRnq-V_2{=D4lPMp`&ii2mPwL7+IE`>@Q1JO1R1Ae1
z)dY{u3x2}RTPeY!=Yq}O^GTWP0rq9Ww&cYk7`<2m&)=L02Z6~1kFE=T;;vgA0!F_D
zoEH~$#oqvt6L<rYY5M=+oki1fmHsJ7GWBI*j+P|TxPYmr(sxKQflp0}PkGEImt^-&
zQIZjkl1%WEbsmyT@aVkY^Ui2W3o9j9^jxs{Ma!g;Y$}9?t~m`t`-eYs%thDyV?H^P
zse=3iYu1ccPm+xZI6e9x)i-x5S7HyBSZp+z8#KB)e@;PHUkJr8*G(I=SNyB17_KUt
zzOG(@8b`VC!d``QQK7G^<7+9{+a#79M^`^<99{j%e{qN8nG<|nT_?{=rOZF!jk*f2
zA>pX23w}Z&-_1iM1U|XOszqU{s`KQ+N1JM=AbgaE0BI-q$vTe}PVnfw;3w?-lye*=
zUE%(e@++rAXE52+=`1D_IG9Y;Pdx0F#+obKB)Ck@WcOeuOvNB192*q;6qro#U^2l^
z!eoL)&jp*m=aVv-uSRJTP~Pu{ylT4oYg~=;4MKBH9JwbuoyJ=(IexE7ekGTUdi(FH
zvhpUZPHqZsuy4M=c{re~3qGu~D-2}lLCKwD$4W*AQ@p~N?0x~hqY1yAZ^}uYK_zA-
zbykXRkTF6+G}wRtS?X8wEWzU?#S>ntc_*F3{?&!VBAo14tCm#W`&ejV51$5Fn4YnC
zHY(dgH&H>$9DLDe%U<qqPIlf12z>q5EXLbAxQ#v09ZshB+|t{`d4ZNQQ)&R-U3|dk
zAJ1o-K}#^nf(#Vf*$-7e{T2t@fLL=H>^9+9f-fo(=(7Oo`~EMuX^Ez5#zK(Qi>}h6
zJocMP8Q=RYqxJcqU3H(UjYd%WG&e1^j-%fG-@R^ygR}mW)mu)kmtoUV`{*H=Y5(hI
zTnc_+=AW{OrR;cpglckqXA)P9L>|AiBi9b}9l=jQ-x2&D*li@`Z$jPbkLLs+83>cn
z8A>(bxD-vrpn$$3aHy67&#zh<%T2%-a{=eaWpXB)f(oxxf5J^ci#O}=t7N%NuE2}Q
zrl`Z4`GqKp;HPF!SX#_E=o90jaq*)pew4*yGU=^gGT9&bC$wh&6hC9-Gg-E^WGMaW
zIl#?&P-n-_&bAQDu~GIFXJuOmj@fXmf%Ghd%cy5}@QUv)c^1Nz`0ZE-uG&uv0fqwK
zKtZO;QEzYl1Qjft0>!6zN%@4Av=F>gtDarrSO`}E#wnj=A@HfO5b%-QEDIqzyro+f
zLh2eoz(O#t9&^xDq6-!WpW_S?TodQgLg-{wI6)c~LfbnW3xRKGAqWa~1eO1P3K$E4
z;6PT@z(V+l@N_MNEdY{*(D&l^XeRJzvp}471ykfr0zAKddV<qZY&dyGIXZwdup+}f
zZM@}wi9JkUXF;9T1?!2w8`jLSpIdBDj1DKaEHnjU!##KKmjCHXw$uD_?x+v{`agXN
z_!RId;8Vb-fKLIR0zL(N3iuT8Dd1DUr+`lZp8`Gwd<ys!@G0O^z^8yu0iOas1$+wl
z6!0nFQ(!_0#H{{Af7J&rzhX((xba!Nuf=;SQeu@PqeF?-p+NlgxE93Ugll1ZQF@sb
z3pU_=oqfz)hJj0xk>T_bD;lh~VkHgsno{rK$yOw2mDJnC$MI2dPh^+@;`HmB8w8uj
zMPh;;2*1t3FPPX|5{Ms<cCGr7C0$6g4c*n1j6BQgao#(^*R9V6;$>Deoaio2MhC4}
z7%;6f`kp8T4#!xLa56He(#2MxsU=l&$8a(-lzA9VUAAR785>R?2VD8p=g6=Hn&9w;
z=n&F?D`SHjPvV<%0=EXO=&%(VvI;5-H_qr=#Ww!aik2k4vKW0X2z7iC8J-|q;uawd
zy402|c^a|*&|Q0zv4ceVph5Z|5_;DHxF^!j2R#wn{5iruXpGo}E9#dfV*`oSfk5j_
zMceycj}|#-TZ3p1^~PuPJzvBoORPIe@Mu8*7ksX*<J0(yIubWmjkL`3hH__Eqn5yj
zzL{pw#iD4aC1@=xTk`aan`!|Wda!z4GIGd@9LmbJi1b_0Ls|LR5j)Y^ABZ25Xthno
zLJO*D+Wn29Fnhl@++Yuh8^AS360Ju9@x^2kG*!iRK3ZD`FspiAofSP|&9SPBt=cg7
zs=vW*+=PDZ3#Z>e_}WrDJOnQ6ue1M7sH=|pvSjQqD~lZd<cl}gCL_K03Kr{I8hS8t
z7<GbIsv7K4RTXqQ`wXb9e33#c(rbWfP_>QQ{(8H<h3(FBf&U4>=`st%|7ih+K*%h`
z_vFw_^5Uf&ky{s-vWI~pny#v|Kdmaf_O4?Udsw-bN@B%qd@yg}uegt}n1ftmsyz4N
zrMJy8Z6u=y(zC#HRw2(Pj2vKRVh57-OEcglmD}cFbT_><>rqmV#2I9R#N$<9iR3ok
z8^-w-`5}^LHti>4?kDFZTK9u7|BAq5^b)I};tn>JjED_G+t=z<iFKzK@H{f$HL4ms
zIl5&Joh{FcEgz4c;Pwo2Cb@+b_Z=d?qaiT$wo*I@J-C(6#nJqvT2VI!$Z3!A$gsXu
zUp&%K3aNx_`8SbrC02c~p{e*lQP}>=*Ne%)-@T|CA5;VGHfTAZdRRG5f<#Tp9lGaO
zUanUQ*=}{vv}b;Vvl_R5#G?CxXmY*~VR4Oqp;a5KZ#s-)EA8LSX5+ynUFlWnkEs))
zN^clnUWD{40X(KEiC1TTAS6UlUoqg{B^(6(!lOcu_Zq$QiDU!JlVDv_7g||UVt+wp
z(av;b>jYxgf8|iXTOYB6frSEQVc>kET-HK^S&4-q-28qqU*cxS`?(YZV1+D+Kg5YO
z#45PLwiKqnEO0VGgZ<T6*~9<3^rwzGp-T8J$9m~BM()J2KA3173{d))XyViskJMA}
zaP5ng^b~@-0&9v>kzw+9y?yQtE_a7<zEdC-8*Z?RKB{M`M^iL9m@G-O1_N>QD+mF{
zdCJW%jaX<ykCtqC9@&O%H<w(r<?+DC$Ov_at;^^B*1YU~sl@yqwjx7n6NMrBN9vr3
z%vrD!7)6H-fj+m!#fWb%PQM4l!)ZgyXACEvzn!Ni#K8aCYUcj7Xg`+yRmqv&`z_D6
z0k@9F<5-TutE|FRrw7`gBCJXl95s!nGdVOKH5w1`PvZO<yC{qlyZiVT%c`>k^vuw6
zpxQHIDIxG*;`~~{&bMasCbM|-%+Lz~S2@5~0j4tlh0iqx9}LTg!zPZ>k!URmv;>_W
zeP6(+a)dKa?!^;Pc9m6o#+H{J#ZPXJ0_|5>)r*o5yYDtaP}x|B#p5TyuxY;01gz?X
zMu08?vo+XPt<!*F8YNnXM=~v3pcaPf?5F_1q5V)VvH;!$fS$+z>61RziVpD0uF(N3
z&y}(M)~ixrr&M$hOfvvRM>Qv_nlKl0uV3E<23uMOA0hS&vAEUSf3ud@6z4$g0u=PS
zWX$gSJZ{r}tNNP8f!sz&YJTV7rXbVKM%4fr&o0;5b4}3&$gspBN~Ke>;&{-{sxDdb
zIF!oJUERrOFC|4UJD6zg1r>MT4ls#Z&KZdt)!>|D^a#FY%5r7hy~jYY+5*K23+rtt
zshg%Y7K$FJUxh9-G_k8%r-(_tJx4?-MFq*~DvW1hGgL#5JYQ2$qd0}e>F%fao`n_$
z;_I3ga(Jm`Ei_BAX`$6f5O;WwbyzBWZ5BEhowHTF^dt}DLXAj36=+1fHw%DpPjwa9
zR-NIZ*!FlEM2AstAWOi4(nF6USH+<sVsO7G*#RZXp2`H7&g6a#z>Z#@+}XLP<MEa^
zfL<JwI{Vt!X??*stx7IigvVyWLfycqBR3i!Mf<5n-DBd@0mM0tIg7vbXJilVWkwhS
z0_@ZGfXfc!8E2zbz1SKWUZ`&o>cijKGbrBO3Gy-3OKwUot3vIGTj~m0$^mHAmI2PF
z)*lj334nT*)uHJ?`t56un*iB&IF-7*Zq-&Lq0dfDTK@h6oRR-CYVdXAa%iO*k<*Gf
zBD62TsezUmiTxw#OQ~qzY1F=gj;CA7C~=yK_e0B@VIP>m0ztx^Cb%HDzX$W0ld%-T
zM5~FzjcN66JcQ+RH0&;X>tt`cYW(vhSUpS7aNk-q$yNTV3vm-@(X%W0EFw+0-d?C)
z(LbPG3E<r-G>p}q0<NQt2vduvnVgJCF^OLQwW1(im|kVNGHlhCvL{w;IXX2=-mA0!
z<`{OWlrmcN{s0w0v6s;hrFDoVNCy-yX9;5+)Z0(M90f7>weA-W)f#q<g+(YSJEs(h
zu$T*~b}RAAe*aTE0O5_QWZfaOjR_QA0_%@x$E<7whB7#Re};#%M)-{M+sA-<Ho%(=
zqCiBjg|CW2ukmlv_+#1?bFTtyP)xn@zF(M;9^VUdgo~Cu7P9eYxn7t7I9_65*KRI`
z<-+M4OkH*-+$@9op@-qr@*Tr)vSifk*bukb!od<5lp_YNo1x0+z((lSC^uxy3_S?7
zZ@B0wx@(?7P2(e$yPC#VWbxkNMC;)|d_JxP;P2MMh4FW%VO$eG;A|Cy9xN=14EOzp
z907ichOHgOELA6}%8T~$^<l$@-@>21CkdKi?n8;zLxK1kaV?0?!nH7dQs2L*w&A}2
zr@!!ml(Q1-OhG}cqSqv2RCt`p)rQCNu55M}&||TT$sJ(Bod737WqomL6wmZ4Y~hII
z%EH^vv!XU!DA2X>vChSnCAYo}kZ_$~auo5LT#hHYXj?7))@6TJ5_&LP@kFA##Oh8T
zm;MalwzA=5v_E~vtHOj6h+Xlgv2UbL%d01+<!$9Ktcq?cgs%p+!P8%Xdo1wc&%hk$
zZUr{Hpwo_+8f9zH{q<J>#sJG}I4DOC1=Eb1ZUpy@%<uT%@r78HO7U4rPaJ(6CFq@k
z#F6lM>Ze9boe_{YNuOh$!?-){Lxe0z!%0K=1pDfJA2d&(fl<yuxTTyYnMwcC;|jz4
zSBR!h#J@%OcLDxQK%1j^l|@e(r)2bL+l$A3nEjzQBx5f=bFH4`+KZf4k+57a;f|-{
zXY1|j$@sC-ZG~HFW)G*Kvr#dHEjPTi0B@w<^F6=W5i3nUtTOMKz-~Mx%Wm9om5Uke
z#u+ca$tU_{*>@5jHT8Da3O4NOuTrtnZ?<A(*zuLSTx0MTij~T+YEG_}puH{qyHFrw
zQuag+;5Uq-{YEpEIv?tI2G2l0EJonLM}GZVXb&Y=JVPB{<qMk6(7&K2hB`ja2VB-=
zzl1tcSpcx|Xgtt*HcI0e=gaE5#&~!+KH+-%gx{)qXWfrOQ7;2uLy*qXx(rW9u~pAC
zcV3<S@oPw#Fr0CecjSKzd0FT|!Om;2cMDbMrRr7Rua9Nd4oFA+U)-l62kYd!4Wy#I
z_2y0j4Q|&jUd^iKJ7%0I^Hr3g9d-LHIT)`Tb}^<jkQXj-PC-kIdJFK6ItnM<(!*J9
zY2f#y8X^AdAm=^=3-GTd?7Vt==q1+d;eQ_5_dwvF9&B1xqk*yNYZ~m=eS{d7Y>gZa
zJrX&bgLnZ8l0*P|yV@*<<M0eqoK1tv_G{vy_@U4vu|o+Q7tMA>tGy*qjpqqR0RB+z
zm}9wni?D#0B5d{0lE*6#hB{$*J_|e(x11daef&|g)I%Z`)t;S1K!t|rU(*a0wWy+c
z;f25D)97GjG`tDx@nAA`j}vRT$BN#AHH4i<H>%Gz4tg$34NY`$G|}T>r)QD^P_OpG
z;XKk3!CLmoioH*{mfY=Lhko`tv_oF8$t$Wjr=oxKDoTG*a9CTNHjTsj<5W*HzNgXq
zF4E-kr}4?y{i15vxLU=b{dLxCVq0&YIHb{4sOjBK48g6errw%Ms0OE=64j$Xg4c@*
z_QKRfLI{bfdV8Ibpi(mXD`P{Mar`yZUbw9*BDUjrzwIP=Ju0JiD;x&{@J{5=r0+Nk
zzCE8vYRIUwC0fIQ(8v158NB%H(4*0ViI<8(9sj7;P}KJIM0SHtaFFb)styHO;p^L%
zjNDE2?ruJ?qIV~wU5>EPklkd(x*D43hial*%6=nfoHwF$bz_2bnbF^+sj$lgmL9gE
z57%e0LN8c0QxJM5N*Pw@O0;$bGOX}psMYC&JCwU77|J(G{$~&6!`@I{`m4-PR=Y##
zRK}rXXWXGYUu$^oP+kKpjAt$x-3?!q#y%O_ZAErN5_Cy0Fc@^F%F2MC2HO?)nBipB
z5ZhM~>jK@;+sep3&^y|djNV1Hd0#Simle4y8A12=1#bUb`mG3V89UEn#TS^0bEL+9
zLhVT};^5yl3OYOv^gjSv`YMgd#CeEXeozeaEZj~Cy+j7#fP*wlN}<f2w@bjtS%Z~-
z-k!@gCYZNBm0d>xz<G;R(3!2BV8U@`%2%W*8FOq1KEDh#55j)ZFk*#eC{Lo3OO88t
zH>+swAbtvkFpnx?wi8~(^ok5rMmW8q1L`)o7b1s|(Eh#^oL=7;{Ow5k3<`V5J8ue?
z=OQ+kLG0aVqmLhYr_>0wpTwz_pRnHrQ%s4ly>jX~0<m_iK)lndD3`Ezfv^s{M{UEU
zH7<>;7*@EtD~Ulaotn{@5o-)%au$;Vza&VHwX+7}Jw$HmbiI~zUH6Oe=-QBJBZdLb
zqU#St$Z(Mp)i0|!n2aIB%%y6dsC@)W*;fVR_%gicBLrXUVB*&he1EU^N0O0;dLs85
z!S|3O_@WObqdO@0c1ZBWb|hmva|K^yXI+-yD+i}%M$Qp@JB{GGSAy?e!$%KT(Fd{x
z-%r3GnSvC2I~~EdGts&;OYr><5X=a^dnXWl3$I|6*@Eu@cZ}`Jf0hw^7rKJascf|1
ztGV3c1^8j5TBO&wQt$qZ)Vtq`+>bf8(_@WKsi4OiJL6vQ3M=+dMQmp>_7M768F`2z
zZ)Y;Pog(j{WNf<?*`AD`;|~RH|7R<5;Ap&9M`H>3Wqb;}@)Q`)UMzv`+<Fl$FeFig
zWPxX5eUcmDB>d(K06IsW02WUoCGe=Wgt5}~K#0*ylASrZ5t-G^3_kKtFLM3UfAv3<
z5xM^9Y`-%b%r#`;cYd@FhmTCp?<{-vM%0$a<$R`8q+FNtNqpwIoWCeUb6w8ArpiHs
zmd@Hh999rq$*_Vd8Ys+Ul*`xqwBS6~bdr7Yymy_4@h#BA9$o|SW#-25QI|o|jq9WS
z-~S^4GCt~$q5*i9*03F!lzDvAZ~Y$;&h=5BC%m$J)PLD8iS7ERPc(Qdwd@3SE|X}`
zc?bxnXZCdPFFJ%nU33>eUx4uF7POp2D-JYKmQ7`C*-i3HWQNo6xL+fSs<iK4s3XbC
zm4(uONLfcpot$sRcYcSIDbf>3II+@H%{FA$4I*00VPLd&P?>atP@7=mY<xYmAShYz
z<068ae%|rm+jG@fe0Q}MJxHZ)gldpX_2Zt7<W8G698b87Q|+C6du|8cHZR6eK746F
z3UQE*eltfS>qTO3v8g2el~l(7;FButwxjA}rSeUCjS$Rf<N_-t5V(NxAxzUkat@9e
z1&FE^3UFC>VeSkXU}3;g>3>NH;iSOb=2f4%S(#!>q14G#o&;lc=<UqPl2GbCP!ZwN
z%2+8mdZ;2&+C5a5!gq6tov;dZ`~_f48_*4g!KUywUhvZ#=6P-$kYjA}UohEm1a*-)
zOqiqNS^P}w;T3voo0y3|3XmYGr-kwJ`u+ir4Ra5$O}RumSx*Lo_ldpBXsBr35zBOw
zaS{!9b4iW!7jy`?to{Z>NbD<fdH$^|b2bbFKnwuF%%l_>BD|YO)vr>eZYkyoh{aN5
zCbY<K0UX3bm61~DS<vuP2l0aQg@4h8OZdVfJ#j|3pl>b9j~ZqT4o6xyeHRf#tY(Iw
z@(HB*#H=j-s_4d$IU|d3Lh%+zal@qiJeXKV+^YjdHS#KKk^|Lva%SJb-=Y~1TFg>e
zyYx1AM~87FEm}`jFMX{!?6cOIKZRSZm&})jDIRfB0+)hqkj%MMU&akmh#N=fh?4o<
zA>)@0PS|Kjw?aBb#{2a@FKXg(W*nV^TKG8mJYZfT<>Wvx9%3JDJmgqPAjU(ESTL!W
z_{!Yf8KJ*=5Ph{GM-UT9pI!*RAiSj?QmCaOI(%-lw3%{08S72Y+Kn|TP!Yib&}&6|
zWu4L|3{RRn!MFT`eMdH=5|BTkipz>3{mBS&xJxUd{YgXuBBi;ZoYD%0a`+q-(MbzQ
zv8{%Zg5d{-axOtd!i&P9C{n8G2szxqF@wLoB&Xq%0k60~AA@`5Zl+tunQVknA2f5>
zk6k&+W_}`KmnFIi4Zev!<RLluf_QG|X*_(t_M_~IJ`G^uTaHelxm4*giKsHTxh203
z8}RgI;g<d=Qnt=rUl_)+N)o5%<9FNI%<oeCK4gAli4LU6SLgRc2GJ$1!3d;qI7=Bu
ziJzKiEe&kKYC@@6Qa^&2E3^BtK$jKKxmcF|Ce}H}0{dM>VVM8EyQnbS%)!UMzs0{l
zs%fqHa;1VN{U8V!B2V1drr~cBgb79Qv*b@IhL5b}jnvTLT~aW(vcBvl=u)M9Pn*h+
z^J#V;kkoLJh?;aojoNcCVCv&Wgi>eE0p$d>8cbm)7@j@}E)+$<2O#jrY)3%K+u+8F
z;I2Ys96JP1aQNIXu!#;MY~T7ut_p>9P3J(RUsG&v|Dl);%uoRU)XR+v%`nRQ#TbR@
zyRaHoMhBaL_b@dXl>P%G$!I(n&jk%(&D{Q0hX3Y3P`G*Aml6FE`@dcw`eA0F(AWWu
zq+%8!(X*sNY2p;FZgw~gskbuE_BKo^w<afDI-#1FNYmG9Y69;&VY1(S-{?WiUqRuy
z9O?0M*_8%j(rQEPe<v<M1`C4xgN5<hzAus)IQ%v6kwqw-ijA}?#fWI+8TX=o<}|$E
z2pi65NIygc>5bwD*e%UY6^g2rVuOw9R<a9kQ5B@xwJ)g(SM#}#H7w54s+&Y_?@=MD
zOUgOfpl)BUZqxr;#03l4b;cJA_FSqb-1v|o&GTX82Q8t9)HAx0>+L&wIbO`kSH;No
zhl<9y(fmg-O35v}eJ!dg;zz}EWe;z5?ctlg&;I1v!yn*8%9pP-PXtiDmL{BbNx1o1
z6t|2V(w<`K6tWaAe2xv2PS@Kt3g31Y-yT($i*Gg_AU`J2ICy;d@U-wi`@7d(5(wB!
z-eY3YBHIoZjjCKUr2XH|rs2&<bsqY6$4ao7JtGe&t;rF?Gq)?dT%s0fxO2Ev#hZFM
zo<$)*2ht%+_soXTjg{i7%IHvQwbjX6t6eS7BC)#+BGy38t2+BC5CY>GdT_uLr}}dC
zwlv(CL(?6Kao0hO5A*4;0uyUYk;Lw-^tsRQ8O0W#S=CV9hMkmb>@>j6GiEnq4tf$9
z@<@=d1M7p$D<DK*95`DJAntRv91L&?Q>HX`DaFqeJ&n;Vli|2z=@teDkta(-93lQ8
zJi)yZj0XE|g>9W#{>Sa!qz~19>dSCWk>}7k{=w=9#{sudNN8hqgh^J|JeQ=X$9jsV
z!=VR*cOX?W{jKS&Lz(u(i2Gbd{PK5m=C2r026bi%mmniW&yySq5H=e0Ru;;|(Do=_
zU|p0T3swO~BgnjGPEb4!J&uVhcy458-$4yMsvLH6$nG>Ub=cY(My*9pKpLQ83Qx)d
zv#Bb3M+DL(@RWrbns%XA_GiAs9$_P7-*-q*q$3O|v4*5GfZE$M?CxzE3fvmiE5m6L
zJ09C*+HA0o{Vy$o5Z&DBXlZe+Z@PzVR=91Zo6>*n^*Z5hX`<!scEWBG#km4d13gDg
zmjL|)w=@AO-s>Uz><UI&R9q6V;p7hV3L@cUnT3<GX<h)zw?WFc4_qMmhTSk7hap>l
zCtNEh!{I8i#e7%Cx$zRZ)6@p!0or*bKpX6y^VJo|`eX;6z&VF2Kq$mgyyraEjU|y)
z85<6z{*43@B<5yf=@xDpddjKNdA?n^fL<_9s=sY;>9`E_<-WH!2~YSb>i90>-&xM4
z_wWk;&d-65`62%fpBBb9^_@yI3~qO&*mY?&y-V4pV&?_Yx{9~eSt(YJQ={1<2wwp+
zL#C4`;lOP@&&K%-o>rZu_Ur))egBS24y;mOHaHEs1hGoDphh-`c2%*99rU6U8_Y$-
z4A}VtYS2|n>eBCXu!TMu+<_9TFc(whD2b@7!c5EtyImD|iqq@*&W8KtwW!dH;%v#s
zjDB;_m5-nJR*rm>(w04EDIE3iEs_bEvjyM`$iplp=1DUjrZH!M&zAlH_>E-(P$*$q
zJuhTnI%WBmZ<B9%NWNv++MIHM);C)*W_wc?b`#*C3;+BXDKUK)u~4)e?qz5BrBybl
zOu|8|Y?YDW+ba^SW!R1d-!zQg#L{gAt#4>L4649n`rx-EVQDD@P*EBw8uVwQ4mz^2
zFe`aIwEY{PgVxbGsGOEba7QxL1X9qg$iE;H=ro8=Q{hLly_2pwsWWrbY$+xWK7Pdl
zf2r(7$mt<1>QI}}<ILWm)HP16{L5Msdvq6vp@>y;(2}NJvE4WWQ&$lh`-E7BS{k&9
zw^o?;lO23(2_~6h<HC?Pz>scr5yoIxCJe7+b?6fRYUn|;PX0*VmAX+~niq)EF^<#-
zOwVNJWh{WW0}0)NG|wTceqOS(j!&_)0Bq2@s{_dtBcTWHO2z5t*Go)mR@%Yhgi$?c
zV?d72!JhVx8*%4i0J^s8Rp>#3H;N?NQ#Z0Ohhxy%uI_{$+}=Sf`OuJ{sM~-J0JLwR
zUJWN6?j%q_%O&J<V0>2xo2{&$*8-DA3phGURPPcNW1g`Z502e16~IcbLyQ4c)u%N6
zj^+<;k31!2#Yf2ij*pPx8o)*`{WOWmba|;K(Sah2Eh^ELH@6??MG-n|`sT2gN8SNE
zt_1B+>#gTFPa&>@+meP$M56&P1qp`a8&sCz?N%<`uS>W0osS+*V^)t6I)B7JN6E`U
zS6*I!aIC!iP?nA}X8%s`X%>(@h>SQ#!E@D~a)>Wx6VXGOEy@s6{Z}<K?`VlX3je@=
zIs1=3_sy~RXXB;W6`269xl_YyRQo}<{nN&2|AQ0J?||A9{oXN#e)HrjrIVL_l`JK4
zgPNHJ^+w@a=Hh$PlVj<XjfbIEUOaxH;#0uGYo7~Bi*wY+m$`mK!tjK9o@IHAv6zMB
z%?)n>bQlLgysL?Sj8g%k<q<9s@{DsLH^W!7WpALI`>tT}g-<7JG7?UAYxRP!J8KC|
z<P?P}zzpzI@x{pq(ic&VOCFs6JdOZa*wR3kh}iVQv$dBe*&g)RT?>ruXU=kTgz!_n
z$&R5PaA_#v_M~;G&Ok3jSLZOEY4eAC^7!B)A0)a9le)pTOz<<+K9|7fcJN&@ow}h%
z=WKZaYbmy>U%cfBZdI?g^mc0<w;$kj_pk9SFT!sPr|+{;tOhci)qvNaY|L8Z5}9!U
z`T~U+k|{fIfArX0Y<jQ+pUO+TaC`R)4i?z<URzM~6vlW}GMoX~@<JP0gO-K`7&|LV
zR&D9SMt5xDOwLRv6*)Ls5i%|5E&ipwzXe;#F)21((!@U`6sh@0{R}RAp+{<qF<J4q
zy2yE6=sYhl&*8W}8*^{XT>F^=oOugD+9%M#HDNCa#@TJqGNbRW@q#h|u1Y$=LH;Bh
z>8@k64{u>810cB!+q|$%^#g#E5;z2-Idim)Am|xM+=5N-h3QH;Oy)bd124p!gLU??
zi#6VCupZN><gwzyKzb&A_ACpcDfD$XeQMKuU~m8CaY+r$l-aauz5V{Ll&Rp+-`Pl~
z{rfYB(zWP%@uoA^z||70OGSt3?W!|PN3e;G``qF04=QZ|DWxS!)F?^+C+W3`Atv=q
zK3=DE;h54>I)GplH+k~T!x!U&ol+%<%{W>j3`}^Mi$^w&Mb?kWTU7m3GA^*OsWKXD
zMqH$XagiIzUdPz+Cpbjd+mgOcBA22I3lW_VG;B(+84&wh&TuG&k`<&<feFq5w<55a
z{o~Wkdj*EXd&VfT*FpOd@0Eb}P}{WUpzt^Gk<7-dQ2PP$H22KDMG=P?eQ)9<gH$i9
zvwyH(Os6^D_c}aJxe?dz%qN=eN2B^x2R0uckAd&u_&U)~?i^z55nkz+9%Eey>IRu_
z7G%B|g`7-uM74Mh4d5OtE-{Tep$Q#=qb1@0-YUY-&F98p>~Bh5A|QhDNu&xzhSDpY
zy5Hz<frs&F24kJ~fq>5(aH)4n$t<ro95Wb#JaWavMluMjHwdIN8|y|f;LH3od;S%J
zj*>TLlaH|X5_wJ#Qo~zbfHm26^NfoVPYhRMhbx_n@vsvxr~9sG|CG0=d-G?_$~6Te
zb4zrfl$Q-Rqi=~Pe4!4+DmWU&b@r*>aE5i5!^-2#AVrNs&V(iGXZ9Hg3QdSoh{R&T
z96^^*pr?wVWwMAX^YAsWYH0;{i;+#%mZDHkb(z2*aO^u(Ax0e)!X(AJa`O(AE!16f
zcva6b@CIJ4>Zv~C5n|R;b++@aXW2Pen_<17BwRrb8dZ9xl90+2`F1F)p&Ee8U3Jsj
z)N{37t2!?8>R9fzQ0F{LhnjX$d@nUsy;8DzJl6BZGfN(Z+O-z~JcKbU(9q>>EWDW_
zts3L{QG+nkNf6nEK?jZKDoS%k2%x|LDqDW?g`_NB1hWJyr7jL```KPelAP-B#klM$
ze%}zW`g@}zpP3<Z*z_f{3H9}S5ILNzF6-N@tdzm-=L<8bu&x#`x2g0=3|Z1a89ti_
z2`$1PtgcKJn9(*P57<zS$b<3TeBA8WJ_1$pR-{9K9A>{eGS?3=esTyC2#kKjno}7&
zwDIl8eZeR+4Ri5$z5Q;{n<_(QiK4scY&K0u3Z?3BD!3KLx>&JZhWl-+u9#|y%~^N8
z7C6Yj!OFt;V&?~zn8CWHhuK8Pe)j7e14`LUPB5EzN&??jq~1nbTDgz(oq{2sXuyGL
zk^vU1Ye+RPZiVjN!i*B+I^7oKv<N!(RBO%~GN0OQI0J~(8VQqky@nGd$qn`7P!eR=
zq=gQ+oyB{T0MQR031||BDm6gV%)yQ#KgH*>$=Wj2f>f%=VU$iTE7RV1)QO^pA<1wW
z5Kn3xzyoDX^z*bXocM+?D4Ofn%YLLjz`eflOynX7g)(T--0?Hqf<^|w25}rG0tyXS
z7o#OqUXr}HjHh*hWb>WV9pje>6XX^hOtc;h+;$<ZOtpG9YvlQf&hB%l<MR#9-XkOC
z_nM}Q4x-v*U73C%LuA_O!FVF%HT6vMTlqGM#~s8R<ql|=O*eOGg@LuGpxak9w;|wW
zKPuL8=e1t`gQhYh(r@<YrCX>2&*?~Qg*&mdu4yN0FShSf&C2jt=>Xhz4cIyHm2z?u
zEF?y$c#kN2Wo>ZNd+;FfRre(pu&sJoAEdl+(||Bz>ln3fYBQ}=sug9V{Ek(ziiNDd
z<wK(b>-N7tLbP*}r5^_@)o^?Qbe7$!eo>Gl^-)bO%GqJ!djQ;b3Y($ph|O%dCAjtY
zKw#s1F1RKp%wrGhh+NqIw1_AYtY9gwz*oFQYoIptIh9xpI5R<;3m*f{-f>!Rk|PBO
zPDi(L%o+rok)|_9Jq(klvbwnCy=F7mAQdm_>1=0YZk<Vl#2_J?hq=1m`=<FsZ>BwB
z=s`KQmo0y648?92L2@a^Lo!G)4IgQMKB*!v&15q@wv=#&DjY>X4>j1<!(uk9WO0aa
z^l1@a*>{v1wIDXMDp|ca)7fP~tPnV>g?z$>U<AM^>iwiVqXBjN*TjwJ#-Gf@)qKs(
zSLkVDgqr_BO!aJGmZW~bhISa9CP4|w1R3eDV%X%5VKrg61bGbR1YINnIrIcEQ^niP
zjSPhn+f?-sxvC^tJ)gqxP7WQ|X^1M%lV5cQ&xi_ToFk}Fs1sk1Gr*!*Q4(w>$Vq%y
zsGtfYIf^j3QSd~ST`9Vlt4dN^A^IAydJ;JP4t52hhx+p54))&p>8AYQ&^y#)R<(lU
z9jr%Kt8dk>WXw7<K9Z+Hm`}j1&i?POh!u0B=0A(B5PL++IZ;OLDXPgAo#IG?fehQ%
zW7Kd0j}le5bUKM3S>xx<2kiH+4K}|^B;}$G;ZWSN0E;F>BuB$Bz-YN=qygLzgXyyL
z=O`tb4pS1$v45$trJ#CwrjY2v_$E|2lT&>a=;O#z9yk&V+={KcZo*9@SXmuxepBXw
zGH_^`iakM296t<aK+^-=LifD}UAi|Z4W_?f3qR$<X#9%5$?<c-p5%EL+c{&{jggag
z76-B^zlVM^-53vr{g-cIA^4$?2*fPYNcgehuoguqvOG!!22g3TK*7A(Ts;U=X3gZ`
zoe0;R>t-9lmptV9#I*4R8AfxOPh`E&6qTUEuwKiMRr&>F38kU<lp}!{?-QGmLKIfj
z=u5eEaWGlJIBU5Z-FP|YgEzk7`scrt!}at701+pF<Wpak*qE5FR9{9vS*!8DeEO^0
znx%!DPA!D%FJ)cg1%`O^d@i3O>R|u!B#wpAHnUgQtT~0~8dJIuYzDQ>@mAgnJLs&i
z5PFn_1I`M|6%>-oU151>Xl71fg&oX(-?S7xzzX{h>b$g*O~5w&G0lfJG==&4IQuq3
z8!o_C;5A3ls2iCn;&#BBBJKlD5qK#uMTQ{3DdBM<MP`b;MO91n7^VO+xMKr=lSaQq
zl*N)AuO-nKbg&;jQG~0rle;u#?lF!c@0Yw<qIQzXeuF*yMU6XVPT$>p>(&!@>JiX0
zstb0Uts^0oy|9k_Y%+SEFGt#Hg!4mLSH=Nm98b=pI{Sasj;CHALgI{m+Y1+>CX>XJ
z#tP&<exl8L4CE$ez1M`Eo;{xu=M>`1LAvD{>~p>#3L7V)Nr=O4(}I>Wa{NpH#x^^g
z8iR9xOPg*5Z`mdPp@Pr|c;W$wAeS8SlhXgLp@mjRb>Us^OK1k*U%Y?2S|qLc{)EhX
z2Bq+RUrza7Y1mPDqMIHoyg%zW@{n8p+nM*yE|J5b?Dt|SZlGm8Kf4SmS!egF4c9d}
zk1Gd^bjVQwltVImp2?I~9i`41ffl%+V2$c>EGpb=d9iU!G6^;AR1c@X%;YjSr|7Zd
z#?(V6i2wNjFKYFor^<0|q3xb(xvTzgVVu0YnaeNm2FspJ*K-BMvR~&6BNLC!Bf6zF
zK4hk=>)C{PjecX^-{ibN1md7k7!zHXu!uxV?%6jedidZRgAp62962i}7%$OV2qA;P
zD>2)nxh6ShU1PL*s*3N%ft*B=2E$b6s@GmqIi&uWSQL4oi82Q6304d==;EfI)Obwk
zz6=6Oirk(m<1yviQa$rrrcD9V4j(+^a#wks{js_17o9+f?sDRLF?e&TB+3~}4}XvV
z3aoKRYa=mLh&uaLQIHrX&K<#Kbm|&daE|=Ke5imi0k~4R%1uqUsXfMD=m<wlE!TZG
zwhj+o_!TFfFTg>z2%XV;WCj%G1l*QoIF*{iSuMhW{}?fX9<qRe3)-UHFB}W|fiBaL
zxrc?ljv3Y}z|9I)we~!Lo)jPIWUm3^*e!$N<a)eVOVzX!^Bt;Z(VL8o=$i?~(BEob
zC`tmaVkO#O9g*xUJr?Xi$vTDkuKJz)YO;`GSQMcDh#w?M7v&K0t||_)AGKu_Pbi^0
zj1AbEE@k9l(^(9H8X!;%Xf1?aLEIL^ZjU5ziiIl}AcS@|T*Nb$$=>z$7GaM=$!=GC
z@$B>tFJ#7C7T6d+kVpn&q2YN&%pia-jhtJ=U5e9~<vA>z^CO#ITyqe(Vcmwq1-P|p
zz+uVL!;QF|2A7=EV86q~-@qKBaV{InlH<4M%}|oK&OS27p&6BM>4wazhm=tSB>fSz
zyXEFm&T6r!(CO|yR&<{OD`_-~Ua0y}18e8t5a>`AgUT1G5lvo9!Y1~X13FnZkHE_&
z>qbtWvVVB|M9Ia07DsNy8BI|1aJu>!9!5xs%;NI!WLY1of7JI0aLlZxIZk%<rn%9q
zwaF6Gok9<<=2dimg(R#{d@KeY9^SNy!Szk=rSJl>n#<KVWpE`#t9ZBsk{7xJ^ia&_
zGL}ZqaO5iTSfF}VARMKQ4@D5F&{Szke?G%Ij7_fUyG1^AFE@s#8rrb2RKKKz>L1PI
z*;7xRG&&S;*urgGhF}RNtD$QRVODTHMqZxXCfOrt?!EaTBN8m)CP#5T)Y*G}!+8>{
zjD+J{x+WXF0|zFl?@fw#Pq#kW>ma?i9sxDX4R5ux8s=3zRkU~9nJIkS^Qz5y772b5
z89f-2qP^Wi$I@0o+7ll*DLz0EQCGP(aUNT3Fy4q&PD@}ZxyZg*d*UcNNRkf&4J;=x
zjn9n@AvVEf+bq_24yni#5EMEhLelip7lB^C<Z)ORkTcw)=?Hgvo`zGG6<`pCF;Ax;
z+{X^*m?z$N<Ox!G@5S0D8<96ICA0Wt^mvFk*bIq&UNw{>SaDKjmh#eIKlkgL*N~~h
z_|DS=?TzkG)_8^!y&*%-&`t0(4IuGp+sYdX!z1%kb@+q$X5kE2w(wvK7b2jZUd$VG
zFnt<s@K<|cSV>*eJ+yj@?X3?`50z=EGfrm@L!fRsH_!&D9JJ>07kn1@)$}E>5Bp1z
zGBWpBBX_|{+MR~1Y<SwY)7m-lpJdd)j!s{Ix#egmt_uxbNNu||HabsL(L!5qe+<}Z
z>$_QciZb)Rb4_7*JN_l`?-u;~H2wt&irxPTaZ@y!X1~vG(c6r-kqq{UzvK|o3ne*K
z%D5VYsL_@wxnSEsbmEbtvqG*)kEI|sJNFiG*j=eE9kROE-5SL?MMbvW{&&MlQ)iBm
z1rH#yFtXr&T-`ncf9ie=7i&WRKV3Im5I-5$!uaWFoOENh$8uHVhoXwnH67i`Mb)ep
z#UuC>4m?(xkW3V@e)Qq5i!M-jRI|y@n2W(Lh<_N@!chBXFoJ#e;erNS%cVHG&N{XP
z`{T{*D<~;tl;7QPo+Cal-k_^`5cPoF260$Op4x~ZDuXVUQ`sEz7<CPB4f5RHa2}27
zPZqrr{bktM&Y41OFNHGzN1#3+$;WhCWDo&#hgK06(!$zczYm1~2`8KDv;1%KBoBPk
z82C2>Pt+iIP?zTQ32ybIwo4(LuLz{D+a6-axJSv2_(G7z3cC_uTNlFmRJSo^nF?9N
z!PlvfR7#(z`q)}-eHy29o(dEF;P)&RFyBQyjVut4rW-I?p+^x?@Vo*!J$NU-n}jFi
z3i94@Km*<lP5`)7k)w&Um1K$O!8pt}UdwM&%a^7vL(BYx$1Bq|CKNI=IiuVj*#9e?
z$VDH1<lwg0@YXp(-r<{ZO4*Z_8lS>Az!Vg|JpCc{6W*mzC(l%Ioi90LKG#KZESXQn
zS0W*lP#6e1=G3Tpfq6cb&95<dr_Wl_mBaoxNQt5`ed4I+`%RV~Wrz5%URIcsy#1^u
z8k4t~52h38iPWZ9U*+!#>YcEJ<cWHJb_TZ7od!%z_h^$OrxT^D!}qsxiE66DIkf<G
zg;^a7q*vexv!mfla`$ItAcCe!a^kt!^(~@!X}X5>WeF@oV}fuxX3scJN<smGA5NYG
zWlYxD15$>_Ewn@*BLSdfBc+3iE>2$B6cToYalZZ>Ut?}FG^g0xM{q50j#6mq(^3gD
z)$KEONPz%Uov|<vYGIbM39d7&Ooe(ouc?c!o!O-fM0ZyKuuLK85_Gr{N*iXSb2iqc
zMqf=YU^#u05N6hpsTJKaPGL{TI9+ZEVC3)?6PsUvlXSO#rkcVUe=)Ta)cI7-9KiRF
z;PV43Gb&n&Z!Yl67#zle>^iIzIR6DHs>3aF*C5Z$&=OEuGJ@&T(*MOE4imeSjGI0_
z12uxJYvvOr(01L`3)-y41^Tb3E6p^HoSA__e6!>fOfheRLBECw5$z>Vq!hu(O#Qb=
zrE>>!uONqc+BXO9KQwsQosJ`ApixUy_A4vrdR#S%{e|(5_8HE_C+Hl`y-lsdh8+aG
zy-`$>C|nK*O#!!gO@}#(b2W;4s{oi8MJQWCFyg>kW<}(X!gOmx${V@$6vH0wK*oY5
z6g7GvK|psMd%`dRrhE39GO~aNE{-hVN7_af%-6MC*Lk{@=~}95Sl6JgOv4;mP^@b}
z*Wq9C$&jvtx(?{tudA)=5nX$AJ*?{?U7ywUpsojW-LLCDUAuIBSl8XU?$Y%kU3cpG
zfUfuJdathc=z6!Vcj>xA*X_D))wNyMg}NS+=5<)tUR{sqYU|ps>wvC<x(?|&tZP6u
z6zf`|Yf#s)uBEz`={ir>a$V=^x>(d(WbSo6Ti0`RU8-x1uC=-@*R@X9%XGa`*Q<2B
zM%R_PHtD)n*Bf<>>$+LjTXk*2)zzHL-;o8Ep--7-BMWvzT8u2%r7PodBMX-6TB~b~
zu2s77fUuDT=jeJiuB@g0d~U)?EuUYqu@pNtaIalC9R+&c++VTZ+SgHFJ&)*LRdL<d
z4~#5Wtn!O=U8w7PUCVWyrz<DQ$bzu0L0wC9E!H)FtJ?$W&kTyUoRT<yB?N!qw$Oe2
zi~N_*@^6~6{19jP?0x7Wg!tShzHSW`w5)FWJYF>Iq;XZ))Q0<!x%(wM!=G&@(D}S#
z&Z7!uu-?a?Mx<J^d7qpe$F-^Wd0Ya$FsF7I?a-RL63;1Abd$bZ7}h!U#ou=yi_t)V
z&d-EDSSrJnb6Mj?9G}W`=J*V}8<~@S4j&xT3rLTHLan4{1_6PN$##dh+#3wI<e-0}
z9_Ay}N;Qg35Es*l1LkP~KXx1}Y^hG1zm@OsxzCJS1r6~bu+x$PA?$fv8tjil$~bSN
z2i}(RmhpeR1#Mw$V3|X2!tOC(4U|yKPi5mpEmheIyZuhQ<Z|m+zH0j940>5QfQKFk
z<@6nLN!&|0JhEUw*M41XUFrNESwQdj$O8H)M;08?^;um>){zAVa3vANPa5};mg6Xs
zN9I0^S7uE~zp+UJ&H<ptVqZpra^a#cm<t!nOOo$mCeA*6umWH0`ta9B7Lc=y|B1YJ
zywkZBcx2c}JKjpXYcxj|bm8~N0zUPI*1z#7;8Vb-fKLIR0zL(N3iuT8Dd1DUr+`lZ
zp8`Gwd<ys!@G0<TPXRdO{QrCk_!RId;8Vb-fKLIR0zL(N3iuT8Dd1DUr+`lZp8`Gw
zd<ys!@G0O^z^8yu0iOas1$+wl6!0nFQ^2QyPXV6-J_URV_!RId;8Vb-fKLIR0zL(N
z3iuT8Dd1DUr+`lZp8`Gwd<ys!@G0O^z^8yu0iOas1$+wl6!0nFQ^2QyPXV6-J_URV
z_!RId;8Vb-fKLIR0zL(N3iuT8Dd1DUr+`lZp8`Gwd<ys!@G0O^z^8yu0iOas1$+wl
z6!0nFQ^2QyPXV6-J_URV_!RId;8Vb-fKLIR0zL(N3iuT8Dd1DUr+`lZp8`Gwd<ys!
z@G0O^z^8yu0iOas1$+wl6!0nFQ^2QyPXV6-J_URV_!RId;8Vb-fKLIR0zL(N3iuT8
zDd1DUr+`lZp8`Gwd<ys!@G0O^z^8yu0iOas1$+wl6!0nFQ^2QyPXV6-J_URV_!RId
z;8Vb-fKLIR0zL(N3iuT8Dd1DUr+`lZp8`Gwd<ys!@G0O^z^8yu0iOas1$+wl6!0nF
zQ^2QyPXV6-J_URV_!RId;8Vb-fKLIR0zL(N3iuT8Dd1DUr+`lZp8`Gwd<ys!@G0O^
zz^8yu0iOas1$+wl6!0nFQ^2QyPXV6-J_URV_!RId;8Vb-fKLIR0zL(N3iuT8Dd1DU
zr+`lZp8`Gwd<ys!@G0O^z^8yu0iOas1$+wl6!0nFQ^2QyPXV6-J_URV_!RId;8Vb-
zfKLIR0zL(N3iuT8Dd1DUr+`lZp8`Gwd<ys!@G0O^z^8yu0iOas1$+wl6!0nFQ^2Qy
zPXV6-J_URV_!RId;8Vb-fKLIR0zL(N3iuT8Dd1DUr+`m^KS2uozhh3QX15CQFXr|y
zTpYOMJy&mz-+W`^+Q#+gmB-fKuztf$>&y9|e8EZ=Y`n)Px4!YFt5<B?xZ-BQHExbK
zu3wq?y?Xt18ynX(u8*Hreo1Wk@^TLlu$xzIyc*^8=)Ce(E$go{E#*F6yJ5qP<2`T5
zMso4y1)B}f=z6meEH7W!+<4uF^()J-Td{WS+q?p!%MgK<tJiK=f4x9*@Zpcf^)2h1
z!a47<+j8E!kK*x-dUDbFO)J)}URe%0UmtJE5O@7`E8_7RTjB&-u(Eu0bNTuW@$wbr
z271$qjjLB&ySA}>wL2K=R%~9qu4P?0FuAsIWBG<v<tV>#^|dYW#%9!7-njX?#>SP6
zF1Xr$&x-Y@#mhA!E1Db2n^)h`Sl+UJZDVsY9+t0cT(x?AWBIxbD;ouEE@N@=+Q}dT
zP~pFR#X6SN{p$4}WepkVQx`O!s!pxi(6Zjc>$;Vz2(qy;yX<uvZX`3Qo|TPjS&#0o
zZxnr8n!7Y@TDj`#jg2c-Ud<P%knnt#^^=eE4BWUP-gxzO8`j;pB7XJC)$6X_v~op!
zh2HbxjF(eOAW*xyd3|Ht{KUO(R-Sj&x|WZ&tiKA4oPEYw&Yz9%xN6-hJh^J^>T8=f
zUUwBh&u|zT^=`bD|0=TTKd&74H9KvtY`Kw`kN1oa>^}(FvU(%w>-6h9aD~ddzez|w
zaDStB-h1%L#>VUPGjNGG%XF)J)#|nGc&}Z({s#TlFg2}MzjAHk%JQ2H(X;9$;@R_K
zOnv1G4Xbfb%Ga&9e)V+@pJt|<0cdWFm*2Rdd3AjC21uI?<<~Y|zj{4dGXGt^Vr@$!
zP_9|M4!4WXcn2Q4_lt3V`LgA)$Oi&}W$5?fGx#JBSheDYM!-mDIrn;wX99`2H+qUX
zR+ysisd=y7bC%wOf8*oV5P47CrD)OoH$F_{()T*=Nha_UC@dBZTnlPsi&TtX`GV&2
z%CCMeAk<m&dfn>gbt~f6HM#9%-kT>5kFH$p2qFBAU9$Y5=tY-BYRs%&v6iI2nbW$Z
zx$(SmfHtmgCXqD@7p`8vvT-xSL}ol#^C&1&xcsKokW+2}7p1^h`Qw$&D}P+sC&A+^
zE9<XAIfx#oeS;rGUzU^*j3fEXy^$@t_auk6o}fa5rn_E6Hg4R&aXk;zo{7JtIU&Z%
zHcUaModwP1Wb1L|Vl~F`y=zx!aaezyktnS1x(zLBS5m}c#oMr{QB#RxO`ReD{u@iT
z4L3HfFGs`UlWjd@VI!u5GpAKYY&|6P>gFa)P6=&IAHAWRXug^2DCFg}8#YQ@;(q;x
zYg<HO^&R|j$)#5`fL%->(j&K{<tx^bf4n+3Vkt4@QFi5ZlFn=cOTF{l3<C&Ue)<Kx
zu37=P;z)Uv*@Q9@ZdYT<W5%myJcmpg?+xp|ZtaF<Bbi8VP9k?{LiNu2c+<w!ajuI7
zQS`kr?#wn<XnSkJ`jyvH+?$rMF0Eg`;p(+3t~IL*dE#_&B!+Iq#v2S&4HkyeKhPLA
zZy;MXY{a|_1X|XwjuV0k!qv{YrFHu1b&_7r{R(O%P&8IwyAeyy%B$CNG*+x!dG&@>
ztAOa$jT?<hkoC;;qZx%7uU@s{y7&g@8U`x+8KJJ*uwmoM=9`7+)Yc<VqIqR=){^9|
zMXOz%>;p9yHOE){|8~wiJc=Uy<24f$<P67hD_J0@fY5jKJ%I!mj>Je}I249ta$+tr
zA>5~^2&lLs3tmK2#N}9)!$nXKIaEMpk!!g`M3x0t5D^ei_gmdF3Gj1$cAw|>?Ec{l
z&xfwAuCA(ntLm+{tKW*-Y0{G1U|JF;-GbuW5|o*i#I%Y#U8X@eus56wZah0@X;_=&
zIEkElS$jYrBhg046H_T>-ZGdRPJYPyhI4j3ABJ63KH;-S+3smtQZPR!_)tz!X?diJ
zGLih^@86SA5kz#oga~olvMjSW&+TNaPoPUUWfg})*+JLx!1#5Gj}OIX2g157J`})&
zfw?59Cwg9W{J&QhC-)mF!^UYuhbFT2FDORGa{FpZqSGUS&IDfA8FnL^TRKA(1>@oi
ztIRF5c_dvZC+DF^I=Ak{LEHr!l+CkF7|p}Nkur0#^Kx!BT(7Uw4cD(LGm<YWC6ccj
zM(x6OVoD<GC^)~V%5E*IpMt$k1jBZ+6As&iDJ8}CxRwMIZwNgzY{f>(X39EJc2yYp
zFzH3&Sr|Hrz0a^59P8f=K!XRX|HXCb(xq)&wIssEHdEm2v8sN_BSYmdX>Qi7uyd+x
zaA$hB`CWiz5UvLr#LW)pH_!2<rG*8U0-WsFbY4=Pk2isG*lls#%~c^xhoTdPtpL1$
zgzJiYQAQw?pIPd3aGbbr8jhjxizdL&%w>_ge||2D^rPx`mZ};#H(=tZ5@1Tzd(Dk$
z%sAK1V^VS2Ej$55O8z+m!bw+UKd_YHcaxxFcb1lw<QHTyr4<JQ2?FWW@80g+`mrHY
z^|}Q;5SB~TgwC23#?`;DkDN09uWf>C-1bCocV2lSwt+Lp!KR3d=bRVWU|D%~Vc`wK
z-@P&V|Nm41k@b@;dt!(OHOUB*|Cbo@?(P`U9P#@a64Id&A!~7b6=We?gyZ|*0x-ZU
zh&vNY$REH^oL|AQ7UJFpZ{R!ui~<Y56z~J$_kwOn*A6_3xbJYx$FVPt$&Cq_f$P}_
z{{*%n9Kvx9j?KVF2scHVb2x4Wm0%U_9e}uo;3Up>;`}e554aa}!hPvDE(e1^b1)uk
zLj3nQcEo)>ao+?m80-i2aP0(m8sUT!F~pBFU4ac+BmNQa7_JrKD1#Kx8{~m;U@EQ+
z#Bm5n1M|U3&>7|Jf@}|gQ{WqL6?pc>kb0mwXa_n21M~(1Ko%$k6TmDm7rYFXfYo3V
z_!JxkUx7;?W?u}c4_bltKms;M1{oj|i~y6s6W}?p7_0%?zyWX)d<SmbA43{~7N7$V
zfDV#CGROb{PyounMDQqh3d{qQ;0>?_yaV0`AA`N%DEJ#V2QCBeff#ZdXbf6|c+eGS
zAQAKh>0k)R10%pVK+u!DB!<)=w~$*&O;U^8MrxBfq%NsP>XQZ}mNX=dNMq83{Dw3o
z%}8_7g0v*9NNaLCxr4MJapbq8Eon#ElX%jB+)3^tcax5!6X{IuAzesU!V#VbL?jZC
zi9#q*iAHo{5R+KMCO(otx{>ZAktC5Gq$lY`{G>POL;8|_B$=d;dr2y}kMt*LBpoZ3
z`9+ez7iD*Wa)douWrN;e65_;J<v{{W9*&KgmV{Rooa6t@V33)gX-P~4hcDuN3KlEu
zSI1<9`5g{0TQr>HdQ;U&#Y|jS2P`LCV+FAS+@NEvSD#g-sy2q5l+{_g24-4PK{jlD
zyiz$KtiG~9$g$Yi%)w4j5Ny&w)+lB;J25bbU<)G1rl#@|=T#kN%vKLS6AMO6=PDDP
zrO2&L9>UUZupIZn26siomMX&Mu4r&2tFR>a5PN@jFSwGbvf5n(p9w9P2@^e>CSveA
zSFe*AZo|Vk?@#U}yq&Q(ANMv~3QN~b#~wQT$cSLe%w@%yg{%$T^h~tQ3!;<P^@2w7
zVodK&$*|m=>k)ZJUUHn5mWYU|-(Vtd(a!3lvnuI?*qWphV8*8tU>1cFa304AF(cIp
zgsp(c8*SB!LDkYnWPPJ*ZR7fdjmS%O^#WjcNq`+-zE&B*PQa~4*hFSA%si@oFAlE`
z6bHjg{kVjF<)%TveH=HyyVnqvR~2HV;VL@1dvqQe5$>b9f$)8Z3g71#**BX*|I;}<
zT6k0fQ3*sP5S2hw0#OM>B@mTBR06+72_$TeiIqTmKp6PNVo_@zjt9UBEDe<7gXuMp
znVE?d0z$s}z)g1n$4xj-MtTo;7!E~WfGst#PE-r)P#_8SZEZlvGsszKLP($~AyP9!
z#x^G;bw^BW1@33RxS%(7SB^KfGS3@(4kYAzV<$5Tys;}Xy-vMYI`$1TYYe`4=y4?@
z%bCwh5k9n*jbYz(*)?~q{%0<-o1?#|1fmj%N+2qMs05-Ch)N(Tfv5z2WfGY74YT0g
z->Vm6$g3A($lB}TYFx#)OT^7NSDkL?HGC)iHil$h7q<s-(-8M_zqPpbpZwaR%$8s|
z?yCf|!BkKIhJy@{0+N6ZIB*xZ12h4(ffrmx9$$kK;2_uqwt)>`HCPNP!5lCHOa-Gs
zF~|lFf^^UaBmfn30kPo!^M}`>$@Rg1lIPmXG2}h46C4D`!8vdZ)cPKB0CAurP(Tvs
z2QokwC<bG}bWjPF;=XM-?gmG}1>n7cZ{DCK=nPcg2LnMdm<XN(m0$%}2i^l8gM;7{
zxC|<h_Z%<-j0eSF80ZhW0|j&hZ9#KT7Z7my628BKqhL4q0Bis&!D8?dm<^_a(O@_j
z3etfe=%6EL4PwEq;79cFbKoR640eNU;BBx1tj2Tyw|~*`@yimAj*nmW_!y8T1Vq7c
z?;zh1e^L=PYLx^D`3J(eWjXLs{2n1VF*wmZJ^rwp_)<@X>lBaWD1VRAk)eD--t=U^
zPrkeWF4%Bb807IguJmah?BjtmG$CIiCpa89`H%2q_(RP1g1HHhvg^;Vo1hfuMc7%A
zS5`8zl)OTiL$Bi{Kq{Ru`vAVs3BlO_DF%D|h=NB2+xbTB_xRyc%G^2zAWdI<Qcq1u
zON5V=$B%F%Rl3LTI)akdJsH`|2_v6O^kk%kgXCF+nezrAa}i>GvGB4&2%r3&eL*u3
zMs~r%Oy*oY4rlQGV40BhkVB{<MAkBSgf|iW(UVb?c%dgFoOGR&GLNiut`@_~f{=}#
zjN<alJXAkKiaZ%Ta|?0`v*B=(Q%1=1PEFu*k0>|?M6NoXBdeS|+&c+b;<Qh8xOTlf
ze)v#i<5?yk2LvGoLO%9X<cux|m7}WUqevLey00;LI7upz+Le26kH6ZN2VP6vQka8J
zP4^gf@u`b5CNcQ>L+Nx&!4VQ>-cD{9MZwFdTMGP9oh0=Ub{#_QXYG`d?l`(+urM|a
zR^%|x_y;_Grx9LqS{ouHFFPT(WinVxk1lsk`lFvkq#g92bHTITO%?C)r<P%-QwTmR
z0Z<fh_db3>{E5gBZZ6p1kr!~hgAO1rm9<pFi-uSp|G>zeljFD=2_I!Co$eP1jV&k*
zlxCJ;x5LY5+wAN}EBr|OJyL_%+kv**>cQ3mY%nOt_R1ls-wkd*q?yN`9LahhlR!bJ
z5H7OC*(vE{kb4g2^MZ;ToS(%wV)YJ{!krs#I!?t&E0%-PSc#5He+zcb1mK>Mmh2p*
zCTEUzy@kk0HXfO0f53I^FYx%?#wHK4`k}*LL<+3=GVdPJ*yHaPdG?`B{lmkD3=2y;
z+zm)3t1n7IRj~)K+J9`F7kMEbo|-J=Y-{<<i&bQ&mwe7b#X&e(jrQg`n&Y?|gWWGh
z-rTU>ndpU9!k~QEi#;8v;USjB$>~#Xs1%;Y<+<dqP8>2K!@cO>D6iC;n_KAUs3Yu}
z(-2q}_vS)t1j!X|MQ-?3G6r#OF1#mDP=Z~ACkWdUQj855A9~%5M)16JN??0aPOwl}
zFu#m!$5qE0iPZ1}a^1Z%lUQvr(pGvSdUX*AgvHdx6F?)D!nx;=2TSS5Y$pkXpHlS(
z!Yz^I2^6}zXRXKC`T%VeaHNx*mXX*$J;_nswNWAp3S?*Hk$X^YXkpgRNuDR*7VKPE
zgR--S!%04nn_Ym90mDfk0KdKx3?T?<5%P6IL$K>F#J2gQ=QCONV;gG9#w0>>he+QZ
z{Zo4Mi_93mY+FRHMkVm8mH@t_jfVh^E8XZII)rA@99lq&=m<KJj-eCi6#58#oSvYZ
zDygb!stIb6>R0=zscO19P<>EctsYY^tJmPZTSKd*)z$JeQK!10`}9P;m%dDIYE&4z
z%>Cv>`&oOTy~_Txz24qvZ?@mJSNcdCA+u5T5H6Q1;YM>ixn0~I?f`d~JI0;hPH|sx
z=eP^pWv-N8z`x1=B=ix>#RFnpsj<{X>Lf{$CH0i<l?F<gQnB=*bVX_;H<eq;cgSt!
z4su7ii!8{Btjo6CU9P80Q+|Wzs-r%j2Gm*Vqnc`5GCEmZtr1o$yN!L??&Rz0gHtkr
zLM8_9<GsSI!YbjguwL9K-Y*T8K9_Z60L`bf=`z|?Q?vp4L;6U4sy<8qlm3qWo?d8-
zF=iM~8ox8<8qXQ0%=2b*tCJ;Jnw4dZwx(E*Sp)1-_IbOtPw*MOZoUj33QEAYR2<rH
z%ejqs)_Qzf!4P%`p9tylH2GP1v;0^27KJLg%Cm|=%V-51ODEE)^iev49;Bbs7V7Ql
zZ`FA9ZuK6OSCh3IP1gPTeR_tzO5dU1Vtip-HuB6d)+5#|>qTpswa!9esra^vL#4b!
zJ+At-Y;BSGomtCjWp%N(vN{dJ{&pPR;)?j0{2P2TVWO~KI4is?)|Bp+LefmgS(9fd
zk5Nl|KpUgQ=#%w>`ZQynDOt(Z1p9gWE&E>I3?CDugnasOi#d;wCrlEa7p5z(E6>v9
z)X<OUywSkq%|T|CnP)Dr7u(D1OdneTNyj~lctNTwkCpexos~zGmz1r_bJ}OxBz>zc
z8i~gJMjm86)0mIv^O(1ox0&_KhURa~AI!nl->pt|S9_#g+xI))GT#aIJhL&A<1m0P
z=GXHZ`7B|Ka7g$}s3SFywo6}1$CXRUL3)N>r5?4W+E8t)c2@hSY3L=x)zRuq^#ygI
zx>Q}GZd5-|KSf{v8|0j(4byV9hqRH}EN!l~NL#6`)3#_IX$Q40w9{IWo~n<~x9Gd{
zTaAXsoyI-JIAfAgX`C~z8FkGj=Iv%XGiZj)XUtd3rRFMgz1hlY1L=>mCRu;7j@Zk6
z7#V0FLYCri3wIYMalN=SF2EIXYq$;EZtf8GA%7U|^Nodgp{rmDNkSd5f%t$J5EqC`
z#0}zhai92w*jTcq1=12}y|h`{Deaa{OE1fRlGn+b<PYV2@^a-JWwWwRIjLMwt|+xJ
z;+N8ubU!^pPtse^vH|UD?TS`UZ=uKQg1$t5+xo;hW&LC|vD@2S>~3~%JA~2vj=jr1
zV3QT@xH&4kC^EUWl-tQXM&3&KP5CSNUiv*`TMM#HRR^iV)B^P#b+4MIy`sIXZPm7G
z7f?!5y_McWAFAi+g&0xK=?nG6`bvGhzDfVVtYIZth1M0Tvpv+FX0Ne-@R4_&ZcI9G
z4FpwKB5jd&NqeO`<#PF`+(?<B{8?#FpQb<3GPGSQ&9AM|+Uif~F@}hd`46LwxybBb
z1+8RXu5W~I6qEHX_$J^mgsb4Da*uJv{A2tx{Cxgl;RWG!VVO`9TBSsuF3*vllXu7`
z<a6?O@?_PkP1DBdbM#96HGQ9cR=<Mn3tbEq{rVZR!1~6zXvNse?R|Dz-y&AVF}IBI
zTn+v<zA3+n|2yAT_*@tzJ}xbkmP@Oo6VeY-ExA7Q)d0Cveq3HCug3`Z9IexscBVb(
zP&x|Q=MDNE-G|YClpaS*ou*&Y^YkLUf~Q3p=UjbKN4iI%((k0_rB|h8(i-%DkEH$5
z5$TL{0i&15HBm|v`F6Rz+!;FZ33;P@r!r4@P1&p-QomHMs=d*}^R!a*?`_&A+8*t8
zy@TFKAFK!Ud|faMBgGhCJZNaX?!I1lG7t82VBeD973+wxA{7(F9^##-^DO!bZJ`ZB
zKf0>TH$Px9fFlV@J4wjI=qgda#I<j={>B5wFeAe(GAqn+=0bCcxxze-xxs_I9@tOB
zm2rROnxT)6fCkwrd@H^ry)G@4?vOcUtg-~Up#e>xgXybuFFi{&<hxC)p?8N?TCX=U
z=lYJaaybw7rC^T~H(xoew${dKZ)#02N|)=1Oz=4Rt}~y=_v7#5NApwoNBIT9Vzm1d
zv6dW<c|?>$@_2cQ{0DiJyjK2Nz9e6hJ1AWhNtuG)_LOp($v)M?)EBuiAD`eCl7%F3
zpfplCC7qQn${wY*(okuwv{mj_c<A;7rCfPINu@zrPDj)6bTXYrr$cs!_4kck#$Mx1
z^CNSgdC2ryb*xzE*Xj0b`}g)M_8ayJd#$|z^XN6qDbsv-!C|VK?8n^sCAW<~!k^^N
z@Qs94LY(k~I8Uq;Ul&)2Z;9`UABZ1|`^EF3AkC3ZLS`3eM~&ACv?6T;T6~N)L7Sqf
zdS5+VAEZC5&v(WmGA{LCj}LUIv_sk>9h7QdOth2lmdRwdO~>$0^1tU_<ZFw~#Bt)2
z;(X|$55>>KGvYUpVmrC3EXicH2m5*O6Y2@c(jX}yU6dNgt>oXzFUl*>+c(K)AfI|l
zW2Gbd`+YQn?#Il0(Y|WOW6td9>&M!%(u2K6*gwZj;2!6m<j4v)Po^E;;rH>!`BQwh
zFiMyzOcz!P9|(JdgTgnk8JbJCOB;;87)LN`)Pn}@YD#7wE5|CeDlGD@$C(p{!`^wE
zK1JW6pU^|}7`>=A)LLt8HL}Zt{Y%)-CTtOAIXZTQcu+hiUKKr3GmIcxPL#*nCv9@h
zgZ)v2oc3KoO})<i*PP>do1ZT<6~~JL)oC}{ho)mJ=h0$}=P9(U>d~1UlEvocST8BW
z;iND~93p0lIbwlWBwmr1DioI2Wc3mCWA(Het2KrFahqNry}TFNXN`VH|6KPNb&a#e
z1w%D0a~L$7AG7h()?915^$*MIs|oofU`|}_+v7XvyTs%e=Vj&&@p6O35^;z4iCD*w
z4c)k6R9KJVzBATY>s#xRbrm{)p)-cOjtnxnB^;YS8;LW;r^H55Q|WnSfijZ*ovt@F
z8hcHW;C06B8SX6CmS4jEk?({#D$AL3A3$H<s<fay%~waN>(r-=1Lhj*W9zat)}Co!
zvg`N;`--70xBHIy&a*O8z1SB9-!YEm@r3ZLFk5UQb(O}^NsybSo>HNNv>o~<dWG?{
zvBIchUb5=ixM7%k-`m(^_BWmiuL(N^zg#4j=oR`ReS^MJ{}S3d)krr6LXQnIP8-E$
zxrzHqy;xO%-x~iZKT-I-@FKMT9wA8@A_b))=|$<7bW-|CIxk(8enkJTEyu#%Yz=Gk
zF6ame^Id}6Q|>4Cmj}v2<!pI4w0H&d##GE4Pdal)rMyU9idk{3yg}X~Z<lvr9zHA|
zmrp^bT#&C|BiyY@U8RxIT)9JOuXI#6MNv$pyW&?;lyqgVG7Oerp;D%dRwlxpouSND
z=0bNYR2D1CmDS2R<y~c)vQycu98iub=M^ulMeEZhv?YzB9Wa9kRD}&W8W!X<*pIX6
zT>1iCNEgE%TTOS;J@hcFpl@l68ml%}?|?<AsXo~Hz10Djvy0UV*g~(WOJMJRq5h;c
z(O%M4VRqQ5?bZ%xN3|2Md(LSWwQHJJuZ7vXozCg9K3pHCPuJ(^FEKrP4BzN*h?SaP
zEVh=Cq<+#YX`b|gREb$?F*N!LX*Dw#qra#Gq7wM8Ng$;=&!z#w_OL_sk)(h1cgzN0
o4{6D$5c^AJ4`%0Njm*Q}J1Z>5-+^MwZ#mfyMmFJ=W@nLq0+JooasU7T

diff --git a/Utilities/CAI/cai_dll/dll/szlibdll.dll b/Utilities/CAI/cai_dll/dll/szlibdll.dll
deleted file mode 100755
index 2e3d53b7fb40a148b3476bb46c0c2b7aced0a6b3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 77824
zcmeFa3w#t+mOoydt|T4ONj1{JR)Yj-9h{DC#=sbCkOUHl$fF^U7?I%YD4WSRqZ7IX
z#=M}Com4KZ%r5hAcXr17(cRf`_NP1JD!PuQX-q;;AY>E}mEemC%_9gV9Y|8Y@43~L
zbRZ}?kKO<8V?Liw)qS0N?m6e4d+xc9T6p(n!7K=Zh@Ykj!ZtkVFPs1W?0=m|PM-Ku
zvhZBO8<Vz~7Q8WOS?PDyq&-yr;NO*h>w9V6{?_-u|DZSRZ|_el_kBO@JKs;sU0jg%
zy$A2R|K_BmG0q6+o}1tL`tKHRTW|dC_WXYR?-Bk+!Sn0?mB+uh{tTXbJx{OyPdxAT
z{BC`iKVRngmVW2krBwD(n0oRAVSz~$x|ZIWW8~=+k|!ma;sjwYVmkHM`xu_Kp|Fj=
zBTRImKjSGhne=>!i{UBAMCIrof9j94V}g*5to<Je!W5qG691ks2_Gh0BJH!HI|bq8
z&q%-7d;dBw(r?+0e}vcG$P*9aFHI2cy}A6pZ+X838YLpO6F<sJ&#1p_h{Mf#Ho?(|
zgl_!OB2PSwzidHhy1D%R2Oj*kAY3sPv1l95XTvk<FIy01M+Lun{fYu#QQ#{Id_{q;
zDDV{pzM{Za6!?k)Us2#I3VcO@zXAnVQbxC6%WQJDZhhTivTfaqf4*_0-ZO$trD>bI
zL)>;=)3hMVbz0=GrFsfm;7n!9oQ@@UaV#D2W?$l2s$$}cQmH{XZ2SDo{y9cw$LD8G
z%QZ5m`ECS0se}O#uzL`&6Fzpr$L3j5mbO&=-B9lA&&!>?RJG65VS7q5sOc%Z5teQJ
z)b!0!e_AY&X*dcsi&hic%UT1+V&x+y`F)d;<OB#Mr5hPpE8E-N6*wja)ObBr?nH)r
zM3b#<r;;)S8Mmf4m~7rLEwNOJI8KyCTddTSLgsa*ZG9pEkaC?4B}pZiV1Sa6jkv8_
z@J~tVM5Hop0p8V_w+Mo&enSu%3C+4DZ#-{8Nl+aJ$c>c8)m$=+{^mxiy{^d@t8PSw
z!pt7^Hn@Y#-H7^BT}*)V4BkwZ#L;M$`)pOQfpAPHLGH6uiLALj{CMw7LZ@z@H>vbx
zBHs;w1<9%F@r^Bgk|K0^ikVF%K{ld(EtVv17$Nz%rC>R`iQ1XDv#>}3Pq#e;33X5L
zCdy4>&dkjSRGelL2pLMv+_}wzD7@O-jz}IVfIJ*2N?<LI_YSZ(rDyiK_e*sOkjw0O
zkpQ_(UaK4s=WgiROGUatTAN(qv|B2_FAv%(zk?Q5-p6JVn_eOx2Kvc4Hj@}DZE3Q`
zWF881#vmqz=qhaqCI$nY=EMLAB7X^Viiyq00^#Vg)Q@3FlrKl&k9t$rNkDvsSRP{X
zd0X|$MyiKRBk+1{JKfu*EdhCFOlDKyh}r!KDot!<uRZSC?zazwA)4*sSgl$RHUu>=
zEpX)OK<C)R*2Fd)p}+^@6L+ydKy}o|gqD2)-~cyK5C}HF298`6=uA#*<+2m_U|iy^
z#ff`Zd*GO(-p1otdv@TMZ7Ve`I>r(mldT6VdVy&qusV121lIg`ua<e}MPfpPC3C=%
zPlzQO&ewoK-WzzHx_!P097fHqnpGwB4*s6Kl0#o1@2~_n41y}Ns#ob0*svQ#vsv>h
z)>;ziau^(7dvkzsgbibLt{`q@;Fx7(<cc9)=@s#MsG3r$rSv#Sb_m)LQL9Q;as;-e
z0bTX^HRw1y(8={qqd-YCen^eB`|m|;0h>VNf}E!VM4=pxDN>+OrMe%)qWkmy+(;eD
z-C7yL0<KmzZMdWRtpXS6cK^%HjBIedE9T5otW7>*KJz34=P9STy{<{&Z@xrAY{L%1
zD(H?Spp|3&TX;$6>P6|)Pc1Bo68z8cXn(FV!@q1(21_DwtlP<wNFae<npC?KE>F47
zB-N$hrGaasOsyvn?_c1|km|Oei@4h)dA%qI{!PwXfE`eEX6|cPGRQumhZgwQV*Uh*
z%`usWO#qvUgt4U40`FVQZ9I+sJ5h8>=FW!sF@Yl%yr<H;nYB~S3$mqCk{FdO_JVA0
zQF#<}$^naOKjE~_>fT>1n)ih!DH)-Ou9<g%EAIUjiROLs9?f-5$qJ2ODHQ2?OR=#E
z=M?B3w%_#@%DojSmxXfEc)7QDx!s!U696;H?MFGUGo8x4<=X#6>r4Go^?^sgmC8bK
zY^+6J=sE#L5l=qCGjk_Mo!n4p0;voV%FQvX9W(*Khj9FwVhLRzY5qB4#psl2M+;FS
zuZ{JUH+F469V7`<pO4pvw1#A=q7N)uqy>&z%zfa4V{)H+yRxpo{N1jF$j2qhftO24
z)Yk~|7H1|&6eNaZAWEtRE|4mXS`(2f=SZnay+Ep*BswN8E>43aXcT3OmMWf27rqhM
z<n0!Y&zIovUss~q!HE&lYx!*HCEoVwY5^rl9Slj-KMT4<{Ue@Sq86DN#{c;w>cU#f
z|2dSd3)LEMfdp!iX-J|5FOsNt8lO~1?MBq+c>jXh40rpQWLFzICkM>XmYGdwo(79a
zqdB{-u^0+h4x6~nmFk{`u<4pt*SoG(-Nb?|cY)H?wJlVydGDDgp>lJfwJxc4Q((b4
z{hM^vyF~4PjWn!!b&U*^Y{Tl8)GqHDuR^b0)HRkwl<h7&(I0GF-Xp3tCvzVJ*ao#4
z(Wg92mOHGEixbkL6R3BRlGSsv-L5^*3wxmRc8<`Md!X}nlCJFIx-yCD%H4{^(3N{!
zyHRd;q};Hs+|A2DSDxm&QZKg$<s!QB3)k01lD&IfGU|#m?}X->sMtc+Fs{*Ez3vh9
ziKN*X>@|`OF4tSQT)#}3awC`PHC4a_re{MkI}Iv0Ce!~fNek4#2Ho4s|08r`M1m*j
zz)6ae@#>hon<A9_{<+YHcq>0VLVP9vBQOYb5tif!@jg<FyY4~M=te>vT0^66+J!Rv
z<qU=Eom^UZ4~ZBaelOVxwHe&7tZQoIR&nhLbRKjism_X*h|o3-SqK{=Lc5kMgqOL6
zkhu@UUaK`MHZ@!+x7eVr6G{9agot1KX+)K;J=0Kh_JXuNq)ma?ukCFp3SW>mfV6Z<
zJKs>$AC-n^n!Gw$o2zx5<Zi8w_lpTiTxhZ~9tts*59h61L|Zji00}VKxoEd3$-rug
z+$_Q%+m52!QPeJ=*mX*B=vo&y7TnuWv`KE$Tzip_(8x;y3TjNJlG|MYlnkIGjJRZ!
z9FLM5zB|B6?$n@cl8utvQ4+IUD%t94gNV0r5l;>|fmm9k%C-ut-<}|&Bv2f(K2U!|
zdpGOa`x9y7Kai9UkaENL{3)KJazKot)|aBv_DJ`liqXA3DgRYhJyiy?5@U#5f%nXw
z%$-maj)vb({YEy;sv0&;C2O&vb}9|=7)%md(dx;2lm%0v{HMaAD1W1CHcE2QO2Eq{
zMJtu+dfCb0a?vt1EY?O7tuuybeR{EI^%|npcd=-lH$-dTE79VHfgxJ|A2be$)<5An
zDhK`oq7}-}<!a3oQb#aHni?LAX^4k5f&6eeBEQMxR=Gt~7WG3IFVjAN;)L>avJ~!c
z;WHo%#Vxr`OqfWPw`5?jw@G!)*hS(23Rxb1g>#0M;=z;wqq-c{ke({leTdwcJ1?V|
zL@RW?-Q1PAkG;|He&Q$cfNkw~)*MjbBqH}f;+(+8wtDj%`L)Qb5twJd*}}qASuc^7
zz}0R(M!DbU=uGVXjM5v9(ng*ad66#UKAPAYm3uE{x%K0s>+)bQ+y=#rkpxJm`@X*L
zbE_~2flh4e`Zo+hn8He%eu=Kfk`BOZaR(|b?${>)xIzRSQ#k?1t|k(=)Mx_i4s_Yb
zNnt_Li2#XF1X#uiz(=v|RWtP#aW536?`CS+5E(fXI3<jxaVXah(IF&4d8fIk$Pn#D
zub8}wktRrWeh>v*uwnF`>TZ?fKVaBuq*gHuRU#amRoVIke;X%uz^t<Em&Kv?`Bp1l
zXaq61G+f9bH;7zb-<6HZ^9d6$X$oQGZuKv7PL<@x2+J56ojO!`y9o8<$Odl6mR5C}
z-=o3%$l3x&M2u&Ml25?f8%>8%C2+oPKT(Xkp*Y!wC_QR+u-3s*+AD4R0em9}Phr-d
zkgtPqbngWZ9g<uLFBP&m*p-Cs<n64T$av0HHC^Xz8{2D!vy?=9sJ_qP>`0!Did=+#
zw9SnVA8yFHE|6Rpc^ji^92H2!`>A(HE|GhyZjY8oRhP&i@fsD%hGE7-B*Bf5eSw#`
zko_PPO$w&E1Cl(0dRRP&_Sa@Gr(s>!%QV@TN!pBzoc&y(9pk#=b0um70sqoE4ZS3@
z2^u-8VZ$;q^~2DyRk#0XeZkdrnUX>ZW0^C{y;qVqQP+%Ti$$2CTLK&vNc(L6Y%QRQ
z)Ej#bz(;J}dwHFb1SX$K`S!SuT|P2$i^Uz5HhQUF>f;$Oga%K8FbRI^W=OLwM9wNZ
zMbbb3%4M(=8W*TaSZ$BJbS3Y(Hcye3(t5!dw}%>8;Y_d7d^Zn`b(#A{D(F$W13{nn
z>sbm4dof;6g}z5*O=K-qvD+}JpugJK-l{DBIxTPt{<pyUqH8<5OlmFm?Y~?qjTp{;
zJs!=0`=@TFw_5HKt4ujG2)Bc4Im9)#m#}C9(d@*v5rg@tx+)*4beYqRwx*7P&!|NV
zeE6ukzz%#a997{KW+~jNIEJ;S&r_G~SQ?b2IvFITo-D~hEXYJgGDgM`E$ZC%mmkG8
zb<Ib`=!dL@ENsZK!#`h>`;w&}{dg=kAUpk**;oRBK)U-Rc`9ie3-gGWFSmEKAIq7I
z7hXmj1IehKY;NPa2V+26M<;v3YKn~R(vP~((k}A;6Ym05`8w}V77H^X=2);vF6wia
zG6?L{=j^^coP+A+X*&#RY&$d#@941aF#5Km#a}>VP^IfKD+6K<PP2ft@pVk{dSc0H
zjhE_vLHq_G-y8=*!ned#5plcIglQ@kD_g|G0Nzemm_*T$7`C{dCu1c`iq7}hnUEXS
z6@mOL<J5gl+USEO>dFC5gxmB>;dUa1AOha7$u_DIai1#>cAdFGZy~_TSy5sGe_!BO
z%vXYQiFrnp;Iu(-So@IZ{40qLi1|<GmLo;Sj0H_Nk+|%j4{@Q0ih}U`X(3&XK39mo
zOG4BS6PmC*i|4R#8yKE|bYGrKmT&L+PXZB9Jl`B4LFT|Q^H&mdc@i`vKf#FVxm&tW
ze&Vq-E*~KyHZdTdkRtLk6vgG|;?QMC#jpU3tRf+*ipu~)8fp;<*RPUw4fQiTM|J@N
z{)xCRAYdK>Gpc}zn4x_oU|&+e`m7gnN5T*<AE5z_1k6xSLs4A7D0CUJFf3AkMxa9i
zb~{j~A@G}*Y{Ci47Z9*hIKnf!fW=~O(pLiZ1qJL#M1%c&%!L9rG0=&vUK20SU=;O*
zMC#8B=ERuGl@)1Y2I;p~aqNu5?*%+Z>Nf+k%Lj=8^dSPrCl{*;V8m_@bj1aZ#eF4w
zmnVGKh(O)~NS53=E6^DyADJbeuwE`-!Gut}!Gt4t8)ia$;8?uQ1UO;!`E0%)+i{MO
zyU=dTXs2A>j2249eg{o}F(<+-?s8|fC`MIdGImkLd@}a=Q|ai60c;eH%&608t`sph
zI>AlcVG36VI<YCUT0W8d1t_e*<FAW(HQt6PY=QInD+-UG@by@R5CWZ+4M*q&vUS;H
z{zKPww6e{$$rLiiX`<4`gbo$FbYRCOq|d<;vPlT}9tV5JvFMc6+2jC+s9)^#<5Tbv
z4)9Uu{kj9(K8lEqIteA;09A=u`^7%@i>n+JMx@Fw?sKP3C~Z7Iv=_P0oqQy~$OgBc
ze9-W@ORi&+FK<Fk>kY4WJ%NH>ao{tT>4sK4K9d7Q<g_P_NRtDk+0St?;nEpd(`v)2
z$7L++0f?P1Iq-!ozNQ5o__>~U&cuyBq#^%x^d-Iq@?YqXEQuV5Z0}{P@91*yDD}js
z)rY^Ds8jXjbzR9+KlgghrbVM+H@f|cy3q}n-Y7%Ys9iJCej?hHY@UdnDVz3^Hy;aF
ze_ceVS4aH$<zOh8ZH?sY^IJC}iPo&KcuaouY&T!+lOCO`B3mvtrcI;$$g32-<+w!Q
z8<2-~1~Y9-x?tONvtUd5hG6@CreNDMO|UJ>5^NpQ1=}>YVEe_4OaG#dM{HhFP*`d|
zi+$0P_oCh;+VsplrZ^4YZuQO6HxmPGJJuVpg6Xqh#Xfhu7Q(hXeZxw_frj%%*ya@U
z&lrzw=AE|HEJ%BtpVs#{|7KOmisB$GR>*xZIy7IFyOrqTOU^umb(VV`8f;khkQNdt
zq{H-E^ZnvO?!cNK);qH6i8kdu1SV4M2J9O+)Ue>$frfjY?I#j~zYCrn1gvGxYRWxM
zJK`)M8^PnDd$48e9-Pt8cTHRC{o=ELeJwg9^42>Vke<yS7Ca*LeMt3zQ1VRL@}0J3
zhQ2+VpBxz40)V~4v@e_`QJ&dypF`o{H4<y9H$`nhA3iRznREZwCU0`-Hlq5<H)uDy
z7}@Gwm0VgwvGXFa8)lMd)If}@t|+BP=`u>5!jml=D&OISLl~JmTVgq;$Q3z{QCQ^9
zouVm8BuD%_#j7weg;%gFE#PE@lJcYi)Kh4A9Gzk-)l`+LOd|<si6u=#3py=)C1N7p
zLT>q-r7E>0mNL*vlroJn=^5ZO5<*w&Y3TGQMrjz31Z5^IWhhDaB3$qyrER+pum4SN
z9Ut78qd3gXGn)`ob$r`z38DOcbDLs8<P;oqsp`($`3iMh;xabe*)tE-X%(4&pwh0>
ze(^@>nE*~#w1;DYgH3bl#pE3K;VPB!<0vF^WJ&5x%#oWdi#H5zih@=3JAG{cYY{E6
ze*~5Q3e1n=?a4b#wiWqXX+KyaKl{_<yH_5t_^w%1(h^JSY2A4Onohe%Z25w1CAN?R
z<$*E7=}mVS={0u_rQ3$nGZq@@-HRgW+n(?UwpArt3H(-q%%P&|(Ow7(PWrgp+4eP#
zB9?_!6?1Rofv$0~u4k1mR&Lcwg7TobnjhMc2d&kPB}>&xPzo&vewjPn&C<UFSb%b+
zR>yB69@6^^yc4JBy#ntfA0;@L(T^vBBn3PONC?7))`KX5AW0NY#S4PiovQ~S5C~#k
zsRtoI2x4Nc2WRmh-C)AYR`Vd7Dtb`k!K9&}NvO6p(qXHT-UHV(IZw$=6A3+>bpcG0
zJPt&Qry%iA4@wk-GdvQUNI@(*M1r#@h?R^;u$qEcw~GWd3epiM9h7E55UY$v(2O9~
zR}su?B1E)!=~qqpCC)y=ELyqZ9g0p|&K_`D3)ve*uGXG_=$*(ca$o$z39CxBNnaC$
zmBGw?w88Ype1JL!&8oRyTQia6i!8%$|Au@ne(jr-!_u(jG-WZLbH7%8#6Qo3lOn;*
z7s|(2Lp~rFpN=XRiCi%5!)PQo$6qKISD|T!U`)fiAsFAoyCE3wqUi`4f<c`TK|?TT
z&j^BsU<@E0K|?SGz*Yne!5FxP2Mxg(xRnPD!5Dau2Mxg(ILw2FU<_cJ^=N`IP(4C0
z2DCV;(GZLQEs27LU<_#2P|y&J0qs@_8iFyPJxD=AFb1^46f^{5KzlV>Fb1^hk%BRx
zX>k_`#)bU4?EWlqw*3cy%FSagWZPt*Ww7l|yz6Y+Fi3m<5i~eQJ82L!IQIyOAZT#z
zJhCBZaPB;qgrLE>^B@X>2ItO0auGB*cYZMs8k{@-D;_jBcYYRF6~E2k-1+L5Q8{;B
z6Dga~rO#^#6f`(@UK>Y2gLCJ#uTjw8+<9#=1r5%f*M3DogLCJ#S;Q)XbLX|{7zB+j
zjT2!ag2P=J5eXM@PVd+k^6&HeTQX<dSvq#soNyuI(onC#xLmv&jN3Glaj7F2N85^!
z*<f77NXGSpWk@v`*AI#zXfUpSG7lPz>z~Ji2IKl4<3WRQ{S!wpu7B3(jO(u+!MJ|S
zLNywU>(|Co&|qA@HkpD3<NCFE6f_vuuRTUVgK_=Z#AwF#YqO#m*RNHNWE^y{WhCP+
z<kw~QHwS0i%yYyx+9En){LBK12HV!*-C$dIB-_Fx*%n4NWH#6qMo&Y~=x<@jJ%R??
z!V`JWU|V<=4;pL>SM#93wy?&72HV2g2)2c3s2pVo4eMj3(ci)vA2SWMg>k49_!w*p
zYqKb5uq}*ptOy!x!{Js68f-%_nr#S@YBc&Ag7F9r_cugHBiS}IieAXS&+l(na>msH
zrra!D$T%9)495Kc?*`+#Ml$Z;NXET5l5y)tGOiB`g#cwRu5SVl8jS06^Ps`FzO_7P
zFs|<u4;qZ?J3NAMeXowrxV~y`>==ye(~=1RgK>S@1PU6A>(ks6G#J;Xt)-yBxIXO^
z1r5gaX@{d3*QdQ2&A2|TdL-leG%a}~<K*KuoCklvnMx<&okeVrz2O=NXff`Se(?_=
zvf#H@!`+oiF0VBcm<hf?b|4UnF?V1x<_M@}^8xp6%+?&`ACQBPZFjdJ>lEy;;?s%B
z2mGnkEa11kO0n%9xKC0Fjc=GC*x8$FZe(LnyPXBFvlhF*0$s6Y)qK$XmV!utq^-CQ
zV4pZLV}r2&_bBK-DEa>dPZlIl)Hw-s*U$0dx6X2(WQPIT0nn4#7yvaNq&X!a+up?i
z<BjH#<wpo#oKX2&_rdCH_hBEl?GixPS+uu&N@#xJa`oh=kjfnvcd$CyXcejvLO1J`
zL+W_tp=()y%95n=vdMaw25t(=Gilalksf^;C2;=T7AI}mgI9m*0CE6r{%{?3pNyb>
zJx86kZO54pfC!F2SG+j@s^B$36+-@i<i8qV+`B5V35yUQnT{Y3q%i3!3j0%E^;<O}
z|EOfQ1iBJFi|pjhavww`94K{-NF}^d>N&g;>#JaP;DZ>yb@3%C8WZSB98nSR7WnD>
zt@I36LOm?H66%0@CDjm3`(x~lHOcHMNMj&mHFvmomw)2k3k0`QtI2NRW#fs~Nxr{h
z{Kg1<V%dA}nw@eWc|PP6?#0SG{lzBfnZu9~C-*NnAwX}g8OvfIIvpy6`>pabgrWOD
zWfFWQOH2e9C2f!)CzPEd$9x!|5U8Mg2~uI?vmgIj!F1HUw~?mOxWOUUiIa$tI~Wl7
z-*lhF_fBb=>cGE??z5Ql2Sk#$WaNDo|I6_IkCVXvF8sR)fBEH0;cvl(0BJ?ulv0(P
zGwi>qi;Mgkk5#xmBiCvDbKf^Y$Hw7WCVkVw4{cC4^-ui?{tH{lyI81jSC?9t3H7i;
z+<F#qxF95@^Z;Sl^^%Su)*m!rNSCpsm8BJW)Q3=>B~fN<51tAUQ<AoTVG6(hL77R+
zQ#YLefo{b=gFsiZ6e_V)ZM=n7W;9$~3PLn;VAH6i$JMJ==~-~W!_bu`M4#o4%kRe*
znzv`3VBHAY9uEwfdk3jA)b&(NEGVMhY<{DzsmjX24Of|W*Izw*v9Bl3eX`=CRV!!`
z9QB9t#E)#^hy7Eu_WX<gQ~Y@IB7QV~L+3{>=rPQX;s}N#_>m2MbkYh@5@o(LKl(%9
z$G_oU6hElMQgy6e*$_XrqnbtzY=|ExGdMmM@Ix$MxCMtU!09y6D6Zdl1H#&iXxliK
zFoc{f{AwL)Bt}`ROzZdMDE#mhsV@Dx9I!D>9!zWD_r_3WWf~1$x`gVdueZJf0rJMm
zgW0|XjX&qK@g{gwPXxQ&fj+bJ%$_CckMxMGdKTY!U7WAp7A?*zg2P=xeGJt>uTDYz
z-f;l$O;#r4Q{^*%f&ZbaSTjo@V1Y0yXi-uqZ7U_Iu`nqNijt#-?iE@A2blqf&7{1p
z^Q;B_?VujwsJp@ig+(6K2a6FMNKcLuPyPO$mRPC;Agdt-SEvq*xsl4Gx-keaep82j
zcsJLiJ>J_VJ%dB-++oYlQ(;+Nci4{CeXe8xMY(GKhHm<aB#{jf<)pPoJ85Y=p&^|w
zVHR|}Us%)<OYM3RzhOrx_zZ6(>6lmc;$=Rcu_*iiEiYKNuPOnHx`St)_D}t(d0+m9
za{}5>p=KU>g@9-7tm~<`;Z;Pz_Pfe2UMW4Zo%?Lff%^I|FvxN5uK#%|s;oLZXVLn-
z<YIlouX|%x1VK$zC6a{IBlPIT4FZY1z0E=mE}1C?19u11WC$u7+{$m`X@=<mD<^Og
zdtM>H@$$zKE^+bTq8cXFJwy-de{IG?;g0XXDXV-Gyl>?~t;=NBE5H;LWTS$m>I1xP
zTv(AfsNRcrs=ftV_;G#I1l%3P!VxLo8|WGzICVAcV>^n?8)I|i_a`cxSN;W8#ON16
z!MY6<19BQ1@U<oYQ~3&6Sce`n5_;+d(8mQ%T}9hV2zv5p(67e?O~~Gw4MM8VqY3Ol
z-65ZKSkyvAJ;569Rq_Yb%>FNQbC2{4KUc4$@Xj#3Cz$OmS*|`pMb*Fumc)?yAiZ}7
zKC&c!s(u^q8$QN0Is#TRwONF7^Ge=X>NM|oSu=TYbrdPwhUa*Hq<)dvRHsQlX@XOm
z4x6tCmad}=-x<zOnoALP4M%Kde8|BflL>eE(CEXGNITT+^w~-~DYHw@oY@rAc*+Rv
z&;6~J9#5=8<4M}kcyjgZdJHL-98b1o<d_BZr!EL@tusAG5DLg(TaLg~1PU_`6(MZH
z$fYkX*;}Fcrn=jujY(i9OCj7}Bw0nLz<*p1)E2p<q8*kqZl9nG{K$WHj%noGK>Q9N
z^Cxxt6#gdFHh=>?+fCkt=2|=D7G_gjtlQP<f7v+$*tGWn=2Y`e*!ldDp;rCw0K~PQ
zV^}RoFu&!m6)C6xxn=ZlH?K)WSpwz?WBF`qe8aMM(`p5GEyTE+%TKIsL6xgpvY|uJ
zU@Cz%7&^~r3nkZ`@Qrcfn42WOc$FYP)Fx)0$lSS_O<B$IV^IFT(@-|>ku9+c0V)zX
z%fz)mA#4IrE4Nv=76Iz%I9TNHZ?aMnOyUeax8TExyG>u3l<IDSN+Fby1!gkx`^K_2
z(H8?BnNh?khs>eLw9@#dPYN7M4SYoVr4TEIk^;xB349c*2V-$DmBilIa0EEkw10$(
zvhJiSy{_iV^_kjgmgU;jaWsN?;wd?3^H+7_=u4f3yi-tbT6Nls)I!&8_G!mS<vHFS
z#v8|WcYNe}FSJ+=*>rF{u3f8H279yPW6*<_0$|r3B1+;(Do#fz_jJ79@loO@`pMz_
zBLJG;#vtk>{L&%-0S@?mY~XiNuNYX$=Wwp~Rt!Gw6jJU|-Sr?;omO2zHq<tba5L&n
z13NhhaYk_$W|eG^dk=aKqh(H45Si0}?lIgZ@*djK!mDPO``|*CAQpHf+%?k*@}L1R
ziKmd@l(8KG=BP3jnA$Om0&fs3f4=K`1RbV>e~Vrr4%yv}D2@v2aJBTltyfCWfmo`%
z-Im$2n%&A?^Ut?|f*l_NZmQf81JYsLRi_u>*U<@bk-6w}?d8b3Fy-$yA0S*)aF}pD
z@WkGS7#wj4+7eY6B&IzbAcK;D<rco&?kL}k2HUz?F@6%_{!J0VlH^Ch+svNc*YMDM
zw{Wt%cF7?N7So^)aW56sa|PCAh#u5ma02$2+-1{Cc;94i-~uy@JT!Fr=bJh{;x|5+
z4^px57fBhHFyQ7ezjXl#rHv0m-SYl}Tdlb8L`dn{<Db_JadzM$8_+{~Yy)uRt%&dz
zmp7b(B*223!lf$0-Hwoj=to>*uYtcRxV#_u0kPBzc-%I`V<I2WW78qrNAYG)3==sO
zT8oU3@;6-@s5Yb-yl$7|?<0yM4PLi`*9U+q`F_&Kt|VS-?6uYGc5sV>#oZaiXu4Vj
zyoYF^a{%HLa9$2{53xM$VwO(;I)Fw(LmUBKF&#&VY#{9r>!<KVQ@sI5b0iJ|_jUc!
z#_xm1UE87N<a4+R<u^n~lG%tj;3WCKB8}JZze*&!Bti?yt8S-M>qJl2_m<#h1G;i>
znR7;am{gTNw{`}Obfc?C@=x`)p_4^q`<q`}wu!8tCEwRxB;QnmD~dF52M9YM=X50B
z-ADN8^apuo;2<kbN>8q!-6aqt3`v{GLiE=<bJ03Q*C7xu3Sp3yB|O=!v`K4_3iaqK
zsXrxSQt|Yo_)n=gjc1V3@;AE<qxFBumVegxk$a0t4#!s5ePbJGuLb6)RhDhpKqzF&
z*Y^N{N*Opc{@4omYV)ZlOV99=fqs3w!=51!g48xTk=@lA=)+ZexD5`MO-Ajv0U60N
zkj}zp+EGO3STnLgWd}j0fL<5X^EO<>)DQKm4k1R^YKGzTHH@VJbpkx5srqmlj$yB1
zIQ<9?)l@x}hSQH?1L`$;Fc#C8aU+LQO5j84b-FO@Tg}E}$a<fo6`h=VIP_)EM)`2Q
z6enk)%BD!0?t?SkIR47HtJ}~yxZo5Ga8|FT_Pvw_vboybVU$US!EHl3^r81PT!F(?
zny%2U0~MnO;alYGF&!VH6y1cEo_LZFh$o07i{bK@h#Fl#2RLjXvttmz+i2P=oog=W
zt)WqhbYet#(I|C_4RoABl#{D0QkCf!t1M%biUU1H8Kt6B>t-TX7u_~XxPqDKv{Up!
z>ioJ5)3l)v6lwD1$|2~_80d1MYjva}HmzoHpna!7cQr!y7Mh+3X!_7g*I0u2+VzO;
zoQZ$;5=1lP;j$q@I!8jJi64P_;tPX9Asti%W|tQ)kp_43273sm2*Lc~=ov86@RHf2
z>p}>a!*^ShK5QCgtRGL@8adVzcc|=T=){Xy0fsuj4)fm3Caw|x;+Sy3h;+(Pv7rnc
zBjrkTk}1?Ps55N*F}5D)w>ZH{NXHdntVOE34$gY)9+Mus3NQR<c)awZ4EPFgH2j`*
zxE+@Fqq*>)bF%v9SzNo=x-gmS6Wfm_?q}=z6%P+yi}^0>D;}8z<;|^nifc;KGk&Oe
zIw_JS#<0KiNLBHCNRihdQja;VcvOnHdMKt_@f@d^tA=9EDxPkNaYSMi&sj3+qAa>7
zE~B+@AcS!f@y6L?icweeVL3r>+IR65)iktaAn<-n;MBFzZ3D_?IbaJMjX|u@I3Q?7
z<MhaNM(co*8KzGp)@a^%iiK&!0jx8cXs6hqk=JPE6^M;wG}>t!ib7k^*i2~S!oiOB
zVQRr-O*|H9-t9*7eu~u*y?LAP7U>YoMolvZPEDYuiMVi5r*ga;k^)D~6lqaBBE?<_
zf3DnQkHm&iBgF#UcsXF?HTXUju{<Mq9{5PQ6ca98dBUibTY0P;NZ?=-E&&!3SV;DD
zM!SEBr6|4KTktlb-D2QWYE-+yCW&)YjBYntD9KG=2#+;d2<l6md58sTxnV-|XIY#B
z$c-|{koYE;$&Lk1q$Uoq(zD9CZgwtk${`=6p_ih<%DS@@Wgm{}SJ0UdWiz5+&eHU?
zYLK1k_$ctc&R?=6=swVI7!Ca|^j5v0PvdPwLt_J{u8C?WByS>TaBOr#!L*5T6KITB
zu=Fxm_tykFCW6-(h$HsR1wI<{nd}!0s{9IiOQ*_D@HT=faq#U$Q3Z^iC5O=dIBLJu
zsK<JVdi1XI{{{@b%Y2Nb39bph3mZbG*|+dEf@bmXSVqwddZ}6tB?pei6U~whnk9cG
z&HmqjaRJS4#U=xtW;fw&1kEhy@DZBPc6R5rT*+7x_fx07oz$zx0+H@GO74*N;f;W+
z&5}5PCp!hZFg0+(k@zMnCDjut&uy5*H#1MHX5SwqP3#FHH*~{M4j_cNk%jD48ulZV
z)3BkJCT};dx++rCs2J*K^!mtI{ANVOjc3PrJpfN$A>axJRhJD{r=l)t;~1mgeGLvF
zZf5gqdg!)jJDqc-4d{5ELRLucLGp1#NQGAi%fcNp-0CJr73Oz|bo2ET)&>QL5j)NG
zcE?93>~QUYd{Kewt0T@DV`!)Bz~;{mOlS5zM&stgx8$GSjju;wIv_pvE{xhy+Ug_^
z)c^0>T0)LTZt*R{TV$4o*;Xp+fbWO15C<>^0!M5Zu@d)S7NyXA-0ASzkV!J0{CzY-
zbV63hHUU?UF;72_OC6e0eS{7I4nxSm!gSaES1~UVTzxXUe}_q#q;NM7x(mtqQOF#3
z0TEluH*lTx0wy{9R8=Di>i9m1sLXv4;~OiMzG%0|_7T&7CP2i5ihy^*uQ=@TLrc>1
zDS)WE{qiGjzgFGt7jX_4GhqNg>u7Zp=KuDnX{fZ3jtX&1lYkcacE)0s;;(hm2Sojw
z_=6_H+}p#K()_ixl%`(@Darqg_y57x_^sq?b>fm}_#q4jp;OxUok+825*uj-&13n2
zQQ8O=@%*5lwulXzxf7>|oH*PEM1^#pQMkOl>+FRsjGne#F288n_BlL@%%G!qMtm9K
zn?KjaojPCh(U!6d?#{t!X;=ri_l#f2=4yxc7gs*VvH<yckV%jCFEDA`NuE*t;0Rxj
zbt7hi<lot2_;*HlchI{y+sUKjxBduJi7b;0A0o?;9{oCYu=uy|HHoF_9iSCa4?97+
zmVcyarM4cdqkZu6$TA%rDx*cN;O1w_1Y5&*1>1KX5NzN2o?x5*eZh9`gMw|#LxQdK
z2ZD{(u^VZzP+#oArJ?vziYuTm0`KH&fxb8_tYYz&-!5I~-tHqwuq^SY&q0E*^Q|Pv
zolQt^L9QQt46&4fO`~P!2I}$k;~8IvpM8hE9`E}A2UEf^{MKrzt{!c{S8`@k;iX35
z(@-kBjQ-UYy*NPW02=c9=|dt^LCzwDKYhDPf&_s+n8d3;t*7e<jEx|m7sr95$j4wV
zg3#oBfS|PL^tIpua!`hH(Z^N{C_{K~KsKPF<97k{=*ZD9ev&Y*`rFIKHX7cgYv!L=
z8PP7(6TMww^Acz%O93`fplNjSYk8s0D}VaGpxFXOa;y1RPta6^HwSB$YKuv^_L+R&
zVpn6!Tekbn`fJzBWMlkOuR##kyNm2#=my3=#K8t#=i86E_f*BXPP6wyww{2=8=uqO
z=Q<b?+xyH1aTw42W;t!4!X2-K<tlS)$x5AtIGx826w;!<RCk2LVkc_(q3C^pK6ZnX
zeB<ja+3tZgcd#q{QxnLG@fPZC8>;)HtE>GZ_nWBu6Sf<5V_`LZcKbP38|prXPfPI2
zX~|896M+D9uKa~YjzY;wzxA#aIubb8NFUR&)F;y+#V=h~y(I!hukKQH84aw|zvhF}
zmh>T?dMqDv9B_t_8Z5~-!>D8v>5_3Y`fW6N*HEM1a<#X=?|vJNKEoRwM5E`lpLgv-
zqtBan>40^B7XdDRy6cZ*kqxzYME&@>5U>0{Da)6tJc<g@4buUm@*+UypI3OB`Wvyj
zJ~{hKG8bIsOkGor^TDg={*EsrBlQ*#IeUo2d`ArX#C5v;WA}R?aR;Q$hORM^#75QS
zb?8*7x=fjaB`dd*bd8j1x{^P_bg5P#T}Air>cS0tL9n9!>_1VgCHWr+@Si}1NKeTI
zEr_Ouz+E0SF6?EI>xhRaQ-aPm+~cEUk2-bs7w*+jGDaPnuA=)#lBPeQ`NJT;xG)Tt
z<$8uLn&P)H4>x~=vKf+v8;51Vf$_3E8^pL!6^tSq@3{_Q%XY_SsXX+y5#8E?ZXHo8
z`~M7bG8*_VD>tLS8rIg*#w9Q|yC!o&87exeWt?CH;mT2j=yT{4#kGqSl_Wp&XA`I>
zeEH|w{v-jr0M#LZBRXM(jaV)tM_5<_NP=B%s)&`tj;brM(b;<iRxZ6sh_|;0mR|Z6
zW#n6vX;n$EZ|yktVEPaiW)P>`lTZys#O$C5q*~np<l<$2fhd&4LJsC{!$rN6b2`p#
zV}E?4a6U!xv)aMUWQtgp7uFprl4`5KUD=JjbUtG98hq>{9y^C|2HF?PPr0-2rpc9p
z;B&A?rb^EY7O8VFGQtX0@&qN%qEw13&x)1HzhQHbOxt4YhwytRsi_n8aWC?ERJ&2a
zs^r;Q@@S?h$d9DPN_AXs<caJ~T3M#+eKT351siAE^}Sb-54<h3uu9R~>Iy3hd4-v*
z07We3Zr5IOtCFb{h{~N7mL~#@JYd7_oXVC99yTXq3A;0WDJz(QcjuC&9#z~#=6Y&f
zleDP;I4F5!SYzu)%bZl8DEQ)WP$07jTT~xOjq}~bkbEa@_2-EB?CcTi#hBSyrA^1o
zuHdA@8Y?S6A$tV1HCCm-rrc=<B;Xd0YT%&|*qy1FO{;Lra>+`3+Yq(2Vh8!k6;UQ5
zc57ESt(k}1=Y4Ujkh~&T$kwL0&nT-zWtB~tsI0Pjoh;5B^d@@L?*k_B<61V?iWsX$
zy(bb=Vr`knYb;qstr|8-3us5OwFqCTM2k6me~F{a(K0s;=m{-zQ(+|tE$}{IcV!Vd
zRl=wMySA#*e6)|3_E@h7zDOkF-<6s>l`YC(h3N$zHg^iq*-8g&ci@7OYtYV4bBWwE
z5MBKU`KutYn*$M&YJc$A5_r?7BDRI&SEN1zbT1amRK1Kx-E1UZB!hl51H$uXlR+;X
zaB+yfELJd;Ed*%GQnuXc3Pc2v3#B2D9qmM@w7RB>M<9$5G5nvFKFm)uu(K8SVbnDh
zEH5nbB|$v-_i*{g9w9pEket|8vY@vhbF9#U4>Y7N@qqgxm@m;G-5quaJTJ#LePhxZ
zWQ#;O5RYx>avyZdi(ngFppI`DVHQp|v(xE0d}L(0)_eN!15VpJO-xnE$wY3d>G9<`
zWa&ZqIa#5V&BgapmjK{WHr|5^8q({be!Hn>_f$@EBcC^+KrJN2wgaDPrOrhNU`dk%
z>;TE~A>VV<C@#qyx%kWz*sLikw}xW>fJ$jbo9aH`oq%n6Vd$kZk<Fk5d^f0i4mkj3
z6?-iLd$@1W8}DC0=0YN+4iV`X4*lswvKaf~i&&NDUwi?9?xFoV%-qXA$OToN>LJ9?
zbn8;k-NWLREX79oO?x6@w5sB29H@fp0Q<%FdB?m+Eh%Av6+y*}J1d6zAm?wCK3Fo7
zh7WMjQf}YCw@BPX5p^aWzvj5BmF=iAu_JI1WQ!gsBd^m^*W;a8mY}-8$3pcW{ukFZ
z6?@0w#6>RxNGZod-eD~X;(axx7nTXyH0zJCXFo;2;7}6Orag=6Ni+acN!Ju(Hd^5n
zJJ()^C{ayC6hQjMPls>AOW8!V0t>|y_a4SPj)i+#dRVX(t(}BQ=<cpU^+~LtlqF!N
z`zO4|Td}bkSL=s}8|E@o2_0wsxH}3J5vbrK4gXZI`Xj*KIu%H%H{tEj`@!J0%73Cu
zMy8^cul)?)EzZD8OKcYY`w?u3oq@MEeoAlIc=J(~T)YHdU(SxpJI?;|!OFpZUd{3b
zYhJgmR`U7}ey{&<<=KPZ8)SKB+4Att$f%F~a^#fJQmnwH%(V4oLZJcDN;I9(NI_iB
zlk^8X_50;+qA1(e9r&*#wc<Z+oHGZuV#l{l{Tu8^LhnmZ>i{6LDO9edSO9jb4Ww5W
z;=u6M8I<iNY>-k<qt~gK^zV>_`eU<@61pA7v;)5M=}8o-`h&)w)0563gij`SBcuA;
zark#NDpG0hN60FN&A#|0>U6{umznO`ZpHmM#|zj>OCj@Fi!exn{0Z_*0w{!TkOxh4
zQYFTBU85aH!55WKR9K+x#fud$>QVGdv;dc|gceb_4M?Mml4tdit#NCSr$7x-o*n{Y
z_T504ey0~QPs+2(l~%z!)_`r{uu&Mc0XEdH1aghJKm-<<Hwoa9<(c^in$WhtLq%NB
zeukG)oCgO>?t_|xXl6E*2_%W7)H5({d$bfgs9M*wl|<T`qW+At%O@E!ZbK@>6x0Y7
zWFDG6K}0rODnz1RmD^}RsIZ95bRg(|$XY67qe20&wQp+sONAN;F@Mz_7Kggcn{u;#
zj++Cj*uAPmn?^u}Q==<}IRPJ2DuAPtp#j=k+O#Jk&&`qNL;P71Bs9{H^OXk>!Q#LK
z*M>nV<ej`>kP3OP*)T|jyyG?uQXyC!+J5buDqY7=j89H&7^F^Eu|u0ixsaq+g(pFw
zFqP8wqnkl0Fd!DnGwP@^oVVjo-|a<Z4)p}Uv2ZcIs9`A^s}_Tu#dx;C*pP1*ii><>
zv=nNPa(gIFT~Adbl}?owuL8|doJhhkHoXE(hpVMbLF~$4Ded<gB2)@>dGL*>=Q9Q6
z>jk_B^7X_Z0iCaZGacMHi~nS)-W6=51i!V0^UQCp$F)~>sAAFOvEo1iT2W5>G(swv
zO`ZO@9m73aXu%+mV}mE-2Ud1>zr4M_C~#6@yV(!>zq3<>UcOVQ?Duan@hzDv&ngSM
znROg|cgn)BuR72tmd(0jm9h{Yp?uh^R9e}BaiV*{IEyczEwsvgX=_qn1!^@Nr{Dn>
zd-qSOcs6%1!RJD)lctB9a-cJkjNFkNFF(5jC6FnOGOfpTNaOI?%5kE?Uq!rH%qzpn
zdW*91EIS|2#Kp2U>tS=*tW|7bKMtiS3y({6PXL5#c|T$}hRX8r9e2b3zR>z`tb#VT
znOF9+^8i4_-RB;TVdva?yx(OD!)%G@UJ`}<O8`{Uag5`(Z_=`1?8kEKBgqE#`zCD}
zf&CJZgS4<aL}kAIF0wl;%6tn{s$6+o@Fh&Iv`V!KYGDhz{nkDsC%q$^0toX(Wr+p<
z-SaKJZ#OK67iBH2exWoNsK@)7>uV|{!I%8sgeOiFgg~@}tA;}U+-GwW9HAR|CYyh8
zCr{CH6=M)L$nUS^cqe2r5H+t`xmvkr9Pagy>d1a*B(Wp2_b{QE6o$O%>L74LGUr?W
zn{)tI3k6HG{dzht5+P24$HIe=lG!%-$$Db34wq%y2J`3W8S-s4>*s(b^1b39kCE3|
zG~WXS=nxNCwf#IwduUjZ@X?tIJxifJ;umZ9=iGTloRe8F_V^Niz8&ikJ1`2MJ7bjB
zlBkooW2sFKn`PC`lBlSXM4c&QMy9Qlq)ek`LJ9ATbd{)T3JOtCk$=WUWTw86f2Dk+
z8~p;Jb_YbhGFjfOb)1wJ;wy8$vsiHtbYkX`+0&sSsN{tksU~*7eOOs(S#uSvdFGzH
zFg$rMagQ%i4%*!-`;kz76i?rJ_O|-~WlI^6Ef(2AAG;6uijir}Sosl);IkkOIYTF?
z+zm##B%a3epG5v-H47b@j*20x*IuB$jbJh6j*5xRvB_DQFFv!0Z!=dWa4hH8aN6OV
zrY!IG+S#Vf#5Pv3IoH7VR;EWilskEOc(U)Te1E^-&(BSKi}}v_u4F&1MSd->ABlAF
z!{FrUiTk}>4E?e#Q`41;p;#84WeWgzw=XGDO<5W$Syi{QBDVd=yihMghGl&s8{>lh
zISt(t7!()DgR`p8@k`vjQY}A#rFW8Vp@USqhWY@MfWIP3?Cnri9-n+qeXfGvpoCe^
zN()<fd{ScQ8`1rO=k;&m6587_>8e2q#e9j8%y)_q5tKs*{-G#Wh6U0}=-EHCKp{!B
zTZlfuwBoerx1Lshh+cnD7rw7yK^!))qYEci-Z&VjsZ12=5#vkbnh*yrP9?a9UV(c;
zMSX7QZ=y0L`4<`8HsKK{m45%r99u-wS;m@<lL@y%?cf7RiOLvd!PtJF48`W_Hn;m1
znJDU(e(;AS*X{JLHz~LKu69o#k@sBzSZ?0Eeesd81~H1oKU?G-LGJ=dG~N^z;o7o*
z51)5bJm_*BeS|ME2KK2Kx7;n>Z^`=L#0RiQY3gjHJ903}S<s900{*ERG(Oh3Ta>vr
z@7K%3QXws3W#Efe86282*Xpxt58H++A^QY&*Ol@ji>BPJREb(Fb!|4+CR;Rq$Qgs&
z5<b2au^-r2js@2VHbI^`=Rlr<WwXB1M8n(N{@M&aw&nFJ*%l?6_K?j7dCr%KfuoXn
zJuDuKuH4Xx-~vm`f*#%VkDxYe>xZxse{Ssz|2&(VAJ*jh<7A)u>-+I&$?hj36eO(g
z$1Mp;zSvTuB7!1g39LWA+uinX3(M>GFSf?g1wv(}Rmi5~Sp4&?O1?$O5#{@SnJXwS
z|B^ai!`wLyt%HHuCa9kJMRR=SgmofUvusz#vEF@?JQfzzdG#C&MHomD8Hr@C7JEf9
z@G$hlcr%j)XA;yaVOhgs<i>#G-Pi-5=({V!@5b)sFWv9vb-&{azq2s>&iA_CU8%mC
zr@k|x6-kFXfBA4MpzQ>>ox#$6L}@8A@E;YXly>3;HfNR|j)n5x8|-=<#u1+fNw36t
z)I6wTIedSyH+`-=(*~EIsY*gZndnjfi=z~xAWKR`QiGTycaq2Kj}1w73dhwa&uvJq
zk821tB+sqg={v)(T@V{mc&ep#r`LL0o7d8iZ^}mM*#-+9-mf=MLQ+lN{a#B=U!K>T
z9Xi2U^J}s)yyvoDT;(^6&CaRaS8wz6&`d{sS9oWF<p^(Txj{G*rzLWw1xLhSY5McR
z9yK4<H;nb-V)QU<fIx4_7k38zc{Y!F_iz&Sy+nqQDgL|zg&u!iw+9SdvgBRi-BhRg
zN6P85@z~{7|6G$Nvq`S(z6rKFou-z46)^8Lw=GepAs;f82_DU7FVuWi6}vg9dU;1i
z39kU=d)7(^W->UtUup4Pli4(Vr4={!5Ww3Bp1H-NK1@2l7-81pi))U*33m%3SJf2_
z9+N-c1SfewCv-h7!2+~W8^|DS37A{W3$07k+Z=*0eI@1@tkr97Hs!&ul0#IS!AitC
z*T?oAYBt@JBcH#oVl2AYeUF#)4hkj~d>j`%yp8BFJbKKCXrb7|56*LwSUx@~iT)Fp
zNf{){J8NzprjR)ge#C2#tW#zrS<)k90Yz+3+ePsE<kwW%1@F~v%+OMBzLBUxP20r+
z%|b@ay(WPO18-)t`6mA(CKRY^s>VdONS%ewS==0-Q9KXV7r}V53RSrj|24!vL84b&
zAI}~Z=M}@X<KmTwz3+wMd*7SxvsRcDpA`%%Qt99ZUdl3x)K0Jyo|RQBh^e052dBWa
z$U9JUp@958h1h(St;7UO8<GvQoP|kf3X0UL^&D_4<-5D3Uj*cEf5i>%VC8iX`Y{dh
z^J<%XeQEOsiAE+*0g28>n6=0|Y@rlA4id$qU(g+*LxxYK?SAhqa-}WLn~wjhedCZ3
z#WC|y7jX#Il|jwt7>=Eajvg92A}WT%#O#JUi{a+DntOE%)!RXVY)_%Nw@{so9oRsp
zWL2>7F3h)}NMf|Tr8ao?N-g-O9s}J<MG6WOJcJ;!2g{%@q2a9DDFW*blUPIvs>su=
z!6Nlnc!N%zJ~Ir3=o^d77A+-LS5et`z>#AWXqmyT%p|`-{e*7HIHR!}!yM4KjwKzZ
z0nh(~es_2II6mtHYVt|ZJ&m%gIZ;yTAiV5^*BsPVTwIz)5vde$3y-Kfw89&&PQd%B
zAYq_zY_ybgAh0S}mZUy<8nZ-t`Ix`x9wW4CP0~<>&0^>Troig%ZcsSIL#T(ft@)VG
zdT%T9mYGy9^^tCfU$OVbLTwtQXekSj53O(%s#6IQEhV1{E)umelM;6qU1<uB(vtw$
zNcjQLn+)B(j4~y02wWSsWP9#C57$w)9l|aIjl5Frj}hd^!fTR*f_I@H>xQ@E0XEl(
zdgDFny5ndX-0ga(Ob=z~p?maDmL6K9hqCohwjRpWL$~N5&rHIDz)qrwLiK8T(1dxo
zxqR*}AJ4~K5~Vc|1od|0;e^3-{TlT**eq3yOKu*cxpOBtn1(j^|DJNXyVqP>0}r5_
ztjVh_Li60%F^!Z@Zg$2}dgwiW-Zr$d6s=q>S02M!R67c@yyG-GYNppL|6QVAbi;wR
zO|SrBxFUvyr_ZE%Dhprv5WsYteuFz)xXVn|aZuv?^&Ex3n$((mfr3So?*$6kv13@W
z+~nL4;0WMQm#9Olcp((WINZ#hI<0B}ObEJYR`X^xn6VUh%daiI#3k?v0aZ|NGUoHm
zfxcL|b0V|)sZD;d$uDleh{X~VOG9FPz9{GQi*x6=dn=yHJj9apJcr~N8#I__zJ+y%
zn&*lee6eLcci}Vk!F*aWk()jRHSQ&zhh<IkUI_y!QlXW5|CHOYm&+Gdvq;PiN#uDO
zgI7yP#Q&N(@_BQ`&$MYo8ZG4>0O3jpTziG;=5l{43v<G|!)qq_S6Ssp`UP)%ftHd+
zRmRCJI$PwR6Q}v!ho8rK3`*?=L3i~K;EHVks(ZCm1hGUAtNtgn4x2`v#Z0Xs?zW)!
ziWxJ#rg??xGh}-By>X_Hirec*g?Q8$K!ogIMQhpt(hC;2Z%er>&Ljv~6TQ=y7pXp!
zWNL9<&8(T;>z1o;bZMG9SggeH?9(ZG5wO!>@DXao=7Fq<zMU&Ij)Yo-+{MZS0;gO{
z*P(m}OsSu(ph02D67G{5!u||;`78a%TPh+Ce32;+fEbPBGF7I*6Ki9GSq?9Rj_ebE
zUcaXR!^1)@rD1T}FV=h1n@}UILO9%KfT2bG8HBOe$WOMY`1c-M!~!}&w)-(g<tx+n
z0yJ*+cpVRYPRtfMSf0J0P@Y61Gwcm(3rtEXVS$RbD0EI24xyT?>wLK|EwXFQUFW^A
zcAxip>G^#<8v~D;Y@*kynV>7;8f^9B=VtTwH~D*LHxGz4HwbeHz})Q693B(PlN)T=
z((`Zk$k9Mz8yxl5&P6S0-UQT=P;)N9_j>I<pE*B7D*$56YE6*ucL+6E=(U}|v%yAr
zV<{hu!P7jx74gx?v*mUzrX|lp?aDk<lXZ_z%*Nz_P)f&EAK&$v+Vn~X%*u79>--**
zPh{Ie@Pc6#*qXU-`f`V~WxKN6(H>$QcVd+zc@81c9Cy!L&2*>lOoI)0&X+440=flI
znFUn5w~>A6y%`y=ifUq<P9L2%QWOErpqggN?z#(O0&gV<rkT2~q@d<C%U=UK?C1iT
zurj!0Nu#g{*RsR4TLY276z&j?P(x6CncADI+kM81>tiSfwKg<GOR1n<7IvSPYH9S<
z(_lLaU60`(-%-5*FOVUtUS6u*j_~T~*Rp1Ba(4FW=?-6?{`kbz%x10wxb|>CL3Tlb
zr?7x7R+$QSk?Ib4Z&|MX6YiR!E|cqoGq<2%xd+3f6S=hg<o8AZs|CnXjH~kK?mSze
zmf|J!f}sLZF$=H&Z5_tgJ0oi%Yw?cB&T{z9)4v{9OEy!NtC@hoyE9z&J)y+qMTP24
znv3kPLUlbv0GsJs2ec4}d6B+8Fv11@b;AWesg!O^S78kcjUtGKMI~;sXcS9S;?t@P
z$Daf>*>afD+ty)#b;Bi%`DM;b3k=4J(}nDG;A6A<r<5es(Y3!uWm2sQ7-)M^q(Z57
zKO#1qqgtif)A;YNy9X8+R|6i5fLsrtz_>_!_Xn7UsSK+_#l?CQ?8-k-5w$r9c2}_+
zp7HRFdWuK=J))p9I7nG_mzmAs(&K<oq<#kq2d0+4?p_F0>0S<X8ldVCSkucI3Y5Oi
zQ@@4??fD9{Nzda^QxH>XOEX0Zl|ISy)xv0%cciZh-Qdr&_;~@E+k8{K0mu~NrR=Oe
zx?qq&m$m7}d=V|wu!T0-e-U8q=4SWc!~6@{>p;F<z8An}$08`5mh7{X-+1OJ&H0nN
z{uQikdC3g2$z5W(6>I(GR?S)W&{Hsyoc>ZIZ^rXDf}3mb@3;8v#cy&urkn8%b4~U0
zObv5m0JeT!jNFXRt8(D44*~bzAq?f^xlGvbkNZdng?}B&wOP+I7dhrp%BG<dlwS-a
zX5cp!zjXYZ_@&}!$Ipr%%YF1iCHJup@l^3t@jQ;_aXh>6?8fsfo@en4<B4PFkM`pU
zZSF_21#`DKY*0d@20w&f1%8_ecAlkV)z08%YHjqp-ttHca2!Dmkiy98_kIJ8v+4a2
z`a6f|pEPjhseaVk{cos6>pci6KY>@kGWgM_^TS2_2m=@7pv;>s_%{VV4}J}E&6C^f
z=b0A)@M5Ce^HE?4uSohZk8mT{DNg-OQ8_n9<pcI;U4&OB&A2=TaHWlRL&~E{0QQrp
z|F`%(hu_Qi?ZEGK{QijFQT#w>+;Q?)DxSD?;V}oEc06$v!=pGS{urfO@wDP;!PA1L
zh$qa%Xujz55q>S$EciL_OUKWkFYrd|qxitXXl)b^^gMdp2)>aOQHb^3e$Cgf-Ud;?
zy^DF)-o2CYuuRUgCUzI9|ApvctUMMU{GOFHqo=_MV!_p4y&7p^i;7$KG-yP=A1kwI
zIc)*=n#*i=^#nz4jMdT;wBRB31Z{Z4^aRuJF!cmuys_xY7D0MpS0QVEMSvQ3RX``4
z{MH`?=t%EGEK9-8^4jr)wT!RKzvW9zYzf6Dz7{gqyl$Gjr^K7+e#2)46q67lU@^j~
zl|3!C6&$iC7#I~&)n+K{Axt88#Q+n&EjPxR)*B>b2t&5(C5}hiD;$pr*p>$E;l0AW
z+neBS^Ce*sJY=bP-9lJkM>X9XWfr_vx`x0c_~H^VN+fPCA$X#&!i!8cZmWTwaG~hH
z)>?J{mGpv`6I#kzX_XU7KL8<nzP%^6&{R|6O|H3rP^e$nU!ONn786RSxqm>Y&+A7k
z{0qnEGub8FhQsWxb1W%K><IJ4><mgT<c$I2cIuXGE`}dm$N`4Q;hYNS^}DN=;ix$l
zR$uuwc32c)tlR|kIeo&D2(g*<c=sk3YWvH^spCHYTgyx<_yBt?WT5VlJ_e6L;@y-O
zG9xEolXcG9D9@z&1lZ}m31}~>ls5eaB~h*PSR=hOrFA`yCmb%X5>?Ag?!zUO*H52D
zj=riyEP%IT5GpPXjcL^Vdv{H4MzchW<@d7`ioz#_!k|)XPwsqEjaRC<e~eHTQxA{l
z%7nX!N(n+eeDKZK8{uErUuGs6Sv>Fy6Jn|WTb%Dy^8O!pvoB71KCeHNg#QE5^H>e+
z#3x(%JcGzpSeEv9ac^JQ#K=XYy?w<L?P`<Tw2t?C_tn{-^`*|mx_#wXzxb@2g>|;M
zIN*VZici2KefCTxK#a09@*xm74$O{Q9Q`wXUsN`cb{V+v(HW0+tNMH0)>yPI6=^US
zQi|ZdxK;f{Bw9Wt!g+Mmp!5>-Qb6{v)5_9{`O?ZN6RHW805))L)!k~)+?dNR48yWV
z|8;$GH<l3Iud{h4&4EM5qS~qB(oU4*BJQ-IAZDk<<Th;6C~uj$coGy%7~fsO`t5QH
z7S3kiR1!Yvl-EB*D(q(x3(L%|*1K7TG8NY}i1U4)mT->_z7h5G(@(GBjskepK&7M{
zqEequC2~1)2Q%$z&<Ry(S%D?8$JwryynY&zd;1i4xALrLmwdlfz){bSU2pfkg-=1Y
zPTq~CAwo^ev*OTPUYPB|yrQF1gR2!TymwgT*|L}wthdZk9QZiKeYiqG3s?a5rf5^d
zu^}4GWT#2E6T|-cPTm}j4CXGxHR*-?G3+3^cMZJs*u9w_r(pReKSp{%z*dkAAK==1
zVMB<nTBIeXPTPj_rY89D^RUF`&pVsh<5A;4P>@%uBToS0JgQ34T^4g!S0EDO&r?0>
z3y9U$T6m6$c!x;^0Wi(M_sVdpYOw`(S6g}Fzf<wh4EKTRS-6_5n+o&zhY^n#Y+L$2
zQK0?^-x`}|&DQg5;egXJd%7x6n|opfoT<R5kQcDlEbOh};qM{L*5ZVi)qHE2scR|n
zYEV~e?KSuJR#Oi18TAh2DK5rdl8MEx#a32LSF<g&(Dm1(427D+(}`H`)3UK(w-8bj
zR(>EVV?$%G^yZ62jPeam>(VK3*Fd>g>8Ebw=vlGLAv*SfNUSa-nN1%2!Nur@W0zw)
z5gi($%in(sOywQUh&SDOapq5;CXLKLiOS5D+px(8pXKpk@y=T0uQD~qWz-#FEmae-
z6pHVQjm2avPI_fuPRLxAaX0qCYYQzttX0}-(x4P8uBe$lts)8Q1=D@8a1@6=9TaMA
z|AsGCn=OW}C{n!`&9Xh1O|0NozLT;vT)Ob+TF9ddKFkB*FwZ_v?Dw68$zC>AK5k|G
zPd&BzDK(LtcW_cy+LgH$>6N^<l{o3uyaUQy(VzE@r%1&}Lt0J2rO4PO$lJdJyEh=h
ztJ&<hSMg~Ffwf*wVjSoaC-0#>M6*S9h4jKfz9xu~TtYJxU%z*p`>@yIe^Ho0le||+
zz(bR;fj8*8!rkFZMz>Jz5*5d4<t|I;PXCK0WK*zNqAk#s66j1!Y(<7d=+XBRX_d-W
zw;O|i4R=t!9SBWKJm|Mxfg`?mi5pt*fe3-^3LS<hB<@*_g)A-(uagJZ5-RgQ=|p=3
zrjc4H>J5+*@JhG@w6@9X)`Py&%=D5rI9O%gD|c&|+p&QB?}Ev+!K<>Ieq@_m`=R&h
ze+RP#Z!#X(3>6c4!@ph&CHdD6hAjT|10l12eLrnNkHEjGVJud7y!X{#IWJPh$xtjm
zW6JAcrbta}>`+}tkbi1zkN0c6nAxJHE9l9qYQc3mQ2eWctM!-Wc`!_jz^Y(<Bo(`F
zuqDPRV)j3eKBecx8bqIbPAtEv_aHWCdM&Q@`uKTw_|D;mS=tvz4;vnBbcIV-j5qGg
z(<lm~eBONI;T7V)7<@hQN3bK!v+Lx`HpoXiqlM3=;Vqz{Q>Wp$VH)OeuDAk0f6gGm
z=Whc;Z$wgxD~nNA9fXd+oxOaIw)Bh_hfW7O*?Vh~Mr>is)DXM&HunVDd$o1~?SFh*
z(+bol-_taG|09CXMc7W|DlD@YYseza#>0rbPM-NJyiS7mszUX8m?Y#jwTJ#4yF!Z8
zU+B6+zjzso!C_sw(=c<DIvsFn%=-z95O$#0J>j>oe~QuFvCE;S>mkI}9g=Ek_ig6B
zZQW2w(;Z%~+>|kUW@kUm&PnyczqT2OU_U0lr&c!!dCRip>vzCGDL^^C+5|V&bf0?W
z>E9?Ey7c!UP`#$|B<AQZ<ITVD6loTz_8A1E=W{gpZg4frk7%PnO+EKtWrt4E*j|=x
z!1GUCdgkfC$Kr4NzZ8H+jT;@wo8GX*1Yv~p%p^U3&fT&Wd$;-<{y_!Smdykw+uic;
zr#U$_(*@rjvE@PzTI9-pu{?nO+7kOR8V=M2&sHLVx|=Y2{w&JA`YggvJypDwTJ%(C
zDFCe31gUNwD94(03@zC+(V2zv(*^2J@YM4v(+Fk=`vmBT&6^w&?0^t9DO$)t^hzpO
zf$AUduWJ+WX}1QZ#FEUA4ucnwL|ML`=a$2RKKSG5oe<To|2e2GhX+PRZsC#rKB;jT
zG7e|wkZyVsYQ%e;tcu<%Wi`ob&G(vNdu$Ui!w7D>g8vsW%Lr~8OYcR)6bJhv4dC?I
zN=@Pv;dTu~YQu3mx|2Wecp-K=5D9gu;6AYNBtK2BkfmE+8+#lL&Bp%hvkiHlG}lom
z4a(})f+GL&Gt%>8r01L5fwdFp4qu)%XImQn*g^Dl*ju}3&-QO-&u*BlVZm<isueJB
z>yDoTFQyTH^r}6G0@y+iCIxhvE6)QfKu^WuawHi`KvYQW#_0#1hxWH~<cIT=((EUa
zuNC>^9rxfaRX<g^nvJDHvg36bur+LnJ&sE1H#ZU6Q+u|@cx`%88YKaC=!2RkC{f7H
z$pHag4c!r;3T6o9S7CMl^MXsft)aChkXB#MAx)IS-zpy`hkv*>*#OsC)0GzLG=Krr
zD;V$OndAW%d{>kWs1DRt+!9L>Br8M85IPaO`cnR(b=#n9M)41Aeu4WV>XA(TAuBzf
zK-}y2b>lbW^Z6|Q5CMlDVJL6J=Wv04h;ohYABvQJ5E<^lZyA0I@XN(-27XiVOUDm>
zg+GITh*Lu24F=3#;P))S{)_vEY%ie}-9Oay;wAk<4kUpOlzH<MyyxTh5PpVV=OX_Q
z<-9!q5Qk~N8S<ihmVYP$dk5-&9lt-~_YQs^;&&Xsv-rhRtNtwhA*zgNY4|?{zbyO~
zP>jKsKgB=97nrP2sF>2vF3tK7Bu@DSAAQ~Dy?@81W#PRv9nnSFTeOQDIlZ3JR6U~9
zLeH%>L~3tswd2u9@0i<+*Y?s*LvL~;#UdgW8|T>p%mf_952GtV!(f0}VkrFj>#!|w
z+H0rxhlK^~Aj}GTZ!_73uo`W?c<{paU}#c9++4Dmyw^jq-l(VhLR^LVmdGENy-9io
zr2Y+7Sun=fR$yC!?wRynK}Ge;)g!*jlX}qykZ`B(+=>$2%Hnq69o}bj(=g634RM=L
z#0-58qj5S+!)qg^p;b2xea*_1A;*UI$^OM#GTwkc-b5T9qC0Rio9^(A!JQxUq3%0;
zVIb_QGjN3VD$`0mAZTgrPQi9xBZ>;1`;_bHDIa&htWoY)8`D8DZn59)&-)O=KuKX~
zKFYw&^J{PlgvL>#&;&{=EX}0^koifTBGuB+kGbhqf<X%>PL`Jn+dsCEd?$Pt2maIc
z4*1-uOxLfd>M)LdkjXNArNd|8W3Q6uz~YRLGPAriz8KtT$;Q0Rp`|>5a!Ot&j`)2W
zQwRSHczWd~v$J2l{dLTp?^oGb#rIB8L81EIS#J1+65%2VvitD~iOe2(VZVl@s2eq3
zC-(9Xe7Hyqr~ru=y9X)Q#X+s5)f)f(uVeG{eG0sT*kBRavI|1qdnrPu>V(AN-OPK?
zY~S1>_+eHQa4PbFyb!BF&vJ@kA#(!d30+rIRG?E6X}{%ZQtfpZe_CQG9pk7lz0zJq
z=mBl@mq;mwqs87xsYK}snlIJZ7DLVAO&~yB@1ZOwaR&#IHbmmIBKT|w9LsY?kvL5!
zF~iQ_58a2Q+Fzg;?L!u?(aF3YClQFuJCwY4h@7Eu27NW9lE<)>A5O1)$GaLFd`GW=
zh#Y|n0a}R0@+2KgA_ePKd<WdU-dlR|l0<Lz^vYDJ_IIe*?Zd^hdebf}f=v;1k0A?j
zsPzI4!Sh37w_p6Gj`QRQ&hIEIJ2}o*4B?!4h$0wjKkR)Dvh4ft0@Q%;FMv-`kxwit
z3dQNj6c&`Gk#R$<TF3FHUBW-$c5T-K^jL<AXkdWW?JLAhrdY$xg8w<2oxTH;moo^I
z_+ni&)neO&bcTXYa?ld%E$+5*+-$OjoXtqEl_+EM6J9j8MJK!!3s}1VpJp^o-Yflc
zMRZXuLw#W=&aBO~P_(vIMEtKVh)2&`YeD>v^mrUaAuMt9B?H%Rvfbt$CBr{;R-kKQ
z;%Sy|Vf&Sba7V<%_9KaH*f@$CcOtp56BM5m{)F`fKAza#mAD(zb!G`1#e4g)#67DN
zk3~UdK3#%%S>YVPrCjdqg<#C0Y{=6%I;>n^d3Z??9X>weuk3#6se-4}hk#XqT8968
z=b0MA!*}C9h9dd?vshyf3(_k%vD~d^I6{{Hj#Tacw)Z9AO;mf|(>9b)3MmM(RUIy%
zC|j19WHQ-W+LTskDYRvkCA29mv`NiE0V$-UC?%9dQMu|xkVUSdpt7mFP-taQR6x9z
zMMSL76697uTPTq4cP0rGQSW`e?|Yv2z0aG;^UFDN=B)qoKmT*)f0i+deW@|d?TTZQ
z)EQ!DU$UMZ-=~WyPY`<|@X?XWF*qiy?axHTX1v)zgr{9p9^w6JH|4@>nqBOS$*8-A
zsPL4C*0EkM_Nv{Sm|LC@6<nhK6k0Wub`{2T(1$`fS2?a63Y4rmXzP$0v<1kda^vxG
z<B@V>E!N?e8!ure^dgDtIt?B3^)`+u*YzkY2)N$P88O6rVVY>-qDO|fo7zgAD<+K8
zd%?j^@HW;gn-lG7R?llaEu#J*xbqK@wSUgm(^}Oh;a0M{%3asb@o;joqrJN>LbBjE
z9EAz<X;?^5LrOEo`=;AmL!_{G6{0K8YM9dsG0uJ0AC>>b(be3~A#*hkaP)UIOC2L!
z%?Xkv<%r7FY@FNC)toI^LO$o~YBo!j+F+R$S$`1iY526Z^_4J5F54hZ$&yj1nP9wQ
zVMlC|1>4}ov#<Uk+#_{$XF)OFL9)FH%0>19(fdsc8|Q5wn7`Owg(bK|MeleRuaw>F
zV3%un!*qG2KI658UA+-LV-qOl-4P(gRL}nUeWcb)Zc>Q8JnJ;(Q<|la*r|fQtM?{Y
zO{Vq#Ai-E6!454GL?jEllH@)Fi6muFLYW5O13R$Pe~o1Qu_M*Fff8l^aRQPuGIN36
za&*P;+oUd1WBhfI7^p`F>M=*CM{+v(G_luQo^_TKrWMJ;uLvSpd<9VuS}(1K#T!Lv
z-=1(tn`v#v46ombw<Z!G(Yx1OLQ{?>5Oc+FAD9G*IXWdLOBQTJICpBDZ(8dy_2uwR
z%u-@T4IkrfijtI(*Y0{NT)^J-3vqM6cox~g+4gr=Pj9axtEY=`;1_0ABrU5>SUv5C
zmF)hkLbScY5r3rgc6uj#hg2xS?%g9`FL&1dHl_i87?Tk0$Z&5sJ_~|LgpvlToRgHD
zKz^om9iukhoYC1;@^Py<5x0#Wqv@gUlEEO@gJ8TyI70I5diaDQ6<b!I#3zrgR2VCv
zAYF&)$@IEuWN)3Z78428(dyK?lJLfw2xF5v^{g`@!q`=vdfFM$&lsyCC73HcU_4If
z0NF)!r;t-wG47J%lw-2u)J~$=6m*}8V+V|v&_*clMBNswbSi0cz<7iN^By2$36gl-
zMCb)PS(Tm%`#jG59^<D-+`CP2Oi_syGN-(62W^N5ssqZ~*<Er33XT@eLN-#xZH+aP
z%Abxb9~+)q9v_8;fsjxgAfT4-rDDzks(m<X4cG-Js&Mui@B#2V(4`vd;DOI!7vyp*
zN(8x#Z>t{MElflR(-gh-=Po!jdcU#u@P6Zuz<J;TPzTfl7XdGD3HS-P+`QlTPeY);
z^&D|T?oS9G;1%JY#xkW`d>ZFrDA~HJOT^C3x$a&Rd9XhrB5Z$xNLqgz<;umR?ChN=
zwk!8QL>QJdIwOTeN|MF{aEx=d&Rd3omNyC6a&#_*aK_2>?T8QOz`TXzi3CA<2@VhC
zx!_Qd08YI^R=pveR>I6yy#)#7%?v*LI`A-ZtoM7#j(wgl(L>aC&996}g?{_8IM;1%
zz_emTbXsnC){W_hQp-zzt=JkC{nM^X=!N#)#_02kWY7M_8dPpWdR?iY*@(_9ExF+{
z*w8`LCix#EqcX>i{ngkNA3;($Izai3P!Z5M&J)-F3{e6Hx34p{7<HZ`+2OoVdik~i
z<ZzpBpaI5$W5}BG^tuU65Iw1}W1T-^@~%tc8GJSikLI=$9$N4)ZLITZ#qcl`8^?kg
zW9O!qr*^7vHdK^|*RLm@*4K51FTr~U!6No&Z$o3iwHcO0#%51ytjpXCB~2$0L~pDw
zwbQ~d=XMO>7bW|WlU>)@ilL%8_@snQLZ&GqF-?)|{TX{eMRB>lh}+Z?RsACtCPYYf
zSGsb#im2f19{gjGo|G(<y9UoE?%{zjsVln`NIk~;716Drhs`4EtMk?!#7iPns|(vu
z)C3H<JwHw$=e>v;<3%7gC7j;kkYFexCPSq1aN*0#<m+y5ib<b#J8u&r$nml8O9kF<
z@Pzh^5qpZF-M4*?ff}s;a`dfWW_Y4MzyXQk^5kguoDW3M0Of^&S3HRyi0k4I+L!r(
z*jtse6q+zd(Q2}98t;-h9^qx6be4!D1lcem+A}g*jh&sXguGQ{jQDtr54;%_uwZTr
zN3)bCh{~r&j~%~HL>)dnDnTwClOUA}ZIMhCV&B>XyzPh^<Ag#=7R*PI7)YR*LeOFT
zWO>3(a<IxXVp0NAMf42!oTVblVH}lJF+IkYxl}Y^B4TJ;=}^qn!dFHend@^`i|`b)
z;%9^#F@jAC^I)Awoe6y95iKoGh(=g30^pH{S?XOw8YAV66-wgmOd_9#LD?#Q_z8k@
zuu`&6D`L;%o_L(c5Z^VuZdSmPP(r+KV`NKwH0~p>*-ot|oDXvjjH+}z%A2sfF{;+_
z5C&;{e7Lh496Ru)2q*S4ig31HRIT%v2b&S9mi4GSdN!^Kx|@AO2s%0~3LlI}>f;gM
zY$N%~4&~UGOTLIp;ywn~Pf6T|5cgj9-f-{Y;9LeVLF-ZeNj)+PhzTyDy9q~_)`KN)
zi+X#nV*U=FR$3OnD3UlPN!E&b+ppmB&($=PgaQ3u23Cjt@F?^LSRvM^sJ!xS;|c8V
zxQ%6FS2rw5@+l7SLooDqh*DA-kK)J)vhXRGhkqx1A?YZ8(pM{zP=O?EflGP^=NNN6
zL-CT2q4TBSxU)9blN9B-{t*%6il$!sdVN}Yfs6)ob-sBOox;kq#1c2Dx!h8Gc3a|p
zN3h<wwMX*Y8-D8^LoqpKfX`h}`4Jdn9^Q$u(smR^#@OYPg#Cl+NN4MMD?BSIb2SH@
z50l3jYCot>5IH-jBb@Cpvxxb`^2qw>@FWb-F&@5oz!**14tD)UVAm0LwWLJsuRv2E
zd>xJ1@N#1vnRZXThB<M`jy96bd$Ekzz4zvbbf2v5+?C*qP9)?BSz>E!3U?P?3-_hg
zIS*n*dAQHm;KNREL_F`cQlmJ$l1NZ=4s-kbYP{fbb|urBb=|L$k-b<L*$YqSo%0*&
zfU9s<(hpOj;>MaVqu5jPtMPQ014GYCLIkZ5!O*eJi)2r=L*z<59R_KCnsOCOJjT<Q
z{0zfKNnBXD!@5h(_?-RS<};ML<ebm>klTC?Brm}b(b*OR%ROK`Pr1D9bA871Ua`-3
zj*M>4pv{wNviHdKq@HPeAh*1|C-rQ3TDT{*wmdB|w>&Az+atH}yB^pzAfiyM=qgJO
zP%hs*tVJ)M>!11*_#-;w<06Wjkm2@DR;NZgvT+iVG5X^pVPP@&Ru%?R#5o2#-;rRs
znD~f?$b@@UCe~&|-~*SMy^hB!Aka&-Zpu}`xNXrDCD+!kU++u(6_d(DFH&d2KoK+d
zhY;N9-wYV!?mO)RN}CdKMJp{)P0U0`t=Z!9_|TvRLUp$2u_0Ww<4XT{ZTIenT;J2-
zdqwfjp1tRmJL@>sy)xE^uEaaD!PkncGIHz4>LO|$4uSA?Zt%4uZdgOKZMV;NK!gPt
z=oCn|s5rF@={!c#d1MGz<G6wYGB%uooFj+b)V&59Os>jt61xj(;5w!)&IbuZ=Ov4h
zK0$==;;9naEvSk!Gtl1K9+H%i@i&>@$3lv`MN8We|G~KJG?62ZM%6BA?dXa0A4(d+
z-Lyq=r;EeG&vQ+%)xfr&t9G_aaejksZ`G2rR}tHXXlOpk{AI8<o~SQ}@jIpM7Ra9G
z1j*ii-6^l<GYlV3d9cTzZRMgz9KG6}ay*hWWCRMl?PRdPZ^MStjD-rWO^Wkt9A{GH
zXd|R*3vWDePvP4O@$X0cr1;pcc8}l+R59jaaZVU$CVcvibhbDc`e#oKY|${k^2U1(
zl66X?S0--I2An#2@n}t3Y?N%g>S<`q!LhCf@uXAZ`G}*o_8Ryr7Ta3mIPK^eVQDzw
zXaB_U`(n^L`mYS)HISSTp^zN9eI&L|am<@8Bu5T9#q!7A;@>295Xp5~j=z{dTG2?W
zJ<<}-5cfmgd*DPkm|~dG<ZE*7lT^#Zkp&Vd`mdO_2k{^6Y=e7I<M+s5M&tKFsl_CT
z2vUA=<M$C?{U-R~iorM^EU+4(BBwV*Cz+$q@YG;79+?jGi;f2tMGfXoIF4dB-H1R}
z`BU4P(O9SUL(HhQHJ+$FWTgU@BR48O!#dmR?w@^R(ZZLC{pcyNUIyzHoUwg`<qKaC
zBg`o-Jr8bjIjbj58jnuYGx#PNgAzLHe{!cCk6~W^0{UGzb%xVvI7Pzgxc8-rll(az
zd>i4aDhA*38#jsJ>$4SlF2owTLKFy5AVh%>1ws@EQ6NNt5CuXM2vHzJfe;1$<0x<z
zZ;6+HCLjumrLMrE00RsLCIT~nCBOz?D^Lv_18RXLAi9pCXg~=h0_ngwAP<-gECN;n
zZvmCSN#Gg~1%1k204<OVOa^8GM9;DWcm;S1s05AywZJt%M0ShcbKS(W3Aq}GSvfZ>
zJszgZ=Nl5AVo$eOv(0w9)s|#7Ih;0gy3K4iTO9B()HpKDI7}gj_0DDPCzVQZXLDK{
z`GscMY_nNyG)1+GqNvPa!!t7cF65TVNJ$&g;+9Gro*JK$cGqR3QYz=#MGc^x7Sogh
zGwra_`IdY~zNsL8wwcZ|n~H>JDB@2={8_9H+HA2pr{>Z2B2%`R&PCb<*5dpY0Zop4
ztL1Ju<sXK#J97Rc981C#fgJRVe4E2*Dxh<nmTVF?ooy;85E3ByV*W7xNmh$_X1-&P
z$w3U-L5g@MUotfbcemWuA~PbkTI^QPA;&x;Kf8tB0FBHui_F;$bB;inyHunIePjZC
zoJcX?r_fp8$amz~%%&VrD0}*E{r@pt0)cW&4imE5F3L2;Vzm{507W+IRGX=gc9?C2
z`IdX>EEUT0yY*wXfPz*_A$SV$A+J)QJiqJLWSi<F9_>N;O67!3xdm1vXPHVDS@SIp
zfeql2W6tr@Gc`ZkX0=;$9rUPtJE^LKe*Nf?0R|nGKgDLU%_0mO1*Qx-8wua`jEVyH
zlS1)eVQS#Ofs{5_N{b2H?X*m{Sc@%siW*{e3^Ums@nC@&=5%Y3vq*6B-;d6><XDTT
zR5T;gRP$i#%y`OaH`^5QfjI>QB;~so(Pv)Rg?TT4xRU!JyQ!F=0I@d{6Oi>9krtmu
zQL<hsX-V)$%tXP=5Zsgb!b09|r*d%hr&Dp!#4-yPl{zSA5DY3EleO_cqB+}KIK^xu
z>7`j`+_4YOc36pXhPlWQbc}aSb=uMRpL7-oG<y;}MZ(1w+3=Y%ib^%vvh!djnWxyC
z0lGeEvIthBL*l0pFNu>vTqGXAf^f4)93(smOCb!ELF7#i9+3EK`GPGo&uOy<+(w&o
zEat#XrqgdrwOWLy8P0%da*(hT!cp)~!5;-b6rK~n3Ku-Ub9h6FNDFBr3&;sFgnS`;
z$R#q1JR|EU0VxQs-jMmhD~8C_v%$N2&Hv;+;`Oj($k`;D8MXXZ!5&`#c|m<jI6lEz
zSZK2349mBe<0+ibV|I)(+w72m6!ka3Z=%`muvuqOuL^ewkTwp)vnPC%UuFu?z7>{o
zN2n**Al@NAGa$%FG+E%y0<**XTlZYbXn~mdtuwVZY?#?J<38_H31x(g4fJHx$HDad
zMWNmhayQcKztxj+5U=q$Iq2%_=+B8usx`-1U`|GH3s6{URd{AV%%MXRI!Mew2sClp
zY>-ev#~Ur&G6iv)l0#AJ!!rx)86cOb0Q~p{xeMfFEwKx9Sx0Pyq=KKqaCrBpo?wOO
zf}|q3%5dcP9Vx0axlhV3FlWvxGE?dPrzZ4GMJbkCYdqEaZYhYbG{`TM<9)Oav)Oo8
z24^^Ikfio_>VrRcGMYLTJ~}_goRDX-Wm;27KQee0sx^|te}6=j`1jpMQ`C3iqfy^x
zk{jwBZ~<zRbVcSIv@e^P$a#v|($YP}a>sp-K-Y9qH0ncQk55R46eMX4H>MK%zOZ5F
z0|Me5C9Ms+lh;gZumDsB3E?j@p&R^-y4MBy+!Hn|A=Omm_XQu7E${JsQ20nkL6)T$
zQvS}EsHJ4DAE`npih2VwA`E7m0FrTE04xLO=P-U-hzD*QR#*me0R~_|&`y<8)Mohm
z1o#%H2busewzEA5JO-!%l0rC+LJ;Bj(nzW`PE)YYF36vPen!Yq#<)p?ow>OVEBQzB
zEfP5V9#;^*g?mdsLAw#<M3CSuX};wC-hg-S0^aXB1Ou2Y+14DhZIW3S-l189t`G%6
z6bMn^Ka>J(u;1`sWu3@>4(E<$j7v$UjcEzP6OAKb#t$B5B*S+|Y;ppQzmJH5i3544
z_J9N+k&|aZcXHnm=md~s&S-$dPgZn^fJoq9`Tq<2^alC@QlMpc5|*Sv195;0_&pC~
zWg1C~<dx)u#4{PF1Y9J-79LvRmgJx0nWUKxtOnxX&qXpG@Id-VQZ|yeWMCOU!%rOi
zxJcpP0VhdNB>#!PLV#>GrSUut&t1rTH@Fey#84myz_;h9mw?T{LEw9Ud_Lg;gzFC&
zfr&sdunhP+K$gs%0<Hm%BJMH3B48JA8K6<Nkw6)+9jF7kBmH5(Twn`u4j|i;lYp7P
zTfk|cJ%|<u*noAwKL9ZpfCmbIRlpH|L0MJ;H-X70cQw!#L|hCs0GVyEb_a+>1-O7(
zAQ{UmHvutV9tThZXu(9Q2_yZ<71y`d<8<GI$LR!X(JWj3)I0|*Q>zvI@yC!qC7or#
z8!krqj#;!dmrgSm)2UEkWLpQ)G{&&>ND{_QkA#xQHp84V5NUyQ0%(}QvBji9bD`BX
zi>K|g^NXO_@Q*}@`Xt9{whOQD#a7#N8V-GO=qXT;5QW1)!a8`D%eT|!ndWS#pftG~
z!h~0oVt<Un*a8Dt5+cP?<aE%v7-rHWU}2GCmJm^@73v!jEnS?CoKGQ|6*3~pp&fZ9
z3teo2XJLqv<4-r$G&8@@Sx6V<&omd<=_0d@&M!1gg_3J#w%LquJn{;!(2x}hsxk!6
zAw(*GW`MS5n=A!*Qv#h5^32e<46yX42TbcvLq|2hPTS26qQbBvd@vnSa55maPeM|Y
zg5mF^CS)r8Ze9exq=Zw2_bi*g6fH6vjDZBaFI*vB>j??WGt3rv7!Had=cz(1;XVa5
zQ80@p>JB;&fG#drX|zHvRFI&BA^HC^ze>hmnN}y%UBojkykTM(NR)LTn_m${4?s2g
zt1J)IFvTpWzic)qG!a5=Wcf8OelK>S4-5p)w?Ii4tZ#q(0>AjH)^<lrb%)LD&Y~i#
z4GOqC6y9ImbRoFFANIbw^z$uUoJZJ+sLzPr3A#v>fP^5UT*5(MZgZga{Plo*-J$;-
z4zSZR$lDzP`WY!uS)h#l4{ML23h(E`VAOY*gV41_)%$rv-;#BML4L<yOI|=czmuLn
zz98Sj4_c_dMF@$~!5C0#o5_MEA{#hR&h%Hv`zsleHL4VVIP-UyL_h>C=SqsQ0}m{s
zVx9<qew7lwpG3T*lY>V7<Z}Jy`O4qi=l$mXPonz&{-_Ck!>jL8F~0|*+an1IrqC+>
zJb83I)SMr1wg}90n54h#4O0jTlMw0nIVy(qk?UZRzSITt0hpOENk1J6lk}0-@cn@9
zFn7W10kaHdEX=21&V)G(CQ-s^Va|rxALdP%ePNPJcZCT<xJXq7W&WescSnF;^1feR
z^#1<e{m<@qNk$}p_A8_A|K01q6dV`)g;D?BuVoDLsk^^$>fieX!_$7!{O|t97$^)o
zL&=5`3{|K&z=!tWf>{ctC;UiwnFi(o!3)ErO5&efIG(=}(FhmDad+$$u#>RlTGGP4
zw1s_H3;XgG_UBvJUua=R)`YP*;eXPm!oo#D666S*$@6E;?+G_@ZTQY_u37IlOJB#)
zM7ZMSx&(70{O?_RaxLwDeBXcRZNF1oz})t4`i~FzCu7bp->7|~JN4rmb#ILS<M`*U
z5kiarK}VdNc#@_jot$=(jE?WUO24W(bM`tkX><KKOTc4-|L*I5LLLYW!T_8E2MOQ@
z$S>FlUlJY$c_|FLDGcQWJs*be!g~>69`b%f<TNn}PmyPYw}a0}yd*3!$uOOyK?Eyt
zBXXR`a022^_>Z`g_C)UE1NVeZ<USoBVMYSPUq--$x>AULEKHJiLBPEbCJht;ME2VN
zl2=j=k{=g9@?07)=ffn=-2i!B29R{nwy4K}Re}38FiC#a0VKUQ0pf25K=StmK%RdC
zkmp@N6ha@m)eEF+y6>8aJz>Og=Z`q=7uW)90yYBcfYrcCU>UFwm;)36dB9V^7$6f!
z2ZjO3Kq3$aXaNpj04dNP=nZrQVgNBf{8K;^c0x7)wZLiM2v7}F0=s~%z-nM6K=Moa
zL~`}T?vlgU)$y+|FK|iW-yiZf|Et5}?zkLmb=Q7Fe8(R5TJ#-zdX?mkz4x__LA&dv
zl@A8(^se3A{C3fvLp_!-#J=XI!(a5+_f=XP-LPs~QNNAveDb&axFZv8_4%>;lHuLF
z?zpF4`sT%i_N^)&-@GdB`kvK^Kb3Y|S~~y3xINmhH+<<!d1U6kui~ux&n~Wa9UAh{
z3mfBiEtsD5n7X2|=<J-qyS`m==K9~7y>s6hk+A0cj2{kPd3;b=>7$8#W4gT6^lr=#
zpH$yS^uBrgYNPl2CuhI-rO|x&!1DGR-d)}8hqX!V%w3|LrO!HN97;|dGr0E67t|Vd
z=lefpq`vv%1l=bSG@ez@kMm8~(6ENC%v`@%WjcDxGtN`fXF~b)Q&Zo1vFYk#d)_!W
z;aitw*r8WnrWb{eoLt?<iSkmPAO1YBbE4Vsv@YtKwMFEw$uKTQ^WE@@mn|LLzZj~%
z>Tm9LZcLXQM}IaPk@PAX(qqV`Pu{$2h}*C|zhHB#|582cH7Inu2G9QS>lJ(calx?f
z)~zp0WgUtSzg=q>G;I9$snxqzym<bQ;rZ$ejWhA{PP<>(Y&bLZqZMl7I}gA2<qAXZ
zUi;7O`bZ-)d1f0-S!4IkeJ^89$B!o&zPUW8B69ch3pzI^8hRVn*Q?h*c5&XuCk!Q<
z*3|CGnUi$n+bn(dGm(dTWfr@A%S(03Z}8n_XZJ~vRc_MuEI-Q4AM)}}>ee@!(+kIl
zd%Rco!?PPAH2cepgIjO^t5bDqAg_2j_E@h|^2;g9#;G?vx4Uxm$@TL$ys=GwF7N#g
zZ;pIDaqNzm{(Vwv2Pm208Sj2Ez0cCIqIH#L_LVf(?SFXHg@xlrFW2r#cmJhp+EDY9
zTkfTsBUhAks2y<T^)HSc6n(p)CdyUhm!A#zgid-!CL#C#^_8CZ{}!H$2#c8s1jpUM
zjQrmH!+59x#sOqJ@G`IsI1XF|I)p*z1*8Fm0EvTy;Q=CNi-DJbt-x2n6@cif1_7x+
z0T8-E6bMluM1c?mLKFy5AVh%>1ws@EQQ$v-0(d*uV*DO1Z7YqDc9C|J$z@rx@v<4R
zxiYuRBU>-qEc;NlTUIUmRCYpkSr#V$i@d))Sw2EOMLu8tvV5KVJ^6?7YWdglZ{;`S
zVnrVXqexO%6i!8j;swPwii?T{#S@I4Nnz5N@yrw^kFhdN<{74xsbF4ZK4A7R`<W9=
z19OuRu^rfMY)`f?JCN0~<5?3sjeVM($<AX}uzzLWWZz+rvZvU~Y-?q#vbR#FY^{n_
z8C037V%1{RW>vMS2dCtga%0sN^>XzF^&#~c^(}Qr{$ak5U&ycEkMT8pD@{AiBbvuF
z2F*x~Su<brs^%??LYu6eu61eGYIkZ+Xn)ljbeX#4x|el_b;oo!bRvBh{UCjU{z?5L
zeS1SMLyBR7!EJciu*-1FaN0o8eti=oO_63vKa%EyX6s}-WoKkpWL@L~<SO}6&}WPM
zio8iqD;`x0SL7;QRzxr(nWvbk%u42crZX#N2eT8DP0A-!i7JMh&VA1ns2kKhcm+R_
zU(9dRysz1%xuChJS*HDmjx0<dI=T+h5%Tw$2UJIO8HQU1IK=ta1H3QgWmU4{GB47<
zE)&b6<uUS3@~-k&IW6xk?~8iFdVV=4*UIDMnes{Ur{xv$J@W76I)zO!Tj5eHQ@o^D
zt$17Uo?@@!Q^g6zS;apUK1By6mU)a(FhiLU%vi>RoIlOXXBIQhGpm@5D8o*siusy3
z&0J)zGLNzhYhcH)Q`lU#khQUH_BpnKUCyo*>hC?aiao%7F4W^W_5$0aJf*s=>Y)CN
zFVkxD*9=7ImkeHPEq@N&^NZq^q7T!LNn+BN4DgPVna7kfOPCeRE6m@S-OP`Smx*NC
zvk$O6SQe?KuxV^2JC4m~=d!P{pRk{?=fN#k*=DwbvZu1Il2z)JQ<PSvQ~8W?k#dD{
zvvQlVzbZ>LUNu8CSLIfDRBKf4sdlP9QGKDhqVlO)ac#NoTyM_68968C<|??g+&kPy
zTs8M8cZB;IH6>EFQ}<TKtB0sZs3)kWs0-BP>X+58srRZ6s86Ubs4uB+s>Asxz9S#Y
z58zdN0-ws8cr!npxAIPYF29KX5?pzn@1ap@becrXlbSJ_iJBKQ?`n2xe%3^5AJq2L
z%C$qZY1&NfQtjWgJG8sCUuw^3f6`vn-qg0!y`tN!tJWRSd3C?&cIo%&ujp^+UpHV6
z%w(*&09$mGJ|W#At5Q6|EMtCV`mj=V5$ICGHn54xEaiFS6=iqTI`u%_#lOuH#pzCj
zd6R7i3SCtGq8zW<gjRK0CE~hqiQH4%WG;ux;|jPU&cV&(O1bB_S3!}D+&->``;q&J
zyUuk3H3q8HpvYKtuDVeDjM}YUqu!+6uC7*p28x_jd(~Ift@%!T5B_mp%IkR}pTUpk
z=kR6xLH;@~(!_uYb2R0eEt)#bFB-LWySAq;Pxl(icv5#>*F$g7zooyZ|5e}JP-ytO
zq2BPTfhcxQBi}0NOVV@FNsv@g^6~Oq`4agC`40J~;O=Yk9K`{)rz%M`ojb#YAy=iS
zr^D(<J{r=YKQHH%yoQfQUWW3+`7C}cKaqchU&C+Vck)&IA=J?c{%8JIp3-#J^wmgF
zSF<!8w8?O72kii%b|z`fTBml7)~)qu-$xxC)E?2+XwPWtw3i`KZfhfT9d%uFy>$I_
z3Y|tbLN``t(&g)()|KfN>ps*S*VXDS>aOd2x=6i5|DgV1eQ(Gdl^%s!hBdM<o|UeU
zz9QW!{ZM*P`i1n2v|idQZ7=I4dqmb-_Jm9&%ao0inPt;uPT4b%*vn;K%bt<vF?L8<
z(puhP-eYz!dzk~wVdfZf4y~pY`yd<34nn)+l@?{O@_FTY<=e`w%8!+`N}p1q8lWms
z&E(3sjp}Q>54F->^MGckW;A%yqH$=R(Jauc(rnPYt=R$DbVBo;rW^QFqm9>&gd{E2
zmS`7gU)FBXcGNwglj_FlChO+wUeX=ZeTi~DsHgSu`ceAX`gQvE^*`wAQI}l|TEkGo
zIKyJYYliO(Uc)a2YBfb2M!DOdKk6-gTsla)NV;5lLi#XzpYHPE^3jl7C6HZ*<*|xE
zibBN##R|m+#bHRS3yLd>R!o0J!;~<~na#|{%s0#>CY)`<CbN^-sjQWCphua*u7`B^
zk-dbLaE)zZZ?cq9q!cShD#s|FQchOpC_hzxt!z*>DsL(&l}Oc7H53#nQ!PYKvrM%@
zwNmw(YPIU3szG&4)ug(q+N1tL-G`6klle40lYf!_od1r$!VlE!)qkU>w)k~xpUZ!d
zH_KZq(iGDa#fmcY1FIFA6lc&o`V=(tC^H1o^(jc#e8$DRh@NpR^ER`csYTCt1N9|A
z&-e(WY5{u08SFFY5no~3C?(1PkZB{7xymxs;p>oSN0g_PmyzqX=o|A?F4c3YrGfl@
zqVhtbMRPG+C$1|O%h8Z*eK{Li@*K{Ey1vN$!o{e&sAJW%Ak(I+|E6B2-iX$_MZHzM
zQ@u-FsgB}f(002*noZ;F{49O}B-jf6Reml1ceIvm{C@r%e@$~;(^=bBI|%%cq8+Q9
z27Y)^yG`3x_mEDf8w}33=$_Fn&@DwDyIxnNJF9Ebb=4Q?pVfb;?`cRfP?gv>h`O&p
zPx?>U5VYiZ^3C#Z<PCCGF+%YdhGz<xGUgzAm_5QChb%kIo@Hy<x<FlSP*y6Bf&weK
z6Wn0+Q);vN805x8{RaIe{YUyX2DM>@;T6M1(q|s=&(lOo2g<3l{`GvB%orvIBa|Y>
z!QdnC)Jk}ZmNL>Ys;5+wRXM66)c$JK7L}A^IF8eDagd91K)c1<3hp&-9k+?w%I!k`
zaF{#Jo#tw}OWZZ?CVB}%(;~x6!yJRlP-a*NPG5$6tOUQWHmpN#HW{`Uwi<R~R8eWD
zHXJk@HXJb=H`HK+an?|4s54xGOuuGmGWd5nh6%Erl8U5aX*9-coupl*u~Hh_78xlg
z)k@=}iPB{0Flo9pQ#x6?Q?W~dVuY>`1ws@EQ6NNt5CuXM2vHzJfe-~k6bMluM1c?m
YLKFy5AVh%>1ws@EQ6NNt|78^TKQsa4<^TWy

diff --git a/Utilities/CAI/cai_dll/dll/tiff.dll b/Utilities/CAI/cai_dll/dll/tiff.dll
deleted file mode 100755
index 5aec94192c2af88c1ce705d343066d0848a6189d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 679994
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

diff --git a/Utilities/CAI/cai_dll/dll/zlib1.dll b/Utilities/CAI/cai_dll/dll/zlib1.dll
deleted file mode 100755
index 4eb8adb9167b2826192b88bec87bc6c618329297..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 70656
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
E1F8gfB>(^b

diff --git a/Utilities/CAI/cai_dll/inc/CMakeLists.txt b/Utilities/CAI/cai_dll/inc/CMakeLists.txt
deleted file mode 100755
index 3f5eb00f91..0000000000
--- a/Utilities/CAI/cai_dll/inc/CMakeLists.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-# Sources of non-templated classes.
-
-INSTALL_FILES(/include/otb/Utilities/CAI "(\\.h)$")
-
-SUBDIRS( inc_unix2win )
diff --git a/Utilities/CAI/cai_dll/inc/cai_image.h b/Utilities/CAI/cai_dll/inc/cai_image.h
deleted file mode 100755
index 185b17e44a..0000000000
--- a/Utilities/CAI/cai_dll/inc/cai_image.h
+++ /dev/null
@@ -1,782 +0,0 @@
-
-/* fichier include de toutes les informations necessaires au bon 
-    fonctionnement de la bibliotheque Couche Acces Image */
-
-/* MOD:VERSION:2:DM optimisation */
-/* VERSION : $Header: cai_image.h,v 1.12 01/02/15 14:24:43 cmf Exp $ */
-/* Octobre 1996 : prise en compte du format HDF pour QIV */
-/* Septembre 1999 : prise en compte du format GESSIMU    */
-/* Septembre 1999 : prise en compte du format GDB et GDR */
-/* Regine CHAISEMARTIN (CISI)                            */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM :           prototypage des fonctions            */
-/*****************************************************************************/                       /* MOD : VERSION : 4.3 : DM : integration des formats SPOT1a4 et SPOT5       */
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : suppression du format multiscope, modif SPOT5  */
-/*****************************************************************************/
-/* MOD : VERSION : 4.6 : DM : integration du format RADAR_CNES               */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : FA : PB de reconnaissance automatique RADAR         */
-/*****************************************************************************/
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte de l'information INTEL ou IEEE*/
-/*                             et des types non signes                       */
-/*****************************************************************************/
-/* MOD : VERSION : 5.3 : DM :  portage de la couche CAI dans plateforme      */
-/*                             Microsof Visual C++ V6.0                      */
-/*****************************************************************************/
-/* MOD : VERSION : 5.3 : DM :  prise en compte du format bandeau             */
-/*****************************************************************************/
-
-
-#ifndef CAI_IMAGE_H
-#define CAI_IMAGE_H
-
-
-#ifndef MAIN
-#define WHERE	extern 
-#else
-#define WHERE 
-#endif
-
-
-/* Code à ajouter si visual c++ */
-#ifdef _MSC_VER
-  #define _HDF16
-  #ifdef CAI_DLL_EXPORTS
-    #define EXPORT __declspec(dllexport)
-    #define WHERE 
-  #else 
-   #define EXPORT __declspec(dllimport)
-  #endif
-  #define LIGNES_PAVE NB_LIG
-  #define COLONNES_PAVE NB_COL
-  #define F_OK 0
-  #define PATH_MAX 4096
-  #define strcasecmp(a,b) _stricmp(a,b) 
-  #define ftruncate(a,b) _chsize(a,b)
-  #define strncasecmp(a,b,c) _strnicmp(a,b,c)
-  #define snprintf _snprintf
-#else
-  #define EXPORT
-#endif
-
-
-
-#ifndef IN_CAI_HDF
-#define WHERE_HDF	extern EXPORT
-#else
-#define WHERE_HDF EXPORT
-#endif
-
-#ifndef IN_CAI_BSQ
-#define WHERE_BSQ	extern EXPORT
-#else
-#define WHERE_BSQ EXPORT
-#endif
-
-#ifndef IN_CAI_BIP 
-#define WHERE_BIP	extern EXPORT
-#else
-#define WHERE_BIP EXPORT
-#endif
-
-#ifndef IN_CAI_INRIA
-#define WHERE_INRIA	extern EXPORT
-#else
-#define WHERE_INRIA EXPORT
-#endif
-
-#ifndef IN_CAI_ONERA
-#define WHERE_ONERA	extern EXPORT
-#else
-#define WHERE_ONERA EXPORT
-#endif
-
-#ifndef IN_CAI_TIFF
-#define WHERE_TIFF	extern EXPORT
-#else
-#define WHERE_TIFF EXPORT
-#endif
-
-#ifndef IN_CAI_BIL
-#define WHERE_BIL	extern EXPORT
-#else
-#define WHERE_BIL EXPORT
-#endif
-
-#ifndef IN_CAI_LUM
-#define WHERE_LUM	extern EXPORT
-#else
-#define WHERE_LUM EXPORT
-#endif
-
-#ifndef IN_CAI_GESSIMU
-#define WHERE_GESSIMU	extern EXPORT
-#else
-#define WHERE_GESSIMU EXPORT
-#endif
-
-#ifndef IN_CAI_RASTER
-#define WHERE_RASTER	extern EXPORT
-#else
-#define WHERE_RASTER EXPORT
-#endif
-
-#ifndef IN_CAI_JPEG
-#define WHERE_JPEG	extern EXPORT
-#else
-#define WHERE_JPEG EXPORT
-#endif
-
-#ifndef IN_CAI_GRIL
-#define WHERE_GRIL	extern EXPORT
-#else
-#define WHERE_GRIL EXPORT
-#endif
-
-#ifndef IN_CAI_DA
-#define WHERE_DA	extern EXPORT
-#else
-#define WHERE_DA EXPORT
-#endif
-
-#ifndef IN_CAI_FONC
-#define WHERE_FONC	extern EXPORT
-#else
-#define WHERE_FONC EXPORT
-#endif
-
-#ifndef IN_CAI_SPOT
-#define WHERE_SPOT	extern EXPORT
-#else
-#define WHERE_SPOT EXPORT
-#endif
-
-#ifndef IN_CAI_RADAR
-#define WHERE_RADAR	extern EXPORT
-#else
-#define WHERE_RADAR EXPORT
-#endif
-
-#ifndef IN_CAI_BANDEAU
-#define WHERE_BANDEAU	extern EXPORT
-#else
-#define WHERE_BANDEAU EXPORT
-#endif
-
-#include "tiffio.h"
-#include "jpeglib.h"
-
-typedef char CAI_EXTENS[5];
-typedef char CH3[3];
-typedef char CH50[50];
-
-#define CAI_NB_MAX_IMA 200
-#define CAI_NB_MAX_CAN 250
-#define CAI_SUFFIXE_DA		".aux"
-#define CAI_NB_ALLOC		100
-#define CAI_TAILLE_MAX_CLEDA	70
-#define CAI_TAILLE_MAX_LIGDA	8192
-#define	CAI_NB_MAX_CLE		100
-#define CAI_TAILLE_MAX_ASCII	600
-#define CAI_JPEG_LECTURE        0
-#define CAI_JPEG_ECRITURE       1
-#define CAI_JPEG_MODIFIER       2
-
-/* cette taille doit etre paire et superieur a 2 fois la taille du plus
-   grand mot cle du fichier */	
-#define CAI_TAILLE_BUFFER	8192 
-/* */
-
-
-
-/* definition de types */
-
-typedef enum{CAI_LECTURE,CAI_ECRITURE} CAI_MODE_OUVERTURE;
-typedef char 	  CAI_MOT_CLE[CAI_TAILLE_MAX_CLEDA];
-typedef char 	  CAI_CHAINE[1024];
-typedef long int  CAI_TYPE;
-typedef long int  CAI_OK_KO;
-
-
-typedef struct {
-    CAI_CHAINE nom_fichier;    /* nom du fichier ouvert */		
-    int  descr;	       /* file descriptor du fichier de DA */ 
-    char *buffer;	       /* buffer de donnee ASCII */
-    long  taille_buffer;   /* taille du buffer ASCII demande */  
-    long  taille_buffer_lu; /* taille du buffer ASCII lu */
-    long  num_buffer;       /*( -1 si non lu ou si ajout ou modif DA) */ 
-    CAI_MOT_CLE *liste_mot_cle;/* liste des mot cle ASCII presents ds fichier*/
-    long int *ad_mot_cle;       /* adresse des mot cles ASCII dans le fichier */
-    long int *ad_donnee;        /* adr debut de donnee apres chaque mot cle */   
-    int  nb_mot_cle;       /* nombre de mot cles presents ( -1 si non alloue ou si ajout ou modif DA) */
-    CAI_MOT_CLE dernier_mot_cle;/* dernier mot cle lu dans le fichier ( oper cai_caractDA ) */
-    long int ad_dern_mot_cle;  /* adresse du dernier  mot cle ASCII lu dans le fichier 
-				(-1 si non alloue ou ajout ou modif )*/ 
-     long int ad_dern_donnee;    /* adresse du debut de la donne apres le dernier mot cle lu */ 
-        char REMPLI[128];
-}CAI_FILE_DA;
-
-
-typedef struct {
-	char TYPE_IMAGE[20];
-        char NOM_IMAGE[1024];
-        char COD_PIX[5];
-	int  INV_OCTETS;
-        int  NB_CANAUX;
-        int  NB_LIG;
-        int  NB_COL;
-        char COMMENT[80];
-        int  NB_BITS_PIX;
-        int  NUM_LIG_DEB;
-        int  NUM_COL_DEB;
-	int  PAS_GRIL_LIG;
-        int  PAS_GRIL_COL;
-	int  DECAL_LIG;
-	int  DECAL_COL;
-        char CAR_GRIL[20];
-        char TYPE_COD[5];
-        char NIVEAU[3];	   /* Niveau de traitement de l'image (SPOT)       */ 
-	int  TYPE_SPOT;    /* =1 SPOT 1a4 ; =2 SPOT5 TIFF ; =3  SPOT5  BIL */
-        int  ACCES_SPOT[2];/* 0 pour le leader et 1 pour le volume         */
-	char SENS_COD[3];
-        int   NBOCT_PIX;
-        TIFF *ACCES_CANAL_TIFF[CAI_NB_MAX_CAN];
-        struct jpeg_decompress_struct *ACCES_CANAL_JPEG_LEC;
-        struct jpeg_compress_struct *ACCES_CANAL_JPEG_ECR;
-        JSAMPLE *image_JPEG;	
-        FILE *ACCES_FILE_JPEG;
-        int  ACCES_CANAL_INT[CAI_NB_MAX_CAN];
-        int  POS_OCTET[CAI_NB_MAX_CAN];
-	char NOM_FIC_CAN[100*CAI_NB_MAX_CAN];
-	char NOM_UTIL_CAN[100*CAI_NB_MAX_CAN];
-
-        int  COLORMAP;
-        int  *TABCOLOR;
-        int  HISTO[CAI_NB_MAX_CAN][256];
-        int  NB_PIX_ECRITS[CAI_NB_MAX_CAN];
-        CAI_MODE_OUVERTURE MODE;
-}CAI_IMAGE;
-
-
-#ifdef _CAI_IMAGE
-
-#ifdef _HDF16
-
-#define CAI_NB_FORMAT 18
-#define CAI_NB_EXTENSIONS 18
-
-static long int CAI_NUMEROS[CAI_NB_EXTENSIONS]=
-                         { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};
-static char *CAI_SUFFIXES[CAI_NB_EXTENSIONS]=
- { ".xs",".inf",".hd",".bil",".tif",".srf",".bip",".hdf",".lum",
-  ".jpg",".pfe",".gdb",".gdr"," "," "," ",".rad",".band"};
-                                          
-static char *CAI_NOM_FORMAT[CAI_NB_FORMAT]=
-{"INRIA","ONERA","BSQ","BIL","TIFF","RASTERFILE","BIP","HDF","LUM","JPEG","GESSIMU","GDB","GDR","SPOT1A4","SPOT5TIF","SPOT5BIL","RADAR","BANDEAU"};
-
-
-
-/* include necessaire pour le bon fonctionnement des fonctions d'acces des
-	donnees auxiliaires */
-
-static char * CAI_SUF_FORMAT[2][CAI_NB_FORMAT]=
-      {{ ".xs",".inf",".hd",".bil",".tif",".srf",".bip",".hdf",".lum",
-	".jpg",".pfe",".gdb",".gdr"," "," "," ",".rad",".band"},
-       { ".xs",".inf",".hd",".bil",".tif",".srf",".bip",".hdf",".lum",
-	 ".jpg",".pfe",".gdb",".gdr"," "," "," ",".rad",".band"}};
-
-WHERE_HDF  long int cai_liste_ima_hdf16(char *repert,char ***tab_ima);
-WHERE_HDF CAI_OK_KO cai_dest_ima_hdf16(char *repertoire,char *nom_ima);
-WHERE_HDF CAI_IMAGE *cai_ouvre_lecture_hdf16(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_HDF CAI_IMAGE *cai_ouvre_modifie_hdf16(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_HDF CAI_OK_KO cai_ferme_hdf16(CAI_IMAGE *image1);
-WHERE_HDF CAI_IMAGE *cai_ouvre_creation_hdf16(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig,
-					  char* label);
-WHERE_HDF CAI_OK_KO cai_ecriture_canal_hdf16(CAI_IMAGE *image1, int *canal, 
-         	 int *premiere_ligne, int *nombre_lignes_ecrire,
-		 int *nombre_colonnes_ecrire,unsigned char *data_image);
-WHERE_HDF CAI_OK_KO cai_lecture_canal_hdf16(CAI_IMAGE *image1, int *canal,
-         	 int *premiere_ligne, int *premiere_colonne,
-		 int *nombre_lignes_lire, int *nombre_colonnes_lire,
-		 int *pas_lig, int *pas_col,unsigned char *data);
-WHERE_HDF CAI_OK_KO cai_rename_fichiers_hdf16(CAI_IMAGE *image1,
-					      CAI_EXTENS *TabExtens);
-
-#endif
-
-#ifdef _NOHDF16
-#define CAI_NB_FORMAT 17
-#define CAI_NB_EXTENSIONS 17
-
-static long int CAI_NUMEROS[CAI_NB_EXTENSIONS]=
-                         { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
-static char *CAI_SUFFIXES[CAI_NB_EXTENSIONS]=
- { ".xs",".inf",".hd",".bil",".tif",".srf",".bip",".lum",".jpg",".pfe",".gdb",".gdr"," "," ",",",".rad",".band"};
-                                          
-static char *CAI_NOM_FORMAT[CAI_NB_FORMAT]=
-{"INRIA","ONERA","BSQ","BIL","TIFF","RASTERFILE","BIP","LUM","JPEG","GESSIMU","GDB","GDR","SPOT1A4","SPOT5TIF","SPOT5BIL","RADAR","BANDEAU"};
-
-
-/* include necessaire pour le bon fonctionnement des fonctions d'acces des
-	donnees auxiliaires */
-
-static char * CAI_SUF_FORMAT[2][CAI_NB_FORMAT]=
-      {{ ".xs",".inf",".hd",".bil",".tif",".srf",".bip",".lum",
-	".jpg",".pfe",".gdb",".gdr"," "," "," ",".rad",".band"},
-       { ".xs",".inf",".hd",".bil",".tif",".srf",".bip",".lum",
-	 ".jpg",".pfe",".gdb",".gdr"," "," "," ",".rad",".band"}};
-
-#endif
-
-WHERE_BSQ  long int cai_liste_ima_bsq(char *repert,char ***tab_ima);
-WHERE_BSQ CAI_OK_KO cai_dest_ima_bsq(char *repertoire,char *nom_ima);
-WHERE_BSQ CAI_IMAGE *cai_ouvre_lecture_bsq(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_BSQ CAI_IMAGE *cai_ouvre_modifie_bsq(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_BSQ CAI_OK_KO cai_ferme_bsq(CAI_IMAGE *image1);
-WHERE_BSQ CAI_IMAGE *cai_ouvre_creation_bsq(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig,
-					  char* label);
-WHERE_BSQ CAI_OK_KO cai_ecriture_canal_bsq(CAI_IMAGE *image1, int *canal, 
-         	 int *premiere_ligne, int *nombre_lignes_ecrire,
-		 int *nombre_colonnes_ecrire,unsigned char *data_image);
-WHERE_BSQ CAI_OK_KO cai_lecture_canal_bsq(CAI_IMAGE *image1, int *canal,
-         	 int *premiere_ligne, int *premiere_colonne,
-		 int *nombre_lignes_lire, int *nombre_colonnes_lire,
-		 int *pas_lig, int *pas_col,unsigned char *data);
-WHERE_BSQ CAI_OK_KO cai_modif_nbbitspix_bsq(CAI_IMAGE *image1,
-					    int  NbBitsPix);
-
-
-WHERE_BIP long int cai_liste_ima_bip(char *repert,char ***tab_ima);
-WHERE_BIP CAI_OK_KO cai_dest_ima_bip(char *repertoire,char *nom_ima);
-WHERE_BIP CAI_IMAGE *cai_ouvre_lecture_bip(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_BIP CAI_IMAGE *cai_ouvre_modifie_bip(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_BIP CAI_OK_KO cai_ferme_bip(CAI_IMAGE *image1);
-WHERE_BIP CAI_IMAGE *cai_ouvre_creation_bip(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig,
-					  char* label);
-WHERE_BIP CAI_OK_KO cai_ecriture_canal_bip(CAI_IMAGE *image1, int *canal, 
-         	 int *premiere_ligne, int *nombre_lignes_ecrire,
-		 int *nombre_colonnes_ecrire,unsigned char *data_image);
-WHERE_BIP CAI_OK_KO cai_lecture_canal_bip(CAI_IMAGE *image1, int *canal,
-         	 int *premiere_ligne, int *premiere_colonne,
-		 int *nombre_lignes_lire, int *nombre_colonnes_lire,
-		 int *pas_lig, int *pas_col,unsigned char *data);
-WHERE_BIP CAI_OK_KO cai_modif_nbbitspix_bip(CAI_IMAGE *image1,
-					int  NbBitsPix);
-
-WHERE_INRIA long int cai_liste_ima_inria(char *repert,char ***tab_ima);
-WHERE_INRIA CAI_OK_KO cai_dest_ima_inria(char *repertoire,char *nom_ima);
-WHERE_INRIA CAI_IMAGE *cai_ouvre_lecture_inria(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_INRIA CAI_IMAGE *cai_ouvre_modifie_inria(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_INRIA CAI_OK_KO cai_ferme_inria(CAI_IMAGE *image1);
-WHERE_INRIA CAI_IMAGE *cai_ouvre_creation_inria(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig,
-					  char* label);
-WHERE_INRIA CAI_OK_KO cai_ecriture_canal_inria(CAI_IMAGE *image1, int *canal, 
-         	 int *premiere_ligne, int *nombre_lignes_ecrire,
-		 int *nombre_colonnes_ecrire,unsigned char *data_image);
-WHERE_INRIA CAI_OK_KO cai_lecture_canal_inria(CAI_IMAGE *image1, int *canal,
-         	 int *premiere_ligne, int *premiere_colonne,
-		 int *nombre_lignes_lire, int *nombre_colonnes_lire,
-		 int *pas_lig, int *pas_col,unsigned char *data);
-
-
-WHERE_ONERA long int cai_liste_ima_onera(char *repert,char ***tab_ima);
-WHERE_ONERA CAI_OK_KO cai_dest_ima_onera(char *repertoire,char *nom_ima);
-WHERE_ONERA CAI_IMAGE *cai_ouvre_lecture_onera(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_ONERA CAI_IMAGE *cai_ouvre_modifie_onera(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_ONERA CAI_OK_KO cai_ferme_onera(CAI_IMAGE *image1);
-WHERE_ONERA CAI_IMAGE *cai_ouvre_creation_onera(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig,
-					  char* label);
-WHERE_ONERA CAI_OK_KO cai_ecriture_canal_onera(CAI_IMAGE *image1, int *canal, 
-         	 int *premiere_ligne, int *nombre_lignes_ecrire,
-		 int *nombre_colonnes_ecrire,unsigned char *data_image);
-WHERE_ONERA CAI_OK_KO cai_lecture_canal_onera(CAI_IMAGE *image1, int *canal,
-         	 int *premiere_ligne, int *premiere_colonne,
-		 int *nombre_lignes_lire, int *nombre_colonnes_lire,
-		 int *pas_lig, int *pas_col,unsigned char *data);
-
-
-WHERE_TIFF long int cai_liste_ima_tiff(char *repert,char ***tab_ima);
-WHERE_TIFF CAI_OK_KO cai_dest_ima_tiff(char *repertoire,char *nom_ima);
-WHERE_TIFF CAI_IMAGE *cai_ouvre_lecture_tiff(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_TIFF CAI_IMAGE *cai_ouvre_modifie_tiff(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_TIFF CAI_OK_KO cai_ferme_tiff(CAI_IMAGE *image1);
-WHERE_TIFF CAI_IMAGE *cai_ouvre_creation_tiff(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig,
-					  char* label);
-WHERE_TIFF CAI_OK_KO cai_ecriture_canal_tiff(CAI_IMAGE *image1, int *canal, 
-         	 int *premiere_ligne, int *nombre_lignes_ecrire,
-		 int *nombre_colonnes_ecrire,unsigned char *data_image);
-WHERE_TIFF CAI_OK_KO cai_lecture_canal_tiff(CAI_IMAGE *image1, int *canal,
-         	 int *premiere_ligne, int *premiere_colonne,
-		 int *nombre_lignes_lire, int *nombre_colonnes_lire,
-		 int *pas_lig, int *pas_col,unsigned char *data);
-
-WHERE_BIL long int cai_liste_ima_bil(char *repert,char ***tab_ima);
-WHERE_BIL CAI_OK_KO cai_dest_ima_bil(char *repertoire,char *nom_ima);
-WHERE_BIL CAI_IMAGE *cai_ouvre_lecture_bil(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_BIL CAI_IMAGE *cai_ouvre_modifie_bil(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_BIL CAI_OK_KO cai_ferme_bil(CAI_IMAGE *image1);
-WHERE_BIL CAI_IMAGE *cai_ouvre_creation_bil(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig,
-					  char* label);
-WHERE_BIL CAI_OK_KO cai_ecriture_canal_bil(CAI_IMAGE *image1, int *canal, 
-         	 int *premiere_ligne, int *nombre_lignes_ecrire,
-		 int *nombre_colonnes_ecrire,unsigned char *data_image);
-WHERE_BIL CAI_OK_KO cai_lecture_canal_bil(CAI_IMAGE *image1, int *canal,
-         	 int *premiere_ligne, int *premiere_colonne,
-		 int *nombre_lignes_lire, int *nombre_colonnes_lire,
-		 int *pas_lig, int *pas_col,unsigned char *data);
-WHERE_BIL CAI_OK_KO cai_modif_nbbitspix_bil(CAI_IMAGE *image1,
-					         int  NbBitsPix);
-
-
-WHERE_LUM long int cai_liste_ima_lum(char *repert,char ***tab_ima);
-WHERE_LUM CAI_OK_KO cai_dest_ima_lum(char *repertoire,char *nom_ima);
-WHERE_LUM CAI_IMAGE *cai_ouvre_lecture_lum(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_LUM CAI_IMAGE *cai_ouvre_modifie_lum(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_LUM CAI_OK_KO cai_ferme_lum(CAI_IMAGE *image1);
-WHERE_LUM CAI_IMAGE *cai_ouvre_creation_lum(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig,
-					  char* label);
-WHERE_LUM CAI_OK_KO cai_ecriture_canal_lum(CAI_IMAGE *image1, int *canal, 
-         	 int *premiere_ligne, int *nombre_lignes_ecrire,
-		 int *nombre_colonnes_ecrire,unsigned char *data_image);
-WHERE_LUM CAI_OK_KO cai_lecture_canal_lum(CAI_IMAGE *image1, int *canal,
-         	 int *premiere_ligne, int *premiere_colonne,
-		 int *nombre_lignes_lire, int *nombre_colonnes_lire,
-		 int *pas_lig, int *pas_col,unsigned char *data);
-
-
-WHERE_RASTER long int cai_liste_ima_sun_raster(char *repert,char ***tab_ima);
-WHERE_RASTER CAI_OK_KO cai_dest_ima_sun_raster(char *repertoire,char *nom_ima);
-WHERE_RASTER CAI_IMAGE *cai_ouvre_lecture_sun_raster(char *repert,
-		char *nom_image,int  *nb_can, int  *nboct_pix,
-		int  *nb_col, int  *nb_lig);
-WHERE_RASTER CAI_IMAGE *cai_ouvre_modifie_sun_raster(char *repert,
-		char *nom_image, int  *nb_can, int  *nboct_pix,
-		int  *nb_col, int  *nb_lig);
-WHERE_RASTER CAI_OK_KO cai_ferme_sun_raster(CAI_IMAGE *image1);
-WHERE_RASTER CAI_IMAGE *cai_ouvre_creation_sun_raster(char *repert,
-		char *nom_image, int  *nb_can, int  *nboct_pix,
-		int  *nb_col, int  *nb_lig, char* label);
-WHERE_RASTER CAI_OK_KO cai_ecriture_canal_sun_raster(CAI_IMAGE *image1,
-		 int *canal,  int *premiere_ligne, int *nombre_lignes_ecrire,
-		 int *nombre_colonnes_ecrire,unsigned char *data_image);
-WHERE_RASTER CAI_OK_KO cai_lecture_canal_sun_raster(CAI_IMAGE *image1,
-		 int *canal,int *premiere_ligne, int *premiere_colonne,
-		 int *nombre_lignes_lire, int *nombre_colonnes_lire,
-		 int *pas_lig, int *pas_col,unsigned char *data);
-
-
-WHERE_JPEG long int cai_liste_ima_jpeg(char *repert,char ***tab_ima);
-WHERE_JPEG CAI_OK_KO cai_dest_ima_jpeg(char *repertoire,char *nom_ima);
-WHERE_JPEG CAI_IMAGE *cai_ouvre_lecture_jpeg(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_JPEG CAI_IMAGE *cai_ouvre_modifie_jpeg(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_JPEG CAI_OK_KO cai_ferme_jpeg(CAI_IMAGE *image1);
-WHERE_JPEG CAI_IMAGE *cai_ouvre_creation_jpeg(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig,
-					  char* label);
-WHERE_JPEG CAI_OK_KO cai_ecriture_canal_jpeg(CAI_IMAGE *image1, int *canal, 
-         	 int *premiere_ligne, int *nombre_lignes_ecrire,
-		 int *nombre_colonnes_ecrire,unsigned char *data_image);
-WHERE_JPEG CAI_OK_KO cai_lecture_canal_jpeg(CAI_IMAGE *image1, int *canal,
-         	 int *premiere_ligne, int *premiere_colonne,
-		 int *nombre_lignes_lire, int *nombre_colonnes_lire,
-		 int *pas_lig, int *pas_col,unsigned char *data);
-
-
-WHERE_GESSIMU long int cai_liste_ima_gessimu(char *repert,char ***tab_ima);
-WHERE_GESSIMU CAI_OK_KO cai_dest_ima_gessimu(char *repertoire,char *nom_ima);
-WHERE_GESSIMU CAI_IMAGE *cai_ouvre_lecture_gessimu(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_GESSIMU CAI_IMAGE *cai_ouvre_modifie_gessimu(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_GESSIMU CAI_OK_KO cai_ferme_gessimu(CAI_IMAGE *image1);
-WHERE_GESSIMU CAI_IMAGE *cai_ouvre_creation_gessimu(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig,
-					  char* label);
-WHERE_GESSIMU CAI_OK_KO cai_ecriture_canal_gessimu(CAI_IMAGE *image1, int *canal, 
-         	 int *premiere_ligne, int *nombre_lignes_ecrire,
-		 int *nombre_colonnes_ecrire,unsigned char *data_image);
-WHERE_GESSIMU CAI_OK_KO cai_lecture_canal_gessimu(CAI_IMAGE *image1, int *canal,
-         	 int *premiere_ligne, int *premiere_colonne,
-		 int *nombre_lignes_lire, int *nombre_colonnes_lire,
-		 int *pas_lig, int *pas_col,unsigned char *data);
-
-
-WHERE_GRIL long int cai_liste_ima_grilles(char typgrille,char *repert,
-					  char ***tab_ima);
-WHERE_GRIL CAI_OK_KO cai_dest_ima_grilles(char typgrille,char *repertoire,
-					  char *nom_ima);
-WHERE_GRIL CAI_IMAGE *cai_ouvre_lecture_grilles(char typgrille,char *repert,
-					  char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_GRIL CAI_IMAGE *cai_ouvre_modifie_grilles(char typgrille,char *repert,
-					  char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_GRIL CAI_OK_KO cai_ferme_grilles(char typgrille,CAI_IMAGE *image1);
-WHERE_GRIL CAI_IMAGE *cai_ouvre_creation_grilles(char typgrille,
-				          char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig,
-					  char* label);
-WHERE_GRIL CAI_OK_KO cai_ecriture_canal_grilles(CAI_IMAGE *image1, int *canal, 
-         	 int *premiere_ligne, int *nombre_lignes_ecrire,
-		 int *nombre_colonnes_ecrire,unsigned char *data_image);
-WHERE_GRIL CAI_OK_KO cai_lecture_canal_grilles(CAI_IMAGE *image1, int *canal,
-         	 int *premiere_ligne, int *premiere_colonne,
-		 int *nombre_lignes_lire, int *nombre_colonnes_lire,
-		 int *pas_lig, int *pas_col,unsigned char *data);
-WHERE_GRIL CAI_OK_KO cai_modif_nbbitspix_grilles(CAI_IMAGE *image1,
-					         int  NbBitsPix);
-
-WHERE_SPOT long int cai_liste_ima_spot(char typspot,char *repert,
-					  char ***tab_ima);
-WHERE_SPOT CAI_OK_KO cai_dest_ima_spot(char typspot,char *repertoire,
-					  char *nom_ima);
-WHERE_SPOT CAI_IMAGE *cai_ouvre_lecture_spot(char typspot,char *repert,
-					  char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_SPOT CAI_IMAGE *cai_ouvre_modifie_spot(char typspot,char *repert,
-					  char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_SPOT CAI_OK_KO cai_ferme_spot(char typspot,CAI_IMAGE *image1);
-WHERE_SPOT CAI_IMAGE *cai_ouvre_creation_spot(char typspot,
-				          char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig,
-					  char* label);
-WHERE_SPOT CAI_OK_KO cai_ecriture_canal_spot(CAI_IMAGE *image1, int *canal, 
-         	 int *premiere_ligne, int *nombre_lignes_ecrire,
-		 int *nombre_colonnes_ecrire,unsigned char *data_image);
-WHERE_SPOT CAI_OK_KO cai_lecture_canal_spot(CAI_IMAGE *image1, int *canal,
-         	 int *premiere_ligne, int *premiere_colonne,
-		 int *nombre_lignes_lire, int *nombre_colonnes_lire,
-		 int *pas_lig, int *pas_col,unsigned char *data);
-WHERE_SPOT CAI_OK_KO cai_creat_leader_spot5( CAI_IMAGE *desc_im ,
-							char *repertoire);
-
-
-WHERE_RADAR long int cai_liste_ima_radar(char *repert,char ***tab_ima);
-WHERE_RADAR CAI_OK_KO cai_dest_ima_radar(char *repertoire,char *nom_ima);
-WHERE_RADAR CAI_IMAGE *cai_ouvre_lecture_radar(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_RADAR CAI_IMAGE *cai_ouvre_modifie_radar(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_RADAR CAI_OK_KO cai_ferme_radar(CAI_IMAGE *image1);
-WHERE_RADAR CAI_IMAGE *cai_ouvre_creation_radar(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig,
-					  char* label);
-WHERE_RADAR CAI_OK_KO cai_ecriture_canal_radar(CAI_IMAGE *image1, int *canal, 
-         	 int *premiere_ligne, int *nombre_lignes_ecrire,
-		 int *nombre_colonnes_ecrire,unsigned char *data_image);
-WHERE_RADAR CAI_OK_KO cai_lecture_canal_radar(CAI_IMAGE *image1, int *canal,
-         	 int *premiere_ligne, int *premiere_colonne,
-		 int *nombre_lignes_lire, int *nombre_colonnes_lire,
-		 int *pas_lig, int *pas_col,unsigned char *data);
-
-WHERE_RADAR int cai_istyp_radar(char *type_code,int *ind_typ, int *is_Cplx);
-
-WHERE_BANDEAU long int cai_liste_ima_bandeau(char *repert,char ***tab_ima);
-WHERE_BANDEAU CAI_OK_KO cai_dest_ima_bandeau(char *repertoire,char *nom_ima);
-WHERE_BANDEAU CAI_IMAGE *cai_ouvre_lecture_bandeau(char *repert,char *nom_image,
-					  int  *nb_can, int  *nboct_pix,
-					  int  *nb_col, int  *nb_lig);
-WHERE_BANDEAU CAI_OK_KO cai_ferme_bandeau(CAI_IMAGE *image1);
-WHERE_BANDEAU CAI_OK_KO cai_lecture_canal_bandeau(CAI_IMAGE *image1, int *canal,
-         	 int *premiere_ligne, int *premiere_colonne,
-		 int *nombre_lignes_lire, int *nombre_colonnes_lire,
-		 int *pas_lig, int *pas_col,unsigned char *data);
-#endif 
-
-#define CAI_MAX_LG_FORMAT 20
-#define CAI_MAX_LG_IMAGE  1024
-
-#define PERMS 0666
-#define CAI_NB_RADAR 28
-#define CAI_NB_TYPE 8
-#define CAI_NB_LUM 8
-
-WHERE  char CAI_ERREUR[1024]; 
-WHERE  CAI_IMAGE *FBANDEAU[20];
-
-static int CAI_RADAR_LONG[CAI_NB_RADAR]=
-{1,1,2,2,4,4,8,1,1,1,1,1,1,1,1,2,4,8,8,16,2,2,2,2,2,2,2,2};
-static char *CAI_RADAR_TYP[CAI_NB_RADAR]=
-{"OCT","PHA","I2","UI2","I4","R4","R8","1B","2B","3B","4B","5B","6B","7B","8B",
-"COCT","CI2","CI4","CR4","CR8","C1B","C2B","C3B","C4B","C5B",
-"C6B","C7B","C8B"};
-static char *CAI_TYPE_CONNU[CAI_NB_TYPE]=
-     {"OCT","UOCT","I2","UI2","I4","UI4","R4","R8"};
-static char *CAI_LUM_TYP[CAI_NB_LUM]=
-     {"BI","LI","BU","LU","FLOA","FLOL","R8B","R8L"};
-
-#define CAI_OK				 0
-#define CAI_KO		 		 1
-#define CAI_IMPOS			 2
-#define CAI_EOF         		-1
-#define CAI_ERREUR_OUV  		-2
-#define CAI_PB_LSEEK    		-3
-#define CAI_DEB_NEG     		-4
-#define CAI_FIN_DEP     		-5
-#define CAI_ECRASEMENT  		-6
-#define CAI_PB_READ 			-7
-#define CAI_PB_WRITE    		-8
-#define CAI_PB_FTRUNC   		-9
-#define CAI_ERR_FORME_FIC 		-10
-#define CAI_ERR_DO      		-11
-#define CAI_ERR_TYP			-12
-#define CAI_ERR_FIN_DO     		-13
-#define CAI_ERR_ASCII   		-14
-#define CAI_ERR_ALLOC   		-15
-#define CAI_ERR_REEL    		-16
-#define CAI_ERR_ENTIER  		-17
-#define CAI_ERR_DIM			-18
-#define CAI_ERREUR_RECHERCHE_MOT	-19
-#define CAI_MOT_DEJA_EXISTE		-20
-#define CAI_ERREUR_ENCODE		-21
-#define CAI_ERR_ADRESSE			-22 
-#define CAI_CLE_TROP_LONG		-23
-#define CAI_MC_INCONNU			-24
-#define CAI_PAS_MC			-24
-#define CAI_ERR_CROCHET			-25
-#define CAI_TROUVE	         	-26
-#define CAI_NON_TROUVE       		-27
-
-
-/* constantes relatives aux types de donnees */
-#define CAI_INCONNU -1
-#define CAI_ENTIER4 1
-#define CAI_REEL4   2
-#define CAI_REEL8   3
-#define CAI_ASCII   4 
-#define CAI_BLOC    5
-
-
-/* prototype des fonctions */
-
-WHERE_DA CAI_FILE_DA * cai_openDA(char *nom_fichier, char *type_image, 	
-	    			  int nb_can,CAI_MODE_OUVERTURE mode_ouv);
-WHERE_DA CAI_OK_KO cai_closeDA(CAI_FILE_DA *fd);
-WHERE_DA CAI_OK_KO cai_removeDA(char *nom_fichier,char *type_image,int nb_can);
-WHERE_DA CAI_OK_KO cai_lirecaractDA(CAI_FILE_DA *fd,char *mot_cle,
-				    CAI_TYPE *type,int *nb_lig,int *nb_col, 	
-  	        	            long *taille_cell);
-WHERE_DA CAI_OK_KO cai_lireDA(CAI_FILE_DA *fd,char *mot_cle,
-				    CAI_TYPE *type,int *nb_lig,int *nb_col, 	
-  	        	            long *taille_cell,void *donnees);
-WHERE_DA CAI_OK_KO cai_modifieDA(CAI_FILE_DA *fd,char *mot_cle,
-				    CAI_TYPE type,int nb_lig,int nb_col, 	
-  	        	            long taille_cell,void *donnees);
-WHERE_DA CAI_OK_KO cai_detruitDA(CAI_FILE_DA *fd,char *mot_cle);
-WHERE_DA CAI_OK_KO cai_listeDA(CAI_FILE_DA *fd);
-WHERE_DA CAI_OK_KO cai_ajouteDA(CAI_FILE_DA *fd,char *mot_cle,
-				    CAI_TYPE type,int nb_lig,int nb_col, 	
-  	        	            long taille_cell,void *donnees);
-WHERE_DA CAI_OK_KO cai_lecture_colormap(CAI_IMAGE  *fdima);
-WHERE_DA CAI_OK_KO cai_ecriture_colormap(CAI_IMAGE  *fdima);
-
-
-WHERE_FONC long int cai_liste_image(char *repert,char *type_image,
-				    char ***tab_ima);
-WHERE_FONC long int cai_liste_format(char ***tab_format,
-				     char **(tab_suffixe[2]));
-WHERE_FONC CAI_OK_KO cai_destruction_image(char *format,char *nom_ima);
-WHERE_FONC CAI_IMAGE *cai_ouvre_lecture_image(char *nom_image,char *type_image,
-					 int  *nb_can, int  *nboct_pix,
-					 int  *nb_col, int  *nb_lig);
-WHERE_FONC CAI_IMAGE *cai_ouvre_modifie_image(char *nom_image,char *type_image,
-					 int  *nb_can, int  *nboct_pix,
-					 int  *nb_col, int  *nb_lig);
-WHERE_FONC CAI_OK_KO cai_ferme_image(CAI_IMAGE *image1);
-WHERE_FONC CAI_IMAGE *cai_ouvre_creation_image(char *nom_image,char *type_image,
-					  int nb_can, int  nboct_pix,
-					  int  nb_col, int  nb_lig,
-					 char* label);
-WHERE_FONC CAI_OK_KO cai_ecriture_canal(CAI_IMAGE *image1, int canal, 
-         	 int premiere_ligne, int nombre_lignes_ecrire,
-		 int nombre_colonnes_ecrire,unsigned char *data_image);
-WHERE_FONC CAI_OK_KO cai_lecture_canal(CAI_IMAGE *image1, int canal,
-         	 int premiere_ligne, int premiere_colonne,
-		 int nombre_lignes_lire, int nombre_colonnes_lire,
-		 int pas_lig, int pas_col,unsigned char *data);
-WHERE_FONC CAI_OK_KO cai_modif_nbbitspix(char 	*format,CAI_IMAGE *image,
-					 int NbBitsPix);
-
-WHERE_FONC CAI_OK_KO cai_modif_nbbitspix(char 	*format,CAI_IMAGE *image,
-					 int NbBitsPix);
-WHERE_FONC void cai_inverser_tableau(short *BufL,short *BufE,int Nb);
-WHERE_FONC void cai_inverser_tableau_complet(unsigned char *data_image,
-					     int nbpix, int oct_pix);
-WHERE_FONC char* cai_test_pFpf();
-WHERE_FONC char* cai_En_majuscule( char *mot );
-WHERE_FONC char* cai_En_minuscule( char *mot );
-WHERE_FONC int   cai_istyp_connu(char *type_code);
-WHERE_FONC   CAI_OK_KO cai_lead4to5spot ( CAI_IMAGE *desc_im ,char *repertoire);
-
-#endif
-#ifndef _WIN
-#define O_BINARY 0
-#endif
diff --git a/Utilities/CAI/cai_dll/inc/cderror.h b/Utilities/CAI/cai_dll/inc/cderror.h
deleted file mode 100755
index 41a29cd12f..0000000000
--- a/Utilities/CAI/cai_dll/inc/cderror.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * cderror.h
- *
- * Copyright (C) 1994, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file defines the error and message codes for the cjpeg/djpeg
- * applications.  These strings are not needed as part of the JPEG library
- * proper.
- * Edit this file to add new codes, or to translate the message strings to
- * some other language.
- */
-
-/*
- * To define the enum list of message codes, include this file without
- * defining macro JMESSAGE.  To create a message string table, include it
- * again with a suitable JMESSAGE definition (see jerror.c for an example).
- */
-#ifndef JMESSAGE
-#ifndef CDERROR_H
-#define CDERROR_H
-/* First time through, define the enum list */
-#define JMAKE_ENUM_LIST
-#else
-/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */
-#define JMESSAGE(code,string)
-#endif /* CDERROR_H */
-#endif /* JMESSAGE */
-
-#ifdef JMAKE_ENUM_LIST
-
-typedef enum {
-
-#define JMESSAGE(code,string)	code ,
-
-#endif /* JMAKE_ENUM_LIST */
-
-JMESSAGE(JMSG_FIRSTADDONCODE=1000, NULL) /* Must be first entry! */
-
-#ifdef BMP_SUPPORTED
-JMESSAGE(JERR_BMP_BADCMAP, "Unsupported BMP colormap format")
-JMESSAGE(JERR_BMP_BADDEPTH, "Only 8- and 24-bit BMP files are supported")
-JMESSAGE(JERR_BMP_BADHEADER, "Invalid BMP file: bad header length")
-JMESSAGE(JERR_BMP_BADPLANES, "Invalid BMP file: biPlanes not equal to 1")
-JMESSAGE(JERR_BMP_COLORSPACE, "BMP output must be grayscale or RGB")
-JMESSAGE(JERR_BMP_COMPRESSED, "Sorry, compressed BMPs not yet supported")
-JMESSAGE(JERR_BMP_NOT, "Not a BMP file - does not start with BM")
-JMESSAGE(JTRC_BMP, "%ux%u 24-bit BMP image")
-JMESSAGE(JTRC_BMP_MAPPED, "%ux%u 8-bit colormapped BMP image")
-JMESSAGE(JTRC_BMP_OS2, "%ux%u 24-bit OS2 BMP image")
-JMESSAGE(JTRC_BMP_OS2_MAPPED, "%ux%u 8-bit colormapped OS2 BMP image")
-#endif /* BMP_SUPPORTED */
-
-#ifdef GIF_SUPPORTED
-JMESSAGE(JERR_GIF_BUG, "GIF output got confused")
-JMESSAGE(JERR_GIF_CODESIZE, "Bogus GIF codesize %d")
-JMESSAGE(JERR_GIF_COLORSPACE, "GIF output must be grayscale or RGB")
-JMESSAGE(JERR_GIF_IMAGENOTFOUND, "Too few images in GIF file")
-JMESSAGE(JERR_GIF_NOT, "Not a GIF file")
-JMESSAGE(JTRC_GIF, "%ux%ux%d GIF image")
-JMESSAGE(JTRC_GIF_BADVERSION,
-	 "Warning: unexpected GIF version number '%c%c%c'")
-JMESSAGE(JTRC_GIF_EXTENSION, "Ignoring GIF extension block of type 0x%02x")
-JMESSAGE(JTRC_GIF_NONSQUARE, "Caution: nonsquare pixels in input")
-JMESSAGE(JWRN_GIF_BADDATA, "Corrupt data in GIF file")
-JMESSAGE(JWRN_GIF_CHAR, "Bogus char 0x%02x in GIF file, ignoring")
-JMESSAGE(JWRN_GIF_ENDCODE, "Premature end of GIF image")
-JMESSAGE(JWRN_GIF_NOMOREDATA, "Ran out of GIF bits")
-#endif /* GIF_SUPPORTED */
-
-#ifdef PPM_SUPPORTED
-JMESSAGE(JERR_PPM_COLORSPACE, "PPM output must be grayscale or RGB")
-JMESSAGE(JERR_PPM_NONNUMERIC, "Nonnumeric data in PPM file")
-JMESSAGE(JERR_PPM_NOT, "Not a PPM file")
-JMESSAGE(JTRC_PGM, "%ux%u PGM image")
-JMESSAGE(JTRC_PGM_TEXT, "%ux%u text PGM image")
-JMESSAGE(JTRC_PPM, "%ux%u PPM image")
-JMESSAGE(JTRC_PPM_TEXT, "%ux%u text PPM image")
-#endif /* PPM_SUPPORTED */
-
-#ifdef RLE_SUPPORTED
-JMESSAGE(JERR_RLE_BADERROR, "Bogus error code from RLE library")
-JMESSAGE(JERR_RLE_COLORSPACE, "RLE output must be grayscale or RGB")
-JMESSAGE(JERR_RLE_DIMENSIONS, "Image dimensions (%ux%u) too large for RLE")
-JMESSAGE(JERR_RLE_EMPTY, "Empty RLE file")
-JMESSAGE(JERR_RLE_EOF, "Premature EOF in RLE header")
-JMESSAGE(JERR_RLE_MEM, "Insufficient memory for RLE header")
-JMESSAGE(JERR_RLE_NOT, "Not an RLE file")
-JMESSAGE(JERR_RLE_TOOMANYCHANNELS, "Cannot handle %d output channels for RLE")
-JMESSAGE(JERR_RLE_UNSUPPORTED, "Cannot handle this RLE setup")
-JMESSAGE(JTRC_RLE, "%ux%u full-color RLE file")
-JMESSAGE(JTRC_RLE_FULLMAP, "%ux%u full-color RLE file with map of length %d")
-JMESSAGE(JTRC_RLE_GRAY, "%ux%u grayscale RLE file")
-JMESSAGE(JTRC_RLE_MAPGRAY, "%ux%u grayscale RLE file with map of length %d")
-JMESSAGE(JTRC_RLE_MAPPED, "%ux%u colormapped RLE file with map of length %d")
-#endif /* RLE_SUPPORTED */
-
-#ifdef TARGA_SUPPORTED
-JMESSAGE(JERR_TGA_BADCMAP, "Unsupported Targa colormap format")
-JMESSAGE(JERR_TGA_BADPARMS, "Invalid or unsupported Targa file")
-JMESSAGE(JERR_TGA_COLORSPACE, "Targa output must be grayscale or RGB")
-JMESSAGE(JTRC_TGA, "%ux%u RGB Targa image")
-JMESSAGE(JTRC_TGA_GRAY, "%ux%u grayscale Targa image")
-JMESSAGE(JTRC_TGA_MAPPED, "%ux%u colormapped Targa image")
-#else
-JMESSAGE(JERR_TGA_NOTCOMP, "Targa support was not compiled")
-#endif /* TARGA_SUPPORTED */
-
-JMESSAGE(JERR_BAD_CMAP_FILE,
-	 "Color map file is invalid or of unsupported format")
-JMESSAGE(JERR_TOO_MANY_COLORS,
-	 "Output file format cannot handle %d colormap entries")
-JMESSAGE(JERR_UNGETC_FAILED, "ungetc failed")
-#ifdef TARGA_SUPPORTED
-JMESSAGE(JERR_UNKNOWN_FORMAT,
-	 "Unrecognized input file format --- perhaps you need -targa")
-#else
-JMESSAGE(JERR_UNKNOWN_FORMAT, "Unrecognized input file format")
-#endif
-JMESSAGE(JERR_UNSUPPORTED_FORMAT, "Unsupported output file format")
-
-#ifdef JMAKE_ENUM_LIST
-
-  JMSG_LASTADDONCODE
-} ADDON_MESSAGE_CODE;
-
-#undef JMAKE_ENUM_LIST
-#endif /* JMAKE_ENUM_LIST */
-
-/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */
-#undef JMESSAGE
diff --git a/Utilities/CAI/cai_dll/inc/cdjpeg.h b/Utilities/CAI/cai_dll/inc/cdjpeg.h
deleted file mode 100755
index cc0d60016a..0000000000
--- a/Utilities/CAI/cai_dll/inc/cdjpeg.h
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * cdjpeg.h
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains common declarations for the sample applications
- * cjpeg and djpeg.  It is NOT used by the core JPEG library.
- */
-
-#define JPEG_CJPEG_DJPEG	/* define proper options in jconfig.h */
-#define JPEG_INTERNAL_OPTIONS	/* cjpeg.c,djpeg.c need to see xxx_SUPPORTED */
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jerror.h"		/* get library error codes too */
-#include "cderror.h"		/* get application-specific error codes */
-
-
-/*
- * Object interface for cjpeg's source file decoding modules
- */
-
-typedef struct cjpeg_source_struct * cjpeg_source_ptr;
-
-struct cjpeg_source_struct {
-  JMETHOD(void, start_input, (j_compress_ptr cinfo,
-			      cjpeg_source_ptr sinfo));
-  JMETHOD(JDIMENSION, get_pixel_rows, (j_compress_ptr cinfo,
-				       cjpeg_source_ptr sinfo));
-  JMETHOD(void, finish_input, (j_compress_ptr cinfo,
-			       cjpeg_source_ptr sinfo));
-
-  FILE *input_file;
-
-  JSAMPARRAY buffer;
-  JDIMENSION buffer_height;
-};
-
-
-/*
- * Object interface for djpeg's output file encoding modules
- */
-
-typedef struct djpeg_dest_struct * djpeg_dest_ptr;
-
-struct djpeg_dest_struct {
-  /* start_output is called after jpeg_start_decompress finishes.
-   * The color map will be ready at this time, if one is needed.
-   */
-  JMETHOD(void, start_output, (j_decompress_ptr cinfo,
-			       djpeg_dest_ptr dinfo));
-  /* Emit the specified number of pixel rows from the buffer. */
-  JMETHOD(void, put_pixel_rows, (j_decompress_ptr cinfo,
-				 djpeg_dest_ptr dinfo,
-				 JDIMENSION rows_supplied));
-  /* Finish up at the end of the image. */
-  JMETHOD(void, finish_output, (j_decompress_ptr cinfo,
-				djpeg_dest_ptr dinfo));
-
-  /* Target file spec; filled in by djpeg.c after object is created. */
-  FILE * output_file;
-
-  /* Output pixel-row buffer.  Created by module init or start_output.
-   * Width is cinfo->output_width * cinfo->output_components;
-   * height is buffer_height.
-   */
-  JSAMPARRAY buffer;
-  JDIMENSION buffer_height;
-};
-
-
-/*
- * cjpeg/djpeg may need to perform extra passes to convert to or from
- * the source/destination file format.  The JPEG library does not know
- * about these passes, but we'd like them to be counted by the progress
- * monitor.  We use an expanded progress monitor object to hold the
- * additional pass count.
- */
-
-struct cdjpeg_progress_mgr {
-  struct jpeg_progress_mgr pub;	/* fields known to JPEG library */
-  int completed_extra_passes;	/* extra passes completed */
-  int total_extra_passes;	/* total extra */
-  /* last printed percentage stored here to avoid multiple printouts */
-  int percent_done;
-};
-
-typedef struct cdjpeg_progress_mgr * cd_progress_ptr;
-
-
-/* Short forms of external names for systems with brain-damaged linkers. */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jinit_read_bmp		jIRdBMP
-#define jinit_write_bmp		jIWrBMP
-#define jinit_read_gif		jIRdGIF
-#define jinit_write_gif		jIWrGIF
-#define jinit_read_ppm		jIRdPPM
-#define jinit_write_ppm		jIWrPPM
-#define jinit_read_rle		jIRdRLE
-#define jinit_write_rle		jIWrRLE
-#define jinit_read_targa	jIRdTarga
-#define jinit_write_targa	jIWrTarga
-#define read_quant_tables	RdQTables
-#define read_scan_script	RdScnScript
-#define set_quant_slots		SetQSlots
-#define set_sample_factors	SetSFacts
-#define read_color_map		RdCMap
-#define enable_signal_catcher	EnSigCatcher
-#define start_progress_monitor	StProgMon
-#define end_progress_monitor	EnProgMon
-#define read_stdin		RdStdin
-#define write_stdout		WrStdout
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-/* Module selection routines for I/O modules. */
-
-EXTERN(cjpeg_source_ptr) jinit_read_bmp JPP((j_compress_ptr cinfo));
-EXTERN(djpeg_dest_ptr) jinit_write_bmp JPP((j_decompress_ptr cinfo,
-					    boolean is_os2));
-EXTERN(cjpeg_source_ptr) jinit_read_gif JPP((j_compress_ptr cinfo));
-EXTERN(djpeg_dest_ptr) jinit_write_gif JPP((j_decompress_ptr cinfo));
-EXTERN(cjpeg_source_ptr) jinit_read_ppm JPP((j_compress_ptr cinfo));
-EXTERN(djpeg_dest_ptr) jinit_write_ppm JPP((j_decompress_ptr cinfo));
-EXTERN(cjpeg_source_ptr) jinit_read_rle JPP((j_compress_ptr cinfo));
-EXTERN(djpeg_dest_ptr) jinit_write_rle JPP((j_decompress_ptr cinfo));
-EXTERN(cjpeg_source_ptr) jinit_read_targa JPP((j_compress_ptr cinfo));
-EXTERN(djpeg_dest_ptr) jinit_write_targa JPP((j_decompress_ptr cinfo));
-
-/* cjpeg support routines (in rdswitch.c) */
-
-EXTERN(boolean) read_quant_tables JPP((j_compress_ptr cinfo, char * filename,
-				    int scale_factor, boolean force_baseline));
-EXTERN(boolean) read_scan_script JPP((j_compress_ptr cinfo, char * filename));
-EXTERN(boolean) set_quant_slots JPP((j_compress_ptr cinfo, char *arg));
-EXTERN(boolean) set_sample_factors JPP((j_compress_ptr cinfo, char *arg));
-
-/* djpeg support routines (in rdcolmap.c) */
-
-EXTERN(void) read_color_map JPP((j_decompress_ptr cinfo, FILE * infile));
-
-/* common support routines (in cdjpeg.c) */
-
-EXTERN(void) enable_signal_catcher JPP((j_common_ptr cinfo));
-EXTERN(void) start_progress_monitor JPP((j_common_ptr cinfo,
-					 cd_progress_ptr progress));
-EXTERN(void) end_progress_monitor JPP((j_common_ptr cinfo));
-EXTERN(boolean) keymatch JPP((char * arg, const char * keyword, int minchars));
-EXTERN(FILE *) read_stdin JPP((void));
-EXTERN(FILE *) write_stdout JPP((void));
-
-/* miscellaneous useful macros */
-
-#ifdef DONT_USE_B_MODE		/* define mode parameters for fopen() */
-#define READ_BINARY	"r"
-#define WRITE_BINARY	"w"
-#else
-#define READ_BINARY	"rb"
-#define WRITE_BINARY	"wb"
-#endif
-
-#ifndef EXIT_FAILURE		/* define exit() codes if not provided */
-#define EXIT_FAILURE  1
-#endif
-#ifndef EXIT_SUCCESS
-#ifdef VMS
-#define EXIT_SUCCESS  1		/* VMS is very nonstandard */
-#else
-#define EXIT_SUCCESS  0
-#endif
-#endif
-#ifndef EXIT_WARNING
-#ifdef VMS
-#define EXIT_WARNING  1		/* VMS is very nonstandard */
-#else
-#define EXIT_WARNING  2
-#endif
-#endif
diff --git a/Utilities/CAI/cai_dll/inc/g3states.h b/Utilities/CAI/cai_dll/inc/g3states.h
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/atom.h b/Utilities/CAI/cai_dll/inc/inc_hdf/atom.h
deleted file mode 100755
index 9caab48d9e..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/atom.h
+++ /dev/null
@@ -1,300 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*-----------------------------------------------------------------------------
- * File:    atom.h
- * Purpose: header file for atom API
- * Dependencies: 
- * Invokes:
- * Contents:
- * Structure definitions: 
- * Constant definitions: 
- *---------------------------------------------------------------------------*/
-
-/* avoid re-inclusion */
-#ifndef __ATOM_H
-#define __ATOM_H
-
-/* Atom Features control */
-/* Define the following macro for fast hash calculations (but limited hash sizes) */
-#define HASH_SIZE_POWER_2
-
-/* Define the following macro for atom caching over all the atoms */
-#define ATOMS_ARE_CACHED
-
-/* Define the following macro for "inline" atom lookups from the cache */
-#ifdef ATOMS_ARE_CACHED     /* required for this to work */
-#define ATOMS_CACHE_INLINE
-#endif /* ATOMS_ARE_CACHED */
-
-#ifdef ATOMS_CACHE_INLINE
-/* Do swap using XOR operator. Ugly but fast... -QAK */
-#define HAIswap_cache(i,j) \
-                atom_id_cache[i]^=atom_id_cache[j], \
-                atom_obj_cache[i]=(void *)((hdf_pint_t)atom_obj_cache[j]^(hdf_pint_t)atom_obj_cache[i]), \
-                atom_id_cache[j]^=atom_id_cache[i], \
-                atom_obj_cache[j]=(void *)((hdf_pint_t)atom_obj_cache[i]^(hdf_pint_t)atom_obj_cache[j]), \
-                atom_id_cache[i]^=atom_id_cache[j], \
-                atom_obj_cache[i]=(void *)((hdf_pint_t)atom_obj_cache[i]^(hdf_pint_t)atom_obj_cache[j])
-
-/* Note! This is hardwired to the atom cache value being 4 */
-#define HAatom_object(atm) \
-    (atom_id_cache[0]==atm ? atom_obj_cache[0] : \
-      atom_id_cache[1]==atm ? (HAIswap_cache(0,1),atom_obj_cache[0]) : \
-       atom_id_cache[2]==atm ? (HAIswap_cache(1,2),atom_obj_cache[1]) : \
-        atom_id_cache[3]==atm ? (HAIswap_cache(2,3),atom_obj_cache[2]) : \
-         HAPatom_object(atm))
-#endif /* ATOMS_CACHE_INLINE */
-
-#include "hdf.h"
-
-/* Group values allowed */
-typedef enum {BADGROUP=(-1),    /* Invalid Group */
-DDGROUP=0,                  /* Group ID for DD objects */
-AIDGROUP=1,                 /* Group ID for access ID objects */
-FIDGROUP=2,                 /* Group ID for file ID objects */
-VGIDGROUP=3,                /* Group ID for Vgroup ID objects */
-VSIDGROUP=4,                /* Group ID for Vdata ID objects */
-GRIDGROUP=5,                /* Group ID for GR ID objects */
-RIIDGROUP=6,                /* Group ID for RI ID objects */
-BITIDGROUP=7,               /* Group ID for Bitfile ID objects */
-ANIDGROUP=8,                /* Group ID for Annotation ID objects */
-MAXGROUP                    /* Highest group in group_t (Invalid as true group) */
-} group_t;
-
-/* Type of atoms to return to users */
-typedef int32 atom_t;
-
-/* Type of the function to compare objects & keys */
-typedef intn (*HAsearch_func_t)(const void * obj, const void * key);
-
-#if defined ATOM_MASTER | defined ATOM_TESTER
-
-/* # of bits to use for Group ID in each atom (change if MAXGROUP>16) */
-#define GROUP_BITS  4
-#define GROUP_MASK  0x0F
-
-/* # of bits to use for the Atom index in each atom (change if MAXGROUP>16) */
-#define ATOM_BITS   28
-#define ATOM_MASK   0x0FFFFFFF
-
-#ifdef ATOMS_ARE_CACHED
-/* # of previous atoms cached, change inline caching macros (HAatom_object & HAIswap_cache) if this changes */
-#define ATOM_CACHE_SIZE 4
-#endif /* ATOMS_ARE_CACHED */
-
-/* Map an atom to a Group number */
-#define ATOM_TO_GROUP(a)    ((group_t)((((atom_t)(a))>>((sizeof(atom_t)*8)-GROUP_BITS))&GROUP_MASK))
-
-#ifdef HASH_SIZE_POWER_2
-/* Map an atom to a hash location (assumes s is a power of 2 and smaller than the ATOM_MASK constant) */
-#define ATOM_TO_LOC(a,s)    ((atom_t)(a)&((s)-1))
-#else /* HASH_SIZE_POWER_2 */
-/* Map an atom to a hash location */
-#define ATOM_TO_LOC(a,s)    (((atom_t)(a)&ATOM_MASK)%(s))
-#endif /* HASH_SIZE_POWER_2 */
-
-/* Combine a Group number and an atom index into an atom */
-#define MAKE_ATOM(g,i)      ((((atom_t)(g)&GROUP_MASK)<<((sizeof(atom_t)*8)-GROUP_BITS))|((atom_t)(i)&ATOM_MASK))
-
-/* Atom information structure used */
-typedef struct atom_info_struct_tag {
-    atom_t id;              /* atom ID for this info */
-    VOIDP *obj_ptr;         /* pointer associated with the atom */
-    struct atom_info_struct_tag *next;   /* link to next atom (in case of hash-clash) */
-  }atom_info_t;
-
-/* Atom group structure used */
-typedef struct atom_group_struct_tag {
-    uintn count;            /* # of times this group has been initialized */
-    intn hash_size;         /* size of the hash table to store the atoms in */
-    uintn atoms;            /* current number of atoms held */
-    uintn nextid;           /* atom ID to use for the next atom */
-    atom_info_t **atom_list;/* pointer to an array of ptrs to atoms */
-  }atom_group_t;
-
-/* Define this in only one place */
-#ifdef ATOM_MASTER
-
-/* Array of pointers to atomic groups */
-static atom_group_t *atom_group_list[MAXGROUP]={NULL};
-
-/* Pointer to the atom node free list */
-static atom_info_t *atom_free_list=NULL;
-
-#ifdef ATOMS_ARE_CACHED
-/* Array of pointers to atomic groups */
-#ifdef OLD_WAY
-static atom_t atom_id_cache[ATOM_CACHE_SIZE]={-1,-1,-1,-1};
-static VOIDP atom_obj_cache[ATOM_CACHE_SIZE]={NULL};
-#else /* OLD_WAY */
-atom_t atom_id_cache[ATOM_CACHE_SIZE]={-1,-1,-1,-1};
-VOIDP atom_obj_cache[ATOM_CACHE_SIZE]={NULL};
-#endif /* OLD_WAY */
-#endif /* ATOMS_ARE_CACHED */
-#endif /* ATOM_MASTER */
-
-/* Useful routines for generally private use */
-
-#endif /* ATOM_MASTER | ATOM_TESTER */
-
-#ifndef ATOM_MASTER
-extern atom_t atom_id_cache[];
-extern VOIDP atom_obj_cache[];
-#endif /* ATOM_MASTER */
-
-#if defined c_plusplus || defined __cplusplus
-extern      "C"
-{
-#endif                          /* c_plusplus || __cplusplus */
-
-/******************************************************************************
- NAME
-     HAinit_group - Initialize an atomic group
-
- DESCRIPTION
-    Creates an atomic group to store atoms in.  If the group has already been
-    initialized, this routine just increments the count of # of initializations
-    and returns without trying to change the size of the hash table.
-
- RETURNS
-    Returns SUCCEED if successful and FAIL otherwise
-
-*******************************************************************************/
-intn HAinit_group(group_t grp,      /* IN: Group to initialize */
-    intn hash_size                  /* IN: Minimum hash table size to use for group */
-);
-
-/******************************************************************************
- NAME
-     HAdestroy_group - Destroy an atomic group
-
- DESCRIPTION
-    Destroys an atomic group which atoms are stored in.  If the group still
-    has atoms which are registered, this routine fails.  If there have been
-    multiple initializations of the group, this routine just decrements the
-    count of initializations and does not check the atoms out-standing.
-
- RETURNS
-    Returns SUCCEED if successful and FAIL otherwise
-
-*******************************************************************************/
-intn HAdestroy_group(group_t grp       /* IN: Group to destroy */
-);
-
-/******************************************************************************
- NAME
-     HAregister_atom - Register an object in a group and get an atom for it.
-
- DESCRIPTION
-    Registers an object in a group and returns an atom for it.  This routine
-    does _not_ check for unique-ness of the objects, if you register an object
-    twice, you will get two different atoms for it.  This routine does make
-    certain that each atom in a group is unique.  Atoms are created by getting
-    a unique number for the group the atom is in and incorporating the group
-    into the atom which is returned to the user.
-
- RETURNS
-    Returns atom if successful and FAIL otherwise
-
-*******************************************************************************/
-atom_t HAregister_atom(group_t grp,     /* IN: Group to register the object in */
-    VOIDP object                        /* IN: Object to attach to atom */
-);
-
-/******************************************************************************
- NAME
-     HAatom_object - Returns to the object ptr for the atom 
-
- DESCRIPTION
-    Retrieves the object ptr which is associated with the atom.
-
- RETURNS
-    Returns object ptr if successful and NULL otherwise
-
-*******************************************************************************/
-#ifdef ATOMS_CACHE_INLINE
-VOIDP HAPatom_object(atom_t atm   /* IN: Atom to retrieve object for */
-);
-#else /* ATOMS_CACHE_INLINE */
-VOIDP HAatom_object(atom_t atm   /* IN: Atom to retrieve object for */
-);
-#endif /* ATOMS_CACHE_INLINE */
-
-/******************************************************************************
- NAME
-     HAatom_group - Returns to the group for the atom 
-
- DESCRIPTION
-    Retrieves the group which is associated with the atom.
-
- RETURNS
-    Returns group if successful and FAIL otherwise
-
-*******************************************************************************/
-group_t HAatom_group(atom_t atm   /* IN: Atom to retrieve group for */
-);
-
-/******************************************************************************
- NAME
-     HAremove_atom - Removes an atom from a group
-
- DESCRIPTION
-    Removes an atom from a group.
-
- RETURNS
-    Returns atom's object if successful and FAIL otherwise
-
-*******************************************************************************/
-VOIDP HAremove_atom(atom_t atm   /* IN: Atom to remove */
-);
-
-/******************************************************************************
- NAME
-     HAsearch_atom - Search for an object in a group and get it's pointer.
-
- DESCRIPTION
-    Searchs for an object in a group and returns the pointer to it.
-    This routine calls the function pointer passed in for each object in the
-    group until it finds a match.  Currently there is no way to resume a
-    search.
-
- RETURNS
-    Returns pointer an atom's object if successful and NULL otherwise
-
-*******************************************************************************/
-VOIDP HAsearch_atom(group_t grp,        /* IN: Group to search for the object in */
-    HAsearch_func_t func,               /* IN: Ptr to the comparison function */
-    const void * key                     /* IN: pointer to key to compare against */
-);
-
-/******************************************************************************
- NAME
-     HAshutdown - Terminate various static buffers.
-
- DESCRIPTION
-    Free various buffers allocated in the HA routines.
-
- RETURNS
-    Returns SUCCEED/FAIL
-
-*******************************************************************************/
-intn HAshutdown(void);
-
-#if defined c_plusplus || defined __cplusplus
-}
-#endif                          /* c_plusplus || __cplusplus */
-
-#endif /* __ATOM_H */
-
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/bitvect.h b/Utilities/CAI/cai_dll/inc/inc_hdf/bitvect.h
deleted file mode 100755
index fe3bec1352..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/bitvect.h
+++ /dev/null
@@ -1,385 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*-----------------------------------------------------------------------------
- * File:    bitvect.h
- * Purpose: header file for bit-vector API
- * Dependencies: 
- * Invokes:
- * Contents:
- * Structure definitions: 
- * Constant definitions: 
- *---------------------------------------------------------------------------*/
-
-/* avoid re-inclusion */
-#ifndef __BITVECT_H
-#define __BITVECT_H
-
-#include "hdf.h"
-
-/* Boolean values used */
-typedef enum {BV_FALSE=0, BV_TRUE=1} bv_bool;
-
-/* Flags for the bit-vector */
-#define BV_INIT_TO_ONE  0x00000001  /* to indicate whether to create the bit-vector with one's instead of zero's */
-#define BV_EXTENDABLE   0x00000002  /* to indicate that the bit-vector can be extended */
-
-/* Default size of a bit-vector */
-#define BV_DEFAULT_BITS 128
-
-/* Define the size of the chunks bits are allocated in */
-#define BV_CHUNK_SIZE 64
-
-/* Create the external interface data structures needed */
-typedef struct bv_struct_tag *bv_ptr;
-
-#if defined BV_MASTER | defined BV_TESTER
-
-/* Base type of the array used to store the bits */
-typedef unsigned char bv_base;
-
-/* # of bits in the base type of the array used to store the bits */
-#define BV_BASE_BITS    (sizeof(bv_base)*8)
-
-/* bit-vector structure used */
-typedef struct bv_struct_tag {
-    uint32 bits_used;       /* The actual number of bits current in use */
-    uint32 array_size;      /* The number of bv_base elements in the bit-vector */
-    uint32 flags;           /* The flags used to create this bit-vector */
-    int32 last_zero;        /* The last location we know had a zero bit */
-    bv_base *buffer;        /* Pointer to the buffer used to store the bits */
-  }bv_struct;
-
-/* Table of bits for each bit position */
-/*  (This will need to be changed/expanded if another base type is used) */
-static const uint8 bv_bit_value[8]={
-    1,  /* bit 0's value is 1 */
-    2,  /* bit 1's value is 2 */
-    4,  /* bit 2's value is 4 */
-    8,  /* bit 3's value is 8 */
-    16,  /* bit 4's value is 16 */
-    32,  /* bit 5's value is 32 */
-    64,  /* bit 6's value is 64 */
-    128   /* bit 7's value is 128 */
-};
-
-/* Table of bit-masks for each number of bits in a byte */
-/*  (This will need to be changed/expanded if another base type is used) */
-static const uint8 bv_bit_mask[9]={
-    0x00,  /* 0 bits is a mask of 0x00 */
-    0x01,  /* 1 bits is a mask of 0x01 */
-    0x03,  /* 2 bits is a mask of 0x03 */
-    0x07,  /* 3 bits is a mask of 0x07 */
-    0x0F,  /* 4 bits is a mask of 0x0F */
-    0x1F,  /* 5 bits is a mask of 0x1F */
-    0x3F,  /* 6 bits is a mask of 0x3F */
-    0x7F,  /* 7 bits is a mask of 0x7F */
-    0xFF   /* 8 bits is a mask of 0xFF */
-};
-
-/* Table of "first zero bit" for each byte value */
-/*  (This will need to be changed/expanded if another base type is used) */
-static const int8 bv_first_zero[256]={
-    0,  /* "0" - bit 0 is lowest zero */ 1,  /* "1" - bit 1 is lowest zero */
-    0,  /* "2" - bit 0 is lowest zero */ 2,  /* "3" - bit 2 is lowest zero */
-    0,  /* "4" - bit 0 is lowest zero */ 1,  /* "5" - bit 1 is lowest zero */
-    0,  /* "6" - bit 0 is lowest zero */ 3,  /* "7" - bit 3 is lowest zero */
-    0,  /* "8" - bit 0 is lowest zero */ 1,  /* "9" - bit 1 is lowest zero */
-    0,  /* "10" - bit 0 is lowest zero */ 2,  /* "11" - bit 2 is lowest zero */
-    0,  /* "12" - bit 0 is lowest zero */ 1,  /* "13" - bit 1 is lowest zero */
-    0,  /* "14" - bit 0 is lowest zero */ 4,  /* "15" - bit 4 is lowest zero */
-    0,  /* "16" - bit 0 is lowest zero */ 1,  /* "17" - bit 1 is lowest zero */
-    0,  /* "18" - bit 0 is lowest zero */ 2,  /* "19" - bit 2 is lowest zero */
-    0,  /* "20" - bit 0 is lowest zero */ 1,  /* "21" - bit 1 is lowest zero */
-    0,  /* "22" - bit 0 is lowest zero */ 3,  /* "23" - bit 3 is lowest zero */
-    0,  /* "24" - bit 0 is lowest zero */ 1,  /* "25" - bit 1 is lowest zero */
-    0,  /* "26" - bit 0 is lowest zero */ 2,  /* "27" - bit 2 is lowest zero */
-    0,  /* "28" - bit 0 is lowest zero */ 1,  /* "29" - bit 1 is lowest zero */
-    0,  /* "30" - bit 0 is lowest zero */ 5,  /* "31" - bit 5 is lowest zero */
-    0,  /* "32" - bit 0 is lowest zero */ 1,  /* "33" - bit 1 is lowest zero */
-    0,  /* "34" - bit 0 is lowest zero */ 2,  /* "35" - bit 2 is lowest zero */
-    0,  /* "36" - bit 0 is lowest zero */ 1,  /* "37" - bit 1 is lowest zero */
-    0,  /* "38" - bit 0 is lowest zero */ 3,  /* "39" - bit 3 is lowest zero */
-    0,  /* "40" - bit 0 is lowest zero */ 1,  /* "41" - bit 1 is lowest zero */
-    0,  /* "42" - bit 0 is lowest zero */ 2,  /* "43" - bit 2 is lowest zero */
-    0,  /* "44" - bit 0 is lowest zero */ 1,  /* "45" - bit 1 is lowest zero */
-    0,  /* "46" - bit 0 is lowest zero */ 4,  /* "47" - bit 4 is lowest zero */
-    0,  /* "48" - bit 0 is lowest zero */ 1,  /* "49" - bit 1 is lowest zero */
-    0,  /* "50" - bit 0 is lowest zero */ 2,  /* "51" - bit 2 is lowest zero */
-    0,  /* "52" - bit 0 is lowest zero */ 1,  /* "53" - bit 1 is lowest zero */
-    0,  /* "54" - bit 0 is lowest zero */ 3,  /* "55" - bit 3 is lowest zero */
-    0,  /* "56" - bit 0 is lowest zero */ 1,  /* "57" - bit 1 is lowest zero */
-    0,  /* "58" - bit 0 is lowest zero */ 2,  /* "59" - bit 2 is lowest zero */
-    0,  /* "60" - bit 0 is lowest zero */ 1,  /* "61" - bit 1 is lowest zero */
-    0,  /* "62" - bit 0 is lowest zero */ 6,  /* "63" - bit 6 is lowest zero */
-    0,  /* "64" - bit 0 is lowest zero */ 1,  /* "65" - bit 1 is lowest zero */
-    0,  /* "66" - bit 0 is lowest zero */ 2,  /* "67" - bit 2 is lowest zero */
-    0,  /* "68" - bit 0 is lowest zero */ 1,  /* "69" - bit 1 is lowest zero */
-    0,  /* "70" - bit 0 is lowest zero */ 3,  /* "71" - bit 3 is lowest zero */
-    0,  /* "72" - bit 0 is lowest zero */ 1,  /* "73" - bit 1 is lowest zero */
-    0,  /* "74" - bit 0 is lowest zero */ 2,  /* "75" - bit 2 is lowest zero */
-    0,  /* "76" - bit 0 is lowest zero */ 1,  /* "77" - bit 1 is lowest zero */
-    0,  /* "78" - bit 0 is lowest zero */ 4,  /* "79" - bit 4 is lowest zero */
-    0,  /* "80" - bit 0 is lowest zero */ 1,  /* "81" - bit 1 is lowest zero */
-    0,  /* "82" - bit 0 is lowest zero */ 2,  /* "83" - bit 2 is lowest zero */
-    0,  /* "84" - bit 0 is lowest zero */ 1,  /* "85" - bit 1 is lowest zero */
-    0,  /* "86" - bit 0 is lowest zero */ 3,  /* "87" - bit 3 is lowest zero */
-    0,  /* "88" - bit 0 is lowest zero */ 1,  /* "89" - bit 1 is lowest zero */
-    0,  /* "90" - bit 0 is lowest zero */ 2,  /* "91" - bit 2 is lowest zero */
-    0,  /* "92" - bit 0 is lowest zero */ 1,  /* "93" - bit 1 is lowest zero */
-    0,  /* "94" - bit 0 is lowest zero */ 5,  /* "95" - bit 5 is lowest zero */
-    0,  /* "96" - bit 0 is lowest zero */ 1,  /* "97" - bit 1 is lowest zero */
-    0,  /* "98" - bit 0 is lowest zero */ 2,  /* "99" - bit 2 is lowest zero */
-    0,  /* "100" - bit 0 is lowest zero */ 1,  /* "101" - bit 1 is lowest zero */
-    0,  /* "102" - bit 0 is lowest zero */ 3,  /* "103" - bit 3 is lowest zero */
-    0,  /* "104" - bit 0 is lowest zero */ 1,  /* "105" - bit 1 is lowest zero */
-    0,  /* "106" - bit 0 is lowest zero */ 2,  /* "107" - bit 2 is lowest zero */
-    0,  /* "108" - bit 0 is lowest zero */ 1,  /* "109" - bit 1 is lowest zero */
-    0,  /* "110" - bit 0 is lowest zero */ 4,  /* "111" - bit 4 is lowest zero */
-    0,  /* "112" - bit 0 is lowest zero */ 1,  /* "113" - bit 1 is lowest zero */
-    0,  /* "114" - bit 0 is lowest zero */ 2,  /* "115" - bit 2 is lowest zero */
-    0,  /* "116" - bit 0 is lowest zero */ 1,  /* "117" - bit 1 is lowest zero */
-    0,  /* "118" - bit 0 is lowest zero */ 3,  /* "119" - bit 3 is lowest zero */
-    0,  /* "120" - bit 0 is lowest zero */ 1,  /* "121" - bit 1 is lowest zero */
-    0,  /* "122" - bit 0 is lowest zero */ 2,  /* "123" - bit 2 is lowest zero */
-    0,  /* "124" - bit 0 is lowest zero */ 1,  /* "125" - bit 1 is lowest zero */
-    0,  /* "126" - bit 0 is lowest zero */ 7,  /* "127" - bit 7 is lowest zero */
-    0,  /* "128" - bit 0 is lowest zero */ 1,  /* "129" - bit 1 is lowest zero */
-    0,  /* "130" - bit 0 is lowest zero */ 2,  /* "131" - bit 2 is lowest zero */
-    0,  /* "132" - bit 0 is lowest zero */ 1,  /* "133" - bit 1 is lowest zero */
-    0,  /* "134" - bit 0 is lowest zero */ 3,  /* "135" - bit 3 is lowest zero */
-    0,  /* "136" - bit 0 is lowest zero */ 1,  /* "137" - bit 1 is lowest zero */
-    0,  /* "138" - bit 0 is lowest zero */ 2,  /* "139" - bit 2 is lowest zero */
-    0,  /* "140" - bit 0 is lowest zero */ 1,  /* "141" - bit 1 is lowest zero */
-    0,  /* "142" - bit 0 is lowest zero */ 4,  /* "143" - bit 4 is lowest zero */
-    0,  /* "144" - bit 0 is lowest zero */ 1,  /* "145" - bit 1 is lowest zero */
-    0,  /* "146" - bit 0 is lowest zero */ 2,  /* "147" - bit 2 is lowest zero */
-    0,  /* "148" - bit 0 is lowest zero */ 1,  /* "149" - bit 1 is lowest zero */
-    0,  /* "150" - bit 0 is lowest zero */ 3,  /* "151" - bit 3 is lowest zero */
-    0,  /* "152" - bit 0 is lowest zero */ 1,  /* "153" - bit 1 is lowest zero */
-    0,  /* "154" - bit 0 is lowest zero */ 2,  /* "155" - bit 2 is lowest zero */
-    0,  /* "156" - bit 0 is lowest zero */ 1,  /* "157" - bit 1 is lowest zero */
-    0,  /* "158" - bit 0 is lowest zero */ 5,  /* "159" - bit 5 is lowest zero */
-    0,  /* "160" - bit 0 is lowest zero */ 1,  /* "161" - bit 1 is lowest zero */
-    0,  /* "162" - bit 0 is lowest zero */ 2,  /* "163" - bit 2 is lowest zero */
-    0,  /* "164" - bit 0 is lowest zero */ 1,  /* "165" - bit 1 is lowest zero */
-    0,  /* "166" - bit 0 is lowest zero */ 3,  /* "167" - bit 3 is lowest zero */
-    0,  /* "168" - bit 0 is lowest zero */ 1,  /* "169" - bit 1 is lowest zero */
-    0,  /* "170" - bit 0 is lowest zero */ 2,  /* "171" - bit 2 is lowest zero */
-    0,  /* "172" - bit 0 is lowest zero */ 1,  /* "173" - bit 1 is lowest zero */
-    0,  /* "174" - bit 0 is lowest zero */ 4,  /* "175" - bit 4 is lowest zero */
-    0,  /* "176" - bit 0 is lowest zero */ 1,  /* "177" - bit 1 is lowest zero */
-    0,  /* "178" - bit 0 is lowest zero */ 2,  /* "179" - bit 2 is lowest zero */
-    0,  /* "180" - bit 0 is lowest zero */ 1,  /* "181" - bit 1 is lowest zero */
-    0,  /* "182" - bit 0 is lowest zero */ 3,  /* "183" - bit 3 is lowest zero */
-    0,  /* "184" - bit 0 is lowest zero */ 1,  /* "185" - bit 1 is lowest zero */
-    0,  /* "186" - bit 0 is lowest zero */ 2,  /* "187" - bit 2 is lowest zero */
-    0,  /* "188" - bit 0 is lowest zero */ 1,  /* "189" - bit 1 is lowest zero */
-    0,  /* "190" - bit 0 is lowest zero */ 6,  /* "191" - bit 6 is lowest zero */
-    0,  /* "192" - bit 0 is lowest zero */ 1,  /* "193" - bit 1 is lowest zero */
-    0,  /* "194" - bit 0 is lowest zero */ 2,  /* "195" - bit 2 is lowest zero */
-    0,  /* "196" - bit 0 is lowest zero */ 1,  /* "197" - bit 1 is lowest zero */
-    0,  /* "198" - bit 0 is lowest zero */ 3,  /* "199" - bit 3 is lowest zero */
-    0,  /* "200" - bit 0 is lowest zero */ 1,  /* "201" - bit 1 is lowest zero */
-    0,  /* "202" - bit 0 is lowest zero */ 2,  /* "203" - bit 2 is lowest zero */
-    0,  /* "204" - bit 0 is lowest zero */ 1,  /* "205" - bit 1 is lowest zero */
-    0,  /* "206" - bit 0 is lowest zero */ 4,  /* "207" - bit 4 is lowest zero */
-    0,  /* "208" - bit 0 is lowest zero */ 1,  /* "209" - bit 1 is lowest zero */
-    0,  /* "210" - bit 0 is lowest zero */ 2,  /* "211" - bit 2 is lowest zero */
-    0,  /* "212" - bit 0 is lowest zero */ 1,  /* "213" - bit 1 is lowest zero */
-    0,  /* "214" - bit 0 is lowest zero */ 3,  /* "215" - bit 3 is lowest zero */
-    0,  /* "216" - bit 0 is lowest zero */ 1,  /* "217" - bit 1 is lowest zero */
-    0,  /* "218" - bit 0 is lowest zero */ 2,  /* "219" - bit 2 is lowest zero */
-    0,  /* "220" - bit 0 is lowest zero */ 1,  /* "221" - bit 1 is lowest zero */
-    0,  /* "222" - bit 0 is lowest zero */ 5,  /* "223" - bit 5 is lowest zero */
-    0,  /* "224" - bit 0 is lowest zero */ 1,  /* "225" - bit 1 is lowest zero */
-    0,  /* "226" - bit 0 is lowest zero */ 2,  /* "227" - bit 2 is lowest zero */
-    0,  /* "228" - bit 0 is lowest zero */ 1,  /* "229" - bit 1 is lowest zero */
-    0,  /* "230" - bit 0 is lowest zero */ 3,  /* "231" - bit 3 is lowest zero */
-    0,  /* "232" - bit 0 is lowest zero */ 1,  /* "233" - bit 1 is lowest zero */
-    0,  /* "234" - bit 0 is lowest zero */ 2,  /* "235" - bit 2 is lowest zero */
-    0,  /* "236" - bit 0 is lowest zero */ 1,  /* "237" - bit 1 is lowest zero */
-    0,  /* "238" - bit 0 is lowest zero */ 4,  /* "239" - bit 4 is lowest zero */
-    0,  /* "240" - bit 0 is lowest zero */ 1,  /* "241" - bit 1 is lowest zero */
-    0,  /* "242" - bit 0 is lowest zero */ 2,  /* "243" - bit 2 is lowest zero */
-    0,  /* "244" - bit 0 is lowest zero */ 1,  /* "245" - bit 1 is lowest zero */
-    0,  /* "246" - bit 0 is lowest zero */ 3,  /* "247" - bit 3 is lowest zero */
-    0,  /* "248" - bit 0 is lowest zero */ 1,  /* "249" - bit 1 is lowest zero */
-    0,  /* "250" - bit 0 is lowest zero */ 2,  /* "251" - bit 2 is lowest zero */
-    0,  /* "252" - bit 0 is lowest zero */ 1,  /* "253" - bit 1 is lowest zero */
-    0,  /* "254" - bit 0 is lowest zero */ 8   /* "255" - bit 8 is lowest zero */
-};
-
-/* Table of "number of 1 bits" for each byte value */
-/*  (This will need to be changed/expanded if another base type is used) */
-static const int8 bv_num_ones[256]={
-    0,  /* "0" - n bits are 1's */ 1,  /* "1" - n bits are 1's */
-    1,  /* "2" - n bits are 1's */ 2,  /* "3" - n bits are 1's */
-    1,  /* "4" - n bits are 1's */ 2,  /* "5" - n bits are 1's */
-    2,  /* "6" - n bits are 1's */ 3,  /* "7" - n bits are 1's */
-    1,  /* "8" - n bits are 1's */ 2,  /* "9" - n bits are 1's */
-    2,  /* "10" - n bits are 1's */ 3,  /* "11" - n bits are 1's */
-    2,  /* "12" - n bits are 1's */ 3,  /* "13" - n bits are 1's */
-    3,  /* "14" - n bits are 1's */ 4,  /* "15" - n bits are 1's */
-    1,  /* "16" - n bits are 1's */ 2,  /* "17" - n bits are 1's */
-    2,  /* "18" - n bits are 1's */ 3,  /* "19" - n bits are 1's */
-    2,  /* "20" - n bits are 1's */ 3,  /* "21" - n bits are 1's */
-    3,  /* "22" - n bits are 1's */ 4,  /* "23" - n bits are 1's */
-    2,  /* "24" - n bits are 1's */ 3,  /* "25" - n bits are 1's */
-    3,  /* "26" - n bits are 1's */ 4,  /* "27" - n bits are 1's */
-    3,  /* "28" - n bits are 1's */ 3,  /* "29" - n bits are 1's */
-    4,  /* "30" - n bits are 1's */ 5,  /* "31" - n bits are 1's */
-    1,  /* "32" - n bits are 1's */ 2,  /* "33" - n bits are 1's */
-    2,  /* "34" - n bits are 1's */ 3,  /* "35" - n bits are 1's */
-    2,  /* "36" - n bits are 1's */ 3,  /* "37" - n bits are 1's */
-    3,  /* "38" - n bits are 1's */ 4,  /* "39" - n bits are 1's */
-    2,  /* "40" - n bits are 1's */ 3,  /* "41" - n bits are 1's */
-    3,  /* "42" - n bits are 1's */ 4,  /* "43" - n bits are 1's */
-    3,  /* "44" - n bits are 1's */ 4,  /* "45" - n bits are 1's */
-    4,  /* "46" - n bits are 1's */ 5,  /* "47" - n bits are 1's */
-    2,  /* "48" - n bits are 1's */ 3,  /* "49" - n bits are 1's */
-    3,  /* "50" - n bits are 1's */ 4,  /* "51" - n bits are 1's */
-    3,  /* "52" - n bits are 1's */ 4,  /* "53" - n bits are 1's */
-    4,  /* "54" - n bits are 1's */ 5,  /* "55" - n bits are 1's */
-    3,  /* "56" - n bits are 1's */ 4,  /* "57" - n bits are 1's */
-    4,  /* "58" - n bits are 1's */ 5,  /* "59" - n bits are 1's */
-    4,  /* "60" - n bits are 1's */ 5,  /* "61" - n bits are 1's */
-    5,  /* "62" - n bits are 1's */ 6,  /* "63" - n bits are 1's */
-    1,  /* "64" - n bits are 1's */ 2,  /* "65" - n bits are 1's */
-    2,  /* "66" - n bits are 1's */ 3,  /* "67" - n bits are 1's */
-    2,  /* "68" - n bits are 1's */ 3,  /* "69" - n bits are 1's */
-    3,  /* "70" - n bits are 1's */ 4,  /* "71" - n bits are 1's */
-    2,  /* "72" - n bits are 1's */ 3,  /* "73" - n bits are 1's */
-    3,  /* "74" - n bits are 1's */ 4,  /* "75" - n bits are 1's */
-    3,  /* "76" - n bits are 1's */ 4,  /* "77" - n bits are 1's */
-    4,  /* "78" - n bits are 1's */ 5,  /* "79" - n bits are 1's */
-    2,  /* "80" - n bits are 1's */ 3,  /* "81" - n bits are 1's */
-    3,  /* "82" - n bits are 1's */ 4,  /* "83" - n bits are 1's */
-    3,  /* "84" - n bits are 1's */ 4,  /* "85" - n bits are 1's */
-    4,  /* "86" - n bits are 1's */ 5,  /* "87" - n bits are 1's */
-    3,  /* "88" - n bits are 1's */ 4,  /* "89" - n bits are 1's */
-    4,  /* "90" - n bits are 1's */ 5,  /* "91" - n bits are 1's */
-    4,  /* "92" - n bits are 1's */ 5,  /* "93" - n bits are 1's */
-    5,  /* "94" - n bits are 1's */ 6,  /* "95" - n bits are 1's */
-    2,  /* "96" - n bits are 1's */ 3,  /* "97" - n bits are 1's */
-    3,  /* "98" - n bits are 1's */ 4,  /* "99" - n bits are 1's */
-    3,  /* "100" - n bits are 1's */ 4,  /* "101" - n bits are 1's */
-    4,  /* "102" - n bits are 1's */ 5,  /* "103" - n bits are 1's */
-    3,  /* "104" - n bits are 1's */ 4,  /* "105" - n bits are 1's */
-    4,  /* "106" - n bits are 1's */ 5,  /* "107" - n bits are 1's */
-    3,  /* "108" - n bits are 1's */ 4,  /* "109" - n bits are 1's */
-    4,  /* "110" - n bits are 1's */ 5,  /* "111" - n bits are 1's */
-    3,  /* "112" - n bits are 1's */ 4,  /* "113" - n bits are 1's */
-    4,  /* "114" - n bits are 1's */ 5,  /* "115" - n bits are 1's */
-    4,  /* "116" - n bits are 1's */ 5,  /* "117" - n bits are 1's */
-    5,  /* "118" - n bits are 1's */ 6,  /* "119" - n bits are 1's */
-    4,  /* "120" - n bits are 1's */ 5,  /* "121" - n bits are 1's */
-    5,  /* "122" - n bits are 1's */ 6,  /* "123" - n bits are 1's */
-    5,  /* "124" - n bits are 1's */ 6,  /* "125" - n bits are 1's */
-    6,  /* "126" - n bits are 1's */ 7,  /* "127" - n bits are 1's */
-    1,  /* "128" - n bits are 1's */ 2,  /* "129" - n bits are 1's */
-    2,  /* "130" - n bits are 1's */ 3,  /* "131" - n bits are 1's */
-    2,  /* "132" - n bits are 1's */ 3,  /* "133" - n bits are 1's */
-    3,  /* "134" - n bits are 1's */ 4,  /* "135" - n bits are 1's */
-    2,  /* "136" - n bits are 1's */ 3,  /* "137" - n bits are 1's */
-    3,  /* "138" - n bits are 1's */ 4,  /* "139" - n bits are 1's */
-    3,  /* "140" - n bits are 1's */ 4,  /* "141" - n bits are 1's */
-    4,  /* "142" - n bits are 1's */ 5,  /* "143" - n bits are 1's */
-    2,  /* "144" - n bits are 1's */ 3,  /* "145" - n bits are 1's */
-    3,  /* "146" - n bits are 1's */ 4,  /* "147" - n bits are 1's */
-    3,  /* "148" - n bits are 1's */ 4,  /* "149" - n bits are 1's */
-    4,  /* "150" - n bits are 1's */ 5,  /* "151" - n bits are 1's */
-    3,  /* "152" - n bits are 1's */ 4,  /* "153" - n bits are 1's */
-    4,  /* "154" - n bits are 1's */ 5,  /* "155" - n bits are 1's */
-    4,  /* "156" - n bits are 1's */ 5,  /* "157" - n bits are 1's */
-    5,  /* "158" - n bits are 1's */ 6,  /* "159" - n bits are 1's */
-    2,  /* "160" - n bits are 1's */ 3,  /* "161" - n bits are 1's */
-    3,  /* "162" - n bits are 1's */ 4,  /* "163" - n bits are 1's */
-    3,  /* "164" - n bits are 1's */ 4,  /* "165" - n bits are 1's */
-    4,  /* "166" - n bits are 1's */ 5,  /* "167" - n bits are 1's */
-    3,  /* "168" - n bits are 1's */ 4,  /* "169" - n bits are 1's */
-    4,  /* "170" - n bits are 1's */ 5,  /* "171" - n bits are 1's */
-    4,  /* "172" - n bits are 1's */ 5,  /* "173" - n bits are 1's */
-    5,  /* "174" - n bits are 1's */ 6,  /* "175" - n bits are 1's */
-    3,  /* "176" - n bits are 1's */ 4,  /* "177" - n bits are 1's */
-    4,  /* "178" - n bits are 1's */ 5,  /* "179" - n bits are 1's */
-    4,  /* "180" - n bits are 1's */ 5,  /* "181" - n bits are 1's */
-    5,  /* "182" - n bits are 1's */ 6,  /* "183" - n bits are 1's */
-    4,  /* "184" - n bits are 1's */ 5,  /* "185" - n bits are 1's */
-    5,  /* "186" - n bits are 1's */ 6,  /* "187" - n bits are 1's */
-    5,  /* "188" - n bits are 1's */ 6,  /* "189" - n bits are 1's */
-    6,  /* "190" - n bits are 1's */ 7,  /* "191" - n bits are 1's */
-    2,  /* "192" - n bits are 1's */ 3,  /* "193" - n bits are 1's */
-    3,  /* "194" - n bits are 1's */ 4,  /* "195" - n bits are 1's */
-    3,  /* "196" - n bits are 1's */ 4,  /* "197" - n bits are 1's */
-    4,  /* "198" - n bits are 1's */ 5,  /* "199" - n bits are 1's */
-    3,  /* "200" - n bits are 1's */ 4,  /* "201" - n bits are 1's */
-    4,  /* "202" - n bits are 1's */ 5,  /* "203" - n bits are 1's */
-    4,  /* "204" - n bits are 1's */ 5,  /* "205" - n bits are 1's */
-    5,  /* "206" - n bits are 1's */ 6,  /* "207" - n bits are 1's */
-    3,  /* "208" - n bits are 1's */ 4,  /* "209" - n bits are 1's */
-    4,  /* "210" - n bits are 1's */ 5,  /* "211" - n bits are 1's */
-    4,  /* "212" - n bits are 1's */ 5,  /* "213" - n bits are 1's */
-    5,  /* "214" - n bits are 1's */ 6,  /* "215" - n bits are 1's */
-    4,  /* "216" - n bits are 1's */ 5,  /* "217" - n bits are 1's */
-    5,  /* "218" - n bits are 1's */ 6,  /* "219" - n bits are 1's */
-    5,  /* "220" - n bits are 1's */ 6,  /* "221" - n bits are 1's */
-    6,  /* "222" - n bits are 1's */ 7,  /* "223" - n bits are 1's */
-    3,  /* "224" - n bits are 1's */ 4,  /* "225" - n bits are 1's */
-    4,  /* "226" - n bits are 1's */ 5,  /* "227" - n bits are 1's */
-    4,  /* "228" - n bits are 1's */ 5,  /* "229" - n bits are 1's */
-    5,  /* "230" - n bits are 1's */ 6,  /* "231" - n bits are 1's */
-    4,  /* "232" - n bits are 1's */ 5,  /* "233" - n bits are 1's */
-    5,  /* "234" - n bits are 1's */ 6,  /* "235" - n bits are 1's */
-    5,  /* "236" - n bits are 1's */ 6,  /* "237" - n bits are 1's */
-    6,  /* "238" - n bits are 1's */ 7,  /* "239" - n bits are 1's */
-    4,  /* "240" - n bits are 1's */ 5,  /* "241" - n bits are 1's */
-    5,  /* "242" - n bits are 1's */ 6,  /* "243" - n bits are 1's */
-    5,  /* "244" - n bits are 1's */ 6,  /* "245" - n bits are 1's */
-    6,  /* "246" - n bits are 1's */ 7,  /* "247" - n bits are 1's */
-    5,  /* "248" - n bits are 1's */ 6,  /* "249" - n bits are 1's */
-    6,  /* "250" - n bits are 1's */ 7,  /* "251" - n bits are 1's */
-    6,  /* "252" - n bits are 1's */ 7,  /* "253" - n bits are 1's */
-    7,  /* "254" - n bits are 1's */ 8   /* "255" - n bits are 1's */
-};
-
-/* Useful routines for generally private use */
-
-#endif /* BV_MASTER | BV_TESTER */
-#if defined c_plusplus || defined __cplusplus
-extern      "C"
-{
-#endif                          /* c_plusplus || __cplusplus */
-extern bv_ptr bv_new(int32 num_bits, uint32 flags);
-
-extern intn bv_delete(bv_ptr b);
-
-extern intn bv_set(bv_ptr b, int32 bit_num, bv_bool value);
-
-extern intn bv_get(bv_ptr b, int32 bit_num);
-
-extern intn bv_clear(bv_ptr b, bv_bool value);
-
-extern int32 bv_size(bv_ptr b);
-
-extern uint32 bv_flags(bv_ptr b);
-
-extern int32 bv_find(bv_ptr b, int32 last_find, bv_bool value);
-
-#if defined c_plusplus || defined __cplusplus
-}
-#endif                          /* c_plusplus || __cplusplus */
-
-#endif /* __BITVECT_H */
-
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/cdeflate.h b/Utilities/CAI/cai_dll/inc/inc_hdf/cdeflate.h
deleted file mode 100755
index 852c955258..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/cdeflate.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
- /* $Id$ */
-
- /*-----------------------------------------------------------------------------
- * File:    cdeflate.h
- * Purpose: Header file for gzip 'deflate' encoding information.
- * Dependencies: should only be included from hcompi.h
- * Invokes: none
- * Contents: Structures & definitions for gzip 'deflate' encoding.
- * Structure definitions:
- * Constant definitions:
- *---------------------------------------------------------------------------*/
-
-/* avoid re-inclusion */
-#ifndef __CDEFLATE_H
-#define __CDEFLATE_H
-
-/* Get the gzip 'deflate' header */
-#define intf zintf
-#include "zlib.h"
-#undef zintf
-
-#if defined c_plusplus || defined __cplusplus
-extern      "C"
-{
-#endif                          /* c_plusplus || __cplusplus */
-
-/*
-   ** from cdeflate.c
- */
-
-    extern int32 HCPcdeflate_stread
-                (accrec_t * rec);
-
-    extern int32 HCPcdeflate_stwrite
-                (accrec_t * rec);
-
-    extern int32 HCPcdeflate_seek
-                (accrec_t * access_rec, int32 offset, int origin);
-
-    extern int32 HCPcdeflate_inquire
-                (accrec_t * access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref,
-               int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess,
-                 int16 *pspecial);
-
-    extern int32 HCPcdeflate_read
-                (accrec_t * access_rec, int32 length, void * data);
-
-    extern int32 HCPcdeflate_write
-                (accrec_t * access_rec, int32 length, const void * data);
-
-    extern intn HCPcdeflate_endaccess
-                (accrec_t * access_rec);
-
-#if defined c_plusplus || defined __cplusplus
-}
-#endif                          /* c_plusplus || __cplusplus */
-
-/* Define the [default] size of the buffer to interact with the file. */
-#define DEFLATE_BUF_SIZE    4096
-#define DEFLATE_TMP_BUF_SIZE        16384
-
-/* gzip [en|de]coding information */
-typedef struct
-{
-    intn        deflate_level;  /* how hard to try to compress this data */
-    int32       offset;         /* offset in the de-compressed array */
-    intn        acc_init;       /* is access mode initialized? */
-    int16       acc_mode;       /* access mode desired */
-    void *       io_buf;         /* buffer for I/O with the file */
-    z_stream    deflate_context;    /* pointer to the deflation context for each byte in the element */
-}
-comp_coder_deflate_info_t;
-
-#ifndef CDEFLATE_MASTER
-extern funclist_t cdeflate_funcs;   /* functions to perform gzip encoding */
-#else
-funclist_t  cdeflate_funcs =
-{                               /* functions to perform gzip encoding */
-    HCPcdeflate_stread,
-    HCPcdeflate_stwrite,
-    HCPcdeflate_seek,
-    HCPcdeflate_inquire,
-    HCPcdeflate_read,
-    HCPcdeflate_write,
-    HCPcdeflate_endaccess
-};
-#endif
-
-#endif /* __CDEFLATE_H */
-
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/cnbit.h b/Utilities/CAI/cai_dll/inc/inc_hdf/cnbit.h
deleted file mode 100755
index 0e7118d0de..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/cnbit.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
- /* $Id$ */
-
- /*-----------------------------------------------------------------------------
- * File:    cnbit.h
- * Purpose: Header file for N-bit encoding information.
- * Dependencies: should only be included from hcompi.h
- * Invokes: none
- * Contents: Structures & definitions for N-bit encoding.
- * Structure definitions:
- * Constant definitions:
- *---------------------------------------------------------------------------*/
-
-/* avoid re-inclusion */
-#ifndef __CNBIT_H
-#define __CNBIT_H
-
-#if defined c_plusplus || defined __cplusplus
-extern      "C"
-{
-#endif                          /* c_plusplus || __cplusplus */
-
-/*
-   ** from cnbit.c
- */
-
-    extern int32 HCPcnbit_stread
-                (accrec_t * rec);
-
-    extern int32 HCPcnbit_stwrite
-                (accrec_t * rec);
-
-    extern int32 HCPcnbit_seek
-                (accrec_t * access_rec, int32 offset, int origin);
-
-    extern int32 HCPcnbit_inquire
-                (accrec_t * access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref,
-               int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess,
-                 int16 *pspecial);
-
-    extern int32 HCPcnbit_read
-                (accrec_t * access_rec, int32 length, void * data);
-
-    extern int32 HCPcnbit_write
-                (accrec_t * access_rec, int32 length, const void * data);
-
-    extern intn HCPcnbit_endaccess
-                (accrec_t * access_rec);
-
-#if defined c_plusplus || defined __cplusplus
-}
-#endif                          /* c_plusplus || __cplusplus */
-
-/* size of the N-bit buffer */
-#define NBIT_BUF_SIZE   (MAX_NT_SIZE*64)
-/* size of the N-bit mask buffer (same as buffer size for now) */
-#define NBIT_MASK_SIZE  (MAX_NT_SIZE)
-
-typedef struct
-{                               /* structure to hold bit vector info */
-    intn        offset,         /* offset of the bit information */
-                length;         /* number of bits in the information */
-    uint8       mask;           /* mask for this bit vector */
-}
-nbit_mask_info_t;
-
-/* N-bit [en|de]coding information */
-typedef struct
-  {
-      int32       nt;           /* number type of data we are encoding */
-      intn        nt_size;      /* size of the number-type in the file */
-      intn        fill_one;     /* whether to fill with 1's or not (0's) */
-      intn        sign_ext;     /* whether to sign extend or not */
-      uint8       buffer[NBIT_BUF_SIZE];    /* buffer for expanding n-bit data in */
-      intn        buf_pos;      /* current offset in the expansion buffer */
-      intn        mask_off,     /* offset of the bit to start masking with */
-                  mask_len;     /* number of bits to mask */
-      int32       offset;       /* offset in the file in terms of bytes */
-      uint8       mask_buf[NBIT_MASK_SIZE];     /* buffer to hold the bitmask */
-      nbit_mask_info_t mask_info[NBIT_MASK_SIZE];   /* information about the mask */
-      intn        nt_pos;       /* current byte to read or write */
-  }
-comp_coder_nbit_info_t;
-
-#ifndef CNBIT_MASTER
-extern funclist_t cnbit_funcs;  /* functions to perform N-bit encoding */
-#else
-funclist_t  cnbit_funcs =
-{                               /* functions to perform N-bit encoding */
-    HCPcnbit_stread,
-    HCPcnbit_stwrite,
-    HCPcnbit_seek,
-    HCPcnbit_inquire,
-    HCPcnbit_read,
-    HCPcnbit_write,
-    HCPcnbit_endaccess
-};
-#endif
-
-#endif /* __CNBIT_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/crle.h b/Utilities/CAI/cai_dll/inc/inc_hdf/crle.h
deleted file mode 100755
index 9bb79ccf4e..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/crle.h
+++ /dev/null
@@ -1,113 +0,0 @@
-
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*-----------------------------------------------------------------------------
- * File:    crle.h
- * Purpose: Header file for run-length encoding information.
- * Dependencies: should only be included from hcompi.h
- * Invokes: none
- * Contents: Structures & definitions for run-length encoding.  This header
- *              should only be included in hcomp.c and crle.c.
- * Structure definitions:
- * Constant definitions:
- *---------------------------------------------------------------------------*/
-
-/* avoid re-inclusion */
-#ifndef __CRLE_H
-#define __CRLE_H
-
-#if defined c_plusplus || defined __cplusplus
-extern      "C"
-{
-#endif                          /* c_plusplus || __cplusplus */
-
-/*
-   ** from crle.c
- */
-
-    extern int32 HCPcrle_stread
-                (accrec_t * rec);
-
-    extern int32 HCPcrle_stwrite
-                (accrec_t * rec);
-
-    extern int32 HCPcrle_seek
-                (accrec_t * access_rec, int32 offset, int origin);
-
-    extern int32 HCPcrle_inquire
-                (accrec_t * access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref,
-               int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess,
-                 int16 *pspecial);
-
-    extern int32 HCPcrle_read
-                (accrec_t * access_rec, int32 length, void * data);
-
-    extern int32 HCPcrle_write
-                (accrec_t * access_rec, int32 length, const void * data);
-
-    extern intn HCPcrle_endaccess
-                (accrec_t * access_rec);
-
-#if defined c_plusplus || defined __cplusplus
-}
-#endif                          /* c_plusplus || __cplusplus */
-
-/* size of the RLE buffer */
-#define RLE_BUF_SIZE    128
-/* NIL code for run bytes */
-#define RLE_NIL         (-1)
-/* minimum length of run */
-#define RLE_MIN_RUN     3
-/* maximum length of run */
-#define RLE_MAX_RUN     (RLE_BUF_SIZE+RLE_MIN_RUN-1)
-/* minimum length of mix */
-#define RLE_MIN_MIX     1
-
-/* RLE [en|de]coding information */
-typedef struct
-{
-    int32       offset;         /* offset in the file */
-    uint8       buffer[RLE_BUF_SIZE];   /* buffer for storing RLE bytes */
-    intn        buf_length;     /* number of bytes in buffer */
-    intn        buf_pos;        /* offset into the buffer */
-    uintn       last_byte,      /* the last byte stored in the buffer */
-                second_byte;    /* the second to last byte stored in the buffer */
-    enum
-      {
-          RLE_INIT,             /* initial state, need to read a byte to determine
-                                   next state */
-          RLE_RUN,              /* buffer up to the current position is a run */
-          RLE_MIX
-      }                         /* buffer up to the current position is a mix */
-    rle_state;                  /* state of the buffer storage */
-}
-comp_coder_rle_info_t;
-
-#ifndef CRLE_MASTER
-extern funclist_t crle_funcs;   /* functions to perform run-length encoding */
-#else
-funclist_t  crle_funcs =
-{                               /* functions to perform run-length encoding */
-    HCPcrle_stread,
-    HCPcrle_stwrite,
-    HCPcrle_seek,
-    HCPcrle_inquire,
-    HCPcrle_read,
-    HCPcrle_write,
-    HCPcrle_endaccess
-};
-#endif
-
-#endif /* __CRLE_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/cskphuff.h b/Utilities/CAI/cai_dll/inc/inc_hdf/cskphuff.h
deleted file mode 100755
index 06b6513473..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/cskphuff.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
- /* $Id$ */
-
- /*-----------------------------------------------------------------------------
- * File:    cskphuff.h
- * Purpose: Header file for skipping huffman encoding information.
- * Dependencies: should only be included from hcompi.h
- * Invokes: none
- * Contents: Structures & definitions for skipping huffman encoding.
- * Structure definitions:
- * Constant definitions:
- *---------------------------------------------------------------------------*/
-
-/* avoid re-inclusion */
-#ifndef __CSKPHUFF_H
-#define __CSKPHUFF_H
-
-#if defined c_plusplus || defined __cplusplus
-extern      "C"
-{
-#endif                          /* c_plusplus || __cplusplus */
-
-/*
-   ** from cskphuff.c
- */
-
-    extern int32 HCPcskphuff_stread
-                (accrec_t * rec);
-
-    extern int32 HCPcskphuff_stwrite
-                (accrec_t * rec);
-
-    extern int32 HCPcskphuff_seek
-                (accrec_t * access_rec, int32 offset, int origin);
-
-    extern int32 HCPcskphuff_inquire
-                (accrec_t * access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref,
-               int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess,
-                 int16 *pspecial);
-
-    extern int32 HCPcskphuff_read
-                (accrec_t * access_rec, int32 length, void * data);
-
-    extern int32 HCPcskphuff_write
-                (accrec_t * access_rec, int32 length, const void * data);
-
-    extern intn HCPcskphuff_endaccess
-                (accrec_t * access_rec);
-
-#if defined c_plusplus || defined __cplusplus
-}
-#endif                          /* c_plusplus || __cplusplus */
-
-/* The maximum source character code: */
-#define SKPHUFF_MAX_CHAR     255
-
-/* One greater than the maximum source character code: */
-#define SUCCMAX     (SKPHUFF_MAX_CHAR+1)
-
-/* Twice the maximum source character code: */
-#define TWICEMAX    (2*SUCCMAX+1)
-
-/* The root node in the tree */
-#define ROOT        0
-
-/* Skipping huffman [en|de]coding information */
-typedef struct
-{
-    intn        skip_size;      /* number of bytes in each element */
-    uintn     **left,           /* define the left and right pointer arrays */
-              **right;
-    uint8     **up;             /* define the up pointer array */
-    intn        skip_pos;       /* current byte to read or write */
-    int32       offset;         /* offset in the de-compressed array */
-}
-comp_coder_skphuff_info_t;
-
-#ifndef CSKPHUFF_MASTER
-extern funclist_t cskphuff_funcs;   /* functions to perform skipping huffman encoding */
-#else
-funclist_t  cskphuff_funcs =
-{                               /* functions to perform skipping huffman encoding */
-    HCPcskphuff_stread,
-    HCPcskphuff_stwrite,
-    HCPcskphuff_seek,
-    HCPcskphuff_inquire,
-    HCPcskphuff_read,
-    HCPcskphuff_write,
-    HCPcskphuff_endaccess
-};
-#endif
-
-#endif /* __CSKPHUFF_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/df.h b/Utilities/CAI/cai_dll/inc/inc_hdf/df.h
deleted file mode 100755
index fc153ae882..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/df.h
+++ /dev/null
@@ -1,212 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*-----------------------------------------------------------------------------
- * File:    df.h
- * Purpose: header file for HDF routines
- * Invokes: dfi.h
- * Contents:
- *  Structure definitions: DFddh, DFdd, DFdesc, DFdle, DF, DFdi, DFdata
- *  Procedure type definitions
- *  Global variables
- *  Tag definitions
- *  Error return codes
- *  Logical constants
- * Remarks: This file is included with user programs
- *          Since it includes stdio.h etc., do not include these after df.h
- *---------------------------------------------------------------------------*/
-
-#ifndef DF_H    /* avoid re-inclusion */
-#define DF_H
-
-/* include DF (internal) header information */
-#include "hdf.h"
-
-/*-------------------------------------------------------------------------*/
-/*                      Type declarations                                   */
-
-typedef struct DFddh
-  {                             /*format of data descriptor headers in file */
-      int16       dds;          /* number of dds in header block */
-      int32       next;         /* offset of next header block */
-  }
-DFddh;
-
-typedef struct DFdd
-  {                             /* format of data descriptors as in file */
-      uint16      tag;          /* data tag */
-      uint16      ref;          /* data reference number */
-      int32       offset;       /* offset of data element in file */
-      int32       length;       /* number of bytes */
-  }
-DFdd;
-
-/* descriptor structure is same as dd structure.  ###Note: may be changed */
-typedef DFdd DFdesc;
-
-/* DLE is the internal structure which stores data descriptor information */
-/* It is a linked list of DDs */
-typedef struct DFdle
-  {                             /* Data List element */
-      struct DFdle *next;       /* link to next dle */
-      DFddh       ddh;          /* To store headers */
-      DFdd        dd[1];        /* dummy size */
-  }
-DFdle;
-
-/* DF is the internal structure associated with each DF file */
-/* It holds information associated with the file as a whole */
-/* ### Note: there are hooks for having multiple DF files open at a time */
-typedef struct DF
-  {
-      DFdle      *list;         /* Pointer to the DLE list */
-      DFdle      *last_dle;     /* last_dle and last_dd are used in searches */
-      /* to indicate element returned */
-      /* by previous call to DFfind */
-      DFdd       *up_dd;        /* DD of element being read/updated, */
-      /* used by DFstart */
-      uint16      last_tag;     /* Last tag searched for by DFfind */
-      uint16      last_ref;     /* Last reference number searched for */
-      intn        type;         /* 0= not in use, 1= normal, -1 = multiple */
-      /* this is a hook for when */
-      /* multiple files are open */
-      intn        access;       /* permitted access types: */
-      /* 0=none, 1=r, 2=w, 3=r/w */
-      intn        changed;      /* True if anything in DDs modified */
-      /* since last write */
-      intn        last_dd;      /* see last_dle */
-      intn        defdds;       /* default numer of DD's in each block */
-      intn        up_access;    /* access permissions to element being */
-      /* read/updated. Used by DFstart */
-      /* File handle is a file pointer or file descriptor depending on whether */
-      /* we use buffered or unbuffered I/O.  But, since this structure is a */
-      /* fake, it doesn't matter whether I/O is buffered or not. */
-      intn        file;         /* file descriptor */
-  }
-DF;
-
-typedef struct DFdata
-  {                             /* structure for returning status information */
-      int32       version;      /* version number of program */
-  }
-DFdata;
-
-/*--------------------------------------------------------------------------*/
-/*                          Procedure types                                 */
-
-#if defined c_plusplus || defined __cplusplus
-extern      "C"
-{
-#endif                          /* c_plusplus || __cplusplus */
-
-/* prototypes for dfstubs.c */
-    extern DF  *DFopen
-                (char *name, int acc_mode, int ndds);
-
-    extern int  DFclose
-                (DF * dfile);
-
-    extern int  DFdescriptors
-                (DF * dfile, DFdesc ptr[], int begin, int num);
-
-    extern int  DFnumber
-                (DF * dfile, uint16 tag);
-
-    extern int  DFsetfind
-                (DF * dfile, uint16 tag, uint16 ref);
-
-    extern int  DFfind
-                (DF * dfile, DFdesc * ptr);
-
-    extern int  DFaccess
-                (DF * dfile, uint16 tag, uint16 ref, char *acc_mode);
-
-    extern int  DFstart
-                (DF * dfile, uint16 tag, uint16 ref, char *acc_mode);
-
-    extern int32 DFread
-                (DF * dfile, char *ptr, int32 len);
-
-    extern int32 DFseek
-                (DF * dfile, int32 offset);
-
-    extern int32 DFwrite
-                (DF * dfile, char *ptr, int32 len);
-
-    extern int  DFupdate
-                (DF * dfile);
-
-    extern int  DFstat
-                (DF * dfile, DFdata * dfinfo);
-
-    extern int32 DFgetelement
-                (DF * dfile, uint16 tag, uint16 ref, char *ptr);
-
-    extern int32 DFputelement
-                (DF * dfile, uint16 tag, uint16 ref, char *ptr, int32 len);
-
-    extern int  DFdup
-                (DF * dfile, uint16 itag, uint16 iref, uint16 otag, uint16 oref);
-
-    extern int  DFdel
-                (DF * dfile, uint16 tag, uint16 ref);
-
-    extern uint16 DFnewref
-                (DF * dfile);
-
-    extern int  DFishdf
-                (char *filename);
-
-    extern int  DFerrno
-                (void);
-
-    extern int  DFIerr
-                (DF * dfile);
-
-    extern int  DFImemcopy
-                (char *from, char *to, int length);
-
-    extern void *DFIgetspace
-                (uint32 qty);
-
-    extern void *DFIfreespace
-                (void *ptr);
-
-    extern int  DFIc2fstr
-                (char *str, int len);
-
-    extern char *DFIf2cstring
-                (_fcd fdesc, intn len);
-
-/* prototypes for dfconv.c */
-    extern int  DFconvert
-                (uint8 *source, uint8 *dest, int ntype, int sourcetype, int desttype, int32 size);
-
-#if defined c_plusplus || defined __cplusplus
-}
-#endif                          /* c_plusplus || __cplusplus */
-
-/*--------------------------------------------------------------------------*/
-/*                          Global Variables                                */
-
-#ifndef DFMASTER
-extern
-#endif                          /*DFMASTER */
-int DFerror;            /* Error code for DF routines */
-
-#define DFSETERR(error) (DFerror=(DFerror?DFerror:error))
-
-#define DFTOFID(df) (int32)(df->list)
-
-#endif /* DF_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/dfan.h b/Utilities/CAI/cai_dll/inc/inc_hdf/dfan.h
deleted file mode 100755
index 8709a7490e..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/dfan.h
+++ /dev/null
@@ -1,65 +0,0 @@
-
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*------------------------------------------------------------------------------
- * File:    dfan.h
- * Purpose: header file for the Annotations set
- * Invokes: df.h
- * Contents:
- *  Structure definitions: DFANdirentry, DFANdirhead
- *  Constant definitions: DFAN_LABEL, DFAN_DESC
- * Remarks: none
- *----------------------------------------------------------------------------*/
-
-#ifndef DFAN_H  /* avoid re-inclusion */
-#define DFAN_H
-
-#include "hdf.h"
-
-#define DFAN_LABEL  0
-#define DFAN_DESC   1
-
-#define DFAN_LAB_BLKSIZE   64   /* default blksize to use for labels */
-#define DFAN_DESC_BLKSIZE 512   /* default blksize to use for descriptions */
-
-#define DFAN_DEFENTRIES 16  /* no of dir entries to add at a time */
-
-/*
- * This structure stores an entry in the label/desc directory
- * for a label/desc in the file, it gives the ref of the label/desc,
- * and the tag/ref of the data item to which the label/desc relates
- */
-typedef struct
-  {
-      uint16      annref;       /* ref of annotation */
-      uint16      datatag;      /* tag of data */
-      uint16      dataref;      /* ref of data */
-  }
-DFANdirentry;
-
-/*
- * This structure is a head node for the directory, which is organized as
- * as a linked list of arrays.  DFANdirentry is the structure of an
- * array element, while DFANdirhead is the list element
- */
-typedef struct DFANdirhead
-  {
-      struct DFANdirhead *next; /* list element */
-      int32       nentries;     /* Numer of entries */
-      DFANdirentry *entries;  /* actually an arbitrary size array */
-  }
-DFANdirhead;
-
-#endif /* DFAN_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/dfgr.h b/Utilities/CAI/cai_dll/inc/inc_hdf/dfgr.h
deleted file mode 100755
index 46dcf2ca08..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/dfgr.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*-----------------------------------------------------------------------------
- * File:    dfgr.h
- * Purpose: header file for the Raster Image set
- * Invokes: df.h
- * Contents:
- *  Structure definitions: DFGRdr, DFGRrig
- * Remarks: This is included with user programs which use general raster
- *---------------------------------------------------------------------------*/
-
-#ifndef DFGR_H  /* avoid re-inclusion */
-#define DFGR_H
-
-/* description record: used to describe image data, palette data etc. */
-typedef struct
-  {
-      intn        ncomponents;  /* number of components */
-      intn        interlace;    /* data ordering: chunky / planar etc */
-      int32       xdim;         /* X- dimension of data */
-      int32       ydim;         /* Y- dimensionsof data */
-      DFdi        nt;           /* number type of data */
-      DFdi        compr;        /* compression */
-      /* ### Note: compression is currently uniquely described with a tag.
-         No data is attached to this tag/ref.  But this capability is
-         provided for future expansion, when this tag/ref might point to
-         some data needed for decompression, such as the actual encodings */
-  }
-DFGRdr;
-
-/* structure to hold RIG info */
-typedef struct
-  {
-      char       *cf;           /* color format */
-      int32       xpos;         /* X position of image on screen */
-      int32       ypos;         /* Y position of image on screen */
-      float32     aspectratio;  /* ratio of pixel height to width */
-      float32     ccngamma;     /* gamma color correction parameter */
-      float32     ccnred[3];    /* red color correction parameter */
-      float32     ccngrren[3];  /* green color correction parameter */
-      float32     ccnblue[3];   /* blue color correction parameter */
-      float32     ccnwhite[3];  /* white color correction parameter */
-      DFdi        data[3];      /* image/lut/mattechannel */
-      DFGRdr      datadesc[3];  /* description of image/lut/mattechannel */
-  }
-DFGRrig;
-
-#if defined c_plusplus || defined __cplusplus
-extern      "C"
-{
-#endif                          /* c_plusplus || __cplusplus */
-
-/* Library-developer functions */
-    extern int32 DFGRIopen
-                (const char *filename, int acc_mode);
-
-#if defined c_plusplus || defined __cplusplus
-}
-#endif                          /* c_plusplus || __cplusplus */
-
-#endif                          /* DFGR_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/dfi.h b/Utilities/CAI/cai_dll/inc/inc_hdf/dfi.h
deleted file mode 100755
index ee3cf04bd0..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/dfi.h
+++ /dev/null
@@ -1,220 +0,0 @@
-
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*-----------------------------------------------------------------------------
- * File:    dfi.h
- * Purpose: HDF internal header file
- * Invokes: stdio.h, sys/file.h
- * Contents:
- *  Compilation parameters
- *  Machine-dependent definitions
- *  Flexibility definitions: i/o buffering, dynamic memory, structure i/o
- *  Size parameters
- * Remarks: To port to a new system, only dfi.h and Makefile need be modified.
- *          This file is included with user programs, but users do not see it.
- *---------------------------------------------------------------------------*/
-
-#ifndef DFI_H
-#define DFI_H
-
-/*--------------------------------------------------------------------------*/
-/*          Compilation Parameters for Flexibility and Portability          */
-
-/* modify this line for buffered/unbuffered i/o */
-#define DF_BUFFIO
-
-/* modify this line for dynamic/static memory allocation */
-#define DF_DYNAMIC
-
-/* modify this line if structures cannot be read/written as is */
-#undef  DF_STRUCTOK     /* leave it this way - hdfsh expects it */
-
-/*--------------------------------------------------------------------------*/
-/*                      Machine dependencies                                */
-/*--------------------------------------------------------------------------*/
-
-#ifdef IRIX
-#undef DF_STRUCTOK
-#include <sys/types.h>
-#include <sys/file.h>   /* for unbuffered i/o stuff */
-#ifndef DFmovmem
-#define DFmovmem(from, to, len) bcopy(from, to, len)
-#endif /* DFmovmem */
-#ifndef DF_STRUCTOK
-#define UINT16READ(p, x)    { x = ((*p++) & 255)<<8; x |= (*p++) & 255; }
-#define INT16READ(p, x)     { x = (*p++)<<8; x |= (*p++) & 255; }
-#define INT32READ(p, x)     { x = (*p++)<<24; x|=((*p++) & 255)<<16;    \
-                                x|=((*p++) & 255)<<8; x|=(*p++) & 255; }
-#define UINT16WRITE(p, x)   { *p++ = (x>>8) & 255; *p++ = x & 255; }
-#define INT16WRITE(p, x)    { *p++ = (x>>8) & 255; *p++ = x & 255; }
-#define INT32WRITE(p, x)    { *p++ = (x>>24) & 255; *p++ = (x>>16) & 255;   \
-                                *p++ = (x>>8) & 255; *p++ = x & 255; }
-#endif /*DF_STRUCTOK */
-#define DF_CREAT(name, prot) creat(name, prot)
-#ifndef DF_MT
-#define DF_MT   DFMT_IRIX
-#endif /* DF_MT  */
-#endif /*IRIX */
-
-#ifdef IBM6000  /* NOTE: IBM6000 defines are same as for SUN */
-#if ! defined mc68010 && ! defined mc68020 && ! defined mc68030
-#undef DF_STRUCTOK
-#endif
-#include <sys/file.h>   /* for unbuffered i/o stuff */
-#define DFmovmem(from, to, len) memcpy(to, from, len)
-#ifndef DF_STRUCTOK
-#define UINT16READ(p, x) { x = ((*p++) & 255)<<8; x |= (*p++) & 255; }
-#define INT16READ(p, x) { x = (*p++)<<8; x |= (*p++) & 255; }
-#define INT32READ(p, x) { x = (*p++)<<24; x|=((*p++) & 255)<<16;    \
-            x|=((*p++) & 255)<<8; x|=(*p++) & 255; }
-#define UINT16WRITE(p, x) { *p++ = (x>>8) & 255; *p++ = x & 255; }
-#define INT16WRITE(p, x) { *p++ = (x>>8) & 255; *p++ = x & 255; }
-#define INT32WRITE(p, x) { *p++ = (x>>24) & 255; *p++ = (x>>16) & 255;  \
-            *p++ = (x>>8) & 255; *p++ = x & 255; }
-#endif /*DF_STRUCTOK */
-#define DF_CREAT(name, prot) creat(name, prot)
-#define DF_MT   DFMT_IBM6000
-#endif /*IBM6000 */
-
-#if defined (MAC) || defined (macintosh) || defined (SYMANTEC_C)
-#undef DF_BUFFIO    /* use unbuffered i/o */
-#include <memory.h>     /* malloc stuff for MPW 3.0 */
-#include <fcntl.h>  /* unbuffered IO stuff for MPW 3.0 */
-#ifdef SYMANTEC_C  /* for LightSpeed C */
-#include <unix.h>
-#else  /*SYMANTEC_C                   MPW, possibly others */
-#include <Files.h>  /* for unbuffered i/o stuff */
-#endif /*SYMANTEC_C */
-#define DF_CAPFNAMES    /* fortran names are in all caps */
-#define DF_DYNAMIC  /* use dynamic allocation */
-#ifdef SYMANTEC_C  /* LightSpeed C does not have memcpy */
-#define DFmovmem(from, to, len) DFImemcopy(from, to, len)
-#else  /*SYMANTEC_C */
-#define DFmovmem(from, to, len) memcpy(to, from, len)
-#endif /*SYMANTEC_C */
-#define malloc(x)   NewPtr((Size)   (x))    /* don't use malloc on the Mac */
-#define free(x)     DisposPtr((Ptr) (x))    /* don't use free on the Nac   */
-#undef DF_STRUCTOK
-#define UINT16READ(p, x) { x = ((*p++) & 255)<<8; x |= (*p++) & 255; }
-#define INT16READ(p, x) { x = (*p++)<<8; x |= (*p++) & 255; }
-#define INT32READ(p, x) { x = (*p++)<<24; x|=((*p++) & 255)<<16;    \
-            x|=((*p++) & 255)<<8; x|=(*p++) & 255; }
-#define UINT16WRITE(p, x) { *p++ = (x>>8) & 255; *p++ = x & 255; }
-#define INT16WRITE(p, x) { *p++ = (x>>8) & 255; *p++ = x & 255; }
-#define INT32WRITE(p, x) { *p++ = (x>>24) & 255; *p++ = (x>>16) & 255;  \
-            *p++ = (x>>8) & 255; *p++ = x & 255; }
-#define DF_CREAT(name, prot) mopen(name, O_WRONLY|O_TRUNC|O_CREAT)
-#define DF_MT   DFMT_MAC
-#endif /*MAC */
-
-#ifdef VMS
-/*#undef DF_BUFFIO should be buff !!!! */
-   /* use only unbuff i/o - buff doesn't work! */
-#ifndef DFopen  /* avoid double includes */
-/* #include "dfivms.h" */
-#endif /*DFopen */
-#undef DF_STRUCTOK
-#define DF_CAPFNAMES    /* fortran names are in all caps */
-#include <file.h>   /* for unbuffered i/o stuff */
-#define DFmovmem(from, to, len) memcpy(to, from, len)
-#ifndef DF_STRUCTOK
-#define UINT16READ(p, x) { x = ((*p++) & 255)<<8; x |= (*p++) & 255; }
-#define INT16READ(p, x) { x = (*p++)<<8; x |= (*p++) & 255; }
-#define INT32READ(p, x) { x = (*p++)<<24; x|=((*p++) & 255)<<16;    \
-            x|=((*p++) & 255)<<8; x|=(*p++) & 255; }
-#define UINT16WRITE(p, x) { *p++ = (x>>8) & 255; *p++ = x & 255; }
-#define INT16WRITE(p, x) { *p++ = (x>>8) & 255; *p++ = x & 255; }
-#define INT32WRITE(p, x) { *p++ = (x>>24) & 255; *p++ = (x>>16) & 255;  \
-            *p++ = (x>>8) & 255; *p++ = x & 255; }
-#endif /*DF_STRUCTOK */
-#define DF_CREAT(name, prot) creat(name, prot)
-#define DF_MT   DFMT_VAX
-#endif /*VMS */
-
-#ifdef APOLLO
-#if ! defined mc68010 && ! defined mc68020 && ! defined mc68030
-#undef DF_STRUCTOK
-#endif
-#include <sys/file.h>   /* for unbuffered i/o stuff */
-#define int8 char
-#define uint8 unsigned char
-#define int16 short int
-#define uint16 unsigned short int
-#define int32 long int
-#define uint32 unsigned long int
-#define float32 float
-#define DFmovmem(from, to, len) memcpy(to, from, len)
-#ifndef DF_STRUCTOK
-#define UINT16READ(p, x) { x = ((*p++) & 255)<<8; x |= (*p++) & 255; }
-#define INT16READ(p, x) { x = (*p++)<<8; x |= (*p++) & 255; }
-#define INT32READ(p, x) { x = (*p++)<<24; x|=((*p++) & 255)<<16;    \
-            x|=((*p++) & 255)<<8; x|=(*p++) & 255; }
-#define UINT16WRITE(p, x) { *p++ = (x>>8) & 255; *p++ = x & 255; }
-#define INT16WRITE(p, x) { *p++ = (x>>8) & 255; *p++ = x & 255; }
-#define INT32WRITE(p, x) { *p++ = (x>>24) & 255; *p++ = (x>>16) & 255;  \
-            *p++ = (x>>8) & 255; *p++ = x & 255; }
-#endif /*DF_STRUCTOK */
-#define DF_CREAT(name, prot) creat(name, prot)
-#define DF_MT   DFMT_APOLLO
-#endif /*APOLLO */
-
-/*--------------------------------------------------------------------------*/
-/*                      Flexibility parameters                              */
-#if defined (MAC) || defined (macintosh) || defined (SYMANTEC_C)  /* MAC specific file manager calls */
-#   define DF_OPEN(x,y) mopen(x,y)
-#   define DF_CLOSE(x) mclose(x)
-#   define DF_SEEK(x,y,z) mlseek(x,y,z)
-#   define DF_SKEND(x,y,z) mlseek(x,-1*y,z)
-#   define DF_TELL(x) mlseek(x,0L,1)
-#   define DF_READ(a,b,c,d) mread(d,a,b*c)
-#   define DF_WRITE(a,b,c,d) mwrite(d,a,b*c)
-#   define DF_FLUSH(a)  /* no need to flush */
-#   define DF_RDACCESS 0    /* dummy */
-#   define DF_WRACCESS 0    /* dummy */
-#   define DF_OPENERR(f)    ((f) == -1)
-#else  /* !MAC */
-#ifdef DF_BUFFIO    /* set all calls to do buffered I/O */
-#define DF_OPEN(x,y) fopen(x,y)
-#define DF_CLOSE(x) fclose(x)
-#define DF_SEEK(x,y,z) fseek(x,y,z)
-#define DF_SKEND(x,y,z) fseek(x,y,z)
-#define DF_TELL(x) ftell(x)
-#define DF_READ(a,b,c,d) fread(a,b,c,d)
-#define DF_WRITE(a,b,c,d) fwrite(a,b,c,d)
-#define DF_FLUSH(a) fflush(a)
-#define DF_OPENERR(f)   (!(f))
-#define DF_RDACCESS "rb"
-#define DF_WRACCESS "rb+"
-
-#else  /*DF_BUFFIO         unbuffered i/o */
-#define DF_OPEN(x,y) open(x,y)
-#define DF_CLOSE(x) close(x)
-#define DF_SEEK(x,y,z) lseek(x,y,z)
-#define DF_SKEND(x,y,z) lseek(x,-1*y,z)
-#define DF_TELL(x) lseek(x,0L,1)
-#define DF_READ(a,b,c,d) read(d,a,b*c)
-#define DF_WRITE(a,b,c,d) write(d,a,b*c)
-#define DF_OPENERR(f)   ((f) == -1)
-#define DF_FLUSH(a)     /* no need to flush */
-#define DF_RDACCESS O_RDONLY
-#define DF_WRACCESS O_RDWR
-#endif /* DF_BUFFIO */
-#endif /* !MAC */
-
-#ifndef FILE
-#include <stdio.h>
-#endif /*FILE */
-
-#endif /* DFI_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/dfrig.h b/Utilities/CAI/cai_dll/inc/inc_hdf/dfrig.h
deleted file mode 100755
index 1070d851f7..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/dfrig.h
+++ /dev/null
@@ -1,73 +0,0 @@
-
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*-----------------------------------------------------------------------------
- * File:    dfrig.h
- * Purpose: header file for the Raster Image set
- * Invokes: df.h
- * Contents:
- *  Structure definitions: DFRdr, DFRrig
- * Remarks: This is included with user programs which use RIG
- *---------------------------------------------------------------------------*/
-
-#ifndef DFRIG   /* avoid re-inclusion */
-#define DFRIG
-
-/* description record: used to describe image data, palette data etc. */
-typedef struct
-  {
-      int16       ncomponents;  /* Number of components */
-      int16       interlace;    /* data ordering: chunky / planar etc */
-      int32       xdim;         /* X-dimension of data */
-      int32       ydim;         /* Y-dimensionsof data */
-      DFdi        nt;           /* number type of data */
-      DFdi        compr;        /* compression */
-      /* ### Note: compression is currently uniquely described with a tag.
-         No data is attached to this tag/ref.  But this capability is
-         provided for future expansion, when this tag/ref might point to
-         some data needed for decompression, such as the actual encodings */
-  }
-DFRdr;
-
-/* structure to hold RIG info */
-typedef struct
-  {
-      char       *cf;           /* color format */
-      int32       xpos;         /* X position of image on screen */
-      int32       ypos;         /* Y position of image on screen */
-      float32     aspectratio;  /* ratio of pixel height to width */
-      float32     ccngamma;     /* gamma color correction parameters */
-      float32     ccnred[3];    /* red color correction parameters */
-      float32     ccngrren[3];  /* green color correction parameters */
-      float32     ccnblue[3];   /* blue color correction parameters */
-      float32     ccnwhite[3];  /* white color correction parameters */
-      DFdi        image;        /* image */
-      DFRdr       descimage;    /* image data description */
-      DFdi        lut;          /* color look-up table (palette) */
-      DFRdr       desclut;      /* look-up table description */
-      DFdi        mattechannel; /* matte? */
-      DFRdr       descmattechannel;     /* Description of matte? */
-  }
-DFRrig;
-
-/* dimensions of raster-8 image */
-typedef struct R8dim
-  {
-      uint16      xd;
-      uint16      yd;
-  }
-R8dim;
-
-#endif /*DFRIG */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/dfsd.h b/Utilities/CAI/cai_dll/inc/inc_hdf/dfsd.h
deleted file mode 100755
index 0e0cc7231a..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/dfsd.h
+++ /dev/null
@@ -1,136 +0,0 @@
-
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*-----------------------------------------------------------------------------
- * File:    dfsd.h
- * Purpose: header file for the Scientific Data set
- * Invokes: dfrig.h
- * Contents:
- *  Structure definitions: DFSsdg
- *  Constant definitions: DFS_MAXLEN
- * Remarks: This is included with user programs which use SDG
- *          Currently defined to be 2-D.  Will later be increased to
- *          multiple dimensions
- *---------------------------------------------------------------------------*/
-
-#ifndef _DFSD_H   /* avoid re-inclusion */
-#define _DFSD_H
-
-#include "hdf.h"
-
-/* include numbertype and aid for 3.2   S. Xu   */
-/* structure to hold SDG info */
-typedef struct DFSsdg
-  {
-      DFdi        data;         /* tag/ref of data in file */
-      intn        rank;         /* number of dimensions */
-      int32 *dimsizes;    /* dimensions of data */
-      char *coordsys;
-      char *dataluf[3];   /* label/unit/format of data */
-      char **dimluf[3];   /* label/unit/format for each dim */
-      uint8 **dimscales;  /* scales for each dimension */
-      uint8       max_min[16];  /* max, min values of data, */
-      /*  currently atmost 8 bytes each   */
-      int32       numbertype;   /* default is float32      */
-      uint8       filenumsubclass;  /* number format in the file, default is IEEE */
-      int32       aid;          /* access id     */
-      int32       compression;  /* 0 -- not compressed  */
-      int32       isndg;        /* 0 -- pure sdg, written by 3.1 else ndg */
-      float64     cal, cal_err; /* calibration multiplier stuff          */
-      float64     ioff, ioff_err;   /* calibration offset stuff              */
-      int32       cal_type;     /* number type of data after calibration */
-      uint8       fill_value[DFSD_MAXFILL_LEN];     /* fill value if any specified  */
-      intn        fill_fixed;   /* whether ther fill value is a fixed value, or it can change */
-  }
-DFSsdg;
-
-/* DFnsdgle is the internal structure which stores SDG or NDS and   */
-/* related SDG in an HDF file.                                      */
-/* It is a linked list.                                             */
-
-typedef struct DFnsdgle
-  {
-      DFdi        nsdg;         /* NDG from 3.2 or SDG from 3.1  */
-      DFdi        sdg;          /* Only special NDF has values in this field */
-      struct DFnsdgle *next;
-  }
-DFnsdgle;
-
-typedef struct DFnsdg_t_hdr
-  {
-      uint32      size;
-      DFnsdgle   *nsdg_t;
-  }
-DFnsdg_t_hdr;
-
-#if defined c_plusplus || defined __cplusplus
-extern      "C"
-{
-#endif                          /* c_plusplus || __cplusplus */
-
-    extern int32 DFSDIopen
-                (const char * filename, int acc_mode);
-
-    extern int  DFSDIsdginfo
-                (int32 file_id);
-
-    extern int  DFSDIclear
-                (DFSsdg * sdg);
-
-    extern int  DFSDIclearNT
-                (DFSsdg * sdg);
-
-    extern int  DFSDIgetdata
-                (const char * filename, intn rank, int32 maxsizes[], VOIDP data,
-                 int isfortran);
-
-    extern int  DFSDIputdata
-                (const char * filename, intn rank, int32 * dimsizes, VOIDP data,
-                 int accmode, int isfortran);
-
-    extern int  DFSDIgetslice
-                (const char * filename, int32 winst[], int32 windims[], VOIDP data,
-                 int32 dims[], int isfortran);
-
-    extern int  DFSDIputslice
-                (int32 windims[], VOIDP data, int32 dims[], int isfortran);
-
-    extern int  DFSDIendslice
-                (int isfortran);
-
-    extern intn DFSDIrefresh
-                (char * filename);
-
-    extern int  DFSDIisndg
-                (intn * isndg);
-
-    extern int  DFSDIgetrrank
-                (intn * rank);
-
-    extern int  DFSDIgetwrank
-                (intn * rank);
-
-    extern int  DFSDIsetdimstrs
-                (int dim, const char * label, const char * unit, const char * format);
-
-    extern int  DFSDIsetdatastrs
-                (const char * label, const char * unit, const char * format,
-                 const char * coordsys);
-
-#if defined c_plusplus || defined __cplusplus
-}
-#endif                          /* c_plusplus || __cplusplus */
-
-#endif                          /* _DFSD_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/dfstubs.h b/Utilities/CAI/cai_dll/inc/inc_hdf/dfstubs.h
deleted file mode 100755
index 2cd1931ea0..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/dfstubs.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*
-   ** FILE
-   **   dfstubs.h
-   ** PURPOSE
-   **   Header file for "dfstubs.c" HDF 3.1 emulation using new routines
-   **   from "hfile.c".
-   ** AUTHOR
-   **   Doug Ilg
- */
-
-#ifndef DFSTUBS_H   /* avoid re-inclusion */
-#define DFSTUBS_H
-/* This is the master HDF driver (taking the place of df.c), so... */
-#define DFMASTER
-#undef PERM_OUT     /* used to "comment out" code */
-
-#include "df.h"
-#undef DFMASTER
-
-#if !defined(__GNUC__) & !defined(CONVEX) & !defined(VMS)
-#include <memory.h>
-#endif /* !__GNUC__ & !CONVEX & !VMS */
-
-#define DFACC_APPEND    8
-#define DFEL_ABSENT 0
-#define DFEL_RESIDENT   1
-#define DFSRCH_OLD  0
-#define DFSRCH_NEW  1
-
-PRIVATE int32 DFid = 0;
-PRIVATE int32 DFaid = 0;
-PRIVATE int DFaccmode = 0;
-PRIVATE int DFelaccmode = 0;
-PRIVATE uint16 search_tag = 0;
-PRIVATE uint16 search_ref = 0;
-PRIVATE int search_stat = DFSRCH_NEW;
-PRIVATE int32 search_aid = 0;
-PRIVATE int DFelstat = DFEL_ABSENT;
-PRIVATE int32 DFelsize = 0;
-PRIVATE int32 DFelseekpos = 0;
-PRIVATE uint16 acc_tag = 0;
-PRIVATE uint16 acc_ref = 0;
-PRIVATE char *DFelement = NULL;
-
-#if defined c_plusplus || defined __cplusplus
-extern      "C"
-{
-#endif                          /* c_plusplus || __cplusplus */
-
-/* prototypes for internal routines */
-    PRIVATE int DFIclearacc
-                (void);
-
-    PRIVATE int DFIcheck
-                (DF * dfile);
-
-#if defined c_plusplus || defined __cplusplus
-}
-#endif                          /* c_plusplus || __cplusplus */
-
-#endif                          /* DFSTUBS_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/dfufp2i.h b/Utilities/CAI/cai_dll/inc/inc_hdf/dfufp2i.h
deleted file mode 100755
index 09fe5656a2..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/dfufp2i.h
+++ /dev/null
@@ -1,85 +0,0 @@
-
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-#ifndef DFUFP2IM_H  /* avoid re-inclusion */
-#define DFUFP2IM_H
-
-/* Input structure */
-typedef struct
-  {
-      int32       hdim;         /* horizontal dimension of input data */
-      int32       vdim;         /* vertical dimension of input data */
-      intn        is_pal;       /* flag to tell whether there is a palette */
-      intn        is_vscale;    /* flag telling whether vertical scale included  */
-      intn        is_hscale;    /* flag telling whether horizonatal scale included */
-      intn        ct_method;    /* color transform method: EXPAND or INTERP */
-      float32     max;          /* max value of data */
-      float32     min;          /* min value of the data */
-      float32    *hscale;       /* horizontal scale */
-      float32    *vscale;       /* vertical scale */
-      float32    *data;         /* floating point data */
-  }
-Input;
-
-/* Output structure */
-typedef struct
-  {
-      int32       hres;         /* horizontal resolution of image */
-      int32       vres;         /* vertical resolution of image */
-      intn        compress;     /* compression scheme */
-      char        outfile[32];  /* output file name */
-      uint8      *image;        /* Image */
-      uint8      *palette;      /* Palette */
-  }
-Output;
-
-/*----------------------------------------------------------------------------*/
-/*                           Function Prototypes                              */
-
-#if defined c_plusplus || defined __cplusplus
-extern      "C"
-{
-#endif                          /* c_plusplus || __cplusplus */
-
-/* prototypes for dfufp2im.c */
-
-#ifdef OLD_WAY
-    extern int  duif2i_(int32 *hdim, int32 *vdim, float32 *max, float32 *min,
-                        float32 hscale[], float32 vscale[], float32 data[],
-                  _fcd palette, _fcd outfile, int *ct_method, int32 *hres,
-                        int32 *vres, int *compress, int *lenfn);
-    extern int  DFUfptoimage(int32 hdim, int32 vdim, float32 max, float32 min,
-                             float32 *hscale, float32 *vscale, float32 *data,
-                             uint8 *palette, char *outfile, int ct_method,
-                             int32 hres, int32 vres, int compress);
-#endif
-    extern int  process
-                (Input * in, Output * out);
-    extern int  generate_scale
-                (int32 dim, float32 *scale);
-    extern int  convert_interp
-                (Input * in, Output * out);
-    extern int  pixrep_scaled
-                (Input * in, Output * out);
-    extern int  compute_offsets
-                (float32 *scale, int32 dim, int32 *offsets, int32 res);
-    extern int  pixrep_simple
-                (Input * in, Output * out);
-
-#if defined c_plusplus || defined __cplusplus
-}
-#endif                          /* c_plusplus || __cplusplus */
-
-#endif                          /* DFUFP2IM_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/dynarray.h b/Utilities/CAI/cai_dll/inc/inc_hdf/dynarray.h
deleted file mode 100755
index 30f407e0a1..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/dynarray.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*-----------------------------------------------------------------------------
- * File:    dynarray.h
- * Purpose: header file for dynamic array API
- * Dependencies: 
- * Invokes:
- * Contents:
- * Structure definitions: 
- * Constant definitions: 
- *---------------------------------------------------------------------------*/
-
-/* avoid re-inclusion */
-#ifndef __DYNARRAY_H
-#define __DYNARRAY_H
-
-#include "hdf.h"
-
-/*
-    Define the pointer to the dynarray without giving outside routines access
-    to the internal workings of the structure.
-*/
-typedef struct dynarray_tag *dynarr_p;
-
-#if defined DYNARRAY_MASTER | defined DYNARRAY_TESTER
-typedef struct dynarray_tag 
-  {
-      intn num_elems;       /* Number of elements in the array currently */
-      intn incr_mult;       /* Multiple to increment the array size by */
-      VOIDP *arr;           /* Pointer to the actual array of void *'s */
-  }dynarr_t;
-
-#endif /* DYNARRAY_MASTER | DYNARRAY_TESTER */
-
-#if defined c_plusplus || defined __cplusplus
-extern      "C"
-{
-#endif                          /* c_plusplus || __cplusplus */
-
-/******************************************************************************
- NAME
-     DAcreate_array - Create a dynarray
-
- DESCRIPTION
-    Create a dynarray for later use.  This routine allocates the dynarray
-    structure and creates a dynarray with the specified minimum size.
-
- RETURNS
-    Returns pointer to the dynarray created if successful and NULL otherwise
-
-*******************************************************************************/
-dynarr_p DAcreate_array(intn start_size,      /* IN: Initial array size */
-    intn incr_mult                  /* IN: multiple to create additional elements in */
-);
-
-/******************************************************************************
- NAME
-     DAdestroy_array - Destroy a dynarray
-
- DESCRIPTION
-    Destroy an existing dynarray from use.  This routine de-allocates the
-    dynarray structure and deletes the current dynarray.
-
- RETURNS
-    Returns SUCCEED if successful and FAIL otherwise
-
-*******************************************************************************/
-intn DAdestroy_array(dynarr_p arr,  /* IN: Array to destroy */
-        intn free_elem              /* IN: whether to free each element */
-);
-
-/******************************************************************************
- NAME
-     DAdestroy_array - Get the current size of a dynarray
-
- DESCRIPTION
-    Get the number of elements in use currently.
-
- RETURNS
-    Returns # of dynarray elements if successful and FAIL otherwise
-
-*******************************************************************************/
-intn DAsize_array(dynarr_p arr   /* IN: Array to get size of */
-);
-
-/******************************************************************************
- NAME
-     DAget_elem - Get an element from a dynarray
-
- DESCRIPTION
-    Retrieve an element from a dynarray.  If the element to be retrieved is
-    beyond the end of the currently allocated array elements, the array is
-    not extended, a NULL pointer is merely returned.
-
- RETURNS
-    Returns object ptr if successful and NULL otherwise
-
-*******************************************************************************/
-VOIDP DAget_elem(dynarr_p arr_ptr, /* IN: Array to access */
-    intn elem                       /* IN: Array element to retrieve */
-);
-
-/******************************************************************************
- NAME
-     DAset_elem - Set an element pointer for a dynarray
-
- DESCRIPTION
-    Set an element pointer for a dynarray.  If the element to be set is
-    beyond the end of the currently allocated array elements, the array is
-    extended by whatever multiple of the incr_mult is needed to expand the
-    # of array elements to include the array element to set.
-
- RETURNS
-    Returns SUCCEED if successful and NULL otherwise
-
-*******************************************************************************/
-intn DAset_elem(dynarr_p arr_ptr,  /* IN: Array to access */
-    intn elem,                      /* IN: Array element to set */
-    VOIDP obj                       /* IN: Pointer to the object to store */
-);
-
-/*****************************************************************************
- NAME
-     DAdel_elem - Delete an element from a dynarray
-
- DESCRIPTION
-    Retrieve an element from a dynarray & delete it from the dynarray.  If the
-    element to be retrieved is beyond the end of the currently allocated array
-    elements, the array is not extended, a NULL pointer is merely returned.
-
- RETURNS
-    Returns object ptr if successful and NULL otherwise
-
-*******************************************************************************/
-VOIDP DAdel_elem(dynarr_p arr_ptr, /* IN: Array to access */
-    intn elem                       /* IN: Array element to retrieve */
-);
-
-#if defined c_plusplus || defined __cplusplus
-}
-#endif                          /* c_plusplus || __cplusplus */
-
-#endif /* __DYNARRAY_H */
-
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/hbitio.h b/Utilities/CAI/cai_dll/inc/inc_hdf/hbitio.h
deleted file mode 100755
index 9ad8defdbc..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/hbitio.h
+++ /dev/null
@@ -1,85 +0,0 @@
-
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*
-   **  hbitio.h
-   **
-   **  Data structures and macros for bitfile access to HDF data objects.
-   **  These are mainly used for compression I/O and N-bit data objects.
- */
-
-#ifndef __HBITIO_H
-#define __HBITIO_H
-
-/* Define the number of elements in the buffered array */
-#define BITBUF_SIZE 4096
-/* Macro to define the number of bits cached in the 'bits' variable */
-#define BITNUM      (sizeof(uint8)*8)
-/* Macro to define the number of bits able to be read/written at a time */
-#define DATANUM     (sizeof(uint32)*8)
-
-typedef struct bitrec_t
-  {
-      int32       acc_id;       /* Access ID for H layer I/O routines */
-      int32       bit_id;       /* Bitfile ID for internal use */
-  /* Note that since HDF has signed 32bit offset limit we need to change this to signed
-     since the get passed to Hxxx calls which take signed 32bit arguments */
-      int32      block_offset, /* offset of the current buffered block in the dataset */
-                 max_offset,   /* offset of the last byte written to the dataset */
-                 byte_offset;  /* offset of the current byte in the dataset */
-
-      intn       count,        /* bit count to next boundary */
-                 buf_read;     /* number of bytes read into buffer (necessary for random I/O) */
-      uint8       access;       /* What the access on this file is ('r', 'w', etc..) */
-      uint8       mode;         /* how are we interacting with the data now ('r', 'w', etc) */
-      uint8       bits;         /* extra bit buffer, 0..BITNUM-1 bits */
-      uint8      *bytep;        /* current position in buffer */
-      uint8      *bytez;        /* end of buffer to compare */
-      uint8      *bytea;        /* byte buffer */
-  }
-bitrec_t;
-
-#ifndef BITMASTER
-extern
-#endif
-const uint8 maskc[9]
-#ifdef BITMASTER
-=
-{0, 1, 3, 7, 15, 31, 63, 127, 255}
-#endif
-           ;
-
-#ifndef BITMASTER
-extern
-#endif
-const uint32 maskl[33]
-#ifdef BITMASTER
-=
-{0x00000000,
- 0x00000001, 0x00000003, 0x00000007, 0x0000000f,
- 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff,
- 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff,
- 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff,
- 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff,
- 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff,
- 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff,
- 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffffUL}
-#endif
-           ;
-
-/* Function-like Macros */
-#define Hputbit(bitid,bit) ((Hbitwrite(bitid,1,(uint32)bit)==FAIL) ? FAIL : SUCCEED)
-
-#endif /* __HBITIO_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/hchunks.h b/Utilities/CAI/cai_dll/inc/inc_hdf/hchunks.h
deleted file mode 100755
index 6c42ea00e6..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/hchunks.h
+++ /dev/null
@@ -1,294 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*-----------------------------------------------------------------------------
- * File:         hchunks.h
- * Purpose:      Header file for Chunked elements
- * Dependencies: tbbt.c mcache.c
- * Invokes:      none
- * Contents:     Structures & definitions for chunked elements
- * Structure definitions: DIM_DEF, HCHUNK_DEF
- * Constant definitions:
- * Author: -GeorgeV -  9/3/96
- *---------------------------------------------------------------------------*/
-
-/* avoid re-inclusion */
-#ifndef __HCHUNKS_H
-#define __HCHUNKS_H
-
-/* required includes */
-#include "hfile.h"  /* special info stuff */
-
-#ifdef   _HCHUNKS_MAIN_
-/* Private to 'hchunks.c' */
-
-#include "tbbt.h"   /* TBBT stuff */
-#include "mcache.h" /* caching routines */
-#include "hcomp.h"  /* For Compression */
-
-/* Define class, class version and name(partial) for chunk table i.e. Vdata */
-#if 0 /* moved definition of class of vdata to hlimits.h */
-#define _HDF_CHK_TBL_CLASS "_HDF_CHK_TBL_" /* 13 bytes */
-#define _HDF_CHK_TBL_CLASS_VER  0          /* zero version number for class */
-#endif /* moved definition of class of vdata to hlimits.h */ 
-#define _HDF_CHK_TBL_NAME  "_HDF_CHK_TBL_" /* 13 bytes */
-
-/* Define field name for each chunk record i.e. Vdata record */
-#define _HDF_CHK_FIELD_1   "origin"  /* 6 bytes */
-#define _HDF_CHK_FIELD_2   "chk_tag" /* 7 bytes */
-#define _HDF_CHK_FIELD_3   "chk_ref" /* 7 bytes */
-#define _HDF_CHK_FIELD_NAMES   "origin,chk_tag,chk_ref" /* 22 bytes */
-
-/* Define version number for chunked header format */
-#define _HDF_CHK_HDR_VER   0  /* zero version for format header */
-
-#endif /* _HCHUNKS_MAIN_ */
-
-/* Public structures */
-
-/* Structure for each Data array dimension Defintion */
-typedef struct dim_def_struct {
-    int32 dim_length;          /* length of this dimension */
-    int32 chunk_length;        /* chunk length along this dimension */
-    int32 distrib_type;        /* Data distribution along this dimension */
-} DIM_DEF, * DIM_DEF_PTR;
-
-/* Structure for each Chunk Definition*/
-typedef struct hchunk_def_struct {
-    int32    chunk_size;     /* size of this chunk*/
-    int32    nt_size;        /* number type size i.e. size of data type */
-    int32    num_dims;       /* number of actual dimensions */
-    DIM_DEF *pdims;          /* ptr to array of dimension records for this chunk*/
-    int32   chunk_flag;      /* multiply specialness? SPECIAL_COMP */
-
-    /* For Compression info */
-    comp_coder_t comp_type;     /* Compression type */
-    comp_model_t model_type;    /* Compression model type */
-    comp_info  *cinfo;        /* Compression info struct */
-    model_info *minfo;        /* Compression model info struct */
-}HCHUNK_DEF, * HCHUNK_DEF_PTR;
-
-/* Private structues */
-#ifdef _HCHUNKS_MAIN_
-/* Private to 'hchunks.c' */
-
-/* Structure for each Data array dimension */
-typedef struct dim_rec_struct {
-    /* fields stored in chunked header */
-    int32 flag;                /* distrib_type(low 8 bits 0-7)
-                                  - Data distribution along this dimension 
-                                  other(medium low 8 bits 8-15)
-                                  - regular/unlimited dimension? */
-    int32 dim_length;          /* length of this dimension */
-    int32 chunk_length;        /* chunk length along this dimension */
-    
-    /* info determined from 'flag' field */
-    int32 distrib_type;        /* Data distribution along this dimension */
-    int32 unlimited;           /* regular(0) or unlimited dimension(1) */
-
-    /* computed fields */
-    int32 last_chunk_length;   /* last chunk length along this dimension */
-    int32 num_chunks;          /* i.e. "dim_length / chunk_length" */
-} DIM_REC, * DIM_REC_PTR;
-
-/* Structure for each Chunk */
-typedef struct chunk_rec_struct {
-    int32 chunk_number;      /* chunk number from coordinates i.e. origin */
-    int32 chk_vnum;          /* chunk vdata record number i.e. position in table*/
-
-    /* chunk record fields stored in Vdata Table */
-    int32  *origin;          /* origin -> position of chunk */
-    uint16 chk_tag;          /* DFTAG_CHUNK or another Chunked element? */
-    uint16 chk_ref;          /* reference number of this chunk */
-}CHUNK_REC, * CHUNK_REC_PTR;
-
-/* information on this special chunk data elt */
-typedef struct chunkinfo_t
-{
-    intn        attached;     /* how many access records refer to this elt */
-    int32       aid;          /* Access id of chunk table i.e. Vdata */
-
-    /* chunked element format header  fields */
-    int32       sp_tag_header_len; /* length of the special element header */
-    uint8       version;      /* Version of this Chunked element */
-    int32       flag;         /* flag for multiply specialness ...*/
-    int32       length;       /* the actual length of the data elt */
-    int32       chunk_size;   /* the logical size of the chunks */
-    int32       nt_size;      /* number type size i.e. size of data type */
-    uint16      chktbl_tag;   /* DFTAG_VH - Vdata header */
-    uint16      chktbl_ref;   /* ref of the first chunk table structure(VDATA) */
-    uint16      sp_tag;       /* For future use.. */
-    uint16      sp_ref;       /* For future use.. */
-    int32       ndims;        /* number of dimensions of chunk */
-    DIM_REC     *ddims;       /* array of dimension records */
-    int32       fill_val_len; /* fill value number of bytes */
-    VOID        *fill_val;    /* fill value */
-    /* For each specialness, only one for now SPECIAL_COMP */
-    int32       comp_sp_tag_head_len; /* Compression header length */
-    VOID        *comp_sp_tag_header;  /* compression header */
-
-    /* For Compression info */
-    comp_coder_t comp_type;            /* Compression type */
-    comp_model_t model_type;           /* Compression model type */
-    comp_info   *cinfo;               /* Compression info struct */
-    model_info  *minfo;               /* Compression model info struct */
-
-    /* additional memory resident data structures to be used */
-    int32       *seek_chunk_indices; /* chunk array indicies relative
-                                        to the other chunks */
-    int32       *seek_pos_chunk;     /* postion within the current chunk */
-    int32       *seek_user_indices;  /* user postion within the element  */
-    TBBT_TREE   *chk_tree;    /* TBBT tree of all accessed table entries 
-                                 i.e. CHUNK_REC's read/written/modified */
-    MCACHE      *chk_cache;   /* chunk cache */
-    int32       num_recs;     /* number of Table(Vdata) records */
-}
-chunkinfo_t;
-#endif /* _HCHUNKS_MAIN_ */
-
-#if defined c_plusplus || defined __cplusplus
-extern      "C"
-{
-#endif                          /* c_plusplus || __cplusplus */
-
-/*
-** from hchunks.c
-*/
-
-/* User Public */
-    HDFLIBAPI int32 HMCcreate
-        (int32 file_id,       /* IN: file to put linked chunk element in */
-         uint16 tag,          /* IN: tag of element */
-         uint16 ref,          /* IN: ref of element */
-         uint8 nlevels,       /* IN: number of levels of chunks */
-         int32 fill_val_len,  /* IN: fill value length in bytes */
-         VOID  *fill_val,     /* IN: fill value */
-         HCHUNK_DEF *chk_array /* IN: structure describing chunk distribution
-                                 can be an array? but we only handle 1 level */);
-
-    HDFLIBAPI int32 HMCgetcompress
-	(accrec_t* access_rec,    /* IN: access record */
-	 comp_coder_t* comp_type, /* OUT: compression type */
-         comp_info* c_info        /* OUT: retrieved compression info */);
-
-    HDFLIBAPI int32 HMCsetMaxcache
-        (int32 access_id, /* IN: access aid to mess with */
-         int32 maxcache,  /* IN: max number of pages to cache */
-         int32 flags      /* IN: flags = 0, HMC_PAGEALL */);
-
-    HDFLIBAPI int32 HMCwriteChunk
-        (int32 access_id,  /* IN: access aid to mess with */
-         int32 *origin,    /* IN: origin of chunk to write */
-         const VOID *datap /* IN: buffer for data */);
-
-    HDFLIBAPI int32 HMCreadChunk
-        (int32 access_id,  /* IN: access aid to mess with */
-         int32 *origin,    /* IN: origin of chunk to read */
-         VOID *datap       /* IN: buffer for data */);
-
-    HDFLIBAPI int32 HMCPcloseAID
-        (accrec_t *access_rec /* IN:  access record of file to close */);
-
-/* Library Private */
-#ifdef _HCHUNKS_MAIN_
-    /* tbbt.h helper routines */
-    intn chkcompare(void * k1,   /* IN: first key */
-           void * k2,   /* IN: second key */
-           intn cmparg /* IN: not sure? */);
-    void chkfreekey(void * key /*IN: chunk key */ );
-    void chkdestroynode(void * n /* IN: chunk record */ );
-
-/* Private to 'hchunks.c' */
-    extern int32 HMCPstread
-        (accrec_t *access_rec  /* IN: access record to fill in */);
-
-    extern int32 HMCPstwrite
-        (accrec_t *access_rec  /* IN: access record to fill in */);
-
-    extern int32 HMCPseek
-        (accrec_t *access_rec, /* IN: access record to mess with */
-         int32 offset,         /* IN: seek offset */
-         int   origin          /* IN: where we should calc the offset from */);
-
-    extern int32 HMCPchunkread
-        (VOID  *cookie,    /* IN: access record to mess with */
-         int32 chunk_num,  /* IN: chunk to read */
-         VOID  *datap      /* OUT: buffer for data */);
-
-    extern int32 HMCPread
-        (accrec_t * access_rec, /* IN: access record to mess with */
-         int32 length,          /* IN: number of bytes to read */
-         void * data             /* OUT: buffer for data */);
-
-    extern int32 HMCPchunkwrite
-        (VOID  *cookie,    /* IN: access record to mess with */
-         int32 chunk_num,  /* IN: chunk number */
-         const VOID *datap /* IN: buffer for data */);
-
-    extern int32 HMCPwrite
-        (accrec_t *access_rec, /* IN: access record to mess with */
-         int32 length,         /* IN: number of bytes to write */
-         const void * data      /* IN: buffer for data */);
-
-    extern intn HMCPendaccess
-        (accrec_t *access_rec /* IN:  access record to close */);
-
-    extern int32 HMCPinfo
-        (accrec_t *access_rec,       /* IN: access record of access elemement */
-         sp_info_block_t *info_chunk /* OUT: information about the special element */);
-
-    extern int32 HMCPinquire
-        (accrec_t * access_rec, /* IN:  access record to return info about */
-         int32 *pfile_id,       /* OUT: file ID; */
-         uint16 *ptag,          /* OUT: tag of info record; */
-         uint16 *pref,          /* OUT: ref of info record; */
-         int32 *plength,        /* OUT: length of element; */
-         int32 *poffset,        /* OUT: offset of element -- meaningless */
-         int32 *pposn,          /* OUT: current position in element; */
-         int16 *paccess,        /* OUT: access mode; */
-         int16 *pspecial        /* OUT: special code; */);
-
-    extern int32 HMCPgetnumrecs
-        (accrec_t * access_rec, /* IN:  access record to return info about */
-         int32 *num_recs        /* OUT: length of the chunked elt */);
-
-#endif /* _HCHUNKS_MAIN_ */
-
-#if defined c_plusplus || defined __cplusplus
-}
-#endif                          /* c_plusplus || __cplusplus */
-
-#ifndef _HCHUNKS_MAIN_
-/* not in master file hchunk.c */
-extern funclist_t chunked_funcs;  /* functions to perform chunking */
-
-#else /* in hchunks.c */
-
-/* the accessing special function table for chunks */
-funclist_t  chunked_funcs =
-{
-    HMCPstread,
-    HMCPstwrite,
-    HMCPseek,
-    HMCPinquire,
-    HMCPread,
-    HMCPwrite,
-    HMCPendaccess,
-    HMCPinfo,
-    NULL         /* no routine registerd */
-};
-
-#endif
-
-#endif /* __HCHUNKS_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/hcomp.h b/Utilities/CAI/cai_dll/inc/inc_hdf/hcomp.h
deleted file mode 100755
index 35c38488b9..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/hcomp.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*-----------------------------------------------------------------------------
- * File:    hcomp.h
- * Purpose: header file for compression information & structures
- * Dependencies: should be included after hdf.h
- * Invokes:
- * Contents:
- * Structure definitions: comp_info
- * Constant definitions: lots...
- *---------------------------------------------------------------------------*/
-
-/* avoid re-inclusion */
-#ifndef __HCOMP_H
-#define __HCOMP_H
-
-/* For determining which type of modeling is being done */
-typedef enum
-  {
-      COMP_MODEL_STDIO = 0      /* for Standard C I/O model */
-  }
-comp_model_t;
-
-/* For determining which type of encoding is being done */
-typedef enum
-  {
-      COMP_CODE_NONE = 0,       /* don't encode at all, just store */
-      COMP_CODE_RLE,            /* for simple RLE encoding */
-      COMP_CODE_NBIT,           /* for N-bit encoding */
-      COMP_CODE_SKPHUFF,        /* for Skipping huffman encoding */
-      COMP_CODE_DEFLATE,        /* for gzip 'deflate' encoding */
-      COMP_CODE_SZIP,		/* for szip encoding */
-      COMP_CODE_INVALID,        /* invalid last code, for range checking */
-      COMP_CODE_JPEG            /* _Ugly_ hack to allow JPEG images to be created with GRsetcompress */
-  }
-comp_coder_t;
-
-/* Compression types available */
-#define COMP_NONE       0
-#define COMP_JPEG       2
-#define COMP_RLE        11
-#define COMP_IMCOMP     12
-
-/* Compression encoder/decoder configuration */
-#define COMP_DECODER_ENABLED     1
-#define COMP_ENCODER_ENABLED     2
-
-#ifndef COMPRESS_MASTER
-extern uint16 compress_map[];
-#else
-uint16      compress_map[COMP_MAX_COMP + 1] =
-{                               /* Mapping from compression types to tags */
-    0,                          /* No corresponding tag for un-compressed data */
-    0,                          /* (1) */
-    DFTAG_JPEG5,                /* COMP_JPEG -> DFTAG_JPEG5 (for JPEG compression) */
-    0,                          /* (3) */
-    0,                          /* (4) */
-    0,                          /* (5) */
-    0,                          /* (6) */
-    0,                          /* (7) */
-    0,                          /* (8) */
-    0,                          /* (9) */
-    0,                          /* (10) */
-    DFTAG_RLE,                  /* COMP_RLE -> DFTAG_RLE (for Run-length compression) */
-    DFTAG_IMC                   /* COMP_IMCOMP -> DFTAG_IMC (for IMCOMP compression) */
-};
-#endif
-
-typedef union tag_model_info
-  {                             /* Union to contain modeling information */
-      struct
-        {
-            int32       nt;     /* number type */
-            intn        ndim;   /* number of dimensions */
-            int32      *dims;   /* array of dimensions */
-        }
-      dim;
-  }
-model_info;
-
-typedef union tag_comp_info
-  {                             /* Union to contain compression information */
-      struct
-        {   /* Struct to contain information about how to compress */
-            /* or decompress a JPEG encoded 24-bit image */
-            intn    quality;    /* Quality factor for JPEG compression, should be from */
-            /* 0 (terrible) to 100 (very good) */
-            intn    force_baseline;     /* If force_baseline is set to TRUE then */
-            /* quantization tables are limited to */
-            /* 0..255 for JPEG baseline compability */
-            /* This is only an issue for quality */
-            /* settings below 24 */
-        }
-      jpeg;
-      struct
-        {   /* struct to contain information about how to compress */
-            /* or decompress a N-bit encoded dataset */
-            int32   nt;     /* number type of the data to encode */
-            intn    sign_ext;   /* whether to sign extend or not */
-            intn    fill_one;   /* whether to fill with 1's or 0's */
-            intn    start_bit;  /* offset of the start bit in the data */
-            intn    bit_len;    /* number of bits to store */
-        }
-      nbit;
-      struct
-        {   /* struct to contain info about how to compress */
-            /* or decompress a "skipping" huffman encoded dataset */
-            intn    skp_size;   /* size of the individual elements when skipping */
-        }
-      skphuff;
-      struct
-        {   /* struct to contain info about how to compress */
-            /* or decompress a gzip encoded dataset */
-            intn    level;   /* how hard to work when compressing the data */
-        }
-      deflate;
-      struct
-        {
-            int32 options_mask;   /* IN */
-            int32 pixels_per_block;   /* IN */
-            int32 pixels_per_scanline; /* OUT: computed */
-	    int32 bits_per_pixel; /* OUT: size of NT */
-            int32 pixels; /* OUT: size of dataset or chunk */
-         }
-       szip;  /* for szip encoding */
-
-  }
-comp_info;
-
-#endif /* __HCOMP_H */
-
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/hcompi.h b/Utilities/CAI/cai_dll/inc/inc_hdf/hcompi.h
deleted file mode 100755
index 99606c46dc..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/hcompi.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*-----------------------------------------------------------------------------
- * File:    hcompi.h
- * Purpose: Internal library header file for compression information
- * Dependencies: should be included after hdf.h
- * Invokes:
- * Contents:
- * Structure definitions:
- * Constant definitions:
- *---------------------------------------------------------------------------*/
-
-/* avoid re-inclusion */
-#ifndef __HCOMPI_H
-#define __HCOMPI_H
-
-#include "hfile.h"
-
-/* Modeling information */
-
-/* structure for storing modeling information */
-/* only allow modeling and master compression routines access */
-
-#include "mstdio.h"     /* stdio modeling header */
-
-typedef struct comp_model_info_tag
-  {
-      comp_model_t model_type;  /* model this stream is using */
-      union
-        {                       /* union of all the different types of model information */
-            comp_model_stdio_info_t stdio_info;     /* stdio model info */
-        }
-      model_info;
-      funclist_t  model_funcs;  /* functions to perform modeling */
-  }
-comp_model_info_t;
-
-/* Coding information */
-
-/* structure for storing modeling information */
-/* only allow encoding and master compression routines access */
-
-#include "cnone.h"  /* no encoding header */
-#include "crle.h"   /* run-length encoding header */
-#include "cnbit.h"  /* N-bit encoding header */
-#include "cskphuff.h"   /* Skipping huffman encoding header */
-#include "cdeflate.h"   /* gzip 'deflate' encoding header */
-#include "cszip.h"   /* szip encoding header */
-
-typedef struct comp_coder_info_tag
-  {
-      comp_coder_t coder_type;  /* coding scheme this stream is using */
-      union
-        {                       /* union of all the different types of coding information */
-            comp_coder_none_info_t none_info;   /* "None" coding info */
-            comp_coder_rle_info_t rle_info;     /* RLE coding info */
-            comp_coder_nbit_info_t nbit_info;   /* N-bit coding info */
-            comp_coder_skphuff_info_t skphuff_info;     /* Skipping huffman coding info */
-            comp_coder_deflate_info_t deflate_info;   /* gzip 'deflate' coding info */
-	    comp_coder_szip_info_t szip_info;   /* szip coding info */
-
-        }
-      coder_info;
-      funclist_t  coder_funcs;  /* functions to perform encoding */
-  }
-comp_coder_info_t;
-
-/* structure for storing a state */
-typedef struct comp_stateinfo_tag
-  {
-      uint32      d_offset;     /* the offset of the state in the dataset */
-      uint32      c_offset;     /* offset of the state in the compressed data */
-      comp_model_info_t minfo;  /* modeling information */
-      comp_coder_info_t cinfo;  /* coding information */
-  }
-comp_stateinfo_t;
-
-/* structure for storing state caching information */
-typedef struct comp_state_cache_tag
-  {
-      intn        num_states;   /* the number of states cached */
-      comp_stateinfo_t **comp_state;    /* pointer to an array of pointers to
-                                           compression states */
-  }
-comp_state_cache_t;
-
-/* compinfo_t -- compressed element information structure */
-typedef struct compinfo_tag
-  {
-      intn        attached;     /* number of access records attached
-                                   to this information structure */
-      int32       length;       /* the actual length of the data elt */
-      uint16      comp_ref;     /* compressed info ref. number */
-      int32       aid;          /* AID of the compressed info */
-      comp_model_info_t minfo;  /* modeling information */
-      comp_coder_info_t cinfo;  /* coding information */
-      intn        caching;      /* whether caching is turned on */
-      comp_state_cache_t sinfo; /* state information for caching */
-  }
-compinfo_t;
-
-#endif /* __HCOMPI_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/hconv.h b/Utilities/CAI/cai_dll/inc/inc_hdf/hconv.h
deleted file mode 100755
index ec9132441e..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/hconv.h
+++ /dev/null
@@ -1,272 +0,0 @@
-
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*-----------------------------------------------------------------------------
- * File:    hconv.h
- * Purpose: header file for data conversion information & structures
- * Invokes:
- * Contents:
- * Structure definitions:
- * Constant definitions: lots...
- *---------------------------------------------------------------------------*/
-
-/* avoid re-inclusion */
-#ifndef _HCONV_H
-#define _HCONV_H
-
-#ifndef VMS
-#define DUFF
-#else
-#ifdef DUFF
-#undef DUFF
-#endif
-#endif
-#ifdef DUFF
-#define DUFF_sb4b
-
-#define DUFF_ui2i
-#define DUFF_ui2s
-#define DUFF_uo2i
-#define DUFF_ui4i
-#define DUFF_ui4s
-#define DUFF_uo4i
-#define DUFF_ui4f
-#define DUFF_uo4f
-#define DUFF_ui8f
-#define DUFF_uo8f
-
-#define DUFF_lui2i
-#define DUFF_lui2s
-#define DUFF_luo2i
-#define DUFF_lui4i
-#define DUFF_lui4s
-#define DUFF_luo4i
-#define DUFF_lui4f
-#define DUFF_luo4f
-#define DUFF_lui8f
-#define DUFF_luo8f
-#endif
-
-/*****************************************************************************/
-/* CONSTANT DEFINITIONS                                                      */
-/*****************************************************************************/
-/* Generally Big-Endian machines */
-#if !defined(VMS) && !defined(INTEL86) && !defined(MIPSEL) && !defined(DEC_ALPHA) && !defined(I860) && !defined(SUN386) && !defined(__ia64) && !defined(__x86_64__)
-#   if !defined(UNICOS)
-#       define UI8_IN     DFKnb1b   /* Unsigned Integer, 8 bits */
-#       define UI8_OUT    DFKnb1b
-#   if defined(CRAYMPP)
-#       define SI16_IN    DFKmi2s
-#       define SI16_OUT   DFKmo2b
-#       define UI16_IN    DFKmi2i
-#       define UI16_OUT   DFKmo2b
-#   else
-#       define SI16_IN    DFKnb2b   /* S = Signed */
-#       define SI16_OUT   DFKnb2b
-#       define UI16_IN    DFKnb2b
-#       define UI16_OUT   DFKnb2b
-#   endif
-#       define SI32_IN    DFKnb4b
-#       define SI32_OUT   DFKnb4b
-#       define UI32_IN    DFKnb4b
-#       define UI32_OUT   DFKnb4b
-#   if defined(CONVEXNATIVE)
-#       define F32_IN     DFKci4f   /* CONVEX stuff */
-#       define F32_OUT    DFKco4f
-#       define F64_IN     DFKci8f
-#       define F64_OUT    DFKco8f
-#   elif defined(VP)
-#       define F32_IN     DFKpi4f   /* Fujitsu VP stuff */
-#       define F32_OUT    DFKpo4f
-#       define F64_IN     DFKpi8f
-#       define F64_OUT    DFKpo8f
-#   else    /* !CONVEXNATIVE */
-#       define F32_IN     DFKnb4b   /* Float, 32 bits */
-#       define F32_OUT    DFKnb4b
-#       define F64_IN     DFKnb8b
-#       define F64_OUT    DFKnb8b
-#   endif   /* CONVEXNATIVE */
-
-#       define LUI8_IN    DFKnb1b   /* Little Endian Unsigned Integer, 8 bits */
-#       define LUI8_OUT   DFKnb1b
-#   if defined(CRAYMPP)
-#       define LSI16_IN   DFKlmi2s
-#       define LSI16_OUT  DFKlmo2b
-#       define LUI16_IN   DFKlmi2i
-#       define LUI16_OUT  DFKlmo2b
-#   else
-#       define LSI16_IN   DFKsb2b
-#       define LSI16_OUT  DFKsb2b
-#       define LUI16_IN   DFKsb2b
-#       define LUI16_OUT  DFKsb2b
-#   endif
-#       define LSI32_IN   DFKsb4b
-#       define LSI32_OUT  DFKsb4b
-#       define LUI32_IN   DFKsb4b
-#       define LUI32_OUT  DFKsb4b
-#       if defined(CONVEXNATIVE)
-#           define LF32_IN  DFKlci4f    /* CONVEX little-endian routines */
-#           define LF32_OUT DFKlco4f
-#           define LF64_IN  DFKlci8f
-#           define LF64_OUT DFKlco8f
-#       elif defined(VP)
-#           define LF32_IN   DFKlpi4f   /* Fujitsu VP little-endian routines */
-#           define LF32_OUT  DFKlpo4f
-#           define LF64_IN   DFKlpi8f
-#           define LF64_OUT  DFKlpo8f
-#       else    /* !CONVEXNATIVE */
-#           define LF32_IN  DFKsb4b
-#           define LF32_OUT DFKsb4b
-#           define LF64_IN  DFKsb8b
-#           define LF64_OUT DFKsb8b
-#       endif   /* CONVEXNATIVE */
-
-#   else    /* UNICOS */
-#       define UI8_IN     DFKnb1b   /* Big-Endian IEEE support */
-#       define UI8_OUT    DFKnb1b
-#       define SI16_IN    DFKui2s
-#       define SI16_OUT   DFKuo2s
-#       define UI16_IN    DFKui2i
-#       define UI16_OUT   DFKuo2i
-#       define SI32_IN    DFKui4s
-#       define SI32_OUT   DFKuo4s
-#       define UI32_IN    DFKui4i
-#       define UI32_OUT   DFKuo4i
-#       define F32_IN     DFKui4f
-#       define F32_OUT    DFKuo4f
-#       define F64_IN     DFKui8f
-#       define F64_OUT    DFKuo8f
-
-#       define LUI8_IN    DFKnb1b   /* Little-endian IEEE support */
-#       define LUI8_OUT   DFKnb1b
-#       define LSI16_IN   DFKlui2s
-#       define LSI16_OUT  DFKluo2s
-#       define LUI16_IN   DFKlui2i
-#       define LUI16_OUT  DFKluo2i
-#       define LSI32_IN   DFKlui4s
-#       define LSI32_OUT  DFKluo4s
-#       define LUI32_IN   DFKlui4i
-#       define LUI32_OUT  DFKluo4i
-#       define LF32_IN    DFKlui4f
-#       define LF32_OUT   DFKluo4f
-#       define LF64_IN    DFKlui8f
-#       define LF64_OUT   DFKluo8f
-
-#   endif   /* !UNICOS */
-#else  /* must be VMS || INTEL86 || MIPSEL || DEC_ALPHA || I860 || SUN386 || IA64 || Linux64 (Generally, little-endian machines */
-#   define UI8_IN     DFKnb1b   /* Big-Endian IEEE support */
-#   define UI8_OUT    DFKnb1b   /* The s in DFKsb2b is for swap */
-#   define SI16_IN    DFKsb2b
-#   define SI16_OUT   DFKsb2b
-#   define UI16_IN    DFKsb2b
-#   define UI16_OUT   DFKsb2b
-#   define SI32_IN    DFKsb4b
-#   define SI32_OUT   DFKsb4b
-#   define UI32_IN    DFKsb4b
-#   define UI32_OUT   DFKsb4b
-#   if defined(VMS)
-#       define F32_IN     DFKvi4f
-#       define F32_OUT    DFKvo4f
-#       define F64_IN     DFKvi8f
-#       define F64_OUT    DFKvo8f
-#   else    /* !VMS */
-#       define F32_IN     DFKsb4b
-#       define F32_OUT    DFKsb4b
-#       define F64_IN     DFKsb8b
-#       define F64_OUT    DFKsb8b
-#   endif   /* VMS */
-
-#   define LUI8_IN    DFKnb1b   /* Little-Endian IEEE support */
-#   define LUI8_OUT   DFKnb1b
-#   define LSI16_IN   DFKnb2b
-#   define LSI16_OUT  DFKnb2b
-#   define LUI16_IN   DFKnb2b
-#   define LUI16_OUT  DFKnb2b
-#   define LSI32_IN   DFKnb4b
-#   define LSI32_OUT  DFKnb4b
-#   define LUI32_IN   DFKnb4b
-#   define LUI32_OUT  DFKnb4b
-#   if defined(VMS)
-#       define LF32_IN     DFKlvi4f
-#       define LF32_OUT    DFKlvo4f
-#       define LF64_IN     DFKlvi8f
-#       define LF64_OUT    DFKlvo8f
-#   else    /* !VMS */
-#       define LF32_IN    DFKnb4b
-#       define LF32_OUT   DFKnb4b
-#       define LF64_IN    DFKnb8b
-#       define LF64_OUT   DFKnb8b
-#   endif   /* VMS */
-
-#endif /* !VMS && !INTEL86 && !MIPS && !DEC_ALPHA && !I860 && !SUN386 && !IA64 && !Linux64*/
-
-/* All Machines (except the Cray) currently use the same routines */
-/* for Native mode "conversions" */
-#ifndef UNICOS
-#     define NUI8_IN    DFKnb1b
-#     define NUI8_OUT   DFKnb1b
-#   if defined(CRAYMPP)
-#     define NSI16_IN   DFKmi2s
-#     define NSI16_OUT  DFKmo2b
-#     define NUI16_IN   DFKmi2i
-#     define NUI16_OUT  DFKmo2b
-#   else
-#     define NSI16_IN   DFKnb2b
-#     define NSI16_OUT  DFKnb2b
-#     define NUI16_IN   DFKnb2b
-#     define NUI16_OUT  DFKnb2b
-#   endif
-#     define NSI32_IN   DFKnb4b
-#     define NSI32_OUT  DFKnb4b
-#     define NUI32_IN   DFKnb4b
-#     define NUI32_OUT  DFKnb4b
-#     define NF32_IN    DFKnb4b
-#     define NF32_OUT   DFKnb4b
-#     define NF64_IN    DFKnb8b
-#     define NF64_OUT   DFKnb8b
-#else  /* UNICOS */
-#     define NUI8_IN    DFKnb1b
-#     define NUI8_OUT   DFKnb1b
-#     define NSI16_IN   DFKnb8b
-#     define NSI16_OUT  DFKnb8b
-#     define NUI16_IN   DFKnb8b
-#     define NUI16_OUT  DFKnb8b
-#     define NSI32_IN   DFKnb8b
-#     define NSI32_OUT  DFKnb8b
-#     define NUI32_IN   DFKnb8b
-#     define NUI32_OUT  DFKnb8b
-#     define NF32_IN    DFKnb8b
-#     define NF32_OUT   DFKnb8b
-#     define NF64_IN    DFKnb8b
-#     define NF64_OUT   DFKnb8b
-#endif /* UNICOS */
-
-/*****************************************************************************/
-/* STRUCTURE DEFINTIONS                                                      */
-/*****************************************************************************/
-union fpx
-  {
-      float       f;
-      long        l;
-  };
-
-union float_uint_uchar
-  {
-      float32     f;
-      int32       i;
-      unsigned char c[4];
-  };
-
-#endif /* _HCONV_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/hdf2netcdf.h b/Utilities/CAI/cai_dll/inc/inc_hdf/hdf2netcdf.h
deleted file mode 100755
index f0438d2b8e..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/hdf2netcdf.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* $Id$ */
-
-/* If we disable the HDF version of the netCDF API (ncxxx interface)
-   (-DHAVE_NETCDF) we need to rename all the relevant function names 
-   In this version we exclude renaming the netCDF fortran API so 
-   the MFHDF side must be compilied without fortran support. */
-#ifdef HAVE_NETCDF
-#define  HNAME(x)  sd_##x     /* pre-append 'sd_' to all netCDF fcn names */
-#else /* !HAVE_NETCDF i.e USING HDF NETCDF */
-#define  HNAME(x)   x
-#endif /* !HAVE_NETCDF i.e. USING HDF NETCDF */
-
-/* If using the real netCDF library and API (use -DHAVE_NETCDF)
-   need to mangle the HDF versions of netCDF API function names 
-   to not conflict w/ oriinal netCDF ones */
-#ifdef HAVE_NETCDF
-#define ncerr     HNAME(ncerr)
-#define ncopts    HNAME(ncopts)
-#define nccreate  HNAME(nccreate)
-#define ncopen    HNAME(ncopen)
-#define ncredef   HNAME(ncredef)
-#define ncendef   HNAME(ncendef)
-#define ncclose   HNAME(ncclose)
-#define ncinquire HNAME(ncinquire)
-#define ncsync    HNAME(ncsync)
-#define ncabort   HNAME(ncabort)
-#define ncdimdef  HNAME(ncdimdef)
-#define ncdimid   HNAME(ncdimid)
-#define ncdiminq  HNAME(ncdiminq)
-#define ncdimrename HNAME(ncdimrename)
-#define ncvardef  HNAME(ncvardef)
-#define ncvarid   HNAME(ncvarid)
-#define ncvarinq  HNAME(ncvarinq)
-#define ncvarput1 HNAME(ncvarput1)
-#define ncvarget1 HNAME(ncvarget1)
-#define ncvarput  HNAME(ncvarput)
-#define ncvarget  HNAME(ncvarget)
-#define ncvarputs HNAME(ncvarputs)
-#define ncvargets HNAME(ncvargets)
-#define ncvarputg HNAME(ncvarputg)
-#define ncvargetg HNAME(ncvargetg)
-#define ncvarrename HNAME(ncvarrename)
-#define ncattput  HNAME(ncattput)
-#define ncattinq  HNAME(ncattinq)
-#define ncattget  HNAME(ncattget)
-#define ncattcopy HNAME(ncattcopy)
-#define ncattname HNAME(ncattname)
-#define ncattrename HNAME(ncattrename)
-#define ncattdel  HNAME(ncattdel)
-#define nctypelen HNAME(nctypelen)
-#define ncsetfill HNAME(ncsetfill)
-#define ncrecinq  HNAME(ncrecinq)
-#define ncrecget  HNAME(ncrecget)
-#define ncrecput  HNAME(ncrecput)
-#define ncnobuf   HNAME(ncnobuf) /* no prototype for this one */
-#endif /* HAVE_NETCDF i.e NOT USING HDF version of netCDF API */ 
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/herr.h b/Utilities/CAI/cai_dll/inc/inc_hdf/herr.h
deleted file mode 100755
index 93d983d06f..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/herr.h
+++ /dev/null
@@ -1,457 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*+ herr.h
-   ***  header file for using error routines
-   *** to be included by all ".c" files
-   + */
-
-#ifndef __HERR_H
-#define __HERR_H
-
-/* if these symbols are not provided by the compiler, we'll have to
-   fake them.  These are used in HERROR for recording location of
-   error in code. */
-
-#ifndef __FILE__
-#   define __FILE__ "File name not supported"
-#endif
-#ifndef __LINE__
-#   define __LINE__ 0
-#endif
-
-/* HERROR macro, used to facilitate error reporting.  Assumes that
-   there's a variable called FUNC which holds the function name.
-   Assume that func and file are both stored in static space, or at
-   least be not corrupted in the meanwhile. */
-
-#define HERROR(e) HEpush(e, FUNC, __FILE__, __LINE__)
-
-/* HRETURN_ERROR macro, used to facilitate error reporting.  Makes
-   same assumptions as HERROR.  IN ADDITION, this macro causes
-   a return from the calling routine */
-
-#define HRETURN_ERROR(err, ret_val) {HERROR(err); return(ret_val);}
-
-/* HCLOSE_RETURN_ERROR macro, used to facilitate error reporting.  Makes
-   same assumptions as HRETURN_ERROR.  IN ADDITION, this macro causes
-   the file specified by the id "fid" to be closed */
-
-#define HCLOSE_RETURN_ERROR(hfid, err, ret_val) {HERROR(err); Hclose(hfid); \
-                                                return(ret_val);}
-
-/* HGOTO_ERROR macro, used to facilitate error reporting.  Makes
-   same assumptions as HERROR.  IN ADDITION, this macro causes
-   a jump to the label 'done' which should be in every fucntion
-   Also there is an assumption of a variable 'ret_value' */
-
-#define HGOTO_ERROR(err, ret_val) {HERROR(err); ret_value = ret_val; \
-                                   goto done;}
-
-/* HCLOSE_RETURN_ERROR macro, used to facilitate error reporting.  Makes
-   same assumptions as HRETURN_ERROR.  IN ADDITION, this macro causes
-   the file specified by the id "fid" to be closed 
-   Also , this macro causes a jump to the label 'done' which should 
-   be in every fucntion. There is an assumption of a variable 'ret_value' */
-
-#define HCLOSE_GOTO_ERROR(hfid, err, ret_val) {HERROR(err); Hclose(hfid); \
-                                            ret_value = ret_val; goto done;}
-
-/* HGOTO_DONE macro, used to facilitate the new error reporting model.  
-   This macro is just a wrapper to set the return value and jump to the 'done'
-   label.  Also assumption of a variable 'ret_value' */
-
-#define HGOTO_DONE(ret_val) {ret_value = ret_val; goto done;}
-
-/* For further error reporting */
-#define HE_REPORT(msg) HEreport(msg)
-#define HE_REPORT_RETURN(msg, ret_val) { HEreport(msg); return(ret_val); }
-#define HE_CLOSE_REPORT_RETURN(hfid,msg, ret_val) { HEreport(msg); \
-                                                    Hclose(hfid); \
-                                                    return(ret_val);}
-
-#define HE_REPORT_GOTO(msg, ret_val) { HEreport(msg); ret_value = ret_val; \
-                                       goto done;}
-#define HE_CLOSE_REPORT_GOTO(hfid,msg, ret_val) { HEreport(msg); \
-                                                  Hclose(hfid); \
-                                                  ret_value = ret_val; \
-                                                  goto done;}
-
-
-/* always points to the next available slot; the last error record is in slot (top-1) */
-#ifndef _H_ERR_MASTER_
-#if defined WIN32 && defined HDFAPDLL
-__declspec(dllimport)
-#else
-extern
-#endif
-#else
-#if defined WIN32 && defined HDFLIBDLL
-__declspec(dllexport)
-#endif
-#endif /* _H_ERR_MASTER_ */
-int32       error_top
-#ifdef _H_ERR_MASTER_
-= 0
-#endif /* _H_ERR_MASTER_ */
-;
-
-/* Macro to wrap around calls to HEPclear, so it doesn't get called zillions of times */
-#define HEclear() {if(error_top!=0) HEPclear(); }
-
-/*
-   ======================================================================
-   Error codes
-
-   NOTE: Remember to update the error_messages[] structure in herr.c
-   whenever errors are added/deleted from this list.
-   ======================================================================
- */
-/* Declare an enumerated type which holds all the valid HDF error codes */
-typedef enum
-  {
-      DFE_NONE = 0,             /* special zero, no error */
-/* Low-level I/O errors */
-      DFE_FNF,                  /* File not found */
-      DFE_DENIED,               /* Access to file denied */
-      DFE_ALROPEN,              /* File already open */
-      DFE_TOOMANY,              /* Too Many AID's or files open */
-      DFE_BADNAME,              /* Bad file name on open */
-      DFE_BADACC,               /* Bad file access mode */
-      DFE_BADOPEN,              /* Other open error */
-      DFE_NOTOPEN,              /* File can't be closed 'cause it isn't open */
-      DFE_CANTCLOSE,            /* fclose wouldn't work! */
-      DFE_READERROR,            /* There was a read error */
-      DFE_WRITEERROR,           /* There was a write error */
-      DFE_SEEKERROR,            /* There was a seek error */
-      DFE_RDONLY,               /* The DF is read only */
-      DFE_BADSEEK,              /* Attempt to seek past end of element */
-
-/* Low-level HDF I/O errors */
-      DFE_PUTELEM,              /* Hputelement failed in some way */
-      DFE_GETELEM,              /* Hgetelement failed in some way */
-      DFE_CANTLINK,             /* Can't initialize link information */
-      DFE_CANTSYNC,             /* Cannot syncronize memory with file */
-
-/* Old group interface errors */
-      DFE_BADGROUP,             /* Error from DFdiread in opening a group */
-      DFE_GROUPSETUP,           /* Error from DFdisetup in opening a group */
-      DFE_PUTGROUP,             /* Error when putting a tag/ref into a group */
-      DFE_GROUPWRITE,           /* Error when writing out a group */
-
-/* Internal HDF errors */
-      DFE_DFNULL,               /* DF is a null pointer */
-      DFE_ILLTYPE,              /* DF has an illegal type: internal error */
-      DFE_BADDDLIST,            /* The DD list is non-existent: internal error */
-      DFE_NOTDFFILE,            /* This is not a DF file and it is not 0 length */
-      DFE_SEEDTWICE,            /* The DD list already seeded: internal error */
-      DFE_NOSUCHTAG,            /* No such tag in the file: search failed */
-      DFE_NOFREEDD,             /* There are no free DD's left: internal error */
-      DFE_BADTAG,               /* illegal WILDCARD tag */
-      DFE_BADREF,               /* illegal WILDCARD reference # */
-      DFE_NOMATCH,              /* No (more) DDs which match specified tag/ref */
-      DFE_NOTINSET,             /* Warning: Set contained unknown tag: ignored */
-      DFE_BADOFFSET,            /* Illegal offset specified */
-      DFE_CORRUPT,              /* File is corrupted */
-      DFE_NOREF,                /* no more reference numbers are available */
-      DFE_DUPDD,                /* the new tag/ref is already used */
-      DFE_CANTMOD,              /* old element not exist, cannot modify */
-      DFE_DIFFFILES,            /* Attempt to merge objs in diff files */
-      DFE_BADAID,               /* Got a bogus aid */
-      DFE_OPENAID,              /* There are still active AIDs */
-      DFE_CANTFLUSH,            /* Can't flush DD back to file */
-      DFE_CANTUPDATE,           /* Cannot update the DD block */
-      DFE_CANTHASH,             /* Cannot add a DD to the hash table */
-      DFE_CANTDELDD,            /* Cannot delete a DD in the file */
-      DFE_CANTDELHASH,          /* Cannot delete a DD from the hash table */
-      DFE_CANTACCESS,           /* Cannot access specified tag/ref */
-      DFE_CANTENDACCESS,        /* Cannot end access to data element */
-      DFE_TABLEFULL,            /* Access table is full */
-      DFE_NOTINTABLE,           /* Cannot find element in table */
-
-/* Generic errors */
-      DFE_UNSUPPORTED,          /* Feature not currently supported */
-      DFE_NOSPACE,              /* Malloc failed */
-      DFE_BADCALL,              /* Calls in wrong order */
-      DFE_BADPTR,               /* NULL ptr argument */
-      DFE_BADLEN,               /* Invalid len specified */
-      DFE_NOTENOUGH,            /* space provided insufficient for size of data */
-      DFE_NOVALS,               /* Values not available */
-      DFE_ARGS,                 /* bad arguments to routine */
-      DFE_INTERNAL,             /* serious internal error */
-      DFE_NORESET,              /* Too late to modify this value */
-      DFE_GENAPP,               /* Generic application,level error */
-
-/* Generic interface errors */
-      DFE_UNINIT,               /* Interface was not initialized correctly */
-      DFE_CANTINIT,             /* Can't initialize an interface we depend on */
-      DFE_CANTSHUTDOWN,         /* Can't shut down an interface we depend on */
-
-/* General Dataset errors */
-      DFE_BADDIM,               /* negative or zero dimensions specified */
-      DFE_BADFP,                /* File contained an illegal floating point num */
-      DFE_BADDATATYPE,          /* unknown or unavailable data type specified */
-      DFE_BADMCTYPE,            /* unknown or unavailable machine type specified */
-      DFE_BADNUMTYPE,           /* unknown or unavailable number type specified */
-      DFE_BADORDER,             /* unknown or illegal array order specified */
-      DFE_RANGE,                /* improper range for attempted acess */
-      DFE_BADCONV,              /* Don't know how to convert data type */
-      DFE_BADTYPE,              /* Incompatible types specified */
-
-/* Compression errors */
-      DFE_BADSCHEME,            /* Unknown compression scheme specified */
-      DFE_BADMODEL,             /* Invalid compression model specified */
-      DFE_BADCODER,             /* Invalid compression encoder specified */
-      DFE_MODEL,                /* Error in modeling layer of compression */
-      DFE_CODER,                /* Error in encoding layer of compression */
-      DFE_CINIT,                /* Error in encoding initialization */
-      DFE_CDECODE,              /* Error in decoding compressed data */
-      DFE_CENCODE,              /* Error in encoding compressed data */
-      DFE_CTERM,                /* Error in encoding termination */
-      DFE_CSEEK,                /* Error seekging in encoded dataset */
-      DFE_MINIT,                /* Error in modeling initialization */
-      DFE_COMPINFO,             /* Invalid compression header */
-      DFE_CANTCOMP,             /* Can't compress an object */
-      DFE_CANTDECOMP,           /* Can't de-compress an object */
-      DFE_NOENCODER,            /* Encoder not available */
-
-/* Raster errors */
-      DFE_NODIM,                /* No dimension record associated with image */
-      DFE_BADRIG,               /* Error processing a RIG */
-      DFE_RINOTFOUND,           /* Can't find raster image */
-      DFE_BADATTR,              /* Bad Attribute */
-      DFE_LUTNOTFOUND,          /* No palette information for RIG */
-
-/* SDG/NDG errors */
-      DFE_BADTABLE,             /* the nsdg table is wrong */
-      DFE_BADSDG,               /* error processing an sdg */
-      DFE_BADNDG,               /* error processing an ndg */
-
-/* Vset errors */
-      DFE_VGSIZE,               /* Too many elements in VGroup */
-      DFE_VTAB,                 /* Elmt not in vtab[] */
-      DFE_CANTADDELEM,          /* Cannot add tag/ref to VGroup */
-      DFE_BADVGNAME,            /* Cannot set VGroup name */
-      DFE_BADVGCLASS,           /* Cannot set VGroup class */
-
-/* Vdata errors */
-      DFE_BADFIELDS,            /* Bad fields string passed to Vset routine */
-      DFE_NOVS,                 /* Counldn't find VS in file */
-      DFE_SYMSIZE,              /* Too many symbols in users table */
-      DFE_BADATTACH,            /* Cannot write to a previously attached VData */
-      DFE_BADVSNAME,            /* Cannot set VData name */
-      DFE_BADVSCLASS,           /* Cannot set VData class */
-      DFE_VSWRITE,              /* Error writing to VData */
-      DFE_VSREAD,               /* Error reading from VData */
-      DFE_BADVH,                /* Error in VData Header */
-      DFE_FIELDSSET,            /* Fields already set for vdata */
-/* High-level Vdata/Vset errors */
-      DFE_VSCANTCREATE,         /* Cannot create VData */
-      DFE_VGCANTCREATE,         /* Cannot create VGroup */
-
-/* Generic Vdata/Vset errors */
-      DFE_CANTATTACH,           /* Cannot attach to a VData/Vset */
-      DFE_CANTDETACH,           /* Cannot detach a VData/Vset with access 'w' */
-
-/* bit I/O errors */
-      DFE_BITREAD,              /* There was a bit-read error */
-      DFE_BITWRITE,             /* There was a bit-write error */
-      DFE_BITSEEK,              /* There was a bit-seek error */
-
-/* tbbt interface errors */
-      DFE_TBBTINS,              /* Failed to insert element into tree */
-
-/* bit-vector interface errors */
-      DFE_BVNEW,                /* Failed to create a bit-vector */
-      DFE_BVSET,                /* Failed when setting a bit in a bit-vector */
-      DFE_BVGET,                /* Failed when getting a bit in a bit-vector */
-      DFE_BVFIND                /* Failed when finding a bit in a bit-vector */
-  }
-hdf_err_code_t;
-
-#ifdef _H_ERR_MASTER_
-
-/* error_messages is the list of error messages in the system, kept as
-   error_code-message pairs.  To look up a message, a linear search is
-   required but efficiency should be okay. */
-
-typedef struct error_messages_t
-  {
-      hdf_err_code_t error_code;
-      const char *str;
-  }
-error_messages_t;
-
-PRIVATE const struct error_messages_t error_messages[] =
-{
-    {DFE_NONE,          "No error"},
-/* Low-level I/O errors */
-    {DFE_FNF,           "File not found"},
-    {DFE_DENIED,        "Access to file denied"},
-    {DFE_ALROPEN,       "File already open"},
-    {DFE_TOOMANY,       "Too Many AID's or files open"},
-    {DFE_BADNAME,       "Bad file name on open"},
-    {DFE_BADACC,        "Bad file access mode"},
-    {DFE_BADOPEN,       "Error opening file"},
-    {DFE_NOTOPEN,       "File can't be closed; It isn't open"},
-    {DFE_CANTCLOSE,     "Unable to close file"},
-    {DFE_READERROR,     "Read error"},
-    {DFE_WRITEERROR,    "Write error"},
-    {DFE_SEEKERROR,     "Error performing seek operation"},
-    {DFE_RDONLY,        "Attempt to write to read-only HDF file"},
-    {DFE_BADSEEK,       "Attempt to seek past end of element"},
-
-/* Low-level HDF I/O errors */
-    {DFE_PUTELEM,       "Hputelement failed in some way"},
-    {DFE_GETELEM,       "Hgetelement failed in some way"},
-    {DFE_CANTLINK,      "Can't initialize link information"},
-    {DFE_CANTSYNC,      "Cannot syncronize memory with file"},
-
-/* Old group interface errors */
-    {DFE_BADGROUP,      "Error from DFdiread in opening a group"},
-    {DFE_GROUPSETUP,    "Error from DFdisetup in opening a group"},
-    {DFE_PUTGROUP,      "Error when putting a tag/ref into a group"},
-    {DFE_GROUPWRITE,    "Error when writing out a group"},
-
-/* Internal HDF errors */
-    {DFE_DFNULL,        "DF has a null pointer"},
-    {DFE_ILLTYPE,       "Internal error: DF has an illegal type"},
-    {DFE_BADDDLIST,     "Internal error: The DD list is non-existent"},
-    {DFE_NOTDFFILE,     "This is not an HDF file"},
-    {DFE_SEEDTWICE,     "Internal error: The DD list is already seeded"},
-    {DFE_NOSUCHTAG,     "No such tag in the file: search failed"},
-    {DFE_NOFREEDD,      "There are no free DD's left"},
-    {DFE_BADTAG,        "Illegal WILDCARD tag"},
-    {DFE_BADREF,        "Illegal WILDCARD reference"},
-    {DFE_NOMATCH,       "No (more) DDs which match specified tag/ref"},
-    {DFE_NOTINSET,      "Set contained unknown tag: ignored"},
-    {DFE_BADOFFSET,     "Illegal offset specified"},
-    {DFE_CORRUPT,       "File is corrupted"},
-    {DFE_NOREF,         "No more reference numbers are available"},
-    {DFE_DUPDD,         "Tag/ref is already used"},
-    {DFE_CANTMOD,       "Old element does not exist, cannot modify"},
-    {DFE_DIFFFILES,     "Attempt to merge objects in different files"},
-    {DFE_BADAID,        "Unable to create a new AID"},
-    {DFE_OPENAID,       "There are still active AIDs"},
-    {DFE_CANTFLUSH,     "Cannot flush the changed DD back to the file"},
-    {DFE_CANTUPDATE,    "Cannot update the DD block"},
-    {DFE_CANTHASH,      "Cannot add a DD to the hash table"},
-    {DFE_CANTDELDD,     "Cannot delete a DD in the file"},
-    {DFE_CANTDELHASH,   "Cannot delete a DD from the hash table"},
-    {DFE_CANTACCESS,    "Cannot access specified tag/ref"},
-    {DFE_CANTENDACCESS, "Cannot end access to data element"},
-    {DFE_TABLEFULL,     "Access table is full"},
-    {DFE_NOTINTABLE,    "Cannot find element in table"},
-
-/* Generic errors */
-    {DFE_UNSUPPORTED,   "Feature not currently supported"},
-    {DFE_NOSPACE,       "Internal error: Out of space"},
-    {DFE_BADCALL,       "Calls in wrong order"},
-    {DFE_BADPTR,        "NULL ptr argument"},
-    {DFE_BADLEN,        "Invalid length specified"},
-    {DFE_NOTENOUGH,     "Space provided insufficient for size of data"},
-    {DFE_NOVALS,        "Values not available"},
-    {DFE_ARGS,          "Invalid arguments to routine"},
-    {DFE_INTERNAL,      "HDF Internal error"},
-    {DFE_NORESET,       "Can not reset this value"},
-    {DFE_GENAPP,        "Generic application-level error"},
-
-/* Generic interface errors */
-    {DFE_UNINIT,        "Interface was not initialized correctly"},
-    {DFE_CANTINIT,      "Can't initialize an interface we depend on"},
-    {DFE_CANTSHUTDOWN,  "Can't shut down an interface we depend on"},
-
-/* Dataset errors */
-    {DFE_BADDIM,        "Negative or zero dimensions specified"},
-    {DFE_BADFP,         "File contained an illegal floating point number"},
-    {DFE_BADDATATYPE,   "Unknown or unavailable data type specified"},
-    {DFE_BADMCTYPE,     "Unknown or unavailable machine type specified"},
-    {DFE_BADNUMTYPE,    "Unknown or unavailable number type specified"},
-    {DFE_BADORDER,      "Unknown or illegal array order specified"},
-    {DFE_RANGE,         "Improper range for attempted access"},
-    {DFE_BADCONV,       "Don't know how to convert data type"},
-    {DFE_BADTYPE,       "Incompatible type specified"},
-
-/* Compression errors */
-    {DFE_BADSCHEME,     "Unknown compression scheme specified"},
-    {DFE_BADMODEL,      "Invalid compression model specified"},
-    {DFE_BADCODER,      "Invalid compression coder specified"},
-    {DFE_MODEL,         "Error in modeling layer of compression"},
-    {DFE_CODER,         "Error in encoding layer of compression"},
-    {DFE_CINIT,         "Error in encoding initialization"},
-    {DFE_CDECODE,       "Error in decoding compressed data"},
-    {DFE_CENCODE,       "Error in encoding compressed data"},
-    {DFE_CTERM,         "Error in encoding termination"},
-    {DFE_CSEEK,         "Error seeking in encoded dataset"},
-    {DFE_MINIT,         "Error in modeling initialization"},
-    {DFE_COMPINFO,      "Invalid compression header"},
-    {DFE_CANTCOMP,      "Can't compress an object"},
-    {DFE_CANTDECOMP,    "Can't de-compress an object"},
-    {DFE_NOENCODER,     "Encoder not available"},
-
-/* Raster errors */
-    {DFE_NODIM,         "No dimension record associated with image"},
-    {DFE_BADRIG,        "Error processing a RIG"},
-    {DFE_RINOTFOUND,    "Can't find raster image"},
-    {DFE_BADATTR,       "Bad Attribute"},
-    {DFE_LUTNOTFOUND,   "No palette information for RIG"},
-
-/* SDG/NDG errors */
-    {DFE_BADTABLE,      "The nsdg table is wrong"},
-    {DFE_BADSDG,        "Error processing an sdg"},
-    {DFE_BADNDG,        "Error processing an ndg"},
-
-/* Vset errors */
-    {DFE_VGSIZE,        "No more elements will fit in this VGroup"},
-    {DFE_VTAB,          "Element is not in VSet tables"},
-    {DFE_CANTADDELEM,   "Cannot add tag/ref to VGroup"},
-    {DFE_BADVGNAME,     "Cannot set VGroup name"},
-    {DFE_BADVGCLASS,    "Cannot set VGroup class"},
-
-/* Vdata errors */
-    {DFE_BADFIELDS,     "Unable to parse fields string correctly"},
-    {DFE_NOVS,          "Could not find specified VS or VG in file"},
-    {DFE_SYMSIZE,       "Too many symbols in table"},
-    {DFE_BADATTACH,     "Cannot write to a previously attached VData"},
-    {DFE_BADVSNAME,     "Cannot set VData name"},
-    {DFE_BADVSCLASS,    "Cannot set VData class"},
-    {DFE_VSWRITE,       "Error writing to VData"},
-    {DFE_VSREAD,        "Error reading from VData"},
-    {DFE_FIELDSSET,     "Fields already set for vdata"},
-
-/* High-level Vdata/Vset errors */
-    {DFE_VSCANTCREATE,  "Cannot create VData"},
-    {DFE_VGCANTCREATE,  "Cannot create VGroup"},
-
-/* Generic Vdata/Vset errors */
-    {DFE_CANTATTACH,    "Cannot attach to a VData"},
-    {DFE_CANTDETACH,    "Cannot detach a VData with access 'w'"},
-
-/* bit I/O errors */
-    {DFE_BITREAD,       "There was a bit-read error"},
-    {DFE_BITWRITE,      "There was a bit-write error"},
-    {DFE_BITSEEK,       "There was a bit-seek error"},
-
-/* tbbt interface errors */
-    {DFE_TBBTINS,       "Failed to insert element into tree"},
-
-/* bit-vector interface errors */
-    {DFE_BVNEW,         "Failed to create a bit-vector"},
-    {DFE_BVSET,         "Failed when setting a bit in a bit-vector"},
-    {DFE_BVGET,         "Failed when getting a bit in a bit-vector"},
-    {DFE_BVFIND,        "Failed when finding a bit in a bit-vector"}
-};
-#endif /* _H_ERR_MASTER_ */
-
-#endif /* __HERR_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/hfile.h b/Utilities/CAI/cai_dll/inc/inc_hdf/hfile.h
deleted file mode 100755
index ad7f25e933..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/hfile.h
+++ /dev/null
@@ -1,1015 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*+ hfile.h
-   *** Header for hfile.c, routines for low level data element I/O
-   + */
-
-#ifndef HFILE_H
-#define HFILE_H
-
-#include "tbbt.h"
-#include "bitvect.h"
-#include "atom.h"
-#include "linklist.h"
-#include "dynarray.h"
-
-/* Magic cookie for HDF data files */
-#define MAGICLEN 4  /* length */
-#define HDFMAGIC "\016\003\023\001"     /* ^N^C^S^A */
-
-/* sizes of elements in a file.  This is necessary because
-   the size of variables need not be the same as in the file
-   (cannot use sizeof) */
-#define DD_SZ 12    /* 2+2+4+4 */
-#define NDDS_SZ 2
-#define OFFSET_SZ 4
-
-/* invalid offset & length to indicate a partially defined element 
-* written to the HDF file i.e. can handle the case where the the
-* element is defined but not written out */
-#define INVALID_OFFSET -1
-#define INVALID_LENGTH -1
-
-
-/* ----------------------------- Version Tags ----------------------------- */
-/* Library version numbers */
-
-#define LIBVER_MAJOR    4
-#define LIBVER_MINOR    2 
-#define LIBVER_RELEASE  1 
-#define LIBVER_STRING   "NCSA HDF Version 4.2 Release 1, February 17, 2005"
-#define LIBVSTR_LEN    80   /* length of version string  */
-#define LIBVER_LEN  92      /* 4+4+4+80 = 92 */
-/* end of version tags */
-
-/* -------------------------- File I/O Functions -------------------------- */
-/* FILELIB -- file library to use for file access: 1 stdio, 2 fcntl
-   default to stdio library i.e. UNIX buffered I/O */
-
-#ifndef FILELIB
-#   define FILELIB UNIXBUFIO    /* UNIX buffered I/O is the default */
-#endif /* FILELIB */
-
-#if (FILELIB == UNIXBUFIO)
-/* using C buffered file I/O routines to access files */
-#include <stdio.h>
-typedef FILE *hdf_file_t;
-#ifdef VMS
-/* For VMS, use "mbc=64" to improve performance     */
-#   define HI_OPEN(p, a)       (((a) & DFACC_WRITE) ? \
-                                fopen((p), "r+", "mbc=64") : \
-                                fopen((p), "r", "mbc=64"))
-#   define HI_CREATE(p)        (fopen((p), "w+", "mbc=64"))
-#else  /*  !VMS  */
-#if defined SUN && defined (__GNUC__)
-#   define HI_OPEN(p, a)       (((a) & DFACC_WRITE) ? \
-                                fopen((p), "r+") : fopen((p), "r"))
-#   define HI_CREATE(p)        (fopen((p), "w+"))
-#else /* !SUN w/ GNU CC */
-#   define HI_OPEN(p, a)       (((a) & DFACC_WRITE) ? \
-                                fopen((p), "rb+") : fopen((p), "rb"))
-#   define HI_CREATE(p)        (fopen((p), "wb+"))
-#endif /* !SUN w/ GNU CC */
-#endif /* VMS */
-#   define HI_READ(f, b, n)    (((size_t)(n) == (size_t)fread((b), 1, (size_t)(n), (f))) ? \
-                                SUCCEED : FAIL)
-#   define HI_WRITE(f, b, n)   (((size_t)(n) == (size_t)fwrite((b), 1, (size_t)(n), (f))) ? \
-                                SUCCEED : FAIL)
-#   define HI_CLOSE(f)   (fclose(f))
-#   define HI_FLUSH(f)   (fflush(f)==0 ? SUCCEED : FAIL)
-#   define HI_SEEK(f,o)  (fseek((f), (long)(o), SEEK_SET)==0 ? SUCCEED : FAIL)
-#   define HI_SEEK_CUR(f,o)  (fseek((f), (long)(o), SEEK_CUR)==0 ? SUCCEED : FAIL)
-#   define HI_SEEKEND(f) (fseek((f), (long)0, SEEK_END)==0 ? SUCCEED : FAIL)
-#   define HI_TELL(f)    (ftell(f))
-#   define OPENERR(f)    ((f) == (FILE *)NULL)
-#endif /* FILELIB == UNIXBUFIO */
-
-#if (FILELIB == UNIXUNBUFIO)
-/* using UNIX unbuffered file I/O routines to access files */
-typedef int hdf_file_t;
-#   define HI_OPEN(p, a)       (((a) & DFACC_WRITE) ? \
-                                    open((p), O_RDWR) : open((p), O_RDONLY))
-#   define HI_CREATE(p)         (open((p), O_RDWR | O_CREAT | O_TRUNC, 0666))
-#   define HI_CLOSE(f)          (close(f))
-#   define HI_FLUSH(f)          (SUCCEED)
-#   define HI_READ(f, b, n)     (((n)==read((f), (char *)(b), (n))) ? SUCCEED : FAIL)
-#   define HI_WRITE(f, b, n)    (((n)==write((f), (char *)(b), (n))) ? SUCCEED : FAIL)
-#   define HI_SEEK(f, o)        (lseek((f), (off_t)(o), SEEK_SET)!=(-1) ? SUCCEED : FAIL)
-#   define HI_SEEKEND(f)        (lseek((f), (off_t)0, SEEK_END)!=(-1) ? SUCCEED : FAIL)
-#   define HI_TELL(f)           (lseek((f), (off_t)0, SEEK_CUR))
-#   define OPENERR(f)           (f < 0)
-#endif /* FILELIB == UNIXUNBUFIO */
-
-#if (FILELIB == MACIO)
-/* using special routines to redirect to Mac Toolkit I/O */
-typedef short hdf_file_t;
-#   define HI_OPEN(x,y)         mopen(x,y)
-#   define HI_CREATE(name)      mopen(name, DFACC_CREATE)
-#   define HI_CLOSE(x)          mclose(x)
-#   define HI_FLUSH(a)          (SUCCEED)
-#   define HI_READ(a,b,c)       mread(a, (char *) b, (int32) c)
-#   define HI_WRITE(a,b,c)      mwrite(a, (char *) b, (int32) c)
-#   define HI_SEEK(x,y)         mlseek(x, (int32 )y, 0)
-#   define HI_SEEKEND(x)        mlseek(x, 0L, 2)
-#   define HI_TELL(x)           mlseek(x,0L,1)
-#   define DF_OPENERR(f)        ((f) == -1)
-#   define OPENERR(f)           (f < 0)
-#endif /* FILELIB == MACIO */
-
-#ifdef NOT_USED     /* Deprecated routines, not supported any more */
-#if (FILELIB == PCIO)
-/* using special PC functions to enable reading/writing large chunks */
-typedef FILE *hdf_file_t;
-#   define HI_OPEN(p, a)       (((a) & DFACC_WRITE) ? \
-                                fopen((p), "rb+") : fopen((p), "rb"))
-#   define HI_CREATE(p)        (fopen((p), "wb+"))
-/* Alias the HI_READ and HI_WRITE macros to functions which can handle */
-/*  32-bits of data to read/write */
-#   define HI_READ(f, b, n)    (((int32)(n) == HDfreadbig((b), (n), (f))) ? \
-                                SUCCEED : FAIL)
-#   define HI_WRITE(f, b, n)   (((int32)(n) == HDfwritebig((b), (n), (f))) ? \
-                                SUCCEED : FAIL)
-#   define HI_CLOSE(f)          (fclose(f))
-#   define HI_FLUSH(f)          (fflush(f)==0 ? SUCCEED : FAIL)
-#   define HI_SEEK(f,o)  (fseek((f), (long)(o), SEEK_SET)==0 ? SUCCEED : FAIL)
-#   define HI_SEEKEND(f) (fseek((f), (long)0, SEEK_END)==0 ? SUCCEED : FAIL)
-#   define HI_TELL(f)           (ftell(f))
-#   define OPENERR(f)           ((f) == (FILE *)NULL)
-#endif /* FILELIB == PCIO */
-
-#if (FILELIB == WINIO)
-/* using special MS Windows functions to enable reading/writing large chunks */
-typedef HFILE hdf_file_t;
-#   define HI_OPEN(p, a)       (((a) & DFACC_WRITE) ? \
-                                _lopen((p), READ_WRITE) : _lopen((p), READ))
-#   define HI_CREATE(p)        (_lcreat((p), 0))
-/* Alias the HI_READ and HI_WRITE macros to functions which can handle */
-/*  32-bits of data to read/write */
-#   define HI_READ(f, b, n)    (((int32)(n) == HDfreadbig((b), (n), (f))) ? \
-                                SUCCEED : FAIL)
-#   define HI_WRITE(f, b, n)   (((int32)(n) == HDfwritebig((b), (n), (f))) ? \
-                                SUCCEED : FAIL)
-#   define HI_CLOSE(f)          (_lclose(f))
-#   define HI_FLUSH(f)          (0)
-#   define HI_SEEK(f, o)        (_llseek((f), (long)(o), SEEK_SET))
-#   define HI_SEEKEND(f)        (_llseek((f), (long)0, SEEK_END))
-#   define HI_TELL(f)           (_llseek((f),0l,SEEK_CUR))
-#   define OPENERR(f)           ((f) == (HFILE)HFILE_ERROR)
-#endif /* FILELIB == WINIO */
-
-#if (FILELIB == WINNTIO)
-/* using special Windows NT functions to enable reading/writing large chunks */
-typedef HFILE hdf_file_t;
-#   define HI_OPEN(p, a)       (((a) & DFACC_WRITE) ? \
-                        _lopen((p), OF_READWRITE) : _lopen((p), OF_READ))
-#   define HI_CREATE(p)        (_lcreat((p), 0))
-#   define HI_READ(f, b, n)    (((int32)(n) == _hread((f), (b), (n))) ? \
-                                SUCCEED : FAIL)
-#   define HI_WRITE(f, b, n)   (((int32)(n) == _hwrite((f), (b), (n))) ? \
-                                SUCCEED : FAIL)
-#   define HI_CLOSE(f) (_lclose(f)==0 ? SUCCEED : FAIL)
-#   define HI_FLUSH(f) (0)
-#   define HI_SEEK(f, o)       (_llseek((f), (long)(o), 0))
-#   define HI_SEEKEND(f) (_llseek((f), (long)0, 2))
-#   define HI_TELL(f)  (_llseek((f),0l,1))
-#   define OPENERR(f)  ((f) == (HFILE)HFILE_ERROR)
-#endif /* FILELIB == WINNTIO */
-#endif /* NOT_USED */
-
-#if (FILELIB == PAGEBUFIO)
-#include "fmpio.h"
-/* using page buffered file I/O routines to access files */
-typedef MPFILE *hdf_file_t;
-#   define HI_OPEN(p, a)        (MPopen((p), (a)))
-#   define HI_CREATE(p)         (MPopen((p), DFACC_CREATE))
-#   define HI_CLOSE(f)          (MPclose(f))
-#   define HI_FLUSH(f)          (MPflush(f))
-#   define HI_READ(f, b, n)     (MPread((f), (char *)(b), (n)))
-#   define HI_WRITE(f, b, n)    (MPwrite((f), (char *)(b), (n)))
-#   define HI_SEEK(f, o)        (MPseek((f), (off_t)(o), SEEK_SET))
-#   define HI_SEEKEND(f)        (MPseek((f), (off_t)0, SEEK_END))
-#   define HI_TELL(f)           (MPseek((f), (off_t)0, SEEK_CUR))
-#   define OPENERR(f)           ((f) == (MPFILE *)NULL)
-#endif /* FILELIB == PAGEBUFIO */
-
-/* ----------------------- Internal Data Structures ----------------------- */
-/* The internal structure used to keep track of the files opened: an
-   array of filerec_t structures, each has a linked list of ddblock_t.
-   Each ddblock_t struct points to an array of dd_t structs. 
-
-   File Header(4 bytes)
-   ===================
-   <--- 32 bits ----->
-   ------------------
-   |HDF magic number |
-   ------------------
-
-   HDF magic number - 0x0e031301 (Hexadecimal)
-
-   Data Descriptor(DD - 12 bytes)
-   ==============================
-   <-  16 bits -> <- 16 bits -> <- 32 bits -> <- 32 bits ->
-   --------------------------------------------------------
-   |    Tag      | reference   |  Offset     |  Length    |
-   |             | number      |             |            |
-   --------------------------------------------------------
-        \____________/
-               V
-        tag/ref (unique data indentifier in file)
-   
-   Tag  -- identifies the type of data, 16 bit unsigned integer whose
-           value ranges from 1 - 65535. Tags are assigned by NCSA.
-           The HDF tag space is divided as follows based on the 2 highest bits:
-
-              00: NCSA reserved ordinary tags
-              01: NCSA reserved special tags(i.e. regular tags made into 
-                                                  linked-block, external, 
-                                                  compressed or chunked.)
-              10, 11: User tags.
-
-           Current tag assingments are:
-           00001 - 32767  - reserved for NCSA use
-                            00001 - 16383 - NCSA regular tags
-                            16384 - 32767 - NCSA special tags
-           32768 - 64999  - user definable
-           65000 - 65535  - reserved for expansion of format
-
-   Refererence number - 16 bit unsigned integer whose assignment is not
-          gauranteed to be consecutive. Provides a way to distinguish 
-          elements with the same tag in the file.
-
-   Offset - Specifies the byte offset of the data element from the 
-            beginning of the file - 32 bit unsigned integer
-
-   Length - Indicates the byte length of the data element
-            32 bit unsigned integer
-
-   Data Descriptor Header(DDH - 6 bytes)
-   ====================================
-   <-  16 bits -> <- 32 bits ->
-   -----------------------------
-   | Block Size  | Next Block  |
-   -----------------------------
-
-   Block Size - Indicates the number of DD's in the DD Block,
-                16 bit unsigned integer value
-   Next Block - Gives the offset of the next DD Block. The last DD Block has
-                a ZERO(0) in the "Next Block" field in the DDH.
-                32 bit unsigned integer value
-
-   Data Descriptor Block(DDB - variable size)
-   ==========================================
-   <- DD Header -> <--------------- DD's --------------------->
-   --------------------------------------------------------...-
-   |Block | Next  | DD | DD | DD | DD | DD | DD | DD | DD |...|
-   |Size  | Block |    |    |    |    |    |    |    |    |   |
-   --------------------------------------------------------...-
-   <-------------------------- DD Block ---------------------->
-
-   Note: default number of DD's in a DD Block is 16
-
-   HDF file layout
-   =============================
-   (one example)
-   ---------------------------------------------------------------------
-   | FH | DD Block | Data | DD Block | Data | DD Block | Data | .....
-   ---------------------------------------------------------------------
- 
-*/
-
-/* record of each data decsriptor */
-typedef struct dd_t
-  {
-      uint16      tag;          /* Tag number of element i.e. type of data */
-      uint16      ref;          /* Reference number of element */
-      int32       length;       /* length of data element */
-      int32       offset;       /* byte offset of data element from */
-      struct ddblock_t *blk;    /* Pointer to the block this dd is in */
-  }                             /* beginning of file */
-dd_t;
-
-/* version tags */
-typedef struct version_t
-  {
-      uint32      majorv;       /* major version number */
-      uint32      minorv;       /* minor version number */
-      uint32      release;      /* release number */
-      char        string[LIBVSTR_LEN + 1];  /* optional text description, len 80+1 */
-      int16       modified;     /* indicates file was modified */
-  }
-version_t;
-
-/* record of a block of data descriptors, mirrors structure of a HDF file.  */
-typedef struct ddblock_t
-  {
-      uintn       dirty;        /* boolean: should this DD block be flushed? */
-      int32       myoffset;     /* offset of this DD block in the file */
-      int16       ndds;         /* number of dd's in this block */
-      int32       nextoffset;   /* offset to the next ddblock in the file */
-      struct filerec_t *frec;   /* Pointer to the filerec this block is in */
-      struct ddblock_t *next;   /* pointer to the next ddblock in memory */
-      struct ddblock_t *prev;   /* Pointer to previous ddblock. */
-      struct dd_t *ddlist;      /* pointer to array of dd's */
-  }
-ddblock_t;
-
-/* Tag tree node structure */
-typedef struct tag_info_str
-  {
-      uint16 tag;       /* tag value for this node */
-      /* Needs to be first in this structure */
-      bv_ptr b;         /* bit-vector to keep track of which refs are used */
-      dynarr_p d;       /* dynarray of the refs for this tag */
-  }tag_info;
-
-/* For determining what the last file operation was */
-typedef enum
-  {
-      H4_OP_UNKNOWN = 0,   /* Don't know what the last operation was (after fopen frex) */
-      H4_OP_SEEK,          /* Last operation was a seek */
-      H4_OP_WRITE,         /* Last operation was a write */
-      H4_OP_READ           /* Last operation was a read */
-  }
-fileop_t;
-
-/* File record structure */
-typedef struct filerec_t
-  {
-      char       *path;         /* name of file */
-      hdf_file_t  file;         /* either file descriptor or pointer */
-      uint16      maxref;       /* highest ref in this file */
-      intn        access;       /* access mode */
-      intn        refcount;     /* reference count / times opened */
-      intn        attach;       /* number of access elts attached */
-      intn        version_set;  /* version tag stuff */
-      version_t   version;      /* file version info */
-
-      /* Seek caching info */
-      int32      f_cur_off;    /* Current location in the file */
-      fileop_t    last_op;      /* the last file operation performed */
-
-      /* DD block caching info */
-      intn        cache;        /* boolean: whether caching is on */
-      intn        dirty;        /* boolean: if dd list needs to be flushed */
-      int32      f_end_off;    /* offset of the end of the file */
-
-      /* DD list pointers */
-      struct ddblock_t *ddhead; /* head of ddblock list */
-      struct ddblock_t *ddlast; /* end of ddblock list */
-
-      /* NULL DD pointers (for fast lookup of DFTAG_NULL) */
-      struct ddblock_t *ddnull; /* location of last ddblock with a DFTAG_NULL */
-      int32       ddnull_idx;   /* offset of the last location with DFTAG_NULL */
-
-      /* tag tree for file */
-      TBBT_TREE *tag_tree;      /* TBBT of the tags in the file */
-
-      /* annotation stuff for file */
-      intn       an_num[4];   /* Holds number of annotations found of each type */
-      TBBT_TREE *an_tree[4];  /* tbbt trees for each type of annotation in file 
-                               * i.e. file/data labels and descriptions.
-                               * This is done for faster searching of annotations
-                               * of a particular type. */
-  }
-filerec_t;
-
-/* bits for filerec_t 'dirty' flag */
-#define DDLIST_DIRTY   0x01     /* mark whether to flush dirty DD blocks */
-#define FILE_END_DIRTY 0x02     /* indicate that the file needs to be extended */
-
-/* Each access element is associated with a tag/ref to keep track of
-   the dd it is pointing at.  To facilitate searching for next dd's,
-   instead of pointing directly to the dd, we point to the ddblock and
-   index into the ddlist of that ddblock. */
-typedef struct accrec_t
-  {
-      /* Flags for this access record */
-      intn        appendable;   /* whether appends to the data are allowed */
-      intn        special;      /* special element ? */
-      intn        new_elem;     /* is a new element (i.e. no length set yet) */
-      int32       block_size;   /* size of the blocks for linked-block element*/
-      int32       num_blocks;   /* number blocks in the linked-block element */
-      uint32      access;       /* access codes */
-      uintn       access_type;  /* I/O access type: serial/parallel/... */
-      int32       file_id;      /* id of attached file */
-      atom_t      ddid;         /* DD id for the DD attached to */
-      int32       posn;         /* seek position with respect to start of element */
-      void *       special_info; /* special element info? */
-      struct funclist_t *special_func;  /* ptr to special function? */
-      struct accrec_t *next;    /* for free-list linking */
-  }
-accrec_t;
-
-#ifdef HFILE_MASTER
-/* Pointer to the access record node free list */
-static accrec_t *accrec_free_list=NULL;
-#endif /* HFILE_MASTER */
-
-/* this type is returned to applications programs or other special
-   interfaces when they need to know information about a given
-   special element.  This is all information that would not be returned
-   via Hinquire().  This should probably be a union of structures. */
-typedef struct sp_info_block_t
-  {
-      int16       key;          /* type of special element this is */
-
-      /* external elements */
-      int32       offset;       /* offset in the file */
-      char       *path;         /* file name - should not be freed by user */
-
-      /* linked blocks */
-      int32       first_len;    /* length of first block */
-      int32       block_len;    /* length of standard block */
-      int32       nblocks;      /* number of blocks per chunk */
-
-      /* compressed elements */
-      int32       comp_type;    /* compression type */
-      int32       model_type;   /* model type */
-      int32       comp_size;    /* size of compressed information */
-
-      /* variable-length linked blocks */
-      int32       min_block;    /* the minimum block size */
-
-    /* Chunked elements */
-      int32       chunk_size;   /* logical size of chunks */
-      int32       ndims;        /* number of dimensions */
-      int32       *cdims;       /* array of chunk lengths for each dimension */
-
-      /* Buffered elements */
-      int32       buf_aid;      /* AID of element buffered */
-  }
-sp_info_block_t;
-
-/* a function table record for accessing special data elements.
-   special data elements of a key could be accessed through the list
-   of functions in array pointed to by tab. */
-typedef struct funclist_t
-  {
-      int32       (*stread) (accrec_t * rec);
-      int32       (*stwrite) (accrec_t * rec);
-      int32       (*seek) (accrec_t * access_rec, int32 offset, intn origin);
-      int32       (*inquire) (accrec_t * access_rec, int32 *pfile_id,
-                                 uint16 *ptag, uint16 *pref, int32 *plength,
-                               int32 *poffset, int32 *pposn, int16 *paccess,
-                                     int16 *pspecial);
-      int32       (*read) (accrec_t * access_rec, int32 length, void * data);
-      int32       (*write) (accrec_t * access_rec, int32 length, const void * data);
-      intn        (*endaccess) (accrec_t * access_rec);
-      int32       (*info) (accrec_t * access_rec, sp_info_block_t * info);
-      int32       (*reset) (accrec_t * access_rec, sp_info_block_t * info);
-  }
-funclist_t;
-
-typedef struct functab_t
-  {
-      int16       key;          /* the key for this type of special elt */
-      funclist_t *tab;          /* table of accessing functions */
-  }
-functab_t;
-
-/* ---------------------- ID Types and Manipulation ----------------------- */
-/* each id, what ever the type, will be represented with a 32-bit word,
-   the most-significant 16 bits is a number unique for type.  The less-
-   significant 16 bits is an id unique to each type; in this, we use the
-   internal slot number. */
-
-#define FIDTYPE   1
-#define AIDTYPE   2
-#define GROUPTYPE 3
-#define SDSTYPE   4
-#define DIMTYPE   5
-#define CDFTYPE   6
-#define VGIDTYPE  8     /* also defined in vg.h for Vgroups */
-#define VSIDTYPE  9     /* also defined in vg.h for Vsets */
-#define BITTYPE   10    /* For bit-accesses */
-#define GRIDTYPE  11    /* for GR access */
-#define RIIDTYPE  12    /* for RI access */
-
-#define BADFREC(r)  ((r)==NULL || (r)->refcount==0)
-
-/* --------------------------- Special Elements --------------------------- */
-/* The HDF tag space is divided as follows based on the 2 highest bits:
-   00: NCSA reserved ordinary tags
-   01: NCSA reserved special tags(e.g. linked-block, external, compressed,..)
-   10, 11: User tags.
-
-   It is relatively cheap to operate with special tags within the NCSA
-   reserved tags range. For users to specify special tags and their
-   corresponding ordinary tag, the pair has to be added to the
-   special_table in hfile.c and SPECIAL_TABLE must be defined. */
-
-#ifdef SPECIAL_TABLE
-#define BASETAG(t)      (HDbase_tag(t))
-#define SPECIALTAG(t)   (HDis_special_tag(t))
-#define MKSPECIALTAG(t) (HDmake_special_tag(t))
-#else
-/* This macro converts a (potentially) special tag into a normal tag */
-#define BASETAG(t)      (uint16)((~(t) & 0x8000) ? ((t) & ~0x4000) : (t))
-/* This macro checks if a tag is special */
-#define SPECIALTAG(t)   (uint16)((~(t) & 0x8000) && ((t) & 0x4000))
-/* This macro (potentially) converts a regular tag into a special tag */
-#define MKSPECIALTAG(t) (uint16)((~(t) & 0x8000) ? ((t) | 0x4000) : DFTAG_NULL)
-#endif /*SPECIAL_TABLE */
-
-/* -------------------------- H-Layer Prototypes -------------------------- */
-/*
-   ** Functions to get information of special elt from other access records.
-   **   defined in hfile.c
-   ** These should really be HD... routines, but they are only used within
-   **   the H-layer...
- */
-
-#if defined c_plusplus || defined __cplusplus
-extern      "C"
-{
-#endif                          /* c_plusplus || __cplusplus */
-
-    HDFLIBAPI accrec_t *HIget_access_rec
-                (void);
-
-    HDFLIBAPI void HIrelease_accrec_node(accrec_t *acc);
-
-    HDFLIBAPI void * HIgetspinfo
-                (accrec_t * access_rec);
-
-    HDFLIBAPI intn HPcompare_filerec_path
-                (const void * obj, const void * key);
-
-    HDFLIBAPI intn HPcompare_accrec_tagref
-                (const void * rec1, const void * rec2);
-
-    HDFLIBAPI int32 HPgetdiskblock
-                (filerec_t * file_rec, int32 block_size, intn moveto);
-
-    HDFLIBAPI intn HPfreediskblock
-                (filerec_t * file_rec, int32 block_offset, int32 block_size);
-
-    HDFLIBAPI int32 HDcheck_empty
-                (int32 file_id, uint16 tag, uint16 ref, intn *emptySDS);
-
-    HDFLIBAPI int32 HDget_special_info
-                (int32 access_id, sp_info_block_t * info_block);
-
-    HDFLIBAPI int32 HDset_special_info
-                (int32 access_id, sp_info_block_t * info_block);
-
-    HDFLIBAPI intn HP_read
-                (filerec_t *file_rec,void * buf,int32 bytes);
-
-    HDFLIBAPI intn HPseek
-                (filerec_t *file_rec,int32 offset);
-
-    HDFLIBAPI intn HP_write
-                (filerec_t *file_rec,const void * buf,int32 bytes);
-
-    HDFLIBAPI intn tagcompare
-                (void * k1, void * k2, intn cmparg);
-
-    HDFLIBAPI VOID tagdestroynode
-                (void * n);
-
-/*
-   ** from hblocks.c
- */
-    HDFLIBAPI int32 HLPstread
-                (accrec_t * access_rec);
-
-    HDFLIBAPI int32 HLPstwrite
-                (accrec_t * access_rec);
-
-    HDFLIBAPI int32 HLPseek
-                (accrec_t * access_rec, int32 offset, int origin);
-
-    HDFLIBAPI int32 HLPread
-                (accrec_t * access_rec, int32 length, void * data);
-
-    HDFLIBAPI int32 HLPwrite
-                (accrec_t * access_rec, int32 length, const void * data);
-
-    HDFLIBAPI int32 HLPinquire
-                (accrec_t * access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref,
-               int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess,
-                 int16 *pspecial);
-
-    HDFLIBAPI intn HLPendaccess
-                (accrec_t * access_rec);
-
-    HDFLIBAPI int32 HLPcloseAID
-                (accrec_t * access_rec);
-
-    HDFLIBAPI int32 HLPinfo
-                (accrec_t * access_rec, sp_info_block_t * info_block);
-
-/*
-   ** from hextelt.c
- */
-    HDFLIBAPI int32 HXPstread
-                (accrec_t * rec);
-
-    HDFLIBAPI int32 HXPstwrite
-                (accrec_t * rec);
-
-    HDFLIBAPI int32 HXPseek
-                (accrec_t * access_rec, int32 offset, int origin);
-
-    HDFLIBAPI int32 HXPread
-                (accrec_t * access_rec, int32 length, void * data);
-
-    HDFLIBAPI int32 HXPwrite
-                (accrec_t * access_rec, int32 length, const void * data);
-
-    HDFLIBAPI int32 HXPinquire
-                (accrec_t * access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref,
-               int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess,
-                 int16 *pspecial);
-
-    HDFLIBAPI intn HXPendaccess
-                (accrec_t * access_rec);
-
-    HDFLIBAPI int32 HXPcloseAID
-                (accrec_t * access_rec);
-
-    HDFLIBAPI int32 HXPinfo
-                (accrec_t * access_rec, sp_info_block_t * info_block);
-
-    HDFLIBAPI int32 HXPreset
-                (accrec_t * access_rec, sp_info_block_t * info_block);
-
-    HDFLIBAPI intn HXPsetaccesstype
-                (accrec_t * access_rec);
-
-    HDFLIBAPI intn HXPshutdown
-                (void);
-
-/*
-   ** from hcomp.c
- */
-
-    HDFLIBAPI int32 HCPstread
-                (accrec_t * rec);
-
-    HDFLIBAPI int32 HCPstwrite
-                (accrec_t * rec);
-
-    HDFLIBAPI int32 HCPseek
-                (accrec_t * access_rec, int32 offset, int origin);
-
-    HDFLIBAPI int32 HCPinquire
-                (accrec_t * access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref,
-               int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess,
-                 int16 *pspecial);
-
-    HDFLIBAPI int32 HCPread
-                (accrec_t * access_rec, int32 length, void * data);
-
-    HDFLIBAPI int32 HCPwrite
-                (accrec_t * access_rec, int32 length, const void * data);
-
-    HDFLIBAPI intn HCPendaccess
-                (accrec_t * access_rec);
-
-    HDFLIBAPI int32 HCPcloseAID
-                (accrec_t * access_rec);
-
-    HDFLIBAPI int32 HCPinfo
-                (accrec_t * access_rec, sp_info_block_t * info_block);
-
-    HDFLIBAPI int32 get_comp_len
-	        (accrec_t* access_rec);
-
-/*
-   ** from hchunks.c - should be the same as found in 'hchunks.h'
- */
-#include "hchunks.h"
-
-#if defined (MAC) || defined (macintosh) || defined (SYMANTEC_C)
-    HDFLIBAPI hdf_file_t mopen
-                (char *filename, intn access);
-
-    HDFLIBAPI int32 mclose
-                (hdf_file_t rn);
-
-    HDFLIBAPI int32 mlseek
-                (hdf_file_t rn, int32 n, intn m);
-
-    HDFLIBAPI int32 mread
-                (hdf_file_t rn, char *buf, int32 n);
-
-    HDFLIBAPI int32 mwrite
-                (hdf_file_t rn, char *buf, int32 n);
-    HDFLIBAPI intn mstat
-                (char *path);
-
-#endif  /* macintosh */
-
-/*
-   ** from hbuffer.c
- */
-
-    HDFLIBAPI int32 HBPstread
-                (accrec_t * rec);
-
-    HDFLIBAPI int32 HBPstwrite
-                (accrec_t * rec);
-
-    HDFLIBAPI int32 HBPseek
-                (accrec_t * access_rec, int32 offset, int origin);
-
-    HDFLIBAPI int32 HBPinquire
-                (accrec_t * access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref,
-               int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess,
-                 int16 *pspecial);
-
-    HDFLIBAPI int32 HBPread
-                (accrec_t * access_rec, int32 length, void * data);
-
-    HDFLIBAPI int32 HBPwrite
-                (accrec_t * access_rec, int32 length, const void * data);
-
-    HDFLIBAPI intn HBPendaccess
-                (accrec_t * access_rec);
-
-    HDFLIBAPI int32 HBPcloseAID
-                (accrec_t * access_rec);
-
-    HDFLIBAPI int32 HBPinfo
-                (accrec_t * access_rec, sp_info_block_t * info_block);
-
-/*
-   ** from hcompri.c
- */
-
-    HDFLIBAPI int32 HRPstread
-                (accrec_t * rec);
-
-    HDFLIBAPI int32 HRPstwrite
-                (accrec_t * rec);
-
-    HDFLIBAPI int32 HRPseek
-                (accrec_t * access_rec, int32 offset, int origin);
-
-    HDFLIBAPI int32 HRPinquire
-                (accrec_t * access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref,
-               int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess,
-                 int16 *pspecial);
-
-    HDFLIBAPI int32 HRPread
-                (accrec_t * access_rec, int32 length, void * data);
-
-    HDFLIBAPI int32 HRPwrite
-                (accrec_t * access_rec, int32 length, const void * data);
-
-    HDFLIBAPI intn HRPendaccess
-                (accrec_t * access_rec);
-
-    HDFLIBAPI int32 HRPcloseAID
-                (accrec_t * access_rec);
-
-    HDFLIBAPI int32 HRPinfo
-                (accrec_t * access_rec, sp_info_block_t * info_block);
-
-/*
-   ** from hfiledd.c
- */
-/******************************************************************************
- NAME
-     HTPstart - Initialize the DD list in memory
-
- DESCRIPTION
-    Reads the DD blocks from disk and creates the in-memory structures for
-    handling them.  This routine should only be called once for a given
-    file and HTPend should be called when finished with the DD list (i.e.
-    when the file is being closed).
-
- RETURNS
-    Returns SUCCEED if successful and FAIL otherwise
-
-*******************************************************************************/
-intn HTPstart(filerec_t *file_rec       /* IN:  File record to store info in */
-);
-
-/******************************************************************************
- NAME
-     HTPinit - Create a new DD list in memory
-
- DESCRIPTION
-    Creates a new DD list in memory for a newly created file.  This routine
-    should only be called once for a given file and HTPend should be called
-    when finished with the DD list (i.e.  when the file is being closed).
-
- RETURNS
-    Returns SUCCEED if successful and FAIL otherwise
-
-*******************************************************************************/
-intn HTPinit(filerec_t *file_rec,       /* IN: File record to store info in */
-    int16 ndds                          /* IN: # of DDs to store in each block */
-);
-
-/******************************************************************************
- NAME
-     HTPsync - Flush the DD list in memory
-
- DESCRIPTION
-    Syncronizes the in-memory copy of the DD list with the copy on disk by
-    writing out the DD blocks which have changed to disk.
-    
- RETURNS
-    Returns SUCCEED if successful and FAIL otherwise
-
-*******************************************************************************/
-intn HTPsync(filerec_t *file_rec       /* IN:  File record to store info in */
-);
-
-/******************************************************************************
- NAME
-     HTPend - Terminate the DD list in memory
-
- DESCRIPTION
-    Terminates access to the DD list in memory, writing the DD blocks out to
-    the disk (if they've changed).  After this routine is called, no further
-    access to tag/refs (or essentially any other HDF objects) can be performed
-    on the file.
-
- RETURNS
-    Returns SUCCEED if successful and FAIL otherwise
-
-*******************************************************************************/
-intn HTPend(filerec_t *file_rec       /* IN:  File record to store info in */
-); 
-
-/******************************************************************************
- NAME
-     HTPcreate - Create (and attach to) a tag/ref pair
-
- DESCRIPTION
-    Creates a new tag/ref pair in memory and inserts the tag/ref pair into the
-    DD list to be written out to disk.  This routine returns a DD id which can
-    be used in the other tag/ref routines to modify the DD.
-
- RETURNS
-    Returns DD id if successful and FAIL otherwise
-
-*******************************************************************************/
-atom_t HTPcreate(filerec_t *file_rec,   /* IN: File record to store info in */
-    uint16 tag,                         /* IN: Tag to create */
-    uint16 ref                          /* IN: ref to create */
-);
-
-/******************************************************************************
- NAME
-     HTPselect - Attach to an existing tag/ref pair
-
- DESCRIPTION
-    Attaches to an existing tag/ref pair.  This routine returns a DD id which
-    can be used in the other tag/ref routines to modify the DD.
-
- RETURNS
-    Returns DD id if successful and FAIL otherwise
-
-*******************************************************************************/
-atom_t HTPselect(filerec_t *file_rec,   /* IN: File record to store info in */
-    uint16 tag,                         /* IN: Tag to select */
-    uint16 ref                          /* IN: ref to select */
-);
-
-/******************************************************************************
- NAME
-     HTPendaccess - End access to an existing tag/ref pair
-
- DESCRIPTION
-    Ends access to an existing tag/ref pair.  Any further access to the tag/ref
-    pair may result in incorrect information being recorded about the DD in
-    memory or on disk.
-
- RETURNS
-    Returns SUCCEED if successful and FAIL otherwise
-
-*******************************************************************************/
-intn HTPendaccess(atom_t ddid           /* IN: DD id to end access to */
-);
-
-/******************************************************************************
- NAME
-     HTPdelete - Delete an existing tag/ref pair
-
- DESCRIPTION
-    Deletes a tag/ref from the file.  Also ends access to the tag/ref pair.
-    Any further access to the tag/ref pair may result in incorrect information
-    being recorded about the DD in memory or on disk.
-
- RETURNS
-    Returns SUCCEED if successful and FAIL otherwise
-
-*******************************************************************************/
-intn HTPdelete(atom_t ddid              /* IN: DD id to delete */
-);
-
-/******************************************************************************
- NAME
-     HTPupdate - Change the offset or length of an existing tag/ref pair
-
- DESCRIPTION
-    Updates a tag/ref in the file, allowing the length and/or offset to be
-    modified. Note: "INVALID_OFFSET" & "INVALID_LENGTH" are used to indicate
-    that the length or offset (respectively) is unchanged.
-
- RETURNS
-    Returns SUCCEED if successful and FAIL otherwise
-
-*******************************************************************************/
-intn HTPupdate(atom_t ddid,             /* IN: DD id to update */
-    int32 new_off,                      /* IN: new offset for DD */
-    int32 new_len                       /* IN: new length for DD */
-);
-
-/******************************************************************************
- NAME
-     HTPinquire - Get the DD information for a DD (i.e. tag/ref/offset/length)
-
- DESCRIPTION
-    Get the DD information for a DD id from the DD block.  Passing NULL for
-    any parameter does not try to update that parameter.
-
- RETURNS
-    Returns SUCCEED if successful and FAIL otherwise
-
-*******************************************************************************/
-intn HTPinquire(atom_t ddid,            /* IN: DD id to inquire about */
-    uint16 *tag,                        /* IN: tag of DD */
-    uint16 *ref,                        /* IN: ref of DD */
-    int32 *off,                         /* IN: offset of DD */
-    int32 *len                          /* IN: length of DD */
-);
-
-/******************************************************************************
- NAME
-     HTPis_special - Check if a DD id is associated with a special tag
-
- DESCRIPTION
-    Checks if the tag for the DD id is a special tag.
-
- RETURNS
-    Returns TRUE(1)/FALSE(0) if successful and FAIL otherwise
-
-*******************************************************************************/
-intn HTPis_special(atom_t ddid             /* IN: DD id to inquire about */
-);
-
-/******************************************************************************
- NAME
-    HTPdump_dds -- Dump out the dd information for a file
-
- DESCRIPTION
-    Prints out all the information (that you could _ever_ want to know) about
-    the dd blocks and dd list for a file.
-
- RETURNS
-    returns SUCCEED (0) if successful and FAIL (-1) if failed.
-
-*******************************************************************************/
-intn HTPdump_dds(int32 file_id,     /* IN: file ID of HDF file to dump info for */
-    FILE *fout                      /* IN: file stream to output to */
-);
-
-#if defined c_plusplus || defined __cplusplus
-}
-#endif                          /* c_plusplus || __cplusplus */
-
-/* #define DISKBLOCK_DEBUG */
-#ifdef DISKBLOCK_DEBUG
-
-#ifndef HFILE_MASTER
-extern
-#endif /* HFILE_MASTER */
-const uint8 diskblock_header[4]
-#ifdef HFILE_MASTER
-={0xde, 0xad, 0xbe, 0xef}
-#endif /* HFILE_MASTER */
-;
-
-#ifndef HFILE_MASTER
-extern
-#endif /* HFILE_MASTER */
-const uint8 diskblock_tail[4]
-#ifdef HFILE_MASTER
-={0xfe, 0xeb, 0xda, 0xed}
-#endif /* HFILE_MASTER */
-;
-#define DISKBLOCK_HSIZE sizeof(diskblock_header)
-#define DISKBLOCK_TSIZE sizeof(diskblock_tail)
-
-#endif /* DISKBLOCK_DEBUG */
-
-#endif                          /* HFILE_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/hkit.h b/Utilities/CAI/cai_dll/inc/inc_hdf/hkit.h
deleted file mode 100755
index bea56f142e..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/hkit.h
+++ /dev/null
@@ -1,171 +0,0 @@
-
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*+ hkit.h
-   ***  private header file for hkit routines
-   + */
-
-#ifndef __HKIT_H
-#include "hdf.h"
-#include "hfile.h"
-
-/* tag_messages is the list of tag descriptions in the system, kept as
-   tag-description pairs.  To look up a description, a linear search is
-   required but efficiency should be okay. */
-typedef struct tag_descript_t
-  {
-      uint16      tag;          /* tag for description ? */
-      const char *desc;         /* tag description ? */
-      const char *name;         /* tag name ? */
-  }
-tag_descript_t;
-
-/* stringizing macro */
-#if defined MIPSEL | defined KNRSUN | defined __SUNPRO_C
-#define string(x) #x
-#else
-#define string(x) "x"
-#endif /* MIPSEL */
-
-/*  NOTE:
- *        Please keep tag descriptions <= 30 characters - a
- *        lot of pretty-printing code depends on it.
- */
-PRIVATE const tag_descript_t tag_descriptions[] =
-{
-/* low-level set */
-    {DFTAG_NULL, string(DFTAG_NULL), "No Data"},
-    {DFTAG_LINKED, string(DFTAG_LINKED), "Linked Blocks Indicator"},
-    {DFTAG_VERSION, string(DFTAG_VERSION), "Version Descriptor"},
-    {DFTAG_COMPRESSED, string(DFTAG_COMPRESSED), "Compressed Data Indicator"},
-    {DFTAG_CHUNK, string(DFTAG_CHUNK), "Data Chunk"},
-
-/* utility set */
-    {DFTAG_FID, string(DFTAG_FID), "File Identifier"},
-    {DFTAG_FD, string(DFTAG_FD), "File Description"},
-    {DFTAG_TID, string(DFTAG_TID), "Tag Identifier"},
-    {DFTAG_TD, string(DFTAG_TD), "Tag Description"},
-    {DFTAG_DIL, string(DFTAG_DIL), "Data Id Label"},
-    {DFTAG_DIA, string(DFTAG_DIA), "Data Id Annotation"},
-    {DFTAG_NT, string(DFTAG_NT), "Number type"},
-    {DFTAG_MT, string(DFTAG_MT), "Machine type"},
-    {DFTAG_FREE, string(DFTAG_FREE), "Free space"},
-
-      /* raster-8 Tags */
-    {DFTAG_ID8, string(DFTAG_ID8), "Image Dimensions-8"},
-    {DFTAG_IP8, string(DFTAG_IP8), "Image Palette-8"},
-    {DFTAG_RI8, string(DFTAG_RI8), "Raster Image-8"},
-    {DFTAG_CI8, string(DFTAG_CI8), "RLE Compressed Image-8"},
-    {DFTAG_II8, string(DFTAG_II8), "Imcomp Image-8"},
-
-      /* Raster Image Tags */
-    {DFTAG_ID, string(DFTAG_ID), "Image Dimensions"},
-    {DFTAG_LUT, string(DFTAG_LUT), "Image Palette"},
-    {DFTAG_RI, string(DFTAG_RI), "Raster Image Data"},
-    {DFTAG_CI, string(DFTAG_CI), "Compressed Image"},
-    {DFTAG_RIG, string(DFTAG_RIG), "Raster Image Group"},
-    {DFTAG_LD, string(DFTAG_LD), "Palette Dimension"},
-    {DFTAG_MD, string(DFTAG_MD), "Matte Dimension"},
-    {DFTAG_MA, string(DFTAG_MA), "Matte Data"},
-    {DFTAG_CCN, string(DFTAG_CCN), "Color Correction"},
-    {DFTAG_CFM, string(DFTAG_CFM), "Color Format"},
-    {DFTAG_AR, string(DFTAG_AR), "Aspect Ratio"},
-    {DFTAG_DRAW, string(DFTAG_DRAW), "Sequenced images"},
-    {DFTAG_RUN, string(DFTAG_RUN), "Runable program / script"},
-    {DFTAG_XYP, string(DFTAG_XYP), "X-Y position"},
-    {DFTAG_MTO, string(DFTAG_MTO), "M/c-Type override"},
-
-      /* Tektronix */
-    {DFTAG_T14, string(DFTAG_T14), "TEK 4014 Data"},
-    {DFTAG_T105, string(DFTAG_T105), "TEK 4105 data"},
-
-      /* Scientific / Numeric Data Sets */
-    {DFTAG_SDG, string(DFTAG_SDG), "Scientific Data Group"},
-    {DFTAG_SDD, string(DFTAG_SDD), "SciData dimension record"},
-    {DFTAG_SD, string(DFTAG_SD), "Scientific Data"},
-    {DFTAG_SDS, string(DFTAG_SDS), "SciData scales"},
-    {DFTAG_SDL, string(DFTAG_SDL), "SciData labels"},
-    {DFTAG_SDU, string(DFTAG_SDU), "SciData units"},
-    {DFTAG_SDF, string(DFTAG_SDF), "SciData formats"},
-    {DFTAG_SDM, string(DFTAG_SDM), "SciData max/min"},
-    {DFTAG_SDC, string(DFTAG_SDC), "SciData coordsys"},
-    {DFTAG_SDT, string(DFTAG_SDT), "Transpose"},
-    {DFTAG_SDLNK, string(DFTAG_SDLNK), "Links related to the dataset"},
-    {DFTAG_NDG, string(DFTAG_NDG), "Numeric Data Group"},
-    {DFTAG_CAL, string(DFTAG_CAL), "Calibration information"},
-    {DFTAG_FV, string(DFTAG_FV), "Fill value information"},
-
-      /* V Group Tags */
-    {DFTAG_VG, string(DFTAG_VG), "Vgroup"},
-    {DFTAG_VH, string(DFTAG_VH), "Vdata"},
-    {DFTAG_VS, string(DFTAG_VS), "Vdata Storage"},
-
-      /* Compression Schemes */
-    {DFTAG_RLE, string(DFTAG_RLE), "Run Length Encoding"},
-    {DFTAG_IMCOMP, string(DFTAG_IMCOMP), "IMCOMP Encoding"},
-    {DFTAG_JPEG, string(DFTAG_JPEG), "24-bit JPEG Encoding"},
-    {DFTAG_GREYJPEG, string(DFTAG_GREYJPEG), "8-bit JPEG Encoding"},
-    {DFTAG_JPEG5, string(DFTAG_JPEG5), "24-bit JPEG Encoding"},
-    {DFTAG_GREYJPEG5, string(DFTAG_GREYJPEG5), "8-bit JPEG Encoding"}
-
-};
-
-/* nt_message is the list of NT descriptions in the system, kept as
-   NT-description pairs.  To look up a description, a linear search is
-   required but efficiency should be okay. */
-typedef struct nt_descript_t
-  {
-      int32       nt;           /* nt for description */
-      const char *name;         /* nt name */
-      const char *desc;         /* nt description */
-  }
-nt_descript_t;
-
-PRIVATE const nt_descript_t nt_descriptions[] =
-{
-
-/* Masks for types */
-    {DFNT_NATIVE, string(DFNT_NATIVE), "native format"},
-    {DFNT_CUSTOM, string(DFNT_CUSTOM), "custom format"},
-    {DFNT_LITEND, string(DFNT_LITEND), "little-endian format"},
-
-    {DFNT_NONE, string(DFNT_NONE), "number-type not set"},
-
-/* Floating point types */
-    {DFNT_FLOAT32, string(DFNT_FLOAT32), "32-bit floating point"},
-    {DFNT_FLOAT64, string(DFNT_FLOAT64), "64-bit floating point"},
-    {DFNT_FLOAT128, string(DFNT_FLOAT128), "128-bit floating point"},
-
-/* Integer types */
-    {DFNT_INT8, string(DFNT_INT8), "8-bit signed integer"},
-    {DFNT_UINT8, string(DFNT_UINT8), "8-bit unsigned integer"},
-    {DFNT_INT16, string(DFNT_INT16), "16-bit signed integer"},
-    {DFNT_UINT16, string(DFNT_UINT16), "16-bit unsigned integer"},
-    {DFNT_INT32, string(DFNT_INT32), "32-bit signed integer"},
-    {DFNT_UINT32, string(DFNT_UINT32), "32-bit unsigned integer"},
-    {DFNT_INT64, string(DFNT_INT64), "64-bit signed integer"},
-    {DFNT_UINT64, string(DFNT_UINT64), "64-bit unsigned integer"},
-    {DFNT_INT128, string(DFNT_INT128), "128-bit signed integer"},
-    {DFNT_UINT128, string(DFNT_UINT128), "128-bit unsigned integer"},
-
-/* Character types */
-    {DFNT_CHAR8, string(DFNT_CHAR8), "8-bit signed char"},
-    {DFNT_UCHAR8, string(DFNT_UCHAR8), "8-bit unsigned char"},
-    {DFNT_CHAR16, string(DFNT_CHAR16), "16-bit signed char"},
-    {DFNT_UCHAR16, string(DFNT_UCHAR16), "16-bit unsigned char"}
-
-};
-
-#endif /* __HKIT_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/hntdefs.h b/Utilities/CAI/cai_dll/inc/inc_hdf/hntdefs.h
deleted file mode 100755
index 64a2770985..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/hntdefs.h
+++ /dev/null
@@ -1,275 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*+ hnt.h
-   *** This file contains all the number-type definitions for HDF
-   + */
-
-#ifndef _HNT_H
-#define _HNT_H
-
-/* masks for types */
-#define DFNT_HDF      0x00000000    /* standard HDF format  */
-#define DFNT_NATIVE   0x00001000    /* native format        */
-#define DFNT_CUSTOM   0x00002000    /* custom format        */
-#define DFNT_LITEND   0x00004000    /* Little Endian format */
-#define DFNT_MASK     0x00000fff    /* format mask */
-
-/* type info codes */
-
-#define DFNT_NONE        0  /* indicates that number type not set */
-#define DFNT_QUERY       0  /* use this code to find the current type */
-#define DFNT_VERSION     1  /* current version of NT info */
-
-#define DFNT_FLOAT32     5
-#define DFNT_FLOAT       5  /* For backward compat; don't use */
-#define DFNT_FLOAT64     6
-#define DFNT_DOUBLE      6  /* For backward compat; don't use */
-#define DFNT_FLOAT128    7  /* No current plans for support */
-
-#define DFNT_INT8       20
-#define DFNT_UINT8      21
-
-#define DFNT_INT16      22
-#define DFNT_UINT16     23
-#define DFNT_INT32      24
-#define DFNT_UINT32     25
-#define DFNT_INT64      26
-#define DFNT_UINT64     27
-#define DFNT_INT128     28  /* No current plans for support */
-#define DFNT_UINT128    30  /* No current plans for support */
-
-#define DFNT_UCHAR8      3  /* 3 chosen for backward compatibility */
-#define DFNT_UCHAR       3  /* uchar=uchar8 for backward combatibility */
-#define DFNT_CHAR8       4  /* 4 chosen for backward compatibility */
-#define DFNT_CHAR        4  /* uchar=uchar8 for backward combatibility */
-#define DFNT_CHAR16     42  /* No current plans for support */
-#define DFNT_UCHAR16    43  /* No current plans for support */
-
-/* Type info codes for Native Mode datasets */
-#define DFNT_NFLOAT32   (DFNT_NATIVE | DFNT_FLOAT32)
-#define DFNT_NFLOAT64   (DFNT_NATIVE | DFNT_FLOAT64)
-#define DFNT_NFLOAT128  (DFNT_NATIVE | DFNT_FLOAT128)   /* Unsupported */
-
-#define DFNT_NINT8      (DFNT_NATIVE | DFNT_INT8)
-#define DFNT_NUINT8     (DFNT_NATIVE | DFNT_UINT8)
-#define DFNT_NINT16     (DFNT_NATIVE | DFNT_INT16)
-#define DFNT_NUINT16    (DFNT_NATIVE | DFNT_UINT16)
-#define DFNT_NINT32     (DFNT_NATIVE | DFNT_INT32)
-#define DFNT_NUINT32    (DFNT_NATIVE | DFNT_UINT32)
-#define DFNT_NINT64     (DFNT_NATIVE | DFNT_INT64)
-#define DFNT_NUINT64    (DFNT_NATIVE | DFNT_UINT64)
-#define DFNT_NINT128    (DFNT_NATIVE | DFNT_INT128)     /* Unsupported */
-#define DFNT_NUINT128   (DFNT_NATIVE | DFNT_UINT128)    /* Unsupported */
-
-#define DFNT_NCHAR8     (DFNT_NATIVE | DFNT_CHAR8)
-#define DFNT_NCHAR      (DFNT_NATIVE | DFNT_CHAR8)  /* backward compat */
-#define DFNT_NUCHAR8    (DFNT_NATIVE | DFNT_UCHAR8)
-#define DFNT_NUCHAR     (DFNT_NATIVE | DFNT_UCHAR8)     /* backward compat */
-#define DFNT_NCHAR16    (DFNT_NATIVE | DFNT_CHAR16)     /* Unsupported */
-#define DFNT_NUCHAR16   (DFNT_NATIVE | DFNT_UCHAR16)    /* Unsupported */
-
-/* Type info codes for Little Endian data */
-#define DFNT_LFLOAT32   (DFNT_LITEND | DFNT_FLOAT32)
-#define DFNT_LFLOAT64   (DFNT_LITEND | DFNT_FLOAT64)
-#define DFNT_LFLOAT128  (DFNT_LITEND | DFNT_FLOAT128)   /* Unsupported */
-
-#define DFNT_LINT8      (DFNT_LITEND | DFNT_INT8)
-#define DFNT_LUINT8     (DFNT_LITEND | DFNT_UINT8)
-#define DFNT_LINT16     (DFNT_LITEND | DFNT_INT16)
-#define DFNT_LUINT16    (DFNT_LITEND | DFNT_UINT16)
-#define DFNT_LINT32     (DFNT_LITEND | DFNT_INT32)
-#define DFNT_LUINT32    (DFNT_LITEND | DFNT_UINT32)
-#define DFNT_LINT64     (DFNT_LITEND | DFNT_INT64)
-#define DFNT_LUINT64    (DFNT_LITEND | DFNT_UINT64)
-#define DFNT_LINT128    (DFNT_LITEND | DFNT_INT128)     /* Unsupported */
-#define DFNT_LUINT128   (DFNT_LITEND | DFNT_UINT128)    /* Unsupported */
-
-#define DFNT_LCHAR8     (DFNT_LITEND | DFNT_CHAR8)
-#define DFNT_LCHAR      (DFNT_LITEND | DFNT_CHAR8)  /* backward compat */
-#define DFNT_LUCHAR8    (DFNT_LITEND | DFNT_UCHAR8)
-#define DFNT_LUCHAR     (DFNT_LITEND | DFNT_UCHAR8)     /* backward compat */
-#define DFNT_LCHAR16    (DFNT_LITEND | DFNT_CHAR16)     /* Unsupported */
-#define DFNT_LUCHAR16   (DFNT_LITEND | DFNT_UCHAR16)    /* Unsupported */
-
-/* class info codes for int */
-#define        DFNTI_MBO       1    /* Motorola byte order 2's compl */
-#define        DFNTI_VBO       2    /* Vax byte order 2's compl */
-#define        DFNTI_IBO       4    /* Intel byte order 2's compl */
-
-/* class info codes for float */
-#define        DFNTF_NONE      0    /* indicates subclass is not set */
-#define        DFNTF_HDFDEFAULT 1   /* hdf default float format is ieee */
-#define        DFNTF_IEEE      1    /* IEEE format */
-#define        DFNTF_VAX       2    /* Vax format */
-#define        DFNTF_CRAY      3    /* Cray format */
-#define        DFNTF_PC        4    /* PC floats - flipped IEEE */
-#define        DFNTF_CONVEX    5    /* CONVEX native format */
-#define        DFNTF_VP        6    /* Fujitsu VP native format */
-#define        DFNTF_CRAYMPP   7    /* Cray MPP format */
-
-/* class info codes for char */
-#define        DFNTC_BYTE      0    /* bitwise/numeric field */
-#define        DFNTC_ASCII     1    /* ASCII */
-#define        DFNTC_EBCDIC    5    /* EBCDIC */
-
-/* array order */
-#define        DFO_FORTRAN     1    /* column major order */
-#define        DFO_C           2    /* row major order */
-
-/*******************************************************************/
-/* Sizes of number types                                            */
-/*******************************************************************/
-
-/* first the standard sizes of number types */
-
-#    define SIZE_FLOAT32    4
-#    define SIZE_FLOAT64    8
-#    define SIZE_FLOAT128  16   /* No current plans for support */
-
-#    define SIZE_INT8       1
-#    define SIZE_UINT8      1
-#    define SIZE_INT16      2
-#    define SIZE_UINT16     2
-#    define SIZE_INT32      4
-#    define SIZE_UINT32     4
-#    define SIZE_INT64      8
-#    define SIZE_UINT64     8
-#    define SIZE_INT128    16   /* No current plans for support */
-#    define SIZE_UINT128   16   /* No current plans for support */
-
-#    define SIZE_CHAR8      1
-#    define SIZE_CHAR       1   /* For backward compat char8 == char */
-#    define SIZE_UCHAR8     1
-#    define SIZE_UCHAR      1   /* For backward compat uchar8 == uchar */
-#    define SIZE_CHAR16     2   /* No current plans for support */
-#    define SIZE_UCHAR16    2   /* No current plans for support */
-
-/* then the native sizes of number types */
-
-/* Unusual number sizes */
-/* Cray (UNICOS) native number sizes:
-	Char = 8 bits, unsigned
-	Short=64 int=64 long=64 float=64 double=64 bits
-	Long double=128 bits
-	Char pointers = 64 bits
-	Int pointers = 64 bits
-*/
-/* T3D/T3E (CRAYMPP) native number sizes:
-	Char = 8 bits, unsigned
-	Short=32 int=64 long=64 float=32 double=64 bits
-	Long double=64 bits
-	Char pointers = 64 bits
-	Int pointers = 64 bits
-	Big endian, IEEE floating point
-*/
-/* IA64 (IA64) native number sizes:
-	Char = 8 bits, signed
-	Short=16 int=32 long=64 float=32 double=64 bits
-	Long double=64 bits
-	Char pointers = 64 bits
-	Int pointers = 64 bits
-	Little endian, IEEE floating point
-*/
-
-#if !defined(UNICOS)
-#    define SIZE_NFLOAT32    4
-#    define SIZE_NFLOAT64    8
-#    define SIZE_NFLOAT128  16  /* No current plans for support */
-
-#    define SIZE_NINT8       1
-#    define SIZE_NUINT8      1
-#if defined(CRAYMPP)
-#    define SIZE_NINT16      4
-#    define SIZE_NUINT16     4
-#else
-#    define SIZE_NINT16      2
-#    define SIZE_NUINT16     2
-#endif
-#    define SIZE_NINT32      4
-#    define SIZE_NUINT32     4
-#    define SIZE_NINT64      8
-#    define SIZE_NUINT64     8
-#    define SIZE_NINT128    16  /* No current plans for support */
-#    define SIZE_NUINT128   16  /* No current plans for support */
-
-#    define SIZE_NCHAR8      1
-#    define SIZE_NCHAR       1  /* For backward compat char8 == char */
-#    define SIZE_NUCHAR8     1
-#    define SIZE_NUCHAR      1  /* For backward compat uchar8 == uchar */
-#if defined(CRAYMPP)
-#    define SIZE_NCHAR16     4  /* No current plans for support */
-#    define SIZE_NUCHAR16    4  /* No current plans for support */
-#else
-#    define SIZE_NCHAR16     2  /* No current plans for support */
-#    define SIZE_NUCHAR16    2  /* No current plans for support */
-#endif
-#else  /* !!!!!! SOMEBODY NEEDS TO CHECK THESE !!!!! */
-#    define SIZE_NFLOAT32    8
-#    define SIZE_NFLOAT64    8
-#    define SIZE_NFLOAT128  16  /* No current plans for support */
-
-#    define SIZE_NINT8       1
-#    define SIZE_NUINT8      1
-#    define SIZE_NINT16      8
-#    define SIZE_NUINT16     8
-#    define SIZE_NINT32      8
-#    define SIZE_NUINT32     8
-#    define SIZE_NINT64      8
-#    define SIZE_NUINT64     8
-#    define SIZE_NINT128    16  /* No current plans for support */
-#    define SIZE_NUINT128   16  /* No current plans for support */
-#    define SIZE_NCHAR8      1
-#    define SIZE_NCHAR       1
-#    define SIZE_NCHAR       1  /* For backward compat char8 == char */
-#    define SIZE_NUCHAR8     1
-#    define SIZE_NUCHAR      1  /* For backward compat uchar8 == uchar */
-#    define SIZE_NCHAR16     2  /* No current plans for support */
-#    define SIZE_NUCHAR16    2  /* No current plans for support */
-#endif /* UNICOS */
-
-/* then the sizes of little-endian number types */
-#    define SIZE_LFLOAT32    4
-#    define SIZE_LFLOAT64    8
-#    define SIZE_LFLOAT128  16  /* No current plans for support */
-
-#    define SIZE_LINT8       1
-#    define SIZE_LUINT8      1
-#    define SIZE_LINT16      2
-#    define SIZE_LUINT16     2
-#    define SIZE_LINT32      4
-#    define SIZE_LUINT32     4
-#    define SIZE_LINT64      8
-#    define SIZE_LUINT64     8
-#    define SIZE_LINT128    16  /* No current plans for support */
-#    define SIZE_LUINT128   16  /* No current plans for support */
-
-#    define SIZE_LCHAR8      1
-#    define SIZE_LCHAR       1  /* For backward compat char8 == char */
-#    define SIZE_LUCHAR8     1
-#    define SIZE_LUCHAR      1  /* For backward compat uchar8 == uchar */
-#    define SIZE_LCHAR16     2  /* No current plans for support */
-#    define SIZE_LUCHAR16    2  /* No current plans for support */
-
-    /* sizes of different number types */
-#       define MACHINE_I8_SIZE     1
-#       define MACHINE_I16_SIZE    2
-#       define MACHINE_I32_SIZE    4
-#       define MACHINE_F32_SIZE    4
-#       define MACHINE_F64_SIZE    8
-
-    /* maximum size of the atomic data types */
-#       define MAX_NT_SIZE      16
-#endif /* _HNT_H */
-
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/hproto.h b/Utilities/CAI/cai_dll/inc/inc_hdf/hproto.h
deleted file mode 100755
index 0a37068a1e..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/hproto.h
+++ /dev/null
@@ -1,4221 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-#ifndef _H_PROTO
-#define _H_PROTO
-
-/* Usefull macros, which someday might become actual functions */
-/* Wrappers for Hinquire. feb-2-92 */
-#define HQueryfileid(aid, fileid)     \
-  (Hinquire ((int32)   aid,  (int32*) fileid, (uint16*) NULL,\
-             (uint16*) NULL, (int32*) NULL,   (int32*)  NULL,\
-             (int32*)  NULL, (int16*) NULL,   (int16*)  NULL))
-
-#define HQuerytagref(aid, tag, ref) \
-  (Hinquire ((int32)   aid,  (int32*) NULL,   (uint16*) tag,\
-             (uint16*) ref,  (int32*) NULL,   (int32*)  NULL,\
-             (int32*)  NULL, (int16*) NULL,   (int16*)  NULL))
-
-#define HQuerylength(aid, length)     \
-  (Hinquire ((int32)    aid, (int32*) NULL, (uint16*) NULL,   \
-             (uint16*) NULL, (int32*) length,   (int32*)  NULL,   \
-             (int32*)  NULL, (int16*) NULL, (int16*)  NULL))
-
-#define HQueryoffset(aid, offset)     \
-  (Hinquire ((int32)    aid, (int32*) NULL, (uint16*) NULL,   \
-             (uint16*) NULL, (int32*) NULL,     (int32*)  offset, \
-             (int32*)  NULL, (int16*) NULL,     (int16*)  NULL))
-
-#define HQueryposition(aid, position) \
-  (Hinquire ((int32)    aid, (int32*) NULL, (uint16*) NULL,   \
-             (uint16*) NULL, (int32*) NULL, (int32*)  NULL,   \
-             (int32*) position, (int16*) NULL,  (int16*)  NULL))
-
-#define HQueryaccess(aid, access)     \
-  (Hinquire ((int32)    aid,    (int32*) NULL,   (uint16*) NULL,  \
-             (uint16*) NULL,    (int32*) NULL,   (int32*)  NULL,  \
-             (int32*)   NULL,   (int16*) access, (int16*)  NULL))
-
-#define HQueryspecial(aid, special) \
-  (Hinquire ((int32)    aid,    (int32*) NULL,  (uint16*) NULL,   \
-             (uint16*) NULL,    (int32*) NULL,  (int32*)  NULL,   \
-             (int32*)   NULL,   (int16*) NULL,  (int16*)  special))
-
-
-#if defined c_plusplus || defined __cplusplus
-extern      "C"
-{
-#endif                          /* c_plusplus || __cplusplus */
-
-/*
-   ** from hfile.c
- */
-    HDFLIBAPI int32 Hopen
-                (const char *path, intn acc_mode, int16 ndds);
-
-    HDFLIBAPI intn Hclose
-                (int32 file_id);
-
-    HDFLIBAPI int32 Hstartread
-                (int32 file_id, uint16 tag, uint16 ref);
-
-    HDFLIBAPI intn Hnextread
-                (int32 access_id, uint16 tag, uint16 ref, intn origin);
-
-    HDFLIBAPI intn Hexist
-                (int32 file_id, uint16 search_tag, uint16 search_ref);
-
-    HDFLIBAPI intn Hinquire
-                (int32 access_id, int32 * pfile_id, uint16 * ptag,
-          uint16 * pref, int32 * plength, int32 * poffset,
-        int32 * pposn, int16 * paccess, int16 * pspecial);
-
-    HDFLIBAPI int32 Hstartwrite
-                (int32 file_id, uint16 tag, uint16 ref, int32 length);
-
-    HDFLIBAPI int32 Hstartaccess
-                (int32 file_id, uint16 tag, uint16 ref, uint32 flags);
-
-    HDFLIBAPI intn Hsetlength
-                (int32 file_id, int32 length);
-
-    HDFLIBAPI intn Happendable
-                (int32 aid);
-
-    HDFLIBAPI intn HPisappendable
-                (int32 aid);
-
-    HDFLIBAPI intn HPregister_term_func
-                (hdf_termfunc_t term_func);
-
-    HDFLIBAPI intn Hseek
-                (int32 access_id, int32 offset, intn origin);
-
-    HDFLIBAPI int32 Htell
-                (int32 access_id);
-
-    HDFLIBAPI int32 Hread
-                (int32 access_id, int32 length, void * data);
-
-    HDFLIBAPI int32 Hwrite
-                (int32 access_id, int32 length, const void * data);
-
-    HDFLIBAPI int32 Htrunc
-                (int32 access_id, int32 trunc_len);
-
-    HDFLIBAPI intn Hendaccess
-                (int32 access_id);
-
-    HDFLIBAPI intn HDgetc
-                (int32 access_id);
-
-    HDFLIBAPI intn HDputc
-                (uint8 c, int32 access_id);
-
-    HDFLIBAPI int32 Hgetelement
-                (int32 file_id, uint16 tag, uint16 ref, uint8 * data);
-
-    HDFLIBAPI int32 Hputelement
-                (int32 file_id, uint16 tag, uint16 ref, const uint8 * data, int32 length);
-
-    HDFLIBAPI int32 Hlength
-                (int32 file_id, uint16 tag, uint16 ref);
-
-    HDFLIBAPI int32 Hoffset
-                (int32 file_id, uint16 tag, uint16 ref);
-
-    HDFLIBAPI intn Hsync
-                (int32 file_id);
-
-    HDFLIBAPI intn Hcache
-                (int32 file_id, intn cache_on);
-
-    HDFLIBAPI intn Hgetlibversion
-                (uint32 * majorv, uint32 * minorv,
-                 uint32 * releasev, char * string);
-
-    HDFLIBAPI intn Hgetfileversion
-                (int32 file_id, uint32 * majorv, uint32 * minorv,
-                 uint32 * release, char * string);
-
-    HDFLIBAPI intn Hsetaccesstype(int32 access_id, uintn accesstype);
-
-    HDFLIBAPI uint16 HDmake_special_tag
-                (uint16 tag);
-
-    HDFLIBAPI intn HDis_special_tag
-                (uint16 tag);
-
-    HDFLIBAPI uint16 HDbase_tag
-                (uint16 tag);
-
-    HDFLIBAPI int  HDerr
-                (int32 file_id);
-
-    HDFLIBAPI intn HDvalidfid
-                (int32 file_id);
-
-    HDFLIBAPI const char *HDgettagdesc
-                (uint16 tag);
-
-    HDFLIBAPI char *HDgettagsname
-                (uint16 tag);
-
-    HDFLIBAPI intn HDgettagnum
-                (const char *tag_name);
-
-    HDFLIBAPI char *HDgetNTdesc
-                (int32 nt);
-
-    HDFLIBAPI const char *HDfidtoname
-                (int32 fid);
-
-    HDFLIBAPI intn Hishdf
-                (const char * filename);
-
-    HDFLIBAPI intn Hfidinquire
-                (int32 file_id, char ** fname, intn * acc_mode,
-                 intn * attach);
-    
-    HDFLIBAPI intn Hshutdown(void);
-
-    HDFLIBAPI void HPend(void);
-
-    HDFLIBAPI intn HDdont_atexit(void);
-
-/*
-   ** from hfiledd.c
- */
-/******************************************************************************
- NAME
-     Hdupdd - Duplicate a data descriptor
-
- DESCRIPTION
-    Duplicates a data descriptor so that the new tag/ref points to the
-    same data element pointed to by the old tag/ref.  Return FAIL if
-    the given tag/ref are already in use.
-
- RETURNS
-    returns SUCCEED (0) if successful, FAIL (-1) otherwise
-
-*******************************************************************************/
-HDFLIBAPI intn Hdupdd(int32 file_id,      /* IN: File ID the tag/refs are in */
-        uint16 tag,             /* IN: Tag of new tag/ref */
-        uint16 ref,             /* IN: Ref of new tag/ref */
-        uint16 old_tag,         /* IN: Tag of old tag/ref */
-        uint16 old_ref          /* IN: Ref of old tag/ref */
-);
-
-/******************************************************************************
- NAME
-     Hnumber - Determine the number of objects of a given type
-
- DESCRIPTION
-    Determine how many objects of the given tag are in the file.
-    tag may be set to DFTAG_WILDCARD to get back the total number
-    of objects in the file.
-
-    Note, a return value of zero is not a fail condition.
-
- RETURNS
-    the number of objects of type 'tag' else FAIL
-
-*******************************************************************************/
-HDFLIBAPI int32 Hnumber(int32 file_id,    /* IN: File ID the tag/refs are in */
-        uint16 tag              /* IN: Tag to count */
-);
-
-/******************************************************************************
- NAME
-     Hnewref - Returns a ref that is guaranteed to be unique in the file
-
- DESCRIPTION
-    Returns a ref number that can be used with any tag to produce a
-    unique tag/ref.  Successive calls to Hnewref will generate a
-    strictly increasing sequence until the highest possible ref had been
-    returned, then Hnewref will return unused ref's starting from 1.
-
- RETURNS
-    returns the ref number, 0 otherwise
-
-*******************************************************************************/
-HDFLIBAPI uint16 Hnewref(int32 file_id        /* IN: File ID the tag/refs are in */
-);
-
-/******************************************************************************
- NAME
-    Htagnewref  - returns a ref that is unique in the file for a given tag
-
- DESCRIPTION
-    Returns a ref number that can be used with any tag to produce a
-    unique tag/ref.  Successive calls to Hnewref will generate a
-    strictly increasing sequence until the highest possible ref had been
-    returned, then Hnewref will return unused ref's starting from 1.
-
- RETURNS
-    returns the ref number, 0 otherwise
-
-*******************************************************************************/
-HDFLIBAPI uint16 Htagnewref(int32 file_id,    /* IN: File ID the tag/refs are in */
-        uint16 tag                  /* IN: Tag to search for a new ref for */
-);
-
-/******************************************************************************
- NAME
-    Hfind - locate the next object of a search in an HDF file
-
- DESCRIPTION
-    Searches for the `next' DD that fits the search tag/ref.  Wildcards
-    apply.  If origin is DF_FORWARD, search from current position forwards
-    in the file, otherwise DF_BACKWARD searches backward from the current
-    position in the file.  If *find_tag and *find_ref are both set to
-    0, this indicates the beginning of a search, and the search will
-    start from the beginning of the file if the direction is DF_FORWARD
-    and from the and of the file if the direction is DF_BACKWARD.
-
- RETURNS
-    returns SUCCEED (0) if successful and FAIL (-1) otherwise
-
-*******************************************************************************/
-HDFLIBAPI intn Hfind(int32 file_id,       /* IN: file ID to search in */
-        uint16 search_tag,      /* IN: the tag to search for (can be DFTAG_WILDCARD) */
-        uint16 search_ref,      /* IN: ref to search for (can be DFREF_WILDCARD) */
-        uint16 *find_tag,       /* IN: if (*find_tag==0) and (*find_ref==0) then start search */
-                                /* OUT: tag matching the search tag */
-        uint16 *find_ref,       /* IN: if (*find_tag==0) and (*find_ref==0) then start search */
-                                /* OUT: ref matching the search ref */
-        int32 *find_offset,     /* OUT: offset of the data element found */
-        int32 *find_length,     /* OUT: length of the data element found */
-        intn direction          /* IN: Direction to search in: */
-                                /*  DF_FORWARD searches forward from the current location */
-                                /*  DF_BACKWARD searches backward from the current location */
-);
-
-
-/******************************************************************************
- NAME
-     HDcheck_tagref - Checks to see if tag/ref is in DD list i.e. created already
-
- DESCRIPTION
-     Routine checks to see if tag/ref exists in the DD list i.e. has
-     been created.
-
- RETURNS
-     0-> tag/ref does not exist
-     1-> tag/ref exists
-    -1-> function failed
-
-*******************************************************************************/
-HDFLIBAPI intn 
-HDcheck_tagref(int32  file_id, /* IN: id of file */
-               uint16 tag,     /* IN: Tag to check */
-               uint16 ref      /* IN: ref to check */);
-
-/************************************************************************
-NAME
-   HDreuse_tagref -- reuse a data descriptor preserving tag/ref
-
-DESCRIPTION
-   Reuses the data descriptor of tag/ref in the dd list of the file.
-   The tag/ref must already exist in the DD list.
-   This routine is unsafe and may leave a file in a condition that is
-   not usable by some routines.  Use with care. Not valid for
-   special elments right now. Used for allowing the data to change
-   and move somewhere else in the file for non-special elements.
-   Must be carefully if apply to higher-level objects like GR's and SDS
-   that are comprised of other objects. 
-   Usefull when re-writing simple elements whose size changes while
-   preserving the original tag/ref of the element since other elements
-   might refer to this element by tag/ref e.g. in a Vgroup.
-
-RETURNS
-   returns SUCCEED (0) if successful, FAIL (-1) otherwise
-************************************************************************/
-HDFLIBAPI intn 
-HDreuse_tagref(int32 file_id, /* IN: id of file */
-               uint16 tag,    /* IN: tag of data descriptor to reuse */
-               uint16 ref     /* IN: ref of data descriptor to reuse */ );
-
-/******************************************************************************
- NAME
-     Hdeldd - Delete a data descriptor
-
- DESCRIPTION
-    Deletes a data descriptor of tag/ref from the dd list of the file.
-    This routine is unsafe and may leave a file in a condition that is
-    not usable by some routines.  Use with care.
-    For example, if this element is contained in a Vgroup, that group
-    will *NOT* get updated to reflect that this element has been deleted.
-
- RETURNS
-    returns SUCCEED (0) if successful, FAIL (-1) otherwise
-
-*******************************************************************************/
-HDFLIBAPI intn Hdeldd(int32 file_id,      /* IN: File ID the tag/refs are in */
-        uint16 tag,             /* IN: Tag of tag/ref to delete */
-        uint16 ref              /* IN: Ref of tag/ref to delete */
-);
-
-/*
-   ** from hdfalloc.c
- */
-
-    HDFLIBAPI void * HDmemfill
-                (void * dest, const void * src, uint32 item_size, uint32 num_items);
-
-    HDFLIBAPI char *HIstrncpy
-                (char * dest, const char * source, int32 len);
-
-    HDFLIBAPI int32 HDspaceleft
-                (void);
-
-#if defined(MALLOC_CHECK) || defined(_HDFDLL_)
-    HDFPUBLIC extern void * HDmalloc
-                (uint32 qty);
-
-    HDFPUBLIC extern void * HDrealloc
-                (void * where, uint32 qty);
-
-    HDFPUBLIC extern void * HDcalloc
-                (uint32 n, uint32 size);
-
-    HDFPUBLIC extern void HDfree
-                (void * ptr);
-
-#endif /* defined MALLOC_CHECK */
-
-#if defined VMS || defined macintosh || defined MAC || defined SYMANTEC_C || defined MIPSEL || defined NEXT || defined CONVEX || defined IBM6000 || defined SUN || defined IRIX || defined _HDFDLL_
-    HDFPUBLIC extern char *HDstrdup
-                (const char *s);
-
-#endif
-
-    HDFLIBAPI intn HDc2fstr
-                (char * str, intn len);
-
-    HDFLIBAPI char *HDf2cstring
-                (_fcd fdesc, intn len);
-
-    HDFLIBAPI intn HDflush
-                (int32 file_id);
-
-    HDFLIBAPI intn HDpackFstring
-                (char * src, char * dest, intn len);
-
-/*
-   ** from hblocks.c
- */
-    HDFLIBAPI int32 HLcreate
-                (int32 file_id, uint16 tag, uint16 ref, int32 block_length,
-                 int32 number_blocks);
-
-    HDFLIBAPI intn HLconvert
-                (int32 aid, int32 block_length, int32 number_blocks);
-
-    HDFLIBAPI int  HDinqblockinfo
-                (int32 aid, int32 *length, int32 *first_length, int32 *block_length,
-                 int32 *number_blocks);
-
-    HDFLIBAPI intn HLsetblockinfo
-                (int32 aid, int32 block_size, int32 num_blocks);
-
-    HDFLIBAPI intn HLgetblockinfo
-                (int32 aid, int32* block_size, int32* num_blocks);
-
-/*
-   ** from hextelt.c
- */
-    HDFLIBAPI int32 HXcreate
-                (int32 file_id, uint16 tag, uint16 ref, const char * extern_file_name,
-                 int32 offset, int32 start_len);
-
-    HDFLIBAPI intn HXsetcreatedir
-                (const char *dir);
-
-    HDFLIBAPI intn HXsetdir
-                (const char *dir);
-
-/*
-   ** from hcomp.c
- */
-    HDFLIBAPI int32 HCcreate
-                (int32 file_id, uint16 tag, uint16 ref,
-                 comp_model_t model_type, model_info * m_info,
-                 comp_coder_t coder_type, comp_info * c_info);
-
-    HDFLIBAPI intn HCPgetcompress
-                (int32 file_id, uint16 data_tag, uint16 data_ref, 
-		 comp_coder_t *coder_type, comp_info * c_info);
-
-    HDFPUBLIC intn HCget_config_info ( comp_coder_t coder_type, uint32 *compression_config_info);
-
-    HDFLIBAPI int32 HCPquery_encode_header(comp_model_t model_type, model_info * m_info,
-             comp_coder_t coder_type, comp_info * c_info);
-
-    HDFLIBAPI intn HCPencode_header(uint8 *p, comp_model_t model_type, model_info * m_info,
-             comp_coder_t coder_type, comp_info * c_info);
-
-    HDFLIBAPI intn HCPdecode_header(uint8 *p, comp_model_t *model_type, model_info * m_info,
-             comp_coder_t *coder_type, comp_info * c_info);
-
-/*
-   ** from cszip.c
- */
-
-     HDFLIBAPI intn HCPsetup_szip_parms ( comp_info *c_info, int32 nt, int32 ncomp, int32 ndims, int32 *dims, int32 *cdims);
-/*
-   ** from hbuffer.c
- */
-    HDFLIBAPI intn HBconvert
-                (int32 aid);
-
-/*
-   ** from hcompri.c
- */
-    HDFLIBAPI int32 HRPconvert
-                (int32 fid, uint16 tag, uint16 ref, int32 xdim, int32 ydim,int16 scheme, comp_info *cinfo, uintn pixel_size);
-
-/*
-   ** from herr.c
- */
-    HDFLIBAPI const char *HEstring
-                (hdf_err_code_t error_code);
-
-    HDFLIBAPI void HEpush
-                (hdf_err_code_t error_code, const char * function_name,
-                 const char * file_name, intn line);
-
-    HDFLIBAPI void HEreport
-                (const char *,...);
-
-    HDFLIBAPI void HEprint
-                (FILE * stream, int32 print_level);
-
-    HDFLIBAPI int16 HEvalue
-                (int32 level);
-
-    HDFLIBAPI void HEPclear
-                (void);
-
- 	HDFLIBAPI intn HEshutdown(void);
-
-/*
-   ** from hbitio.c
- */
-    HDFLIBAPI int32 Hstartbitread
-                (int32 file_id, uint16 tag, uint16 ref);
-
-    HDFLIBAPI int32 Hstartbitwrite
-                (int32 file_id, uint16 tag, uint16 ref, int32 length);
-
-    HDFLIBAPI intn Hbitappendable
-                (int32 bitid);
-
-    HDFLIBAPI intn Hbitwrite
-                (int32 bitid, intn count, uint32 data);
-
-    HDFLIBAPI intn Hbitread
-                (int32 bitid, intn count, uint32 *data);
-
-    HDFLIBAPI intn Hbitseek
-                (int32 bitid, int32 byte_offset, intn bit_offset);
-
-    HDFLIBAPI intn Hgetbit
-                (int32 bitid);
-
-    HDFLIBAPI int32 Hendbitaccess
-                (int32 bitfile_id, intn flushbit);
-
-    HDFLIBAPI intn HPbitshutdown(void);
-
-/*
-   ** from dfcomp.c
- */
-    HDFLIBAPI intn DFputcomp
-                (int32 file_id, uint16 tag, uint16 ref, const uint8 * image,
-        int32 xdim, int32 ydim, uint8 * palette, uint8 * newpal,
-                 int16 scheme, comp_info * cinfo);
-
-    HDFLIBAPI int  DFgetcomp
-                (int32 file_id, uint16 tag, uint16 ref, uint8 * image,
-                 int32 xdim, int32 ydim, uint16 scheme);
-
-/*
-   ** from dfrle.c
- */
-    HDFLIBAPI int32 DFCIrle
-                (const void * buf, void * bufto, int32 len);
-
-    HDFLIBAPI int32 DFCIunrle
-                (uint8 * buf, uint8 *bufto, int32 outlen, int resetsave);
-
-/*
-   ** from dfimcomp.c
- */
-    HDFLIBAPI void DFCIimcomp
-                (int32 xdim, int32 ydim, const uint8 *in, uint8 out[],
-                 uint8 in_pal[], uint8 out_pal[], int mode);
-
-    HDFLIBAPI void DFCIunimcomp
-                (int32 xdim, int32 ydim, uint8 in[], uint8 out[]);
-
-/*
-   ** from dfjpeg.c
- */
-
-    HDFLIBAPI intn DFCIjpeg
-                (int32 file_id, uint16 tag, uint16 ref, int32 xdim, int32 ydim,
-                 const void * image, int16 scheme, comp_info * scheme_info);
-
-/*
-   ** from dfunjpeg.c
- */
-
-    HDFLIBAPI intn DFCIunjpeg
-                (int32 file_id, uint16 tag, uint16 ref, void * image, int32 xdim,
-                 int32 ydim, int16 scheme);
-
-/*
-   ** from dfgroup.c
- */
-    HDFLIBAPI int32 DFdiread
-                (int32 file_id, uint16 tag, uint16 ref);
-
-    HDFLIBAPI intn DFdiget
-                (int32 list, uint16 * ptag, uint16 * pref);
-
-    HDFLIBAPI intn DFdinobj
-                (int32 list);
-
-    HDFLIBAPI int32 DFdisetup
-                (int maxsize);
-
-    HDFLIBAPI intn DFdiput
-                (int32 list, uint16 tag, uint16 ref);
-
-    HDFLIBAPI intn DFdiwrite
-                (int32 file_id, int32 list, uint16 tag, uint16 ref);
-                
-    HDFLIBAPI void DFdifree
-    			(int32 groupID);
-
-/*
-   ** from dfp.c
- */
-    HDFLIBAPI intn DFPgetpal
-                (const char * filename, void * palette);
-
-    HDFLIBAPI intn DFPputpal
-                (const char * filename, const void * palette, intn overwrite, const char * filemode);
-
-    HDFLIBAPI intn DFPaddpal
-                (const char * filename, const void * palette);
-
-    HDFLIBAPI intn DFPnpals
-                (const char * filename);
-
-    HDFLIBAPI intn DFPreadref
-                (const char * filename, uint16 ref);
-
-    HDFLIBAPI intn DFPwriteref
-                (const char * filename, uint16 ref);
-
-    HDFLIBAPI intn DFPrestart
-                (void);
-
-    HDFLIBAPI uint16 DFPlastref
-                (void);
-
-/*
-   ** from dfr8.c
- */
-    HDFLIBAPI int  DFR8setcompress
-                (int32 scheme, comp_info * cinfo);
-
-    HDFLIBAPI intn DFR8getdims
-                (const char * filename, int32 * pxdim, int32 * pydim,
-                 int * pispal);
-
-    HDFLIBAPI intn DFR8getimage
-                (const char * filename, uint8 * image, int32 xdim, int32 ydim,
-                 uint8 * pal);
-
-    HDFLIBAPI intn DFR8setpalette
-                (uint8 * pal);
-
-    HDFLIBAPI intn DFR8putimage
-                (const char * filename, const void * image, int32 xdim, int32 ydim, uint16 compress);
-
-    HDFLIBAPI intn DFR8addimage
-                (const char * filename, const void * image, int32 xdim, int32 ydim, uint16 compress);
-
-    HDFLIBAPI intn DFR8nimages
-                (const char * filename);
-
-    HDFLIBAPI intn DFR8readref
-                (const char * filename, uint16 ref);
-
-    HDFLIBAPI intn DFR8writeref
-                (const char * filename, uint16 ref);
-
-    HDFLIBAPI intn DFR8restart
-                (void);
-
-    HDFLIBAPI uint16 DFR8lastref
-                (void);
-
-    HDFLIBAPI intn DFR8getpalref(uint16 *pal_ref);
-
-    HDFLIBAPI intn DFR8Pshutdown(void);
-
-/*
-   ** from dfgr.c
- */
-    HDFLIBAPI intn DFGRgetlutdims
-                (const char * filename, int32 * pxdim, int32 * pydim,
-                 intn * pncomps, intn * pil);
-
-    HDFLIBAPI intn DFGRreqlutil
-                (intn il);
-
-    HDFLIBAPI intn DFGRgetlut
-                (const char * filename, void * lut, int32 xdim, int32 ydim);
-
-    HDFLIBAPI intn DFGRgetimdims
-                (const char * filename, int32 * pxdim, int32 * pydim,
-                 intn * pncomps, intn * pil);
-
-    HDFLIBAPI intn DFGRreqimil
-                (intn il);
-
-    HDFLIBAPI intn DFGRgetimage
-                (const char * filename, void * image, int32 xdim, int32 ydim);
-
-    HDFLIBAPI intn DFGRsetcompress
-                (int32 scheme, comp_info * cinfo);
-
-    HDFLIBAPI intn DFGRsetlutdims
-                (int32 xdim, int32 ydim, intn ncomps, intn il);
-
-    HDFLIBAPI intn DFGRsetlut
-                (void * lut, int32 xdim, int32 ydim);
-
-    HDFLIBAPI intn DFGRaddlut
-                (const char * filename, void * lut, int32 xdim, int32 ydim);
-
-    HDFLIBAPI intn DFGRsetimdims
-                (int32 xdim, int32 ydim, intn ncomps, intn il);
-
-    HDFLIBAPI intn DFGRaddimage
-                (const char * filename, void * image, int32 xdim, int32 ydim);
-
-    HDFLIBAPI intn DFGRputimage
-                (const char * filename, void * image, int32 xdim, int32 ydim);
-
-    HDFLIBAPI intn DFGRreadref
-                (const char * filename, uint16 ref);
-
-    HDFLIBAPI uint16 DFGRIlastref
-                (void);
-
-    HDFLIBAPI intn DFGRIgetdims
-                (const char * filename, int32 * pxdim, int32 * pydim,
-                 intn * pncomps, intn * pil, intn type);
-
-    HDFLIBAPI intn DFGRIreqil
-                (intn il, intn type);
-
-    HDFLIBAPI intn DFGRIgetimlut
-                (const char * filename, void * imlut, int32 xdim, int32 ydim, intn type,
-                 intn isfortran, int *compressed, uint16 *compr_type, int *has_pal);
-
-    HDFLIBAPI intn DFGRIsetdims
-                (int32 xdim, int32 ydim, intn ncomps, intn type);
-
-    HDFLIBAPI intn DFGRIsetil
-                (intn il, intn type);
-
-    HDFLIBAPI intn DFGRIrestart
-                (void);
-
-    HDFLIBAPI intn DFGRIaddimlut
-                (const char * filename, const void * imlut, int32 xdim, int32 ydim, intn type,
-                 intn isfortran, intn newfile);
-
-    HDFLIBAPI intn DFGRPshutdown(void);
-
-/*
-   ** from df24.c
- */
-    HDFLIBAPI intn DF24getdims
-                (const char * filename, int32 * pxdim, int32 * pydim,
-                 intn * pil);
-
-    HDFLIBAPI intn DF24reqil
-                (intn il);
-
-    HDFLIBAPI intn DF24getimage
-                (const char * filename, void * image, int32 xdim, int32 ydim);
-
-    HDFLIBAPI intn DF24setdims
-                (int32 xdim, int32 ydim);
-
-    HDFLIBAPI intn DF24setil
-                (intn il);
-
-    HDFLIBAPI intn DF24setcompress
-                (int32 type, comp_info * cinfo);
-
-    HDFLIBAPI intn DF24restart
-                (void);
-
-    HDFLIBAPI intn DF24addimage
-                (const char * filename, const void * image, int32 xdim, int32 ydim);
-
-    HDFLIBAPI intn DF24putimage
-                (const char * filename, const void * image, int32 xdim, int32 ydim);
-
-    HDFLIBAPI intn DF24nimages
-                (const char * filename);
-
-    HDFLIBAPI intn DF24readref
-                (const char * filename, uint16 ref);
-
-    HDFLIBAPI uint16 DF24lastref
-                (void);
-
-/*
-   ** from dfan.c
- */
-
-    HDFLIBAPI int32 DFANgetlablen
-                (const char * filename, uint16 tag, uint16 ref);
-
-    HDFLIBAPI intn DFANgetlabel
-                (const char * filename, uint16 tag, uint16 ref, char * label,
-                 int32 maxlen);
-
-    HDFLIBAPI int32 DFANgetdesclen
-                (const char * filename, uint16 tag, uint16 ref);
-
-    HDFLIBAPI intn DFANgetdesc
-                (const char * filename, uint16 tag, uint16 ref, char * desc,
-                 int32 maxlen);
-
-    HDFLIBAPI int32 DFANgetfidlen
-                (int32 file_id, intn isfirst);
-
-    HDFLIBAPI int32 DFANgetfid
-                (int32 file_id, char * id, int32 maxlen, intn isfirst);
-
-    HDFLIBAPI int32 DFANgetfdslen
-                (int32 file_id, intn isfirst);
-
-    HDFLIBAPI int32 DFANgetfds
-                (int32 file_id, char * desc, int32 maxlen, intn isfirst);
-
-    HDFLIBAPI intn DFANputlabel
-                (const char * filename, uint16 tag, uint16 ref, char * label);
-
-    HDFLIBAPI intn DFANputdesc
-                (const char * filename, uint16 tag, uint16 ref, char * desc,
-                 int32 desclen);
-
-    HDFLIBAPI intn DFANaddfid
-                (int32 file_id, char * id);
-
-    HDFLIBAPI intn DFANaddfds
-                (int32 file_id, char * desc, int32 desclen);
-
-    HDFLIBAPI uint16 DFANlastref
-                (void);
-
-    HDFLIBAPI intn DFANlablist
-                (const char * filename, uint16 tag, uint16 reflist[],
-         char * labellist, intn listsize, intn maxlen, intn startpos);
-
-    HDFLIBAPI intn DFANclear
-                (void);
-
-    HDFLIBAPI intn DFANIclear
-                (void);
-
-    HDFLIBAPI uint16 DFANIlocate
-                (int32 file_id, int type, uint16 tag, uint16 ref);
-
-    HDFLIBAPI int  DFANIaddentry
-                (int type, uint16 annref, uint16 datatag, uint16 dataref);
-
-    HDFLIBAPI int32 DFANIgetannlen
-                (const char * filename, uint16 tag, uint16 ref, int type);
-
-    HDFLIBAPI intn DFANIgetann
-                (const char * filename, uint16 tag, uint16 ref, uint8 * ann,
-                 int32 maxlen, int type);
-
-    HDFLIBAPI intn DFANIputann
-                (const char * filename, uint16 tag, uint16 ref, uint8 * ann,
-                 int32 annlen, int type);
-
-    HDFLIBAPI int  DFANIlablist
-                (const char * filename, uint16 tag, uint16 reflist[],
-            uint8 * labellist, int listsize, int maxlen, int startpos,
-                 int isfortran);
-
-    HDFLIBAPI int  DFANIaddfann
-                (int32 file_id, char * ann, int32 annlen, int type);
-
-    HDFLIBAPI int32 DFANIgetfannlen
-                (int32 file_id, int type, int isfirst);
-
-    HDFLIBAPI int32 DFANIgetfann
-                (int32 file_id, char * ann, int32 maxlen, int type, int isfirst);
-
-    HDFLIBAPI intn DFANPshutdown(void);
-
-/*
-   ** from dfsd.c
- */
-
-    HDFLIBAPI int  DFSDgetdims
-                (const char * filename, intn * prank, int32 sizes[], intn maxrank);
-
-    HDFLIBAPI int  DFSDgetdatastrs
-                (char * label, char * unit, char * format, char * coordsys);
-
-    HDFLIBAPI int  DFSDgetdimstrs
-                (int dim, char * label, char * unit, char * format);
-
-    HDFLIBAPI int  DFSDgetdatalen
-                (int * llabel, int * lunit, int * lformat, int * lcoordsys);
-
-    HDFLIBAPI int  DFSDgetdimlen
-                (int dim, int * llabel, int * lunit, int * lformat);
-
-    HDFLIBAPI int  DFSDgetdimscale
-                (intn dim, int32 maxsize, void * scale);
-
-    HDFLIBAPI int  DFSDgetrange
-                (void * pmax, void * pmin);
-
-    HDFLIBAPI int  DFSDgetdata
-                (const char * filename, intn rank, int32 maxsizes[], void * data);
-
-    HDFLIBAPI int  DFSDsetlengths
-                (int maxlen_label, int maxlen_unit, int maxlen_format,
-                 int maxlen_coordsys);
-
-    HDFLIBAPI int  DFSDsetdims
-                (intn rank, int32 dimsizes[]);
-
-    HDFLIBAPI int  DFSDsetdatastrs
-                (const char * label, const char * unit, const char * format, const char * coordsys);
-
-    HDFLIBAPI int  DFSDsetdimstrs
-                (int dim, const char * label, const char * unit, const char * format);
-
-    HDFLIBAPI int  DFSDsetdimscale
-                (intn dim, int32 dimsize, void * scale);
-
-    HDFLIBAPI int  DFSDsetrange
-                (void * maxi, void * mini);
-
-    HDFLIBAPI int  DFSDputdata
-                (const char * filename, intn rank, int32 dimsizes[], void * data);
-
-    HDFLIBAPI int  DFSDadddata
-                (const char * filename, intn rank, int32 dimsizes[], void * data);
-
-    HDFLIBAPI int  DFSDrestart
-                (void);
-
-    HDFLIBAPI int32 DFSDndatasets
-                (char * filename);
-
-    HDFLIBAPI int  DFSDclear
-                (void);
-
-    HDFLIBAPI uint16 DFSDlastref
-                (void);
-
-    HDFLIBAPI int  DFSDreadref
-                (char * filename, uint16 ref);
-
-    HDFLIBAPI int  DFSDgetslice
-                (const char * filename, int32 winst[], int32 windims[], void * data,
-                 int32 dims[]);
-
-    HDFLIBAPI int  DFSDstartslice
-                (const char * filename);
-
-    HDFLIBAPI int  DFSDputslice
-                (int32 winend[], void * data, int32 dims[]);
-
-    HDFLIBAPI int  DFSDendslice
-                (void);
-
-    HDFLIBAPI int  DFSDsetNT
-                (int32 numbertype);
-
-    HDFLIBAPI int  DFSDsetorder
-                (int arrayorder);
-
-    HDFLIBAPI int  DFSDgetNT
-                (int32 * pnumbertype);
-
-    HDFLIBAPI intn DFSDpre32sdg
-                (char * filename, uint16 ref, intn * ispre32);
-
-    HDFLIBAPI int  DFSDsetcal
-                (float64 cal, float64 cal_err, float64 ioff,
-                 float64 ioff_err, int32 cal_nt);
-
-    HDFLIBAPI int  DFSDgetcal
-                (float64 * pcal, float64 * pcal_err, float64 * pioff,
-                 float64 * pioff_err, int32 * cal_nt);
-
-    HDFLIBAPI int  DFSDwriteref
-                (const char * filename, uint16 ref);
-
-    HDFLIBAPI int  DFSDsetfillvalue
-                (void * fill_value);
-
-    HDFLIBAPI int  DFSDgetfillvalue
-                (void * fill_value);
-
-    HDFLIBAPI int  DFSDstartslab
-                (const char * filename);
-
-    HDFLIBAPI int  DFSDwriteslab
-                (int32 start[], int32 stride[], int32 count[],
-                 void * data);
-
-    HDFLIBAPI int  DFSDendslab
-                (void);
-
-    HDFLIBAPI int  DFSDreadslab
-                (const char *filename, int32 start[], int32 slab_size[],
-             int32 stride[], void * buffer, int32 buffer_size[]);
-
-    HDFLIBAPI intn DFSDPshutdown(void);
-
-/*
-   ** from dfconv.c
- */
-
-    HDFLIBAPI int  DFKNTsize
-                (int32 number_type);
-
-    HDFLIBAPI int32 DFKisnativeNT
-                (int32 numbertype);
-
-    HDFLIBAPI int32 DFKislitendNT
-                (int32 numbertype);
-
-    HDFLIBAPI int8 DFKgetPNSC
-                (int32 numbertype, int32 machinetype);
-
-    HDFLIBAPI intn DFKsetNT
-                (int32 ntype);
-
-    HDFLIBAPI int32 DFKconvert
-                (void * source, void * dest, int32 ntype, int32 num_elm,
-                 int16 acc_mode, int32 source_stride, int32 dest_stride);
-
-/*
-   ** from dfknat.c
- */
-
-    HDFLIBAPI intn DFKnb1b
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKnb2b
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKnb4b
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKnb8b
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-/*
-   ** from dfkswap.c
- */
-
-    HDFLIBAPI intn DFKsb2b
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKsb4b
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKsb8b
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-/*
-   ** from dfkcray.c
- */
-
-    HDFLIBAPI intn DFKui2i
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKui2s
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKuo2i
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKuo2s
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKui4i
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKui4s
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKuo4i
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKuo4s
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKui4f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKuo4f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKui8f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKuo8f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlui2i
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlui2s
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKluo2i
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKluo2s
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlui4i
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlui4s
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKluo4i
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKluo4s
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlui4f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKluo4f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlui8f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKluo8f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-/* CRAY-MPP */
-    HDFLIBAPI intn DFKmi2i
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKmi2s
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKmo2b
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlmi2i
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlmi2s
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlmo2b
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-
-/*
-   ** from dfkvms.c
- */
-
-    HDFLIBAPI intn DFKvi4f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKvo4f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKvi8f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKvo8f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlvi4f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlvo4f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlvi8f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlvo8f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-/*
-   ** from dfkconv.c
- */
-
-    HDFLIBAPI intn DFKci4f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKco4f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKci8f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKco8f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlci4f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlco4f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlci8f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlco8f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-/*
-   ** from dfkfuji.c
- */
-
-    HDFLIBAPI intn DFKpi4f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKpo4f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKpi8f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKpo8f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlpi4f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlpo4f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlpi8f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-    HDFLIBAPI intn DFKlpo8f
-                (void * s, void * d, uint32 num_elm, uint32 source_stride, uint32 dest_stride);
-
-/*
-   ** from dfanF.c
- */
-#ifndef DFAN_FNAMES
-#   define  DFAN_FNAMES
-#ifdef DF_CAPFNAMES
-#   define ndaiganl  FNAME(DAIGANL)
-#   define ndaigann  FNAME(DAIGANN)
-#   define ndaipann  FNAME(DAIPANN)
-#   define ndailist  FNAME(DAILIST)
-#   define ndalref   FNAME(DALREF)
-#   define ndaclear  FNAME(DACLEAR)
-#   define ndfanlastref     FNAME(DFANLASTREF)
-
-#   define ndfanaddfds      FNAME(DFANADDFDS)
-#   define ndfangetfidlen   FNAME(DFANGETFIDLEN)
-#   define ndfangetfdslen   FNAME(DFANGETFDSLEN)
-#   define ndfangetfid      FNAME(DFANGETFID)
-#   define ndfangetfds      FNAME(DFANGETFDS)
-#   define ndaafds          FNAME(DAAFDS)
-#   define ndagfidl         FNAME(DAGFIDL)
-#   define ndagfdsl         FNAME(DAGFDSL)
-#   define ndagfid          FNAME(DAGFID)
-#   define ndagfds          FNAME(DAGFDS)
-#   define ndaiafid         FNAME(DAIAFID)
-#else                           /* DF_CAPFNAMES */
-#   define ndaiganl  FNAME(daiganl)
-#   define ndaigann  FNAME(daigann)
-#   define ndaipann  FNAME(daipann)
-#   define ndailist  FNAME(dailist)
-#   define ndalref   FNAME(dalref)
-#   define ndaclear  FNAME(daclear)
-#   define ndfanlastref     FNAME(dfanlastref)
-
-#   define ndfanaddfds      FNAME(dfanaddfds)
-#   define ndfangetfidlen   FNAME(dfangetfidlen)
-#   define ndfangetfdslen   FNAME(dfangetfdslen)
-#   define ndfangetfid      FNAME(dfangetfid)
-#   define ndfangetfds      FNAME(dfangetfds)
-#   define ndaafds          FNAME(daafds)
-#   define ndagfidl         FNAME(dagfidl)
-#   define ndagfdsl         FNAME(dagfdsl)
-#   define ndagfid          FNAME(dagfid)
-#   define ndagfds          FNAME(dagfds)
-#   define ndaiafid         FNAME(daiafid)
-#endif                          /* DF_CAPFNAMES */
-#endif                          /* DFAN_FNAMES */
-
-    HDFLIBAPI      FRETVAL(intf) ndaiganl
-                (_fcd filename, intf * tag, intf * ref, intf * type,
-                 intf * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) ndaigann
-                (_fcd filename, intf * tag, intf * ref, _fcd annotation,
-                 intf * maxlen, intf * type, intf * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) ndaipann
-                (_fcd filename, intf * tag, intf * ref, _fcd annotation,
-                 intf * annlen, intf * type, intf * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) ndailist
-                (_fcd filename, intf * tag, intf reflist[], _fcd labellist,
-          intf * listsize, intf * maxlen, intf * startpos,
-                 intf * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) ndalref
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) ndaclear
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) ndfanlastref
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) ndfanaddfds
-                (intf * dfile, _fcd desc, intf * desclen);
-
-    HDFLIBAPI      FRETVAL(intf) ndfangetfidlen
-                (intf * dfile, intf * isfirst);
-
-    HDFLIBAPI      FRETVAL(intf) ndfangetfdslen
-                (intf * dfile, intf * isfirst);
-
-    HDFLIBAPI      FRETVAL(intf) ndfangetfid
-                (intf * dfile, _fcd id, intf * maxlen, intf * isfirst);
-
-    HDFLIBAPI      FRETVAL(intf) ndfangetfds
-                (intf * dfile, _fcd id, intf * maxlen, intf * isfirst);
-
-    HDFLIBAPI      FRETVAL(intf) ndaafds
-                (intf * dfile, _fcd desc, intf * desclen);
-
-    HDFLIBAPI      FRETVAL(intf) ndagfidl
-                (intf * dfile, intf * isfirst);
-
-    HDFLIBAPI      FRETVAL(intf) ndagfdsl
-                (intf * dfile, intf * isfirst);
-
-    HDFLIBAPI      FRETVAL(intf) ndagfid
-                (intf * dfile, _fcd id, intf * maxlen, intf * isfirst);
-
-    HDFLIBAPI      FRETVAL(intf) ndagfds
-                (intf * dfile, _fcd id, intf * maxlen, intf * isfirst);
-
-    HDFLIBAPI      FRETVAL(intf) ndaiafid
-                (intf * dfile, _fcd id, intf * idlen);
-
-/*
-   ** from dfr8F.c
- */
-#ifndef DFR8_FNAMES
-#   define DFR8_FNAMES
-#ifdef DF_CAPFNAMES
-#   define nd8spal   FNAME(D8SPAL)
-#   define nd8first  FNAME(D8FIRST)
-#   define nd8igdim  FNAME(D8IGDIM)
-#   define nd8igimg  FNAME(D8IGIMG)
-#   define nd8ipimg  FNAME(D8IPIMG)
-#   define nd8iaimg  FNAME(D8IAIMG)
-#   define nd8irref  FNAME(D8IRREF)
-#   define nd8iwref  FNAME(D8IWREF)
-#   define nd8inims  FNAME(D8INIMS)
-#   define nd8lref   FNAME(D8LREF)
-#   define ndfr8lastref      FNAME(DFR8LASTREF)
-#   define ndfr8setpalette   FNAME(DFR8SETPALETTE)
-#   define ndfr8restart  FNAME(DFR8RESTART)
-#   define nd8scomp  FNAME(D8SCOMP)
-#   define ndfr8scompress FNAME(DFR8SCOMPRESS)
-#   define nd8sjpeg  FNAME(D8SJPEG)
-#   define ndfr8sjpeg FNAME(DFR8SJPEG)
-#else                           /* !DF_CAPFNAMES */
-#   define nd8spal   FNAME(d8spal)
-#   define nd8first  FNAME(d8first)
-#   define nd8igdim  FNAME(d8igdim)
-#   define nd8igimg  FNAME(d8igimg)
-#   define nd8ipimg  FNAME(d8ipimg)
-#   define nd8iaimg  FNAME(d8iaimg)
-#   define nd8irref  FNAME(d8irref)
-#   define nd8iwref  FNAME(d8iwref)
-#   define nd8inims  FNAME(d8inims)
-#   define nd8lref   FNAME(d8lref)
-#   define ndfr8lastref      FNAME(dfr8lastref)
-#   define ndfr8setpalette   FNAME(dfr8setpalette)
-#   define ndfr8restart  FNAME(dfr8restart)
-#   define nd8scomp  FNAME(d8scomp)
-#   define ndfr8scompress FNAME(dfr8scompress)
-#   define nd8sjpeg  FNAME(d8sjpeg)
-#   define ndfr8sjpeg FNAME(dfr8sjpeg)
-#endif                          /* DF_CAPFNAMES */
-#endif                          /* DFR8_FNAMES */
-
-    HDFLIBAPI      FRETVAL(intf) nd8spal
-                (_fcd pal);
-
-    HDFLIBAPI      FRETVAL(intf) nd8first
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) nd8igdim
-                (_fcd filename, intf * xdim, intf * ydim, intf * ispal,
-                 intf * lenfn);
-
-    HDFLIBAPI      FRETVAL(intf) nd8igimg
-                (_fcd filename, _fcd image, intf * xdim, intf * ydim,
-                 _fcd pal, intf * lenfn);
-
-    HDFLIBAPI      FRETVAL(intf) nd8ipimg
-                (_fcd filename, _fcd image, intf * xdim, intf * ydim,
-                 intf * compress, intf * lenfn);
-
-    HDFLIBAPI      FRETVAL(intf) nd8iaimg
-                (_fcd filename, _fcd image, intf * xdim, intf * ydim,
-                 intf * compress, intf * lenfn);
-
-    HDFLIBAPI      FRETVAL(intf) nd8irref
-                (_fcd filename, intf * ref, intf * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) nd8iwref
-                (_fcd filename, intf * ref, intf * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) nd8inims
-                (_fcd filename, intf * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) nd8lref
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) ndfr8lastref
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) ndfr8setpalette
-                (_fcd pal);
-
-    HDFLIBAPI      FRETVAL(intf) ndfr8restart
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) nd8scomp
-                (intf * scheme);
-
-    HDFLIBAPI      FRETVAL(intf) ndfr8scompress
-                (intf * scheme);
-
-    HDFLIBAPI      FRETVAL(intf) nd8sjpeg
-                (intf * quality, intf * force_baseline);
-
-    HDFLIBAPI      FRETVAL(intf) ndfr8sjpeg
-                (intf * quality, intf * force_baseline);
-
-/*
-   ** from dfsdF.c
- */
-#ifndef DFSD_FNAMES
-#   define DFSD_FNAMES
-#ifdef DF_CAPFNAMES
-#   define ndsgdast  FNAME(DSGDAST)
-#   define ndsgdisc  FNAME(DSGDISC)
-#   define ndsgrang  FNAME(DSGRANG)
-#   define ndssdims  FNAME(DSSDIMS)
-#   define ndssdisc  FNAME(DSSDISC)
-#   define ndssrang  FNAME(DSSRANG)
-#   define ndsclear  FNAME(DSCLEAR)
-#   define ndsslens  FNAME(DSSLENS)
-#   define ndsgdiln  FNAME(DSGDILN)
-#   define ndsgdaln  FNAME(DSGDALN)
-#   define ndsfirst  FNAME(DSFIRST)
-#   define ndspslc   FNAME(DSPSLC)
-#   define ndseslc   FNAME(DSESLC)
-#   define ndsgnt    FNAME(DSGNT)
-#   define ndssnt    FNAME(DSSNT)
-#   define ndsigdim  FNAME(DSIGDIM)
-#   define ndsigdat  FNAME(DSIGDAT)
-#   define ndsipdat  FNAME(DSIPDAT)
-#   define ndsiadat  FNAME(DSIADAT)
-#   define ndsigdas  FNAME(DSIGDAS)
-#   define ndsigslc  FNAME(DSIGSLC)
-#   define ndsigdis  FNAME(DSIGDIS)
-#   define ndsisslc  FNAME(DSISSLC)
-#   define ndsisdas  FNAME(DSISDAS)
-#   define ndsisdis  FNAME(DSISDIS)
-#   define ndsirref  FNAME(DSIRREF)
-#   define ndslref   FNAME(DSLREF)
-#   define ndsinum   FNAME(DSINUM)
-#   define ndsip32s  FNAME(DSIP32S)
-#   define ndsscal   FNAME(DSSCAL)
-#   define ndsgcal   FNAME(DSGCAL)
-#   define ndfsdgetdatastrs  FNAME(DFSDGETDATASTRS)
-#   define ndfsdgetdimscale  FNAME(DFSDGETDIMSCALE)
-#   define ndfsdgetrange     FNAME(DFSDGETRANGE)
-#   define ndfsdsetdims      FNAME(DFSDSETDIMS)
-#   define ndfsdsetdimscale  FNAME(DFSDSETDIMSCALE)
-#   define ndfsdsetrange     FNAME(DFSDSETRANGE)
-#   define ndfsdclear        FNAME(DFSDCLEAR)
-#   define ndfsdsetlengths   FNAME(DFSDSETLENGTHS)
-#   define ndfsdgetdimlen    FNAME(DFSDGETDIMLEN)
-#   define ndfsdgetdatalen   FNAME(DFSDGETDATALEN)
-#   define ndfsdrestart      FNAME(DFSDRESTART)
-#   define ndfsdputslice     FNAME(DFSDPUTSLICE)
-#   define ndfsdendslice     FNAME(DFSDENDSLICE)
-#   define ndfsdsetnt        FNAME(DFSDSETNT)
-#   define ndfsdgetnt        FNAME(DFSDGETNT)
-#   define ndfsdlastref      FNAME(DFSDLASTREF)
-#   define ndsiwref          FNAME(DSIWREF)
-#   define ndssfill          FNAME(DSSFILL)
-#   define ndsgfill          FNAME(DSGFILL)
-#   define ndsisslab         FNAME(DSISSLAB)
-#   define ndswslab          FNAME(DSWSLAB)
-#   define ndseslab          FNAME(DSESLAB)
-#   define ndsirslab         FNAME(DSIRSLAB)
-#else
-#   define ndsgdast  FNAME(dsgdast)
-#   define ndsgdisc  FNAME(dsgdisc)
-#   define ndsgrang  FNAME(dsgrang)
-#   define ndssdims  FNAME(dssdims)
-#   define ndssdisc  FNAME(dssdisc)
-#   define ndssrang  FNAME(dssrang)
-#   define ndsclear  FNAME(dsclear)
-#   define ndsslens  FNAME(dsslens)
-#   define ndsgdiln  FNAME(dsgdiln)
-#   define ndsgdaln  FNAME(dsgdaln)
-#   define ndsfirst  FNAME(dsfirst)
-#   define ndspslc   FNAME(dspslc)
-#   define ndseslc   FNAME(dseslc)
-#   define ndsgnt    FNAME(dsgnt)
-#   define ndssnt    FNAME(dssnt)
-#   define ndsigdim  FNAME(dsigdim)
-#   define ndsigdat  FNAME(dsigdat)
-#   define ndsipdat  FNAME(dsipdat)
-#   define ndsiadat  FNAME(dsiadat)
-#   define ndsigdas  FNAME(dsigdas)
-#   define ndsigslc  FNAME(dsigslc)
-#   define ndsigdis  FNAME(dsigdis)
-#   define ndsisslc  FNAME(dsisslc)
-#   define ndsisdas  FNAME(dsisdas)
-#   define ndsisdis  FNAME(dsisdis)
-#   define ndsirref  FNAME(dsirref)
-#   define ndslref   FNAME(dslref)
-#   define ndsinum   FNAME(dsinum)
-#   define ndsip32s  FNAME(dsip32s)
-#   define ndsscal   FNAME(dsscal)
-#   define ndsgcal   FNAME(dsgcal)
-#   define ndfsdgetdatastrs  FNAME(dfsdgetdatastrs)
-#   define ndfsdgetdimscale  FNAME(dfsdgetdimscale)
-#   define ndfsdgetrange     FNAME(dfsdgetrange)
-#   define ndfsdsetdims      FNAME(dfsdsetdims)
-#   define ndfsdsetdimscale  FNAME(dfsdsetdimscale)
-#   define ndfsdsetrange     FNAME(dfsdsetrange)
-#   define ndfsdclear        FNAME(dfsdclear)
-#   define ndfsdsetlengths   FNAME(dfsdsetlengths)
-#   define ndfsdgetdimlen    FNAME(dfsdgetdimlen)
-#   define ndfsdgetdatalen   FNAME(dfsdgetdatalen)
-#   define ndfsdrestart      FNAME(dfsdrestart)
-#   define ndfsdputslice     FNAME(dfsdputslice)
-#   define ndfsdendslice     FNAME(dfsdendslice)
-#   define ndfsdsetnt        FNAME(dfsdsetnt)
-#   define ndfsdgetnt        FNAME(dfsdgetnt)
-#   define ndfsdlastref      FNAME(dfsdlastref)
-#   define ndsiwref          FNAME(dsiwref)
-#   define ndssfill          FNAME(dssfill)
-#   define ndsgfill          FNAME(dsgfill)
-#   define ndsisslab         FNAME(dsisslab)
-#   define ndswslab          FNAME(dswslab)
-#   define ndseslab          FNAME(dseslab)
-#   define ndsirslab         FNAME(dsirslab)
-#endif                          /* DF_CAPFNAMES */
-#endif                          /* DFSD_FNAMES */
-
-    HDFLIBAPI      FRETVAL(intf) ndsgdisc
-                (intf * dim, intf * maxsize, void * scale);
-
-    HDFLIBAPI      FRETVAL(intf) ndsgrang
-                (void * pmax, void * pmin);
-
-    HDFLIBAPI      FRETVAL(intf) ndssdims
-                (intf * rank, intf dimsizes[]);
-
-    HDFLIBAPI      FRETVAL(intf) ndssdisc
-                (intf * dim, intf * dimsize, void * scale);
-
-    HDFLIBAPI      FRETVAL(intf) ndssrang
-                (void * max, void * min);
-
-    HDFLIBAPI      FRETVAL(intf) ndsclear
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) ndsslens
-                (intf * maxlen_label, intf * maxlen_unit,
-                 intf * maxlen_format, intf * maxlen_coordsys);
-
-    HDFLIBAPI      FRETVAL(intf) ndsgdiln
-                (intf * dim, intf * llabel, intf * lunit,
-                 intf * lformat);
-
-    HDFLIBAPI      FRETVAL(intf) ndsgdaln
-                (intf * llabel, intf * lunit, intf * lformat,
-                 intf * lcoordsys);
-
-    HDFLIBAPI      FRETVAL(intf) ndsfirst
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) ndspslc
-                (intf windims[], void * data, intf dims[]);
-
-    HDFLIBAPI      FRETVAL(intf) ndseslc
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) ndssnt
-                (intf * numbertype);
-
-    HDFLIBAPI      FRETVAL(intf) ndsgnt
-                (intf * pnumbertype);
-
-    HDFLIBAPI      FRETVAL(intf) ndsigdim
-                (_fcd filename, intf * prank, intf sizes[],
-                 intf * maxrank, intf * lenfn);
-
-    HDFLIBAPI      FRETVAL(intf) ndsigdat
-                (_fcd filename, intf * rank, intf maxsizes[],
-                 void * data, intf * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) ndsipdat
-                (_fcd filename, intf * rank, intf dimsizes[],
-                 void * data, intf * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) ndsiadat
-                (_fcd filename, intf * rank, intf dimsizes[],
-                 void * data, intf * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) ndsigslc
-                (_fcd filename, intf winst[], intf windims[],
-                 void * data, intf dims[], intf * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) ndsisslc
-                (_fcd filename, intf * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) ndsirref
-                (_fcd filename, intf * ref, intf * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) ndslref
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) ndsinum
-                (_fcd filename, intf * len);
-
-    HDFLIBAPI      FRETVAL(intf) ndsip32s
-                (_fcd filename, intf * ref, intf * ispre32, intf * len);
-
-    HDFLIBAPI      FRETVAL(intf) ndfsdgetdatastrs
-                (_fcd label, _fcd unit, _fcd format, _fcd coordsys);
-
-    HDFLIBAPI      FRETVAL(intf) ndfsdgetdimstrs
-                (intf * dim, _fcd label, _fcd unit, _fcd format);
-
-    HDFLIBAPI      FRETVAL(intf) ndfsdgetdimscale
-                (intf * dim, intf * maxsize, void * scale);
-
-    HDFLIBAPI      FRETVAL(intf) ndfsdgetrange
-                (void * pmax, void * pmin);
-
-    HDFLIBAPI      FRETVAL(intf) ndfsdsetdims
-                (intf * rank, intf dimsizes[]);
-
-    HDFLIBAPI      FRETVAL(intf) ndfsdsetdimscale
-                (intf * dim, intf * dimsize, void * scale);
-
-    HDFLIBAPI      FRETVAL(intf) ndfsdsetrange
-                (void * max, void * min);
-
-    HDFLIBAPI      FRETVAL(intf) ndfsdclear
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) ndfsdsetlengths
-                (intf * maxlen_label, intf * maxlen_unit,
-                 intf * maxlen_format, intf * maxlen_coordsys);
-
-    HDFLIBAPI      FRETVAL(intf) ndfsdgetdimlen
-                (intf * dim, intf * llabel, intf * lunit,
-                 intf * lformat);
-
-    HDFLIBAPI      FRETVAL(intf) ndfsdgetdatalen
-                (intf * llabel, intf * lunit, intf * lformat,
-                 intf * lcoordsys);
-
-    HDFLIBAPI      FRETVAL(intf) ndfsdrestart
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) ndfsdputslice
-                (intf windims[], void * data, intf dims[]);
-
-    HDFLIBAPI      FRETVAL(intf) ndfsdendslice
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) ndfsdsetnt
-                (intf * numbertype);
-
-    HDFLIBAPI      FRETVAL(intf) ndfsdgetnt
-                (intf * pnumbertype);
-
-    HDFLIBAPI      FRETVAL(intf) ndfsdlastref
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) ndsisdis
-                (intf * dim, _fcd flabel, _fcd funit, _fcd fformat,
-             intf * llabel, intf * lunit, intf * lformat);
-
-    HDFLIBAPI      FRETVAL(intf) ndsigdis
-                (intf * dim, _fcd label, _fcd unit, _fcd format,
-             intf * llabel, intf * lunit, intf * lformat);
-
-    HDFLIBAPI      FRETVAL(intf) ndsisdas
-                (_fcd flabel, _fcd funit, _fcd fformat, _fcd fcoordsys,
-            intf * isfortran, intf * llabel, intf * lunit,
-                 intf * lformat, intf * lcoordsys);
-
-    HDFLIBAPI      FRETVAL(intf) ndsigdas
-                (_fcd label, _fcd unit, _fcd format, _fcd coordsys, intf * llabel,
-             intf * lunit, intf * lformat, intf * lcoord);
-
-    HDFLIBAPI      FRETVAL(intf) ndsscal
-                (float64 * cal, float64 * cal_err, float64 * ioff,
-                 float64 * ioff_err, intf * cal_type);
-
-    HDFLIBAPI      FRETVAL(intf) ndsgcal
-                (float64 * cal, float64 * cal_err, float64 * ioff,
-                 float64 * ioff_err, intf * cal_type);
-
-    HDFLIBAPI      FRETVAL(intf) ndswref
-                (_fcd filename, intf * fnlen, intf * ref);
-
-    HDFLIBAPI      FRETVAL(intf) ndssfill
-                (void * fill_value);
-
-    HDFLIBAPI      FRETVAL(intf) ndsgfill
-                (void * fill_value);
-
-    HDFLIBAPI      FRETVAL(intf) ndssslab
-                (_fcd filename, intf * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) ndswslab
-                (intf start[], intf  stride[],
-                 intf  cont[], void * data);
-
-    HDFLIBAPI      FRETVAL(intf) ndseslab
-                (void);
-
-    HDFLIBAPI	FRETVAL(intf) ndsiwref
-		(_fcd filename, intf * fnlen, intf * ref);
-
-    HDFLIBAPI	FRETVAL(intf) ndsisslab
-		(_fcd filename, intf * fnlen);
-
-    HDFLIBAPI	FRETVAL(intf) ndsirslab
-		(_fcd filename, intf * fnlen, intf start[], intf slab_size[],
-	         intf stride[], void * buffer, intf buffer_size[]);
-
-/*
-   ** from dfpF.c
- */
-
-#ifndef DFP_FNAMES
-#   define DFP_FNAMES
-#ifdef DF_CAPFNAMES
-#   define ndpigpal  FNAME(DPIGPAL)
-#   define ndpippal  FNAME(DPIPPAL)
-#   define ndpinpal  FNAME(DPINPAL)
-#   define ndpiwref  FNAME(DPIWREF)
-#   define ndpirref  FNAME(DPIRREF)
-#   define ndprest   FNAME(DPREST)
-#   define ndplref   FNAME(DPLREF)
-#   define ndfprestart   FNAME(DFPRESTART)
-#   define ndfplastref   FNAME(DFPLASTREF)
-#else                           /* !DF_CAPNAMES */
-#   define ndpigpal  FNAME(dpigpal)
-#   define ndpippal  FNAME(dpippal)
-#   define ndpinpal  FNAME(dpinpal)
-#   define ndpiwref  FNAME(dpiwref)
-#   define ndpirref  FNAME(dpirref)
-#   define ndprest   FNAME(dprest)
-#   define ndplref   FNAME(dplref)
-#   define ndfprestart   FNAME(dfprestart)
-#   define ndfplastref   FNAME(dfplastref)
-#endif                          /* DF_CAPFNAMES */
-#endif                          /* DFP_FNAMES */
-
-    HDFLIBAPI      FRETVAL(intf) ndpigpal
-                (_fcd filename, _fcd pal, intf  * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) ndpippal
-                (_fcd filename, _fcd pal, intf  * overwrite, _fcd filemode,
-                 intf  * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) ndpinpal
-                (_fcd filename, intf  * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) ndpirref
-                (_fcd filename, intf  * ref, intf  * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) ndpiwref
-                (_fcd filename, intf  * ref, intf  * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) ndprest
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) ndplref
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) ndfprestart
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) ndfplastref
-                (void);
-
-/*
-   ** from df24F.c
- */
-#ifndef DF24_FNAMES
-#   define DF24_FNAMES
-#ifdef DF_CAPFNAMES
-#   define nd2reqil  FNAME(D2REQIL)
-#   define ndf24reqil    FNAME(DF24REQIL)
-#   define nd2sdims  FNAME(D2SDIMS)
-#   define ndf24setdims  FNAME(DF24SETDIMS)
-#   define nd2setil  FNAME(D2SETIL)
-#   define ndf24setil    FNAME(DF24SETIL)
-#   define nd2first  FNAME(D2FIRST)
-#   define ndf24restart  FNAME(DF24RESTART)
-#   define nd2igdim  FNAME(D2IGDIM)
-#   define nd2igimg  FNAME(D2IGIMG)
-#   define nd2iaimg  FNAME(D2IAIMG)
-#   define nd2irref  FNAME(D2IRREF)
-#   define nd2inimg  FNAME(D2INIMG)
-#   define nd2lref   FNAME(D2LREF)
-#   define nd2scomp  FNAME(D2SCOMP)
-#   define ndf24scompress FNAME(DF24SCOMPRESS)
-#   define nd2sjpeg  FNAME(D2SJPEG)
-#   define ndf24sjpeg FNAME(DF24SJPEG)
-#else
-#   define nd2reqil  FNAME(d2reqil)
-#   define ndf24reqil    FNAME(df24reqil)
-#   define nd2sdims  FNAME(d2sdims)
-#   define ndf24setdims  FNAME(df24setdims)
-#   define nd2setil  FNAME(d2setil)
-#   define ndf24setil    FNAME(df24setil)
-#   define nd2first  FNAME(d2first)
-#   define ndf24restart  FNAME(df24restart)
-#   define nd2igdim  FNAME(d2igdim)
-#   define nd2igimg  FNAME(d2igimg)
-#   define nd2iaimg  FNAME(d2iaimg)
-#   define nd2irref  FNAME(d2irref)
-#   define nd2inimg  FNAME(d2inimg)
-#   define nd2lref   FNAME(d2lref)
-#   define nd2scomp  FNAME(d2scomp)
-#   define ndf24scompress FNAME(df24scompress)
-#   define nd2sjpeg  FNAME(d2sjpeg)
-#   define ndf24sjpeg FNAME(df24sjpeg)
-#endif                          /* DF_CAPFNAMES */
-#endif                          /* DF24_FNAMES */
-
-    HDFLIBAPI      FRETVAL(intf) nd2reqil
-                (intf  * il);
-
-    HDFLIBAPI      FRETVAL(intf) nd2sdims
-                (intf  * xdim, intf  * ydim);
-
-    HDFLIBAPI      FRETVAL(intf) nd2igdim
-                (_fcd filename, intf  * pxdim, intf  * pydim, intf  * pil,
-                 intf  * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) nd2igimg
-                (_fcd filename, _fcd image, intf  * xdim, intf  * ydim,
-                 intf  * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) nd2iaimg
-                (_fcd filename, _fcd image, intf  * xdim, intf  * ydim,
-                 intf  * fnlen, intf  * newfile);
-
-    HDFLIBAPI      FRETVAL(intf) nd2setil
-                (intf  * il);
-
-    HDFLIBAPI      FRETVAL(intf) nd2first
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) ndf24reqil
-                (intf  * il);
-
-    HDFLIBAPI      FRETVAL(intf) ndf24setdims
-                (intf  * xdim, intf  * ydim);
-
-    HDFLIBAPI      FRETVAL(intf) ndf24setil
-                (intf  * il);
-
-    HDFLIBAPI      FRETVAL(intf) ndf24restart
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) nd2irref
-                (_fcd filename, intf  * ref, intf  * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) nd2inimg
-                (_fcd filename, intf  * fnlen);
-
-    HDFLIBAPI      FRETVAL(intf) nd2lref
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) nd2scomp
-                (intf * scheme);
-
-    HDFLIBAPI      FRETVAL(intf) ndf24scompress
-                (intf * scheme);
-
-    HDFLIBAPI      FRETVAL(intf) nd2sjpeg
-                (intf * quality, intf * force_baseline);
-
-    HDFLIBAPI      FRETVAL(intf) ndf24sjpeg
-                (intf * quality, intf * force_baseline);
-
-/*
-   ** from dfF.c
- */
-#ifndef DF_FNAMES
-#   define DF_FNAMES
-#ifdef DF_CAPFNAMES
-#   define ndfiaccess FNAME(DFIACCESS)
-#   define ndfiopen  FNAME(DFIOPEN)
-#   define ndfclose  FNAME(DFCLOSE)
-#   define ndfdesc   FNAME(DFDESC)
-#   define ndfdup    FNAME(DFDUP)
-#   define ndfdel    FNAME(DFDEL)
-#   define ndfstart  FNAME(DFSTART)
-#   define ndfread   FNAME(DFREAD)
-#   define ndfseek   FNAME(DFSEEK)
-#   define ndfwrite  FNAME(DFWRITE)
-#   define ndfupdate FNAME(DFUPDATE)
-#   define ndfget    FNAME(DFGET)
-#   define ndfput    FNAME(DFPUT)
-#   define ndfsfind  FNAME(DFSFIND)
-#   define ndffind   FNAME(DFFIND)
-#   define ndferrno  FNAME(DFERRNO)
-#   define ndfnewref FNAME(DFNEWREF)
-#   define ndfnumber FNAME(DFNUMBER)
-#   define ndfstat   FNAME(DFSTAT)
-#   define ndfiishdf FNAME(DFIISHDF)
-#else                           /* !DF_CAPFNAMES */
-#   define ndfiaccess FNAME(dfiaccess)
-#   define ndfiopen  FNAME(dfiopen)
-#   define ndfclose  FNAME(dfclose)
-#   define ndfdesc   FNAME(dfdesc)
-#   define ndfdup    FNAME(dfdup)
-#   define ndfdel    FNAME(dfdel)
-#   define ndfstart  FNAME(dfstart)
-#   define ndfread   FNAME(dfread)
-#   define ndfseek   FNAME(dfseek)
-#   define ndfwrite  FNAME(dfwrite)
-#   define ndfupdate FNAME(dfupdate)
-#   define ndfget    FNAME(dfget)
-#   define ndfput    FNAME(dfput)
-#   define ndfsfind  FNAME(dfsfind)
-#   define ndffind   FNAME(dffind)
-#   define ndferrno  FNAME(dferrno)
-#   define ndfnewref FNAME(dfnewref)
-#   define ndfnumber FNAME(dfnumber)
-#   define ndfstat   FNAME(dfstat)
-#   define ndfiishdf FNAME(dfiishdf)
-#endif                          /* DF_CAPFNAMES */
-#endif                          /* DF_FNAMES */
-
-    HDFLIBAPI      FRETVAL(intf) ndfiopen
-                (_fcd name, intf  * acc_mode, intf  * defdds, intf  * namelen);
-
-    HDFLIBAPI      FRETVAL(intf) ndfclose
-                (intf  * dfile);
-
-    HDFLIBAPI      FRETVAL(intf) ndfdesc
-                (intf  * dfile, intf  ptr[][4], intf  * begin,
-                 intf  * num);
-
-    HDFLIBAPI      FRETVAL(intf) ndfdup
-                (intf  * dfile, intf  * tag, intf  * ref, intf  * otag,
-                 intf  * oref);
-
-    HDFLIBAPI      FRETVAL(intf) ndfdel
-                (intf  * dfile, intf  * tag, intf  * ref);
-
-    HDFLIBAPI      FRETVAL(intf) ndfiaccess
-                (intf  * dfile, intf  * tag, intf  * ref, _fcd acc_mode, intf  * acclen);
-
-    HDFLIBAPI      FRETVAL(intf) ndfstart
-                (intf  * dfile, intf  * tag, intf  * ref, char  * acc_mode);
-
-    HDFLIBAPI      FRETVAL(intf) ndfread
-                (intf  * dfile, _fcd ptr, intf  * len);
-
-    HDFLIBAPI      FRETVAL(intf) ndfseek
-                (intf  * dfile, intf  * offset);
-
-    HDFLIBAPI      FRETVAL(intf) ndfwrite
-                (intf  * dfile, _fcd ptr, intf  * len);
-
-    HDFLIBAPI      FRETVAL(intf) ndfupdate
-                (intf  * dfile);
-
-    HDFLIBAPI      FRETVAL(intf) ndfget
-                (intf  * dfile, intf  * tag, intf  * ref, _fcd ptr);
-
-    HDFLIBAPI      FRETVAL(intf) ndfput
-                (intf  * dfile, intf  * tag, intf  * ref, _fcd ptr, intf  * len);
-
-    HDFLIBAPI      FRETVAL(intf) ndfsfind
-                (intf  * dfile, intf  * tag, intf  * ref);
-
-    HDFLIBAPI      FRETVAL(intf) ndffind
-                (intf  * dfile, intf  * itag, intf  * iref, intf  * len);
-
-    HDFLIBAPI      FRETVAL(intf) ndferrno
-                (void);
-
-    HDFLIBAPI      FRETVAL(intf) ndfnewref
-                (intf  * dfile);
-
-    HDFLIBAPI      FRETVAL(intf) ndfnumber
-                (intf  * dfile, intf  * tag);
-
-    HDFLIBAPI      FRETVAL(intf) ndfiishdf
-                (_fcd name, intf  * namelen);
-
-/*
-   ** from dfutil.c
- */
-    HDFLIBAPI uint16 DFfindnextref
-                (int32 file_id, uint16 tag, uint16 lref);
-
-/*
-   ** from dfutilF.c
- */
-#ifndef DFUTIL_FNAMES
-#   define DFUTIL_FNAMES
-#ifdef DF_CAPFNAMES
-#   define ndfindnr          FNAME(DFINDNR)
-#   define ndffindnextref    FNAME(DFFINDNEXTREF)
-#else
-#   define ndfindnr          FNAME(dfindnr)
-#   define ndffindnextref    FNAME(dffindnextref)
-#endif                          /* DF_CAPFNAMES */
-#endif                          /* DFUTIL_FNAMES */
-
-    HDFLIBAPI      FRETVAL(intf) ndfindnr
-                (intf  * dfile, intf  * tag, intf  * lref);
-
-    HDFLIBAPI      FRETVAL(intf) ndffindnextref
-                (intf  * dfile, intf  * tag, intf  * lref);
-
-/*
-   ** from herrF.c
- */
-#ifndef HERR_FNAMES
-#   define HERR_FNAMES
-#ifdef DF_CAPFNAMES
-#   define nheprnt   FNAME(HEPRNT)
-#   define nheprntc   FNAME(HEPRNTC)
-#   define nhestringc FNAME(HESTRINGC)
-#else
-#   define nheprnt   FNAME(heprnt)
-#   define nheprntc   FNAME(heprntc)
-#   define nhestringc FNAME(hestringc)
-#endif                          /* DF_CAPFNAMES */
-#endif                          /* HERR_FNAMES */
-
-    HDFLIBAPI      FRETVAL(void) nheprnt
-                (intf  * print_levels);
-
-    HDFLIBAPI      FRETVAL(intf) nheprntc
-                (_fcd filename, intf  * print_levels, intf *namelen);
-
-    HDFLIBAPI      FRETVAL(intf) nhestringc
-				(intf *error_code,_fcd error_message, intf *len);
-/*
-   ** from hfileF.c
- */
-#ifndef HFILE_FNAMES
-#   define HFILE_FNAMES
-#ifdef DF_CAPFNAMES
-# if defined(UNIX386) || (!(defined INTEL86) && !(defined WIN32))
-#   define nhiopen   FNAME(HIOPEN)
-#   define nhclose   FNAME(HCLOSE)
-#   define nhnumber  FNAME(HNUMBER)
-#   define nhxisdir  FNAME(HXISDIR)
-#   define nhxiscdir FNAME(HXISCDIR)
-#   define nhddontatexit FNAME(HDDONTATEXIT)
-#   define nhglibverc FNAME(HGLIBVERC)
-#   define nhgfilverc FNAME(HGFILVERC)
-#   define nhiishdf   FNAME(HIISHDF)
-#  else                                   /* !sl */
-#   define nhiopen   FNAME(HIOPEN)
-#   define nhiclose   FNAME(HICLOSE)
-#   define nhinumbr  FNAME(HINUMBR)
-#   define nhxisdir  FNAME(HXISDIR)
-#   define nhxiscdir FNAME(HXISCDIR)
-#   define nhddontatexit FNAME(HDDONTATEXIT)
-#   define nhglibverc FNAME(HGLIBVERC)
-#   define nhgfilverc FNAME(HGFILVERC)
-#   define nhiishdf   FNAME(HIISHDF)
-#  endif
-
-#else
-# if defined(UNIX386) || (!(defined INTEL86) && !(defined WIN32))
-#   define nhiopen   FNAME(hiopen)
-#   define nhclose   FNAME(hclose)
-#   define nhnumber  FNAME(hnumber)
-#   define nhxisdir  FNAME(hxisdir)
-#   define nhxiscdir FNAME(hxiscdir)
-#   define nhddontatexit FNAME(hddontatexit)
-#   define nhglibverc FNAME(hglibverc)
-#   define nhgfilverc FNAME(hgfilverc)
-#   define nhiishdf   FNAME(hiishdf)
-#  else                                   /* !sl */
-#   define nhiopen   FNAME(hiopen)
-#   define nhiclose   FNAME(hiclose)
-#   define nhinumbr  FNAME(hinumbr)
-#   define nhxisdir  FNAME(hxisdir)
-#   define nhxiscdir FNAME(hxiscdir)
-#   define nhddontatexit FNAME(hddontatexit)
-#   define nhglibverc FNAME(hglibverc)
-#   define nhgfilverc FNAME(hgfilverc)
-#   define nhiishdf   FNAME(hiishdF)
-#  endif
-
-#endif                          /* DF_CAPFNAMES */
-#endif                          /* HFILE_FNAMES */
-
-    HDFLIBAPI      FRETVAL(intf) nhiopen
-                (_fcd name, intf  * acc_mode, intf  * defdds, intf  * namelen);
-
-    HDFLIBAPI      FRETVAL(intf) nhclose
-                (intf  * file_id);
-
-    HDFLIBAPI	FRETVAL(intf) nhnumber
-		(intf  * file_id, intf  * tag);
-
-    HDFLIBAPI	FRETVAL(intf) nhxisdir
-		(_fcd dir, intf * dirlen);
-
-    HDFLIBAPI	FRETVAL(intf) nhxiscdir
-		(_fcd dir, intf * dirlen);
- 
-    HDFLIBAPI      FRETVAL(intf)
-                nhddontatexit(void);
-
-    HDFLIBAPI      FRETVAL(intf)   
-                nhglibverc(intf *major_v, intf *minor_v, intf *release,
-                _fcd string, intf *len);
-
-    HDFLIBAPI      FRETVAL(intf)
-                nhgfilverc(intf *file_id, intf *major_v, intf *minor_v,
-                intf *release, _fcd string, intf *len);
-
-    HDFLIBAPI      FRETVAL(intf) nhiishdf
-                (_fcd name, intf  * namelen);
-
-
-    
-/*
-   ** from dfufp2im.c
- */
-#ifndef DFUFP2I_FNAMES
-#   define DFUFP2I_FNAMES
-#ifdef DF_CAPFNAMES
-#   define nduif2i       FNAME(DUIF2I)
-#else
-#   define nduif2i       FNAME(duif2i)
-#endif                          /* DF_CAPFNAMES */
-#endif                          /* DFUFP2I_FNAMES */
-
-    HDFLIBAPI      FRETVAL(int) nduif2i
-                (int32  * hdim, int32  * vdim, float32  * max,
-        float32  * min, float32  hscale[], float32  vscale[],
-                 float32  data[], _fcd palette, _fcd outfile,
-              int  * ct_method, int32  * hres, int32  * vres,
-                 int  * compress, int  * lenfn);
-
-    HDFLIBAPI int  DFUfptoimage
-                (int32 hdim, int32 vdim, float32 max, float32 min,
-       float32  * hscale, float32  * vscale, float32  * data,
-                 uint8  * palette, char  * outfile, int ct_method,
-                 int32 hres, int32 vres, int compress);
-
-/* for Multi-file fortran Annotation inteface */
-#ifndef MFAN_FNAMES
-#   define  MFAN_FNAMES
-#ifdef DF_CAPFNAMES
-# if defined(UNIX386) || (!(defined INTEL86) && !(defined WIN32))
-#  define nafstart      FNAME(AFSTART)
-#  define naffileinfo   FNAME(AFFILEINFO)
-#  define nafend        FNAME(AFEND)
-#  define nafcreate     FNAME(AFCREATE)
-#  define naffcreate    FNAME(AFFCREATE)
-#  define nafselect     FNAME(AFSELECT)
-#  define nafnumann     FNAME(AFNUMANN)
-#  define nafannlist    FNAME(AFANNLIST)
-#  define nafannlen     FNAME(AFANNLEN)
-#  define nafwriteann   FNAME(AFWRITEANN)
-#  define nafreadann    FNAME(AFREADANN)
-#  define nafendaccess  FNAME(AFENDACCESS)
-#  define nafgettagref  FNAME(AFGETTAGREF)
-#  define nafidtagref   FNAME(AFIDTAGREF)
-#  define naftagrefid   FNAME(AFTAGREFID)
-#  define nafatypetag   FNAME(AFATYPETAG)
-#  define naftagatype   FNAME(AFTAGATYPE)
-# else                                     /* !sl */
-#  define nafistart     FNAME(AFISTART)
-#  define nafifinf      FNAME(AFIFINF)
-#  define nafiend       FNAME(AFIEND)
-#  define naficreat     FNAME(AFICREAT)
-#  define nafifcreat    FNAME(AFIFCREAT)
-#  define nafiselct     FNAME(AFISELCT)
-#  define nafinann      FNAME(AFINANN)
-#  define nafialst      FNAME(AFIALST)
-#  define nafialen      FNAME(AFIALEN)
-#  define nafiwann      FNAME(AFIWANN)
-#  define nafirann      FNAME(AFIRANN)
-#  define nafiendac     FNAME(AFIENDAC)
-#  define nafigtr       FNAME(AFIGTR)
-#  define nafiid2tr     FNAME(AFIID2TR)
-#  define nafitr2id     FNAME(AFITR2ID)
-#  define nafitp2tg     FNAME(AFITP2TG)
-#  define nafitg2tp     FNAME(AFITG2TP)
-# endif
-#else  /* !DF_CAPFNAMES */
-# if defined(UNIX386) || (!(defined INTEL86) && !(defined WIN32))
-#  define nafstart      FNAME(afstart)
-#  define naffileinfo   FNAME(affileinfo)
-#  define nafend        FNAME(afend)
-#  define nafcreate     FNAME(afcreate)
-#  define naffcreate    FNAME(affcreate)
-#  define nafselect     FNAME(afselect)
-#  define nafnumann     FNAME(afnumann)
-#  define nafannlist    FNAME(afannlist)
-#  define nafannlen     FNAME(afannlen)
-#  define nafwriteann   FNAME(afwriteann)
-#  define nafreadann    FNAME(afreadann)
-#  define nafendaccess  FNAME(afendaccess)
-#  define nafgettagref  FNAME(afgettagref)
-#  define nafidtagref   FNAME(afidtagref)
-#  define naftagrefid   FNAME(aftagrefid)
-#  define nafatypetag   FNAME(afatypetag)
-#  define naftagatype   FNAME(aftagatype)
-# else                                       /* !sl */
-#  define nafistart     FNAME(afistart)
-#  define nafifinf      FNAME(afifinf)
-#  define nafiend       FNAME(afiend)
-#  define naficreat     FNAME(aficreat)
-#  define nafifcreat    FNAME(afifcreat)
-#  define nafiselct     FNAME(afiselct)
-#  define nafinann      FNAME(afinamm)
-#  define nafialst      FNAME(afialst)
-#  define nafialen      FNAME(afialen)
-#  define nafiwann      FNAME(afiwann)
-#  define nafirann      FNAME(afirann)
-#  define nafiendac     FNAME(afiendac)
-#  define nafigtr       FNAME(afigtr)
-#  define nafiid2tr     FNAME(afiid2tr)
-#  define nafitr2id     FNAME(afitr2id)
-#  define nafitp2tg     FNAME(afitp2tg)
-#  define nafitg2tp     FNAME(afitg2tp)
-# endif
-#endif /* DF_CAPFNAMES */
-#endif /* MFAN_FNAMES */
-
-/* Multi-file Annotation C-stubs for fortan interface found in mfanf.c */
-
-HDFLIBAPI FRETVAL(intf)
-nafstart(intf *file_id);
-
-HDFLIBAPI FRETVAL(intf)
-naffileinfo(intf *an_id, intf *num_flabel, intf *num_fdesc, intf *num_olabel,
-            intf *num_odesc);
-
-HDFLIBAPI FRETVAL(intf)
-nafend(intf *an_id);
-
-HDFLIBAPI FRETVAL(intf)
-nafcreate(intf *an_id, intf *etag, intf *eref, intf *atype);
-
-HDFLIBAPI FRETVAL(intf)
-naffcreate(intf *an_id, intf *atype);
-
-HDFLIBAPI FRETVAL(intf)
-nafselect(intf *an_id, intf *idx, intf *atype);
-
-HDFLIBAPI FRETVAL(intf)
-nafnumann(intf *an_id, intf *atype, intf *etag, intf *eref);
-
-HDFLIBAPI FRETVAL(intf)
-nafannlist(intf *an_id, intf *atype, intf *etag, intf *eref, intf alist[]);
-
-HDFLIBAPI FRETVAL(intf)
-nafannlen(intf *ann_id);
-
-HDFLIBAPI FRETVAL(intf)
-nafwriteann(intf *ann_id,_fcd ann, intf *annlen);
-
-HDFLIBAPI FRETVAL(intf)
-nafreadann(intf *ann_id,_fcd ann, intf *maxlen);
-
-HDFLIBAPI FRETVAL(intf)
-nafendaccess(intf *ann_id);
-
-HDFLIBAPI FRETVAL(intf)
-nafgettagref(intf *an_id, intf *idx, intf *type, intf *tag, intf *ref);
-
-HDFLIBAPI FRETVAL(intf)
-nafidtagref(intf *ann_id, intf *tag, intf *ref);
-
-HDFLIBAPI FRETVAL(intf)
-naftagrefid(intf *an_id, intf *tag, intf *ref);
-
-HDFLIBAPI FRETVAL(intf)
-nafatypetag(intf *atype);
-
-HDFLIBAPI FRETVAL(intf)
-naftagatype(intf *tag);
-
-/* Multi-file Annotation C-routines found in mfan.c */
-HDFLIBAPI int32 ANstart(int32 file_id);
-
-HDFLIBAPI intn  ANfileinfo(int32 an_id, int32 *n_file_label, int32 *n_file_desc,
-                        int32 *n_obj_label, int32 *n_obj_desc);
-
-HDFLIBAPI int32 ANend(int32 an_id);
-
-HDFLIBAPI int32 ANcreate(int32 an_id, uint16 elem_tag, uint16 elem_ref, 
-                      ann_type type);
-
-HDFLIBAPI int32 ANcreatef(int32 an_id, ann_type type);
-
-HDFLIBAPI int32 ANselect(int32 an_id, int32 idx, ann_type type);
-
-HDFLIBAPI intn  ANnumann(int32 an_id, ann_type type, uint16 elem_tag, 
-                      uint16 elem_ref);
-
-HDFLIBAPI intn  ANannlist(int32 an_id, ann_type type, uint16 elem_tag, 
-                       uint16 elem_ref, int32 ann_list[]);
-
-HDFLIBAPI int32 ANannlen(int32 ann_id);
-
-HDFLIBAPI int32 ANwriteann(int32 ann_id, const char *ann, int32 annlen);
-
-HDFLIBAPI int32 ANreadann(int32 ann_id, char *ann, int32 maxlen);
-
-HDFLIBAPI intn  ANendaccess(int32 ann_id);
-
-HDFLIBAPI int32 ANget_tagref(int32 an_id, int32 idx, ann_type type,
-                          uint16 *ann_tag, uint16 *ann_ref);
-
-HDFLIBAPI int32 ANid2tagref(int32 an_id, uint16 *ann_tag, uint16 *ann_ref);
-
-HDFLIBAPI int32 ANtagref2id(int32 an_id, uint16 ann_tag, uint16 ann_ref);
-
-HDFLIBAPI uint16 ANatype2tag(ann_type atype);
-
-HDFLIBAPI ann_type ANtag2atype(uint16 atag);
-
-HDFLIBAPI intn ANdestroy(void);
-
-/* for Multi-file fortran GR interface */
-#ifndef MFGR_FNAMES
-#   define  MFGR_FNAMES
-#ifdef DF_CAPFNAMES
-# if defined(UNIX386) || (!(defined INTEL86) && !(defined WIN32))
-#  define nmgstart      FNAME(MGSTART)
-#  define nmgfinfo      FNAME(MGFINFO)
-#  define nmgend        FNAME(MGEND)
-#  define nmgicreat     FNAME(MGICREAT)
-#  define nmgselct      FNAME(MGSELCT)
-#  define nmgin2ndx     FNAME(MGIN2NDX)
-#  define nmggiinf      FNAME(MGGIINF)
-#  define nmgwcimg      FNAME(MGWCIMG)
-#  define nmgrcimg      FNAME(MGRCIMG)
-#  define nmgwrimg      FNAME(MGWRIMG)
-#  define nmgrdimg      FNAME(MGRDIMG)
-#  define nmgendac      FNAME(MGENDAC)
-#  define nmgid2rf      FNAME(MGID2RF)
-#  define nmgr2idx      FNAME(MGR2IDX)
-#  define nmgrltil      FNAME(MGRLTIL)
-#  define nmgrimil      FNAME(MGRIMIL)
-#  define nmggltid      FNAME(MGGLTID)
-#  define nmgglinf      FNAME(MGGLINF)
-#  define nmgwrlut      FNAME(MGWRLUT)
-#  define nmgwclut      FNAME(MGWCLUT)
-#  define nmgrdlut      FNAME(MGRDLUT)
-#  define nmgrclut      FNAME(MGRCLUT)
-#  define nmgisxfil     FNAME(MGISXFIL)
-#  define nmgssctp      FNAME(MGSACTP)
-#  define nmgiscatt     FNAME(MGISCATT)
-#  define nmgisattr     FNAME(MGISATTR)
-#  define nmgatinf      FNAME(MGATINF)
-#  define nmggcatt      FNAME(MGGCATT)
-#  define nmggnatt      FNAME(MGGNATT)
-#  define nmggattr      FNAME(MGGATTR)
-#  define nmgifndat     FNAME(MGIFNDAT)
-# define nmgcgichnk        FNAME(MGCGICHNK)
-# define nmgcrcchnk        FNAME(MGCRCCHNK)
-# define nmgcrchnk         FNAME(MGCRCHNK)
-# define nmgcscchnk        FNAME(MGCSCCHNK)
-# define nmgcschnk         FNAME(MGCSCHNK)
-# define nmgcwcchnk        FNAME(MGCWCCHNK)
-# define nmgcwchnk         FNAME(MGCWCHNK)
-# define nmgcscompress     FNAME(MGCSCOMPRESS)
-# define nmgcgcompress     FNAME(MGCGCOMPRESS)
-# define nmglt2rf         FNAME(MGLT2RF)
-# define nmgcgnluts       FNAME(MGCGNLUTS)
-# else                                  /* !sl */
-#  define nmgistrt      FNAME(MGISTRT)
-#  define nmgifinf      FNAME(MGIFINF)
-#  define nmgiend       FNAME(MGIEND)
-#  define nmgicreat     FNAME(MGICREAT)
-#  define nmgislct      FNAME(MGISLCT)
-#  define nmgin2ndx     FNAME(MGIN2NDX)
-#  define nmgigiinf     FNAME(MGIGIINF)
-#  define nmgiwcim      FNAME(MGIWCIM)
-#  define nmgircim      FNAME(MGIRCIM)
-#  define nmgiwimg      FNAME(MGIWIMG)
-#  define nmgirimg      FNAME(MGIRIMG)
-#  define nmgiendac     FNAME(MGIENDAC)
-#  define nmgiid2r      FNAME(MGIID2R)
-#  define nmgir2dx      FNAME(MGIR2DX)
-#  define nmgiltil      FNAME(MGILTIL)
-#  define nmgiimil      FNAME(MGIIMIL)
-#  define nmgiglid      FNAME(MGIGLID)
-#  define nmgiglinf     FNAME(MGIGLINF)
-#  define nmgiwrlt      FNAME(MGIWRLT)
-#  define nmgiwclt      FNAME(MGIWCLT)
-#  define nmgirdlt      FNAME(MGIRDLT)
-#  define nmgirclt      FNAME(MGIRCLT)
-#  define nmgisxfil     FNAME(MGISXFIL)
-#  define nmgiactp      FNAME(MGIACTP)
-#  define nmgiscatt     FNAME(MGISCATT)
-#  define nmgisattr     FNAME(MGISATTR)
-#  define nmgiainf      FNAME(MGIAINF)
-#  define nmgigcat      FNAME(MGIGCAT)
-#  define nmgignat      FNAME(MGIGNAT)
-#  define nmgigatt      FNAME(MGIGATT)
-#  define nmgifndat     FNAME(MGIFNDAT)
-# define nmgcgichnk        FNAME(MGCGICHNK)
-# define nmgcrcchnk        FNAME(MGCRCCHNK)
-# define nmgcrchnk         FNAME(MGCRCHNK)
-# define nmgcscchnk        FNAME(MGCSCCHNK)
-# define nmgcschnk         FNAME(MGCSCHNK)
-# define nmgcwcchnk        FNAME(MGCWCCHNK)
-# define nmgcwchnk         FNAME(MGCWCHNK)
-# define nmgcscompress     FNAME(MGCSCOMPRESS)
-# define nmgcgcompress     FNAME(MGCGCOMPRESS)
-# define nmglt2rf         FNAME(MGLT2RF)
-# define nmgcgnluts       FNAME(MGCGNLUTS)
-# endif
-#else  /* !DF_CAPFNAMES */
-# if defined(UNIX386) || (!(defined INTEL86) && !(defined WIN32))
-#  define nmgstart      FNAME(mgstart)
-#  define nmgfinfo      FNAME(mgfinfo)
-#  define nmgend        FNAME(mgend)
-#  define nmgicreat     FNAME(mgicreat)
-#  define nmgselct      FNAME(mgselct)
-#  define nmgin2ndx     FNAME(mgin2ndx)
-#  define nmggiinf      FNAME(mggiinf)
-#  define nmgwcimg      FNAME(mgwcimg)
-#  define nmgrcimg      FNAME(mgrcimg)
-#  define nmgwrimg      FNAME(mgwrimg)
-#  define nmgrdimg      FNAME(mgrdimg)
-#  define nmgendac      FNAME(mgendac)
-#  define nmgid2rf      FNAME(mgid2rf)
-#  define nmgr2idx      FNAME(mgr2idx)
-#  define nmgrltil      FNAME(mgrltil)
-#  define nmgrimil      FNAME(mgrimil)
-#  define nmggltid      FNAME(mggltid)
-#  define nmgglinf      FNAME(mgglinf)
-#  define nmgwrlut      FNAME(mgwrlut)
-#  define nmgwclut      FNAME(mgwclut)
-#  define nmgrdlut      FNAME(mgrdlut)
-#  define nmgrclut      FNAME(mgrclut)
-#  define nmgisxfil     FNAME(mgisxfil)
-#  define nmgssctp      FNAME(mgsactp)
-#  define nmgiscatt     FNAME(mgiscatt)
-#  define nmgisattr     FNAME(mgisattr)
-#  define nmgatinf      FNAME(mgatinf)
-#  define nmggcatt      FNAME(mggcatt)
-#  define nmggnatt      FNAME(mggnatt)
-#  define nmggattr      FNAME(mggattr)
-#  define nmgifndat     FNAME(mgifndat)
-# define nmgcgichnk        FNAME(mgcgichnk)
-# define nmgcrcchnk        FNAME(mgcrcchnk)
-# define nmgcrchnk         FNAME(mgcrchnk)
-# define nmgcscchnk        FNAME(mgcscchnk)
-# define nmgcschnk         FNAME(mgcschnk)
-# define nmgcwcchnk        FNAME(mgcwcchnk)
-# define nmgcwchnk         FNAME(mgcwchnk)
-# define nmgcscompress     FNAME(mgcscompress)
-# define nmgcgcompress     FNAME(mgcgcompress)
-# define nmglt2rf         FNAME(mglt2rf)
-# define nmgcgnluts       FNAME(mgcgnluts)
-# else                                    /* !sl */
-#  define nmgistrt      FNAME(mgistrt)
-#  define nmgifinf      FNAME(mgifinf)
-#  define nmgiend        FNAME(mgiend)
-#  define nmgicreat     FNAME(mgicreat)
-#  define nmgislct      FNAME(mgislct)
-#  define nmgin2ndx     FNAME(mgin2ndx)
-#  define nmgigiinf      FNAME(mgigiinf)
-#  define nmgiwcim      FNAME(mgiwcim)
-#  define nmgircim      FNAME(mgircim)
-#  define nmgwimg      FNAME(mgiwimg)
-#  define nmgrimg      FNAME(mgirimg)
-#  define nmgiendac      FNAME(mgiendac)
-#  define nmgiid2r      FNAME(mgiid2r)
-#  define nmgir2dx      FNAME(mgir2dx)
-#  define nmgiltil      FNAME(mgiltil)
-#  define nmgiimil      FNAME(mgiimil)
-#  define nmgiglid      FNAME(mgiglid)
-#  define nmgiglinf     FNAME(mgiglinf)
-#  define nmgiwrlt      FNAME(mgiwrlt)
-#  define nmgiwclt      FNAME(mgiwclt)
-#  define nmgirdlt      FNAME(mgirdlt)
-#  define nmgirclt      FNAME(mgirclt)
-#  define nmgisxfil     FNAME(mgisxfil)
-#  define nmgiactp      FNAME(mgiactp)
-#  define nmgiscatt     FNAME(mgiscatt)
-#  define nmgisattr     FNAME(mgisattr)
-#  define nmgiainf      FNAME(mgiainf)
-#  define nmgigcat      FNAME(mgigcat)
-#  define nmgignat      FNAME(mgignat)
-#  define nmgigatt      FNAME(mgigatt)
-#  define nmgifndat     FNAME(mgifndat)
-# define nmgcgichnk        FNAME(mgcgichnk)
-# define nmgcrcchnk        FNAME(mgcrcchnk)
-# define nmgcrchnk         FNAME(mgcrchnk)
-# define nmgcscchnk        FNAME(mgcscchnk)
-# define nmgcschnk         FNAME(mgcschnk)
-# define nmgcwcchnk        FNAME(mgcwcchnk)
-# define nmgcwchnk         FNAME(mgcwchnk)
-# define nmgcscompress     FNAME(mgcscompress)
-# define nmgcgcompress     FNAME(mgcgcompress)
-# define nmglt2rf         FNAME(mglt2rf)
-# define nmgcgnluts       FNAME(mgcgnluts)
-# endif
-
-#endif /* DF_CAPFNAMES */
-#endif /* MFGR_FNAMES */
-
-/* Multi-file GR C-stubs for FORTRAN interface found in mfgrf.c */
-HDFLIBAPI FRETVAL(intf)     /* !sl */
-nmgiwimg(intf * riid, intf *start, intf *stride, intf *count, VOIDP data);
-
-HDFLIBAPI FRETVAL(intf)     /* !sl */
-nmgirimg(intf * riid, intf *start, intf *stride, intf *count, VOIDP data);
-
-HDFLIBAPI FRETVAL(intf)     /* !sl */
-nmgignat(intf * riid, intf *idx, VOIDP data);
-
-HDFLIBAPI FRETVAL(intf)
-nmgstart(intf * fid);
-
-HDFLIBAPI FRETVAL(intf)
-nmgfinfo(intf * grid,intf *n_datasets,intf *n_attrs);
-
-HDFLIBAPI FRETVAL(intf)
-nmgend(intf * grid);
-
-HDFLIBAPI FRETVAL(intf)
-nmgicreat(intf * grid, _fcd name, intf *ncomp, intf *nt, intf *il, intf dimsizes[2], intf *nlen);
-
-HDFLIBAPI FRETVAL(intf)
-nmgselct(intf * grid, intf *idx);
-
-HDFLIBAPI FRETVAL(intf)
-nmgin2ndx(intf * grid, _fcd name, intf *nlen);
-
-HDFLIBAPI FRETVAL(intf)
-nmggiinf(intf * riid, _fcd name, intf *ncomp, intf *nt, intf *il, intf *dimsizes, intf *nattr);
-
-
-HDFLIBAPI FRETVAL(intf)
-nmgwcimg(intf * riid, intf *start, intf *stride, intf *count, _fcd data);
-
-HDFLIBAPI FRETVAL(intf)
-nmgrcimg(intf * riid, intf *start, intf *stride, intf *count, _fcd data);
-
-HDFLIBAPI FRETVAL(intf)
-nmgwrimg(intf * riid, intf *start, intf *stride, intf *count, void * data);
-
-HDFLIBAPI FRETVAL(intf)
-nmgrdimg(intf * riid, intf *start, intf *stride, intf *count, void * data);
-
-HDFLIBAPI FRETVAL(intf)
-nmgendac(intf * riid);
-
-HDFLIBAPI FRETVAL(intf)
-nmgid2rf(intf * riid);
-
-HDFLIBAPI FRETVAL(intf)
-nmgr2idx(intf * grid, intf *ref);
-
-HDFLIBAPI FRETVAL(intf)
-nmgrltil(intf * riid, intf *il);
-
-HDFLIBAPI FRETVAL(intf)
-nmgrimil(intf * riid, intf *il);
-
-HDFLIBAPI FRETVAL(intf)
-nmggltid(intf * riid, intf *lut_index);
-
-HDFLIBAPI FRETVAL(intf)
-nmgglinf(intf * lutid, intf *ncomp, intf *nt, intf *il, intf *nentries);
-
-HDFLIBAPI FRETVAL(intf)
-nmgwrlut(intf * lutid, intf *ncomp, intf *nt, intf *il, intf *nentries, void * data);
-
-HDFLIBAPI FRETVAL(intf)
-nmgwclut(intf * lutid, intf *ncomp, intf *nt, intf *il, intf *nentries, _fcd data);
-
-HDFLIBAPI FRETVAL(intf)
-nmgrdlut(intf * lutid, void * data);
-
-HDFLIBAPI FRETVAL(intf)
-nmgrclut(intf * lutid, _fcd data);
-
-HDFLIBAPI FRETVAL(intf)
-nmgisxfil(intf * riid, _fcd filename, intf *offset, intf *nlen);
-
-HDFLIBAPI FRETVAL(intf)
-nmgsactp(intf * riid, intf *accesstype);
-
-HDFLIBAPI FRETVAL(intf)
-nmgiscatt(intf * riid, _fcd name, intf *nt, intf *count, _fcd data, intf *nlen);
-
-HDFLIBAPI FRETVAL(intf)
-nmgisattr(intf * riid, _fcd name, intf *nt, intf *count, void * data, intf *nlen);
-
-HDFLIBAPI FRETVAL(intf)
-nmgatinf(intf * riid, intf *idx, _fcd name, intf *nt, intf *count);
-
-HDFLIBAPI FRETVAL(intf)
-nmggcatt(intf * riid, intf *idx, _fcd data);
-
-HDFLIBAPI FRETVAL(intf)
-nmggnatt(intf * riid, intf *idx, void * data);
-
-HDFLIBAPI FRETVAL(intf)
-nmggattr(intf * riid, intf *idx, void * data);
-
-HDFLIBAPI FRETVAL(intf)
-nmgifndat(intf * riid, _fcd name, intf *nlen);
-
-     HDFLIBAPI FRETVAL (intf)
-     nmgcgichnk(intf *id, intf *dim_length, intf *flags);
-
-    HDFLIBAPI FRETVAL (intf)
-       nmgcrcchnk(intf *id, intf *start, _fcd char_data);
-
-    HDFLIBAPI FRETVAL (intf)
-       nmgcrchnk(intf *id, intf *start, VOIDP num_data);
-
-    HDFLIBAPI FRETVAL (intf)
-       nmgcscchnk(intf *id, intf *maxcache, intf *flags);
-
-    HDFLIBAPI FRETVAL (intf)
-      nmgcschnk(intf *id, intf *dim_length, intf *comp_type,
-                intf *comp_prm);
-    HDFLIBAPI FRETVAL (intf)
-       nmgcwcchnk(intf *id, intf *start, _fcd char_data);
-
-    HDFLIBAPI FRETVAL (intf)
-       nmgcwchnk(intf *id, intf *start, VOIDP num_data);
-
-    HDFLIBAPI FRETVAL (intf)
-       nmgcscompress(intf *id, intf *comp_type, intf *comp_prm);
-
-    HDFLIBAPI FRETVAL (intf)
-       nmgcgcompress(intf *id, intf *comp_type, intf *comp_prm);
-
-    HDFLIBAPI FRETVAL (intf)
-       nmglt2rf(intf *id);
-
-    HDFLIBAPI FRETVAL (intf)
-       nmgcgnluts(intf *id);
-
-/* Multi-file Raster C-routines found in mfgr.c */
-HDFLIBAPI intn rigcompare(void * k1, void * k2, intn cmparg);
-
-HDFLIBAPI int32 GRstart(int32 hdf_file_id);
-
-HDFLIBAPI intn GRfileinfo(int32 grid,int32 *n_datasets,int32 *n_attrs);
-
-HDFLIBAPI intn GRend(int32 grid);
-
-HDFLIBAPI int32 GRcreate(int32 grid,const char *name,int32 ncomp,int32 nt,int32 il,
-    int32 dimsizes[2]);
-
-HDFLIBAPI int32 GRselect(int32 grid,int32 idx);
-
-HDFLIBAPI int32 GRnametoindex(int32 grid,const char *name);
-
-HDFLIBAPI intn GRgetiminfo(int32 riid,char *name,int32 *ncomp,int32 *nt,int32 *il,
-    int32 dimsizes[2],int32 *n_attr);
-
-HDFLIBAPI intn GRgetnluts(int32 riid);
-
-HDFLIBAPI intn GRwriteimage(int32 riid,int32 start[2],int32 stride[2],
-    int32 count[2],void * data);
-
-HDFLIBAPI intn GRreadimage(int32 riid,int32 start[2],int32 stride[2],
-    int32 count[2],void * data);
-
-HDFLIBAPI intn GRendaccess(int32 riid);
-
-HDFLIBAPI uint16 GRidtoref(int32 riid);
-
-HDFLIBAPI int32 GRreftoindex(int32 grid,uint16 ref);
-
-HDFLIBAPI intn GRreqlutil(int32 riid,intn il);
-
-HDFLIBAPI intn GRreqimageil(int32 riid,intn il);
-
-HDFLIBAPI int32 GRgetlutid(int32 riid,int32 idx);
-
-HDFLIBAPI uint16 GRluttoref(int32 lutid);
-
-HDFLIBAPI intn GRgetlutinfo(int32 riid,int32 *ncomp,int32 *nt,
-    int32 *il,int32 *nentries);
-
-HDFLIBAPI intn GRwritelut(int32 riid,int32 ncomps,int32 nt,
-    int32 il,int32 nentries,void * data);
-
-HDFLIBAPI intn GRreadlut(int32 lutid,void * data);
-
-HDFLIBAPI intn GRsetexternalfile(int32 riid,const char *filename,int32 offset);
-
-HDFLIBAPI intn GRsetaccesstype(int32 riid,uintn accesstype);
-
-HDFLIBAPI intn GRsetcompress(int32 riid,comp_coder_t comp_type,comp_info *cinfo);
-
-HDFLIBAPI intn GRgetcompress(int32 riid,comp_coder_t* comp_type,comp_info *cinfo);
-
-HDFLIBAPI intn GRsetattr(int32 id,const char *name,int32 attr_nt,int32 count,const void * data);
-
-HDFLIBAPI intn GRattrinfo(int32 id,int32 idx,char *name,int32 *attr_nt,int32 *count);
-
-HDFLIBAPI intn GRgetattr(int32 id,int32 idx,void * data);
-
-HDFLIBAPI int32 GRfindattr(int32 id,const char *name);
-
-HDFLIBAPI intn GRPshutdown(void);
-
-/*=== HDF_CHUNK_DEF same as in mfhdf.h - moved here  ====*/
-
-/* Bit flags used for SDsetchunk(), SDgetchunkinfo() 
-   GRsetchunk() and GRgetchunkinfo(). Note that GRs do not support NBIT */
-#define HDF_NONE    0x0
-#define HDF_CHUNK   0x1
-#define HDF_COMP    0x3
-#define HDF_NBIT    0x5
-
-/* Cache flags */
-#define HDF_CACHEALL 0x1
-
-/* Chunk Defintion, Note that GRs need only 2 dimensions for the chunk_lengths */
-typedef union hdf_chunk_def_u
-{
-    /* Chunk Lengths only */
-    int32   chunk_lengths[MAX_VAR_DIMS]; /* chunk lengths along each dimension */
-
-    struct 
-    {   /* For Compression info */
-        int32      chunk_lengths[MAX_VAR_DIMS]; /* chunk lengths along each dimension */
-        int32      comp_type;    /* Compression type */
-        int32      model_type;   /* Compression model type */
-        comp_info  cinfo;        /* Compression info struct */
-        model_info minfo;        /* Compression model info struct */
-    }comp;
-        
-    struct 
-    { /* For NBIT, Used by SDS and not by GR */
-        int32 chunk_lengths[MAX_VAR_DIMS]; /* chunk lengths along each dimension */
-        intn  start_bit; /* offset of the start bit in the data */
-        intn  bit_len;   /* number of bits to store */
-        intn  sign_ext;  /* whether to sign extend or not */
-        intn  fill_one;  /* whether to fill with 1's or not (0's) */
-    } nbit;
-
-} HDF_CHUNK_DEF;
-
-/*=== GR Chunking Routines  ====*/
-
-/******************************************************************************
- NAME
-      GRsetchunk   -- make GR a chunked GR
-
- DESCRIPTION
-      This routine makes the GR a chunked GR according to the chunk
-      definition passed in.
-
-      The image currently cannot be special already.  i.e. NBIT,
-      COMPRESSED, or EXTERNAL. This is an Error.
-
-      The defintion of the HDF_CHUNK_DEF union with relvant fields is:
-
-      typedef union hdf_chunk_def_u
-      {
-         int32   chunk_lengths[2];  Chunk lengths along each dimension
-
-         struct 
-          {   
-            int32     chunk_lengths[2]; Chunk lengths along each dimension
-            int32     comp_type;                   Compression type 
-            comp_info cinfo;                       Compression info struct 
-          }comp;
-
-      } HDF_CHUNK_DEF
-
-      The simplist is the 'chunk_lengths' array specifiying chunk 
-      lengths for each dimension where the 'flags' argument set to 
-      'HDF_CHUNK';
-
-      COMPRESSION is set by using the 'HDF_CHUNK_DEF' structure to set the
-      appropriate compression information along with the required chunk lengths
-      for each dimension. The compression information is the same as 
-      that set in 'SDsetcompress()'. The bit-or'd'flags' argument' is set to 
-      'HDF_CHUNK | HDF_COMP'.
-
-      See the example in pseudo-C below for further usage.
-
-      The maximum number of Chunks in an HDF file is 65,535.
-
-      The performance of the GRxxx interface with chunking is greatly
-      affected by the users access pattern over the image and by
-      the maximum number of chunks set in the chunk cache. The cache contains 
-      the Least Recently Used(LRU cache replacment policy) chunks. See the
-      routine GRsetchunkcache() for further info on the chunk cache and how 
-      to set the maximum number of chunks in the chunk cache. A default chunk 
-      cache is always created.
-
-      The following example shows the organization of chunks for a 2D iamge.
-      e.g. 4x4 image with 2x2 chunks. The array shows the layout of
-           chunks in the chunk array.
-
-            4 ---------------------                                           
-              |         |         |                                                 
-        Y     |  (0,1)  |  (1,1)  |                                       
-        ^     |         |         |                                      
-        |   2 ---------------------                                       
-        |     |         |         |                                               
-        |     |  (0,0)  |  (1,0)  |                                      
-        |     |         |         |                                           
-        |     ---------------------                                         
-        |     0         2         4                                       
-        ---------------> X                                                       
-                                                                                
-        --Without compression--:
-        {                                                                    
-        HDF_CHUNK_DEF chunk_def;
-                                                                            
-        .......                                                                    
-        -- Set chunk lengths --                                                    
-        chunk_def.chunk_lengths[0]= 2;                                                     
-        chunk_def.chunk_lengths[1]= 2; 
-
-        -- Set Chunking -- 
-        GRsetchunk(riid, chunk_def, HDF_CHUNK);                      
-         ......                                                                  
-        }                                                                           
-
-        --With compression--:
-        {                                                                    
-        HDF_CHUNK_DEF chunk_def;
-                                                                            
-        .......                
-        -- Set chunk lengths first --                                                    
-        chunk_def.chunk_lengths[0]= 2;                                                     
-        chunk_def.chunk_lengths[1]= 2;
-
-        -- Set compression --
-        chunk_def.comp.cinfo.deflate.level = 9;
-        chunk_def.comp.comp_type = COMP_CODE_DEFLATE;
-
-        -- Set Chunking with Compression --
-        GRsetchunk(riid, chunk_def, HDF_CHUNK | HDF_COMP);                      
-         ......                                                                  
-        }                                                                           
-
- RETURNS
-        SUCCEED/FAIL
-******************************************************************************/
-HDFLIBAPI intn GRsetchunk
-    (int32 riid,             /* IN: raster access id */
-     HDF_CHUNK_DEF chunk_def, /* IN: chunk definition */
-     int32 flags              /* IN: flags */);
-
-/******************************************************************************
- NAME
-     GRgetchunkinfo -- get Info on GR
-
- DESCRIPTION
-     This routine gets any special information on the GR. If its chunked,
-     chunked and compressed or just a regular GR. Currently it will only
-     fill the array of chunk lengths for each dimension as specified in
-     the 'HDF_CHUNK_DEF' union. You can pass in a NULL for 'chunk_def'
-     if don't want the chunk lengths for each dimension.
-     Additionaly if successfull it will return a bit-or'd value in 'flags' 
-     indicating if the GR is:
-
-     Chunked                  -> flags = HDF_CHUNK
-     Chunked and compressed   -> flags = HDF_CHUNK | HDF_COMP 
-     Non-chunked              -> flags = HDF_NONE
-  
-     e.g. 4x4 array - Pseudo-C
-     {
-     int32   rcdims[3];
-     HDF_CHUNK_DEF rchunk_def;
-     int32   cflags;
-     ...
-     rchunk_def.chunk_lengths = rcdims;
-     GRgetchunkinfo(riid, &rchunk_def, &cflags);
-     ...
-     }
-
- RETURNS
-        SUCCEED/FAIL
-******************************************************************************/
-HDFLIBAPI intn GRgetchunkinfo
-    (int32 riid,              /* IN: Raster access id */
-     HDF_CHUNK_DEF *chunk_def, /* IN/OUT: chunk definition */
-     int32 *flags              /* IN/OUT: flags */);
-
-
-/******************************************************************************
- NAME
-     GRwritechunk  -- write the specified chunk to the GR
-
- DESCRIPTION
-     This routine writes a whole chunk of data to the chunked GR 
-     specified by chunk 'origin' for the given GR and can be used
-     instead of GRwriteimage() when this information is known. This
-     routine has less overhead and is much faster than using GRwriteimage().
-
-     Origin specifies the co-ordinates of the chunk according to the chunk
-     position in the overall chunk array.
-
-     'datap' must point to a whole chunk of data.
-
-     See GRsetchunk() for a description of the organization of chunks in an GR.
-
- RETURNS
-        SUCCEED/FAIL
-******************************************************************************/
-HDFLIBAPI intn GRwritechunk
-    (int32 riid,      /* IN: raster access id */
-     int32 *origin,    /* IN: origin of chunk to write */
-     const void *datap /* IN: buffer for data */);
-
-/******************************************************************************
- NAME
-     GRreadchunk   -- read the specified chunk to the GR
-
- DESCRIPTION
-     This routine reads a whole chunk of data from the chunked GR
-     specified by chunk 'origin' for the given GR and can be used
-     instead of GRreadimage() when this information is known. This
-     routine has less overhead and is much faster than using GRreadimage().
-
-     Origin specifies the co-ordinates of the chunk according to the chunk
-     position in the overall chunk array.
-
-     'datap' must point to a whole chunk of data.
-
-     See GRsetchunk() for a description of the organization of chunks in an GR.
-
- RETURNS
-        SUCCEED/FAIL
-******************************************************************************/
-HDFLIBAPI intn GRreadchunk
-    (int32 riid,      /* IN: raster access id */
-     int32 *origin,    /* IN: origin of chunk to read */
-     void  *datap      /* IN/OUT: buffer for data */);
-
-
-/******************************************************************************
-NAME
-     GRsetchunkcache -- maximum number of chunks to cache 
-
-DESCRIPTION
-     Set the maximum number of chunks to cache.
-
-     The cache contains the Least Recently Used(LRU cache replacment policy) 
-     chunks. This routine allows the setting of maximum number of chunks that 
-     can be cached, 'maxcache'.
-
-     The performance of the GRxxx interface with chunking is greatly
-     affected by the users access pattern over the image and by
-     the maximum number of chunks set in the chunk cache. The number chunks 
-     that can be set in the cache is process memory limited. It is a good 
-     idea to always set the maximum number of chunks in the cache as the 
-     default heuristic does not take into account the memory available for 
-     the application.
-
-     By default when the GR is promoted to a chunked element the 
-     maximum number of chunks in the cache 'maxcache' is set to the number of
-     chunks along the last dimension.
-
-     The values set here affects the current object's caching behaviour.
-
-     If the chunk cache is full and 'maxcache' is greater then the
-     current 'maxcache' value, then the chunk cache is reset to the new
-     'maxcache' value, else the chunk cache remains at the current
-     'maxcache' value.
-
-     If the chunk cache is not full, then the chunk cache is set to the
-     new 'maxcache' value only if the new 'maxcache' value is greater than the
-     current number of chunks in the cache.
-
-     Use flags argument of 'HDF_CACHEALL' if the whole object is to be cached 
-     in memory, otherwise pass in zero(0). Currently you can only
-     pass in zero.
-
-    See GRsetchunk() for a description of the organization of chunks in an GR.
-
-RETURNS
-     Returns the 'maxcache' value for the chunk cache if successful 
-     and FAIL otherwise
-******************************************************************************/
-HDFLIBAPI intn GRsetchunkcache
-    (int32 riid,     /* IN: raster access id */
-     int32 maxcache,  /* IN: max number of chunks to cache */
-     int32 flags      /* IN: flags = 0, HDF_CACHEALL */);
-
-
-#ifdef HAVE_FMPOOL
-/******************************************************************************
-NAME
-     Hmpset - set pagesize and maximum number of pages to cache on next open/create
-
-DESCRIPTION
-     Set the pagesize and maximum number of pages to cache on the next 
-     open/create of a file. A pagesize that is a power of 2 is recommended.
-
-     The values set here only affect the next open/creation of a file and
-     do not change a particular file's paging behaviour after it has been
-     opened or created. This maybe changed in a later release.
-
-     Use flags arguement of 'MP_PAGEALL' if the whole file is to be cached 
-     in memory otherwise passs in zero.
-
-RETURNS
-     Returns SUCCEED if successful and FAIL otherwise
-
-NOTE
-     This calls the real routine MPset().
-     Currently 'maxcache' has to be greater than 1. Maybe use special 
-     case of 0 to specify you want to turn page buffering off or use
-     the flags arguement. 
-
-******************************************************************************/
-HDFLIBAPI int  Hmpset(int pagesize, /* IN: pagesize to use for next open/create */
-                   int maxcache, /* IN: max number of pages to cache */
-                   int flags     /* IN: flags = 0, MP_PAGEALL */);
-
-/******************************************************************************
-NAME
-     Hmpget - get last pagesize and max number of pages cached for open/create
-
-DESCRIPTION
-     This gets the last pagesize and maximum number of pages cached for 
-     the last open/create of a file.
-
-RETURNS
-     Returns SUCCEED.
-
-NOTES
-     This routine calls the real routine MPget().
-******************************************************************************/
-HDFLIBAPI int  Hmpget(int *pagesize, /*OUT: pagesize to used in last open/create */
-                   int *maxcache, /*OUT: max number of pages cached in last open/create */
-                   int flags      /* IN: */);
-
-#endif /* HAVE_FMPOOL */
-
-/* Vset interface functions (used to be in vproto.h) */
-
-/* Useful macros, which someday might become actuall functions */
-/*
- * macros for VSinquire
- * all these macros should be public for users
- */
-#define VSQuerycount(vs, count) \
-        (VSinquire (vs, (int32 *) count, (int32*) NULL, (char*) NULL, (int32*) NULL, (char*) NULL))
-
-#define VSQueryinterlace(vs, intr) \
-        (VSinquire (vs, (int32 *) NULL, (int32*) intr, (char*) NULL, (int32*) NULL, (char*) NULL))
-
-#define VSQueryfields(vs, flds) \
-        (VSinquire (vs, (int32 *) NULL, (int32*) NULL, (char*) flds, (int32*) NULL, (char*) NULL))
-
-#define VSQueryvsize(vs, size) \
-        (VSinquire (vs, (int32 *) NULL, (int32*) NULL, (char*) NULL, (int32*) size, (char*) NULL))
-
-#define VSQueryname(vs, name) \
-        (VSinquire (vs, (int32 *) NULL, (int32*) NULL, (char*) NULL, (int32*) NULL, (char*) name))
-
-/* 
-   ** from vattr.c
- */
-   HDFLIBAPI intn Vsetattr
-                (int32 vgid,  const char *attrname, int32 datatype,
-                 int32 count, const void * values);
-   HDFLIBAPI intn Vnattrs
-                (int32 vgid);
-   HDFLIBAPI intn Vfindattr
-                (int32 vgid, const char *attrname);
-   HDFLIBAPI intn Vattrinfo
-                (int32 vgid, intn attrindex, char *name, 
-                 int32 *datatype, int32 *count, int32 *size);
-   HDFLIBAPI intn Vgetattr
-                (int32 vgid, intn attrindex, void * values);
-   HDFLIBAPI int32 Vgetversion
-                (int32 vgid);
-   HDFLIBAPI intn VSfindex
-                 (int32 vsid, const char *fieldname, int32 *fldindex);
-   HDFLIBAPI intn VSsetattr
-                (int32 vsid, int32 findex, const char *attrname,
-                 int32 datatype, int32 count, const void * values);
-   HDFLIBAPI intn VSnattrs
-                (int32 vsid);
-   HDFLIBAPI intn VSfnattrs
-                (int32 vsid, int32 findex);
-   HDFLIBAPI intn VSfindattr
-                (int32 vsid, int32 findex, const char *attrname);
-   HDFLIBAPI intn VSattrinfo
-                (int32 vsid, int32 findex, intn attrindex,
-                 char *name, int32 *datatype, int32 *count, 
-                 int32 *size);
-   HDFLIBAPI intn VSgetattr
-                (int32 vsid, int32 findex, intn attrindex,
-                  void * values);
-   HDFLIBAPI intn VSisattr
-                (int32 vsid);
-/*
-   ** from vconv.c
- */
-    HDFLIBAPI int32 vicheckcompat
-                (HFILEID f);
-
-    HDFLIBAPI int32 vimakecompat
-                (HFILEID f);
-
-    HDFLIBAPI int32 vcheckcompat
-                (char  * fs);
-
-    HDFLIBAPI int32 vmakecompat
-                (char  * fs);
-
-/*
-   ** from vg.c
- */
-    HDFLIBAPI int32 VSelts
-                (int32 vkey);
-
-    HDFLIBAPI int32 VSgetinterlace
-                (int32 vkey);
-
-    HDFLIBAPI intn VSsetinterlace
-                (int32 vkey, int32 interlace);
-
-    HDFLIBAPI int32 VSgetfields
-                (int32 vkey, char  * fields);
-
-    HDFLIBAPI intn VSfexist
-                (int32 vkey, char  * fields);
-
-    HDFLIBAPI int32 VSsizeof
-                (int32 vkey, char  * fields);
-
-    HDFLIBAPI void VSdump
-                (int32 vkey);
-
-    HDFLIBAPI int32 VSsetname
-                (int32 vkey, const char  * vsname);
-
-    HDFLIBAPI int32 VSsetclass
-                (int32 vkey, const char  * vsclass);
-
-    HDFLIBAPI int32 VSgetname
-                (int32 vkey, char  * vsname);
-
-    HDFLIBAPI int32 VSgetclass
-                (int32 vkey, char  * vsclass);
-
-    HDFLIBAPI intn VSinquire
-                (int32 vkey, int32  * nelt, int32  * interlace,
-           char  * fields, int32  * eltsize, char  * vsname);
-
-    HDFLIBAPI int32 VSlone
-                (HFILEID f, int32  * idarray, int32 asize);
-
-    HDFLIBAPI int32 Vlone
-                (HFILEID f, int32  * idarray, int32 asize);
-
-    HDFLIBAPI int32 Vfind
-                (HFILEID f, const char  * vgname);
-
-    HDFLIBAPI int32 VSfind
-                (HFILEID f, const char  * vsname);
-
-    HDFLIBAPI int32 Vfindclass
-                (HFILEID f, const char  * vgclass);
-
-    HDFLIBAPI int32 VSfindclass
-                (HFILEID f, const char  * vsclass);
-
-    HDFLIBAPI intn VSsetblocksize
-                (int32 vkey, int32 block_size);
-
-    HDFLIBAPI intn VSsetnumblocks
-                (int32 vkey, int32 num_blocks);
-
-    HDFLIBAPI intn VSgetblockinfo
-                (int32 vkey, int32* block_size, int32* num_blocks);
-
-    HDFLIBAPI void Vsetzap
-                (void);
-
-/*
-   ** from vgp.c
- */
-    HDFLIBAPI intn vcompare
-                (void * k1, void * k2, intn cmparg);
-
-    HDFLIBAPI intn vcompareref
-                (void * k1, void * k2, intn cmparg);
-
-    HDFLIBAPI void vdestroynode
-                (void * n);
-
-    HDFLIBAPI void vtfreekey
-                (void * k);
-
-    HDFLIBAPI intn Vinitialize
-                (HFILEID f);
-
-    HDFLIBAPI intn Vfinish
-                (HFILEID f);
-
-    HDFLIBAPI HFILEID Vopen
-                (char *path, intn acc_mode, int16 ndds);
-
-    HDFLIBAPI intn Vclose
-                (HFILEID f);
-
-    HDFLIBAPI int32 vexistvg
-                (HFILEID f, uint16 vgid);
-
-    HDFLIBAPI int32 Vattach
-                (HFILEID f, int32 vgid, const char  * accesstype);
-
-    HDFLIBAPI int32 Vdetach
-                (int32 vkey);
-
-    HDFLIBAPI int32 Vinsert
-                (int32 vkey, int32 vskey);
-    /* note: 2nd arg of Vinsert can also be (VGROUP *) */
-
-    HDFLIBAPI int32 Vflocate
-                (int32 vkey, char  * field);
-
-    HDFLIBAPI intn Vinqtagref
-                (int32 vkey, int32 tag, int32 ref);
-
-    HDFLIBAPI int32 Vntagrefs
-                (int32 vkey);
-
-    HDFLIBAPI int32 Vnrefs
-                (int32 vkey,int32 tag);
-
-    HDFLIBAPI int32 Vgettagrefs
-                (int32 vkey, int32  tagarray[], int32  refarray[], int32 n);
-
-    HDFLIBAPI intn Vgettagref
-                (int32 vkey, int32 which, int32  * tag, int32  * ref);
-
-    HDFLIBAPI int32 VQueryref
-                (int32 vkey);
-
-    HDFLIBAPI int32 VQuerytag
-                (int32 vkey);
-
-    HDFLIBAPI int32 Vaddtagref
-                (int32 vkey, int32 tag, int32 ref);
-
-    HDFLIBAPI int32 Ventries
-                (HFILEID f, int32 vgid);
-
-    HDFLIBAPI int32 Vsetname
-                (int32 vkey, const char  * vgname);
-
-    HDFLIBAPI int32 Vsetclass
-                (int32 vkey, const char  * vgclass);
-
-    HDFLIBAPI intn Visvg
-                (int32 vkey, int32 id);
-
-    HDFLIBAPI intn Visvs
-                (int32 vkey, int32 id);
-
-    HDFLIBAPI int32 Vgetid
-                (HFILEID f, int32 vgid);
-
-    HDFLIBAPI int32 Vgetnext
-                (int32 vkey, int32 id);
-
-    HDFLIBAPI int32 Vgetname
-                (int32 vkey, char  * vgname);
-
-    HDFLIBAPI int32 Vgetclass
-                (int32 vkey, char  * vgclass);
-
-    HDFLIBAPI intn Vinquire
-                (int32 vkey, int32  * nentries, char  * vgname);
-
-    HDFLIBAPI int32 Vdelete
-                (int32 f, int32 ref);
-
-/*******************************************************************************
-NAME
-   Vdeletetagref - delete tag/ref pair in Vgroup
-
-DESCRIPTION
-    Deletes the given tag/ref pair from the Vgroup.  If the given tag/ref pair 
-    does not exist in the vgroup the routine will return FAIL. Users should use 
-    Vinqtagref() to check if the tag/ref pair exists before deleting.
-
-RETURNS
-    Returns SUCCEED if the tag/ref pair is deleted from Vgroup and
-    FAIL if unsuccessful.
-
-*******************************************************************************/
-HDFLIBAPI intn
-Vdeletetagref(int32 vkey, /* IN: vgroup key */ 
-              int32 tag,  /* IN: tag to delete in vgroup */
-              int32 ref   /* IN: ref to delete in vgroup */);
-
-    HDFLIBAPI intn VPshutdown(void);
-
-/*
-   ** from vparse.c
- */
-    HDFLIBAPI int32 scanattrs
-                (const char  * attrs, int32  * attrc, char  *** attrv);
-
-/*
-   ** from vhi.c
- */
-    HDFLIBAPI int32 VHstoredata
-                (HFILEID f, const char  * field, const uint8  *buf, int32 n, int32 datatype,
-                 const char  * vsname, const char  * vsclass);
-
-    HDFLIBAPI int32 VHstoredatam
-                (HFILEID f, const char * field, const uint8  *buf, int32 n, int32 datatype,
-                 const char  * vsname, const char  * vsclass, int32 order);
-
-    HDFLIBAPI int32 VHmakegroup
-                (HFILEID f, int32  tagarray[], int32  refarray[], int32 n,
-                    const char * vgname, const char  * vgclass);
-
-/*
-   ** from vio.c
- */
-
-    HDFLIBAPI intn VSPhshutdown(void);
-
-    HDFLIBAPI int32 vexistvs
-                (HFILEID f, uint16 vsref);
-
-    HDFLIBAPI void vsdestroynode
-                (void * n);
-
-    HDFLIBAPI void vfdestroynode
-                (void * n);
-
-    HDFLIBAPI int32 VSattach
-                (HFILEID f, int32 vsref, const char  * accesstype);
-
-    HDFLIBAPI int32 VSdetach
-                (int32 vkey);
-
-    HDFLIBAPI int32 VSQuerytag
-                (int32 vkey);
-
-    HDFLIBAPI int32 VSQueryref
-                (int32 vkey);
- 
-    HDFLIBAPI int32 VSgetid
-                (HFILEID f, int32 vsref);
-
-    HDFLIBAPI int32 VSgetversion
-                (int32 vkey);
-
-    HDFLIBAPI int32 VSdelete
-                (int32 f, int32 ref);
-
-    HDFLIBAPI int32 VSappendable
-                (int32 vkey, int32 blk);
-
-/*
-   ** from vsfld.c
- */
-
-    HDFLIBAPI intn VSsetfields
-                (int32 vkey, const char  * fields);
-
-    HDFLIBAPI intn VSfdefine
-                (int32 vkey, const char  * field, int32 localtype, int32 order);
-
-    HDFLIBAPI int32 VFnfields
-                (int32 vkey);
-
-    HDFLIBAPI char *VFfieldname
-                (int32 vkey, int32 idx);
-
-    HDFLIBAPI int32 VFfieldtype
-                (int32 vkey, int32 idx);
-
-    HDFLIBAPI int32 VFfieldisize
-                (int32 vkey, int32 idx);
-
-    HDFLIBAPI int32 VFfieldesize
-                (int32 vkey, int32 idx);
-
-    HDFLIBAPI int32 VFfieldorder
-                (int32 vkey, int32 idx);
-
-    HDFLIBAPI intn VSsetexternalfile
-		(int32 vkey, const char *filename, int32 offset);
-
-    HDFLIBAPI intn VSfpack
-                (int32 vsid, intn packtype, const char *fields_in_buf,
-                void * buf, intn bufsz, intn n_records, 
-                const char *fields, void * fldbufpt[]);
-
-/*
-   ** from vrw.c
- */
-    HDFLIBAPI intn VSPshutdown(void);
-
-    HDFLIBAPI int32 VSseek
-                (int32 vkey, int32 eltpos);
-
-    HDFLIBAPI int32 VSread
-                (int32 vkey, uint8  buf[], int32 nelt, int32 interlace);
-
-    HDFLIBAPI int32 VSwrite
-                (int32 vkey, const uint8  buf[], int32 nelt, int32 interlace);
-
-/*
-   ** from vgF.c
- */
-#ifndef VG_FNAMES
-#   define VG_FNAMES
-#ifdef DF_CAPFNAMES
-# if defined(UNIX386) || (!(defined INTEL86) && !(defined WIN32))
-#   define  ndfivopn FNAME(DFIVOPN)
-#   define  ndfvclos FNAME(DFVCLOS)
-#   define  nvatchc  FNAME(VATCHC)
-#   define  nvdtchc  FNAME(VDTCHC)
-#   define  nvgnamc  FNAME(VGNAMC)
-#   define  nvgclsc  FNAME(VGCLSC)
-#   define  nvinqc   FNAME(VINQC)
-#   define  nvdeletec FNAME(VDELETEC)
-#   define  nvgidc   FNAME(VGIDC)
-#   define  nvgnxtc  FNAME(VGNXTC)
-#   define  nvsnamc  FNAME(VSNAMC)
-#   define  nvsclsc  FNAME(VSCLSC)
-#   define  nvinsrtc FNAME(VINSRTC)
-#   define  nvisvgc  FNAME(VISVGC)
-#   define  nvisvsc  FNAME(VISVSC)
-#   define  nvsatchc FNAME(VSATCHC)
-#   define  nvsdtchc FNAME(VSDTCHC)
-#   define  nvsqref  FNAME(VSQREF)
-#   define  nvsqtag  FNAME(VSQTAG)
-#   define  nvsgver  FNAME(VSGVER)
-#   define  nvsseekc FNAME(VSSEEKC)
-#   define  nvsgnamc FNAME(VSGNAMC)
-#   define  nvsgclsc FNAME(VSGCLSC)
-#   define  nvsinqc  FNAME(VSINQC)
-#   define  nvsfexc  FNAME(VSFEXC)
-#   define  nvsfndc  FNAME(VSFNDC)
-#   define  nvsgidc  FNAME(VSGIDC)
-#   define  nvsdltc  FNAME(VSDLTC)
-#   define  nvsapp   FNAME(VSAPP)
-#   define  nvssnamc FNAME(VSSNAMC)
-#   define  nvssclsc FNAME(VSSCLSC)
-#   define  nvssfldc FNAME(VSSFLDC)
-#   define  nvssintc FNAME(VSSINTC)
-#   define  nvsfdefc FNAME(VSFDEFC)
-#   define  nvssextfc FNAME(VSSEXTFC)
-#   define  nvfnflds FNAME(VFNFLDS)
-#   define  nvffnamec FNAME(VFFNAMEC)
-#   define  nvfftype FNAME(VFFTYPE)
-#   define  nvffisiz FNAME(VFFISIZ)
-#   define  nvffesiz FNAME(VFFESIZ)
-#   define  nvffordr FNAME(VFFORDR)
-#   define  nvsfrdc  FNAME(VSFRDC)
-#   define  nvsfrd   FNAME(VSFRD)
-#   define  nvsreadc FNAME(VSREADC)
-#   define  nvsfwrt  FNAME(VSFWRT)
-#   define  nvsfwrtc FNAME(VSFWRTC)
-#   define  nvswritc FNAME(VSWRITC)
-#   define  nvsgintc FNAME(VSGINTC)
-#   define  nvseltsc FNAME(VSELTSC)
-#   define  nvsgfldc FNAME(VSGFLDC)
-#   define  nvssizc  FNAME(VSSIZC)
-#   define  nventsc  FNAME(VENTSC)
-#   define  nvlonec  FNAME(VLONEC)
-#   define  nvslonec FNAME(VSLONEC)
-#   define  nvfindc  FNAME(VFINDC)
-#   define  nvfndclsc FNAME(VFNDCLSC)
-#   define  nvhscdc  FNAME(VHSCDC)
-#   define  nvhsdc   FNAME(VHSDC)
-#   define  nvhscdmc FNAME(VHSCDMC)
-#   define  nvhsdmc  FNAME(VHSDMC)
-#   define  nvhmkgpc FNAME(VHMKGPC)
-#   define  nvflocc  FNAME(VFLOCC)
-#   define  nvinqtrc FNAME(VINQTRC)
-#   define  nvntrc   FNAME(VNTRC)
-#   define  nvnrefs  FNAME(VNREFS)
-#   define  nvgttrsc FNAME(VGTTRSC)
-#   define  nvqref   FNAME(VQREF)
-#   define  nvqtag   FNAME(VQTAG)
-#   define  nvgttrc  FNAME(VGTTRC)
-#   define  nvadtrc  FNAME(VADTRC)
-#   define  nvfstart FNAME(VFSTART)
-#   define  nvfend   FNAME(VFEND)
-#   define  nvsqfnelt   FNAME(VSQFNELT)
-#   define  nvsqfintr   FNAME(VSQFINTR)
-#   define  nvsqfldsc   FNAME(VSQFLDSC)
-#   define  nvsqfvsiz   FNAME(VSQFVSIZ)
-#   define  nvsqnamec   FNAME(VSQNAMEC)
-#   define  nvsfccpk    FNAME(VSFCCPK)
-#   define  nvsfncpk    FNAME(VSFNCPK)
-#   define  nvdtrc      FNAME(VDTRC)
-#   define  nvscfcls    FNAME(VSCFCLS)
-#   define  nvscsetblsz FNAME(VSCSETBLSZ)
-#   define  nvscsetnmbl FNAME (VSCSETNMBL)
-#   define  nvscgblinfo FNAME(VSCGBLINFO)
-#  else                                /* !sl */
-#   define  ndfivopn FNAME(DFIVOPN)
-#   define  ndfvclos FNAME(DFVCLOS)
-#   define  nvatchc  FNAME(VATCHC)
-#   define  nvdtchc  FNAME(VDTCHC)
-#   define  nvgnamc  FNAME(VGNAMC)
-#   define  nvgclsc  FNAME(VGCLSC)
-#   define  nvinqc   FNAME(VINQC)
-#   define  nvdeletec FNAME(VDELETEC)
-#   define  nvgidc   FNAME(VGIDC)
-#   define  nvgnxtc  FNAME(VGNXTC)
-#   define  nvsnamc  FNAME(VSNAMC)
-#   define  nvsclsc  FNAME(VSCLSC)
-#   define  nvinsrtc FNAME(VINSRTC)
-#   define  nvisvgc  FNAME(VISVGC)
-#   define  nvfistart FNAME(VFISTART)
-#   define  nvfiend  FNAME(VFIEND)
-#   define  nvisvsc  FNAME(VISVSC)
-#   define  nvsatchc FNAME(VSATCHC)
-#   define  nvsdtchc FNAME(VSDTCHC)
-#   define  nvsiqref FNAME(VSIQREF)
-#   define  nvsiqtag FNAME(VSIQTAG)
-#   define  nvsigver FNAME(VSIGVER)
-#   define  nvsseekc FNAME(VSSEEKC)
-#   define  nvsgnamc FNAME(VSGNAMC)
-#   define  nvsgclsc FNAME(VSGCLSC)
-#   define  nvsinqc  FNAME(VSINQC)
-#   define  nvsfexc  FNAME(VSFEXC)
-#   define  nvsfndc  FNAME(VSFNDC)
-#   define  nvsgidc  FNAME(VSGIDC)
-#   define  nvsdltc  FNAME(VSDLTC)
-#   define  nvsapp   FNAME(VSAPP)
-#   define  nvssnamc FNAME(VSSNAMC)
-#   define  nvssclsc FNAME(VSSCLSC)
-#   define  nvssfldc FNAME(VSSFLDC)
-#   define  nvssintc FNAME(VSSINTC)
-#   define  nvsfdefc FNAME(VSFDEFC)
-#   define  nvssextfc FNAME(VSSEXTFC)
-#   define  nvfinflds FNAME(VFINFLDS)
-#   define  nvfifnm  FNAME(VFIFNM)
-#   define  nvfiftp  FNAME(VFIFTP)
-#   define  nvfifisz FNAME(VFIFISZ)
-#   define  nvfifesz FNAME(VFIFESZ)
-#   define  nvfifodr FNAME(VFIFODR)
-#   define  nvsfirdc FNAME(VSFIRDC)
-#   define  nvsfird  FNAME(VSFIRD)
-#   define  nvsreadc FNAME(VSREADC)
-#   define  nvsfiwrc FNAME(VSFIWRC)
-#   define  nvsfiwr  FNAME(VSFIWR)
-#   define  nvswritc FNAME(VSWRITC)
-#   define  nvsgintc FNAME(VSGINTC)
-#   define  nvseltsc FNAME(VSELTSC)
-#   define  nvsgfldc FNAME(VSGFLDC)
-#   define  nvssizc  FNAME(VSSIZC)
-#   define  nventsc  FNAME(VENTSC)
-#   define  nvlonec  FNAME(VLONEC)
-#   define  nvslonec FNAME(VSLONEC)
-#   define  nvfindc  FNAME(VFINDC)
-#   define  nvfndclsc FNAME(VFNDCLSC)
-#   define  nvhsdc   FNAME(VHSDC)
-#   define  nvhscdc  FNAME(VHSCDC)
-#   define  nvhscdmc FNAME(VHSCDMC)
-#   define  nvhsdmc  FNAME(VHSDMC)
-#   define  nvhmkgpc FNAME(VHMKGPC)
-#   define  nvflocc  FNAME(VFLOCC)
-#   define  nvfirefs FNAME(VFIREFS)
-#   define  nvfiqref  FNAME(VFIQREF)
-#   define  nvfiqtag  FNAME(VFIQTAG)
-#   define  nvinqtrc FNAME(VINQTRC)
-#   define  nvntrc   FNAME(VNTRC)
-#   define  nvgttrsc FNAME(VGTTRSC)
-#   define  nvgttrc  FNAME(VGTTRC)
-#   define  nvadtrc  FNAME(VADTRC)
-#   define  nvsiqintr FNAME(VSIQINTR)
-#   define  nvsiqnelt FNAME(VSIQNELT)
-#   define  nvsqfldsc   FNAME(VSQFLDSC)
-#   define  nvsiqvsz    FNAME(VSIQVSZ)
-#   define  nvsqnamec   FNAME(VSQNAMEC)
-#   define  nvsfccpk    FNAME(VSFCCPK)
-#   define  nvsfncpk    FNAME(VSFNCPK)
-#   define  nvdtrc      FNAME(VDTRC)
-#   define  nvscfcls    FNAME(VSCFCLS)
-#   define  nvscsetblsz FNAME(VSCSETBLSZ)
-#   define  nvscsetnmbl FNAME (VSCSETNMBL)
-#   define  nvscgblinfo FNAME(VSCGBLINFO)
-#  endif
-#else                           /* !DF_CAPFNAMES */
-# if defined(UNIX386) || (!(defined INTEL86) && !(defined WIN32))
-#   define  ndfivopn FNAME(dfivopn)
-#   define  ndfvclos FNAME(dfvclos)
-#   define  nvatchc  FNAME(vatchc)
-#   define  nvdtchc  FNAME(vdtchc)
-#   define  nvgnamc  FNAME(vgnamc)
-#   define  nvgclsc  FNAME(vgclsc)
-#   define  nvinqc   FNAME(vinqc)
-#   define  nvdeletec FNAME(vdeletec)
-#   define  nvgidc   FNAME(vgidc)
-#   define  nvgnxtc  FNAME(vgnxtc)
-#   define  nvsnamc  FNAME(vsnamc)
-#   define  nvsclsc  FNAME(vsclsc)
-#   define  nvinsrtc FNAME(vinsrtc)
-#   define  nvisvgc  FNAME(visvgc)
-#   define  nvisvsc  FNAME(visvsc)
-#   define  nvsatchc FNAME(vsatchc)
-#   define  nvsdtchc FNAME(vsdtchc)
-#   define  nvsqref  FNAME(vsqref)
-#   define  nvsqtag  FNAME(vsqtag)
-#   define  nvsgver  FNAME(vsgver)
-#   define  nvsseekc FNAME(vsseekc)
-#   define  nvsgnamc FNAME(vsgnamc)
-#   define  nvsgclsc FNAME(vsgclsc)
-#   define  nvsinqc  FNAME(vsinqc)
-#   define  nvsfexc  FNAME(vsfexc)
-#   define  nvsfndc  FNAME(vsfndc)
-#   define  nvsgidc  FNAME(vsgidc)
-#   define  nvsdltc  FNAME(vsdltc)
-#   define  nvsapp   FNAME(vsapp)
-#   define  nvssnamc FNAME(vssnamc)
-#   define  nvssclsc FNAME(vssclsc)
-#   define  nvssfldc FNAME(vssfldc)
-#   define  nvssintc FNAME(vssintc)
-#   define  nvsfdefc FNAME(vsfdefc)
-#   define  nvssextfc FNAME(vssextfc)
-#   define  nvfnflds FNAME(vfnflds)
-#   define  nvffnamec FNAME(vffnamec)
-#   define  nvfftype FNAME(vfftype)
-#   define  nvffisiz FNAME(vffisiz)
-#   define  nvffesiz FNAME(vffesiz)
-#   define  nvffordr FNAME(vffordr)
-#   define  nvsfrdc  FNAME(vsfrdc)
-#   define  nvsfrd   FNAME(vsfrd)
-#   define  nvsreadc FNAME(vsreadc)
-#   define  nvsfwrtc FNAME(vsfwrtc)
-#   define  nvsfwrt  FNAME(vsfwrt)
-#   define  nvswritc FNAME(vswritc)
-#   define  nvsgintc FNAME(vsgintc)
-#   define  nvseltsc FNAME(vseltsc)
-#   define  nvsgfldc FNAME(vsgfldc)
-#   define  nvssizc  FNAME(vssizc)
-#   define  nventsc  FNAME(ventsc)
-#   define  nvlonec  FNAME(vlonec)
-#   define  nvslonec FNAME(vslonec)
-#   define  nvfindc  FNAME(vfindc)
-#   define  nvfndclsc FNAME(vfndclsc)
-#   define  nvhscdc  FNAME(vhscdc)
-#   define  nvhsdc   FNAME(vhsdc)
-#   define  nvhscdmc  FNAME(vhscdmc)
-#   define  nvhsdmc  FNAME(vhsdmc)
-#   define  nvhmkgpc FNAME(vhmkgpc)
-#   define  nvflocc  FNAME(vflocc)
-#   define  nvinqtrc FNAME(vinqtrc)
-#   define  nvntrc   FNAME(vntrc)
-#   define  nvnrefs  FNAME(vnrefs)
-#   define  nvgttrsc FNAME(vgttrsc)
-#   define  nvqref   FNAME(vqref)
-#   define  nvqtag   FNAME(vqtag)
-#   define  nvgttrc  FNAME(vgttrc)
-#   define  nvadtrc  FNAME(vadtrc)
-#   define  nvfstart FNAME(vfstart)
-#   define  nvfend   FNAME(vfend)
-#   define  nvsqfnelt   FNAME(vsqfnelt)
-#   define  nvsqfintr   FNAME(vsqfintr)
-#   define  nvsqfldsc   FNAME(vsqfldsc)
-#   define  nvsqfvsiz   FNAME(vsqfvsiz)
-#   define  nvsqnamec   FNAME(vsqnamec)
-#   define  nvsfccpk    FNAME(vsfccpk)
-#   define  nvsfncpk    FNAME(vsfncpk)
-#   define  nvdtrc      FNAME(vdtrc)
-#   define  nvscfcls    FNAME(vscfcls)
-#   define  nvscsetblsz FNAME(vscsetblsz)
-#   define  nvscsetnmbl FNAME (vscsetnmbl)
-#   define  nvscgblinfo FNAME(vscgblinfo)
-#  else                            /* !sl */
-#   define  ndfivopn FNAME(dfivopn)
-#   define  ndfvclos FNAME(dfvclos)
-#   define  nvatchc  FNAME(vatchc)
-#   define  nvdtchc  FNAME(vdtchc)
-#   define  nvgnamc  FNAME(vgnamc)
-#   define  nvgclsc  FNAME(vgclsc)
-#   define  nvinqc   FNAME(vinqc)
-#   define  nvdeletec FNAME(vdeletec)
-#   define  nvgidc   FNAME(vgidc)
-#   define  nvgnxtc  FNAME(vgnxtc)
-#   define  nvsnamc  FNAME(vsnamc)
-#   define  nvsclsc  FNAME(vsclsc)
-#   define  nvinsrtc FNAME(vinsrtc)
-#   define  nvisvgc  FNAME(visvgc)
-#   define  nvfistart FNAME(vfistart)
-#   define  nvfiend  FNAME(vfiend)
-#   define  nvisvsc  FNAME(visvsc)
-#   define  nvsatchc FNAME(vsatchc)
-#   define  nvsdtchc FNAME(vsdtchc)
-#   define  nvsiqref FNAME(vsiqref)
-#   define  nvsiqtag FNAME(vsiqtag)
-#   define  nvsigver FNAME(vsigver)
-#   define  nvsseekc FNAME(vsseekc)
-#   define  nvsgnamc FNAME(vsgnamc)
-#   define  nvsgclsc FNAME(vsgclsc)
-#   define  nvsinqc  FNAME(vsinqc)
-#   define  nvsfexc  FNAME(vsfexc)
-#   define  nvsfndc  FNAME(vsfndc)
-#   define  nvsgidc  FNAME(vsgidc)
-#   define  nvsdltc  FNAME(vsdltc)
-#   define  nvsapp   FNAME(vsapp)
-#   define  nvssnamc FNAME(vssnamc)
-#   define  nvssclsc FNAME(vssclsc)
-#   define  nvssfldc FNAME(vssfldc)
-#   define  nvssintc FNAME(vssintc)
-#   define  nvsfdefc FNAME(vsfdefc)
-#   define  nvssextfc FNAME(vssextfc)
-#   define  nvfinflds FNAME(vfinflds)
-#   define  nvfifnm  FNAME(vfifnm)
-#   define  nvfiftp  FNAME(vfiftp)
-#   define  nvfifisz FNAME(vfifisz)
-#   define  nvfifesz FNAME(vfifesz)
-#   define  nvfifodr FNAME(vfifodr)
-#   define  nvsfirdc FNAME(vsfirdc)
-#   define  nvsfird  FNAME(vsfird)
-#   define  nvsreadc FNAME(vsreadc)
-#   define  nvsfiwrc FNAME(vsfiwrc)
-#   define  nvsfiwr  FNAME(vsfiwr)
-#   define  nvswritc FNAME(vswritc)
-#   define  nvsgintc FNAME(vsgintc)
-#   define  nvseltsc FNAME(vseltsc)
-#   define  nvsgfldc FNAME(vsgfldc)
-#   define  nvssizc  FNAME(vssizc)
-#   define  nventsc  FNAME(ventsc)
-#   define  nvlonec  FNAME(vlonec)
-#   define  nvslonec FNAME(vslonec)
-#   define  nvfindc  FNAME(vfindc)
-#   define  nvfndclsc FNAME(vfndclsc)
-#   define  nvhsdc   FNAME(vhsdc)
-#   define  nvhscdc  FNAME(vhscdc)
-#   define  nvhscdmc FNAME(vhscdmc)
-#   define  nvhsdmc  FNAME(vhsdmc)
-#   define  nvhmkgpc FNAME(vhmkgpc)
-#   define  nvflocc  FNAME(vflocc)
-#   define  nvfirefs FNAME(vfirefs)
-#   define  nvfiqref  FNAME(vfiqref)
-#   define  nvfiqtag  FNAME(vfiqtag)
-#   define  nvinqtrc FNAME(vinqtrc)
-#   define  nvntrc   FNAME(vntrc)
-#   define  nvgttrsc FNAME(vgttrsc)
-#   define  nvgttrc  FNAME(vgttrc)
-#   define  nvadtrc  FNAME(vadtrc)
-#   define  nvsiqintr FNAME(vsiqintr)
-#   define  nvsiqnelt FNAME(vsiqnelt)
-#   define  nvsqfldsc   FNAME(vsqfldsc)
-#   define  nvsiqvsz   FNAME(vsiqvsz)
-#   define  nvsqnamec   FNAME(vsqnamec)
-#   define  nvsfccpk    FNAME(vsfccpk)
-#   define  nvsfncpk    FNAME(vsfncpk)
-#   define  nvdtrc      FNAME(vdtrc)
-#   define  nvscfcls    FNAME(vscfcls)
-#   define  nvscsetblsz FNAME(vscsetblsz)
-#   define  nvscsetnmbl FNAME (vscsetnmbl)
-#   define  nvscgblinfo FNAME(vscgblinfo)
-#  endif
-#endif                          /* DF_CAPFNAMES */
-#endif                          /* VG_FNAMES */
-
-    HDFLIBAPI      FRETVAL(intf) ndfivopn
-                (_fcd filename, intf  * acc_mode, intf  * defdds, intf  * namelen);
-
-    HDFLIBAPI      FRETVAL(intf) ndfvclos
-                (intf  * file_id);
-
-    HDFLIBAPI      FRETVAL(intf) nvatchc
-                (intf  * f, intf  * vgid, _fcd accesstype);
-
-    HDFLIBAPI      FRETVAL(intf) nvdtchc
-                (intf  * vkey);
-
-    HDFLIBAPI      FRETVAL(intf) nvgnamc
-                (intf  * vkey, _fcd vgname);
-
-    HDFLIBAPI      FRETVAL(intf) nvgclsc
-                (intf  * vkey, _fcd vgclass);
-
-    HDFLIBAPI      FRETVAL(intf) nvinqc
-                (intf  * vkey, intf  * nentries, _fcd vgname);
-
-    HDFLIBAPI      FRETVAL(intf) nvdeletec
-                (intf  *f, intf  * vkey);
-
-    HDFLIBAPI      FRETVAL(intf) nvgidc
-                (intf  * f, intf  * vgid);
-
-    HDFLIBAPI      FRETVAL(intf) nvgnxtc
-                (intf  * vkey, intf  * id);
-
-    HDFLIBAPI      FRETVAL(intf) nvsnamc
-                (intf  * vkey, _fcd vgname, intf  * vgnamelen);
-
-    HDFLIBAPI      FRETVAL(intf) nvsclsc
-                (intf  * vkey, _fcd vgclass, intf  * vgclasslen);
-
-    HDFLIBAPI      FRETVAL(intf) nvinsrtc
-                (intf  * vkey, intf  * vobjptr);
-
-    HDFLIBAPI      FRETVAL(intf) nvisvgc
-                (intf  * vkey, intf  * id);
-
-    HDFLIBAPI      FRETVAL(intf) nvfstart
-                (intf  * f);
-
-    HDFLIBAPI      FRETVAL(intf) nvfend
-                (intf  * f);
-
-    HDFLIBAPI      FRETVAL(intf) nvisvsc
-                (intf  * vkey, intf  * id);
-
-    HDFLIBAPI      FRETVAL(intf) nvsatchc
-                (intf  * f, intf  * vsref, _fcd accesstype);
-
-    HDFLIBAPI      FRETVAL(intf) nvsdtchc
-                (intf  * vkey);
-
-    HDFLIBAPI      FRETVAL(intf) nvsqref
-                (intf  * vkey);
-
-    HDFLIBAPI      FRETVAL(intf) nvsqtag
-                (intf  * vkey);
-  
-    HDFLIBAPI      FRETVAL(intf) nvsqnfld
-                (intf * vkey);
-
-    HDFLIBAPI      FRETVAL(intf) nvsgver
-                (intf  * vkey);
-
-    HDFLIBAPI      FRETVAL(intf) nvsseekc
-                (intf  * vkey, intf  * eltpos);
-
-    HDFLIBAPI      FRETVAL(intf) nvsgnamc
-                (intf  * vkey, _fcd vsname, intf *vsnamelen);
-
-    HDFLIBAPI      FRETVAL(intf) nvsgclsc
-                (intf  * vkey, _fcd vsclass, intf *vsclasslen);
-
-    HDFLIBAPI      FRETVAL(intf) nvsinqc
-                (intf  * vkey, intf  * nelt, intf  * interlace, _fcd fields,
-		intf  * eltsize, _fcd vsname, intf *fieldslen, intf *vsnamelen);
-
-    HDFLIBAPI      FRETVAL(intf) nvsfexc
-                (intf  * vkey, _fcd fields, intf  * fieldslen);
-
-    HDFLIBAPI      FRETVAL(intf) nvsfndc
-                (intf  * f, _fcd name, intf  * namelen);
-
-    HDFLIBAPI      FRETVAL(intf) nvsgidc
-                (intf  * f, intf  * vsref);
-
-    HDFLIBAPI      FRETVAL(intf) nvsdltc
-                (intf  * f, intf  * vsref);
-
-    HDFLIBAPI      FRETVAL(intf) nvsapp
-                (intf  * vkey, intf  *blk);
-
-    HDFLIBAPI      FRETVAL(intf) nvssnamc
-                (intf  * vkey, _fcd vsname, intf  * vsnamelen);
-
-    HDFLIBAPI      FRETVAL(intf) nvssclsc
-                (intf  * vkey, _fcd vsclass, intf  * vsclasslen);
-
-    HDFLIBAPI      FRETVAL(intf) nvssfldc
-                (intf  * vkey, _fcd fields, intf  * fieldslen);
-
-    HDFLIBAPI      FRETVAL(intf) nvssintc
-                (intf  * vkey, intf  * interlace);
-
-    HDFLIBAPI      FRETVAL(intf) nvsfdefc
-                (intf  * vkey, _fcd field, intf  * localtype,
-                 intf  * order, intf  * fieldlen);
-
-    HDFLIBAPI      FRETVAL(intf) nvssextfc
-                (intf  * vkey, _fcd fname, intf  * offset,
-                 intf  * fnamelen);
-
-    HDFLIBAPI      FRETVAL(intf) nvfnflds
-                (intf  * vkey);
-
-    HDFLIBAPI      FRETVAL(intf) nvffnamec
-                (intf  * vkey, intf  *idx, _fcd fname, intf *len);
-
-    HDFLIBAPI      FRETVAL(intf) nvfftype
-                (intf  * vkey, intf  *idx);
-
-    HDFLIBAPI      FRETVAL(intf) nvffisiz
-                (intf  * vkey, intf  *idx);
-
-    HDFLIBAPI      FRETVAL(intf) nvffesiz
-                (intf  * vkey, intf  *idx);
-
-    HDFLIBAPI      FRETVAL(intf) nvffordr
-                (intf  * vkey, intf  *idx);
-
-    HDFLIBAPI      FRETVAL(intf) nvsfrdc
-                (intf  * vkey, _fcd  cbuf, intf  * nelt,
-                 intf  * interlace);
-
-    HDFLIBAPI      FRETVAL(intf) nvsfrd
-                (intf  * vkey, intf  * buf, intf  * nelt,
-                 intf  * interlace);
-
-    HDFLIBAPI      FRETVAL(intf) nvsreadc
-                (intf  * vkey, uint8  * buf, intf  * nelt,
-                 intf  * interlace);
-
-    HDFLIBAPI      FRETVAL(intf) nvsfwrtc
-                (intf  * vkey, _fcd  cbuf, intf  * nelt,
-                 intf  * interlace);
-
-    HDFLIBAPI      FRETVAL(intf) nvsfwrt
-                (intf  * vkey, intf  * buf, intf  * nelt,
-                 intf  * interlace);
-
-    HDFLIBAPI      FRETVAL(intf) nvswritc
-                (intf  * vkey, uint8  * buf, intf  * nelt,
-                 intf  * interlace);
-
-    HDFLIBAPI      FRETVAL(intf) nvsgintc
-                (intf  * vkey);
-
-    HDFLIBAPI      FRETVAL(intf) nvseltsc
-                (intf  * vkey);
-
-    HDFLIBAPI      FRETVAL(intf) nvsgfldc
-                (intf  * vkey, _fcd fields);
-
-    HDFLIBAPI      FRETVAL(intf) nvssizc
-                (intf  * vkey, _fcd fields, intf  * fieldslen);
-
-    HDFLIBAPI      FRETVAL(intf) nventsc
-                (intf  * f, intf  * vgid);
-
-    HDFLIBAPI      FRETVAL(intf) nvlonec
-                (intf  * f, intf  * idarray, intf  * asize);
-
-    HDFLIBAPI      FRETVAL(intf) nvslonec
-                (intf  * f, intf  * idarray, intf  * asize);
-
-    HDFLIBAPI      FRETVAL(intf) nvfindc
-                (intf  * f, _fcd name, intf  * namelen);
-
-    HDFLIBAPI      FRETVAL(intf) nvfndclsc
-                (intf  * f, _fcd vgclass, intf  * classlen);
-
-    HDFLIBAPI      FRETVAL(intf) nvhscdc
-                (intf  * f, _fcd field, _fcd  cbuf, intf  * n, 
-                 intf  * datatype, _fcd vsname, _fcd vsclass, 
-                 intf  * fieldlen, intf  * vsnamelen,
-                 intf  * vsclasslen);
-
-    HDFLIBAPI      FRETVAL(intf) nvhsdc
-                (intf  * f, _fcd field, uint8  * buf, intf  * n, 
-                 intf  * datatype, _fcd vsname, _fcd vsclass, 
-                 intf  * fieldlen, intf  * vsnamelen,
-                 intf  * vsclasslen);
-
-    HDFLIBAPI      FRETVAL(intf) nvhscdmc
-                (intf  * f, _fcd field, _fcd  cbuf, intf  * n,
-                 intf  * datatype, _fcd vsname, _fcd vsclass, 
-                 intf  * order, intf  * fieldlen, intf * vsnamelen,
-                 intf  * vsclasslen);
-
-    HDFLIBAPI      FRETVAL(intf) nvhsdmc
-                (intf  * f, _fcd field, uint8  * buf, intf  * n,
-                 intf  * datatype, _fcd vsname, _fcd vsclass, 
-                 intf  * order, intf  * fieldlen, intf * vsnamelen,
-                 intf  * vsclasslen);
-
-    HDFLIBAPI      FRETVAL(intf) nvhmkgpc
-                (intf  * f, intf  * tagarray, intf  * refarray, intf  * n,
-                 _fcd vgname, _fcd vgclass, intf  * vgnamelen, intf  * vgclasslen);
-
-    HDFLIBAPI      FRETVAL(intf) nvflocc
-                (intf  * vkey, _fcd field, intf  * fieldlen);
-
-    HDFLIBAPI      FRETVAL(intf) nvinqtrc
-                (intf  * vkey, intf  * tag, intf  * ref);
-
-    HDFLIBAPI      FRETVAL(intf) nvntrc
-                (intf  * vkey);
-
-    HDFLIBAPI      FRETVAL(intf) nvnrefs
-                (intf  * vkey, intf  *tag);
-
-    HDFLIBAPI      FRETVAL(intf) nvqref
-                (intf  * vkey);
-
-    HDFLIBAPI      FRETVAL(intf) nvqtag
-                (intf  * vkey);
-
-    HDFLIBAPI      FRETVAL(intf) nvgttrsc
-                (intf  * vkey, intf  * tagarray, intf  * refarray, intf  * n);
-
-    HDFLIBAPI      FRETVAL(intf) nvgttrc
-                (intf  * vkey, intf  * which, intf  * tag, intf  * ref);
-
-    HDFLIBAPI      FRETVAL(intf) nvadtrc
-                (intf  * vkey, intf  * tag, intf  * ref);
-
-    HDFLIBAPI      FRETVAL(intf) nvdtrc
-                (intf  * vkey, intf  * tag, intf  * ref);
-
-    HDFLIBAPI      FRETVAL(intf) nvsqfnelt
-                (intf * vkey, intf * nelt);
-
-    HDFLIBAPI      FRETVAL(intf) nvsqfintr
-                (intf * vkey, intf * interlace);
-
-    HDFLIBAPI      FRETVAL(intf) nvsqfldsc
-                (intf * vkey, _fcd fields, intf *fieldslen);
-
-    HDFLIBAPI      FRETVAL(intf) nvsqfvsiz
-                (intf * vkey, intf * size);
-
-    HDFLIBAPI      FRETVAL(intf) nvsqnamec  
-                (intf * vkey, _fcd name, intf *namelen);
-
-    HDFLIBAPI      FRETVAL(intf) nvsfccpk
-                (intf *vs, intf *packtype, _fcd buflds, intf *buf, intf *bufsz,
-        intf *nrecs, _fcd pckfld, _fcd fldbuf, intf *buflds_len, intf *fld_len);
-
-    HDFLIBAPI      FRETVAL(intf) nvsfncpk
-                (intf *vs, intf *packtype, _fcd buflds, intf *buf, intf *bufsz,
-        intf *nrecs, _fcd pckfld, intf *fldbuf, intf *buflds_len, intf *fld_len);
-
-    HDFLIBAPI      FRETVAL(intf) nvscsetblsz
-                (intf *id, intf *block_size);
-
-    HDFLIBAPI      FRETVAL(intf) nvscsetnmbl
-                (intf *id, intf *num_blocks);
-
-    HDFLIBAPI      FRETVAL(intf) nvscgblinfo
-                (intf *id, intf *block_size, intf *num_blocks);
-
-/* 
-  ** from vattrf.c
- */
-#ifndef VATTR_FNAMES
-#  define VATTR_FNAMES
-#ifdef DF_CAPFNAMES
-# if defined(UNIX386) || (!(defined INTEL86) && !(defined WIN32))
-#  define nvsfcfdx   FNAME(VSFCFDX)
-#  define nvsfcsat   FNAME(VSFCSAT)
-#  define nvsfcsca   FNAME(VSFCSCA)
-#  define nvsfnats   FNAME(VSFNATS)
-#  define nvsffnas   FNAME(VSFFNAS)
-#  define nvsfcfda   FNAME(VSFCFDA)
-#  define nvsfcain   FNAME(VSFCAIN)
-#  define nvsfgnat   FNAME(VSFGNAT)
-#  define nvsfgcat   FNAME(VSFGCAT)
-#  define nvsfisat   FNAME(VSFISAT)
-#  define nvfcsatt   FNAME(VFCSATT)
-#  define nvfcscat   FNAME(VFCSCAT)
-#  define nvfnatts   FNAME(VFNATTS)
-#  define nvfcfdat   FNAME(VFCFDAT)
-#  define nvfainfo   FNAME(VFAINFO)
-#  define nvfgnatt   FNAME(VFGNATT)
-#  define nvfgcatt   FNAME(VFGCATT)
-#  define nvfgver    FNAME(VFGVER)
-# else                          /* !sl */
-#  define nvsfcfdx   FNAME(VSFCFDX)
-#  define nvsfcsat   FNAME(VSFCSAT)
-#  define nvsfcsca   FNAME(VSFCSCA)
-#  define nvsfcnats  FNAME(VSFCNATS)
-#  define nvsfcfnas  FNAME(VSFCFNAS)
-#  define nvsfcfda   FNAME(VSFCFDA)
-#  define nvsfcainf  FNAME(VSFCAINF)
-#  define nvsfcgna   FNAME(VSFCGNA)
-#  define nvsfcgca   FNAME(VSFCGCA)
-#  define nvsfcisa   FNAME(VSFCISA)
-#  define nvfcsatt   FNAME(VFCSATT)
-#  define nvfcscat   FNAME(VFCSCAT)
-#  define nvfcnats   FNAME(VFCNATS)
-#  define nvfcfdat   FNAME(VFCFDAT)
-#  define nvfcainf   FNAME(VFCAINF)
-#  define nvfcgnat   FNAME(VFCGNAT)
-#  define nvfcgcat   FNAME(VFCGCAT)
-#  define nvfcgver   FNAME(VFCGVER)
-# endif
-#else       /* !DF_CAPFNAMES  */
-# if defined(UNIX386) || (!(defined INTEL86) && !(defined WIN32))
-#  define nvsfcfdx   FNAME(vsfcfdx)
-#  define nvsfcsat   FNAME(vsfcsat)
-#  define nvsfcsca   FNAME(vsfcsca)
-#  define nvsfnats   FNAME(vsfnats)
-#  define nvsffnas   FNAME(vsffnas)
-#  define nvsfcfda   FNAME(vsfcfda)
-#  define nvsfcain   FNAME(vsfcain)
-#  define nvsfgnat   FNAME(vsfgnat)
-#  define nvsfgcat   FNAME(vsfgcat)
-#  define nvsfisat   FNAME(vsfisat)
-#  define nvfcsatt   FNAME(vfcsatt)
-#  define nvfcscat   FNAME(vfcscat)
-#  define nvfnatts   FNAME(vfnatts)
-#  define nvfcfdat   FNAME(vfcfdat)
-#  define nvfainfo   FNAME(vfainfo)
-#  define nvfgnatt   FNAME(vfgnatt)
-#  define nvfgcatt   FNAME(vfgcatt)
-#  define nvfgver    FNAME(vfgver)
-# else                           /* !sl */
-#  define nvsfcfdx   FNAME(vsfcfdx)
-#  define nvsfcsat   FNAME(vsfcsat)
-#  define nvsfcsca   FNAME(vsfcsca)
-#  define nvsfcnats  FNAME(vsfcnats)
-#  define nvsfcfnas  FNAME(vsfcfnas)
-#  define nvsfcfda   FNAME(vsfcfda)
-#  define nvsfcainf  FNAME(vsfcainf)
-#  define nvsfcgna   FNAME(vsfcgna)
-#  define nvsfcgca   FNAME(vsfcgca)
-#  define nvsfcisa   FNAME(vsfcisa)
-#  define nvfcsatt   FNAME(vfcsatt)
-#  define nvfcscat   FNAME(vfcscat)
-#  define nvfcnats   FNAME(vfcnats)
-#  define nvfcfdat   FNAME(vfcfdat)
-#  define nvfcainf   FNAME(vfcainf)
-#  define nvfcgnat   FNAME(vfcgnat)
-#  define nvfcgcat   FNAME(vfcgcat)
-#  define nvfcgver   FNAME(vfcgver)
-# endif
-#endif   /* DF_CAPFNAMES */
-#endif   /* VATTR_FNAMES  */
-   HDFLIBAPI   FRETVAL(intf) nvsfcfdx
-            (intf *vsid, _fcd fldnm, intf *findex, intf *fldnmlen);
-   HDFLIBAPI   FRETVAL(intf) nvsfcsat
-            (intf *vsid, intf *findex, _fcd attrnm, intf *dtype,
-             intf *count, intf *values, intf *attrnmlen);
-   HDFLIBAPI   FRETVAL(intf) nvsfcsca
-            (intf *vsid, intf *findex, _fcd attrnm, intf *dtype,
-             intf *count, _fcd values, intf *attrnmlen);
-   HDFLIBAPI   FRETVAL(intf) nvsfnats
-            (intf *vsid);
-   HDFLIBAPI   FRETVAL(intf) nvsffnas
-            (intf *vsid, intf *findex);
-   HDFLIBAPI   FRETVAL(intf) nvsfcfda
-            (intf *vsid, intf *findex, _fcd attrnm, intf *attrnmlen);
-   HDFLIBAPI   FRETVAL(intf) nvsfcain
-            (intf *vsid, intf *findex, intf *aindex, _fcd attrname,
-             intf *dtype, intf *count, intf *size, intf *attrnamelen);
-   HDFLIBAPI   FRETVAL(intf) nvsfgnat
-            (intf *vsid, intf *findex, intf *aindex, intf *values);
-   HDFLIBAPI   FRETVAL(intf) nvsfgcat
-            (intf *vsid, intf *findex, intf *aindex, _fcd values);
-   HDFLIBAPI   FRETVAL(intf) nvsfisat
-            (intf *vsid);
-   HDFLIBAPI   FRETVAL(intf) nvfcsatt
-            (intf *vgid, _fcd attrnm, intf *dtype,
-             intf *count, intf *values, intf *attrnmlen);
-   HDFLIBAPI   FRETVAL(intf) nvfcscat
-            (intf *vgid, _fcd attrnm, intf *dtype, intf *count,
-             _fcd values, intf *attrnmlen);
-   HDFLIBAPI   FRETVAL(intf) nvfnatts
-            (intf *vgid);
-   HDFLIBAPI   FRETVAL(intf) nvfcfdat
-            (intf *vgid, _fcd attrnm, intf *attrnmlen);
-   HDFLIBAPI   FRETVAL(intf) nvfainfo
-            (intf *vgid, intf *aindex, _fcd attrname,
-             intf *dtype, intf *count, intf *size);
-   HDFLIBAPI   FRETVAL(intf) nvfgnatt
-            (intf *vgid, intf *aindex, intf *values);
-   HDFLIBAPI   FRETVAL(intf) nvfgcatt
-            (intf *vgid, intf *aindex, _fcd values);
-   HDFLIBAPI   FRETVAL(intf) nvfgver
-            (intf *vgid);
-
-#if defined c_plusplus || defined __cplusplus
-}
-#endif                          /* c_plusplus || __cplusplus */
-
-#endif                          /* _H_PROTO */
-
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/linklist.h b/Utilities/CAI/cai_dll/inc/inc_hdf/linklist.h
deleted file mode 100755
index 9e3a817749..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/linklist.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*-----------------------------------------------------------------------------
- * File:    linklist.h
- * Purpose: header file for linked list API
- * Dependencies: 
- * Invokes:
- * Contents:
- * Structure definitions: 
- * Constant definitions: 
- *---------------------------------------------------------------------------*/
-
-/* avoid re-inclusion */
-#ifndef __LINKLIST_H
-#define __LINKLIST_H
-
-#include "hdf.h"
-
-/* Definitions for linked-list creation flags */
-#define HUL_UNSORTED_LIST   0x0000
-#define HUL_SORTED_LIST     0x0001
-
-/* Type of the function to compare objects & keys */
-typedef intn (*HULsearch_func_t)(const VOIDP obj, const VOIDP key);
-
-/* Type of the function to compare two objects */
-typedef intn (*HULfind_func_t)(const VOIDP obj1, const VOIDP obj2);
-
-/* Linked list information structure used */
-typedef struct node_info_struct_tag {
-    VOIDP *obj_ptr;         /* pointer associated with the linked list node */
-    struct node_info_struct_tag *next;   /* link to list node */
-  }node_info_t;
-
-/* Linked list head structure */
-typedef struct list_head_struct_tag {
-    uintn count;            /* # of nodes in the list */
-    uintn flags;            /* list creation flags */
-    HULfind_func_t cmp_func;    /* node comparison function */
-    node_info_t *node_list; /* pointer to a linked list of nodes */
-    node_info_t *curr_node; /* pointer to the current node when iterating */
-  }list_head_t;
-
-#if defined LIST_MASTER | defined LIST_TESTER
-
-/* Define this in only one place */
-#ifdef LIST_MASTER
-/* Pointer to the list node free list */
-static node_info_t *node_free_list=NULL;
-
-#endif /* LIST_MASTER */
-
-/* Useful routines for generally private use */
-
-#endif /* LIST_MASTER | LIST_TESTER */
-
-#if defined c_plusplus || defined __cplusplus
-extern      "C"
-{
-#endif                          /* c_plusplus || __cplusplus */
-
-/******************************************************************************
- NAME
-     HULcreate_list - Create a linked list
-
- DESCRIPTION
-    Creates a linked list.  The list may either be sorted or un-sorted, based
-    on the comparison function.
-
- RETURNS
-    Returns a pointer to the list if successful and NULL otherwise
-
-*******************************************************************************/
-list_head_t *HULcreate_list(HULfind_func_t find_func    /* IN: object comparison function */
-);
-
-/******************************************************************************
- NAME
-     HULdestroy_list - Destroys a linked list
-
- DESCRIPTION
-    Destroys a linked list created by HULcreate_list().  This function
-    walks through the list and frees all the nodes, then frees the list head.
-    Note: this function does not (currently) free the objects in the nodes,
-    it just leaves 'em hanging.
-
- RETURNS
-    Returns SUCCEED/FAIL.
-
-*******************************************************************************/
-intn HULdestroy_list(list_head_t *lst    /* IN: list to destroy */
-);
-
-/******************************************************************************
- NAME
-     HULadd_node - Adds an object to a linked-list
-
- DESCRIPTION
-    Adds an object to the linked list.  If the list is sorted, the comparison
-    function is used to determine where to insert the node, otherwise it is
-    inserted at the head of the list.
-
- RETURNS
-    Returns SUCCEED/FAIL.
-
-*******************************************************************************/
-intn HULadd_node(list_head_t *lst,  /* IN: list to modify */
-    VOIDP obj                       /* IN: object to add to the list */
-);
-
-/******************************************************************************
- NAME
-     HULsearch_node - Search for an object in a linked-list
-
- DESCRIPTION
-    Locate an object in a linked list using a key and comparison function.
-
- RETURNS
-    Returns a pointer to the object found in the list, or NULL on failure.
-
-*******************************************************************************/
-VOIDP HULsearch_node(list_head_t *lst,  /* IN: list to search */
-    HULsearch_func_t srch_func,       /* IN: function to use to find node */
-    VOIDP key                       /* IN: key of object to search for */
-);
-
-/******************************************************************************
- NAME
-     HULfirst_node - Get the first object in a linked-list
-
- DESCRIPTION
-    Returns the first object in a linked-list and prepares the list for
-    interating through.
-
- RETURNS
-    Returns a pointer to the first object found in the list, or NULL on failure.
-
-*******************************************************************************/
-VOIDP HULfirst_node(list_head_t *lst   /* IN: list to search */
-);
-
-/******************************************************************************
- NAME
-     HULnext_node - Get the next object in a linked-list
-
- DESCRIPTION
-    Returns the next object in a linked-list by walking through the list
-
- RETURNS
-    Returns a pointer to the next object found in the list, or NULL on failure.
-
-*******************************************************************************/
-VOIDP HULnext_node(list_head_t *lst   /* IN: list to search */
-);
-
-/******************************************************************************
- NAME
-     HULremove_node - Removes an object from a linked-list
-
- DESCRIPTION
-    Remove an object from a linked list.  The key and comparison function are
-    provided locate the object to delete.
-
- RETURNS
-    Returns a pointer to the object deleted from the list, or NULL on failure.
-
-*******************************************************************************/
-VOIDP HULremove_node(list_head_t *lst,  /* IN: list to modify */
-    HULsearch_func_t srch_func,       /* IN: function to use to find node to remove */
-    VOIDP key                       /* IN: object to add to the list */
-);
-
-/*--------------------------------------------------------------------------
- NAME
-    HULshutdown
- PURPOSE
-    Terminate various global items.
- USAGE
-    intn HULshutdown()
- RETURNS
-    Returns SUCCEED/FAIL
- DESCRIPTION
-    Free various buffers allocated in the HUL routines.
- GLOBAL VARIABLES
- COMMENTS, BUGS, ASSUMPTIONS
-    Should only ever be called by the "atexit" function HDFend
- EXAMPLES
- REVISION LOG
---------------------------------------------------------------------------*/
-intn 
-HULshutdown(void);
-
-#if defined c_plusplus || defined __cplusplus
-}
-#endif                          /* c_plusplus || __cplusplus */
-
-#endif /* __LINKLIST_H */
-
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/mfan.h b/Utilities/CAI/cai_dll/inc/inc_hdf/mfan.h
deleted file mode 100755
index 9865cc7a06..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/mfan.h
+++ /dev/null
@@ -1,372 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*------------------------------------------------------------------------------
- * File:    mfan.h
- * Author:  GeorgeV
- * Purpose: header file for the Multi-file Annotation Interface
- * Invokes: 
- * Contents:
- *          Structure definitions: ANnode, ANentry
- *          Constant definitions:  AN_DATA_LABEL, AN_DATA_DESC
- *          (-moved to hdf.h)      AN_FILE_LABEL, AN_FILE_DESC
- *
- *----------------------------------------------------------------------------*/
-
-#ifndef _MFAN_H  /* avoid re-inclusion */
-#define _MFAN_H
-
-#include "hdf.h"
-
-#if 0
-/* enumerated types of the varous annotation types 
- * NOTE: moved to hdf.h since they are used by end users. */
-typedef enum 
-{ 
-  AN_DATA_LABEL = 0, /* Data label */
-  AN_DATA_DESC,      /* Data description */
-  AN_FILE_LABEL,     /* File label */
-  AN_FILE_DESC       /* File description */
-} ann_type;
-#endif
-
-#ifdef MFAN_C
-/* WE ARE IN MAIN ANNOTATION SOURCE FILE "mfan.c" */
-
-/* PRIVATE variables and definitions */
-
-/* This sturcture is used to find which file the annotation belongs to
- * and use the subsequent file specific annotation 'key' to find the 
- * annotation. The annotation atom group(ANIDGROUP) keeps track of 
- * all anotations across the file. */
-typedef struct ANnode
-{
-  int32   file_id;  /* which file this annotation belongs to */
-  int32   ann_key;  /* type/ref: used to find annotation in corresponding
-                       TBBT in filerec_t->tree[]. */
-  intn    new_ann;  /* flag */
-} ANnode;
-
-/*
- * This structure is an entry in the label/desc tree
- * for a label/desc in the file, it gives the ref of the label/desc,
- * and the tag/ref of the data item to which the label/desc relates 
- * The filerec_t->an_tree[] TBBT members will contain these entries.
- **/
-typedef struct ANentry
-{
-  int32   ann_id;      /* annotation id */
-  uint16  annref;      /* ref of annotation */
-  uint16  elmtag;      /* tag of data */
-  uint16  elmref;      /* ref of data */
-} ANentry;
-
-
-/* This is the size of the hash tables used for annotation IDs */
-#define ANATOM_HASH_SIZE    64
-
-/* Used to create unique 32bit keys from annotation type and reference number 
- *  This key is used to add nodes to a corresponding TBBT in 
- *  filrerec_t->an_tree[]. 
- *  ----------------------------
- *  | type(16bits) | ref(16bits) |
- *  -----------------------------*/
-#define AN_CREATE_KEY(t,r) ((((int32)t & 0xffff) << 16) | r)
-
-/* Obtain Reference number from key */
-#define AN_KEY2REF(k)      ((uint16)((int32)k & 0xffff))
-
-/* Obtain Annotation type from key */
-#define AN_KEY2TYPE(k)     ((int32)((int32)k >> 16))
-
-#else /* !MFAN_C */
-/* WE are NOT in main ANNOTATION source file
- * Nothing EXPORTED except Public fcns */
-
-
-/******************************************************************************
- NAME
-    ANdestroy -- Un-Initialize Annotation Interface
-
- DESCRIPTION
-    Unallocates global annotaton node list and file list.
-
- RETURNS
-    SUCCEED or FAIL
-*******************************************************************************/
-extern intn ANdestroy(void);
-
-/******************************************************************************
- NAME
-   ANstart - open file for annotation handling
-
- DESCRIPTION
-   Start annotation handling on the file return a annotation ID to the file.
-
- RETURNS
-   A file ID or FAIL.
-*******************************************************************************/
-extern int32 ANstart(int32 file_id /* IN: file to start annotation access on */);
-
-/******************************************************************************
- NAME
-   ANfileinfo - Report high-level information about the ANxxx interface for a given file.
-
- DESCRIPTION
-   Reports general information about the number of file and object(i.e. data)
-   annotations in the file. This routine is generally used to find
-   the range of acceptable indices for ANselect calls.
-
- RETURNS
-   Returns SUCCEED if successful and FAIL othewise
-
-*******************************************************************************/
-extern intn  ANfileinfo(int32 an_id,         /* IN:  annotation interface id */
-                        int32 *n_file_label, /* OUT: the # of file labels */
-                        int32 *n_file_desc,  /* OUT: the # of file descriptions */
-                        int32 *n_obj_label,  /* OUT: the # of object labels */ 
-                        int32 *n_obj_desc    /* OUT: the # of object descriptions */);
-
-/******************************************************************************
- NAME
-   ANend - End annotation access to file file
-
- DESCRIPTION
-   End annotation access to file.
-
- RETURNS
-   SUCCEED if successful and  FAIL otherwise.
-*******************************************************************************/
-extern int32 ANend(int32 an_id /* IN: Annotation ID of file to close */);
-
-/******************************************************************************
- NAME
-   ANcreate - create a new element annotation and return a handle(id)
-
- DESCRIPTION
-   Creates a data annotation, returns an 'an_id' to work with the new 
-   annotation which can either be a label or description.
-   Valid annotation types are AN_DATA_LABEL for data labels and 
-   AN_DATA_DESC for data descriptions.
-
- RETURNS
-        An ID to an annotation which can either be a label or description.
-*******************************************************************************/
-extern int32 ANcreate(int32 an_id,     /* IN: annotation interface ID */
-                      uint16 elem_tag, /* IN: tag of item to be assigned annotation */
-                      uint16 elem_ref, /* IN: reference number of itme to be assigned ann*/
-                      ann_type type    /* IN: annotation type */);
-
-
-/******************************************************************************
- NAME
-	ANcreatef - create a new file annotation and return a handle(id)
-
- DESCRIPTION
-    Creates a file annotation, returns an 'an_id' to work with the new 
-    file annotation which can either be a label or description.
-    Valid annotation types are AN_FILE_LABEL for file labels and
-    AN_FILE_DESC for file descritpions.
-
- RETURNS
-        An ID to an annotation which can either be a file label or description
-*******************************************************************************/
-extern int32 ANcreatef(int32 an_id,  /* IN: annotation interface ID */
-                       ann_type type /* IN:  annotation type */);
-
-/******************************************************************************
- NAME
-	ANselect - get an annotation ID from index of 'type'
-
- DESCRIPTION
-    Get an annotation Id from index of 'type'.
-    The position index is ZERO based
-
- RETURNS
-    An ID to an annotation type which can either be a label or description 
-*******************************************************************************/
-extern int32 ANselect(int32 an_id,  /* IN: annotation interface ID */
-                      int32 index,  /* IN: index of annottion to get ID for */
-                      ann_type type /* IN: annotation type */);
-
-/******************************************************************************
- NAME
-   ANnumann - find number of annotation of 'type' that  match the given element tag/ref 
-
- DESCRIPTION
-   Find number of annotation of 'type' for the given element 
-   tag/ref pair.Should not be used for File labels and
-   descriptions.
-
- RETURNS
-   number of annotation found if successful and FAIL (-1) otherwise
-
-*******************************************************************************/
-extern intn  ANnumann(int32 an_id,     /* IN: annotation interface id */
-                      ann_type type,   /* IN: annotation type */
-                      uint16 elem_tag, /* IN: tag of item of which this is annotation */
-                      uint16 elem_ref  /* IN: ref of item of which this is annotation*/);
-
-/******************************************************************************
- NAME
-   ANannlist - generate list of annotation ids of 'type' that match the given element tag/ref 
-
- DESCRIPTION
-   Find and generate list of annotation ids of 'type' for the given 
-   element tag/ref pair.Should not be used for File labels and
-   descriptions.
-
- RETURNS
-   number of annotations ids found if successful and FAIL (-1) otherwise
-
-*******************************************************************************/
-extern intn  ANannlist(int32 an_id,     /* IN: annotation interface id */
-                       ann_type type,   /* IN: annotation type */
-                       uint16 elem_tag, /* IN: tag of item of which this is annotation */
-                       uint16 elem_ref, /* IN: ref of item of which this is annotation*/
-                       int32 ann_list[] /* OUT: array of ann_id's that match criteria.*/);
-
-/******************************************************************************
- NAME
-   ANannlen - get length of annotation givne annotation id
-
- DESCRIPTION
-   Uses the annotation id to find ann_key & file_id
-
- RETURNS
-   length of annotation if successful and FAIL (-1) otherwise
-
-*******************************************************************************/
-extern int32 ANannlen(int32 ann_id /* IN: annotation id */);
-
-/******************************************************************************
- NAME
-   ANwriteann - write annotation given ann_id
-
- DESCRIPTION
-   Checks for pre-existence of given annotation, replacing old one if it
-   exists. Writes out annotation.
-
- RETURNS
-   SUCCEED (0) if successful and FAIL (-1) otherwise
-
-*******************************************************************************/
-extern int32 ANwriteann(int32 ann_id,    /* IN: annotation id */
-                        const char *ann, /* IN: annotation to write */
-                        int32 annlen     /* IN: length of annotation*/);
-
-/******************************************************************************
- NAME
-   ANreadann - read annotation given ann_id
-
- DESCRIPTION
-   Gets tag and ref of annotation.  Finds DD for that annotation.
-   Reads the annotation, taking care of NULL terminator, if necessary.
-
- RETURNS
-   SUCCEED (0) if successful and FAIL (-1) otherwise
-
-*******************************************************************************/
-extern int32 ANreadann(int32 ann_id, /* IN: annotation id (handle) */
-                       char *ann,    /* OUT: space to return annotation in */
-                       int32 maxlen  /* IN: size of space to return annotation in */);
-
-/******************************************************************************
- NAME
-	ANendaccess - end access to an annotation given it's id
-
- DESCRIPTION
-    Terminates access to an annotation. For now does nothing
-
- RETURNS
-    SUCCEED(0) or FAIL(-1)
-*******************************************************************************/
-extern intn  ANendaccess(int32 ann_id /* IN: annotation id */);
-
-/******************************************************************************
- NAME
-   ANget_tagref - get tag/ref pair for annotation based on type and index
-
- DESCRIPTION
-   Get the tag/ref of the annotation based on  the type and index of the 
-   annotation. The position index is zero based
-
- RETURNS
-   A tag/ref pairt to an annotation type which can either be a 
-   label or description.
-
-*******************************************************************************/
-extern int32 ANget_tagref(int32 an_id,    /* IN: annotation interface ID */
-                          int32 index,    /* IN: index of annotation to get tag/ref for*/
-                          ann_type type,  /* IN: annotation type */
-                          uint16 *ann_tag,/* OUT: Tag for annotation */ 
-                          uint16 *ann_ref /* OUT: ref for annotation */);
-
-/******************************************************************************
- NAME
-   ANid2tagref -- get tag/ref given annotation id
-
- DESCRIPTION
-   Uses the annotation id to find ann_node entry which contains ann_ref
-
- RETURNS
-   SUCCEED(0) if successful and FAIL (-1) otherwise. 
-*******************************************************************************/
-extern int32 ANid2tagref(int32 ann_id,    /* IN: annotation id */
-                         uint16 *ann_tag, /* OUT: Tag for annotation */
-                         uint16 *ann_ref  /* OUT: ref for annotation */);
-
-/******************************************************************************
- NAME
-   ANtagref2id -- get annotation id given tag/ref
-
- DESCRIPTION
-   Gets the annotation id of the annotation given the tag/ref of
-   the annotation itself and the annotation interface id.
-
- RETURNS
-   Annotation id of annotation if successful and FAIL(-1) otherwise. 
-*******************************************************************************/
-extern int32 ANtagref2id(int32 an_id,    /* IN  Annotation interface id */
-                         uint16 ann_tag, /* IN: Tag for annotation */
-                         uint16 ann_ref  /* IN: ref for annotation */);
-
-/******************************************************************************
- NAME
-   ANatype2tag - annotation type to corresponding annotation TAG
-
- DESCRIPTION
-   Translate annotation type to corresponding TAG.
-
- RETURNS
-   Returns TAG corresponding to annotatin type.
-*******************************************************************************/
-extern uint16 ANatype2tag(ann_type atype /* IN: Annotation type */);
-
-/******************************************************************************
- NAME
-   ANtag2atype - annotation TAG to corresponding annotation type
-
- DESCRIPTION
-   Translate annotation TAG to corresponding atype
-
- RETURNS
-   Returns type corresponding to annotatin TAG.
-*******************************************************************************/
-extern ann_type ANtag2atype(uint16 atag /* IN: annotation tag */);
-
-
-#endif /* !MFAN_C */
-
-#endif /* _MFAN_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/mfgr.h b/Utilities/CAI/cai_dll/inc/inc_hdf/mfgr.h
deleted file mode 100755
index 9459b81a33..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/mfgr.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*-----------------------------------------------------------------------------
- * File:    mfgr.h
- * Purpose: header file for multi-file general raster information
- * Dependencies: 
- * Invokes:
- * Contents:
- * Structure definitions: 
- * Constant definitions: 
- *---------------------------------------------------------------------------*/
-
-/* avoid re-inclusion */
-#ifndef __MFGR_H
-#define __MFGR_H
-
-/* Interlace types available */
-typedef int16 gr_interlace_t;
-#define MFGR_INTERLACE_PIXEL		0    /* pixel interlacing scheme */
-#define MFGR_INTERLACE_LINE		    1    /* line interlacing scheme */
-#define MFGR_INTERLACE_COMPONENT 	2    /* component interlacing scheme */
-
-#if defined MFGR_MASTER | defined MFGR_TESTER
-
-#include "hfile.h"
-#include "tbbt.h"       /* Get tbbt routines */
-
-/* This is the size of the hash tables used for GR & RI IDs */
-#define GRATOM_HASH_SIZE    32
-
-/* The tag of the attribute data */
-#define RI_TAG      DFTAG_VG    /* Current RI groups are stored in Vgroups */
-#define ATTR_TAG    DFTAG_VH    /* Current GR attributes are stored in VDatas */
-
-/* The default threshhold for attributes which will be cached */
-#define GR_ATTR_THRESHHOLD  2048    
-
-#define VALIDRIINDEX(i,gp) ((i)>=0 && (i)<(gp)->gr_count)
-
-/*
- * Each gr_info_t maintains 2 threaded-balanced-binary-tress: one of
- * raster images and one of global attributes
- */
-
-typedef struct gr_info {
-    int32       hdf_file_id;    /* the corresponding HDF file ID (must be first in the structure) */
-    uint16      gr_ref;         /* ref # of the Vgroup of the GR in the file */
-
-    int32       gr_count;       /* # of image entries in gr_tab so far */
-    TBBT_TREE  *grtree;         /* Root of image B-Tree */
-    uintn       gr_modified;    /* whether any images have been modified */
-
-    int32       gattr_count;    /* # of global attr entries in gr_tab so far */
-    TBBT_TREE  *gattree;        /* Root of global attribute B-Tree */
-    uintn       gattr_modified; /* whether any global attributes have been modified */
-
-    intn        access;         /* the number of active pointers to this file's GRstuff */
-    uint32      attr_cache;     /* the threshhold for the attribute sizes to cache */
-} gr_info_t;
-
-typedef struct at_info {
-    int32 index;            /* index of the attribute (needs to be first in the struct) */
-    int32 nt;               /* number type of the attribute */
-    int32 len;              /* length/order of the attribute */
-    uint16 ref;             /* ref of the attribute (stored in VData) */
-    uintn data_modified;    /* flag to indicate whether the attribute data has been modified */
-    uintn new_at;           /* flag to indicate whether the attribute was added to the Vgroup */
-    char *name;             /* name of the attribute */
-    void * data;             /* data for the attribute */
-} at_info_t;
-
-typedef struct dim_info {
-    uint16  dim_ref;            /* reference # of the Dim record */
-    int32   xdim,ydim,          /* dimensions of the image */
-            ncomps,             /* number of components of each pixel in image */
-            nt,                 /* number type of the components */
-            file_nt_subclass;   /* number type subclass of data on disk */
-    gr_interlace_t il;          /* interlace of the components (stored on disk) */
-    uint16  nt_tag,nt_ref;      /* tag & ref of the number-type info */
-    uint16  comp_tag,comp_ref;  /* tag & ref of the compression info */
-} dim_info_t;
-
-typedef struct ri_info {
-    int32   index;              /* index of this image (needs to be first in the struct) */
-    uint16  ri_ref;             /* ref # of the RI Vgroup */
-    uint16  rig_ref;            /* ref # of the RIG group */
-    gr_info_t *gr_ptr;          /* ptr to the GR info that this ri_info applies to */
-    dim_info_t img_dim;         /* image dimension information */
-    dim_info_t lut_dim;         /* palette dimension information */
-    uint16  img_tag,img_ref;    /* tag & ref of the image data */
-    int32   img_aid;            /* AID for the image data */
-    intn    acc_perm;           /* Access permission (read/write) for image AID */
-    uint16  lut_tag,lut_ref;    /* tag & ref of the palette data */
-    gr_interlace_t im_il;       /* interlace of image when next read (default PIXEL) */
-    gr_interlace_t lut_il;      /* interlace of LUT when next read */
-    uintn data_modified;        /* whether the image or palette data has been modified */
-    uintn meta_modified;        /* whether the image or palette meta-info has been modified */
-    uintn attr_modified;        /* whether the attributes have been modified */
-    char   *name;               /* name of the image */
-    int32   lattr_count;        /* # of local attr entries in ri_info so far */
-    TBBT_TREE *lattree;         /* Root of the local attribute B-Tree */
-    intn access;                /* the number of times this image has been selected */
-    uintn use_buf_drvr;         /* access to image needs to be through the buffered special element driver */
-    uintn use_cr_drvr;          /* access to image needs to be through the compressed raster special element driver */
-    uintn comp_img;             /* whether to compress image data */
-    comp_coder_t comp_type;     /* compression type */
-    comp_info cinfo;            /* compression information */
-    uintn ext_img;              /* whether to make image data external */
-    char *ext_name;             /* name of the external file */
-    int32 ext_offset;           /* offset in the external file */
-    uintn acc_img;              /* whether to make image data a different access type */
-    uintn acc_type;             /* type of access-mode to get image data with */
-    uintn fill_img;             /* whether to fill image, or just store fill value */
-    void * fill_value;           /* pointer to the fill value (NULL means use default fill value of 0) */
-    uintn store_fill;           /* whether to add fill value attribute or not */
-} ri_info_t;
-
-/* Useful raster routines for generally private use */
-
-HDFLIBAPI intn GRIil_convert(const void * inbuf,gr_interlace_t inil,void * outbuf,
-        gr_interlace_t outil,int32 dims[2],int32 ncomp,int32 nt);
-
-extern VOID GRIgrdestroynode(void * n);
-
-extern VOID GRIattrdestroynode(void * n);
-
-extern VOID GRIridestroynode(void * n);
-
-#endif /* MFGR_MASTER | MFGR_TESTER */
-
-#endif /* __MFGR_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/mstdio.h b/Utilities/CAI/cai_dll/inc/inc_hdf/mstdio.h
deleted file mode 100755
index 0af1d82302..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/mstdio.h
+++ /dev/null
@@ -1,89 +0,0 @@
-
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*-----------------------------------------------------------------------------
- * File:    mstdio.h
- * Purpose: Header file for stdio-like modeling information.
- * Dependencies: should be included after hdf.h
- * Invokes:
- * Contents: Structures & definitions for stdio modeling.  This header
- *              should only be included in hcomp.c and mstdio.c.
- * Structure definitions:
- * Constant definitions:
- *---------------------------------------------------------------------------*/
-
-/* avoid re-inclusion */
-#ifndef __MSTDIO_H
-#define __MSTDIO_H
-
-#if defined c_plusplus || defined __cplusplus
-extern      "C"
-{
-#endif                          /* c_plusplus || __cplusplus */
-
-/*
-   ** from mstdio.c
- */
-
-    extern int32 HCPmstdio_stread
-                (accrec_t * rec);
-
-    extern int32 HCPmstdio_stwrite
-                (accrec_t * rec);
-
-    extern int32 HCPmstdio_seek
-                (accrec_t * access_rec, int32 offset, int origin);
-
-    extern int32 HCPmstdio_inquire
-                (accrec_t * access_rec, int32 *pfile_id, uint16 *ptag, uint16 *pref,
-               int32 *plength, int32 *poffset, int32 *pposn, int16 *paccess,
-                 int16 *pspecial);
-
-    extern int32 HCPmstdio_read
-                (accrec_t * access_rec, int32 length, void * data);
-
-    extern int32 HCPmstdio_write
-                (accrec_t * access_rec, int32 length, const void * data);
-
-    extern intn HCPmstdio_endaccess
-                (accrec_t * access_rec);
-
-#if defined c_plusplus || defined __cplusplus
-}
-#endif                          /* c_plusplus || __cplusplus */
-
-/* model information about stdio model */
-typedef struct
-{
-    int32      pos;            /* postion ? */
-}
-comp_model_stdio_info_t;
-
-#ifndef MSTDIO_MASTER
-extern funclist_t mstdio_funcs; /* functions to perform run-length encoding */
-#else
-funclist_t  mstdio_funcs =
-{                               /* functions to perform run-length encoding */
-    HCPmstdio_stread,
-    HCPmstdio_stwrite,
-    HCPmstdio_seek,
-    HCPmstdio_inquire,
-    HCPmstdio_read,
-    HCPmstdio_write,
-    HCPmstdio_endaccess
-};
-#endif
-
-#endif /* __MSTDIO_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/netcdf.h b/Utilities/CAI/cai_dll/inc/inc_hdf/netcdf.h
deleted file mode 100755
index bae79fa0db..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/netcdf.h
+++ /dev/null
@@ -1,581 +0,0 @@
-/* Generated automatically from netcdf.h.in by configure. */
-/*
- *	Copyright 1993, University Corporation for Atmospheric Research
- *
- *  Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose without fee is hereby granted, provided
- * that the above copyright notice appear in all copies, that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of UCAR/Unidata not be used in
- * advertising or publicity pertaining to distribution of the software
- * without specific, written prior permission.  UCAR makes no
- * representations about the suitability of this software for any purpose.
- * It is provided "as is" without express or implied warranty.  It is
- * provided with no support and without obligation on the part of UCAR
- * Unidata, to assist in its use, correction, modification, or enhancement.
- *
- */
-/* "$Id$" */
-
-#ifndef _NETCDF_
-#define _NETCDF_
-
-//RWR Modification Start 07/14/98
-//#include "api_adpt.h"
-#include "hdfi.h"
-//RWR Modification End
-
-/*
- * The definitions ncvoid, USE_ENUM, and MAX_NC_OPEN, may need to be set
- * properly for your installation.
- */
-
-/*
- * Argument type in user functions (deprecated, backward compatibility)
- */
-#ifndef UD_NO_VOID
-#define ncvoid    void
-#else
-/* system doesn't have void type */
-#define ncvoid    char
-#endif
-
-
-/*
- *   If xdr_enum works properly on your system, you can define 
- * USE_ENUM so that nc_type is an enum. 
- * Otherwise, delete this definition so that the nc_type is
- * an int and the valid values are #defined.
- */
-#define USE_ENUM
-
-
-/*
- * The following macro is provided for backward compatibility only.  If you
- * are a new user of netCDF, then you may safely ignore it.  If, however,
- * you have an existing archive of netCDF files that use default
- * floating-point fill values, then you should know that the definition of
- * the default floating-point fill values changed with version 2.3 of the
- * netCDF package.  Prior to this release, the default floating-point fill
- * values were not very portable:  their correct behavior depended not only
- * upon the particular platform, but also upon the compilation
- * environment.  This led to the definition of new, default floating-point
- * fill values that are portable across all platforms and compilation
- * environments.  If you wish, however, to obtain the old, non-portable
- * floating-point fill values, then the following macro should have a true
- * value PRIOR TO BUILDING THE netCDF LIBRARY.
- *
- * Implementation details are contained in the section below on fill values.
- */
-#define NC_OLD_FILLVALUES	0
-
-/*
- * 	Fill values
- * These values are stuffed into newly allocated space as appropriate.
- * The hope is that one might use these to notice that a particular datum
- * has not been set.
- */
-
-#define FILL_BYTE	((char)-127)		/* Largest Negative value */
-#define FILL_CHAR	((char)0)
-#define FILL_SHORT	((short)-32767)
-#define FILL_LONG	((long)-2147483647)
-
-#if !NC_OLD_FILLVALUES
-
-#   define FILL_FLOAT	9.9692099683868690e+36 /* near 15 * 2^119 */
-#   define FILL_DOUBLE	9.9692099683868690e+36
-
-#else	/* NC_OLD_FILLVALUES below */
-
-/*
- * This section is provided for backward compatibility only.  Using
- * XDR infinities for floating-point fill values has caused more problems
- * than it has solved.  We encourage you to define your own data-specific
- * fill values rather than use default ones (see `_FillValue' below).
- * If, however, you *must* use default fill values, then you should use
- * the above fill values rather than the ones in this section.
- */
-
-/*
- * XDR_F_INFINITY is a float value whose EXTERNAL (xdr)
- * represention is ieee floating infinity.
- * XDR_D_INFINITY is a double value whose EXTERNAL (xdr)
- * represention is ieee double floating point infinity.
- * These are used as default fill values below.
- *
- * This section shows three techniques for setting these:
- *  Direct assignment (vax, cray) - works for non IEEE machines
- *		Doesn't work when IEEE machines don't allow
- *      float or double constants whose values are infinity.
- *  Use of a union (preferred portable method) - should work on
- *      any ANSI compiler with IEEE floating point representations,
- *      modulo byte order and sizeof() considerations.
- *  Use of pointer puns - may work with many older compilers
- *      which don't allow intialization of unions.
- *      Often doesn't work with compilers which have strict
- *      alignment rules.
- */ 
-
-    /* Direct assignment. All cases should be mutually exclusive */
-
-#ifdef vax
-#define	XDR_D_INFINITY	1.7014118346046923e+38
-#define	XDR_F_INFINITY	1.70141173e+38
-#endif /* vax */
-
-#ifdef cray
-#define	XDR_D_INFINITY	1.797693134862313000e+308
-#define	XDR_F_INFINITY	XDR_D_INFINITY
-#endif /* cray */
-
-#ifdef notdef /* you might want to try these, on an IEEE machine */
-#define XDR_D_INFINITY	1.797693134862315900e+308
-#define XDR_F_INFINITY	3.40282357e+38
-#endif
-
-#ifdef __STDC__
-    /* Use of a union, assumes IEEE representation and 1 byte unsigned char */
-
-#ifndef    XDR_D_INFINITY
-#define USE_D_UNION
-     union xdr_d_union {unsigned char bb[8]; double dd;} ;
-     extern union xdr_d_union xdr_d_infs ;  /* instantiated in array.c */
-#define XDR_D_INFINITY    (xdr_d_infs.dd)
-#endif /* !XDR_D_INFINITY */
-
-#ifndef    XDR_F_INFINITY
-#define USE_F_UNION
-     union xdr_f_union {unsigned char bb[4]; float ff;} ;
-     extern union xdr_f_union xdr_f_infs ;  /* instantiated in array.c */
-#define  XDR_F_INFINITY    (xdr_f_infs.ff)
-#endif /* !XDR_F_INFINITY */
-
-
-#else /* __STDC__ */
-    /* Use of a pointer pun, assumes IEEE representation, 4 byte long */
-
-#ifndef    XDR_D_INFINITY
-#define USE_D_LONG_PUN
-     extern long xdr_d_infinity[] ;  /* instantiated in array.c */
-#define XDR_D_INFINITY *(double *)xdr_d_infinity
-#endif /* !XDR_D_INFINITY */
-
-#ifndef    XDR_F_INFINITY
-#define USE_F_LONG_PUN
-     extern long xdr_f_infinity ;  /* instantiated in array.c */
-#define XDR_F_INFINITY *((float *)&xdr_f_infinity)
-#endif /* !XDR_F_INFINITY */
-
-#endif /* __STDC__ */
-
-/* End of INFINITY           section */
-
-#define FILL_FLOAT	XDR_F_INFINITY	/* IEEE Infinity */
-#define FILL_DOUBLE	XDR_D_INFINITY
-
-#endif	/* NC_OLD_FILLVALUES above */
-
-/*
- *  masks for the struct NC flags field; passed in as 'mode' arg to
- * nccreate and ncopen.
- *
- */
-#define NC_RDWR  1		/* read/write, 0 => readonly */
-#define NC_CREAT 2		/* in create phase, cleared by ncendef */
-#define NC_EXCL  4		/* on create, don't destroy existing file */
-#define NC_INDEF 8		/* in define mode, cleared by ncendef */
-#define NC_NSYNC 0x10	/* synchronise numrecs on change */
-#define NC_HSYNC 0x20	/* synchronise whole header on change */
-#define NC_NDIRTY 0x40	/* numrecs has changed */
-#define NC_HDIRTY 0x80  /* header info has changed */
-#define NC_NOFILL 0x100	/* Don't fill vars on endef and increase of record */
-#define NC_LINK 0x8000	/* isa link */
-
-#define NC_FILL 0	/* argument to ncsetfill to clear NC_NOFILL */
-
-/*
- * 'mode' arguments for nccreate and ncopen
- */
-#define NC_NOWRITE   0
-#define NC_WRITE     NC_RDWR
-#define NC_CLOBBER   (NC_INDEF | NC_CREAT | NC_RDWR)
-#define NC_NOCLOBBER (NC_INDEF | NC_EXCL | NC_CREAT | NC_RDWR)
-
-/*
- * 'size' argument to ncdimdef for an unlimited dimension
- */
-#define NC_UNLIMITED 0L
-
-/*
- * attribute id to put/get a global attribute
- */
-#define NC_GLOBAL -1
-
-#ifndef HDF
-/*
- * This can be as large as the maximum number of stdio streams
- * you can have open on your system.
- */
-#define MAX_NC_OPEN 32
-
-/*
- * These maximums are enforced by the interface, to facilitate writing
- * applications and utilities.  However, nothing is statically allocated to
- * these sizes internally.
- */
-#define MAX_NC_DIMS 5000	 /* max dimensions per file */
-#define MAX_NC_ATTRS 3000	 /* max global or per variable attributes */
-#define MAX_NC_VARS 5000	 /* max variables per file */
-#define MAX_NC_NAME 256		 /* max length of a name */
-#define MAX_VAR_DIMS 32          /* max per variable dimensions */
-
-/*
- * Added feature. 
- * If you wish a variable to use a different value than the above
- * defaults, create an attribute with the same type as the variable
- * and the following reserved name. The value you give the attribute
- * will be used as the fill value for that variable.
- */
-#define _FillValue	"_FillValue"
-
-#else /* HDF */
-
-#include "hlimits.h"  /* Hard coded constants for HDF library */
-
-#endif /* HDF */
-
-#ifdef USE_ENUM
-/*
- *  The netcdf data types
- */
-typedef enum {
-	NC_UNSPECIFIED, /* private */
-	NC_BYTE,
-	NC_CHAR,
-	NC_SHORT,
-	NC_LONG,
-	NC_FLOAT,
-	NC_DOUBLE,
-	/* private */
-	NC_BITFIELD,
-	NC_STRING,
-	NC_IARRAY,
-	NC_DIMENSION,
-	NC_VARIABLE,
-	NC_ATTRIBUTE
-} nc_type ;
-#else
-typedef int nc_type ;
-#define	NC_UNSPECIFIED 0 /* private */
-#define	NC_BYTE 1
-#define	NC_CHAR 2
-#define	NC_SHORT 3
-#define	NC_LONG 4
-#define	NC_FLOAT 5
-#define	NC_DOUBLE 6
-	/* private */
-#define	NC_BITFIELD 7
-#define	NC_STRING 8
-#define	NC_IARRAY 9
-#define	NC_DIMENSION 10
-#define	NC_VARIABLE 11
-#define	NC_ATTRIBUTE 12
-#endif
-
-
-/*
- * C data types corresponding to netCDF data types:
- */
-/* Don't use these or the C++ interface gets confused
-typedef char  ncchar;
-typedef char  ncbyte;
-typedef short ncshort;
-typedef float ncfloat;
-typedef double        ncdouble;
-*/
-
-/* 
- * Variables/attributes of type NC_LONG should use the C type 'nclong'
- */
-#ifdef __alpha
-typedef int     nclong;   
-#else
-typedef long    nclong;         /* default, compatible type */
-#endif
-
-
-/*
- * Global netcdf error status variable
- *  Initialized in error.c
- */
-#define	NC_NOERR	0	/* No Error */
-#define	NC_EBADID	1	/* Not a netcdf id */
-#define	NC_ENFILE	2	/* Too many netcdfs open */
-#define	NC_EEXIST	3	/* netcdf file exists && NC_NOCLOBBER */
-#define	NC_EINVAL	4	/* Invalid Argument */
-#define	NC_EPERM	5	/* Write to read only */
-#define	NC_ENOTINDEFINE	6	/* Operation not allowed in data mode */
-#define	NC_EINDEFINE	7	/* Operation not allowed in define mode */
-#define	NC_EINVALCOORDS	8	/* Coordinates out of Domain */
-#define	NC_EMAXDIMS	9	/* MAX_NC_DIMS exceeded */
-#define	NC_ENAMEINUSE	10	/* String match to name in use */
-#define NC_ENOTATT	11	/* Attribute not found */
-#define	NC_EMAXATTS	12	/* MAX_NC_ATTRS exceeded */
-#define NC_EBADTYPE	13	/* Not a netcdf data type */
-#define NC_EBADDIM	14	/* Invalid dimension id */
-#define NC_EUNLIMPOS	15	/* NC_UNLIMITED in the wrong index */
-#define	NC_EMAXVARS	16	/* MAX_NC_VARS exceeded */
-#define NC_ENOTVAR	17	/* Variable not found */
-#define NC_EGLOBAL	18	/* Action prohibited on NC_GLOBAL varid */
-#define NC_ENOTNC	19	/* Not a netcdf file */
-#define NC_ESTS         20      /* In Fortran, string too short */
-#define NC_EMAXNAME     21      /* MAX_NC_NAME exceeded */
-#define NC_ENTOOL       NC_EMAXNAME   /* Backward compatibility */
-#define NC_EUNLIMIT     22      /* NC_UNLIMITED size already in use */
-
-#define	NC_EXDR		32	/* */
-#define	NC_SYSERR	-1
-
-extern int ncerr ;
-
-/*
- * Global options variable. Used to determine behavior of error handler.
- *  Initialized in lerror.c
- */
-#define	NC_FATAL	1
-#define	NC_VERBOSE	2
-
-HDFLIBAPI int ncopts ;	/* default is (NC_FATAL | NC_VERBOSE) */
-
-/*
- * NB: The following feature-test line is too long in order to accomodate a 
- * bug in the VMS 5.3 C compiler.
- */
-#ifndef HAVE_PROTOTYPES
-#   if defined(__STDC__) || defined(__GNUC__) || defined(__cplusplus) || defined(c_plusplus)
-#       define	HAVE_PROTOTYPES
-#   endif
-#endif
-
-#undef PROTO
-#ifdef HAVE_PROTOTYPES 
-#   define	PROTO(x)	x
-#else
-#   define	PROTO(x)	()
-#endif
-
-#include "hdf2netcdf.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-HDFLIBAPI int nccreate	PROTO((
-    const char*	path,
-    int		cmode
-));
-HDFLIBAPI int ncopen	PROTO((
-    const char*	path,
-    int		mode
-));
-HDFLIBAPI int ncredef	PROTO((
-    int		cdfid
-));
-HDFLIBAPI int ncendef	PROTO((
-    int		cdfid
-));
-HDFLIBAPI int ncclose	PROTO((
-    int		cdfid
-));
-HDFLIBAPI int ncinquire	PROTO((
-    int		cdfid,
-    int*	ndims,
-    int*	nvars,
-    int*	natts, 
-    int*	recdim
-));
-HDFLIBAPI int ncsync	PROTO((
-    int		cdfid
-));
-HDFLIBAPI int ncabort	PROTO((
-    int		cdfid
-));
-HDFLIBAPI int ncdimdef	PROTO((
-    int		cdfid,
-    const char*	name,
-    long	length
-));
-HDFLIBAPI int ncdimid	PROTO((
-    int		cdfid,
-    const char*	name
-));
-HDFLIBAPI int ncdiminq	PROTO((
-    int		cdfid,
-    int		dimid,
-    char*	name,
-    long*	length
-));
-HDFLIBAPI int ncdimrename	PROTO((
-    int		cdfid,
-    int		dimid,
-    const char*	name
-));
-HDFLIBAPI int ncvardef	PROTO((
-    int		cdfid,
-    const char*	name,
-    nc_type	datatype, 
-    int		ndims,
-    const int*	dim
-));
-HDFLIBAPI int ncvarid	PROTO((
-    int		cdfid,
-    const char*	name
-));
-HDFLIBAPI int ncvarinq	PROTO((
-    int		cdfid,
-    int		varid,
-    char*	name,
-    nc_type*	datatype,
-    int*	ndims,
-    int*	dim,
-    int*	natts
-));
-HDFLIBAPI int ncvarput1	PROTO((
-    int		cdfid,
-    int		varid,
-    const long*	coords,
-    const void*	value
-));
-HDFLIBAPI int ncvarget1	PROTO((
-    int		cdfid,
-    int		varid,
-    const long*	coords,
-    void*	value
-));
-HDFLIBAPI int ncvarput	PROTO((
-    int		cdfid,
-    int		varid,
-    const long*	start,
-    const long*	count, 
-    const void*	value
-));
-HDFLIBAPI int ncvarget	PROTO((
-    int		cdfid,
-    int		varid,
-    const long*	start,
-    const long*	count, 
-    void*	value
-));
-HDFLIBAPI int ncvarputs	PROTO((
-    int		cdfid,
-    int		varid,
-    const long*	start,
-    const long*	count,
-    const long*	stride,
-    const void*	values
-));
-HDFLIBAPI int ncvargets	PROTO((
-    int		cdfid,
-    int		varid,
-    const long*	start,
-    const long*	count,
-    const long*	stride,
-    void*	values
-));
-HDFLIBAPI int ncvarputg	PROTO((
-    int		cdfid,
-    int		varid,
-    const long*	start,
-    const long*	count,
-    const long*	stride,
-    const long*	imap,
-    const void* values
-));
-HDFLIBAPI int ncvargetg	PROTO((
-    int		cdfid,
-    int		varid,
-    const long*	start,
-    const long*	count,
-    const long*	stride,
-    const long*	imap,
-    void*	values
-));
-HDFLIBAPI int ncvarrename	PROTO((
-    int		cdfid,
-    int		varid,
-    const char*	name
-));
-HDFLIBAPI int ncattput	PROTO((
-    int		cdfid,
-    int		varid,
-    const char*	name, 
-    nc_type	datatype,
-    int		len,
-    const void*	value
-));
-HDFLIBAPI int ncattinq	PROTO((
-    int		cdfid,
-    int		varid,
-    const char*	name, 
-    nc_type*	datatype,
-    int*	len
-));
-HDFLIBAPI int ncattget	PROTO((
-    int		cdfid,
-    int		varid,
-    const char*	name, 
-    void*	value
-));
-HDFLIBAPI int ncattcopy	PROTO((
-    int		incdf,
-    int		invar,
-    const char*	name, 
-    int		outcdf,
-    int		outvar
-));
-HDFLIBAPI int ncattname	PROTO((
-    int		cdfid,
-    int		varid,
-    int		attnum,
-    char*	name
-));
-HDFLIBAPI int ncattrename	PROTO((
-    int		cdfid,
-    int		varid,
-    const char*	name, 
-    const char*	newname
-));
-HDFLIBAPI int ncattdel	PROTO((
-    int		cdfid,
-    int		varid,
-    const char*	name
-));
-HDFLIBAPI int nctypelen	PROTO((
-    nc_type	datatype
-));
-HDFLIBAPI int ncsetfill	PROTO((
-    int		cdfid,
-    int		fillmode
-));
-HDFLIBAPI int ncrecinq		PROTO((
-    int		cdfid,
-    int*	nrecvars,
-    int*	recvarids,
-    long*	recsizes
-));
-HDFLIBAPI int ncrecget		PROTO((
-    int		cdfid,
-    long	recnum,
-    void**	datap
-));
-HDFLIBAPI int ncrecput		PROTO((
-    int		cdfid,
-    long	recnum,
-    void* const* datap
-));
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NETCDF_ */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/tbbt.h b/Utilities/CAI/cai_dll/inc/inc_hdf/tbbt.h
deleted file mode 100755
index eebf864df2..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/tbbt.h
+++ /dev/null
@@ -1,327 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/* "tbbt.h" -- Data types/routines for threaded, balanced, binary trees. */
-/* Extended from Knuth 6.2.3, Algorithm A */
-
-#ifndef TBBT_H
-#define TBBT_H
-
-#ifdef lint     /* lint always complains but may complain more if... */
-# define   TBBT_INTERNALS   /* TBBT_INTERNALS not always defined */
-#endif /* lint */
-
-typedef struct tbbt_node TBBT_NODE;
-
-/* Threaded node structure */
-struct tbbt_node
-  {
-      VOIDP       data;         /* Pointer to user data to be associated with node */
-      VOIDP       key;          /* Field to sort nodes on */
-
-#ifdef TBBT_INTERNALS
-# define   PARENT  0
-# define   LEFT    1
-# define   RIGHT   2
-      TBBT_NODE  *link[3];      /* Pointers to parent, left child, and right child */
-# define  Parent    link[PARENT]
-# define  Lchild    link[LEFT]
-# define  Rchild    link[RIGHT]
-# define  TBBT_FLAG unsigned long
-# define  TBBT_LEAF unsigned long
-      TBBT_FLAG   flags;        /* Combination of the following bit fields: */
-# define  TBBT_HEAVY(s) s       /* If the `s' sub-tree is deeper than the other */
-# define  TBBT_DOUBLE   4       /* If "heavy" sub-tree is two levels deeper */
-# define  TBBT_INTERN   8       /* If node is internal (has two children) */
-# define  TBBT_UNBAL    ( TBBT_HEAVY(LEFT) | TBBT_HEAVY(RIGHT) )
-# define  TBBT_FLAGS    ( TBBT_UNBAL | TBBT_INTERN | TBBT_DOUBLE )
-# define  TBBT_CHILD(s) ( TBBT_INTERN | TBBT_HEAVY(s) )
-      TBBT_LEAF   lcnt;         /* count of left children */
-      TBBT_LEAF   rcnt;         /* count of right children */
-# define  LeftCnt(node) ( (node)->lcnt )    /* Left descendants */
-# define  RightCnt(node) ( (node)->rcnt )   /* Left descendants */
-#if defined macintosh || defined MAC || defined SYMANTEC_C     /* Macro substitution limit */
-# define  Cnt(node,s)   ( 1==(s) ? LeftCnt(node) : RightCnt(node) )
-#else                           /* !macintosh */
-# define  Cnt(node,s)   ( LEFT==(s) ? LeftCnt(node) : RightCnt(node) )
-#endif                          /* !macintosh */
-# define  HasChild(n,s) ( Cnt(n,s)>0 )
-# define  Heavy(n,s)    ( (s) & (LeftCnt(n)>RightCnt(n) ? LEFT : \
-                 LeftCnt(n)==RightCnt(n) ? 0 : RIGHT))
-# define  Intern(n)     ( LeftCnt(n) && RightCnt(n) )
-# define  UnBal(n)      ( LeftCnt(n)>RightCnt(n) ? LEFT : \
-                 LeftCnt(n)==RightCnt(n) ? 0 : RIGHT)
-# define  Double(n)     ( TBBT_DOUBLE & (n)->flags )
-# define  Other(side)   ( LEFT + RIGHT - (side) )
-# define  Delta(n,s)    (  ( Heavy(n,s) ? 1 : -1 )                          \
-                            *  ( Double(n) ? 2 : UnBal(n) ? 1 : 0 )  )
-# define  SetFlags(n,s,b,i)   (  ( -2<(b) && (b)<2 ? 0 : TBBT_DOUBLE )   \
-    |  ( 0>(b) ? TBBT_HEAVY(s) : (b)>0 ? TBBT_HEAVY(Other(s)) : 0 )        \
-    |  ( (i) ? TBBT_INTERN : 0 )  )
-  };
-
-/* Pointer to the tbbt node free list */
-static TBBT_NODE *tbbt_free_list=NULL;
-
-typedef struct tbbt_tree TBBT_TREE;
-/* Threaded tree structure */
-struct tbbt_tree
-  {
-      TBBT_NODE  *root;
-      unsigned long count;      /* The number of nodes in the tree currently */
-      uintn       fast_compare; /* use a faster in-line compare (with casts) instead of function call */
-      intn        (*compar) (VOIDP k1, VOIDP k2, intn cmparg);
-      intn        cmparg;
-#endif                          /* TBBT_INTERNALS */
-  };
-
-/* Define the "fast compare" values */
-#define TBBT_FAST_UINT16_COMPARE    1
-#define TBBT_FAST_INT32_COMPARE     2
-
-#ifndef TBBT_INTERNALS
-typedef TBBT_NODE **TBBT_TREE;
-#endif /* TBBT_INTERNALS */
-
-/* Return maximum of two scalar values (use arguments w/o side effects): */
-#define   Max(a,b)  ( (a) > (b) ? (a) : (b) )
-
-/* These routines are designed to allow use of a general-purpose balanced tree
- * implimentation.  These trees are appropriate for maintaining in memory one
- * or more lists of items, each list sorted according to key values (key values
- * must form a "completely ordered set") where no two items in a single list
- * can have the same key value.  The following operations are supported:
- *     Create an empty list
- *     Add an item to a list
- *     Look up an item in a list by key value
- *     Look up the Nth item in a list
- *     Delete an item from a list
- *     Find the first/last/next/previous item in a list
- *     Destroy a list
- * Each of the above operations requires Order(log(N)) time where N is the
- * number of items in the list (except for list creation which requires
- * constant time and list destruction which requires Order(N) time if the user-
- * supplied free-data-item or free-key-value routines require constant time).
- * Each of the above operations (except create and destroy) can be performed
- * on a subtree.
- *
- * Each node of a tree has associated with it a generic pointer (void *) which
- * is set to point to one such "item" and a generic pointer to point to that
- * item's "key value".  The structure of the items and key values is up to the
- * user to define.  The user must specify a method for comparing key values.
- * This routine takes three arguments, two pointers to key values and a third
- * integer argument.  You can specify a routine that expects pointers to "data
- * items" rather than key values in which case the pointer to the key value in
- * each node will be set equal to the pointer to the data item.
- *
- * Since the "data item" pointer is the first field of each tree node, these
- * routines may be used without this "tbbt.h" file.  For example, assume "ITM"
- * is the structre definition for the data items you want to store in lists:
- * ITM ***tbbtdmake( int (*cmp)(void *,void *,int), int arg );
- * ITM **root= NULL;        (* How to create an empty tree w/o tbbtdmake() *)
- * ITM **tbbtdfind( ITM ***tree, void *key, ITM ***pp );
- * ITM **tbbtfind( ITM **root, void *key, int (*cmp)(), int arg, ITM ***pp );
- * ITM **tbbtdless( ITM ***tree, void *key, ITM ***pp );
- * ITM **tbbtless( ITM **root, void *key, int (*cmp)(), int arg, ITM ***pp );
- * ITM **tbbtindx( ITM **root, long indx );
- * ITM **tbbtdins( ITM ***tree, ITM *item, void *key );
- * ITM **tbbtins( ITM ***root, ITM *item, void *key, int (*cmp)(), int arg );
- * ITM *tbbtrem( ITM ***root, ITM **node, void **kp );
- * ITM **tbbtfirst( ITM **root ), **tbbtlast( ITM **root );
- * ITM **tbbtnext( ITM **node ), **tbbtprev( ITM **node );
- * ITM ***tbbtdfree( ITM ***tree, void (*df)(ITM *), void (*kf)(void *) );
- * void tbbtfree( ITM ***root, void (*df)(ITM *), void (*kf)(void *) );
- */
-
-#if defined c_plusplus || defined __cplusplus
-extern      "C"
-{
-#endif                          /* c_plusplus || __cplusplus */
-
-    TBBT_TREE  *tbbtdmake
-                (intn (*compar) (VOIDP, VOIDP, intn), intn arg, uintn fast_compare);
-/* Allocates and initializes an empty threaded, balanced, binary tree and
- * returns a pointer to the control structure for it.  You can also create
- * empty trees without this function as long as you never use tbbtd* routines
- * (tbbtdfind, tbbtdins, tbbtdfree) on them.
- * Examples:
- *     int keycmp();
- *     TBBT_ROOT *root= tbbtdmake( keycmp, (int)keysiz , 0);
- * or
- *     void *root= tbbtdmake( strcmp, 0 , 0);
- * or
- *     void *root= tbbtdmake( keycmp, (int)keysiz , TBBT_FAST_UINT16_COMPARE);
- * or
- *     TBBT_NODE *root= NULL;        (* Don't use tbbtd* routines *)
- * `cmp' is the routine to be used to compare two key values [in tbbtdfind()
- * and tbbtdins()].  The arguments to `cmp' are the two keys to compare
- * and `arg':  (*cmp)(k1,k2,arg).  `cmp' is expected to return 0 if its first
- * two arguments point to identical key values, -1 (or any integer less than 0)
- * if k1 points to a key value lower than that pointed to by k2, and 1 (or any
- * integer greater than 0) otherwise.  If `cmp' is NULL, memcmp is used.  If
- * `cmp' is NULL and `arg' is not greater than 0L, `1+strlen(key1)' is used in
- * place of `arg' to emulate strcmp():  memcmp( k1, k2, 1+strlen(k1) ).  You
- * can use strcmp() directly (as in the second example above) as long as your C
- * compiler does not assume strcmp() will always be passed exactly 2 arguments
- * (only newer, ANSI-influenced C compilers are likely to be able to make this
- * kind of assumption).  You can also use a key comparison routine that expects
- * pointers to data items rather than key values.
- *  The "fast compare" option is for keys of simple numeric types (currently
- *      uint16 and int32) and avoids the function call for faster searches in
- *      some cases.  The key comparison routine is still required for some
- *      insertion routines which use it.
- *
- * Most of the other routines expect a pointer to a root node of a tree, not
- * a pointer to the tree's control structure (only tbbtdfind(), tbbtdins(),
- * and tbbtdfree() expect pointers to control structures).  However TBBT_TREE
- * is just defined as "**TBBT_NODE" (unless you have defined TBBT_INTERNALS so
- * you have access to the internal structure of the nodes) so
- *     TBBT_TREE *tree1= tbbtdmake( NULL, 0 );
- * is equivalent to
- *     TBBT_NODE **tree1= tbbtdmake( NULL, 0 );
- * So could be used as:
- *     node= tbbtdfind( tree1, key, NULL );
- *     node= tbbtfind( *tree1, key, compar, arg, NULL );
- *     node= tbbtdless( tree1, key, NULL );
- *     node= tbbtless( *tree1, key, compar, arg, NULL );
- *     node= tbbtdins( tree1, item, key );
- *     node= tbbtins( tree1, item, key, compar, arg );
- *     item= tbbtrem( tree1, tbbtdfind(tree1,key,NULL), NULL );
- *     item= tbbtrem( tree1, tbbtfind(*tree1,key,compar,arg,NULL), NULL );
- *     tree1= tbbtdfree( tree1, free, NULL );       (* or whatever *)
- * while
- *     TBBT_NODE *root= NULL;
- * would be used like:
- *     node= tbbtfind( root, key );
- *     node= tbbtins( &root, item, key );
- *     node= tbbtrem( &root, tbbtfind(root,key), NULL );
- *     tbbtfree( &root, free, NULL );               (* or whatever *)
- * Never use tbbtfree() on a tree allocated with tbbtdmake() or on a sub-tree
- * of ANY tree.  Never use tbbtdfree() except on a tbbtdmake()d tree.
- */
-
-    TBBT_NODE  *tbbtdfind
-                (TBBT_TREE * tree, VOIDP key, TBBT_NODE ** pp);
-    TBBT_NODE  *tbbtfind
-                (TBBT_NODE * root, VOIDP key, intn (*cmp) (VOIDP, VOIDP, intn),
-                 intn arg, TBBT_NODE ** pp);
-    TBBT_NODE  *tbbtdless
-                (TBBT_TREE * tree, VOIDP key, TBBT_NODE ** pp);
-    TBBT_NODE  *tbbtless
-                (TBBT_NODE * root, VOIDP key, intn (*cmp) (VOIDP, VOIDP, intn),
-                 intn arg, TBBT_NODE ** pp);
-/* Locate a node based on the key given.  A pointer to the node in the tree
- * with a key value matching `key' is returned.  If no such node exists, NULL
- * is returned.  Whether a node is found or not, if `pp' is not NULL, `*pp'
- * will be set to point to the parent of the node we are looking for (or that
- * node that would be the parent if the node is not found).  tbbtdfind() is
- * used on trees created using tbbtdmake() (so that `cmp' and `arg' don't have
- * to be passed).  tbbtfind() can be used on the root or any subtree of a tree
- * create using tbbtdmake() and is used on any tree (or subtree) created with-
- * out using tbbtdmake().  tbbtless() & tbbtdless() work exactly like tbbtfind()
- * and tbbtdfind() except that they find the node with a key which is less than
- * or equal to the key given to them.
- */
-
-    TBBT_NODE  *tbbtindx
-                (TBBT_NODE * root, int32 indx);
-/* Locate the node that has `indx' nodes with lesser key values.  This is like
- * an array lookup with the first item in the list having index 0.  For large
- * values of `indx', this call is much faster than tbbtfirst() followed by
- * `indx' tbbtnext()s.  Thus `tbbtindx(&root,0L)' is equivalent to (and almost
- * as fast as) `tbbtfirst(root)'.
- */
-
-    TBBT_NODE  *tbbtdins
-                (TBBT_TREE * tree, VOIDP item, VOIDP key);
-    TBBT_NODE  *tbbtins
-                (TBBT_NODE ** root, VOIDP item, VOIDP key, intn (*cmp) (VOIDP, VOIDP, intn), intn arg);
-/* Insert a new node to the tree having a key value of `key' and a data pointer
- * of `item'.  If a node already exists in the tree with key value `key' or if
- * malloc() fails, NULL is returned (no node is inserted), otherwise a pointer
- * to the inserted node is returned.  `cmp' and `arg' are as for tbbtfind().
- */
-
-    VOIDP       tbbtrem
-                (TBBT_NODE ** root, TBBT_NODE * node, VOIDP *kp);
-/* Remove the node pointed to by `node' from the tree with root `root'.  The
- * data pointer for the deleted node is returned.  If the second argument is
- * NULL, NULL is returned.  If `kp' is not NULL, `*kp' is set to point to the
- * key value for the deleted node.  Examples:
- *     data= tbbtrem( tree, tbbtdfind(tree,key), &kp );  free(data);  free(kp);
- *     data= tbbtrem( &root, tbbtfind(root,key,compar,arg), NULL );
- *     data= tbbtrem( &tree->root, tbbtdfind(tree,key), NULL );
- */
-
-    TBBT_NODE  *tbbtfirst
-                (TBBT_NODE * root);
-    TBBT_NODE  *tbbtlast
-                (TBBT_NODE * root);
-/* Returns a pointer to node from the tree with the lowest(first)/highest(last)
- * key value.  If the tree is empy NULL is returned.  Examples:
- *     node= tbbtfirst(*tree);
- *     node= tbbtfirst(root);
- *     node= tbbtlast(tree->root);
- *     node= tbbtlast(node);        (* Last node in a sub-tree *)
- */
-
-    TBBT_NODE  *tbbtnext
-                (TBBT_NODE * node);
-    TBBT_NODE  *tbbtprev
-                (TBBT_NODE * node);
-/* Returns a pointer the node from the tree with the next highest (previous
- * lowest) key value relative to the node pointed to by `node'.  If `node'
- * points the last (first) node of the tree, NULL is returned.
- */
-
-    TBBT_TREE  *tbbtdfree
-                (TBBT_TREE * tree, VOID(*fd) (VOIDP), VOID(*fk) (VOIDP));
-    VOID        tbbtfree
-                (TBBT_NODE ** root, VOID(*fd) (VOIDP), VOID(*fk) (VOIDP));
-/* Frees up an entire tree.  `fd' is a pointer to a function that frees/
- * destroys data items, and `fk' is the same for key values.
- *     void free();
- *       tree= tbbtdfree( tree, free, free );
- *       tbbtfree( &root, free, free );
- * is a typical usage, where keys and data are individually malloc()d.  If `fk'
- * is NULL, no action is done for the key values (they were allocated on the
- * stack, as a part of each data item, or together with one malloc() call, for
- * example) and likewise for `fd'.  tbbtdfree() always returns NULL and
- * tbbtfree() always sets `root' to be NULL.
- */
-
-    VOID        tbbtprint
-                (TBBT_NODE * node);
-/* Prints out the data in a node */
-
-    VOID        tbbtdump
-                (TBBT_TREE * tree, intn method);
-/* Prints an entire tree.  The method variable determines which sort of
- * traversal is used:
- *      -1 : Pre-Order Traversal
- *       1 : Post-Order Traversal
- *       0 : In-Order Traversal
- */
-
-    long        tbbtcount
-                (TBBT_TREE * tree);
-
-/* Terminate the buffers used in the tbbt*() interface */
-    intn tbbt_shutdown(void);
-
-#if defined c_plusplus || defined __cplusplus
-}
-#endif                          /* c_plusplus || __cplusplus */
-
-#endif                          /* TBBT_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_hdf/vg.h b/Utilities/CAI/cai_dll/inc/inc_hdf/vg.h
deleted file mode 100755
index eb46fd04e4..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_hdf/vg.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/****************************************************************************
- * NCSA HDF                                                                 *
- * Software Development Group                                               *
- * National Center for Supercomputing Applications                          *
- * University of Illinois at Urbana-Champaign                               *
- * 605 E. Springfield, Champaign IL 61820                                   *
- *                                                                          *
- * For conditions of distribution and use, see the accompanying             *
- * hdf/COPYING file.                                                        *
- *                                                                          *
- ****************************************************************************/
-
-/* $Id$ */
-
-/*****************************************************************************
-*
-* vg.h
-*
-* Part of HDF VSet interface
-*
-* defines symbols and structures used in all v*.c files
-*
-* NOTES:
-* This include file depends on the basic HDF *.h files hdfi.h and hdf.h.
-* An 'S' in the comment means that that data field is saved in the HDF file.
-*
-******************************************************************************/
-
-#ifndef _VG_H
-#define _VG_H
-
-/* --------------  H D F    V S E T   tags  ---------------------------- */
-
-/* In what versions were these valid? */
-#define OLD_VGDESCTAG   61820   /* tag for a vgroup d */
-#define OLD_VSDESCTAG   61821   /* tag for a vdata descriptor */
-#define OLD_VSDATATAG   61822   /* tag for actual raw data of a vdata */
-
-/* re-define what new ones are. Don't know why there are two sets but
-   made them conform to what was in 'htags.h' */
-#define NEW_VGDESCTAG    DFTAG_VG
-#define NEW_VSDESCTAG    DFTAG_VH
-#define NEW_VSDATATAG    DFTAG_VS
-
-#define VGDESCTAG       NEW_VGDESCTAG
-#define VSDESCTAG       NEW_VSDESCTAG
-#define VSDATATAG       NEW_VSDATATAG
-
-#define _HDF_VSPACK 0
-#define _HDF_VSUNPACK 1
-#define VG_ATTR_SET 0x00000001  /* this vgroup has attribute(s) */
-#define VS_ATTR_SET 0x00000001  /* this vdata has attribute(s) */
-#define _HDF_VDATA -1		/* used in vdata attr interface
-                           findex to represent the entire vdata  */
-#define _HDF_ENTIRE_VDATA _HDF_VDATA /* if users have already  used
-                            _HDF_ENTIRE_VDATA since 4.1b1 was out */
-
-/* Size of the atom hash table */
-#define VATOM_HASH_SIZE 256
-
-/* .................................................................. */
-#define VSET_NEW_VERSION	4  /* if attr or other new features are set */
-#define VSET_VERSION		3  /* DO NOT CHANGE!! */
-#define VSET_OLD_VERSION	2  /* All version <= 2 use old type mappings */
-#define VSET_OLD_TYPES		VSET_OLD_VERSION  /* For backward compatibility */
-
-/* Only include the library header if the VSET_INTERFACE macro is defined */
-#ifdef VSET_INTERFACE
-#include "vgint.h"          /* Library VSet information header */
-#endif /* VSET_INTERFACE */
-
-#endif                          /* _VG_H */
diff --git a/Utilities/CAI/cai_dll/inc/inc_unix2win/asm/atomic.h b/Utilities/CAI/cai_dll/inc/inc_unix2win/asm/atomic.h
deleted file mode 100755
index f2d2b872f0..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_unix2win/asm/atomic.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* /////////////////////////////////////////////////////////////////////////////
- * File:    atomic.h
- *
- * Purpose: Declaration of Linux like atomic functions for the
- *          Win32 platform.
- *
- * Created: 21st November 2003
- * Updated: 19th September 2005
- *
- * Home:    http://synesis.com.au/software/
- *
- * Copyright (c) 2003-2005, Matthew Wilson and Synesis Software
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice, this
- *   list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- * - Neither the names of Matthew Wilson and Synesis Software nor the names of
- *   any contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * ////////////////////////////////////////////////////////////////////////// */
-
-
-#ifndef SYNSOFT_UNIXEM_INCL_SYS_H_ATOMIC
-#define SYNSOFT_UNIXEM_INCL_SYS_H_ATOMIC
-
-#ifndef UNIXEM_DOCUMENTATION_SKIP_SECTION
-# define SYNSOFT_UNIXEM_VER_SYS_H_ATOMIC_MAJOR		2
-# define SYNSOFT_UNIXEM_VER_SYS_H_ATOMIC_MINOR		1
-# define SYNSOFT_UNIXEM_VER_SYS_H_ATOMIC_REVISION	1
-# define SYNSOFT_UNIXEM_VER_SYS_H_ATOMIC_EDIT		14
-#endif /* !UNIXEM_DOCUMENTATION_SKIP_SECTION */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifndef _WIN32
-# error This file is only currently defined for compilation on Win32 systems
-#endif /* _WIN32 */
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Constants and definitions
- */
-
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Typedefs
- */
-
-typedef signed long		atomic_t;
-
-/* /////////////////////////////////////////////////////////////////////////////
- * API functions
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#define ATOMIC_INIT(i)		(i)
-
-void    atomic_set(atomic_t volatile *v, int i);
-int     atomic_write(atomic_t volatile *v, int i);
-int     atomic_read(atomic_t volatile *v);
-
-void    atomic_add(int i, atomic_t volatile *v);
-void    atomic_sub(int i, atomic_t volatile *v);
-
-void    atomic_inc(atomic_t volatile *v);
-void    atomic_dec(atomic_t volatile *v);
-
-/** Returns the previous value */
-int     atomic_inc_and_test(atomic_t volatile *v);
-/** Returns the previous value */
-int     atomic_dec_and_test(atomic_t volatile *v);
-
-/** Returns the previous value */
-int     atomic_add_and_test(int i, atomic_t volatile *v);
-/** Returns the previous value */
-int     atomic_sub_and_test(int i, atomic_t volatile *v);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#endif /* SYNSOFT_UNIXEM_INCL_SYS_H_ATOMIC */
-
-/* ////////////////////////////////////////////////////////////////////////// */
diff --git a/Utilities/CAI/cai_dll/inc/inc_unix2win/dirent.h b/Utilities/CAI/cai_dll/inc/inc_unix2win/dirent.h
deleted file mode 100755
index fdf73948b4..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_unix2win/dirent.h
+++ /dev/null
@@ -1,186 +0,0 @@
-/* /////////////////////////////////////////////////////////////////////////////
- * File:    dirent.h
- *
- * Purpose: Declaration of the opendir() API functions and types for the
- *          Win32 platform.
- *
- * Created: 19th October 2002
- * Updated: 21st September 2005
- *
- * Home:    http://synesis.com.au/software/
- *
- * Copyright (c) 2002-2005, Matthew Wilson and Synesis Software
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice, this
- *   list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- * - Neither the names of Matthew Wilson and Synesis Software nor the names of
- *   any contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * ////////////////////////////////////////////////////////////////////////// */
-
-
-/** \file dirent.h
- *
- * Contains the declarations for the opendir()/readdir() API.
- */
-
-#ifndef SYNSOFT_UNIXEM_INCL_H_DIRENT
-#define SYNSOFT_UNIXEM_INCL_H_DIRENT
-
-#ifndef UNIXEM_DOCUMENTATION_SKIP_SECTION
-# define SYNSOFT_UNIXEM_VER_H_DIRENT_MAJOR      3
-# define SYNSOFT_UNIXEM_VER_H_DIRENT_MINOR      3
-# define SYNSOFT_UNIXEM_VER_H_DIRENT_REVISION   1
-# define SYNSOFT_UNIXEM_VER_H_DIRENT_EDIT       28
-#endif /* !UNIXEM_DOCUMENTATION_SKIP_SECTION */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/** \weakgroup unixem Synesis Software UNIX Emulation for Win32
- * \brief The UNIX emulation library
- */
-
-/** \weakgroup unixem_dirent opendir()/readdir() API
- * \ingroup UNIXem unixem
- * \brief This API provides facilities for enumerating the contents of directories
- * @{
- */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifndef _WIN32
-# error This file is only currently defined for compilation on Win32 systems
-#endif /* _WIN32 */
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Includes
- */
-
-#include <stddef.h>
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Constants and definitions
- */
-
-#ifndef NAME_MAX
-# define NAME_MAX   (260)   /*!< \brief The maximum number of characters (including null terminator) in a directory entry name */
-#endif /* !NAME_MAX */
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Typedefs
- */
-
-typedef struct dirent_dir   DIR; /*!< \brief Handle type for ANSI directory enumeration. \note dirent_dir is defined internally */
-typedef struct wdirent_dir  wDIR; /*!< \brief Handle type for Unicode directory enumeration. \note dirent_dir is defined internally */
-
-/** \brief Results structure for readdir()
- */
-struct dirent
-{
-    char    d_name[NAME_MAX + 1];      /*!< file name (null-terminated) */
-    int     d_mode;
-};
-
-/** \brief Results structure for wreaddir()
- */
-struct wdirent
-{
-    wchar_t d_name[NAME_MAX + 1];   /*!< file name (null-terminated) */
-    int     d_mode;
-};
-
-/* /////////////////////////////////////////////////////////////////////////////
- * API functions
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/** \brief Returns a pointer to the next directory entry.
- *
- * This function opens the directory named by filename, and returns a
- * directory to be used to in subsequent operations. NULL is returned
- * if name cannot be accessed, or if resources cannot be acquired to
- * process the request.
- *
- * \param name The name of the directory to search
- * \return The directory handle from which the entries are read or NULL
- */
-DIR             *opendir(const char *name);
-/** \brief Identical semantics to opendir(), but for Unicode searches.
- */
-wDIR            *wopendir(const wchar_t *name);
-
-/** \brief Closes a directory handle
- *
- * This function closes a directory handle that was opened with opendir()
- * and releases any resources associated with that directory handle.
- *
- * \param dir The directory handle from which the entries are read
- * \return 0 on success, or -1 to indicate error.
- */
-int             closedir(DIR *dir);
-/** \brief Identical semantics to closedir(), but for Unicode searches.
- */
-int             wclosedir(wDIR *dir);
-
-/** \brief Resets a directory search position
- *
- * This function resets the position of the named directory handle to
- * the beginning of the directory.
- *
- * \param dir The directory handle whose position should be reset
- */
-void            rewinddir(DIR *dir);
-/** \brief Identical semantics to rewinddir(), but for Unicode searches.
- */
-void            wrewinddir(wDIR *dir);
-
-/** \brief Returns a pointer to the next directory entry.
- *
- * This function returns a pointer to the next directory entry, or NULL upon
- * reaching the end of the directory or detecting an invalid seekdir() operation
- *
- * \param dir The directory handle from which the entries are read
- * \return A dirent structure or NULL
- */
-struct dirent   *readdir(DIR *dir);
-/** \brief Identical semantics to readdir(), but for Unicode searches.
- */
-struct wdirent  *wreaddir(wDIR *dir);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/** @} // end of group unixem_dirent */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#endif /* SYNSOFT_UNIXEM_INCL_H_DIRENT */
-
-/* ////////////////////////////////////////////////////////////////////////// */
diff --git a/Utilities/CAI/cai_dll/inc/inc_unix2win/dlfcn.h b/Utilities/CAI/cai_dll/inc/inc_unix2win/dlfcn.h
deleted file mode 100755
index ecb71485bb..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_unix2win/dlfcn.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/* /////////////////////////////////////////////////////////////////////////////
- * File:    dlfcn.h
- *
- * Purpose: Declaration of the dlopen, dlclose(), dlsym() and dlerror() API
- *          functions.
- *
- * Created: 1st January 2004
- * Updated: 19th September 2005
- *
- * Home:    http://synesis.com.au/software/
- *
- * Copyright (c) 2004-2005, Matthew Wilson and Synesis Software
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice, this
- *   list of conditions and the following disclaimer. 
- * - Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- * - Neither the names of Matthew Wilson and Synesis Software nor the names of
- *   any contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * ////////////////////////////////////////////////////////////////////////// */
-
-
-/** \file dlfcn.h
- *
- * Contains the declarations for the dlopen() API.
- */
-
-#ifndef SYNSOFT_UNIXEM_INCL_H_DLFCN
-#define SYNSOFT_UNIXEM_INCL_H_DLFCN
-
-#ifndef UNIXEM_DOCUMENTATION_SKIP_SECTION
-# define SYNSOFT_UNIXEM_VER_H_DLFCN_MAJOR       2
-# define SYNSOFT_UNIXEM_VER_H_DLFCN_MINOR       1
-# define SYNSOFT_UNIXEM_VER_H_DLFCN_REVISION    2
-# define SYNSOFT_UNIXEM_VER_H_DLFCN_EDIT        12
-#endif /* !UNIXEM_DOCUMENTATION_SKIP_SECTION */
-
-#include <sys/types.h>
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/** \weakgroup unixem Synesis Software UNIX Emulation for Win32
- * \brief The UNIX emulation library
- */
-
-/** \weakgroup unixem_dlopen dlopen() API
- * \ingroup UNIXem unixem
- * \brief This API provides facilities for manipulating dynamically loaded
- * executable modules
- * @{
- */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifndef _WIN32
-# error This file is only currently defined for compilation on Win32 systems
-#endif /* _WIN32 */
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Constants and definitions
- */
-
-#define RTLD_LAZY           (0x00001)       /*!< Lazy function call binding. */
-#define RTLD_NOW            (0x00002)       /*!< Immediate function call binding. */
-
-/* /////////////////////////////////////////////////////////////////////////////
- * API functions
- */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-/** \brief Loads the given module, 
- *
- * \param moduleName The name of the module. The name is passed through to Win32's
- * LoadLibrary(), so the value of this parameter is interpreted according to Win32's
- * loading rules.
- * \param mode The loading mode. This is ignored on Win32 platforms, and the function
- * always behaves as if RTLD_NOW was specified
- * \note 
- */
-void        *dlopen(char const *moduleName, int mode);
-
-/** \brief Closes the given module
- *
- * \param hModule The handle of the executable module to close
- * \retval 0 success
- * \retval !0 failure. dlerror() will return an error string
- */
-int         dlclose(void *hModule);
-
-/** \brief Looks up a symbol
- *
- * \param hModule The handle of the executable module in which to search for the symbol
- * \param symbolName The name of the symbol
- * \return The pointer to the symbol, or NULL if no matching symbol was found
- * \retval NULL The symbol was not found
- */
-void        *dlsym(void *hModule, char const *symbolName);
-
-/** \brief Returns a descriptive string for the last error
- *
- * \return A pointer to a string describing the last error, or NULL.
- * \retval NULL No error occured, or dlerror() already called
- * \note Each call to this function resets it, so that a second call will always return NULL
- */
-char const  *dlerror(void);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* __cplusplus */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/** @} // end of group unixem_dlopen */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#endif /* SYNSOFT_UNIXEM_INCL_H_DLFCN */
-
-/* ////////////////////////////////////////////////////////////////////////// */
diff --git a/Utilities/CAI/cai_dll/inc/inc_unix2win/glob.h b/Utilities/CAI/cai_dll/inc/inc_unix2win/glob.h
deleted file mode 100755
index 5a698600fb..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_unix2win/glob.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/* /////////////////////////////////////////////////////////////////////////////
- * File:    glob.h
- *
- * Purpose: Declaration of the glob() API functions and types for the
- *          Win32 platform.
- *
- * Created: 13th November 2002
- * Updated: 19th September 2005
- *
- * Home:    http://synesis.com.au/software/
- *
- * Copyright (c) 2002-2005, Matthew Wilson and Synesis Software
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice, this
- *   list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- * - Neither the names of Matthew Wilson and Synesis Software nor the names of
- *   any contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * ////////////////////////////////////////////////////////////////////////// */
-
-
-/** \file glob.h
- *
- * Contains the declarations for the glob() API.
- */
-
-#ifndef SYNSOFT_UNIXEM_INCL_H_GLOB
-#define SYNSOFT_UNIXEM_INCL_H_GLOB
-
-#ifndef UNIXEM_DOCUMENTATION_SKIP_SECTION
-# define SYNSOFT_UNIXEM_VER_H_GLOB_MAJOR    2
-# define SYNSOFT_UNIXEM_VER_H_GLOB_MINOR    2
-# define SYNSOFT_UNIXEM_VER_H_GLOB_REVISION 1
-# define SYNSOFT_UNIXEM_VER_H_GLOB_EDIT     30
-#endif /* !UNIXEM_DOCUMENTATION_SKIP_SECTION */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/** \weakgroup unixem Synesis Software UNIX Emulation for Win32
- * \brief The UNIX emulation library
- */
-
-/** \weakgroup unixem_glob glob() API
- * \ingroup UNIXem unixem
- * \brief This API provides facilities for enumerating the file-system contents
- * @{
- */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifndef _WIN32
-# error This file is only currently defined for compilation on Win32 systems
-#endif /* _WIN32 */
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Constants and definitions
- */
-
-/* Error codes */
-#define GLOB_NOSPACE    (1)             /*!< \brief (Error result code:) An attempt to allocate memory failed, or if errno was 0 GLOB_LIMIT was specified in the flags and ARG_MAX patterns were matched. */
-#define GLOB_ABORTED    (2)             /*!< \brief (Error result code:) The scan was stopped because an error was encountered and either GLOB_ERR was set or (*errfunc)() returned non-zero. */
-#define GLOB_NOMATCH    (3)             /*!< \brief (Error result code:) The pattern does not match any existing pathname, and GLOB_NOCHECK was not set int flags. */
-#define GLOB_NOSYS      (4)             /*!< \brief (Error result code:) . */
-#define GLOB_ABEND      GLOB_ABORTED    /*!< \brief (Error result code:) . */
-
-/* Flags */
-#define GLOB_ERR            0x00000001  /*!< \brief Return on read errors. */
-#define GLOB_MARK           0x00000002  /*!< \brief Append a slash to each name. */
-#define GLOB_NOSORT         0x00000004  /*!< \brief Don't sort the names. */
-#define GLOB_DOOFFS         0x00000008  /*!< \brief Insert PGLOB->gl_offs NULLs. Supported from version 1.6 of UNIXEm. */
-#define GLOB_NOCHECK        0x00000010  /*!< \brief If nothing matches, return the pattern. Supported from version 1.6 of UNIXEm. */
-#define GLOB_APPEND         0x00000020  /*!< \brief Append to results of a previous call. Not currently supported in this implementation. */
-#define GLOB_NOESCAPE       0x00000040  /*!< \brief Backslashes don't quote metacharacters. Has no effect in this implementation, since escaping is not supported. */
-
-#define GLOB_PERIOD         0x00000080  /*!< \brief Leading `.' can be matched by metachars. Supported from version 1.6 of UNIXEm. */
-#define GLOB_MAGCHAR        0x00000100  /*!< \brief Set in gl_flags if any metachars seen. Supported from version 1.6 of UNIXEm. */
-/* #define GLOB_ALTDIRFUNC     0x00000200 */  /*!< \brief Use gl_opendir et al functions. Not currently supported in this implementation. */
-/* #define GLOB_BRACE          0x00000400 */  /*!< \brief Expand "{a,b}" to "a" "b". Not currently supported in this implementation. */
-#define GLOB_NOMAGIC        0x00000800  /*!< \brief If no magic chars, return the pattern. Supported from version 1.6 of UNIXEm. */
-#define GLOB_TILDE          0x00001000  /*!< \brief Expand ~user and ~ to home directories. Partially supported from version 1.6 of UNIXEm: leading ~ is expanded to %HOMEDRIVE%%HOMEPATH%. */
-#define GLOB_ONLYDIR        0x00002000  /*!< \brief Match only directories. This implementation guarantees to only return directories when this flag is specified. */
-#define GLOB_TILDE_CHECK    0x00004000  /*!< \brief Like GLOB_TILDE but return an GLOB_NOMATCH even if GLOB_NOCHECK specified. Supported from version 1.6 of UNIXEm. */
-#define GLOB_ONLYFILE       0x00008000  /*!< \brief Match only files. Supported from version 1.6 of UNIXEm. */
-#define GLOB_NODOTSDIRS     0x00010000  /*!< \brief Elide "." and ".." directories from wildcard searches. Supported from version 1.6 of UNIXEm. */
-#define GLOB_LIMIT          0x00020000  /*!< \brief Limits the search to the number specified by the caller in gl_matchc. Supported from version 1.6 of UNIXEm. */
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Typedefs
- */
-
-/** \brief Result structure for glob()
- *
- * This structure is used by glob() to return the results of the search.
- */
-typedef struct
-{
-  int   gl_pathc;   /*!< count of total paths so far */
-  int   gl_matchc;  /*!< count of paths matching pattern */
-  int   gl_offs;    /*!< reserved at beginning of gl_pathv */
-  int   gl_flags;   /*!< returned flags */
-  char  **gl_pathv; /*!< list of paths matching pattern */
-} glob_t;
-
-/* /////////////////////////////////////////////////////////////////////////////
- * API functions
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/** \brief Generates pathnames matching a pattern
- *
- * This function is a pathname generator that implements the rules for
- * file name pattern matching used by the UNIX shell.
- *
- * \param pattern The pattern controlling the search
- * \param flags A combination of the <b>GLOB_*</b> flags
- * \param errfunc A function that is called each time part of the search processing fails
- * \param pglob Pointer to a glob_t structure to receive the search results
- * \return 0 on success, otherwise one of the <b>GLOB_*</b> error codes
- */
-int glob( char const  *pattern
-        , int         flags
-#if defined(__COMO__)
-        , int       (*errfunc)(char const *, int)
-#else /* ? compiler */
-        , const int (*errfunc)(char const *, int)
-#endif /* compiler */
-        , glob_t      *pglob);
-
-/** \brief Frees the results of a call to glob
- *
- * This function releases any memory allocated in a call to glob. It must
- * always be called for a successful call to glob.
- *
- * \param pglob Pointer to a glob_t structure to receive the search results
- */
-void globfree(glob_t *pglob);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/** @} // end of group unixem_glob */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#endif /* SYNSOFT_UNIXEM_INCL_H_GLOB */
-
-/* ////////////////////////////////////////////////////////////////////////// */
diff --git a/Utilities/CAI/cai_dll/inc/inc_unix2win/sys/mman.h b/Utilities/CAI/cai_dll/inc/inc_unix2win/sys/mman.h
deleted file mode 100755
index c53003f94e..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_unix2win/sys/mman.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/* /////////////////////////////////////////////////////////////////////////////
- * File:    mman.h (sys/mman.h)
- *
- * Purpose: Declaration of the mmap() and munmap() API functions.
- *
- * Created: 18th December 2003
- * Updated: 21st September 2005
- *
- * Home:    http://synesis.com.au/software/
- *
- * Copyright (c) 2003-2005, Matthew Wilson and Synesis Software
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice, this
- *   list of conditions and the following disclaimer. 
- * - Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- * - Neither the names of Matthew Wilson and Synesis Software nor the names of
- *   any contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * ////////////////////////////////////////////////////////////////////////// */
-
-
-/** \file sys/mman.h
- *
- * Contains the declarations for the mmap() API.
- */
-
-#ifndef SYNSOFT_UNIXEM_INCL_SYS_H_MMAP
-#define SYNSOFT_UNIXEM_INCL_SYS_H_MMAP
-
-#ifndef UNIXEM_DOCUMENTATION_SKIP_SECTION
-# define SYNSOFT_UNIXEM_VER_SYS_H_MMAP_MAJOR    2
-# define SYNSOFT_UNIXEM_VER_SYS_H_MMAP_MINOR    1
-# define SYNSOFT_UNIXEM_VER_SYS_H_MMAP_REVISION 2
-# define SYNSOFT_UNIXEM_VER_SYS_H_MMAP_EDIT     17
-#endif /* !UNIXEM_DOCUMENTATION_SKIP_SECTION */
-
-#if defined(__MWERKS__)
-# include <sys/stat.h>	/* For off_t */
-#endif /* compiler */
-#include <sys/types.h>
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/** \weakgroup unixem Synesis Software UNIX Emulation for Win32
- * \brief The UNIX emulation library
- */
-
-/** \weakgroup unixem_mmap mmap() API
- * \ingroup UNIXem unixem
- * \brief This API provides facilities for manipulating memory-mapped files
- * @{
- */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifndef _WIN32
-# error This file is only currently defined for compilation on Win32 systems
-#endif /* _WIN32 */
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Constants and definitions
- */
-
-#define PROT_READ       (0x01)          /*!< \brief page can be read */
-#define PROT_WRITE      (0x02)          /*!< \brief page can be written */
-#define PROT_EXEC       (0x04)          /*!< \brief page can be executed */
-#define PROT_NONE       (0x00)          /*!< \brief page can not be accessed */
-
-#define MAP_PRIVATE     (0x02)          /*!< \brief Changes are private */
-#define MAP_ANONYMOUS   (0x20)          /*!< \brief Ignore fd and offset parameters */
-#define MAP_FIXED       (0x10)          /*!< \brief Interpret addr exactly */
-
-#define MAP_FAILED      ((void*)-1)     /*!< \brief Returned from mmap() when the mapping fails */
-
-/* /////////////////////////////////////////////////////////////////////////////
- * API functions
- */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-/** \brief Maps a file into memory, and returns a pointer to it
- *
- * \param addr Suggested address for the mapping
- * \param len The number of bytes in the mapped region. The combination of
- * len and offset must not exceed the length of the mapped file
- * \param prot Either PROT_NONE, or a combination of the other PROT_* flags
- * \param flags One of MAP_PRIVATE, MAP_ANONYMOUS or MAP_FIXED.
- * \param fd The file descriptor of the file to map, or -1 to allocate an anonymous map
- * \param offset The offset within the file to start the mapped region
- *
- * \retval pointer to mapped region if successful
- * \retval MAP_FAILED if failed
- *
- * \note The current implementation supports the following three modes:
- * 1. Read-only file; 2. Read-write file; 3. Anonymous Read-write block of
- * system paging file.
- */
-
-void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);
-
-/** \brief Deletes a mapped region
- *
- * The munmap() system call deletes the mappings for the specified address
- * range, and causes further references to addresses within the range to
- * generate invalid memory references.
- *
- * \param addr The base address of the mapped region to unmap
- * \param len The length of the mapped region. Ignore in the Win32 implementation
- *
- * \retval 0 if successful
- * \retval -1 if failed
- */
-
-int munmap(void *addr, size_t len);
-
-/** \brief Writes any dirty pages within the given range to disk
- *
- * \param addr The base address of the mapped region
- * \param len The length of the mapped region to flush to disk. Will be rounded up
- * to next page boundary.
- * \param flags Ignored
- */
-
-int msync(void *addr, size_t len, int flags);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* __cplusplus */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/** @} // end of group unixem_mmap */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#endif /* SYNSOFT_UNIXEM_INCL_SYS_H_MMAP */
-
-/* ////////////////////////////////////////////////////////////////////////// */
diff --git a/Utilities/CAI/cai_dll/inc/inc_unix2win/sys/time.h b/Utilities/CAI/cai_dll/inc/inc_unix2win/sys/time.h
deleted file mode 100755
index effc027ba9..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_unix2win/sys/time.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/* /////////////////////////////////////////////////////////////////////////////
- * File:    time.h (sys/time.h)
- *
- * Purpose: Declaration of the gettimeofday() API function and supporting
- *          types for the Win32 platform.
- *
- * Created: 8th December 2002
- * Updated: 21st September 2005
- *
- * Home:    http://synesis.com.au/software/
- *
- * Copyright (c) 2002-2005, Matthew Wilson and Synesis Software
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice, this
- *   list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- * - Neither the names of Matthew Wilson and Synesis Software nor the names of
- *   any contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * ////////////////////////////////////////////////////////////////////////// */
-
-
-/** \file sys/time.h
- *
- * Contains time functions and types.
- */
-
-#ifndef SYNSOFT_UNIXEM_INCL_SYS_H_TIME
-#define SYNSOFT_UNIXEM_INCL_SYS_H_TIME
-
-#ifndef UNIXEM_DOCUMENTATION_SKIP_SECTION
-# define SYNSOFT_UNIXEM_VER_SYS_H_TIME_MAJOR    2
-# define SYNSOFT_UNIXEM_VER_SYS_H_TIME_MINOR    0
-# define SYNSOFT_UNIXEM_VER_SYS_H_TIME_REVISION	2
-# define SYNSOFT_UNIXEM_VER_SYS_H_TIME_EDIT     14
-#endif /* !UNIXEM_DOCUMENTATION_SKIP_SECTION */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/** \weakgroup unixem Synesis Software UNIX Emulation for Win32
- * \brief The UNIX emulation library
- */
-
-/** \weakgroup unixem_time time() API
- * \ingroup UNIXem unixem
- * \brief Time functions and types
- * @{
- */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-/** \brief A representation of current time, used by gettimeofday().
- *
- * This structure represents the time, in seconds and microseconds, since Jan.
- * 1, 1970, in UTC. Returned by the gettimeofday() function.
- */
-
-#if !defined(_WINSOCKAPI_) && \
-	!defined(_WINSOCK2API_) && \
-	!defined(_WINSOCK2_H) && \
-	!defined(_TIMEVAL_DEFINED)
-
-/*
-	(	!defined(__GNUC__) || \
-		!defined(_TIMEVAL_DEFINED))
-*/
-
-struct timeval
-{
-    long tv_sec;    /*!< The number of seconds, since Jan. 1, 1970, in the time value. */
-    long tv_usec;   /*!< The number of microseconds in the time value. */
-};
-
-# if !defined(_TIMEVAL_DEFINED)
-#  define _TIMEVAL_DEFINED
-# endif /* __GNUC__ */
-
-#endif /* _WINSOCKAPI_ / _TIMEVAL_DEFINED */
-
-/** \brief
- *
- * This structure is NOT used in any meaningful way by the gettimeofday() function
- * implementation in this library.
- */
-struct timezone
-{
-    int tz_minuteswest; /*!< minutes west of Greenwich. */
-    int tz_dsttime;     /*!< type of dst corrections to apply. */
-};
-
-/** \brief Accesses the current UTC time
- *
- * Retrieves the current time and timezone information, relative to Greenwich Mean Time
- *
- * \param tv Pointer to a timeval structure to receive the time information
- * \param tz Pointer to a timezone structure to receive the timezone information
- */
-extern void gettimeofday(struct timeval *tv, struct timezone *tz);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* __cplusplus */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/** @} // end of group unixem_time */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#endif /* SYNSOFT_UNIXEM_INCL_SYS_H_TIME */
-
-/* ////////////////////////////////////////////////////////////////////////// */
diff --git a/Utilities/CAI/cai_dll/inc/inc_unix2win/sys/uio.h b/Utilities/CAI/cai_dll/inc/inc_unix2win/sys/uio.h
deleted file mode 100755
index fbc39ff78b..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_unix2win/sys/uio.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* /////////////////////////////////////////////////////////////////////////////
- * File:    uio.h (sys/uio.h)
- *
- * Purpose: Vector file read/write.
- *
- * Created: 19th September 2005
- * Updated: 21st September 2005
- *
- * Home:    http://synesis.com.au/software/
- *
- * Copyright (c) 2005, Matthew Wilson and Synesis Software
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice, this
- *   list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- * - Neither the names of Matthew Wilson and Synesis Software nor the names of
- *   any contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * ////////////////////////////////////////////////////////////////////////// */
-
-
-/** \file sys/uio.h
- *
- * Vector file read/write.
- */
-
-#ifndef SYNSOFT_UNIXEM_INCL_SYS_H_UIO
-#define SYNSOFT_UNIXEM_INCL_SYS_H_UIO
-
-#ifndef UNIXEM_DOCUMENTATION_SKIP_SECTION
-# define SYNSOFT_UNIXEM_VER_SYS_H_UIO_MAJOR     1
-# define SYNSOFT_UNIXEM_VER_SYS_H_UIO_MINOR     0
-# define SYNSOFT_UNIXEM_VER_SYS_H_UIO_REVISION  2
-# define SYNSOFT_UNIXEM_VER_SYS_H_UIO_EDIT      3
-#endif /* !UNIXEM_DOCUMENTATION_SKIP_SECTION */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/** \weakgroup unixem Synesis Software UNIX Emulation for Win32
- * \brief The UNIX emulation library
- */
-
-/** \weakgroup unixem_uio uio() API
- * \ingroup UNIXem unixem
- * \brief UIO functions and types
- * @{
- */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Typedefs
- */
-
-/* TODO: Check which compilers (' libraries) define this for Win32. */
-typedef signed long		ssize_t;
-
-struct iovec
-{
-    void    *iov_base;  /* Base address */
-    size_t  iov_len;    /* Number of bytes referenced */
-};
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Functions
- */
-
-ssize_t readv(int fd, struct iovec const *vector, int count);
-ssize_t writev(int fd, struct iovec const *vector, int count);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* __cplusplus */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/** @} // end of group unixem_time */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#endif /* SYNSOFT_UNIXEM_INCL_SYS_H_UIO */
-
-/* ////////////////////////////////////////////////////////////////////////// */
diff --git a/Utilities/CAI/cai_dll/inc/inc_unix2win/unistd.h b/Utilities/CAI/cai_dll/inc/inc_unix2win/unistd.h
deleted file mode 100755
index bf431bde8f..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_unix2win/unistd.h
+++ /dev/null
@@ -1,247 +0,0 @@
-/* /////////////////////////////////////////////////////////////////////////////
- * File:    unistd.h
- *
- * Purpose: Declaration of the .
- *
- * Created: 1st November 2003
- * Updated: 21st September 2005
- *
- * Home:    http://synesis.com.au/software/
- *
- * Copyright (c) 2003-2005, Matthew Wilson and Synesis Software
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice, this
- *   list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- * - Neither the names of Matthew Wilson and Synesis Software nor the names of
- *   any contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * ////////////////////////////////////////////////////////////////////////// */
-
-
-/** \file unistd.h
- *
- * Contains standard limits and declarations.
- */
-
-#ifndef SYNSOFT_UNIXEM_INCL_H_UNISTD
-#define SYNSOFT_UNIXEM_INCL_H_UNISTD
-
-#ifndef UNIXEM_DOCUMENTATION_SKIP_SECTION
-# define SYNSOFT_UNIXEM_VER_H_UNISTD_MAJOR      2
-# define SYNSOFT_UNIXEM_VER_H_UNISTD_MINOR      3
-# define SYNSOFT_UNIXEM_VER_H_UNISTD_REVISION   4
-# define SYNSOFT_UNIXEM_VER_H_UNISTD_EDIT       26
-#endif /* !UNIXEM_DOCUMENTATION_SKIP_SECTION */
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Includes
- */
-
-#include <stddef.h>     /* for size_t */
-#include <sys/types.h>  /* for mode_t */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/** \weakgroup unixem Synesis Software UNIX Emulation for Win32
- * \brief The UNIX emulation library
- */
-
-/** \weakgroup unixem_unistd unistd.h
- * \ingroup UNIXem unixem
- * \brief Standard limits and declarations
- * @{
- */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifndef _WIN32
-# error This file is only currently defined for compilation on Win32 systems
-#endif /* _WIN32 */
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Constants and definitions
- */
-
-//#ifndef PATH_MAX
-//# define PATH_MAX   (260)   /*!< \brief The maximum number of characters (including null terminator) in a directory entry name */
-//#endif /* !PATH_MAX */
-
-enum
-{
-        _PC_LINK_MAX                    /*!< The maximum number of links to the file. */
-#define _PC_LINK_MAX            _PC_LINK_MAX
-    ,   _PC_MAX_CANON                   /*!< Maximum number of bytes in canonical input line. Applicable only to terminal devices. */
-#define _PC_MAX_CANON           _PC_MAX_CANON
-    ,   _PC_MAX_INPUT                   /*!< Maximum number of bytes allowed in an input queue. Applicable only to terminal devices. */
-#define _PC_MAX_INPUT           _PC_MAX_INPUT
-    ,   _PC_NAME_MAX                    /*!< Maximum number of bytes in a file name, not including a nul terminator. This number can range from 14 through 255. This value is applicable only to a directory file. */
-#define _PC_NAME_MAX            _PC_NAME_MAX
-    ,   _PC_PATH_MAX                    /*!< Maximum number of bytes in a path name, including a nul terminator. */
-#define _PC_PATH_MAX            _PC_PATH_MAX
- 
-    ,   _PC_PIPE_BUF                    /*!< Maximum number of bytes guaranteed to be written atomically. This value is applicable only to a first-in-first-out (FIFO). */
-#define _PC_PIPE_BUF            _PC_PIPE_BUF
-    ,   _PC_CHOWN_RESTRICTED            /*!< Returns 0 if the use of the chown subroutine is restricted to a process with appropriate privileges, and if the chown subroutine is restricted to changing the group ID of a file only to the effective group ID of the process or to one of its supplementary group IDs. */
-#define _PC_CHOWN_RESTRICTED    _PC_CHOWN_RESTRICTED
-    ,   _PC_NO_TRUNC                    /*!< Returns 0 if long component names are truncated. This value is applicable only to a directory file. */
-#define _PC_NO_TRUNC            _PC_NO_TRUNC
-    ,   _PC_VDISABLE                    /*!< This is always 0. No disabling character is defined. This value is applicable only to a terminal device. */
-#define _PC_VDISABLE            _PC_VDISABLE
-    ,   _PC_AIX_DISK_PARTITION          /*!< Determines the physical partition size of the disk. 
-Note:
-The _PC_AIX_DISK_PARTITION variable is available only to the root user. */
-#define _PC_AIX_DISK_PARTITION    _PC_AIX_DISK_PARTITION
-    ,   _PC_AIX_DISK_SIZE               /*!< Determines the disk size in megabytes. 
-Note:
-The _PC_AIX_DISK_SIZE variable is available only to the root user.
-Note:
-The _PC_FILESIZEBITS and PC_SYNC_IO flags apply to AIX 4.3 and later releases. */
-#define _PC_AIX_DISK_SIZE           _PC_AIX_DISK_SIZE
-    ,   _PC_FILESIZEBITS                /*!< Returns the minimum number of bits required to hold the file system's maximum file size as a signed integer. The smallest value returned is 32. */
-#define _PC_FILESIZEBITS            _PC_FILESIZEBITS
-    ,   _PC_SYNC_IO                     /*!< Returns -1 if the file system does not support the Synchronized Input and Output option. Any value other than -1 is returned if the file system supports the option. */
-#define _PC_SYNC_IO                 _PC_SYNC_IO
-};
-
-/* /////////////////////////////////////////////////////////////////////////////
- * API functions
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/** \brief Creates a hardlink.
- *
- * This function creates a link from \c originalFile to \c linkName.
- *
- * \param originalFile Path of the original file
- * \param linkName Path of the link
- *
- * \return O on success, or -1 if there is an error
- *
- * \note Hardlink support is only available on Windows 2000 and later, and only
- *        works within a single drive.
- */
-int link(const char *originalFile, const char *linkName);
-
-
-/** \brief Unlinks a file or directory
- *
- * \param path The path of the file or directory to unlink
- *
- * \return O on success, or -1 if there is an error
- */
-int unlink(const char *path);
-
-/** \brief Change the current working directory.
- *
- * This function changes the current working directory to the directory
- * specified by dirName. dirName must refer to an existing directory.
- *
- * \param dirName Path of new working directory
- * \return O on success, or -1 if there is an error
- */
-int chdir(const char *dirName);
-
-/** \brief Get the current working directory
- *
- * This function gets the full path of the current working directory
- * and stores it in buffer.
- *
- * \param buffer Storage location for the current working directory
- * \param max_len Maximum length of path (in characters)
- * \return buffer on success, or NULL to indicate error.
- */
-char *getcwd(char *buffer, size_t max_len);
-
-#if !defined(__MWERKS__)
-
-/** \brief Creates the given directory
- *
- * This function creates the named directory.
- *
- * \param dirName Path of directory to remove
- * \param mode The access permissions of the directory
- *
- * \return O on success, or -1 if there is an error
- */
-int mkdir(const char *dirName, unsigned mode);
-
-#endif /* !__MWERKS__ */
-
-/** \brief Removes the given directory
- *
- * This function removes the named directory.
- *
- * \param dirName Path of directory to remove
- * \return O on success, or -1 if there is an error
- */
-int rmdir(const char *dirName);
-
-/** \brief Closes a file
- *
- * \param handle The handle of the file to be closed
- * \return 0 on success, or -1 if there is an error
- */
-int close(int handle);
-
-/** \brief Creates a pipe
- *
- * \param handles An array of two handles. handles[0] will be set to the
- * read stream. handels[1] will be set to the write stream
- * \return 0 on success, or -1 if there is an error
- */
-/* int pipe(int handles[2]); */
-
-/** \brief Returns the size, in bytes, of the page size
- */
-int getpagesize(void);
-
-/** \brief Provides access to various system limits not available at compile time
- */
-long pathconf(char const *path, int name);
-
-
-/** \brief Turns \c path into a fully qualified path, resolving all symbolic 
- * links, multiple /, /./ and /../
- *
- * \param path The relative path to be converted into absolute form
- * \param resolvedPath Pointer to a buffer to receive the path. This must contain
- *  sufficient storage for a valid path
- */
-char *realpath(char const *path, char resolvedPath[]);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* __cplusplus */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/** @} // end of group unixem_unistd */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#endif /* SYNSOFT_UNIXEM_INCL_H_UNISTD */
-
-/* ////////////////////////////////////////////////////////////////////////// */
diff --git a/Utilities/CAI/cai_dll/inc/inc_unix2win/unixem/implicit_link.h b/Utilities/CAI/cai_dll/inc/inc_unix2win/unixem/implicit_link.h
deleted file mode 100755
index 3b9e65a439..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_unix2win/unixem/implicit_link.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/* /////////////////////////////////////////////////////////////////////////////
- * File:    unixem/implicit_link.h
- *
- * Purpose: Implicit linking for the UNIXEm API.
- *
- * Created: 29th August 2005
- * Updated: 29th August 2005
- *
- * Home:    http://synesis.com.au/software/
- *
- * Copyright 1994-2005, Matthew Wilson and Synesis Software
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice, this
- *   list of conditions and the following disclaimer. 
- * - Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- * - Neither the names of Matthew Wilson and Synesis Software nor the names of
- *   any contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * ////////////////////////////////////////////////////////////////////////// */
-
-
-/** \file unixem/implicit_link.h Implicit linking for the UNIXEm API
- */
-
-#ifndef UNIXEM_INCL_UNIXEM_H_IMPLICIT_LINK
-#define UNIXEM_INCL_UNIXEM_H_IMPLICIT_LINK
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Version
- */
-
-#ifndef UNIXEM_DOCUMENTATION_SKIP_SECTION
-# define UNIXEM_VER_UNIXEM_H_IMPLICIT_LINK_MAJOR    1
-# define UNIXEM_VER_UNIXEM_H_IMPLICIT_LINK_MINOR    0
-# define UNIXEM_VER_UNIXEM_H_IMPLICIT_LINK_REVISION 1
-# define UNIXEM_VER_UNIXEM_H_IMPLICIT_LINK_EDIT     1
-#endif /* !UNIXEM_DOCUMENTATION_SKIP_SECTION */
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Includes
- */
-
-#include <unixem/unixem.h>
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Implicit linking
- */
-
-#if defined(WIN32) || \
-    defined(_WIN32)
-
-# if defined(__BORLANDC__) || \
-     /* defined(__DMC__) || */ \
-     defined(__INTEL_COMPILER) || \
-     defined(__MWERKS__) || \
-     defined(_MSC_VER)
-#  define UNIXEM_IMPLICIT_LINK_SUPPORT
-# endif /* compiler */
-
-
-# if defined(UNIXEM_IMPLICIT_LINK_SUPPORT)
-
-#  if defined(__BORLANDC__)
-#   if __BORLANDC__ == 0x0550
-#    define UNIXEM_IMPL_LINK_COMPILER_NAME          "bc55"
-#   elif (__BORLANDC__ == 0x0551)
-#    define UNIXEM_IMPL_LINK_COMPILER_NAME          "bc551"
-#   elif (__BORLANDC__ == 0x0560)
-#    define UNIXEM_IMPL_LINK_COMPILER_NAME          "bc56"
-#   elif (__BORLANDC__ == 0x0564)
-#    define UNIXEM_IMPL_LINK_COMPILER_NAME          "bc564"
-#   else /* ? __BORLANDC__ */
-#    error Unrecognised value of __BORLANDC__
-#   endif /* __BORLANDC__ */
-
-/*
-#  elif defined(__DMC__)
-#   define UNIXEM_IMPL_LINK_COMPILER_NAME           "dm"
- */
-
-#  elif defined(__INTEL_COMPILER)
-#   if (__INTEL_COMPILER == 600)
-#    define UNIXEM_IMPL_LINK_COMPILER_NAME          "icl6"
-#   elif (__INTEL_COMPILER == 700)
-#    define UNIXEM_IMPL_LINK_COMPILER_NAME          "icl7"
-#   elif (__INTEL_COMPILER == 800)
-#    define UNIXEM_IMPL_LINK_COMPILER_NAME          "icl8"
-#   else /* ? __INTEL_COMPILER */
-#    error Unrecognised value of __INTEL_COMPILER
-#   endif /* __INTEL_COMPILER */
-
-#  elif defined(__MWERKS__)
-#   if ((__MWERKS__ & 0xFF00) == 0x2400)
-#    define UNIXEM_IMPL_LINK_COMPILER_NAME          "cw7"
-#   elif ((__MWERKS__ & 0xFF00) == 0x3000)
-#    define UNIXEM_IMPL_LINK_COMPILER_NAME          "cw8"
-#   elif ((__MWERKS__ & 0xFF00) == 0x3200)
-#    define UNIXEM_IMPL_LINK_COMPILER_NAME          "cw9"
-#   else /* ? __MWERKS__ */
-#    error Unrecognised value of __MWERKS__
-#   endif /* __MWERKS__ */
-
-#  elif defined(_MSC_VER)
-#   if _MSC_VER == 1000
-#    define UNIXEM_IMPL_LINK_COMPILER_NAME          "vc4"
-#   elif _MSC_VER == 1020
-#    define UNIXEM_IMPL_LINK_COMPILER_NAME          "vc42"
-#   elif _MSC_VER == 1100
-#    define UNIXEM_IMPL_LINK_COMPILER_NAME          "vc5"
-#   elif _MSC_VER == 1200
-#    define UNIXEM_IMPL_LINK_COMPILER_NAME          "vc6"
-#   elif _MSC_VER == 1300
-#    define UNIXEM_IMPL_LINK_COMPILER_NAME          "vc7"
-#   elif _MSC_VER == 1310
-#    define UNIXEM_IMPL_LINK_COMPILER_NAME          "vc71"
-#   elif _MSC_VER == 1400
-#    define UNIXEM_IMPL_LINK_COMPILER_NAME          "vc8"
-#   else /* ? _MSC_VER */
-#    error Unrecognised value of _MSC_VER
-#   endif /* _MSC_VER */
-
-#  else /* ? compiler */
-#   error Unrecognised compiler
-#  endif /* compiler */
-
-
-# if defined(__MT__) || \
-     defined(_REENTRANT) || \
-     defined(_MT)
-#  if defined(_DLL) || \
-      defined(__DLL)
-#   define UNIXEM_IMPL_LINK_THREADING_TYPE          ".dll"
-#  else /* ? dll */
-#   define UNIXEM_IMPL_LINK_THREADING_TYPE          ".mt"
-#  endif /* dll */
-# else /* ? mt */
-#   define UNIXEM_IMPL_LINK_THREADING_TYPE          ""
-# endif /* mt */
-
-
-# if !defined(NDEBUG) && \
-     defined(_DEBUG)
-#  define UNIXEM_IMPL_LINK_DEBUG_TYPE               ".debug"
-# else /* ? debug */
-#  define UNIXEM_IMPL_LINK_DEBUG_TYPE               ""
-# endif /* debug */
-
-#  define UNIXEM_IMPL_LINK_LIBRARY_BASENAME_s_(x)   #x
-#  define UNIXEM_IMPL_LINK_LIBRARY_BASENAME_s(x)    UNIXEM_IMPL_LINK_LIBRARY_BASENAME_s_(x)
-#  define UNIXEM_IMPL_LINK_LIBRARY_BASENAME         "unixem." UNIXEM_IMPL_LINK_LIBRARY_BASENAME_s(UNIXEM_VER_MAJOR) "."
-
-#  define UNIXEM_IMPL_LINK_LIBRARY_NAME             UNIXEM_IMPL_LINK_LIBRARY_BASENAME UNIXEM_IMPL_LINK_COMPILER_NAME UNIXEM_IMPL_LINK_THREADING_TYPE UNIXEM_IMPL_LINK_DEBUG_TYPE ".lib"
-
-#  pragma message("lib: " UNIXEM_IMPL_LINK_LIBRARY_NAME)
-
-#  pragma comment(lib, UNIXEM_IMPL_LINK_LIBRARY_NAME)
-
-# endif /* UNIXEM_IMPLICIT_LINK_SUPPORT */
-
-#endif /* Win32 */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#endif /* UNIXEM_INCL_UNIXEM_H_IMPLICIT_LINK */
-
-/* ////////////////////////////////////////////////////////////////////////// */
diff --git a/Utilities/CAI/cai_dll/inc/inc_unix2win/unixem/internal/util.h b/Utilities/CAI/cai_dll/inc/inc_unix2win/unixem/internal/util.h
deleted file mode 100755
index 4e2369ede1..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_unix2win/unixem/internal/util.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/* /////////////////////////////////////////////////////////////////////////////
- * File:    unixem/internal/util.h
- *
- * Purpose: Internal utility header for the UNIXEm API.
- *
- * Created: 2nd September 2005
- * Updated: 2nd September 2005
- *
- * Home:    http://synesis.com.au/software/
- *
- * Copyright 1994-2005, Matthew Wilson and Synesis Software
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice, this
- *   list of conditions and the following disclaimer. 
- * - Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- * - Neither the names of Matthew Wilson and Synesis Software nor the names of
- *   any contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * ////////////////////////////////////////////////////////////////////////// */
-
-
-/** \file unixem/internal/util Internal utility header for the UNIXEm API
- */
-
-#ifndef UNIXEM_INCL_UNIXEM_INTERNAL_H_UTIL
-#define UNIXEM_INCL_UNIXEM_INTERNAL_H_UTIL
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Version
- */
-
-#ifndef UNIXEM_DOCUMENTATION_SKIP_SECTION
-# define UNIXEM_VER_UNIXEM_INTERNAL_H_UTIL_MAJOR    1
-# define UNIXEM_VER_UNIXEM_INTERNAL_H_UTIL_MINOR    0
-# define UNIXEM_VER_UNIXEM_INTERNAL_H_UTIL_REVISION 1
-# define UNIXEM_VER_UNIXEM_INTERNAL_H_UTIL_EDIT     1
-#endif /* !UNIXEM_DOCUMENTATION_SKIP_SECTION */
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Includes
- */
-
-#include <unixem/unixem.h>
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Macros
- */
-
-#ifndef NUM_ELEMENTS
-# define NUM_ELEMENTS(x)        (sizeof(x) / sizeof(0[x]))
-#endif /* !NUM_ELEMENTS */
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Function declarations
- */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-int		errno_from_Win32(unsigned long);
-
-/** Gets the drive letter of the current working directory
- *
- * \retval Either an uppercase letter, or '\0' on failure;
- */
-char	get_current_drive(void);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* __cplusplus */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#endif /* UNIXEM_INCL_UNIXEM_INTERNAL_H_UTIL */
-
-/* ////////////////////////////////////////////////////////////////////////// */
diff --git a/Utilities/CAI/cai_dll/inc/inc_unix2win/unixem/unixem.h b/Utilities/CAI/cai_dll/inc/inc_unix2win/unixem/unixem.h
deleted file mode 100755
index 24442d87db..0000000000
--- a/Utilities/CAI/cai_dll/inc/inc_unix2win/unixem/unixem.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* /////////////////////////////////////////////////////////////////////////////
- * File:    unixem/unixem.h
- *
- * Purpose: Root header for the UNIXEm API.
- *
- * Created: 29th August 2005
- * Updated: 2nd September 2005
- *
- * Home:    http://synesis.com.au/software/
- *
- * Copyright 1994-2005, Matthew Wilson and Synesis Software
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice, this
- *   list of conditions and the following disclaimer. 
- * - Redistributions in binary form must reproduce the above copyright notice,
- *   this list of conditions and the following disclaimer in the documentation
- *   and/or other materials provided with the distribution.
- * - Neither the names of Matthew Wilson and Synesis Software nor the names of
- *   any contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * ////////////////////////////////////////////////////////////////////////// */
-
-
-/** \file unixem/unixem.h Root header for the UNIXEm API
- */
-
-#ifndef UNIXEM_INCL_UNIXEM_H_UNIXEM
-#define UNIXEM_INCL_UNIXEM_H_UNIXEM
-
-/* /////////////////////////////////////////////////////////////////////////////
- * Version
- */
-
-#ifndef UNIXEM_DOCUMENTATION_SKIP_SECTION
-# define UNIXEM_VER_UNIXEM_H_UNIXEM_MAJOR       1
-# define UNIXEM_VER_UNIXEM_H_UNIXEM_MINOR       0
-# define UNIXEM_VER_UNIXEM_H_UNIXEM_REVISION    1
-# define UNIXEM_VER_UNIXEM_H_UNIXEM_EDIT        1
-#endif /* !UNIXEM_DOCUMENTATION_SKIP_SECTION */
-
-/** \def UNIXEM_VER_MAJOR
- * The major version number of UNIXEm
- */
-
-/** \def UNIXEM_VER_MINOR
- * The minor version number of UNIXEm
- */
-
-/** \def UNIXEM_VER_REVISION
- * The revision version number of UNIXEm
- */
-
-/** \def UNIXEM_VER
- * The current composite version number of UNIXEm
- */
-
-#define UNIXEM_VER_MAJOR       1
-#define UNIXEM_VER_MINOR       6
-#define UNIXEM_VER_REVISION    1
-
-#ifndef UNIXEM_DOCUMENTATION_SKIP_SECTION
-# define UNIXEM_VER_1_0_1       0x01000100
-# define UNIXEM_VER_1_1_1       0x01010100
-# define UNIXEM_VER_1_2_1       0x01020100
-# define UNIXEM_VER_1_3_1       0x01030100
-# define UNIXEM_VER_1_4_1       0x01040100
-# define UNIXEM_VER_1_5_1       0x01050100
-# define UNIXEM_VER_1_5_2       0x01050200
-# define UNIXEM_VER_1_5_3       0x01050300
-# define UNIXEM_VER_1_6_1       0x01060100
-
-# define UNIXEM_VER             UNIXEM_VER_1_6_1
-#else /* ? UNIXEM_DOCUMENTATION_SKIP_SECTION */
-# define UNIXEM_VER             0x01060100
-#endif /* !UNIXEM_DOCUMENTATION_SKIP_SECTION */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#endif /* UNIXEM_INCL_UNIXEM_H_UNIXEM */
-
-/* ////////////////////////////////////////////////////////////////////////// */
diff --git a/Utilities/CAI/cai_dll/inc/jchuff.h b/Utilities/CAI/cai_dll/inc/jchuff.h
deleted file mode 100755
index fa4643a4e7..0000000000
--- a/Utilities/CAI/cai_dll/inc/jchuff.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * jchuff.h
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains declarations for Huffman entropy encoding routines
- * that are shared between the sequential encoder (jchuff.c) and the
- * progressive encoder (jcphuff.c).  No other modules need to see these.
- */
-
-/* Derived data constructed for each Huffman table */
-
-typedef struct {
-  unsigned int ehufco[256];	/* code for each symbol */
-  char ehufsi[256];		/* length of code for each symbol */
-  /* If no code has been allocated for a symbol S, ehufsi[S] contains 0 */
-} c_derived_tbl;
-
-/* Short forms of external names for systems with brain-damaged linkers. */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jpeg_make_c_derived_tbl	jMkCDerived
-#define jpeg_gen_optimal_table	jGenOptTbl
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-/* Expand a Huffman table definition into the derived format */
-EXTERN(void) jpeg_make_c_derived_tbl
-	JPP((j_compress_ptr cinfo, JHUFF_TBL * htbl, c_derived_tbl ** pdtbl));
-
-/* Generate an optimal table definition given the specified counts */
-EXTERN(void) jpeg_gen_optimal_table
-	JPP((j_compress_ptr cinfo, JHUFF_TBL * htbl, long freq[]));
diff --git a/Utilities/CAI/cai_dll/inc/jconfig.h b/Utilities/CAI/cai_dll/inc/jconfig.h
deleted file mode 100755
index 1673c5d99c..0000000000
--- a/Utilities/CAI/cai_dll/inc/jconfig.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* jconfig.vc --- jconfig.h for Microsoft Visual C++ on Windows 95 or NT. */
-/* see jconfig.doc for explanations */
-
-#ifndef _JCONFIG_H_
-#define _JCONFIG_H_
-
-#define HAVE_PROTOTYPES
-#define HAVE_UNSIGNED_CHAR
-#define HAVE_UNSIGNED_SHORT
-/* #define void char */
-/* #define const */
-#undef CHAR_IS_UNSIGNED
-#define HAVE_STDDEF_H
-#define HAVE_STDLIB_H
-#undef NEED_BSD_STRINGS
-#undef NEED_SYS_TYPES_H
-#undef NEED_FAR_POINTERS	/* we presume a 32-bit flat memory model */
-#undef NEED_SHORT_EXTERNAL_NAMES
-#undef INCOMPLETE_TYPES_BROKEN
-
-/* Define "boolean" as unsigned char, not int, per Windows custom */
-#ifndef __RPCNDR_H__		/* don't conflict if rpcndr.h already read */
-typedef unsigned char boolean;
-#endif
-#define HAVE_BOOLEAN		/* prevent jmorecfg.h from redefining it */
-
-
-#ifdef JPEG_INTERNALS
-
-#undef RIGHT_SHIFT_IS_UNSIGNED
-
-#endif /* JPEG_INTERNALS */
-
-#ifdef JPEG_CJPEG_DJPEG
-
-#define BMP_SUPPORTED		/* BMP image file format */
-#define GIF_SUPPORTED		/* GIF image file format */
-#define PPM_SUPPORTED		/* PBMPLUS PPM/PGM image file format */
-#undef RLE_SUPPORTED		/* Utah RLE image file format */
-#define TARGA_SUPPORTED		/* Targa image file format */
-
-#define TWO_FILE_COMMANDLINE	/* optional */
-#define USE_SETMODE		/* Microsoft has setmode() */
-#undef NEED_SIGNAL_CATCHER
-#undef DONT_USE_B_MODE
-#undef PROGRESS_REPORT		/* optional */
-
-#endif /* JPEG_CJPEG_DJPEG */
-
-#endif
diff --git a/Utilities/CAI/cai_dll/inc/jdct.h b/Utilities/CAI/cai_dll/inc/jdct.h
deleted file mode 100755
index 04192a266a..0000000000
--- a/Utilities/CAI/cai_dll/inc/jdct.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * jdct.h
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This include file contains common declarations for the forward and
- * inverse DCT modules.  These declarations are private to the DCT managers
- * (jcdctmgr.c, jddctmgr.c) and the individual DCT algorithms.
- * The individual DCT algorithms are kept in separate files to ease 
- * machine-dependent tuning (e.g., assembly coding).
- */
-
-
-/*
- * A forward DCT routine is given a pointer to a work area of type DCTELEM[];
- * the DCT is to be performed in-place in that buffer.  Type DCTELEM is int
- * for 8-bit samples, INT32 for 12-bit samples.  (NOTE: Floating-point DCT
- * implementations use an array of type FAST_FLOAT, instead.)
- * The DCT inputs are expected to be signed (range +-CENTERJSAMPLE).
- * The DCT outputs are returned scaled up by a factor of 8; they therefore
- * have a range of +-8K for 8-bit data, +-128K for 12-bit data.  This
- * convention improves accuracy in integer implementations and saves some
- * work in floating-point ones.
- * Quantization of the output coefficients is done by jcdctmgr.c.
- */
-
-#if BITS_IN_JSAMPLE == 8
-typedef int DCTELEM;		/* 16 or 32 bits is fine */
-#else
-typedef INT32 DCTELEM;		/* must have 32 bits */
-#endif
-
-typedef JMETHOD(void, forward_DCT_method_ptr, (DCTELEM * data));
-typedef JMETHOD(void, float_DCT_method_ptr, (FAST_FLOAT * data));
-
-
-/*
- * An inverse DCT routine is given a pointer to the input JBLOCK and a pointer
- * to an output sample array.  The routine must dequantize the input data as
- * well as perform the IDCT; for dequantization, it uses the multiplier table
- * pointed to by compptr->dct_table.  The output data is to be placed into the
- * sample array starting at a specified column.  (Any row offset needed will
- * be applied to the array pointer before it is passed to the IDCT code.)
- * Note that the number of samples emitted by the IDCT routine is
- * DCT_scaled_size * DCT_scaled_size.
- */
-
-/* typedef inverse_DCT_method_ptr is declared in jpegint.h */
-
-/*
- * Each IDCT routine has its own ideas about the best dct_table element type.
- */
-
-typedef MULTIPLIER ISLOW_MULT_TYPE; /* short or int, whichever is faster */
-#if BITS_IN_JSAMPLE == 8
-typedef MULTIPLIER IFAST_MULT_TYPE; /* 16 bits is OK, use short if faster */
-#define IFAST_SCALE_BITS  2	/* fractional bits in scale factors */
-#else
-typedef INT32 IFAST_MULT_TYPE;	/* need 32 bits for scaled quantizers */
-#define IFAST_SCALE_BITS  13	/* fractional bits in scale factors */
-#endif
-typedef FAST_FLOAT FLOAT_MULT_TYPE; /* preferred floating type */
-
-
-/*
- * Each IDCT routine is responsible for range-limiting its results and
- * converting them to unsigned form (0..MAXJSAMPLE).  The raw outputs could
- * be quite far out of range if the input data is corrupt, so a bulletproof
- * range-limiting step is required.  We use a mask-and-table-lookup method
- * to do the combined operations quickly.  See the comments with
- * prepare_range_limit_table (in jdmaster.c) for more info.
- */
-
-#define IDCT_range_limit(cinfo)  ((cinfo)->sample_range_limit + CENTERJSAMPLE)
-
-#define RANGE_MASK  (MAXJSAMPLE * 4 + 3) /* 2 bits wider than legal samples */
-
-
-/* Short forms of external names for systems with brain-damaged linkers. */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jpeg_fdct_islow		jFDislow
-#define jpeg_fdct_ifast		jFDifast
-#define jpeg_fdct_float		jFDfloat
-#define jpeg_idct_islow		jRDislow
-#define jpeg_idct_ifast		jRDifast
-#define jpeg_idct_float		jRDfloat
-#define jpeg_idct_4x4		jRD4x4
-#define jpeg_idct_2x2		jRD2x2
-#define jpeg_idct_1x1		jRD1x1
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-/* Extern declarations for the forward and inverse DCT routines. */
-
-EXTERN(void) jpeg_fdct_islow JPP((DCTELEM * data));
-EXTERN(void) jpeg_fdct_ifast JPP((DCTELEM * data));
-EXTERN(void) jpeg_fdct_float JPP((FAST_FLOAT * data));
-
-EXTERN(void) jpeg_idct_islow
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_ifast
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_float
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_4x4
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_2x2
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_1x1
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-
-
-/*
- * Macros for handling fixed-point arithmetic; these are used by many
- * but not all of the DCT/IDCT modules.
- *
- * All values are expected to be of type INT32.
- * Fractional constants are scaled left by CONST_BITS bits.
- * CONST_BITS is defined within each module using these macros,
- * and may differ from one module to the next.
- */
-
-#define ONE	((INT32) 1)
-#define CONST_SCALE (ONE << CONST_BITS)
-
-/* Convert a positive real constant to an integer scaled by CONST_SCALE.
- * Caution: some C compilers fail to reduce "FIX(constant)" at compile time,
- * thus causing a lot of useless floating-point operations at run time.
- */
-
-#define FIX(x)	((INT32) ((x) * CONST_SCALE + 0.5))
-
-/* Descale and correctly round an INT32 value that's scaled by N bits.
- * We assume RIGHT_SHIFT rounds towards minus infinity, so adding
- * the fudge factor is correct for either sign of X.
- */
-
-#define DESCALE(x,n)  RIGHT_SHIFT((x) + (ONE << ((n)-1)), n)
-
-/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result.
- * This macro is used only when the two inputs will actually be no more than
- * 16 bits wide, so that a 16x16->32 bit multiply can be used instead of a
- * full 32x32 multiply.  This provides a useful speedup on many machines.
- * Unfortunately there is no way to specify a 16x16->32 multiply portably
- * in C, but some C compilers will do the right thing if you provide the
- * correct combination of casts.
- */
-
-#ifdef SHORTxSHORT_32		/* may work if 'int' is 32 bits */
-#define MULTIPLY16C16(var,const)  (((INT16) (var)) * ((INT16) (const)))
-#endif
-#ifdef SHORTxLCONST_32		/* known to work with Microsoft C 6.0 */
-#define MULTIPLY16C16(var,const)  (((INT16) (var)) * ((INT32) (const)))
-#endif
-
-#ifndef MULTIPLY16C16		/* default definition */
-#define MULTIPLY16C16(var,const)  ((var) * (const))
-#endif
-
-/* Same except both inputs are variables. */
-
-#ifdef SHORTxSHORT_32		/* may work if 'int' is 32 bits */
-#define MULTIPLY16V16(var1,var2)  (((INT16) (var1)) * ((INT16) (var2)))
-#endif
-
-#ifndef MULTIPLY16V16		/* default definition */
-#define MULTIPLY16V16(var1,var2)  ((var1) * (var2))
-#endif
diff --git a/Utilities/CAI/cai_dll/inc/jdhuff.h b/Utilities/CAI/cai_dll/inc/jdhuff.h
deleted file mode 100755
index bcc3ab1271..0000000000
--- a/Utilities/CAI/cai_dll/inc/jdhuff.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * jdhuff.h
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains declarations for Huffman entropy decoding routines
- * that are shared between the sequential decoder (jdhuff.c) and the
- * progressive decoder (jdphuff.c).  No other modules need to see these.
- */
-
-/* Short forms of external names for systems with brain-damaged linkers. */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jpeg_make_d_derived_tbl	jMkDDerived
-#define jpeg_fill_bit_buffer	jFilBitBuf
-#define jpeg_huff_decode	jHufDecode
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-
-/* Derived data constructed for each Huffman table */
-
-#define HUFF_LOOKAHEAD	8	/* # of bits of lookahead */
-
-typedef struct {
-  /* Basic tables: (element [0] of each array is unused) */
-  INT32 mincode[17];		/* smallest code of length k */
-  INT32 maxcode[18];		/* largest code of length k (-1 if none) */
-  /* (maxcode[17] is a sentinel to ensure jpeg_huff_decode terminates) */
-  int valptr[17];		/* huffval[] index of 1st symbol of length k */
-
-  /* Link to public Huffman table (needed only in jpeg_huff_decode) */
-  JHUFF_TBL *pub;
-
-  /* Lookahead tables: indexed by the next HUFF_LOOKAHEAD bits of
-   * the input data stream.  If the next Huffman code is no more
-   * than HUFF_LOOKAHEAD bits long, we can obtain its length and
-   * the corresponding symbol directly from these tables.
-   */
-  int look_nbits[1<<HUFF_LOOKAHEAD]; /* # bits, or 0 if too long */
-  UINT8 look_sym[1<<HUFF_LOOKAHEAD]; /* symbol, or unused */
-} d_derived_tbl;
-
-/* Expand a Huffman table definition into the derived format */
-EXTERN(void) jpeg_make_d_derived_tbl JPP((j_decompress_ptr cinfo,
-				JHUFF_TBL * htbl, d_derived_tbl ** pdtbl));
-
-
-/*
- * Fetching the next N bits from the input stream is a time-critical operation
- * for the Huffman decoders.  We implement it with a combination of inline
- * macros and out-of-line subroutines.  Note that N (the number of bits
- * demanded at one time) never exceeds 15 for JPEG use.
- *
- * We read source bytes into get_buffer and dole out bits as needed.
- * If get_buffer already contains enough bits, they are fetched in-line
- * by the macros CHECK_BIT_BUFFER and GET_BITS.  When there aren't enough
- * bits, jpeg_fill_bit_buffer is called; it will attempt to fill get_buffer
- * as full as possible (not just to the number of bits needed; this
- * prefetching reduces the overhead cost of calling jpeg_fill_bit_buffer).
- * Note that jpeg_fill_bit_buffer may return FALSE to indicate suspension.
- * On TRUE return, jpeg_fill_bit_buffer guarantees that get_buffer contains
- * at least the requested number of bits --- dummy zeroes are inserted if
- * necessary.
- */
-
-typedef INT32 bit_buf_type;	/* type of bit-extraction buffer */
-#define BIT_BUF_SIZE  32	/* size of buffer in bits */
-
-/* If long is > 32 bits on your machine, and shifting/masking longs is
- * reasonably fast, making bit_buf_type be long and setting BIT_BUF_SIZE
- * appropriately should be a win.  Unfortunately we can't do this with
- * something like  #define BIT_BUF_SIZE (sizeof(bit_buf_type)*8)
- * because not all machines measure sizeof in 8-bit bytes.
- */
-
-typedef struct {		/* Bitreading state saved across MCUs */
-  bit_buf_type get_buffer;	/* current bit-extraction buffer */
-  int bits_left;		/* # of unused bits in it */
-  boolean printed_eod;		/* flag to suppress multiple warning msgs */
-} bitread_perm_state;
-
-typedef struct {		/* Bitreading working state within an MCU */
-  /* current data source state */
-  const JOCTET * next_input_byte; /* => next byte to read from source */
-  size_t bytes_in_buffer;	/* # of bytes remaining in source buffer */
-  int unread_marker;		/* nonzero if we have hit a marker */
-  /* bit input buffer --- note these values are kept in register variables,
-   * not in this struct, inside the inner loops.
-   */
-  bit_buf_type get_buffer;	/* current bit-extraction buffer */
-  int bits_left;		/* # of unused bits in it */
-  /* pointers needed by jpeg_fill_bit_buffer */
-  j_decompress_ptr cinfo;	/* back link to decompress master record */
-  boolean * printed_eod_ptr;	/* => flag in permanent state */
-} bitread_working_state;
-
-/* Macros to declare and load/save bitread local variables. */
-#define BITREAD_STATE_VARS  \
-	register bit_buf_type get_buffer;  \
-	register int bits_left;  \
-	bitread_working_state br_state
-
-#define BITREAD_LOAD_STATE(cinfop,permstate)  \
-	br_state.cinfo = cinfop; \
-	br_state.next_input_byte = cinfop->src->next_input_byte; \
-	br_state.bytes_in_buffer = cinfop->src->bytes_in_buffer; \
-	br_state.unread_marker = cinfop->unread_marker; \
-	get_buffer = permstate.get_buffer; \
-	bits_left = permstate.bits_left; \
-	br_state.printed_eod_ptr = & permstate.printed_eod
-
-#define BITREAD_SAVE_STATE(cinfop,permstate)  \
-	cinfop->src->next_input_byte = br_state.next_input_byte; \
-	cinfop->src->bytes_in_buffer = br_state.bytes_in_buffer; \
-	cinfop->unread_marker = br_state.unread_marker; \
-	permstate.get_buffer = get_buffer; \
-	permstate.bits_left = bits_left
-
-/*
- * These macros provide the in-line portion of bit fetching.
- * Use CHECK_BIT_BUFFER to ensure there are N bits in get_buffer
- * before using GET_BITS, PEEK_BITS, or DROP_BITS.
- * The variables get_buffer and bits_left are assumed to be locals,
- * but the state struct might not be (jpeg_huff_decode needs this).
- *	CHECK_BIT_BUFFER(state,n,action);
- *		Ensure there are N bits in get_buffer; if suspend, take action.
- *      val = GET_BITS(n);
- *		Fetch next N bits.
- *      val = PEEK_BITS(n);
- *		Fetch next N bits without removing them from the buffer.
- *	DROP_BITS(n);
- *		Discard next N bits.
- * The value N should be a simple variable, not an expression, because it
- * is evaluated multiple times.
- */
-
-#define CHECK_BIT_BUFFER(state,nbits,action) \
-	{ if (bits_left < (nbits)) {  \
-	    if (! jpeg_fill_bit_buffer(&(state),get_buffer,bits_left,nbits))  \
-	      { action; }  \
-	    get_buffer = (state).get_buffer; bits_left = (state).bits_left; } }
-
-#define GET_BITS(nbits) \
-	(((int) (get_buffer >> (bits_left -= (nbits)))) & ((1<<(nbits))-1))
-
-#define PEEK_BITS(nbits) \
-	(((int) (get_buffer >> (bits_left -  (nbits)))) & ((1<<(nbits))-1))
-
-#define DROP_BITS(nbits) \
-	(bits_left -= (nbits))
-
-/* Load up the bit buffer to a depth of at least nbits */
-EXTERN(boolean) jpeg_fill_bit_buffer
-	JPP((bitread_working_state * state, register bit_buf_type get_buffer,
-	     register int bits_left, int nbits));
-
-
-/*
- * Code for extracting next Huffman-coded symbol from input bit stream.
- * Again, this is time-critical and we make the main paths be macros.
- *
- * We use a lookahead table to process codes of up to HUFF_LOOKAHEAD bits
- * without looping.  Usually, more than 95% of the Huffman codes will be 8
- * or fewer bits long.  The few overlength codes are handled with a loop,
- * which need not be inline code.
- *
- * Notes about the HUFF_DECODE macro:
- * 1. Near the end of the data segment, we may fail to get enough bits
- *    for a lookahead.  In that case, we do it the hard way.
- * 2. If the lookahead table contains no entry, the next code must be
- *    more than HUFF_LOOKAHEAD bits long.
- * 3. jpeg_huff_decode returns -1 if forced to suspend.
- */
-
-#define HUFF_DECODE(result,state,htbl,failaction,slowlabel) \
-{ register int nb, look; \
-  if (bits_left < HUFF_LOOKAHEAD) { \
-    if (! jpeg_fill_bit_buffer(&state,get_buffer,bits_left, 0)) {failaction;} \
-    get_buffer = state.get_buffer; bits_left = state.bits_left; \
-    if (bits_left < HUFF_LOOKAHEAD) { \
-      nb = 1; goto slowlabel; \
-    } \
-  } \
-  look = PEEK_BITS(HUFF_LOOKAHEAD); \
-  if ((nb = htbl->look_nbits[look]) != 0) { \
-    DROP_BITS(nb); \
-    result = htbl->look_sym[look]; \
-  } else { \
-    nb = HUFF_LOOKAHEAD+1; \
-slowlabel: \
-    if ((result=jpeg_huff_decode(&state,get_buffer,bits_left,htbl,nb)) < 0) \
-	{ failaction; } \
-    get_buffer = state.get_buffer; bits_left = state.bits_left; \
-  } \
-}
-
-/* Out-of-line case for Huffman code fetching */
-EXTERN(int) jpeg_huff_decode
-	JPP((bitread_working_state * state, register bit_buf_type get_buffer,
-	     register int bits_left, d_derived_tbl * htbl, int min_bits));
diff --git a/Utilities/CAI/cai_dll/inc/jerror.h b/Utilities/CAI/cai_dll/inc/jerror.h
deleted file mode 100755
index fc2fffeac2..0000000000
--- a/Utilities/CAI/cai_dll/inc/jerror.h
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * jerror.h
- *
- * Copyright (C) 1994-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file defines the error and message codes for the JPEG library.
- * Edit this file to add new codes, or to translate the message strings to
- * some other language.
- * A set of error-reporting macros are defined too.  Some applications using
- * the JPEG library may wish to include this file to get the error codes
- * and/or the macros.
- */
-
-/*
- * To define the enum list of message codes, include this file without
- * defining macro JMESSAGE.  To create a message string table, include it
- * again with a suitable JMESSAGE definition (see jerror.c for an example).
- */
-#ifndef JMESSAGE
-#ifndef JERROR_H
-/* First time through, define the enum list */
-#define JMAKE_ENUM_LIST
-#else
-/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */
-#define JMESSAGE(code,string)
-#endif /* JERROR_H */
-#endif /* JMESSAGE */
-
-#ifdef JMAKE_ENUM_LIST
-
-typedef enum {
-
-#define JMESSAGE(code,string)	code ,
-
-#endif /* JMAKE_ENUM_LIST */
-
-JMESSAGE(JMSG_NOMESSAGE, "Bogus message code %d") /* Must be first entry! */
-
-/* For maintenance convenience, list is alphabetical by message code name */
-JMESSAGE(JERR_ARITH_NOTIMPL,
-	 "Sorry, there are legal restrictions on arithmetic coding")
-JMESSAGE(JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix")
-JMESSAGE(JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix")
-JMESSAGE(JERR_BAD_BUFFER_MODE, "Bogus buffer control mode")
-JMESSAGE(JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS")
-JMESSAGE(JERR_BAD_DCT_COEF, "DCT coefficient out of range")
-JMESSAGE(JERR_BAD_DCTSIZE, "IDCT output block size %d not supported")
-JMESSAGE(JERR_BAD_HUFF_TABLE, "Bogus Huffman table definition")
-JMESSAGE(JERR_BAD_IN_COLORSPACE, "Bogus input colorspace")
-JMESSAGE(JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace")
-JMESSAGE(JERR_BAD_LENGTH, "Bogus marker length")
-JMESSAGE(JERR_BAD_LIB_VERSION,
-	 "Wrong JPEG library version: library is %d, caller expects %d")
-JMESSAGE(JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan")
-JMESSAGE(JERR_BAD_POOL_ID, "Invalid memory pool code %d")
-JMESSAGE(JERR_BAD_PRECISION, "Unsupported JPEG data precision %d")
-JMESSAGE(JERR_BAD_PROGRESSION,
-	 "Invalid progressive parameters Ss=%d Se=%d Ah=%d Al=%d")
-JMESSAGE(JERR_BAD_PROG_SCRIPT,
-	 "Invalid progressive parameters at scan script entry %d")
-JMESSAGE(JERR_BAD_SAMPLING, "Bogus sampling factors")
-JMESSAGE(JERR_BAD_SCAN_SCRIPT, "Invalid scan script at entry %d")
-JMESSAGE(JERR_BAD_STATE, "Improper call to JPEG library in state %d")
-JMESSAGE(JERR_BAD_STRUCT_SIZE,
-	 "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u")
-JMESSAGE(JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access")
-JMESSAGE(JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small")
-JMESSAGE(JERR_CANT_SUSPEND, "Suspension not allowed here")
-JMESSAGE(JERR_CCIR601_NOTIMPL, "CCIR601 sampling not implemented yet")
-JMESSAGE(JERR_COMPONENT_COUNT, "Too many color components: %d, max %d")
-JMESSAGE(JERR_CONVERSION_NOTIMPL, "Unsupported color conversion request")
-JMESSAGE(JERR_DAC_INDEX, "Bogus DAC index %d")
-JMESSAGE(JERR_DAC_VALUE, "Bogus DAC value 0x%x")
-JMESSAGE(JERR_DHT_INDEX, "Bogus DHT index %d")
-JMESSAGE(JERR_DQT_INDEX, "Bogus DQT index %d")
-JMESSAGE(JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)")
-JMESSAGE(JERR_EMS_READ, "Read from EMS failed")
-JMESSAGE(JERR_EMS_WRITE, "Write to EMS failed")
-JMESSAGE(JERR_EOI_EXPECTED, "Didn't expect more than one scan")
-JMESSAGE(JERR_FILE_READ, "Input file read error")
-JMESSAGE(JERR_FILE_WRITE, "Output file write error --- out of disk space?")
-JMESSAGE(JERR_FRACT_SAMPLE_NOTIMPL, "Fractional sampling not implemented yet")
-JMESSAGE(JERR_HUFF_CLEN_OVERFLOW, "Huffman code size table overflow")
-JMESSAGE(JERR_HUFF_MISSING_CODE, "Missing Huffman code table entry")
-JMESSAGE(JERR_IMAGE_TOO_BIG, "Maximum supported image dimension is %u pixels")
-JMESSAGE(JERR_INPUT_EMPTY, "Empty input file")
-JMESSAGE(JERR_INPUT_EOF, "Premature end of input file")
-JMESSAGE(JERR_MISMATCHED_QUANT_TABLE,
-	 "Cannot transcode due to multiple use of quantization table %d")
-JMESSAGE(JERR_MISSING_DATA, "Scan script does not transmit all data")
-JMESSAGE(JERR_MODE_CHANGE, "Invalid color quantization mode change")
-JMESSAGE(JERR_NOTIMPL, "Not implemented yet")
-JMESSAGE(JERR_NOT_COMPILED, "Requested feature was omitted at compile time")
-JMESSAGE(JERR_NO_BACKING_STORE, "Backing store not supported")
-JMESSAGE(JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined")
-JMESSAGE(JERR_NO_IMAGE, "JPEG datastream contains no image")
-JMESSAGE(JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined")
-JMESSAGE(JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x")
-JMESSAGE(JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)")
-JMESSAGE(JERR_QUANT_COMPONENTS,
-	 "Cannot quantize more than %d color components")
-JMESSAGE(JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors")
-JMESSAGE(JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors")
-JMESSAGE(JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers")
-JMESSAGE(JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker")
-JMESSAGE(JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x")
-JMESSAGE(JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers")
-JMESSAGE(JERR_SOS_NO_SOF, "Invalid JPEG file structure: SOS before SOF")
-JMESSAGE(JERR_TFILE_CREATE, "Failed to create temporary file %s")
-JMESSAGE(JERR_TFILE_READ, "Read failed on temporary file")
-JMESSAGE(JERR_TFILE_SEEK, "Seek failed on temporary file")
-JMESSAGE(JERR_TFILE_WRITE,
-	 "Write failed on temporary file --- out of disk space?")
-JMESSAGE(JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines")
-JMESSAGE(JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x")
-JMESSAGE(JERR_VIRTUAL_BUG, "Virtual array controller messed up")
-JMESSAGE(JERR_WIDTH_OVERFLOW, "Image too wide for this implementation")
-JMESSAGE(JERR_XMS_READ, "Read from XMS failed")
-JMESSAGE(JERR_XMS_WRITE, "Write to XMS failed")
-JMESSAGE(JMSG_COPYRIGHT, JCOPYRIGHT)
-JMESSAGE(JMSG_VERSION, JVERSION)
-JMESSAGE(JTRC_16BIT_TABLES,
-	 "Caution: quantization tables are too coarse for baseline JPEG")
-JMESSAGE(JTRC_ADOBE,
-	 "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d")
-JMESSAGE(JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u")
-JMESSAGE(JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u")
-JMESSAGE(JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x")
-JMESSAGE(JTRC_DHT, "Define Huffman Table 0x%02x")
-JMESSAGE(JTRC_DQT, "Define Quantization Table %d  precision %d")
-JMESSAGE(JTRC_DRI, "Define Restart Interval %u")
-JMESSAGE(JTRC_EMS_CLOSE, "Freed EMS handle %u")
-JMESSAGE(JTRC_EMS_OPEN, "Obtained EMS handle %u")
-JMESSAGE(JTRC_EOI, "End Of Image")
-JMESSAGE(JTRC_HUFFBITS, "        %3d %3d %3d %3d %3d %3d %3d %3d")
-JMESSAGE(JTRC_JFIF, "JFIF APP0 marker: version %d.%02d, density %dx%d  %d")
-JMESSAGE(JTRC_JFIF_BADTHUMBNAILSIZE,
-	 "Warning: thumbnail image size does not match data length %u")
-JMESSAGE(JTRC_JFIF_EXTENSION,
-	 "JFIF extension marker: type 0x%02x, length %u")
-JMESSAGE(JTRC_JFIF_THUMBNAIL, "    with %d x %d thumbnail image")
-JMESSAGE(JTRC_MISC_MARKER, "Miscellaneous marker 0x%02x, length %u")
-JMESSAGE(JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x")
-JMESSAGE(JTRC_QUANTVALS, "        %4u %4u %4u %4u %4u %4u %4u %4u")
-JMESSAGE(JTRC_QUANT_3_NCOLORS, "Quantizing to %d = %d*%d*%d colors")
-JMESSAGE(JTRC_QUANT_NCOLORS, "Quantizing to %d colors")
-JMESSAGE(JTRC_QUANT_SELECTED, "Selected %d colors for quantization")
-JMESSAGE(JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d")
-JMESSAGE(JTRC_RST, "RST%d")
-JMESSAGE(JTRC_SMOOTH_NOTIMPL,
-	 "Smoothing not supported with nonstandard sampling ratios")
-JMESSAGE(JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d")
-JMESSAGE(JTRC_SOF_COMPONENT, "    Component %d: %dhx%dv q=%d")
-JMESSAGE(JTRC_SOI, "Start of Image")
-JMESSAGE(JTRC_SOS, "Start Of Scan: %d components")
-JMESSAGE(JTRC_SOS_COMPONENT, "    Component %d: dc=%d ac=%d")
-JMESSAGE(JTRC_SOS_PARAMS, "  Ss=%d, Se=%d, Ah=%d, Al=%d")
-JMESSAGE(JTRC_TFILE_CLOSE, "Closed temporary file %s")
-JMESSAGE(JTRC_TFILE_OPEN, "Opened temporary file %s")
-JMESSAGE(JTRC_THUMB_JPEG,
-	 "JFIF extension marker: JPEG-compressed thumbnail image, length %u")
-JMESSAGE(JTRC_THUMB_PALETTE,
-	 "JFIF extension marker: palette thumbnail image, length %u")
-JMESSAGE(JTRC_THUMB_RGB,
-	 "JFIF extension marker: RGB thumbnail image, length %u")
-JMESSAGE(JTRC_UNKNOWN_IDS,
-	 "Unrecognized component IDs %d %d %d, assuming YCbCr")
-JMESSAGE(JTRC_XMS_CLOSE, "Freed XMS handle %u")
-JMESSAGE(JTRC_XMS_OPEN, "Obtained XMS handle %u")
-JMESSAGE(JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d")
-JMESSAGE(JWRN_BOGUS_PROGRESSION,
-	 "Inconsistent progression sequence for component %d coefficient %d")
-JMESSAGE(JWRN_EXTRANEOUS_DATA,
-	 "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x")
-JMESSAGE(JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment")
-JMESSAGE(JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code")
-JMESSAGE(JWRN_JFIF_MAJOR, "Warning: unknown JFIF revision number %d.%02d")
-JMESSAGE(JWRN_JPEG_EOF, "Premature end of JPEG file")
-JMESSAGE(JWRN_MUST_RESYNC,
-	 "Corrupt JPEG data: found marker 0x%02x instead of RST%d")
-JMESSAGE(JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG")
-JMESSAGE(JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines")
-
-#ifdef JMAKE_ENUM_LIST
-
-  JMSG_LASTMSGCODE
-} J_MESSAGE_CODE;
-
-#undef JMAKE_ENUM_LIST
-#endif /* JMAKE_ENUM_LIST */
-
-/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */
-#undef JMESSAGE
-
-
-#ifndef JERROR_H
-#define JERROR_H
-
-/* Macros to simplify using the error and trace message stuff */
-/* The first parameter is either type of cinfo pointer */
-
-/* Fatal errors (print message and exit) */
-#define ERREXIT(cinfo,code)  \
-  ((cinfo)->err->msg_code = (code), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-#define ERREXIT1(cinfo,code,p1)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-#define ERREXIT2(cinfo,code,p1,p2)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (cinfo)->err->msg_parm.i[1] = (p2), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-#define ERREXIT3(cinfo,code,p1,p2,p3)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (cinfo)->err->msg_parm.i[1] = (p2), \
-   (cinfo)->err->msg_parm.i[2] = (p3), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-#define ERREXIT4(cinfo,code,p1,p2,p3,p4)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (cinfo)->err->msg_parm.i[1] = (p2), \
-   (cinfo)->err->msg_parm.i[2] = (p3), \
-   (cinfo)->err->msg_parm.i[3] = (p4), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-#define ERREXITS(cinfo,code,str)  \
-  ((cinfo)->err->msg_code = (code), \
-   strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-
-#define MAKESTMT(stuff)		do { stuff } while (0)
-
-/* Nonfatal errors (we can keep going, but the data is probably corrupt) */
-#define WARNMS(cinfo,code)  \
-  ((cinfo)->err->msg_code = (code), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1))
-#define WARNMS1(cinfo,code,p1)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1))
-#define WARNMS2(cinfo,code,p1,p2)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (cinfo)->err->msg_parm.i[1] = (p2), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1))
-
-/* Informational/debugging messages */
-#define TRACEMS(cinfo,lvl,code)  \
-  ((cinfo)->err->msg_code = (code), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
-#define TRACEMS1(cinfo,lvl,code,p1)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
-#define TRACEMS2(cinfo,lvl,code,p1,p2)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (cinfo)->err->msg_parm.i[1] = (p2), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
-#define TRACEMS3(cinfo,lvl,code,p1,p2,p3)  \
-  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
-	   _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); \
-	   (cinfo)->err->msg_code = (code); \
-	   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
-#define TRACEMS4(cinfo,lvl,code,p1,p2,p3,p4)  \
-  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
-	   _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \
-	   (cinfo)->err->msg_code = (code); \
-	   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
-#define TRACEMS5(cinfo,lvl,code,p1,p2,p3,p4,p5)  \
-  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
-	   _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \
-	   _mp[4] = (p5); \
-	   (cinfo)->err->msg_code = (code); \
-	   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
-#define TRACEMS8(cinfo,lvl,code,p1,p2,p3,p4,p5,p6,p7,p8)  \
-  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
-	   _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \
-	   _mp[4] = (p5); _mp[5] = (p6); _mp[6] = (p7); _mp[7] = (p8); \
-	   (cinfo)->err->msg_code = (code); \
-	   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
-#define TRACEMSS(cinfo,lvl,code,str)  \
-  ((cinfo)->err->msg_code = (code), \
-   strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
-
-#endif /* JERROR_H */
diff --git a/Utilities/CAI/cai_dll/inc/jinclude.h b/Utilities/CAI/cai_dll/inc/jinclude.h
deleted file mode 100755
index 0a4f15146a..0000000000
--- a/Utilities/CAI/cai_dll/inc/jinclude.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * jinclude.h
- *
- * Copyright (C) 1991-1994, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file exists to provide a single place to fix any problems with
- * including the wrong system include files.  (Common problems are taken
- * care of by the standard jconfig symbols, but on really weird systems
- * you may have to edit this file.)
- *
- * NOTE: this file is NOT intended to be included by applications using the
- * JPEG library.  Most applications need only include jpeglib.h.
- */
-
-
-/* Include auto-config file to find out which system include files we need. */
-
-#include "jconfig.h"		/* auto configuration options */
-#define JCONFIG_INCLUDED	/* so that jpeglib.h doesn't do it again */
-
-/*
- * We need the NULL macro and size_t typedef.
- * On an ANSI-conforming system it is sufficient to include <stddef.h>.
- * Otherwise, we get them from <stdlib.h> or <stdio.h>; we may have to
- * pull in <sys/types.h> as well.
- * Note that the core JPEG library does not require <stdio.h>;
- * only the default error handler and data source/destination modules do.
- * But we must pull it in because of the references to FILE in jpeglib.h.
- * You can remove those references if you want to compile without <stdio.h>.
- */
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#ifdef NEED_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#include <stdio.h>
-
-/*
- * We need memory copying and zeroing functions, plus strncpy().
- * ANSI and System V implementations declare these in <string.h>.
- * BSD doesn't have the mem() functions, but it does have bcopy()/bzero().
- * Some systems may declare memset and memcpy in <memory.h>.
- *
- * NOTE: we assume the size parameters to these functions are of type size_t.
- * Change the casts in these macros if not!
- */
-
-#ifdef NEED_BSD_STRINGS
-
-#include <strings.h>
-#define MEMZERO(target,size)	bzero((void *)(target), (size_t)(size))
-#define MEMCOPY(dest,src,size)	bcopy((const void *)(src), (void *)(dest), (size_t)(size))
-
-#else /* not BSD, assume ANSI/SysV string lib */
-
-#include <string.h>
-#define MEMZERO(target,size)	memset((void *)(target), 0, (size_t)(size))
-#define MEMCOPY(dest,src,size)	memcpy((void *)(dest), (const void *)(src), (size_t)(size))
-
-#endif
-
-/*
- * In ANSI C, and indeed any rational implementation, size_t is also the
- * type returned by sizeof().  However, it seems there are some irrational
- * implementations out there, in which sizeof() returns an int even though
- * size_t is defined as long or unsigned long.  To ensure consistent results
- * we always use this SIZEOF() macro in place of using sizeof() directly.
- */
-
-#define SIZEOF(object)	((size_t) sizeof(object))
-
-/*
- * The modules that use fread() and fwrite() always invoke them through
- * these macros.  On some systems you may need to twiddle the argument casts.
- * CAUTION: argument order is different from underlying functions!
- */
-
-#define JFREAD(file,buf,sizeofbuf)  \
-  ((size_t) fread((void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file)))
-#define JFWRITE(file,buf,sizeofbuf)  \
-  ((size_t) fwrite((const void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file)))
diff --git a/Utilities/CAI/cai_dll/inc/jmemsys.h b/Utilities/CAI/cai_dll/inc/jmemsys.h
deleted file mode 100755
index 6d4c7f2ae4..0000000000
--- a/Utilities/CAI/cai_dll/inc/jmemsys.h
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * jmemsys.h
- *
- * Copyright (C) 1992-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This include file defines the interface between the system-independent
- * and system-dependent portions of the JPEG memory manager.  No other
- * modules need include it.  (The system-independent portion is jmemmgr.c;
- * there are several different versions of the system-dependent portion.)
- *
- * This file works as-is for the system-dependent memory managers supplied
- * in the IJG distribution.  You may need to modify it if you write a
- * custom memory manager.  If system-dependent changes are needed in
- * this file, the best method is to #ifdef them based on a configuration
- * symbol supplied in jconfig.h, as we have done with USE_MSDOS_MEMMGR.
- */
-
-
-/* Short forms of external names for systems with brain-damaged linkers. */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jpeg_get_small		jGetSmall
-#define jpeg_free_small		jFreeSmall
-#define jpeg_get_large		jGetLarge
-#define jpeg_free_large		jFreeLarge
-#define jpeg_mem_available	jMemAvail
-#define jpeg_open_backing_store	jOpenBackStore
-#define jpeg_mem_init		jMemInit
-#define jpeg_mem_term		jMemTerm
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-
-/*
- * These two functions are used to allocate and release small chunks of
- * memory.  (Typically the total amount requested through jpeg_get_small is
- * no more than 20K or so; this will be requested in chunks of a few K each.)
- * Behavior should be the same as for the standard library functions malloc
- * and free; in particular, jpeg_get_small must return NULL on failure.
- * On most systems, these ARE malloc and free.  jpeg_free_small is passed the
- * size of the object being freed, just in case it's needed.
- * On an 80x86 machine using small-data memory model, these manage near heap.
- */
-
-EXTERN(void *) jpeg_get_small JPP((j_common_ptr cinfo, size_t sizeofobject));
-EXTERN(void) jpeg_free_small JPP((j_common_ptr cinfo, void * object,
-				  size_t sizeofobject));
-
-/*
- * These two functions are used to allocate and release large chunks of
- * memory (up to the total free space designated by jpeg_mem_available).
- * The interface is the same as above, except that on an 80x86 machine,
- * far pointers are used.  On most other machines these are identical to
- * the jpeg_get/free_small routines; but we keep them separate anyway,
- * in case a different allocation strategy is desirable for large chunks.
- */
-
-EXTERN(void FAR *) jpeg_get_large JPP((j_common_ptr cinfo,
-				       size_t sizeofobject));
-EXTERN(void) jpeg_free_large JPP((j_common_ptr cinfo, void FAR * object,
-				  size_t sizeofobject));
-
-/*
- * The macro MAX_ALLOC_CHUNK designates the maximum number of bytes that may
- * be requested in a single call to jpeg_get_large (and jpeg_get_small for that
- * matter, but that case should never come into play).  This macro is needed
- * to model the 64Kb-segment-size limit of far addressing on 80x86 machines.
- * On those machines, we expect that jconfig.h will provide a proper value.
- * On machines with 32-bit flat address spaces, any large constant may be used.
- *
- * NB: jmemmgr.c expects that MAX_ALLOC_CHUNK will be representable as type
- * size_t and will be a multiple of sizeof(align_type).
- */
-
-#ifndef MAX_ALLOC_CHUNK		/* may be overridden in jconfig.h */
-#define MAX_ALLOC_CHUNK  1000000000L
-#endif
-
-/*
- * This routine computes the total space still available for allocation by
- * jpeg_get_large.  If more space than this is needed, backing store will be
- * used.  NOTE: any memory already allocated must not be counted.
- *
- * There is a minimum space requirement, corresponding to the minimum
- * feasible buffer sizes; jmemmgr.c will request that much space even if
- * jpeg_mem_available returns zero.  The maximum space needed, enough to hold
- * all working storage in memory, is also passed in case it is useful.
- * Finally, the total space already allocated is passed.  If no better
- * method is available, cinfo->mem->max_memory_to_use - already_allocated
- * is often a suitable calculation.
- *
- * It is OK for jpeg_mem_available to underestimate the space available
- * (that'll just lead to more backing-store access than is really necessary).
- * However, an overestimate will lead to failure.  Hence it's wise to subtract
- * a slop factor from the true available space.  5% should be enough.
- *
- * On machines with lots of virtual memory, any large constant may be returned.
- * Conversely, zero may be returned to always use the minimum amount of memory.
- */
-
-EXTERN(long) jpeg_mem_available JPP((j_common_ptr cinfo,
-				     long min_bytes_needed,
-				     long max_bytes_needed,
-				     long already_allocated));
-
-
-/*
- * This structure holds whatever state is needed to access a single
- * backing-store object.  The read/write/close method pointers are called
- * by jmemmgr.c to manipulate the backing-store object; all other fields
- * are private to the system-dependent backing store routines.
- */
-
-#define TEMP_NAME_LENGTH   64	/* max length of a temporary file's name */
-
-#ifdef USE_MSDOS_MEMMGR		/* DOS-specific junk */
-
-typedef unsigned short XMSH;	/* type of extended-memory handles */
-typedef unsigned short EMSH;	/* type of expanded-memory handles */
-
-typedef union {
-  short file_handle;		/* DOS file handle if it's a temp file */
-  XMSH xms_handle;		/* handle if it's a chunk of XMS */
-  EMSH ems_handle;		/* handle if it's a chunk of EMS */
-} handle_union;
-
-#endif /* USE_MSDOS_MEMMGR */
-
-typedef struct backing_store_struct * backing_store_ptr;
-
-typedef struct backing_store_struct {
-  /* Methods for reading/writing/closing this backing-store object */
-  JMETHOD(void, read_backing_store, (j_common_ptr cinfo,
-				     backing_store_ptr info,
-				     void FAR * buffer_address,
-				     long file_offset, long byte_count));
-  JMETHOD(void, write_backing_store, (j_common_ptr cinfo,
-				      backing_store_ptr info,
-				      void FAR * buffer_address,
-				      long file_offset, long byte_count));
-  JMETHOD(void, close_backing_store, (j_common_ptr cinfo,
-				      backing_store_ptr info));
-
-  /* Private fields for system-dependent backing-store management */
-#ifdef USE_MSDOS_MEMMGR
-  /* For the MS-DOS manager (jmemdos.c), we need: */
-  handle_union handle;		/* reference to backing-store storage object */
-  char temp_name[TEMP_NAME_LENGTH]; /* name if it's a file */
-#else
-  /* For a typical implementation with temp files, we need: */
-  FILE * temp_file;		/* stdio reference to temp file */
-  char temp_name[TEMP_NAME_LENGTH]; /* name of temp file */
-#endif
-} backing_store_info;
-
-/*
- * Initial opening of a backing-store object.  This must fill in the
- * read/write/close pointers in the object.  The read/write routines
- * may take an error exit if the specified maximum file size is exceeded.
- * (If jpeg_mem_available always returns a large value, this routine can
- * just take an error exit.)
- */
-
-EXTERN(void) jpeg_open_backing_store JPP((j_common_ptr cinfo,
-					  backing_store_ptr info,
-					  long total_bytes_needed));
-
-
-/*
- * These routines take care of any system-dependent initialization and
- * cleanup required.  jpeg_mem_init will be called before anything is
- * allocated (and, therefore, nothing in cinfo is of use except the error
- * manager pointer).  It should return a suitable default value for
- * max_memory_to_use; this may subsequently be overridden by the surrounding
- * application.  (Note that max_memory_to_use is only important if
- * jpeg_mem_available chooses to consult it ... no one else will.)
- * jpeg_mem_term may assume that all requested memory has been freed and that
- * all opened backing-store objects have been closed.
- */
-
-EXTERN(long) jpeg_mem_init JPP((j_common_ptr cinfo));
-EXTERN(void) jpeg_mem_term JPP((j_common_ptr cinfo));
diff --git a/Utilities/CAI/cai_dll/inc/jmorecfg.h b/Utilities/CAI/cai_dll/inc/jmorecfg.h
deleted file mode 100755
index dbd0f14147..0000000000
--- a/Utilities/CAI/cai_dll/inc/jmorecfg.h
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * jmorecfg.h
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains additional configuration options that customize the
- * JPEG software for special applications or support machine-dependent
- * optimizations.  Most users will not need to touch this file.
- */
-
-#ifndef _JMORECFG_H_
-#define _JMORECFG_H_
-
-/*
- * Define BITS_IN_JSAMPLE as either
- *   8   for 8-bit sample values (the usual setting)
- *   12  for 12-bit sample values
- * Only 8 and 12 are legal data precisions for lossy JPEG according to the
- * JPEG standard, and the IJG code does not support anything else!
- * We do not support run-time selection of data precision, sorry.
- */
-
-#define BITS_IN_JSAMPLE  8	/* use 8 or 12 */
-
-
-/*
- * Maximum number of components (color channels) allowed in JPEG image.
- * To meet the letter of the JPEG spec, set this to 255.  However, darn
- * few applications need more than 4 channels (maybe 5 for CMYK + alpha
- * mask).  We recommend 10 as a reasonable compromise; use 4 if you are
- * really short on memory.  (Each allowed component costs a hundred or so
- * bytes of storage, whether actually used in an image or not.)
- */
-
-#define MAX_COMPONENTS  10	/* maximum number of image components */
-
-
-/*
- * Basic data types.
- * You may need to change these if you have a machine with unusual data
- * type sizes; for example, "char" not 8 bits, "short" not 16 bits,
- * or "long" not 32 bits.  We don't care whether "int" is 16 or 32 bits,
- * but it had better be at least 16.
- */
-
-/* Representation of a single sample (pixel element value).
- * We frequently allocate large arrays of these, so it's important to keep
- * them small.  But if you have memory to burn and access to char or short
- * arrays is very slow on your hardware, you might want to change these.
- */
-
-#if BITS_IN_JSAMPLE == 8
-/* JSAMPLE should be the smallest type that will hold the values 0..255.
- * You can use a signed char by having GETJSAMPLE mask it with 0xFF.
- */
-
-#ifdef HAVE_UNSIGNED_CHAR
-
-typedef unsigned char JSAMPLE;
-#define GETJSAMPLE(value)  ((int) (value))
-
-#else /* not HAVE_UNSIGNED_CHAR */
-
-typedef char JSAMPLE;
-#ifdef CHAR_IS_UNSIGNED
-#define GETJSAMPLE(value)  ((int) (value))
-#else
-#define GETJSAMPLE(value)  ((int) (value) & 0xFF)
-#endif /* CHAR_IS_UNSIGNED */
-
-#endif /* HAVE_UNSIGNED_CHAR */
-
-#define MAXJSAMPLE	255
-#define CENTERJSAMPLE	128
-
-#endif /* BITS_IN_JSAMPLE == 8 */
-
-
-#if BITS_IN_JSAMPLE == 12
-/* JSAMPLE should be the smallest type that will hold the values 0..4095.
- * On nearly all machines "short" will do nicely.
- */
-
-typedef short JSAMPLE;
-#define GETJSAMPLE(value)  ((int) (value))
-
-#define MAXJSAMPLE	4095
-#define CENTERJSAMPLE	2048
-
-#endif /* BITS_IN_JSAMPLE == 12 */
-
-
-/* Representation of a DCT frequency coefficient.
- * This should be a signed value of at least 16 bits; "short" is usually OK.
- * Again, we allocate large arrays of these, but you can change to int
- * if you have memory to burn and "short" is really slow.
- */
-
-typedef short JCOEF;
-
-
-/* Compressed datastreams are represented as arrays of JOCTET.
- * These must be EXACTLY 8 bits wide, at least once they are written to
- * external storage.  Note that when using the stdio data source/destination
- * managers, this is also the data type passed to fread/fwrite.
- */
-
-#ifdef HAVE_UNSIGNED_CHAR
-
-typedef unsigned char JOCTET;
-#define GETJOCTET(value)  (value)
-
-#else /* not HAVE_UNSIGNED_CHAR */
-
-typedef char JOCTET;
-#ifdef CHAR_IS_UNSIGNED
-#define GETJOCTET(value)  (value)
-#else
-#define GETJOCTET(value)  ((value) & 0xFF)
-#endif /* CHAR_IS_UNSIGNED */
-
-#endif /* HAVE_UNSIGNED_CHAR */
-
-
-/* These typedefs are used for various table entries and so forth.
- * They must be at least as wide as specified; but making them too big
- * won't cost a huge amount of memory, so we don't provide special
- * extraction code like we did for JSAMPLE.  (In other words, these
- * typedefs live at a different point on the speed/space tradeoff curve.)
- */
-
-/* UINT8 must hold at least the values 0..255. */
-
-#ifdef HAVE_UNSIGNED_CHAR
-typedef unsigned char UINT8;
-#else /* not HAVE_UNSIGNED_CHAR */
-#ifdef CHAR_IS_UNSIGNED
-typedef char UINT8;
-#else /* not CHAR_IS_UNSIGNED */
-typedef short UINT8;
-#endif /* CHAR_IS_UNSIGNED */
-#endif /* HAVE_UNSIGNED_CHAR */
-
-/* UINT16 must hold at least the values 0..65535. */
-
-#ifdef HAVE_UNSIGNED_SHORT
-typedef unsigned short UINT16;
-#else /* not HAVE_UNSIGNED_SHORT */
-typedef unsigned int UINT16;
-#endif /* HAVE_UNSIGNED_SHORT */
-
-/* INT16 must hold at least the values -32768..32767. */
-
-#ifndef XMD_H			/* X11/xmd.h correctly defines INT16 */
-typedef short INT16;
-#endif
-
-/* INT32 must hold at least signed 32-bit values. */
-
-#ifndef XMD_H			/* X11/xmd.h correctly defines INT32 */
-typedef int INT32;
-#endif
-
-/* Datatype used for image dimensions.  The JPEG standard only supports
- * images up to 64K*64K due to 16-bit fields in SOF markers.  Therefore
- * "unsigned int" is sufficient on all machines.  However, if you need to
- * handle larger images and you don't mind deviating from the spec, you
- * can change this datatype.
- */
-
-typedef unsigned int JDIMENSION;
-
-#define JPEG_MAX_DIMENSION  65500L  /* a tad under 64K to prevent overflows */
-
-
-/* These macros are used in all function definitions and extern declarations.
- * You could modify them if you need to change function linkage conventions;
- * in particular, you'll need to do that to make the library a Windows DLL.
- * Another application is to make all functions global for use with debuggers
- * or code profilers that require it.
- */
-
-/* a function called through method pointers: */
-#define METHODDEF(type)		static type
-/* a function used only in its module: */
-#define LOCAL(type)		static type
-/* a function referenced thru EXTERNs: */
-#define GLOBAL(type)		type
-/* a reference to a GLOBAL function: */
-#define EXTERN(type)		extern type
-
-
-/* This macro is used to declare a "method", that is, a function pointer.
- * We want to supply prototype parameters if the compiler can cope.
- * Note that the arglist parameter must be parenthesized!
- * Again, you can customize this if you need special linkage keywords.
- */
-
-#ifdef HAVE_PROTOTYPES
-#define JMETHOD(type,methodname,arglist)  type (*methodname) arglist
-#else
-#define JMETHOD(type,methodname,arglist)  type (*methodname) ()
-#endif
-
-
-/* Here is the pseudo-keyword for declaring pointers that must be "far"
- * on 80x86 machines.  Most of the specialized coding for 80x86 is handled
- * by just saying "FAR *" where such a pointer is needed.  In a few places
- * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol.
- */
-
-#ifndef FAR
-#ifdef NEED_FAR_POINTERS
-#define FAR  far
-#else
-#define FAR
-#endif
-#endif
-
-
-/*
- * On a few systems, type boolean and/or its values FALSE, TRUE may appear
- * in standard header files.  Or you may have conflicts with application-
- * specific header files that you want to include together with these files.
- * Defining HAVE_BOOLEAN before including jpeglib.h should make it work.
- */
-
-#ifndef HAVE_BOOLEAN
-typedef int boolean;
-#endif
-#ifndef FALSE			/* in case these macros already exist */
-#define FALSE	0		/* values of boolean */
-#endif
-#ifndef TRUE
-#define TRUE	1
-#endif
-
-
-/*
- * The remaining options affect code selection within the JPEG library,
- * but they don't need to be visible to most applications using the library.
- * To minimize application namespace pollution, the symbols won't be
- * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined.
- */
-
-#ifdef JPEG_INTERNALS
-#define JPEG_INTERNAL_OPTIONS
-#endif
-
-#ifdef JPEG_INTERNAL_OPTIONS
-
-
-/*
- * These defines indicate whether to include various optional functions.
- * Undefining some of these symbols will produce a smaller but less capable
- * library.  Note that you can leave certain source files out of the
- * compilation/linking process if you've #undef'd the corresponding symbols.
- * (You may HAVE to do that if your compiler doesn't like null source files.)
- */
-
-/* Arithmetic coding is unsupported for legal reasons.  Complaints to IBM. */
-
-/* Capability options common to encoder and decoder: */
-
-#define DCT_ISLOW_SUPPORTED	/* slow but accurate integer algorithm */
-#define DCT_IFAST_SUPPORTED	/* faster, less accurate integer method */
-#define DCT_FLOAT_SUPPORTED	/* floating-point: accurate, fast on fast HW */
-
-/* Encoder capability options: */
-
-#undef  C_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */
-#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
-#define C_PROGRESSIVE_SUPPORTED	    /* Progressive JPEG? (Requires MULTISCAN)*/
-#define ENTROPY_OPT_SUPPORTED	    /* Optimization of entropy coding parms? */
-/* Note: if you selected 12-bit data precision, it is dangerous to turn off
- * ENTROPY_OPT_SUPPORTED.  The standard Huffman tables are only good for 8-bit
- * precision, so jchuff.c normally uses entropy optimization to compute
- * usable tables for higher precision.  If you don't want to do optimization,
- * you'll have to supply different default Huffman tables.
- * The exact same statements apply for progressive JPEG: the default tables
- * don't work for progressive mode.  (This may get fixed, however.)
- */
-#define INPUT_SMOOTHING_SUPPORTED   /* Input image smoothing option? */
-
-/* Decoder capability options: */
-
-#undef  D_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */
-#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
-#define D_PROGRESSIVE_SUPPORTED	    /* Progressive JPEG? (Requires MULTISCAN)*/
-#define SAVE_MARKERS_SUPPORTED	    /* jpeg_save_markers() needed? */
-#define BLOCK_SMOOTHING_SUPPORTED   /* Block smoothing? (Progressive only) */
-#define IDCT_SCALING_SUPPORTED	    /* Output rescaling via IDCT? */
-#undef  UPSAMPLE_SCALING_SUPPORTED  /* Output rescaling at upsample stage? */
-#define UPSAMPLE_MERGING_SUPPORTED  /* Fast path for sloppy upsampling? */
-#define QUANT_1PASS_SUPPORTED	    /* 1-pass color quantization? */
-#define QUANT_2PASS_SUPPORTED	    /* 2-pass color quantization? */
-
-/* more capability options later, no doubt */
-
-
-/*
- * Ordering of RGB data in scanlines passed to or from the application.
- * If your application wants to deal with data in the order B,G,R, just
- * change these macros.  You can also deal with formats such as R,G,B,X
- * (one extra byte per pixel) by changing RGB_PIXELSIZE.  Note that changing
- * the offsets will also change the order in which colormap data is organized.
- * RESTRICTIONS:
- * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats.
- * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not
- *    useful if you are using JPEG color spaces other than YCbCr or grayscale.
- * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE
- *    is not 3 (they don't understand about dummy color components!).  So you
- *    can't use color quantization if you change that value.
- */
-
-#define RGB_RED		0	/* Offset of Red in an RGB scanline element */
-#define RGB_GREEN	1	/* Offset of Green */
-#define RGB_BLUE	2	/* Offset of Blue */
-#define RGB_PIXELSIZE	3	/* JSAMPLEs per RGB scanline element */
-
-
-/* Definitions for speed-related optimizations. */
-
-
-/* If your compiler supports inline functions, define INLINE
- * as the inline keyword; otherwise define it as empty.
- */
-
-#ifndef INLINE
-#ifdef __GNUC__			/* for instance, GNU C knows about inline */
-#define INLINE __inline__
-#endif
-#ifndef INLINE
-#define INLINE			/* default is to define it as empty */
-#endif
-#endif
-
-
-/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying
- * two 16-bit shorts is faster than multiplying two ints.  Define MULTIPLIER
- * as short on such a machine.  MULTIPLIER must be at least 16 bits wide.
- */
-
-#ifndef MULTIPLIER
-#define MULTIPLIER  int		/* type for fastest integer multiply */
-#endif
-
-
-/* FAST_FLOAT should be either float or double, whichever is done faster
- * by your compiler.  (Note that this type is only used in the floating point
- * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.)
- * Typically, float is faster in ANSI C compilers, while double is faster in
- * pre-ANSI compilers (because they insist on converting to double anyway).
- * The code below therefore chooses float if we have ANSI-style prototypes.
- */
-
-#ifndef FAST_FLOAT
-#ifdef HAVE_PROTOTYPES
-#define FAST_FLOAT  float
-#else
-#define FAST_FLOAT  double
-#endif
-#endif
-
-#endif /* JPEG_INTERNAL_OPTIONS */
-
-#endif
\ No newline at end of file
diff --git a/Utilities/CAI/cai_dll/inc/jpegint.h b/Utilities/CAI/cai_dll/inc/jpegint.h
deleted file mode 100755
index 7ba30c3fa9..0000000000
--- a/Utilities/CAI/cai_dll/inc/jpegint.h
+++ /dev/null
@@ -1,388 +0,0 @@
-/*
- * jpegint.h
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file provides common declarations for the various JPEG modules.
- * These declarations are considered internal to the JPEG library; most
- * applications using the library shouldn't need to include this file.
- */
-
-
-/* Declarations for both compression & decompression */
-
-typedef enum {			/* Operating modes for buffer controllers */
-	JBUF_PASS_THRU,		/* Plain stripwise operation */
-	/* Remaining modes require a full-image buffer to have been created */
-	JBUF_SAVE_SOURCE,	/* Run source subobject only, save output */
-	JBUF_CRANK_DEST,	/* Run dest subobject only, using saved data */
-	JBUF_SAVE_AND_PASS	/* Run both subobjects, save output */
-} J_BUF_MODE;
-
-/* Values of global_state field (jdapi.c has some dependencies on ordering!) */
-#define CSTATE_START	100	/* after create_compress */
-#define CSTATE_SCANNING	101	/* start_compress done, write_scanlines OK */
-#define CSTATE_RAW_OK	102	/* start_compress done, write_raw_data OK */
-#define CSTATE_WRCOEFS	103	/* jpeg_write_coefficients done */
-#define DSTATE_START	200	/* after create_decompress */
-#define DSTATE_INHEADER	201	/* reading header markers, no SOS yet */
-#define DSTATE_READY	202	/* found SOS, ready for start_decompress */
-#define DSTATE_PRELOAD	203	/* reading multiscan file in start_decompress*/
-#define DSTATE_PRESCAN	204	/* performing dummy pass for 2-pass quant */
-#define DSTATE_SCANNING	205	/* start_decompress done, read_scanlines OK */
-#define DSTATE_RAW_OK	206	/* start_decompress done, read_raw_data OK */
-#define DSTATE_BUFIMAGE	207	/* expecting jpeg_start_output */
-#define DSTATE_BUFPOST	208	/* looking for SOS/EOI in jpeg_finish_output */
-#define DSTATE_RDCOEFS	209	/* reading file in jpeg_read_coefficients */
-#define DSTATE_STOPPING	210	/* looking for EOI in jpeg_finish_decompress */
-
-
-/* Declarations for compression modules */
-
-/* Master control module */
-struct jpeg_comp_master {
-  JMETHOD(void, prepare_for_pass, (j_compress_ptr cinfo));
-  JMETHOD(void, pass_startup, (j_compress_ptr cinfo));
-  JMETHOD(void, finish_pass, (j_compress_ptr cinfo));
-
-  /* State variables made visible to other modules */
-  boolean call_pass_startup;	/* True if pass_startup must be called */
-  boolean is_last_pass;		/* True during last pass */
-};
-
-/* Main buffer control (downsampled-data buffer) */
-struct jpeg_c_main_controller {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));
-  JMETHOD(void, process_data, (j_compress_ptr cinfo,
-			       JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
-			       JDIMENSION in_rows_avail));
-};
-
-/* Compression preprocessing (downsampling input buffer control) */
-struct jpeg_c_prep_controller {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));
-  JMETHOD(void, pre_process_data, (j_compress_ptr cinfo,
-				   JSAMPARRAY input_buf,
-				   JDIMENSION *in_row_ctr,
-				   JDIMENSION in_rows_avail,
-				   JSAMPIMAGE output_buf,
-				   JDIMENSION *out_row_group_ctr,
-				   JDIMENSION out_row_groups_avail));
-};
-
-/* Coefficient buffer control */
-struct jpeg_c_coef_controller {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));
-  JMETHOD(boolean, compress_data, (j_compress_ptr cinfo,
-				   JSAMPIMAGE input_buf));
-};
-
-/* Colorspace conversion */
-struct jpeg_color_converter {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo));
-  JMETHOD(void, color_convert, (j_compress_ptr cinfo,
-				JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-				JDIMENSION output_row, int num_rows));
-};
-
-/* Downsampling */
-struct jpeg_downsampler {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo));
-  JMETHOD(void, downsample, (j_compress_ptr cinfo,
-			     JSAMPIMAGE input_buf, JDIMENSION in_row_index,
-			     JSAMPIMAGE output_buf,
-			     JDIMENSION out_row_group_index));
-
-  boolean need_context_rows;	/* TRUE if need rows above & below */
-};
-
-/* Forward DCT (also controls coefficient quantization) */
-struct jpeg_forward_dct {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo));
-  /* perhaps this should be an array??? */
-  JMETHOD(void, forward_DCT, (j_compress_ptr cinfo,
-			      jpeg_component_info * compptr,
-			      JSAMPARRAY sample_data, JBLOCKROW coef_blocks,
-			      JDIMENSION start_row, JDIMENSION start_col,
-			      JDIMENSION num_blocks));
-};
-
-/* Entropy encoding */
-struct jpeg_entropy_encoder {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo, boolean gather_statistics));
-  JMETHOD(boolean, encode_mcu, (j_compress_ptr cinfo, JBLOCKROW *MCU_data));
-  JMETHOD(void, finish_pass, (j_compress_ptr cinfo));
-};
-
-/* Marker writing */
-struct jpeg_marker_writer {
-  /* write_any_marker is exported for use by applications */
-  /* Probably only COM and APPn markers should be written */
-  JMETHOD(void, write_any_marker, (j_compress_ptr cinfo, int marker,
-				   const JOCTET *dataptr, unsigned int datalen));
-  JMETHOD(void, write_file_header, (j_compress_ptr cinfo));
-  JMETHOD(void, write_frame_header, (j_compress_ptr cinfo));
-  JMETHOD(void, write_scan_header, (j_compress_ptr cinfo));
-  JMETHOD(void, write_file_trailer, (j_compress_ptr cinfo));
-  JMETHOD(void, write_tables_only, (j_compress_ptr cinfo));
-};
-
-
-/* Declarations for decompression modules */
-
-/* Master control module */
-struct jpeg_decomp_master {
-  JMETHOD(void, prepare_for_output_pass, (j_decompress_ptr cinfo));
-  JMETHOD(void, finish_output_pass, (j_decompress_ptr cinfo));
-
-  /* State variables made visible to other modules */
-  boolean is_dummy_pass;	/* True during 1st pass for 2-pass quant */
-};
-
-/* Input control module */
-struct jpeg_input_controller {
-  JMETHOD(int, consume_input, (j_decompress_ptr cinfo));
-  JMETHOD(void, reset_input_controller, (j_decompress_ptr cinfo));
-  JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo));
-  JMETHOD(void, finish_input_pass, (j_decompress_ptr cinfo));
-
-  /* State variables made visible to other modules */
-  boolean has_multiple_scans;	/* True if file has multiple scans */
-  boolean eoi_reached;		/* True when EOI has been consumed */
-};
-
-/* Main buffer control (downsampled-data buffer) */
-struct jpeg_d_main_controller {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode));
-  JMETHOD(void, process_data, (j_decompress_ptr cinfo,
-			       JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-			       JDIMENSION out_rows_avail));
-};
-
-/* Coefficient buffer control */
-struct jpeg_d_coef_controller {
-  JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo));
-  JMETHOD(int, consume_data, (j_decompress_ptr cinfo));
-  JMETHOD(void, start_output_pass, (j_decompress_ptr cinfo));
-  JMETHOD(int, decompress_data, (j_decompress_ptr cinfo,
-				 JSAMPIMAGE output_buf));
-  /* Pointer to array of coefficient virtual arrays, or NULL if none */
-  jvirt_barray_ptr *coef_arrays;
-};
-
-/* Decompression postprocessing (color quantization buffer control) */
-struct jpeg_d_post_controller {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode));
-  JMETHOD(void, post_process_data, (j_decompress_ptr cinfo,
-				    JSAMPIMAGE input_buf,
-				    JDIMENSION *in_row_group_ctr,
-				    JDIMENSION in_row_groups_avail,
-				    JSAMPARRAY output_buf,
-				    JDIMENSION *out_row_ctr,
-				    JDIMENSION out_rows_avail));
-};
-
-/* Marker reading & parsing */
-struct jpeg_marker_reader {
-  JMETHOD(void, reset_marker_reader, (j_decompress_ptr cinfo));
-  /* Read markers until SOS or EOI.
-   * Returns same codes as are defined for jpeg_consume_input:
-   * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI.
-   */
-  JMETHOD(int, read_markers, (j_decompress_ptr cinfo));
-  /* Read a restart marker --- exported for use by entropy decoder only */
-  jpeg_marker_parser_method read_restart_marker;
-  /* Application-overridable marker processing methods */
-  jpeg_marker_parser_method process_COM;
-  jpeg_marker_parser_method process_APPn[16];
-
-  /* State of marker reader --- nominally internal, but applications
-   * supplying COM or APPn handlers might like to know the state.
-   */
-  boolean saw_SOI;		/* found SOI? */
-  boolean saw_SOF;		/* found SOF? */
-  int next_restart_num;		/* next restart number expected (0-7) */
-  unsigned int discarded_bytes;	/* # of bytes skipped looking for a marker */
-};
-
-/* Entropy decoding */
-struct jpeg_entropy_decoder {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
-  JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo,
-				JBLOCKROW *MCU_data));
-};
-
-/* Inverse DCT (also performs dequantization) */
-typedef JMETHOD(void, inverse_DCT_method_ptr,
-		(j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		 JCOEFPTR coef_block,
-		 JSAMPARRAY output_buf, JDIMENSION output_col));
-
-struct jpeg_inverse_dct {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
-  /* It is useful to allow each component to have a separate IDCT method. */
-  inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS];
-};
-
-/* Upsampling (note that upsampler must also call color converter) */
-struct jpeg_upsampler {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
-  JMETHOD(void, upsample, (j_decompress_ptr cinfo,
-			   JSAMPIMAGE input_buf,
-			   JDIMENSION *in_row_group_ctr,
-			   JDIMENSION in_row_groups_avail,
-			   JSAMPARRAY output_buf,
-			   JDIMENSION *out_row_ctr,
-			   JDIMENSION out_rows_avail));
-
-  boolean need_context_rows;	/* TRUE if need rows above & below */
-};
-
-/* Colorspace conversion */
-struct jpeg_color_deconverter {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
-  JMETHOD(void, color_convert, (j_decompress_ptr cinfo,
-				JSAMPIMAGE input_buf, JDIMENSION input_row,
-				JSAMPARRAY output_buf, int num_rows));
-};
-
-/* Color quantization or color precision reduction */
-struct jpeg_color_quantizer {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo, boolean is_pre_scan));
-  JMETHOD(void, color_quantize, (j_decompress_ptr cinfo,
-				 JSAMPARRAY input_buf, JSAMPARRAY output_buf,
-				 int num_rows));
-  JMETHOD(void, finish_pass, (j_decompress_ptr cinfo));
-  JMETHOD(void, new_color_map, (j_decompress_ptr cinfo));
-};
-
-
-/* Miscellaneous useful macros */
-
-#undef MAX
-#define MAX(a,b)	((a) > (b) ? (a) : (b))
-#undef MIN
-#define MIN(a,b)	((a) < (b) ? (a) : (b))
-
-
-/* We assume that right shift corresponds to signed division by 2 with
- * rounding towards minus infinity.  This is correct for typical "arithmetic
- * shift" instructions that shift in copies of the sign bit.  But some
- * C compilers implement >> with an unsigned shift.  For these machines you
- * must define RIGHT_SHIFT_IS_UNSIGNED.
- * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity.
- * It is only applied with constant shift counts.  SHIFT_TEMPS must be
- * included in the variables of any routine using RIGHT_SHIFT.
- */
-
-#ifdef RIGHT_SHIFT_IS_UNSIGNED
-#define SHIFT_TEMPS	INT32 shift_temp;
-#define RIGHT_SHIFT(x,shft)  \
-	((shift_temp = (x)) < 0 ? \
-	 (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \
-	 (shift_temp >> (shft)))
-#else
-#define SHIFT_TEMPS
-#define RIGHT_SHIFT(x,shft)	((x) >> (shft))
-#endif
-
-
-/* Short forms of external names for systems with brain-damaged linkers. */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jinit_compress_master	jICompress
-#define jinit_c_master_control	jICMaster
-#define jinit_c_main_controller	jICMainC
-#define jinit_c_prep_controller	jICPrepC
-#define jinit_c_coef_controller	jICCoefC
-#define jinit_color_converter	jICColor
-#define jinit_downsampler	jIDownsampler
-#define jinit_forward_dct	jIFDCT
-#define jinit_huff_encoder	jIHEncoder
-#define jinit_phuff_encoder	jIPHEncoder
-#define jinit_marker_writer	jIMWriter
-#define jinit_master_decompress	jIDMaster
-#define jinit_d_main_controller	jIDMainC
-#define jinit_d_coef_controller	jIDCoefC
-#define jinit_d_post_controller	jIDPostC
-#define jinit_input_controller	jIInCtlr
-#define jinit_marker_reader	jIMReader
-#define jinit_huff_decoder	jIHDecoder
-#define jinit_phuff_decoder	jIPHDecoder
-#define jinit_inverse_dct	jIIDCT
-#define jinit_upsampler		jIUpsampler
-#define jinit_color_deconverter	jIDColor
-#define jinit_1pass_quantizer	jI1Quant
-#define jinit_2pass_quantizer	jI2Quant
-#define jinit_merged_upsampler	jIMUpsampler
-#define jinit_memory_mgr	jIMemMgr
-#define jdiv_round_up		jDivRound
-#define jround_up		jRound
-#define jcopy_sample_rows	jCopySamples
-#define jcopy_block_row		jCopyBlocks
-#define jzero_far		jZeroFar
-#define jpeg_zigzag_order	jZIGTable
-#define jpeg_natural_order	jZAGTable
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-
-/* Compression module initialization routines */
-EXTERN(void) jinit_compress_master JPP((j_compress_ptr cinfo));
-EXTERN(void) jinit_c_master_control JPP((j_compress_ptr cinfo,
-					 boolean transcode_only));
-EXTERN(void) jinit_c_main_controller JPP((j_compress_ptr cinfo,
-					  boolean need_full_buffer));
-EXTERN(void) jinit_c_prep_controller JPP((j_compress_ptr cinfo,
-					  boolean need_full_buffer));
-EXTERN(void) jinit_c_coef_controller JPP((j_compress_ptr cinfo,
-					  boolean need_full_buffer));
-EXTERN(void) jinit_color_converter JPP((j_compress_ptr cinfo));
-EXTERN(void) jinit_downsampler JPP((j_compress_ptr cinfo));
-EXTERN(void) jinit_forward_dct JPP((j_compress_ptr cinfo));
-EXTERN(void) jinit_huff_encoder JPP((j_compress_ptr cinfo));
-EXTERN(void) jinit_phuff_encoder JPP((j_compress_ptr cinfo));
-EXTERN(void) jinit_marker_writer JPP((j_compress_ptr cinfo));
-/* Decompression module initialization routines */
-EXTERN(void) jinit_master_decompress JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_d_main_controller JPP((j_decompress_ptr cinfo,
-					  boolean need_full_buffer));
-EXTERN(void) jinit_d_coef_controller JPP((j_decompress_ptr cinfo,
-					  boolean need_full_buffer));
-EXTERN(void) jinit_d_post_controller JPP((j_decompress_ptr cinfo,
-					  boolean need_full_buffer));
-EXTERN(void) jinit_input_controller JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_marker_reader JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_huff_decoder JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_phuff_decoder JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_inverse_dct JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_upsampler JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_color_deconverter JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_1pass_quantizer JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_2pass_quantizer JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_merged_upsampler JPP((j_decompress_ptr cinfo));
-/* Memory manager initialization */
-EXTERN(void) jinit_memory_mgr JPP((j_common_ptr cinfo));
-
-/* Utility routines in jutils.c */
-EXTERN(long) jdiv_round_up JPP((long a, long b));
-EXTERN(long) jround_up JPP((long a, long b));
-EXTERN(void) jcopy_sample_rows JPP((JSAMPARRAY input_array, int source_row,
-				    JSAMPARRAY output_array, int dest_row,
-				    int num_rows, JDIMENSION num_cols));
-EXTERN(void) jcopy_block_row JPP((JBLOCKROW input_row, JBLOCKROW output_row,
-				  JDIMENSION num_blocks));
-EXTERN(void) jzero_far JPP((void FAR * target, size_t bytestozero));
-/* Constant tables in jutils.c */
-extern const int jpeg_zigzag_order[]; /* natural coef order to zigzag order */
-extern const int jpeg_natural_order[]; /* zigzag coef order to natural order */
-
-/* Suppress undefined-structure complaints if necessary. */
-
-#ifdef INCOMPLETE_TYPES_BROKEN
-#ifndef AM_MEMORY_MANAGER	/* only jmemmgr.c defines these */
-struct jvirt_sarray_control { long dummy; };
-struct jvirt_barray_control { long dummy; };
-#endif
-#endif /* INCOMPLETE_TYPES_BROKEN */
diff --git a/Utilities/CAI/cai_dll/inc/jpeglib.h b/Utilities/CAI/cai_dll/inc/jpeglib.h
deleted file mode 100755
index d1be8ddeff..0000000000
--- a/Utilities/CAI/cai_dll/inc/jpeglib.h
+++ /dev/null
@@ -1,1096 +0,0 @@
-/*
- * jpeglib.h
- *
- * Copyright (C) 1991-1998, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file defines the application interface for the JPEG library.
- * Most applications using the library need only include this file,
- * and perhaps jerror.h if they want to know the exact error codes.
- */
-
-#ifndef JPEGLIB_H
-#define JPEGLIB_H
-
-/*
- * First we include the configuration files that record how this
- * installation of the JPEG library is set up.  jconfig.h can be
- * generated automatically for many systems.  jmorecfg.h contains
- * manual configuration options that most people need not worry about.
- */
-
-#ifndef JCONFIG_INCLUDED	/* in case jinclude.h already did */
-#include "jconfig.h"		/* widely used configuration options */
-#endif
-#include "jmorecfg.h"		/* seldom changed options */
-
-
-/* Version ID for the JPEG library.
- * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60".
- */
-
-#define JPEG_LIB_VERSION  62	/* Version 6b */
-
-
-/* Various constants determining the sizes of things.
- * All of these are specified by the JPEG standard, so don't change them
- * if you want to be compatible.
- */
-
-#define DCTSIZE		    8	/* The basic DCT block is 8x8 samples */
-#define DCTSIZE2	    64	/* DCTSIZE squared; # of elements in a block */
-#define NUM_QUANT_TBLS      4	/* Quantization tables are numbered 0..3 */
-#define NUM_HUFF_TBLS       4	/* Huffman tables are numbered 0..3 */
-#define NUM_ARITH_TBLS      16	/* Arith-coding tables are numbered 0..15 */
-#define MAX_COMPS_IN_SCAN   4	/* JPEG limit on # of components in one scan */
-#define MAX_SAMP_FACTOR     4	/* JPEG limit on sampling factors */
-/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard;
- * the PostScript DCT filter can emit files with many more than 10 blocks/MCU.
- * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU
- * to handle it.  We even let you do this from the jconfig.h file.  However,
- * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe
- * sometimes emits noncompliant files doesn't mean you should too.
- */
-#define C_MAX_BLOCKS_IN_MCU   10 /* compressor's limit on blocks per MCU */
-#ifndef D_MAX_BLOCKS_IN_MCU
-#define D_MAX_BLOCKS_IN_MCU   10 /* decompressor's limit on blocks per MCU */
-#endif
-
-
-/* Data structures for images (arrays of samples and of DCT coefficients).
- * On 80x86 machines, the image arrays are too big for near pointers,
- * but the pointer arrays can fit in near memory.
- */
-
-typedef JSAMPLE FAR *JSAMPROW;	/* ptr to one image row of pixel samples. */
-typedef JSAMPROW *JSAMPARRAY;	/* ptr to some rows (a 2-D sample array) */
-typedef JSAMPARRAY *JSAMPIMAGE;	/* a 3-D sample array: top index is color */
-
-typedef JCOEF JBLOCK[DCTSIZE2];	/* one block of coefficients */
-typedef JBLOCK FAR *JBLOCKROW;	/* pointer to one row of coefficient blocks */
-typedef JBLOCKROW *JBLOCKARRAY;		/* a 2-D array of coefficient blocks */
-typedef JBLOCKARRAY *JBLOCKIMAGE;	/* a 3-D array of coefficient blocks */
-
-typedef JCOEF FAR *JCOEFPTR;	/* useful in a couple of places */
-
-
-/* Types for JPEG compression parameters and working tables. */
-
-
-/* DCT coefficient quantization tables. */
-
-typedef struct {
-  /* This array gives the coefficient quantizers in natural array order
-   * (not the zigzag order in which they are stored in a JPEG DQT marker).
-   * CAUTION: IJG versions prior to v6a kept this array in zigzag order.
-   */
-  UINT16 quantval[DCTSIZE2];	/* quantization step for each coefficient */
-  /* This field is used only during compression.  It's initialized FALSE when
-   * the table is created, and set TRUE when it's been output to the file.
-   * You could suppress output of a table by setting this to TRUE.
-   * (See jpeg_suppress_tables for an example.)
-   */
-  boolean sent_table;		/* TRUE when table has been output */
-} JQUANT_TBL;
-
-
-/* Huffman coding tables. */
-
-typedef struct {
-  /* These two fields directly represent the contents of a JPEG DHT marker */
-  UINT8 bits[17];		/* bits[k] = # of symbols with codes of */
-				/* length k bits; bits[0] is unused */
-  UINT8 huffval[256];		/* The symbols, in order of incr code length */
-  /* This field is used only during compression.  It's initialized FALSE when
-   * the table is created, and set TRUE when it's been output to the file.
-   * You could suppress output of a table by setting this to TRUE.
-   * (See jpeg_suppress_tables for an example.)
-   */
-  boolean sent_table;		/* TRUE when table has been output */
-} JHUFF_TBL;
-
-
-/* Basic info about one component (color channel). */
-
-typedef struct {
-  /* These values are fixed over the whole image. */
-  /* For compression, they must be supplied by parameter setup; */
-  /* for decompression, they are read from the SOF marker. */
-  int component_id;		/* identifier for this component (0..255) */
-  int component_index;		/* its index in SOF or cinfo->comp_info[] */
-  int h_samp_factor;		/* horizontal sampling factor (1..4) */
-  int v_samp_factor;		/* vertical sampling factor (1..4) */
-  int quant_tbl_no;		/* quantization table selector (0..3) */
-  /* These values may vary between scans. */
-  /* For compression, they must be supplied by parameter setup; */
-  /* for decompression, they are read from the SOS marker. */
-  /* The decompressor output side may not use these variables. */
-  int dc_tbl_no;		/* DC entropy table selector (0..3) */
-  int ac_tbl_no;		/* AC entropy table selector (0..3) */
-  
-  /* Remaining fields should be treated as private by applications. */
-  
-  /* These values are computed during compression or decompression startup: */
-  /* Component's size in DCT blocks.
-   * Any dummy blocks added to complete an MCU are not counted; therefore
-   * these values do not depend on whether a scan is interleaved or not.
-   */
-  JDIMENSION width_in_blocks;
-  JDIMENSION height_in_blocks;
-  /* Size of a DCT block in samples.  Always DCTSIZE for compression.
-   * For decompression this is the size of the output from one DCT block,
-   * reflecting any scaling we choose to apply during the IDCT step.
-   * Values of 1,2,4,8 are likely to be supported.  Note that different
-   * components may receive different IDCT scalings.
-   */
-  int DCT_scaled_size;
-  /* The downsampled dimensions are the component's actual, unpadded number
-   * of samples at the main buffer (preprocessing/compression interface), thus
-   * downsampled_width = ceil(image_width * Hi/Hmax)
-   * and similarly for height.  For decompression, IDCT scaling is included, so
-   * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE)
-   */
-  JDIMENSION downsampled_width;	 /* actual width in samples */
-  JDIMENSION downsampled_height; /* actual height in samples */
-  /* This flag is used only for decompression.  In cases where some of the
-   * components will be ignored (eg grayscale output from YCbCr image),
-   * we can skip most computations for the unused components.
-   */
-  boolean component_needed;	/* do we need the value of this component? */
-
-  /* These values are computed before starting a scan of the component. */
-  /* The decompressor output side may not use these variables. */
-  int MCU_width;		/* number of blocks per MCU, horizontally */
-  int MCU_height;		/* number of blocks per MCU, vertically */
-  int MCU_blocks;		/* MCU_width * MCU_height */
-  int MCU_sample_width;		/* MCU width in samples, MCU_width*DCT_scaled_size */
-  int last_col_width;		/* # of non-dummy blocks across in last MCU */
-  int last_row_height;		/* # of non-dummy blocks down in last MCU */
-
-  /* Saved quantization table for component; NULL if none yet saved.
-   * See jdinput.c comments about the need for this information.
-   * This field is currently used only for decompression.
-   */
-  JQUANT_TBL * quant_table;
-
-  /* Private per-component storage for DCT or IDCT subsystem. */
-  void * dct_table;
-} jpeg_component_info;
-
-
-/* The script for encoding a multiple-scan file is an array of these: */
-
-typedef struct {
-  int comps_in_scan;		/* number of components encoded in this scan */
-  int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */
-  int Ss, Se;			/* progressive JPEG spectral selection parms */
-  int Ah, Al;			/* progressive JPEG successive approx. parms */
-} jpeg_scan_info;
-
-/* The decompressor can save APPn and COM markers in a list of these: */
-
-typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr;
-
-struct jpeg_marker_struct {
-  jpeg_saved_marker_ptr next;	/* next in list, or NULL */
-  UINT8 marker;			/* marker code: JPEG_COM, or JPEG_APP0+n */
-  unsigned int original_length;	/* # bytes of data in the file */
-  unsigned int data_length;	/* # bytes of data saved at data[] */
-  JOCTET FAR * data;		/* the data contained in the marker */
-  /* the marker length word is not counted in data_length or original_length */
-};
-
-/* Known color spaces. */
-
-typedef enum {
-	JCS_UNKNOWN,		/* error/unspecified */
-	JCS_GRAYSCALE,		/* monochrome */
-	JCS_RGB,		/* red/green/blue */
-	JCS_YCbCr,		/* Y/Cb/Cr (also known as YUV) */
-	JCS_CMYK,		/* C/M/Y/K */
-	JCS_YCCK		/* Y/Cb/Cr/K */
-} J_COLOR_SPACE;
-
-/* DCT/IDCT algorithm options. */
-
-typedef enum {
-	JDCT_ISLOW,		/* slow but accurate integer algorithm */
-	JDCT_IFAST,		/* faster, less accurate integer method */
-	JDCT_FLOAT		/* floating-point: accurate, fast on fast HW */
-} J_DCT_METHOD;
-
-#ifndef JDCT_DEFAULT		/* may be overridden in jconfig.h */
-#define JDCT_DEFAULT  JDCT_ISLOW
-#endif
-#ifndef JDCT_FASTEST		/* may be overridden in jconfig.h */
-#define JDCT_FASTEST  JDCT_IFAST
-#endif
-
-/* Dithering options for decompression. */
-
-typedef enum {
-	JDITHER_NONE,		/* no dithering */
-	JDITHER_ORDERED,	/* simple ordered dither */
-	JDITHER_FS		/* Floyd-Steinberg error diffusion dither */
-} J_DITHER_MODE;
-
-
-/* Common fields between JPEG compression and decompression master structs. */
-
-#define jpeg_common_fields \
-  struct jpeg_error_mgr * err;	/* Error handler module */\
-  struct jpeg_memory_mgr * mem;	/* Memory manager module */\
-  struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\
-  void * client_data;		/* Available for use by application */\
-  boolean is_decompressor;	/* So common code can tell which is which */\
-  int global_state		/* For checking call sequence validity */
-
-/* Routines that are to be used by both halves of the library are declared
- * to receive a pointer to this structure.  There are no actual instances of
- * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct.
- */
-struct jpeg_common_struct {
-  jpeg_common_fields;		/* Fields common to both master struct types */
-  /* Additional fields follow in an actual jpeg_compress_struct or
-   * jpeg_decompress_struct.  All three structs must agree on these
-   * initial fields!  (This would be a lot cleaner in C++.)
-   */
-};
-
-typedef struct jpeg_common_struct * j_common_ptr;
-typedef struct jpeg_compress_struct * j_compress_ptr;
-typedef struct jpeg_decompress_struct * j_decompress_ptr;
-
-
-/* Master record for a compression instance */
-
-struct jpeg_compress_struct {
-  jpeg_common_fields;		/* Fields shared with jpeg_decompress_struct */
-
-  /* Destination for compressed data */
-  struct jpeg_destination_mgr * dest;
-
-  /* Description of source image --- these fields must be filled in by
-   * outer application before starting compression.  in_color_space must
-   * be correct before you can even call jpeg_set_defaults().
-   */
-
-  JDIMENSION image_width;	/* input image width */
-  JDIMENSION image_height;	/* input image height */
-  int input_components;		/* # of color components in input image */
-  J_COLOR_SPACE in_color_space;	/* colorspace of input image */
-
-  double input_gamma;		/* image gamma of input image */
-
-  /* Compression parameters --- these fields must be set before calling
-   * jpeg_start_compress().  We recommend calling jpeg_set_defaults() to
-   * initialize everything to reasonable defaults, then changing anything
-   * the application specifically wants to change.  That way you won't get
-   * burnt when new parameters are added.  Also note that there are several
-   * helper routines to simplify changing parameters.
-   */
-
-  int data_precision;		/* bits of precision in image data */
-
-  int num_components;		/* # of color components in JPEG image */
-  J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */
-
-  jpeg_component_info * comp_info;
-  /* comp_info[i] describes component that appears i'th in SOF */
-  
-  JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS];
-  /* ptrs to coefficient quantization tables, or NULL if not defined */
-  
-  JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS];
-  JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS];
-  /* ptrs to Huffman coding tables, or NULL if not defined */
-  
-  UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
-  UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
-  UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
-
-  int num_scans;		/* # of entries in scan_info array */
-  const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */
-  /* The default value of scan_info is NULL, which causes a single-scan
-   * sequential JPEG file to be emitted.  To create a multi-scan file,
-   * set num_scans and scan_info to point to an array of scan definitions.
-   */
-
-  boolean raw_data_in;		/* TRUE=caller supplies downsampled data */
-  boolean arith_code;		/* TRUE=arithmetic coding, FALSE=Huffman */
-  boolean optimize_coding;	/* TRUE=optimize entropy encoding parms */
-  boolean CCIR601_sampling;	/* TRUE=first samples are cosited */
-  int smoothing_factor;		/* 1..100, or 0 for no input smoothing */
-  J_DCT_METHOD dct_method;	/* DCT algorithm selector */
-
-  /* The restart interval can be specified in absolute MCUs by setting
-   * restart_interval, or in MCU rows by setting restart_in_rows
-   * (in which case the correct restart_interval will be figured
-   * for each scan).
-   */
-  unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */
-  int restart_in_rows;		/* if > 0, MCU rows per restart interval */
-
-  /* Parameters controlling emission of special markers. */
-
-  boolean write_JFIF_header;	/* should a JFIF marker be written? */
-  UINT8 JFIF_major_version;	/* What to write for the JFIF version number */
-  UINT8 JFIF_minor_version;
-  /* These three values are not used by the JPEG code, merely copied */
-  /* into the JFIF APP0 marker.  density_unit can be 0 for unknown, */
-  /* 1 for dots/inch, or 2 for dots/cm.  Note that the pixel aspect */
-  /* ratio is defined by X_density/Y_density even when density_unit=0. */
-  UINT8 density_unit;		/* JFIF code for pixel size units */
-  UINT16 X_density;		/* Horizontal pixel density */
-  UINT16 Y_density;		/* Vertical pixel density */
-  boolean write_Adobe_marker;	/* should an Adobe marker be written? */
-  
-  /* State variable: index of next scanline to be written to
-   * jpeg_write_scanlines().  Application may use this to control its
-   * processing loop, e.g., "while (next_scanline < image_height)".
-   */
-
-  JDIMENSION next_scanline;	/* 0 .. image_height-1  */
-
-  /* Remaining fields are known throughout compressor, but generally
-   * should not be touched by a surrounding application.
-   */
-
-  /*
-   * These fields are computed during compression startup
-   */
-  boolean progressive_mode;	/* TRUE if scan script uses progressive mode */
-  int max_h_samp_factor;	/* largest h_samp_factor */
-  int max_v_samp_factor;	/* largest v_samp_factor */
-
-  JDIMENSION total_iMCU_rows;	/* # of iMCU rows to be input to coef ctlr */
-  /* The coefficient controller receives data in units of MCU rows as defined
-   * for fully interleaved scans (whether the JPEG file is interleaved or not).
-   * There are v_samp_factor * DCTSIZE sample rows of each component in an
-   * "iMCU" (interleaved MCU) row.
-   */
-  
-  /*
-   * These fields are valid during any one scan.
-   * They describe the components and MCUs actually appearing in the scan.
-   */
-  int comps_in_scan;		/* # of JPEG components in this scan */
-  jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN];
-  /* *cur_comp_info[i] describes component that appears i'th in SOS */
-  
-  JDIMENSION MCUs_per_row;	/* # of MCUs across the image */
-  JDIMENSION MCU_rows_in_scan;	/* # of MCU rows in the image */
-  
-  int blocks_in_MCU;		/* # of DCT blocks per MCU */
-  int MCU_membership[C_MAX_BLOCKS_IN_MCU];
-  /* MCU_membership[i] is index in cur_comp_info of component owning */
-  /* i'th block in an MCU */
-
-  int Ss, Se, Ah, Al;		/* progressive JPEG parameters for scan */
-
-  /*
-   * Links to compression subobjects (methods and private variables of modules)
-   */
-  struct jpeg_comp_master * master;
-  struct jpeg_c_main_controller * main;
-  struct jpeg_c_prep_controller * prep;
-  struct jpeg_c_coef_controller * coef;
-  struct jpeg_marker_writer * marker;
-  struct jpeg_color_converter * cconvert;
-  struct jpeg_downsampler * downsample;
-  struct jpeg_forward_dct * fdct;
-  struct jpeg_entropy_encoder * entropy;
-  jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */
-  int script_space_size;
-};
-
-
-/* Master record for a decompression instance */
-
-struct jpeg_decompress_struct {
-  jpeg_common_fields;		/* Fields shared with jpeg_compress_struct */
-
-  /* Source of compressed data */
-  struct jpeg_source_mgr * src;
-
-  /* Basic description of image --- filled in by jpeg_read_header(). */
-  /* Application may inspect these values to decide how to process image. */
-
-  JDIMENSION image_width;	/* nominal image width (from SOF marker) */
-  JDIMENSION image_height;	/* nominal image height */
-  int num_components;		/* # of color components in JPEG image */
-  J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */
-
-  /* Decompression processing parameters --- these fields must be set before
-   * calling jpeg_start_decompress().  Note that jpeg_read_header() initializes
-   * them to default values.
-   */
-
-  J_COLOR_SPACE out_color_space; /* colorspace for output */
-
-  unsigned int scale_num, scale_denom; /* fraction by which to scale image */
-
-  double output_gamma;		/* image gamma wanted in output */
-
-  boolean buffered_image;	/* TRUE=multiple output passes */
-  boolean raw_data_out;		/* TRUE=downsampled data wanted */
-
-  J_DCT_METHOD dct_method;	/* IDCT algorithm selector */
-  boolean do_fancy_upsampling;	/* TRUE=apply fancy upsampling */
-  boolean do_block_smoothing;	/* TRUE=apply interblock smoothing */
-
-  boolean quantize_colors;	/* TRUE=colormapped output wanted */
-  /* the following are ignored if not quantize_colors: */
-  J_DITHER_MODE dither_mode;	/* type of color dithering to use */
-  boolean two_pass_quantize;	/* TRUE=use two-pass color quantization */
-  int desired_number_of_colors;	/* max # colors to use in created colormap */
-  /* these are significant only in buffered-image mode: */
-  boolean enable_1pass_quant;	/* enable future use of 1-pass quantizer */
-  boolean enable_external_quant;/* enable future use of external colormap */
-  boolean enable_2pass_quant;	/* enable future use of 2-pass quantizer */
-
-  /* Description of actual output image that will be returned to application.
-   * These fields are computed by jpeg_start_decompress().
-   * You can also use jpeg_calc_output_dimensions() to determine these values
-   * in advance of calling jpeg_start_decompress().
-   */
-
-  JDIMENSION output_width;	/* scaled image width */
-  JDIMENSION output_height;	/* scaled image height */
-  int out_color_components;	/* # of color components in out_color_space */
-  int output_components;	/* # of color components returned */
-  /* output_components is 1 (a colormap index) when quantizing colors;
-   * otherwise it equals out_color_components.
-   */
-  int rec_outbuf_height;	/* min recommended height of scanline buffer */
-  /* If the buffer passed to jpeg_read_scanlines() is less than this many rows
-   * high, space and time will be wasted due to unnecessary data copying.
-   * Usually rec_outbuf_height will be 1 or 2, at most 4.
-   */
-
-  /* When quantizing colors, the output colormap is described by these fields.
-   * The application can supply a colormap by setting colormap non-NULL before
-   * calling jpeg_start_decompress; otherwise a colormap is created during
-   * jpeg_start_decompress or jpeg_start_output.
-   * The map has out_color_components rows and actual_number_of_colors columns.
-   */
-  int actual_number_of_colors;	/* number of entries in use */
-  JSAMPARRAY colormap;		/* The color map as a 2-D pixel array */
-
-  /* State variables: these variables indicate the progress of decompression.
-   * The application may examine these but must not modify them.
-   */
-
-  /* Row index of next scanline to be read from jpeg_read_scanlines().
-   * Application may use this to control its processing loop, e.g.,
-   * "while (output_scanline < output_height)".
-   */
-  JDIMENSION output_scanline;	/* 0 .. output_height-1  */
-
-  /* Current input scan number and number of iMCU rows completed in scan.
-   * These indicate the progress of the decompressor input side.
-   */
-  int input_scan_number;	/* Number of SOS markers seen so far */
-  JDIMENSION input_iMCU_row;	/* Number of iMCU rows completed */
-
-  /* The "output scan number" is the notional scan being displayed by the
-   * output side.  The decompressor will not allow output scan/row number
-   * to get ahead of input scan/row, but it can fall arbitrarily far behind.
-   */
-  int output_scan_number;	/* Nominal scan number being displayed */
-  JDIMENSION output_iMCU_row;	/* Number of iMCU rows read */
-
-  /* Current progression status.  coef_bits[c][i] indicates the precision
-   * with which component c's DCT coefficient i (in zigzag order) is known.
-   * It is -1 when no data has yet been received, otherwise it is the point
-   * transform (shift) value for the most recent scan of the coefficient
-   * (thus, 0 at completion of the progression).
-   * This pointer is NULL when reading a non-progressive file.
-   */
-  int (*coef_bits)[DCTSIZE2];	/* -1 or current Al value for each coef */
-
-  /* Internal JPEG parameters --- the application usually need not look at
-   * these fields.  Note that the decompressor output side may not use
-   * any parameters that can change between scans.
-   */
-
-  /* Quantization and Huffman tables are carried forward across input
-   * datastreams when processing abbreviated JPEG datastreams.
-   */
-
-  JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS];
-  /* ptrs to coefficient quantization tables, or NULL if not defined */
-
-  JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS];
-  JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS];
-  /* ptrs to Huffman coding tables, or NULL if not defined */
-
-  /* These parameters are never carried across datastreams, since they
-   * are given in SOF/SOS markers or defined to be reset by SOI.
-   */
-
-  int data_precision;		/* bits of precision in image data */
-
-  jpeg_component_info * comp_info;
-  /* comp_info[i] describes component that appears i'th in SOF */
-
-  boolean progressive_mode;	/* TRUE if SOFn specifies progressive mode */
-  boolean arith_code;		/* TRUE=arithmetic coding, FALSE=Huffman */
-
-  UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
-  UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
-  UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
-
-  unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */
-
-  /* These fields record data obtained from optional markers recognized by
-   * the JPEG library.
-   */
-  boolean saw_JFIF_marker;	/* TRUE iff a JFIF APP0 marker was found */
-  /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */
-  UINT8 JFIF_major_version;	/* JFIF version number */
-  UINT8 JFIF_minor_version;
-  UINT8 density_unit;		/* JFIF code for pixel size units */
-  UINT16 X_density;		/* Horizontal pixel density */
-  UINT16 Y_density;		/* Vertical pixel density */
-  boolean saw_Adobe_marker;	/* TRUE iff an Adobe APP14 marker was found */
-  UINT8 Adobe_transform;	/* Color transform code from Adobe marker */
-
-  boolean CCIR601_sampling;	/* TRUE=first samples are cosited */
-
-  /* Aside from the specific data retained from APPn markers known to the
-   * library, the uninterpreted contents of any or all APPn and COM markers
-   * can be saved in a list for examination by the application.
-   */
-  jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */
-
-  /* Remaining fields are known throughout decompressor, but generally
-   * should not be touched by a surrounding application.
-   */
-
-  /*
-   * These fields are computed during decompression startup
-   */
-  int max_h_samp_factor;	/* largest h_samp_factor */
-  int max_v_samp_factor;	/* largest v_samp_factor */
-
-  int min_DCT_scaled_size;	/* smallest DCT_scaled_size of any component */
-
-  JDIMENSION total_iMCU_rows;	/* # of iMCU rows in image */
-  /* The coefficient controller's input and output progress is measured in
-   * units of "iMCU" (interleaved MCU) rows.  These are the same as MCU rows
-   * in fully interleaved JPEG scans, but are used whether the scan is
-   * interleaved or not.  We define an iMCU row as v_samp_factor DCT block
-   * rows of each component.  Therefore, the IDCT output contains
-   * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row.
-   */
-
-  JSAMPLE * sample_range_limit; /* table for fast range-limiting */
-
-  /*
-   * These fields are valid during any one scan.
-   * They describe the components and MCUs actually appearing in the scan.
-   * Note that the decompressor output side must not use these fields.
-   */
-  int comps_in_scan;		/* # of JPEG components in this scan */
-  jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN];
-  /* *cur_comp_info[i] describes component that appears i'th in SOS */
-
-  JDIMENSION MCUs_per_row;	/* # of MCUs across the image */
-  JDIMENSION MCU_rows_in_scan;	/* # of MCU rows in the image */
-
-  int blocks_in_MCU;		/* # of DCT blocks per MCU */
-  int MCU_membership[D_MAX_BLOCKS_IN_MCU];
-  /* MCU_membership[i] is index in cur_comp_info of component owning */
-  /* i'th block in an MCU */
-
-  int Ss, Se, Ah, Al;		/* progressive JPEG parameters for scan */
-
-  /* This field is shared between entropy decoder and marker parser.
-   * It is either zero or the code of a JPEG marker that has been
-   * read from the data source, but has not yet been processed.
-   */
-  int unread_marker;
-
-  /*
-   * Links to decompression subobjects (methods, private variables of modules)
-   */
-  struct jpeg_decomp_master * master;
-  struct jpeg_d_main_controller * main;
-  struct jpeg_d_coef_controller * coef;
-  struct jpeg_d_post_controller * post;
-  struct jpeg_input_controller * inputctl;
-  struct jpeg_marker_reader * marker;
-  struct jpeg_entropy_decoder * entropy;
-  struct jpeg_inverse_dct * idct;
-  struct jpeg_upsampler * upsample;
-  struct jpeg_color_deconverter * cconvert;
-  struct jpeg_color_quantizer * cquantize;
-};
-
-
-/* "Object" declarations for JPEG modules that may be supplied or called
- * directly by the surrounding application.
- * As with all objects in the JPEG library, these structs only define the
- * publicly visible methods and state variables of a module.  Additional
- * private fields may exist after the public ones.
- */
-
-
-/* Error handler object */
-
-struct jpeg_error_mgr {
-  /* Error exit handler: does not return to caller */
-  JMETHOD(void, error_exit, (j_common_ptr cinfo));
-  /* Conditionally emit a trace or warning message */
-  JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level));
-  /* Routine that actually outputs a trace or error message */
-  JMETHOD(void, output_message, (j_common_ptr cinfo));
-  /* Format a message string for the most recent JPEG error or message */
-  JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer));
-#define JMSG_LENGTH_MAX  200	/* recommended size of format_message buffer */
-  /* Reset error state variables at start of a new image */
-  JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo));
-  
-  /* The message ID code and any parameters are saved here.
-   * A message can have one string parameter or up to 8 int parameters.
-   */
-  int msg_code;
-#define JMSG_STR_PARM_MAX  80
-  union {
-    int i[8];
-    char s[JMSG_STR_PARM_MAX];
-  } msg_parm;
-  
-  /* Standard state variables for error facility */
-  
-  int trace_level;		/* max msg_level that will be displayed */
-  
-  /* For recoverable corrupt-data errors, we emit a warning message,
-   * but keep going unless emit_message chooses to abort.  emit_message
-   * should count warnings in num_warnings.  The surrounding application
-   * can check for bad data by seeing if num_warnings is nonzero at the
-   * end of processing.
-   */
-  long num_warnings;		/* number of corrupt-data warnings */
-
-  /* These fields point to the table(s) of error message strings.
-   * An application can change the table pointer to switch to a different
-   * message list (typically, to change the language in which errors are
-   * reported).  Some applications may wish to add additional error codes
-   * that will be handled by the JPEG library error mechanism; the second
-   * table pointer is used for this purpose.
-   *
-   * First table includes all errors generated by JPEG library itself.
-   * Error code 0 is reserved for a "no such error string" message.
-   */
-  const char * const * jpeg_message_table; /* Library errors */
-  int last_jpeg_message;    /* Table contains strings 0..last_jpeg_message */
-  /* Second table can be added by application (see cjpeg/djpeg for example).
-   * It contains strings numbered first_addon_message..last_addon_message.
-   */
-  const char * const * addon_message_table; /* Non-library errors */
-  int first_addon_message;	/* code for first string in addon table */
-  int last_addon_message;	/* code for last string in addon table */
-};
-
-
-/* Progress monitor object */
-
-struct jpeg_progress_mgr {
-  JMETHOD(void, progress_monitor, (j_common_ptr cinfo));
-
-  long pass_counter;		/* work units completed in this pass */
-  long pass_limit;		/* total number of work units in this pass */
-  int completed_passes;		/* passes completed so far */
-  int total_passes;		/* total number of passes expected */
-};
-
-
-/* Data destination object for compression */
-
-struct jpeg_destination_mgr {
-  JOCTET * next_output_byte;	/* => next byte to write in buffer */
-  size_t free_in_buffer;	/* # of byte spaces remaining in buffer */
-
-  JMETHOD(void, init_destination, (j_compress_ptr cinfo));
-  JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo));
-  JMETHOD(void, term_destination, (j_compress_ptr cinfo));
-};
-
-
-/* Data source object for decompression */
-
-struct jpeg_source_mgr {
-  const JOCTET * next_input_byte; /* => next byte to read from buffer */
-  size_t bytes_in_buffer;	/* # of bytes remaining in buffer */
-
-  JMETHOD(void, init_source, (j_decompress_ptr cinfo));
-  JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo));
-  JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes));
-  JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired));
-  JMETHOD(void, term_source, (j_decompress_ptr cinfo));
-};
-
-
-/* Memory manager object.
- * Allocates "small" objects (a few K total), "large" objects (tens of K),
- * and "really big" objects (virtual arrays with backing store if needed).
- * The memory manager does not allow individual objects to be freed; rather,
- * each created object is assigned to a pool, and whole pools can be freed
- * at once.  This is faster and more convenient than remembering exactly what
- * to free, especially where malloc()/free() are not too speedy.
- * NB: alloc routines never return NULL.  They exit to error_exit if not
- * successful.
- */
-
-#define JPOOL_PERMANENT	0	/* lasts until master record is destroyed */
-#define JPOOL_IMAGE	1	/* lasts until done with image/datastream */
-#define JPOOL_NUMPOOLS	2
-
-typedef struct jvirt_sarray_control * jvirt_sarray_ptr;
-typedef struct jvirt_barray_control * jvirt_barray_ptr;
-
-
-struct jpeg_memory_mgr {
-  /* Method pointers */
-  JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id,
-				size_t sizeofobject));
-  JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id,
-				     size_t sizeofobject));
-  JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id,
-				     JDIMENSION samplesperrow,
-				     JDIMENSION numrows));
-  JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id,
-				      JDIMENSION blocksperrow,
-				      JDIMENSION numrows));
-  JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo,
-						  int pool_id,
-						  boolean pre_zero,
-						  JDIMENSION samplesperrow,
-						  JDIMENSION numrows,
-						  JDIMENSION maxaccess));
-  JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo,
-						  int pool_id,
-						  boolean pre_zero,
-						  JDIMENSION blocksperrow,
-						  JDIMENSION numrows,
-						  JDIMENSION maxaccess));
-  JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo));
-  JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo,
-					   jvirt_sarray_ptr ptr,
-					   JDIMENSION start_row,
-					   JDIMENSION num_rows,
-					   boolean writable));
-  JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo,
-					    jvirt_barray_ptr ptr,
-					    JDIMENSION start_row,
-					    JDIMENSION num_rows,
-					    boolean writable));
-  JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id));
-  JMETHOD(void, self_destruct, (j_common_ptr cinfo));
-
-  /* Limit on memory allocation for this JPEG object.  (Note that this is
-   * merely advisory, not a guaranteed maximum; it only affects the space
-   * used for virtual-array buffers.)  May be changed by outer application
-   * after creating the JPEG object.
-   */
-  long max_memory_to_use;
-
-  /* Maximum allocation request accepted by alloc_large. */
-  long max_alloc_chunk;
-};
-
-
-/* Routine signature for application-supplied marker processing methods.
- * Need not pass marker code since it is stored in cinfo->unread_marker.
- */
-typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo));
-
-
-/* Declarations for routines called by application.
- * The JPP macro hides prototype parameters from compilers that can't cope.
- * Note JPP requires double parentheses.
- */
-
-#ifdef HAVE_PROTOTYPES
-#define JPP(arglist)	arglist
-#else
-#define JPP(arglist)	()
-#endif
-
-
-/* Short forms of external names for systems with brain-damaged linkers.
- * We shorten external names to be unique in the first six letters, which
- * is good enough for all known systems.
- * (If your compiler itself needs names to be unique in less than 15 
- * characters, you are out of luck.  Get a better compiler.)
- */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jpeg_std_error		jStdError
-#define jpeg_CreateCompress	jCreaCompress
-#define jpeg_CreateDecompress	jCreaDecompress
-#define jpeg_destroy_compress	jDestCompress
-#define jpeg_destroy_decompress	jDestDecompress
-#define jpeg_stdio_dest		jStdDest
-#define jpeg_stdio_src		jStdSrc
-#define jpeg_set_defaults	jSetDefaults
-#define jpeg_set_colorspace	jSetColorspace
-#define jpeg_default_colorspace	jDefColorspace
-#define jpeg_set_quality	jSetQuality
-#define jpeg_set_linear_quality	jSetLQuality
-#define jpeg_add_quant_table	jAddQuantTable
-#define jpeg_quality_scaling	jQualityScaling
-#define jpeg_simple_progression	jSimProgress
-#define jpeg_suppress_tables	jSuppressTables
-#define jpeg_alloc_quant_table	jAlcQTable
-#define jpeg_alloc_huff_table	jAlcHTable
-#define jpeg_start_compress	jStrtCompress
-#define jpeg_write_scanlines	jWrtScanlines
-#define jpeg_finish_compress	jFinCompress
-#define jpeg_write_raw_data	jWrtRawData
-#define jpeg_write_marker	jWrtMarker
-#define jpeg_write_m_header	jWrtMHeader
-#define jpeg_write_m_byte	jWrtMByte
-#define jpeg_write_tables	jWrtTables
-#define jpeg_read_header	jReadHeader
-#define jpeg_start_decompress	jStrtDecompress
-#define jpeg_read_scanlines	jReadScanlines
-#define jpeg_finish_decompress	jFinDecompress
-#define jpeg_read_raw_data	jReadRawData
-#define jpeg_has_multiple_scans	jHasMultScn
-#define jpeg_start_output	jStrtOutput
-#define jpeg_finish_output	jFinOutput
-#define jpeg_input_complete	jInComplete
-#define jpeg_new_colormap	jNewCMap
-#define jpeg_consume_input	jConsumeInput
-#define jpeg_calc_output_dimensions	jCalcDimensions
-#define jpeg_save_markers	jSaveMarkers
-#define jpeg_set_marker_processor	jSetMarker
-#define jpeg_read_coefficients	jReadCoefs
-#define jpeg_write_coefficients	jWrtCoefs
-#define jpeg_copy_critical_parameters	jCopyCrit
-#define jpeg_abort_compress	jAbrtCompress
-#define jpeg_abort_decompress	jAbrtDecompress
-#define jpeg_abort		jAbort
-#define jpeg_destroy		jDestroy
-#define jpeg_resync_to_restart	jResyncRestart
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-
-/* Default error-management setup */
-EXTERN(struct jpeg_error_mgr *) jpeg_std_error
-	JPP((struct jpeg_error_mgr * err));
-
-/* Initialization of JPEG compression objects.
- * jpeg_create_compress() and jpeg_create_decompress() are the exported
- * names that applications should call.  These expand to calls on
- * jpeg_CreateCompress and jpeg_CreateDecompress with additional information
- * passed for version mismatch checking.
- * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx.
- */
-#define jpeg_create_compress(cinfo) \
-    jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \
-			(size_t) sizeof(struct jpeg_compress_struct))
-#define jpeg_create_decompress(cinfo) \
-    jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \
-			  (size_t) sizeof(struct jpeg_decompress_struct))
-EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo,
-				      int version, size_t structsize));
-EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo,
-					int version, size_t structsize));
-/* Destruction of JPEG compression objects */
-EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo));
-EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo));
-
-/* Standard data source and destination managers: stdio streams. */
-/* Caller is responsible for opening the file before and closing after. */
-EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile));
-EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile));
-
-/* Default parameter setup for compression */
-EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo));
-/* Compression parameter setup aids */
-EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo,
-				      J_COLOR_SPACE colorspace));
-EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo));
-EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality,
-				   boolean force_baseline));
-EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo,
-					  int scale_factor,
-					  boolean force_baseline));
-EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl,
-				       const unsigned int *basic_table,
-				       int scale_factor,
-				       boolean force_baseline));
-EXTERN(int) jpeg_quality_scaling JPP((int quality));
-EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo));
-EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo,
-				       boolean suppress));
-EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo));
-EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo));
-
-/* Main entry points for compression */
-EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo,
-				      boolean write_all_tables));
-EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo,
-					     JSAMPARRAY scanlines,
-					     JDIMENSION num_lines));
-EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo));
-
-/* Replaces jpeg_write_scanlines when writing raw downsampled data. */
-EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo,
-					    JSAMPIMAGE data,
-					    JDIMENSION num_lines));
-
-/* Write a special marker.  See libjpeg.doc concerning safe usage. */
-EXTERN(void) jpeg_write_marker
-	JPP((j_compress_ptr cinfo, int marker,
-	     const JOCTET * dataptr, unsigned int datalen));
-/* Same, but piecemeal. */
-EXTERN(void) jpeg_write_m_header
-	JPP((j_compress_ptr cinfo, int marker, unsigned int datalen));
-EXTERN(void) jpeg_write_m_byte
-	JPP((j_compress_ptr cinfo, int val));
-
-/* Alternate compression function: just write an abbreviated table file */
-EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo));
-
-/* Decompression startup: read start of JPEG datastream to see what's there */
-EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo,
-				  boolean require_image));
-/* Return value is one of: */
-#define JPEG_SUSPENDED		0 /* Suspended due to lack of input data */
-#define JPEG_HEADER_OK		1 /* Found valid image datastream */
-#define JPEG_HEADER_TABLES_ONLY	2 /* Found valid table-specs-only datastream */
-/* If you pass require_image = TRUE (normal case), you need not check for
- * a TABLES_ONLY return code; an abbreviated file will cause an error exit.
- * JPEG_SUSPENDED is only possible if you use a data source module that can
- * give a suspension return (the stdio source module doesn't).
- */
-
-/* Main entry points for decompression */
-EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo));
-EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo,
-					    JSAMPARRAY scanlines,
-					    JDIMENSION max_lines));
-EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo));
-
-/* Replaces jpeg_read_scanlines when reading raw downsampled data. */
-EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo,
-					   JSAMPIMAGE data,
-					   JDIMENSION max_lines));
-
-/* Additional entry points for buffered-image mode. */
-EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo));
-EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo,
-				       int scan_number));
-EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo));
-EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo));
-EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo));
-EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo));
-/* Return value is one of: */
-/* #define JPEG_SUSPENDED	0    Suspended due to lack of input data */
-#define JPEG_REACHED_SOS	1 /* Reached start of new scan */
-#define JPEG_REACHED_EOI	2 /* Reached end of image */
-#define JPEG_ROW_COMPLETED	3 /* Completed one iMCU row */
-#define JPEG_SCAN_COMPLETED	4 /* Completed last iMCU row of a scan */
-
-/* Precalculate output dimensions for current decompression parameters. */
-EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo));
-
-/* Control saving of COM and APPn markers into marker_list. */
-EXTERN(void) jpeg_save_markers
-	JPP((j_decompress_ptr cinfo, int marker_code,
-	     unsigned int length_limit));
-
-/* Install a special processing method for COM or APPn markers. */
-EXTERN(void) jpeg_set_marker_processor
-	JPP((j_decompress_ptr cinfo, int marker_code,
-	     jpeg_marker_parser_method routine));
-
-/* Read or write raw DCT coefficients --- useful for lossless transcoding. */
-EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo));
-EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo,
-					  jvirt_barray_ptr * coef_arrays));
-EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo,
-						j_compress_ptr dstinfo));
-
-/* If you choose to abort compression or decompression before completing
- * jpeg_finish_(de)compress, then you need to clean up to release memory,
- * temporary files, etc.  You can just call jpeg_destroy_(de)compress
- * if you're done with the JPEG object, but if you want to clean it up and
- * reuse it, call this:
- */
-EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo));
-EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo));
-
-/* Generic versions of jpeg_abort and jpeg_destroy that work on either
- * flavor of JPEG object.  These may be more convenient in some places.
- */
-EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo));
-EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo));
-
-/* Default restart-marker-resync procedure for use by data source modules */
-EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo,
-					    int desired));
-
-
-/* These marker codes are exported since applications and data source modules
- * are likely to want to use them.
- */
-
-#define JPEG_RST0	0xD0	/* RST0 marker code */
-#define JPEG_EOI	0xD9	/* EOI marker code */
-#define JPEG_APP0	0xE0	/* APP0 marker code */
-#define JPEG_COM	0xFE	/* COM marker code */
-
-
-/* If we have a brain-damaged compiler that emits warnings (or worse, errors)
- * for structure definitions that are never filled in, keep it quiet by
- * supplying dummy definitions for the various substructures.
- */
-
-#ifdef INCOMPLETE_TYPES_BROKEN
-#ifndef JPEG_INTERNALS		/* will be defined in jpegint.h */
-struct jvirt_sarray_control { long dummy; };
-struct jvirt_barray_control { long dummy; };
-struct jpeg_comp_master { long dummy; };
-struct jpeg_c_main_controller { long dummy; };
-struct jpeg_c_prep_controller { long dummy; };
-struct jpeg_c_coef_controller { long dummy; };
-struct jpeg_marker_writer { long dummy; };
-struct jpeg_color_converter { long dummy; };
-struct jpeg_downsampler { long dummy; };
-struct jpeg_forward_dct { long dummy; };
-struct jpeg_entropy_encoder { long dummy; };
-struct jpeg_decomp_master { long dummy; };
-struct jpeg_d_main_controller { long dummy; };
-struct jpeg_d_coef_controller { long dummy; };
-struct jpeg_d_post_controller { long dummy; };
-struct jpeg_input_controller { long dummy; };
-struct jpeg_marker_reader { long dummy; };
-struct jpeg_entropy_decoder { long dummy; };
-struct jpeg_inverse_dct { long dummy; };
-struct jpeg_upsampler { long dummy; };
-struct jpeg_color_deconverter { long dummy; };
-struct jpeg_color_quantizer { long dummy; };
-#endif /* JPEG_INTERNALS */
-#endif /* INCOMPLETE_TYPES_BROKEN */
-
-
-/*
- * The JPEG library modules define JPEG_INTERNALS before including this file.
- * The internal structure declarations are read only when that is true.
- * Applications using the library should not include jpegint.h, but may wish
- * to include jerror.h.
- */
-
-#ifdef JPEG_INTERNALS
-#include "jpegint.h"		/* fetch private declarations */
-#include "jerror.h"		/* fetch error codes too */
-#endif
-
-#endif /* JPEGLIB_H */
diff --git a/Utilities/CAI/cai_dll/inc/jversion.h b/Utilities/CAI/cai_dll/inc/jversion.h
deleted file mode 100755
index b903be7d46..0000000000
--- a/Utilities/CAI/cai_dll/inc/jversion.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * jversion.h
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains software version identification.
- */
-
-
-#define JVERSION	"6a  7-Feb-96"
-
-#define JCOPYRIGHT	"Copyright (C) 1996, Thomas G. Lane"
diff --git a/Utilities/CAI/cai_dll/inc/machdep.h b/Utilities/CAI/cai_dll/inc/machdep.h
deleted file mode 100755
index 055749fc48..0000000000
--- a/Utilities/CAI/cai_dll/inc/machdep.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/* $Header: machdep.h,v 1.1 96/07/15 15:06:52 cmf Exp $ */
-
-/*
- * Copyright (c) 1988, 1989, 1990, 1991 Sam Leffler
- * Copyright (c) 1991 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.
- */
-
-#ifndef _MACHDEP_
-#define	_MACHDEP_
-/*
- * Machine dependent definitions:
- *   o floating point formats
- *   o byte ordering
- *
- * NB, there are lots of assumptions here:
- *   - 32-bit natural integers	(sign extension code)
- *   - native float is 4 bytes	(floating point conversion)
- *   - native double is 8 bytes	(floating point conversion)
- */
-
-#if defined(sun) || defined(sparc) || defined(stellar) || defined(MIPSEB) || defined(hpux) || defined(apollo) || defined(NeXT) || defined(_IBMR2)
-#define	BIGENDIAN	1
-#define	IEEEFP
-#endif /* sun || sparc || stellar || MIPSEB || hpux || apollo || NeXT || _IBMR2 */
-
-/* MIPSEL = MIPS w/ Little Endian byte ordering (e.g. DEC 3100) */
-#if defined(MIPSEL)
-#define	BIGENDIAN	0
-#define	IEEEFP
-#endif /* MIPSEL */
-
-#ifdef transputer
-#define	BIGENDIAN	0
-#define	IEEEFP			/* IEEE floating point supported */
-#endif /* transputer */
-
-#if defined(m386) || defined(M_I86) || defined(i386)
-#define BIGENDIAN	0
-#define IEEEFP			/* IEEE floating point supported */
-#endif /* m386 || M_I86 || i386 */
-
-#ifdef IEEEFP
-typedef	struct ieeedouble nativedouble;
-typedef	struct ieeefloat nativefloat;
-#define	ISFRACTION(e)	(1022 - 4 <= (e) && (e) <= 1022 + 15)
-#define	EXTRACTFRACTION(dp, fract) \
-   ((fract) = ((unsigned long)(1<<31)|((dp)->native.mant<<11)|\
-      ((dp)->native.mant2>>21)) >> (1022+16-(dp)->native.exp))
-#define	EXTRACTEXPONENT(dp, exponent) ((exponent) = (dp)->native.exp)
-#define	NATIVE2IEEEFLOAT(fp)
-#define	IEEEFLOAT2NATIVE(fp)
-#define	IEEEDOUBLE2NATIVE(dp)
-
-#define	TIFFSwabArrayOfFloat(fp,n)  TIFFSwabArrayOfLong((unsigned long *)fp,n)
-#define	TIFFSwabArrayOfDouble(dp,n) TIFFSwabArrayOfLong((unsigned long *)dp,2*n)
-#endif /* IEEEFP */
-
-#ifdef tahoe
-#define	BIGENDIAN	1
-
-typedef	struct {
-	unsigned	sign:1;
-	unsigned	exp:8;
-	unsigned	mant:23;
-	unsigned	mant2;
-} nativedouble;
-typedef	struct {
-	unsigned	sign:1;
-	unsigned	exp:8;
-	unsigned	mant:23;
-} nativefloat;
-#define	ISFRACTION(e)	(128 - 4 <= (e) && (e) <= 128 + 15)
-#define	EXTRACTFRACTION(dp, fract) \
-    ((fract) = ((1<<31)|((dp)->native.mant<<8)|((dp)->native.mant2>>15)) >> \
-	(128+16-(dp)->native.exp))
-#define	EXTRACTEXPONENT(dp, exponent) ((exponent) = (dp)->native.exp - 2)
-/*
- * Beware, over/under-flow in conversions will
- * result in garbage values -- handling it would
- * require a subroutine call or lots more code.
- */
-#define	NATIVE2IEEEFLOAT(fp) { \
-    if ((fp)->native.exp) \
-        (fp)->ieee.exp = (fp)->native.exp - 129 + 127;	/* alter bias */\
-}
-#define	IEEEFLOAT2NATIVE(fp) { \
-    if ((fp)->ieee.exp) \
-        (fp)->native.exp = (fp)->ieee.exp - 127 + 129; 	/* alter bias */\
-}
-#define	IEEEDOUBLE2NATIVE(dp) { \
-    if ((dp)->native.exp = (dp)->ieee.exp) \
-	(dp)->native.exp += -1023 + 129; \
-    (dp)->native.mant = ((dp)->ieee.mant<<3)|((dp)->native.mant2>>29); \
-    (dp)->native.mant2 <<= 3; \
-}
-/* the following is to work around a compiler bug... */
-#define	SIGNEXTEND(a,b)	{ char ch; ch = (a); (b) = ch; }
-
-#define	TIFFSwabArrayOfFloat(fp,n)  TIFFSwabArrayOfLong((unsigned long *)fp,n)
-#define	TIFFSwabArrayOfDouble(dp,n) TIFFSwabArrayOfLong((unsigned long *)dp,2*n)
-#endif /* tahoe */
-
-#ifdef vax
-#define	BIGENDIAN	0
-
-typedef	struct {
-	unsigned	mant1:7;
-	unsigned	exp:8;
-	unsigned	sign:1;
-	unsigned	mant2:16;
-	unsigned	mant3;
-} nativedouble;
-typedef	struct {
-	unsigned	mant1:7;
-	unsigned	exp:8;
-	unsigned	sign:1;
-	unsigned	mant2:16;
-} nativefloat;
-#define	ISFRACTION(e)	(128 - 4 <= (e) && (e) <= 128 + 15)
-#define	EXTRACTFRACTION(dp, fract) \
-    ((fract) = ((1<<31)|((dp)->native.mant1<<16)|(dp)->native.mant2)) >> \
-	(128+16-(dp)->native.exp))
-#define	EXTRACTEXPONENT(dp, exponent) ((exponent) = (dp)->native.exp - 2)
-/*
- * Beware, these do not handle over/under-flow
- * during conversion from ieee to native format.
- */
-#define	NATIVE2IEEEFLOAT(fp) { \
-    float_t t; \
-    if (t.ieee.exp = (fp)->native.exp) \
-	t.ieee.exp += -129 + 127; \
-    t.ieee.sign = (fp)->native.sign; \
-    t.ieee.mant = ((fp)->native.mant1<<16)|(fp)->native.mant2; \
-    *(fp) = t; \
-}
-#define	IEEEFLOAT2NATIVE(fp) { \
-    float_t t; int v = (fp)->ieee.exp; \
-    if (v) v += -127 + 129;		/* alter bias of exponent */\
-    t.native.exp = v;			/* implicit truncation of exponent */\
-    t.native.sign = (fp)->ieee.sign; \
-    v = (fp)->ieee.mant; \
-    t.native.mant1 = v >> 16; \
-    t.native.mant2 = v;\
-    *(fp) = v; \
-}
-#define	IEEEDOUBLE2NATIVE(dp) { \
-    double_t t; int v = (dp)->ieee.exp; \
-    if (v) v += -1023 + 129; 		/* if can alter bias of exponent */\
-    t.native.exp = v;			/* implicit truncation of exponent */\
-    v = (dp)->ieee.mant; \
-    t.native.sign = (dp)->ieee.sign; \
-    t.native.mant1 = v >> 16; \
-    t.native.mant2 = v;\
-    t.native.mant3 = (dp)->mant2; \
-    *(dp) = t; \
-}
-
-#define	TIFFSwabArrayOfFloat(fp,n)  TIFFSwabArrayOfLong((unsigned long *)fp,n)
-#define	TIFFSwabArrayOfDouble(dp,n) TIFFSwabArrayOfLong((unsigned long *)dp,2*n)
-#endif /* vax */
-
-/*
- * These unions are used during floating point
- * conversions.  The macros given above define
- * the conversion operations.
- */
-
-typedef	struct ieeedouble {
-#if BIGENDIAN == 1
-#if !defined(_IBMR2)
-	unsigned	sign:1;
-	unsigned	exp:11;
-	unsigned long	mant:20;
-	unsigned	mant2;
-#else /* _IBMR2 */
-	unsigned	sign:1;
-	unsigned	exp:11;
-	unsigned	mant:20;
-	unsigned	mant2;
-#endif /* _IBMR2 */
-#else
-#if !defined(vax)
-#ifdef INT_16_BIT	/* MSDOS C compilers */
-	unsigned long	mant2;
-	unsigned long	mant:20;
-	unsigned long	exp:11;
-	unsigned long	sign:1;
-#else /* 32 bit ints */
-	unsigned	mant2;
-	unsigned long	mant:20;
-	unsigned	exp:11;
-	unsigned	sign:1;
-#endif /* 32 bit ints */
-#else
-	unsigned long	mant:20;
-	unsigned	exp:11;
-	unsigned	sign:1;
-	unsigned	mant2;
-#endif /* !vax */
-#endif
-} ieeedouble;
-typedef	struct ieeefloat {
-#if BIGENDIAN == 1
-#if !defined(_IBMR2)
-	unsigned	sign:1;
-	unsigned	exp:8;
-	unsigned long	mant:23;
-#else /* _IBMR2 */
-	unsigned	sign:1;
-	unsigned	exp:8;
-	unsigned	mant:23;
-#endif /* _IBMR2 */
-#else
-#ifdef INT_16_BIT	/* MSDOS C compilers */
-	unsigned long	mant:23;
-	unsigned long	exp:8;
-	unsigned long	sign:1;
-#else /* 32 bit ints */
-	unsigned long	mant:23;
-	unsigned	exp:8;
-	unsigned	sign:1;
-#endif /* 32 bit ints */
-#endif
-} ieeefloat;
-
-typedef	union {
-	ieeedouble	ieee;
-	nativedouble	native;
-	char		b[8];
-	double		d;
-} double_t;
-
-typedef	union {
-	ieeefloat	ieee;
-	nativefloat	native;
-	char		b[4];
-	float		f;
-} float_t;
-#endif /* _MACHDEP_ */
diff --git a/Utilities/CAI/cai_dll/inc/port.h b/Utilities/CAI/cai_dll/inc/port.h
deleted file mode 100755
index 806bedfa6b..0000000000
--- a/Utilities/CAI/cai_dll/inc/port.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Warning, this file was automatically created by the TIFF configure script
- * VERSION:	 v3.5.5
- * DATE:	 Fri Oct 6 16:24:03 MET DST 2000
- * TARGET:	 sparc-sun-solaris2.7
- * CCOMPILER:	 /usr/local/bin/gcc-2.95.2 19991024 (release)
- */
-#ifndef _PORT_
-#define _PORT_ 1
-#ifdef __cplusplus
-extern "C" {
-#endif
-#include <sys/types.h>
-#define HOST_FILLORDER FILLORDER_MSB2LSB
-#define HOST_BIGENDIAN	1
-#define HAVE_MMAP 1
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdlib.h>
-#include <fcntl.h>
-typedef double dblparam_t;
-#ifdef __STRICT_ANSI__
-#define	INLINE	__inline__
-#else
-#define	INLINE	inline
-#endif
-#define GLOBALDATA(TYPE,NAME)	extern TYPE NAME
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/Utilities/CAI/cai_dll/inc/t4.h b/Utilities/CAI/cai_dll/inc/t4.h
deleted file mode 100755
index fa4f5f75d0..0000000000
--- a/Utilities/CAI/cai_dll/inc/t4.h
+++ /dev/null
@@ -1,285 +0,0 @@
-/* $Id$ */
-
-/*
- * Copyright (c) 1988-1997 Sam Leffler
- * Copyright (c) 1991-1997 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.
- */
-
-#ifndef _T4_
-#define	_T4_
-/*
- * CCITT T.4 1D Huffman runlength codes and
- * related definitions.  Given the small sizes
- * of these tables it does not seem
- * worthwhile to make code & length 8 bits.
- */
-typedef struct tableentry {
-    unsigned short length;	/* bit length of g3 code */
-    unsigned short code;	/* g3 code */
-    short	runlen;		/* run length in bits */
-} tableentry;
-
-#define	EOL	0x001	/* EOL code value - 0000 0000 0000 1 */
-
-/* status values returned instead of a run length */
-#define	G3CODE_EOL	-1	/* NB: ACT_EOL - ACT_WRUNT */
-#define	G3CODE_INVALID	-2	/* NB: ACT_INVALID - ACT_WRUNT */
-#define	G3CODE_EOF	-3	/* end of input data */
-#define	G3CODE_INCOMP	-4	/* incomplete run code */
-
-/*
- * Note that these tables are ordered such that the
- * index into the table is known to be either the
- * run length, or (run length / 64) + a fixed offset.
- *
- * NB: The G3CODE_INVALID entries are only used
- *     during state generation (see mkg3states.c).
- */
-#ifdef G3CODES
-const tableentry TIFFFaxWhiteCodes[] = {
-    { 8, 0x35, 0 },	/* 0011 0101 */
-    { 6, 0x7, 1 },	/* 0001 11 */
-    { 4, 0x7, 2 },	/* 0111 */
-    { 4, 0x8, 3 },	/* 1000 */
-    { 4, 0xB, 4 },	/* 1011 */
-    { 4, 0xC, 5 },	/* 1100 */
-    { 4, 0xE, 6 },	/* 1110 */
-    { 4, 0xF, 7 },	/* 1111 */
-    { 5, 0x13, 8 },	/* 1001 1 */
-    { 5, 0x14, 9 },	/* 1010 0 */
-    { 5, 0x7, 10 },	/* 0011 1 */
-    { 5, 0x8, 11 },	/* 0100 0 */
-    { 6, 0x8, 12 },	/* 0010 00 */
-    { 6, 0x3, 13 },	/* 0000 11 */
-    { 6, 0x34, 14 },	/* 1101 00 */
-    { 6, 0x35, 15 },	/* 1101 01 */
-    { 6, 0x2A, 16 },	/* 1010 10 */
-    { 6, 0x2B, 17 },	/* 1010 11 */
-    { 7, 0x27, 18 },	/* 0100 111 */
-    { 7, 0xC, 19 },	/* 0001 100 */
-    { 7, 0x8, 20 },	/* 0001 000 */
-    { 7, 0x17, 21 },	/* 0010 111 */
-    { 7, 0x3, 22 },	/* 0000 011 */
-    { 7, 0x4, 23 },	/* 0000 100 */
-    { 7, 0x28, 24 },	/* 0101 000 */
-    { 7, 0x2B, 25 },	/* 0101 011 */
-    { 7, 0x13, 26 },	/* 0010 011 */
-    { 7, 0x24, 27 },	/* 0100 100 */
-    { 7, 0x18, 28 },	/* 0011 000 */
-    { 8, 0x2, 29 },	/* 0000 0010 */
-    { 8, 0x3, 30 },	/* 0000 0011 */
-    { 8, 0x1A, 31 },	/* 0001 1010 */
-    { 8, 0x1B, 32 },	/* 0001 1011 */
-    { 8, 0x12, 33 },	/* 0001 0010 */
-    { 8, 0x13, 34 },	/* 0001 0011 */
-    { 8, 0x14, 35 },	/* 0001 0100 */
-    { 8, 0x15, 36 },	/* 0001 0101 */
-    { 8, 0x16, 37 },	/* 0001 0110 */
-    { 8, 0x17, 38 },	/* 0001 0111 */
-    { 8, 0x28, 39 },	/* 0010 1000 */
-    { 8, 0x29, 40 },	/* 0010 1001 */
-    { 8, 0x2A, 41 },	/* 0010 1010 */
-    { 8, 0x2B, 42 },	/* 0010 1011 */
-    { 8, 0x2C, 43 },	/* 0010 1100 */
-    { 8, 0x2D, 44 },	/* 0010 1101 */
-    { 8, 0x4, 45 },	/* 0000 0100 */
-    { 8, 0x5, 46 },	/* 0000 0101 */
-    { 8, 0xA, 47 },	/* 0000 1010 */
-    { 8, 0xB, 48 },	/* 0000 1011 */
-    { 8, 0x52, 49 },	/* 0101 0010 */
-    { 8, 0x53, 50 },	/* 0101 0011 */
-    { 8, 0x54, 51 },	/* 0101 0100 */
-    { 8, 0x55, 52 },	/* 0101 0101 */
-    { 8, 0x24, 53 },	/* 0010 0100 */
-    { 8, 0x25, 54 },	/* 0010 0101 */
-    { 8, 0x58, 55 },	/* 0101 1000 */
-    { 8, 0x59, 56 },	/* 0101 1001 */
-    { 8, 0x5A, 57 },	/* 0101 1010 */
-    { 8, 0x5B, 58 },	/* 0101 1011 */
-    { 8, 0x4A, 59 },	/* 0100 1010 */
-    { 8, 0x4B, 60 },	/* 0100 1011 */
-    { 8, 0x32, 61 },	/* 0011 0010 */
-    { 8, 0x33, 62 },	/* 0011 0011 */
-    { 8, 0x34, 63 },	/* 0011 0100 */
-    { 5, 0x1B, 64 },	/* 1101 1 */
-    { 5, 0x12, 128 },	/* 1001 0 */
-    { 6, 0x17, 192 },	/* 0101 11 */
-    { 7, 0x37, 256 },	/* 0110 111 */
-    { 8, 0x36, 320 },	/* 0011 0110 */
-    { 8, 0x37, 384 },	/* 0011 0111 */
-    { 8, 0x64, 448 },	/* 0110 0100 */
-    { 8, 0x65, 512 },	/* 0110 0101 */
-    { 8, 0x68, 576 },	/* 0110 1000 */
-    { 8, 0x67, 640 },	/* 0110 0111 */
-    { 9, 0xCC, 704 },	/* 0110 0110 0 */
-    { 9, 0xCD, 768 },	/* 0110 0110 1 */
-    { 9, 0xD2, 832 },	/* 0110 1001 0 */
-    { 9, 0xD3, 896 },	/* 0110 1001 1 */
-    { 9, 0xD4, 960 },	/* 0110 1010 0 */
-    { 9, 0xD5, 1024 },	/* 0110 1010 1 */
-    { 9, 0xD6, 1088 },	/* 0110 1011 0 */
-    { 9, 0xD7, 1152 },	/* 0110 1011 1 */
-    { 9, 0xD8, 1216 },	/* 0110 1100 0 */
-    { 9, 0xD9, 1280 },	/* 0110 1100 1 */
-    { 9, 0xDA, 1344 },	/* 0110 1101 0 */
-    { 9, 0xDB, 1408 },	/* 0110 1101 1 */
-    { 9, 0x98, 1472 },	/* 0100 1100 0 */
-    { 9, 0x99, 1536 },	/* 0100 1100 1 */
-    { 9, 0x9A, 1600 },	/* 0100 1101 0 */
-    { 6, 0x18, 1664 },	/* 0110 00 */
-    { 9, 0x9B, 1728 },	/* 0100 1101 1 */
-    { 11, 0x8, 1792 },	/* 0000 0001 000 */
-    { 11, 0xC, 1856 },	/* 0000 0001 100 */
-    { 11, 0xD, 1920 },	/* 0000 0001 101 */
-    { 12, 0x12, 1984 },	/* 0000 0001 0010 */
-    { 12, 0x13, 2048 },	/* 0000 0001 0011 */
-    { 12, 0x14, 2112 },	/* 0000 0001 0100 */
-    { 12, 0x15, 2176 },	/* 0000 0001 0101 */
-    { 12, 0x16, 2240 },	/* 0000 0001 0110 */
-    { 12, 0x17, 2304 },	/* 0000 0001 0111 */
-    { 12, 0x1C, 2368 },	/* 0000 0001 1100 */
-    { 12, 0x1D, 2432 },	/* 0000 0001 1101 */
-    { 12, 0x1E, 2496 },	/* 0000 0001 1110 */
-    { 12, 0x1F, 2560 },	/* 0000 0001 1111 */
-    { 12, 0x1, G3CODE_EOL },	/* 0000 0000 0001 */
-    { 9, 0x1, G3CODE_INVALID },	/* 0000 0000 1 */
-    { 10, 0x1, G3CODE_INVALID },	/* 0000 0000 01 */
-    { 11, 0x1, G3CODE_INVALID },	/* 0000 0000 001 */
-    { 12, 0x0, G3CODE_INVALID },	/* 0000 0000 0000 */
-};
-
-const tableentry TIFFFaxBlackCodes[] = {
-    { 10, 0x37, 0 },	/* 0000 1101 11 */
-    { 3, 0x2, 1 },	/* 010 */
-    { 2, 0x3, 2 },	/* 11 */
-    { 2, 0x2, 3 },	/* 10 */
-    { 3, 0x3, 4 },	/* 011 */
-    { 4, 0x3, 5 },	/* 0011 */
-    { 4, 0x2, 6 },	/* 0010 */
-    { 5, 0x3, 7 },	/* 0001 1 */
-    { 6, 0x5, 8 },	/* 0001 01 */
-    { 6, 0x4, 9 },	/* 0001 00 */
-    { 7, 0x4, 10 },	/* 0000 100 */
-    { 7, 0x5, 11 },	/* 0000 101 */
-    { 7, 0x7, 12 },	/* 0000 111 */
-    { 8, 0x4, 13 },	/* 0000 0100 */
-    { 8, 0x7, 14 },	/* 0000 0111 */
-    { 9, 0x18, 15 },	/* 0000 1100 0 */
-    { 10, 0x17, 16 },	/* 0000 0101 11 */
-    { 10, 0x18, 17 },	/* 0000 0110 00 */
-    { 10, 0x8, 18 },	/* 0000 0010 00 */
-    { 11, 0x67, 19 },	/* 0000 1100 111 */
-    { 11, 0x68, 20 },	/* 0000 1101 000 */
-    { 11, 0x6C, 21 },	/* 0000 1101 100 */
-    { 11, 0x37, 22 },	/* 0000 0110 111 */
-    { 11, 0x28, 23 },	/* 0000 0101 000 */
-    { 11, 0x17, 24 },	/* 0000 0010 111 */
-    { 11, 0x18, 25 },	/* 0000 0011 000 */
-    { 12, 0xCA, 26 },	/* 0000 1100 1010 */
-    { 12, 0xCB, 27 },	/* 0000 1100 1011 */
-    { 12, 0xCC, 28 },	/* 0000 1100 1100 */
-    { 12, 0xCD, 29 },	/* 0000 1100 1101 */
-    { 12, 0x68, 30 },	/* 0000 0110 1000 */
-    { 12, 0x69, 31 },	/* 0000 0110 1001 */
-    { 12, 0x6A, 32 },	/* 0000 0110 1010 */
-    { 12, 0x6B, 33 },	/* 0000 0110 1011 */
-    { 12, 0xD2, 34 },	/* 0000 1101 0010 */
-    { 12, 0xD3, 35 },	/* 0000 1101 0011 */
-    { 12, 0xD4, 36 },	/* 0000 1101 0100 */
-    { 12, 0xD5, 37 },	/* 0000 1101 0101 */
-    { 12, 0xD6, 38 },	/* 0000 1101 0110 */
-    { 12, 0xD7, 39 },	/* 0000 1101 0111 */
-    { 12, 0x6C, 40 },	/* 0000 0110 1100 */
-    { 12, 0x6D, 41 },	/* 0000 0110 1101 */
-    { 12, 0xDA, 42 },	/* 0000 1101 1010 */
-    { 12, 0xDB, 43 },	/* 0000 1101 1011 */
-    { 12, 0x54, 44 },	/* 0000 0101 0100 */
-    { 12, 0x55, 45 },	/* 0000 0101 0101 */
-    { 12, 0x56, 46 },	/* 0000 0101 0110 */
-    { 12, 0x57, 47 },	/* 0000 0101 0111 */
-    { 12, 0x64, 48 },	/* 0000 0110 0100 */
-    { 12, 0x65, 49 },	/* 0000 0110 0101 */
-    { 12, 0x52, 50 },	/* 0000 0101 0010 */
-    { 12, 0x53, 51 },	/* 0000 0101 0011 */
-    { 12, 0x24, 52 },	/* 0000 0010 0100 */
-    { 12, 0x37, 53 },	/* 0000 0011 0111 */
-    { 12, 0x38, 54 },	/* 0000 0011 1000 */
-    { 12, 0x27, 55 },	/* 0000 0010 0111 */
-    { 12, 0x28, 56 },	/* 0000 0010 1000 */
-    { 12, 0x58, 57 },	/* 0000 0101 1000 */
-    { 12, 0x59, 58 },	/* 0000 0101 1001 */
-    { 12, 0x2B, 59 },	/* 0000 0010 1011 */
-    { 12, 0x2C, 60 },	/* 0000 0010 1100 */
-    { 12, 0x5A, 61 },	/* 0000 0101 1010 */
-    { 12, 0x66, 62 },	/* 0000 0110 0110 */
-    { 12, 0x67, 63 },	/* 0000 0110 0111 */
-    { 10, 0xF, 64 },	/* 0000 0011 11 */
-    { 12, 0xC8, 128 },	/* 0000 1100 1000 */
-    { 12, 0xC9, 192 },	/* 0000 1100 1001 */
-    { 12, 0x5B, 256 },	/* 0000 0101 1011 */
-    { 12, 0x33, 320 },	/* 0000 0011 0011 */
-    { 12, 0x34, 384 },	/* 0000 0011 0100 */
-    { 12, 0x35, 448 },	/* 0000 0011 0101 */
-    { 13, 0x6C, 512 },	/* 0000 0011 0110 0 */
-    { 13, 0x6D, 576 },	/* 0000 0011 0110 1 */
-    { 13, 0x4A, 640 },	/* 0000 0010 0101 0 */
-    { 13, 0x4B, 704 },	/* 0000 0010 0101 1 */
-    { 13, 0x4C, 768 },	/* 0000 0010 0110 0 */
-    { 13, 0x4D, 832 },	/* 0000 0010 0110 1 */
-    { 13, 0x72, 896 },	/* 0000 0011 1001 0 */
-    { 13, 0x73, 960 },	/* 0000 0011 1001 1 */
-    { 13, 0x74, 1024 },	/* 0000 0011 1010 0 */
-    { 13, 0x75, 1088 },	/* 0000 0011 1010 1 */
-    { 13, 0x76, 1152 },	/* 0000 0011 1011 0 */
-    { 13, 0x77, 1216 },	/* 0000 0011 1011 1 */
-    { 13, 0x52, 1280 },	/* 0000 0010 1001 0 */
-    { 13, 0x53, 1344 },	/* 0000 0010 1001 1 */
-    { 13, 0x54, 1408 },	/* 0000 0010 1010 0 */
-    { 13, 0x55, 1472 },	/* 0000 0010 1010 1 */
-    { 13, 0x5A, 1536 },	/* 0000 0010 1101 0 */
-    { 13, 0x5B, 1600 },	/* 0000 0010 1101 1 */
-    { 13, 0x64, 1664 },	/* 0000 0011 0010 0 */
-    { 13, 0x65, 1728 },	/* 0000 0011 0010 1 */
-    { 11, 0x8, 1792 },	/* 0000 0001 000 */
-    { 11, 0xC, 1856 },	/* 0000 0001 100 */
-    { 11, 0xD, 1920 },	/* 0000 0001 101 */
-    { 12, 0x12, 1984 },	/* 0000 0001 0010 */
-    { 12, 0x13, 2048 },	/* 0000 0001 0011 */
-    { 12, 0x14, 2112 },	/* 0000 0001 0100 */
-    { 12, 0x15, 2176 },	/* 0000 0001 0101 */
-    { 12, 0x16, 2240 },	/* 0000 0001 0110 */
-    { 12, 0x17, 2304 },	/* 0000 0001 0111 */
-    { 12, 0x1C, 2368 },	/* 0000 0001 1100 */
-    { 12, 0x1D, 2432 },	/* 0000 0001 1101 */
-    { 12, 0x1E, 2496 },	/* 0000 0001 1110 */
-    { 12, 0x1F, 2560 },	/* 0000 0001 1111 */
-    { 12, 0x1, G3CODE_EOL },	/* 0000 0000 0001 */
-    { 9, 0x1, G3CODE_INVALID },	/* 0000 0000 1 */
-    { 10, 0x1, G3CODE_INVALID },	/* 0000 0000 01 */
-    { 11, 0x1, G3CODE_INVALID },	/* 0000 0000 001 */
-    { 12, 0x0, G3CODE_INVALID },	/* 0000 0000 0000 */
-};
-#else
-extern	const tableentry TIFFFaxWhiteCodes[];
-extern	const tableentry TIFFFaxBlackCodes[];
-#endif
-#endif /* _T4_ */
diff --git a/Utilities/CAI/cai_dll/inc/tif_dir.h b/Utilities/CAI/cai_dll/inc/tif_dir.h
deleted file mode 100755
index 59c671a123..0000000000
--- a/Utilities/CAI/cai_dll/inc/tif_dir.h
+++ /dev/null
@@ -1,268 +0,0 @@
-/* $Header: tif_dir.h,v 1.1 01/01/15 15:24:36 cmf Exp $ */
-
-/*
- * Copyright (c) 1988-1997 Sam Leffler
- * Copyright (c) 1991-1997 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.
- */
-
-#ifndef _TIFFDIR_
-#define	_TIFFDIR_
-/*
- * ``Library-private'' Directory-related Definitions.
- */
-
-/*
- * Internal format of a TIFF directory entry.
- */
-typedef	struct {
-#define	FIELD_SETLONGS	3
-	/* bit vector of fields that are set */
-	u_long	td_fieldsset[FIELD_SETLONGS];
-
-	uint32	td_imagewidth, td_imagelength, td_imagedepth;
-	uint32	td_tilewidth, td_tilelength, td_tiledepth;
-	uint32	td_subfiletype;
-	uint16	td_bitspersample;
-	uint16	td_sampleformat;
-	uint16	td_compression;
-	uint16	td_photometric;
-	uint16	td_threshholding;
-	uint16	td_fillorder;
-	uint16	td_orientation;
-	uint16	td_samplesperpixel;
-	uint32	td_rowsperstrip;
-	uint16	td_minsamplevalue, td_maxsamplevalue;
-	double	td_sminsamplevalue, td_smaxsamplevalue;
-	float	td_xresolution, td_yresolution;
-	uint16	td_resolutionunit;
-	uint16	td_planarconfig;
-	float	td_xposition, td_yposition;
-	uint16	td_pagenumber[2];
-	uint16*	td_colormap[3];
-	uint16	td_halftonehints[2];
-	uint16	td_extrasamples;
-	uint16*	td_sampleinfo;
-	double	td_stonits;
-	char*	td_documentname;
-	char*	td_artist;
-	char*	td_datetime;
-	char*	td_hostcomputer;
-	char*	td_imagedescription;
-	char*	td_make;
-	char*	td_model;
-	char*	td_software;
-	char*	td_pagename;
-	tstrip_t td_stripsperimage;
-	tstrip_t td_nstrips;		/* size of offset & bytecount arrays */
-	uint32*	td_stripoffset;
-	uint32*	td_stripbytecount;
-#if SUBIFD_SUPPORT
-	uint16	td_nsubifd;
-	uint32*	td_subifd;
-#endif
-#ifdef YCBCR_SUPPORT
-	float*	td_ycbcrcoeffs;
-	uint16	td_ycbcrsubsampling[2];
-	uint16	td_ycbcrpositioning;
-#endif
-#ifdef COLORIMETRY_SUPPORT
-	float*	td_whitepoint;
-	float*	td_primarychromas;
-	float*	td_refblackwhite;
-	uint16*	td_transferfunction[3];
-#endif
-#ifdef CMYK_SUPPORT
-	uint16	td_inkset;
-	uint16	td_ninks;
-	uint16	td_dotrange[2];
-	int	td_inknameslen;
-	char*	td_inknames;
-	char*	td_targetprinter;
-#endif
-#ifdef ICC_SUPPORT
-	uint32	td_profileLength;
-	void	*td_profileData;
-#endif
-#ifdef PHOTOSHOP_SUPPORT
-	uint32	td_photoshopLength;
-	void	*td_photoshopData;
-#endif
-#ifdef IPTC_SUPPORT
-	uint32	td_richtiffiptcLength;
-	void	*td_richtiffiptcData;
-#endif
-        /* Begin Pixar Tag values. */
-        uint32	td_imagefullwidth, td_imagefulllength;
- 	char*	td_textureformat;
- 	char*	td_wrapmodes;
- 	float	td_fovcot;
- 	float*	td_matrixWorldToScreen;
- 	float*	td_matrixWorldToCamera;
- 	/* End Pixar Tag Values. */
-} TIFFDirectory;
-
-/*
- * Field flags used to indicate fields that have
- * been set in a directory, and to reference fields
- * when manipulating a directory.
- */
-
-/*
- * FIELD_IGNORE is used to signify tags that are to
- * be processed but otherwise ignored.  This permits
- * antiquated tags to be quietly read and discarded.
- * Note that a bit *is* allocated for ignored tags;
- * this is understood by the directory reading logic
- * which uses this fact to avoid special-case handling
- */ 
-#define	FIELD_IGNORE			0
-
-/* multi-item fields */
-#define	FIELD_IMAGEDIMENSIONS		1
-#define FIELD_TILEDIMENSIONS		2
-#define	FIELD_RESOLUTION		3
-#define	FIELD_POSITION			4
-
-/* single-item fields */
-#define	FIELD_SUBFILETYPE		5
-#define	FIELD_BITSPERSAMPLE		6
-#define	FIELD_COMPRESSION		7
-#define	FIELD_PHOTOMETRIC		8
-#define	FIELD_THRESHHOLDING		9
-#define	FIELD_FILLORDER			10
-#define	FIELD_DOCUMENTNAME		11
-#define	FIELD_IMAGEDESCRIPTION		12
-#define	FIELD_MAKE			13
-#define	FIELD_MODEL			14
-#define	FIELD_ORIENTATION		15
-#define	FIELD_SAMPLESPERPIXEL		16
-#define	FIELD_ROWSPERSTRIP		17
-#define	FIELD_MINSAMPLEVALUE		18
-#define	FIELD_MAXSAMPLEVALUE		19
-#define	FIELD_PLANARCONFIG		20
-#define	FIELD_PAGENAME			21
-#define	FIELD_RESOLUTIONUNIT		22
-#define	FIELD_PAGENUMBER		23
-#define	FIELD_STRIPBYTECOUNTS		24
-#define	FIELD_STRIPOFFSETS		25
-#define	FIELD_COLORMAP			26
-#define FIELD_ARTIST			27
-#define FIELD_DATETIME			28
-#define FIELD_HOSTCOMPUTER		29
-#define FIELD_SOFTWARE			30
-#define	FIELD_EXTRASAMPLES		31
-#define FIELD_SAMPLEFORMAT		32
-#define	FIELD_SMINSAMPLEVALUE		33
-#define	FIELD_SMAXSAMPLEVALUE		34
-#define FIELD_IMAGEDEPTH		35
-#define FIELD_TILEDEPTH			36
-#define	FIELD_HALFTONEHINTS		37
-#define FIELD_YCBCRCOEFFICIENTS		38
-#define FIELD_YCBCRSUBSAMPLING		39
-#define FIELD_YCBCRPOSITIONING		40
-#define	FIELD_REFBLACKWHITE		41
-#define	FIELD_WHITEPOINT		42
-#define	FIELD_PRIMARYCHROMAS		43
-#define	FIELD_TRANSFERFUNCTION		44
-#define	FIELD_INKSET			45
-#define	FIELD_INKNAMES			46
-#define	FIELD_DOTRANGE			47
-#define	FIELD_TARGETPRINTER		48
-#define	FIELD_SUBIFD			49
-#define	FIELD_NUMBEROFINKS		50
-#define FIELD_ICCPROFILE		51
-#define FIELD_PHOTOSHOP			52
-#define FIELD_RICHTIFFIPTC		53
-#define FIELD_STONITS			54
-/* Begin PIXAR */
-#define	FIELD_IMAGEFULLWIDTH		55
-#define	FIELD_IMAGEFULLLENGTH		56
-#define FIELD_TEXTUREFORMAT		57
-#define FIELD_WRAPMODES			58
-#define FIELD_FOVCOT			59
-#define FIELD_MATRIX_WORLDTOSCREEN	60
-#define FIELD_MATRIX_WORLDTOCAMERA	61
-/* end of support for well-known tags; codec-private tags follow */
-#define	FIELD_CODEC			62	/* base of codec-private tags */
-/*
- * Pseudo-tags don't normally need field bits since they
- * are not written to an output file (by definition).
- * The library also has express logic to always query a
- * codec for a pseudo-tag so allocating a field bit for
- * one is a waste.   If codec wants to promote the notion
- * of a pseudo-tag being ``set'' or ``unset'' then it can
- * do using internal state flags without polluting the
- * field bit space defined for real tags.
- */
-#define	FIELD_PSEUDO			0
-
-#define	FIELD_LAST			(32*FIELD_SETLONGS-1)
-
-#define	TIFFExtractData(tif, type, v) \
-    ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \
-        ((v) >> (tif)->tif_typeshift[type]) & (tif)->tif_typemask[type] : \
-	(v) & (tif)->tif_typemask[type]))
-#define	TIFFInsertData(tif, type, v) \
-    ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \
-        ((v) & (tif)->tif_typemask[type]) << (tif)->tif_typeshift[type] : \
-	(v) & (tif)->tif_typemask[type]))
-
-typedef	struct {
-	ttag_t	field_tag;		/* field's tag */
-	short	field_readcount;	/* read count/TIFF_VARIABLE/TIFF_SPP */
-	short	field_writecount;	/* write count/TIFF_VARIABLE */
-	TIFFDataType field_type;	/* type of associated data */
-	u_short	field_bit;		/* bit in fieldsset bit vector */
-	u_char	field_oktochange;	/* if true, can change while writing */
-	u_char	field_passcount;	/* if true, pass dir count on set */
-	char	*field_name;		/* ASCII name */
-} TIFFFieldInfo;
-
-#define	TIFF_ANY	TIFF_NOTYPE	/* for field descriptor searching */
-#define	TIFF_VARIABLE	-1		/* marker for variable length tags */
-#define	TIFF_SPP	-2		/* marker for SamplesPerPixel tags */
-#define	TIFF_VARIABLE2	-3		/* marker for uint32 var-length tags */
-
-extern	const int tiffDataWidth[];	/* table of tag datatype widths */
-
-#define BITn(n)				(((u_long)1L)<<((n)&0x1f)) 
-#define BITFIELDn(tif, n)		((tif)->tif_dir.td_fieldsset[(n)/32]) 
-#define TIFFFieldSet(tif, field)	(BITFIELDn(tif, field) & BITn(field)) 
-#define TIFFSetFieldBit(tif, field)	(BITFIELDn(tif, field) |= BITn(field))
-#define TIFFClrFieldBit(tif, field)	(BITFIELDn(tif, field) &= ~BITn(field))
-
-#define	FieldSet(fields, f)		(fields[(f)/32] & BITn(f))
-#define	ResetFieldBit(fields, f)	(fields[(f)/32] &= ~BITn(f))
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-extern	void _TIFFSetupFieldInfo(TIFF*);
-extern	void _TIFFMergeFieldInfo(TIFF*, const TIFFFieldInfo[], int);
-extern	void _TIFFPrintFieldInfo(TIFF*, FILE*);
-extern	const TIFFFieldInfo* _TIFFFindFieldInfo(TIFF*, ttag_t, TIFFDataType);
-extern	const TIFFFieldInfo* _TIFFFieldWithTag(TIFF*, ttag_t);
-extern	TIFFDataType _TIFFSampleToTagType(TIFF*);
-#if defined(__cplusplus)
-}
-#endif
-#endif /* _TIFFDIR_ */
diff --git a/Utilities/CAI/cai_dll/inc/tif_fax3.h b/Utilities/CAI/cai_dll/inc/tif_fax3.h
deleted file mode 100755
index a9f1fcb23b..0000000000
--- a/Utilities/CAI/cai_dll/inc/tif_fax3.h
+++ /dev/null
@@ -1,522 +0,0 @@
-/* $Id$ */
-
-/*
- * Copyright (c) 1990-1997 Sam Leffler
- * Copyright (c) 1991-1997 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.
- */
-
-#ifndef _FAX3_
-#define	_FAX3_
-/*
- * TIFF Library.
- *
- * CCITT Group 3 (T.4) and Group 4 (T.6) Decompression Support.
- *
- * Decoder support is derived, with permission, from the code
- * in Frank Cringle's viewfax program;
- *      Copyright (C) 1990, 1995  Frank D. Cringle.
- */
-#include "tiff.h"
-
-/*
- * To override the default routine used to image decoded
- * spans one can use the pseduo tag TIFFTAG_FAXFILLFUNC.
- * The routine must have the type signature given below;
- * for example:
- *
- * fillruns(unsigned char* buf, uint32* runs, uint32* erun, uint32 lastx)
- *
- * where buf is place to set the bits, runs is the array of b&w run
- * lengths (white then black), erun is the last run in the array, and
- * lastx is the width of the row in pixels.  Fill routines can assume
- * the run array has room for at least lastx runs and can overwrite
- * data in the run array as needed (e.g. to append zero runs to bring
- * the count up to a nice multiple).
- */
-typedef	void (*TIFFFaxFillFunc)(unsigned char*, uint32*, uint32*, uint32);
-
-/*
- * The default run filler; made external for other decoders.
- */
-#if defined(__cplusplus)
-extern "C" {
-#endif
-extern	void _TIFFFax3fillruns(unsigned char*, uint32*, uint32*, uint32);
-#if defined(__cplusplus)
-}
-#endif
-
-
-/* finite state machine codes */
-#define S_Null		0
-#define S_Pass		1
-#define S_Horiz		2
-#define S_V0		3
-#define S_VR		4
-#define S_VL		5
-#define S_Ext		6
-#define S_TermW		7
-#define S_TermB		8
-#define S_MakeUpW	9
-#define S_MakeUpB	10
-#define S_MakeUp	11
-#define S_EOL		12
-
-typedef struct {		/* state table entry */
-	unsigned char State;	/* see above */
-	unsigned char Width;	/* width of code in bits */
-	uint32	Param;		/* unsigned 32-bit run length in bits */
-} TIFFFaxTabEnt;
-
-extern	const TIFFFaxTabEnt TIFFFaxMainTable[];
-extern	const TIFFFaxTabEnt TIFFFaxWhiteTable[];
-extern	const TIFFFaxTabEnt TIFFFaxBlackTable[];
-
-/*
- * The following macros define the majority of the G3/G4 decoder
- * algorithm using the state tables defined elsewhere.  To build
- * a decoder you need some setup code and some glue code. Note
- * that you may also need/want to change the way the NeedBits*
- * macros get input data if, for example, you know the data to be
- * decoded is properly aligned and oriented (doing so before running
- * the decoder can be a big performance win).
- *
- * Consult the decoder in the TIFF library for an idea of what you
- * need to define and setup to make use of these definitions.
- *
- * NB: to enable a debugging version of these macros define FAX3_DEBUG
- *     before including this file.  Trace output goes to stdout.
- */
-
-#ifndef EndOfData
-#define EndOfData()	(cp >= ep)
-#endif
-/*
- * Need <=8 or <=16 bits of input data.  Unlike viewfax we
- * cannot use/assume a word-aligned, properly bit swizzled
- * input data set because data may come from an arbitrarily
- * aligned, read-only source such as a memory-mapped file.
- * Note also that the viewfax decoder does not check for
- * running off the end of the input data buffer.  This is
- * possible for G3-encoded data because it prescans the input
- * data to count EOL markers, but can cause problems for G4
- * data.  In any event, we don't prescan and must watch for
- * running out of data since we can't permit the library to
- * scan past the end of the input data buffer.
- *
- * Finally, note that we must handle remaindered data at the end
- * of a strip specially.  The coder asks for a fixed number of
- * bits when scanning for the next code.  This may be more bits
- * than are actually present in the data stream.  If we appear
- * to run out of data but still have some number of valid bits
- * remaining then we makeup the requested amount with zeros and
- * return successfully.  If the returned data is incorrect then
- * we should be called again and get a premature EOF error;
- * otherwise we should get the right answer.
- */
-#ifndef NeedBits8
-#define NeedBits8(n,eoflab) do {					\
-    if (BitsAvail < (n)) {						\
-	if (EndOfData()) {						\
-	    if (BitsAvail == 0)			/* no valid bits */	\
-		goto eoflab;						\
-	    BitsAvail = (n);			/* pad with zeros */	\
-	} else {							\
-	    BitAcc |= ((uint32) bitmap[*cp++])<<BitsAvail;		\
-	    BitsAvail += 8;						\
-	}								\
-    }									\
-} while (0)
-#endif
-#ifndef NeedBits16
-#define NeedBits16(n,eoflab) do {					\
-    if (BitsAvail < (n)) {						\
-	if (EndOfData()) {						\
-	    if (BitsAvail == 0)			/* no valid bits */	\
-		goto eoflab;						\
-	    BitsAvail = (n);			/* pad with zeros */	\
-	} else {							\
-	    BitAcc |= ((uint32) bitmap[*cp++])<<BitsAvail;		\
-	    if ((BitsAvail += 8) < (n)) {				\
-		if (EndOfData()) {					\
-		    /* NB: we know BitsAvail is non-zero here */	\
-		    BitsAvail = (n);		/* pad with zeros */	\
-		} else {						\
-		    BitAcc |= ((uint32) bitmap[*cp++])<<BitsAvail;	\
-		    BitsAvail += 8;					\
-		}							\
-	    }								\
-	}								\
-    }									\
-} while (0)
-#endif
-#define GetBits(n)	(BitAcc & ((1<<(n))-1))
-#define ClrBits(n) do {							\
-    BitsAvail -= (n);							\
-    BitAcc >>= (n);							\
-} while (0)
-
-#ifdef FAX3_DEBUG
-static const char* StateNames[] = {
-    "Null   ",
-    "Pass   ",
-    "Horiz  ",
-    "V0     ",
-    "VR     ",
-    "VL     ",
-    "Ext    ",
-    "TermW  ",
-    "TermB  ",
-    "MakeUpW",
-    "MakeUpB",
-    "MakeUp ",
-    "EOL    ",
-};
-#define DEBUG_SHOW putchar(BitAcc & (1 << t) ? '1' : '0')
-#define LOOKUP8(wid,tab,eoflab) do {					\
-    int t;								\
-    NeedBits8(wid,eoflab);						\
-    TabEnt = tab + GetBits(wid);					\
-    printf("%08lX/%d: %s%5d\t", (long) BitAcc, BitsAvail,		\
-	   StateNames[TabEnt->State], TabEnt->Param);			\
-    for (t = 0; t < TabEnt->Width; t++)					\
-	DEBUG_SHOW;							\
-    putchar('\n');							\
-    fflush(stdout);							\
-    ClrBits(TabEnt->Width);						\
-} while (0)
-#define LOOKUP16(wid,tab,eoflab) do {					\
-    int t;								\
-    NeedBits16(wid,eoflab);						\
-    TabEnt = tab + GetBits(wid);					\
-    printf("%08lX/%d: %s%5d\t", (long) BitAcc, BitsAvail,		\
-	   StateNames[TabEnt->State], TabEnt->Param);			\
-    for (t = 0; t < TabEnt->Width; t++)					\
-	DEBUG_SHOW;							\
-    putchar('\n');							\
-    fflush(stdout);							\
-    ClrBits(TabEnt->Width);						\
-} while (0)
-
-#define SETVAL(x) do {							\
-    *pa++ = RunLength + (x);						\
-    printf("SETVAL: %d\t%d\n", RunLength + (x), a0);			\
-    a0 += x;								\
-    RunLength = 0;							\
-} while (0)
-#else
-#define LOOKUP8(wid,tab,eoflab) do {					\
-    NeedBits8(wid,eoflab);						\
-    TabEnt = tab + GetBits(wid);					\
-    ClrBits(TabEnt->Width);						\
-} while (0)
-#define LOOKUP16(wid,tab,eoflab) do {					\
-    NeedBits16(wid,eoflab);						\
-    TabEnt = tab + GetBits(wid);					\
-    ClrBits(TabEnt->Width);						\
-} while (0)
-
-/*
- * Append a run to the run length array for the
- * current row and reset decoding state.
- */
-#define SETVAL(x) do {							\
-    *pa++ = RunLength + (x);						\
-    a0 += (x);								\
-    RunLength = 0;							\
-} while (0)
-#endif
-
-/*
- * Synchronize input decoding at the start of each
- * row by scanning for an EOL (if appropriate) and
- * skipping any trash data that might be present
- * after a decoding error.  Note that the decoding
- * done elsewhere that recognizes an EOL only consumes
- * 11 consecutive zero bits.  This means that if EOLcnt
- * is non-zero then we still need to scan for the final flag
- * bit that is part of the EOL code.
- */
-#define	SYNC_EOL(eoflab) do {						\
-    if (EOLcnt == 0) {							\
-	for (;;) {							\
-	    NeedBits16(11,eoflab);					\
-	    if (GetBits(11) == 0)					\
-		break;							\
-	    ClrBits(1);							\
-	}								\
-    }									\
-    for (;;) {								\
-	NeedBits8(8,eoflab);						\
-	if (GetBits(8))							\
-	    break;							\
-	ClrBits(8);							\
-    }									\
-    while (GetBits(1) == 0)						\
-	ClrBits(1);							\
-    ClrBits(1);				/* EOL bit */			\
-    EOLcnt = 0;				/* reset EOL counter/flag */	\
-} while (0)
-
-/*
- * Cleanup the array of runs after decoding a row.
- * We adjust final runs to insure the user buffer is not
- * overwritten and/or undecoded area is white filled.
- */
-#define	CLEANUP_RUNS() do {						\
-    if (RunLength)							\
-	SETVAL(0);							\
-    if (a0 != lastx) {							\
-	badlength(a0, lastx);						\
-	while (a0 > lastx && pa > thisrun)				\
-	    a0 -= *--pa;						\
-	if (a0 < lastx) {						\
-	    if (a0 < 0)							\
-		a0 = 0;							\
-	    if ((pa-thisrun)&1)						\
-		SETVAL(0);						\
-	    SETVAL(lastx - a0);						\
-	} else if (a0 > lastx) {					\
-	    SETVAL(lastx);						\
-	    SETVAL(0);							\
-	}								\
-    }									\
-} while (0)
-
-/*
- * Decode a line of 1D-encoded data.
- *
- * The line expanders are written as macros so that they can be reused
- * but still have direct access to the local variables of the "calling"
- * function.
- *
- * Note that unlike the original version we have to explicitly test for
- * a0 >= lastx after each black/white run is decoded.  This is because
- * the original code depended on the input data being zero-padded to
- * insure the decoder recognized an EOL before running out of data.
- */
-#define EXPAND1D(eoflab) do {						\
-    for (;;) {								\
-	for (;;) {							\
-	    LOOKUP16(12, TIFFFaxWhiteTable, eof1d);			\
-	    switch (TabEnt->State) {					\
-	    case S_EOL:							\
-		EOLcnt = 1;						\
-		goto done1d;						\
-	    case S_TermW:						\
-		SETVAL(TabEnt->Param);					\
-		goto doneWhite1d;					\
-	    case S_MakeUpW:						\
-	    case S_MakeUp:						\
-		a0 += TabEnt->Param;					\
-		RunLength += TabEnt->Param;				\
-		break;							\
-	    default:							\
-		unexpected("WhiteTable", a0);				\
-		goto done1d;						\
-	    }								\
-	}								\
-    doneWhite1d:							\
-	if (a0 >= lastx)						\
-	    goto done1d;						\
-	for (;;) {							\
-	    LOOKUP16(13, TIFFFaxBlackTable, eof1d);			\
-	    switch (TabEnt->State) {					\
-	    case S_EOL:							\
-		EOLcnt = 1;						\
-		goto done1d;						\
-	    case S_TermB:						\
-		SETVAL(TabEnt->Param);					\
-		goto doneBlack1d;					\
-	    case S_MakeUpB:						\
-	    case S_MakeUp:						\
-		a0 += TabEnt->Param;					\
-		RunLength += TabEnt->Param;				\
-		break;							\
-	    default:							\
-		unexpected("BlackTable", a0);				\
-		goto done1d;						\
-	    }								\
-	}								\
-    doneBlack1d:							\
-	if (a0 >= lastx)						\
-	    goto done1d;						\
-    }									\
-eof1d:									\
-    prematureEOF(a0);							\
-    CLEANUP_RUNS();							\
-    goto eoflab;							\
-done1d:									\
-    CLEANUP_RUNS();							\
-} while (0)
-
-/*
- * Update the value of b1 using the array
- * of runs for the reference line.
- */
-#define CHECK_b1 do {							\
-    if (pa != thisrun) while (b1 <= a0 && b1 < lastx) {			\
-	b1 += pb[0] + pb[1];						\
-	pb += 2;							\
-    }									\
-} while (0)
-
-/*
- * Expand a row of 2D-encoded data.
- */
-#define EXPAND2D(eoflab) do {						\
-    while (a0 < lastx) {						\
-	LOOKUP8(7, TIFFFaxMainTable, eof2d);				\
-	switch (TabEnt->State) {					\
-	case S_Pass:							\
-	    CHECK_b1;							\
-	    b1 += *pb++;						\
-	    RunLength += b1 - a0;					\
-	    a0 = b1;							\
-	    b1 += *pb++;						\
-	    break;							\
-	case S_Horiz:							\
-	    if ((pa-thisrun)&1) {					\
-		for (;;) {	/* black first */			\
-		    LOOKUP16(13, TIFFFaxBlackTable, eof2d);		\
-		    switch (TabEnt->State) {				\
-		    case S_TermB:					\
-			SETVAL(TabEnt->Param);				\
-			goto doneWhite2da;				\
-		    case S_MakeUpB:					\
-		    case S_MakeUp:					\
-			a0 += TabEnt->Param;				\
-			RunLength += TabEnt->Param;			\
-			break;						\
-		    default:						\
-			goto badBlack2d;				\
-		    }							\
-		}							\
-	    doneWhite2da:;						\
-		for (;;) {	/* then white */			\
-		    LOOKUP16(12, TIFFFaxWhiteTable, eof2d);		\
-		    switch (TabEnt->State) {				\
-		    case S_TermW:					\
-			SETVAL(TabEnt->Param);				\
-			goto doneBlack2da;				\
-		    case S_MakeUpW:					\
-		    case S_MakeUp:					\
-			a0 += TabEnt->Param;				\
-			RunLength += TabEnt->Param;			\
-			break;						\
-		    default:						\
-			goto badWhite2d;				\
-		    }							\
-		}							\
-	    doneBlack2da:;						\
-	    } else {							\
-		for (;;) {	/* white first */			\
-		    LOOKUP16(12, TIFFFaxWhiteTable, eof2d);		\
-		    switch (TabEnt->State) {				\
-		    case S_TermW:					\
-			SETVAL(TabEnt->Param);				\
-			goto doneWhite2db;				\
-		    case S_MakeUpW:					\
-		    case S_MakeUp:					\
-			a0 += TabEnt->Param;				\
-			RunLength += TabEnt->Param;			\
-			break;						\
-		    default:						\
-			goto badWhite2d;				\
-		    }							\
-		}							\
-	    doneWhite2db:;						\
-		for (;;) {	/* then black */			\
-		    LOOKUP16(13, TIFFFaxBlackTable, eof2d);		\
-		    switch (TabEnt->State) {				\
-		    case S_TermB:					\
-			SETVAL(TabEnt->Param);				\
-			goto doneBlack2db;				\
-		    case S_MakeUpB:					\
-		    case S_MakeUp:					\
-			a0 += TabEnt->Param;				\
-			RunLength += TabEnt->Param;			\
-			break;						\
-		    default:						\
-			goto badBlack2d;				\
-		    }							\
-		}							\
-	    doneBlack2db:;						\
-	    }								\
-	    CHECK_b1;							\
-	    break;							\
-	case S_V0:							\
-	    CHECK_b1;							\
-	    SETVAL(b1 - a0);						\
-	    b1 += *pb++;						\
-	    break;							\
-	case S_VR:							\
-	    CHECK_b1;							\
-	    SETVAL(b1 - a0 + TabEnt->Param);				\
-	    b1 += *pb++;						\
-	    break;							\
-	case S_VL:							\
-	    CHECK_b1;							\
-	    SETVAL(b1 - a0 - TabEnt->Param);				\
-	    b1 -= *--pb;						\
-	    break;							\
-	case S_Ext:							\
-	    *pa++ = lastx - a0;						\
-	    extension(a0);						\
-	    goto eol2d;							\
-	case S_EOL:							\
-	    *pa++ = lastx - a0;						\
-	    NeedBits8(5,eof2d);						\
-	    if (GetBits(5))						\
-		unexpected("EOL", a0);					\
-	    EOLcnt = 1;							\
-	    goto eol2d;							\
-	default:							\
-	badMain2d:							\
-	    unexpected("MainTable", a0);				\
-	    goto eol2d;							\
-	badBlack2d:							\
-	    unexpected("BlackTable", a0);				\
-	    goto eol2d;							\
-	badWhite2d:							\
-	    unexpected("WhiteTable", a0);				\
-	    goto eol2d;							\
-	eof2d:								\
-	    prematureEOF(a0);						\
-	    CLEANUP_RUNS();						\
-	    goto eoflab;						\
-	}								\
-    }									\
-    if (RunLength) {							\
-	if (RunLength + a0 < lastx) {					\
-	    /* expect a final V0 */					\
-	    NeedBits8(1,eof2d);						\
-	    if (!GetBits(1))						\
-		goto badMain2d;						\
-	    ClrBits(1);							\
-	}								\
-	SETVAL(0);							\
-    }									\
-eol2d:									\
-    CLEANUP_RUNS();							\
-} while (0)
-#endif /* _FAX3_ */
diff --git a/Utilities/CAI/cai_dll/inc/tif_predict.h b/Utilities/CAI/cai_dll/inc/tif_predict.h
deleted file mode 100755
index 52ce8cba5a..0000000000
--- a/Utilities/CAI/cai_dll/inc/tif_predict.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* $Header: tif_predict.h,v 1.1 01/01/15 15:24:36 cmf Exp $ */
-
-/*
- * Copyright (c) 1995-1997 Sam Leffler
- * Copyright (c) 1995-1997 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.
- */
-
-#ifndef _TIFFPREDICT_
-#define	_TIFFPREDICT_
-/*
- * ``Library-private'' Support for the Predictor Tag
- */
-
-/*
- * Codecs that want to support the Predictor tag must place
- * this structure first in their private state block so that
- * the predictor code can cast tif_data to find its state.
- */
-typedef struct {
-	int	predictor;		/* predictor tag value */
-	int	stride;			/* sample stride over data */
-	tsize_t	rowsize;		/* tile/strip row size */
-
-	TIFFPostMethod	pfunc;		/* horizontal differencer/accumulator */
-	TIFFCodeMethod	coderow;	/* parent codec encode/decode row */
-	TIFFCodeMethod	codestrip;	/* parent codec encode/decode strip */
-	TIFFCodeMethod	codetile;	/* parent codec encode/decode tile */
-	TIFFVGetMethod	vgetparent;	/* super-class method */
-	TIFFVSetMethod	vsetparent;	/* super-class method */
-	TIFFPrintMethod	printdir;	/* super-class method */
-	TIFFBoolMethod	setupdecode;	/* super-class method */
-	TIFFBoolMethod	setupencode;	/* super-class method */
-} TIFFPredictorState;
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-extern	int TIFFPredictorInit(TIFF*);
-#if defined(__cplusplus)
-}
-#endif
-#endif /* _TIFFPREDICT_ */
diff --git a/Utilities/CAI/cai_dll/inc/tiff.h b/Utilities/CAI/cai_dll/inc/tiff.h
deleted file mode 100755
index f4e08027c6..0000000000
--- a/Utilities/CAI/cai_dll/inc/tiff.h
+++ /dev/null
@@ -1,440 +0,0 @@
-/* $Header: tiff.h,v 1.3 01/01/15 15:24:31 cmf Exp $ */
-
-/*
- * Copyright (c) 1988-1997 Sam Leffler
- * Copyright (c) 1991-1997 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.
- */
-
-#ifndef _TIFF_
-#define	_TIFF_
-/*
- * Tag Image File Format (TIFF)
- *
- * Based on Rev 6.0 from:
- *    Developer's Desk
- *    Aldus Corporation
- *    411 First Ave. South
- *    Suite 200
- *    Seattle, WA  98104
- *    206-622-5500
- */
-#define	TIFF_VERSION	42
-
-#define	TIFF_BIGENDIAN		0x4d4d
-#define	TIFF_LITTLEENDIAN	0x4949
-
-#ifndef _TIFF_DATA_TYPEDEFS_
-#define _TIFF_DATA_TYPEDEFS_
-/*
- * Intrinsic data types required by the file format:
- *
- * 8-bit quantities	int8TIFF/uint8TIFF
- * 16-bit quantities	int16TIFF/uint16TIFF
- * 32-bit quantities	int32TIFF/uint32TIFF
- * strings		unsigned char*
- */
-/*#ifdef __STDC__
-typedef	signed char int8TIFF;*/	/* NB: non-ANSI compilers may not grok */
-/*#else
-typedef	char int8TIFF;
-#endif  Modif Regine*/
-typedef	char int8TIFF;
-typedef	unsigned char uint8TIFF;
-typedef	short int16TIFF;
-typedef	unsigned short uint16TIFF;	/* sizeof (uint16TIFF) must == 2 */
-#if defined(__alpha) ||defined(__LP64__)||defined(__sparcv9) ||  (defined(_MIPS_SZLONG) && _MIPS_SZLONG == 64)
-typedef	int int32TIFF;
-typedef	unsigned int uint32TIFF;	/* sizeof (uint32TIFF) must == 4 */
-#else
-typedef	long int32TIFF;
-typedef	unsigned long uint32TIFF;	/* sizeof (uint32TIFF) must == 4 */
-#endif
-#endif /* _TIFF_DATA_TYPEDEFS_ */
-
-/*	For TIFFReassignTagToIgnore */
-enum TIFFIgnoreSense /* IGNORE tag table */
-{
-	TIS_STORE,
-	TIS_EXTRACT,
-	TIS_EMPTY
-};
-
-typedef	struct {
-	uint16TIFF	tiff_magic;	/* magic number (defines byte order) */
-	uint16TIFF	tiff_version;	/* TIFF version number */
-	uint32TIFF	tiff_diroff;	/* byte offset to first directory */
-} TIFFHeader;
-
-/*
- * TIFF Image File Directories are comprised of
- * a table of field descriptors of the form shown
- * below.  The table is sorted in ascending order
- * by tag.  The values associated with each entry
- * are disjoint and may appear anywhere in the file
- * (so long as they are placed on a word boundary).
- *
- * If the value is 4 bytes or less, then it is placed
- * in the offset field to save space.  If the value
- * is less than 4 bytes, it is left-justified in the
- * offset field.
- */
-typedef	struct {
-	uint16TIFF	tdir_tag;	/* see below */
-	uint16TIFF	tdir_type;	/* data type; see below */
-	uint32TIFF  tdir_count;	/* number of items; length in spec */
-	uint32TIFF  tdir_offset;	/* byte offset to field data */
-} TIFFDirEntry;
-
-/*
- * NB: In the comments below,
- *  - items marked with a + are obsoleted by revision 5.0,
- *  - items marked with a ! are introduced in revision 6.0.
- *  - items marked with a % are introduced post revision 6.0.
- *  - items marked with a $ are obsoleted by revision 6.0.
- */
-
-/*
- * Tag data type information.
- *
- * Note: RATIONALs are the ratio of two 32-bit integer values.
- */
-typedef	enum {
-	TIFF_NOTYPE	= 0,	/* placeholder */
-	TIFF_BYTE	= 1,	/* 8-bit unsigned integer */
-	TIFF_ASCII	= 2,	/* 8-bit bytes w/ last byte null */
-	TIFF_SHORT	= 3,	/* 16-bit unsigned integer */
-	TIFF_LONG	= 4,	/* 32-bit unsigned integer */
-	TIFF_RATIONAL	= 5,	/* 64-bit unsigned fraction */
-	TIFF_SBYTE	= 6,	/* !8-bit signed integer */
-	TIFF_UNDEFINED	= 7,	/* !8-bit untyped data */
-	TIFF_SSHORT	= 8,	/* !16-bit signed integer */
-	TIFF_SLONG	= 9,	/* !32-bit signed integer */
-	TIFF_SRATIONAL	= 10,	/* !64-bit signed fraction */
-	TIFF_FLOAT	= 11,	/* !32-bit IEEE floating point */
-	TIFF_DOUBLE	= 12	/* !64-bit IEEE floating point */
-} TIFFDataType;
-
-/*
- * TIFF Tag Definitions.
- */
-#define	TIFFTAG_SUBFILETYPE		254	/* subfile data descriptor */
-#define	    FILETYPE_REDUCEDIMAGE	0x1	/* reduced resolution version */
-#define	    FILETYPE_PAGE		0x2	/* one page of many */
-#define	    FILETYPE_MASK		0x4	/* transparency mask */
-#define	TIFFTAG_OSUBFILETYPE		255	/* +kind of data in subfile */
-#define	    OFILETYPE_IMAGE		1	/* full resolution image data */
-#define	    OFILETYPE_REDUCEDIMAGE	2	/* reduced size image data */
-#define	    OFILETYPE_PAGE		3	/* one page of many */
-#define	TIFFTAG_IMAGEWIDTH		256	/* image width in pixels */
-#define	TIFFTAG_IMAGELENGTH		257	/* image height in pixels */
-#define	TIFFTAG_BITSPERSAMPLE		258	/* bits per channel (sample) */
-#define	TIFFTAG_COMPRESSION		259	/* data compression technique */
-#define	    COMPRESSION_NONE		1	/* dump mode */
-#define	    COMPRESSION_CCITTRLE	2	/* CCITT modified Huffman RLE */
-#define	    COMPRESSION_CCITTFAX3	3	/* CCITT Group 3 fax encoding */
-#define	    COMPRESSION_CCITTFAX4	4	/* CCITT Group 4 fax encoding */
-#define	    COMPRESSION_LZW		5       /* Lempel-Ziv  & Welch */
-#define	    COMPRESSION_OJPEG		6	/* !6.0 JPEG */
-#define	    COMPRESSION_JPEG		7	/* %JPEG DCT compression */
-#define	    COMPRESSION_NEXT		32766	/* NeXT 2-bit RLE */
-#define	    COMPRESSION_CCITTRLEW	32771	/* #1 w/ word alignment */
-#define	    COMPRESSION_PACKBITS	32773	/* Macintosh RLE */
-#define	    COMPRESSION_THUNDERSCAN	32809	/* ThunderScan RLE */
-/* codes 32895-32898 are reserved for ANSI IT8 TIFF/IT <dkelly@etsinc.com) */
-#define	    COMPRESSION_IT8CTPAD	32895   /* IT8 CT w/padding */
-#define	    COMPRESSION_IT8LW		32896   /* IT8 Linework RLE */
-#define	    COMPRESSION_IT8MP		32897   /* IT8 Monochrome picture */
-#define	    COMPRESSION_IT8BL		32898   /* IT8 Binary line art */
-/* compression codes 32908-32911 are reserved for Pixar */
-#define     COMPRESSION_PIXARFILM	32908   /* Pixar companded 10bit LZW */
-#define	    COMPRESSION_PIXARLOG	32909   /* Pixar companded 11bit ZIP */
-#define	    COMPRESSION_DEFLATE		32946	/* Deflate compression */
-#define     COMPRESSION_ADOBE_DEFLATE   8       /* Deflate compression, as recognized by Adobe */
-/* compression code 32947 is reserved for Oceana Matrix <dev@oceana.com> */
-#define     COMPRESSION_DCS             32947   /* Kodak DCS encoding */
-#define	    COMPRESSION_JBIG		34661	/* ISO JBIG */
-#define     COMPRESSION_SGILOG		34676	/* SGI Log Luminance RLE */
-#define     COMPRESSION_SGILOG24	34677	/* SGI Log 24-bit packed */
-#define	TIFFTAG_PHOTOMETRIC		262	/* photometric interpretation */
-#define	    PHOTOMETRIC_MINISWHITE	0	/* min value is white */
-#define	    PHOTOMETRIC_MINISBLACK	1	/* min value is black */
-#define	    PHOTOMETRIC_RGB		2	/* RGB color model */
-#define	    PHOTOMETRIC_PALETTE		3	/* color map indexed */
-#define	    PHOTOMETRIC_MASK		4	/* $holdout mask */
-#define	    PHOTOMETRIC_SEPARATED	5	/* !color separations */
-#define	    PHOTOMETRIC_YCBCR		6	/* !CCIR 601 */
-#define	    PHOTOMETRIC_CIELAB		8	/* !1976 CIE L*a*b* */
-#define     PHOTOMETRIC_LOGL		32844	/* CIE Log2(L) */
-#define     PHOTOMETRIC_LOGLUV		32845	/* CIE Log2(L) (u',v') */
-#define	TIFFTAG_THRESHHOLDING		263	/* +thresholding used on data */
-#define	    THRESHHOLD_BILEVEL		1	/* b&w art scan */
-#define	    THRESHHOLD_HALFTONE		2	/* or dithered scan */
-#define	    THRESHHOLD_ERRORDIFFUSE	3	/* usually floyd-steinberg */
-#define	TIFFTAG_CELLWIDTH		264	/* +dithering matrix width */
-#define	TIFFTAG_CELLLENGTH		265	/* +dithering matrix height */
-#define	TIFFTAG_FILLORDER		266	/* data order within a byte */
-#define	    FILLORDER_MSB2LSB		1	/* most significant -> least */
-#define	    FILLORDER_LSB2MSB		2	/* least significant -> most */
-#define	TIFFTAG_DOCUMENTNAME		269	/* name of doc. image is from */
-#define	TIFFTAG_IMAGEDESCRIPTION	270	/* info about image */
-#define	TIFFTAG_MAKE			271	/* scanner manufacturer name */
-#define	TIFFTAG_MODEL			272	/* scanner model name/number */
-#define	TIFFTAG_STRIPOFFSETS		273	/* offsets to data strips */
-#define	TIFFTAG_ORIENTATION		274	/* +image orientation */
-#define	    ORIENTATION_TOPLEFT		1	/* row 0 top, col 0 lhs */
-#define	    ORIENTATION_TOPRIGHT	2	/* row 0 top, col 0 rhs */
-#define	    ORIENTATION_BOTRIGHT	3	/* row 0 bottom, col 0 rhs */
-#define	    ORIENTATION_BOTLEFT		4	/* row 0 bottom, col 0 lhs */
-#define	    ORIENTATION_LEFTTOP		5	/* row 0 lhs, col 0 top */
-#define	    ORIENTATION_RIGHTTOP	6	/* row 0 rhs, col 0 top */
-#define	    ORIENTATION_RIGHTBOT	7	/* row 0 rhs, col 0 bottom */
-#define	    ORIENTATION_LEFTBOT		8	/* row 0 lhs, col 0 bottom */
-#define	TIFFTAG_SAMPLESPERPIXEL		277	/* samples per pixel */
-#define	TIFFTAG_ROWSPERSTRIP		278	/* rows per strip of data */
-#define	TIFFTAG_STRIPBYTECOUNTS		279	/* bytes counts for strips */
-#define	TIFFTAG_MINSAMPLEVALUE		280	/* +minimum sample value */
-#define	TIFFTAG_MAXSAMPLEVALUE		281	/* +maximum sample value */
-#define	TIFFTAG_XRESOLUTION		282	/* pixels/resolution in x */
-#define	TIFFTAG_YRESOLUTION		283	/* pixels/resolution in y */
-#define	TIFFTAG_PLANARCONFIG		284	/* storage organization */
-#define	    PLANARCONFIG_CONTIG		1	/* single image plane */
-#define	    PLANARCONFIG_SEPARATE	2	/* separate planes of data */
-#define	TIFFTAG_PAGENAME		285	/* page name image is from */
-#define	TIFFTAG_XPOSITION		286	/* x page offset of image lhs */
-#define	TIFFTAG_YPOSITION		287	/* y page offset of image lhs */
-#define	TIFFTAG_FREEOFFSETS		288	/* +byte offset to free block */
-#define	TIFFTAG_FREEBYTECOUNTS		289	/* +sizes of free blocks */
-#define	TIFFTAG_GRAYRESPONSEUNIT	290	/* $gray scale curve accuracy */
-#define	    GRAYRESPONSEUNIT_10S	1	/* tenths of a unit */
-#define	    GRAYRESPONSEUNIT_100S	2	/* hundredths of a unit */
-#define	    GRAYRESPONSEUNIT_1000S	3	/* thousandths of a unit */
-#define	    GRAYRESPONSEUNIT_10000S	4	/* ten-thousandths of a unit */
-#define	    GRAYRESPONSEUNIT_100000S	5	/* hundred-thousandths */
-#define	TIFFTAG_GRAYRESPONSECURVE	291	/* $gray scale response curve */
-#define	TIFFTAG_GROUP3OPTIONS		292	/* 32 flag bits */
-#define	    GROUP3OPT_2DENCODING	0x1	/* 2-dimensional coding */
-#define	    GROUP3OPT_UNCOMPRESSED	0x2	/* data not compressed */
-#define	    GROUP3OPT_FILLBITS		0x4	/* fill to byte boundary */
-#define	TIFFTAG_GROUP4OPTIONS		293	/* 32 flag bits */
-#define	    GROUP4OPT_UNCOMPRESSED	0x2	/* data not compressed */
-#define	TIFFTAG_RESOLUTIONUNIT		296	/* units of resolutions */
-#define	    RESUNIT_NONE		1	/* no meaningful units */
-#define	    RESUNIT_INCH		2	/* english */
-#define	    RESUNIT_CENTIMETER		3	/* metric */
-#define	TIFFTAG_PAGENUMBER		297	/* page numbers of multi-page */
-#define	TIFFTAG_COLORRESPONSEUNIT	300	/* $color curve accuracy */
-#define	    COLORRESPONSEUNIT_10S	1	/* tenths of a unit */
-#define	    COLORRESPONSEUNIT_100S	2	/* hundredths of a unit */
-#define	    COLORRESPONSEUNIT_1000S	3	/* thousandths of a unit */
-#define	    COLORRESPONSEUNIT_10000S	4	/* ten-thousandths of a unit */
-#define	    COLORRESPONSEUNIT_100000S	5	/* hundred-thousandths */
-#define	TIFFTAG_TRANSFERFUNCTION	301	/* !colorimetry info */
-#define	TIFFTAG_SOFTWARE		305	/* name & release */
-#define	TIFFTAG_DATETIME		306	/* creation date and time */
-#define	TIFFTAG_ARTIST			315	/* creator of image */
-#define	TIFFTAG_HOSTCOMPUTER		316	/* machine where created */
-#define	TIFFTAG_PREDICTOR		317	/* prediction scheme w/ LZW */
-#define	TIFFTAG_WHITEPOINT		318	/* image white point */
-#define	TIFFTAG_PRIMARYCHROMATICITIES	319	/* !primary chromaticities */
-#define	TIFFTAG_COLORMAP		320	/* RGB map for pallette image */
-#define	TIFFTAG_HALFTONEHINTS		321	/* !highlight+shadow info */
-#define	TIFFTAG_TILEWIDTH		322	/* !rows/data tile */
-#define	TIFFTAG_TILELENGTH		323	/* !cols/data tile */
-#define TIFFTAG_TILEOFFSETS		324	/* !offsets to data tiles */
-#define TIFFTAG_TILEBYTECOUNTS		325	/* !byte counts for tiles */
-#define	TIFFTAG_BADFAXLINES		326	/* lines w/ wrong pixel count */
-#define	TIFFTAG_CLEANFAXDATA		327	/* regenerated line info */
-#define	    CLEANFAXDATA_CLEAN		0	/* no errors detected */
-#define	    CLEANFAXDATA_REGENERATED	1	/* receiver regenerated lines */
-#define	    CLEANFAXDATA_UNCLEAN	2	/* uncorrected errors exist */
-#define	TIFFTAG_CONSECUTIVEBADFAXLINES	328	/* max consecutive bad lines */
-#define	TIFFTAG_SUBIFD			330	/* subimage descriptors */
-#define	TIFFTAG_INKSET			332	/* !inks in separated image */
-#define	    INKSET_CMYK			1	/* !cyan-magenta-yellow-black */
-#define	TIFFTAG_INKNAMES		333	/* !ascii names of inks */
-#define	TIFFTAG_NUMBEROFINKS		334	/* !number of inks */
-#define	TIFFTAG_DOTRANGE		336	/* !0% and 100% dot codes */
-#define	TIFFTAG_TARGETPRINTER		337	/* !separation target */
-#define	TIFFTAG_EXTRASAMPLES		338	/* !info about extra samples */
-#define	    EXTRASAMPLE_UNSPECIFIED	0	/* !unspecified data */
-#define	    EXTRASAMPLE_ASSOCALPHA	1	/* !associated alpha data */
-#define	    EXTRASAMPLE_UNASSALPHA	2	/* !unassociated alpha data */
-#define	TIFFTAG_SAMPLEFORMAT		339	/* !data sample format */
-#define	    SAMPLEFORMAT_UINT		1	/* !unsigned integer data */
-#define	    SAMPLEFORMAT_INT		2	/* !signed integer data */
-#define	    SAMPLEFORMAT_IEEEFP		3	/* !IEEE floating point data */
-#define	    SAMPLEFORMAT_VOID		4	/* !untyped data */
-#define	TIFFTAG_SMINSAMPLEVALUE		340	/* !variable MinSampleValue */
-#define	TIFFTAG_SMAXSAMPLEVALUE		341	/* !variable MaxSampleValue */
-#define	TIFFTAG_JPEGTABLES		347	/* %JPEG table stream */
-/*
- * Tags 512-521 are obsoleted by Technical Note #2
- * which specifies a revised JPEG-in-TIFF scheme.
- */
-#define	TIFFTAG_JPEGPROC		512	/* !JPEG processing algorithm */
-#define	    JPEGPROC_BASELINE		1	/* !baseline sequential */
-#define	    JPEGPROC_LOSSLESS		14	/* !Huffman coded lossless */
-#define	TIFFTAG_JPEGIFOFFSET		513	/* !pointer to SOI marker */
-#define	TIFFTAG_JPEGIFBYTECOUNT		514	/* !JFIF stream length */
-#define	TIFFTAG_JPEGRESTARTINTERVAL	515	/* !restart interval length */
-#define	TIFFTAG_JPEGLOSSLESSPREDICTORS	517	/* !lossless proc predictor */
-#define	TIFFTAG_JPEGPOINTTRANSFORM	518	/* !lossless point transform */
-#define	TIFFTAG_JPEGQTABLES		519	/* !Q matrice offsets */
-#define	TIFFTAG_JPEGDCTABLES		520	/* !DCT table offsets */
-#define	TIFFTAG_JPEGACTABLES		521	/* !AC coefficient offsets */
-#define	TIFFTAG_YCBCRCOEFFICIENTS	529	/* !RGB -> YCbCr transform */
-#define	TIFFTAG_YCBCRSUBSAMPLING	530	/* !YCbCr subsampling factors */
-#define	TIFFTAG_YCBCRPOSITIONING	531	/* !subsample positioning */
-#define	    YCBCRPOSITION_CENTERED	1	/* !as in PostScript Level 2 */
-#define	    YCBCRPOSITION_COSITED	2	/* !as in CCIR 601-1 */
-#define	TIFFTAG_REFERENCEBLACKWHITE	532	/* !colorimetry info */
-/* tags 32952-32956 are private tags registered to Island Graphics */
-#define TIFFTAG_REFPTS			32953	/* image reference points */
-#define TIFFTAG_REGIONTACKPOINT		32954	/* region-xform tack point */
-#define TIFFTAG_REGIONWARPCORNERS	32955	/* warp quadrilateral */
-#define TIFFTAG_REGIONAFFINE		32956	/* affine transformation mat */
-/* tags 32995-32999 are private tags registered to SGI */
-#define	TIFFTAG_MATTEING		32995	/* $use ExtraSamples */
-#define	TIFFTAG_DATATYPE		32996	/* $use SampleFormat */
-#define	TIFFTAG_IMAGEDEPTH		32997	/* z depth of image */
-#define	TIFFTAG_TILEDEPTH		32998	/* z depth/data tile */
-/* tags 33300-33309 are private tags registered to Pixar */
-/*
- * TIFFTAG_PIXAR_IMAGEFULLWIDTH and TIFFTAG_PIXAR_IMAGEFULLLENGTH
- * are set when an image has been cropped out of a larger image.  
- * They reflect the size of the original uncropped image.
- * The TIFFTAG_XPOSITION and TIFFTAG_YPOSITION can be used
- * to determine the position of the smaller image in the larger one.
- */
-#define TIFFTAG_PIXAR_IMAGEFULLWIDTH    33300   /* full image size in x */
-#define TIFFTAG_PIXAR_IMAGEFULLLENGTH   33301   /* full image size in y */
- /* Tags 33302-33306 are used to identify special image modes and data
-  * used by Pixar's texture formats.
-  */
-#define TIFFTAG_PIXAR_TEXTUREFORMAT	33302	/* texture map format */
-#define TIFFTAG_PIXAR_WRAPMODES		33303	/* s & t wrap modes */
-#define TIFFTAG_PIXAR_FOVCOT		33304	/* cotan(fov) for env. maps */
-#define TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN 33305
-#define TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA 33306
-/* tag 33405 is a private tag registered to Eastman Kodak */
-#define TIFFTAG_WRITERSERIALNUMBER      33405   /* device serial number */
-/* tag 33432 is listed in the 6.0 spec w/ unknown ownership */
-#define	TIFFTAG_COPYRIGHT		33432	/* copyright string */
-/* IPTC TAG from RichTIFF specifications */
-#define TIFFTAG_RICHTIFFIPTC    33723
-/* 34016-34029 are reserved for ANSI IT8 TIFF/IT <dkelly@etsinc.com) */
-#define TIFFTAG_IT8SITE			34016	/* site name */
-#define TIFFTAG_IT8COLORSEQUENCE	34017	/* color seq. [RGB,CMYK,etc] */
-#define TIFFTAG_IT8HEADER		34018	/* DDES Header */
-#define TIFFTAG_IT8RASTERPADDING	34019	/* raster scanline padding */
-#define TIFFTAG_IT8BITSPERRUNLENGTH	34020	/* # of bits in short run */
-#define TIFFTAG_IT8BITSPEREXTENDEDRUNLENGTH 34021/* # of bits in long run */
-#define TIFFTAG_IT8COLORTABLE		34022	/* LW colortable */
-#define TIFFTAG_IT8IMAGECOLORINDICATOR	34023	/* BP/BL image color switch */
-#define TIFFTAG_IT8BKGCOLORINDICATOR	34024	/* BP/BL bg color switch */
-#define TIFFTAG_IT8IMAGECOLORVALUE	34025	/* BP/BL image color value */
-#define TIFFTAG_IT8BKGCOLORVALUE	34026	/* BP/BL bg color value */
-#define TIFFTAG_IT8PIXELINTENSITYRANGE	34027	/* MP pixel intensity value */
-#define TIFFTAG_IT8TRANSPARENCYINDICATOR 34028	/* HC transparency switch */
-#define TIFFTAG_IT8COLORCHARACTERIZATION 34029	/* color character. table */
-/* tags 34232-34236 are private tags registered to Texas Instruments */
-#define TIFFTAG_FRAMECOUNT              34232   /* Sequence Frame Count */
-/* tag 34750 is a private tag registered to Adobe? */
-#define TIFFTAG_ICCPROFILE		34675	/* ICC profile data */
-/* tag 34377 is private tag registered to Adobe for PhotoShop */
-#define TIFFTAG_PHOTOSHOP				34377 
-/* tag 34750 is a private tag registered to Pixel Magic */
-#define	TIFFTAG_JBIGOPTIONS		34750	/* JBIG options */
-/* tags 34908-34914 are private tags registered to SGI */
-#define	TIFFTAG_FAXRECVPARAMS		34908	/* encoded Class 2 ses. parms */
-#define	TIFFTAG_FAXSUBADDRESS		34909	/* received SubAddr string */
-#define	TIFFTAG_FAXRECVTIME		34910	/* receive time (secs) */
-/* tags 37439-37443 are registered to SGI <gregl@sgi.com> */
-#define TIFFTAG_STONITS			37439	/* Sample value to Nits */
-/* tag 34929 is a private tag registered to FedEx */
-#define	TIFFTAG_FEDEX_EDR		34929	/* unknown use */
-/* tag 65535 is an undefined tag used by Eastman Kodak */
-#define TIFFTAG_DCSHUESHIFTVALUES       65535   /* hue shift correction data */
-
-/*
- * The following are ``pseudo tags'' that can be
- * used to control codec-specific functionality.
- * These tags are not written to file.  Note that
- * these values start at 0xffff+1 so that they'll
- * never collide with Aldus-assigned tags.
- *
- * If you want your private pseudo tags ``registered''
- * (i.e. added to this file), send mail to sam@sgi.com
- * with the appropriate C definitions to add.
- */
-#define	TIFFTAG_FAXMODE			65536	/* Group 3/4 format control */
-#define	    FAXMODE_CLASSIC	0x0000		/* default, include RTC */
-#define	    FAXMODE_NORTC	0x0001		/* no RTC at end of data */
-#define	    FAXMODE_NOEOL	0x0002		/* no EOL code at end of row */
-#define	    FAXMODE_BYTEALIGN	0x0004		/* byte align row */
-#define	    FAXMODE_WORDALIGN	0x0008		/* word align row */
-#define	    FAXMODE_CLASSF	FAXMODE_NORTC	/* TIFF Class F */
-#define	TIFFTAG_JPEGQUALITY		65537	/* Compression quality level */
-/* Note: quality level is on the IJG 0-100 scale.  Default value is 75 */
-#define	TIFFTAG_JPEGCOLORMODE		65538	/* Auto RGB<=>YCbCr convert? */
-#define	    JPEGCOLORMODE_RAW	0x0000		/* no conversion (default) */
-#define	    JPEGCOLORMODE_RGB	0x0001		/* do auto conversion */
-#define	TIFFTAG_JPEGTABLESMODE		65539	/* What to put in JPEGTables */
-#define	    JPEGTABLESMODE_QUANT 0x0001		/* include quantization tbls */
-#define	    JPEGTABLESMODE_HUFF	0x0002		/* include Huffman tbls */
-/* Note: default is JPEGTABLESMODE_QUANT | JPEGTABLESMODE_HUFF */
-#define	TIFFTAG_FAXFILLFUNC		65540	/* G3/G4 fill function */
-#define	TIFFTAG_PIXARLOGDATAFMT		65549	/* PixarLogCodec I/O data sz */
-#define	    PIXARLOGDATAFMT_8BIT	0	/* regular u_char samples */
-#define	    PIXARLOGDATAFMT_8BITABGR	1	/* ABGR-order u_chars */
-#define	    PIXARLOGDATAFMT_11BITLOG	2	/* 11-bit log-encoded (raw) */
-#define	    PIXARLOGDATAFMT_12BITPICIO	3	/* as per PICIO (1.0==2048) */
-#define	    PIXARLOGDATAFMT_16BIT	4	/* signed short samples */
-#define	    PIXARLOGDATAFMT_FLOAT	5	/* IEEE float samples */
-/* 65550-65556 are allocated to Oceana Matrix <dev@oceana.com> */
-#define TIFFTAG_DCSIMAGERTYPE           65550   /* imager model & filter */
-#define     DCSIMAGERMODEL_M3           0       /* M3 chip (1280 x 1024) */
-#define     DCSIMAGERMODEL_M5           1       /* M5 chip (1536 x 1024) */
-#define     DCSIMAGERMODEL_M6           2       /* M6 chip (3072 x 2048) */
-#define     DCSIMAGERFILTER_IR          0       /* infrared filter */
-#define     DCSIMAGERFILTER_MONO        1       /* monochrome filter */
-#define     DCSIMAGERFILTER_CFA         2       /* color filter array */
-#define     DCSIMAGERFILTER_OTHER       3       /* other filter */
-#define TIFFTAG_DCSINTERPMODE           65551   /* interpolation mode */
-#define     DCSINTERPMODE_NORMAL        0x0     /* whole image, default */
-#define     DCSINTERPMODE_PREVIEW       0x1     /* preview of image (384x256) */
-#define TIFFTAG_DCSBALANCEARRAY         65552   /* color balance values */
-#define TIFFTAG_DCSCORRECTMATRIX        65553   /* color correction values */
-#define TIFFTAG_DCSGAMMA                65554   /* gamma value */
-#define TIFFTAG_DCSTOESHOULDERPTS       65555   /* toe & shoulder points */
-#define TIFFTAG_DCSCALIBRATIONFD        65556   /* calibration file desc */
-/* Note: quality level is on the ZLIB 1-9 scale. Default value is -1 */
-#define	TIFFTAG_ZIPQUALITY		65557	/* compression quality level */
-#define	TIFFTAG_PIXARLOGQUALITY		65558	/* PixarLog uses same scale */
-/* 65559 is allocated to Oceana Matrix <dev@oceana.com> */
-#define TIFFTAG_DCSCLIPRECTANGLE	65559	/* area of image to acquire */
-#define TIFFTAG_SGILOGDATAFMT		65560	/* SGILog user data format */
-#define     SGILOGDATAFMT_FLOAT		0	/* IEEE float samples */
-#define     SGILOGDATAFMT_16BIT		1	/* 16-bit samples */
-#define     SGILOGDATAFMT_RAW		2	/* uninterpreted data */
-#define     SGILOGDATAFMT_8BIT		3	/* 8-bit RGB monitor values */
-#endif /* _TIFF_ */
diff --git a/Utilities/CAI/cai_dll/inc/tiffcomp.h b/Utilities/CAI/cai_dll/inc/tiffcomp.h
deleted file mode 100755
index bd2d86d3c3..0000000000
--- a/Utilities/CAI/cai_dll/inc/tiffcomp.h
+++ /dev/null
@@ -1,214 +0,0 @@
-/* $Header: tiffcomp.h,v 1.3 01/01/15 15:24:32 cmf Exp $ */
-
-/*
- * Copyright (c) 1990-1997 Sam Leffler
- * Copyright (c) 1991-1997 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.
- */
-
-#ifndef _COMPAT_
-#define	_COMPAT_
-/*
- * This file contains a hodgepodge of definitions and
- * declarations that are needed to provide compatibility
- * between the native system and the base implementation
- * that the library assumes.
- *
- * NB: This file is a mess.
- */
-
-/*
- * Setup basic type definitions and function declaratations.
- */
-
-/*
- * Simplify Acorn RISC OS identifier (to avoid confusion with Acorn RISC iX
- * and with defunct Unix Risc OS)
- * No need to specify __arm - hey, Acorn might port the OS, no problem here!
- */
-#ifdef __acornriscos
-#undef __acornriscos
-#endif
-#if defined(__acorn) && defined(__riscos)
-#define __acornriscos
-#endif
-
-#if defined(__MWERKS__) || defined(THINK_C)
-#include <unix.h>
-#include <math.h>
-#endif
-
-#include <stdio.h>
-
-#if defined(__PPCC__) || defined(__SC__) || defined(__MRC__)
-#include <types.h>
-#elif !defined(__MWERKS__) && !defined(THINK_C) && !defined(__acornriscos) && !defined(applec)
-#include <sys/types.h>
-#endif
-
-#if defined(VMS)
-#include <file.h>
-#include <unixio.h>
-#elif !defined(__acornriscos)
-#include <fcntl.h>
-#endif
-
-/*
- * This maze of checks controls defines or not the
- * target system has BSD-style typdedefs declared in
- * an include file and/or whether or not to include
- * <unistd.h> to get the SEEK_* definitions.  Some
- * additional includes are also done to pull in the
- * appropriate definitions we're looking for.
- */
-#if defined(__MWERKS__) || defined(THINK_C) || defined(__PPCC__) || defined(__SC__) || defined(__MRC__)
-#include <stdlib.h>
-#define	BSDTYPES
-#define	HAVE_UNISTD_H	0
-#elif defined(_WINDOWS) || defined(__WIN32__) || defined(_Windows)
-#define	BSDTYPES
-#elif defined(OS2_16) || defined(OS2_32)
-#define	BSDTYPES
-#elif defined(__acornriscos)
-#include <stdlib.h>
-#define	BSDTYPES
-#define	HAVE_UNISTD_H	0
-#elif defined(VMS)
-#define	HAVE_UNISTD_H	0
-#else
-#define	HAVE_UNISTD_H	1
-#endif
-
-/*
- * The library uses the ANSI C/POSIX SEEK_*
- * definitions that should be defined in unistd.h
- * (except on system where they are in stdio.h and
- * there is no unistd.h).
- */
-#if !defined(SEEK_SET) && HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-/*
- * The library uses memset, memcpy, and memcmp.
- * ANSI C and System V define these in string.h.
- */
-#include <string.h>
-
-/*
- * The BSD typedefs are used throughout the library.
- * If your system doesn't have them in <sys/types.h>,
- * then define BSDTYPES in your Makefile.
- */
-#if defined(BSDTYPES)
-typedef	unsigned char u_char;
-typedef	unsigned short u_short;
-typedef	unsigned int u_int;
-typedef	unsigned long u_long;
-#endif
-
-/*
- * dblparam_t is the type that a double precision
- * floating point value will have on the parameter
- * stack (when coerced by the compiler).
- */
-/* Note: on MacPowerPC "extended" is undefined. So only use it for 68K-Macs */
-#if defined(__SC__) || defined(THINK_C)
-typedef extended dblparam_t;
-#else
-typedef double dblparam_t;
-#endif
-
-/*
- * If your compiler supports inline functions, then
- * set INLINE appropriately to get the known hotspots
- * in the library expanded inline.
- */
-#if defined(__GNUC__)
-#if defined(__STRICT_ANSI__)
-#define	INLINE	__inline__
-#else
-#define	INLINE	inline
-#endif
-#else /* !__GNUC__ */
-#define	INLINE
-#endif
-
-/*
- * GLOBALDATA is a macro that is used to define global variables
- * private to the library.  We use this indirection to hide
- * brain-damage in VAXC (and GCC) under VAX/VMS.  In these
- * environments the macro places the variable in a non-shareable
- * program section, which ought to be done by default (sigh!)
- *
- * Apparently DEC are aware of the problem as this behaviour is the
- * default under VMS on AXP.
- *
- * The GNU C variant is untested.
- */
-#if defined(VAX) && defined(VMS)
-#if defined(VAXC)
-#define GLOBALDATA(TYPE,NAME)	extern noshare TYPE NAME
-#endif
-#if defined(__GNUC__)
-#define GLOBALDATA(TYPE,NAME)	extern TYPE NAME \
-	asm("_$$PsectAttributes_NOSHR$$" #NAME)
-#endif
-#else	/* !VAX/VMS */
-#define GLOBALDATA(TYPE,NAME)	extern TYPE NAME
-#endif
-
-#if defined(__acornriscos)
-/*
- * osfcn.h is part of C++Lib on Acorn C/C++, and as such can't be used
- * on C alone. For that reason, the relevant functions are
- * implemented in tif_acorn.c, and the elements from the header
- * file are included here.
- */
-#if defined(__cplusplus)
-#include <osfcn.h>
-#else
-#define	O_RDONLY	0
-#define	O_WRONLY	1
-#define	O_RDWR		2
-#define	O_APPEND	8
-#define	O_CREAT		0x200
-#define	O_TRUNC		0x400
-typedef long off_t;
-extern int open(const char *name, int flags, int mode);
-extern int close(int fd);
-extern int write(int fd, const char *buf, int nbytes);
-extern int read(int fd, char *buf, int nbytes);
-extern off_t lseek(int fd, off_t offset, int whence);
-extern int creat(const char *path, int mode);
-#endif /* __cplusplus */
-#endif /* __acornriscos */
-
-/* Bit and byte order, the default is MSB to LSB */
-#ifdef VMS
-#undef HOST_FILLORDER
-#undef HOST_BIGENDIAN
-#define HOST_FILLORDER FILLORDER_LSB2MSB
-#define HOST_BIGENDIAN	0
-#endif
-
-
-#endif /* _COMPAT_ */
diff --git a/Utilities/CAI/cai_dll/inc/tiffconf.h b/Utilities/CAI/cai_dll/inc/tiffconf.h
deleted file mode 100755
index b7f75a26a7..0000000000
--- a/Utilities/CAI/cai_dll/inc/tiffconf.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/* $Header: tiffconf.h,v 1.3 01/01/15 15:24:32 cmf Exp $ */
-/*
- * Copyright (c) 1988-1997 Sam Leffler
- * Copyright (c) 1991-1997 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.
- */
-
-#ifndef _TIFFCONF_
-#define	_TIFFCONF_
-/*
- * Library Configuration Definitions.
- *
- * This file defines the default configuration for the library.
- * If the target system does not have make or a way to specify
- * #defines on the command line, this file can be edited to
- * configure the library.  Otherwise, one can override portability
- * and configuration-related definitions from a Makefile or command
- * line by defining FEATURE_SUPPORT and COMPRESSION_SUPPORT (see below).
- */
-
-/*
- * General portability-related defines:
- *
- * HAVE_IEEEFP		define as 0 or 1 according to the floating point
- *			format suported by the machine
- * BSDTYPES		define this if your system does NOT define the
- *			usual 4BSD typedefs u_int et. al.
- * HAVE_MMAP		enable support for memory mapping read-only files;
- *			this is typically deduced by the configure script
- * HOST_FILLORDER	native cpu bit order: one of FILLORDER_MSB2LSB
- *			or FILLODER_LSB2MSB; this is typically set by the
- *			configure script
- * HOST_BIGENDIAN	native cpu byte order: 1 if big-endian (Motorola)
- *			or 0 if little-endian (Intel); this may be used
- *			in codecs to optimize code
- * USE_64BIT_API	set to 1 if tif_unix.c should use lseek64(),
- *                      fstat64() and stat64 allowing 2-4GB files.
- */
-#ifndef HAVE_IEEEFP
-#define	HAVE_IEEEFP	1
-#endif
-#ifndef HOST_FILLORDER
-#define	HOST_FILLORDER	FILLORDER_MSB2LSB
-#endif
-#ifndef	HOST_BIGENDIAN
-#define	HOST_BIGENDIAN	1
-#endif
-
-#ifndef USE_64BIT_API
-#  define USE_64BIT_API	0
-#endif
-
-#ifndef FEATURE_SUPPORT
-/*
- * Feature support definitions:
- *
- *    COLORIMETRY_SUPPORT enable support for 6.0 colorimetry tags
- *    YCBCR_SUPPORT	enable support for 6.0 YCbCr tags
- *    CMYK_SUPPORT	enable support for 6.0 CMYK tags
- *    ICC_SUPPORT	enable support for ICC profile tag
- *    PHOTOSHOP_SUPPORT enable support for PHOTOSHOP resource tag
- *    IPTC_SUPPORT  enable support for RichTIFF IPTC tag
- */
-#define	COLORIMETRY_SUPPORT
-#define	YCBCR_SUPPORT
-#define	CMYK_SUPPORT
-#define	ICC_SUPPORT
-#define PHOTOSHOP_SUPPORT
-#define IPTC_SUPPORT
-#endif /* FEATURE_SUPPORT */
-
-#ifndef COMPRESSION_SUPPORT
-/*
- * Compression support defines:
- *
- *    CCITT_SUPPORT	enable support for CCITT Group 3 & 4 algorithms
- *    PACKBITS_SUPPORT	enable support for Macintosh PackBits algorithm
- *    LZW_SUPPORT	enable support for LZW algorithm
- *    THUNDER_SUPPORT	enable support for ThunderScan 4-bit RLE algorithm
- *    NEXT_SUPPORT	enable support for NeXT 2-bit RLE algorithm
- *    OJPEG_SUPPORT	enable support for 6.0-style JPEG DCT algorithms
- *			(no builtin support, only a codec hook)
- *    JPEG_SUPPORT	enable support for post-6.0-style JPEG DCT algorithms
- *			(requires freely available IJG software, see tif_jpeg.c)
- *    ZIP_SUPPORT	enable support for Deflate algorithm
- *			(requires freely available zlib software, see tif_zip.c)
- *    PIXARLOG_SUPPORT	enable support for Pixar log-format algorithm
- *    LOGLUV_SUPPORT	enable support for LogLuv high dynamic range encoding
- */
-#define	CCITT_SUPPORT
-#define	PACKBITS_SUPPORT
-#define	LZW_SUPPORT
-#define	THUNDER_SUPPORT
-#define	NEXT_SUPPORT
-#define LOGLUV_SUPPORT
-#endif /* COMPRESSION_SUPPORT */
-
-/*
- * If JPEG compression is enabled then we must also include
- * support for the colorimetry and YCbCr-related tags.
- */
-#ifdef JPEG_SUPPORT
-#ifndef YCBCR_SUPPORT
-#define	YCBCR_SUPPORT
-#endif
-#ifndef COLORIMETRY_SUPPORT
-#define	COLORIMETRY_SUPPORT
-#endif
-#endif /* JPEG_SUPPORT */
-
-/*
- * ``Orthogonal Features''
- *
- * STRIPCHOP_DEFAULT	default handling of strip chopping support (whether
- *			or not to convert single-strip uncompressed images
- *			to mutiple strips of ~8Kb--to reduce memory use)
- * SUBIFD_SUPPORT	enable support for SubIFD tag (thumbnails and such)
- */
-#ifndef STRIPCHOP_DEFAULT
-#define	STRIPCHOP_DEFAULT	TIFF_STRIPCHOP	/* default is to enable */
-#endif
-#ifndef SUBIFD_SUPPORT
-#define	SUBIFD_SUPPORT		1	/* enable SubIFD tag (330) support */
-#endif
-#endif /* _TIFFCONF_ */
diff --git a/Utilities/CAI/cai_dll/inc/tiffio.h b/Utilities/CAI/cai_dll/inc/tiffio.h
deleted file mode 100755
index 50e063ba29..0000000000
--- a/Utilities/CAI/cai_dll/inc/tiffio.h
+++ /dev/null
@@ -1,334 +0,0 @@
-/* $Header: tiffio.h,v 1.3 01/01/15 15:24:33 cmf Exp $ */
-
-/*
- * Copyright (c) 1988-1997 Sam Leffler
- * Copyright (c) 1991-1997 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.
- */
-
-#ifndef _TIFFIO_
-#define	_TIFFIO_
-
-/*
- * TIFF I/O Library Definitions.
- */
-#include "tiff.h"
-
-/*
- * This define can be used in code that requires
- * compilation-related definitions specific to a
- * version or versions of the library.  Runtime
- * version checking should be done based on the
- * string returned by TIFFGetVersion.
- */
-#define	TIFFLIB_VERSION	19970127	/* January 27, 1997 */
-
-/*
- * TIFF is defined as an incomplete type to hide the
- * library's internal data structures from clients.
- */
-typedef	struct tiff TIFF;
-
-/*
- * The following typedefs define the intrinsic size of
- * data types used in the *exported* interfaces.  These
- * definitions depend on the proper definition of types
- * in tiff.h.  Note also that the varargs interface used
- * to pass tag types and values uses the types defined in
- * tiff.h directly.
- *
- * NB: ttag_t is unsigned int and not unsigned short because
- *     ANSI C requires that the type before the ellipsis be a
- *     promoted type (i.e. one of int, unsigned int, pointer,
- *     or double) and because we defined pseudo-tags that are
- *     outside the range of legal Aldus-assigned tags.
- * NB: tsize_t is int32TIFF and not uint32TIFF because some functions
- *     return -1.
- * NB: toff_t is not off_t for many reasons; TIFFs max out at
- *     32-bit file offsets being the most important, and to ensure
- *     that it is unsigned, rather than signed.
- */
-typedef	uint32TIFF ttag_t;		/* directory tag */
-typedef	uint16TIFF tdir_t;		/* directory index */
-typedef	uint16TIFF tsample_t;	/* sample number */
-typedef	uint32TIFF tstrip_t;	/* strip number */
-typedef uint32TIFF ttile_t;		/* tile number */
-typedef	int32TIFF tsize_t;		/* i/o size in bytes */
-typedef	void* tdata_t;		/* image data ref */
-typedef	uint32TIFF toff_t;		/* file offset */
-
-#if !defined(__WIN32__) && (defined(_WIN32) || defined(WIN32))
-#define __WIN32__
-#endif
-
-/* MODIF PC NT */
-#undef _WINDOWS
-#undef __WIN32__
-#undef _Windows
-
-
-#if defined(_WINDOWS) || defined(__WIN32__) || defined(_Windows)
-#include <windows.h>
-#ifdef __WIN32__
-DECLARE_HANDLE(thandle_t);	/* Win32 file handle */
-#else
-typedef	HFILE thandle_t;	/* client data handle */
-#endif
-#else
-typedef	void* thandle_t;	/* client data handle */
-#endif
-
-#ifndef NULL
-#define	NULL	0
-#endif
-
-/*
- * Flags to pass to TIFFPrintDirectory to control
- * printing of data structures that are potentially
- * very large.   Bit-or these flags to enable printing
- * multiple items.
- */
-#define	TIFFPRINT_NONE		0x0		/* no extra info */
-#define	TIFFPRINT_STRIPS	0x1		/* strips/tiles info */
-#define	TIFFPRINT_CURVES	0x2		/* color/gray response curves */
-#define	TIFFPRINT_COLORMAP	0x4		/* colormap */
-#define	TIFFPRINT_JPEGQTABLES	0x100		/* JPEG Q matrices */
-#define	TIFFPRINT_JPEGACTABLES	0x200		/* JPEG AC tables */
-#define	TIFFPRINT_JPEGDCTABLES	0x200		/* JPEG DC tables */
-
-/*
- * RGBA-style image support.
- */
-typedef	unsigned char TIFFRGBValue;		/* 8-bit samples */
-typedef struct _TIFFRGBAImage TIFFRGBAImage;
-/*
- * The image reading and conversion routines invoke
- * ``put routines'' to copy/image/whatever tiles of
- * raw image data.  A default set of routines are 
- * provided to convert/copy raw image data to 8-bit
- * packed ABGR format rasters.  Applications can supply
- * alternate routines that unpack the data into a
- * different format or, for example, unpack the data
- * and draw the unpacked raster on the display.
- */
-typedef void (*tileContigRoutine)
-    (TIFFRGBAImage*, uint32TIFF*, uint32TIFF, uint32TIFF, uint32TIFF, uint32TIFF, int32TIFF, int32TIFF,
-	unsigned char*);
-typedef void (*tileSeparateRoutine)
-    (TIFFRGBAImage*, uint32TIFF*, uint32TIFF, uint32TIFF, uint32TIFF, uint32TIFF, int32TIFF, int32TIFF,
-	unsigned char*, unsigned char*, unsigned char*, unsigned char*);
-/*
- * RGBA-reader state.
- */
-typedef struct {				/* YCbCr->RGB support */
-	TIFFRGBValue* clamptab;			/* range clamping table */
-	int*	Cr_r_tab;
-	int*	Cb_b_tab;
-	int32TIFF*	Cr_g_tab;
-	int32TIFF*	Cb_g_tab;
-	float	coeffs[3];			/* cached for repeated use */
-} TIFFYCbCrToRGB;
-
-struct _TIFFRGBAImage {
-	TIFF*	tif;				/* image handle */
-	int	stoponerr;			/* stop on read error */
-	int	isContig;			/* data is packed/separate */
-	int	alpha;				/* type of alpha data present */
-	uint32TIFF	width;				/* image width */
-	uint32TIFF	height;				/* image height */
-	uint16TIFF	bitspersample;			/* image bits/sample */
-	uint16TIFF	samplesperpixel;		/* image samples/pixel */
-	uint16TIFF	orientation;			/* image orientation */
-	uint16TIFF	photometric;			/* image photometric interp */
-	uint16TIFF*	redcmap;			/* colormap pallete */
-	uint16TIFF*	greencmap;
-	uint16TIFF*	bluecmap;
-						/* get image data routine */
-	int	(*get)(TIFFRGBAImage*, uint32TIFF*, uint32TIFF, uint32TIFF);
-	union {
-	    void (*any)(TIFFRGBAImage*);
-	    tileContigRoutine	contig;
-	    tileSeparateRoutine	separate;
-	} put;					/* put decoded strip/tile */
-	TIFFRGBValue* Map;			/* sample mapping array */
-	uint32TIFF** BWmap;				/* black&white map */
-	uint32TIFF** PALmap;			/* palette image map */
-	TIFFYCbCrToRGB* ycbcr;			/* YCbCr conversion state */
-
-        int	row_offset;
-        int     col_offset;
-};
-
-/*
- * Macros for extracting components from the
- * packed ABGR form returned by TIFFReadRGBAImage.
- */
-#define	TIFFGetR(abgr)	((abgr) & 0xff)
-#define	TIFFGetG(abgr)	(((abgr) >> 8) & 0xff)
-#define	TIFFGetB(abgr)	(((abgr) >> 16) & 0xff)
-#define	TIFFGetA(abgr)	(((abgr) >> 24) & 0xff)
-
-/*
- * A CODEC is a software package that implements decoding,
- * encoding, or decoding+encoding of a compression algorithm.
- * The library provides a collection of builtin codecs.
- * More codecs may be registered through calls to the library
- * and/or the builtin implementations may be overridden.
- */
-typedef	int (*TIFFInitMethod)(TIFF*, int);
-typedef struct {
-	char*		name;
-	uint16TIFF		scheme;
-	TIFFInitMethod	init;
-} TIFFCodec;
-
-#include <stdio.h>
-#include <stdarg.h>
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-typedef	void (*TIFFErrorHandler)(const char*, const char*, va_list);
-typedef	tsize_t (*TIFFReadWriteProc)(thandle_t, tdata_t, tsize_t);
-typedef	toff_t (*TIFFSeekProc)(thandle_t, toff_t, int);
-typedef	int (*TIFFCloseProc)(thandle_t);
-typedef	toff_t (*TIFFSizeProc)(thandle_t);
-typedef	int (*TIFFMapFileProc)(thandle_t, tdata_t*, toff_t*);
-typedef	void (*TIFFUnmapFileProc)(thandle_t, tdata_t, toff_t);
-typedef	void (*TIFFExtendProc)(TIFF*); 
-
-extern	const char* TIFFGetVersion(void);
-
-extern	const TIFFCodec* TIFFFindCODEC(uint16TIFF);
-extern	TIFFCodec* TIFFRegisterCODEC(uint16TIFF, const char*, TIFFInitMethod);
-extern	void TIFFUnRegisterCODEC(TIFFCodec*);
-
-extern	tdata_t _TIFFmalloc(tsize_t);
-extern	tdata_t _TIFFrealloc(tdata_t, tsize_t);
-extern	void _TIFFmemset(tdata_t, int, tsize_t);
-extern	void _TIFFmemcpy(tdata_t, const tdata_t, tsize_t);
-extern	int _TIFFmemcmp(const tdata_t, const tdata_t, tsize_t);
-extern	void _TIFFfree(tdata_t);
-
-extern	void TIFFClose(TIFF*);
-extern	int TIFFFlush(TIFF*);
-extern	int TIFFFlushData(TIFF*);
-extern	int TIFFGetField(TIFF*, ttag_t, ...);
-extern	int TIFFVGetField(TIFF*, ttag_t, va_list);
-extern	int TIFFGetFieldDefaulted(TIFF*, ttag_t, ...);
-extern	int TIFFVGetFieldDefaulted(TIFF*, ttag_t, va_list);
-extern	int TIFFReadDirectory(TIFF*);
-extern	tsize_t TIFFScanlineSize(TIFF*);
-extern	tsize_t TIFFRasterScanlineSize(TIFF*);
-extern	tsize_t TIFFStripSize(TIFF*);
-extern	tsize_t TIFFVStripSize(TIFF*, uint32TIFF);
-extern	tsize_t TIFFTileRowSize(TIFF*);
-extern	tsize_t TIFFTileSize(TIFF*);
-extern	tsize_t TIFFVTileSize(TIFF*, uint32TIFF);
-extern	uint32TIFF TIFFDefaultStripSize(TIFF*, uint32TIFF);
-extern	void TIFFDefaultTileSize(TIFF*, uint32TIFF*, uint32TIFF*);
-extern	int TIFFFileno(TIFF*);
-extern	int TIFFGetMode(TIFF*);
-extern	int TIFFIsTiled(TIFF*);
-extern	int TIFFIsByteSwapped(TIFF*);
-extern	int TIFFIsUpSampled(TIFF*);
-extern	int TIFFIsMSB2LSB(TIFF*);
-extern	uint32TIFF TIFFCurrentRow(TIFF*);
-extern	tdir_t TIFFCurrentDirectory(TIFF*);
-extern	tdir_t TIFFNumberOfDirectories(TIFF*);
-extern	uint32TIFF TIFFCurrentDirOffset(TIFF*);
-extern	tstrip_t TIFFCurrentStrip(TIFF*);
-extern	ttile_t TIFFCurrentTile(TIFF*);
-extern	int TIFFReadBufferSetup(TIFF*, tdata_t, tsize_t);
-extern	int TIFFWriteBufferSetup(TIFF*, tdata_t, tsize_t);
-extern  int TIFFWriteCheck(TIFF*, int, const char *);
-extern  int TIFFCreateDirectory(TIFF*);
-extern	int TIFFLastDirectory(TIFF*);
-extern	int TIFFSetDirectory(TIFF*, tdir_t);
-extern	int TIFFSetSubDirectory(TIFF*, uint32TIFF);
-extern	int TIFFUnlinkDirectory(TIFF*, tdir_t);
-extern	int TIFFSetField(TIFF*, ttag_t, ...);
-extern	int TIFFVSetField(TIFF*, ttag_t, va_list);
-extern	int TIFFWriteDirectory(TIFF *);
-extern	int TIFFReassignTagToIgnore(enum TIFFIgnoreSense, int);
-
-#if defined(c_plusplus) || defined(__cplusplus)
-extern	void TIFFPrintDirectory(TIFF*, FILE*, long = 0);
-extern	int TIFFReadScanline(TIFF*, tdata_t, uint32TIFF, tsample_t = 0);
-extern	int TIFFWriteScanline(TIFF*, tdata_t, uint32TIFF, tsample_t = 0);
-extern	int TIFFReadRGBAImage(TIFF*, uint32TIFF, uint32TIFF, uint32TIFF*, int = 0);
-#else
-extern	void TIFFPrintDirectory(TIFF*, FILE*, long);
-extern	int TIFFReadScanline(TIFF*, tdata_t, uint32TIFF, tsample_t);
-extern	int TIFFWriteScanline(TIFF*, tdata_t, uint32TIFF, tsample_t);
-extern	int TIFFReadRGBAImage(TIFF*, uint32TIFF, uint32TIFF, uint32TIFF*, int);
-#endif
-
-extern	int TIFFReadRGBAStrip(TIFF*, tstrip_t, uint32TIFF * );
-extern	int TIFFReadRGBATile(TIFF*, uint32TIFF, uint32TIFF, uint32TIFF * );
-extern	int TIFFRGBAImageOK(TIFF*, char [1024]);
-extern	int TIFFRGBAImageBegin(TIFFRGBAImage*, TIFF*, int, char [1024]);
-extern	int TIFFRGBAImageGet(TIFFRGBAImage*, uint32TIFF*, uint32TIFF, uint32TIFF);
-extern	void TIFFRGBAImageEnd(TIFFRGBAImage*);
-extern	TIFF* TIFFOpen(const char*, const char*);
-extern	TIFF* TIFFFdOpen(int, const char*, const char*);
-extern	TIFF* TIFFClientOpen(const char*, const char*,
-	    thandle_t,
-	    TIFFReadWriteProc, TIFFReadWriteProc,
-	    TIFFSeekProc, TIFFCloseProc,
-	    TIFFSizeProc,
-	    TIFFMapFileProc, TIFFUnmapFileProc);
-extern	const char* TIFFFileName(TIFF*);
-extern	void TIFFError(const char*, const char*, ...);
-extern	void TIFFWarning(const char*, const char*, ...);
-extern	TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler);
-extern	TIFFErrorHandler TIFFSetWarningHandler(TIFFErrorHandler);
-extern	TIFFExtendProc TIFFSetTagExtender(TIFFExtendProc);
-extern	ttile_t TIFFComputeTile(TIFF*, uint32TIFF, uint32TIFF, uint32TIFF, tsample_t);
-extern	int TIFFCheckTile(TIFF*, uint32TIFF, uint32TIFF, uint32TIFF, tsample_t);
-extern	ttile_t TIFFNumberOfTiles(TIFF*);
-extern	tsize_t TIFFReadTile(TIFF*,
-	    tdata_t, uint32TIFF, uint32TIFF, uint32TIFF, tsample_t);
-extern	tsize_t TIFFWriteTile(TIFF*,
-	    tdata_t, uint32TIFF, uint32TIFF, uint32TIFF, tsample_t);
-extern	tstrip_t TIFFComputeStrip(TIFF*, uint32TIFF, tsample_t);
-extern	tstrip_t TIFFNumberOfStrips(TIFF*);
-extern	tsize_t TIFFReadEncodedStrip(TIFF*, tstrip_t, tdata_t, tsize_t);
-extern	tsize_t TIFFReadRawStrip(TIFF*, tstrip_t, tdata_t, tsize_t);
-extern	tsize_t TIFFReadEncodedTile(TIFF*, ttile_t, tdata_t, tsize_t);
-extern	tsize_t TIFFReadRawTile(TIFF*, ttile_t, tdata_t, tsize_t);
-extern	tsize_t TIFFWriteEncodedStrip(TIFF*, tstrip_t, tdata_t, tsize_t);
-extern	tsize_t TIFFWriteRawStrip(TIFF*, tstrip_t, tdata_t, tsize_t);
-extern	tsize_t TIFFWriteEncodedTile(TIFF*, ttile_t, tdata_t, tsize_t);
-extern	tsize_t TIFFWriteRawTile(TIFF*, ttile_t, tdata_t, tsize_t);
-extern	void TIFFSetWriteOffset(TIFF*, toff_t);
-extern	void TIFFSwabShort(uint16TIFF*);
-extern	void TIFFSwabLong(uint32TIFF*);
-extern	void TIFFSwabDouble(double*);
-extern	void TIFFSwabArrayOfShort(uint16TIFF*, unsigned long);
-extern	void TIFFSwabArrayOfLong(uint32TIFF*, unsigned long);
-extern	void TIFFSwabArrayOfDouble(double*, unsigned long);
-extern	void TIFFReverseBits(unsigned char *, unsigned long);
-extern	const unsigned char* TIFFGetBitRevTable(int);
-#if defined(__cplusplus)
-}
-#endif
-#endif /* _TIFFIO_ */
diff --git a/Utilities/CAI/cai_dll/inc/tiffiop.h b/Utilities/CAI/cai_dll/inc/tiffiop.h
deleted file mode 100755
index e86fff4deb..0000000000
--- a/Utilities/CAI/cai_dll/inc/tiffiop.h
+++ /dev/null
@@ -1,279 +0,0 @@
-/* $Header: tiffiop.h,v 1.3 01/01/15 15:24:34 cmf Exp $ */
-
-/*
- * Copyright (c) 1988-1997 Sam Leffler
- * Copyright (c) 1991-1997 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.
- */
-
-#ifndef _TIFFIOP_
-#define	_TIFFIOP_
-/*
- * ``Library-private'' definitions.
- */
-/*
- * UNIX systems should run the configure script to generate
- * a port.h file that reflects the system capabilities.
- * Doing this obviates all the dreck done in tiffcomp.h.
- */
-#if defined(unix) || defined(__unix)
-#include "port.h"
-#include "tiffconf.h"
-#else
-#include "tiffconf.h"
-#include "tiffcomp.h"
-#endif
-#include "tiffio.h"
-#include "tif_dir.h"
-
-#ifndef TRUE
-#define	TRUE	1
-#define	FALSE	0
-#endif
-
-/*
- * Typedefs for ``method pointers'' used internally.
- */
-typedef	unsigned char tidataval_t;	/* internal image data value type */
-typedef	tidataval_t* tidata_t;		/* reference to internal image data */
-
-typedef	void (*TIFFVoidMethod)(TIFF*);
-typedef	int (*TIFFBoolMethod)(TIFF*);
-typedef	int (*TIFFPreMethod)(TIFF*, tsample_t);
-typedef	int (*TIFFCodeMethod)(TIFF*, tidata_t, tsize_t, tsample_t);
-typedef	int (*TIFFSeekMethod)(TIFF*, uint32);
-typedef	void (*TIFFPostMethod)(TIFF*, tidata_t, tsize_t);
-typedef	int (*TIFFVSetMethod)(TIFF*, ttag_t, va_list);
-typedef	int (*TIFFVGetMethod)(TIFF*, ttag_t, va_list);
-typedef	void (*TIFFPrintMethod)(TIFF*, FILE*, long);
-typedef	uint32 (*TIFFStripMethod)(TIFF*, uint32);
-typedef	void (*TIFFTileMethod)(TIFF*, uint32*, uint32*);
-
-struct tiff {
-	char*		tif_name;	/* name of open file */
-	int		tif_fd;		/* open file descriptor */
-	int		tif_mode;	/* open mode (O_*) */
-	uint32		tif_flags;
-#define	TIFF_FILLORDER		0x0003	/* natural bit fill order for machine */
-#define	TIFF_DIRTYHEADER	0x0004	/* header must be written on close */
-#define	TIFF_DIRTYDIRECT	0x0008	/* current directory must be written */
-#define	TIFF_BUFFERSETUP	0x0010	/* data buffers setup */
-#define	TIFF_CODERSETUP		0x0020	/* encoder/decoder setup done */
-#define	TIFF_BEENWRITING	0x0040	/* written 1+ scanlines to file */
-#define	TIFF_SWAB		0x0080	/* byte swap file information */
-#define	TIFF_NOBITREV		0x0100	/* inhibit bit reversal logic */
-#define	TIFF_MYBUFFER		0x0200	/* my raw data buffer; free on close */
-#define	TIFF_ISTILED		0x0400	/* file is tile, not strip- based */
-#define	TIFF_MAPPED		0x0800	/* file is mapped into memory */
-#define	TIFF_POSTENCODE		0x1000	/* need call to postencode routine */
-#define	TIFF_INSUBIFD		0x2000	/* currently writing a subifd */
-#define	TIFF_UPSAMPLED		0x4000	/* library is doing data up-sampling */ 
-#define	TIFF_STRIPCHOP		0x8000	/* enable strip chopping support */
-	toff_t		tif_diroff;	/* file offset of current directory */
-	toff_t		tif_nextdiroff;	/* file offset of following directory */
-	TIFFDirectory	tif_dir;	/* internal rep of current directory */
-	TIFFHeader	tif_header;	/* file's header block */
-        tidata_t        tif_clientdir;  /* client TIFF directory */
-	const int*	tif_typeshift;	/* data type shift counts */
-	const long*	tif_typemask;	/* data type masks */
-	uint32		tif_row;	/* current scanline */
-	tdir_t		tif_curdir;	/* current directory (index) */
-	tstrip_t	tif_curstrip;	/* current strip for read/write */
-	toff_t		tif_curoff;	/* current offset for read/write */
-	toff_t		tif_dataoff;	/* current offset for writing dir */
-#if SUBIFD_SUPPORT
-	uint16		tif_nsubifd;	/* remaining subifds to write */
-	toff_t		tif_subifdoff;	/* offset for patching SubIFD link */
-#endif
-/* tiling support */
-	uint32 		tif_col;	/* current column (offset by row too) */
-	ttile_t		tif_curtile;	/* current tile for read/write */
-	tsize_t		tif_tilesize;	/* # of bytes in a tile */
-/* compression scheme hooks */
-	TIFFBoolMethod	tif_setupdecode;/* called once before predecode */
-	TIFFPreMethod	tif_predecode;	/* pre- row/strip/tile decoding */
-	TIFFBoolMethod	tif_setupencode;/* called once before preencode */
-	TIFFPreMethod	tif_preencode;	/* pre- row/strip/tile encoding */
-	TIFFBoolMethod	tif_postencode;	/* post- row/strip/tile encoding */
-	TIFFCodeMethod	tif_decoderow;	/* scanline decoding routine */
-	TIFFCodeMethod	tif_encoderow;	/* scanline encoding routine */
-	TIFFCodeMethod	tif_decodestrip;/* strip decoding routine */
-	TIFFCodeMethod	tif_encodestrip;/* strip encoding routine */
-	TIFFCodeMethod	tif_decodetile;	/* tile decoding routine */
-	TIFFCodeMethod	tif_encodetile;	/* tile encoding routine */
-	TIFFVoidMethod	tif_close;	/* cleanup-on-close routine */
-	TIFFSeekMethod	tif_seek;	/* position within a strip routine */
-	TIFFVoidMethod	tif_cleanup;	/* cleanup state routine */
-	TIFFStripMethod	tif_defstripsize;/* calculate/constrain strip size */
-	TIFFTileMethod	tif_deftilesize;/* calculate/constrain tile size */
-	tidata_t	tif_data;	/* compression scheme private data */
-/* input/output buffering */
-	tsize_t		tif_scanlinesize;/* # of bytes in a scanline */
-	tsize_t		tif_scanlineskew;/* scanline skew for reading strips */
-	tidata_t	tif_rawdata;	/* raw data buffer */
-	tsize_t		tif_rawdatasize;/* # of bytes in raw data buffer */
-	tidata_t	tif_rawcp;	/* current spot in raw buffer */
-	tsize_t		tif_rawcc;	/* bytes unread from raw buffer */
-/* memory-mapped file support */
-	tidata_t	tif_base;	/* base of mapped file */
-	toff_t		tif_size;	/* size of mapped file region (bytes) */
-	TIFFMapFileProc	tif_mapproc;	/* map file method */
-	TIFFUnmapFileProc tif_unmapproc;/* unmap file method */
-/* input/output callback methods */
-	thandle_t	tif_clientdata;	/* callback parameter */
-	TIFFReadWriteProc tif_readproc;	/* read method */
-	TIFFReadWriteProc tif_writeproc;/* write method */
-	TIFFSeekProc	tif_seekproc;	/* lseek method */
-	TIFFCloseProc	tif_closeproc;	/* close method */
-	TIFFSizeProc	tif_sizeproc;	/* filesize method */
-/* post-decoding support */
-	TIFFPostMethod	tif_postdecode;	/* post decoding routine */
-/* tag support */
-	TIFFFieldInfo**	tif_fieldinfo;	/* sorted table of registered tags */
-	int		tif_nfields;	/* # entries in registered tag table */
-	TIFFVSetMethod	tif_vsetfield;	/* tag set routine */
-	TIFFVGetMethod	tif_vgetfield;	/* tag get routine */
-	TIFFPrintMethod	tif_printdir;	/* directory print routine */
-};
-
-#define	isPseudoTag(t)	(t > 0xffff)	/* is tag value normal or pseudo */
-
-#define	isTiled(tif)	(((tif)->tif_flags & TIFF_ISTILED) != 0)
-#define	isMapped(tif)	(((tif)->tif_flags & TIFF_MAPPED) != 0)
-#define	isFillOrder(tif, o)	(((tif)->tif_flags & (o)) != 0)
-#define	isUpSampled(tif)	(((tif)->tif_flags & TIFF_UPSAMPLED) != 0)
-#define	TIFFReadFile(tif, buf, size) \
-	((*(tif)->tif_readproc)((tif)->tif_clientdata,buf,size))
-#define	TIFFWriteFile(tif, buf, size) \
-	((*(tif)->tif_writeproc)((tif)->tif_clientdata,buf,size))
-#define	TIFFSeekFile(tif, off, whence) \
-	((*(tif)->tif_seekproc)((tif)->tif_clientdata,(toff_t)(off),whence))
-#define	TIFFCloseFile(tif) \
-	((*(tif)->tif_closeproc)((tif)->tif_clientdata))
-#define	TIFFGetFileSize(tif) \
-	((*(tif)->tif_sizeproc)((tif)->tif_clientdata))
-#define	TIFFMapFileContents(tif, paddr, psize) \
-	((*(tif)->tif_mapproc)((tif)->tif_clientdata,paddr,psize))
-#define	TIFFUnmapFileContents(tif, addr, size) \
-	((*(tif)->tif_unmapproc)((tif)->tif_clientdata,addr,size))
-
-/*
- * Default Read/Seek/Write definitions.
- */
-#ifndef ReadOK
-#define	ReadOK(tif, buf, size) \
-	(TIFFReadFile(tif, (tdata_t) buf, (tsize_t)(size)) == (tsize_t)(size))
-#endif
-#ifndef SeekOK
-#define	SeekOK(tif, off) \
-	(TIFFSeekFile(tif, (toff_t) off, SEEK_SET) == (toff_t) off)
-#endif
-#ifndef WriteOK
-#define	WriteOK(tif, buf, size) \
-	(TIFFWriteFile(tif, (tdata_t) buf, (tsize_t) size) == (tsize_t) size)
-#endif
-
-/* NB: the uint32 casts are to silence certain ANSI-C compilers */
-#define	TIFFhowmany(x, y) ((((uint32)(x))+(((uint32)(y))-1))/((uint32)(y)))
-#define	TIFFroundup(x, y) (TIFFhowmany(x,y)*((uint32)(y)))
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-extern	int _TIFFgetMode(const char*, const char*);
-extern	int _TIFFNoRowEncode(TIFF*, tidata_t, tsize_t, tsample_t);
-extern	int _TIFFNoStripEncode(TIFF*, tidata_t, tsize_t, tsample_t);
-extern	int _TIFFNoTileEncode(TIFF*, tidata_t, tsize_t, tsample_t);
-extern	int _TIFFNoRowDecode(TIFF*, tidata_t, tsize_t, tsample_t);
-extern	int _TIFFNoStripDecode(TIFF*, tidata_t, tsize_t, tsample_t);
-extern	int _TIFFNoTileDecode(TIFF*, tidata_t, tsize_t, tsample_t);
-extern	void _TIFFNoPostDecode(TIFF*, tidata_t, tsize_t);
-extern  int  _TIFFNoPreCode (TIFF*, tsample_t); 
-extern	int _TIFFNoSeek(TIFF*, uint32);
-extern	void _TIFFSwab16BitData(TIFF*, tidata_t, tsize_t);
-extern	void _TIFFSwab32BitData(TIFF*, tidata_t, tsize_t);
-extern	void _TIFFSwab64BitData(TIFF*, tidata_t, tsize_t);
-extern	int TIFFFlushData1(TIFF*);
-extern	void TIFFFreeDirectory(TIFF*);
-extern	int TIFFDefaultDirectory(TIFF*);
-extern	int TIFFSetCompressionScheme(TIFF*, int);
-extern	int TIFFSetDefaultCompressionState(TIFF*);
-extern	uint32 _TIFFDefaultStripSize(TIFF*, uint32);
-extern	void _TIFFDefaultTileSize(TIFF*, uint32*, uint32*);
-
-extern	void _TIFFsetByteArray(void**, void*, long);
-extern	void _TIFFsetString(char**, char*);
-extern	void _TIFFsetShortArray(uint16**, uint16*, long);
-extern	void _TIFFsetLongArray(uint32**, uint32*, long);
-extern	void _TIFFsetFloatArray(float**, float*, long);
-extern	void _TIFFsetDoubleArray(double**, double*, long);
-
-extern	void _TIFFprintAscii(FILE*, const char*);
-extern	void _TIFFprintAsciiTag(FILE*, const char*, const char*);
-
-GLOBALDATA(TIFFErrorHandler,_TIFFwarningHandler);
-GLOBALDATA(TIFFErrorHandler,_TIFFerrorHandler);
-
-extern	int TIFFInitDumpMode(TIFF*, int);
-#ifdef PACKBITS_SUPPORT
-extern	int TIFFInitPackBits(TIFF*, int);
-#endif
-#ifdef CCITT_SUPPORT
-extern	int TIFFInitCCITTRLE(TIFF*, int), TIFFInitCCITTRLEW(TIFF*, int);
-extern	int TIFFInitCCITTFax3(TIFF*, int), TIFFInitCCITTFax4(TIFF*, int);
-#endif
-#ifdef THUNDER_SUPPORT
-extern	int TIFFInitThunderScan(TIFF*, int);
-#endif
-#ifdef NEXT_SUPPORT
-extern	int TIFFInitNeXT(TIFF*, int);
-#endif
-#ifdef LZW_SUPPORT
-extern	int TIFFInitLZW(TIFF*, int);
-#endif
-#ifdef OJPEG_SUPPORT
-extern	int TIFFInitOJPEG(TIFF*, int);
-#endif
-#ifdef JPEG_SUPPORT
-extern	int TIFFInitJPEG(TIFF*, int);
-#endif
-#ifdef JBIG_SUPPORT
-extern	int TIFFInitJBIG(TIFF*, int);
-#endif
-#ifdef ZIP_SUPPORT
-extern	int TIFFInitZIP(TIFF*, int);
-#endif
-#ifdef PIXARLOG_SUPPORT
-extern	int TIFFInitPixarLog(TIFF*, int);
-#endif
-#ifdef LOGLUV_SUPPORT
-extern	int TIFFInitSGILog(TIFF*, int);
-#endif
-#ifdef VMS
-extern	const TIFFCodec _TIFFBuiltinCODECS[];
-#else
-extern	TIFFCodec _TIFFBuiltinCODECS[];
-#endif
-
-#if defined(__cplusplus)
-}
-#endif
-#endif /* _TIFFIOP_ */
diff --git a/Utilities/CAI/cai_dll/inc/uvcode.h b/Utilities/CAI/cai_dll/inc/uvcode.h
deleted file mode 100755
index 8d96e44583..0000000000
--- a/Utilities/CAI/cai_dll/inc/uvcode.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/* Version 1.0 generated April 7, 1997 by Greg Ward Larson, SGI */
-#define UV_SQSIZ	(float)0.003500
-#define UV_NDIVS	16289
-#define UV_VSTART	(float)0.016940
-#define UV_NVS		163
-static struct {
-	float	ustart;
-	short	nus, ncum;
-}	uv_row[UV_NVS] = {
-	(float)0.247663,	4,	0,
-	(float)0.243779,	6,	4,
-	(float)0.241684,	7,	10,
-	(float)0.237874,	9,	17,
-	(float)0.235906,	10,	26,
-	(float)0.232153,	12,	36,
-	(float)0.228352,	14,	48,
-	(float)0.226259,	15,	62,
-	(float)0.222371,	17,	77,
-	(float)0.220410,	18,	94,
-	(float)0.214710,	21,	112,
-	(float)0.212714,	22,	133,
-	(float)0.210721,	23,	155,
-	(float)0.204976,	26,	178,
-	(float)0.202986,	27,	204,
-	(float)0.199245,	29,	231,
-	(float)0.195525,	31,	260,
-	(float)0.193560,	32,	291,
-	(float)0.189878,	34,	323,
-	(float)0.186216,	36,	357,
-	(float)0.186216,	36,	393,
-	(float)0.182592,	38,	429,
-	(float)0.179003,	40,	467,
-	(float)0.175466,	42,	507,
-	(float)0.172001,	44,	549,
-	(float)0.172001,	44,	593,
-	(float)0.168612,	46,	637,
-	(float)0.168612,	46,	683,
-	(float)0.163575,	49,	729,
-	(float)0.158642,	52,	778,
-	(float)0.158642,	52,	830,
-	(float)0.158642,	52,	882,
-	(float)0.153815,	55,	934,
-	(float)0.153815,	55,	989,
-	(float)0.149097,	58,	1044,
-	(float)0.149097,	58,	1102,
-	(float)0.142746,	62,	1160,
-	(float)0.142746,	62,	1222,
-	(float)0.142746,	62,	1284,
-	(float)0.138270,	65,	1346,
-	(float)0.138270,	65,	1411,
-	(float)0.138270,	65,	1476,
-	(float)0.132166,	69,	1541,
-	(float)0.132166,	69,	1610,
-	(float)0.126204,	73,	1679,
-	(float)0.126204,	73,	1752,
-	(float)0.126204,	73,	1825,
-	(float)0.120381,	77,	1898,
-	(float)0.120381,	77,	1975,
-	(float)0.120381,	77,	2052,
-	(float)0.120381,	77,	2129,
-	(float)0.112962,	82,	2206,
-	(float)0.112962,	82,	2288,
-	(float)0.112962,	82,	2370,
-	(float)0.107450,	86,	2452,
-	(float)0.107450,	86,	2538,
-	(float)0.107450,	86,	2624,
-	(float)0.107450,	86,	2710,
-	(float)0.100343,	91,	2796,
-	(float)0.100343,	91,	2887,
-	(float)0.100343,	91,	2978,
-	(float)0.095126,	95,	3069,
-	(float)0.095126,	95,	3164,
-	(float)0.095126,	95,	3259,
-	(float)0.095126,	95,	3354,
-	(float)0.088276,	100,	3449,
-	(float)0.088276,	100,	3549,
-	(float)0.088276,	100,	3649,
-	(float)0.088276,	100,	3749,
-	(float)0.081523,	105,	3849,
-	(float)0.081523,	105,	3954,
-	(float)0.081523,	105,	4059,
-	(float)0.081523,	105,	4164,
-	(float)0.074861,	110,	4269,
-	(float)0.074861,	110,	4379,
-	(float)0.074861,	110,	4489,
-	(float)0.074861,	110,	4599,
-	(float)0.068290,	115,	4709,
-	(float)0.068290,	115,	4824,
-	(float)0.068290,	115,	4939,
-	(float)0.068290,	115,	5054,
-	(float)0.063573,	119,	5169,
-	(float)0.063573,	119,	5288,
-	(float)0.063573,	119,	5407,
-	(float)0.063573,	119,	5526,
-	(float)0.057219,	124,	5645,
-	(float)0.057219,	124,	5769,
-	(float)0.057219,	124,	5893,
-	(float)0.057219,	124,	6017,
-	(float)0.050985,	129,	6141,
-	(float)0.050985,	129,	6270,
-	(float)0.050985,	129,	6399,
-	(float)0.050985,	129,	6528,
-	(float)0.050985,	129,	6657,
-	(float)0.044859,	134,	6786,
-	(float)0.044859,	134,	6920,
-	(float)0.044859,	134,	7054,
-	(float)0.044859,	134,	7188,
-	(float)0.040571,	138,	7322,
-	(float)0.040571,	138,	7460,
-	(float)0.040571,	138,	7598,
-	(float)0.040571,	138,	7736,
-	(float)0.036339,	142,	7874,
-	(float)0.036339,	142,	8016,
-	(float)0.036339,	142,	8158,
-	(float)0.036339,	142,	8300,
-	(float)0.032139,	146,	8442,
-	(float)0.032139,	146,	8588,
-	(float)0.032139,	146,	8734,
-	(float)0.032139,	146,	8880,
-	(float)0.027947,	150,	9026,
-	(float)0.027947,	150,	9176,
-	(float)0.027947,	150,	9326,
-	(float)0.023739,	154,	9476,
-	(float)0.023739,	154,	9630,
-	(float)0.023739,	154,	9784,
-	(float)0.023739,	154,	9938,
-	(float)0.019504,	158,	10092,
-	(float)0.019504,	158,	10250,
-	(float)0.019504,	158,	10408,
-	(float)0.016976,	161,	10566,
-	(float)0.016976,	161,	10727,
-	(float)0.016976,	161,	10888,
-	(float)0.016976,	161,	11049,
-	(float)0.012639,	165,	11210,
-	(float)0.012639,	165,	11375,
-	(float)0.012639,	165,	11540,
-	(float)0.009991,	168,	11705,
-	(float)0.009991,	168,	11873,
-	(float)0.009991,	168,	12041,
-	(float)0.009016,	170,	12209,
-	(float)0.009016,	170,	12379,
-	(float)0.009016,	170,	12549,
-	(float)0.006217,	173,	12719,
-	(float)0.006217,	173,	12892,
-	(float)0.005097,	175,	13065,
-	(float)0.005097,	175,	13240,
-	(float)0.005097,	175,	13415,
-	(float)0.003909,	177,	13590,
-	(float)0.003909,	177,	13767,
-	(float)0.002340,	177,	13944,
-	(float)0.002389,	170,	14121,
-	(float)0.001068,	164,	14291,
-	(float)0.001653,	157,	14455,
-	(float)0.000717,	150,	14612,
-	(float)0.001614,	143,	14762,
-	(float)0.000270,	136,	14905,
-	(float)0.000484,	129,	15041,
-	(float)0.001103,	123,	15170,
-	(float)0.001242,	115,	15293,
-	(float)0.001188,	109,	15408,
-	(float)0.001011,	103,	15517,
-	(float)0.000709,	97,	15620,
-	(float)0.000301,	89,	15717,
-	(float)0.002416,	82,	15806,
-	(float)0.003251,	76,	15888,
-	(float)0.003246,	69,	15964,
-	(float)0.004141,	62,	16033,
-	(float)0.005963,	55,	16095,
-	(float)0.008839,	47,	16150,
-	(float)0.010490,	40,	16197,
-	(float)0.016994,	31,	16237,
-	(float)0.023659,	21,	16268,
-};
diff --git a/Utilities/CAI/cai_dll/inc/version.h b/Utilities/CAI/cai_dll/inc/version.h
deleted file mode 100755
index 0638b1f3c6..0000000000
--- a/Utilities/CAI/cai_dll/inc/version.h
+++ /dev/null
@@ -1 +0,0 @@
-#define VERSION "LIBTIFF, Version 3.5.5\nCopyright (c) 1988-1996 Sam Leffler\nCopyright (c) 1991-1996 Silicon Graphics, Inc."
diff --git a/Utilities/CAI/cai_dll/lib/hd421md.lib b/Utilities/CAI/cai_dll/lib/hd421md.lib
deleted file mode 100755
index 3f0bcc8cd247270dd944014eb35894be8ce016f2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 86972
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
b7TTSdw?C<n1^~)mriA={s*w5ytgHV4jJbg~

diff --git a/Utilities/CAI/cai_dll/lib/hm421md.lib b/Utilities/CAI/cai_dll/lib/hm421md.lib
deleted file mode 100755
index 4e336528d4e156577125a55f270e97857c68ebeb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17280
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
H^PK(%et-SH

diff --git a/Utilities/CAI/cai_dll/lib/libjpeg.lib b/Utilities/CAI/cai_dll/lib/libjpeg.lib
deleted file mode 100755
index 63cedb3a355ab1071cbb44606931753f4a5023de..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 233802
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%0Aokv(Ky;t>R
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
bpP60ExliD*ZO5{yowA@?ZX++;xx0J}f*!J?

diff --git a/Utilities/CAI/cai_dll/lib/tiff.lib b/Utilities/CAI/cai_dll/lib/tiff.lib
deleted file mode 100755
index 9ea4ec10a02a06d6670b58f1a30624226a662fb7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21044
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
XHc{v*a^on0IQDsk!nd0hO!NN$Lz<ij

diff --git a/Utilities/CAI/cai_dll/lib/unix2win.lib b/Utilities/CAI/cai_dll/lib/unix2win.lib
deleted file mode 100755
index 5a7f5551b2e943a26b1bb48d3c622096dda94ce1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 27558
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
LFG^y6?&<#m(leKJ

diff --git a/Utilities/CAI/cai_dll/src/CMakeLists.txt b/Utilities/CAI/cai_dll/src/CMakeLists.txt
deleted file mode 100755
index 3a6e63d003..0000000000
--- a/Utilities/CAI/cai_dll/src/CMakeLists.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-# Sources of non-templated classes.
-
-SET(CAI_SRCS 
-        cai_fonctions.c
-        cai_bsq.c
-        cai_bip.c
-        cai_inria.c
-        cai_onera.c
-        cai_bil.c
-        cai_lum.c
-        cai_gessimu.c
-        cai_grilles.c
-        cai_tiff.c 
-        cai_jpeg.c 
-        cai_rasterfile.c
-        cai_DonAux.c 
-        cai_radar.c 
-        cai_spot.c 
-        cai_bandeau.c 
- )
-
-ADD_LIBRARY(cai ${CAI_SRCS})
-
-INSTALL_TARGETS(/lib/otb cai )
-INSTALL_FILES(/include/otb/Utilities/CAI "(\\.h)$")
diff --git a/Utilities/CAI/cai_dll/src/cai_DonAux.c b/Utilities/CAI/cai_dll/src/cai_DonAux.c
deleted file mode 100755
index 1bd123f3df..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_DonAux.c
+++ /dev/null
@@ -1,3873 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET:   COUCHE ACCES IMAGE                                              */
-/*                                                                           */
-/*                                                                           */
-/* NOM DU MODULE    :   CAI_DONAUX.c                                         */
-/*                                                                           */
-/* DATE DE CREATION:  Janvier 95                                             */
-/* AUTEUR:  jl PASCAL   m RAYNAL       (CISI)                                */
-/*                                                                           */
-/* ROLE: ce module est charge de toutes les operations de lecture/ecriture   */
-/*       sur les fichiers de donnees auxiliaires.			     */
-/*	  il permet en outre de creer un nouveau fichier,ou de detruire un   */
-/*       fichier existant                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* LANGAGE: C                                                                */
-/* VERSION: V1                                                               */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications pour compatibilite HP64bits      */
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : prototypage des fonctions                      */
-/*****************************************************************************/
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>   
-#include <fcntl.h>
-#include <malloc.h>
-#include <limits.h>
-#include <ctype.h>
-#include <unistd.h>
-#include <errno.h>
-#include <sys/uio.h>
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers de CONSTANTES (.cct)                */
-/*---------------------------------------------------------------------------*/
-#define _CAI_IMAGE
-#define IN_CAI_DA
-
-#include "cai_image.h"
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header: cai_DonAux.c,v 1.10 01/01/15 15:24:40 cmf Exp $";
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers de TYPES (.cty)                     */
-/*---------------------------------------------------------------------------*/
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des AUTRES fichiers                              */
-/*---------------------------------------------------------------------------*/
-
-/*---------------------------------------------------------------------------*/
-/*                Definition des CONSTANTES propres                          */
-/*---------------------------------------------------------------------------*/
-#define maxi(a,b) ((a) > (b) ? (a) : (b))
-#define mini(a,b) ((a) > (b) ? (b) : (a))
-/*---------------------------------------------------------------------------*/
-/*                Definition des TYPES propres                               */
-/*---------------------------------------------------------------------------*/
-typedef enum { CAI_DEBUT = 0 , CAI_ETAT31 = 1 } CAI_ETAT3;
-typedef enum { CAI_INFERIEUR = 0 , CAI_SUPERIEUR = 1 , CAI_FIN = 2 , CAI_AUTRES = 3 } CAI_EVT3;
-typedef enum { CAI_DEBUTDEC = 0 , CAI_ETAT11 = 1 , CAI_ETAT12 = 2 , CAI_ETAT13 = 3 ,
-		 CAI_ETAT14 = 4 , CAI_FINDEC = 5 , CAI_BLOCVIDE=6 , CAI_ERR11 = 11 , CAI_ERR13 =13} CAI_ETAT1;
-typedef enum { CAI_PAR_OUV = 0 , CAI_PAR_FERM = 1 , CAI_DONNEE = 2 , CAI_INF = 3 ,
-		 CAI_BLANC = 4 } CAI_EVT1;
-typedef enum { CAI_DEBUTYPE = 0 , CAI_ETAT21 = 1 , CAI_ETAT22 = 2 , CAI_ETAT23 = 3 , 
-		 CAI_ENTIER = 4 , CAI_ASC = 5 , CAI_REEL = 6 , CAI_ERR21 = 11 } CAI_ETAT2;
-typedef enum { CAI_POINT = 0 , CAI_GUILL = 1 , CAI_ESPACE = 2 , CAI_CHIFFRE = 3 ,
-		 CAI_SIGNE = 4 , CAI_AUTRE = 5 } CAI_EVT2;
-
-
-
-/*---------------------------------------------------------------------------*/
-/*                Declaration des OPERATIONS INTERNES (static)               */
-/*---------------------------------------------------------------------------*/
-static CAI_OK_KO cai_lirecleDA(CAI_FILE_DA *fd,long  ad_deb,char * mot_cle, 
-			       long *ad_suiv,long * ad_deb_mcc);
- static CAI_OK_KO cai_liredonneeDA(CAI_FILE_DA *fd,long ad_deb, void **don_lue, 
-				  CAI_TYPE *type_lu,int *nb_lig_lu, 
-  			          int *nb_col_lu, long *taille_cell_lu );
- static CAI_OK_KO cai_deplaceficDA(CAI_FILE_DA *fd ,long debut,long deplacement);
- static CAI_OK_KO cai_lireficDA(CAI_FILE_DA *fd,long  ad_deb,char *buff);
- static CAI_OK_KO cai_ecrireficDA(CAI_FILE_DA *fd,long ad_deb,
-				  long taille, char **buff );
- static CAI_OK_KO cai_decodedonDA(long taille_buf, char buff[],long ad_deb,
-			   CAI_TYPE *type_lu,int *nb_lig_lu,int *nb_elt_lu,
-			   int *nb_elt_alloc,long *taille_cell_lu, 
-  			   void  **don_lue, CAI_ETAT1 *etat1,long *ad_fin_dec);
- static CAI_OK_KO cai_analyseDA(char car, CAI_EVT1 *evt2);
- static CAI_OK_KO cai_typeDA(char car, CAI_EVT2 *evt2);
- static CAI_OK_KO cai_recherchecleDA(long taille_buf,char *buff,
-				    long ad_deb,char *mot_cle,long *ad_suiv); 
- static CAI_OK_KO cai_mot_cleDA(char car, CAI_EVT3 *evt3);
- static CAI_OK_KO cai_ecritDA_buf(CAI_FILE_DA *fd,char *mot_cle,
-				 CAI_TYPE type,int nb_lig,int nb_col,
-			         long taille_cell, void *donnee,
-				 int indic_ecrit,char **da_ascii);
-
-
-/*---------------------------------------------------------------------------*/
-/*                Definition des RESSOURCES IMPORTEES (extern)               */
-/*---------------------------------------------------------------------------*/
-
-/*---------------------------------------------------------------------------*/
-/*                Definition des RESSOURCES EXPORTEES                        */
-/*---------------------------------------------------------------------------*/
-
-
-
-/*---------------------------------------------------------------------------*/
-/*                Definition des RESSOURCES PROPRES (static)                 */
-/*---------------------------------------------------------------------------*/
-
-static int autom1[6][5]={{ 1,11,11, 6, 0},
-			 { 2,11,11,13, 1},
-			 {11, 4, 3,13, 2},
-			 {11, 4, 3,13, 3},
-			 { 2, 5,11,13, 4}};
-
-static int autom2[4][6]={{ 3, 2,11, 1, 1,11},
-			 { 3,11, 4, 1,11,11},
-			 { 2, 5, 2, 2, 2, 2},
-			 { 3,11, 6, 3, 3, 3}}; 
-   
-static int autom3[2][4]={{  1, 0,  -1, 0},
-			 { -25, 2, -24, 1}};
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION: cai_openDA                                                     */
-/*                                                                           */
-/* ROLE:  Cette operation externe  est charge d'ouvrir le fichier de donnees */
-/*	auxiliaires .Elle retourne une structure de type CAI_FILE_DA qui permet  */
-/*      par la suite de manipuler le contenu du fichier .		     */
-/*	mode d'ouverture  CAI_ECRITURE ou CAI_LECTURE            	     */	  
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL:                                                         */
-/*									     */
-/*                                                                           */
-/* VERSION:                                                                  */
-/* CODES RETOUR: CAI_OK ou CAI_KO						     */
-/*	" erreur a l'ouverture du fichier %s "				     */
-/*	" erreur d'allocation memoire "					     */
-/*****************************************************************************/
-CAI_FILE_DA *cai_openDA(char *nom_fichier, char *type_image, 	
-	    			  int nb_can,CAI_MODE_OUVERTURE mode_ouv)
-{
-int	flags;   /* flag utilise pour la fonction open */
-int	mode;    /* valeur du umask utilise pou la fonction open */
-int	fd;      /* descripteur du fichier ouvert */
-CAI_FILE_DA *donaux; /* structure descriptive du fichier de donnees auxiliaires */
-CAI_CHAINE fichier_da; /*fichier de donnees auxiliaires */
-int	i;	 /* indice de boucle */
-int 	canal;   /* flag indiquant si je suis en mono ou en multispectral */
-int    trouve;	 /* flag indiquant si le format a ete reconnu */
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-donaux = NULL;
-strcpy(fichier_da,nom_fichier);
-/*-- on concatene a la fin le CAI_SUF_FORMAT en fonction du format de l'image traitee --*/
-if (nb_can ==1 )
-	{
-/*--- cas monospectral ---*/
-	canal=0;
-	}
-else
-	{
-/*--- cas multispectral ---*/
-	canal=1;
-	}
-
-/* reconnaissance du format  */
-trouve=0;
-for( i = 0 ; i< CAI_NB_FORMAT ; i++)
-      {
-
-       if(strcmp(type_image,CAI_NOM_FORMAT[i]) == 0 )
-	       {
-		strcat(fichier_da,CAI_SUF_FORMAT[canal][i]);		
-		trouve=1;
-	       }
-      }
-if (trouve == 0)
-	{
-	sprintf(CAI_ERREUR,"Erreur: format de l'image non reconnu ( %s )",type_image);
-	goto ERREUR;
-	}
-
-/*-- on concatene a la fin du nom de fichier le CAI_SUF_FORMAT des donnees auxiliaires --*/
-strcat(fichier_da,CAI_SUFFIXE_DA);
-
-/*CD allocation dynamique de la structure de donnees auxiliaires */
-donaux = (CAI_FILE_DA *)malloc(sizeof(CAI_FILE_DA));
-if (donaux == NULL)
-	{
-	sprintf(CAI_ERREUR,"Erreur d'allocation a l'ouverture du fichier de donnees auxiliaires %s",fichier_da);
-	goto ERREUR;
-	}
-
-/*CD en fonction du mode d'ouverture , ouverture du fichier		*/
-if (mode_ouv == CAI_LECTURE) 
-	{
-	flags = O_RDONLY;
-	fd = open(fichier_da,flags);
-	}
-else
-	{
-	flags = O_RDWR|O_CREAT;
-	mode  = PERMS;
-	fd = open(fichier_da,flags,mode);	
-	}
-/*CD si erreur on sort avec messsage " erreur a l'ouverture 		*/
-if (fd == -1)
-	{
-	sprintf(CAI_ERREUR,"Erreur a l'ouverture du fichier de donnees auxiliaires %s",fichier_da);
-         if (donaux != NULL)
-	 {
-	  free(donaux);
-          donaux = NULL;
-
-	  }
-
-	goto ERREUR;
-	}
-else
-	{
-/*CD initialisations des pointeurs de la structure CAI_FILE_DA     	*/
-/*CD ( buffers de lecture , liste de mots cles , longueurs ...)		*/ 
-	strcpy(donaux->nom_fichier,fichier_da);
-	donaux->descr = fd;
-	donaux->buffer=NULL;
-	donaux->taille_buffer = CAI_TAILLE_BUFFER;
-	donaux->taille_buffer_lu=0;
-	donaux->num_buffer=-1;
-	donaux->liste_mot_cle=NULL;
-	donaux->ad_mot_cle=NULL;
-	donaux->ad_donnee=NULL;
-	donaux->nb_mot_cle=-1;
-	donaux->ad_dern_mot_cle=-1;
-/*CD allocation dynamique du buffer */
-	donaux->buffer = (char *)malloc(CAI_TAILLE_BUFFER + 1);
-	if (donaux->buffer == NULL)
-	{
-		sprintf(CAI_ERREUR,"Erreur d'allocation a l'ouverture du fichier de donnees auxiliaires %s",fichier_da);
-               if (donaux != NULL)
-	       {
-		free(donaux);
-        	donaux = NULL;
-
-	       }
-
-	    goto ERREUR;
-	}
-	
-	}
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas nominal  				     */
-/*---------------------------------------------------------------------------*/
-return(donaux);
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas d'erreur 				     */
-/*---------------------------------------------------------------------------*/
-ERREUR:
-  return(NULL);
-/*---------------------------------------------------------------------------*/
-/*		 	FIN DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION: cai_closeDA                                                    */
-/*                                                                           */
-/* ROLE: Cette operation externe est chargee de fermer le fichier de donnees */
-/* auxiliaires precedenment ouvert ( operation cai_openDA )		     */
-/* la zone memoire reservee lors des operations precedentes dans la structure*/
-/* CAI_FILE_DA 								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL:                                                         */
-/*                                                                           */
-/* VERSION:                                                                  */
-/* CODES RETOUR: CAI_OK ou CAI_KO						     */
-/*	" erreur a la fermeture du fichier %s "				     */
-/*****************************************************************************/
-CAI_OK_KO cai_closeDA(CAI_FILE_DA *fd)
-
-{
-CAI_OK_KO	retour;		/* code retour appel fonction */
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-retour = CAI_OK;
-
-if (fd ==NULL)
-	{
-	retour = CAI_ERREUR_OUV;
-	sprintf(CAI_ERREUR,"Erreur a la fermeture d'un fichier de donnees auxiliaires ");
-		goto ERREUR;
-	}
-close(fd->descr);
-/*CD fermeture du fichier 						     */
-/* desallocation des buffer alloues */
-/*CD si le pointeurs de la structure CAI_FILE_DA sont <> NULL		     */
-/*CD	la memoire allouee est liberee 					     */
-if (fd->buffer != NULL)
-	{
-	free(fd->buffer);
-        fd->buffer = NULL;
-	}
-if (fd->liste_mot_cle != NULL)
-	{
-	free(fd->liste_mot_cle);
-        fd->liste_mot_cle = NULL;
-   	}
-if (fd->ad_mot_cle != NULL)
-	{
-	free(fd->ad_mot_cle);
-        fd->ad_mot_cle= NULL;
-	}
-if (fd->ad_donnee != NULL)
-	{
-	free(fd->ad_donnee);
-        fd->ad_donnee = NULL;
-	}
-
-free(fd);
-fd = NULL;
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas nominal  				     */
-/*---------------------------------------------------------------------------*/
-return(retour);
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas degrade  				     */
-/*---------------------------------------------------------------------------*/
-ERREUR:
-
-return(retour);
-/*---------------------------------------------------------------------------*/
-/*		 	FIN DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION: cai_removeDA                                                   */
-/*                                                                           */
-/* ROLE: Cette operation externe est charge de detruire un fichier de donnees*/
-/*   auxiliaires.                                                            */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL:                                                         */
-/*                                                                           */
-/* VERSION:                                                                  */
-/* CODES RETOUR: CAI_OK ou CAI_KO				             */
-/*	" erreur a la destrucution du fichier %s "			     */
-/*****************************************************************************/
-CAI_OK_KO cai_removeDA(char *nom_fichier,char *type_image,int nb_can)
-
-{
-int	cr; /* code retour */
-CAI_CHAINE fichier_da; /*fichier de donnees auxiliaires */
-int	i;	 /* indice de boucle */
-int 	canal;   /* flag indiquant si je suis en mono ou en multispectral */
-int    trouve;	 /* flag indiquant si le format a ete reconnu */
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	         		     */
-/*---------------------------------------------------------------------------*/
-strcpy(fichier_da,nom_fichier);
-/*-- on concatene a la fin le CAI_SUF_FORMAT en fonction du format de l'image traitee --*/
-if (nb_can ==1 )
-	{
-/*--- cas monospectral ---*/
-	canal=0;
-	}
-else
-	{
-/*--- cas multispectral ---*/
-	canal=1;
-	}
-
-/* reconnaissance du format  */
-trouve=0;
-for( i = 0 ; i< CAI_NB_FORMAT ; i++)
-      {
-       if(strcmp(type_image,CAI_NOM_FORMAT[i]) == 0 )
-	       {
-		strcat(fichier_da,CAI_SUF_FORMAT[canal][i]);		
-		trouve=1;
-	       }
-      }
-if (trouve == 0)
-	{
-	sprintf(CAI_ERREUR,"Erreur: format de l'image non reconnu ( %s )",type_image);
-	goto ERREUR;
-	}
-
-/*-- on concatene a la fin du nom de fichier le CAI_SUF_FORMAT des donnees auxiliaires --*/
-strcat(fichier_da,CAI_SUFFIXE_DA);
-cr=remove(fichier_da);
-if (cr != 0)
-	{
-	sprintf(CAI_ERREUR,"destruction du fichier de donnees auxiliaires %s impossible",fichier_da);
-	goto ERREUR;	
-	}
-return(CAI_OK);
-ERREUR:
-return(CAI_KO);
-/*---------------------------------------------------------------------------*/
-/*		 	FIN DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION:  cai_modifieDA                                                 */
-/*                                                                           */
-/* ROLE:  Cette operation modifie le contenu d'une donnee auxiliaire issue du*/
-/*	fichier de DA.							     */
-/*	Toutes les autres donnees sont conservees dans le fichier .Si le mot */
-/*	cle n'est pas trouve, une erreur est detectee.			     */
-/*      NB : le fichier doit au prealable avoir ete ouvert en mode CAI_ECRITURE  */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL:                                                         */
-/*                                                                           */
-/* VERSION:                                                                  */
-/* CODES RETOUR: CAI_OK ou CAI_KO						     */
-/* "erreur fichier ouvert en mode lecture "				     */ 
-/*****************************************************************************/
-CAI_OK_KO cai_modifieDA(CAI_FILE_DA *fd,char *mot_cle,
-				    CAI_TYPE type,int nb_lig,int nb_col, 	
-  	        	            long taille_cell,void *donnee)
-{
-int	i;	/* indice de boucle */
-int	indic;  /* indicateur de recherche du mot cle a modifier */
-long	p1;	/* pointeur sur le mot cle a modifier */
-long	p2;	/* pointeur sur le mot cle suivant */
-int	num_mot_cle; /* numero du mot cle a modifier */ 
-CAI_OK_KO   cr;	/* code retour */
-off_t   offset;	  	
-off_t   offreel;
-long	taille_init; /* taille en octets de la donnee a modifier */
-long	taille_fin; /* taille en octets de la donnee a modifier */
-int	indic_ecrit; /* indicateur d'ecriture dans un fichier */
-char  * da_ascii;  /* pointeur sur la donnee formatee a ecrire */
-long	deplacement; /* valeur du trou a faire dans le fichier */
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-da_ascii=NULL;
-/*CD on verifie au prealable que le fichier est effectivement ouvert */
-/*CD SINON on sort en erreur */
-if ( fd ==NULL ) 
-	{
-	cr = CAI_ERREUR_OUV;
-	sprintf(CAI_ERREUR,"Erreur ouverture du fichier de donnees auxiliaires");
-	goto ERREUR;
-	}
-/*---------------------------------------------------------------------------*/
-/*CD on appelle alors l'operation de liste de tous les mots cles 	     */
-/*---------------------------------------------------------------------------*/
-/*CD	si la liste n'existe pas					     */
-if (fd->nb_mot_cle == -1)
-	{
-	cr=cai_listeDA(fd);
-	if (cr != CAI_OK )
-		{
-		goto ERREUR;
-		}		
-	}
-
-i=0;
-indic=CAI_NON_TROUVE;
-
-/*---------------------------------------------------------------------------*/
-/*CD recherche du mot cle */
-/*---------------------------------------------------------------------------*/
-while (indic == CAI_NON_TROUVE && i < fd->nb_mot_cle)
-	{
-	if (strncmp(mot_cle,(char *)(fd->liste_mot_cle + i),CAI_TAILLE_MAX_CLEDA) == 0 )
-		{
-		indic = CAI_TROUVE; 
-		num_mot_cle=i;
-		}
-	i++;
-	}
-/*---------------------------------------------------------------------------*/
-/*CD SI le mot cle n'existe pas 					     */
-/*---------------------------------------------------------------------------*/
-if (indic == CAI_NON_TROUVE)
-	{
-/*CD	ALORS on sort en erreur        					     */
-	cr=CAI_MC_INCONNU;
-	sprintf(CAI_ERREUR,"Erreur : le mot cle %s n'existe pas dans le fichier",mot_cle);
-	goto ERREUR; 
-	}
-else
-	{
-/*---------------------------------------------------------------------------*/
-/*CD	SINON on recupere le pointeur sur le mot cle dans le fichier (p1)    */	
-/*---------------------------------------------------------------------------*/
-	p1 = *(fd->ad_mot_cle + num_mot_cle);
-/*---------------------------------------------------------------------------*/
-/*CD		ainsi que le pointeur sur le mot cle suivant (p2)	     */
-/*---------------------------------------------------------------------------*/
-/*CD	SI le mot cle a modifier est le dernier mot cle			     */
-	if ( num_mot_cle == fd->nb_mot_cle -1)
-		{
-/*CD on se positionne sur la fin du fichier ( rewind ) 		     */
-		offset=0;
-		offreel=lseek(fd->descr,offset,SEEK_END);
-/*CD SI erreur on sort "erreur lors d'un lseek du fichier de DA " 	     */
-		if ( offreel == -1)
-			{
-			cr=CAI_PB_LSEEK;
-			sprintf(CAI_ERREUR,"erreur lors du lseek sur le  fichier %s",fd->nom_fichier);
-			goto ERREUR;
-			}
-		offreel=lseek(fd->descr,offset,SEEK_CUR);
-/*CD SI erreur on sort "erreur lors d'un lseek du fichier de DA " 	     */
-		if ( offreel == -1)
-			{
-			cr=CAI_PB_LSEEK;
-			sprintf(CAI_ERREUR,"erreur lors du lseek sur le  fichier %s",fd->nom_fichier);
-			goto ERREUR;
-			}
-		p2=offreel;
-		}
-	else
-/*CD	SINON */
-		{
-		p2= *(fd->ad_mot_cle + num_mot_cle+1);
-		}
-/*CD	FIN SI le mot cle a modifier est le dernier mot cle		     */
-/*---------------------------------------------------------------------------*/
-/*CD		la taille de la donnee a modifier est p2 - p1 octets ti      */
-/*---------------------------------------------------------------------------*/
-	taille_init = p2 - p1;
-/*---------------------------------------------------------------------------*/
-/*CD		on formate dans une chaine de caracteres  la donnee a ecrire */
-/*CD		(operation interne)( terminee par un \0)		     */
-/*---------------------------------------------------------------------------*/
-	indic_ecrit=0;
-	cr=cai_ecritDA_buf(fd,		/* [E] file descriptor du fichier de DA 	*/
-		   	mot_cle,	/* [E] mot cle associe aux donnees auxiliaires 	*/
-		        type,		/* [E] type des donnees a ecrire		*/
-		        nb_lig,		/* [E] nombre de lignes du tableau a ecrire	*/
-		        nb_col,		/* [E] nombre de colonnes du tableau a ecrire	*/
-		        taille_cell,	/* [E] taille maxi en octets d'un element	*/
-					/*     (significatif si type = ascii)		*/
-		   	donnee,	        /* [E] pointeur sur la zone memoire a ecrire	*/
-		        indic_ecrit,	/* [E] indicateur si ecriture du buffer dans 	*/
-					/*     le fichier (=1) sinon (=0)	        */
-		   	&da_ascii	/* buffer de la DA en ascii (sous forme 	*/
-					/* de x fois CAI_TAILLE_MAX_LIGDA caracteres)	*/
-		  );
-	if (cr != CAI_OK)
-		{
-		goto ERREUR;
-		}
-/*CD		la taille de la donnee a ecrire est la taille de la chaine tf*/
-	taille_fin=(long)strlen(da_ascii);	
-/*---------------------------------------------------------------------------*/
-/*CD		on cree alors un trou dans le fichier de DA de taille  tf-ti */
-/*CD		en commencant a l'adresse p2 ( operation interne )	     */
-/*---------------------------------------------------------------------------*/
-	deplacement= taille_fin -taille_init;
-	cr=cai_deplaceficDA( 
-				fd  ,	  /* [E] file descripteur du fichier ouvert en lecture ecriture  */
-			        p2,     /* [E] adresse de debut de la zone a deplacer */
-			        deplacement/* [E] valeur deplacement <0 on racourcit le fichier  */
-					  /*     valeur deplacement >0 on allonge le fichier    */
-			   );
-	if (cr != CAI_OK)
-		{
-		goto ERREUR;
-		}
-
-/*---------------------------------------------------------------------------*/
-/*CD		on ecrit alors la donnee a ecrire a partir de l'adresse p1   */
-/*CD			(operation interne qui ecrit directement la chaine ) */
-/*CD			de caracteres precedente)			     */
-/*---------------------------------------------------------------------------*/
-	cr=cai_ecrireficDA(
-			     fd,      /* [E] structure decrivant le fichier de donnees auxiliaires  */
-			     p1,      /* [E] adresse dans le fichier ou ecrire le buffer */ 
-			     taille_fin,      /* [E] taille de la chaine ascii a ecrire */
-         	      	     &da_ascii        /* [E] chaine a ecrire*/
-		   );
-	if (cr != CAI_OK)
-		{
-		goto ERREUR;
-		}
-/*CD		liberation de la chaine de caracteres allouee		     */
-	if ( da_ascii != NULL)
-		{
-		free(da_ascii);
-	        da_ascii = NULL;
-		}
-	}
-/*CD    FINSI le mot cle existe						     */		
-/*---------------------------------------------------------------------------*/
-/*CD on met a jour la structure CAI_FILE_DA ( buffer , liste ...)		     */ 
-/*---------------------------------------------------------------------------*/
-fd->num_buffer=-1;
-fd->nb_mot_cle=-1;
-if (fd->liste_mot_cle != NULL)
-	{
-	free(fd->liste_mot_cle);
-        fd->liste_mot_cle=NULL;
-	}
-if (fd->ad_mot_cle != NULL)
-	{
-	free(fd->ad_mot_cle);
-	fd->ad_mot_cle= NULL;
-	}
-if (fd->ad_donnee != NULL)
-	{
-	free(fd->ad_donnee);
-        fd->ad_donnee= NULL;
-	}
-fd->ad_dern_mot_cle=-1;
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas nominal  				     */
-/*---------------------------------------------------------------------------*/
-return(CAI_OK);
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas d'erreur 				     */
-/*---------------------------------------------------------------------------*/
-ERREUR:
-if (da_ascii != NULL)
-	{
-	free(da_ascii);
-         da_ascii=NULL;
-	}
-/*---------------------------------------------------------------------------*/
-/*CD on met a jour la structure CAI_FILE_DA ( buffer , liste ...)		     */ 
-/*---------------------------------------------------------------------------*/
-fd->num_buffer=-1;
-fd->nb_mot_cle=-1;
-if (fd->liste_mot_cle != NULL)
-	{
-	free(fd->liste_mot_cle);
-        fd->liste_mot_cle = NULL;
-	}
-if (fd->ad_mot_cle != NULL)
-	{
-	free(fd->ad_mot_cle);
-	fd->ad_mot_cle=NULL;
-	}
-if (fd->ad_donnee != NULL)
-	{
-	free(fd->ad_donnee);
-	fd->ad_donnee=NULL;
-	}
-fd->ad_dern_mot_cle=-1;
-return(cr);
-/*---------------------------------------------------------------------------*/
-/*		 	  FIN  DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION:  cai_detruitDA                                                 */
-/*                                                                           */
-/* ROLE:  Cette operation detruit le contenu d'une donnee auxiliaire issue du*/
-/*	fichier de DA.							     */
-/*	Toutes les autres donnees sont conservees dans le fichier .	     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL:                                                         */
-/*                                                                           */
-/* VERSION:                                                                  */
-/* CODES RETOUR: CAI_OK ou CAI_KO					     */
-/* "erreur fichier ouvert en mode lecture "				     */ 
-/*****************************************************************************/
-CAI_OK_KO cai_detruitDA(CAI_FILE_DA *fd,char *mot_cle)
-
-{
-int	i;	/* indice de boucle */
-int	indic;  /* indicateur de recherche du mot cle a modifier */
-long	p1;	/* pointeur sur le mot cle a modifier */
-long	p2;	/* pointeur sur le mot cle suivant */
-int	num_mot_cle; /* numero du mot cle a modifier */ 
-CAI_OK_KO   cr;	/* code retour */
-off_t   offset;	  	
-off_t   offreel;
-long	taille_init; /* taille en octets de la donnee a modifier */
-long	deplacement; /* valeur du trou a faire dans le fichier */ 
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-/*CD on verifie au prealable que le fichier est effectivement ouvert */
-/*CD SINON on sort en erreur */
-if ( fd ==NULL ) 
-
-	{
-	cr = CAI_ERREUR_OUV;
-	sprintf(CAI_ERREUR,"Erreur ouverture du fichier de donnees auxiliaires");
-	goto ERREUR;
-	}
-/*---------------------------------------------------------------------------*/
-/*CD on appelle alors l'operation de liste de tous les mots cles 	     */
-/*---------------------------------------------------------------------------*/
-/*CD	si la liste n'existe pas					     */
-if (fd->nb_mot_cle == -1)
-	{
-	cr=cai_listeDA(fd);
-	if (cr != CAI_OK )
-		{
-		goto ERREUR;
-		}		
-	}
-
-i=0;
-indic=CAI_NON_TROUVE;
-/*---------------------------------------------------------------------------*/
-/*CD recherche du mot cle */
-/*---------------------------------------------------------------------------*/
-while (indic == CAI_NON_TROUVE && i < fd->nb_mot_cle)
-	{
-	if (strncmp(mot_cle,(char *)(fd->liste_mot_cle + i),CAI_TAILLE_MAX_CLEDA) == 0 )
-		{
-		indic = CAI_TROUVE; 
-		num_mot_cle=i;
-		}
-	i++;
-	}
-/*---------------------------------------------------------------------------*/
-/*CD SI le mot cle n'existe pas 					     */
-/*---------------------------------------------------------------------------*/
-if (indic == CAI_NON_TROUVE)
-	{
-/*CD	ALORS on sort en erreur        					     */
-	cr=CAI_MC_INCONNU;
-	sprintf(CAI_ERREUR,"Erreur : le mot cle %s n'existe pas dans le fichier",mot_cle);
-	goto ERREUR; 
-	}
-else
-	{
-/*---------------------------------------------------------------------------*/
-/*CD	SINON on recupere le pointeur sur le mot cle dans le fichier (p1)    */	
-/*---------------------------------------------------------------------------*/
-	p1 = *(fd->ad_mot_cle + num_mot_cle);
-/*---------------------------------------------------------------------------*/
-/*CD		ainsi que le pointeur sur le mot cle suivant (p2)	     */
-/*---------------------------------------------------------------------------*/
-/*CD	SI le mot cle a detruire est le dernier mot cle			     */
-	if ( num_mot_cle == fd->nb_mot_cle -1)
-		{
-/*CD on se positionne sur la fin du fichier ( rewind ) 		     */
-		offset=0;
-		offreel=lseek(fd->descr,offset,SEEK_END);
-/*CD SI erreur on sort "erreur lors d'un lseek du fichier de DA " 	     */
-		if ( offreel == -1)
-			{
-			cr=CAI_PB_LSEEK;
-			sprintf(CAI_ERREUR,"erreur lors du lseek sur le  fichier %s",fd->nom_fichier);
-			goto ERREUR;
-			}
-		offreel=lseek(fd->descr,offset,SEEK_CUR);
-/*CD SI erreur on sort "erreur lors d'un lseek du fichier de DA " 	     */
-		if ( offreel == -1)
-			{
-			cr=CAI_PB_LSEEK;
-			sprintf(CAI_ERREUR,"erreur lors du lseek sur le  fichier %s",fd->nom_fichier);
-			goto ERREUR;
-			}
-		p2=offreel;
-		}
-	else
-/*CD	SINON */
-		{
-		p2= *(fd->ad_mot_cle + num_mot_cle+1);
-		}
-/*CD	FIN SI le mot cle a detruire est le dernier mot cle		     */
-/*---------------------------------------------------------------------------*/
-/*CD		la taille de la donnee a detruire est p2 - p1 octets ti      */
-/*CD		on cree alors un trou dans le fichier de DA de taille ti(<0) */
-/*CD		en commencant a l'adresse p2 ( operation interne )	     */
-/*---------------------------------------------------------------------------*/
-	taille_init = p2 - p1;
-	deplacement= -taille_init;
-	cr=cai_deplaceficDA( 
-				fd  ,	  /* [E] file descripteur du fichier ouvert en lecture ecriture  */
-			        p2,     /* [E] adresse de debut de la zone a deplacer */
-			        deplacement/* [E] valeur deplacement <0 on racourcit le fichier  */
-					  /*     valeur deplacement >0 on allonge le fichier    */
-			   );
-	if (cr != CAI_OK)
-		{
-		goto ERREUR;
-		}
-
-	}
-/*CD    FINSI le mot cle existe						     */		
-/*---------------------------------------------------------------------------*/
-/*CD on met a jour la structure CAI_FILE_DA ( buffer , liste ...)		     */ 
-/*---------------------------------------------------------------------------*/
-fd->num_buffer=-1;
-fd->nb_mot_cle=-1;
-if (fd->liste_mot_cle != NULL)
-	{
-	free(fd->liste_mot_cle);
-        fd->liste_mot_cle=NULL;
-	}
-if (fd->ad_mot_cle != NULL)
-	{
-	free(fd->ad_mot_cle);
-	fd->ad_mot_cle=NULL;
-	}
-if (fd->ad_donnee != NULL)
-	{
-	free(fd->ad_donnee);
-	fd->ad_donnee=NULL;
-	}
-fd->ad_dern_mot_cle=-1;
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas nominal  				     */
-/*---------------------------------------------------------------------------*/
-fd->num_buffer=-1;
-fd->nb_mot_cle=-1;
-if (fd->liste_mot_cle != NULL)
-	{
-	free(fd->liste_mot_cle);
-        fd->liste_mot_cle=NULL;
-
-	}
-if (fd->ad_mot_cle != NULL)
-	{
-	free(fd->ad_mot_cle);
-	fd->ad_mot_cle=NULL;
-
-	}
-if (fd->ad_donnee != NULL)
-	{
-	free(fd->ad_donnee);
-	fd->ad_donnee=NULL;
-
-	}
-fd->ad_dern_mot_cle=-1;
-return(CAI_OK);
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas d'erreur 				     */
-/*---------------------------------------------------------------------------*/
-ERREUR:
-return(cr);
-/*---------------------------------------------------------------------------*/
-/*		 	  FIN  DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION:  cai_caractDA                                                  */
-/*                                                                           */
-/* ROLE:  cette operation externe est chargee de trouver le type et la taille*/
-/*   d'une donnee auxiliaire lue dans un fichier precedenment ouvert.        */
-/*   Il s'agit donc apres localisation du mot cle de lire le type de la donne*/
-/*    puis de compter le nombres de cellules de ce type dans la ligne.       */
-/*   Dans le cas d'une donnee de type CAI_ASCII la taille maxi de la cellule est */
-/*   aussi indiquee a l'appelant.                                            */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL:                                                         */
-/* cette operation doit etre appele apres ouverture prealable du fichier     */
-/* de donnees auxiliaires.						     */  
-/*                                                                           */
-/* VERSION:                                                                  */
-/* CODES RETOUR: CAI_OK ou CAI_KO						     */
-/*   si CAI_KO l'erreur peut etre affiche via la variable globale CAI_ERREUR     */
-/*   " fichier de donnees auxiliaires %s non ouvert"			     */ 
-/*   " mot cle non present dans le fichier de donnees auxiliaires %s"        */
-/*   " aucun mot cle dans le fichier %s"			             */
-/*   " taille du mot cle lue %s superieure a la limite %d ou egale a 0"      */ 
-/*   " erreur a la lecture du fichier de donnees auxiliaires %s"             */
-/*   " parenthese ouvrante non detectee (mot cle %s )                        */ 
-/*   " parenthese fermante  non detectee (mot cle %s )                       */
-/*   " nombre de niveaux de parentheses superieur a 2 ( mot cle %s )         */ 	
-/*   " % dimension du tableau non constante (mot cle %s)                     */
-/*   " % dimension du tableau = 0     (mot cle %s)                           */
-/*   " type de la donnee lue %s non reconnue (mot cle %s)                    */
-/*   " erreur lors du decodage de la donnee lue %s" (mot cle)                */
-/*****************************************************************************/
-CAI_OK_KO cai_lirecaractDA(CAI_FILE_DA *fd,char *mot_cle,
-				    CAI_TYPE *type,int *nb_lig,int *nb_col, 	
-  	        	            long *taille_cell)
-{
-CAI_MOT_CLE mot_cle_lu;    /* mot cle courant lu dans le fichier */
-int	indic_mot_cle; /* indicateur de recherche du mot cle */
-int	num_mot_cle;   /* numero du mot cle recherche */
-long	ad_mot_cle;    /* adresse du debut du mot cle courant */	
-long    ad_donnee;     /* adresse de la donnee apres le mot cle trouve */ 		
-long	adresse_deb;   /* adresse de debut de recherche du mot cle */
-CAI_OK_KO	cr;	       /* code retour des operations */		
-void	*don_lue;      /* donnees lue en interne par l'operation cai_liredonneeDA */
-int	i;	       /* indice de boucle */	
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-/*CD initialisations  */
-indic_mot_cle = CAI_NON_TROUVE;
-num_mot_cle=0;
-i=0;
-ad_donnee=0;
-cr=CAI_OK;
-don_lue=NULL;
-
-/*CD on verifie au prealable que le fichier est effectivement ouvert */
-/*CD SINON on sort en erreur */
-if ( fd ==NULL ) 
-
-	{
-	cr = CAI_ERREUR_OUV;
-	sprintf(CAI_ERREUR,"Erreur ouverture du fichier de donnees auxiliaires");
-	goto ERREUR;
-	}
-
-/*CD SI la liste des mots cles est en memoire 			*/
-if ( fd->nb_mot_cle != -1 ) 
-	{
-/*---------------------------------------------------------------------------*/
-/*CD ALORS on scrute cette liste jusqu'a trouver le mot cle */
-/*---------------------------------------------------------------------------*/
-	while (i< fd->nb_mot_cle && indic_mot_cle == CAI_NON_TROUVE )
-		{
-		if ( strncmp(mot_cle,(char *)(fd->liste_mot_cle + i),CAI_TAILLE_MAX_CLEDA) == 0 )
-			{
-			indic_mot_cle = CAI_TROUVE;
-			num_mot_cle    = i;
-/*CD	   on recupere alors le pointeur sur la zone fichier apres ce mot cle */
-			ad_donnee=*(fd->ad_donnee + i);
-			strcpy(mot_cle_lu,(char *)(fd->liste_mot_cle +i));
-			ad_mot_cle=*(fd->ad_mot_cle + i);
-			}
-		i++;
-		}
-	}
-else
-	{
-/*CD SINON							*/	
-/*CD   on se positionne au debut du fichier ( adresse_deb = 0)  */
-	adresse_deb = 0;	
-/*---------------------------------------------------------------------------*/
-/*CD   on cherche le premier mot cle a partir de cette adresse (operation interne basee sur un automate) */
-/*---------------------------------------------------------------------------*/
-	cr = cai_lirecleDA(fd,     /* [E] file descriptor du fichier a lire  */
-        	      	   adresse_deb,   /* [E] adresse de debut de recherche */
-	        	   mot_cle_lu,  /* [S] mot cle suivant lu ( termine par \0)*/
-		           &ad_donnee, /* [S] adresse du premier caractere suivant le mot cle */
-		           &ad_mot_cle /* [S] adresse du premier caractere du mot cle */
- 		   	  );
-/*CD    si erreur on sort */
-	if (cr != CAI_OK && cr != CAI_EOF) {
-			goto ERREUR;
-			}	
-/*CD   si aucun mot cle trouve on sort en erreur "aucun mot cle dans le fichier" */  
-	if (cr == CAI_EOF)
-		{
-		sprintf(CAI_ERREUR,"Erreur fichier sans mot cle( %s) ",fd->nom_fichier);
-		goto ERREUR;
-		}
-/*CD   TANT QUE  mot_cle non trouve &  pas erreur */
-	while ( cr == CAI_OK  && indic_mot_cle == CAI_NON_TROUVE )
-		{
-/*CD   	  si le mot cle est egal au mot cle demande alors mot_cle trouve */
-		if ( strcmp(mot_cle,mot_cle_lu) == 0)
-			{
-			indic_mot_cle = CAI_TROUVE;
-			}
-		else
-			{
-			adresse_deb = ad_donnee;
-/*---------------------------------------------------------------------------*/
-/*CD      si mot_cle non trouve on cherche le mot cle suivant (operation interne basee sur un automate) */
-/*CD      cette operation necessite : un pointeur sur la zone fichier ou l'on recherche le mot cle suivant */
-/*CD      cette operation ramene : le mot cle suivant et le pointeur sur la zone fichier apres ce mot cle */
-/*---------------------------------------------------------------------------*/
-			cr = cai_lirecleDA(fd,     /* [E] file descriptor du fichier a lire  */
-        	      	   		   adresse_deb,   /* [E] adresse de debut de recherche */
-	        	   		   mot_cle_lu,  /* [S] mot cle suivant lu (termine par \0)*/
-		           		   &ad_donnee, /* [S] adresse du premier caractere suivant le mot cle */
-		           		   &ad_mot_cle/* [S] adresse du premier caractere du mot cle */
- 		   	  		   );
-			}
-/*CD   FIN TANT QUE pas erreur & mot_cle non trouve */
-		}
-	}
-/*CD FINSI */
-if (cr != CAI_OK && cr != CAI_EOF) 
-	{
-	goto ERREUR;
-	}
-/*CD 	SI fin de fichier on sort en erreur "mot cle non present */
-if ( indic_mot_cle == CAI_NON_TROUVE ) 
-	{
-	sprintf(CAI_ERREUR,"Mot cle :%s non trouve dans le fichier :%s",mot_cle,fd->nom_fichier);
-	goto ERREUR;
-	}
-/*CD on sauvegarde alors dans la structure fd les info sur le dernier mot cle */
-strcpy(fd->dernier_mot_cle,mot_cle_lu);
-fd->ad_dern_mot_cle = ad_mot_cle;
-fd->ad_dern_donnee  = ad_donnee;
-/*---------------------------------------------------------------------------*/
-/*CD a partir du mot cle trouve on analyse syntaxiquement la ligne jusqu'au prochain mot cle */
-/*CD (operation interne effectuant le decodage et donnant : le type de donnee , le nombres de lignes */
-/*CD le nombre de colonnes , la taille maxi d'un element , un pointeur sur le tableau lu */
-/*CD ( ce tableau a ete alloue dynamiquement par cette operation) 		*/
-/*---------------------------------------------------------------------------*/
-cr=cai_liredonneeDA(
-			fd,         /* [E] file descriptor du fichier a lire  */
-        	      	ad_donnee,  /* [E] adresse de debut de recherche */
-	        	&don_lue,    /* [S] donnee lue */
-			type,    /* [S] type de la donnee lue (CAI_ENTIER4,CAI_REEL8,CAI_ASCII,CAI_BLOC)*/
-			nb_lig,  /* [S] nombre de lignes du tableau lu  */
-			nb_col,  /* [S] nombre de colonnes du tableau lu  */  
-		        taille_cell/* [S] taille maxi en octet d'un element du tableau lu ( significatif
-					 pourla donnee CAI_ASCII )*/   
-		      );
-
-/*CD si erreur de decodage on sort en erreur */
-if (cr != CAI_OK ) {
-	if (cr == CAI_EOF ){
-		sprintf(CAI_ERREUR,"erreur fichier de DA incomplet (mot cle %s)",mot_cle);
-		}
-	goto ERREUR;
-	}
-/*CD liberation place memoire alloue par l'operation interne precedente  */
-if (don_lue != NULL)
-	{
-	free(don_lue);
-	don_lue=NULL;
-	}
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas nominal  				     */
-/*---------------------------------------------------------------------------*/
-return(CAI_OK);
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas d'erreur 				     */
-/*---------------------------------------------------------------------------*/
-ERREUR:
-/*CD liberation place memoire alloue par l'operation interne precedente  */
-if (don_lue != NULL)
-	{
-	free(don_lue);
-	don_lue=NULL;
-	}
-return(cr);
-
-/*---------------------------------------------------------------------------*/
-/*		 	FIN DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION:  cai_lireDA                                                    */
-/*                                                                           */
-/* ROLE:  Cette operation externe est chargee de lire une donne associee a un*/
-/*	mot cle dans le fichier de donnees auxiliaires precedenment ouvert.  */
-/*        Il s'agit donc apres localisation du mot cle de lire la donnee et  */
-/*    toutes les informations associees(nb_lig,nb_col,taille_cell).	     */
-/*    	  On verifie alors la coherence entre les informations lues et celles*/
-/*    issues des arguments donnes par l'appelant.			     */
-/*	  Si les 3 informations sont coherentes la donnee est recopiee dans  */
-/*    la zone memoire reservee par l'appelant.				     */ 	    		
-/* 	                                                                     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL:                                                         */
-/* cette operation doit etre appele apres ouverture prealable du fichier     */
-/* de donnees auxiliaires.						     */
-/* pour une souplesse d'utilisation maximum il est utilise d'appeler au      */
-/* prealable l'operation  cai_lirecaractDA puis de reserver la place memoire */
-/* necessaire                           				     */ 
-/*                                                                           */
-/* VERSION:                                                                  */
-/* CODES RETOUR: CAI_OK ou CAI_KO				             */
-/*   si CAI_KO l'erreur peut etre affiche via la variable globale CAI_ERREUR */
-/*   " fichier de donnees auxiliaires %s non ouvert"			     */ 
-/*   " mot cle non present dans le fichier de donnees auxiliaires %s"        */
-/*   " aucun mot cle dans le fichier %s"			             */
-/*   " taille du mot cle lue %s superieure a la limite %d ou egale a 0"      */ 
-/*   " erreur a la lecture du fichier de donnees auxiliaires %s"             */
-/*   " parenthese ouvrante non detectee (mot cle %s )                        */ 
-/*   " parenthese fermante  non detectee (mot cle %s )                       */
-/*   " nombre de niveaux de parentheses superieur a 2 ( mot cle %s )         */ 	
-/*   " % dimension du tableau non constante (mot cle %s)                     */
-/*   " % dimension du tableau = 0     (mot cle %s)                           */
-/*   " type de la donnee lue %s non reconnue (mot cle %s)                    */
-/*   " erreur lors du decodage de la donnee lue %s" (mot cle %s)             */
-/*   " incoherence entre nblig lue (%d) et nblig specifiee (%d) (mot cle %s) */  	
-/*   " incoherence entre nbcol lue (%d) et nbcol specifiee (%d) (mot cle %s) */ 
-/*   " incoherence entre taille_cell lue (%d) et taille_cell  specifiee (%d) */
-/*            (mot cle %s) 						     */  	
-/*****************************************************************************/
-CAI_OK_KO cai_lireDA(CAI_FILE_DA *fd,char *mot_cle,
-				    CAI_TYPE *type,int *nb_lig,int *nb_col, 	
-  	        	            long *taille_cell,void *donnee)
-{
-int	i;	       /* indice de boucle */
-int     j;	       /* indice de boucle */	 	
-CAI_MOT_CLE mot_cle_lu;    /* mot cle courant lu dans le fichier */
-int	indic_mot_cle; /* indicateur de recherche du mot cle */
-int	num_mot_cle;   /* numero du mot cle recherche */
-long	ad_mot_cle;    /* adresse du debut du mot cle courant */	
-long    ad_donnee;     /* adresse de la donnee apres le mot cle trouve */ 		
-long	adresse_deb;   /* adresse de debut de recherche du mot cle */
-CAI_OK_KO	cr;	       /* code retour des operations */		
-void	*don_lue;      /* donnees lue en interne par l'operation cai_liredonneeDA */	
-char    *don_asc;      /* donnee ascii lue */
-long int *don_ent;     /* donnee entiere lue */				
-double   *don_ree;     /* donnee reelle lue */
-CAI_TYPE	type_lu;       /* type de la donnee lue CAI_ENTIER4 ou CAI_REEL8 ou CAI_BLOC*/
-int	nb_lig_lu;     /* nombre de lignes lues */
-int     nb_col_lu;     /* nombre de colonnes lues */
-long	taille_cell_lu;/* taille de la cellule CAI_ASCII maxi lue */
-char    *donnee_a;     /* donnee ascii lue */
-long int  *donnee_li;  /* donnee entiere a renseigner*/				
-double    *donnee_d;   /* donnee reelle  a renseigner*/
-float     *donnee_f;   /* donnee reelle  a renseigner*/
-double    reel;	       /* variable de travail */	 
-long int  entier;      /* variable de travail */
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-/*CD initialisations */
-indic_mot_cle = CAI_NON_TROUVE;
-num_mot_cle=0;
-i=0;
-j=0;
-ad_donnee=0;
-
-cr=CAI_OK;
-don_lue=NULL;
-nb_lig_lu=0;
-nb_col_lu=0;
-type_lu= CAI_INCONNU;
-taille_cell_lu=0;
-/*CD on verifie que le type fait partie des types reconnus */
-if ( *type != CAI_ENTIER4 && *type != CAI_REEL4 && *type != CAI_REEL8 && *type  != CAI_ASCII && *type !=CAI_BLOC)
-	{
-	cr = CAI_ERR_TYP;
-	sprintf(CAI_ERREUR,"type :%d non reconnu ( 1:CAI_ENTIER4 2:CAI_REEL4 3:CAI_REEL8 4:CAI_ASCII 5:CAI_BLOC)",*type);
-	goto ERREUR;
-	} 
-/*CD on verifie au prealable que le fichier est effectivement ouvert */
-/*CD SINON on sort en erreur */
-if ( fd ==NULL ) 
-
-	{
-	cr = CAI_ERREUR_OUV;
-	sprintf(CAI_ERREUR,"Erreur ouverture du fichier de donnees auxiliaires");
-	goto ERREUR;
-	}
-
-/*---------------------------------------------------------------------------*/
-/*CD SI le dernier mot cle lu dans CAI_FILE_DA n'existe pas ou  n'est pas egal au mot cle recherche */ 
-/*---------------------------------------------------------------------------*/
-if (fd->ad_dern_mot_cle == -1 || strncmp(mot_cle,fd->dernier_mot_cle,CAI_TAILLE_MAX_CLEDA) != 0 )
-	{ 
-/*CD SI la liste des mots cles est en memoire 			*/
-	if ( fd->nb_mot_cle != -1 ) 
-		{
-/*---------------------------------------------------------------------------*/
-/*CD ALORS on scrute cette liste jusqu'a trouver le mot cle */
-/*---------------------------------------------------------------------------*/
-		while (i< fd->nb_mot_cle && indic_mot_cle == CAI_NON_TROUVE )
-			{
-			if ( strncmp(mot_cle,(char *)(fd->liste_mot_cle +i),CAI_TAILLE_MAX_CLEDA) == 0 )
-				{
-				indic_mot_cle = CAI_TROUVE;
-				num_mot_cle    = i;
-/*CD	   on recupere alors le pointeur sur la zone fichier apres ce mot cle */
-				ad_donnee=*(fd->ad_donnee + i);
-				strcpy(mot_cle_lu,(char *)(fd->liste_mot_cle +i));
-				ad_mot_cle=*(fd->ad_mot_cle + i);
-				}
-			i++;
-			}
-		}
-	else
-		{
-/*CD SINON	*/
-/*CD   on se positionne au debut du fichier ( adresse_deb = 0)*/
-		adresse_deb = 0;	
-/*---------------------------------------------------------------------------*/
-/*CD   on cherche le premier mot cle a partir de cette adresse (operation interne basee sur un automate) */
-/*---------------------------------------------------------------------------*/
-		cr = cai_lirecleDA(fd,     /* [E] file descriptor du fichier a lire  */
-        	      	   adresse_deb,   /* [E] adresse de debut de recherche */
-	        	   mot_cle_lu,  /* [S] mot cle suivant lu ( termine par \0)*/
-		           &ad_donnee, /* [S] adresse du premier caractere suivant le mot cle */
-		           &ad_mot_cle /* [S] adresse du premier caractere du mot cle */
- 		   	  );
-/*CD    si erreur on sort */
-		if (cr != CAI_OK && cr != CAI_EOF) {
-			goto ERREUR;
-			}	
-/*CD   si aucun mot cle trouve on sort en erreur "aucun mot cle dans le fichier" */  
-		if ( cr == CAI_EOF)
-			{
-			sprintf(CAI_ERREUR,"Erreur fichier sans mot cle( %s)",fd->nom_fichier);
-			goto ERREUR;
-			}
-/*CD   TANT QUE  mot_cle non trouve &  pas erreur */
-		while (cr == CAI_OK && indic_mot_cle == CAI_NON_TROUVE )
-			{
-/*CD   	  si le mot cle est egal au mot cle demande alors mot_cle trouve */
-			if ( strcmp(mot_cle,mot_cle_lu) == 0)
-				{
-				indic_mot_cle = CAI_TROUVE;
-				}
-			else
-				{
-				adresse_deb = ad_donnee;
-/*---------------------------------------------------------------------------*/
-/*CD      si mot_cle non trouve on cherche le mot cle suivant (operation interne basee sur un automate) */
-/*CD      cette operation necessite : un pointeur sur la zone fichier ou l'on recherche le mot cle suivant */
-/*CD      cette operation ramene : le mot cle suivant et le pointeur sur la zone fichier apres ce mot cle */
-/*---------------------------------------------------------------------------*/
-				cr = cai_lirecleDA(fd,     /* [E] file descriptor du fichier a lire  */
-        	      	   		   adresse_deb,   /* [E] adresse de debut de recherche */
-	        	   		   mot_cle_lu,  /* [S] mot cle suivant lu (termine par \0)*/
-		           		   &ad_donnee, /* [S] adresse du premier caractere suivant le mot cle */
-		           		   &ad_mot_cle/* [S] adresse du premier caractere du mot cle */
- 		   	  		   );
-				}
-/*CD    FIN TANT QUE pas erreur & mot_cle non trouve */
-			}
-/*CD	FIN SI LISTE MOT CLE presente en memoire*/	
-		}
-/*CD FIN SI le dernier mot cle lu dans CAI_FILE_DA n'existe pas ou  n'est pas egal au mot cle recherche */ 
-	if (cr != CAI_OK && cr != CAI_EOF) 
-		{
-		goto ERREUR;
-		}
-/*CD 	SI fin de fichier on sort en erreur "mot cle non present */
-	if ( indic_mot_cle == CAI_NON_TROUVE ) 
-		{
-		sprintf(CAI_ERREUR,"Mot cle :%s non trouve dans le fichier :%s",mot_cle,fd->nom_fichier);
-		goto ERREUR;
-		}
-/*CD on sauvegarde alors dans la structure fd les info sur le dernier mot cle */
-	strcpy(fd->dernier_mot_cle,mot_cle_lu);
-	fd->ad_dern_mot_cle = ad_mot_cle;
-	fd->ad_dern_donnee  = ad_donnee;
-	}
-
-/*CD SINON	*/
-else
-	{
-	indic_mot_cle = CAI_TROUVE;
-	ad_donnee = fd->ad_dern_donnee;	
-	ad_mot_cle= fd ->ad_dern_mot_cle;
-	strcpy(mot_cle_lu,fd->dernier_mot_cle);
-	}
-
-
-/*---------------------------------------------------------------------------------------*/
-/*CD a partir du mot cle trouve on analyse syntaxiquement la ligne jusqu'au prochain mot cle */
-/*CD (operation interne effectuant le decodage et donnant : le type de donnee (entier ou reel ou CAI_ASCII),*/
-/*CD le nombres de lignes */
-/*CD le nombre de colonnes , la taille maxi d'un element , un pointeur sur le tableau lu */
-/*CD ( ce tableau a ete alloue dynamiquement par cette operation) 	       		 */
-/*---------------------------------------------------------------------------------------*/
-cr=cai_liredonneeDA(
-			fd,         /* [E] file descriptor du fichier a lire  */
-        	      	ad_donnee,  /* [E] adresse de debut de recherche */
-	        	&don_lue,    /* [S] donnee lue */
-			&type_lu,    /* [S] type de la donnee lue (CAI_ENTIER4,CAI_REEL8,CAI_ASCII,CAI_BLOC)*/
-			&nb_lig_lu,  /* [S] nombre de lignes du tableau lu  */
-			&nb_col_lu,  /* [S] nombre de colonnes du tableau lu  */  
-		        &taille_cell_lu/* [S] taille maxi en octet d'un element du tableau lu ( significatif
-					 pourla donnee CAI_ASCII )*/   
-		      );
-/*CD si erreur de decodage on sort en erreur */
-if (cr != CAI_OK ) {
-	if (cr == CAI_EOF){
-		sprintf(CAI_ERREUR,"erreur fichier de DA incomplet (mot cle %s)",mot_cle);
-		}
-	goto ERREUR;
-	}
-
-
-/*---------------------------------------------------------------------------------------*/
-/*CD on effectue les controles de coherence : */
-/*CD type_lu = type  ( entier reel ou CAI_ASCII)*/
-/*CD nblig_lu = nblig */
-/*CD nbcol_lu = nb_col */
-/*CD taille_cell_lu <= taille_cell */
-/*CD SI difference on sort en erreur "incoherence entre " */  
-/*CD NB : une lecture en reel4 de reel ecrit en reel8 n'est pas une erreur */
-/*---------------------------------------------------------------------------------------*/
-
-
-/*---------------------------------------------------------------------------------------*/
-/* donnee de type entiere */
-/*---------------------------------------------------------------------------------------*/
-if ( type_lu == CAI_ENTIER4) 
-	{
- 	if (*type != CAI_ENTIER4)
-		{
-		cr = CAI_KO;
-		sprintf(CAI_ERREUR,"type lu (%d) incoherent avec le type specifie ( %d) ",type_lu,*type);
-		goto ERREUR;
-		}
-	if (nb_lig_lu != *nb_lig || nb_col_lu != *nb_col)
-		{
-		cr = CAI_KO;
-		sprintf(CAI_ERREUR,"dim lue incoherente avec la dimension specifiee");
-		goto ERREUR;
-		} 
-/*CD le pointeur sur le tableau alloue par l'appelant est caste au type donne par l'appelant  */
-/*CD le pointeur sur le tableau alloue par l'operation de decodage est caste au type_lu */
-	don_ent   = (long int *)don_lue;
-	donnee_li = (long int *)donnee;
-	i=0;
-/*CD TANT QUE lig <= nblig_lu et non erreur */ 
-	while ( i < nb_lig_lu && cr ==CAI_OK)
-		{
-		j=0;
-/*CD 	TANT QUE col <= nbcol_lu et non erreur */ 
-		while ( j < nb_col_lu && cr ==CAI_OK)
-			{
-			entier = *(don_ent + i*nb_col_lu + j);
-			*(donnee_li +i*nb_col_lu + j) = entier;
-			j++;			
-			}
-/*CD 	FIN TANT QUE col <= nbcol_lu et non erreur */ 
-		i++;
-		}
-/*CD 	FIN TANT QUE lig <= nblig_lu et non erreur */ 
-	if (cr != CAI_OK )
-		{
-		goto ERREUR;
-		}
-	}
-
-/*---------------------------------------------------------------------------------------*/
-/* donnee de type reelle */
-/*---------------------------------------------------------------------------------------*/
-if ( type_lu == CAI_REEL8) 
-	{
-	if (*type != CAI_REEL4 && *type != CAI_REEL8)
-		{
-		cr=CAI_KO;
-		sprintf(CAI_ERREUR,"type lu (%d) incoherent avec le type specifie ( %d)",type_lu,*type);
-		goto ERREUR;
-		}
-	if (nb_lig_lu != *nb_lig || nb_col_lu != *nb_col)
-		{
-		cr=CAI_KO;
-		sprintf(CAI_ERREUR,"dim lue incoherente avec la dimension specifiee ");
-		goto ERREUR;
-		} 
-/*CD le pointeur sur le tableau alloue par l'appelant est caste au type donne par l'appelant  */
-/*CD le pointeur sur le tableau alloue par l'operation de decodage est caste au type_lu */
-	don_ree = (double *)don_lue;
-	donnee_f = (float *)donnee;
-	donnee_d = (double *)donnee;
-	i=0;
-/*CD TANT QUE lig <= nblig_lu et non erreur */ 
-	while ( i < nb_lig_lu)
-		{
-		j=0;
-/*CD 	TANT QUE col <= nbcol_lu et non erreur */ 
-		while ( j < nb_col_lu)
-			{
-			reel = *(don_ree + i*nb_col_lu + j);
-			if (*type == CAI_REEL4)
-				{
-				*(donnee_f + i*nb_col_lu + j) = reel;
-				}
-			else
-				{
-				*(donnee_d + i*nb_col_lu + j) = reel;
-				}
-			j++;			
-			}
-/*CD 	FIN TANT QUE col <= nbcol_lu et non erreur */
-		i++; 
-		}
-/*CD 	FIN TANT QUE lig <= nblig_lu et non erreur */ 
-	}
-
-
-/*---------------------------------------------------------------------------------------*/
-/* donnee de type CAI_ASCII */
-/*---------------------------------------------------------------------------------------*/
-if (type_lu == CAI_ASCII )
-	{
-	if (*type != CAI_ASCII )
-		{
-		cr=CAI_KO;
-		sprintf(CAI_ERREUR,"type lu (%d) incoherent avec le type specifie ( %d)",type_lu,*type);
-		goto ERREUR;
-		}
-	if (nb_lig_lu != *nb_lig || nb_col_lu != *nb_col)
-		{
-		cr=CAI_KO;
-		sprintf(CAI_ERREUR,"dim lue incoherente avec la dimension specifiee ");
-		goto ERREUR;
-		} 
-	if (taille_cell_lu > *taille_cell)
-		{
-		cr=CAI_KO;
-		sprintf(CAI_ERREUR,"longueur max des donnees CAI_ASCII lues (%d) incoherente avec la taille specifie (%d)"
-			,taille_cell_lu,*taille_cell);
-		goto ERREUR;
-		}
-/*CD le pointeur sur le tableau alloue par l'appelant est caste au type donne par l'appelant  */
-/*CD le pointeur sur le tableau alloue par l'operation de decodage est caste au type_lu */
-	don_asc = (char *)don_lue;
-	donnee_a = (char *)donnee;
-	i=0;
-	j=0;
-/*CD TANT QUE lig <= nblig_lu et non erreur */ 
-	while ( i < nb_lig_lu)
-		{
-		j=0;
-/*CD 	TANT QUE col <= nbcol_lu et non erreur */ 
-		while ( j < nb_col_lu)
-			{
-			strcpy(donnee_a + (i*nb_col_lu + j)* (*taille_cell),don_asc + (i*nb_col_lu + j)*CAI_TAILLE_MAX_ASCII);
-			j++;
-			}
-/*CD 	FIN TANT QUE col <= nbcol_lu et non erreur */
-		i++;
-		}
-/*CD 	FIN TANT QUE lig <= nblig_lu et non erreur */ 
-	}
-/*CD liberation place memoire alloue par l'operation interne precedente  */
-if (don_lue != NULL)
-	{
-	free(don_lue);
-	don_lue=NULL;
-	}
-/*---------------------------------------------------------------------------------------*/
-/* donnee de type CAI_BLOC */
-/*---------------------------------------------------------------------------------------*/
-if (type_lu == CAI_BLOC)
-	{
-	if (*type != CAI_BLOC )
-		{
-		sprintf(CAI_ERREUR,"type lu (%d) incoherent avec le type specifie ( %d)",type_lu,*type);
-		goto ERREUR;
-		}
-	}
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas nominal  				     */
-/*---------------------------------------------------------------------------*/
-return(CAI_OK);
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas d'erreur 				     */
-/*---------------------------------------------------------------------------*/
-ERREUR:
-/*CD liberation place memoire alloue par l'operation interne precedente  */
-if (don_lue != NULL)
-	{
-	free(don_lue);
-	don_lue=NULL;
-	}
-return(cr);	  
-/*---------------------------------------------------------------------------*/
-/*		 	FIN DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-
-/********************************************************************************/
-/*                                                                           	*/
-/* OPERATION: cai_listeDA                                                    	*/
-/*                                                                           	*/
-/* ROLE:  Cette operation recherche la liste des mots cles presents dans un 	*/
-/*	  fichier de Donnees Auxiliaires                                        */
-/*                                                                           	*/
-/* ATTENTION : cette fonction s'alloue de l'espace memoire qu'il conviendra de 	*/
-/* liberer a la fin du traitement                                               */
-/*                                                                           	*/
-/* CONTEXTE D'APPEL:                                                         	*/
-/*                                                                          	*/
-/* VERSION:                                                                  	*/
-/* CODE RETOUR : CAI_OK ou CAI_KO							*/
-/*	" taille d'un mot cle lu superieure a la limite "			*/
-/*	" erreur a la lecture du fichier de donnees auxiliaires "		*/
-/********************************************************************************/
-CAI_OK_KO cai_listeDA(CAI_FILE_DA *fd)
-	 
-{
-long	adr_deb;	/* adresse dans le fichier de DA */
-long	ad_suiv;	/* adresse du premier caractere suivant un mot cle */
-long	ad_deb_mcc;	/* adresse du premier caractere des donnees du mot cle */
-long	*ad;		/* adresse pour copie */
-int	nb_mot_cle;	/* nombre de mots cle trouves dans le fichier */
-size_t	taille;		/* taille du buffer a allouer */
-CAI_OK_KO	retour;		/* code retour appel fonctions */
-CAI_MOT_CLE mot_cle;	/* mot cle trouve*/
-char 	*adr_copie;	/* adresse pour copie de mots cle */
-int	nb_bloc;	/* nombre de realloc realises +1 */
-off_t   offset;	  	
-off_t   offreel;
-
-
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-/*------------------------------------------------------------------------------*/
-/*CD initialisation a zero du nombre de mots cle trouves 		     	*/
-/*------------------------------------------------------------------------------*/
-nb_mot_cle = 0;
-nb_bloc = 1;
-
-/*------------------------------------------------------------------------------*/
-/*CD on verifie au prealable que le fichier est effectivement ouvert	 	*/
-/*CD SINON on sort en erreur 							*/
-/*------------------------------------------------------------------------------*/
-if ( fd == NULL ) 
-	{
-	retour = CAI_ERREUR_OUV;
-	sprintf(CAI_ERREUR,"Dans listeDA, fichier de donnees auxiliaires non ouvert");
-	goto ERREUR;
-	}
-
-/*------------------------------------------------------------------------------*/
-/*CD Positionnement en debut de fichier						*/
-/*------------------------------------------------------------------------------*/
-/*CD on se positionne sur le debut du fichier ( rewind ) 		     */
-offset=0;
-offreel=lseek(fd->descr,offset,SEEK_SET);
-
-
-/*------------------------------------------------------------------------------*/
-/*CD Allocation d'un espace memoire contenant la liste des mots cles trouves 	*/
-/*CD Allocation d'espaces memoire contenant les adresses des mots cles		*/
-/*CD et les adresses des donnees associees a chaque mot cle 			*/
-/*CD (il faut essayer d'allouer un maximum de place representative afin 	*/
-/*CD d'eviter un trop grand nombre de realloc)					*/
-/*------------------------------------------------------------------------------*/
-taille = CAI_TAILLE_MAX_CLEDA * CAI_NB_MAX_CLE;
-fd->liste_mot_cle = (CAI_MOT_CLE *)malloc (taille);
-if (fd->liste_mot_cle == NULL) 
-	{
-	retour = CAI_ERR_ALLOC;
-	sprintf (CAI_ERREUR," erreur allocation memoire pour liste mots cle ");
-	goto ERREUR;
-	}
-
-taille = CAI_NB_MAX_CLE * sizeof(int);
-fd->ad_mot_cle = (long *)malloc (taille);
-if (fd->ad_mot_cle == NULL) 
-	{
-	retour = CAI_ERR_ALLOC;
-	sprintf (CAI_ERREUR," erreur allocation memoire pour adresse mots cle ");
-	goto ERREUR;
-	}
-
-taille = CAI_NB_MAX_CLE * sizeof(int);
-fd->ad_donnee = (long *)malloc (taille);
-if (fd->ad_donnee == NULL) 
-	{
-	retour = CAI_ERR_ALLOC;
-	sprintf (CAI_ERREUR," erreur allocation memoire pour adresse donnees d'un mots cle ");
-	goto ERREUR;
-	}
-
-/*------------------------------------------------------------------------------*/
-/*CD Adr_deb = adresse debut de fichier						*/
-/*------------------------------------------------------------------------------*/
-adr_deb = 0;
-
-/*------------------------------------------------------------------------------*/
-/*CD Recherche du premier mot cle du fichier(cai_lirecleDA)			*/
-/*CD Si erreur de recherche, sortie en erreur					*/
-/*------------------------------------------------------------------------------*/
-retour = cai_lirecleDA (fd, 		/* structure du fichier a lire */
-			adr_deb, 	/* adresse du debut de recherche dans le fichier */
-			mot_cle,	/* mot cle trouve */
-			&ad_suiv, 	/* adresse dans le fichier du premier caractere suivant le mot cle */
-			&ad_deb_mcc) ;	/* adresse dans le fichier du premier caractere du mot cle */
-
-if (retour != CAI_OK && retour != CAI_EOF) 
-	{
-	retour = CAI_ERREUR_RECHERCHE_MOT;
-	sprintf (CAI_ERREUR," erreur recherche du premier mot cle ");
-	goto ERREUR;
-	}
-
-/*------------------------------------------------------------------------------*/
-/*CD TANT QUE il existe des mots cles dans le fichier				*/
-/*------------------------------------------------------------------------------*/
-while (retour != CAI_EOF)
-	{
-/*------------------------------------------------------------------------------*/
-/*CD 	si la liste des mots cle est saturee alors reallocation du double de 	*/
-/*CD	   place pour les mots cle et les adresse de ces mots			*/
-/*------------------------------------------------------------------------------*/
-	if (nb_mot_cle == (CAI_NB_MAX_CLE * nb_bloc))
-		{
-		nb_bloc = nb_bloc + 1;
-
-		taille = CAI_TAILLE_MAX_CLEDA * CAI_NB_MAX_CLE * nb_bloc;
-		fd->liste_mot_cle = (CAI_MOT_CLE *)realloc (fd->liste_mot_cle, taille);
-		if (fd->liste_mot_cle == NULL) 
-			{
-			retour = CAI_ERR_ALLOC;
-			sprintf (CAI_ERREUR," erreur re-allocation memoire pour liste mots cle - bloc %d ", nb_bloc);
-			goto ERREUR;
-			}
-
-		taille = CAI_NB_MAX_CLE * sizeof(int) * nb_bloc;
-		fd->ad_mot_cle = (long *)realloc (fd->ad_mot_cle, taille);
-		if (fd->ad_mot_cle == NULL) 
-			{
-			retour = CAI_ERR_ALLOC;
-			sprintf (CAI_ERREUR," erreur re-allocation memoire pour adresse mots cle - bloc %d ", nb_bloc);
-			goto ERREUR;
-			}
-
-		taille = CAI_NB_MAX_CLE * sizeof(int) * nb_bloc;
-		fd->ad_donnee = (long *)realloc (fd->ad_donnee, taille);
-		if (fd->ad_donnee == NULL) 
-			{
-			retour = CAI_ERR_ALLOC;
-			sprintf (CAI_ERREUR," erreur re-allocation memoire pour donnees d un mots cle - bloc %d", nb_bloc);
-			goto ERREUR;
-			}
-		}
-		
-/*------------------------------------------------------------------------------*/
-/*CD	sauvegarde du mot cle trouve dans liste_mot_cle				*/
-/*------------------------------------------------------------------------------*/
-	adr_copie =(char *)(fd->liste_mot_cle + nb_mot_cle);
-	strncpy (adr_copie, mot_cle, CAI_TAILLE_MAX_CLEDA);
-
-/*------------------------------------------------------------------------------*/
-/*CD	sauvegarde de l'adresse dans le fichier du mot cle trouve tab_adresse	*/
-/*CD 	et de l'adresse du premier caractere des donnees associees au mot cle	*/
-/*------------------------------------------------------------------------------*/
-	ad = (long *)(fd->ad_mot_cle + nb_mot_cle);
-	*ad = ad_deb_mcc;
-	ad = (long *)(fd->ad_donnee + nb_mot_cle);
-	*ad = ad_suiv;
-
-/*------------------------------------------------------------------------------*/
-/*CD	incrementation du nombre de mots cle trouves				*/
-/*------------------------------------------------------------------------------*/
-	nb_mot_cle = nb_mot_cle + 1;
-
-/*------------------------------------------------------------------------------*/
-/*CD	recherche du mot cle suivant dans le fichier (cai_lirecleDA)		*/
-/*------------------------------------------------------------------------------*/
-	adr_deb = ad_suiv;
-	retour = cai_lirecleDA (fd, 		/* structure du fichier a lire */
-			     	adr_deb, 	/* adresse du debut de recherche dans le fichier */
-			        mot_cle,	/* mot cle trouve */
-			        &ad_suiv, 	/* adresse dans le fichier du premier caractere suivant le mot cle */
-			        &ad_deb_mcc);	/* adresse dans le fichier du premier caractere du mot cle */
-	if (retour != CAI_OK && retour != CAI_EOF) 
-		{
-		retour = CAI_ERREUR_RECHERCHE_MOT;
-		sprintf (CAI_ERREUR," erreur recherche d un mot cle ");
-		goto ERREUR;
-		}
-
-	}	/*CD FIN TANT QUE (plus de mots cle)		*/	
-
-/*------------------------------------------------------------------------------*/
-/* CD Sauvegarde du nombre de mots cle trouves					*/
-/*------------------------------------------------------------------------------*/
-fd->nb_mot_cle = nb_mot_cle;
-
-
-/*---------------------------------------------------------------------------*/
-/* Fin du traitement nominal			        		     */
-/*---------------------------------------------------------------------------*/
-retour =  CAI_OK;
-return (retour);
-
-/*---------------------------------------------------------------------------*/
-/* traitement degrade : 			        		     */
-/*---------------------------------------------------------------------------*/
-ERREUR :
-
-if (fd != NULL)
-	{
-if (fd->liste_mot_cle != NULL)
-	{
-	free(fd->liste_mot_cle);
-        fd->liste_mot_cle=NULL;
-
-	}
-if (fd->ad_mot_cle != NULL)
-	{
-	free(fd->ad_mot_cle);
-	fd->ad_mot_cle=NULL;
-
-	}
-if (fd->ad_donnee != NULL)
-	{
-	free(fd->ad_donnee);
-	fd->ad_donnee=NULL;
-        }
-
-
-	fd->nb_mot_cle = -1;
-	}
-return (retour);
-/*---------------------------------------------------------------------------*/
-/*		 	FIN DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-/********************************************************************************/
-/*                                                                           	*/
-/* OPERATION:  cai_ajoute DA                                                  	*/
-/*                                                                           	*/
-/* ROLE:  Cette operation ajoute a la fin du fichier de DA une donnee  		*/
-/*        auxiliaire								*/
-/*                                                                           	*/
-/*                                                                           	*/
-/*                                                                           	*/
-/* CONTEXTE D'APPEL:                                                         	*/
-/*	Cette operation doit etre appelee apres ouverture prealable du fichier	*/
-/*	de Donnees Auxiliaires							*/
-/*                                                                           	*/
-/* VERSION:                                                                  	*/
-/*										*/
-/* CODE RETOUR : CAI_OK ou CAI_KO						*/
-/*Si CAI_KO, l'erreur peut etre affichee via la variable globale CAI_ERREUR	*/
-/*	" fichier de donnees auxiliaires %s non ouvert "			*/
-/*	" erreur de positionnement en fin de fichier "				*/
-/*	" erreur d'ecriture dans le fichier "					*/
-/********************************************************************************/
-CAI_OK_KO cai_ajouteDA(CAI_FILE_DA *fd,char *mot_cle,
-				    CAI_TYPE type,int nb_lig,int nb_col, 	
-  	        	            long taille_cell,void *donnee)
-{
-CAI_OK_KO	retour;	/* code retour des fonctions */
-int	i;		/* indice de boucle */
-int	indic_ecrit;    /* indic ecritur DA ds fichier(=1 si ecriture = 0 sinon)*/
-char	* da_ascii;	/* buffer de la DA en ascii (sous forme 	*/
-			/* de x fois CAI_TAILLE_MAX_LIGDA caracteres)	*/
-int	indic_mot_cle; 	/* indicateur de recherche du mot cle */
-
-
-
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-  da_ascii=NULL;
-/*------------------------------------------------------------------------------*/
-/*CD on verifie au prealable que le fichier est effectivement ouvert	 	*/
-/*CD SINON on sort en erreur 							*/
-/*------------------------------------------------------------------------------*/
-
-if ( fd == NULL ) 
-	{
-	retour = CAI_ERREUR_OUV;
-	sprintf(CAI_ERREUR,"Dans ajouteDA, fichier de donnees auxiliaires non ouvert");
-	goto ERREUR;
-	}
-/*------------------------------------------------------------------------------*/
-/*CD on verifie que le type fait partie des types reconnus 			*/
-/*------------------------------------------------------------------------------*/
-
-if ( type != CAI_ENTIER4 && type != CAI_REEL4 && type != CAI_REEL8 && type  != CAI_ASCII & type !=CAI_BLOC)
-	{
-	retour = CAI_ERR_TYP;
-	sprintf(CAI_ERREUR,"type :%d non reconnu ( 1:CAI_ENTIER4 2:CAI_REEL4 3:CAI_REEL8 4:CAI_ASCII 5:CAI_BLOC )",type);
-	goto ERREUR;
-	} 
-/*------------------------------------------------------------------------------*/
-/*CD on verifie que la DA n'existe pas deja (cai_listeDA)			*/
-/*------------------------------------------------------------------------------*/
-if (fd->nb_mot_cle <= 0)
-	{
-	retour = cai_listeDA (fd);
-	if (retour != CAI_OK)  goto ERREUR;
-	}
-indic_mot_cle = CAI_NON_TROUVE;
-i = 0;
-while (i< fd->nb_mot_cle && indic_mot_cle == CAI_NON_TROUVE )
-	{
-	if ( strncmp(mot_cle,(char *)(fd->liste_mot_cle +i), CAI_TAILLE_MAX_CLEDA) == 0 )  
-		indic_mot_cle = CAI_TROUVE;
-	i = i + 1;
-	}
-
-if (indic_mot_cle == CAI_TROUVE)
-	{
-	retour = CAI_MOT_DEJA_EXISTE;
-	sprintf(CAI_ERREUR,"Dans ajouteDA, mot cle %s deja existant ",mot_cle);
-	goto ERREUR;
-	}
-
-/*------------------------------------------------------------------------------*/
-/*CD On ecrit la DA dans un buffer intermediaire et dans le fichier  		*/
-/*------------------------------------------------------------------------------*/
-
-indic_ecrit = 1;
-
-retour = cai_ecritDA_buf( 
-		   	fd,		/* [E] file descriptor du fichier de DA 	*/
-		   	mot_cle,	/* [E] mot cle associe aux donnees auxiliaires 	*/
-		   	type,		/* [E] type des donnees a ecrire		*/
-		   	nb_lig,		/* [E] nombre de lignes du tableau a ecrire	*/
-		   	nb_col,		/* [E] nombre de colonnes du tableau a ecrire	*/
-		   	taille_cell,	/* [E] taille maxi en octets d'un element	*/
-					/*     (significatif si type = ascii)		*/
-		   	donnee,		/* [E] pointeur sur la zone memoire a ecrire	*/
-		   	indic_ecrit,	/* [E] indicateur si ecriture du buffer dans 	*/
-					/*     le fichier (=1) sinon (=0)		*/
-		   	&da_ascii);	/* [S] buffer de la DA en ascii (sous forme 	*/
-					/* de x fois CAI_TAILLE_MAX_LIGDA caracteres)	*/
-
-if (retour != CAI_OK) goto ERREUR;
-
-
-/*---------------------------------------------------------------------------*/
-/* Fin du traitement nominal			        		     */
-/*---------------------------------------------------------------------------*/
-if (da_ascii != NULL)
-{
- free(da_ascii);
- }
-retour = CAI_OK;
-return (retour);
-
-/*---------------------------------------------------------------------------*/
-/* traitement degrade : 			        		     */
-/*---------------------------------------------------------------------------*/
-ERREUR :
-if (da_ascii != NULL)
-{
- free(da_ascii);
-}
-return (retour);
-
-/*---------------------------------------------------------------------------*/
-/*		 	FIN DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS INTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION: cai_lirecleDA()                                                */
-/*                                                                           */
-/* ROLE: cette operation interne recherche le mot cle suivant detecte        */
-/* apres une "adresse dans le fichier ".				     */
-/* cette operation retourne le mot cle suivant s'il existe ainsi qu'une adresse*/
-/* sur le premier caractere suivant ce mot cle                               */
-/*  NB : la notion d'adresse ici est relative au fichier :c.a.d              */
-/* 	1er octet du fichier = adresse 0                                     */
-/* 	2eme octet du fichier = adresse 1 ...                                */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL:                                                         */
-/*                                                                           */
-/* VERSION:                                                                  */
-/* CODE RETOUR : CAI_OK ou CAI_KO 					     */
-/*   " mot cle non present dans le fichier de donnees auxiliaires %s"        */
-/*   " taille du mot cle lue %s superieure a la limite %d ou egale a 0"      */ 
-/*   " erreur a la lecture du fichier de donnees auxiliaires %s"             */
-/*****************************************************************************/
-static CAI_OK_KO cai_lirecleDA(CAI_FILE_DA *fd,long  ad_deb,char * mot_cle, 
-			       long *ad_suiv,long * ad_deb_mcc)
-{
-CAI_OK_KO 	cr;	/* code retour */
-long	num;	/* numero du buffer courant */
-long 	ad_deb_buff;  /* adresse de debut du buffer */
-long     ad_deb_rel;   /* adresse de debut de recherche relative au buffer courant */
-long     ad_suivante;  /*  adresse du premier caractere suivant le mot cle courant */
-long     taille_buff_courant;  /* taille du buffer lu */
-char   *buff_courant; /* buffer courant */ 
-CAI_MOT_CLE mot_cle_courant;/* mot cle courant */
-off_t   offset;	  	
-off_t   offreel;
-long     nb_buffer;	/* nombre de buffer dans le fichier */
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-/*CD dans CAI_FILE_DA on prevoit un indicateur qui vaut -1 si aucun buffer       		*/
-/*CD n'a pas deja ete lu et qui vaut sinon le numero du buffer lu dans le fichier 	*/
-/*CD on prevoit aussi la taille du buffer lu ainsi que l'allocation statique du buffer 	*/  
-/*CD et le decalage entre 2 buffer consecutifs ( fixe a  taille_buff/2)		        */ 
-/*CD initialisations 								 	*/ 
-cr=CAI_OK;
- 
-/*---------------------------------------------------------------------------*/
-/*CD on recherche alors le nombre de buffer dans le fichier */
-/*---------------------------------------------------------------------------*/
-/*CD on se positionne sur la fin du fichier ( rewind ) 		     */
-offset=0;
-offreel=lseek(fd->descr,offset,SEEK_END);
-/*CD SI erreur on sort "erreur lors d'un lseek du fichier de DA " 	     */
-if ( offreel == -1)
-	{
-	cr=CAI_PB_LSEEK;
-	sprintf(CAI_ERREUR,"erreur lors du lseek sur le  fichier %s",fd->nom_fichier);
-	goto ERREUR;
-	}
-offreel=lseek(fd->descr,offset,SEEK_CUR);
-/*CD SI erreur on sort "erreur lors d'un lseek du fichier de DA " 	     */
-if ( offreel == -1)
-	{
-	cr=CAI_PB_LSEEK;
-	sprintf(CAI_ERREUR,"erreur lors du lseek sur le  fichier %s",fd->nom_fichier);
-	goto ERREUR;
-	}
-if ( offreel < ad_deb)
-	{
-	cr=CAI_ERR_ADRESSE;
-	sprintf(CAI_ERREUR,"erreur adresse de recherche en dehors du fichier (%d)",ad_deb);
-	goto ERREUR;
-	}
-
-nb_buffer = (offreel / (fd->taille_buffer/2) ) + 1; 
-
-/*---------------------------------------------------------------------------*/
-/*CD on commence par calculer le premier buffer a lire par : num = 2 * ad_deb/(fd->taille buffer) */
-/*---------------------------------------------------------------------------*/
-num= (ad_deb/(fd->taille_buffer/2));
-ad_deb_buff = num * (fd->taille_buffer /2);
-
-/*CD SI indicateur != num 								*/
-if ( num != fd->num_buffer)
-	{
-/*---------------------------------------------------------------------------*/
-/*CD 	lecture du buffer num a partir de l'adresse num*fd->taille_buffer/2 et de taille*/
-/*CD     fd->taille_buffer*2 (operation interne )					*/
-/*---------------------------------------------------------------------------*/
-	cr=cai_lireficDA(
-		    fd, /* [E] structure decrivant le fichier de donnees auxiliaires */
-	            ad_deb_buff,      /* [E] adresse du premier octet a lire */ 
-        	    fd->buffer    /* [E/S] buffer a remplir */
-		   );
-/*CD    SI erreur on sort 								*/
-	if (cr != CAI_OK)
-		{
-		goto ERREUR;
-		}
-/* initialisation du numero de buffer */
-	fd->num_buffer=num;
-	buff_courant = fd->buffer;
-	taille_buff_courant = fd->taille_buffer_lu;	
-	}
-else
-	{
-/*CD SINON tab = fd ->ad_buffer 							*/
-	buff_courant = fd->buffer;
-	taille_buff_courant = fd->taille_buffer_lu;	
-	}
-
-ad_deb_rel = ad_deb - ad_deb_buff;
-/*---------------------------------------------------------------------------*/
-/*CD TANT QUE mot_cle non trouve et non EOF						*/
-/*---------------------------------------------------------------------------*/
-cr=CAI_KO;
-while ( cr !=CAI_OK && taille_buff_courant > 0 && cr != CAI_EOF && cr != CAI_PAS_MC)
-	{
-/*---------------------------------------------------------------------------*/
-/*CD 	recherche du mot cle dans le buffer buff on retourne le mot  cle,sa longueur et */
-/*CD    l'adresse dans le tableau du caractere suivant le mot cle (operation interne )  */
-/*CD NB: attention au cas ou le mot cle peut etre coupe                                 */ 
-/*---------------------------------------------------------------------------*/
-	cr=cai_recherchecleDA( 
-			        taille_buff_courant,/* [E] taille du buffer a scanner en octets  */
-        	      	        buff_courant,     /* [E] buffer a scanner */
-		                ad_deb_rel,	  /* [E] adresse a partir de laquelle il faut scanner le buffer */
-	        	        mot_cle_courant,  /* [S] mot cle suivant lu */
-		                &ad_suivante	  /* [S] adresse du premier caractere suivant le mot cle */
-				);
-/*CD si erreur on sort */
-	if (cr != CAI_OK && cr != CAI_EOF && cr != CAI_PAS_MC)
-		{
-		goto ERREUR;
-		}
-
-/*CD  Si mot_cle non trouve et non EOF  on incremente le numero de buffer 		*/
-	if ( (cr == CAI_EOF||cr == CAI_PAS_MC) && num+1< nb_buffer)
-		{
-/* calcul de l'adresse de debut de recherche */
-		ad_deb_rel=0;
-/*---------------------------------------------------------------------------*/
-/*CD 		lecture du buffer num a partir de l'adresse num*fd->taille_buffer/2 et de taille */
-/*CD     	fd->taille_buffer*2 (operation interne )				*/
-/*---------------------------------------------------------------------------*/
-		num=num+1;
-		ad_deb_buff = num * (fd->taille_buffer /2);
-		cr=cai_lireficDA(
-		  	  fd, /* [E] structure decrivant le fichier de donnees auxiliaires */
-	          	  ad_deb_buff,      /* [E] adresse du premier octet a lire */ 
-        	  	  fd->buffer    /* [E/S] buffer a remplir */
-		  	 );
-/*CD    SI erreur on sort 								*/
-		if (cr != CAI_OK)
-			{
-			goto ERREUR;
-			}
-/* initialisation du numero de buffer */
-		fd->num_buffer=num;
-/*CD       		on met a jour les variables locales  				*/
-		buff_courant = fd->buffer;
-		taille_buff_courant = fd->taille_buffer_lu;
-		cr=CAI_KO;
-		} 		
-	}
-/*---------------------------------------------------------------------------*/
-/*CD FIN TANT QUE mot_cle non trouve 							*/
-/*---------------------------------------------------------------------------*/
-
-/*---------------------------------------------------------------------------*/
-/*CD SI mot_cle trouve 									*/
-/*---------------------------------------------------------------------------*/
-if (cr == CAI_OK)
-	{
-/*CD	le mot cle est recopie dans l'argument de sortie				*/
-	strcpy(mot_cle,mot_cle_courant);
-/*CD	 l'adresse dans le tableau du caractere suivant le mot cle est convertie en     */
-/*CD 	 adresse absolue dans le fichier ad_suiv = num*fd->taille_buff/2 + (ad_suiv-ad_deb)*/
-	*ad_suiv = (num * fd->taille_buffer/2) + ad_suivante;
-/*CD	 l'adresse dans le tableau du premier caractere du  mot cle est convertie en    */
-/*CD 	 adresse absolue dans le fichier ad_deb_mc = ad_suiv -long 			*/
-	*ad_deb_mcc=*ad_suiv -strlen(mot_cle) - 2;
-	}
-/*---------------------------------------------------------------------------*/
-/*CD SI EOF plus de mot cle  			*/
-/*---------------------------------------------------------------------------*/
-if (cr == CAI_PAS_MC) 
-	{
-	goto ERREUR;
-	}
-if (taille_buff_courant ==0 || cr == CAI_EOF)
-	{
-	cr=CAI_EOF;
-	goto ERREUR;
-	}
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas nominal  				     */
-/*---------------------------------------------------------------------------*/
-return(CAI_OK);
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas d'erreur 				     */
-/*---------------------------------------------------------------------------*/
-ERREUR:
-return(cr);	
-/*---------------------------------------------------------------------------*/
-/*		 	FIN DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION: cai_liredonneeDA                                               */
-/*                                                                           */
-/* ROLE: Cette operation interne analyse syntaxiquement les donnees stockees */
-/* apres un mot cle jusqu'au prochain mot_cle du fichier ou EOF.	     */
-/* Elle permet donc de determiner le type , la taille  de la donnee .        */
-/*       ( ENTIER REEL OU CAI_ASCII)            ( 2 dim maxi )		     */
-/* Elle s'alloue de plus la place necessaire au stockage de cette donnees.   */ 
-/* pour les donnees CAI_ASCII , le stockage se fait de maniere contigue en   */
-/* memoire dans un tableau de cellules de taille fixe (taille_max).          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL:                                                         */
-/*                                                                           */
-/* VERSION:                                                                  */
-/* CODE RETOUR : CAI_OK ou CAI_KO 					     */
-/*   " erreur a la lecture du fichier de donnees auxiliaires %s"             */
-/*   " parenthese ouvrante non detectee (mot cle %s )                        */ 
-/*   " parenthese fermante  non detectee (mot cle %s )                       */
-/*   " nombre de niveaux de parentheses superieur a 2 ( mot cle %s )         */ 	
-/*   " % dimension du tableau non constante (mot cle %s)                     */
-/*   " % dimension du tableau = 0     (mot cle %s)                           */
-/*   " type de la donnee lue %s non reconnue (mot cle %s)                    */
-/*   " erreur lors du decodage de la donnee lue %s" (mot cle %s)             */
-/*****************************************************************************/
-static CAI_OK_KO cai_liredonneeDA(CAI_FILE_DA *fd,long ad_deb, void **don_lue, 
-				  CAI_TYPE *type_lu,int *nb_lig_lu, 
-  			          int *nb_col_lu, long *taille_cell_lu )
-{
-CAI_OK_KO 	cr;		/* code retour */
-long	num;		/* numero du buffer courant */
-long 	ad_deb_buff;    /* adresse de debut du buffer */
-long     ad_deb_rel;     /* adresse de debut de recherche relative au buffer courant */
-long     taille_buff_courant;  /* taille du buffer lu */
-char   *buff_courant;   /* buffer courant */ 
-off_t   offset;	  	
-off_t   offreel;
-long     nb_buffer;	/* nombre de buffer dans le fichier */
-int     nb_lig;         /* nombre de lignes */
-int     nb_elt;		/* nombre d'elements */
-long  	taille_maxi;	/* taille maxi d'une donnee ascii */
-CAI_ETAT1   etat1;		/* etat de l'automate de decodage */
-CAI_TYPE    type;		/* type de la donnee */
-int	nb_elt_alloues;	/* nombre d'elements alloues */
-long	ad_fin_decodage; /* adresse de fin du decodage effectif du buffer */
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-/* dans CAI_FILE_DA on prevoit un indicateur qui vaut zero si aucun buffer       */
-/* n'a pas deja ete lu et qui vaut sinon le numero du buffer lu dans le fichier 	*/
-/* on prevoit aussi la taille du buffer lu ainsi que l'allocation statique du buffer 	*/  
-/* et le decalage entre 2 buffer consecutifs ( fixe a  taille_buff/2)		*/ 
-/*CD initialisations 								 	*/ 
-cr=CAI_OK;
-nb_lig = 1;
-nb_elt = 0;
-taille_maxi = 0;
-etat1  = CAI_DEBUTDEC; 
-type=CAI_INCONNU; 
-nb_elt_alloues=0;
-
-/*CD on recherche alors le nombre de buffer dans le fichier */
-/*CD on se positionne sur la fin du fichier ( rewind ) 		     */
-offset=0;
-offreel=lseek(fd->descr,offset,SEEK_END);
-/*CD SI erreur on sort "erreur lors d'un lseek du fichier de DA " 	     */
-if ( offreel == -1)
-	{
-	cr=CAI_PB_LSEEK;
-	sprintf(CAI_ERREUR,"erreur lors du lseek sur le  fichier %s",fd->nom_fichier);
-	goto ERREUR;
-	}
-offreel=lseek(fd->descr,offset,SEEK_CUR);
-/*CD SI erreur on sort "erreur lors d'un lseek du fichier de DA " 	     */
-if ( offreel == -1)
-	{
-	cr=CAI_PB_LSEEK;
-	sprintf(CAI_ERREUR,"erreur lors du lseek sur le  fichier %s",fd->nom_fichier);
-	goto ERREUR;
-
-	}
-if ( offreel <= ad_deb)
-	{
-	cr=CAI_ERR_ADRESSE;
-	sprintf(CAI_ERREUR,"erreur adresse de recherche en dehors du fichier (%d)",ad_deb);
-	goto ERREUR;
-	}
-
-nb_buffer = (offreel / (fd->taille_buffer/2) ) + 1; 
-
-/*CD on commence par calculer le premier buffer a lire par : num = 2 * ad_deb/(fd->taille buffer) */
-num= (ad_deb/(fd->taille_buffer/2));
-ad_deb_buff = num * (fd->taille_buffer /2);
-
-/*CD SI indicateur != num 								*/
-if ( num != fd->num_buffer)
-	{
-/*CD 	lecture du buffer num a partir de l'adresse num*fd->taille_buffer/2 et de taille*/
-/*CD     fd->taille_buffer*2 (operation interne )					*/
-	cr=cai_lireficDA(
-		    fd, /* [E] structure decrivant le fichier de donnees auxiliaires */
-	            ad_deb_buff,      /* [E] adresse du premier octet a lire */ 
-        	    fd->buffer    /* [E/S] buffer a remplir */
-		   );
-/*CD    SI erreur on sort 								*/
-	if (cr != CAI_OK)
-		{
-		goto ERREUR;
-		}
-/* initialisation du numero de buffer */
-	fd->num_buffer=num;
-	buff_courant = fd->buffer;
-	taille_buff_courant = fd->taille_buffer_lu;	
-	}
-else
-	{
-/*CD SINON tab = fd ->ad_buffer 							*/
-	buff_courant = fd->buffer;
-	taille_buff_courant = fd->taille_buffer_lu;	
-	}
-
-/*CD	calcul de l'adresse relative du debut de la recherche dans le buffer            */
-/*CD ad_deb_buff = ad_deb - num* fd->taille buffer/2             			*/
-ad_deb_rel = ad_deb - ad_deb_buff;
-
-
-/*CD TANT QUE statut <> lu et non EOF         					*/
-while ( etat1 != CAI_FINDEC && cr != CAI_EOF && taille_buff_courant > 0)
-	{
-/*CD 	lecture de la donnee  dans le buffer buff on retourne le tableau des donnees qui*/
-/*CD    ont ete lues (tableau eventuellement incomplet) , la taille du tableau lu       */
-/*CD	, le type , la dimension1 , le nb elt , la taille maxi , si incomplet le        */
-/*CD    statut de l'automate est retourne (operation interne)			        */ 
-/*CD    NB: attention au cas ou la donnee peut etre coupe                               */ 
-	cr=cai_decodedonDA(
-			   taille_buff_courant,   /* [E] taille du buffer a scanner en octets  */
-        	      	   buff_courant,          /* [E] buffer a scanner */
-		           ad_deb_rel,	          /* [E] adresse a partir de laquelle il faut scanner le buffer */
-			   &type,      	          /* [E/S] type de la donnee lue (=CAI_INCONNU lors du premier appel) */
-						  /* CAI_ENTIER4 CAI_REEL8 CAI_ASCII EN SORTIE */
-			   &nb_lig,    	/* [E/S] nombre de lignes du tableau lu   ( = 0 lors du premier appel) */
-			   &nb_elt,     /* [E/S] nombre d'elements du tableau lu  ( = 0 lors du premier appel) */
-			   &nb_elt_alloues,     /* [E/S] nombre d'elements du tableau lu ( = 0 lors du premier appel)*/
-		           &taille_maxi,/*[E/S] taill max en octet d'un elt du tab lu (=0 lors du premier appel*/
-					       /* significatif exclusivement pour des donnees CAI_ASCII */	
-	        	   don_lue,      /* [E/S] donnee lue */
-			   &etat1,        /* [E/S] etat de l'auto ( = DEBUT_DECODAGE lors du premier appel )*/
-		           &ad_fin_decodage     /* [E/S] adresse de fin du decodage effectif du  buffer */
-		     );
-	
-	
-/*CD si erreur on sort */
-	if (cr != CAI_OK && cr != CAI_EOF)
-		{
-		goto ERREUR;
-		}
-
-/*CD  Si mot_cle non trouve et non EOF  on incremente le numero de buffer 		*/
-	if ( cr == CAI_EOF && num+1< nb_buffer)
-		{
-/*---------------------------------------------------------------------------*/
-/*CD 		lecture du buffer num a partir de l'adresse num*fd->taille_buffer/2 et de taille */
-/*CD     	fd->taille_buffer*2 (operation interne )				*/
-/*---------------------------------------------------------------------------*/
-		num=num+1;
-		ad_deb_buff = num * (fd->taille_buffer /2);
-		cr=cai_lireficDA(
-		  	  fd, /* [E] structure decrivant le fichier de donnees auxiliaires */
-	          	  ad_deb_buff,      /* [E] adresse du premier octet a lire */ 
-        	  	  fd->buffer    /* [E/S] buffer a remplir */
-		  	 );
-/*CD    SI erreur on sort 								*/
-		if (cr != CAI_OK)
-			{
-			goto ERREUR;
-			}
-/* initialisation du numero de buffer */
-		fd->num_buffer=num;
-/*CD       		on met a jour les variables locales  				*/
-		buff_courant = fd->buffer;
-		taille_buff_courant = fd->taille_buffer_lu;
-/*CD		calcul de l'adresse relative du debut de la recherche dans le buffer    */
-/*CD 		ad_deb_buff = ad_deb_buff(donnee par l'operation precedente) -          */
-/*CD				fd->taille buffer/2  ( decalage entre 2 buffers)	*/
-		ad_deb_rel = ad_fin_decodage - (fd->taille_buffer/2);			
-		} 		
-	}
-/*CD FIN TANT QUE statut <> lu et non EOF 						*/
-
-/*CD	si statut <> lu et EOF on sort en erreur "erreur fichier de DA incomplet (mot cle %s) */
-if (  etat1 != CAI_FINDEC && etat1 != CAI_DEBUTDEC && (cr == CAI_EOF || taille_buff_courant == 0) )
-	{
-	cr == CAI_EOF;
-	goto ERREUR;
-	}
-else
-	{
-	if (etat1 == CAI_DEBUTDEC && (cr == CAI_EOF || taille_buff_courant == 0) )
-		{
-		type=CAI_BLOC;
-		}
-	}
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas nominal  				     */
-/*---------------------------------------------------------------------------*/
-*nb_lig_lu=nb_lig;
-*nb_col_lu= nb_elt/nb_lig;
-*type_lu = type;
-*taille_cell_lu=taille_maxi;
-return(CAI_OK);
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas d'erreur 				     */
-/*---------------------------------------------------------------------------*/
-ERREUR:
-*nb_lig_lu=nb_lig;
-*nb_col_lu= nb_elt/nb_lig;
-*type_lu = type;
-*taille_cell_lu=taille_maxi;
-return(cr);	
-/*---------------------------------------------------------------------------*/
-/*		 	FIN DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION: cai_deplaceficDA                                               */
-/*                                                                           */
-/* ROLE: Cette operation interne cree un trou ou compacte un fichier de DA.  */
-/*	precedenment ouvert en lecture ecriture . 			     */
-/*	ex1 : avant [+++++++++++++++++++++++++++]			     */
-/*	                         |--> deplacement			     */
-/*				 V					     */ 		
-/*                             ad_deb                                        */
-/*	      apres [+++++++++++++   ++++++++++++++]			     */
-/*	                         |--> deplacement			     */
-/*				 V					     */ 		
-/*                             ad_deb                                        */
-/*	ex2 : avant [+++++++++++++++++++++++++++]			     */
-/*	           deplacement<--|					     */
-/*				 V					     */ 		
-/*                             ad_deb                                        */
-/*	      apres [++++++++++++++++++++++++]				     */
-/*	                      |				     	   	     */
-/*			      V						     */ 		
-/*                             ad_deb                                        */
-/* NB: on lit et on ecrit des buffers de taille fd->taille_buffer	     */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL:                                                         */
-/*                                                                           */
-/* VERSION:                                                                  */
-/*****************************************************************************/
-static CAI_OK_KO cai_deplaceficDA(CAI_FILE_DA *fd ,long debut,long deplacement)
-
-{
-CAI_OK_KO fin_fichier_avant_transfert;	/* fin fichier origine */
-long nb_octets_a_transferer;		/* nombre total d'octets a transferer */
-long nb_octets_transferes;		/* nombre total d'octets transferes */
-long nb_octets_a_lire;			/* longueur courante du buffer a lire */
-long nb_octets_lus;			/* longueur du buffer lu */
-long adresse_debut_buffer;		/* adresse debut courante a lire */
-CAI_OK_KO retour; 
-off_t cr; /* code retour des fonctions appelees */
-long   cr2;
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-retour =lseek(fd->descr,0L,SEEK_END);
-if ( retour == -1) 
-	{
-	 sprintf(CAI_ERREUR,"erreur lors d'un lseek sur le fichier de DA");
-	 retour=CAI_PB_LSEEK ;
-	 goto ERREUR; /* pb lseek */
-	}
-fin_fichier_avant_transfert=retour;
-if ( debut < 0) {
-	 sprintf(CAI_ERREUR,"erreur debut de la zone a deplacer negative (%d)",debut);
-	 retour=CAI_DEB_NEG;
-	 goto ERREUR; /* debut negatif */
-	}
-if ( debut > fin_fichier_avant_transfert) {
-	 sprintf(CAI_ERREUR,"erreur debut de la zone a deplacer en dehors du fichier ",debut);
-	 retour=CAI_FIN_DEP;
-	 goto ERREUR; /* pb debut en dehors du fichier */
-	}
-if ( debut + deplacement < 0) {
-	 sprintf(CAI_ERREUR,"pb de tassement: deplacement de la zone impossible ");
-	 retour=CAI_ECRASEMENT;
-	 goto ERREUR; /* pb tassement du fichier en tete */
-	}
-nb_octets_transferes=0;
-nb_octets_a_transferer=fin_fichier_avant_transfert - debut;
-
-if ( deplacement >= 0)
-	{
-	adresse_debut_buffer=maxi(debut,fin_fichier_avant_transfert - fd->taille_buffer);
-	}
-else
-	{
-	adresse_debut_buffer=debut;
-	}
-
-/*CD TANT QUE tous les octets n'ont pas ete transferes */
-while (nb_octets_transferes < nb_octets_a_transferer)
-	{
-	nb_octets_a_lire = mini(fd->taille_buffer, nb_octets_a_transferer - nb_octets_transferes);
-	cr = lseek(fd->descr,adresse_debut_buffer,SEEK_SET);
-	if(  cr != adresse_debut_buffer)
-		{
-	 	sprintf(CAI_ERREUR,"erreur lors d'un lseek sur le fichier de DA");
-		retour=CAI_PB_LSEEK;
-		goto ERREUR;
-		} 
-	nb_octets_lus = read(fd->descr,fd->buffer,nb_octets_a_lire);
-	if (nb_octets_lus != nb_octets_a_lire)
-		{
-	 	sprintf(CAI_ERREUR,"erreur de lecture dans le fichier de DA");
-		retour=CAI_PB_READ;
-		goto ERREUR;
-		}
-	cr= lseek(fd->descr,adresse_debut_buffer+deplacement,SEEK_SET);
-
-	if ( cr != (adresse_debut_buffer + deplacement))
-		{
-	 	sprintf(CAI_ERREUR,"erreur lors d'un lseek sur le fichier de DA");
-		retour=CAI_PB_LSEEK;
-		goto ERREUR;
-		}
-	cr2=write(fd->descr,fd->buffer,nb_octets_lus);
-	if ( cr2 != nb_octets_lus )
-		{
-	 	sprintf(CAI_ERREUR,"erreur d'ecriture dans le fichier de DA");
-		retour=CAI_PB_WRITE;
-		goto ERREUR;		
-		}
-	nb_octets_transferes = nb_octets_transferes + nb_octets_lus;
-	if ( deplacement >= 0)
-		{
-		adresse_debut_buffer=maxi( adresse_debut_buffer - fd->taille_buffer,debut);
-		}
-	else
-		{
-		adresse_debut_buffer=mini( adresse_debut_buffer + fd->taille_buffer,fin_fichier_avant_transfert);
-		}
-	}
-/*CD FIN TANT QUE tous les octets n'ont pas ete transferes */
-if (deplacement < 0 )
-	{
-	retour=ftruncate(fd->descr,(size_t)(fin_fichier_avant_transfert+deplacement));
-	if (retour != 0)
-		{
-	 	sprintf(CAI_ERREUR,"erreur lors d'un ftruncate sur le fichier de DA");
-		retour=CAI_PB_FTRUNC;
-		goto ERREUR;
-		}
-	}
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas nominal  				     */
-/*---------------------------------------------------------------------------*/
-return(CAI_OK);
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas d'erreur 				     */
-/*---------------------------------------------------------------------------*/
-ERREUR:
-return(retour);	
-/*---------------------------------------------------------------------------*/
-/*		 	FIN DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION: cai_lireficDA                                                  */
-/*                                                                           */
-/* ROLE: Cette operation interne lit dans le fichier de DA un buffer a partir*/
-/*    d'une adresse specifiee par l'utilisateur d'un nombre d'octets specifie*/
-/*      par l'utilisateur .                      		             */
-/*         ( utilisation de  lseek , read ) 	     	        	     */
-/*         ( buffer probable de 4096 octets)                                 */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL:                                                         */
-/*                                                                           */
-/* VERSION:                                                                  */
-/* CODE RETOUR : CAI_OK ou CAI_KO 						     */
-/*   " erreur lors du rewind sur le fichier de DA "			     */
-/*   " erreur lors du fseek sur le fichier de DA ( ad_deb =%d) "	     */ 	
-/*   " erreur a la lecture du fichier de donnees auxiliaires %s"             */
-/*****************************************************************************/
-static CAI_OK_KO cai_lireficDA(CAI_FILE_DA *fd,long  ad_deb,char *buff)
-
-{
-off_t offset;  /* offset dans le fichier de donnees auxiliaires */
-off_t offreel; /* offset reel obtenu apres lseek */
-long   nb_lus;   /* nombres d'octets lus */
-CAI_OK_KO cr;      /* code retour */	
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-cr=CAI_OK;
-/*CD on se positionne sur le debut du fichier ( rewind ) 		     */
-offset=0;
-offreel=lseek(fd->descr,offset,SEEK_SET);
-/*CD SI erreur on sort "erreur lors du rewind du fichier de DA " 	     */
-if ( offreel == -1)
-	{
-	cr=CAI_PB_LSEEK;
-	sprintf(CAI_ERREUR,"erreur lors du rewind du fichier %s",fd->nom_fichier);
-	goto ERREUR;
-	}
-/*CD on se deplace de ad_deb octets dans le fichier (fseek) 		     */
-offset=ad_deb;
-offreel=lseek(fd->descr,offset,SEEK_SET);
-/*CD SI erreur on sort " erreur lors du lseek du fichier de DA (ad_deb=%d)"  */  
-if ( offreel == -1)
-	{
-	cr=CAI_PB_LSEEK;
-	sprintf(CAI_ERREUR,"erreur lors du lseek sur le fichier %s",fd->nom_fichier);
-	goto ERREUR;
-	}
-/*CD SI erreur on sort "erreur lors du fseek du fichier de DA " 	     */
-/*CD on lit le buffer ( read )			 	             */
-nb_lus=read(fd->descr,buff,fd->taille_buffer);
-if (nb_lus == -1)
-	{
-	sprintf(CAI_ERREUR,"erreur lors du read sur le fichier %s",fd->nom_fichier);
-	cr=CAI_PB_READ;
-	goto ERREUR;
-	}
-*(buff + nb_lus)= '\0';
-/*CD SI taille_ecrite <> taille buff on sort " erreur a l'ecriture du fichier de donnee ..."       */
-if ( nb_lus != fd->taille_buffer)
-	{
-	fd->taille_buffer_lu=nb_lus;
-	}
-else
-	{
-	fd->taille_buffer_lu=fd->taille_buffer;
-	}
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas nominal  				     */
-/*---------------------------------------------------------------------------*/
-return(CAI_OK);
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas d'erreur 				     */
-/*---------------------------------------------------------------------------*/
-ERREUR:
-return(cr);	
-/*---------------------------------------------------------------------------*/
-/*		 	FIN DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION: cai_ecrireficDA                                                */
-/*                                                                           */
-/* ROLE: Cette operation interne ecrit dans un fichier de DA temporaire un buffer a partir*/
-/* 	d'une adresse specifiee par l'utilisateur d'un nombre d'octets specifie*/
-/*      par l'utilisateur .                      		             */
-/*         ( utilisation de rewind , fseek , write ) 			     */
-/*         ( buffer probable de 4096 octets)                                 */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL:                                                         */
-/*                                                                           */
-/* VERSION:                                                                  */
-/* CODE RETOUR : CAI_OK ou CAI_KO 						     */
-/*   " erreur lors du rewind sur le fichier de DA "			     */
-/*   " erreur lors du fseek sur le fichier de DA ( ad_deb =%d) "	     */ 	
-/*   " erreur a l'ecriture du fichier de donnees auxiliaires %s"             */
-/*****************************************************************************/
-static CAI_OK_KO cai_ecrireficDA(CAI_FILE_DA *fd,long ad_deb,
-				  long taille, char **buff )
-
-{
-off_t offset;  /* offset dans le fichier de donnees auxiliaires */
-off_t offreel; /* offset reel obtenu apres lseek */
-long   nb_ecrits;   /* nombres d'octets ecrit */
-CAI_OK_KO cr;      /* code retour */	
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-cr=CAI_OK;
-/*CD on se positionne sur le debut  du fichier ( lseek ) 		     */
-offset=0;
-offreel=lseek(fd->descr,offset,SEEK_SET);
-/*CD SI erreur on sort "erreur lors du rewind du fichier de DA " 	     */
-if ( offreel == -1)
-	{
-	cr=CAI_PB_LSEEK;
-	sprintf(CAI_ERREUR,"erreur lors du lseek sur le fichier %s",fd->nom_fichier);
-	goto ERREUR;
-	}
-/*CD on se deplace de ad_deb octets dans le fichier (fseek) 		     */
-offset=ad_deb;
-offreel=lseek(fd->descr,offset,SEEK_SET);
-/*CD SI erreur on sort " erreur lors du lseek du fichier de DA (ad_deb=%d)"  */  
-if ( offreel == -1)
-	{
-	cr=CAI_PB_LSEEK;
-	sprintf(CAI_ERREUR,"erreur lors du lseek sur le fichier %s",fd->nom_fichier);
-	goto ERREUR;
-	}
-/*CD on ecrit le buffer ( write )			 	             */
-nb_ecrits=write(fd->descr,*buff,taille);
-/*CD SI taille_ecrite <> taille buff on sort " erreur a l'ecriture du fichier de donnee ..."       */
-if ( nb_ecrits != taille)
-	{
-	sprintf(CAI_ERREUR,"erreur lors du write sur le fichier %s",fd->nom_fichier);
-	cr=CAI_PB_WRITE;
-	goto ERREUR;
-	}
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas nominal  				     */
-/*---------------------------------------------------------------------------*/
-return(CAI_OK);
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas d'erreur 				     */
-/*---------------------------------------------------------------------------*/
-ERREUR:
-return(cr);	
-/*---------------------------------------------------------------------------*/
-/*		 	FIN DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION: cai_decodedonDA                                                */
-/*                                                                           */
-/* ROLE:  Cette operation interne  decode une donnee sous la forme           */
-/* ENTIER: (( 1 2 24 ) ( 4 5 6 )) ou REEL: ((1. 2. 24.) (4. 5. 6.))          */
-/* ASCII: (( "1" "2" "24" ) ( "4" "5" "6" ))                                 */
-/* BLOC ( donnee vide )							     */
-/* cette operation commence par rechercher la premiere donnee pour determiner*/
-/* le type de donnee puis decode  chaque donnee , alloue la place necessaire */
-/* et parcourt ainsi tout le buffer					     */		  
-/*   NB: Si la donnee est coupee on rend a l'appelant le statut "en cours"   */
-/* ainsi qu'un pointeur sur le caractere suivant la derniere donnee lus et   */
-/* l'etat de l'automate .			                             */
-/* la place est alloue par cette operation mais l'appelant se charge de la   */
-/* liberer si besoin.							     */ 
-/*                                                                           */
-/*                                                                           */
-/* ETAT = ( DEBUT DECODAGE <=> ATTENTE ((	0			     */	
-/*          ATTENTE (				1			     */
-/*	    ATTENTE DONNEE			2			     */	
-/*	    ATTENTE DONNEE ou )			3			     */					
-/*	    ATTENTE ) ou (   			4			     */	
-/* 	    FIN decodage   			5			     */	
-/*	    BLOC				6			     */
-/*	    ERREUR parenthese	                11			     */	
-/*	    ERREUR fin de donne prematuree      13			     */	
-/* CARACTERE = (							     */
-/*		)							     */	
-/*		AUTRE							     */
-/*		<       						     */
-/*		BLANC ou TAB ou \N				             */
-/*	etat: CARACTERE  (    )    AUTRE <     BLANC ou TAB ou \n   	     */
-/*	0		 1   11   11     6        0			     */
-/*	1		 2   11   11    13  	  1			     */
-/*	2		11    4    3    13        2			     */
-/*	3		11    4    3    13        3			     */
-/*	4		 2    5   11    13 	  4 			     */
-/*									     */
-/* dans les etats 2 et 3 si l'evenement  = AUTRE on passe a un nouvel        */
-/*   automate	( remarque :si 2 dimensions on passe de l'etat 4 a l'etat 2  */
-/*									     */	
-/* ETAT1 =  Debut decodage donnee			0		     */
-/*	    attente point(reel) ou blanc (entier)	1		     */
-/*          attente " 					2		     */	
-/*          attente BLANC ou TAB ou \n			3		     */		   
-/*	    ENTIER                	 		4	             */
-/*	    chaine de caracteres			5		     */ 	
-/*          REEL 					6		     */
-/*	    erreur donnee				11		     */
-/* CARACTERE1 = .							     */
-/*              "							     */
-/*		BLANC ou TAB ou \n					     */
-/*		CHIFFRE							     */
-/*		SIGNE							     */	
-/*              AUTRE							     */	
-/*									     */
-/*	etat :caractere1 . 	" BLANC ou TAB ou \n ou ) CHIFFRE SIGNE AUTRE*/
-/*	0	         3 	2          11              1      1     11   */	
-/*      1		 3     11           4              1     11     11   */
-/*	2                2      5           2 		   2      2      2   */	
-/*	3		 3     11           6              3      3      3   */  
-/* CONTEXTE D'APPEL:                                                         */
-/*                                                                           */
-/* VERSION:                                                                  */
-/* CODE RETOUR : CAI_OK ou CAI_KO 						     */
-/*	"ERREUR donnee non presente ( mot cle %s)"			     */
-/*	"erreur parenthese ( mot cle %s)"				     */
-/*	"erreur fin de donnee prematuree ( mot cle %s)			     */
-/*      "erreur type de donne non reconnu"  				     */
-/*	"erreur de decodage de la donne (mot cle %s) "			     */	 
-/*****************************************************************************/
-static CAI_OK_KO cai_decodedonDA(long taille_buf, char buff[],long ad_deb,
-			   CAI_TYPE *type_lu,int *nb_lig_lu,int *nb_elt_lu,
-			   int *nb_elt_alloc,long *taille_cell_lu, 
-  			   void  **don_lue, CAI_ETAT1 *etat1,long *ad_fin_dec)
-{
-long 	indice;     /* indice de parcourt du buffer */
-CAI_TYPE type;      /* type de la donnee decodee */
-int	nb_lig;     /* nombre de lignes de la donnee */
-int 	nb_elt;     /* nombre d'elements de la donnee */
-long	taille_max; /* taille max d'une cellule CAI_ASCII */
-int	cr;	    /* code retour de la fonction */
-CAI_OK_KO   code;       /* code retour */  
-char    car;	    /* caractere courant traite */
-CAI_ETAT1	etat1_prec; /* etat precedent de niveau 1 */
-CAI_EVT1    evt1;       /* evenement de niveau 1 detectee */
-CAI_ETAT2   etat2;      /* etat de niveau 2 ( determination du type ) */
-CAI_EVT2    evt2;       /* evenement de niveau2			  */
-long    ad_deb_do;   /* adresse de debut de la donnee courante */
-long int *entier;   /* pointeur sur donnees entieres */
-double   *reel;     /* pointeur sur donnees reelles */
-char     *asc;      /* pointeur sur donnees ascii */ 
-int    nb_elt_alloues;/* nombres d'elements alloues */ 
-long	taille;	    /* taille d'une donnee a decoder */		
-int	nb_col;	    /* nombre de colonnes */
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT  DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/	
-/* initialisations 							     */
-
-cr=CAI_OK;
-indice=ad_deb;
-type= *type_lu;
-nb_lig= *nb_lig_lu;
-nb_elt= *nb_elt_lu;
-taille_max = *taille_cell_lu;
-nb_elt_alloues= *nb_elt_alloc;
-taille=0;
-if (type == CAI_ASCII)
-	{
-	asc=(char *) *don_lue;
-	}
-else
-	{
-	if (type == CAI_REEL8)
-		{
-		reel=(double *) *don_lue;
-		}
-	else
-		{
-		if (type == CAI_ENTIER4)
-			{
-			entier=(long int *) *don_lue;
-			}
-		else
-			{
-			asc = (char *)malloc(CAI_TAILLE_MAX_ASCII);
-			if (asc == NULL )
-				{
-				sprintf(CAI_ERREUR,"Erreur d'allocation lors de la lecture de la donnees");
-				cr=CAI_ERR_ALLOC;
-				goto ERREUR;
-				}
-			reel=(double *)asc;
-			entier=(long int *)asc;
-			}
-		}
-	}
-
-/*---------------------------------------------------------------------------*/
-/* TANT QUE  non erreur et non fin decodage et indice < taille buffer 		*/
-/*---------------------------------------------------------------------------*/
-while( *etat1 >= 0 && *etat1 != CAI_FINDEC && indice < taille_buf)
-	{
-/* 	car = buff[indice]						        */
-/* 	etat1_prec=etat1							*/
-	car = buff[indice];	
-	etat1_prec=*etat1;
-/*---------------------------------------------------------------------------*/
-/* 	fonction interne testant ( ) < BLANC ou TAB ou n AUTRE 		*/
-/*---------------------------------------------------------------------------*/
-	code=cai_analyseDA(
-			car,          /* [E] caractere a tester */
-			&evt1         /* [S] evenement detecte */ 
-		        );
-
-/*	etat1 = automate1[etat1][evt1]						*/
-	*etat1 = autom1[*etat1][evt1];
-/*      si erreur on affiche le messsage associe et on sort			*/	
-	if (*etat1 > 10)
-		{
-		switch (*etat1) {
-			case CAI_ERR11:cr = CAI_ERR_FORME_FIC;
-				sprintf(CAI_ERREUR,"erreur: forme donnee non coherente");  
-				break;
-			case CAI_ERR13:cr = CAI_ERR_FIN_DO;
-				sprintf(CAI_ERREUR,"erreur: fin de donnee prematuree"); 
-				break;
-			default:cr = CAI_KO;
-				sprintf(CAI_ERREUR,"erreur automate1 non reconnue");
-				break; 
-			}
-		goto ERREUR;
-		}
-/*	si etat1= 2 et etat1_prec=4 			*/
-/*			dim2 = dim2 + 1			*/
-	if ( *etat1 == CAI_ETAT12 && etat1_prec == CAI_ETAT14)
-		{
-		nb_lig=nb_lig + 1;
-		}
-/* sauvegarde ad_deb_do */
-	ad_deb_do=indice+1;
-	if ( *etat1 == CAI_BLOCVIDE )
-		{
-		type=CAI_BLOC;
-		nb_lig=1;
-		nb_elt=0;
-		*etat1 = CAI_FINDEC;
-		}
-/*	SI (etat1=3)					*/
-	if ( *etat1 == CAI_ETAT13)
-		{
-/*		initialisation etat2					        */
-		etat2= CAI_DEBUTYPE;
-/*		sauvegarde ad_deb_do						*/ 
-		ad_deb_do=indice;
-/*---------------------------------------------------------------------------*/
-/*		TANT QUE etat2 non REEL et non ENTIER et non ASCII et indice < taille buffer */
-/*---------------------------------------------------------------------------*/
-		while ( etat2 != CAI_REEL && etat2 != CAI_ENTIER && etat2 != CAI_ASC && indice <taille_buf )
-			{
-/*---------------------------------------------------------------------------*/
-/*		  fonction interne testant . " CHIFFRE SIGNE BLANC AUTRE        */
-/*---------------------------------------------------------------------------*/
-			code=cai_typeDA(
-			     car,       /* [E] caractere a tester */
-			     &evt2         /* [S] evenement detecte */ 
-		        	);
-/*		  etat2 = automate2[etat2][evt2]			        */
-			etat2=autom2[etat2][evt2];
-/*      si erreur on affiche le messsage associe et on sort			*/	
-			if (etat2 > 10)
-				{
-				switch (etat2) {
-					case CAI_ERR21:cr = CAI_ERR_TYP;
-					sprintf(CAI_ERREUR,"erreur: type de donnee non coherente");  
-					break;
-				default:cr = CAI_KO;
-					sprintf(CAI_ERREUR,"erreur automate2 non reconnue");
-					break; 
-					}
-				goto ERREUR;
-				}
-/*		  l'indice est incremente					*/
-			indice ++;
-			car = buff[indice];	
-			}
-/*---------------------------------------------------------------------------*/
-/*		FIN TANT QUE non erreur et non REEL et non ENTIER et non ASCII  */
-/*---------------------------------------------------------------------------*/
-
-/* SI on arrive en fin de buffer sans avoir decode la donnee */
-		if ( indice == taille_buf && (etat2 != CAI_REEL || etat2 != CAI_ENTIER || etat2 != CAI_ASC))
-		    {
-			cr= CAI_EOF;
-		    }
-		else
-		   {
-  		   if (etat2 == CAI_ASC || type == CAI_ASCII )
-			{
-			if (etat2 != CAI_ASC || (type != CAI_ASCII && type != CAI_INCONNU))
-				{
-				sprintf(CAI_ERREUR,"Erreur: melange de type dans une meme donnee");
-				cr=CAI_ERR_ASCII;
-				goto ERREUR;
-				}
-			type=CAI_ASCII;
-/*---------------------------------------------------------------------------*/
-/*		si CAI_ASCII  allocation et decodage entre ad_deb+1 et ad_fin -1	*/
-/*	     ( verification que la taille est inferieure a la taille max CAI_ASCII) */
-/*---------------------------------------------------------------------------*/
-			taille= (indice) - (ad_deb_do) -2 + 1;
-			if (taille  >= CAI_TAILLE_MAX_ASCII)
-				{
-				sprintf(CAI_ERREUR,"donnee ascii de taille sup a CAI_TAILLE_MAX_ASCII (%d)",taille);
-				cr=CAI_ERR_ASCII;
-				goto ERREUR;
-				} 
-/* 			allocation de CAI_NB_ALLOC element reel entier et ASCII */
-/*			par un realloc d'un ascii ( taille max) et sscanf(%s)	*/
-			if (nb_elt_alloues <= nb_elt)
-				{
-				asc = (char *)realloc(asc,CAI_TAILLE_MAX_ASCII*(CAI_NB_ALLOC + nb_elt_alloues));
-				if (asc != NULL )
-					{
-					nb_elt_alloues = CAI_NB_ALLOC + nb_elt_alloues;
-					}
-				else
-					{
-					sprintf(CAI_ERREUR,"Erreur d'allocation lors de la lecture de la donnees");
-					cr=CAI_ERR_ALLOC;
-					goto ERREUR;
-					}
-				}
-
-				strncpy(asc + (nb_elt*CAI_TAILLE_MAX_ASCII),buff+ad_deb_do+1,taille-1);
-				*(asc + (nb_elt)*CAI_TAILLE_MAX_ASCII +taille -1 )='\0';
-/*			   taille_max = sup (taille_max,taille)     */
-			taille_max=maxi(taille,taille_max);
-
-/*		nbelt = nbelt + 1						*/
-			nb_elt=nb_elt +1;
-			}
-		   else
-			{
-			 indice--;
-/*---------------------------------------------------------------------------*/
-/*		si REEL allocation et decodage entre ad_deb et ad_fin-1   	*/
-/*			par un realloc d'un reel et sscanf(%lf)			*/
-/*---------------------------------------------------------------------------*/
-			if (etat2 == CAI_REEL || type == CAI_REEL8)
-				{
-				if (etat2 != CAI_REEL || (type != CAI_REEL8 && type != CAI_INCONNU))
-					{
-					sprintf(CAI_ERREUR,"Erreur: melange de types dans une meme donnee");
-					cr=CAI_ERR_REEL;
-					goto ERREUR;
-					}
-				type = CAI_REEL8;				
-/* 			allocation de CAI_NB_ALLOC element reel  */
-				if (nb_elt_alloues <= nb_elt)
-					{
-					reel=(double *)realloc(reel,sizeof(double)*(CAI_NB_ALLOC + nb_elt_alloues));
-					if (reel != NULL )
-						{
-						nb_elt_alloues = CAI_NB_ALLOC + nb_elt_alloues;
-						}
-					else
-						{
-						sprintf(CAI_ERREUR,"Erreur d'allocation lors de la lecture de la donnees");
-						cr=CAI_ERR_ALLOC;
-						goto ERREUR;
-						}
-					}
-				code=sscanf(buff+ad_deb_do," %lf",reel+nb_elt);
-				if (code != 1)
-					{
-					sprintf(CAI_ERREUR,"Erreur de decodage de la donnee reelle (element %d)",nb_elt);
-					cr=CAI_ERR_REEL;
-					goto ERREUR;
-					}
-				}
-			else							
-				{
-				if (etat2 != CAI_ENTIER || (type != CAI_ENTIER4 && type != CAI_INCONNU))
-					{
-					sprintf(CAI_ERREUR,"Erreur: melange de type dans une meme donnee");
-					cr=CAI_ERR_ENTIER;
-					goto ERREUR;
-					}
-				type = CAI_ENTIER4;
-/*---------------------------------------------------------------------------*/
-/*		si ENTIER allocation et decodage entre ad_deb et ad_fin -1	*/
-/*			par un realloc d'un entier4 et sscanf(%d)		*/
-/* 			allocation de CAI_NB_ALLOC element entier  */
-/*---------------------------------------------------------------------------*/
-				if (nb_elt_alloues <= nb_elt)
-					{
-					entier=(long int *)realloc(entier,sizeof(long int)*(CAI_NB_ALLOC+nb_elt_alloues));
-					if (entier != NULL )
-						{
-						nb_elt_alloues = CAI_NB_ALLOC + nb_elt_alloues;
-						}
-					else
-						{
-						sprintf(CAI_ERREUR,"Erreur d'allocation lors de la lecture de la donnees");
-						cr=CAI_ERR_ALLOC;
-						goto ERREUR;
-						}
-					}
-				code =sscanf(buff+ad_deb_do," %ld",
-						entier+nb_elt);
-				if (code != 1)
-					{
-					sprintf(CAI_ERREUR,"Erreur de decodage de la donnee entier(element %d)",nb_elt);
-					cr=CAI_ERR_ENTIER;
-					goto ERREUR;
-					}
-				}
-/*		nbelt = nbelt + 1						*/			
-			nb_elt=nb_elt +1;
-			}
-/* FIN SI on arrive en fin de buffer sans avoir decode la donnee */
-/* on se positionne sur le dernier caractere de la donnee 	*/
-		   indice--;
-		   }
-		*etat1 = CAI_ETAT12;
-/* FIN SI (etat1=3)					*/
-		}
-/*---------------------------------------------------------------------------*/
-/*	FIN SI									*/
-/*---------------------------------------------------------------------------*/
-/*      l'indice est incremente						  	*/
-	indice++;
-	}
-/*---------------------------------------------------------------------------*/
-/* FIN TANT QUE  non erreur et non fin decodage et indice < taille buffer 	*/
-/*---------------------------------------------------------------------------*/
-if (indice == taille_buf)
-	{
-	cr=CAI_EOF;
-	}
-if (*etat1 == CAI_FINDEC)
-	{ 
-/* nb_col = nbelt  nb_lig						  	*/
-	nb_col = (nb_elt/nb_lig);
-/* SI nb_lig . nb_col <> nbelt alors erreur dans le nombre d'elements d'une ligne*/
-	if ( (nb_lig * nb_col) != nb_elt)
-		{
-		sprintf(CAI_ERREUR,"Nombre d'elements decodes incoherent (nb_elt:%d nb_lig:%d)",nb_elt,nb_lig);
-		cr=CAI_ERR_DIM;
-		goto ERREUR;
-		}
-	}
-/*---------------------------------------------------------------------------*/
-/* nb_elt_lu = nb_elt							     */
-/* nb_lig_lu = dim2 							     */
-/* etat1 = etat1							     */
-/* type_lu  = type							     */
-/* taille_cell_lu= CAI_REEL8 ou CAI_ENTIER4 ou CAI_ASCII( taille max ) 	             */
-/* ad_fin_dec= ad_fin  ( pour lecture du prochain buffer si besoin) 	     */  
-/*---------------------------------------------------------------------------*/
-*type_lu=type;
-*nb_lig_lu=nb_lig;
-*nb_elt_lu=nb_elt;
-*taille_cell_lu=taille_max;
-*ad_fin_dec=ad_deb_do;
-*nb_elt_alloc=nb_elt_alloues;
-if (type == CAI_ASCII)
-	{
-	*don_lue=(void *)asc;
-	}
-else
-	{
-	if (type == CAI_REEL8)
-		{
-		*don_lue=(void *)reel;
-		}
-	else
-		{
-		*don_lue=(void *)entier;
-		}
-	}
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas nominal  				     */
-/*---------------------------------------------------------------------------*/
-return(cr);
-/*---------------------------------------------------------------------------*/
-/*CD fin de l'operation en cas d'erreur 				     */
-/*---------------------------------------------------------------------------*/
-ERREUR:
-/* affectation pour pouvoir liberer la place allouee ( par l'appelant )*/
-if (type == CAI_ASCII)
-	{
-	*don_lue=(void *)asc;
-	}
-else
-	{
-	if (type == CAI_REEL8)
-		{
-		*don_lue=(void *)reel;
-		}
-	else
-		{
-		*don_lue=(void *)entier;
-		}
-	}
-return(cr);	
-/*---------------------------------------------------------------------------*/
-/*		 	FIN DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION: cai_analyseDA                                                  */
-/*                                                                           */
-/* ROLE: Cette operation interne est un automate qui teste les caracteres    */
-/*       ( , ) , AUTRE , <  , BLANC ou TAB ou  \N		             */
-/* 									     */
-/*      								     */
-/*                                                                           */
-/* CONTEXTE D'APPEL:                                                         */
-/*                                                                           */
-/* VERSION:                                                                  */
-/* CODE RETOUR : CAI_OK ou CAI_KO 						     */
-/*****************************************************************************/
-static CAI_OK_KO cai_analyseDA(char car, CAI_EVT1 *evt1)
-
-{
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-/*CD si  char = '('  evt1 = 0 					*/
-if (car == '(' )
-	{
-	*evt1 = CAI_PAR_OUV;
-	}
-else
-	{
-/*CD sinon si  char = ')' evt1 = 1 				*/
-	if (car == ')' )
-		{
-		*evt1 = CAI_PAR_FERM;
-		}
-	else
-		{
-/*CD 	   sinon si char = '<' evt1 = 3 			*/
-		if (car == '<' )
-			{
-			*evt1=CAI_INF;
-			}
-		else
-			{
-/*CD 		 sinon si char = BLANC ou TAB ou n evt1= 4 	*/
-			if (car==' ' || car=='	' || car=='\n')
-				{
-				*evt1=CAI_BLANC;
-				}
-			else
-				{		
-/*CD		       sinon evt1 = 2 				*/
-				*evt1=CAI_DONNEE;
-				}
-/*CD			fin si					*/
-			}
-/*CD		 fin si						*/
-		}
-/*CD	   fin si						*/
-	}
-/*CD fin si							*/	
-        return(CAI_OK);	
-/*---------------------------------------------------------------------------*/
-/*		 	FIN DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION: cai_typeDA                                                     */
-/*                                                                           */
-/* ROLE: Cette operation interne est un automate qui teste les caracteres    */
-/*       . , " , BLANC ou TAB ou \n ou ), CHIFFRE	, SIGNE	, AUTRE	     */	
-/* 									     */
-/*      								     */
-/*                                                                           */
-/* CONTEXTE D'APPEL:                                                         */
-/*                                                                           */
-/* VERSION:                                                                  */
-/* CODE RETOUR : CAI_OK ou CAI_KO 					     */
-/*****************************************************************************/
-static CAI_OK_KO cai_typeDA(char car, CAI_EVT2 *evt2)
-
-{
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-/*CD si  char = '.'  evt1 = 0 					*/
-if (car == '.' )
-	{
-	*evt2=CAI_POINT;
-	}
-else
-	{
-/*CD sinon si  char = '"' evt1 = 1 				*/
-	if (car=='"' )
-		{
-		*evt2=CAI_GUILL;
-		}
-	else
-		{
-/*CD 	   sinon si char = BLANC ou TAB ou \n ou ) evt1 = 2 	*/
-		if (car==' ' || car=='	' || car=='\n' || car==')' )
-			{
-			*evt2=CAI_ESPACE;
-			}
-else
-			{
-/*CD 		 sinon si char = CHIFFRE  (isdigit) evt1= 3       	*/
-			if ( isdigit(car) != 0)
-				{
-				*evt2=CAI_CHIFFRE;
-				}
-			else
-				{
-/*CD		       sinon si char = SIGNE  evt1= 4	        */
-				if ( car == '+' || car =='-')
-					{
-					*evt2=CAI_SIGNE;
-					}
-				else
-					{
-/*CD			     sinon evt1= 5			*/	
-					*evt2=CAI_AUTRE;
-					}
-				}
-/*CD		       fin si					*/
-			}
-/*CD		 fin si						*/
-		}
-/*CD	   fin si						*/
-	}
-/*CD fin si							*/
-
-        return(CAI_OK);
-		
-/*---------------------------------------------------------------------------*/
-/*		 	FIN DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-/********************************************************************************/
-/*                                                                           	*/
-/* OPERATION: cai_recherchecleDA                                               	*/
-/*                                                                           	*/
-/* ROLE: Cette operation interne recherche un mot cle dans le buffer buff.   	*/
-/*  (de taille specifiee dans CAI_FILE_DA). on retourne le mot  cle, sa longueur  	*/
-/*  et l'adresse dans le tableau du caractere suivant le mot cle .           	*/
-/* NB: attention au cas ou le mot cle est coupe on renvoie un statut 		*/
-/*  "non trouve" comme si rien n'avait pu etre detecte                          */
-/*                                                                           	*/
-/* ETAT = ( DEBUT DECODAGE <=> ATTENTE <	0				*/
-/*          ATTENTE >				1				*/
-/*          FIN DECODAGE			2	|			*/
-/*          ERREUR Syntaxe (<...<) 		CAI_ERR_CROCHET	| status de	*/
-/*          ERREUR Donnee non presente		CAI_EOF| retour			*/
-/*          ERREUR fin de donnee prematuree	CAI_PAS_MC	|		*/
-/*										*/
-/* CARACTERE = <  >  AUTRE  FIN_FICHIER						*/
-/*										*/
-/*	Etat : CARACTERE     	<	>	AUTRE	FIN_FICHIER		*/
-/*	0			 1	 0	0	-1			*/
-/*	1			-25	 2	1	-24			*/
-/*                                                                           	*/
-/*                                                                           	*/
-/* CONTEXTE D'APPEL:                                                         	*/
-/*                                                                           	*/
-/* VERSION:                                                                  	*/
-/*										*/
-/********************************************************************************/
-static CAI_OK_KO cai_recherchecleDA(long taille_buf,char *buff,
-				    long ad_deb,char *mot_cle,long *ad_suiv)
-
-{
-long	retour;			/* code retour */
-char *	indice;		     	/* indice de parcourt du buffer */
-int	nb_car;			/* nombre de caracteres du mot cle */
-char	*ad;			/* adresse d'un caractere */
-long	adr_deb_mot;		/* adresse debut de mot cle */
-CAI_ETAT3	etat;			/* etat de niveau 3 */
-CAI_EVT3	evt3;			/* evenement de niveau 3 */
-char	c;			/* caractere courant traite */
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-/*CD Initialisation : On se positionne a l'adresse a partir de laquelle il 	*/
-/*CD		      faut scanner le buffer 					*/
-/*CD On recherche le premier caractere < (strchr)				*/
-/*------------------------------------------------------------------------------*/
-
-indice =(char *) strchr ((char *)(buff+ad_deb), '<');
-
-/*CD Si le code retour de strchr est NULL (< non trouve), erreur rencontree,	*/
-if (indice == NULL)
-	{
-	retour = CAI_EOF;
-	sprintf(CAI_ERREUR,"erreur: pas de mots cle a partir de l adresse %d", ad_deb); 
-	goto ERREUR;
-	}
- 
-/*------------------------------------------------------------------------------*/
-/*CD On sauvegarde l'adresse relative  de debut du mot cle			*/
-/*------------------------------------------------------------------------------*/
-adr_deb_mot = (long)(indice - buff) + 1;
-
-/*------------------------------------------------------------------------------*/
-/*CD On utilise un automate pour analyser les caracteres (en les comptant) ;	*/
-/*CD	on sort de l'analyse avec :  2 fin decodage ok				*/
-/*CD				     -1 erreur syntaxe ( <    < )		*/
-/*CD				     -3 On n'a pas assez de donnees pour 	*/
-/*CD					analyser integralement le mot cle       */
-/*------------------------------------------------------------------------------*/
-etat = 0;
-nb_car = 0;
-
-while (etat != 2 && etat != CAI_PAS_MC && etat != CAI_ERR_CROCHET)
-	{
-	ad = (char *)(indice + nb_car);
-	c = *ad;
-	nb_car = nb_car + 1;
-	retour =cai_mot_cleDA(c,       		/* [E] caractere a tester */
-			      &evt3);         	/* [S] evenement detecte */ 
-	etat = autom3 [etat] [evt3];
-	}
-nb_car = nb_car -2;
-
-/*CD si etat erreur : envoi message */
-if (etat == CAI_PAS_MC)
-	{
-	retour = CAI_PAS_MC;
-	sprintf (CAI_ERREUR,"le mot cle n'est pas inclu entierement dans le buffer");
-	goto ERREUR;
-	}
-if (etat == CAI_ERR_CROCHET )
-	{
-	retour = CAI_ERR_CROCHET;
-	sprintf (CAI_ERREUR,"2 crochets ouvrant < < ont ete detecte dans le mot cle");
-	goto ERREUR;
-	}
-
-/*CD si mot cle trop long, erreur */
-if (nb_car > CAI_TAILLE_MAX_CLEDA)
-	{
-	retour = CAI_CLE_TROP_LONG;
-	sprintf (CAI_ERREUR,"le mot cle est trop long");
-	goto ERREUR;
-	}
-
-/*CD si decodage ok et si le mot cle n'est pas trop long,			*/
-if (etat ==2 )
-	{
-/*CD 	sauvegarde du mot cle, de sa longueur, et de l'adresse du premier	*/
-/*CD	caractere suivant le mot cle						*/
-	memcpy (mot_cle,(indice + 1), nb_car);
-	*(mot_cle + nb_car) = '\0';
-	*ad_suiv = adr_deb_mot + nb_car + 1;
-	}
-
-/*---------------------------------------------------------------------------*/
-/* Fin du traitement nominal			        		     */
-/*---------------------------------------------------------------------------*/
-retour = CAI_OK;
-return (retour);
-
-/*---------------------------------------------------------------------------*/
-/* traitement degrade : 			        		     */
-/*---------------------------------------------------------------------------*/
-ERREUR :
-return (retour);
-
-/*---------------------------------------------------------------------------*/
-/*		 	FIN DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION: cai_decodeautom3DA                                             */
-/*                                                                           */
-/* ROLE: Cette operation interne est un automate qui teste les caracteres    */
-/*       < > fin_buffer blanc (' ' '\n') autre				     */	
-/* 									     */
-/*      								     */
-/*                                                                           */
-/* CONTEXTE D'APPEL:                                                         */
-/*                                                                           */
-/* VERSION:                                                                  */
-/* CODE RETOUR : CAI_OK ou CAI_KO 						     */
-/*****************************************************************************/
-static CAI_OK_KO cai_mot_cleDA(char car, CAI_EVT3 *evt3)
- 
-{
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-/*CD si  char = ' ' ou \n  	evt3 = ESPACE					*/
-/*CD si  char = '<' 		evt3 = INFERIEUR				*/
-/*CD si char = '>' 		evt3 = SUPERIEUR				*/
-/*CD si char = \0  		evt3 = FIN     					*/
-/*CD sinon 			evt3 = AUTRES  		      			*/
-
-switch (car)
-	{
-	case (' ') :
-		*evt3 = CAI_ESPACE;
-		break;
-	case  ('\n') :
-		*evt3 = CAI_ESPACE;
-		break;
-
-	case '<' :
-		*evt3 = CAI_INFERIEUR;
-		break;
-	case '>' :
-		*evt3 = CAI_SUPERIEUR;
-		break;
-	case '\0' :
-		*evt3 = CAI_FIN;
-		break;
-
-	default:
-		*evt3 = CAI_AUTRES;
-		break;
-	}
-return (CAI_OK);
-/*---------------------------------------------------------------------------*/
-/*		 	FIN DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION:  cai_ecritDA_buf                                               */
-/*                                                                           */
-/* ROLE:  Cette operation ecrit une DA dans un buffer			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL:                                                         */
-/*	Cette operation doit etre appelee apres ouverture prealable fichier  */
-/*	de Donnees Auxiliaires						     */
-/*                                                                           */
-/* VERSION:                                                                  */
-/*									     */
-/* CODE RETOUR : CAI_OK ou CAI_KO					     */
-/*  si CAI_KO, l'erreur peut etre affichee via la variable globale CAI_ERREUR*/
-/*	" fichier de donnees auxiliaires %s non ouvert "		     */
-/*	" erreur de positionnement en fin de fichier "			     */
-/*	" erreur d'ecriture dans le fichier "				     */
-/*****************************************************************************/
-static CAI_OK_KO cai_ecritDA_buf(CAI_FILE_DA *fd,char *mot_cle,
-				 CAI_TYPE type,int nb_lig,int nb_col,
-			         long taille_cell, void *donnee,
-				 int indic_ecrit,char **da_ascii)
-{
-CAI_OK_KO	retour;				/* code retour des fonctions */
-char	don_ascii[CAI_TAILLE_MAX_LIGDA];/* buffer contenant une donnee en ascii */
-char	* pt_don;			/* pointeur sur don_ascii utilise pour l'ascii */
-char 	* pt_ascii;			/* pointe sur da_ascii a l'emplacement du premier caractere libre*/
-int	lig;				/* indice de boucle sur les lignes */
-int	col;				/* indice de boucle sur les colonnes */	
-char	* pt_deb_lig;			/* pointe sur da_ascii a l'adresse de debut de derniere ligne 	*/
-int	nb_bloc;			/* nombre de blocs de CAI_TAILLE_BUFFER alloues pour da_ascii */
-long	*dbentier;			/* pointeur sur variable entiere double */
-float	*reel;				/* pointeur sur variable reelle simple precision */
-double	*dbreel;			/* pointeur sur variable double precision */
-long	longueur;			/* longueur significative d'un buffer */
-long	sauv_diff_deb;			/* difference d'adresse entre derniere ligne du buffer et debut du buffer */
-long	sauv_diff_cour;			/* difference d'adresse entre premier element libre du buffer et debut du buffer */
-char *    tempo;
-
-/*---------------------------------------------------------------------------*/
-/*		 	DEBUT DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-/*CD initialisation des types */
-dbentier = (long *) donnee;
-reel = (float *) donnee;
-dbreel = (double *) donnee;
-/*------------------------------------------------------------------------------*/
-/*CD Allocation d'un espace memoire pour le buffer d'ecriture de la donnee 	*/
-/*CD auxiliaire									*/
-/*CD (il faut essayer d'allouer un maximum de place representative afin 	*/
-/*CD d'eviter un trop grand nombre de realloc)					*/
-/*------------------------------------------------------------------------------*/
-*da_ascii = NULL;
-*da_ascii = (char *)malloc (CAI_TAILLE_BUFFER);
-if (*da_ascii== NULL) 
-	{
-	retour = CAI_ERR_ALLOC;
-	sprintf (CAI_ERREUR," erreur allocation memoire pour DA ascii ");
-	goto ERREUR;
-	}
-         nb_bloc = 1;
-
-/*------------------------------------------------------------------------------*/
-/*CD On ecrit dans le buffer, avec la syntaxe desiree le mot cle suivi d'un \n 	*/
-/*------------------------------------------------------------------------------*/
-sprintf (*da_ascii, "<%s>\n", mot_cle);
-pt_ascii = *da_ascii + strlen (*da_ascii);
-pt_deb_lig = pt_ascii;
-
-/*------------------------------------------------------------------------------*/
-/*CD Initialisation d'une ligne de caracteres ascii, si des donnees sont 	*/
-/*CD a ecrire									*/
-/*------------------------------------------------------------------------------*/
-
-if ((nb_lig != 0 && nb_col != 0 ) || type == CAI_BLOC)
-	{
-	if (type == CAI_BLOC)
-		{
-		nb_lig=0;
-		}
-	else
-		{
-		*pt_deb_lig = '(';
-		pt_ascii = pt_ascii + 1;
-		}
-	}
-/*------------------------------------------------------------------------------*/
-/*CD POUR chaque ligne des donnees						*/
-/*------------------------------------------------------------------------------*/
-for (lig=0; lig < nb_lig; lig++)
-	{
-
-/*------------------------------------------------------------------------------*/
-/*CD	Initialisation ( pour chaque ligne					*/
-/*------------------------------------------------------------------------------*/
-	strcpy (pt_ascii ,"( ");
-	pt_ascii = pt_ascii + 2;
-	
-/*------------------------------------------------------------------------------*/
-/*CD	POUR chaque colonne de donnees						*/
-/*------------------------------------------------------------------------------*/
-	for (col=0; col < nb_col; col++)
-		{
-
-/*------------------------------------------------------------------------------*/
-/*CD 		Suivant le type des donnees (entier  double, 		        */
-/*CD		reel simple ou double, ascii), on ecrit dans le buffer 		*/
-/*CD		DON_ASCII dans un format donne (%d, %f, %lf, %s) la donnee	*/
-/*CD		suivie d'un blanc						*/
-/*------------------------------------------------------------------------------*/
-		
-		switch (type)
-			{
-			case CAI_ENTIER4:
-				sprintf(don_ascii, "%d ",
-				    *(dbentier+(nb_col*lig + col)) );
-				break;
-			case CAI_REEL4:
-				sprintf(don_ascii, "%#.6g ", *(reel+(nb_col*lig + col)));
-				break;
-			case CAI_REEL8:
-				sprintf(don_ascii, "%#.14g ", *(dbreel+(nb_col*lig + col)));
-				break;
-			case CAI_ASCII:
-				pt_don = don_ascii;
-				sprintf(pt_don, "\"");
-				pt_don = pt_don + 1;
-				tempo=((char *)donnee+(nb_col*lig + col)*taille_cell);
-				longueur = strlen (tempo);
-				memcpy (pt_don, tempo, longueur);
-				pt_don = pt_don + longueur;
-				sprintf(pt_don,"\" \0");
-				break;
-			default:
-				retour = CAI_ERREUR_ENCODE;
-				sprintf (CAI_ERREUR," erreur ecriture en ascii de donnee ");
-				goto ERREUR;
-			}
-
-/*--------------------------------------------------------------------------------------*/
-/*CD		On determine la longueur significative de ce buffer DON_ASCII (sans \0)	*/
-/*--------------------------------------------------------------------------------------*/
-		longueur = strlen (don_ascii);
-
-/*--------------------------------------------------------------------------------------*/
-/*CD		SI cette longueur + taille significative de da_ascii + \n))\n\0 est 	*/
-/*CD		superieure a la taille allouee pour da_ascii, on se realloue		*/
-/*CD		de la place 								*/
-/*--------------------------------------------------------------------------------------*/
-		if ( (longueur+5 + (long) pt_ascii - (long)&(**da_ascii)) > (CAI_TAILLE_BUFFER*nb_bloc) )
-			{
-			nb_bloc = nb_bloc + 1;
-
-			sauv_diff_deb = (long) pt_deb_lig - (long)&(**da_ascii);
-			sauv_diff_cour = (long) pt_ascii - (long)&(**da_ascii);
-
-			*da_ascii = (char *)realloc (*da_ascii, (CAI_TAILLE_BUFFER*nb_bloc));
-			if (*da_ascii== NULL) 
-				{
-				retour = CAI_ERR_ALLOC;
-				sprintf (CAI_ERREUR,
-		" erreur re-allocation memoire pour DA ascii-bloc %d ",
-			 nb_bloc);
-				goto ERREUR;
-				}
-
-			pt_deb_lig = *da_ascii + sauv_diff_deb;
-			pt_ascii =  *da_ascii + sauv_diff_cour;
-			}
-
-/*--------------------------------------------------------------------------------------------------------------*/
-/*CD		SI avec cette longueur + taille de ligne est superieure a CAI_TAILLE_MAX_LIGDA caracteres	*/
-/*CD			A l'adresse courante  on ecrit \n dans le buffer da_ascii	                        */
-/*--------------------------------------------------------------------------------------------------------------*/
-		if ( (longueur + (long)pt_ascii - (long)pt_deb_lig) >= CAI_TAILLE_MAX_LIGDA)
-			{
-			*pt_ascii = '\n';
-			pt_ascii = pt_ascii + 1;
-			pt_deb_lig = pt_ascii;
-
-			}
-
-/*------------------------------------------------------------------------------*/
-/*CD		On recopie les donnees significatives de DON_ASCII dans le 	*/
-/*CD		buffer da_ascii a l'adresse pointeur				*/
-/*------------------------------------------------------------------------------*/
-		strcpy (pt_ascii, don_ascii);
-		pt_ascii = pt_ascii + longueur;
-		}	/*CD 	FIN POUR (col)					*/
-
-/*------------------------------------------------------------------------------*/
-/*CD	Initialisation ) apres les donnees de la ligne				*/
-/*CD	SI longueur de la ligne < CAI_TAILLE_MAX_LIGDA alors			*/
-/*CD		on ecrit \n							*/
-/*CD	SINON 									*/
-/*CD		on ecrit \n)\n							*/
-/*------------------------------------------------------------------------------*/
-	if (lig != (nb_lig-1))
-		{
-		if ((pt_ascii - pt_deb_lig + 2) < (CAI_TAILLE_MAX_LIGDA) )
-			{
-			strcpy (pt_ascii ,")\n");
-			pt_ascii = pt_ascii + 2;
-			pt_deb_lig = pt_ascii;
-			}
-		else
-			{
-			strcpy (pt_ascii ,"\n)\n");
-			pt_ascii = pt_ascii + 3;
-			pt_deb_lig = pt_ascii;
-			}
-		}
-	else		/*CD on traite le cas de la derniere ligne */
-		{
-		if ((pt_ascii - pt_deb_lig + 3) < (CAI_TAILLE_MAX_LIGDA) )
-			{
-			strcpy (pt_ascii ,"))\n");
-			pt_ascii = pt_ascii + 3;
-			pt_deb_lig = pt_ascii;
-			}
-		else 
-			{
-			if ((pt_ascii - pt_deb_lig + 2) < (CAI_TAILLE_MAX_LIGDA) )
-				{
-				strcpy (pt_ascii ,")\n)\n");
-				pt_ascii = pt_ascii + 4;
-				pt_deb_lig = pt_ascii;
-				}
-			else
-				{
-				strcpy (pt_ascii ,"\n))\n");
-				pt_ascii = pt_ascii + 4;
-				pt_deb_lig = pt_ascii;
-				}
-			}
-
-		}
-
-
-
-}	/*CD FIN POUR (lig)					*/
-
-/*------------------------------------------------------------------------------*/
-/*CD On ecrit \0 en fin de buffer						*/
-/*------------------------------------------------------------------------------*/
-*pt_ascii='\0';
-
-/*------------------------------------------------------------------------------*/
-/*CD Si l'utilisateur le desire on ecrit en fin de fichier le buffer 		*/
-/*------------------------------------------------------------------------------*/
-if (indic_ecrit == 1)
-	{
-/*CD 	On se positionne a la fin du fichier de DA.				*/
-	retour = lseek(fd->descr, 0L, SEEK_END);
-	if (retour == -1)
-		{
-		retour = CAI_PB_LSEEK;
-		sprintf(CAI_ERREUR,"Dans ajouteDA, erreur positionnement en fin de fichier");
-		goto ERREUR;
-		}
-
-/*CD 	On ecrit le buffer dans le fichier */
-	longueur = (long) strlen(*da_ascii);
-	write (fd->descr, *da_ascii, longueur);
-
-	} 	/* fin ecriture fichier */
-
-/*------------------------------------------------------------------------------*/
-/*CD re-initialisations des pointeurs de la structure CAI_FILE_DA     		*/
-/*CD ( buffers de lecture , liste de mots cles , longueurs ...)			*/ 
-/*------------------------------------------------------------------------------*/
-if (indic_ecrit == 1) {   
-	fd->num_buffer=-1;
-	fd->nb_mot_cle=-1;
-	if (fd->liste_mot_cle != NULL)
-	{
-	   free(fd->liste_mot_cle);
-          fd->liste_mot_cle=NULL;
-
-	}
-	if (fd->ad_mot_cle != NULL)
-	{
-	  free(fd->ad_mot_cle);
-	  fd->ad_mot_cle=NULL;
-
-	}
-	if (fd->ad_donnee != NULL)
-	{
-	   free(fd->ad_donnee);
-	   fd->ad_donnee=NULL;
-        }
-
-}			
-
-
-/*---------------------------------------------------------------------------*/
-/* Fin du traitement nominal			        		     */
-/*---------------------------------------------------------------------------*/
-retour = CAI_OK;
-return (retour);
-
-/*---------------------------------------------------------------------------*/
-/* traitement degrade : 			        		     */
-/*---------------------------------------------------------------------------*/
-ERREUR :
-        fd->num_buffer=-1;
-        fd->nb_mot_cle=-1;
-	if (fd->liste_mot_cle != NULL)
-	{
-	   free(fd->liste_mot_cle);
-          fd->liste_mot_cle=NULL;
-
-	}
-	if (fd->ad_mot_cle != NULL)
-	{
-	  free(fd->ad_mot_cle);
-	  fd->ad_mot_cle=NULL;
-
-	}
-	if (fd->ad_donnee != NULL)
-	{
-	   free(fd->ad_donnee);
-	   fd->ad_donnee=NULL;
-        }
-
-return (retour);
-
-/*---------------------------------------------------------------------------*/
-/*		 	FIN DE L'OPERATION	        		     */
-/*---------------------------------------------------------------------------*/
-}
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION:  cai_lecture_colormap                                          */
-/*                                                                           */
-/* ROLE:  lecture de la colormap dans les DA             		     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL:                                                         */
-/*                                                                           */
-/* VERSION:                                                                  */
-/*									     */
-/* CODE RETOUR : CAI_OK ou CAI_KO					     */
-/*  si CAI_KO, l'erreur peut etre affichee via la variable globale CAI_ERREUR*/
-/*									     */
-/*****************************************************************************/
- CAI_OK_KO cai_lecture_colormap(CAI_IMAGE  *fdima)
-
-{
-  CAI_MODE_OUVERTURE  mode;  /* mode de lecture du fichier de DA   	*/
-  char  mot_cle[9];	     /*  mot cle associe aux donnees colormap   */
-  CAI_TYPE   type;           /* type des donnees a lire                 */
-  int	  nb_lig;            /* nombre de lignes du tableau a lire 	*/
-  int	  nb_col;	     /* nombre de colonnes du tableau a lire	*/
-  long	  taille_cell;	     /* taille maxi en octets d'un element	*/
-			     /*     (significatif si type = ascii)	*/
-  CAI_OK_KO icr;	     /* compte-rendu de la fonction             */
-  CAI_FILE_DA  *fd;          /* Descripteur du fichier DA               */
-  char fic_DA[1024];	     /* nom fichier de donnees auxillaires      */
-
-  strcpy(fic_DA,fdima->NOM_IMAGE);
-
-/*** Ouverture du fichier de donnees auxilliaires ***/
-   
-  mode = CAI_LECTURE;
-  fd=cai_openDA(fic_DA,fdima->TYPE_IMAGE,fdima->NB_CANAUX,mode);	
-  if (fd == NULL)
-  {
-    /*--- il n'y a pas de donnees Colormap ---*/
-    fdima->COLORMAP=0;
-
-  }
-  else
-  {
-/*** Recherche des caracteristiques des donnees Colormap ***/
-   
-     strcpy(mot_cle,"COLORMAP");
-     mot_cle[8]='\0';
-     icr=cai_lirecaractDA(fd,mot_cle,&type,&nb_lig,&nb_col,&taille_cell);
-     if (icr != CAI_OK)
-       /*--- il n'y a pas de donnees Colormap ---*/
-       fdima->COLORMAP=0;
-     else
-     {
-/***      Lecture des donnees de Colormap ***/
-
-          fdima->TABCOLOR = (int *) malloc(sizeof(int)*768);
-	  icr = cai_lireDA(fd,mot_cle,&type,&nb_lig,&nb_col,
-			   &taille_cell,fdima->TABCOLOR);
-          if (icr == CAI_KO)
-               goto ERREUR;
-	  fdima->COLORMAP = nb_col*nb_lig;
-      }
-  
-/*** Fermeture du fichier de Donnees Auxilliaires ***/
-     icr = cai_closeDA(fd);
-   }
-   return (CAI_OK);
-
-ERREUR:
-   return(CAI_KO);
-}
-/*
-	Fin de l'operation cai_lecture_colormap
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION:  cai_ecriture_colormap                                          */
-/*                                                                           */
-/* ROLE:  ecriture de la colormap dans les DA             		     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL:                                                         */
-/*                                                                           */
-/* VERSION:                                                                  */
-/*									     */
-/* CODE RETOUR : CAI_OK ou CAI_KO					     */
-/*  si CAI_KO, l'erreur peut etre affichee via la variable globale CAI_ERREUR*/
-/*									     */
-/*****************************************************************************/
- CAI_OK_KO cai_ecriture_colormap(CAI_IMAGE  *fdima)
-
-
-{
-  CAI_MODE_OUVERTURE  mode;  /* mode de lecture du fichier de DA   	*/
-  char  mot_cle[13];	     /*  mot cle associe aux donnees colormap   */
-  CAI_TYPE   type;           /* type des donnees a ecrire               */
-  int	  nb_lig;            /* nombre de lignes du tableau a ecrire	*/
-  int	  nb_col;	     /* nombre de colonnes du tableau a ecrire  */
-  CAI_OK_KO icr;	     /* compte-rendu de la fonction             */
-  CAI_FILE_DA  *fd;          /* Descripteur du fichier DA               */
-  int Infos[3];              /* infos colormap pour attribution R V B   */
-  int taille_cell;
-  char fic_DA[1024];
-
-  strcpy(fic_DA,fdima->NOM_IMAGE);
- 
-/*** Ouverture du fichier de donnees auxilliaires ***/
-
-  mode = CAI_ECRITURE;
-
-  fd=cai_openDA(fic_DA,fdima->TYPE_IMAGE,fdima->NB_CANAUX,mode);	
-  if (fd == NULL)
-     goto ERREUR;
-  else
-  {
-/*** Initialisation et ecriture du champ infos colormap ***/
-
-     strcpy(mot_cle,"COLORMAPINFO");
-     mot_cle[12]='\0';
-     nb_lig=1;
-     nb_col=3;
-     type = CAI_ENTIER4;
-     taille_cell= sizeof (int);
-     Infos[0]=1;
-     Infos[1]=1;
-     Infos[2]=1;
-     icr = cai_ajouteDA(fd,mot_cle,type,nb_lig,
-			nb_col,taille_cell,Infos);
-     if (icr == CAI_KO)
-        goto ERREUR;
-  
-
-/*** Initialisation des caracteristiques des donnees Colormap ***/
-   
-     strcpy(mot_cle,"COLORMAP");
-     mot_cle[8]='\0';
-     nb_lig=3;
-     nb_col=256;
-     type = CAI_ENTIER4;
-     taille_cell= sizeof (int);
-
-/*** Ecriture des donnees de Colormap ***/
-
-     icr = cai_ajouteDA(fd,mot_cle,type,nb_lig,
-			nb_col,taille_cell,fdima->TABCOLOR);
-     if (icr == CAI_KO)
-        goto ERREUR;
-  
-/*** Fermeture du fichier de Donnees Auxilliaires ***/
-     icr = cai_closeDA(fd);
-   }
-   return (CAI_OK);
-
-ERREUR:
-   return(CAI_KO);
-}
-/*
-	Fin de l'operation cai_ecriture_colormap
-*/
-
diff --git a/Utilities/CAI/cai_dll/src/cai_arcinfo.c b/Utilities/CAI/cai_dll/src/cai_arcinfo.c
deleted file mode 100755
index 0f33a0b6ea..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_arcinfo.c
+++ /dev/null
@@ -1,1402 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_arcinfo.c                                                 */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format arcinfo version 7.4 et superieure          */ 
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CISI)                                   */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    fevrier 1995                                        */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V2                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-
-
-# include <stdio.h>
-# include <string.h>
-# include <sys/types.h>
-#include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-
-#define _CAI_IMAGE
-# include "cai_image.h"
-
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header: cai_arcinfo.c,v 1.5 00/11/29 11:02:59 cmf Exp $";
-
-
-extern char *getenv();
-
-static void invert_oct();
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_arcinfo                                      */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images au format arcinfo                */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_ima_arcinfo(repert,tab_ima)         */
-/* -----------------                                                         */
-/*                                                                           */
-/*     repert       (E) (char *)   : repertoire a explorer		     */
-/*     tab_ima      (S) (char ***) : pointeur sur tableau des images listees */
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_ima_arcinfo   (S) (int)     : = -1 repertoire inexistant    */                                    /*					       = > 0 nombre d'images listees */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-int cai_liste_ima_arcinfo (repert,
-		           tab_ima)
-
-char *repert;
-char ***tab_ima;
-
-{
-   DIR *dirp;		/* pointeur sur structure ouverture repertoire */
-   struct dirent *dp;   /* structure resultat de la fonction readdir   */
-   char *pch0,*pch1;    /* pointeurs sur chaine de caracteres          */
-   char *pch2,*pch3;    /* pointeurs sur chaine de caracteres          */
-   char car;            /* variable de travail                         */  
-   int nb_ima;          /* nombre d'images arcinfo identifiees         */
-   int i;               /* indice de boucle                            */
- 
-
-/*........................................
-   INITIALISATION et ouverture du repertoire choisi
-  .........................................*/
-   nb_ima=0;
-
-   dirp=opendir(repert);
-
-   if(dirp!=NULL)
-   {
-/*......................................
-
-   premiere passe pour comptabiliser les images du format donne
-
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE ARCINFO
-      (EXTENSION =.lan ou .gis)
-     ..........................................*/
-
-   while((dp=readdir(dirp))!=NULL)
-   {
-
-     car='.';
-     pch0=strrchr(dp->d_name,car);
-     if (pch0 != NULL)
-     {
-       car='g';
-       pch1=strrchr(dp->d_name,car);
-       if ((pch1 != NULL)&&(pch1==pch0+1))
-       {
-         car='i';
-         pch2=strrchr(dp->d_name,car);
-         if ((pch2 != NULL)&&(pch2==pch1+1))
-         {
-           car='s';
-           pch3=strrchr(dp->d_name,car);
-           if ((pch3 != NULL)&&(pch3==pch2+1))
-           {
-              *pch0='\0';
-              *pch1=' ';
-	      *pch2=' ';
-              *pch3=' ';
-	      nb_ima=nb_ima+1;
-           }
-         }
-       }
-       else
-       {
-         car='l';
-         pch1=strrchr(dp->d_name,car);
-         if ((pch1 != NULL)&&(pch1==pch0+1))
-         {
-           car='a';
-           pch2=strrchr(dp->d_name,car);
-           if ((pch2 != NULL)&&(pch2==pch1+1))
-           {
-             car='n';
-             pch3=strrchr(dp->d_name,car);
-             if ((pch3 != NULL)&&(pch3==pch2+1))
-             {
-                *pch0='\0';
-                *pch1=' ';
-	        *pch2=' ';
-                *pch3=' ';
-	        nb_ima=nb_ima+1;
-             }
-           }
-         }
-       }
-     }
-   }
-
-    (void)closedir(dirp);
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES DU FORMAT ARCINFO
-     ......................................*/
-    *tab_ima = (char **) calloc(nb_ima,sizeof(char *));
-    for (i=0;i<nb_ima;i=i+1)
-      (*tab_ima)[i]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE ARCINFO
-       (EXTENSION =.lan ou .gis)
-   SI C`EST LE CAS,STOCKAGE DANS LA LISTE
-   ..........................................*/
-   dirp=opendir(repert);
-
-   nb_ima=0;
- 
-   while((dp=readdir(dirp))!=NULL)
-   {
-
-     car='.';
-     pch0=strrchr(dp->d_name,car);
-     if (pch0 != NULL)
-     {
-       car='g';
-       pch1=strrchr(dp->d_name,car);
-       if ((pch1 != NULL)&&(pch1==pch0+1))
-       {
-         car='i';
-         pch2=strrchr(dp->d_name,car);
-         if ((pch2 != NULL)&&(pch2==pch1+1))
-         {
-           car='s';
-           pch3=strrchr(dp->d_name,car);
-           if ((pch3 != NULL)&&(pch3==pch2+1))
-           {
-              *pch0='\0';
-              *pch1=' ';
-	      *pch2=' ';
-              *pch3=' ';
-              strcpy((*tab_ima)[nb_ima],dp->d_name);
-	      nb_ima=nb_ima+1;
-           }
-         }
-       }
-       else
-       {
-         car='l';
-         pch1=strrchr(dp->d_name,car);
-         if ((pch1 != NULL)&&(pch1==pch0+1))
-         {
-           car='a';
-           pch2=strrchr(dp->d_name,car);
-           if ((pch2 != NULL)&&(pch2==pch1+1))
-           {
-             car='n';
-             pch3=strrchr(dp->d_name,car);
-             if ((pch3 != NULL)&&(pch3==pch2+1))
-             {
-                *pch0='\0';
-                *pch1=' ';
-	        *pch2=' ';
-                *pch3=' ';
-                strcpy((*tab_ima)[nb_ima],dp->d_name);
-	        nb_ima=nb_ima+1;
-             }
-           }
-         }
-       }
-     }
-   }
-
-    (void)closedir(dirp);
-
-   }
-   else
-   {
-     /* Erreur : Repertoire inexistant */
-      nb_ima=-1;
-   }
-
-    return(nb_ima);
-
-}
-/* Fin de l'operation cai_liste_ima_arcinfo
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_arcinfo                                  */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image au format arcinfo   */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_lecture_arcinfo(nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_arcinfo (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_lecture_arcinfo(repert,
-				     nom_image,
-				     nb_can,
-				     nboct_pix,
-				     nb_col,
-				     nb_lig)
-
-char *repert;
-char *nom_image;
-int  *nb_can;
-int  *nboct_pix;
-int  *nb_col;
-int  *nb_lig;
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   short ncan;			/* nombre de canaux dans le fichier en-tete */
-   char *deb,*deb1;		/* pointeurs sur chaine de caracteres       */
-   char car[5];			/* indice du canal traite     		    */
-   char entete[6];		/* HEADER ou HEAD74 lu dans l'entete        */
-   int i,num;			/* indices				    */
-   short ipack;                 /* variables de travail                     */
-   int lg,col;                  /* variables de travail                     */
-
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-
-   *nb_lig=0;
-
-   *nb_col=0;
-
-   *nboct_pix=0;
- 
-   iret=1;
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*.................................................
-   Constituion du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if (strlen(repert)!= 0)
-   {
-     sscanf(repert,"%s",nom_fic);
-     strcat(nom_fic,"/");
-     strcat(nom_fic,nom_image);
-     strcat(nom_fic,".lan");
-     nom_fic[strlen(repert)+1+strlen(nom_image)+4]='\0';
-   }
-   else
-   {
-      sscanf(nom_image,"%s",nom_fic);
-      strcat(nom_fic,".lan"); 
-      nom_fic[strlen(nom_image)+4]='\0';
-   }
-
-/*........................
-   Ouverture du fichier entete avec l'extension .lan
-  ..........................................*/
-   fic_in=fopen(nom_fic,"r");
-   if (fic_in==NULL)
-   {
-/*......................................................
-    Test sur l'existence du fichier avec l'extension .gis
-  .......................................................*/
-
-     strncpy(&nom_fic[strlen(nom_fic)-4],".gis",4);
-
-     fic_in = fopen(nom_fic,"r");
-     if (fic_in == NULL)
-     {
-        iret=0;
-        strcpy(CAI_ERREUR,"Erreur ouverture fichier entete ARCINFO");
-      }
-    }
-    if (iret!=0)
-    {
-	 
-
-	/*-------------------------------------------
-          Verification de l'entete
-	  -------------------------------------------*/
-	  fread(entete,6,1,fic_in);
-           if (strncmp(entete,"HEAD74",6)!=0)
-          {
- 	     iret = 0;
-	     strcpy(CAI_ERREUR,"Version autre que 7.4 non traitee");
-             goto ERREUR;
-          }
-      
-
-
-	/*-------------------------------------------
-	  recuperation du nombre d'octets par pixel
-	  -------------------------------------------*/
-	  fread(&ipack,2,1,fic_in);
-          lg=sizeof(ipack)-1;
-	  invert_oct(&ipack,lg);
-	  if (ipack == 0)
-		*nboct_pix = 1;
-	  else if (ipack == 2)
-		*nboct_pix = 2;
-	  else
-	  {
-		iret = 0;
-		strcpy(CAI_ERREUR,"Erreur : les donnees image doivent etre codees sur 8 ou 16 octets");
-             goto ERREUR;
-
-	  }
-
-	/*-------------------------------------------
-	  recuperation du nombre de canaux
-	  -------------------------------------------*/
-	  fread(&ncan,2,1,fic_in);
-          lg=sizeof(ncan)-1;
-	  invert_oct(&ncan,lg);
-	  *nb_can = (int) ncan;
-
-	/*-------------------------------------------
-          positionnement sur le nombre de colonnes
-	  -------------------------------------------*/
-	  fseek(fic_in,6,1);
-
-	/*-------------------------------------------
-	  recuperation du nombre de colonnes
-	  -------------------------------------------*/
-	  fread(nb_col,4,1,fic_in);
-	  lg = sizeof(*nb_col)-1;
-	  invert_oct(nb_col,lg);
-	  col=*nb_col;
-
-	/*-------------------------------------------
-	  recuperation du nombre de lignes
-	  -------------------------------------------*/
-	  fread(nb_lig,4,1,fic_in);
-	  lg = sizeof(*nb_lig)-1;
-	  invert_oct(nb_lig,lg);
-
-	/*-------------------------------------------
-	  Fermeture du fichier
-	  -------------------------------------------*/
-          fclose(fic_in);
-    }
-   if (iret !=0)
-   {
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-    if (*nb_can == 1)
-		strcpy(car,".gis");
-    else
-		strcpy(car,".lan");
- 
-     deb = image1->NOM_FIC_CAN;
-     deb1= image1->NOM_UTIL_CAN;
-
-     for (i=0;i<*nb_can;i=i+1)
-     {
-       num=open(nom_fic,O_RDONLY,0);
-       if (num!= -1)
-       {
-           sscanf(nom_image,"%s",deb);
-           strcat(deb,car);
-  	   deb=deb+100;
-           sscanf(nom_image,"%s",deb1);
-           strcat(deb1,car);
-           deb1=deb1+100;
-           image1->ACCES_CANAL_INT[i]=num;
-           image1->POS_OCTET[i]=128+(i*col*(*nboct_pix));
-	 }
-       
-        }
-     }
-
-    if (iret == 0)
-    {
-	return (NULL);
-     }
-    else
-    {
-      image1->NB_BITS_PIX=*nboct_pix;
-      return(image1);
-     }
-ERREUR:
-
-   return (NULL);
-
-}
-/* 
-   Fin de l'operation cai_ouvre_lecture_arcinfo
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_arcinfo                                 */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format arcinfo et de tous les fichiers qui la composent      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_IMAGE *cai_ouvre_creation_arcinfo(nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            label)           */
-/*                                                                           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_arcinfo (S) (CAI_IMAGE *) : =NULL si pb            */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_creation_arcinfo(repert,
-				      nom_image,
-				      nb_can,
-				      nboct_pix,
-				      nb_col,
-				      nb_lig,
-				      label)
-
-char *repert;
-char *nom_image;
-int  *nb_can;
-int  *nboct_pix;
-int  *nb_col;
-int  *nb_lig;
-char *label;
-{
-   FILE *fic;		        /* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   int retour;			/* retour de fonction 			    */ 
-   int i,num;			/* indice 				    */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-
-  short	ipack;			/* indicateur de pack type des donnees      */
-  short	short_tempo;		/* short utilise pour inversion d'octets    */
-  int	int_tempo;		/* entier utilise pour inversion d'octets   */
-  int	lg;			/* longueur de l'entier - 1                 */
-  int taille;                   /* longueur de l'entete a ecrire            */
-  unsigned char *buff;          /* permet d'ecrire l'entete fichier arcinfo */
-
-
-
-
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-   ipack = 0;
- 
-/*.................................................
-   Constitution du nom du fichier et verification qu'il
-   n'existe pas deja
-   pour un canal ,l'extension est .gis, sinon .lan
-  .................................................*/
-   nom_fic[0]='\0';
-   if (strlen(repert)!= 0)
-   {
-      sscanf(repert,"%s",nom_fic);
-      strcat(nom_fic,"/");
-      strcat(nom_fic,nom_image);
-      if (*nb_can == 1)
-       strcat(nom_fic,".gis");
-      else
-       strcat(nom_fic,".lan");
-      nom_fic[strlen(repert)+1+strlen(nom_image)+4]='\0';
-   }
-   else
-   {
-      sscanf(nom_image,"%s",nom_fic);
-      if (*nb_can == 1)
-       strcat(nom_fic,".gis");
-     else
-       strcat(nom_fic,".lan"); 
-      nom_fic[strlen(nom_image)+4]='\0';
-   }
-
-
-   retour = stat ( nom_fic , &buf_stat );
-   if ( retour == 0 )
-   { 
-	sprintf ( CAI_ERREUR , "L'image %s ARCINFO existe \n" , nom_image );
-	goto ERREUR;
-   }
-
-
-/*......................................................
-  Ouverture du fichier en ecriture 
-  Ecriture de l'entete
-  ..........................................................*/
-  fic = fopen(nom_fic,"w");
-  if (fic == NULL)
-  {
-      sprintf(CAI_ERREUR,"Erreur: Creation fichier %s impossible\n",nom_fic);
-      goto ERREUR;
-   }
-   taille=128 + (*nb_can)*(*nb_col)*(*nboct_pix)*(*nb_lig) ;
-
-   buff = (unsigned char *) malloc(taille);
-   if ( fic == NULL )
-   {
-	strcpy ( CAI_ERREUR , "Erreur : probleme d'allocation \n" );
-	unlink(nom_fic);
-	goto ERREUR;
-   }
-
-   memcpy ( buff , "HEAD74" , 6 );
-   if ( *nboct_pix == 1 )
-	ipack = 0;
-   else if ( *nboct_pix == 2 )
-	ipack = 2;
-    memcpy ( &buff[6] , &ipack , 2 );
-
-    short_tempo = (short) (*nb_can);
-    lg = sizeof(short_tempo)-1;
-    invert_oct(&short_tempo,lg);
-    memcpy ( &buff[8] , &short_tempo , 2 );
-
-    for ( i = 10 ; i < 16 ; i++ )
-    {
-	buff[i] = 0;
-     }
-
-    int_tempo = *nb_col;
-    lg = sizeof(int_tempo)-1;
-    invert_oct(&int_tempo,lg);
-    memcpy ( &buff[16] , &int_tempo , 4 );
-
-    int_tempo = *nb_lig;
-    lg = sizeof(int_tempo)-1;
-    invert_oct(&int_tempo,lg);
-    memcpy ( &buff[20] , &int_tempo , 4 );
-
-    for ( i=24 ; i<taille ; i++ )
-    {
-	buff[i] = 0;
-    }
-
-    retour = fwrite ( buff , taille ,1 , fic);
-    if ( retour == 0 )
-    {
-      sprintf ( CAI_ERREUR , "Erreur : ecriture impossible dans fichier %s\n" ,nom_fic );
-	unlink(nom_fic);
-	goto ERREUR;
-     }
-
-     free (buff );
-     fclose(fic);
-
-/*...........................................
-   Ouverture du fichier pour ecriture radiometrie
-   ...............................................*/
-    num = open(nom_fic,O_RDWR,0);
-    if (num == -1)
-    {
-     sprintf(CAI_ERREUR,"Erreur: Creation %s impossible\n",nom_fic);
-     goto ERREUR;
-    }
-    for (i=0;i<*nb_can;i=i+1)
-    {
-      image1->ACCES_CANAL_INT[i]=num;
-      image1->POS_OCTET[i]=128;
-    }
-  
-  return (image1);
-
-ERREUR :
-  return(NULL);
-}
-  
-/* 
-  Fin de l'operation cai_ouvre_creation_arcinfo
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_arcinfo                                  */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image Arcinfo              */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_lecture_canal_arcinfo(image1, canal,    */       		      /* ------------------                        premiere_ligne,                 */
-/*                                           premiere_colonne,               */
-/*                                           nombre_lignes_lire ,            */
-/*                                           nombre_colonnes_lire,           */
-/*                                           pas_ligne ,pas_colonne,         */
-/*                 		             data_image )                    */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (int) : numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal_arcinfo (S) (CAI_OK_KO) : = CAI_KO si pb            */
-/*                                                 = CAI_OK si OK            */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_lecture_canal_arcinfo(image1 ,  
-                                    canal ,           
-    		                    premiere_ligne  ,   
-     		                    premiere_colonne,
-                                    nombre_lignes_lire ,
-                                    nombre_colonnes_lire,
-                                    pas_ligne ,          
-                                    pas_colonne,
-		                   data_image )        
-CAI_IMAGE *image1;
-int *canal ;          
-int *premiere_ligne  ;   
-int *premiere_colonne   ;
-int *nombre_lignes_lire ;
-int *nombre_colonnes_lire;
-int *pas_ligne ;                              
-int *pas_colonne;        
-unsigned char *data_image;
-
-{
-
- int   num,i,j,k,n;         /* variables de travail                          */
- int pt_oct;		    /* position courante dans le fichier image       */
- int no_oct;                /* numero du premier octet a lire                */
- int iret;                  /* indicateur d'erreur                           */
- int lig;                   /* indice de boucle sur les lignes               */
- int   oct_pix;             /* nb octets par pixels                          */
- long  nb_oct;              /* nb oct =1er octet a lire - position courante  */
- long  oct_lig;             /* nb oct. par ligne en considerant taille pixel */
- unsigned char *buf_lec;    /* buffer lecture d'une  ligne                   */
- unsigned char *deb,*pch;   /* pointeur chaine pour transfert  buffer sortie */
-
-
-/*...........................
-  Initialisations diverses
-  ..........................*/
-   iret=CAI_OK;
-   num=image1->ACCES_CANAL_INT[*canal-1];
-   oct_pix=image1->NBOCT_PIX;
-   oct_lig=oct_pix*image1->NB_COL;
-
-/*..............................................
-        allocation de memoire pour lire une ligne image
- ............................................. */
-
-   buf_lec = (unsigned char *) malloc(oct_lig);
-   if (buf_lec == NULL)
-   {
-      iret=CAI_KO;
-      strcpy(CAI_ERREUR,"Probleme allocation memoire");
-   }
-   else
-   {
-/*....................
-        Initialisation
-  ......................*/
-        lig=*premiere_ligne;
-        i=1;
-        pch=data_image;
-
-/*.....................
-         Pour chaque ligne a lire
-  .......................................*/
-        while ((i <= *nombre_lignes_lire)&&(iret==CAI_OK))
-        {  
-/*............................................
-	    Recherche de la position courante dans le fichier
-  ............................................*/
-            pt_oct=lseek(num,0L,1);
-
-/*................................
-            Calcul du numero du 1er octet a lire
-  ....................................*/
-               
-	   no_oct=image1->POS_OCTET[*canal-1]+
-	          (lig-1)*image1->NB_COL*oct_pix*image1->NB_CANAUX;
-
-
-/*..................................
-            Saut d'octets pour etre positionne sur la ligne a lire
-  .......................................*/
-            nb_oct=(long)(no_oct-pt_oct);
-            lseek(num,nb_oct,1);
-
-/*...........................................
-            lecture d'une ligne image
-  ................................................*/
-            n=read(num,buf_lec,oct_lig);
-
-            if (n<=0)
-            {
-             iret=CAI_KO;
-             strcpy(CAI_ERREUR,"Erreur lecture donnee image ARCINFO");
-            }
-            else
-            { 
-/*......................................
-             Sauvegarde des donnees lues entenant compte du pas 
-             d'echantillonnage en colonne
-  ........................................*/           
-             deb=buf_lec+(*premiere_colonne-1)*oct_pix;
-             j=1;
-             while (j <= *nombre_colonnes_lire)
-	     {  
-               for (k=0;k<oct_pix;k=k+1)
-                {
-                  *(pch+k)=*(deb+k);
-                 }
-              j=j+1;
-              pch=pch+oct_pix;
-              deb=deb+(*pas_colonne*oct_pix);
-             }   
-             
-            }
-          i=i+1;
-          lig=lig+(*pas_ligne);
-
-        }        
-
-	free(buf_lec);
-   }
-   return(iret);
-}
-/*
-  Fin de l'operation cai_lecture_canal_arcinfo
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal_arcinfo                                 */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un canal d'une image arcinfo              */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ecriture_canal_arcinfo(image1, canal,   */       		      /* ------------------                                 premiere_ligne,        */
-/*                                                    nombre_lignes_ecrire,  */
-/*                                                    nombre_colonnes_ecrire,*/
-/*                 		                      data_image )           */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal                 (E) (int) : numero du canal a ecrire            */
-/*     premiere_ligne        (E) (int) : premiere ligne a ecrire ds l'image  */
-/*     nombre_lignes_ecrire  (E) (int) : nombre de lignes a ecrire           */
-/*     nombre_colonnes_ecrire(E) (int) : nombre de lignes a ecrire           */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels ecris alloue et   */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_ecriture_canal_arcinfo    (S) (CAI_OK_KO) : = CAI_KO si pb        */
-/*                                                     = CAI_OK si OK        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_ecriture_canal_arcinfo (image1 ,  
-                                      canal ,           
-    		                      premiere_ligne  ,   
-                                      nombre_lignes_ecrire ,
-                                      nombre_colonnes_ecrire,
-		                      data_image )        
-CAI_IMAGE *image1;
-int *canal ;          
-int *premiere_ligne  ;   
-int *nombre_lignes_ecrire ;
-int *nombre_colonnes_ecrire;
-unsigned char *data_image;
-
-{
-long	position_first_lig;	/* position de la 1ere ligne a ecrire    */
-long	position_courante;	/* position courante dans le fichier     */
-long	deplacement;		/* deplacement a effectuer               */
-int	i_ligne;		/* compteur de lignes                    */
-unsigned char *buff_lig;	/* tableau contenant une ligne a ecrire  */
-int	cr_write;		/* code retour de write                  */
-int num;                        /* descripteur de fichier                */
-int nboct_pix;			/* nombre d'octets par pixel             */
-int nb_canaux;			/* nombre de canaux de l'image totale    */
-
-/* ................
-   Initialisations 
-  .................*/
-
-i_ligne = 0;
-num = image1->ACCES_CANAL_INT[*canal-1];
-nboct_pix = image1->NBOCT_PIX;
-nb_canaux = image1->NB_CANAUX;
-position_first_lig = 0;
-position_courante = 0;
-deplacement = 0;
-
-/********************************************************/
-/* Calcul de la position de la premiere ligne a ecrire 	*/ 
-/********************************************************/
-
-position_first_lig = (long) ( image1->POS_OCTET[*canal-1] + 
-     ((*canal) - 1) * (*nombre_colonnes_ecrire) * nboct_pix
- + (*premiere_ligne - 1) * (*nombre_colonnes_ecrire) * nboct_pix * nb_canaux );
-
-
-/********************************************************/
-/* Recuperation de la position courante			*/
-/********************************************************/
-
-position_courante = lseek ( num , 0L , 1 );
-
-
-/********************************************************/
-/* Calcul du deplacement jusqu'a la 1ere ligne a ecrire	*/
-/********************************************************/
-
-deplacement = position_first_lig - position_courante;
-
-
-/********************************************************/
-/* TANT QUE il y a des lignes a ecrire                 	*/
-/********************************************************/
-while (i_ligne < (*nombre_lignes_ecrire))
-{
-
-/********************************************************/
-/*	extraction de la ligne du tableau 		*/
-/********************************************************/
-
-	buff_lig = data_image + (*nombre_colonnes_ecrire) * nboct_pix * i_ligne;
-
-/********************************************************/
-/*	deplacement jusqu'a la ligne a ecrire		*/
-/********************************************************/
-
-	lseek ( num , deplacement , 1 ); 
-
-/********************************************************/
-/*	ecriture de la ligne				*/
-/********************************************************/
-
-	cr_write = write ( num , buff_lig , (*nombre_colonnes_ecrire)*nboct_pix );
-	if ( cr_write != (*nombre_colonnes_ecrire)*nboct_pix )
-	{
-		strcpy ( CAI_ERREUR , "Erreur ecriture canal image arcinfo\n" );
-		goto ERREUR;
-	}
- 
-/********************************************************/
-/*	mise a jour du deplacement jusqu'a la ligne	*/
-/*	suivante                                   	*/
-/********************************************************/
-
-	deplacement = ( nb_canaux - 1 ) * (*nombre_colonnes_ecrire)*nboct_pix;
-
-/********************************************************/
-/*	incrementation du nombre de lignes		*/
-/********************************************************/
-
-	i_ligne++;
-
-/********************************************************/
-/* FIN TANT QUE						*/
-/********************************************************/
-}
-
-
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-/* 
-  Fin de l'operation cai_ecriture_canal_arcinfo
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_arcinfo                                          */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format arcinfo et de       */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_arcinfo(image1)                   */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_arcinfo    (S) (CAI_OK_KO) :   = CAI_KO si pb               */
-/*                                              = CAI_OK si OK               */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO  cai_ferme_arcinfo (image1)
-
-CAI_IMAGE *image1;
-
-{
-
- int iret;    /* code retour de l'operation      */
- int i_can;   /* indice du canal a fermer        */
- int num;     /* descripteur du fichier a fermer */
-
- iret=CAI_OK;
-/*.............................................
-   Fermeture du fichier qui contient tous les canaux
-  .............................................*/
-  num=image1->ACCES_CANAL_INT[0];
-  close(num);
-
-
-  return (iret);
-}
-
-/*
-  Fin de l'operation cai_ferme_arcinfo
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_arcinfo                                       */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stocke en arcinfo et de     */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_dest_ima_arcinfo(format,nom_ima)        */       		      /* ------------------                                                        */
-/*     format       (E) (char *) : format de l'image a detruire              */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_dest_ima_arcinfo (S) (CAI_OK_KO) : = CAI_KO si pb                 */
-/*                                            = CAI_OK si OK                 */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO cai_dest_ima_arcinfo ( repertoire , 
-                                 nom_ima )
-
-char	*repertoire;		/* repertoire de stockage de l'image */
-char	*nom_ima;		/* nom de l'image */
-
-{
-char	nom_fic_ima[1024];	/* nom du fichier entete a detruire */
-char    nom_ima_complet[1024];  /* repertoire + nom de l'image */
-int	cr_stat;		/* code retour de fonction status de fichier */
-struct stat buf_stat;		/* structure decrivant status de fichier */ 
-
-
-/************************************************/
-/* Constitution du nom du fichier       	*/
-/************************************************/
-if (strlen(repertoire) != 0)
-{
- strcpy ( nom_ima_complet , repertoire );
- strcat ( nom_ima_complet, "/" );
- strcat ( nom_ima_complet , nom_ima );
-}
-else
-{
- strcpy ( nom_ima_complet , nom_ima );
-}
- strcpy(nom_fic_ima , nom_ima_complet);
- strcat ( nom_fic_ima , ".gis" );
- nom_fic_ima[strlen(nom_ima_complet)+4]='\0';
- 
-/* le nombre de canaux etant inconnu, on construit */
-/* d'abord le nom d'un fichier image avec un seul  */
-/* canal et on teste son existence; si un tel      */
-/* fichier n'existe pas, on construit le nom d'un  */
-/* fichier image avec plusieurs canaux             */
-
-cr_stat = stat ( nom_fic_ima , &buf_stat );
-if ( cr_stat != 0 )
-{
-	strncpy ( &nom_fic_ima[strlen(nom_fic_ima)-4] , ".lan" , 4 );
-	cr_stat = stat ( nom_fic_ima , &buf_stat );
-	if ( cr_stat == 0 )
-		unlink ( nom_fic_ima );
-}
-else
-{
-	unlink ( nom_fic_ima );
-}
-
- 
-return (CAI_OK);
-
-}
-/*
- Fin de l'operation cai_dest_ima_arcinfo
-*/
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS INTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    invert_oct                                                 */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    Inversion des octets poids forts,poids faibles                  */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      void invert_oct(s,nboct)                          */
-/* -----------------                                                         */
-/*                                                                           */
-/*     s              (E/S) (char *) : chaine a inverser                     */
-/*     nboct          (E)   (int)    : longueur de la chaine                 */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-static void invert_oct ( s , nboct )
-char *s;
-int nboct;
-{
-	int c;
-	char *t;
-
-	for ( t=s+nboct ; s<t ; s++,t-- )
-	{
-		c=*s;
-		*s=*t;
-		*t=c;
-	}
-}
-/* Fin de l'operation invert_oct */
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_modifie_arcinfo                                  */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image au format arcinfo   */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_modifie_arcinfo(nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_modifie_arcinfo (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_modifie_arcinfo(repert,
-				     nom_image,
-				     nb_can,
-				     nboct_pix,
-				     nb_col,
-				     nb_lig)
-
-char *repert;
-char *nom_image;
-int  *nb_can;
-int  *nboct_pix;
-int  *nb_col;
-int  *nb_lig;
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   short ncan;			/* nombre de canaux dans le fichier en-tete */
-   char *deb,*deb1;		/* pointeurs sur chaine de caracteres       */
-   char car[5];			/* indice du canal traite     		    */
-   char entete[6];		/* HEADER ou HEAD74 lu dans l'entete        */
-   int i,num;			/* indices				    */
-   short ipack;                 /* variables de travail                     */
-   int lg,col;                  /* variables de travail                     */
-
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-
-   *nb_lig=0;
-
-   *nb_col=0;
-
-   *nboct_pix=0;
- 
-   iret=1;
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*.................................................
-   Constituion du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if (strlen(repert)!= 0)
-   {
-     sscanf(repert,"%s",nom_fic);
-     strcat(nom_fic,"/");
-     strcat(nom_fic,nom_image);
-     strcat(nom_fic,".lan");
-     nom_fic[strlen(repert)+1+strlen(nom_image)+4]='\0';
-   }
-   else
-   {
-      sscanf(nom_image,"%s",nom_fic);
-      strcat(nom_fic,".lan"); 
-      nom_fic[strlen(nom_image)+4]='\0';
-   }
-
-/*........................
-   Ouverture du fichier entete avec l'extension .lan
-  ..........................................*/
-   fic_in=fopen(nom_fic,"r");
-   if (fic_in==NULL)
-   {
-/*......................................................
-    Test sur l'existence du fichier avec l'extension .gis
-  .......................................................*/
-
-     strncpy(&nom_fic[strlen(nom_fic)-4],".gis",4);
-
-     fic_in = fopen(nom_fic,"r");
-     if (fic_in == NULL)
-     {
-        iret=0;
-        strcpy(CAI_ERREUR,"Erreur ouverture fichier entete ARCINFO");
-      }
-    }
-    if (iret!=0)
-    {
-	 
-
-	/*-------------------------------------------
-          Verification de l'entete
-	  -------------------------------------------*/
-	  fread(entete,6,1,fic_in);
-           if (strncmp(entete,"HEAD74",6)!=0)
-          {
- 	     iret = 0;
-	     strcpy(CAI_ERREUR,"Version autre que 7.4 non traitee");
-             goto ERREUR;
-          }
-      
-
-
-	/*-------------------------------------------
-	  recuperation du nombre d'octets par pixel
-	  -------------------------------------------*/
-	  fread(&ipack,2,1,fic_in);
-          lg=sizeof(ipack)-1;
-	  invert_oct(&ipack,lg);
-	  if (ipack == 0)
-		*nboct_pix = 1;
-	  else if (ipack == 2)
-		*nboct_pix = 2;
-	  else
-	  {
-		iret = 0;
-		strcpy(CAI_ERREUR,
-	"Erreur : les donnees image doivent etre codees sur 8 ou 16 octets");
-             goto ERREUR;
-
-	  }
-
-	/*-------------------------------------------
-	  recuperation du nombre de canaux
-	  -------------------------------------------*/
-	  fread(&ncan,2,1,fic_in);
-          lg=sizeof(ncan)-1;
-	  invert_oct(&ncan,lg);
-	  *nb_can = (int) ncan;
-
-	/*-------------------------------------------
-          positionnement sur le nombre de colonnes
-	  -------------------------------------------*/
-	  fseek(fic_in,6,1);
-
-	/*-------------------------------------------
-	  recuperation du nombre de colonnes
-	  -------------------------------------------*/
-	  fread(nb_col,4,1,fic_in);
-	  lg = sizeof(*nb_col)-1;
-	  invert_oct(nb_col,lg);
-	  col=*nb_col;
-
-	/*-------------------------------------------
-	  recuperation du nombre de lignes
-	  -------------------------------------------*/
-	  fread(nb_lig,4,1,fic_in);
-	  lg = sizeof(*nb_lig)-1;
-	  invert_oct(nb_lig,lg);
-
-	/*-------------------------------------------
-	  Fermeture du fichier
-	  -------------------------------------------*/
-          fclose(fic_in);
-    }
-   if (iret !=0)
-   {
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-    if (*nb_can == 1)
-		strcpy(car,".gis");
-    else
-		strcpy(car,".lan");
- 
-     deb = image1->NOM_FIC_CAN;
-     deb1= image1->NOM_UTIL_CAN;
-
-     for (i=0;i<*nb_can;i=i+1)
-     {
-       num=open(nom_fic,O_RDWR,0);
-       if (num!= -1)
-       {
-           sscanf(nom_image,"%s",deb);
-           strcat(deb,car);
-  	   deb=deb+100;
-           sscanf(nom_image,"%s",deb1);
-           strcat(deb1,car);
-           deb1=deb1+100;
-           image1->ACCES_CANAL_INT[i]=num;
-           image1->POS_OCTET[i]=128+(i*col*(*nboct_pix));
-	 }
-       
-        }
-     }
-
-    if (iret == 0)
-    {
-	return (NULL);
-     }
-    else
-    {
-      image1->NB_BITS_PIX=*nboct_pix;
-      return(image1);
-     }
-ERREUR:
-
-   return (NULL);
-
-}
-/* 
-   Fin de l'operation cai_ouvre_modifie_arcinfo
-*/
diff --git a/Utilities/CAI/cai_dll/src/cai_atg2.c b/Utilities/CAI/cai_dll/src/cai_atg2.c
deleted file mode 100755
index f73661a1b3..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_atg2.c
+++ /dev/null
@@ -1,2170 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_atg2.c                                                    */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format atg2                                       */ 
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CISI)                                   */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    fevrier 1995                                        */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V2                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-
-
-# include <stdio.h>
-# include <string.h>
-# include <sys/types.h>
-#include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-
-#define _CAI_IMAGE
-# include "cai_image.h"
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header: cai_atg2.c,v 1.5 98/10/19 10:29:06 cmf Exp $";
-
-
-extern char *getenv();
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_atg2                                         */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images au format atg2                   */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_ima_atg2(repert,tab_ima)            */
-/* -----------------                                                         */
-/*                                                                           */
-/*     repert        (E) (char *)   : repertoire a explorer		     */
-/*     tab_ima       (S) (char ***) : pointeur sur tableau des images listees*/
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_ima_atg2   (S) (int)     : = -1 repertoire inexistant       */                                    /*					    = > 0 nombre d'images listees    */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-int cai_liste_ima_atg2(repert,
-		       tab_ima)
-
-char *repert;
-char ***tab_ima;
-
-{
-  DIR *dirp;		     /* pointeur sur structure ouverture repertoire */
-
-struct dirent *dp;   /* structure resultat de la fonction readdir   */
-struct dirent *cr_readdir; /* structure resultat de la fonction readdir   */
-
-  int nb_ima;         	     /* nombre d'images atg2 identifiees            */
-  DIR *ptr_sub_dir;          /* pointeur sur struct. ouverture repert. ima  */
-  char *str_sub_dir;         /* repertoire image atg2 a ouvrir              */
-  int cr_stat;               /* compte-rendu de la fonction stat            */
-  struct stat buf_stat;      /* structure retour de la fonction stat        */
-
-  int i;                     /* indice de boucle                            */
-
-   
-
-
-/*........................................
-   INITIALISATION et ouverture du repertoire choisi
-  .........................................*/
-   nb_ima=0;
-   dirp=opendir(repert);
-
-   if(dirp!=NULL)
-   {
-
-/*......................................
-   premiere passe pour comptabiliser les images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UN REPERTOIRE
-      SI C'EST  LE CAS : 
-        OUVERTURE DU REPERTOIRE
-	VERIFICATION QU'IL CONTIENT UN FICHIER D'EXTENSION .gen 
-    ..........................................*/
-
-   while((dp=readdir(dirp))!=NULL)
-   {
-
-      /* ne se traite pas lui-meme ni le repertoire pere */
-      if ((strcmp(dp->d_name,".")==0) || (strcmp(dp->d_name,"..")==0))
-         continue;
-
-      /* construction du nom complet de l'objet */
-      str_sub_dir = (char *) malloc(strlen(repert)+1+strlen(dp->d_name)+1);
-      if (str_sub_dir == NULL)
-      {
-        /* Erreur : probleme d'allocation memoire */
-          nb_ima=-3;
-          return(nb_ima);
-      }
-
-      strcpy(str_sub_dir,repert);
-      strcat(str_sub_dir,"/");
-      strcat(str_sub_dir,dp->d_name);
-      str_sub_dir[strlen(repert)+1+strlen(dp->d_name)]='\0';
-
-      /* on verifie que l'objet est un repertoire */
-       cr_stat = stat(str_sub_dir,&buf_stat);
-
-       if  ((cr_stat == -1) || ((buf_stat.st_mode & S_IFMT) != S_IFDIR))
-       {
-
-        /* acces impossible a l'objet ou l'objet n'est pas un repertoire */
-          free(str_sub_dir);
-          continue;
-       }
-
-       /* on verifie que l'objet est un repertoire ATG2 */
-       /* c'est a dire contenant un fichier ".gen"      */
-
-       ptr_sub_dir = opendir(str_sub_dir);
-       if(ptr_sub_dir!=NULL)
-       {   
-         while ((cr_readdir=readdir(ptr_sub_dir)) != NULL)
-         {
-
-          if (strcmp(".gen",cr_readdir->d_name) == 0)
-          {
-             /* c'est un repertoire ATG2 */
-	      nb_ima=nb_ima+1;
-          }
-         }
-         closedir(ptr_sub_dir);
-        }
-        else
-        {
-
-        /* acces impossible a l'objet  */
-          free(str_sub_dir);
-          continue;
-
-        }
-
-       free(str_sub_dir);
-   }
-   closedir(dirp);
-
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES DU FORMAT ATG2
-     ......................................*/
-    *tab_ima = (char **) calloc(nb_ima,sizeof(char *));
-    for (i=0;i<nb_ima;i=i+1)
-      (*tab_ima)[i]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UN REPERTOIRE
-      SI C'EST  LE CAS : 
-        OUVERTURE DU REPERTOIRE
-	VERIFICATION QU'IL CONTIENT UN FICHIER D'EXTENSION .gen 
-        SI C'EST LE CAS STOCKAGE DE L'IMAGE DANS LA LISTE DES IMAGES ATG2 
-   ..........................................*/
-   dirp=opendir(repert);
-
-   nb_ima=0;
-   while((dp=readdir(dirp))!=NULL)
-   {
-      /* ne se traite pas lui-meme ni le repertoire pere */
-      if ((strcmp(dp->d_name,".")==0) || (strcmp(dp->d_name,"..")==0))
-         continue;
-
-      /* construction du nom complet de l'objet */
-      str_sub_dir = (char *) malloc(strlen(repert)+1+strlen(dp->d_name)+1);
-      if (str_sub_dir == NULL)
-      {
-        /* Erreur : probleme d'allocation memoire */
-          nb_ima=-3;
-          return(nb_ima);
-      }
-
-      strcpy(str_sub_dir,repert);
-      strcat(str_sub_dir,"/");
-      strcat(str_sub_dir,dp->d_name);
-      str_sub_dir[strlen(repert)+1+strlen(dp->d_name)]='\0';
-
-      /* on verifie que l'objet est un repertoire */
-       cr_stat = stat(str_sub_dir,&buf_stat);
-       if  ((cr_stat == -1) || ((buf_stat.st_mode & S_IFMT) != S_IFDIR))
-       {
-
-        /* acces impossible a l'objet ou l'objet n'est pas un repertoire */
-          free(str_sub_dir);
-          continue;
-       }
-
-       /* on verifie que l'objet est un repertoire ATG2 */
-       /* c'est a dire contenant un fichier ".gen"      */
-
-       ptr_sub_dir = opendir(str_sub_dir);
-       if(ptr_sub_dir!=NULL)
-       {  
-         while ((cr_readdir=readdir(ptr_sub_dir)) != NULL)
-         {
-          if (strcmp(".gen",cr_readdir->d_name) == 0)
-          {
-             /* c'est un repertoire ATG2 */
-              strcpy((*tab_ima)[nb_ima],dp->d_name);
-	      nb_ima=nb_ima+1;
-          }
-         }
-         closedir(ptr_sub_dir);
-
-        }
-        else
-        {
-
-        /* acces impossible a l'objet  */
-          free(str_sub_dir);
-          continue;
-
-        }
-
-       free(str_sub_dir);
-   }
-   closedir(dirp);
-
- }
-   else
- {
-   /* Erreur : Repertoire inexistant */
-     nb_ima=-1;
- }
-
-    return(nb_ima);
-
-}
-/* Fin de l'operation cai_liste_ima_atg2
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_atg2                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image au format atg2      */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_lecture_atg2(nom_image,          */
-/*  ---------------- 		                         nb_can,             */
-/*				                         nboct_pix,	     */	
-/*				                         nb_col,             */
-/*				                         nb_lig)             */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_atg2  (S) (CAI_IMAGE *)    : =NULL si pb            */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-typedef struct {
-   char   rty[80];
-   char   rid[80];
-   char   prt[8];
-   char   nam[80];
-   int    str;
-   double lod;
-   double lad;
-   char   uniloa[8];
-   char   mbu[8];
-   int    cov;
-   int    fec;
-   int    poc;
-   int    lic;
-   int    alc;
-   int    sgc;
-   int    zna;
-   double psp;
-   char   imr[4];
-   int    arv;
-   int    brv;
-   double lso;
-   double pso;
-   char   txt[80];
-   int    nul;
-   int    nus;
-   int    nll;
-   int    nls;
-   int    nfl;
-   int    nfc;
-   int    pnc;
-   int    pnl;
-   int    cod;
-   int    rod;
-   int    por;
-   int    pcb;
-   int    pvb;
-   char   bad[80];
-   char   tif[2];
-   char   fmt[8];
-   char   pty[2];
-   int    ofs;
-   double mpl;
-   double mpc;
-   int    rol[100];
-   int    roc[100];
-} Fsro_format_data;
-
-
-CAI_IMAGE *cai_ouvre_lecture_atg2(repert,
-				   nom_image,
-				   nb_can,
-				   nboct_pix,
-				   nb_col,
-				   nb_lig)
-
-char *repert;
-char *nom_image;
-int  *nb_can;
-int  *nboct_pix;
-int  *nb_col;
-int  *nb_lig;
-{
-   int fic;			/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char *deb,*deb1;		/* pointeurs sur chaine de caracteres       */
-   char car[2];			/* indce du canal traite     		    */
-   int num,k,n;		        /* indice 				    */
-   Fsro_format_data fsro;       /* structure decrivant l'entete atg2        */
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
- 
-   *nb_lig=0;
-   *nb_col=0;
-   *nboct_pix=0;
-   *nb_can=0;
- 
-   iret=1;
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
- if (strlen(repert)!= 0)
- {
-   sscanf(repert,"%s",nom_fic);
-   strcat(nom_fic,"/");
-   strcat(nom_fic,nom_image);
-   strcat(nom_fic,"/");
-   strcat(nom_fic,".gen");
-   nom_fic[strlen(repert)+1+strlen(nom_image)+5]='\0';
-  }
- else
- {
-   sscanf(nom_image,"%s",nom_fic);
-   strcat(nom_fic,"/");
-   strcat(nom_fic,".gen");
-   nom_fic[strlen(nom_image)+5]='\0';
-  }
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   num=open(nom_fic,O_RDONLY,0);
-
-   if (num == -1)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur ouverture fichier entete ATG2");
-    }
-   else
-   {
-     
-/*....................................
-       Lecture du fichier entete
-  ............................................*/
-
-          n=read( num , &fsro , sizeof(Fsro_format_data));
-	  if ( n <= 0 )
-	  {
-           sprintf(CAI_ERREUR,"Erreur lecture entete ATG2 %s\n",nom_fic),
-	   iret=0;
-	   return (NULL);
-	  }
-
-/*.........................................
-	  Fermeture du fichier entete ATG2
-  ..........................................*/
-	  close ( num );
-
-/*.........................................
-          Recuperation du nombre d'octets par pixel .
-  ....................................................*/
-	  if (fsro.pvb>16)
-  	  {
-	      iret=0;
-	      sprintf(CAI_ERREUR,"Taille du pixel non traitable %d\n",fsro.pvb);
-	      return (NULL);
-	  }
-	  else
-	  {
-            if ((fsro.pvb%8)==0)
-	       *nboct_pix=fsro.pvb/8;
-            else
-	       *nboct_pix=fsro.pvb/8+1;
-            image1->NB_BITS_PIX = fsro.pvb;
-	  }
-
-/*.........................................
-          Recuperation de la taille d'un pave en lignes
-  ....................................................*/
-	  image1->LIGNES_PAVE=fsro.pnl;
-/*.........................................
-          Recuperation de la taille d'un pave en colonnes
-  ....................................................*/
-	  image1->COLONNES_PAVE=fsro.pnc;
-
-/*.........................................
-          Calcul du nombre de lignes : taille du pave*nombre de pave en ligne
-  ....................................................*/
-	  *nb_lig=fsro.nfl*image1->LIGNES_PAVE;
-/*.........................................
-          Calcul du nombre de colonnes: taille  pave*nombre  pave en colonnes
-  ....................................................*/
-	  *nb_col=fsro.nfc*image1->COLONNES_PAVE;
-/*.........................................................
-         Recuperation du nombre de canaux en fonction du nom des fichiers .gds
-	 1 - test sur l'existence du fichier PAN.gds monochrome
-  ...........................................................*/
-        nom_fic[0]='\0';
-       if (strlen(repert)!= 0)
-       {
-          sscanf(repert,"%s",nom_fic);
-          strcat(nom_fic,"/");
-          strcat(nom_fic,nom_image);
-          strcat(nom_fic,"/PAN.gds");
-          nom_fic[strlen(repert)+1+strlen(nom_image)+8]='\0';
-        }
-        else
-        {
-          sscanf(nom_image,"%s",nom_fic);
-          strcat(nom_fic,"/PAN.gds");
-          nom_fic[strlen(nom_image)+8]='\0';
-        }
-        num=open(nom_fic,O_RDONLY,0);
-        if (num<=0)
-	{
-
-/*	  2 - test sur l'existence du fichier XS1.gds monochrome
-  ...........................................................*/
-
-          nom_fic[0]='\0';
-          if (strlen(repert)!= 0)
-          {
-            sscanf(repert,"%s",nom_fic);
-            strcat(nom_fic,"/");
-            strcat(nom_fic,nom_image);
-            strcat(nom_fic,"/XS1.gds");
-            nom_fic[strlen(repert)+1+strlen(nom_image)+8]='\0';
-          }
-          else
-          {
-            sscanf(nom_image,"%s",nom_fic);
-            strcat(nom_fic,"/XS1.gds");
-            nom_fic[strlen(nom_image)+8]='\0';
-          }
- 
-          fic=open(nom_fic,O_RDONLY,0);
-          if (fic<=0)
-	  {
-	     iret=0;
-	     sprintf(CAI_ERREUR,"Erreur nombre de canaux incorrect ATG2\n");
-	     return (NULL);
-	  }
-	  else
-          {   
-	     close(fic);
-	     *nb_can=3;
-           }
-         }
-        else
-        {
-	  close(num);
-	  *nb_can=1;
-	}
-
-   }
-   if (iret !=0)
-   {
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL et ouverture
-      de ces fichiers
-  .....................................................*/
-  
-     deb = image1->NOM_FIC_CAN;
-     deb1= image1->NOM_UTIL_CAN;
-
-     if (*nb_can==1)
-     {
-	 sscanf(nom_image,"%s",deb);
-	 strcat(deb,"/PAN.gds");
-	 sscanf(nom_image,"%s",deb1);
-	 strcat(deb1,"/PAN.gds");
-         nom_fic[0]='\0';
-         if (strlen(repert)!=0)
-         {
-          sscanf(repert,"%s",nom_fic);
-          strcat(nom_fic,"/");
-          strcat(nom_fic,nom_image);
-          strcat(nom_fic,"/PAN");
-          strcat(nom_fic,car);
-          strcat(nom_fic,".gds");
-          nom_fic[strlen(repert)+1+strlen(nom_image)+8]='\0';
-         }
-         else
-         {
-          sscanf(nom_image,"%s",nom_fic);
-          strcat(nom_fic,"/PAN");
-          strcat(nom_fic,car);
-          strcat(nom_fic,".gds");
-          nom_fic[strlen(nom_image)+8]='\0';
-         }
-         fic=open(nom_fic,O_RDONLY,0);
-         image1->ACCES_CANAL_INT[0]=fic;
-         image1->POS_OCTET[0]=0;
-
-        
-     }
-     else
-     {
-
-       k=1;    
-       while((k<=*nb_can)&&(k<CAI_NB_MAX_CAN))
-       {
-          sprintf(car,"%d",k);
-          sscanf(nom_image,"%s",deb);
-          strcat(deb,"/XS");
-          strcat(deb,car);
-          strcat(deb,".gds");
-          deb=deb+100;
-          sscanf(nom_image,"%s",deb1);
-          strcat(deb1,".XS");
-          strcat(deb1,car);
-          strcat(deb1,".gds");
-          deb1=deb1+100;
-          nom_fic[0]='\0';
-         if (strlen(repert)!=0)
-         {
-          sscanf(repert,"%s",nom_fic);
-          strcat(nom_fic,"/");
-          strcat(nom_fic,nom_image);
-          strcat(nom_fic,"/XS");
-          strcat(nom_fic,car);
-          strcat(nom_fic,".gds");
-          nom_fic[strlen(repert)+1+strlen(nom_image)+8]='\0';
-         }
-         else
-         {
-          sscanf(nom_image,"%s",nom_fic);
-          strcat(nom_fic,"/XS");
-          strcat(nom_fic,car);
-          strcat(nom_fic,".gds");
-          nom_fic[strlen(nom_image)+8]='\0';
-         }
-          fic=open(nom_fic,O_RDONLY,0);
-          if (fic != -1) 
-          {
-           image1->ACCES_CANAL_INT[k-1]=fic;
-           image1->POS_OCTET[k-1]=0;
-           k=k+1;
-          }
-	  else
-          {
-	    iret=0;
-            strcpy(CAI_ERREUR,"incoherence au niveau du nb fichiers canaux");
-	    return(NULL);
-          }
-       }
-     }
-
-     return (image1);
-   }
-   else
-   {
-     return(NULL);
-    }
-
-}
-
-/* 
-   Fin de l'operation cai_ouvre_lecture_atg2
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_atg2                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format atg2 et de tous les fichiers qui la composent         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_IMAGE *cai_ouvre_creation_atg2 (nom_image,         */
-/*  ---------------- 		                          nb_can,            */
-/*				                          nboct_pix,	     */
-/*				                          nb_col,            */
-/*				                          nb_lig,            */
-/*				                          label)             */
-/*                                                                           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_atg2    (S) (CAI_IMAGE *) : =NULL si pb            */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_creation_atg2(repert,
-				   nom_image,
-				   nb_can,
-				   nboct_pix,
-				   nb_col,
-				   nb_lig,
-				   label)
-
-char *repert;
-char *nom_image;
-int  *nb_can;
-int  *nboct_pix;
-int  *nb_col;
-int  *nb_lig;
-char *label;
-{
-   int fic;		        /* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char repertoire_ima[1024];	/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   int retour;			/* retour de fonction 			    */ 
-   char car[3];			/* indice du canal traite     		    */
-   int i,num,can;		/* indice 				    */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   Fsro_format_data fsro;	/* structure informations format image      */
-
-   char	nom_fic_tim[1024];	/* nom de fichier de travail 		   */
-   char	nom_fic_his[1024];	/* nom de fichier de travail		   */
-   char	nom_fic_bid[1024];	/* nom de fichier de travail 		   */
-   char	**tab_nom_tim;		/* tableau contenant les Tile index Maps   */ 
-   char	**tab_nom_his;		/* tableau contenant les histogrammes      */
-   char	**tab_nom_bid;		/* tableau contenant les caracteristiques des 
-				   plans */
-   FILE	*ptr_file_tim;		/* flot de fichier tim 			   */
-   FILE	*ptr_file_his;		/* flot de fichier his			   */
-   FILE	*ptr_file_bid;		/* flot de fichier bid			   */
-   unsigned char *ptr_buff_tim;	/* pointeur sur buffer tim 		   */
-   int	offset;			/* offset a ecrire dans fichier tim        */
-
-   char	str_cmd[100];		/* chaine de commande pour appels systeme  */
-   int	nb_blocs_ns;		/* nombre de blocs N/S			   */
-   int	nb_blocs_we;		/* nombre de blocs W/E 			   */
-
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
- image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-
-/*************************************************/
-/* Construction du nom de la sous-directory 	 */
-/* d'accueil des fichiers			 */
-/*************************************************/
- if (strlen(repert)!= 0)
- {
-   strcpy ( repertoire_ima , repert );
-   strcat ( repertoire_ima , "/" );
-   strcat ( repertoire_ima , nom_image );
-  repertoire_ima[strlen(repert)+1+strlen(nom_image)]='\0';
-  }
- else
- {
-   strcpy ( repertoire_ima , nom_image );
-   repertoire_ima[strlen(nom_image)]='\0';
- }
-
-/*************************************************/
-/* verification que cette sous-directory         */
-/* n'existe pas deja				 */
-/*************************************************/
-
-retour = stat ( repertoire_ima , &buf_stat );
-if (( retour != -1 ) && ( (buf_stat.st_mode & S_IFMT) == S_IFDIR ))
-{ 
-	sprintf ( CAI_ERREUR , "L'image %s atg2 existe \n" , nom_image );
-	goto ERREUR;
- }
- 
-/*************************************************/
-/* Creation de la sous-directory d'accueil des	 */
-/* fichiers					 */
-/*************************************************/
-
-sprintf(str_cmd,"mkdir %s",repertoire_ima);
-system(str_cmd);
-
-/*************************************************/
-/* Creation du fichier caracteristiques : .gen	 */
-/*************************************************/
-nom_fic[0]='\0';
-strcpy ( nom_fic, repertoire_ima );
-strcat ( nom_fic, "/.gen" );
-nom_fic[strlen(repertoire_ima)+5]='\0';
-fic = creat ( nom_fic,PERMS);
-if ( fic == -1 )
-{
-   sprintf ( CAI_ERREUR , "Erreur : creation fichier %s impossible\n",nom_fic );
-   goto ERREUR;
-}
-
-
-/*************************************************/
-/* ecriture de l'enregistrement d'entete	 */
-/*************************************************/
-
-memset(&fsro,'\0',sizeof(Fsro_format_data));
-
-/* Record in field */
-
-for (i=0;i<80;i++)
-   fsro.rty[i]='\0';
-strcpy(fsro.rty,"GIN");
-for (i=0;i<80;i++)
-   fsro.rid[i]='\0';
-strcpy(fsro.rid,"1");
-
-/* Data set id field */
-
-for (i=0;i<8;i++)
-   fsro.prt[i]='\0';
-strcpy(fsro.prt,"IMAGE");
-for (i=0;i<80;i++)
-   fsro.nam[i]='\0';
-strcpy(fsro.nam,nom_image);
-
-/* General information field */
-
-fsro.str = 3;
-fsro.lod = 0.0;
-fsro.lad = 0.0;
-for (i=0;i<8;i++)
-   fsro.uniloa[i]='\0';
-strcpy(fsro.uniloa,"");
-for (i=0;i<8;i++)
-   fsro.mbu[i]='\0';
-strcpy(fsro.mbu,"");
-fsro.cov = 0;
-fsro.fec = 0;
-fsro.poc = 0;
-fsro.lic = 0;
-fsro.alc = 0;
-fsro.sgc = 0;
-fsro.zna = 0;
-fsro.psp = 0.0;
-for (i=0;i<4;i++)
-   fsro.imr[i]='\0';
-strcpy(fsro.imr,"no");
-fsro.arv = 0;
-fsro.brv = 0;
-fsro.lso = 0.0;
-fsro.pso = 0.0;
-for (i=0;i<80;i++)
-fsro.txt[i]='\0';
-strcpy(fsro.txt,"");
-
-/* Data set parameters fields */
-
-fsro.nul = 0;
-fsro.nus = 0;
-fsro.nll = 0;
-fsro.nls = 0;
-/* nombre de blocs N/S */
-if ( (*nb_lig) % 256 == 0 )
-        fsro.nfl = (*nb_lig) / 256;
-else
-        fsro.nfl = (*nb_lig) / 256 + 1;
-/* nombre de blocs W/E */
-if ( (*nb_col) % 256 == 0 )
-        fsro.nfc = (*nb_col) / 256;
-else
-        fsro.nfc = (*nb_col) / 256 + 1;
-/* taille des blocs */
-fsro.pnc = 256;
-fsro.pnl = 256;
-fsro.cod = 0;
-fsro.rod = 1;
-fsro.por = 0;
-fsro.pcb = 0;
-fsro.pvb = (*nboct_pix)*8;
-for (i=0;i<80;i++)
-   fsro.bad[i]='\0';
-strcpy(fsro.bad,nom_image);
-for (i=0;i<2;i++)
-   fsro.tif[i]='\0';
-/* nombre de blocs W/S */
-strcpy(fsro.tif,"y");
-
-/* Non Digest fiel - Specific ATG2/MULTISCOPE */
-
-for (i=0;i<8;i++)
-   fsro.fmt[i]='\0';
-strcpy(fsro.fmt,"gds");
-for (i=0;i<2;i++)
-   fsro.pty[i]='\0';
-strcpy(fsro.pty,"S ");
-fsro.ofs = 0;
-fsro.mpl = 0.0;
-fsro.mpc = 0.0;
-for (i=0;i<100;i++)
-   fsro.rol[i]=0;
-for (i=0;i<100;i++)
-   fsro.roc[i]=0;
-retour = write ( fic , &fsro , sizeof(Fsro_format_data));
-if ( retour != sizeof(Fsro_format_data) )
-{
-        sprintf ( CAI_ERREUR , "Erreur : ecriture impossible dans fichier %s\n",
-        nom_fic );
-        close(fic);
-        unlink(nom_fic);
-	goto ERREUR;
-}
-
-close ( fic );
-
-/*************************************************/
-/* Creation des fichiers :      		 */
-/* - Tile index Map				 */
-/* - Histo					 */
-/* - Caracterisitiques du plan			 */	
-/*************************************************/
-
-tab_nom_tim = (char **) malloc ( (*nb_can) * sizeof(char *) );
-tab_nom_his = (char **) malloc ( (*nb_can) * sizeof(char *) );
-tab_nom_bid = (char **) malloc ( (*nb_can) * sizeof(char *) );
-
-for (can=0; can<*nb_can; can=can+1 )
-{
-	strcpy ( nom_fic_tim , repertoire_ima );
-	strcpy ( nom_fic_his , repertoire_ima );
-	strcpy ( nom_fic_bid , repertoire_ima );
-	if (*nb_can == 1)
-	{
-		strcat ( nom_fic_tim , "/PAN.tim" );
-		nom_fic_tim[strlen(repertoire_ima)+8]='\0';
-		strcat ( nom_fic_his , "/PAN.his" );
-		nom_fic_his[strlen(repertoire_ima)+8]='\0';
-		strcat ( nom_fic_bid , "/PAN.bid" );
-		nom_fic_bid[strlen(repertoire_ima)+8]='\0';
-	}
-	else
-	{
-		strcat ( nom_fic_tim , "/XS" );
-		sprintf ( car , "%d" , can+1 );
-		strcat ( nom_fic_tim , car );
-		strcat ( nom_fic_tim , ".tim" );
-		nom_fic_tim[strlen(repertoire_ima)+3+strlen(car)+4]='\0';
-		strcat ( nom_fic_his , "/XS" );
-		sprintf ( car , "%d" ,can+1 );
-		strcat ( nom_fic_his , car );
-		strcat ( nom_fic_his , ".his" );
-		nom_fic_his[strlen(repertoire_ima)+3+strlen(car)+4]='\0';
-		strcat ( nom_fic_bid , "/XS" );
-		sprintf ( car , "%d" , can+1 );
-		strcat ( nom_fic_bid , car );
-		strcat ( nom_fic_bid , ".bid" );
-		nom_fic_bid[strlen(repertoire_ima)+3+strlen(car)+4]='\0';
-	}
-
-	tab_nom_tim[can] = (char *) malloc ( strlen(nom_fic_tim) + 1 );
-	strcpy ( tab_nom_tim[can] , nom_fic_tim );
-	tab_nom_his[can] = (char *) malloc ( strlen(nom_fic_his) + 1 );
-	strcpy ( tab_nom_his[can] , nom_fic_his );
-	tab_nom_bid[can] = (char *) malloc ( strlen(nom_fic_bid) + 1 );
-	strcpy ( tab_nom_bid[can] , nom_fic_bid );
-  }
-		
-/* calcul du nombre de blocs */
-
-/* Blocs N/S */
-if ( (*nb_lig) % 256 == 0 )
-	nb_blocs_ns = (*nb_lig) / 256;
-else
-	nb_blocs_ns = (*nb_lig) / 256 + 1;
-/* Blocs W/E */
-if ( (*nb_col) % (256/(*nboct_pix)) == 0 )
-	nb_blocs_we = (*nb_col) / (256/(*nboct_pix));
-else
-	nb_blocs_we = (*nb_col) / (256/(*nboct_pix)) + 1;
-
-ptr_buff_tim = (unsigned char *) malloc ( nb_blocs_ns*nb_blocs_we*sizeof(int) );
-if ( ptr_buff_tim == NULL )
-{
-	sprintf ( CAI_ERREUR , "Erreur : probleme d'allocation \n" );
-	unlink(nom_fic);
-        free ( ptr_buff_tim );
-        free ( tab_nom_tim );
-        free ( tab_nom_his );
-        free ( tab_nom_bid );
-	goto ERREUR;
-}
-for ( can = 0 ; can < (*nb_can) ; can++ )
-{
-	ptr_file_tim = fopen ( tab_nom_tim[can] ,"w");
-	ptr_file_his = fopen ( tab_nom_his[can] ,"w");
-	ptr_file_bid = fopen ( tab_nom_bid[can] ,"w");
-	if ((ptr_file_tim == NULL) || (ptr_file_his == NULL) || (ptr_file_bid == NULL))
-	{
-		sprintf (CAI_ERREUR,"Erreur : creation fichier %s impossible\n",tab_nom_tim[can] );
-		unlink(nom_fic);
-		for(i=0;i<can;i++)
-		{
-			unlink(tab_nom_tim[i]);
-			unlink(tab_nom_his[i]);
-			unlink(tab_nom_bid[i]);
-		}
-
-                free ( ptr_buff_tim );
-                free ( tab_nom_tim );
-                free ( tab_nom_his );
-                free ( tab_nom_bid );
-		goto ERREUR;
-	}
-
-	for ( i = 0 ; i < nb_blocs_ns*nb_blocs_we ; i++ )
-	{
-		offset = 256*256*i + 1;
-		memcpy(&ptr_buff_tim[i*4],&offset,4);
-	}
-	retour = fwrite ( ptr_buff_tim , nb_blocs_ns*nb_blocs_we , sizeof(int) , ptr_file_tim );
-	if ( retour == 0 )
-	{
-		sprintf ( CAI_ERREUR ,"Erreur : ecriture impossible dans %s\n ",tab_nom_tim[can] );
-		unlink(nom_fic);
-		for(i=0;i<=can;i++)
-		{
-			unlink(tab_nom_tim[i]);
-			unlink(tab_nom_his[i]);
-			unlink(tab_nom_bid[i]);
-		}
-                free ( ptr_buff_tim );
-                free ( tab_nom_tim );
-                free ( tab_nom_his );
-                free ( tab_nom_bid );
-		goto ERREUR;
-	}
-
-	fclose ( ptr_file_tim );
-	fclose ( ptr_file_his );
-	fclose ( ptr_file_bid );
-}
-
-
-/*************************************************/
-/* Constitution du nom des fichiers a ecrire	 */
-/* et insertion dans les tableaux		 */
-/*************************************************/
-
-
-for (can=0; can<*nb_can; can ++ )
-{
-    nom_fic_canal[0]='\0';
-    strcpy ( nom_fic_canal , repertoire_ima );
-    if (*nb_can == 1)
-    {
-	strcat ( nom_fic_canal , "/PAN.gds" );
-	nom_fic_canal[strlen(repertoire_ima)+8]='\0';
-    }
-    else
-    {
-    	strcat ( nom_fic_canal , "/XS" );
-  	sprintf ( car , "%d" , can+1 );
-	strcat ( nom_fic_canal , car );
-	strcat ( nom_fic_canal , ".gds" );
-        nom_fic_canal[strlen(repertoire_ima)+3+strlen(car)+4]='\0';
-      }
-
-      num = creat(nom_fic_canal,PERMS);
-      if (num == -1)
-      {
-        sprintf(CAI_ERREUR,"Erreur: Creation %s impossible\n",nom_fic_canal);
-	unlink(nom_fic);
-	for(i=0;i<=can;i++)
-	{
-			unlink(tab_nom_tim[i]);
-			unlink(tab_nom_his[i]);
-			unlink(tab_nom_bid[i]);
-	}
-
-        goto ERREUR;
-       }
-        image1->ACCES_CANAL_INT[can]=num;
-        image1->POS_OCTET[can]=0;
-  }
-
-
-
-free ( ptr_buff_tim );
-free ( tab_nom_tim );
-free ( tab_nom_his );
-free ( tab_nom_bid );
-  
-return (image1);
-
-ERREUR :
-  return(NULL);
-}
-
-
-/* 
-  Fin de l'operation cai_ouvre_creation_atg2
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_atg2                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image atg2                 */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_lecture_canal_atg2(image1, canal,       */       		      /* ------------------                             premiere_ligne,            */
-/*                                                premiere_colonne,          */
-/*                                                nombre_lignes_lire ,       */
-/*                                                nombre_colonnes_lire,      */
-/*                                                pas_ligne ,pas_colonne,    */
-/*                 		                  data_image )               */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (int) : numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal_atg2 (S) (CAI_OK_KO) :    = CAI_KO si pb            */
-/*                                                 = CAI_OK si OK            */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO cai_lecture_canal_atg2(image1 ,  
-                                  canal ,           
-    		                  premiere_ligne  ,   
-     		                  premiere_colonne,
-                                  nombre_lignes_lire ,
-                                  nombre_colonnes_lire,
-                                  pas_ligne ,          
-                                  pas_colonne,
-		                  data_image )        
-CAI_IMAGE *image1;
-int *canal ;          
-int *premiere_ligne  ;   
-int *premiere_colonne   ;
-int *nombre_lignes_lire ;
-int *nombre_colonnes_lire;
-int *pas_ligne ;                              
-int *pas_colonne;        
-unsigned char *data_image;
-
-{
-
- int   num,i,j,k,n,l,p;     /* variables de travail                          */
- int pt_oct;		    /* position courante dans le fichier image       */
- int no_oct;                /* numero du premier octet a lire                */
- int iret;                  /* indicateur d'erreur                           */
- int lig;                   /* indice de boucle sur les lignes               */
- int   oct_pix;             /* nb octets par pixels                          */
- long  nb_oct;              /* nb oct =1er octet a lire - position courante  */
- unsigned char *buf_lec;    /* buffer lecture d'un pave                      */
- unsigned char *buffer;     /* buffer lecture de taille_pave lignes completes*/
- unsigned char *deb,*pch;   /* pointeur chaine pour transfert  buffer sortie */
- long nb_oct_pave;          /* taille du pave en octets                      */
- unsigned char *ind_lec;    /* pointeur de travai pour transfert pave        */
- unsigned char *ind_tab;    /* pointeur de travai pour transfert pave        */
- int pave;                  /* nombre de paves colonnes dans une ligne       */
- int nbcol_tot;             /* nb pave*taille colonnes du pave               */
- int taille;                /* nbcol_tot*taille lignes pave                  */
- int bloc;		    /* indice de boucle sur les paves                */
- int nolig;		    /* indice de boucle sur les lignes               */
- int numlig;                /* numero de la ligne reconstituee               */
-
-
-/*.........................
-  Initialisations
-  ........................*/
-   iret=CAI_OK;
-   num=image1->ACCES_CANAL_INT[*canal-1];
-   oct_pix=image1->NBOCT_PIX;
-   nb_oct_pave=oct_pix*image1->LIGNES_PAVE*image1->COLONNES_PAVE;
-   lig=*premiere_ligne;
-   i=0;
-   pch=data_image;
-
-/*..............................................
-        allocation de memoire pour lire une ligne image
- ............................................. */
-   pave=image1->NB_COL/image1->COLONNES_PAVE;
-   if ((image1->NB_COL%image1->COLONNES_PAVE)!=0)
-   {
-      pave=pave+1;
-   }
-   nbcol_tot=pave*image1->COLONNES_PAVE;
-   taille=nbcol_tot*image1->LIGNES_PAVE*oct_pix;
-
-   buf_lec = (unsigned char *) malloc(nb_oct_pave);
-   if (buf_lec == NULL)
-   {
-      iret=CAI_KO;
-      strcpy(CAI_ERREUR,"Probleme d'allocation memoire");
-      return(iret);
-   }
-   else
-   {
-      buffer = (unsigned char *) malloc(taille);
-      if (buffer == NULL)
-      {
-         iret=CAI_KO;
-         strcpy(CAI_ERREUR,"Probleme d'allocation memoire");
-         free(buf_lec);
-         return(iret);
-      }
-    }
-
-
-/*.....................
-     Pour chaque ligne a lire
-  .......................................*/
-     while ((i < (*nombre_lignes_lire))&&(iret==CAI_OK))
-    {  
-/*............................................
-       Recherche de la position courante dans le fichier
-  ............................................*/
-       pt_oct=lseek(num,0L,1);
-
-/*................................
-       Calcul du numero du 1er octet a lire
-  ....................................*/
-       nolig=((lig-1)/image1->LIGNES_PAVE)*image1->LIGNES_PAVE;  
-       no_oct=image1->POS_OCTET[*canal-1]+(nolig*nbcol_tot*oct_pix);
-
-/*..................................
-       Saut d'octets pour etre positionne sur la ligne a lire
-  .......................................*/
-       nb_oct=(long)(no_oct-pt_oct);
-       lseek(num,nb_oct,1);
-
-/*...........................................
-       lecture de image1->LIGNES_PAVE lignes completes de nolig+1
-       a nolig+image1->LIGNES_PAVE
-  ................................................*/
-        for (bloc=1;bloc<=pave;bloc=bloc+1)
-	{
-/*        lecture d'un bloc de nb_oct_pave octets consecutifs */
-          n=read(num,buf_lec,nb_oct_pave);
-          if (n<=0)
-          {
-            iret=CAI_KO;
-            strcpy(CAI_ERREUR,"Erreur lecture donnee image atg2");
-          }
-          else
-          { 
-/*	   stockage du pave dans le tableau de image1->LIGNES_PAVE lignes 
-		completes */
-           ind_tab=buffer+(bloc-1)*image1->COLONNES_PAVE*oct_pix;
-	   ind_lec=buf_lec;
-
-	    for (l=1;l<=image1->LIGNES_PAVE;l=l+1)
-            {
-	      for (p=1;p<=image1->COLONNES_PAVE*oct_pix;p=p+1)
-	      {
-		*ind_tab=*ind_lec;
-		ind_tab=ind_tab+1;
-		ind_lec=ind_lec+1;
-	       }
-	       ind_tab=ind_tab+(nbcol_tot-image1->COLONNES_PAVE)*oct_pix;
-	     }
-	   }
-        }
-  
-/*......................................
-        Sauvegarde des donnees lues entenant compte du pas 
-             d'echantillonnage en colonne
-  ........................................*/       
-  
-	if (iret == CAI_OK)
-	{
-         numlig=lig-nolig;
-	 deb=buffer+(numlig-1)*nbcol_tot*oct_pix+
-	            ((*premiere_colonne)-1)*oct_pix;
-  
-	 while ((numlig<=image1->LIGNES_PAVE)&&(i<(*nombre_lignes_lire)))
-	 {
-           j=1;
-           while (j<=(*nombre_colonnes_lire))
-           {
-	     for (k=0;k<oct_pix;k=k+1)
-	     {
-		 *(pch+k)=*(deb+k);
- 	     }
-	     j=j+1;
-             pch=pch+oct_pix;
-	     deb=deb+((*pas_colonne)*oct_pix);
-	    }
-            numlig=numlig+(*pas_ligne);
-            deb=buffer+((numlig-1)*nbcol_tot*oct_pix)+
-               ((*premiere_colonne)-1)*oct_pix;           
-            lig=lig+(*pas_ligne);
-            i=i+1;
-	    }
-	  }
-   }
-	free(buffer);
-        free(buf_lec);
-
- 	return(iret);
-
-}
-
-/*
-  Fin de l'operation cai_lecture_canal_atg2
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal_atg2                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un canal d'une image atg2                 */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_OK_KO  cai_ecriture_canal_atg2 (image1, canal,     */       		      /* ------------------                               premiere_ligne,          */
-/*                                                  nombre_lignes_ecrire,    */
-/*                                                  nombre_colonnes_ecrire,  */
-/*                 		                    data_image )             */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal                 (E) (int) : numero du canal a ecrire            */
-/*     premiere_ligne        (E) (int) : premiere ligne a ecrire ds l'image  */
-/*     nombre_lignes_ecrire  (E) (int) : nombre de lignes a ecrire           */
-/*     nombre_colonnes_ecrire(E) (int) : nombre de lignes a ecrire           */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels ecris alloue et   */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_ecriture_canal_atg2       (S) (CAI_OK_KO) : = CAI_KO si pb        */
-/*                                                     = CAI_OK si OK        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ecriture_canal_atg2(image1 ,  
-                                  canal ,           
-    		                  premiere_ligne  ,   
-                                  nombre_lignes_ecrire ,
-                                  nombre_colonnes_ecrire,
-		                  data_image )        
-CAI_IMAGE *image1;
-int *canal ;          
-int *premiere_ligne  ;   
-int *nombre_lignes_ecrire ;
-int *nombre_colonnes_ecrire;
-unsigned char *data_image;
-
-{
-int	nb_colon_correc;	/* nombre de colonnes multiple de 256         */
-int	nb_blocs;		/* nombre de paquets de 256 pixels            */
-int	i_bloc;			/* compteur de blocs			      */
-int	nb_last_pix;		/* nb initial de pixels dans le dernier bloc  */
-int	nb_blocs_prec_first_lig;/* nb de blocs avant 1ere ligne a ecrire      */
-int	nb_blocs_prec_lig;	/* nb de blocs avant ligne courante	      */
-int	pos_first_lig_ds_bloc;	/* position 1ere ligne a ecrire dans son bloc */
-int	pos_lig_ds_bloc;	/* position ligne courante dans son bloc      */
-long	position_first_oct;	/* position du 1er octet a ecrire 	      */
-long	position_courante;	/* position courante dans le fichier          */
-long	deplacement;		/* deplacement a effectuer		      */
-long	depla_bl;		/* deplacement a effectuer 		      */
-int	i_ligne;		/* compteur de lignes			      */
-unsigned char *buff_lig;	/* tableau contenant une ligne a ecrire       */
-unsigned char *buff_bloc;	/* tableau contenant un bloc a ecrire	      */
-int	taille_wr;		/* nombre d'elements du buffer a ecrire       */
-int	cr_write;		/* code retour de write			      */
-unsigned char *completion;	/* caractere completant les blocs 	      */
-int num;                        /* descripteur de fichier                     */
-int nboct_pix;			/* nombre d'octets par pixel                  */
-unsigned char *pch;		/* pointeur chaine servant au transfert       */
-int i;                          /* indice de boucle                           */
-
-
-
-/* initialisations */
-
-i_ligne = 0;
-num = image1->ACCES_CANAL_INT[*canal-1];
-nboct_pix = image1->NBOCT_PIX;
-
-
-
-/********************************************************/
-/* Calcul du nombre de colonnes multiple de 256 de 	*/
-/* l'image a ecrire					*/
-/********************************************************/
-
-if ( (*nombre_colonnes_ecrire) % 256 == 0 )
-	nb_colon_correc = (*nombre_colonnes_ecrire);
-else
-	nb_colon_correc = (*nombre_colonnes_ecrire) - ((*nombre_colonnes_ecrire)%256) + 256;
-
-/********************************************************/
-/* Calcul du nombre de blocs complets de 256 pixels 	*/
-/* sur une meme ligne (eventuellement completes par 0)	*/
-/********************************************************/
-
-nb_blocs = nb_colon_correc / 256;
-
-
-/********************************************************/
-/* Calcul du nombre de pixels presents initialement 	*/
-/* dans le dernier bloc d'une ligne			*/
-/********************************************************/
-
-nb_last_pix = 256 - ( nb_colon_correc - (*nombre_colonnes_ecrire) );
-
-
-/********************************************************/
-/* Calcul du nombre de blocs de 256 lignes precedant la	*/
-/* premiere ligne a ecrire				*/
-/* Calcul de la position de la premiere ligne a ecrire 	*/
-/* au sein d'un bloc de 256 lignes			*/
-/********************************************************/
-
-if ( *premiere_ligne <= 256 )
-{
-	nb_blocs_prec_first_lig = 0;
-	pos_first_lig_ds_bloc = *premiere_ligne;
-}
-else if ( (*premiere_ligne - 1) % 256 == 0 )
-{
-	nb_blocs_prec_first_lig = (*premiere_ligne - 1) / 256;
-	pos_first_lig_ds_bloc = 1;
-}
-else
-{
-	nb_blocs_prec_first_lig =
-	( (*premiere_ligne- 1 ) - (*premiere_ligne - 1)%256 ) / 256;
-	pos_first_lig_ds_bloc = 1 + (*premiere_ligne - 1)%256;
-}
-
-
-
-/********************************************************/
-/* Initialisations					*/
-/********************************************************/
-
-pos_lig_ds_bloc = pos_first_lig_ds_bloc;
-nb_blocs_prec_lig = nb_blocs_prec_first_lig;
-
-
-/********************************************************/
-/* POUR	chacune des lignes a ecrire	               	*/
-/********************************************************/
-for ( i_ligne = 0 ; i_ligne < *nombre_lignes_ecrire ; i_ligne++ )
-{
-/********************************************************/
-/*	calcul de la position du premier octet de la	*/
-/*	ligne a ecrire					*/
-/********************************************************/
-   
-	position_first_oct = (long) ( image1->POS_OCTET[*canal-1]
-				+ 256 * nboct_pix * (pos_lig_ds_bloc - 1) 
-	        + 256 * nb_blocs_prec_lig * nb_colon_correc * nboct_pix );
-
-/********************************************************/
-/*	recuperation de la position courante		*/
-/********************************************************/
-
-	position_courante = lseek ( num , 0L , 1 );
-
-/********************************************************/
-/*	deplacement jusqu'au premier octet a ecrire	*/
-/********************************************************/
-
-	deplacement = position_first_oct - position_courante;
-	lseek ( num , deplacement , 1 ); 
-
-/********************************************************/
-/*	extraction de la ligne du tableau 		*/
-/********************************************************/
-
-	buff_lig = data_image +(*nombre_colonnes_ecrire) * nboct_pix * i_ligne;
-
-/********************************************************/
-/*	initialisation du decalage de 255*256 pixels	*/
-/********************************************************/
-
-	depla_bl = 0;
-
-/********************************************************/
-/*	POUR	chacun des blocs de 256 pixels		*/
-/********************************************************/
-	for ( i_bloc = 0 ; i_bloc < nb_blocs ; i_bloc++ )
-	{
-/********************************************************/
-/*		deplacement 				*/
-/********************************************************/
-
-		lseek ( num , depla_bl , 1 );
-
-/********************************************************/
-/*		extraction d'un bloc de la ligne	*/
-/********************************************************/
-
-		buff_bloc = buff_lig + i_bloc * 256 * nboct_pix;
-
-/********************************************************/
-/*		determination du nombre d'octets a 	*/
-/*		ecrire					*/
-/********************************************************/
-		if ( i_bloc == nb_blocs - 1 )
-                 {
-			taille_wr = nb_last_pix*nboct_pix;
-                 }
-		else
-                 {
-			taille_wr = 256 * nboct_pix;
-		  }
-
-/********************************************************/
-/*		ecriture dans le fichier		*/
-/********************************************************/
-		cr_write = write ( num , buff_bloc , taille_wr );
-		if ( cr_write != taille_wr )
-		{
-			strcpy ( CAI_ERREUR , "Erreur ecriture canal image atg2\n" );
-			goto ERREUR;
-		}
- 
-/********************************************************/
-/*		completion eventuelle du dernier bloc	*/
-/********************************************************/
-
-		if ((i_bloc == nb_blocs - 1) && ((256 - nb_last_pix) > 0))
-		{
-			taille_wr = (256 - nb_last_pix)*nboct_pix;
-		        completion=(unsigned char *) malloc(taille_wr);
-                        pch=completion;
-		        for (i=0;i<taille_wr;i=i+1)
-                        {
-			    *pch='\0';
-                             pch=pch+1;
-			 }
-			cr_write = write ( num ,  completion  , taille_wr );
-			if ( cr_write != taille_wr )
-			{
-
-				strcpy ( CAI_ERREUR , "Erreur ecriture canal image atg2\n" );
-				goto ERREUR;
-			}
-			free(completion);
-		}
-
-/********************************************************/
-/*		mise a jour du decalage de 255*256 pixels*/
-/********************************************************/
-
-		depla_bl = 255*256*nboct_pix;
-
-/********************************************************/
-/*	FIN POUR                                        */ 
-/********************************************************/
-	}
-
-/********************************************************/
-/*	mise a jour de la position de la ligne dans le	*/
-/*	bloc, et du nombre de blocs precedant la ligne	*/
-/********************************************************/
-
-	if ( pos_lig_ds_bloc == 256 )
-	{
-		pos_lig_ds_bloc = 1;
-		nb_blocs_prec_lig++;
-	}
-	else
-		pos_lig_ds_bloc++;
-
-/********************************************************/
-/* FIN POUR    						*/
-/********************************************************/
-}
-
-
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-/* 
-  Fin de l'operation cai_ecriture_canal_atg2
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_atg2                                             */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format atg2 et de          */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_atg2(image1)                      */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_atg2       (S) (CAI_OK_KO) :   = CAI_KO si pb               */
-/*                                              = CAI_OK si OK               */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ferme_atg2 (image1)
-
-CAI_IMAGE *image1;
-
-{
-
- int iret;    /* code retour de l'operation      */
- int i_can;   /* indice du canal a fermer        */
- int num;     /* descripteur du fichier a fermer */
-
- iret=CAI_OK;
-/*.............................................
-   Fermeture des fichiers image 
-  .............................................*/
-   for (i_can=0;i_can<image1->NB_CANAUX;i_can=i_can+1)
-   {
-     num=image1->ACCES_CANAL_INT[i_can];
-     close(num);
-    }
-
-
-  return (iret);
-}
-
-/*
-  Fin de l'operation cai_ferme_atg2
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_atg2                                          */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stocke en atg2 et de        */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_dest_ima_atg2(format,nom_ima)           */       		      /* ------------------                                                        */
-/*     format       (E) (char *) : format de l'image a detruire              */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_dest_ima_atg2    (S) (CAI_OK_KO) : = CAI_KO si pb                 */
-/*                                            = CAI_OK si OK                 */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_dest_ima_atg2 ( repertoire , 
-                              nom_ima )
-
-char	*repertoire;		/* repertoire de stockage de l'image */
-char	*nom_ima;		/* nom de l'image */
-
-{
-int     iret ;                   /* code retour fonction de fermeture */
-int	i_can;			/* compteur de canaux */
-char	nom_fic_courant[1024];	/* nom du fichier entete a detruire */
-char    repertoire_ima[1024];   /* repertoire + nom de l'image */
-char    str_num_fic[6];         /* chaine numero du canal */
-int	numero_fic;		/* numero du fichier canal */
-char	str_cmd[100];		/* chaine de commande pour appels systeme */
-
-int	cr_stat;		/* code retour de fonction status de fichier */
-struct stat buf_stat;		/* structure decrivant status de fichier */ 
-
-CAI_IMAGE   *image1;             /* structure ouverture image */
-int         nb_can;	        /* nombre de canaux de l'image */
-int         nboct_pix;		/* nombre d'octets par pixel image */
-int         nb_col;	        /* nombre de colonnes de l'image */
-int         nb_lig;             /* nombre de lignes de l'image */
-
-/*************************************************/
-/* Construction du nom de la sous-directory      */
-/* qui contient l'image ATG2                     */
-/*************************************************/
-if (strlen(repertoire) != 0)
-{
- strcpy ( repertoire_ima , repertoire );
- strcat ( repertoire_ima, "/" );
- strcat ( repertoire_ima , nom_ima );
- repertoire_ima[strlen(repertoire)+1+strlen(nom_ima)]='\0';
-}
-else
-{
- strcpy ( repertoire_ima , nom_ima );
- repertoire_ima[strlen(nom_ima)]='\0';
-}
-
-/************************************************/
-/* Extraction des caracteristiques de l'image 	*/
-/* du fichier entete par l'appel a la fonction	*/
-/* cai_ouvre_lecture_atg2			*/
-/************************************************/
-
-  image1 = cai_ouvre_lecture_atg2 ( repertoire,nom_ima, &nb_can ,&nboct_pix ,
-				    &nb_col , &nb_lig );	
-  if ( image1 == NULL) goto ERREUR;
-
-  image1->NB_CANAUX=nb_can;
-  image1->NB_COL=nb_col;
-  image1->NB_LIG=nb_lig;
-  image1->NBOCT_PIX=nboct_pix;
-
-  iret=cai_ferme_atg2(image1);
-
-
-
-/************************************************/
-/* Verification de l'existence de la sous-  	*/
-/* directory					*/
-/************************************************/
-
-cr_stat = stat ( repertoire_ima , &buf_stat );
-if ( cr_stat == -1 )
-{
-	sprintf ( CAI_ERREUR ,
-	"Erreur : acces impossible a %s\n" , repertoire_ima );
-	goto ERREUR;
-}
-if ( (buf_stat.st_mode & S_IFMT) != S_IFDIR )
-{
-	sprintf ( CAI_ERREUR ,
-	"Erreur : %s n'est pas un repertoire\n" , repertoire_ima );
-	goto ERREUR;
-}
-
-/************************************************/
-/* Constitution du nom des fichiers et 		*/
-/* destruction			 		*/
-/************************************************/
- 
-strcpy ( nom_fic_courant , repertoire_ima );
-strcat ( nom_fic_courant , "/.gen" );
-nom_fic_courant[strlen(repertoire_ima)+5]='\0';
-cr_stat = stat ( nom_fic_courant , &buf_stat );
-if ( cr_stat == 0 )
-	unlink ( nom_fic_courant );
-
-if ( nb_can == 1 )
-{
-	strcpy ( nom_fic_courant , repertoire_ima );
-	strcat ( nom_fic_courant , "/PAN.bid" );
-	nom_fic_courant[strlen(repertoire_ima)+8]='\0';
-	cr_stat = stat ( nom_fic_courant , &buf_stat );
-	if ( cr_stat == 0 )
-		unlink ( nom_fic_courant );
-
-	strcpy ( nom_fic_courant , repertoire_ima );
-	strcat ( nom_fic_courant , "/PAN.his" );
-	nom_fic_courant[strlen(repertoire_ima)+8]='\0';
-	cr_stat = stat ( nom_fic_courant , &buf_stat );
-	if ( cr_stat == 0 )
-		unlink ( nom_fic_courant );
-	
-	strcpy ( nom_fic_courant , repertoire_ima );
-	strcat ( nom_fic_courant , "/PAN.gds" );
-	nom_fic_courant[strlen(repertoire_ima)+8]='\0';
-	cr_stat = stat ( nom_fic_courant , &buf_stat );
-	if ( cr_stat == 0 )
-		unlink ( nom_fic_courant );
-
-	strcpy ( nom_fic_courant , repertoire_ima );
-	strcat ( nom_fic_courant , "/PAN.tim" );
-	nom_fic_courant[strlen(repertoire_ima)+8]='\0';
-	cr_stat = stat ( nom_fic_courant , &buf_stat );
-	if ( cr_stat == 0 )
-		unlink ( nom_fic_courant );
-}
-else
-{
-	i_can=1;
-	numero_fic=1;
-	while ( (i_can<=nb_can) && (numero_fic<10000) )
-	{
-		strcpy ( nom_fic_courant , repertoire_ima );
-		strcat ( nom_fic_courant , "/XS" );
-                sprintf ( str_num_fic , "%d" , numero_fic );
-                strcat ( nom_fic_courant , str_num_fic );
-                strcat ( nom_fic_courant , ".bid" );
-nom_fic_courant[strlen(repertoire_ima)+3+strlen(str_num_fic)+4]='\0';
-		cr_stat = stat ( nom_fic_courant , &buf_stat );
-		if ( cr_stat == 0 )
-			unlink ( nom_fic_courant );
-
-		strcpy ( nom_fic_courant , repertoire_ima );
-		strcat ( nom_fic_courant , "/XS" );
-                sprintf ( str_num_fic , "%d" , numero_fic );
-                strcat ( nom_fic_courant , str_num_fic );
-                strcat ( nom_fic_courant , ".his" );
-                nom_fic_courant[strlen(repertoire_ima)+3+strlen(str_num_fic)+4]='\0';
-		cr_stat = stat ( nom_fic_courant , &buf_stat );
-		if ( cr_stat == 0 )
-			unlink ( nom_fic_courant );
-
-		strcpy ( nom_fic_courant , repertoire_ima );
-		strcat ( nom_fic_courant , "/XS" );
-                sprintf ( str_num_fic , "%d" , numero_fic );
-                strcat ( nom_fic_courant , str_num_fic );
-                strcat ( nom_fic_courant , ".gds" );
-                nom_fic_courant[strlen(repertoire_ima)+3+strlen(str_num_fic)+4]='\0';
-		cr_stat = stat ( nom_fic_courant , &buf_stat );
-		if ( cr_stat == 0 )
-			unlink ( nom_fic_courant );
-
-		strcpy ( nom_fic_courant , repertoire_ima );
-		strcat ( nom_fic_courant , "/XS" );
-                sprintf ( str_num_fic , "%d" , numero_fic );
-                strcat ( nom_fic_courant , str_num_fic );
-                strcat ( nom_fic_courant , ".tim" );
-                nom_fic_courant[strlen(repertoire_ima)+3+strlen(str_num_fic)+4]='\0';
-		cr_stat = stat ( nom_fic_courant , &buf_stat );
-		if ( cr_stat == 0 )
-			unlink ( nom_fic_courant );
-
-		i_can++;
-		numero_fic++;
-        }
-
-
-}
-
-sprintf(str_cmd,"rmdir %s",repertoire_ima);
-system(str_cmd);
- 
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-/*
-  Fin de l'operation cai_dest_ima_atg2
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_modifie_atg2                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture ecriture d'une image au format  */
-/* -----     atg2 et de tous les fichiers qui la composent                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_modifie_atg2(nom_image,          */
-/*  ---------------- 		                         nb_can,             */
-/*				                         nboct_pix,	     */	
-/*				                         nb_col,             */
-/*				                         nb_lig)             */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_modifie_atg2  (S) (CAI_IMAGE *)    : =NULL si pb            */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_modifie_atg2(repert,
-				   nom_image,
-				   nb_can,
-				   nboct_pix,
-				   nb_col,
-				   nb_lig)
-
-char *repert;
-char *nom_image;
-int  *nb_can;
-int  *nboct_pix;
-int  *nb_col;
-int  *nb_lig;
-
-{
-   int fic;			/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char *deb,*deb1;		/* pointeurs sur chaine de caracteres       */
-   char car[2];			/* indce du canal traite     		    */
-   int num,k,n;		        /* indice 				    */
-   Fsro_format_data fsro;       /* structure decrivant l'entete atg2        */
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
- 
-   *nb_lig=0;
-   *nb_col=0;
-   *nboct_pix=0;
-   *nb_can=0;
- 
-   iret=1;
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
- if (strlen(repert)!= 0)
- {
-   sscanf(repert,"%s",nom_fic);
-   strcat(nom_fic,"/");
-   strcat(nom_fic,nom_image);
-   strcat(nom_fic,"/");
-   strcat(nom_fic,".gen");
-   nom_fic[strlen(repert)+1+strlen(nom_image)+5]='\0';
-  }
- else
- {
-   sscanf(nom_image,"%s",nom_fic);
-   strcat(nom_fic,"/");
-   strcat(nom_fic,".gen");
-   nom_fic[strlen(nom_image)+5]='\0';
-  }
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   num=open(nom_fic,O_RDONLY,0);
-
-   if (num == -1)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur ouverture fichier entete ATG2");
-    }
-   else
-   {
-     
-/*....................................
-       Lecture du fichier entete
-  ............................................*/
-
-          n=read( num , &fsro , sizeof(Fsro_format_data));
-	  if ( n <= 0 )
-	  {
-           sprintf(CAI_ERREUR,"Erreur lecture entete ATG2 %s\n",nom_fic),
-	   iret=0;
-	   return (NULL);
-	  }
-
-/*.........................................
-	  Fermeture du fichier entete ATG2
-  ..........................................*/
-	  close ( num );
-
-/*.........................................
-          Recuperation du nombre d'octets par pixel .
-  ....................................................*/
-	  if (fsro.pvb>16)
-  	  {
-	      iret=0;
-	      sprintf(CAI_ERREUR,"Taille du pixel non traitable %d\n",fsro.pvb);
-	      return (NULL);
-	  }
-	  else
-	  {
-            if ((fsro.pvb%8)==0)
-	       *nboct_pix=fsro.pvb/8;
-            else
-	       *nboct_pix=fsro.pvb/8+1;
-            image1->NB_BITS_PIX = fsro.pvb;
-	  }
-
-/*.........................................
-          Recuperation de la taille d'un pave en lignes
-  ....................................................*/
-	  image1->LIGNES_PAVE=fsro.pnl;
-/*.........................................
-          Recuperation de la taille d'un pave en colonnes
-  ....................................................*/
-	  image1->COLONNES_PAVE=fsro.pnc;
-
-/*.........................................
-          Calcul du nombre de lignes : taille du pave*nombre de pave en ligne
-  ....................................................*/
-	  *nb_lig=fsro.nfl*image1->LIGNES_PAVE;
-/*.........................................
-          Calcul du nombre de colonnes: taille  pave*nombre  pave en colonnes
-  ....................................................*/
-	  *nb_col=fsro.nfc*image1->COLONNES_PAVE;
-/*.........................................................
-         Recuperation du nombre de canaux en fonction du nom des fichiers .gds
-	 1 - test sur l'existence du fichier PAN.gds monochrome
-  ...........................................................*/
-        nom_fic[0]='\0';
-       if (strlen(repert)!= 0)
-       {
-          sscanf(repert,"%s",nom_fic);
-          strcat(nom_fic,"/");
-          strcat(nom_fic,nom_image);
-          strcat(nom_fic,"/PAN.gds");
-          nom_fic[strlen(repert)+1+strlen(nom_image)+8]='\0';
-        }
-        else
-        {
-          sscanf(nom_image,"%s",nom_fic);
-          strcat(nom_fic,"/PAN.gds");
-          nom_fic[strlen(nom_image)+8]='\0';
-        }
-        num=open(nom_fic,O_RDONLY,0);
-        if (num<=0)
-	{
-
-/*	  2 - test sur l'existence du fichier XS1.gds monochrome
-  ...........................................................*/
-
-          nom_fic[0]='\0';
-          if (strlen(repert)!= 0)
-          {
-            sscanf(repert,"%s",nom_fic);
-            strcat(nom_fic,"/");
-            strcat(nom_fic,nom_image);
-            strcat(nom_fic,"/XS1.gds");
-            nom_fic[strlen(repert)+1+strlen(nom_image)+8]='\0';
-          }
-          else
-          {
-            sscanf(nom_image,"%s",nom_fic);
-            strcat(nom_fic,"/XS1.gds");
-            nom_fic[strlen(nom_image)+8]='\0';
-          }
- 
-          fic=open(nom_fic,O_RDONLY,0);
-          if (fic<=0)
-	  {
-	     iret=0;
-	     sprintf(CAI_ERREUR,"Erreur nombre de canaux incorrect ATG2\n");
-	     return (NULL);
-	  }
-	  else
-          {   
-	     close(fic);
-	     *nb_can=3;
-           }
-         }
-        else
-        {
-	  close(num);
-	  *nb_can=1;
-	}
-
-   }
-   if (iret !=0)
-   {
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL et ouverture
-      de ces fichiers
-  .....................................................*/
-  
-     deb = image1->NOM_FIC_CAN;
-     deb1= image1->NOM_UTIL_CAN;
-
-     if (*nb_can==1)
-     {
-	 sscanf(nom_image,"%s",deb);
-	 strcat(deb,"/PAN.gds");
-	 sscanf(nom_image,"%s",deb1);
-	 strcat(deb1,"/PAN.gds");
-         nom_fic[0]='\0';
-         if (strlen(repert)!=0)
-         {
-          sscanf(repert,"%s",nom_fic);
-          strcat(nom_fic,"/");
-          strcat(nom_fic,nom_image);
-          strcat(nom_fic,"/PAN");
-          strcat(nom_fic,car);
-          strcat(nom_fic,".gds");
-          nom_fic[strlen(repert)+1+strlen(nom_image)+8]='\0';
-         }
-         else
-         {
-          sscanf(nom_image,"%s",nom_fic);
-          strcat(nom_fic,"/PAN");
-          strcat(nom_fic,car);
-          strcat(nom_fic,".gds");
-          nom_fic[strlen(nom_image)+8]='\0';
-         }
-         fic=open(nom_fic,O_RDWR,0);
-         image1->ACCES_CANAL_INT[0]=fic;
-         image1->POS_OCTET[0]=0;
-
-        
-     }
-     else
-     {
-
-       k=1;    
-       while((k<=*nb_can)&&(k<CAI_NB_MAX_CAN))
-       {
-          sprintf(car,"%d",k);
-          sscanf(nom_image,"%s",deb);
-          strcat(deb,"/XS");
-          strcat(deb,car);
-          strcat(deb,".gds");
-          deb=deb+100;
-          sscanf(nom_image,"%s",deb1);
-          strcat(deb1,".XS");
-          strcat(deb1,car);
-          strcat(deb1,".gds");
-          deb1=deb1+100;
-          nom_fic[0]='\0';
-         if (strlen(repert)!=0)
-         {
-          sscanf(repert,"%s",nom_fic);
-          strcat(nom_fic,"/");
-          strcat(nom_fic,nom_image);
-          strcat(nom_fic,"/XS");
-          strcat(nom_fic,car);
-          strcat(nom_fic,".gds");
-          nom_fic[strlen(repert)+1+strlen(nom_image)+8]='\0';
-         }
-         else
-         {
-          sscanf(nom_image,"%s",nom_fic);
-          strcat(nom_fic,"/XS");
-          strcat(nom_fic,car);
-          strcat(nom_fic,".gds");
-          nom_fic[strlen(nom_image)+8]='\0';
-         }
-          fic=open(nom_fic,O_RDWR,0);
-          if (fic != -1) 
-          {
-           image1->ACCES_CANAL_INT[k-1]=fic;
-           image1->POS_OCTET[k-1]=0;
-           k=k+1;
-          }
-	  else
-          {
-	    iret=0;
-            strcpy(CAI_ERREUR,"incoherence au niveau du nb fichiers canaux");
-	    return(NULL);
-          }
-       }
-     }
-
-     return (image1);
-   }
-   else
-   {
-     return(NULL);
-    }
-
-}
-/* 
-  Fin de l'operation cai_ouvre_modifie_atg2
-*/
diff --git a/Utilities/CAI/cai_dll/src/cai_bandeau.c b/Utilities/CAI/cai_dll/src/cai_bandeau.c
deleted file mode 100755
index d059d4f921..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_bandeau.c
+++ /dev/null
@@ -1,730 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_bandeau.c                                                 */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format bandeau                                    */ 
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CISI)                                   */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    novembre 2005                                       */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V5.3                                                            */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 5.3 : Prise en compte du format bandeau dans CAI          */
-/*                                                                           */
-/*****************************************************************************/
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-
-
-# include <stdio.h>
-# include <string.h>
-# include <stdlib.h>
-# include <sys/types.h>
-# include <unistd.h>
-# include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-#include <errno.h>
-
-#define _CAI_IMAGE
-#define IN_CAI_BANDEAU
-
-# include "cai_image.h"
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header$";
-
-extern char *getenv();
-
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_bandeau                                      */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images au format bandeau                */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_ima_bandeau(repert,tab_ima)         */
-/* -----------------                                                         */
-/*                                                                           */
-/*     repert       (E) (char *)   : repertoire a explorer		     */
-/*     tab_ima      (S) (char ***) : pointeur sur tableau des images listees */
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_ima_bandeau   (S) (long int)  : = -1 repertoiren inexistant */                                    /*					       = > 0 nombre d'images listees */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-long int cai_liste_ima_bandeau (char *repert,
-		       char ***tab_ima)
-
-{
-
-   DIR *dirp;		/* pointeur sur structure ouverture repertoire */
-
-   struct dirent *dp;   /* structure resultat de la fonction readdir   */
-
-   char *pch0,*pch1;    /* pointeurs sur chaine de caracteres          */
-   char *pch2,*pch3;    /* pointeurs sur chaine de caracteres          */
-   char car[6];         /* variable de travail                         */  
-   int nb_ima;          /* nombre d'images bandeau identifiees         */
-   int i;               /* indice de boucle                            */
-   long int diff,Long;
-
-/*........................................
-   INITIALISATION et ouverture du repertoire choisi
-  .........................................*/
-   nb_ima=0;
-   dirp=opendir(repert);
-
-   if(dirp!=NULL)
-   {
-
-
-/*......................................
-
-   premiere passe pour comptabiliser les images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE BANDEAU_CNES
-      (EXTENSION =.band)
-   ..........................................*/
-     while((dp=readdir(dirp))!=NULL)
-     {
-        sprintf(car,".band");
-        pch0=strstr(dp->d_name,car);
-        if (pch0 != NULL)
-        {
-             *pch0='\0';
-	     nb_ima=nb_ima+1;
-         }
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-        else
-        {
-           sprintf(car,".BAND");
-           pch1=strstr(dp->d_name,car);
-           if (pch1 != NULL)
-           {
-               *pch1='\0';
-	       nb_ima=nb_ima+1;
-            }
-         }
-     }
-
-    (void)closedir(dirp);
-   if (nb_ima ==0) goto FIN;
-
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES DU FORMAT BANDEAU
-     ......................................*/
-    *tab_ima = (char **) calloc(nb_ima,sizeof(char *));
-    for (i=0;i<nb_ima;i=i+1)
-      (*tab_ima)[i]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE BANDEAU_CNES
-      (EXTENSION =.band)
-   SI C`EST LE CAS,STOCKAGE DANS LA LISTE
-   ..........................................*/
-   dirp=opendir(repert);
-
-   nb_ima=0;
-   while((dp=readdir(dirp))!=NULL)
-   {
-     sprintf(car,".band");
-     pch0=strstr(dp->d_name,car);
-     if (pch0 != NULL)
-     {
-             *pch0='\0';
-             strcpy((*tab_ima)[nb_ima],dp->d_name);
-	     nb_ima=nb_ima+1;
-       }
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-      else
-      {
-         sprintf(car,".BAND");
-         pch1=strstr(dp->d_name,car);
-         if (pch1 != NULL)
-         {
-             *pch1='\0';
-             strcpy((*tab_ima)[nb_ima],dp->d_name);
-	     nb_ima=nb_ima+1;
-          }
-       }
-     }
-
-    (void)closedir(dirp);
-
-
- }
- else
- {
-    /* repertoire inexistant */
-     nb_ima=-1;
-  }
-
-FIN:
-  return(nb_ima);
-
-}
-
-/* Fin de l'operation cai_liste_ima_bandeau
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_bandeau                                  */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image au format bandeau   */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :     CAI_IMAGE *cai_ouvre_lecture_bandeau (nom_image,   */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels              */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_bandeau     (S) (CAI_IMAGE *)  : = NULL si pb       */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-CAI_IMAGE *cai_ouvre_lecture_bandeau(char *repert,
-				 char *nom_image,
-				 int  *nb_can,
-				 int  *nboct_pix,
-				 int  *nb_col,
-				 int  *nb_lig)
-{
-   CAI_IMAGE *image1,*image2;   /* pointeur su descripteur de fichier image */ 
-   int NbBandeaux;              /* nombre de bandeaux                       */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char label[80];		/* contient un enregistrement du fichier    */
-   int retour;			/* retour de la fonction comparaison chaines*/ 
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   char format[20];		/* Format de stockage de chaque bandeau     */
-   int nbcan, nboctpix;
-   int nbcol,nblig;
-   int ific,num,ind;
-   CH50 tab_ima[20];
-
-
-   /*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-   *nb_lig=0;
-   *nb_col=0;
-   *nboct_pix=0;
- 
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-   if (image1==NULL)
-   {
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_lecture");
-     goto ERREUR;
-    }
-
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)== 0)
-	sprintf(repert,"./");
-   sprintf(nom_fic,"%s/%s.band",repert,nom_image);
-   sprintf(image1->NOM_IMAGE,"%s/%s",repert,nom_image);
-
-  /*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   fic_in=NULL;
-   fic_in=fopen(nom_fic,"r");
-   if (fic_in==NULL)
-   {
-/* verification si extension en majuscule */
-      nom_fic[0]='\0';
-      sprintf(nom_fic,"%s/%s.BAND",repert,nom_image);
-      fic_in=fopen(nom_fic,"r");
-      if (fic_in==NULL)
-      {
-          strcpy(CAI_ERREUR,"Erreur ouverture fichier entete BANDEAU-CNES");
-          goto ERREUR;
-     }
-   }
-   
-/*....................................
-     Decodage du nombre de BANDEAU
-  ............................................*/
-     fscanf(fic_in,"%s %d\n",label,&NbBandeaux);
-     retour=strncmp(label,"BANDEAU",7);
-     if (retour!=0)
-     {
-       sprintf(CAI_ERREUR,
-			"Informations incoherentes ligne BANDEAU dans %s",
-			nom_fic);
-       goto ERREUR;
-     }
-/*....................................
-     Decodage du nombre du format
-  ............................................*/
-     fscanf(fic_in,"%s\n",format);
-
-/*....................................
-     Recuperation du nom de chaque bandeau
-  ............................................*/
-   for (ific=0;ific<NbBandeaux;ific++)
-   {   
-      fscanf(fic_in,"%s %d\n",label,&num);
-      strcpy(tab_ima[num-1],label);
-   }
-         
-/*..................................
-   Fermeture du fichier 
-  ......................................*/
-    if (fic_in!=NULL) 
-    {
-	fclose(fic_in);
-	fic_in=NULL;
-    }
-
-/*....................................
-     Ouverture de chaque bandeau
-  ............................................*/
-   for (ific=0;ific<NbBandeaux;ific++)
-   {   
-      sprintf(nom_fic,"%s/%s",repert,tab_ima[ific]);
-      image2 = cai_ouvre_lecture_image(nom_fic, format,&nbcan,
-                                      &nboctpix,&nbcol,&nblig); 
-      if (image2 == NULL)
-      {
-          sprintf(CAI_ERREUR,"Erreur ouverture du bandeau %s \n",nom_fic);
-          goto ERREUR;
-      }
-      *nb_can = nbcan;
-      *nboct_pix = nboctpix;
-      *nb_col = nbcol;
-      *nb_lig = (*nb_lig) + nblig;
-      image1->POS_OCTET[ific]=0;
-
-      FBANDEAU[ific] = image2;
-
-   }
-/*..................................
-     Initialisation du type de codage, indicateur d'inversion des octets,
-			nombre d'octets par pixel,
-  ........................................................*/
-     sprintf(image1->COD_PIX,image2->COD_PIX);
-     image1->NB_BITS_PIX = image2->NB_BITS_PIX;  
-     image1->NBOCT_PIX = image2->NBOCT_PIX;
-     image1->INV_OCTETS = image2->INV_OCTETS;
-
-/*..................................
- On stocke l'information "nombre de bandeaux" dans ACCES_CANAL_INT
- qui n'est pas utilisé par ailleurs
-  ........................................................*/
-     image1->ACCES_CANAL_INT[0] = NbBandeaux;
-          
-     return(image1);
-
-ERREUR:
-    if (fic_in!=NULL) 
-    {
-	fclose(fic_in);
-	fic_in=NULL;
-    }
-     return (NULL);
-}
-
-/* 
-   Fin de l'operation cai_ouvre_lecture_bandeau
-*/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_bandeau                                  */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image bandeau              */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_lecture_canal_bandeau(image1, canal,    */
-/* ------------------                            premiere_ligne,             */
-/*                                               premiere_colonne,           */
-/*                                               nombre_lignes_lire ,        */
-/*                                               nombre_colonnes_lire,       */
-/*                                               pas_ligne ,pas_colonne,     */
-/*                 		                data_image )                 */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (lint): numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal_bandeau     (S) (CAI_OK_KO) : = CAI_KO si pb        */
-/*                                                 = CAI_OK si OK            */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-CAI_OK_KO cai_lecture_canal_bandeau(CAI_IMAGE *image1 ,  
-                                int *canal ,           
-    		          	int *premiere_ligne  ,   
-     		          	int *premiere_colonne,
-                         	int *nombre_lignes_lire ,
-                          	int *nombre_colonnes_lire,
-                          	int *pas_ligne ,          
-                          	int *pas_colonne,
-		          	unsigned char *data_image )        
-
-{
- int NbBandeaux;            /* Nombre de bandeaux constituant l'image        */
- int iret;                  /* indicateur d'erreur                           */
- long int oct_pix;          /* nb octets par pixels                          */
- long int oct_lig;          /* nb oct. par ligne en considerant taille pixel */
- int lig,ilig;              /* indice de boucle sur les lignes               */
- int ific;                  /* boucle sur le nombre de bandeaux              */
- CAI_IMAGE *image2;         /* pointeur sur descripteur de fichier image     */
- int BandDeb,Tot;           /* indicateur du bandeau de la premiere ligne    */
- int BandFin,Fin;           /* indicateur du bandeau de la derniere ligne    */
- unsigned char *buf_lec;    /* buffer lecture d'une  ligne                   */
- unsigned char *pch;        /* pointeur chaine pour transfert  buffer sortie */
- int Un;
-
-/*...........................
-  Initialisations diverses
-  ..........................*/
-   NbBandeaux = image1->ACCES_CANAL_INT[0];
-   iret=CAI_OK;
-   oct_pix=image1->NBOCT_PIX;
-   oct_lig=(*nombre_colonnes_lire)*oct_pix;
-   lig=*premiere_ligne;
-   ilig=1;
-   Un=1;
-   pch = data_image;
-
-/*..............................................
-        allocation de memoire pour lire une ligne image complete
- ............................................. */
-   buf_lec = (unsigned char *) calloc(oct_lig,sizeof(unsigned char));
-   if (buf_lec == NULL)
-   {
-      strcpy(CAI_ERREUR,"Probleme allocation memoire");
-      goto ERREUR;
-   }
-
-/*....................
-   Recherche du bandeau dans lequel se trouve la premiere ligne à lire
- ............................................. */
-   BandDeb = -1;
-   ific=0;
-   Tot = 1;
-   while ((BandDeb == -1) && (ific<NbBandeaux))
-   {
-	if (ific != 0)  lig = lig - image2->NB_LIG;
-	image2 = FBANDEAU[ific];
- 	Tot = Tot + image2->NB_LIG;      
-        if ((*premiere_ligne) < Tot) BandDeb=ific;
-        ific = ific+1;
-   }
-   if (BandDeb == -1) 
-   {
-      strcpy(CAI_ERREUR,"Recherche du premier bandeau");
-      goto ERREUR;
-   }
-/*....................
-   Recherche du bandeau dans lequel se trouve la derniere ligne à lire
- ............................................. */
-   BandFin = -1;
-   ific=0;
-   Fin = (*premiere_ligne)+(*nombre_lignes_lire)-1;
-   Tot = 0;
-   while ((BandFin == -1) && (ific<NbBandeaux))
-   {
-	image2 = FBANDEAU[ific];
- 	Tot = Tot + image2->NB_LIG;  
-        if (Fin <= Tot) BandFin=ific;
-        ific = ific+1;
-   }
-   if (BandFin == -1) 
-   {
-      strcpy(CAI_ERREUR,"Recherche du dernier bandeau");
-      goto ERREUR;
-   }
-   
-   ific = BandDeb;
-   image2 = FBANDEAU[ific];
-   if (BandDeb == BandFin)
-   {
-         iret = cai_lecture_canal(image2,*canal,
-				lig,*premiere_colonne,
-				*nombre_lignes_lire,*nombre_colonnes_lire,
-				*pas_ligne,*pas_colonne,data_image);
-	 if (iret != CAI_OK)
-                 goto ERREUR;
-   }
-   else
-   {
-      while (ilig <= (*nombre_lignes_lire))
-      {
-         iret = cai_lecture_canal(image2,*canal,lig,*premiere_colonne,Un,
-				  *nombre_colonnes_lire,*pas_ligne,
-				  *pas_colonne,buf_lec);
-	 if (iret != CAI_OK)
-                 goto ERREUR;
-
-	  memcpy ( pch, buf_lec , oct_lig );
-          pch = pch+oct_lig;
-          ilig=ilig+1;
-          lig=lig+(*pas_ligne);
-          if (lig > image2->NB_LIG)
-          {
-		lig = lig - image2->NB_LIG;
-                ific=ific+1;
-		if (ific<NbBandeaux)
-   		   image2 = FBANDEAU[ific];
-          }
-       }
-   } 
-               
-   return(CAI_OK);
-
-ERREUR:
-   return(CAI_KO);
- }
-/*
-  Fin de l'operation cai_lecture_canal_bandeau
-*/ 
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_bandeau                                          */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format bandeau et de       */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_bandeau(image1)                   */
-/* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_bandeau        (S) (CAI_OK_KO) :   = CAI_KO si pb           */
-/*                                              = CAI_OK si OK               */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ferme_bandeau (CAI_IMAGE *image1)
-
-{
-   int iret,retour;     /* code retour de l'operation                    */
-   int ific;            /* indice du bandeau a fermer                    */
-   int NbBandeaux;      /* Nombre de bandeaux constituant l'image        */
-   CAI_IMAGE *image2;   /* pointeur sur descripteur de fichier image     */
-
-
-   NbBandeaux = image1->ACCES_CANAL_INT[0];
-   retour=CAI_OK;
-
-/*.............................................
-   Fermeture de tous les bandeaux
-  .............................................*/
-
-   for (ific=0;ific<NbBandeaux;ific++)
-   {   
-	image2 = FBANDEAU[ific];
-        iret = cai_ferme_image(image2);
-        if (iret != CAI_OK) retour=CAI_KO;
-   }
-
-  return (retour);
-}
-
-/*
-  Fin de l'operation cai_ferme_bandeau
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_bandeau                                       */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stocke en bandeau et de     */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_dest_ima_bandeau(repertoire,nom_ima)    */
-/* ------------------                                                        */
-/*     repertoire   (E) (char *) : repertoire de l'image a detruire          */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_dest_ima_bandeau     (S) (CAI_OK_KO) : = CAI_KO si pb             */
-/*                                            = CAI_OK si OK                 */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_dest_ima_bandeau ( char *repertoire , 
-                     	     char *nom_ima )
-{ 
-   CAI_IMAGE *image1,*image2;   /* pointeur su descripteur de fichier image */ 
-   int NbBandeaux;              /* nombre de bandeaux                       */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char label[80];		/* contient un enregistrement du fichier    */
-   int retour;			/* retour de la fonction comparaison chaines*/ 
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   char format[20];		/* Format de stockage de chaque bandeau     */
-   CH50 tab_ima[20];
-   int num,ific;
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repertoire)== 0)
-	sprintf(repertoire,"./");
-   sprintf(nom_fic,"%s/%s.band",repertoire,nom_ima);
- 
-  /*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   fic_in=NULL;
-   fic_in=fopen(nom_fic,"r");
-   if (fic_in==NULL)
-   {
-/* verification si extension en majuscule */
-      nom_fic[0]='\0';
-      sprintf(nom_fic,"%s/%s.BAND",repertoire,nom_ima);
-      fic_in=fopen(nom_fic,"r");
-      if (fic_in==NULL)
-      {
-          strcpy(CAI_ERREUR,"Erreur ouverture fichier entete BANDEAU-CNES");
-          goto ERREUR;
-     }
-   }
-/*....................................
-     Decodage du nombre de BANDEAU
-  ............................................*/
-     fscanf(fic_in,"%s %d\n",label,&NbBandeaux);
-     retour=strncmp(label,"BANDEAU",7);
-     if (retour!=0)
-     {
-       sprintf(CAI_ERREUR,
-			"Informations incoherentes ligne BANDEAU dans %s",
-			nom_fic);
-       goto ERREUR;
-     }
-/*....................................
-     Decodage du nombre du format
-  ............................................*/
-     fscanf(fic_in,"%s\n",format);
-
-/*....................................
-     Recuperation du nom de chaque bandeau
-  ............................................*/
-   for (ific=0;ific<NbBandeaux;ific++)
-   {   
-      fscanf(fic_in,"%s %d\n",label,&num);
-      strcpy(tab_ima[num-1],label);
-   }
-         
-/*..................................
-   Fermeture du fichier et destruction du fichier d'entete 
-  ......................................*/
-    if (fic_in!=NULL) 
-    {
-	fclose(fic_in);
-	fic_in=NULL;
-	unlink ( nom_fic );
-
-    }
-
-/*....................................
-    destruction de chaque bandeau
-  ............................................*/
-   for (ific=0;ific<NbBandeaux;ific++)
-   {   
-         sprintf(nom_fic,"%s/%s",repertoire,tab_ima[ific]);
-	 retour = cai_destruction_image(format,nom_fic);
-
-   }
-
-   return(CAI_OK);
-
-ERREUR:
-   return(CAI_KO);
-
-}
-
-/*
- Fin de l'operation cai_dest_ima_bandeau
-*/
-
-
diff --git a/Utilities/CAI/cai_dll/src/cai_bil.c b/Utilities/CAI/cai_dll/src/cai_bil.c
deleted file mode 100755
index 672c3de0b9..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_bil.c
+++ /dev/null
@@ -1,1810 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_bil.c                                                     */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format bil                                        */ 
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CISI)                                   */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    Septembre 97                                        */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 3.3 : DM : optimisation des acces                         */
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 : FA : Rajout des tests sur les retours d'allocation  */
-/*			   memoire                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : FA : anomalie a la lecture d'images codees sur plus */
-/*			      de 1 octet                                     */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications pour compatibilite HP64bits      */
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : FA : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : test sur  fclose  pour PC/LINUX                */
-/*****************************************************************************/
-/* MOD : VERSION : 4.6 : FA : pb ouverture en modification et ecriture       */
-/*    Modification pour compatibilite ouverture en modification              */
-/*****************************************************************************/
-/* MOD : VERSION : 5.0 : FA : pb lecture ligne d'une image 24000x24000       */
-/*                           EN 64bits, modification de int en long int      */
-/*****************************************************************************/
-/* MOD : VERSION : 5.1 : DM :  Maj du tag TYPE lorsque l'image est codée     */
-/* en reel  et que l'utilisateur le precise dans le param  "label"           */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte des I2,I4,UI2,UI4 et R8       */
-/*                             en lecture et ecriture                        */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte de l'information INTEL ou IEEE*/
-/*                             en lecture et ecriture dans l'entete .hd      */
-/*****************************************************************************/
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-
-
-# include <stdio.h>
-# include <string.h>
-# include <stdlib.h>
-# include <unistd.h>
-# include <sys/types.h>
-#include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-
-#define _CAI_IMAGE
-#define IN_CAI_BIL
-
-# include "cai_image.h"
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header: cai_bil.c,v 1.10 01/05/31 10:47:22 cmf Exp $";
-
-
-extern char *getenv();
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_bil                                          */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images au format bil                    */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_ima_bil(repert,tab_ima)             */
-/* -----------------                                                         */
-/*                                                                           */
-/*     repert       (E) (char *)   : repertoire a explorer		     */
-/*     tab_ima      (S) (char ***) : pointeur sur tableau des images listees */
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_ima_bil   (S) (int)     :     = -1 repertoire inexistant    */                                    /*					       = > 0 nombre d'images listees */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-long int cai_liste_ima_bil (char *repert,
-		           char ***tab_ima)
-
-{
-   DIR *dirp;		/* pointeur sur structure ouverture repertoire */
-   struct dirent *dp;   /* structure resultat de la fonction readdir   */
-   char *pch0,*pch1;    /* pointeurs sur chaine de caracteres          */
-   char car;            /* variable de travail                         */  
-   int nb_ima;          /* nombre d'images bil identifiees             */
-   long int i;          /* indice de boucle                            */
-   long int ll,dif;     /* variables de travail                        */
-   char blanc;          /* caractere blanc                             */
-
-
-/*........................................
-   INITIALISATION et ouverture du repertoire choisi
-  .........................................*/
-   nb_ima=0;
-   blanc=' ';
-   dirp=opendir(repert);
-
-   if(dirp!=NULL)
-   {
-/*......................................
-
-   premiere passe pour comptabiliser les images du format donne
-
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE BIL
-      (EXTENSION =.bil)
-     ..........................................*/
-
-      while((dp=readdir(dirp))!=NULL)
-      {
-    	pch0=strstr(dp->d_name,".bil");
-     	if (pch0 != NULL)
-     	{
-        	ll = strlen(dp->d_name);
-        	dif = (long int)(dp->d_name-pch0);
-        	dif=labs(dif);
-        	pch1=pch0+4;
-        	if (((ll-4)==dif)||((*pch1)==blanc))
-	     		nb_ima=nb_ima+1;
-     
-    	 }
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-	 else
-         {
-    		pch0=strstr(dp->d_name,".BIL");
-     	        if (pch0 != NULL)
-     	        {
-        	    ll = strlen(dp->d_name);
-        	    dif = (long int)(dp->d_name-pch0);
-        	    dif=labs(dif);
-        	    pch1=pch0+4;
-        	    if (((ll-4)==dif)||((*pch1)==blanc))
-	     		nb_ima=nb_ima+1;
-     	        }
-    	 }
-
-      }
-
-    closedir(dirp);
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES DU FORMAT BIL
-     ......................................*/
-    *tab_ima = (char **) calloc(nb_ima,sizeof(char *));
-    for (i=0;i<nb_ima;i=i+1)
-      (*tab_ima)[i]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE BIL
-       (EXTENSION =.lan ou .gis)
-   SI C`EST LE CAS,STOCKAGE DANS LA LISTE
-   ..........................................*/
-   dirp=opendir(repert);
-
-   nb_ima=0;
- 
-   while((dp=readdir(dirp))!=NULL)
-   {
-     pch0=strstr(dp->d_name,".bil");
-     if (pch0 != NULL)
-     {
-        ll = strlen(dp->d_name);
-        dif = (long)(dp->d_name-pch0);
-        dif=labs(dif);
-        pch1=pch0+4;
-        if (((ll-4)==dif)||((*pch1)==blanc))
-        {
-            *pch0='\0';
-            strcpy((*tab_ima)[nb_ima],dp->d_name);
-	    nb_ima=nb_ima+1;
-        }
-     
-     }
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-	 else
-         {
-    		pch0=strstr(dp->d_name,".BIL");
-     	        if (pch0 != NULL)
-     	        {
-        	    ll = strlen(dp->d_name);
-        	    dif = (long int)(dp->d_name-pch0);
-        	    dif=labs(dif);
-        	    pch1=pch0+4;
-        	    if (((ll-4)==dif)||((*pch1)==blanc))
-	     		nb_ima=nb_ima+1;
-               }
-    	 }
-   }   
-
-    closedir(dirp);
-
-   }
-   else
-   {
-     /* Erreur : Repertoire inexistant */
-      nb_ima=-1;
-   }
-
-    return(nb_ima);
-
-}
-/* Fin de l'operation cai_liste_ima_bil
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_bil                                      */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image au format bil       */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_lecture_bil(nom_image,           */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels              */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_bil (S) (CAI_IMAGE *)  : = NULL si pb               */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_lecture_bil(char *repert,
-				    char * nom_image,
-				    int  *nb_can,
-				    int  *nboct_pix,
-				    int  *nb_col,
-				    int  *nb_lig)
-
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   char label[80];		/* contient un enregistrement du fichier    */
-   int nbbit;			/* nb de bits par pixel du fichier en-tete  */
-   int retour;			/* retour de la fonction comparaison chaines*/ 
-   char *deb,*deb1,*pch0;	/* pointeurs sur chaine de caracteres       */
-   int i,num;			/* indice 				    */
-   int nbplan;			/* nombre de canaux dans le fichier en-tete */
-   char COD_PIX[80];	        /* type de codage du pixel (optionnel)      */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   char *type_machine;          /* ordre rangement octets machine de travail*/
-   int cmp;			/* retour de comparaison de chaine          */
-   int reconnaissance_type;
- 
-   /*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
- *nb_can=0;
-
- *nb_lig=0;
-
- *nb_col=0;
-
- *nboct_pix=0;
- 
- iret=1;
- pch0=NULL;
- reconnaissance_type = -1;
-
- image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-
- /*..................................
-   determination ordre de rangement 
-   des octets sur machine de travail
-  ......................................*/ 
-   type_machine = cai_test_pFpf();
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.1: FA :Rajout des tests sur les retours d'allocation    */
-/*			   memoire                                           */
-/*****************************************************************************/
-
- if (image1==NULL)
- {
-    iret=0;
-    strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_lecture");
- }
- else
- {
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if((long int)strlen(repert)!=0)
-   {
-      sprintf(nom_fic,"%s/%s.bil_hd",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.bil_hd",nom_image);
-   }
-
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   fic_in=NULL;
-   fic_in=fopen(nom_fic,"r");
-   if (fic_in==NULL)
-   {
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-      nom_fic[0]='\0';
-      if((long int)strlen(repert)!=0)
-      {
-          sprintf(nom_fic,"%s/%s.BIL_HD",repert,nom_image);
-      }
-      else
-      {
-         sprintf(nom_fic,"%s.BIL_HD",nom_image);
-       }
-      fic_in=fopen(nom_fic,"r");
-      if (fic_in==NULL)
-      {
-         iret=0;
-         strcpy(CAI_ERREUR,"Erreur ouverture fichier entete BIL-CNES");
-      }
-    }
-    if (iret !=0)
-    {
-/*....................................
-     Decodage du commentaire
-  ......................................*/
-     fscanf(fic_in,"%s\n",label);
-     retour=strncmp(label,"COMMENT",7);
-     if (retour!=0)
-     {
-	strcpy(CAI_ERREUR,"Informations incoherentes ligne COMMENT");
-	iret=0;
-      }
-     else
-     {
-        fgets(image1->COMMENT,80,fic_in);
-
-
- /*........................................
-        Decodage du nombre de canaux
-  .........................................*/
-        fscanf(fic_in,"%s\n",label);
-	retour=strncmp(label,"CHANNELS",8);
-	if (retour!=0)
-	{
-	   strcpy(CAI_ERREUR,"Informations incoherentes ligne CHANNELS");
-	   iret=0;
-	 }
-	else
-	{
-	   fscanf(fic_in,"%d\n",&nbplan);
-           *nb_can=nbplan;
-
-/*.......................................
-	   Decodage du nombre de lignes
-  ........................................*/
-	    fscanf(fic_in,"%s\n",label);
-	    retour=strncmp(label,"LINES",5);
-	    if (retour!=0)
-	    {
-	       strcpy(CAI_ERREUR,"Informations incoherentes ligne LINES");
-	       iret=0;
-	     }
-	     else
-	     {
-	       fscanf(fic_in,"%d\n",nb_lig);
-
-
-/*.......................................
-	  Decodage du nombre de colonnes
-  ........................................*/
-	       fscanf(fic_in,"%s\n",label);
-	       retour=strncmp(label,"COLUMNS",7);
-	       if (retour!=0)
-	       {
-	    	 strcpy(CAI_ERREUR,"Informations incoherentes ligne COLUMNS");
-	    	 iret=0;
-	  	}
-	       else
-	       {
-
-		 fscanf(fic_in,"%d\n",nb_col);
-
-/*.......................................
-	  Decodage du nombre de bits par pixel
-  ........................................*/
-	  	 fgets(label,80,fic_in);
-	  	 retour=strncmp(label,"BITS PER PIXEL",14);
-		 if (retour!=0)
-	  	 {
-	    	   strcpy(CAI_ERREUR,"Informations incoherentes ligne BITS ");
-	    	   iret=0;
-	  	  }
-	  	 else
-	    	 {
-		   fscanf(fic_in,"%d\n",&nbbit);
-
-/*........................................................
-	  Decodage du type de codage du pixel (optionnel)
-  ........................................................*/
-     		   fscanf(fic_in,"%s\n",label);
-     		   retour=strncmp(label,"TYPE",4);
-     		   if (retour==0)
-                   {
-      		      fscanf(fic_in,"%s\n",COD_PIX);
-		      retour=1;
-                   }
-		   else
-		     sprintf(COD_PIX,"UND");
-
-        	   pch0=cai_En_majuscule( COD_PIX );
-
-/* 	Verification si type de codage reconnu */
-         	   reconnaissance_type = cai_istyp_connu(pch0);
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte de l'information INTEL ou IEEE*/
-/*                             en lecture et ecriture dans l'entete .hd      */
-/*****************************************************************************/
-		   if (retour !=0) fscanf(fic_in,"%s\n",label);
-		   retour=strncmp(label,"SENSCODAGE",10);
-	 	   if (retour!=0)
-	 	   {
-/*      Si absent, pas d'inversion      */    
-			image1->INV_OCTETS =0;
-			sprintf(image1->SENS_COD,type_machine);
-	 	    }
-		    else
-		    {
-  			 fscanf(fic_in,"%s\n",label);
-  			 retour=strncmp(label,"IEEE",4);
-   			 if (retour==0)	
-				sprintf(image1->SENS_COD,"BE");
-   			 else
-				sprintf(image1->SENS_COD,"LE");
-   			 cmp = strncmp(type_machine,image1->SENS_COD,2);
-   			 if (cmp!=0)
- 	  				image1->INV_OCTETS =1;
-   			 else
-	 				 image1->INV_OCTETS =0;
-                     }	 	   
-
-		  }
-		}
-	      }
-	  }
-      }
-    }
-/*..................................
-   Fermeture du fichier 
-  ......................................*/
-   if (fic_in !=NULL) fclose(fic_in);
-
-   if (iret !=0)
-   {
-/*..................................
-     Initialisation du nombre d'octets par pixel
-  ........................................................*/
-        if ((nbbit%8)==0)
-		*nboct_pix=(int)(nbbit/8);
-       else
-		*nboct_pix=(int)((nbbit/8)+1);
-
-       if (reconnaissance_type != -1)
-       {
-	    	sprintf(image1->COD_PIX,"%s",COD_PIX);
-       }
-       else
-       {
-     	  sprintf(image1->COD_PIX,"UND");
-
-          if (*nboct_pix==1)
-              sprintf(image1->COD_PIX,"OCT");
-          else if (*nboct_pix==2)
-	      sprintf(image1->COD_PIX,"I2");
-          else if (*nboct_pix==4)
-          {
-	     retour=strncmp(COD_PIX,"I4",2);
-             if (retour==0)
-	        sprintf(image1->COD_PIX,"I4");
-             else
-             {
-	 	retour=strncmp(COD_PIX,"R4",2);
-          	if (retour==0)
-	    	  sprintf(image1->COD_PIX,"R4");
-             }
-           }
-           else if (*nboct_pix==8)
-           {
-		sprintf(image1->COD_PIX,"R8");	   
-           }
-         }
-
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-
-     nom_fic[0]='\0';
-     nom_fic_canal[0]='\0';
-
-     if((long int)strlen(repert)!=0)
-     {
-       sprintf(nom_fic_canal,"%s/%s.bil",repert,nom_image);
-      }
-      else
-      {
-       sprintf(nom_fic_canal,"%s.bil",nom_image);
-      }
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : FA : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-     retour = stat ( nom_fic_canal , &buf_stat );
-     if ( retour != 0 )
-     { 
-       if((long int)strlen(repert)!=0)
-       {
-         sprintf(nom_fic_canal,"%s/%s.BIL",repert,nom_image);
-       }
-       else
-       {
-        sprintf(nom_fic_canal,"%s.BIL",nom_image);
-       }
-     }
-     deb = image1->NOM_FIC_CAN;
-     deb1= image1->NOM_UTIL_CAN;
-     num=open(nom_fic_canal,O_RDONLY|O_BINARY,0);
-     if (num!= -1)
-     {
-
-       for (i=0;i<*nb_can;i=i+1)
-       {
-           sscanf(nom_image,"%s",deb);
-  	   deb=deb+100;
-           sscanf(nom_image,"%s",deb1);
-  	   deb1=deb1+100;
-           image1->ACCES_CANAL_INT[i]=num;
-           image1->POS_OCTET[i]=(*nb_col)*i*(*nboct_pix);
-        }
-      }
-      else
-         iret=0;
-     }
-    }
-    if (iret == 0)
-    {
-	return (NULL);
-     }
-    else
-    {
-      return(image1);
-     }
-
-}
-/* 
-   Fin de l'operation cai_ouvre_lecture_bil
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_bil                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format bil et de tous les fichiers qui la composent          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_IMAGE *cai_ouvre_creation_bil(nom_image,           */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            label)           */
-/*                                                                           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels              */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_bil (S) (CAI_IMAGE *) :     =NULL si pb            */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_creation_bil(char *repert,
-				      char *nom_image,
-				      int *nb_can,
-				      int *nboct_pix,
-				      int *nb_col,
-				      int *nb_lig,
-				      char *label)
-
-{
-   FILE *fic;		        /* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   int retour;			/* retour de fonction 			    */ 
-   char car[4];			/* indice du canal traite     		    */
-   int i,num,Coher;		/* indice 				    */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   char *type_machine;          /* ordre rangement octets machine de travail*/
-   int reconnaissance_type;
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1: FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_creation");
-     goto ERREUR;
-   }
-/*..................................
-   determination ordre de rangement 
-   des octets sur machine de travail
-  ......................................*/ 
-   type_machine = cai_test_pFpf();
-
-/*.................................................
-   Constitution du nom du fichier entete et verification qu'il
-   n'existe pas deja
-  .................................................*/
-
-   nom_fic[0]='\0';
-   if((long int)strlen(repert)!=0)
-   {
-       sprintf(nom_fic,"%s/%s.bil_hd",repert,nom_image);
-   }
-   else
-   {
-       sprintf(nom_fic,"%s.bil_hd",nom_image);
-   }
-   
-   retour = stat ( nom_fic , &buf_stat );
-   if ( retour == 0 )
-   { 
-	sprintf ( CAI_ERREUR , "L'image %s BIL existe \n" , nom_image );
-	goto ERREUR;
-   }
-
-/*...............................................................
-  constitution du nom de fichier correspondant a la radiometrie de l'image
-  Verification qu'il n'existe pas deja
-  Ouverture du fichier en ecriture
-  .................................................................*/
-
-   nom_fic_canal[0]='\0';
-   sscanf(nom_fic,"%s",nom_fic_canal);
-   nom_fic_canal[strlen(nom_fic_canal)-3]='\0';
-   retour = stat ( nom_fic_canal , &buf_stat );
-
-   if ( retour == 0 )
-   { 
-	sprintf ( CAI_ERREUR , "L'image %s BIL existe \n" , nom_image );
-	goto ERREUR;
-   }
-
-   num = open(nom_fic_canal,O_RDWR|O_CREAT|O_BINARY,PERMS); 
-   if (num == -1)
-   {
-
-     sprintf(CAI_ERREUR,"Erreur: Creation %s impossible\n",nom_fic_canal);
-     goto ERREUR;
-   } 
-
-   for (i=0;i<*nb_can;i=i+1)
-   {
-     image1->ACCES_CANAL_INT[i]=num;
-/*****************************************************************************/
-/* MOD : VERSION : 4.6 : FA : pb ouverture en modification et ecriture       */
-/*    Modification pour compatibilite ouverture en modification              */
-/*****************************************************************************/
-
-     image1->POS_OCTET[i]=(*nb_col)*i*(*nboct_pix);
-    }
-
-/*......................................................
-  Ouverture du fichier entete en ecriture 
-  Ecriture du contenu
-  ..........................................................*/
-  fic = fopen(nom_fic,"w");
-  if (fic == NULL)
-  {
-      sprintf(CAI_ERREUR,"Erreur: Creation fichier %s impossible\n",nom_fic);
-      goto ERREUR;
-   }
-
-  retour=fprintf ( fic , "COMMENT\n");
-  if (retour == 0)
-  {
-      sprintf(CAI_ERREUR,"Erreur: Ecriture %s impossible\n",nom_fic);
-      goto ERREUR;
-   }
-
-  fprintf ( fic , "%s\n" , label );
-  fprintf ( fic , "CHANNELS\n" );
-  fprintf ( fic , "%3d\n" , *nb_can );
-  fprintf ( fic , "LINES\n" );
-  fprintf ( fic , "%5d\n" , *nb_lig );
-  fprintf ( fic , "COLUMNS\n" );
-  fprintf ( fic , "%5d\n" , *nb_col );
-  fprintf ( fic , "BITS PER PIXEL\n" );
-  fprintf ( fic , "%2d\n" , (*nboct_pix)*8 );
-  fprintf ( fic , "TYPE\n");
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  Maj du tag TYPE lorsque l'utilisateur le      */
-/*                                  precise dans le param  "label"           */
-/*****************************************************************************/
-/* Verification si type de codage reconnu dans le label */
-  reconnaissance_type = cai_istyp_connu(label);
-  if (reconnaissance_type == -1)
-  {
- 	if (*nboct_pix==1)
-    		sprintf ( image1->COD_PIX , "OCT" );
-  	else  if (*nboct_pix==2)
-   		sprintf ( image1->COD_PIX , "I2" );
-  	else if (*nboct_pix==4)
-  	{
-/*****************************************************************************/
-/* MOD : VERSION : 5.1 : DM :  Maj du tag TYPE lorsque l'image est codée     */
-/* en reel  et que l'utilisateur le precise dans le param  "label"           */
-/*****************************************************************************/
-     		if ((strcasecmp(label,"R4") == 0)||
-			(strcasecmp(label,"FLOAT")== 0)||
-				(strcasecmp(label,"REEL") == 0))
-       			sprintf ( image1->COD_PIX , "R4" );
-     		else
-       			sprintf ( image1->COD_PIX , "I4" );     
-  	}
-  	else
-   		sprintf ( image1->COD_PIX , "UND" );
-    	fprintf ( fic , "%s\n",image1->COD_PIX );
-   }
-   else
-   {
-/* Verification de coherence entre le nb d'octets par pixel et le type donne */
-      Coher=1;
-      if(*nboct_pix == 1) 
-	 if (reconnaissance_type > 1) Coher=0;       
-      else if(*nboct_pix == 2) 
-	 if ((reconnaissance_type != 2) || (reconnaissance_type != 3)) Coher=0;
-      else if(*nboct_pix == 4) 
-	 if ((reconnaissance_type <4) || (reconnaissance_type > 6)) Coher=0;
-      else if(*nboct_pix == 8) 
-	 if (reconnaissance_type != 7)  Coher=0;
-      else 
-	   Coher = 0;
-      if (Coher == 0) 
-      {      	
-	  sprintf(CAI_ERREUR,"incoherence entre TYPE et Nb bits par pixels\n");
-	  goto ERREUR;
-      }    
-      else
-      {
-     		sprintf ( image1->COD_PIX , "%s" ,label);
-     		fprintf ( fic , "%s\n", label );
-      }
-   }
-  fprintf ( fic , "SENSCODAGE\n" );
-  retour=strncmp(type_machine,"BE",2);
-  sprintf(image1->SENS_COD,"%s",type_machine);
-  if (retour == 0)
-     fprintf ( fic , "IEEE\n"  );
-  else
-     fprintf ( fic , "INTEL\n"  );
-
-
-/*************************************************/
-/* Fermeture du fichier                          */
-/*************************************************/
-
-  if (fic!=NULL) fclose ( fic );
-  return (image1);
-
-ERREUR :
-
-   if (fic !=NULL) cai_dest_ima_bil ( repert ,  nom_image );
-   return(NULL);
-
-  }
-  
-/* 
-  Fin de l'operation cai_ouvre_creation_bil
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_bil                                      */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image BIL                  */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_lecture_canal_bil(image1, canal,        */       		      /* ------------------                        premiere_ligne,                 */
-/*                                           premiere_colonne,               */
-/*                                           nombre_lignes_lire ,            */
-/*                                           nombre_colonnes_lire,           */
-/*                                           pas_ligne ,pas_colonne,         */
-/*                 		             data_image )                    */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (int) : numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal_bil (S) (CAI_OK_KO) :     = CAI_KO si pb            */
-/*                                                 = CAI_OK si OK            */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_lecture_canal_bil(CAI_IMAGE *image1 ,  
-                                    int *canal ,           
-    		                    int *premiere_ligne  ,   
-     		                    int *premiere_colonne,
-                                    int *nombre_lignes_lire ,
-                                    int *nombre_colonnes_lire,
-                                    int *pas_ligne ,          
-                                    int *pas_colonne,
-		                    unsigned char *data_image )        
-
-{
-/*****************************************************************************/
-/* MOD : VERSION : 5.0 : FA : pb lecture ligne d'une image 24000x24000       */
-/*            EN 64bits, modification de int no_oct en long int no_oct       */
-/*****************************************************************************/
- int   num,i,j,k ;          /* variables de travail                          */
- long pt_oct,n;		    /* position courante dans le fichier image       */
- long no_oct;                /* numero du premier octet a lire                */
- int iret;                  /* indicateur d'erreur                           */
- int lig;                   /* indice de boucle sur les lignes               */
- int   oct_pix;             /* nb octets par pixels                          */
- long  nb_oct;              /* nb oct =1er octet a lire - position courante  */
- long  oct_lig;             /* nb oct. par ligne en considerant taille pixel */
- unsigned char *buf_lec;    /* buffer lecture d'une  ligne                   */
- unsigned char *deb,*pch;   /* pointeur chaine pour transfert  buffer sortie */
- unsigned char *data_image2;/* pointeur donnees image pour inversion octets  */
- int taille_image,Nb;       /* taille en octets de l'image                   */
-
-/*...........................
-  Initialisations diverses
-  ..........................*/
-   iret=CAI_OK;
-   num=image1->ACCES_CANAL_INT[*canal-1];
-   oct_pix=image1->NBOCT_PIX;
-   oct_lig=oct_pix*image1->NB_COL;
-
-/*..............................................
-        allocation de memoire pour lire une ligne image
- ............................................. */
-
-   buf_lec = (unsigned char *) calloc(oct_lig,sizeof(unsigned char));
-   if (buf_lec == NULL)
-   {
-      iret=CAI_KO;
-      strcpy(CAI_ERREUR,"Probleme allocation memoire");
-   }
-   else
-   {
-/*....................
-        Initialisation
-  ......................*/
-        lig=*premiere_ligne;
-        i=1;
-        pch=data_image;
-
-/*.....................
-         Pour chaque ligne a lire
-  .......................................*/
-        while ((i <= *nombre_lignes_lire)&&(iret==CAI_OK))
-        {  
-/*............................................
-	    Recherche de la position courante dans le fichier
-  ............................................*/
-            pt_oct=lseek(num,0L,1);
-
-/*................................
-            Calcul du numero du 1er octet a lire
-  ....................................*/
-               
-	   no_oct=(long)image1->POS_OCTET[*canal-1]+
-	          ((long)(lig-1)*(long)image1->NB_COL*
-		  (long)oct_pix*(long)image1->NB_CANAUX);
-
-
-/*..................................
-            Saut d'octets pour etre positionne sur la ligne a lire
-  .......................................*/
-            nb_oct=(long)(no_oct-pt_oct);
-            lseek(num,nb_oct,1);
-
-/*...........................................
-            lecture d'une ligne image
-  ................................................*/
-            n=read(num,buf_lec,oct_lig);
-
-            if (n<=0)
-            {
-             iret=CAI_KO;
-             strcpy(CAI_ERREUR,"Erreur lecture donnee image BIL");
-            }
-            else
-            { 
-/*......................................
-             Sauvegarde des donnees lues entenant compte du pas 
-             d'echantillonnage en colonne
-  ........................................*/           
-             deb=buf_lec+(*premiere_colonne-1)*oct_pix;
-             j=1;
-             while (j <= *nombre_colonnes_lire)
-	     {  
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : FA : anomalie a la lecture d'images codees sur plus */
-/*			      de 1 octet                                     */
-/*****************************************************************************/	
-               for (k=0;k<oct_pix;k=k+1)
-                {
-                  *(pch+k)=*(deb+k);
-                 }
-              j=j+1;
-              pch=pch+oct_pix;
-              deb=deb+(*pas_colonne*oct_pix);
-             }   
-             
-            }
-          i=i+1;
-          lig=lig+(*pas_ligne);
-
-        }        
-
-	free(buf_lec);
-   }
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte de l'information INTEL ou IEEE*/
-/*                             en lecture et ecriture dans l'entete .hd      */
-/*****************************************************************************/
-
-   if ( (iret!= CAI_KO) && (image1->INV_OCTETS==1) && (oct_pix!=1) )
-   {
-        taille_image = (*nombre_lignes_lire)*oct_pix*(*nombre_colonnes_lire);
-        data_image2 = NULL;
-        data_image2 = (unsigned char *) calloc(taille_image,
-						sizeof(unsigned char));    
-        if (data_image2 == NULL)
-        {
-           strcpy(CAI_ERREUR,"Erreur allocation memoire cai_lecture_canal");
-           iret=CAI_KO;
-        }
-	else
-        {
-	    /*modification ordre selon nb octets par pixel*/
-       	    swab( (void*)(data_image), (void*)(data_image2), taille_image);
-		
-	   if (oct_pix!=2)
-           { 
-              Nb = taille_image/2;
-	      cai_inverser_tableau(data_image, data_image2,Nb);
-	   }
-	   else 
-	     for (i=0; i<taille_image;i++)
-	     {
-	        /*stockage dans data_image*/
-	        data_image[i] = data_image2[i];
-	     }	
-
-           if (data_image2!= NULL) free(data_image2);
-        }   	   
-    }
-
-   return(iret);
-}
-/*
-  Fin de l'operation cai_lecture_canal_bil
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal_bil                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un canal d'une image bil                  */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ecriture_canal_bil(image1, canal,       */       		      /* ------------------                                 premiere_ligne,        */
-/*                                                    nombre_lignes_ecrire,  */
-/*                                                    nombre_colonnes_ecrire,*/
-/*                 		                      data_image )           */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal                 (E) (int) : numero du canal a ecrire            */
-/*     premiere_ligne        (E) (int) : premiere ligne a ecrire ds l'image  */
-/*     nombre_lignes_ecrire  (E) (int) : nombre de lignes a ecrire           */
-/*     nombre_colonnes_ecrire(E) (int) : nombre de lignes a ecrire           */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels ecris alloue et   */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_ecriture_canal_bil    (S) (CAI_OK_KO) : = CAI_KO si pb            */
-/*                                                     = CAI_OK si OK        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_ecriture_canal_bil (CAI_IMAGE *image1 ,  
-                                      int *canal ,           
-    		                      int *premiere_ligne  ,   
-                                      int *nombre_lignes_ecrire ,
-                                      int *nombre_colonnes_ecrire,
-		                      unsigned char *data_image )        
-
-{
-long	position_first_lig;	/* position de la 1ere ligne a ecrire    */
-long	position_courante;	/* position courante dans le fichier     */
-long	deplacement;		/* deplacement a effectuer               */
-int	i_ligne;		/* compteur de lignes                    */
-unsigned char *buff_lig;	/* tableau contenant une ligne a ecrire  */
-long	cr_write;		/* code retour de write                  */
-int num;                        /* descripteur de fichier                */
-int nboct_pix;			/* nombre d'octets par pixel             */
-int nb_canaux;			/* nombre de canaux de l'image totale    */
-
-/* ................
-   Initialisations 
-  .................*/
-
-i_ligne = 0;
-num = image1->ACCES_CANAL_INT[*canal-1];
-nboct_pix = image1->NBOCT_PIX;
-nb_canaux = image1->NB_CANAUX;
-position_first_lig = 0;
-position_courante = 0;
-deplacement = 0;
-
-/********************************************************/
-/* Calcul de la position de la premiere ligne a ecrire 	*/ 
-/********************************************************/
-/*****************************************************************************/
-/* MOD : VERSION : 4.6 : FA : pb ouverture en modification et ecriture       */
-/*    Modification pour compatibilite ouverture en modification              */
-/*****************************************************************************/
-position_first_lig = (long) ( image1->POS_OCTET[*canal-1] + 
- (*premiere_ligne - 1) * (*nombre_colonnes_ecrire) * nboct_pix * nb_canaux );
-
-
-/********************************************************/
-/* Recuperation de la position courante			*/
-/********************************************************/
-
-position_courante = lseek ( num , 0L , 1 );
-
-
-/********************************************************/
-/* Calcul du deplacement jusqu'a la 1ere ligne a ecrire	*/
-/********************************************************/
-
-deplacement = position_first_lig - position_courante;
-
-
-/********************************************************/
-/* TANT QUE il y a des lignes a ecrire                 	*/
-/********************************************************/
-while (i_ligne < (*nombre_lignes_ecrire))
-{
-
-/********************************************************/
-/*	extraction de la ligne du tableau 		*/
-/********************************************************/
-
-	buff_lig = data_image + (*nombre_colonnes_ecrire) * nboct_pix * i_ligne;
-
-/********************************************************/
-/*	deplacement jusqu'a la ligne a ecrire		*/
-/********************************************************/
-
-	lseek ( num , deplacement , 1 ); 
-
-/********************************************************/
-/*	ecriture de la ligne				*/
-/********************************************************/
-
-	cr_write = write ( num , buff_lig,(*nombre_colonnes_ecrire)*nboct_pix );
-	if ( cr_write != (*nombre_colonnes_ecrire)*nboct_pix )
-	{
-		strcpy ( CAI_ERREUR , "Erreur ecriture canal image bil\n" );
-		goto ERREUR;
-	}
- 
-/********************************************************/
-/*	mise a jour du deplacement jusqu'a la ligne	*/
-/*	suivante                                   	*/
-/********************************************************/
-
-	deplacement = ( nb_canaux - 1 ) * (*nombre_colonnes_ecrire)*nboct_pix;
-
-/********************************************************/
-/*	incrementation du nombre de lignes		*/
-/********************************************************/
-
-	i_ligne++;
-
-/********************************************************/
-/* FIN TANT QUE						*/
-/********************************************************/
-}
-
-
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-/* 
-  Fin de l'operation cai_ecriture_canal_bil
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_bil                                              */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format bil et de           */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_bil(image1)                       */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_bil    (S) (CAI_OK_KO) :       = CAI_KO si pb               */
-/*                                              = CAI_OK si OK               */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO  cai_ferme_bil (CAI_IMAGE *image1)
-
-
-{
-
- int iret;    /* code retour de l'operation      */
- int i_can;   /* indice du canal a fermer        */
- int num;     /* descripteur du fichier a fermer */
-
- iret=CAI_OK;
-/*.............................................
-   Fermeture du fichier qui contient tous les canaux
-  .............................................*/
-  num=image1->ACCES_CANAL_INT[0];
-  if (num>0) close(num);
-
-
-  return (iret);
-}
-
-/*
-  Fin de l'operation cai_ferme_bil
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_bil                                           */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stocke en bil et de         */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_dest_ima_bil(repertoire,nom_ima)        */       		      /* ------------------                                                        */
-/*     repertoire   (E) (char *) : repertoire de l'image a detruire          */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_dest_ima_bil (S) (CAI_OK_KO) : = CAI_KO si pb                     */
-/*                                            = CAI_OK si OK                 */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO cai_dest_ima_bil ( char *repertoire , 
-                                 char *nom_ima )
-
-
-{
-int	i_can;			/* compteur de canaux */
-int     iret;                   /* code retour fonction fermetrue lecture */
-char	str_num_canal[3];	/* suffixe numero du canal */
-char	nom_fic_entete[1024];	/* nom du fichier entete a detruire */
-char    nom_ima_complet[1024];  /* repertoire + nom de l'image */
-char	nom_fic_canal[1024];	/* nom du fichier canal a detruire */
-
-int	cr_stat;		/* code retour de fonction status de fichier */
-struct stat buf_stat;		/* structure decrivant status de fichier */ 
-
-CAI_IMAGE   *image1;             /* structure ouverture image */
-int         nb_can;	        /* nombre de canaux de l'image */
-int         nboct_pix;		/* nombre d'octets par pixel image */
-int         nb_col;	        /* nombre de colonnes de l'image */
-int         nb_lig;             /* nombre de lignes de l'image */
-
-/************************************************/
-/* Constitution du nom du fichier d'entete	*/
-/************************************************/
-
-if ((long)strlen(repertoire)!= 0)
-{
-  sprintf ( nom_ima_complet ,"%s/%s", repertoire ,nom_ima);
-}
-else
-{
-  strcpy ( nom_ima_complet , nom_ima);
-}
-  sprintf(nom_fic_entete ,"%s.bil_hd", nom_ima_complet);
- 
-/************************************************/
-/* Destruction du fichier d'entete		*/
-/************************************************/
-
-cr_stat = stat ( nom_fic_entete , &buf_stat );
-if ( cr_stat == 0 )
-	unlink ( nom_fic_entete );
-else
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-{
-  sprintf(nom_fic_entete ,"%s.BIL_HD", nom_ima_complet);
-  cr_stat = stat ( nom_fic_entete , &buf_stat );
-  if ( cr_stat == 0 )
-	unlink ( nom_fic_entete );
-
-}
- 
-/************************************************/
-/* Destruction du fichier radiometrie		*/
-/************************************************/
-sprintf(nom_fic_entete ,"%s.bil", nom_ima_complet);
-cr_stat = stat ( nom_fic_entete , &buf_stat );
-if ( cr_stat == 0 )
-	unlink ( nom_fic_entete );
-else
-{
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-
-  sprintf(nom_fic_entete ,"%s.BIL", nom_ima_complet);
-  cr_stat = stat ( nom_fic_entete , &buf_stat );
-  if ( cr_stat == 0 )
-	unlink ( nom_fic_entete );
-
-}
-
-
-return (CAI_OK);
-
-}
-/*
- Fin de l'operation cai_dest_ima_bil
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_modif_nbbitspix_bil                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    permet de modifier le nombre de bits significatifs par pixel    */
-/* -----     dans l'entete de fichier (.hd)				     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_modif_nbbitspix_bil(image1,NbBitsPix)   */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     NbBitsPix   (E) (int)          : nb de bits significatifs par pixel   */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_modif_nbbitspix_bil(CAI_IMAGE *image1,int NbBitsPix)
-
-{
-  int Can;		/* indice de boucle sur les canaux */
-  char fichierE[1024];  /* fichier a traiter               */
-  char Command[1024];   /* Commande a envoyer au systeme   */
-  FILE *fic;		/* pointeur descripteur fichier    */
-  int pt_oct;		/* position courante ds le fichier */
-  int *Ref;             /* Reference du SDS des fichiers   */
-  char label[80];       /* contient un enregist  fichier   */
-  char repert[1024];    /* repertoire de stockage image    */
-  char image[1024];     /* nom de l'image a ouvrir         */
-  char car;		/* variable de travail             */
-  int icr,tempo;        /* code retour fonction            */
-  CAI_CHAINE *NomIma;
-  int retour;
-
-        
-/* Ouverture du fichier d'entete */
-
-   fichierE[0]='\0';
-   sprintf(fichierE,"%s.bil_hd",image1->NOM_IMAGE);
-   fic = fopen(fichierE,"w");
-   if (fic == NULL)
-   {
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-      fichierE[0]='\0';
-      sprintf(fichierE,"%s.BIL_HD",image1->NOM_IMAGE);
-      fic = fopen(fichierE,"w");
-      if (fic == NULL)
-      {
-
-         sprintf(CAI_ERREUR,
-	   "Erreur: Modification fichier %s impossible\n",fichierE);
-          goto ERREUR;
-      }
-   }
-
-/* Modification du fichier d'entete */
-   rewind(fic);
-   fprintf ( fic , "COMMENT\n");
-   fprintf ( fic , "%s\n" ,image1->COMMENT);
-   fprintf ( fic , "CHANNELS\n" );
-   fprintf ( fic , "%3d\n" , image1->NB_CANAUX);
-   fprintf ( fic , "LINES\n" );
-   fprintf ( fic , "%5d\n" , image1->NB_LIG);
-   fprintf ( fic , "COLUMNS\n" );
-   fprintf ( fic , "%5d\n" , image1->NB_COL );
-   fprintf ( fic , "BITS PER PIXEL\n" );
-   fprintf ( fic , "%2d\n" , NbBitsPix );
-   fprintf ( fic , "TYPE\n");
-   fprintf ( fic , "%s\n",image1->COD_PIX );  
-   fprintf ( fic,  "SENSCODAGE\n");
-   retour=strncmp((char *)image1->SENS_COD,"BE",2);
-   if (retour == 0)
-     fprintf ( fic , "IEEE\n"  );
-   else
-     fprintf ( fic , "INTEL\n"  );
-
-  fclose ( fic );
-
-  return(CAI_OK);
-
-ERREUR :
-  return(CAI_KO);
-}
-/*
- Fin de l'operation cai_modif_nbbitspix_bil
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_modifie_bil                                      */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lec-ecr d'une image au format bil       */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_modifie_bil(nom_image,           */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels              */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_modifie_bil (S) (CAI_IMAGE *)  : = NULL si pb               */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_modifie_bil(char *repert,
-				     char *nom_image,
-				     int  *nb_can,
-				     int  *nboct_pix,
-				     int  *nb_col,
-				     int  *nb_lig)
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   char label[80];		/* contient un enregistrement du fichier    */
-   int nbbit;			/* nb de bits par pixel du fichier en-tete  */
-   int retour;			/* retour de la fonction comparaison chaines*/ 
-   char *deb,*deb1,*pch0;	/* pointeurs sur chaine de caracteres       */
-   int i,num;			/* indice 				    */
-   int nbplan;			/* nombre de canaux dans le fichier en-tete */
-   char COD_PIX[80];	        /* type de codage du pixel (optionnel)      */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   char *type_machine;          /* ordre rangement octets machine de travail*/
-   int cmp;			/* retour de comparaison de chaine          */
-   int reconnaissance_type;
- 
-   /*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
- *nb_can=0;
-
- *nb_lig=0;
-
- *nb_col=0;
-
- *nboct_pix=0;
- 
- iret=1;
- pch0=NULL;
- reconnaissance_type = -1;
-
- image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-
- /*..................................
-   determination ordre de rangement 
-   des octets sur machine de travail
-  ......................................*/ 
-   type_machine = cai_test_pFpf();
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.1: FA :Rajout des tests sur les retours d'allocation    */
-/*			   memoire                                           */
-/*****************************************************************************/
-
- if (image1==NULL)
- {
-    iret=0;
-    strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_modifie");
- }
- else
- {
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if((long int)strlen(repert)!=0)
-   {
-      sprintf(nom_fic,"%s/%s.bil_hd",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.bil_hd",nom_image);
-   }
-
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   fic_in=NULL;
-   fic_in=fopen(nom_fic,"r");
-   if (fic_in==NULL)
-   {
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-      nom_fic[0]='\0';
-      if((long int)strlen(repert)!=0)
-      {
-          sprintf(nom_fic,"%s/%s.BIL_HD",repert,nom_image);
-      }
-      else
-      {
-         sprintf(nom_fic,"%s.BIL_HD",nom_image);
-       }
-      fic_in=fopen(nom_fic,"r");
-      if (fic_in==NULL)
-      {
-         iret=0;
-         strcpy(CAI_ERREUR,"Erreur ouverture fichier entete BIL-CNES");
-      }
-    }
-    if (iret !=0)
-    {
-/*....................................
-     Decodage du commentaire
-  ......................................*/
-     fscanf(fic_in,"%s\n",label);
-     retour=strncmp(label,"COMMENT",7);
-     if (retour!=0)
-     {
-	strcpy(CAI_ERREUR,"Informations incoherentes ligne COMMENT");
-	iret=0;
-      }
-     else
-     {
-        fgets(image1->COMMENT,80,fic_in);
-
-
- /*........................................
-        Decodage du nombre de canaux
-  .........................................*/
-        fscanf(fic_in,"%s\n",label);
-	retour=strncmp(label,"CHANNELS",8);
-	if (retour!=0)
-	{
-	   strcpy(CAI_ERREUR,"Informations incoherentes ligne CHANNELS");
-	   iret=0;
-	 }
-	else
-	{
-	   fscanf(fic_in,"%d\n",&nbplan);
-           *nb_can=nbplan;
-
-/*.......................................
-	   Decodage du nombre de lignes
-  ........................................*/
-	    fscanf(fic_in,"%s\n",label);
-	    retour=strncmp(label,"LINES",5);
-	    if (retour!=0)
-	    {
-	       strcpy(CAI_ERREUR,"Informations incoherentes ligne LINES");
-	       iret=0;
-	     }
-	     else
-	     {
-	       fscanf(fic_in,"%d\n",nb_lig);
-
-
-/*.......................................
-	  Decodage du nombre de colonnes
-  ........................................*/
-	       fscanf(fic_in,"%s\n",label);
-	       retour=strncmp(label,"COLUMNS",7);
-	       if (retour!=0)
-	       {
-	    	 strcpy(CAI_ERREUR,"Informations incoherentes ligne COLUMNS");
-	    	 iret=0;
-	  	}
-	       else
-	       {
-
-		 fscanf(fic_in,"%d\n",nb_col);
-
-/*.......................................
-	  Decodage du nombre de bits par pixel
-  ........................................*/
-	  	 fgets(label,80,fic_in);
-	  	 retour=strncmp(label,"BITS PER PIXEL",14);
-		 if (retour!=0)
-	  	 {
-	    	   strcpy(CAI_ERREUR,"Informations incoherentes ligne BITS ");
-	    	   iret=0;
-	  	  }
-	  	 else
-	    	 {
-		   fscanf(fic_in,"%d\n",&nbbit);
-
-/*........................................................
-	  Decodage du type de codage du pixel (optionnel)
-  ........................................................*/
-     		   fscanf(fic_in,"%s\n",label);
-     		   retour=strncmp(label,"TYPE",4);
-     		   if (retour==0)
-                   {
-      		      fscanf(fic_in,"%s\n",COD_PIX);
-		      retour=1;
-                   }
-		   else
-		     sprintf(COD_PIX,"UND");
-
-        	   pch0=cai_En_majuscule( COD_PIX );
-
-/* 	Verification si type de codage reconnu */
-         	   reconnaissance_type = cai_istyp_connu(pch0);
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte de l'information INTEL ou IEEE*/
-/*                             en lecture et ecriture dans l'entete .hd      */
-/*****************************************************************************/
-		   if (retour !=0) fscanf(fic_in,"%s\n",label);
-		   retour=strncmp(label,"SENSCODAGE",10);
-	 	   if (retour!=0)
-	 	   {
-/*      Si absent, pas d'inversion      */    
-			image1->INV_OCTETS =0;
-			sprintf(image1->SENS_COD,type_machine);
-	 	    }
-		    else
-		    {
-  			 fscanf(fic_in,"%s\n",label);
-  			 retour=strncmp(label,"IEEE",4);
-   			 if (retour==0)	
-				sprintf(image1->SENS_COD,"BE");
-   			 else
-				sprintf(image1->SENS_COD,"LE");
-   			 cmp = strncmp(type_machine,image1->SENS_COD,2);
-   			 if (cmp!=0)
- 	  				image1->INV_OCTETS =1;
-   			 else
-	 				 image1->INV_OCTETS =0;
-                     }	 	   
-
-		  }
-		}
-	      }
-	  }
-      }
-    }
-/*..................................
-   Fermeture du fichier 
-  ......................................*/
-   if (fic_in !=NULL) fclose(fic_in);
-
-   if (iret !=0)
-   {
-/*..................................
-     Initialisation du nombre d'octets par pixel
-  ........................................................*/
-        if ((nbbit%8)==0)
-		*nboct_pix=(int)(nbbit/8);
-       else
-		*nboct_pix=(int)((nbbit/8)+1);
-
-       if (reconnaissance_type != -1)
-       {
-	    	sprintf(image1->COD_PIX,"%s",COD_PIX);
-       }
-       else
-       {
-     	  sprintf(image1->COD_PIX,"UND");
-
-          if (*nboct_pix==1)
-              sprintf(image1->COD_PIX,"OCT");
-          else if (*nboct_pix==2)
-	      sprintf(image1->COD_PIX,"I2");
-          else if (*nboct_pix==4)
-          {
-	     retour=strncmp(COD_PIX,"I4",2);
-             if (retour==0)
-	        sprintf(image1->COD_PIX,"I4");
-             else
-             {
-	 	retour=strncmp(COD_PIX,"R4",2);
-          	if (retour==0)
-	    	  sprintf(image1->COD_PIX,"R4");
-             }
-           }
-           else if (*nboct_pix==8)
-           {
-		sprintf(image1->COD_PIX,"R8");	   
-           }
-         }
-
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-
-     nom_fic[0]='\0';
-     nom_fic_canal[0]='\0';
-
-     if((long int)strlen(repert)!=0)
-     {
-       sprintf(nom_fic_canal,"%s/%s.bil",repert,nom_image);
-      }
-      else
-      {
-       sprintf(nom_fic_canal,"%s.bil",nom_image);
-      }
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : FA : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-     retour = stat ( nom_fic_canal , &buf_stat );
-     if ( retour != 0 )
-     { 
-       if((long int)strlen(repert)!=0)
-       {
-         sprintf(nom_fic_canal,"%s/%s.BIL",repert,nom_image);
-       }
-       else
-       {
-        sprintf(nom_fic_canal,"%s.BIL",nom_image);
-       }
-     }
-     deb = image1->NOM_FIC_CAN;
-     deb1= image1->NOM_UTIL_CAN;
-     num=open(nom_fic_canal,O_RDWR|O_BINARY,0);
-     if (num!= -1)
-     {
-
-       for (i=0;i<*nb_can;i=i+1)
-       {
-           sscanf(nom_image,"%s",deb);
-  	   deb=deb+100;
-           sscanf(nom_image,"%s",deb1);
-  	   deb1=deb1+100;
-           image1->ACCES_CANAL_INT[i]=num;
-           image1->POS_OCTET[i]=(*nb_col)*i*(*nboct_pix);
-        }
-      }
-      else
-         iret=0;
-     }
-    }
-    if (iret == 0)
-    {
-	return (NULL);
-     }
-    else
-    {
-      return(image1);
-     }
-
-}
-
-/* 
-   Fin de l'operation cai_ouvre_modifie_bil
-*/
diff --git a/Utilities/CAI/cai_dll/src/cai_bip.c b/Utilities/CAI/cai_dll/src/cai_bip.c
deleted file mode 100755
index 6d7c520089..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_bip.c
+++ /dev/null
@@ -1,1807 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_bip.c                                                     */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format bip                                        */ 
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CISI)                                   */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    Mai 1996                                            */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V2                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 3.3 : DM : optimisation des acces                         */
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 : FA:Rajout des tests sur les retours d'allocation    */
-/*			   memoire                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : FA : modifications pour compatibilite HP64bits      */
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : test sur  fclose  pour PC/LINUX                */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte des I2,I4,UI2,UI4 et R8       */
-/*                             en lecture et ecriture                        */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte de l'information INTEL ou IEEE*/
-/*                             en lecture et ecriture dans l'entete .hd      */
-/*****************************************************************************/
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-
-
-# include <stdio.h>
-# include <string.h>
-# include <stdlib.h>
-# include <unistd.h>
-# include <sys/types.h>
-#include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-#include <errno.h>
-
-#define _CAI_IMAGE
-#define IN_CAI_BIP
-
-# include "cai_image.h"
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header: cai_bip.c,v 1.11 01/05/31 10:46:56 cmf Exp $";
-
-
-extern char *getenv();
-
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_bip                                          */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images au format bip                    */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_ima_bip(repert,tab_ima)             */
-/* -----------------                                                         */
-/*                                                                           */
-/*     repert       (E) (char *)   : repertoire a explorer		     */
-/*     tab_ima      (S) (char ***) : pointeur sur tableau des images listees */
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_ima_bip       (S) (int)     : = -1 repertoire inexistant    */                                    /*					       = > 0 nombre d'images listees */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-long int cai_liste_ima_bip (char *repert,
-		           char ***tab_ima)
-
-{
-
-   DIR *dirp;		/* pointeur sur structure ouverture repertoire */
-   struct dirent *dp;   /* structure resultat de la fonction readdir   */
-   char *pch0,*pch1;    /* pointeurs sur chaine de caracteres          */ 
-   int nb_ima;          /* nombre d'images bip identifiees             */
-   int i;               /* indice de boucle                            */
-   long int ll,dif;     /* variables de travail                        */
-   char blanc;          /* caractere blanc                             */
-
-
-/*........................................
-   INITIALISATION et ouverture du repertoire choisi
-  .........................................*/
-   nb_ima=0;
-   dirp=opendir(repert);
-   blanc = ' ';
-
-   if(dirp!=NULL)
-   {
-
-
-/*......................................
-
-   premiere passe pour comptabiliser les images du format donne
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE BIP_CNES
-      (EXTENSION =.bip)
-   ..........................................*/
-   while((dp=readdir(dirp))!=NULL)
-   {
-     pch0=strstr(dp->d_name,".bip");
-     if (pch0 != NULL)
-     {
-        ll = (long int)strlen(dp->d_name);
-        dif = (long int)(dp->d_name-pch0);
-        dif=labs(dif);
-        pch1=pch0+4;
-        if (((ll-4)==dif)||((*pch1)==blanc))
-	     nb_ima=nb_ima+1;
-     
-     }
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-	 else
-         {
-    		pch0=strstr(dp->d_name,".BIP");
-     	        if (pch0 != NULL)
-     	        {
-        	    ll = strlen(dp->d_name);
-        	    dif = (long int)(dp->d_name-pch0);
-        	    dif=labs(dif);
-        	    pch1=pch0+4;
-        	    if (((ll-4)==dif)||((*pch1)==blanc))
-	     		nb_ima=nb_ima+1;
-     	        }
-    	 }
-
-   }
-
-    (void)closedir(dirp);
-
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES DU FORMAT BIP
-     ......................................*/
-    *tab_ima = (char **) calloc(nb_ima,sizeof(char *));
-    for (i=0;i<nb_ima;i=i+1)
-      (*tab_ima)[i]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE BIP_CNES
-      (EXTENSION =.bip)
-   SI C`EST LE CAS,STOCKAGE DANS LA LISTE
-   ..........................................*/
-   dirp=opendir(repert);
-
-   nb_ima=0;
-   while((dp=readdir(dirp))!=NULL)
-   {
-     pch0=strstr(dp->d_name,".bip");
-     if (pch0 != NULL)
-     {
-        ll = (long int)strlen(dp->d_name);
-        dif = (long int)(dp->d_name-pch0);
-        dif=labs(dif);
-        pch1=pch0+4;
-        if (((ll-4)==dif)||((*pch1)==blanc))
-        {
-            *pch0='\0';
-            strcpy((*tab_ima)[nb_ima],dp->d_name);
-	    nb_ima=nb_ima+1;
-        }
-     
-     }
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-     else
-     {
-    	 pch0=strstr(dp->d_name,".BIP");
-     	 if (pch0 != NULL)
-     	 {
-        	    ll = strlen(dp->d_name);
-        	    dif = (long int)(dp->d_name-pch0);
-        	    dif=labs(dif);
-        	    pch1=pch0+4;
-        	    if (((ll-4)==dif)||((*pch1)==blanc))
-	     		nb_ima=nb_ima+1;
-          }
-     }
-
-   }
-
-    (void)closedir(dirp);
-
-
-   }
-   else
-   {
-    /* repertoire inexistant */
-     nb_ima=-1;
-     }
-    return(nb_ima);
-
-}
-
-/* Fin de l'operation cai_liste_ima_bip
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_bip                                      */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image au format bip       */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :     CAI_IMAGE *cai_ouvre_lecture_bip (nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels              */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_bip     (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_lecture_bip(char *repert,
-				    char * nom_image,
-				    int  *nb_can,
-				    int  *nboct_pix,
-				    int  *nb_col,
-				    int  *nb_lig)
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   char label[80];		/* contient un enregistrement du fichier    */
-   int nbbit;			/* nb de bits par pixel du fichier en-tete  */
-   int retour;			/* retour de la fonction comparaison chaines*/ 
-   char *deb,*deb1,*pch0;	/* pointeurs sur chaine de caracteres       */
-   int i,num;			/* indice 				    */
-   int nbplan;			/* nombre de canaux dans le fichier en-tete */
-   char COD_PIX[80];	        /* type de codage du pixel (optionnel)      */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   char *type_machine;          /* ordre rangement octets machine de travail*/
-   int cmp;			/* retour de comparaison de chaine          */
-   int reconnaissance_type;
-
-   /*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-
-   *nb_lig=0;
-
-   *nb_col=0;
-
-   *nboct_pix=0;
- 
-   iret=1;
-
- /*..................................
-   determination ordre de rangement 
-   des octets sur machine de travail
-  ......................................*/ 
-   type_machine = cai_test_pFpf();
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1: FA Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_lecture");
-    }
-   else
-   {
-
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!= 0)
-   {
-      sprintf(nom_fic,"%s/%s.bip_hd",repert,nom_image);
-   }
-   else
-   {
-     sprintf(nom_fic,"%s.bip_hd",nom_image);
-   }
-
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   fic_in=NULL;
-   fic_in=fopen(nom_fic,"r");
-   if (fic_in==NULL)
-   {
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-      nom_fic[0]='\0';
-      if((long int)strlen(repert)!=0)
-      {
-          sprintf(nom_fic,"%s/%s.BIP_HD",repert,nom_image);
-      }
-      else
-      {
-         sprintf(nom_fic,"%s.BIP_HD",nom_image);
-       }
-      fic_in=fopen(nom_fic,"r");
-      if (fic_in==NULL)
-      {
-         iret=0;
-         strcpy(CAI_ERREUR,"Erreur ouverture fichier entete BIP-CNES");
-      }
-    }
-    if (iret !=0)
-    {
-/*....................................
-     Decodage du commentaire
-  ......................................*/
-     fscanf(fic_in,"%s\n",label);
-     retour=strncmp(label,"COMMENT",7);
-     if (retour!=0)
-     {
-	strcpy(CAI_ERREUR,"Informations incoherentes ligne COMMENT");
-	iret=0;
-      }
-     else
-     {
-        fgets(image1->COMMENT,80,fic_in);
-
-
- /*........................................
-        Decodage du nombre de canaux
-  .........................................*/
-        fscanf(fic_in,"%s\n",label);
-	retour=strncmp(label,"CHANNELS",8);
-	if (retour!=0)
-	{
-	   strcpy(CAI_ERREUR,"Informations incoherentes ligne CHANNELS");
-	   iret=0;
-	 }
-	else
-	{
-	   fscanf(fic_in,"%d\n",&nbplan);
-           *nb_can=nbplan;
-
-/*.......................................
-	   Decodage du nombre de lignes
-  ........................................*/
-	    fscanf(fic_in,"%s\n",label);
-	    retour=strncmp(label,"LINES",5);
-	    if (retour!=0)
-	    {
-	       strcpy(CAI_ERREUR,"Informations incoherentes ligne LINES");
-	       iret=0;
-	     }
-	     else
-	     {
-	       fscanf(fic_in,"%d\n",nb_lig);
-
-
-/*.......................................
-	  Decodage du nombre de colonnes
-  ........................................*/
-	       fscanf(fic_in,"%s\n",label);
-	       retour=strncmp(label,"COLUMNS",7);
-	       if (retour!=0)
-	       {
-	    	 strcpy(CAI_ERREUR,"Informations incoherentes ligne COLUMNS");
-	    	 iret=0;
-	  	}
-	       else
-	       {
-
-		 fscanf(fic_in,"%d\n",nb_col);
-
-/*.......................................
-	  Decodage du nombre de bits par pixel
-  ........................................*/
-	  	 fgets(label,80,fic_in);
-	  	 retour=strncmp(label,"BITS PER PIXEL",14);
-		 if (retour!=0)
-	  	 {
-	    	   strcpy(CAI_ERREUR,"Informations incoherentes ligne BITS ");
-	    	   iret=0;
-	  	  }
-	  	 else
-	    	 {
-		   fscanf(fic_in,"%d\n",&nbbit);
-
-/*........................................................
-	  Decodage du type de codage du pixel (optionnel)
-  ........................................................*/
-     		   fscanf(fic_in,"%s\n",label);
-     		   retour=strncmp(label,"TYPE",4);
-     		   if (retour==0)
-                   {
-      		      fscanf(fic_in,"%s\n",COD_PIX);
-		      retour=1;
-                   }
-		   else
-		     sprintf(COD_PIX,"UND");
-        	   pch0=cai_En_majuscule( COD_PIX );
-
-/* 	Verification si type de codage reconnu */
-         	   reconnaissance_type = cai_istyp_connu(pch0);
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte de l'information INTEL ou IEEE*/
-/*                             en lecture et ecriture dans l'entete .hd      */
-/*****************************************************************************/
-		   if (retour !=0) fscanf(fic_in,"%s\n",label);
-		   retour=strncmp(label,"SENSCODAGE",10);
-	 	   if (retour!=0)
-	 	   {
-/*      Si absent, pas d'inversion      */    
-			image1->INV_OCTETS =0;
-			sprintf((char *)image1->SENS_COD,type_machine);
-	 	    }
-		    else
-		    {
-  			 fscanf(fic_in,"%s\n",label);
-  			 retour=strncmp(label,"IEEE",4);
-   			 if (retour==0)	
-				sprintf((char *)image1->SENS_COD,"BE");
-   			 else
-				sprintf((char *)image1->SENS_COD,"LE");
-   			 cmp = strncmp(type_machine,image1->SENS_COD,2);
-   			 if (cmp!=0)
- 	  			image1->INV_OCTETS =1;
-   			 else
-	 			image1->INV_OCTETS =0;
-                     }	 	
-		  }
-		}
-	      }
-	  }
-      }
-    }
-/*..................................
-   Fermeture du fichier 
-  ......................................*/
-   if (fic_in !=NULL) fclose(fic_in);
-
-   if (iret !=0)
-   {
-/*..................................
-     Initialisation du nombre d'octets par pixel
-  ........................................................*/
-     if ((nbbit%8)==0)
-	*nboct_pix=(int)(nbbit/8);
-     else
-	*nboct_pix=(int)((nbbit/8)+1);
-     image1->NB_BITS_PIX=nbbit;
-
-     if (reconnaissance_type != -1)
-     {
-	    	sprintf(image1->COD_PIX,"%s",COD_PIX);
-     }
-     else
-     {
-     	  sprintf(image1->COD_PIX,"UND");
-
-          if (*nboct_pix==1)
-              sprintf(image1->COD_PIX,"OCT");
-          else if (*nboct_pix==2)
-	      sprintf(image1->COD_PIX,"I2");
-          else if (*nboct_pix==4)
-          {
-	     retour=strncmp(COD_PIX,"I4",2);
-             if (retour==0)
-	        sprintf(image1->COD_PIX,"I4");
-             else
-             {
-	 	retour=strncmp(COD_PIX,"R4",2);
-          	if (retour==0)
-	    	  sprintf(image1->COD_PIX,"R4");
-             }
-           }
-           else if (*nboct_pix==8)
-           {
-		sprintf(image1->COD_PIX,"R8");	   
-           }
-       }
-
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-
-     nom_fic[0]='\0';
-     nom_fic_canal[0]='\0';
-
-     if ((long int)strlen(repert)!= 0)
-     {
-       sprintf(nom_fic_canal,"%s/%s.bip",repert,nom_image);
-      }
-      else
-      {
-       sprintf(nom_fic_canal,"%s.bip",nom_image);
-      }
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : FA : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-     retour = stat ( nom_fic_canal , &buf_stat );
-     if ( retour != 0 )
-     { 
-       if((long int)strlen(repert)!=0)
-       {
-         sprintf(nom_fic_canal,"%s/%s.BIP",repert,nom_image);
-       }
-       else
-       {
-        sprintf(nom_fic_canal,"%s.BIP",nom_image);
-       }
-     }
- 
-     deb = image1->NOM_FIC_CAN;
-     deb1= image1->NOM_UTIL_CAN;
-     num=open(nom_fic_canal,O_RDONLY|O_BINARY,0);
-     if (num!= -1)
-     {
-
-       for (i=0;i<*nb_can;i=i+1)
-       {
-           sscanf(nom_image,"%s",deb);
-  	   deb=deb+100;
-           sscanf(nom_image,"%s",deb1);
-  	   deb1=deb1+100;
-           image1->ACCES_CANAL_INT[i]=num;
-           image1->POS_OCTET[i]=0;
-        }
-      }
-      else
-         iret=0;
-     }
-    }
-    if (iret == 0)
-    {
-	return (NULL);
-     }
-    else
-    {
-      return(image1);
-     }
-
-}
-
-/* 
-   Fin de l'operation cai_ouvre_lecture_bip
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_bip                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format bip et de tous les fichiers qui la composent          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :    CAI_IMAGE *cai_ouvre_creation_bip (nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            label)           */
-/*                                                                           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_bip     (S) (CAI_IMAGE *) : =NULL si pb            */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_creation_bip(char *repert,
-				      char *nom_image,
-				      int *nb_can,
-				      int *nboct_pix,
-				      int *nb_col,
-				      int *nb_lig,
-				      char *label)
-{
-   FILE *fic;		        /* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   int retour;			/* retour de fonction 			    */ 
-   int i,num,Coher;		/* indice 				    */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   char *type_machine;          /* ordre rangement octets machine de travail*/
-   int reconnaissance_type;
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1: FA Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_creation");
-     goto ERREUR;
-   }
-
-/*..................................
-   determination ordre de rangement 
-   des octets sur machine de travail
-  ......................................*/ 
-   type_machine = cai_test_pFpf();
-
-/*.................................................
-   Constitution du nom du fichier entete et verification qu'il
-   n'existe pas deja
-  .................................................*/
-
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!= 0)
-   {
-       sprintf(nom_fic,"%s/%s.bip_hd",repert,nom_image);
-   }
-   else
-   {
-       sprintf(nom_fic,"%s.bip_hd",nom_image);
-   }
-   
-   retour = stat ( nom_fic , &buf_stat );
-   if ( retour == 0 )
-   { 
-	sprintf ( CAI_ERREUR , "L'image %s BIP existe \n" , nom_image );
-	goto ERREUR;
-   }
-
-/*...............................................................
-  constitution du nom de fichier correspondant a la radiometrie de l'image
-  Verification qu'il n'existe pas deja
-  Ouverture du fichier en ecriture
-  .................................................................*/
-
-   nom_fic_canal[0]='\0';
-   sscanf(nom_fic,"%s",nom_fic_canal);
-   nom_fic_canal[strlen(nom_fic_canal)-3]='\0';
-   retour = stat ( nom_fic_canal , &buf_stat );
-
-   if ( retour == 0 )
-   { 
-	sprintf ( CAI_ERREUR , "L'image %s BIP existe \n" , nom_image );
-	goto ERREUR;
-   }
-
-   num = open(nom_fic_canal,O_RDWR|O_CREAT|O_BINARY,PERMS); 
-   if (num == -1)
-   {
-
-     sprintf(CAI_ERREUR,"Erreur: Creation %s impossible\n",nom_fic_canal);
-     goto ERREUR;
-   } 
-
-   for (i=0;i<*nb_can;i=i+1)
-   {
-     image1->ACCES_CANAL_INT[i]=num;
-     image1->POS_OCTET[i]=0;
-    }
-
-/*......................................................
-  Ouverture du fichier entete en ecriture 
-  Ecriture du contenu
-  ..........................................................*/
-  fic = fopen(nom_fic,"w");
-  if (fic == NULL)
-  {
-      sprintf(CAI_ERREUR,"Erreur: Creation fichier %s impossible\n",nom_fic);
-      goto ERREUR;
-   }
-
-  retour=fprintf ( fic , "COMMENT\n");
-  if (retour == 0)
-  {
-      sprintf(CAI_ERREUR,"Erreur: Ecriture %s impossible\n",nom_fic);
-      goto ERREUR;
-   }
-
-  fprintf ( fic , "%s\n" , label );
-  fprintf ( fic , "CHANNELS\n" );
-  fprintf ( fic , "%3d\n" , *nb_can );
-  fprintf ( fic , "LINES\n" );
-  fprintf ( fic , "%5d\n" , *nb_lig );
-  fprintf ( fic , "COLUMNS\n" );
-  fprintf ( fic , "%5d\n" , *nb_col );
-  fprintf ( fic , "BITS PER PIXEL\n" );
-  fprintf ( fic , "%2d\n" , (*nboct_pix)*8 );
-  fprintf ( fic , "TYPE\n");
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  Maj du tag TYPE lorsque l'utilisateur le      */
-/*                                  precise dans le param  "label"           */
-/*****************************************************************************/
-/* Verification si type de codage reconnu dans le label */
-  reconnaissance_type = cai_istyp_connu(label);
-  if (reconnaissance_type == -1)
-  {
- 	if (*nboct_pix==1)
-    		sprintf ( image1->COD_PIX , "OCT" );
-  	else  if (*nboct_pix==2)
-   		sprintf ( image1->COD_PIX , "I2" );
-  	else if (*nboct_pix==4)
-  	{
-/*****************************************************************************/
-/* MOD : VERSION : 5.1 : DM :  Maj du tag TYPE lorsque l'image est codée     */
-/* en reel  et que l'utilisateur le precise dans le param  "label"           */
-/*****************************************************************************/
-     		if ((strcasecmp(label,"R4") == 0)||
-			(strcasecmp(label,"FLOAT")== 0)||
-				(strcasecmp(label,"REEL") == 0))
-       			sprintf ( image1->COD_PIX , "R4" );
-     		else
-       			sprintf ( image1->COD_PIX , "I4" );     
-  	}
-  	else if (*nboct_pix==8)
-		sprintf ( image1->COD_PIX , "R8" );
-        else
-   		sprintf ( image1->COD_PIX , "UND" );
-    	fprintf ( fic , "%s\n",image1->COD_PIX );
-   }
-   else
-   {
-/* Verification de coherence entre le nb d'octets par pixel et le type donne */
-        Coher=1;
-	if(*nboct_pix == 1) 
-	    if (reconnaissance_type > 1) Coher=0;       
-	else if(*nboct_pix == 2) 
-	    if ((reconnaissance_type != 2) || (reconnaissance_type != 3)) Coher=0;
-	else if(*nboct_pix == 4) 
-	    if ((reconnaissance_type <4) || (reconnaissance_type > 6)) Coher=0;
-	else if(*nboct_pix == 8) 
-	    if (reconnaissance_type != 7)  Coher=0;
-        else 
-	   Coher = 0;
-        if (Coher == 0) 
-        {      	
-	  sprintf(CAI_ERREUR,"incoherence entre TYPE et Nb bits par pixels\n");
-	  goto ERREUR;
-        }    
-	else
-        {
-     		sprintf ( image1->COD_PIX , "%s" ,label);
-     		fprintf ( fic , "%s\n", label );
-        }
-   }
-  fprintf ( fic , "SENSCODAGE\n" );
-  retour=strncmp(type_machine,"BE",2);
-  sprintf((char *)image1->SENS_COD,"%s",type_machine);
-  if (retour == 0)
-     fprintf ( fic , "IEEE\n"  );
-  else
-     fprintf ( fic , "INTEL\n"  );
-
-/*************************************************/
-/* Fermeture du fichier                          */
-/*************************************************/
-
-  fclose ( fic );
-  return (image1);
-
-ERREUR :
-
-   if (fic !=NULL) cai_dest_ima_bip ( repert ,  nom_image );
-   return(NULL);
-}
-  
-/* 
-  Fin de l'operation cai_ouvre_creation_bip
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_bip                                      */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image bip                  */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_lecture_canal_bip(image1, canal,        */       		      /* ------------------                            premiere_ligne,             */
-/*                                               premiere_colonne,           */
-/*                                               nombre_lignes_lire ,        */
-/*                                               nombre_colonnes_lire,       */
-/*                                               pas_ligne ,pas_colonne,     */
-/*                 		                data_image )                 */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (int) : numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal_bip     (S) (CAI_OK_KO) : = CAI_KO si pb            */
-/*                                                 = CAI_OK si OK            */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO cai_lecture_canal_bip(CAI_IMAGE *image1 ,  
-                                    int *canal ,           
-    		                    int *premiere_ligne  ,   
-     		                    int *premiere_colonne,
-                                    int *nombre_lignes_lire ,
-                                    int *nombre_colonnes_lire,
-                                    int *pas_ligne ,          
-                                    int *pas_colonne,
-		                    unsigned char *data_image )
-{
-
- int   num,i,j,k;           /* variables de travail                          */
- long pt_oct;		    /* position courante dans le fichier image       */
- long no_oct;               /* numero du premier octet a lire                */
- int iret;                  /* indicateur d'erreur                           */
- int lig;                   /* indice de boucle sur les lignes               */
- int   oct_pix;             /* nb octets par pixels                          */
- long   nb_oct;             /* nb oct =1er octet a lire - position courante  */
- int   oct_lig;             /* nb oct. par ligne en considerant taille pixel */
- int  nbcan;                /* nombre de canaux de l'image                   */
- unsigned char *buf_lec;    /* buffer lecture d'une  ligne                   */
- unsigned char *deb,*pch;   /* pointeur chaine pour transfert  buffer sortie */
- unsigned char *data_image2;/* pointeur donnees image pour inversion octets  */
- int taille_image,Nb;       /* taille en octets de l'image                   */
- long n;
-
-/*...........................
-  Initialisations diverses
-  ..........................*/
-
-   iret=CAI_OK;
-   num=image1->ACCES_CANAL_INT[(*canal)-1];
-   oct_pix=image1->NBOCT_PIX;
-   nbcan = image1->NB_CANAUX;
-   oct_lig=oct_pix*nbcan*(image1->NB_COL);
-/*..............................................
-        allocation de memoire pour lire une ligne image
- ............................................. */
-   buf_lec = (unsigned char *) malloc(oct_lig);
-   if (buf_lec == NULL)
-   {
-      iret=CAI_KO;
-      strcpy(CAI_ERREUR,"Probleme allocation memoire");
-   }
-   else
-   {
-/*....................
-        Initialisation
-  ......................*/
-        lig=*premiere_ligne;
-        i=1;
-        pch=data_image;
- /*.....................
-         Pour chaque ligne a lire
-  .......................................*/
-        while ((i <= (*nombre_lignes_lire))&&(iret==CAI_OK))
-        {  
-
-/*............................................
-	    Recherche de la position courante dans le fichier
-  ............................................*/
-            pt_oct=(long int)lseek(num,0L,1);
-
-/*................................
-            Calcul du numero du 1er octet a lire
-  ....................................*/
-            no_oct=image1->POS_OCTET[(*canal)-1]+
-				((lig-1)*oct_lig);
-/*..................................
-            Saut d'octets pour etre positionne sur la ligne a lire
-  .......................................*/
-            nb_oct=(long int)(no_oct-pt_oct);
-            lseek(num,nb_oct,1);
-
-/*...........................................
-            lecture d'une ligne image
-  ................................................*/
-            n=read(num,buf_lec,oct_lig);
-            if (n<=0)
-            {
-             iret=CAI_KO;
-             strcpy(CAI_ERREUR,"Erreur lecture donnee image BIP");
-            }
-            else
-            { 
-/*......................................
-             Sauvegarde des donnees lues entenant compte du pas 
-             d'echantillonnage en colonne
-  ........................................*/   
-             deb=buf_lec+((*premiere_colonne)-1)*oct_pix*nbcan+
-			 ((*canal-1)*oct_pix);
-             j=1;
-             while (j <= (*nombre_colonnes_lire))
-	     {  
-
-               for (k=0;k<oct_pix;k=k+1)
-                {
-                  *(pch+k)=*(deb+k);
-                 }
-              pch=pch+oct_pix;
-              j=j+1;
-              deb=deb+((*pas_colonne)*oct_pix*nbcan);
-             }   
-          
-            }
-          i=i+1;
-          lig=lig+(*pas_ligne);
-
-        }        
-
-	free(buf_lec);
-   }
-
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte de l'information INTEL ou IEEE*/
-/*                             en lecture et ecriture dans l'entete .hd      */
-/*****************************************************************************/
-
-   if ( (iret!= CAI_KO) && (image1->INV_OCTETS==1) && (oct_pix!=1) )
-   {
-        taille_image = (*nombre_lignes_lire)*oct_pix*(*nombre_colonnes_lire);
-        data_image2 = NULL;
-        data_image2 = (unsigned char *) calloc(taille_image,
-						sizeof(unsigned char));    
-        if (data_image2 == NULL)
-        {
-           strcpy(CAI_ERREUR,"Erreur allocation memoire cai_lecture_canal");
-           iret=CAI_KO;
-        }
-	else
-        {
-	    /*modification ordre selon nb octets par pixel*/
-       	    swab( (void*)(data_image), (void*)(data_image2), taille_image);
-		
-	   if (oct_pix!=2)
-           { 
-              Nb = taille_image/2;
-	      cai_inverser_tableau(data_image, data_image2,Nb);
-	   }
-	   else 
-	     for (i=0; i<taille_image;i++)
-	     {
-	        /*stockage dans data_image*/
-	        data_image[i] = data_image2[i];
-	     }	
-
-           if (data_image2!= NULL) free(data_image2);
-        }   	   
-    }
-
-   return(iret);
- }
-/*
-  Fin de l'operation cai_lecture_canal_bip
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal_bip                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un canal d'une image bip                  */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      CAI_OK_KO cai_ecriture_canal_bip(image1, canal,   */       		      /* ------------------                                 premiere_ligne,        */
-/*                                                    nombre_lignes_ecrire,  */
-/*                                                    nombre_colonnes_ecrire,*/
-/*                 		                      data_image )           */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal                 (E) (int) : numero du canal a ecrire            */
-/*     premiere_ligne        (E) (int) : premiere ligne a ecrire ds l'image  */
-/*     nombre_lignes_ecrire  (E) (int) : nombre de lignes a ecrire           */
-/*     nombre_colonnes_ecrire(E) (int) : nombre de lignes a ecrire           */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels ecris alloue et   */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_ecriture_canal_bip        (S) (CAI_OK_KO) : = CAI_KO si pb        */
-/*                                                     = CAI_OK si OK        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ecriture_canal_bip (CAI_IMAGE *image1 ,  
-                                      int *canal ,           
-    		                      int *premiere_ligne  ,   
-                                      int *nombre_lignes_ecrire ,
-                                      int *nombre_colonnes_ecrire,
-		                      unsigned char *data_image )
-
-{
-
-long	position_first_lig;	/* position de la 1ere ligne a ecrire    */
-long	position_courante;	/* position courante dans le fichier     */
-long	deplacement;		/* deplacement a effectuer               */
-int	i_ligne;		/* compteur de lignes                    */
-unsigned char *buff_lig;	/* tableau contenant une ligne a ecrire  */
-long	cr_write;		/* code retour de write                  */
-int num;                        /* descripteur de fichier                */
-int nboct_pix;			/* nombre d'octets par pixel             */
-int nbcan;                      /* nombre de canaux de l'image           */
-int nboctet;                    /* nombre d'octets d'une ligne multi     */
-unsigned char *deb,*pch;	/* pointeur sur chaine pour transfert    */
-int i,j,k;			/* indice de boucle sur les colonnes     */
-long cr_read;			/* code retour de la fonction read       */
-
-/* initialisations */
-
-i_ligne = 0;
-num = image1->ACCES_CANAL_INT[*canal-1];
-nboct_pix = image1->NBOCT_PIX;
-nbcan = image1->NB_CANAUX;
-nboctet = (*nombre_colonnes_ecrire)*nbcan*nboct_pix;
-
-/********************************************************/
-/* Calcul de la position de la premiere ligne a ecrire 	*/ 
-/********************************************************/
-
-position_first_lig =(long) ( image1->POS_OCTET[(*canal)-1]+ 
-			    (( *premiere_ligne - 1) *nboctet));
-		
-
-/********************************************************/
-/* Recuperation de la position courante			*/
-/********************************************************/
-
-position_courante = lseek ( num , 0L , 1 );
-
-
-/********************************************************/
-/* Deplacement jusqu'a la premiere ligne a ecrire	*/
-/********************************************************/
-
-deplacement = position_first_lig - position_courante;
-lseek ( num , deplacement , 1 ); 
-
-buff_lig=(unsigned char *)(calloc(nboctet,sizeof(unsigned char)));
-if (buff_lig == NULL)
-{
-      strcpy(CAI_ERREUR,"Probleme d'allocation memoire ecriture");
-      goto ERREUR;
- }
-
-pch=data_image;
-
-
-/********************************************************/
-/* TANT QUE il y a des lignes a ecrire                 	*/
-/********************************************************/
-while (i_ligne < (*nombre_lignes_ecrire))
-{
-   cr_read=read(num,buff_lig,nboctet);
-   if (cr_read <0)
-	   {  
-	    strcpy ( CAI_ERREUR , "Erreur ecriture canal image BIP\n" );
-	    goto ERREUR;
-	    }
-   else
-	   {
-             if (cr_read==0)
-  	     {
-  		 for (i=0;i<nboctet;i++)
-     		   *(buff_lig+i)=0;
-                 deplacement=0;
-  	     }
-             else
-		deplacement= - nboctet;
-           }
-/************************************************************************/
-/*    Redeplacement jusqu'au premier pixel de la premiere ligne a ecrire*/
-/************************************************************************/
-      lseek ( num , deplacement , 1 ); 
-
-/*************************************************************************/
-/*   chargement de la ligne entrelacant les pixels par rapport aux canaux*/
-/*************************************************************************/
-
-   deb=buff_lig+((*canal)-1)*nboct_pix;
-   for (j=0;j<(*nombre_colonnes_ecrire);j=j+1)
-   {
-        for (k=0;k<nboct_pix;k=k+1)
-        {
-            *(deb+k)=*(pch+k);
-         }
-      
-	pch=pch+nboct_pix;
-	deb=deb + (nboct_pix*nbcan);
-   }
-/********************************************************/
-/*	ecriture de la ligne				*/
-/********************************************************/
-   cr_write = write ( num , buff_lig , nboctet );
- 
-   if ( cr_write != nboctet )
-   {  
-	 strcpy ( CAI_ERREUR , "Erreur ecriture canal image BIP\n" );
-	 goto ERREUR;
-   }
-/********************************************************/
-/*	incrementation du nombre de lignes		*/
-/********************************************************/
-
-	i_ligne++;
-
-/********************************************************/
-/* FIN TANT QUE						*/
-/********************************************************/
-
-}
-free(buff_lig);
-
-return (CAI_OK);
-
-ERREUR :
-
-free(buff_lig);
-return (CAI_KO);
-
-
-}
-
-/* 
-  Fin de l'operation cai_ecriture_canal_bip
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_bip                                              */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format bip et de           */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_bip(image1)                       */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_bip        (S) (CAI_OK_KO) :   = CAI_KO si pb               */
-/*                                              = CAI_OK si OK               */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ferme_bip (CAI_IMAGE *image1)
-
-{
- int iret;    /* code retour de l'operation      */
- int i_can;   /* indice du canal a fermer        */
- int num;     /* descripteur du fichier a fermer */
-
- iret=CAI_OK;
-/*.............................................
-   Fermeture de tous les canaux
-  .............................................*/
- for (i_can=0;i_can<image1->NB_CANAUX;i_can=i_can+1)
- {
-
-   num=image1->ACCES_CANAL_INT[i_can];
-   if (num>0) close(num);
- }
-
-
-  return (iret);
-}
-
-/*
-  Fin de l'operation cai_ferme_bip
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_bip                                           */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stocke en bip et de         */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_dest_ima_bip(repertoire,nom_ima)        */       		      /* ------------------                                                        */
-/*     repertoire   (E) (char *) : repertoire de l'image a detruire          */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_dest_ima_bip     (S) (CAI_OK_KO) : = CAI_KO si pb                 */
-/*                                            = CAI_OK si OK                 */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO cai_dest_ima_bip ( char *repertoire , 
-                     	     char *nom_ima )
-
-{
-
-char	nom_fic_entete[1024];	/* nom du fichier entete a detruire */
-char    nom_ima_complet[1024];  /* repertoire + nom de l'image */
-
-int	cr_stat;		/* code retour de fonction status de fichier */
-struct stat buf_stat;		/* structure decrivant status de fichier */ 
-
-/************************************************/
-/* Constitution du nom du fichier d'entete	*/
-/************************************************/
-
-if ((long int)strlen(repertoire)!= 0)
-{
-
-  sprintf ( nom_ima_complet ,"%s/%s", repertoire ,nom_ima);
-}
-else
-{
-  strcpy ( nom_ima_complet , nom_ima);
-}
-  sprintf(nom_fic_entete ,"%s.bip_hd", nom_ima_complet);
-
-/************************************************/
-/* Destruction du fichier d'entete		*/
-/************************************************/
-
-cr_stat = stat ( nom_fic_entete , &buf_stat );
-if ( cr_stat == 0 )
-	unlink ( nom_fic_entete );
-
-else
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-{
-  sprintf(nom_fic_entete ,"%s.BIP_HD", nom_ima_complet);
-  cr_stat = stat ( nom_fic_entete , &buf_stat );
-  if ( cr_stat == 0 )
-	unlink ( nom_fic_entete );
-
-}
- 
-/************************************************/
-/* Destruction du fichier radiometrie		*/
-/************************************************/
-  sprintf(nom_fic_entete ,"%s.bip", nom_ima_complet);
-  cr_stat = stat ( nom_fic_entete , &buf_stat );
-  if ( cr_stat == 0 )
-	unlink ( nom_fic_entete );
-  else
- {
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-
-  sprintf(nom_fic_entete ,"%s.BIP", nom_ima_complet);
-  cr_stat = stat ( nom_fic_entete , &buf_stat );
-  if ( cr_stat == 0 )
-	unlink ( nom_fic_entete );
-
-}
-
-
-
-return (CAI_OK);
-
-}
-/*
- Fin de l'operation cai_dest_ima_bip
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_modif_nbbitspix_bip                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    permet de modifier le nombre de bits significatifs par pixel    */
-/* -----     dans l'entete de fichier (.hd)				     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_modif_nbbitspix_bip(image1,NbBitsPix)   */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     NbBitsPix   (E) (int)          : nb de bits significatifs par pixel   */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_modif_nbbitspix_bip(CAI_IMAGE *image1,int NbBitsPix)
-
-{
-  int Can;		/* indice de boucle sur les canaux */
-  char fichierE[1024];  /* fichier a traiter               */
-  char Command[1024];   /* Commande a envoyer au systeme   */
-  FILE *fic;		/* pointeur descripteur fichier    */
-  int pt_oct;		/* position courante ds le fichier */
-  int *Ref;             /* Reference du SDS des fichiers   */
-  char label[80];       /* contient un enregist  fichier   */
-  char repert[1024];    /* repertoire de stockage image    */
-  char image[1024];     /* nom de l'image a ouvrir         */
-  char car;		/* variable de travail             */
-  int icr,tempo,retour; /* code retour fonction            */
-  CAI_CHAINE *NomIma;
-
-        
-/* Ouverture du fichier d'entete */
-
-   fichierE[0]='\0';
-   sprintf(fichierE,"%s.bip_hd",image1->NOM_IMAGE);
-   fic = fopen(fichierE,"w");
-   if (fic == NULL)
-   {
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-      fichierE[0]='\0';
-      sprintf(fichierE,"%s.BIP_HD",image1->NOM_IMAGE);
-      fic = fopen(fichierE,"w");
-      if (fic == NULL)
-      {
-         sprintf(CAI_ERREUR,
-	   "Erreur: Modification fichier %s impossible\n",fichierE);
-          goto ERREUR;
-      }
-   }
-
-/* Modification du fichier d'entete */
-   rewind(fic);
-   fprintf ( fic , "COMMENT\n");
-   fprintf ( fic , "%s\n" ,image1->COMMENT);
-   fprintf ( fic , "CHANNELS\n" );
-   fprintf ( fic , "%3d\n" , image1->NB_CANAUX);
-   fprintf ( fic , "LINES\n" );
-   fprintf ( fic , "%5d\n" , image1->NB_LIG);
-   fprintf ( fic , "COLUMNS\n" );
-   fprintf ( fic , "%5d\n" , image1->NB_COL );
-   fprintf ( fic , "BITS PER PIXEL\n" );
-   fprintf ( fic , "%2d\n" , NbBitsPix );
-   fprintf ( fic , "TYPE\n");
-   fprintf ( fic , "%s\n",image1->COD_PIX );  
-   fprintf ( fic,  "SENSCODAGE\n");
-   retour=strncmp((char *)image1->SENS_COD,"BE",2);
-   if (retour == 0)
-     fprintf ( fic , "IEEE\n"  );
-   else
-     fprintf ( fic , "INTEL\n"  );
-
-
-  fclose ( fic );
-
-  return(CAI_OK);
-
-ERREUR :
-  return(CAI_KO);
-}
-/*
- Fin de l'operation cai_modif_nbbitspix_bip
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_modifie_bip                                      */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture/ecriture d'une image au format  */
-/* -----     bip  et de tous les fichiers qui la composent                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :     CAI_IMAGE *cai_ouvre_modifie_bip (nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_modifie_bip     (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_modifie_bip(char *repert,
-				     char *nom_image,
-				     int  *nb_can,
-				     int  *nboct_pix,
-				     int  *nb_col,
-				     int  *nb_lig)
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   char label[80];		/* contient un enregistrement du fichier    */
-   int nbbit;			/* nb de bits par pixel du fichier en-tete  */
-   int retour;			/* retour de la fonction comparaison chaines*/ 
-   char *deb,*deb1,*pch0;	/* pointeurs sur chaine de caracteres       */
-   int i,num;			/* indice 				    */
-   int nbplan;			/* nombre de canaux dans le fichier en-tete */
-   char COD_PIX[80];	        /* type de codage du pixel (optionnel)      */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   char *type_machine;          /* ordre rangement octets machine de travail*/
-   int cmp;			/* retour de comparaison de chaine          */
-   int reconnaissance_type;
-
-   /*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-
-   *nb_lig=0;
-
-   *nb_col=0;
-
-   *nboct_pix=0;
- 
-   iret=1;
-
- /*..................................
-   determination ordre de rangement 
-   des octets sur machine de travail
-  ......................................*/ 
-   type_machine = cai_test_pFpf();
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1: FA Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_modifie");
-    }
-   else
-   {
-
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!= 0)
-   {
-      sprintf(nom_fic,"%s/%s.bip_hd",repert,nom_image);
-   }
-   else
-   {
-     sprintf(nom_fic,"%s.bip_hd",nom_image);
-   }
-
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   fic_in=NULL;
-   fic_in=fopen(nom_fic,"r");
-   if (fic_in==NULL)
-   {
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-      nom_fic[0]='\0';
-      if((long int)strlen(repert)!=0)
-      {
-          sprintf(nom_fic,"%s/%s.BIP_HD",repert,nom_image);
-      }
-      else
-      {
-         sprintf(nom_fic,"%s.BIP_HD",nom_image);
-       }
-      fic_in=fopen(nom_fic,"r");
-      if (fic_in==NULL)
-      {
-         iret=0;
-         strcpy(CAI_ERREUR,"Erreur ouverture fichier entete BIP-CNES");
-      }
-    }
-    if (iret !=0)
-    {
-/*....................................
-     Decodage du commentaire
-  ......................................*/
-     fscanf(fic_in,"%s\n",label);
-     retour=strncmp(label,"COMMENT",7);
-     if (retour!=0)
-     {
-	strcpy(CAI_ERREUR,"Informations incoherentes ligne COMMENT");
-	iret=0;
-      }
-     else
-     {
-        fgets(image1->COMMENT,80,fic_in);
-
-
- /*........................................
-        Decodage du nombre de canaux
-  .........................................*/
-        fscanf(fic_in,"%s\n",label);
-	retour=strncmp(label,"CHANNELS",8);
-	if (retour!=0)
-	{
-	   strcpy(CAI_ERREUR,"Informations incoherentes ligne CHANNELS");
-	   iret=0;
-	 }
-	else
-	{
-	   fscanf(fic_in,"%d\n",&nbplan);
-           *nb_can=nbplan;
-
-/*.......................................
-	   Decodage du nombre de lignes
-  ........................................*/
-	    fscanf(fic_in,"%s\n",label);
-	    retour=strncmp(label,"LINES",5);
-	    if (retour!=0)
-	    {
-	       strcpy(CAI_ERREUR,"Informations incoherentes ligne LINES");
-	       iret=0;
-	     }
-	     else
-	     {
-	       fscanf(fic_in,"%d\n",nb_lig);
-
-
-/*.......................................
-	  Decodage du nombre de colonnes
-  ........................................*/
-	       fscanf(fic_in,"%s\n",label);
-	       retour=strncmp(label,"COLUMNS",7);
-	       if (retour!=0)
-	       {
-	    	 strcpy(CAI_ERREUR,"Informations incoherentes ligne COLUMNS");
-	    	 iret=0;
-	  	}
-	       else
-	       {
-
-		 fscanf(fic_in,"%d\n",nb_col);
-
-/*.......................................
-	  Decodage du nombre de bits par pixel
-  ........................................*/
-	  	 fgets(label,80,fic_in);
-	  	 retour=strncmp(label,"BITS PER PIXEL",14);
-		 if (retour!=0)
-	  	 {
-	    	   strcpy(CAI_ERREUR,"Informations incoherentes ligne BITS ");
-	    	   iret=0;
-	  	  }
-	  	 else
-	    	 {
-		   fscanf(fic_in,"%d\n",&nbbit);
-
-/*........................................................
-	  Decodage du type de codage du pixel (optionnel)
-  ........................................................*/
-     		   fscanf(fic_in,"%s\n",label);
-     		   retour=strncmp(label,"TYPE",4);
-     		   if (retour==0)
-                   {
-      		      fscanf(fic_in,"%s\n",COD_PIX);
-		      retour=1;
-                   }
-		   else
-		     sprintf(COD_PIX,"UND");
-        	   pch0=cai_En_majuscule( COD_PIX );
-
-/* 	Verification si type de codage reconnu */
-         	   reconnaissance_type = cai_istyp_connu(pch0);
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte de l'information INTEL ou IEEE*/
-/*                             en lecture et ecriture dans l'entete .hd      */
-/*****************************************************************************/
-		   if (retour !=0) fscanf(fic_in,"%s\n",label);
-		   retour=strncmp(label,"SENSCODAGE",10);
-	 	   if (retour!=0)
-	 	   {
-/*      Si absent, pas d'inversion      */    
-			image1->INV_OCTETS =0;
-			sprintf((char *)image1->SENS_COD,type_machine);
-	 	    }
-		    else
-		    {
-  			 fscanf(fic_in,"%s\n",label);
-  			 retour=strncmp(label,"IEEE",4);
-   			 if (retour==0)	
-				sprintf((char *)image1->SENS_COD,"BE");
-   			 else
-				sprintf((char *)image1->SENS_COD,"LE");
-   			 cmp = strncmp(type_machine,image1->SENS_COD,2);
-   			 if (cmp!=0)
- 	  			image1->INV_OCTETS =1;
-   			 else
-	 			image1->INV_OCTETS =0;
-                     }	 	
-		  }
-		}
-	      }
-	  }
-      }
-    }
-/*..................................
-   Fermeture du fichier 
-  ......................................*/
-   if (fic_in !=NULL) fclose(fic_in);
-
-   if (iret !=0)
-   {
-/*..................................
-     Initialisation du nombre d'octets par pixel
-  ........................................................*/
-     if ((nbbit%8)==0)
-	*nboct_pix=(int)(nbbit/8);
-     else
-	*nboct_pix=(int)((nbbit/8)+1);
-     image1->NB_BITS_PIX=nbbit;
-
-     if (reconnaissance_type != -1)
-     {
-	    	sprintf(image1->COD_PIX,"%s",COD_PIX);
-     }
-     else
-     {
-     	  sprintf(image1->COD_PIX,"UND");
-
-          if (*nboct_pix==1)
-              sprintf(image1->COD_PIX,"OCT");
-          else if (*nboct_pix==2)
-	      sprintf(image1->COD_PIX,"I2");
-          else if (*nboct_pix==4)
-          {
-	     retour=strncmp(COD_PIX,"I4",2);
-             if (retour==0)
-	        sprintf(image1->COD_PIX,"I4");
-             else
-             {
-	 	retour=strncmp(COD_PIX,"R4",2);
-          	if (retour==0)
-	    	  sprintf(image1->COD_PIX,"R4");
-             }
-           }
-           else if (*nboct_pix==8)
-           {
-		sprintf(image1->COD_PIX,"R8");	   
-           }
-       }
-
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-
-     nom_fic[0]='\0';
-     nom_fic_canal[0]='\0';
-
-     if ((long int)strlen(repert)!= 0)
-     {
-       sprintf(nom_fic_canal,"%s/%s.bip",repert,nom_image);
-      }
-      else
-      {
-       sprintf(nom_fic_canal,"%s.bip",nom_image);
-      }
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : FA : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-     retour = stat ( nom_fic_canal , &buf_stat );
-     if ( retour != 0 )
-     { 
-       if((long int)strlen(repert)!=0)
-       {
-         sprintf(nom_fic_canal,"%s/%s.BIP",repert,nom_image);
-       }
-       else
-       {
-        sprintf(nom_fic_canal,"%s.BIP",nom_image);
-       }
-     }
- 
-     deb = image1->NOM_FIC_CAN;
-     deb1= image1->NOM_UTIL_CAN;
-     num=open(nom_fic_canal,O_RDWR|O_BINARY,0);
-     if (num!= -1)
-     {
-
-       for (i=0;i<*nb_can;i=i+1)
-       {
-           sscanf(nom_image,"%s",deb);
-  	   deb=deb+100;
-           sscanf(nom_image,"%s",deb1);
-  	   deb1=deb1+100;
-           image1->ACCES_CANAL_INT[i]=num;
-           image1->POS_OCTET[i]=0;
-        }
-      }
-      else
-         iret=0;
-     }
-    }
-    if (iret == 0)
-    {
-	return (NULL);
-     }
-    else
-    {
-      return(image1);
-     }
-
-}
-/* 
-   Fin de l'operation cai_ouvre_modifie_bip
-*/
diff --git a/Utilities/CAI/cai_dll/src/cai_bsq.c b/Utilities/CAI/cai_dll/src/cai_bsq.c
deleted file mode 100755
index ff5446f033..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_bsq.c
+++ /dev/null
@@ -1,2009 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_bsq.c                                                     */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format bsq                                        */ 
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CISI)                                   */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    fevrier 1995                                        */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V2                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 3.3: DM : optimisation des acces                          */
-/*****************************************************************************/
-/* MOD : VERSION : 4.0: DM : traitement des images en double precision       */
-/*			    en lecture, ecriture et modification             */
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 : FA:Rajout des tests sur les retours d'allocation    */
-/*			   memoire                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : FA : modifications pour compatibilite HP64bits      */
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : test sur  fclose  pour PC/LINUX                */
-/*****************************************************************************/
-/* MOD : VERSION : 5.1 : DM :  Maj du tag TYPE lorsque l'image est codée     */
-/* en reel  et que l'utilisateur le precise dans le param  "label"           */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte des I2,I4,UI2,UI4 et R8       */
-/*                             en lecture et ecriture                        */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte de l'information INTEL ou IEEE*/
-/*                             en lecture et ecriture dans l'entete .hd      */
-/*****************************************************************************/
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-
-
-# include <stdio.h>
-# include <string.h>
-# include <stdlib.h>
-# include <sys/types.h>
-# include <unistd.h>
-# include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-#include <errno.h>
-
-#define _CAI_IMAGE
-#define IN_CAI_BSQ
-
-# include "cai_image.h"
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header: cai_bsq.c,v 1.12 01/05/31 10:46:59 cmf Exp $";
-
-extern char *getenv();
-
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_bsq                                          */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images au format bsq                    */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_ima_bsq(repert,tab_ima)             */
-/* -----------------                                                         */
-/*                                                                           */
-/*     repert       (E) (char *)   : repertoire a explorer		     */
-/*     tab_ima      (S) (char ***) : pointeur sur tableau des images listees */
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_ima_bsq       (S) (long int)     : = -1 repertoire inexistant    */                                    /*					       = > 0 nombre d'images listees */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-long int cai_liste_ima_bsq (char *repert,
-		       char ***tab_ima)
-
-{
-
-   DIR *dirp;		/* pointeur sur structure ouverture repertoire */
-
-   struct dirent *dp;   /* structure resultat de la fonction readdir   */
-
-   char *pch0,*pch1;    /* pointeurs sur chaine de caracteres          */
-   char *pch2,*pch3;    /* pointeurs sur chaine de caracteres          */
-   char car;            /* variable de travail                         */  
-   int nb_ima;          /* nombre d'images bsq identifiees             */
-   int i;               /* indice de boucle                            */
-   long int diff,Long;
-
-/*........................................
-   INITIALISATION et ouverture du repertoire choisi
-  .........................................*/
-   nb_ima=0;
-   dirp=opendir(repert);
-
-   if(dirp!=NULL)
-   {
-
-
-/*......................................
-
-   premiere passe pour comptabiliser les images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE BSQ_CNES
-      (EXTENSION =.hd)
-   ..........................................*/
-   while((dp=readdir(dirp))!=NULL)
-   {
-     pch3=dp->d_name;
-     Long=(long int)strlen(dp->d_name);
-
-     car='.';
-     pch0=strrchr(dp->d_name,car);
-     if (pch0 != NULL)
-     {
-       car='h';
-       pch1=strrchr(dp->d_name,car);
-       if ((pch1 != NULL)&&(pch1==pch0+1))
-       {
-         car='d';
-         pch2=strrchr(dp->d_name,car);
-         if ((pch2 != NULL)&&(pch2==pch1+1))
-         {
-           diff=(long int)(pch2-pch3+1);
-           if(Long==diff)
-           {
-             *pch0='\0';
-             *pch1=' ';
-	     *pch2=' ';
-	     nb_ima=nb_ima+1;
-           }
-         }
-       }
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-      else
-      {
-         car='H';
-         pch1=strrchr(dp->d_name,car);
-         if ((pch1 != NULL)&&(pch1==pch0+1))
-         {
-           car='D';
-           pch2=strrchr(dp->d_name,car);
-           if ((pch2 != NULL)&&(pch2==pch1+1))
-           {
-             diff=(long int)(pch2-pch3+1);
-             if(Long==diff)
-             {
-               *pch0='\0';
-               *pch1=' ';
-	       *pch2=' ';
-	       nb_ima=nb_ima+1;
-             }
-           }
-         }
-       }
-     }
-   }
-    (void)closedir(dirp);
-
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES DU FORMAT BSQ
-     ......................................*/
-    *tab_ima = (char **) calloc(nb_ima,sizeof(char *));
-    for (i=0;i<nb_ima;i=i+1)
-      (*tab_ima)[i]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE BSQ_CNES
-      (EXTENSION =.hd)
-   SI C`EST LE CAS,STOCKAGE DANS LA LISTE
-   ..........................................*/
-   dirp=opendir(repert);
-
-   nb_ima=0;
-   while((dp=readdir(dirp))!=NULL)
-   {
-     pch3=dp->d_name;
-     Long=(long int)strlen(dp->d_name);
-
-     car='.';
-     pch0=strrchr(dp->d_name,car);
-     if (pch0 != NULL)
-     {
-       car='h';
-       pch1=strrchr(dp->d_name,car);
-       if ((pch1 != NULL)&&(pch1==pch0+1))
-       {
-         car='d';
-         pch2=strrchr(dp->d_name,car);
-         if ((pch2 != NULL)&&(pch2==pch1+1))
-         {
-           diff=(long int)(pch2-pch3+1);
-           if(Long==diff)
-           {
-             *pch0='\0';
-             *pch1=' ';
-	     *pch2=' ';
-             strcpy((*tab_ima)[nb_ima],dp->d_name);
-	     nb_ima=nb_ima+1;
-            }
-          }
-       }
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-      else
-      {
-         car='H';
-         pch1=strrchr(dp->d_name,car);
-         if ((pch1 != NULL)&&(pch1==pch0+1))
-         {
-           car='D';
-           pch2=strrchr(dp->d_name,car);
-           if ((pch2 != NULL)&&(pch2==pch1+1))
-           {
-             diff=(long int)(pch2-pch3+1);
-             if(Long==diff)
-             {
-               *pch0='\0';
-               *pch1=' ';
-	       *pch2=' ';
-               strcpy((*tab_ima)[nb_ima],dp->d_name);
-	       nb_ima=nb_ima+1;
-             }
-           }
-         }
-       }
-
-     }
-   }
-
-    (void)closedir(dirp);
-
-
-   }
-   else
-   {
-    /* repertoire inexistant */
-     nb_ima=-1;
-     }
-    return(nb_ima);
-
-}
-
-/* Fin de l'operation cai_liste_ima_bsq
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_bsq                                      */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image au format bsq       */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :     CAI_IMAGE *cai_ouvre_lecture_bsq (nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels              */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_bsq     (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_lecture_bsq(char *repert,
-				 char *nom_image,
-				 int  *nb_can,
-				 int  *nboct_pix,
-				 int  *nb_col,
-				 int  *nb_lig)
-{
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   long int  iret;		/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   char label[80];		/* contient un enregistrement du fichier    */
-   int nbplan;			/* nombre de canaux dans le fichier en-tete */
-   int nbbit;			/* nb de bits par pixel du fichier en-tete  */
-   int retour;			/* retour de la fonction comparaison chaines*/ 
-   char *deb,*deb1,*pch0;	/* pointeurs sur chaine de caracteres       */
-   char car[4];			/* indice du canal traite     		    */
-   int i,num,IndExtens;		/* indice 				    */
-   char Extens[25];		/* Extension possible du fichier	    */
-   char COD_PIX[5];   	        /* contient le type de codage du pixel      */
-   char *type_machine;          /* ordre rangement octets machine de travail*/
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   int cmp;			/* retour de comparaison de chaine          */
-   int reconnaissance_type;
-   char CAN[2];
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-
-   /*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-
-   *nb_lig=0;
-
-   *nb_col=0;
-
-   *nboct_pix=0;
- 
-   iret=1;
-   IndExtens = 0;
-   pch0=NULL;
-   reconnaissance_type = -1;
-
- /*..................................
-   determination ordre de rangement 
-   des octets sur machine de travail
-  ......................................*/ 
-   type_machine = cai_test_pFpf();
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 : FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_lecture");
-    }
-   else
-   {
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-
-   pch0 = strstr(nom_image,".");
-   if (pch0 != NULL)
-   {
-	*pch0 = '\0';
-	pch0=pch0 + 1;
-	sprintf(Extens,"%s",pch0);
-	if (strcmp(Extens,"hd")!=0)
-			IndExtens=1;
-   }
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!= 0)
-   {
-      sprintf(nom_fic,"%s/%s.hd",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.hd",nom_image);
-    }
-   sprintf(image1->NOM_IMAGE,"%s/%s",repert,nom_image);
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   fic_in=NULL;
-   fic_in=fopen(nom_fic,"r");
-   if (fic_in==NULL)
-   {
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-      nom_fic[0]='\0';
-      if((long int)strlen(repert)!=0)
-      {
-          sprintf(nom_fic,"%s/%s.HD",repert,nom_image);
-      }
-      else
-      {
-         sprintf(nom_fic,"%s.HD",nom_image);
-       }
-      sprintf(image1->NOM_IMAGE,"%s/%s",repert,nom_image);
-      fic_in=fopen(nom_fic,"r");
-      if (fic_in==NULL)
-      {
-         iret=0;
-         strcpy(CAI_ERREUR,"Erreur ouverture fichier entete BSQ-CNES");
-      }
-    }
-    if (iret !=0)
-    {
-/*....................................
-     Decodage des informations TYPE
-  ............................................*/
-      fscanf(fic_in,"%s\n",label);
-     retour=strncmp(label,"TYPE",4);
-     if (retour!=0)
-     {
-       sprintf(CAI_ERREUR,
-			"Informations incoherentes ligne TYPE dans %s",
-			nom_fic);
-       iret=0;
-      }
-     else
-     {
-         fscanf(fic_in,"%s\n",COD_PIX);
-         pch0=cai_En_majuscule( COD_PIX );
-
-/* Verification si type de codage reconnu */
-         reconnaissance_type = cai_istyp_connu(pch0);
-
-/*..................................
-       Decodage du label          
-  ......................................*/
-	 fscanf(fic_in,"%s\n",label);
-	 retour=strncmp(label,"LABEL",5);
-	 if (retour!=0)
-	 {
-	   sprintf(CAI_ERREUR,
-			"Informations incoherentes ligne LABEL dans %s",
-			nom_fic);
-
-	   iret=0;
-	  }
-	 else
-	 {
-	   fgets(image1->COMMENT,80,fic_in);
-           image1->COMMENT[strlen(image1->COMMENT)-1]='\0';
-
- /*........................................
-	Decodage du nombre de canaux
-  .........................................*/
-	   fscanf(fic_in,"%s\n",label);
-	   retour=strncmp(label,"CHANNELS",8);
-	   if (retour!=0)
-	   {
-	     sprintf(CAI_ERREUR,
-			"Informations incoherentes ligne CHANNELS dans  %s",
-			nom_fic);
-
-	     iret=0;
-	    }
-	   else
-	   {
-	     fscanf(fic_in,"%d\n",&nbplan);
-
-/*.......................................
-	  Decodage du nombre de lignes
-  ........................................*/
-	     fscanf(fic_in,"%s\n",label);
-	     retour=strncmp(label,"LINES",5);
-	     if (retour!=0)
-	     {
-	       sprintf(CAI_ERREUR,
-			"Informations incoherentes ligne LINES dans %s",
-			nom_fic);
-
-	       iret=0;
-	      }
-	     else
-	     {
-	       fscanf(fic_in,"%d\n",nb_lig);
-
-
-/*.......................................
-	  Decodage du nombre de colonnes
-  ........................................*/
-	       fscanf(fic_in,"%s\n",label);
-	       retour=strncmp(label,"COLUMNS",7);
-	       if (retour!=0)
-	       {
-	    	 sprintf(CAI_ERREUR,
-			"Informations incoherentes ligne COLUMNS dans %s",
-			nom_fic);
-
-	    	 iret=0;
-	  	}
-	       else
-	       {
-
-		 fscanf(fic_in,"%d\n",nb_col);
-
-/*.......................................
-	  Decodage du nombre de bits par pixel
-  ........................................*/
-	  	 fgets(label,80,fic_in);
-	  	 retour=strncmp(label,"BITS PER PIXEL",14);
-		 if (retour!=0)
-	  	 {
-	    	   sprintf(CAI_ERREUR,
-			"Informations incoherentes ligne BITS dans %s",
-			nom_fic);
-
-	    	   iret=0;
-	  	  }
-	  	 else
-	    	 {
-		   fscanf(fic_in,"%d\n",&nbbit);
-                   image1->NB_BITS_PIX = nbbit;
-
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte de l'information INTEL ou IEEE*/
-/*                             en lecture et ecriture dans l'entete .hd      */
-/*****************************************************************************/
-/*..................................
-       Decodage du sens de codage si présent
-  ......................................*/
-		   fscanf(fic_in,"%s\n",label);
-		   retour=strncmp(label,"SENSCODAGE",10);
-	 	   if (retour!=0)
-	 	   {
-/*      Si absent, pas d'inversion      */    
-			image1->INV_OCTETS =0;
-			sprintf(image1->SENS_COD,type_machine);
-	 	    }
-	 	   else
-		   {
-  			 fscanf(fic_in,"%s\n",label);
-  			 retour=strncmp(label,"IEEE",4);
-   			 if (retour==0)	
-				sprintf(image1->SENS_COD,"BE");
-   			 else
-				sprintf(image1->SENS_COD,"LE");
-   			 cmp = strncmp(type_machine,image1->SENS_COD,2);
-   			 if (cmp!=0)
-   			 {
-	  				image1->INV_OCTETS =1;
-   			 }
-   			 else
-  			 {
-	 				 image1->INV_OCTETS =0;
-   			 }
-                     }
-		  }
-		}
-	      }
-	    }
-	  }
-	
-      }
-/*..................................
-   Fermeture du fichier 
-  ......................................*/
-     if (fic_in!=NULL) 
-      {
-	fclose(fic_in);
-	fic_in=NULL;
-      }
-    }
-
-   if (iret !=0)
-   {
-/*..................................
-     Initialisation du nombre d'octets par pixel
-  ........................................................*/
-       if ((nbbit%8)==0)
-		*nboct_pix=(int)(nbbit/8);
-       else
-		*nboct_pix=(int)((nbbit/8)+1);
-
-       if (reconnaissance_type != -1)
-       {
-	    	sprintf(image1->COD_PIX,"%s",COD_PIX);
-       }
-       else
-       {
-     	  sprintf(image1->COD_PIX,"UND");
-
-          if (*nboct_pix==1)
-              sprintf(image1->COD_PIX,"OCT");
-          else if (*nboct_pix==2)
-	      sprintf(image1->COD_PIX,"I2");
-          else if (*nboct_pix==4)
-          {
-	     retour=strncmp(COD_PIX,"I4",2);
-             if (retour==0)
-	        sprintf(image1->COD_PIX,"I4");
-             else
-             {
-	 	retour=strncmp(COD_PIX,"R4",2);
-          	if (retour==0)
-	    	  sprintf(image1->COD_PIX,"R4");
-             }
-           }
-           else if (*nboct_pix==8)
-           {
-		sprintf(image1->COD_PIX,"R8");	   
-           }
-         }
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-       deb = image1->NOM_FIC_CAN;
-       deb1= image1->NOM_UTIL_CAN;
-      if ((nbplan==1)&&(IndExtens==1))
-      {
-/* Verification de l'existence du fichier demande et ouverture */
-          nom_fic[0]='\0';
-          if ((long int)strlen(repert)!= 0)
-             sprintf(nom_fic,"%s/%s.%s",repert,nom_image,Extens);
- 	  else
-             sprintf(nom_fic,"%s.%s",nom_image,Extens);
-          nom_fic_canal[0]='\0';
-          sscanf(nom_fic,"%s",nom_fic_canal);
-          num=open(nom_fic_canal,O_RDONLY|O_BINARY,0);
-          if (num!= -1)
-          {
-            sprintf(deb,"%s.%s",nom_image,Extens);
-  	    deb=deb+100;
-            sprintf(deb1,"%s.%s",nom_image,Extens);
-            deb1=deb1+100;
-          }
-          image1->ACCES_CANAL_INT[*nb_can]=num;
-          image1->POS_OCTET[*nb_can]=0;
-
-          *nb_can=*nb_can+1;     
-      }
-      else
-      {
-/*...................................................
-     recherche du nombre de canaux de l'image si pas d'extension donnee
-  ..........................................................*/
-        nom_fic[0]='\0';
-        if ((long int)strlen(repert)!= 0)
-        {
-            sprintf(nom_fic,"%s/%s.c",repert,nom_image);
-         }
-        else
-        {
-            sprintf(nom_fic,"%s.c",nom_image);
-         }
- /*****************************************************************************/
-/* MOD : VERSION : 4.4 : FA : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-       sprintf(nom_fic_canal,"%s1",nom_fic);
-       retour = stat ( nom_fic_canal , &buf_stat );
-       if ( retour != 0 )
-       {
-           sprintf(CAN,"C");
-           if ((long int)strlen(repert)!= 0)
-           {
-               sprintf(nom_fic,"%s/%s.C",repert,nom_image);
-            }
-            else
-            {
-                sprintf(nom_fic,"%s.C",nom_image);
-             }
-
-       }
-       else
-           sprintf(CAN,"c");
-        for (i=1;i<CAI_NB_MAX_CAN;i=i+1)
-        {
-          nom_fic_canal[0]='\0';
-          sprintf(nom_fic_canal,"%s%d",nom_fic,i);
-          num=open(nom_fic_canal,O_RDONLY|O_BINARY,0);
-          if (num!= -1)
-          {
-            if (*nb_can<CAI_NB_MAX_CAN)
-            {
-           	sscanf(nom_image,"%s",deb);
-	   	strcat(deb,CAN);
-                sprintf(car,"%d",(*nb_can)+1);
-           	strcat(deb,car);
-  	   	deb=deb+100;
-           	sscanf(nom_image,"%s",deb1);
-	   	strcat(deb1,CAN);
-           	strcat(deb1,car);
-           	deb1=deb1+100;
-             }
-             image1->ACCES_CANAL_INT[*nb_can]=num;
-             image1->POS_OCTET[*nb_can]=0;
-
-             *nb_can=*nb_can+1;     
-          }
-         }
-        if (*nb_can!=nbplan)
-        {
-       		sprintf(CAI_ERREUR,
-		"incoherence au niveau du nombre de fichiers canaux dans %s",
-		nom_fic);
- 
-       		iret=0;
-         }
-      }
-     }
-    }
-    if (iret == 0)
-	return (NULL);
-    else
-      return(image1);
-}
-
-/* 
-   Fin de l'operation cai_ouvre_lecture_bsq
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_bsq                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format bsq et de tous les fichiers qui la composent          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :    CAI_IMAGE *cai_ouvre_creation_bsq (nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            label)           */
-/*                                                                           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels              */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_bsq     (S) (CAI_IMAGE *) : =NULL si pb            */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_creation_bsq(char *repert,
-				  char *nom_image,
-				  int  *nb_can,
-				  int  *nboct_pix,
-				  int  *nb_col,
-				  int  *nb_lig,
-				  char *label)
-
-{
-   FILE *fic;		        /* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   int retour;			/* retour de fonction 			    */ 
-   char car[4];			/* indice du canal traite     		    */
-   int i,num;			/* indice 				    */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   char *type_machine;          /* ordre rangement octets machine de travail*/
-   int reconnaissance_type;     
-
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 : FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_creation");
-     goto ERREUR;
-   }
-
-/*..................................
-   determination ordre de rangement 
-   des octets sur machine de travail
-  ......................................*/ 
-   type_machine = cai_test_pFpf();
-
-/*.................................................
-   Constitution du nom du fichier entete et verification qu'il
-   n'existe pas deja
-  .................................................*/
-
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!= 0)
-   {
-      sprintf(nom_fic,"%s/%s.hd",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.hd",nom_image);
-   }
-   
-   retour = stat ( nom_fic , &buf_stat );
-   if ( retour == 0 )
-   { 
-	sprintf ( CAI_ERREUR , "L'image %s BSQ existe \n" , nom_image );
-	goto ERREUR;
-   }
-   sprintf(image1->NOM_IMAGE,"%s/%s",repert,nom_image);
-/*...............................................................
-  Pour chaque canal de l'image,constitution du nom de fichier correspondant
-  Verification qu'il n'existe pas deja
-  Ouverture du fichier en ecriture
-  .................................................................*/
-
-  for (i=0;i<*nb_can;i=i+1)
-  {
-   nom_fic_canal[0]='\0';
-   sprintf(car,"%d",i+1);
-   if (i+1<10)
-         car[1]='\0';
-   else
-   {
-      if (i+1<100)
-          car[2]='\0';
-      else
-           car[3]='\0';
-    }
-
-    if ((long int)strlen(repert)!= 0)
-    {
-      sprintf(nom_fic_canal,"%s/%s.c%s",repert,nom_image,car);
-   }
-   else
-   {
-      sprintf(nom_fic_canal,"%s.c%s",nom_image,car);
-   }
-
-   retour = stat ( nom_fic_canal , &buf_stat );
-
-   if ( retour == 0 )
-   { 
-	sprintf ( CAI_ERREUR , "L'image %s BSQ existe \n" , nom_image );
-	goto ERREUR;
-   }
-   num = open(nom_fic_canal,O_RDWR|O_CREAT|O_BINARY,PERMS); 
-   if (num == -1)
-   {
-
-     sprintf(CAI_ERREUR,"Erreur: Creation %s impossible\n",nom_fic_canal);
-     goto ERREUR;
-   } 
-   image1->ACCES_CANAL_INT[i]=num;
-   image1->POS_OCTET[i]=0;
-  }
-
-/*......................................................
-  Ouverture du fichier entete en ecriture 
-  Ecriture du contenu
-  ..........................................................*/
-  fic = fopen(nom_fic,"w");
-  if (fic == NULL)
-  {
-      sprintf(CAI_ERREUR,"Erreur: Creation fichier %s impossible\n",nom_fic);
-      goto ERREUR;
-   }
-
-  retour=fprintf ( fic , "TYPE\n");
-  if (retour == 0)
-  {
-      sprintf(CAI_ERREUR,"Erreur: Ecriture %s impossible\n",nom_fic);
-      goto ERREUR;
-   }
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  Maj du tag TYPE lorsque l'utilisateur le      */
-/*                                  precise dans le param  "label"           */
-/*****************************************************************************/
-/* Verification si type de codage reconnu dans le label */
-  reconnaissance_type = cai_istyp_connu(label);
-  if (reconnaissance_type == -1)
-  {
- 	if (*nboct_pix==1)
-    		sprintf ( image1->COD_PIX , "OCT" );
-  	else  if (*nboct_pix==2)
-   		sprintf ( image1->COD_PIX , "I2" );
-  	else if (*nboct_pix==4)
-  	{
-/*****************************************************************************/
-/* MOD : VERSION : 5.1 : DM :  Maj du tag TYPE lorsque l'image est codée     */
-/* en reel  et que l'utilisateur le precise dans le param  "label"           */
-/*****************************************************************************/
-     		if ((strcasecmp(label,"R4") == 0)||
-			(strcasecmp(label,"FLOAT")== 0)||
-				(strcasecmp(label,"REEL") == 0))
-       			sprintf ( image1->COD_PIX , "R4" );
-     		else
-       			sprintf ( image1->COD_PIX , "I4" );     
-  	}
-  	else
-   		sprintf ( image1->COD_PIX , "UND" );
-    	fprintf ( fic , "%s\n",image1->COD_PIX );
-   }
-   else
-   {
-     sprintf ( image1->COD_PIX , "%s" ,label);
-     fprintf ( fic , "%s\n", label );
-   }
-  fprintf ( fic , "LABEL\n" );
-  fprintf ( fic , "%s\n" , label );
-  fprintf ( fic , "CHANNELS\n" );
-  fprintf ( fic , "%3d\n" , *nb_can );
-  fprintf ( fic , "LINES\n" );
-  fprintf ( fic , "%5d\n" , *nb_lig );
-  fprintf ( fic , "COLUMNS\n" );
-  fprintf ( fic , "%5d\n" , *nb_col );
-  fprintf ( fic , "BITS PER PIXEL\n" );
-  fprintf ( fic , "%2d\n" , (*nboct_pix)*8 );
-  fprintf ( fic , "SENSCODAGE\n" );
-  retour=strncmp(type_machine,"BE",2);
-  sprintf(image1->SENS_COD,"%s",type_machine);
-  if (retour == 0)
-     fprintf ( fic , "IEEE\n"  );
-  else
-     fprintf ( fic , "INTEL\n"  );
-
-/*************************************************/
-/* Fermeture du fichier                          */
-/*************************************************/
-
-  fclose ( fic );
-  return (image1);
-
-ERREUR :
-  return(NULL);
-}
-  
-/* 
-  Fin de l'operation cai_ouvre_creation_bsq
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_bsq                                      */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image bsq                  */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_lecture_canal_bsq(image1, canal,        */       		      /* ------------------                            premiere_ligne,             */
-/*                                               premiere_colonne,           */
-/*                                               nombre_lignes_lire ,        */
-/*                                               nombre_colonnes_lire,       */
-/*                                               pas_ligne ,pas_colonne,     */
-/*                 		                data_image )                 */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (lint): numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal_bsq     (S) (CAI_OK_KO) : = CAI_KO si pb            */
-/*                                                 = CAI_OK si OK            */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-CAI_OK_KO cai_lecture_canal_bsq(CAI_IMAGE *image1 ,  
-                                int *canal ,           
-    		          	int *premiere_ligne  ,   
-     		          	int *premiere_colonne,
-                         	int *nombre_lignes_lire ,
-                          	int *nombre_colonnes_lire,
-                          	int *pas_ligne ,          
-                          	int *pas_colonne,
-		          	unsigned char *data_image )        
-
-{
-
- int   num,i,j,k;           /* variables de travail                          */
- long int pt_oct;	    /* position courante dans le fichier image       */
- long int no_oct;           /* numero du premier octet a lire                */
- int iret;                  /* indicateur d'erreur                           */
- long int lig;              /* indice de boucle sur les lignes               */
- long int   oct_pix;        /* nb octets par pixels                          */
- long int nb_oct;           /* nb oct =1er octet a lire - position courante  */
- long int oct_lig;          /* nb oct. par ligne en considerant taille pixel */
- unsigned char *buf_lec;    /* buffer lecture d'une  ligne                   */
- unsigned char *deb,*pch;   /* pointeur chaine pour transfert  buffer sortie */
- unsigned char *data_image2;/* pointeur donnees image pour inversion octets  */
- int taille_image,Nb;       /* taille en octets de l'image                   */ 
- long int n;
-/*...........................
-  Initialisations diverses
-  ..........................*/
-
-   iret=CAI_OK;
-   num=(int)image1->ACCES_CANAL_INT[(*canal)-1];
-   oct_pix=image1->NBOCT_PIX;
-   oct_lig=oct_pix*(image1->NB_COL);
-
-/*.......................................*/
-/* verification si lecture image entiere */
-/*.......................................*/
-  if ((*nombre_lignes_lire==image1->NB_LIG)&&(*nombre_colonnes_lire==image1->NB_COL)
-       &&(*pas_ligne==1)&&(*pas_colonne==1))
-  {
-       oct_lig=oct_pix*(image1->NB_COL)*(image1->NB_LIG);
-
-    /* positionnement en debut de fichier */
-       pt_oct=lseek(num,0L,0);
-
-   /* lecture du canal complet */
-      n=read(num,data_image,oct_lig);
-      if (n<=0)
-      {
-             iret=CAI_KO;
-             sprintf(CAI_ERREUR,"Erreur lecture donnee image BSQ dans %s",
-		image1->NOM_IMAGE);
-
-       }
-        else
-             iret=CAI_OK;
-   }
-  else
-  {
-/*..............................................
-        allocation de memoire pour lire une ligne image
- ............................................. */
-   buf_lec = (unsigned char *) malloc(oct_lig);
-   if (buf_lec == NULL)
-   {
-      iret=CAI_KO;
-      strcpy(CAI_ERREUR,"Probleme allocation memoire");
-   }
-   else
-   {
-/*....................
-        Initialisation
-  ......................*/
-        lig=*premiere_ligne;
-        i=1;
-        pch=data_image;
- /*.....................
-         Pour chaque ligne a lire
-  .......................................*/
-        while ((i <= (*nombre_lignes_lire))&&(iret==CAI_OK))
-        {  
-
-/*............................................
-	    Recherche de la position courante dans le fichier
-  ............................................*/
-            pt_oct=lseek(num,0L,1);
-
-/*................................
-            Calcul du numero du 1er octet a lire
-  ....................................*/
-            no_oct=image1->POS_OCTET[(*canal)-1]+((lig-1)*oct_lig);
-
-/*..................................
-            Saut d'octets pour etre positionne sur la ligne a lire
-  .......................................*/
-            nb_oct=(long)(no_oct-pt_oct);
-            lseek(num,nb_oct,1);
-
-/*...........................................
-            lecture d'une ligne image
-  ................................................*/
-            n=read(num,buf_lec,oct_lig);
-            if (n<=0)
-            {
-             iret=CAI_KO;
-             sprintf(CAI_ERREUR,"Erreur lecture donnee image BSQ  %s",
-		image1->NOM_IMAGE);
-
-            }
-            else
-            { 
-/*......................................
-             Sauvegarde des donnees lues entenant compte du pas 
-             d'echantillonnage en colonne
-  ........................................*/   
-             deb=buf_lec+((*premiere_colonne)-1)*oct_pix;
-             j=1;
-             while (j <= (*nombre_colonnes_lire))
-	     {  
-
-               for (k=0;k<oct_pix;k=k+1)
-                {
-                  *(pch+k)=*(deb+k);
-                 }
-              pch=pch+oct_pix;
-              j=j+1;
-              deb=deb+((*pas_colonne)*oct_pix);
-             }   
-          
-            }
-          i=i+1;
-          lig=lig+(*pas_ligne);
-
-        }        
-
-	free(buf_lec);
-      }
-   }
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte de l'information INTEL ou IEEE*/
-/*                             en lecture et ecriture dans l'entete .hd      */
-/*****************************************************************************/
-
-   if ( (iret!= CAI_KO) && (image1->INV_OCTETS==1) && (oct_pix!=1) )
-   {
-        taille_image = (*nombre_lignes_lire)*oct_pix*(*nombre_colonnes_lire);
-        data_image2 = NULL;
-        data_image2 = (unsigned char *) calloc(taille_image,
-						sizeof(unsigned char));    
-        if (data_image2 == NULL)
-        {
-           strcpy(CAI_ERREUR,"Erreur allocation memoire cai_lecture_canal");
-           iret=CAI_KO;
-        }
-	else
-        {
-	    /*modification ordre selon nb octets par pixel*/
-       	    swab( (void*)(data_image), (void*)(data_image2), taille_image);
-		
-	   if (oct_pix!=2)
-           { 
-              Nb = taille_image/2;
-	      cai_inverser_tableau(data_image, data_image2,Nb);
-	   }
-	   else 
-	     for (i=0; i<taille_image;i++)
-	     {
-	        /*stockage dans data_image*/
-	        data_image[i] = data_image2[i];
-	     }	
-
-           if (data_image2!= NULL) free(data_image2);
-        }   	   
-    }
-         
-   return(iret);
- }
-/*
-  Fin de l'operation cai_lecture_canal_bsq
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal_bsq                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un canal d'une image bsq                  */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      CAI_OK_KO cai_ecriture_canal_bsq(image1, canal,   */ 
-/* ------------------                                 premiere_ligne,        */
-/*                                                    nombre_lignes_ecrire,  */
-/*                                                    nombre_colonnes_ecrire,*/
-/*                 		                      data_image )           */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal                 (E) (long int) : numero du canal a ecrire       */
-/*     premiere_ligne        (E) (long int) : 1ere ligne a ecrire ds l'image */
-/*     nombre_lignes_ecrire  (E) (long int) : nombre de lignes a ecrire      */
-/*     nombre_colonnes_ecrire(E) (long int) : nombre de lignes a ecrire      */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels ecris alloue et   */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_ecriture_canal_bsq        (S) (CAI_OK_KO) : = CAI_KO si pb        */
-/*                                                     = CAI_OK si OK        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ecriture_canal_bsq (CAI_IMAGE *image1 ,  
-                            	  int *canal ,           
-    		            	  int *premiere_ligne  ,   
-                            	  int *nombre_lignes_ecrire ,
-                            	  int *nombre_colonnes_ecrire,
-		            	  unsigned char *data_image )        
-
-{
-
- long int position_first_lig;	/* position de la 1ere ligne a ecrire    */
- long int position_courante;	/* position courante dans le fichier     */
- long int deplacement;		/* deplacement a effectuer               */
- int i_ligne;			/* compteur de lignes                    */
- unsigned char *buff_lig;	/* tableau contenant une ligne a ecrire  */
- long  int cr_write;		/* code retour de write                  */
- int num;                       /* descripteur de fichier                */
- int nboct_pix;		        /* nombre d'octets par pixel             */
- int tot_pix;                   /* nb de pixels total a ecrire           */
-
-/* initialisations */
-
-i_ligne = 0;
-num = image1->ACCES_CANAL_INT[*canal-1];
-nboct_pix = image1->NBOCT_PIX;
-
-/*.......................................*/
-/* verification si ecriture image entiere */
-/*.......................................*/
-  if ((*nombre_lignes_ecrire==image1->NB_LIG)&&
-		(*nombre_colonnes_ecrire==image1->NB_COL))
-  {
-       tot_pix=nboct_pix*(image1->NB_COL)*(image1->NB_LIG);
-
-    /* positionnement en debut de fichier */
-       position_first_lig=lseek(num,0L,0);
-
-   /* ecriture du canal complet */
-      cr_write = write ( num , data_image,tot_pix);
-      if (cr_write != tot_pix)
-      {
-              sprintf(CAI_ERREUR,"Erreur ecriture donnee image BSQ  %s",
-		image1->NOM_IMAGE);
-
-             goto ERREUR;
-       }
-   }
-  else
-  {
-
-/********************************************************/
-/* Calcul de la position de la premiere ligne a ecrire 	*/ 
-/********************************************************/
-
-position_first_lig =(long int) ( image1->POS_OCTET[*canal-1]+ 
-			    (( *premiere_ligne - 1) * (*nombre_colonnes_ecrire)
-		              * nboct_pix));
-		
-
-/********************************************************/
-/* Recuperation de la position courante			*/
-/********************************************************/
-
-position_courante = lseek ( num , 0L , 1 );
-
-
-/********************************************************/
-/* Deplacement jusqu'a la premiere ligne a ecrire	*/
-/********************************************************/
-
-deplacement = position_first_lig - position_courante;
-lseek ( num , deplacement , 1 ); 
-
-/********************************************************/
-/* TANT QUE il y a des lignes a ecrire                 	*/
-/********************************************************/
-while (i_ligne < (*nombre_lignes_ecrire))
-{
-
-/********************************************************/
-/*	extraction de la ligne du tableau 		*/
-/********************************************************/
-
-	buff_lig = data_image + (*nombre_colonnes_ecrire) * nboct_pix * i_ligne;
-
-/********************************************************/
-/*	ecriture de la ligne				*/
-/********************************************************/
- 
-	cr_write = write ( num , buff_lig ,
-			 (*nombre_colonnes_ecrire) * nboct_pix );
-	if ( cr_write != (*nombre_colonnes_ecrire)*nboct_pix )
-	{
-	    sprintf( CAI_ERREUR , "Erreur ecriture canal image bsq_cnes  %s",
-				   image1->NOM_IMAGE);
-
-		goto ERREUR;
-	}
- 
-/********************************************************/
-/*	incrementation du nombre de lignes		*/
-/********************************************************/
-
-	i_ligne++;
-/********************************************************/
-/* FIN TANT QUE						*/
-/********************************************************/
-  }
-}
-
-
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-
-/* 
-  Fin de l'operation cai_ecriture_canal_bsq
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_bsq                                              */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format bsq et de           */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_bsq(image1)                       */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_bsq        (S) (CAI_OK_KO) :   = CAI_KO si pb               */
-/*                                              = CAI_OK si OK               */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ferme_bsq (CAI_IMAGE *image1)
-
-{
- 	 int iret;    /* code retour de l'operation      */
- 	 int i_can;   /* indice du canal a fermer        */
- 	 int num;     /* descripteur du fichier a fermer */
-
- iret=CAI_OK;
-/*.............................................
-   Fermeture de tous les canaux
-  .............................................*/
- for (i_can=0;i_can<image1->NB_CANAUX;i_can=i_can+1)
- {
-
-   num=image1->ACCES_CANAL_INT[i_can];
-   if (num>0) close(num);
- }
-
-  return (iret);
-}
-
-/*
-  Fin de l'operation cai_ferme_bsq
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_bsq                                           */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stocke en bsq et de         */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_dest_ima_bsq(repertoire,nom_ima)        */       		      /* ------------------                                                        */
-/*     repertoire   (E) (char *) : repertoire de l'image a detruire          */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_dest_ima_bsq     (S) (CAI_OK_KO) : = CAI_KO si pb                 */
-/*                                            = CAI_OK si OK                 */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO cai_dest_ima_bsq ( char *repertoire , 
-                     	     char *nom_ima )
-
-{
-int	i_can;			/* compteur de canaux */
-long int     iret;              /* code retour fonction fermetrue lecture */
-char	str_num_canal[3];	/* suffixe numero du canal */
-char	nom_fic_entete[1024];	/* nom du fichier entete a detruire */
-char    nom_ima_complet[1024];  /* repertoire + nom de l'image */
-char	nom_fic_canal[1024];	/* nom du fichier canal a detruire */
-
-long int	cr_stat;	/* code retour de fonction status de fichier */
-struct stat buf_stat;		/* structure decrivant status de fichier */ 
-
-CAI_IMAGE   *image1;            /* structure ouverture image */
-int         nb_can;	/* nombre de canaux de l'image */
-int         nboct_pix;	/* nombre d'octets par pixel image */
-int         nb_col;	/* nombre de colonnes de l'image */
-int         nb_lig;        /* nombre de lignes de l'image */
-
-/************************************************/
-/* Constitution du nom du fichier d'entete	*/
-/************************************************/
-if ((long int)strlen(repertoire)!= 0)
-{
-  sprintf(nom_ima_complet,"%s/%s",repertoire,nom_ima);
-}
-else
-{
-  sprintf(nom_ima_complet,"%s",nom_ima);
-}
-  sprintf(nom_fic_entete ,"%s.hd", nom_ima_complet);
-/************************************************/
-/* Extraction des caracteristiques de l'image 	*/
-/* du fichier entete par l'appel a la fonction	*/
-/* cai_ouvre_lecture_bsq			*/
-/************************************************/
-
-  image1 = cai_ouvre_lecture_bsq ( repertoire,nom_ima, &nb_can ,&nboct_pix ,
-				   &nb_col , &nb_lig );	
-  if ( image1 == NULL) goto ERREUR;
-
-  image1->NB_CANAUX=nb_can;
-  image1->NB_COL=nb_col;
-  image1->NB_LIG=nb_lig;
-  image1->NBOCT_PIX=nboct_pix;
-
-  iret=cai_ferme_bsq(image1);
-
-/************************************************/
-/* Destruction du fichier d'entete		*/
-/************************************************/
-
-cr_stat = stat ( nom_fic_entete , &buf_stat );
-if ( cr_stat == 0 )
-	unlink ( nom_fic_entete );
-
- 
-/************************************************/
-/* Constitution un a un des noms des fichiers	*/
-/* canaux et destruction 			*/
-/************************************************/
-
-for ( i_can = 0 ; i_can < nb_can ; i_can++ )
-{
-	sprintf(nom_fic_canal,"%s.c%d",nom_ima_complet,i_can+1);
-	cr_stat = stat ( nom_fic_canal , &buf_stat );
-	if ( cr_stat == 0 )
-		unlink ( nom_fic_canal );
-	sprintf(nom_fic_canal,"%s.C%d",nom_ima_complet,i_can+1);
-	cr_stat = stat ( nom_fic_canal , &buf_stat );
-	if ( cr_stat == 0 )
-		unlink ( nom_fic_canal );
-}
-
-
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-/*
- Fin de l'operation cai_dest_ima_bsq
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_modif_nbbitspix_bsq                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    permet de modifier le nombre de bits significatifs par pixel    */
-/* -----     dans l'entete de fichier (.hd)				     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_modif_nbbitspix_bsq(image1,NbBitsPix)   */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     NbBitsPix   (E) (long int)     : nb de bits significatifs par pixel   */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_modif_nbbitspix_bsq(CAI_IMAGE *image1,int NbBitsPix)
-
-{
-  char fichierE[1024];  /* fichier a traiter               */
-  FILE *fic;		/* pointeur descripteur fichier    */
-  int retour;
-
-        
-/* Ouverture du fichier d'entete */
-
-   fichierE[0]='\0';
-   sprintf(fichierE,"%s.hd",image1->NOM_IMAGE);
-   fic = fopen(fichierE,"w");
-   if (fic == NULL)
-   {
-      sprintf(CAI_ERREUR,
-	"Erreur: Modification fichier %s impossible\n",fichierE);
-      goto ERREUR;
-   }
-
-/* Modification du fichier d'entete */
-   rewind(fic);
-   fprintf ( fic , "TYPE\n");
-   fprintf ( fic , "%s\n",image1->COD_PIX );
-   fprintf ( fic , "LABEL\n" );
-   fprintf ( fic , "%s\n" ,image1->COMMENT);
-   fprintf ( fic , "CHANNELS\n" );
-   fprintf ( fic , "%3d\n" , image1->NB_CANAUX);
-   fprintf ( fic , "LINES\n" );
-   fprintf ( fic , "%5d\n" , image1->NB_LIG);
-   fprintf ( fic , "COLUMNS\n" );
-   fprintf ( fic , "%5d\n" , image1->NB_COL );
-   fprintf ( fic , "BITS PER PIXEL\n" );
-   fprintf ( fic , "%2d\n" , NbBitsPix );
-   fprintf ( fic,  "SENSCODAGE\n");
-   retour=strncmp(image1->SENS_COD,"BE",2);
-   if (retour == 0)
-     fprintf ( fic , "IEEE\n"  );
-   else
-     fprintf ( fic , "INTEL\n"  );
-
-  fclose ( fic );
-
-  return(CAI_OK);
-
-ERREUR :
-  return(CAI_KO);
-}
-/*
- Fin de l'operation cai_modif_nbbitspix_bsq
-*/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_modifie_bsq                                      */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture-ecriture d'une image au format  */
-/* -----     bsq et de tous les fichiers qui la composent                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :     CAI_IMAGE *cai_ouvre_modifie_bsq (nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels              */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_modifie_bsq     (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_modifie_bsq(char *repert,
-				     char *nom_image,
-				     int  *nb_can,
-				     int  *nboct_pix,
-				     int  *nb_col,
-				     int  *nb_lig)
-
-
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   char label[80];		/* contient un enregistrement du fichier    */
-   int nbplan;			/* nombre de canaux dans le fichier en-tete */
-   int nbbit;			/* nb de bits par pixel du fichier en-tete  */
-   int retour;			/* retour de la fonction comparaison chaines*/ 
-   char *deb,*deb1,*pch0;	/* pointeurs sur chaine de caracteres       */
-   char car[4];			/* indice du canal traite     		    */
-   int i,num,IndExtens;		/* indice 				    */
-   char Extens[25];		/* Extension possible du fichier	    */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   char *type_machine;          /* ordre rangement octets machine de travail*/
-   int cmp;			/* retour de comparaison de chaine          */
-   int reconnaissance_type;
-   char CAN[2];
-   char COD_PIX[5];
-
-   /*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-
-   *nb_lig=0;
-
-   *nb_col=0;
-
-   *nboct_pix=0;
- 
-   iret=1;
-   IndExtens = 0;
-   pch0=NULL;
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-
-
- /*..................................
-   determination ordre de rangement 
-   des octets sur machine de travail
-  ......................................*/ 
-   type_machine = cai_test_pFpf();
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 : FA:Rajout des tests sur les retours d'allocation    */
-/*			   memoire                                           */
-/*****************************************************************************/
-
- if (image1==NULL)
- {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_modifie");
- }
- else
- {
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   pch0 = strstr(nom_image,".");
-   if (pch0 != NULL)
-   {
-	*pch0 = '\0';
-	pch0=pch0 + 1;
-	sprintf(Extens,"%s",pch0);
-	if (strcmp(Extens,"hd")!=0)
-			IndExtens=1;
-   }
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!= 0)
-   {
-      sprintf(nom_fic,"%s/%s.hd",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.hd",nom_image);
-   }
-   sprintf(image1->NOM_IMAGE,"%s/%s",repert,nom_image);
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   fic_in=NULL;
-   fic_in=fopen(nom_fic,"r");
-   if (fic_in==NULL)
-   {
-     iret=0;
-     sprintf(CAI_ERREUR,"Erreur ouverture fichier entete BSQ-CNES %s",
-			nom_fic);
-    }
-   else
-   {
-/*....................................
-     Decodage des informations TYPE
-  ............................................*/
-     fscanf(fic_in,"%s\n",label);
-     retour=strncmp(label,"TYPE",4);
-     if (retour!=0)
-     {
-       sprintf(CAI_ERREUR,
-			"Informations incoherentes ligne TYPE dans %s",
-			nom_fic);
-       iret=0;
-      }
-     else
-     {
-         fscanf(fic_in,"%s\n",COD_PIX);
-         pch0=cai_En_majuscule( COD_PIX );
-
-/* Verification si type de codage reconnu */
-         reconnaissance_type = cai_istyp_connu(pch0);
-
-/*..................................
-       Decodage du label          
-  ......................................*/
-	 fscanf(fic_in,"%s\n",label);
-	 retour=strncmp(label,"LABEL",5);
-	 if (retour!=0)
-	 {
-	   sprintf(CAI_ERREUR,
-			"Informations incoherentes ligne LABEL dans %s",
-			nom_fic);
-	   iret=0;
-	  }
-	 else
-	 {
-	   fgets(image1->COMMENT,80,fic_in);
-           image1->COMMENT[strlen(image1->COMMENT)-1]='\0';
-
- /*........................................
-	Decodage du nombre de canaux
-  .........................................*/
-	   fscanf(fic_in,"%s\n",label);
-	   retour=strncmp(label,"CHANNELS",8);
-	   if (retour!=0)
-	   {
-	     sprintf(CAI_ERREUR,
-			"Informations incoherentes ligne CHANNELS dans %s",
-			nom_fic);
-
-	     iret=0;
-	    }
-	   else
-	   {
-	     fscanf(fic_in,"%d\n",&nbplan);
-
-/*.......................................
-	  Decodage du nombre de lignes
-  ........................................*/
-	     fscanf(fic_in,"%s\n",label);
-	     retour=strncmp(label,"LINES",5);
-	     if (retour!=0)
-	     {
-	       sprintf(CAI_ERREUR,
-			"Informations incoherentes ligne LINES dans %s",
-			nom_fic);
-	       iret=0;
-	      }
-	     else
-	     {
-	       fscanf(fic_in,"%d\n",nb_lig);
-
-
-/*.......................................
-	  Decodage du nombre de colonnes
-  ........................................*/
-	       fscanf(fic_in,"%s\n",label);
-	       retour=strncmp(label,"COLUMNS",7);
-	       if (retour!=0)
-	       {
-	    	 sprintf(CAI_ERREUR,
-			"Informations incoherentes ligne COLUMNS dans %s",
-			nom_fic);
-	    	 iret=0;
-	  	}
-	       else
-	       {
-
-		 fscanf(fic_in,"%d\n",nb_col);
-
-/*.......................................
-	  Decodage du nombre de bits par pixel
-  ........................................*/
-	  	 fgets(label,80,fic_in);
-	  	 retour=strncmp(label,"BITS PER PIXEL",14);
-		 if (retour!=0)
-	  	 {
-	    	   sprintf(CAI_ERREUR,
-			"Informations incoherentes ligne BITS dans %s",
-			nom_fic);
-	    	   iret=0;
-	  	  }
-	  	 else
-{
-		   fscanf(fic_in,"%d\n",&nbbit);
-                   image1->NB_BITS_PIX = nbbit;
-
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte de l'information INTEL ou IEEE*/
-/*                             en lecture et ecriture dans l'entete .hd      */
-/*****************************************************************************/
-/*..................................
-       Decodage du sens de codage si présent
-  ......................................*/
-		   fscanf(fic_in,"%s\n",label);
-		   retour=strncmp(label,"SENSCODAGE",10);
-	 	   if (retour!=0)
-	 	   {
-/*      Si absent, pas d'inversion      */    
-			image1->INV_OCTETS =0;
-			sprintf(image1->SENS_COD,type_machine);
-	 	    }
-	 	   else
-		   {
-  			 fscanf(fic_in,"%s\n",label);
-  			 retour=strncmp(label,"IEEE",4);
-   			 if (retour==0)	
-				sprintf(image1->SENS_COD,"BE");
-   			 else
-				sprintf(image1->SENS_COD,"LE");
-   			 cmp = strncmp(type_machine,image1->SENS_COD,2);
-   			 if (cmp!=0)
-   			 {
-	  				image1->INV_OCTETS =1;
-   			 }
-   			 else
-  			 {
-	 				 image1->INV_OCTETS =0;
-   			 }
-                     }
-		  }
-		}
-	      }
-	    }
-	  }
-	
-      }
-/*..................................
-   Fermeture du fichier 
-  ......................................*/
-      if (fic_in !=NULL) 
-      {
-	fclose(fic_in);
-        fic_in=NULL;
-      }
-   }
-
-   if (iret !=0)
-   {
-/*..................................
-     Initialisation du nombre d'octets par pixel
-  ........................................................*/
-       if ((nbbit%8)==0)
-		*nboct_pix=(int)(nbbit/8);
-       else
-		*nboct_pix=(int)((nbbit/8)+1);
-
-       if (reconnaissance_type != -1)
-	    	sprintf(image1->COD_PIX,"%s",COD_PIX);
-       else
-       {
-     	  sprintf(image1->COD_PIX,"UND");
-
-          if (*nboct_pix==1)
-          	sprintf(image1->COD_PIX,"OCT");
-    	  else if (*nboct_pix==2)
-	  	sprintf(image1->COD_PIX,"I2");
-         else if (*nboct_pix==4)
-         {
-	  	retour=strncmp(COD_PIX,"I4",2);
-          	if (retour==0)
-	    	 	sprintf(image1->COD_PIX,"I4");
-          	else
-          	{
-	 		retour=strncmp(COD_PIX,"R4",2);
-          		if (retour==0)
-	    	  		sprintf(image1->COD_PIX,"R4");
-                }
-
-           }
-          else if (*nboct_pix==8)
-	     sprintf(image1->COD_PIX,"R8");
-      }
-
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-       deb = image1->NOM_FIC_CAN;
-       deb1= image1->NOM_UTIL_CAN;
-      if ((nbplan==1)&&(IndExtens==1))
-      {
-/* Verification de l'existence du fichier demande et ouverture */
-          nom_fic[0]='\0';
-          if ((long int)strlen(repert)!= 0)
-             sprintf(nom_fic,"%s/%s.%s",repert,nom_image,Extens);
- 	  else
-             sprintf(nom_fic,"%s.%s",nom_image,Extens);
-          nom_fic_canal[0]='\0';
-          sscanf(nom_fic,"%s",nom_fic_canal);
-          num=open(nom_fic_canal,O_RDWR|O_BINARY,0);
-          if (num!= -1)
-          {
-            sprintf(deb,"%s.%s",nom_image,Extens);
-  	    deb=deb+100;
-            sprintf(deb1,"%s.%s",nom_image,Extens);
-            deb1=deb1+100;
-          }
-          image1->ACCES_CANAL_INT[*nb_can]=num;
-          image1->POS_OCTET[*nb_can]=0;
-	  *nb_can = *nb_can + 1;
-      }
-      else
-      {
-/*...................................................
-     recherche du nombre de canaux de l'image si pas d'extension donnee
-  ..........................................................*/
-        nom_fic[0]='\0';
-        if ((long int)strlen(repert)!= 0)
-        {
-            sprintf(nom_fic,"%s/%s.c",repert,nom_image);
-         }
-        else
-        {
-            sprintf(nom_fic,"%s.c",nom_image);
-         }
-         sprintf(nom_fic_canal,"%s1",nom_fic);
-         retour = stat ( nom_fic_canal , &buf_stat );
-         if ( retour != 0 )
-         {
-           sprintf(CAN,"C");
-           if ((long int)strlen(repert)!= 0)
-           {
-               sprintf(nom_fic,"%s/%s.C",repert,nom_image);
-            }
-            else
-            {
-                sprintf(nom_fic,"%s.C",nom_image);
-             }
-
-         }
-         else
-           sprintf(CAN,"c");
-
-        for (i=1;i<CAI_NB_MAX_CAN;i=i+1)
-        {
-          nom_fic_canal[0]='\0';
-          sprintf(nom_fic_canal,"%s%d",nom_fic,i);
-          num=open(nom_fic_canal,O_RDWR|O_BINARY,0);
-          if (num!= -1)
-          {
-            if (*nb_can<CAI_NB_MAX_CAN)
-            {
-           	sscanf(nom_image,"%s",deb);
-	   	strcat(deb,CAN);
-                sprintf(car,"%d",(*nb_can)+1);
-           	strcat(deb,car);
-  	   	deb=deb+100;
-           	sscanf(nom_image,"%s",deb1);
-	   	strcat(deb1,CAN);
-           	strcat(deb1,car);
-           	deb1=deb1+100;
-             }
-             image1->ACCES_CANAL_INT[*nb_can]=num;
-             image1->POS_OCTET[*nb_can]=0;
-
-             *nb_can=*nb_can+1;     
-          }
-         }
-        if (*nb_can!=nbplan)
-        {
-       		sprintf(CAI_ERREUR,
-		"incoherence au niveau du nombre de fichiers canaux dans %s",
-		nom_fic);
- 
-       		iret=0;
-         }
-      }
-     }
-    }
-    if (iret == 0)
-    {
-	return (NULL);
-     }
-    else
-    {
-      return(image1);
-     }
-
-}
-
-/* 
-   Fin de l'operation cai_ouvre_modifie_bsq
-*/
diff --git a/Utilities/CAI/cai_dll/src/cai_fonctions.c b/Utilities/CAI/cai_dll/src/cai_fonctions.c
deleted file mode 100755
index 3acec11676..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_fonctions.c
+++ /dev/null
@@ -1,2499 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_fonctions.c                                               */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    contient l'interface entre l'utilisateur et la Couche Acces   */
-/* -------     Image, avec les fonctionnalites de premier niveau             */ 
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CISI)                                   */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    fevrier 1995                                        */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V2                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 2 : DM : optimisation				     */
-/*****************************************************************************/
-/* MOD : VERSION : 4.0 : DM : integration du format GESSIMU (sept 1999)      */
-/* MOD : VERSION : 4.0 : DM : integration du format GRILLES (sept 1999)      */
-/*****************************************************************************/
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : FA : modifications pour compatibilite HP64bits      */
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : integration des formats SPOT1A4 et SPOT5       */
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : modification lecture des repertoires pour PC   */
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : suppression du format multiscope, modif SPOT5  */
-/*****************************************************************************/
-/* MOD : VERSION : 4.6 : DM : integration du format RADAR_CNES               */
-/*****************************************************************************/
-/* MOD : VERSION : 4.6 : FA  : avertissement des formats non disponibles     */
-/*                             en modification                               */
-/*****************************************************************************/
-/* MOD : VERSION : 4.8 : DM:  Sous Cygwin separateur='/' ou '\'              */
-/*****************************************************************************/
-/* MOD : VERSION : 5.3 : DM :  prise en compte du format bandeau             */
-/*****************************************************************************/
-
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-#include <stdio.h>
-#include <sys/types.h>
-#include <string.h>
-#include <dirent.h>
-#include <stdlib.h>
-
-#define _CAI_IMAGE
-#define IN_CAI_FONC
-
-#include "cai_image.h"
-
- char IND_GRILLES;    /* indicateur si image ou grille */ 
- char IND_SPOT;       /* indicateur si SPOT1A4 (1),SPOT5BIL (B),SPOT5TIF(T) */
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header: cai_fonctions.c,v 1.13 01/02/15 14:24:58 cmf Exp $";
-
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_format                                           */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des formats reconnus par la Couche Image    */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_format(tab_format,tab_suffixe)      */
-/* -----------------                                                         */
-/*                                                                           */
-/*     tab_format[]   (S) (char **) : pointeur sur tableau des formats connus*/
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*     tab_suffixe[]  (S) (char **) : pointeur sur le tableau des suffixes   */
-/*				      des formats reconnus : 1 pour 1 canal  */
-/*				           2 pour plusieurs canaux           */
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_format(S) (long int)     :   nombre de formats reconnus par CAI  */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-long int cai_liste_format(char ***tab_format,char **(tab_suffixe[2]))                  
-
-{ 
-long int nb;	        /* code retour de la fonction cai_liste_format  */
-long int i,j;
-
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES FORMATS DISPONIBLES
-     ET LA LISTE DES SUFFIXES CORRESPONDANT
-     ......................................*/
-    nb=CAI_NB_FORMAT;
-    *tab_format  = (char **) calloc(nb,sizeof(char *));
-    tab_suffixe[0] = (char **) calloc(nb,sizeof(char *));
-    tab_suffixe[1] = (char **) calloc(nb,sizeof(char *));
-
-
-
-
-    for (i=0;i<nb;i++)
-    {
-      (*tab_format)[i]=(char *)calloc(1,20);
-      strcpy((*tab_format)[i],CAI_NOM_FORMAT[i]);
-      for (j=0;j<2;j++)
-      {
-        tab_suffixe[j][i]=(char *)calloc(1,8);
-        strcpy(tab_suffixe[j][i],CAI_SUF_FORMAT[j][i]);
-	}
-
-      }
-return(nb);
-
-}
-/* Fin de l'operation cai_liste_format
-*/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_image                                            */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images d'un format donne                */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_image(repert,type_image,tab_ima)    */
-/* -----------------                                                         */
-/*                                                                           */
-/*     repert         (E) (char *)  : repertoire a explorer		     */
-/*     type_image     (E) (char *)  : format des images a lister             */
-/*     tab_ima[]      (S) (char **) : pointeur sur tableau des images listees*/
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_image(S) (long int)     : =-1 repertoire inexistant	     */
-/*                                    =-2 format non pris en compte          */
-/*                                    =>0 nombre d'images listees            */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-long int cai_liste_image(char *repert,
-                          char *type_image,
-                          char ***tab_ima)
-                  
- 
-{
- long int nb;	        /* code retour de la fonction cai_liste_image  */
- long int (*comp) ( );  /* pointeur sur fonction                       */
- DIR *dirp;		/* pointeur sur structure ouverture repertoire */ 
-
-/*....................
-   Initialisations 
-  ..................*/
-  nb=0;
-  CAI_ERREUR[0]='\0';
-  IND_GRILLES = '\0';
-  IND_SPOT = '\0';
-/*..............................................
-  Verification existence repertoire demande
-  ...............................................*/
-  dirp=opendir(repert);
-  if (dirp ==0)
-  {
-    /* repertoire demande inexistant */
-     nb=-1;
-    sprintf(CAI_ERREUR,"repertoire %s inexistant \n",repert);
-
-  }
-  else
-  {
-/*..............................................
-  Initialisation d'un pointeur sur fonction dependant du format des images
-  ................................................ */
-
-   if (strcasecmp(type_image,"INRIA") == 0)
-   {
-      comp = (cai_liste_ima_inria) ;
-    }
-
-   else if (strcasecmp(type_image,"ONERA") == 0)
-   {
-      comp = (cai_liste_ima_onera) ;
-    }
-
-   else if (strcasecmp(type_image,"BSQ") == 0)
-   {
-      comp = (cai_liste_ima_bsq) ;
-    }
-
-   else if (strcasecmp(type_image,"BIP") == 0)
-   {
-      comp = (cai_liste_ima_bip) ;
-    }
-#ifdef _HDF16
-   else if (strncasecmp(type_image,"HDF",3) == 0)
-   {
-      comp = (cai_liste_ima_hdf16) ;
-    }
-#endif
-
-   else if (strcasecmp(type_image,"BIL") == 0)
-   {
-      comp = (cai_liste_ima_bil) ;
-    }
-
-   else if (strcasecmp(type_image,"LUM") == 0)
-   {
-      comp = (cai_liste_ima_lum) ;
-    }
-
-   else if (strcasecmp(type_image,"GESSIMU") == 0)
-   {
-      comp = (cai_liste_ima_gessimu) ;
-    }
-
-   else if (strcasecmp(type_image,"GDB") == 0)
-   {
-      IND_GRILLES = 'B';
-      comp = (cai_liste_ima_grilles) ;
-    }
-
-   else if (strcasecmp(type_image,"GDR") == 0)
-   {
-      IND_GRILLES = 'R';
-      comp = (cai_liste_ima_grilles) ;
-    }
-
-   else if (strcasecmp(type_image,"TIFF") == 0)
-   {
-      comp = (cai_liste_ima_tiff) ;
-    }
-
-   else if (strcasecmp(type_image,"RASTERFILE") == 0)
-   {
-      comp = (cai_liste_ima_sun_raster) ;
-    }
-   else if (strcasecmp(type_image,"JPEG") == 0)
-   {
-      comp = (cai_liste_ima_jpeg) ;
-    }
-   else if (strcasecmp(type_image,"SPOT1A4") == 0)
-   {
-      IND_SPOT = '1';
-      comp = (cai_liste_ima_spot) ;
-    }
-   else if (strcasecmp(type_image,"SPOT5TIF") == 0)
-   {
-      IND_SPOT = 'T';
-      comp = (cai_liste_ima_spot) ;
-    }
-   else if (strcasecmp(type_image,"SPOT5BIL") == 0)
-   {
-      IND_SPOT = 'B';
-      comp = (cai_liste_ima_spot) ;
-    }
-   else if (strcasecmp(type_image,"RADAR") == 0)
-   {
-      comp = (cai_liste_ima_radar) ;
-    }
-   else if (strcasecmp(type_image,"BANDEAU") == 0)
-   {
-      comp = (cai_liste_ima_bandeau) ;
-    }
-
-   else 
-    { 
- 
-   /* format non connu de la Couche Acces Image */
-    nb = -2;
-    sprintf(CAI_ERREUR,"format %s non reconnu \n",type_image);
-
-   }
-
-   /*...........................................
-   Appel de la fonction pointee par comp avec la liste des parametres
-   suivants : 
-	     repertoire de stockage des images
-             pointeur sur tableau contenant la liste des images a lister
-  ......................................................................*/
-   closedir(dirp);
-   if ( nb == 0 )
-   { 
-     if (IND_GRILLES == '\0')
-     {
-        if (IND_SPOT == '\0')
-	        nb = (*comp)(repert,tab_ima);
-	else
-	        nb = (*comp)(IND_SPOT,repert,tab_ima);
-      }
-      else
-	nb = (*comp)(IND_GRILLES,repert,tab_ima);
-    }
-  }
-   IND_GRILLES = '\0';
-   IND_SPOT    = '\0';
-   return (nb);
-
-}
-/* Fin de l'operation cai_liste_image
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_image                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image d'un format donne   */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_lecture_image (nom_image,        */
-/*  ---------------- 		                           type_image,       */
-/*                 		                           nb_can,           */
-/*				                           nboct_pix,	     */	
-/*				                           nb_col,           */
-/*				                           nb_lig)           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     type_image     (E) (char *) : format de l'image a ouvrir              */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_image (S) (CAI_IMAGE *)    : =NULL si pb            */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V3                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_lecture_image (char *nom_image,
-                  		    char *type_image,
-                 		    int  *nb_can,
-				    int  *nboct_pix,		
-				    int  *nb_col,
-				    int  *nb_lig)                  
-
-{
-
- int nb;             	  /* indicateur d'erreurs rencontres              */
- CAI_IMAGE *image1;       /* descripteur de fichier retour fonction       */
- CAI_IMAGE *(*comp) ( );  /* pointeur sur fonction                        */
- char repert[1024];       /* repertoire de stockage de l'image            */
- char image[1024];        /* nom de l'image a ouvrir en lecture           */
- char format[20];         /* format de stockage de l'image a lire         */
- long int i,ind;          /* variables de travail                         */
- char *pch,*deb;          /* pointeurs de travail                         */
- long int nb1,nb2;	  /* indice de longueur significative             */
- char car;		  /* variable de travail                          */
- DIR *dirp;		  /* pointeur sur structure ouverture repertoire  */
- CAI_OK_KO icr;           /* Compte-rendu des fonctions DA                */
-
-/*......................
-  Initialisations
-  .......................*/
-  nb=1;
-  strcpy(format,type_image);
-  CAI_ERREUR[0]='\0';
-  IND_GRILLES = '\0';
-  IND_SPOT = '\0';
-
-/*...................................................
-   Recherche du type de fichier si reconnaissance automatique demande
-  ...................................................*/
-  if (strcasecmp(format,"AUTO")== 0)
-  {
-     for( i = 0 ; i< CAI_NB_EXTENSIONS ; i++)
-      {
-       if(strstr(nom_image,CAI_SUFFIXES[i]) != NULL )
-       {
-          ind=CAI_NUMEROS[i];
-          strcpy(format,CAI_NOM_FORMAT[ind]);
-       }
-    }
-  }
- 
-
-/*..............................................
-  Initialisation d'un pointeur sur fonction dependant du format des images
-  ................................................ */
-
-   if (strcasecmp(format,"INRIA") == 0)
-   {
-      comp = (cai_ouvre_lecture_inria) ;
-    }
-
-   else if (strcasecmp(format,"ONERA") == 0)
-   {
-      comp = (cai_ouvre_lecture_onera) ;
-    }
-
-   else if (strcasecmp(format,"BSQ") == 0)
-   {
-      comp = (cai_ouvre_lecture_bsq) ;
-    }
-
-   else if (strcasecmp(format,"BIP") == 0)
-   {
-      comp = (cai_ouvre_lecture_bip) ;
-    }
-#ifdef _HDF16
-   else if (strncasecmp(format,"HDF",3) == 0)
-   {
-      comp = (cai_ouvre_lecture_hdf16) ;
-    }
-#endif
-
-   else if (strcasecmp(format,"BIL") == 0)
-   {
-      comp = (cai_ouvre_lecture_bil) ;
-    }
-
-   else if (strcasecmp(format,"LUM") == 0)
-   {
-      comp = (cai_ouvre_lecture_lum) ;
-    }
-
-   else if (strcasecmp(format,"GESSIMU") == 0)
-   {
-      comp = (cai_ouvre_lecture_gessimu) ;
-    }
-
-   else if (strcasecmp(format,"GDB") == 0)
-   {
-      IND_GRILLES = 'B';
-      comp = (cai_ouvre_lecture_grilles) ;
-    }
-
-   else if (strcasecmp(format,"GDR") == 0)
-   {
-      IND_GRILLES = 'R';
-      comp = (cai_ouvre_lecture_grilles) ;
-    }
-
-   else if (strcasecmp(format,"TIFF") == 0)
-   {
-      comp = (cai_ouvre_lecture_tiff) ;
-    }
-
-   else if (strcasecmp(format,"RASTERFILE") == 0)
-   {
-      comp = (cai_ouvre_lecture_sun_raster) ;
-    }
-   else if (strcasecmp(format,"JPEG") == 0)
-   {
-      comp = (cai_ouvre_lecture_jpeg) ;
-    }
-
-   else if (strcasecmp(type_image,"SPOT1A4") == 0)
-   {
-      IND_SPOT = '1';
-      comp = (cai_ouvre_lecture_spot) ;
-    }
-   else if (strcasecmp(type_image,"SPOT5TIF") == 0)
-   {
-      IND_SPOT = 'T';
-      comp = (cai_ouvre_lecture_spot) ;
-    }
-   else if (strcasecmp(type_image,"SPOT5BIL") == 0)
-   {
-      IND_SPOT = 'B';
-      comp = (cai_ouvre_lecture_spot) ;
-    }
-  else if (strcasecmp(format,"RADAR") == 0)
-   {
-      comp = (cai_ouvre_lecture_radar) ;
-    }
-  else if (strcasecmp(format,"BANDEAU") == 0)
-   {
-      comp = (cai_ouvre_lecture_bandeau) ;
-    }
-
-   else 
-    { 
- 
-   /* format non connu de la Couche Acces Image */
-     nb = 0;
-     sprintf(CAI_ERREUR,"format %s non reconnu \n",format);
-
-   }
-   /*...............................................................
-      Separation du repertoire de stockage de l'image et du nom propre
-     .................................................................*/
-    if (nb == 1)
-    {
-      repert[0]='\0';
-      image[0]='\0';
-      car='/';
-
-#ifdef _WIN
-      car='\\';
-#endif
-      pch=(char *)strrchr(nom_image,car);
-      if (pch == NULL) 
-      {
-         /* le repertoire est celui courant */
-           strcpy(repert,"./");
-#ifdef _WIN
-           strcpy(repert,".\\");
-#endif
-           sscanf(nom_image,"%s",image);
-/*----------------------------------------------------------*/
-/* Modification septembre 98 demandee par H.Vadon           */
-/* Afin de permettre d'utiliser une image monocanale en BSQ */
-/* avec l'extension libre sans .c1 forcement		    */
-/*----------------------------------------------------------*/
-	   if (strcasecmp(format,"BSQ") != 0)
-           {
-           	car='.';
-           	pch=(char *)strrchr(image,car);
-           	if (pch != NULL)
-               		*pch='\0'; 
-           }       
-      }
-      else
-      {
-  
-           nb1=( long int)(pch)-( long int)(nom_image);
-           strncpy(repert,nom_image,nb1);
-           repert[nb1]='\0';
-           deb=nom_image+nb1+1;
-           nb2=strlen(nom_image)-(nb1+1);
-	   strncpy(image,deb,nb2);
-           image[nb2]='\0';
-
-/*----------------------------------------------------------*/
-/* Modification septembre 98 demandee par H.Vadon           */
-/* Afin de permettre d'utiliser une image monocanale en BSQ */
-/* avec l'extension libre sans .c1 forcement		    */
-/*----------------------------------------------------------*/
-	   if (strcasecmp(format,"BSQ") != 0)
-           {
-           	car='.';
-           	pch=(char *)strrchr(image,car);
-           	if (pch != NULL)
-               		*pch='\0';    
-           }      
-
-     }
-        
-   } 
-/*..............................................
-  Verification existence repertoire demande
-  ...............................................*/
-  if ( nb == 1 )
-  {
-    dirp=opendir(repert);
-    if (dirp ==(DIR *)NULL)
-    {
-    /* repertoire demande inexistant */
-     nb=0;
-     sprintf(CAI_ERREUR,"repertoire %s inexistant \n",repert);
-     }
-     else
-        closedir(dirp);
-
-    }
-  
-   /*...........................................
-   Appel de la fonction pointee par comp avec la liste des parametres
-   suivants : 
-             repertoire de stockage de l'image
-  	     nom de l'image 
-             nombre de canaux
-	     nombre d'octets par pixels
-	     nombre de colonnes
-             nombre de lignes
-  ......................................................................*/
-    if ( nb == 1 )
-   {
-     if (IND_GRILLES == '\0')
-     {
-	if (IND_SPOT == '\0')
-            image1 = (*comp)(repert,image,nb_can,nboct_pix,nb_col,nb_lig);
-        else
-            image1 = (*comp)(IND_SPOT,repert,image,nb_can,nboct_pix,nb_col,
-						nb_lig);
-      }
-     else
-         image1 = (*comp)(IND_GRILLES,repert,image,nb_can,nboct_pix,nb_col,
-						nb_lig);
-     IND_GRILLES = '\0';
-     IND_SPOT = '\0';
-     if (image1 != NULL)
-     {
-       strcpy(image1->TYPE_IMAGE,format);
-       strcpy(image1->NOM_IMAGE,nom_image);
-       image1->NB_CANAUX=*nb_can;
-       image1->NB_COL=*nb_col;
-       image1->NB_LIG=*nb_lig;
-       image1->NBOCT_PIX=*nboct_pix;
-       image1->MODE=CAI_LECTURE;
-
-/***   Traitement de la Colormap si format autre que TIFF et RASTERFILE ***/
-
-       if ((strcasecmp(format,"RASTERFILE") != 0)&&(strcasecmp(format,"TIFF") != 0))
-       {
-
-        	icr = cai_lecture_colormap(image1);
-
-        	if ( icr == CAI_KO) 
-         		 return (NULL);
-        	else
-          		return (image1);
-        }
-        else
-        {
-          return (image1);
-        }
-       }
-      else
-       return(NULL);
-    } 
-    else
-    {
-     return (NULL);
-    }
-}
-/*
-  Fin de l'operation cai_ouvre_lecture_image.c
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_image                                   */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     dans un format donne et de tous les fichiers qui la composent   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_creation_image (nom_image,       */
-/*  ---------------- 		                           type_image,       */
-/*                 		                           nb_can,           */
-/*				                           nboct_pix,	     */
-/*				                           nb_col,           */
-/*				                           nb_lig,           */
-/*				                           label)            */
-/*                                                                           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     type_image     (E) (char *) : format de l'image a ouvrir              */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_image (S) (CAI_IMAGE *)    : =NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V3                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_creation_image ( char *nom_image,
-                  		      char *type_image,
-                 		      int nb_can,
-				      int nboct_pix,		
-				      int nb_col,
-				      int nb_lig,
-				      char *label)                  
-
-{
-
-  int nb;                 /* indicateur d'erreurs rencontres              */
- CAI_IMAGE *image1;       /* descripteur de fichier retour fonction       */
- CAI_IMAGE *(*comp) ( );  /* pointeur sur fonction                        */
- char repert[1024];       /* repertoire de stockage de l'image            */
- char image[1024];        /* nom de l'image a ouvrir en ecriture          */
- char *pch,*deb;          /* pointeurs de travail                         */
- long int nb1,nb2;        /* indice de longueur significative             */
- char car;		  /* variable de travail                          */
- DIR *dirp;		  /* pointeur sur structure ouverture repertoire  */
-
-
-/*......................
-  Initialisations
-  .......................*/
-
- nb=1; 
- CAI_ERREUR[0]='\0';
- IND_GRILLES = '\0';
- IND_SPOT = '\0';
-/*................................................................
-  Verification de la coherence des donnees en entree
-  .............................................................*/
-  if (nb_can<=0)
-  {
-      sprintf(CAI_ERREUR,"Nombre du canal a ecrire incorrect"); 
-      nb=0;
-  }
-
-  if (nb_lig<=0)
-  {
-      sprintf(CAI_ERREUR,"Nombre de lignes a ecrire incorrect"); 
-      nb=0;
-
-  }
-
-   if (nb_col<=0)
-  {
-      sprintf(CAI_ERREUR,"Nombre de colonnes a ecrire incorrect"); 
-      nb=0;
-  }
-
-
-/*..............................................
-  Initialisation d'un pointeur sur fonction dependant du format des images
-  ................................................ */
-   if (strcasecmp(type_image,"INRIA") == 0)
-   {
-      comp = (cai_ouvre_creation_inria) ;
-    }
-
-   else if (strcasecmp(type_image,"ONERA") == 0)
-   {
-      comp = (cai_ouvre_creation_onera) ;
-    }
-
-   else if (strcasecmp(type_image,"BSQ") == 0)
-   {
-      comp = (cai_ouvre_creation_bsq) ;
-    }
-
-   else if (strcasecmp(type_image,"BIP") == 0)
-   {
-      comp = (cai_ouvre_creation_bip) ;
-    }
-
-#ifdef _HDF16
-
-   else if (strncasecmp(type_image,"HDF",3) == 0)
-   {
-      comp = (cai_ouvre_creation_hdf16) ;
-    }
-#endif
-
-   else if (strcasecmp(type_image,"BIL") == 0)
-   {
-      comp = (cai_ouvre_creation_bil) ;
-    }
-
-   else if (strcasecmp(type_image,"LUM") == 0)
-   {
-      comp = (cai_ouvre_creation_lum) ;
-    }
-
-   else if (strcasecmp(type_image,"GESSIMU") == 0)
-   {
-      comp = (cai_ouvre_creation_gessimu) ;
-    }
-
-   else if (strcasecmp(type_image,"GDB") == 0)
-   {
-      IND_GRILLES = 'B';
-      comp = (cai_ouvre_creation_grilles) ;
-    }
-
-   else if (strcasecmp(type_image,"GDR") == 0)
-   {
-      IND_GRILLES = 'R';
-      comp = (cai_ouvre_creation_grilles) ;
-    }
-
-   else if (strcasecmp(type_image,"TIFF") == 0)
-   {
-      comp = (cai_ouvre_creation_tiff) ;
-    }
-
-   else if (strcasecmp(type_image,"RASTERFILE") == 0)
-   {
-      comp = (cai_ouvre_creation_sun_raster) ;
-    }
-   else if (strcasecmp(type_image,"JPEG") == 0)
-   {
-      comp = (cai_ouvre_creation_jpeg) ;
-    }
-  else if (strcasecmp(type_image,"SPOT1A4") == 0)
-   {
-      IND_SPOT = '1';
-      comp = (cai_ouvre_creation_spot) ;
-    }
-   else if (strcasecmp(type_image,"SPOT5TIF") == 0)
-   {
-      IND_SPOT = 'T';
-      comp = (cai_ouvre_creation_spot) ;
-    }
-   else if (strcasecmp(type_image,"SPOT5BIL") == 0)
-   {
-      IND_SPOT = 'B';
-      comp = (cai_ouvre_creation_spot) ;
-    }
-   else if (strcasecmp(type_image,"RADAR") == 0)
-   {
-      comp = (cai_ouvre_creation_radar) ;
-    }
-   else if (strcasecmp(type_image,"BANDEAU") == 0)
-   {
-     nb = 0;
-     sprintf(CAI_ERREUR,"Ecriture au format BANDEAU non prévue dans CAI \n");      
-    }
-   else 
-    { 
- 
-   /* format non connu de la Couche Acces Image */
-     nb = 0;
-     sprintf(CAI_ERREUR,"format %s non reconnu \n",type_image);
-
-   }
-      /*...............................................................
-      Separation du repertoire de stockage de l'image et du nom propre
-     .................................................................*/
-    if (nb == 1)
-    {
-      repert[0]='\0';
-      image[0]='\0';
-      car = '/';
-#ifdef _WIN
-      car='\\';
-#endif
-      pch=(char *)strrchr(nom_image,car);
-      if (pch == NULL) 
-      {
-         /* le repertoire est celui courant */
-           strcpy(repert,"./");
-#ifdef _WIN
-           strcpy(repert,".\\");
-#endif
-             sscanf(nom_image,"%s",image);
-      }
-      else
-      {
-  
-           nb1=( long int)(pch)-(long int)(nom_image);
-           strncpy(repert,nom_image,nb1);
-	   repert[nb1]='\0';
-           deb=nom_image+nb1+1;
-           nb2=strlen(nom_image)-(nb1+1);
-	   strncpy(image,deb,nb2);
-           image[nb2]='\0';
-           car='.';
-           pch=(char *)strrchr(image,car);
-           if (pch != NULL)
-               *pch='\0';      
-     }
-        
-   }
-/*..............................................
-  Verification existence repertoire demande
-  ...............................................*/
-  if ( nb == 1 )
-  {
-    dirp=opendir(repert);
-    if (dirp ==0)
-    {
-    /* repertoire demande inexistant */
-     nb=0;
-     sprintf(CAI_ERREUR,"repertoire %s inexistant \n",repert);
-     }
-     else
-     {
-        closedir(dirp);
-     }
-
-
-    }
-   /*...........................................
-   Appel de la fonction pointee par comp avec la liste des parametres
-   suivants : 
-            repertoire de stockage de l'image
-     	     nom de l'image 
-             nombre de canaux
-	     nombre d'octets par pixels
-	     nombre de colonnes
-             nombre de lignes
-	     label lie a l'image
-  ......................................................................*/
-    if ( nb == 1 )
-    {
-     if ((long int)strlen(label)==0) 
-	strcpy(label,image);
-    if (IND_GRILLES == '\0')
-    {
-      if (IND_SPOT == '\0')
-        image1 = (*comp)(repert,image,&nb_can,&nboct_pix,&nb_col,&nb_lig,label);
-      else
-        image1 = (*comp)(IND_SPOT,repert,image,&nb_can,&nboct_pix,
-			        &nb_col,&nb_lig,label);
-     }
-     else
-      image1 = (*comp)(IND_GRILLES,repert,image,&nb_can,&nboct_pix,
-			&nb_col,&nb_lig,label);
-     IND_GRILLES = '\0';
-     IND_SPOT = '\0';
-     if (image1 != NULL)
-     {
-       strcpy(image1->COMMENT,label);
-       strcpy(image1->TYPE_IMAGE,type_image);
-       strcpy(image1->NOM_IMAGE,nom_image);
-       image1->NB_CANAUX=nb_can;
-       image1->NB_COL=nb_col;
-       image1->NB_LIG=nb_lig;
-       image1->NBOCT_PIX=nboct_pix;
-       image1->MODE=CAI_ECRITURE;
- 
-       return (image1);
-        
-     }
-     else
-        return(NULL);
-     }
-    else
-       return (NULL);
-
-}
-/*
-  Fin de l'operation cai_ouvre_creation_image.c
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal                                          */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image dans un format donne */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  int cai_lecture_canal(image1, canal, premiere_ligne,  */       		      /* ------------------                        premiere_colonne,               */
-/*                                           nombre_lignes_lire ,            */
-/*                                           nombre_colonnes_lire,           */
-/*                                           pas_ligne ,pas_colonne,         */
-/*                 		             data_image )                    */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     premiere_ligne       (E) ( int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) ( int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) ( int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) ( int) : nombre de colonnes a lire            */
-/*     canal                (E) ( int) : numero du canal a lire               */
-/*     pas_ligne            (E) ( int) : pas en ligne                         */
-/*     pas_colonne          (E) ( int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal    (S) (CAI_OK_KO) : = CAI_OK si correct            */
-/*                                            = CAI_KO si PB                 */ 
-/*                                                                           */
-/* VERSION : V3                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_lecture_canal(CAI_IMAGE *image1 ,  
-                            int canal ,           
-    		            int premiere_ligne  ,   
-     		            int premiere_colonne,
-                            int nombre_lignes_lire ,
-                            int nombre_colonnes_lire,
-                            int pas_ligne ,          
-                            int pas_colonne,
-		            unsigned char *data_image )        
-
-{
- long int (*comp) ( );   /* pointeur sur fonction                      */
- char type_image[20];    /* format de stockage de l'image a lire       */
- long int retour;        /* indicateur d'erreur de l'operation         */
-
-/*......................
-  Initialisations
-  .......................*/
-  retour=CAI_OK;
-  strcpy( type_image,image1->TYPE_IMAGE);
-  CAI_ERREUR[0]='\0';
-  IND_GRILLES = '\0';
-  IND_SPOT = '\0';
-/*.............................................................
-  Verification de la coherence des donnees en entree
-  .............................................................*/
-  if ((premiere_ligne<=0)||(premiere_ligne> image1->NB_LIG))
-  {
-      sprintf(CAI_ERREUR,"Premiere ligne a lire incorrecte");
-      retour=CAI_KO;
-
-  }
-
-  else if ((premiere_colonne<=0)||(premiere_colonne> image1->NB_COL))
-  {
-      sprintf(CAI_ERREUR,"Premiere colonne a lire incorrecte");
-      retour=CAI_KO;
-  }
-
-
-  else if ((canal<=0)||(canal> image1->NB_CANAUX))
-  {
-      sprintf(CAI_ERREUR,"Numero du canal a lire incorrect"); 
-      retour=CAI_KO;
-  }
-
-  else if ((nombre_lignes_lire<=0)||
-	 ((nombre_lignes_lire + premiere_ligne -1) > image1->NB_LIG))
-  {
-      sprintf(CAI_ERREUR,"Nombre de lignes a lire incorrect");
-      retour=CAI_KO;
-  }
-
-  else if ((nombre_colonnes_lire<=0)||
-	((nombre_colonnes_lire + premiere_colonne -1) > image1->NB_COL))
-  {
-      sprintf(CAI_ERREUR,"Nombre de colonnes a lire incorrect");
-      retour=CAI_KO;
-  }
- if (retour == CAI_OK)
- {
-
-/*..............................................
-  Initialisation d'un pointeur sur fonction dependant du format des images
-  ................................................ */
-   if (strcasecmp(type_image,"INRIA") == 0)
-   {
-      comp = (cai_lecture_canal_inria) ;
-    }
-
-   else if (strcasecmp(type_image,"ONERA") == 0)
-   {
-      comp = (cai_lecture_canal_onera) ;
-    }
-
-   else if (strcasecmp(type_image,"BSQ") == 0)
-   {
-      comp = (cai_lecture_canal_bsq) ;
-    }
-
-   else if (strcasecmp(type_image,"BIP") == 0)
-   {
-      comp = (cai_lecture_canal_bip) ;
-    }
-
-#ifdef _HDF16
-   else if (strncasecmp(type_image,"HDF",3) == 0)
-   {
-      comp = (cai_lecture_canal_hdf16) ;
-    }
-#endif
-
-   else if (strcasecmp(type_image,"BIL") == 0)
-   {
-      comp = (cai_lecture_canal_bil) ;
-    }
-
-   else if (strcasecmp(type_image,"LUM") == 0)
-   {
-      comp = (cai_lecture_canal_lum) ;
-    }
-
-   else if (strcasecmp(type_image,"GESSIMU") == 0)
-   {
-      comp = (cai_lecture_canal_gessimu) ;
-    }
-
-   else if (strcasecmp(type_image,"GDB") == 0)
-   {
-       comp = (cai_lecture_canal_grilles) ;
-    }
-
-   else if (strcasecmp(type_image,"GDR") == 0)
-   {
-       comp = (cai_lecture_canal_grilles) ;
-    }
-
-   else if (strcasecmp(type_image,"TIFF") == 0)
-   {
-      comp = (cai_lecture_canal_tiff) ;
-    }
-
-   else if (strcasecmp(type_image,"RASTERFILE") == 0)
-   {
-      comp = (cai_lecture_canal_sun_raster) ;
-    }
-   else if (strcasecmp(type_image,"JPEG") == 0)
-   {
-      comp = (cai_lecture_canal_jpeg) ;
-    }
-   else if (strcasecmp(type_image,"SPOT1A4") == 0)
-   {
-      comp = (cai_lecture_canal_spot) ;
-    }
-   else if (strcasecmp(type_image,"SPOT5TIF") == 0)
-   {
-      comp = (cai_lecture_canal_spot) ;
-    }
-   else if (strcasecmp(type_image,"SPOT5BIL") == 0)
-   {
-      comp = (cai_lecture_canal_spot) ;
-    }
-   else if (strcasecmp(type_image,"RADAR") == 0)
-   {
-      comp = (cai_lecture_canal_radar) ;
-    }
-   else if (strcasecmp(type_image,"BANDEAU") == 0)
-   {
-      comp = (cai_lecture_canal_bandeau) ;
-    }
-   else 
-    { 
- 
-   /* format non connu de la Couche Acces Image */
-     retour = CAI_KO;
-     sprintf(CAI_ERREUR,"format %s non reconnu \n",type_image);
-
-
-   }
- }
-   
-   /*...........................................
-   Appel de la fonction pointee par comp avec la liste des parametres
-   suivants : 
-
-	 pointeur sur descripteur des fichiers
- 	 numero du canal a lire
- 	 premiere ligne a lire dans l'image
-	 premiere colonne a lire dans l'image
-	 nombre de lignes a lire
-	 nombre de colonnes a lire
-	 pas en ligne
-	 pas en colonne
-         tableau des pixels lus
-  ......................................................................*/
-   if ( retour == CAI_OK)
-   {
-           retour=(*comp)(image1 ,  
-                    &canal ,           
-    		    &premiere_ligne  ,   
-     		    &premiere_colonne   ,
-                    &nombre_lignes_lire ,
-                    &nombre_colonnes_lire,
-                    &pas_ligne ,          
-                    &pas_colonne, 
-                    data_image) ; 
- 	return(retour);
-    }
-    else
-    {
-     return (CAI_KO);
-    }
-
-}
-/*
-  Fin de l'operation cai_lecture_canal.c
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal                                         */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un canal d'une image dans un format donne */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  int cai_ecriture_canal(image1, canal, premiere_ligne, */       		      /* ------------------                         nombre_lignes_ecrire,          */
-/*                                            nombre_colonnes_ecrire,        */
-/*                 		              data_image )                   */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal                 (E) ( int) : numero du canal a ecrire            */
-/*     premiere_ligne        (E) ( int) : premiere ligne a ecrire ds l'image  */
-/*     nombre_lignes_ecrire  (E) ( int) : nombre de lignes a ecrire           */
-/*     nombre_colonnes_ecrire(E) ( int) : nombre de lignes a ecrire           */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels a ecrire alloue   */
-/*                                      et libere par l'appelant             */
-/*									     */
-/*     cai_ecriture_canal    (S) (CAI_OK_KO) : = CAI_KO si pb                */
-/*                                             = CAI_OK si OK                */ 
-/*                                                                           */
-/* VERSION : V3                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_ecriture_canal (CAI_IMAGE *image1 ,
-		 	      int canal ,
-			      int premiere_ligne,
-		              int nombre_lignes_ecrire ,
-			      int nombre_colonnes_ecrire,
-			      unsigned char *data_image )
-		               
-
-{
- long int (*comp) ( );   /* pointeur sur fonction                      */
- char type_image[20];    /* format de stockage de l'image a ecrire     */
- long  int retour;       /* indicateur d'erreur de l'operation         */
-
-
-/*......................
-  Initialisations
-  .......................*/
-
-  retour=CAI_OK;
-  type_image[0]='\0';
-  strcpy( type_image,image1->TYPE_IMAGE);
-  CAI_ERREUR[0]='\0';
-
- /*................................................................
-  Verification de la coherence des donnees en entree
-  .............................................................*/
-/* sur la premiere ligne a ecrire */
-
-  if ((premiere_ligne<=0)||(premiere_ligne> image1->NB_LIG))
-  {
-      sprintf(CAI_ERREUR,"Premiere ligne a ecrire incorrecte");
-      retour=CAI_KO;
-  }
-
-/* sur le numero du canal a ecrire */
-
-  if ((canal<=0)||(canal> image1->NB_CANAUX))
-  {
-      sprintf(CAI_ERREUR,"Numero du canal a ecrire incorrect"); 
-      retour=CAI_KO;
-
-  }
-
-/* sur le nombre de lignes a ecrire */
-  if ((nombre_lignes_ecrire<=0)||
-	((nombre_lignes_ecrire + premiere_ligne-1) > image1->NB_LIG))
-  {
-      sprintf(CAI_ERREUR,"Nombre de lignes a ecrire incorrect");
-      retour=CAI_KO;
-  }
-
-/* sur le nombre de colonnes a ecrire */
-
-
-  if ((nombre_colonnes_ecrire<=0)||
-		(nombre_colonnes_ecrire  > image1->NB_COL))
-  {
-      sprintf(CAI_ERREUR,"Nombre de colonnes a ecrire incorrect");
-      retour=CAI_KO;
-  }
-
- if (retour == CAI_OK)
- {
-/*..............................................
-  Initialisation d'un pointeur sur fonction dependant du format des images
-  ................................................ */
-
-   if (strcasecmp(type_image,"INRIA") == 0)
-   {
-      comp = (cai_ecriture_canal_inria) ;
-    }
-
-   else if (strcasecmp(type_image,"ONERA") == 0)
-   {
-      comp = (cai_ecriture_canal_onera) ;
-    }
-
-   else if (strcasecmp(type_image,"BSQ") == 0)
-   {
-      comp = (cai_ecriture_canal_bsq) ;
-    }
-
-   else if (strcasecmp(type_image,"BIP") == 0)
-   {
-      comp = (cai_ecriture_canal_bip) ;
-    }
-
-#ifdef _HDF16
-
-   else if (strncasecmp(type_image,"HDF",3) == 0)
-   {
-      comp = (cai_ecriture_canal_hdf16) ;
-    }
-#endif
-
-   else if (strcasecmp(type_image,"BIL") == 0)
-   {
-      comp = (cai_ecriture_canal_bil) ;
-    }
-
-   else if (strcasecmp(type_image,"LUM") == 0)
-   {
-      comp = (cai_ecriture_canal_lum) ;
-    }
-
-   else if (strcasecmp(type_image,"GESSIMU") == 0)
-   {
-      comp = (cai_ecriture_canal_gessimu) ;
-    }
-
-   else if (strcasecmp(type_image,"GDB") == 0)
-   {
-       comp = (cai_ecriture_canal_grilles) ;
-    }
-
-   else if (strcasecmp(type_image,"GDR") == 0)
-   {
-       comp = (cai_ecriture_canal_grilles) ;
-    }
-
-   else if (strcasecmp(type_image,"TIFF") == 0)
-   {
-      comp = (cai_ecriture_canal_tiff) ;
-    }
-
-   else if (strcasecmp(type_image,"RASTERFILE") == 0)
-   {
-      comp = (cai_ecriture_canal_sun_raster) ;
-    }
-   else if (strcasecmp(type_image,"JPEG") == 0)
-   {
-      comp = (cai_ecriture_canal_jpeg) ;
-    }
-
-   else if (strcasecmp(type_image,"SPOT1A4") == 0)
-   {
-      comp = (cai_ecriture_canal_spot) ;
-    }
-   else if (strcasecmp(type_image,"SPOT5TIF") == 0)
-   {
-      comp = (cai_ecriture_canal_spot) ;
-    }
-   else if (strcasecmp(type_image,"SPOT5BIL") == 0)
-   {
-      comp = (cai_ecriture_canal_spot) ;
-    }
-   else if (strcasecmp(type_image,"RADAR") == 0)
-   {
-      comp = (cai_ecriture_canal_radar) ;
-    }
-   else if (strcasecmp(type_image,"BANDEAU") == 0)
-   {
-     retour = CAI_KO;
-     sprintf(CAI_ERREUR,"Ecriture au format BANDEAU non prévue dans CAI \n");      
-    }
-   else 
-    { 
- 
-   /* format non connu de la Couche Acces Image */
-     retour = CAI_KO;
-     sprintf(CAI_ERREUR,"format %s non reconnu \n",type_image);
-
-
-   }
-  }
-   /*...........................................
-   Appel de la fonction pointee par comp avec la liste des parametres
-   suivants : 
-
-	 pointeur sur descripteur des fichiers
- 	 numero du canal a ecrire
- 	 premiere ligne a ecrire dans l'image
-	 nombre de lignes a ecrire
-	 nombre de colonnes a ecrire
-         tableau des pixels a ecrire
-  ......................................................................*/
-   if ( retour == CAI_OK)
-   {
-          retour=(*comp)(image1 ,  
-                    &canal ,           
-    		    &premiere_ligne  ,   
-                    &nombre_lignes_ecrire ,
-                    &nombre_colonnes_ecrire,
-                    data_image) ;  
-     }
- 
-     return (retour);
-
-}
-/* 
-  Fin de l'operation cai_ecriture_canal.c
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_image                                            */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image dans un format donne et de    */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  int cai_ferme_image(image1)                           */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_image    (S) (CAI_OK_KO) :    = CAI_KO si pb                */
-/*                                             = CAI_OK si OK                */ 
-/*                                                                           */
-/* VERSION : V3                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_ferme_image (CAI_IMAGE *image1)
-
-{
- long int iret;           /* indicateur retour fonction   */
- long int (*comp)();      /* pointeur sur fonction        */
-
-/*......................
-  Initialisations
-  .......................*/
-
-  iret=CAI_OK;
-  CAI_ERREUR[0]='\0';
-  IND_GRILLES = '\0';
-  IND_SPOT = '\0';
-/*..............................................
-  Initialisation d'un pointeur sur fonction dependant du format des images
-  ................................................ */
-
-   if (strcasecmp(image1->TYPE_IMAGE,"INRIA") == 0)
-   {
-      comp = (cai_ferme_inria) ;
-    }
-
-   else if (strcasecmp(image1->TYPE_IMAGE,"ONERA") == 0)
-   {
-      comp = (cai_ferme_onera) ;
-    }
-   else if (strcasecmp(image1->TYPE_IMAGE,"BSQ") == 0)
-   {
-      comp = (cai_ferme_bsq) ;
-    }
-
-   else if (strcasecmp(image1->TYPE_IMAGE,"BIP") == 0)
-   {
-      comp = (cai_ferme_bip) ;
-    }
-
-#ifdef _HDF16
-
-   else if (strncasecmp(image1->TYPE_IMAGE,"HDF",3) == 0)
-   {
-      comp = (cai_ferme_hdf16) ;
-    }
-#endif
-
-   else if (strcasecmp(image1->TYPE_IMAGE,"BIL") == 0)
-   {
-
-      comp = (cai_ferme_bil) ;
-    }
-
-   else if (strcasecmp(image1->TYPE_IMAGE,"LUM") == 0)
-   {
-
-      comp = (cai_ferme_lum) ;
-    }
-
-   else if (strcasecmp(image1->TYPE_IMAGE,"GESSIMU") == 0)
-   {
-      comp = (cai_ferme_gessimu) ;
-    }
-
-   else if (strcasecmp(image1->TYPE_IMAGE,"GDB") == 0)
-   {
-      IND_GRILLES = 'B';
-      comp = (cai_ferme_grilles) ;
-    }
-
-   else if (strcasecmp(image1->TYPE_IMAGE,"GDR") == 0)
-   {
-      IND_GRILLES = 'R';
-      comp = (cai_ferme_grilles) ;
-    }
-
-
-   else if (strcasecmp(image1->TYPE_IMAGE,"TIFF") == 0)
-   {
-      comp = (cai_ferme_tiff) ;
-    }
-
-   else if (strcasecmp(image1->TYPE_IMAGE,"RASTERFILE") == 0)
-   {
-      comp = (cai_ferme_sun_raster) ;
-    }
-   else if (strcasecmp(image1->TYPE_IMAGE,"JPEG") == 0)
-   {
-      comp = (cai_ferme_jpeg) ;
-    }
-
-   else if (strcasecmp(image1->TYPE_IMAGE,"SPOT1A4") == 0)
-   {
-      IND_SPOT = '1';
-      comp = (cai_ferme_spot) ;
-    }
-   else if (strcasecmp(image1->TYPE_IMAGE,"SPOT5TIF") == 0)
-   {
-      IND_SPOT = 'T';
-      comp = (cai_ferme_spot) ;
-    }
-   else if (strcasecmp(image1->TYPE_IMAGE,"SPOT5BIL") == 0)
-   {
-      IND_SPOT = 'B';
-      comp = (cai_ferme_spot) ;
-    }
-
-   else if (strcasecmp(image1->TYPE_IMAGE,"RADAR") == 0)
-   {
-
-      comp = (cai_ferme_radar) ;
-    }
-
-   else if (strcasecmp(image1->TYPE_IMAGE,"BANDEAU") == 0)
-   {
-
-      comp = (cai_ferme_bandeau) ;
-    }
-
-   else 
-    { 
- 
-   /* format non connu de la Couche Acces Image */
-     iret = CAI_KO;
-     sprintf(CAI_ERREUR,"format %s non reconnu \n",image1->TYPE_IMAGE);
-
-
-   }
-
-
-   /*...........................................
-   Appel de la fonction pointee par comp avec la liste des parametres
-   suivants : 
-	     pointeur sur descripteur des fichiers de l'image
-  ......................................................................*/
-
-   if (( iret == CAI_OK ) && (image1 != NULL))
-   {
-/***   Traitement de la Colormap  ***/
-       if ((image1->COLORMAP !=0)&& ( image1->MODE == CAI_ECRITURE))
-       {
-        iret = cai_ecriture_colormap(image1);
-       }
-
-       if (image1->COLORMAP !=0)
-       {
-           free(image1->TABCOLOR);
-        }
-        if (IND_GRILLES == '\0')
-        {
-	   if (IND_SPOT == '\0')
-                iret = (*comp)(image1);
-	   else
-                iret = (*comp)(IND_SPOT,image1); 
-        }
-	else
-          iret = (*comp)(IND_GRILLES,image1);     
-    }
-    free(image1);
-
-    image1 = (CAI_IMAGE *)NULL;
-
-    return (iret);
-}
-/*
-  Fin de l'operation cai_ferme_image.c
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_destruction_image                                      */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image dans un format donne et de  */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : int cai_destruction_image(format,nom_ima)              */ 
-/* ------------------                                                        */
-/*     format       (E) (char *) : format de l'image a detruire              */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_destruction_image   (S) (CAI_OK_KO) :    = CAI_KO si pb           */
-/*                                                  = CAI_OK si OK           */ 
-/*                                                                           */
-/* VERSION : V3                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_destruction_image (char *format ,
-                                 char *nom_ima )
-
-
-{
-
-long int (*ptr_dest_ima)();	/* ptr sur fctn de destruction d'une image */
-long int cr_cai;		/* code retour de fonction appellee        */
-long int i,ind;                 /* variables de travail                    */
-char repert[1024];              /* repertoire de stockage de l'image       */
-char image[1024];               /* nom de l'image a detruire sans repert   */
-char form[20];                  /* format de l'image a detruire            */
-char *pch,*deb;                 /* variables de travail                    */
-long int nb1,nb2;               /* variables de travail                    */
-char car;                       /* variables de travail                    */
-/*................. 
- Initialisations 
-  ................*/
-
-cr_cai = CAI_OK;
-strcpy(form,format);
-CAI_ERREUR[0]='\0';
-IND_GRILLES = '\0';
-IND_SPOT = '\0';
-/*...................................................
-   Recherche du type de fichier si reconnaissance automatique demande
-  ...................................................*/
-
-  if (strcasecmp(form,"AUTO")== 0)
-  {
-     for( i = 0 ; i< CAI_NB_EXTENSIONS ; i++)
-      {
-       if(strstr(nom_ima,CAI_SUFFIXES[i]) != NULL )
-       {
-          ind=CAI_NUMEROS[i];
-          strcpy(form,CAI_NOM_FORMAT[ind]);
-       }
-    }
-  }
-
-/*..............................................
-  Initialisation d'un pointeur sur fonction dependant du format des images
-  ................................................ */
-
-   if (strcasecmp(form,"INRIA") == 0)
-   {
-      ptr_dest_ima = (cai_dest_ima_inria) ;
-    }
-
-   else if (strcasecmp(form,"ONERA") == 0)
-   {
-      ptr_dest_ima = (cai_dest_ima_onera) ;
-    }
-
-   else if (strcasecmp(form,"BSQ") == 0)
-   {
-      ptr_dest_ima = (cai_dest_ima_bsq) ;
-    }
-
-   else if (strcasecmp(form,"BIP") == 0)
-   {
-      ptr_dest_ima = (cai_dest_ima_bip) ;
-    }
-
-#ifdef _HDF16
-
-   else if (strncasecmp(form,"HDF",3) == 0)
-   {
-      ptr_dest_ima = (cai_dest_ima_hdf16) ;
-    }
-#endif
-
-   else if (strcasecmp(form,"BIL") == 0)
-   {
-      ptr_dest_ima = (cai_dest_ima_bil) ;
-    }
-
-   else if (strcasecmp(form,"LUM") == 0)
-   {
-      ptr_dest_ima = (cai_dest_ima_lum) ;
-    }
-
-   else if (strcasecmp(form,"GESSIMU") == 0)
-   {
-      ptr_dest_ima = (cai_dest_ima_gessimu) ;
-    }
-
-   else if (strcasecmp(form,"GDB") == 0)
-   {
-      IND_GRILLES = 'B';
-      ptr_dest_ima = (cai_dest_ima_grilles) ;
-    }
-
-   else if (strcasecmp(form,"GDR") == 0)
-   {
-      IND_GRILLES = 'R';
-      ptr_dest_ima = (cai_dest_ima_grilles) ;
-    }
-
-   else if (strcasecmp(form,"TIFF") == 0)
-   {
-      ptr_dest_ima  = (cai_dest_ima_tiff) ;
-    }
-
-   else if (strcasecmp(form,"RASTERFILE") == 0)
-   {
-      ptr_dest_ima = (cai_dest_ima_sun_raster) ;
-    }
-   else if (strcasecmp(form,"JPEG") == 0)
-   {
-      ptr_dest_ima = (cai_dest_ima_jpeg) ;
-    }
-   else if (strcasecmp(form,"SPOT1A4") == 0)
-   {
-      IND_SPOT = '1';
-      ptr_dest_ima = (cai_dest_ima_spot) ;
-    }
-   else if (strcasecmp(form,"SPOT5TIF") == 0)
-   {
-      IND_SPOT = 'T';
-      ptr_dest_ima = (cai_dest_ima_spot) ;
-    }
-   else if (strcasecmp(form,"SPOT5BIL") == 0)
-   {
-      IND_SPOT = 'B';
-      ptr_dest_ima = (cai_dest_ima_spot) ;
-    }
-   else if (strcasecmp(form,"RADAR") == 0)
-   {
-      ptr_dest_ima = (cai_dest_ima_radar) ;
-    }
-   else if (strcasecmp(form,"BANDEAU") == 0)
-   {
-      ptr_dest_ima = (cai_dest_ima_bandeau) ;
-    }
-   else 
-    { 
- 
-   /* format non connu de la Couche Acces Image */
-    cr_cai = CAI_KO;
-    sprintf(CAI_ERREUR,"format %s non reconnu \n",form);
-
-   }
-      /*...............................................................
-      Separation du repertoire de stockage de l'image et du nom propre
-     .................................................................*/
-    if (cr_cai ==CAI_OK)
-    {
-      repert[0]='\0';
-      image[0]='\0';
-      car='/';
-#ifdef _WIN
-      car='\\';
-#endif
-      pch=(char *)strrchr(nom_ima,car);
-      if (pch == NULL) 
-      {
-         /* le repertoire est celui courant */
-           strcpy(repert,"./");
-#ifdef _WIN
-           strcpy(repert,".\\");
-#endif
-           sscanf(nom_ima,"%s",image);
-           car='.';
-           pch=(char *)strrchr(image,car);
-           if (pch != NULL)
-               *pch='\0';          
-
-      }
-      else
-      {
-  
-           nb1=(long int)(pch)-(long int)(nom_ima);
-           strncpy(repert,nom_ima,nb1);
-	   repert[nb1]='\0';
-           deb=nom_ima+nb1+1;
-           nb2=strlen(nom_ima)-(nb1+1);
-	   strncpy(image,deb,nb2);
-           image[nb2]='\0';
-           car='.';
-           pch=(char *)strrchr(image,car);
-           if (pch != NULL)
-               *pch='\0';          
-
-     }
-        
-   }
-
-
-/****************************************************/
-/* appel de la fonction pointee par ptr_dest_ima    */
-/* avec les parametres suivants :      		    */
-/* - repertoire de stockage de l'image		    */
-/* - nom de l'image			            */
-/****************************************************/
-
-   if (cr_cai==CAI_OK)
-   {
-     if (IND_GRILLES == '\0')
-     {
-        if (IND_SPOT == '\0')
-             cr_cai = (*ptr_dest_ima)(repert, image);
-         else
-	     cr_cai = (*ptr_dest_ima)(IND_SPOT,repert, image);
-      }
-      else
-         cr_cai = (*ptr_dest_ima)(IND_GRILLES,repert, image);
-
-    }
-   return (cr_cai);
-}
-/*
-  Fin de l'operation cai_destruction_image.c
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_modif_nbbitspix                                        */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction permetant de modifier le nombre de bits significatifs  */
-/* -----     par pixel (uniquement pour les formats BSQ ,BIP,BIL et HDF)     */
-/*                                                                           */
-/* Remarque !! L'image doit deja etre ouverte                                */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  int cai_modif_nbbitspix(format,image1,NbBitsPix)      */       		      /* ------------------                                                        */
-/*     format      (E) (char *)       : format de l'image a modifier         */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     NbBitsPix   (E) (long int)          : nb de bits significatifs par pixel   */
-/*									     */
-/*     cai_modif_nbbitspix   (S) (CAI_OK_KO) :    = CAI_KO si pb             */
-/*                                                = CAI_OK si OK             */
-/*			= CAI_IMPOS si format autre que BSQ ou HDF16           */ 
-/*                                                                           */
-/* VERSION : V3                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_modif_nbbitspix ( char *format ,
-                                  CAI_IMAGE *image1,int NbBitsPix)
-
-{
-
-long int cr_cai;		/* code retour de fonction appellee        */
-char form[20];                  /* format de l'image a modifier            */
-CAI_EXTENS *TabExtens;
-/*................. 
- Initialisations 
-  ................*/
-
-TabExtens = NULL;
-cr_cai = CAI_OK;
-strcpy(form,format);
-CAI_ERREUR[0]='\0';
-
-/*..............................................
-  Lancement de la fonction dependant du format des images
-  ................................................ */
-
-   if (strcasecmp(form,"BSQ") == 0)
-   {
-      cr_cai = cai_modif_nbbitspix_bsq(image1,NbBitsPix) ;
-    }
-
-
-#ifdef _HDF16
-
-   else if (strncasecmp(form,"HDF",3) == 0)
-   {
-      image1->NB_BITS_PIX = NbBitsPix;
-      cr_cai = cai_rename_fichiers_hdf16(image1,TabExtens) ;
-    }
-#endif
-    else if (strcasecmp(form,"BIP") == 0)
-    {
-      cr_cai = cai_modif_nbbitspix_bip(image1,NbBitsPix) ;
-     }
-    else if (strcasecmp(form,"BIL") == 0)
-    {
-      cr_cai = cai_modif_nbbitspix_bil(image1,NbBitsPix) ;
-     }
-
-    else 
-    { 
-
-   /* Fonction non prevue pour un autre format */
-       cr_cai = CAI_IMPOS;
-       sprintf(CAI_ERREUR,"format %s : modification non prevue \n",form);
-
-      }
-
-   return (cr_cai);
-}
-/* Fin de l'operation cai_modif_nbbitspix
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_modifie_image                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture-ecriture d'une image d'un format*/
-/* -----      donne et de tous les fichiers qui la composent                 */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_modifie_image (nom_image,        */
-/*  ---------------- 		                           type_image,       */
-/*                 		                           nb_can,           */
-/*				                           nboct_pix,	     */	
-/*				                           nb_col,           */
-/*				                           nb_lig)           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     type_image     (E) (char *) : format de l'image a ouvrir              */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_modifie_image (S) (CAI_IMAGE *)    : =NULL si pb            */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V3                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_modifie_image (char *nom_image,
-                  		    char *type_image,
-                 		    int  *nb_can,
-				    int  *nboct_pix,		
-				    int  *nb_col,
-				    int  *nb_lig)            
-{
-  
-  int nb;             /* indicateur d'erreurs rencontres              */
- CAI_IMAGE *image1;       /* descripteur de fichier retour fonction       */
- CAI_IMAGE *(*comp) ( );  /* pointeur sur fonction                        */
- char repert[1024];       /* repertoire de stockage de l'image            */
- char image[1024];        /* nom de l'image a ouvrir en lecture           */
- char format[20];         /* format de stockage de l'image a lire         */
- long int i,ind;          /* variables de travail                         */
- char *pch,*deb;          /* pointeurs de travail                         */
- long int nb1,nb2;        /* indice de longueur significative             */
- char car;		  /* variable de travail                          */
- DIR *dirp;		  /* pointeur sur structure ouverture repertoire  */
- CAI_OK_KO icr;           /* Compte-rendu des fonctions DA                */
-
-
-/*......................
-  Initialisations
-  .......................*/
-  nb=1;
-  strcpy(format,type_image);
- 
-  CAI_ERREUR[0]='\0';
-  IND_GRILLES = '\0';
-  IND_SPOT = '\0';
-
-/*...................................................
-   Recherche du type de fichier si reconnaissance automatique demande
-  ...................................................*/
-  if (strcasecmp(format,"AUTO")== 0)
-  {
-     for( i = 0 ; i< CAI_NB_EXTENSIONS ; i++)
-      {
-       if(strstr(nom_image,CAI_SUFFIXES[i]) != NULL )
-       {
-          ind=CAI_NUMEROS[i];
-          strcpy(format,CAI_NOM_FORMAT[ind]);
-       }
-    }
-  }
- 
-/*..............................................
-  Initialisation d'un pointeur sur fonction dependant du format des images
-  ................................................ */
-
-   if (strcasecmp(format,"INRIA") == 0)
-   {
-      comp = (cai_ouvre_modifie_inria) ;
-    }
-
-   else if (strcasecmp(format,"ONERA") == 0)
-   {
-      comp = (cai_ouvre_modifie_onera) ;
-    }
-
-   else if (strcasecmp(format,"BSQ") == 0)
-   {
-      comp = (cai_ouvre_modifie_bsq) ;
-    }
-
-   else if (strcasecmp(format,"BIP") == 0)
-   {
-      comp = (cai_ouvre_modifie_bip) ;
-    }
-#ifdef _HDF16
-   else if (strncasecmp(format,"HDF",3) == 0)
-   {
-      comp = (cai_ouvre_modifie_hdf16) ;
-    }
-#endif
-
-   else if (strcasecmp(format,"BIL") == 0)
-   {
-      comp = (cai_ouvre_modifie_bil) ;
-    }
-
-   else if (strcasecmp(format,"LUM") == 0)
-   {
-      comp = (cai_ouvre_modifie_lum) ;
-    }
-
-   else if (strcasecmp(format,"GESSIMU") == 0)
-   {
-      comp = (cai_ouvre_modifie_gessimu) ;
-    }
-
-   else if (strcasecmp(format,"GDB") == 0)
-   {
-      IND_GRILLES = 'B';
-      comp = (cai_ouvre_modifie_grilles) ;
-    }
-
-   else if (strcasecmp(format,"GDR") == 0)
-   {
-      IND_GRILLES = 'R';
-      comp = (cai_ouvre_modifie_grilles) ;
-    }
-
-   else if (strcasecmp(format,"TIFF") == 0)
-   {
-/*     comp = (cai_ouvre_modifie_tiff) ; */
-      nb = 0;
-      sprintf(CAI_ERREUR,
-		"fonction de modification non disponible pour TIFF");
-    }
-
-   else if (strcasecmp(format,"RASTERFILE") == 0)
-   {
-      comp = (cai_ouvre_modifie_sun_raster) ;
-    }
-   else if (strcasecmp(format,"JPEG") == 0)
-   {
-      nb = 0;
-      sprintf(CAI_ERREUR,"fonction de modification non disponible pour JPEG");
-    }
-   else if (strcasecmp(type_image,"SPOT1A4") == 0)
-   {
-      IND_SPOT = '1';
-      comp = (cai_ouvre_modifie_spot) ;
-    }
-   else if (strcasecmp(type_image,"SPOT5TIF") == 0)
-   {
-      IND_SPOT = 'T';
-/*      comp = (cai_ouvre_modifie_spot) ;*/
-      nb = 0;
-      sprintf(CAI_ERREUR,
-		"fonction de modification non disponible pour SPOT5TIF");
-
-    }
-   else if (strcasecmp(type_image,"SPOT5BIL") == 0)
-   {
-      IND_SPOT = 'B';
-      comp = (cai_ouvre_modifie_spot) ;
-    }
-   else   if (strcasecmp(format,"RADAR") == 0)
-   {
-      comp = (cai_ouvre_modifie_radar) ;
-   }
-
-   else if (strcasecmp(type_image,"BANDEAU") == 0)
-   {
-     nb = 0;
-     sprintf(CAI_ERREUR,
-	"fonction de modification non disponible pour BANDEAU \n");      
-    }
-
-   else 
-    { 
- 
-   /* format non connu de la Couche Acces Image */
-     nb = 0;
-     sprintf(CAI_ERREUR,"format %s non reconnu \n",format);
-
-   }
-   /*...............................................................
-      Separation du repertoire de stockage de l'image et du nom propre
-     .................................................................*/
-    if (nb == 1)
-    {
-      repert[0]='\0';
-      image[0]='\0';
-      car='/';
-#ifdef _WIN
-      car='\\';
-#endif
-      pch=(char *)strrchr(nom_image,car);
-      if (pch == NULL) 
-      {
-         /* le repertoire est celui courant */
-           strcpy(repert,"./");
-#ifdef _WIN
-           strcpy(repert,".\\");
-#endif
-           sscanf(nom_image,"%s",image);
-           car='.';
-           pch=(char *)strrchr(image,car);
-           if (pch != NULL)
-               *pch='\0';        
-      }
-      else
-      {
-  
-           nb1=(long int)(pch)-(long int)(nom_image);
-           strncpy(repert,nom_image,nb1);
-           repert[nb1]='\0';
-           deb=nom_image+nb1+1;
-           nb2=strlen(nom_image)-(nb1+1);
-	   strncpy(image,deb,nb2);
-           image[nb2]='\0';
-           car='.';
-           pch=(char *)strrchr(image,car);
-           if (pch != NULL)
-               *pch='\0';          
-
-     }
-        
-   } 
-/*..............................................
-  Verification existence repertoire demande
-  ...............................................*/
-  if ( nb == 1 )
-  {
-    dirp=opendir(repert);
-    if (dirp ==(DIR *)NULL)
-    {
-    /* repertoire demande inexistant */
-     nb=0;
-     sprintf(CAI_ERREUR,"repertoire %s inexistant \n",repert);
-     }
-     else
-        closedir(dirp);
-
-    }
-  
-   /*...........................................
-   Appel de la fonction pointee par comp avec la liste des parametres
-   suivants : 
-             repertoire de stockage de l'image
-  	     nom de l'image 
-             nombre de canaux
-	     nombre d'octets par pixels
-	     nombre de colonnes
-             nombre de lignes
-  ......................................................................*/
-    if ( nb == 1 )
-   {
-    if (IND_GRILLES == '\0')
-    {
-	if (IND_SPOT == '\0')
-            image1 = (*comp)(repert,image,nb_can,nboct_pix,nb_col,nb_lig);
-	else
-	    image1 = (*comp)(IND_SPOT,repert,image,nb_can,nboct_pix,nb_col,
-			 	nb_lig);
-    }
-    else
-        image1 = (*comp)(IND_GRILLES,repert,image,nb_can,nboct_pix,nb_col,
-			 nb_lig);
-
-     if (image1 != NULL)
-     {
-       strcpy(image1->TYPE_IMAGE,format);
-       strcpy(image1->NOM_IMAGE,nom_image);
-       image1->NB_CANAUX=*nb_can;
-       image1->NB_COL=*nb_col;
-       image1->NB_LIG=*nb_lig;
-       image1->NBOCT_PIX=*nboct_pix;
-       image1->MODE=CAI_ECRITURE;
-
-/***   Traitement de la Colormap si format autre que TIFF et RASTERFILE ***/
-
-       if ((strcasecmp(format,"RASTERFILE") != 0)&&(strcasecmp(format,"TIFF") != 0))
-       {
-
-        	icr = cai_lecture_colormap(image1);
-
-        	if ( icr == CAI_KO) 
-         		 return (NULL);
-        	else
-          		return (image1);
-        }
-        else
-        {
-          return (image1);
-        }
-       }
-      else
-       return(NULL);
-    } 
-    else
-    {
-     return (NULL);
-    }
-}
-/* Fin de l'operation cai_ouvre_modifie_image
-*/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_test_pFpf                                              */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de test qui determine ordre des poids forts et faible  */
-/* -----     pour lire correctement entete et image                          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  char *cai_test_pFpf()                                 */
-/*  ---------------- 		                                             */
-/*				                 			     */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
- char *cai_test_pFpf ()
- {
-
-/*variable contenant 3 caracteres*/
-/*-------------------------------*/
-
-static char type_code[3];
-
-/*codage sur 2 octets*/ 
-/*de la valeur 1*/
-/*-------------------*/ 
-
-unsigned short a=1;
-
-/*test sur la valeur 
-/*de l'octet de gauche*/
-/*--------------------*/
-
-if (*(char *) &a == 0) 
-	{
-	strcpy(type_code, "BE"); /*affectation d'une chaine de caracteres*/
-	}
-if (*(char *) &a == 1) 
-	{
-	strcpy(type_code, "LE"); /*affectation d'une chaine de caracteres*/
-	}
-
-/*retourne le contenu de la variable*/
-/*comme il s'agit de tableau pas besoin du &*/
-/*------------------------------------------*/	
-return(type_code);
-
-} 
-/* 
-   Fin de l'operation cai_test_pFpf
-*/
-
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_inverser_tableau                                       */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'inversion des poids forts et faible                  */
-/* -----              							     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  cai_inverser_tableau(sortie, entree,nb)               */
-/*  ---------------- 		                                             */
-/*				                 			     */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-void cai_inverser_tableau(short *BufL,short *BufE,int Nb)
-{
-  int pix;
-  for (pix=0;pix<Nb;pix=pix+2)
-  {
-    BufL[pix]=BufE[pix+1];
-    BufL[pix+1]=BufE[pix];
-  }
-}
-/* 
-   Fin de l'operation cai_inverser_tableau
-*/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_En_majuscule                                           */
-/* ----------								     */
-/*                                                                           */
-/* ROLE : Cette fonction transforme la chaine de caracteres donnee en        */
-/* ROLE : parametre en majuscule et renvoie le resultat                      */
-/*                                                                           */
-/* CONTEXTE D'APPEL :                                                        */
-/*                                                                           */
-/* RETOUR : chaine en majuscule                                              */
-/*                                                                           */
-/*****************************************************************************/
-
-char* cai_En_majuscule( char *mot )
-
-{
-   char *retour;
-   int i = 0;
-   
-   /* allocation des pointeurs */
-   
-   retour = (char*) NULL;
-   retour = (char*) calloc ( strlen ( mot ) + 1 , sizeof (char) );
-   
-   if ( retour == NULL )
-   {
-     return (char*)NULL;
-   }
-   /* Parcourir la chaine */
-   
-   while ( mot[i] != '\0' )
-   {   
-   /* transformer en majuscule la lettre lue */
-      retour[i] = toupper ( mot[i] );
-      i++;
-   }
-  /* retourner le resultat */ 
-  return retour;   
-}
-/* 
-   Fin de l'operation cai_En_majuscule
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_inverser_tableau_complet                               */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'inversion des poids forts et faible                  */
-/* -----              							     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  cai_inverser_tableau_complet(tableau,nbpix,tailpix)   */
-/*  ---------------- 		                                             */
-/*				                 			     */
-/*  tableau	(E) (* uchar)   : tableau à inverser                         */
-/*  nbpix	(E) (int)      : nb de pixels du tableau                     */
-/*  tailpix     (E) (int)      : nb d'octets d'un pixel                      */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-void cai_inverser_tableau_complet(unsigned char *tableau,int nbpix,int tailpix)
-{
-  int pix,ind,oct;
-  unsigned char *temp; 
-
-  
-  temp = (unsigned char *) calloc(tailpix,sizeof(unsigned char));
-
-  for (pix=0;pix<nbpix;pix=pix+1)
-  {
-     ind = pix*tailpix;
-     for (oct=0;oct<tailpix;oct++)
-     {
-       temp[oct] = tableau[ind + tailpix - oct -1 ];
-     }
-     for (oct=0;oct<tailpix;oct++)
-     {
-       tableau[ind + oct ] = temp[oct];
-     }
-  }
-}
-/* 
-   Fin de l'operation cai_inverser_tableau_complet
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_En_minuscule                                           */
-/* ----------								     */
-/*                                                                           */
-/* ROLE : Cette fonction transforme la chaine de caracteres donnee en        */
-/* ROLE : parametre en minuscule et renvoie le resultat                      */
-/*                                                                           */
-/* CONTEXTE D'APPEL :                                                        */
-/*                                                                           */
-/* RETOUR : chaine en majuscule                                              */
-/*                                                                           */
-/*****************************************************************************/
-
-char* cai_En_minuscule( char *mot )
-{
-   char *retour;
-   int i = 0;
-   
-   /* allocation des pointeurs */
-   
-   retour = (char*) NULL;
-   retour = (char*) calloc ( strlen ( mot ) + 1 , sizeof (char) );
-   
-   if ( retour == NULL )
-   {
-     return (char*)NULL;
-   }
-   /* Parcourir la chaine */
-   
-   while ( mot[i] != '\0' )
-   {   
-   /* transformer en minuscule la lettre lue */
-   retour[i] = tolower ( mot[i] );
-   i++;
-   }
-  /* retourner le resultat */ 
-  return retour;   
-  }
-/* 
-   Fin de l'operation cai_En_minuscule
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_istyp_connu                                            */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de verification si pixels de type connu ou non         */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :    retour = cai_istyp_connu(type_code)                 */
-/*  ---------------- 		                                             */
-/*                                                                           */
-/*     type_code    (E) (char *) : type de codage a verifier                 */
-/*     retour       (S) (int)    : 1 si OK reconnu                           */ 
-/*				   -1 si non reconnu			     */
-/*                                                                           */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-int cai_istyp_connu(char *type_code)
-{
-	int ind;	 /* indice de boucle sur les types reconnus */
-	int trouve,icr;  /* indice pour la recherche                */
-
-/* Initialisations diverses */
-	trouve = -1;
-	ind = 0;
-	while ((trouve==-1)&&(ind< CAI_NB_TYPE))
-	{
-	  icr=strncmp(type_code,CAI_TYPE_CONNU[ind],strlen(type_code));
-	  if (icr==0)
-	       trouve=ind;
-	  else
-	       ind=ind+1;
-	}
-	
-
-/* sortie normale */
-	return(trouve);
-}
-/* 
-   Fin de l'operation cai_istyp_connu
-*/
diff --git a/Utilities/CAI/cai_dll/src/cai_gessimu.c b/Utilities/CAI/cai_dll/src/cai_gessimu.c
deleted file mode 100755
index 834a40b3a1..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_gessimu.c
+++ /dev/null
@@ -1,1233 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_gessimu.c                                                 */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format gessimu (format Alcatel monocanal)         */ 
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CISI)                                   */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    Septembre 1999                                      */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 : FA : Rajout des tests sur les retours d'allocation  */
-/*			   memoire                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : FA : verification que l'image est codee sur un seul */
-/*octet par pixel (contrainte du format)                                     */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications pour compatibilite HP64bits      */
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : modifications fopen binaire pour PC/NT         */
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : modifications open  binaire pour PC/NT         */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : test sur  fclose  pour PC/LINUX                */
-/*****************************************************************************/
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-
-
-# include <stdio.h>
-# include <string.h>
-# include <unistd.h>
-# include <stdlib.h>
-# include <sys/types.h>
-#include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-
-#define _CAI_IMAGE
-#define IN_CAI_GESSIMU
-
-# include "cai_image.h"
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header: cai_gessimu.c,v 1.6 01/05/31 10:47:35 cmf Exp $";
-
-
-extern char *getenv();
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_gessimu                                      */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images au format gessimu                */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_ima_gessimu(repert,tab_ima)         */
-/* -----------------                                                         */
-/*                                                                           */
-/*     repert       (E) (char *)   : repertoire a explorer		     */
-/*     tab_ima      (S) (char ***) : pointeur sur tableau des images listees */
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*   cai_liste_ima_gessimu   (S) (int)     :   = -1 repertoire inexistant    */                                    /*					       = > 0 nombre d'images listees */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-long int cai_liste_ima_gessimu (char *repert,
-		           char ***tab_ima)
-
-{
-   DIR *dirp;		/* pointeur sur structure ouverture repertoire */
-   struct dirent *dp;   /* structure resultat de la fonction readdir   */
-   char *pch0,*pch1;    /* pointeurs sur chaine de caracteres          */
-   char car;            /* variable de travail                         */  
-   int nb_ima;          /* nombre d'images gessimu identifiees         */
-   long int i;          /* indice de boucle                            */
-   long int ll,dif;     /* variables de travail                        */
-   char blanc;          /* caractere blanc                             */
-
-
-/*........................................
-   INITIALISATION et ouverture du repertoire choisi
-  .........................................*/
-   nb_ima=0;
-   blanc=' ';
-   dirp=opendir(repert);
-
-   if(dirp!=NULL)
-   {
-/*......................................
-
-   premiere passe pour comptabiliser les images du format donne
-
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE GESSIMU
-      (EXTENSION =.pfe)
-     ..........................................*/
-
-      while((dp=readdir(dirp))!=NULL)
-      {
-    	 pch0=strstr(dp->d_name,".pfe");
-     	if (pch0 != NULL)
-     	{
-        	ll = strlen(dp->d_name);
-        	dif = (long)(dp->d_name-pch0);
-        	dif=labs(dif);
-        	pch1=pch0+4;
-        	if (((ll-4)==dif)||((*pch1)==blanc))
-	     		nb_ima=nb_ima+1;
-     
-    	 }
-
-      }
-
-    (void)closedir(dirp);
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES DU FORMAT GESSIMU
-     ......................................*/
-    *tab_ima = (char **) calloc(nb_ima,sizeof(char *));
-    for (i=0;i<nb_ima;i=i+1)
-      (*tab_ima)[i]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE GESSIMU
-       (EXTENSION =.pfe)
-   SI C`EST LE CAS,STOCKAGE DANS LA LISTE
-   ..........................................*/
-   dirp=opendir(repert);
-
-   nb_ima=0;
- 
-   while((dp=readdir(dirp))!=NULL)
-   {
-     pch0=strstr(dp->d_name,".pfe");
-     if (pch0 != NULL)
-     {
-        ll = strlen(dp->d_name);
-        dif = (long)(dp->d_name-pch0);
-        dif=labs(dif);
-        pch1=pch0+4;
-        if (((ll-4)==dif)||((*pch1)==blanc))
-        {
-            *pch0='\0';
-            strcpy((*tab_ima)[nb_ima],dp->d_name);
-	    nb_ima=nb_ima+1;
-        }
-     
-     }
-   }   
-
-    closedir(dirp);
-
-   }
-   else
-   {
-     /* Erreur : Repertoire inexistant */
-      nb_ima=-1;
-   }
-
-    return(nb_ima);
-
-}
-/* Fin de l'operation cai_liste_ima_gessimu
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_gessimu                                  */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image au format gessimu   */
-/* -----    					                             */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_lecture_gessimu(nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_gessimu (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_lecture_gessimu(char *repert,
-				     char *nom_image,
-				     int *nb_can,
-				     int *nboct_pix,
-				     int *nb_col,
-				     int *nb_lig)
-
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   int nbbit;			/* nb de bits par pixel du fichier en-tete  */
-   int retour;			/* retour de la fonction comparaison chaines*/ 
-   int i,num;			/* indice 				    */
-   char type_cod[5];		/* type de codage du pixel		    */
-   int detec1,detecF;           /* 1er et dernier detecteur dans l'entete   */
-   int Tail_lig;	        /* taille d'une ligne sur disque (multi 4)  */
- 
-   /*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-
-   *nb_lig=0;
-
-   *nb_col=0;
-
-   *nboct_pix=0;
- 
-   iret=1;
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 : FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_lecture");
-    }
-   else
-   {
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-       sprintf(nom_fic,"%s/%s.pfe",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.pfe",nom_image);
-   }
-
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : modifications fopen binaire pour PC/NT         */
-/*****************************************************************************/
-   fic_in=NULL;
-   fic_in=fopen(nom_fic,"rb");
-   if (fic_in==NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur ouverture fichier entete GESSIMU");
-    }
-   else
-   {
-/*....................................
-    positionnement sur le nombre de colonnes 
-  .............................................*/
-        fseek(fic_in,16,0);
-
-/*..................................
-   recuperation du numero du premier detecteur
-  ...........................................*/
-	fread(&detec1,4,1,fic_in);
-/*..................................
-   recuperation du dernier detecteur
-  ......................................*/
-	fread(&detecF,4,1,fic_in);
-/*..................................
-   recuperation du nombre de lignes 
-  ......................................*/
-        fseek(fic_in,12,1);
-	fread(nb_lig,4,1,fic_in);
-/*..................................
-   calcul du nombre de colonne 
-  ......................................*/
-	*nb_col = detecF - detec1 ;
-/*..................................
-   initialisation du type de codage des pixels 
-  ......................................*/
-    	image1->NB_BITS_PIX=8;
-    	image1->NBOCT_PIX=1;
-	sprintf(image1->COD_PIX,"OCT");
-	*nboct_pix = image1->NBOCT_PIX;
-
-/*..................................
-   initialisation du nb de canaux (toujours monocanal)
-  ......................................................*/
-	*nb_can = 1;
-
-/*..................................
-   Calcul de la taille d'une ligne sur disque
-  ......................................................*/
-	Tail_lig = (((*nb_col-1)/4)+1)*4;
-
-  }
-/*..................................
-   Fermeture du fichier 
-  ......................................*/
-   if (fic_in!=NULL) fclose(fic_in);
-
-   if (iret !=0)
-   {
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-
-     nom_fic[0]='\0';
-     nom_fic_canal[0]='\0';
-
-     if ((long int)strlen(repert)!=0)
-     {
-       sprintf(nom_fic_canal,"%s/%s.pfe",repert,nom_image);
-      }
-      else
-      {
-       sprintf(nom_fic_canal,"%s.pfe",nom_image);
-      }
-  
-     num=open(nom_fic_canal,O_RDONLY|O_BINARY,0);
-     if (num!= -1)
-     {
-
-       for (i=0;i<*nb_can;i=i+1)
-       {
-           sscanf(nom_image,"%s",image1->NOM_FIC_CAN);
-           sscanf(nom_image,"%s",image1->NOM_UTIL_CAN);
-            image1->ACCES_CANAL_INT[i]=num;
-           image1->POS_OCTET[i]=Tail_lig;
-        }
-      }
-      else
-         iret=0;
-     }
-    }
-    if (iret == 0)
-    {
-	return (NULL);
-     }
-    else
-    {
-      return(image1);
-     }
-
-}
-/* 
-   Fin de l'operation cai_ouvre_lecture_gessimu
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_gessimu                                 */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format gessimu et de tous les fichiers qui la composent      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_IMAGE *cai_ouvre_creation_gessimu(nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            label)           */
-/*                                                                           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 )         */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_gessimu (S) (CAI_IMAGE *) :     =NULL si pb        */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_creation_gessimu(char *repert,
-				      char *nom_image,
-				      int  *nb_can,
-				      int  *nboct_pix,
-				      int  *nb_col,
-				      int  *nb_lig,
-				      char *label)
-
-{
-   FILE *fic;		        /* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   long retour;			/* retour de fonction 			    */ 
-   int i,num;			/* indice 				    */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   unsigned char *Header;       /* entete du fichier gessimu 	            */
-   int taille_entete;	        /* taille de l'entete		            */
-   int detec1,detecF;           /* numero du 1er et dernier detecteur       */
-   double h_moyen;
-
-/*********************************************/
-/* Verification qu'un seul canal est demande */
-/*********************************************/
-   if (*nb_can != 1)
-   {
-	image1 = NULL;
- 	sprintf ( CAI_ERREUR , 
-		"Une image GESSIMU ne peut contenir qu'un seul canal");
-	goto ERREUR;
-   }
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : FA : verification que l'image est codee sur un seul */
-/*octet par pixel (contrainte du format)                                     */
-/*****************************************************************************/
-   if (*nboct_pix != 1)
-   {
-	image1 = NULL;
- 	sprintf ( CAI_ERREUR , 
-		"Une image GESSIMU ne peutetre codee que sur un seul octet par pixel");
-	goto ERREUR;
-   }
-
-    
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 : FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_creation");
-     goto ERREUR;
-   }
-
-/*.................................................
-   Constitution du nom du fichier entete et verification qu'il
-   n'existe pas deja
-  .................................................*/
-
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-       sprintf(nom_fic,"%s/%s.pfe",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.pfe",nom_image);
-    }
-   
-   retour = stat ( nom_fic , &buf_stat );
-   if ( retour == 0 )
-   { 
-	sprintf ( CAI_ERREUR , "L'image %s GESSIMU existe \n" , nom_image );
-	goto ERREUR;
-   }
-
-/*......................................................
-  Ouverture du fichier entete en ecriture 
-  Ecriture du contenu
-  ..........................................................*/
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : modifications fopen binaire pour PC/NT         */
-/*****************************************************************************/
-
-  fic = fopen(nom_fic,"wb");
-  if (fic == NULL)
-  {
-      sprintf(CAI_ERREUR,"Erreur: Creation fichier %s impossible\n",nom_fic);
-      goto ERREUR;
-   }
-   taille_entete = (((*nb_col-1)/4)+1)*4;
-   Header = (unsigned char *) calloc(taille_entete,sizeof( unsigned char));
-   if (Header == NULL)
-   {
-      sprintf(CAI_ERREUR,"Erreur alloc: Creation fichier %s impossible\n",
-				nom_fic);
-      goto ERREUR;
-   }
-
-/*******************************************/
-/* ecriture du 1ER detecteur de l'image    */
-/*******************************************/
-   detec1 = 1;
-   memcpy(&Header[16],&detec1 , 4 );
-
-/************************************************/
-/* ecriture du dernier detecteur de l'image     */
-/************************************************/
-   detecF = *nb_col;
-   memcpy(&Header[20],&detecF , 4 );
-
-/*********************************************/
-/* ecriture du nombre de colonnes de l'image */
-/*********************************************/
-   memcpy(&Header[24],nb_col , 4 );
-
-/*********************************************/
-/* ecriture du nombre de lignes de l'image */
-/*********************************************/
-   memcpy(&Header[36],nb_lig , 4 );
-
-/***************************************************/
-/* ecriture de la taille d'une ligne multiple de 4 */
-/***************************************************/
-   memcpy(&Header[40],&taille_entete , 4 );
-
-/************************************************/
-/* ecriture du h_moyen (double 0)               */
-/************************************************/
-   h_moyen = 0.;
-   memcpy(&Header[44],&h_moyen , 8 );
-
-   retour = fwrite ( Header , taille_entete , 1 , fic );
-   free(Header);
-   if ( retour == 0 )
-   {
-      sprintf ( CAI_ERREUR ,
-		 "Erreur : ecriture entete impossible dans fichier %s\n",
-		  nom_fic );
-      goto ERREUR;
-   }
-      
-/*************************************************/
-/* Fermeture du fichier                          */
-/*************************************************/
-
-   fclose ( fic );
-
-   num = open(nom_fic,O_RDWR|O_BINARY,PERMS); 
-   if (num == -1)
-   {
-
-     sprintf(CAI_ERREUR,"Erreur: Creation %s impossible\n",nom_fic);
-     goto ERREUR;
-   } 
-
-   for (i=0;i<*nb_can;i=i+1)
-   {
-     image1->ACCES_CANAL_INT[i]=num;
-     image1->POS_OCTET[i]=taille_entete;
-    }
-
-  return (image1);
-
-ERREUR :
-  return(NULL);
-}
-  
-/* 
-  Fin de l'operation cai_ouvre_creation_gessimu
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_gessimu                                  */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image GESSIMU              */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_lecture_canal_gessimu(image1, canal,    */       		      /* ------------------                        premiere_ligne,                 */
-/*                                           premiere_colonne,               */
-/*                                           nombre_lignes_lire ,            */
-/*                                           nombre_colonnes_lire,           */
-/*                                           pas_ligne ,pas_colonne,         */
-/*                 		             data_image )                    */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (int) : numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal_gessimu (S) (CAI_OK_KO) :     = CAI_KO si pb        */
-/*                                                 = CAI_OK si OK            */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_lecture_canal_gessimu(CAI_IMAGE *image1 ,  
-                                    int *canal ,           
-    		                    int *premiere_ligne  ,   
-     		                    int *premiere_colonne,
-                                    int *nombre_lignes_lire ,
-                                    int *nombre_colonnes_lire,
-                                    int *pas_ligne ,          
-                                    int *pas_colonne,
-		                    unsigned char *data_image )        
-{
-
- int   num,i,j,k,kk;        /* variables de travail                          */
- long pt_oct,n;		    /* position courante dans le fichier image       */
- int no_oct;                /* numero du premier octet a lire                */
- int iret;                  /* indicateur d'erreur                           */
- int lig;                   /* indice de boucle sur les lignes               */
- int   oct_pix;             /* nb octets par pixels                          */
- long  nb_oct;              /* nb oct =1er octet a lire - position courante  */
- unsigned char *buf_lec;    /* buffer lecture d'une  ligne                   */
- unsigned char *deb,*pch;   /* pointeur chaine pour transfert  buffer sortie */
- int Tail_lig;		    /* Taille physique d'une ligne sur disque        */
-
-/*********************************************/
-/* Verification qu'un seul canal est demande */
-/*********************************************/
- if (*canal != 1)
- {
-	image1 = NULL;
- 	sprintf ( CAI_ERREUR , 
-		"Une image GESSIMU ne contient qu'un seul canal");
-        iret=CAI_KO;
- }
- else
- {
-/*...........................
-  Initialisations diverses
-  ..........................*/
-   iret=CAI_OK;
-   num=image1->ACCES_CANAL_INT[*canal-1];
-   oct_pix=image1->NBOCT_PIX;
-   Tail_lig = (((image1->NB_COL-1)/4)+1)*4;
-
-/*..............................................
-   allocation de memoire pour lire une ligne image
- ............................................. */
-
-    buf_lec = (unsigned char *) calloc(Tail_lig,sizeof(unsigned char));
-    if (buf_lec == NULL)
-    {
-     	 	iret=CAI_KO;
-      		strcpy(CAI_ERREUR,"Probleme allocation memoire");
-     }
-     else
-     {
-/*....................
-        Initialisation
-  ......................*/
-            lig=*premiere_ligne;
-       	    i=1;
-            pch=data_image;
-
-/*.....................
-         Pour chaque ligne a lire
-  .......................................*/
-           while ((i <= *nombre_lignes_lire)&&(iret==CAI_OK))
-           {  
-/*............................................
-	    Recherche de la position courante dans le fichier
-  ............................................*/
-               pt_oct=lseek(num,0L,1);
-
-/*................................
-            Calcul du numero du 1er octet a lire
-  ....................................*/
-               
-	      no_oct=image1->POS_OCTET[*canal-1]+(lig-1)*Tail_lig;
-
-
-/*..................................
-            Saut d'octets pour etre positionne sur la ligne a lire
-  .......................................*/
-              nb_oct=(long)(no_oct-pt_oct);
-              lseek(num,nb_oct,1);
-
-/*...........................................
-            lecture d'une ligne image
-  ................................................*/
-              n=read(num,buf_lec,Tail_lig);
- 
-              if (n<=0)
-              {
-             	iret=CAI_KO;
-             	strcpy(CAI_ERREUR,"Erreur lecture donnee image GESSIMU");
-              }
-              else
-              { 
-/*......................................
-             Sauvegarde des donnees lues entenant compte du pas 
-             d'echantillonnage en colonne
-  ........................................*/           
-                 deb=buf_lec+(*premiere_colonne-1)*oct_pix;
-                 j=1;
-                 while (j <= *nombre_colonnes_lire)
-	         {  
-                  	 *pch=*deb;
-                  	 j=j+1;
-                	 pch=pch+1;
-                	 deb=deb+(*pas_colonne);
-                  }   
-             
-              }
-              i=i+1;
-              lig=lig+(*pas_ligne);
-           }        
-          	    
-	   free(buf_lec);
-      	}
-   }
-  return(iret);
-}
-/*
-  Fin de l'operation cai_lecture_canal_gessimu
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal_gessimu                                 */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un canal d'une image gessimu              */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ecriture_canal_gessimu(image1, canal,   */       		      /* ------------------                                 premiere_ligne,        */
-/*                                                    nombre_lignes_ecrire,  */
-/*                                                    nombre_colonnes_ecrire,*/
-/*                 		                      data_image )           */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal                 (E) (int) : numero du canal a ecrire            */
-/*     premiere_ligne        (E) (int) : premiere ligne a ecrire ds l'image  */
-/*     nombre_lignes_ecrire  (E) (int) : nombre de lignes a ecrire           */
-/*     nombre_colonnes_ecrire(E) (int) : nombre de colonnes a ecrire         */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels ecris alloue et   */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_ecriture_canal_gessimu    (S) (CAI_OK_KO) : = CAI_KO si pb        */
-/*                                                     = CAI_OK si OK        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_ecriture_canal_gessimu (CAI_IMAGE *image1 ,  
-                                      int *canal ,           
-    		                      int *premiere_ligne  ,   
-                                      int *nombre_lignes_ecrire ,
-                                      int *nombre_colonnes_ecrire,
-		                      unsigned char *data_image )        
-{
-long	position_first_lig;	/* position de la 1ere ligne a ecrire    */
-long	position_courante;	/* position courante dans le fichier     */
-long	deplacement;		/* deplacement a effectuer               */
-unsigned char *buff_lig;	/* pointeur de travail  bandeau a ecrire */
-long	cr_write;		/* code retour de write                  */
-int num;                        /* descripteur de fichier                */
-int nboct_pix;			/* nombre d'octets par pixel             */
-int nb_canaux;			/* nombre de canaux de l'image totale    */
-int nboct_ecrire;		/* nb d'octets du bandeau a ecrire       */
-int Tail_lig;		        /* taille en octet d'une ligne (mult 4)  */
-int ind,i;			/* variables de travail			 */
-
-/*********************************************/
-/* Verification qu'un seul canal est demande */
-/*********************************************/
-   if (*canal != 1)
-   {
-		image1 = NULL;
- 		sprintf ( CAI_ERREUR , 
-			"Une image GESSIMU ne contient qu'un seul canal");
-		goto ERREUR;
-   }
-
-/* ................
-   Initialisations 
-  .................*/
-
-   num = image1->ACCES_CANAL_INT[*canal-1];
-   nboct_pix = image1->NBOCT_PIX;
-   nb_canaux = 1;
-   position_first_lig = 0;
-   position_courante = 0;
-   deplacement = 0;
-   nboct_ecrire = 0;
-   Tail_lig = (((image1->NB_COL-1)/4)+1)*4;
-    buff_lig = NULL;
-    buff_lig = (unsigned char *) calloc(Tail_lig,sizeof(unsigned char));
-    if (buff_lig == NULL)
-    {
-       		strcpy(CAI_ERREUR,"Probleme allocation memoire");
-		goto ERREUR;
-     }
- /********************************************************/
-/* Calcul de la position de la premiere ligne a ecrire 	*/ 
-/********************************************************/
-
-     position_first_lig = (long) ( image1->POS_OCTET[*canal-1] + 
- 		+ (*premiere_ligne - 1) * Tail_lig);
-
-/********************************************************/
-/*  Recuperation de la position courante	        */
-/********************************************************/
-
-    position_courante = lseek ( num , 0L , 1 );
-
-/********************************************************/
-/* Calcul du deplacement jusqu'a la 1ere ligne a ecrire	*/
-/********************************************************/
-
-   deplacement = position_first_lig - position_courante;
-
-/*******************************************************/
-/* deplacement jusqu'a la premiere ligne a ecrire      */
-/*******************************************************/
-
-   lseek ( num , deplacement , 1 ); 
-
-/***********************************************/
-/* ecriture des lignes			       */
-/***********************************************/
-   nboct_ecrire = *nombre_colonnes_ecrire;
-   ind = 0;
-   i = 0;
-
-/*.....................
-   Pour chaque ligne a lire
-  .............................*/
-   while (i < *nombre_lignes_ecrire)
-   {  
-	    memcpy(buff_lig,&data_image[ind] , nboct_ecrire );
-
-
-	    cr_write = write ( num , buff_lig,Tail_lig);
-
-	    if ( cr_write !=  Tail_lig)
-	    {
-	    	strcpy ( CAI_ERREUR , 
-				"Erreur ecriture canal image gessimu\n" );
-	        goto ERREUR;
-	    }
-            ind = ind + nboct_ecrire;
-	    i = i + 1;
-    }
-if (buff_lig != NULL) free(buff_lig);
-
-return (CAI_OK);
-
-ERREUR :
-
-if (buff_lig != NULL) free(buff_lig);
-return (CAI_KO);
-
-
-}
-/* 
-  Fin de l'operation cai_ecriture_canal_gessimu
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_gessimu                                          */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format gessimu et de       */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_gessimu(image1)                   */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_gessimu    (S) (CAI_OK_KO) :       = CAI_KO si pb           */
-/*                                                  = CAI_OK si OK           */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO  cai_ferme_gessimu (CAI_IMAGE *image1)
-
-{
-
- int iret;    /* code retour de l'operation      */
- int i_can;   /* indice du canal a fermer        */
- int num;     /* descripteur du fichier a fermer */
-
- iret=CAI_OK;
-/*.............................................
-   Fermeture du fichier qui contient tous les canaux
-  .............................................*/
-  num=image1->ACCES_CANAL_INT[0];
-  if (num>0) close(num);
-
-
-  return (iret);
-}
-
-/*
-  Fin de l'operation cai_ferme_gessimu
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_gessimu                                       */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stocke en gessimu et de     */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_dest_ima_gessimu(repertoire,nom_ima)    */       		      /* ------------------                                                        */
-/*     repertoire   (E) (char *) : repertoire de l'image a detruire          */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_dest_ima_gessimu (S) (CAI_OK_KO) : = CAI_KO si pb                 */
-/*                                            = CAI_OK si OK                 */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO cai_dest_ima_gessimu ( char *repertoire , 
-                                 char *nom_ima )
-
-{
-int	i_can;			/* compteur de canaux */
-int     iret;                   /* code retour fonction fermetrue lecture */
-char	str_num_canal[3];	/* suffixe numero du canal */
-char	nom_fic_entete[1024];	/* nom du fichier entete a detruire */
-char    nom_ima_complet[1024];  /* repertoire + nom de l'image */
-char	nom_fic_canal[1024];	/* nom du fichier canal a detruire */
-
-int	cr_stat;		/* code retour de fonction status de fichier */
-struct stat buf_stat;		/* structure decrivant status de fichier */ 
-
-CAI_IMAGE   *image1;             /* structure ouverture image */
-int         nb_can;	        /* nombre de canaux de l'image */
-int         nboct_pix;		/* nombre d'octets par pixel image */
-int         nb_col;	        /* nombre de colonnes de l'image */
-int         nb_lig;             /* nombre de lignes de l'image */
-
-/************************************************/
-/* Constitution du nom du fichier d'entete	*/
-/************************************************/
-
-if ((long)strlen(repertoire)!= 0)
-{
-  sprintf( nom_ima_complet, "%s/%s" ,repertoire,nom_ima);
-}
-else
-{
-  strcpy ( nom_ima_complet , nom_ima);
-}
-  sprintf(nom_fic_entete ,"%s.pfe", nom_ima_complet);
-
-/************************************************/
-/* Destruction du fichier d'entete		*/
-/************************************************/
-
-cr_stat = stat ( nom_fic_entete , &buf_stat );
-if ( cr_stat == 0 )
-	unlink ( nom_fic_entete );
-
-
-return (CAI_OK);
-
-}
-/*
- Fin de l'operation cai_dest_ima_gessimu
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_modifie_gessimu                                  */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture-ecriture d'une image au format  */
-/* -----     gessimu et de tous les fichiers qui la composent                */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_modifie_gessimu(nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 )         */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_modifie_gessimu (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_modifie_gessimu(char *repert,
-				     char *nom_image,
-				     int  *nb_can,
-				     int  *nboct_pix,
-				     int  *nb_col,
-				     int  *nb_lig)
-
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   int nbbit;			/* nb de bits par pixel du fichier en-tete  */
-   int retour;			/* retour de la fonction comparaison chaines*/ 
-   int i,num;			/* indice 				    */
-   char type_cod[5];		/* type de codage du pixel		    */
-   int detec1,detecF;           /* 1er et dernier detecteur dans l'entete   */
-   int Tail_lig;	        /* taille d'une ligne sur disque (multi 4)  */
- 
-   /*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-
-   *nb_lig=0;
-
-   *nb_col=0;
-
-   *nboct_pix=0;
- 
-   iret=1;
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 : FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
- if (image1==NULL)
- {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_modifie");
- }
- else
- {
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-       sprintf(nom_fic,"%s/%s.pfe",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.pfe",nom_image);
-   }
-
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : modifications fopen binaire pour PC/NT         */
-/*****************************************************************************/
-
-   fic_in=fopen(nom_fic,"rb");
-   if (fic_in==NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur ouverture fichier entete GESSIMU");
-    }
-   else
-   {
-/*....................................
-    positionnement sur le nombre de colonnes 
-  .............................................*/
-        fseek(fic_in,16,0);
-/*..................................
-   recuperation du numero du premier detecteur
-  ...........................................*/
-	fread(&detec1,4,1,fic_in);
-/*..................................
-   recuperation du dernier detecteur
-  ......................................*/
-	fread(&detecF,4,1,fic_in);
-/*..................................
-   recuperation du nombre de lignes 
-  ......................................*/
-        fseek(fic_in,12,1);
-	fread(nb_lig,4,1,fic_in);
-/*..................................
-   calcul du nombre de colonne 
-  ......................................*/
-	*nb_col = detecF - detec1 ;
-/*..................................
-   initialisation du type de codage des pixels 
-  ......................................*/
-    	image1->NB_BITS_PIX=8;
-    	image1->NBOCT_PIX=1;
-	sprintf(image1->COD_PIX,"OCT");
-	*nboct_pix = image1->NBOCT_PIX;
-
-/*..................................
-   initialisation du nb de canaux (toujours monocanal)
-  ......................................................*/
-	*nb_can = 1;
-
-/*..................................
-   Calcul de la taille d'une ligne sur disque
-  ......................................................*/
-	Tail_lig = (((*nb_col-1)/4)+1)*4;
-
-  }
-/*..................................
-   Fermeture du fichier 
-  ......................................*/
-   if (fic_in!=NULL) fclose(fic_in);
-
-   if (iret !=0)
-   {
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-
-     nom_fic[0]='\0';
-     nom_fic_canal[0]='\0';
-
-     if ((long int)strlen(repert)!=0)
-     {
-       sprintf(nom_fic_canal,"%s/%s.pfe",repert,nom_image);
-      }
-      else
-      {
-       sprintf(nom_fic_canal,"%s.pfe",nom_image);
-      }
-  
-     num=open(nom_fic_canal,O_RDWR|O_BINARY,0);
-     if (num!= -1)
-     {
-
-       for (i=0;i<*nb_can;i=i+1)
-       {
-           sscanf(nom_image,"%s",image1->NOM_FIC_CAN);
-           sscanf(nom_image,"%s",image1->NOM_UTIL_CAN);
-            image1->ACCES_CANAL_INT[i]=num;
-           image1->POS_OCTET[i]=Tail_lig;
-        }
-      }
-      else
-         iret=0;
-     }
-    }
-    if (iret == 0)
-    {
-	return (NULL);
-     }
-    else
-    {
-      return(image1);
-     }
-
-}
-/* 
-   Fin de l'operation cai_ouvre_modifie_gessimu
-*/
-
diff --git a/Utilities/CAI/cai_dll/src/cai_grilles.c b/Utilities/CAI/cai_dll/src/cai_grilles.c
deleted file mode 100755
index 676b925c7b..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_grilles.c
+++ /dev/null
@@ -1,1916 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_grilles.c                                                 */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format gdb (Grille de Decalages Bruts) et au      */
-/*	       format gdr (Grille de Decalages Restitues)		     */ 
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CISI)                                   */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    Septembre 99                                        */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications indications Big ou Little Endian */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications pour compatibilite HP64bits      */
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM :fonctions de test machine et inversions         */
-/*			     deviennent generiques                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : modifications fopen binaire pour PC/NT         */
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : modifications open binaire pour PC/NT          */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : test sur  fclose  pour PC/LINUX                */
-/*****************************************************************************/
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-
-
-# include <stdio.h>
-# include <string.h>
-# include <stdlib.h>
-# include <unistd.h>
-# include <sys/types.h>
-# include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-# include <malloc.h>
-# include <math.h>
-# include <unistd.h>
-
-#define _CAI_IMAGE
-#define IN_CAI_GRIL
-
-# include "cai_image.h"
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header: cai_grilles.c,v 1.6 01/05/31 10:47:38 cmf Exp $";
-
-
-extern char *getenv();
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_grilles                                      */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images au format gdb                    */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  int cai_liste_ima_grilles(typ_grille,repert,tab_ima)  */
-/* -----------------                                                         */
-/*                                                                           */
-/*     typ_grille   (E) (char)     : type de grille B=Brute, R=rectifiee     */
-/*     repert       (E) (char *)   : repertoire a explorer		     */
-/*     tab_ima      (S) (char ***) : pointeur sur tableau des images listees */
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_ima_grilles   (S) (int)     : = -1 repertoire inexistant    */                                    
-/*					       = > 0 nombre d'images listees */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-long int cai_liste_ima_grilles (char typ_grille,char *repert,char ***tab_ima)
-       
-{
-   DIR *dirp;		/* pointeur sur structure ouverture repertoire */
-   struct dirent *dp;   /* structure resultat de la fonction readdir   */
-   char *pch0,*pch1;    /* pointeurs sur chaine de caracteres          */
-   char car;            /* variable de travail                         */  
-   int nb_ima;          /* nombre d'images gdb identifiees             */
-   long int i;          /* indice de boucle                            */
-   long int ll,dif;     /* variables de travail                        */
-   char blanc;          /* caractere blanc                             */
-   char extens[5];      /* extension recherchee                        */
-
-/*........................................
-   INITIALISATION et ouverture du repertoire choisi
-  .........................................*/
-   extens[0]='\0';
-   if (typ_grille=='B')
-	strcpy(extens,".gdb");
-   else
-	strcpy(extens,".gdr");	
-   nb_ima=0;
-   blanc=' ';
-   dirp=opendir(repert);
-
-   if(dirp!=NULL)
-   {
-/*......................................
-
-   premiere passe pour comptabiliser les images du format donne
-
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE GDB ou GDR
-      (EXTENSION =.gdb pour Brute ou .gdr pour Rectifiee)
-     ......................................................*/
-
-      while((dp=readdir(dirp))!=NULL)
-      {
-    	 pch0=strstr(dp->d_name,extens);
-     	if (pch0 != NULL)
-     	{
-        	ll = strlen(dp->d_name);
-        	dif = (long)(dp->d_name-pch0);
-        	dif=labs(dif);
-        	pch1=pch0+4;
-        	if (((ll-4)==dif)||((*pch1)==blanc))
-	     		nb_ima=nb_ima+1;
-     
-    	 }
-
-      }
-
-   closedir(dirp);
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES DU FORMAT GDB ou GDR
-     .......................................................................*/
-    *tab_ima = (char **) calloc(nb_ima,sizeof(char *));
-    for (i=0;i<nb_ima;i=i+1)
-      (*tab_ima)[i]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE GDB ou GDR
-       (EXTENSION =.gdb ou .gdr)
-   SI C`EST LE CAS,STOCKAGE DANS LA LISTE
-   ..........................................*/
-   dirp=opendir(repert);
-
-   nb_ima=0;
- 
-   while((dp=readdir(dirp))!=NULL)
-   {
-     pch0=strstr(dp->d_name,extens);
-     if (pch0 != NULL)
-     {
-        ll = strlen(dp->d_name);
-        dif = (long)(dp->d_name-pch0);
-        dif=labs(dif);
-        pch1=pch0+4;
-        if (((ll-4)==dif)||((*pch1)==blanc))
-        {
-            *pch0='\0';
-            strcpy((*tab_ima)[nb_ima],dp->d_name);
-	    nb_ima=nb_ima+1;
-        }
-     
-     }
-   }   
-
-   closedir(dirp);
-
-   }
-   else
-   {
-     /* Erreur : Repertoire inexistant */
-      nb_ima=-1;
-   }
-
-    return(nb_ima);
-
-}
-/* Fin de l'operation cai_liste_ima_grilles
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_grilles                                  */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image format gdb ou gdr   */
-/* -----                            					     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_lecture_grilles(typ_grille,      */
-/*  ---------------- 		                            nom_image,       */
-/*							    nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     typ_grille     (E) (char)   : type de grille B=Brute, R=rectifiee     */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels              */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_grilles (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_lecture_grilles(char typ_grille,
-				     char *repert,
-				     char *nom_image,
-				     int  *nb_can,
-				     int  *nboct_pix,
-				     int  *nb_col,
-				     int  *nb_lig)
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier         */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image    */ 
-   int  iret;			/* indicateur de retour ok ou pas              */
-   char nom_fic[1024];		/* nom du fichier en-tete		       */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence   */
-   int nbbit;			/* nb de bits par pixel du fichier en-tete     */
-   int retour;			/* retour de la fonction comparaison chaines   */ 
-   int i,num;			/* indice 				       */
-   char type_cod[5];		/* type de codage du pixel		       */
-   int temp;                    /* zone temporaire de lecture                  */
-   char extens[5];              /* extension recherchee                        */
-   char type_image[3];          /* type code+ordre rangement octets dans entete*/
-   char *type_machine;          /* ordre rangement octets machine travail      */
-   char  buf[59];               /* buffer contenant entete image               */
-   int v;	                /* comparaison type machine-type image         */
-   char *v1;                    /* comparaison type image avec chaine vide     */
-   int nb_col2, nb_lig2;        /* variables intermediaires inversion octets   */
-   int temp2,nb;                /* zone temporaire de lecture                  */
-
-   /*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-
-   *nb_lig=0;
-
-   *nb_col=0;
-
-   *nboct_pix=0;
- 
-   iret=1;
-   
-   type_machine = (char *) calloc(3,sizeof(char));
-   
-   if (type_machine == NULL)
-   {
-      iret=0;
-      strcpy(CAI_ERREUR,"Erreur allocation memoire dans cai_ouvre_lecture");
-   }
-   
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-   
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoire dans cai_ouvre_lecture");
-    }
-   else
-   {
-
-      extens[0]='\0';
-      if (typ_grille =='B')
-	strcpy(extens,".gdb");
-      else
-	strcpy(extens,".gdr");	
-
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-      nom_fic[0]='\0';
-      if ((long)strlen(repert)!= 0)
-      {
-          sprintf(nom_fic,"%s/%s%s",repert,nom_image,extens);
-      }
-      else
-      {
-         sprintf(nom_fic,"%s%s",nom_image,extens);
-      }
-
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : modifications fopen binaire pour PC/NT         */
-/*****************************************************************************/
-      fic_in=NULL;
-      fic_in=fopen(nom_fic,"rb");
-      if (fic_in==NULL)
-      {
-        iret=0;
-        strcpy(CAI_ERREUR,"Erreur ouverture fichier entete grille");
-      }
-      else
-      {
-      
-    
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications indications Big ou Little Endian */
-/*****************************************************************************/  
-
-/*..................................
-   recuperation infos completes format.gdb 
-  ......................................*/ 
-    
-   if (typ_grille =='B')
-   	fread(buf,36,1,fic_in);
-	
-/*..................................
-   recuperation infos completes format.gdr 
-  ......................................*/ 
-   else fread(buf,56,1,fic_in);
-   
-/*..................................
-   recuperation du type de codage des pixels 
-  ......................................*/
-   memcpy(type_cod,&buf[8],4);
-	
-        if (strncmp(type_cod,"FLOA",4) ==0)
-	{
-    	   image1->NB_BITS_PIX=32;
-    	   image1->NBOCT_PIX=4;
-	   sprintf(image1->COD_PIX,"R4");
-           strcpy(type_image,"BE");
-           sprintf(image1->TYPE_COD,"FLOA");
-	}
-	
-	else if (strncmp(type_cod,"FLOL",4) ==0)
-	{
-	   image1->NB_BITS_PIX=32;
-    	   image1->NBOCT_PIX=4;
-	   sprintf(image1->COD_PIX,"R4");
-           strcpy(type_image,"LE");
-           sprintf(image1->TYPE_COD,"FLOL");
-	}
-	
-	else 
-	{
-	  iret=0;
-     	  sprintf(CAI_ERREUR,"Type de codage GRILLE non reconnu : %s",type_cod);
-        }
-	
-	*nboct_pix = image1->NBOCT_PIX;
-              
-/*..................................
-   determination ordre de rangement 
-   des octets sur machine de travail
-  ......................................*/   
-   
-   	type_machine = cai_test_pFpf();  
- 
- /*..................................
-   determination des autres infos 
-   en fonction inversion
-  ......................................*/  
-   
-	v = strncmp(type_machine,type_image,2);
-	v1 = strrchr(type_image,'E');
-	  	  	
-/*..................................
-   recuperation du nombre de colonne 
-  ......................................*/
-	memcpy(nb_col,&buf[0],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-        nb=2;
-	if ( (v!=0) &&  (v1!=NULL) ) 
-	{	
-		swab( (void*)nb_col, (void*)&nb_col2,4 );
-		cai_inverser_tableau((short *)nb_col, (short *)&nb_col2,nb);
-	}
-
-/*..................................
-   recuperation du nombre de lignes 
-  ......................................*/
-	memcpy(nb_lig,&buf[4],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) && (v1!=NULL) )
-	{
-		swab( (void*)nb_lig, (void*)&nb_lig2,4 );
-		cai_inverser_tableau((short *)nb_lig, (short *)&nb_lig2, nb);
-	}	      
- 
-/*.....................................................................
-   recuperation du numero de ligne du 1er point de la matrice 
-  .....................................................................*/
-        
-	memcpy(&temp,&buf[12],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) &&  (v1!=NULL) ) 
-	{	
-		swab( (void*)&temp, (void*)&temp2,4 );
-		cai_inverser_tableau((short *)&temp, (short *)&temp2,nb);
-	}
-  
-	image1->NUM_LIG_DEB = temp;
-	
-/*.....................................................................
-   recuperation du numero de colonne du 1er point de la matrice 
-  .....................................................................*/
-	       
-	memcpy(&temp,&buf[16],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) &&  (v1!=NULL) ) 
-	{	
-		swab( (void*)&temp, (void*)&temp2,4 );
-		cai_inverser_tableau((short *)&temp, (short *)&temp2, nb);
-	}
-	
-	image1->NUM_COL_DEB = temp;
-
-/*.....................................................................
-   recuperation du pas de la grille le long des lignes 
-  .....................................................................*/
-		       
-	memcpy(&temp,&buf[20],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) &&  (v1!=NULL) ) 
-	{	
-		swab( (void*)&temp, (void*)&temp2,4 );
-		cai_inverser_tableau((short *)&temp, (short *)&temp2,nb);
-	}
-	
-	image1->PAS_GRIL_LIG = temp;
-
-/*.....................................................................
-   recuperation du pas de la grille le long des colonnes 
-    .....................................................................*/
-		       
-	memcpy(&temp,&buf[24],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) &&  (v1!=NULL) ) 
-	{	
-		swab( (void*)&temp, (void*)&temp2,4 );
-		cai_inverser_tableau((short *)&temp, (short *)&temp2,nb);
-	}
-	
-	image1->PAS_GRIL_COL = temp;
-
-/*.....................................................................
-   recuperation du decalage initial le long des lignes 
-  .....................................................................*/	
-	       
-	memcpy(&temp,&buf[28],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) &&  (v1!=NULL) ) 
-	{	
-		swab( (void*)&temp, (void*)&temp2,4 );
-		cai_inverser_tableau((short *)&temp, (short *)&temp2,nb);
-	}
-	
-	image1->DECAL_LIG = temp;
-
-/*.....................................................................
-   recuperation du decalage initial le long des colonnes  
-   .....................................................................*/	
-	       
-	memcpy(&temp,&buf[32],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) &&  (v1!=NULL) ) 
-	{	
-		swab( (void*)&temp, (void*)&temp2,4 );
-		cai_inverser_tableau((short *)&temp,(short *) &temp2,nb);
-	}
-	
-	image1->DECAL_COL = temp;
-
-/*.....................................................................
-   recuperation de la caracteristique de la grille si .gdr
-.....................................................................*/
-        if (typ_grille == 'R')
-        {
-	    memcpy(image1->CAR_GRIL,&buf[36],20);
-            *nb_can = 2;
-        }
-        else
-	    *nb_can = 3;
-     }
-
-/**************************/
-/*    fin modifications   */ 
-/**************************/    
-
-/*..................................
-   Fermeture du fichier 
-  ......................................*/
-      if (fic_in != NULL) fclose(fic_in);
-
-      if (iret !=0)
-      {
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-
-      
-        nom_fic_canal[0]='\0';
-
-        if ((long)strlen(repert)!= 0)
-        {
-          sprintf(nom_fic_canal,"%s/%s%s",repert,nom_image,extens);
-        }
-        else
-        {
-          sprintf(nom_fic_canal,"%s%s",nom_image,extens);
-        }
-                     
-        num=open(nom_fic_canal,O_RDONLY|O_BINARY,0);
-        if (num!= -1)
-        {
-
-          for (i=0;i<*nb_can;i=i+1)
-          {
-            sscanf(nom_image,"%s",image1->NOM_FIC_CAN);
-            sscanf(nom_image,"%s",image1->NOM_UTIL_CAN);
-            image1->ACCES_CANAL_INT[i]=num;
-            image1->POS_OCTET[i]=((i*(*nb_lig))+1)*(*nb_col)*image1->NBOCT_PIX;
-          }
-	  
-	 	
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications indications Big ou Little Endian */
-/*****************************************************************************/  
-	
-	  if ( (v!=0) && (v1!=NULL) )
-	  {
-	     image1->INV_OCTETS =1;
-	  }
-	  else
-	  {
-	     image1->INV_OCTETS =0;
-	  }
-	   
-/**************************/
-/*    fin modifications   */ 
-/**************************/  
-	  	  
-        }
-        else
-           iret=0;   
-      }
-          
-    }
-    if (iret == 0)
-    {
-	return (NULL);
-     }
-    else
-    {
-      return(image1);
-     }
-
-}
-/* 
-   Fin de l'operation cai_ouvre_lecture_grilles
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_grilles                                 */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format gdb ou gdr (grilles brutes ou restituees)             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_IMAGE *cai_ouvre_creation_grilles(typ_grille,      */
-/*  ---------------- 		                            nom_image,       */
-/*							    nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            label)           */
-/*                                                                           */
-/*     typ_grille     (E) (char)   : type de grille B=Brute, R=rectifiee     */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_grilles (S) (CAI_IMAGE *) : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_creation_grilles(char typ_grille,char *repert,
-				      char *nom_image,
-				      int  *nb_can,
-				      int  *nboct_pix,
-				      int  *nb_col,
-				      int  *nb_lig,
-				      char *label)
-
-{
-   FILE *fic;		      /* pointeur sur descripteur de fichier            */
-   CAI_IMAGE *image1;         /* pointeur su descripteur de fichier image       */ 
-   char nom_fic[1024];	      /* nom du fichier en-tete		                */
-   long retour;		      /* retour de fonction 		                */ 
-   int i,num;		      /* indice 			                */
-   struct stat	buf_stat;     /* structure decrivant status de fichier          */
-   unsigned char *Header;     /* entete du fichier gdb 	                        */
-   int taille_entete;	      /* taille de l'entete	                        */
-   int temp;                  /* zone temporaire pour ecriture                  */
-   char extens[5];            /* extension recherchee                           */
-   int Min_nbcol;             /* nombre de colonnes minimums                    */
-   char *type_image;          /* type code+ordre rangement des octets ds entete */
-
-    extens[0]='\0';
-    if (typ_grille == 'B')
-    {
-        Min_nbcol = 9;  
-	strcpy(extens,".gdb");
-
-/******************************************************************/
-/* Verification que les trois plans sont demandes		  */
-/* 	-> plan1 : grille pour les decalages le long des lignes   */
-/*	-> plan2 : grille pour les decalages le long des colonnes */
-/*	-> plan3 : grille pour les indices de confiance		  */
-/******************************************************************/
-      if (*nb_can != 3)
-      {
-	image1 = NULL;
- 	sprintf ( CAI_ERREUR , 
-		"Une image GDB doit contenir trois plans");
-	goto ERREUR;
-       }
-     }
-     else
-     {
-/******************************************************************/
-/* Verification que les deux plans sont demandes		  */
-/* 	-> plan1 : grille pour les decalages le long des lignes   */
-/*	-> plan2 : grille pour les decalages le long des colonnes */
-/******************************************************************/
-      if (*nb_can != 2)
-      {
-	image1 = NULL;
- 	sprintf ( CAI_ERREUR , 
-		"Une image GDR doit contenir deux plans");
-	goto ERREUR;
-       }
-	strcpy(extens,".gdr");
-        Min_nbcol = 14;  
-
-     }
- 
-/**************************************************************/   
-/* Verification que le nombre minimum de colonnes est demande */
-/**************************************************************/
-    if ((*nb_col)< Min_nbcol)
-    {
-	image1 = NULL;
- 	sprintf ( CAI_ERREUR , 
-		"Une image doit contenir au moins %d colonnes",Min_nbcol);
-	goto ERREUR;
-
-    }
-    taille_entete = (*nb_col)*(*nboct_pix);
-   
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-    image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-    
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_creation");
-     goto ERREUR;
-   }
-
-/*.................................................
-   Constitution du nom du fichier entete et verification qu'il
-   n'existe pas deja
-  .................................................*/
-
-   nom_fic[0]='\0';
-   if ((long)strlen(repert)!= 0)
-   {
-       sprintf(nom_fic,"%s/%s%s",repert,nom_image,extens);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s%s",nom_image,extens);
-    }
-   
-   retour = stat ( nom_fic , &buf_stat );
-   if ( retour == 0 )
-   { 
-	sprintf ( CAI_ERREUR , "L'image %s GRILLE existe \n" , nom_image );
-	goto ERREUR;
-   }
-
-/*......................................................
-  Ouverture du fichier entete en ecriture 
-  Ecriture du contenu
-  ..........................................................*/
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : modifications fopen binaire pour PC/NT         */
-/*****************************************************************************/
-  fic = fopen(nom_fic,"wb");
-  if (fic == NULL)
-  {
-      sprintf(CAI_ERREUR,"Erreur: Creation fichier %s impossible\n",nom_fic);
-      goto ERREUR;
-   }
-   Header = (unsigned char *) calloc(taille_entete,sizeof( unsigned char));
-   if (Header == NULL)
-   {
-      sprintf(CAI_ERREUR,"Erreur alloc: Creation fichier %s impossible\n",
-				nom_fic);
-      goto ERREUR;
-   }
-   
-/*********************************************/
-/* ecriture du nombre de colonnes de l'image */
-/*********************************************/
-   memcpy(Header,nb_col , 4 );
-
-/*******************************************/
-/* ecriture du nombre de lignes de l'image */
-/*******************************************/
-   memcpy(&Header[4],nb_lig , 4 );
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications indications Big ou Little Endian */
-/*****************************************************************************/  
-	 
-/*****************************************/
-/* ecriture type de l'image dans la zone */
-/*    reservee au type de codage         */
-/*****************************************/
-   
-  /*....................................
-  test sur la machine de travail pour 
-         typer image en LE ou BE      
-  .....................................*/
-  
-  type_image = cai_test_pFpf();
-  
-
-
-/**************************************/
-/* ecriture type de codage de l'image */
-/**************************************/
-  if (*nboct_pix != 4)
-  {
-      sprintf ( CAI_ERREUR ,
-		 "Erreur : La grille foit etre codee en FLOAT\n");
-      goto ERREUR;
-   }
-
-  else if ( (*nboct_pix == 4) && (strncmp(type_image,"BE",2)==0) )
-  {
-        memcpy(&Header[8],"FLOA" , 4 );
-    	image1->NBOCT_PIX=4;
-        sprintf(image1->TYPE_COD,"FLOA");
-  }
-
-  else if ( (*nboct_pix == 4) && (strncmp(type_image,"LE",2)==0) )
-  {	
-	memcpy(&Header[8],"FLOL" , 4 );
-	image1->NBOCT_PIX=4;
-        sprintf(image1->TYPE_COD,"FLOL");
-   }
-   	
-
-/***********************/
-/* fin modifications   */
-/***********************/
-
-
-/***************************************************************/
-/* ecriture de l'entete ainsi constituee dans le fichier       */
-/***************************************************************/
-    retour = fwrite ( Header , taille_entete , 1 , fic );
-   free(Header);
-   if ( retour == 0 )
-   {
-      sprintf ( CAI_ERREUR ,
-		 "Erreur : ecriture entete impossible dans fichier %s\n",
-		  nom_fic );
-      goto ERREUR;
-   }
-
-/*************************************************/
-/* Fermeture du fichier                          */
-/*************************************************/
-
-   fclose ( fic );
-
-   num = open(nom_fic,O_RDWR|O_BINARY,PERMS); 
-   if (num == -1)
-   {
-
-     sprintf(CAI_ERREUR,"Erreur: Creation %s impossible\n",nom_fic);
-     goto ERREUR;
-   } 
-
-   for (i=0;i<*nb_can;i=i+1)
-   {
-     image1->ACCES_CANAL_INT[i]=num;
-     image1->POS_OCTET[i]=((i*(*nb_lig))+1)*(*nb_col)*image1->NBOCT_PIX;
-    }			 
-  return (image1);
-
-ERREUR :
-  return(NULL);
-}
-  
-/* 
-  Fin de l'operation cai_ouvre_creation_grilles
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_grilles                                  */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image GDB ou GDR           */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_lecture_canal_grilles(image1,           */       		      
-/* ------------------                        canal,premiere_ligne,           */
-/*                                           premiere_colonne,               */
-/*                                           nombre_lignes_lire ,            */
-/*                                           nombre_colonnes_lire,           */
-/*                                           pas_ligne ,pas_colonne,         */
-/*                 		             data_image )                    */
-/*									     */ 
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (int) : numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal_grilles (S) (CAI_OK_KO) : = CAI_KO si pb            */
-/*                                                 = CAI_OK si OK            */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_lecture_canal_grilles(CAI_IMAGE *image1 ,  
-                                    int *canal ,           
-    		                    int *premiere_ligne  ,   
-     		                    int *premiere_colonne,
-                                    int *nombre_lignes_lire ,
-                                    int *nombre_colonnes_lire,
-                                    int *pas_ligne ,          
-                                    int *pas_colonne,
-		                    unsigned char *data_image )        
-
-{
-
- int   num,i,j,k,kk;        /* variables de travail                          */
- long pt_oct,n;		    /* position courante dans le fichier image       */
- int no_oct;                /* numero du premier octet a lire                */
- int iret;                  /* indicateur d'erreur                           */
- int lig;                   /* indice de boucle sur les lignes               */
- int   oct_pix;             /* nb octets par pixels                          */
- long  nb_oct;              /* nb oct =1er octet a lire - position courante  */
- long  oct_lig;             /* nb oct. par ligne en considerant taille pixel */
- unsigned char *buf_lec;    /* buffer lecture d'une  ligne                   */
- unsigned char *deb,*pch;   /* pointeur chaine pour transfert  buffer sortie */
- unsigned char *data_image2;/* pointeur donnees image pour inversion octets  */
- int taille_image;          /* taille en octets de l'image                   */ 
- int Nb;
-
-
-/*...........................
-  Initialisations diverses
-  ..........................*/
-   iret=CAI_OK;
-   num=image1->ACCES_CANAL_INT[*canal-1];
-   oct_pix=image1->NBOCT_PIX;
-   taille_image = (*nombre_lignes_lire)*oct_pix*(*nombre_colonnes_lire);
-   data_image2 = NULL;
-   data_image2 = (unsigned char *) calloc(taille_image,sizeof(unsigned char));
-
-   if (data_image2 == NULL)
-   {
-      strcpy(CAI_ERREUR,"Erreur allocation memoire dans cai_lecture_canal");
-      iret=CAI_KO;
-      goto FIN;
-   }
-
-/*.............................................................*/
-/* verification si lecture non sous-echantillonnee par bandeau */
-/*.............................................................*/
-  if ((*nombre_colonnes_lire==image1->NB_COL)&&(*premiere_colonne==1)&&
-      (*pas_ligne==1)&&(*pas_colonne==1))
-  {
-       oct_lig=(*nombre_lignes_lire)*oct_pix*(image1->NB_COL);
-       pch=data_image;
-
-/*............................................
-	Recherche de la position courante dans le fichier
-  ............................................*/
-        pt_oct=lseek(num,0L,1);
-
-/*................................
-        Calcul du numero du 1er octet a lire
-  ....................................*/
-        lig=*premiere_ligne;  
-	no_oct=image1->POS_OCTET[*canal-1]+
-	          (lig-1)*image1->NB_COL*oct_pix;
-
-
-/*..................................
-        Saut d'octets pour etre positionne sur la ligne a lire
-  .......................................*/
-        nb_oct=(long)(no_oct-pt_oct);
-        lseek(num,nb_oct,1);
-
-/*...........................................
-        lecture des lignes completes
-  ................................................*/
-         n=read(num,pch,oct_lig);
- 
-         if (n<=0)
-         {
-             	iret=CAI_KO;
-             	strcpy(CAI_ERREUR,"Erreur lecture donnee image grille");
-	        goto FIN;
-
-         }
-
-   }
-   else
-   {
-	oct_lig=oct_pix*image1->NB_COL;
-
-/*..............................................
-        allocation de memoire pour lire une ligne image
- ............................................. */
-        buf_lec=NULL;
-      	buf_lec = (unsigned char *) calloc(oct_lig,sizeof(unsigned char));
-      	if (buf_lec == NULL)
-      	{
-     	 	iret=CAI_KO;
-      		strcpy(CAI_ERREUR,"Probleme allocation memoire");
-      	}
-      	else
-      	{
-/*....................
-        Initialisation
-  ......................*/
-            lig=*premiere_ligne;
-       	    i=1;
-            pch=data_image;
-
-/*.....................
-         Pour chaque ligne a lire
-  .......................................*/
-           while ((i <= *nombre_lignes_lire)&&(iret==CAI_OK))
-           {  
-/*............................................
-	    Recherche de la position courante dans le fichier
-  ............................................*/
-               pt_oct=lseek(num,0L,1);
-
-/*................................
-            Calcul du numero du 1er octet a lire
-  ....................................*/
-               
-	      no_oct=image1->POS_OCTET[*canal-1]+
-	          (lig-1)*image1->NB_COL*oct_pix;
-
-
-/*..................................
-            Saut d'octets pour etre positionne sur la ligne a lire
-  .......................................*/
-              nb_oct=(long)(no_oct-pt_oct);
-              lseek(num,nb_oct,1);
-
-/*...........................................
-            lecture d'une ligne image
-  ................................................*/
-              n=read(num,buf_lec,oct_lig);
- 
-              if (n<=0)
-              {
-             	iret=CAI_KO;
-             	strcpy(CAI_ERREUR,"Erreur lecture donnee image GRILLE");
-              }
-              else
-              { 
-/*......................................
-             Sauvegarde des donnees lues entenant compte du pas 
-             d'echantillonnage en colonne
-  ........................................*/           
-                 deb=buf_lec+(*premiere_colonne-1)*oct_pix;
-                 j=1;
-                 while (j <= *nombre_colonnes_lire)
-	         {  
-                	for (k=0;k<oct_pix;k=k+1)
-                	{
-                  	  *(pch+k)=*(deb+k);
-                 	}
-                 	j=j+1;
-                	 pch=pch+oct_pix;
-                	 deb=deb+(*pas_colonne*oct_pix);
-                  }   
-             
-              }
-              i=i+1;
-              lig=lig+(*pas_ligne);
-           }        
-          	    
-	   free(buf_lec);
-           buf_lec=NULL;
-      	}
-    }
-        
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications indications Big ou Little Endian */
-/*****************************************************************************/  
-  
-   Nb = taille_image/2;
-     
-   if ( (iret!= CAI_KO) && (image1->INV_OCTETS==1) )
-   {
-	
-	   /*modification ordre des 4 octets par pixel*/
-       	   swab( (void*)(data_image), (void*)(data_image2), taille_image);
-	   cai_inverser_tableau(data_image, data_image2,Nb);
-    }
-       
-/*************************/
-/*   fin modifications   */    
-/*************************/  
-  FIN:  
-   if (data_image2!= NULL) free(data_image2);
-  return(iret);
-}
-/*
-  Fin de l'operation cai_lecture_canal_grilles
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal_grilles                                 */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un canal d'une image gdb                  */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ecriture_canal_grilles(image1, canal,   */
-/* ------------------                                 premiere_ligne,        */
-/*                                                    nombre_lignes_ecrire,  */
-/*                                                    nombre_colonnes_ecrire,*/
-/*                 		                      data_image )           */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal                 (E) (int) : numero du canal a ecrire            */
-/*     premiere_ligne        (E) (int) : premiere ligne a ecrire ds l'image  */
-/*     nombre_lignes_ecrire  (E) (int) : nombre de lignes a ecrire           */
-/*     nombre_colonnes_ecrire(E) (int) : nombre de colonnes a ecrire         */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels ecris alloue et   */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_ecriture_canal_grilles    (S) (CAI_OK_KO) : = CAI_KO si pb        */
-/*                                                     = CAI_OK si OK        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_ecriture_canal_grilles (CAI_IMAGE *image1 ,  
-                                      int *canal ,           
-    		                      int *premiere_ligne  ,   
-                                      int *nombre_lignes_ecrire ,
-                                      int *nombre_colonnes_ecrire,
-		                      unsigned char *data_image )        
-
-{
-long	position_first_lig;	/* position de la 1ere ligne a ecrire    */
-long	position_courante;	/* position courante dans le fichier     */
-long	deplacement;		/* deplacement a effectuer               */
-unsigned char *buff_lig;	/* pointeur de travail  bandeau a ecrire */
-long	cr_write;		/* code retour de write                  */
-int num;                        /* descripteur de fichier                */
-int nboct_pix;			/* nombre d'octets par pixel             */
-int nboct_ecrire;		/* nb d'octets du bandeau a ecrire       */
-
-
-/* ................
-   Initialisations 
-  .................*/
-
-	num = image1->ACCES_CANAL_INT[*canal-1];
-	nboct_pix = image1->NBOCT_PIX;
-	position_first_lig = 0;
-	position_courante = 0;
-	deplacement = 0;
-	nboct_ecrire = 0;
-
-/********************************************************/
-/* Calcul de la position de la premiere ligne a ecrire 	*/ 
-/********************************************************/
-
-	position_first_lig = (long) ( image1->POS_OCTET[*canal-1] + 
- 		+ (*premiere_ligne - 1) * 
-		(*nombre_colonnes_ecrire) * nboct_pix );
-
-
-/********************************************************/
-/* Recuperation de la position courante			*/
-/********************************************************/
-
-	position_courante = lseek ( num , 0L , 1 );
-
-
-/********************************************************/
-/* Calcul du deplacement jusqu'a la 1ere ligne a ecrire	*/
-/********************************************************/
-
-	deplacement = position_first_lig - position_courante;
-
-/*******************************************************/
-/*	deplacement jusqu'a la premiere ligne a ecrire*/
-/*******************************************************/
-
-	lseek ( num , deplacement , 1 ); 
-
-/***********************************************/
-/*	poistion en debut de bandeau a ecrire  */
-/***********************************************/
-
-	buff_lig = data_image; 
-
-/********************************************************/
-/*	ecriture des lignes				*/
-/********************************************************/
-	nboct_ecrire = (*nombre_colonnes_ecrire)*nboct_pix*
-			(*nombre_lignes_ecrire);
-
-	cr_write = write ( num , buff_lig,nboct_ecrire);
-
-	if ( cr_write !=  nboct_ecrire)
-	{
-	   strcpy ( CAI_ERREUR , "Erreur ecriture canal image grille\n" );
-	   goto ERREUR;
-	}
- 
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-/* 
-  Fin de l'operation cai_ecriture_canal_grilles
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_grilles                                          */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format gdb  ou gdr         */
-/* -----     					   			     */
-/* Mise a Jour de l'entete si image ouverte en creation			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_grilles(typ_grille,image1)        */
-/* ------------------                                                        */
-/*									     */
-/*     typ_grille  (E) (char)     : type de grille B=Brute, R=rectifiee      */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_grilles    (S) (CAI_OK_KO) :   = CAI_KO si pb               */
-/*                                              = CAI_OK si OK               */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO  cai_ferme_grilles (char typ_grille,CAI_IMAGE *image1)
-
-{
-
- int iret;    			/* code retour de l'operation         */
- int i_can;   			/* indice du canal a fermer           */
- int num;     			/* descripteur du fichier a fermer    */
- unsigned char *Header;         /* entete du fichier gdb 	      */
- int taille_entete;		/* taille de l'entete a mettre a jour */
- long pt_oct,tempi;		/* position courante ds fichier image */
- int temp,i;                    /* variable temporaire                */
- char *type_image;              /* ordre rangement octets dans entete */
-
-
-/****************************/
-/* Initialisations diverses */
-/****************************/
-iret=CAI_OK;
-num=image1->ACCES_CANAL_INT[0];
-
-/*--------------------------------------------------*/
-/* Mise a jour de l'entete si ouverture en creation */
-/*--------------------------------------------------*/
-
-if (image1->MODE == CAI_ECRITURE)
-{
-   taille_entete = 46; 
-   Header = (unsigned char *) calloc(taille_entete,sizeof( unsigned char));
-   if (Header == NULL)
-   {
-      sprintf(CAI_ERREUR,
-		"Erreur alloc: Mise a jour entete grille impossible\n");
-      goto ERREUR;
-   }
- 
-   pt_oct=lseek(num,0L,0);
-
-/*******************************************************/
-/* ecriture nombre de colonnes		               */
-/*******************************************************/
-   temp = image1->NB_COL;
-   memcpy(Header,&temp , 4 );
-
-/*******************************************************/
-/* ecriture nombre de ligne			       */
-/*******************************************************/
-   temp = image1->NB_LIG;
-   memcpy(&Header[4],&temp , 4 );
-
-/*****************************************************************/
-/* ecriture du type de codage en fonctions de la taille du pixel */
-/* et du codage des Poids Forts, poids faibles                   */
-/*****************************************************************/
-   memcpy(&Header[8],image1->TYPE_COD , 4 );
-
-   tempi = write ( num,Header , 12 );
-   if ( tempi == 0 )
-   {
-      sprintf ( CAI_ERREUR ,
-       "Erreur : MAJ entete a la fermeture impossible ds fichier grille\n");
-      goto ERREUR;
-   }
-/***************************************************************/
-/* ecriture du numero de ligne du 1er point de la matrice      */
-/***************************************************************/
-   temp = image1->NUM_LIG_DEB;
-   memcpy(Header,&temp , 4 );
-   
-
-/***************************************************************/
-/* ecriture du numero de ligne du 1er point de la matrice      */
-/***************************************************************/
-   temp = image1->NUM_COL_DEB;
-   memcpy(&Header[4],&temp , 4 );
-   
-
-/***************************************************************/
-/* ecriture du pas de la grille le long des lignes             */
-/***************************************************************/
-   temp = image1->PAS_GRIL_LIG;
-   memcpy(&Header[8],&temp , 4 );
-   
-
-/***************************************************************/
-/* ecriture du pas de la grille le long des colonnes           */
-/***************************************************************/
-   temp = image1->PAS_GRIL_COL;
-   memcpy(&Header[12],&temp , 4 );
-  
-
-/***************************************************************/
-/* ecriture du decalage initial le long des lignes             */
-/***************************************************************/
-   temp = image1->DECAL_LIG;
-   memcpy(&Header[16],&temp , 4 );
-   
-
-/***************************************************************/
-/* ecriture du decalage initial le long des colonnes           */
-/***************************************************************/
-   temp = image1->DECAL_COL;
-   memcpy(&Header[20],&temp , 4 );
-   
-
-/******************************************************************/
-/* ecriture de la caracteristique de la grille si gdr (restituee) */  
-/******************************************************************/
-
-  if (typ_grille == 'R')
-  {
-    memcpy(&Header[24],image1->CAR_GRIL, 20 );
-      
-  }
-
-/***************************************************************/
-/* mise a jour de l'entete ainsi constituee dans le fichier    */
-/***************************************************************/
-   tempi = write ( num, Header , taille_entete );
-   free(Header);
-   if ( tempi == 0 )
-   {
-      sprintf ( CAI_ERREUR ,
-       "Erreur : MAJ entete a la fermeture impossible ds fichier grille\n");
-      goto ERREUR;
-   }
- }
-/*.............................................
-   Fermeture du fichier qui contient tous les canaux
-  .............................................*/
-  if (num>0) close(num);
-
-  return (iret);
-
-ERREUR:
-  return(CAI_KO);
-}
-
-/*
-  Fin de l'operation cai_ferme_grilles
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_grilles                                       */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stocke en gdb ou gdr        */
-/* -----     				       			             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_dest_ima_grilles(typ_grille,repertoire, */
-/* ------------------      				nom_ima)             */
-/* 									     */
-/*     typ_grille   (E) (char)     : type de grille B=Brute, R=rectifiee     */
-/*     repertoire   (E) (char *) : repertoire de l'image a detruire          */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_dest_ima_grilles (S) (CAI_OK_KO) : = CAI_KO si pb                 */
-/*                                            = CAI_OK si OK                 */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_dest_ima_grilles ( char typ_grille,char *repertoire , 
-                                 char *nom_ima )
-{
-int	i_can;			/* compteur de canaux */
-int     iret;                   /* code retour fonction fermetrue lecture */
-char	str_num_canal[3];	/* suffixe numero du canal */
-char	nom_fic_entete[1024];	/* nom du fichier entete a detruire */
-char    nom_ima_complet[1024];  /* repertoire + nom de l'image */
-char	nom_fic_canal[1024];	/* nom du fichier canal a detruire */
-
-int	cr_stat;		/* code retour de fonction status de fichier */
-struct stat buf_stat;		/* structure decrivant status de fichier */ 
-
-CAI_IMAGE   *image1;             /* structure ouverture image */
-int         nb_can;	        /* nombre de canaux de l'image */
-int         nboct_pix;		/* nombre d'octets par pixel image */
-int         nb_col;	        /* nombre de colonnes de l'image */
-int         nb_lig;             /* nombre de lignes de l'image */
-char        extens[5];          /* extension recherchee         */
-
-/*........................................
-   INITIALISATION et ouverture du repertoire choisi
-  .........................................*/
-   extens[0]='\0';
-   if (typ_grille=='B')
-	strcpy(extens,".gdb");
-   else
-	strcpy(extens,".gdr");	
-
-/************************************************/
-/* Constitution du nom du fichier d'entete	*/
-/************************************************/
-
-if ((long)strlen(repertoire)!=0)
-{
-  sprintf( nom_ima_complet, "%s/%s" ,repertoire,nom_ima);
-}
-else
-{
-  strcpy ( nom_ima_complet , nom_ima);
-}
-  sprintf(nom_fic_entete ,"%s%s", nom_ima_complet,extens);
-
-/************************************************/
-/* Destruction du fichier d'entete		*/
-/************************************************/
-
-cr_stat = stat ( nom_fic_entete , &buf_stat );
-if ( cr_stat == 0 )
-	unlink ( nom_fic_entete );
-
-
-return (CAI_OK);
-
-}
-/*
- Fin de l'operation cai_dest_ima_grilles
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_modifie_grilles                                  */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture-ecriture d'une image au format  */
-/* -----     gdb et de tous les fichiers qui la composent                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_modifie_grilles(typ_grille,      */
-/*  ---------------- 		                            nom_image,       */
-/*							    nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     typ_grille     (E) (char)   : type de grille B=Brute, R=restituee     */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_modifie_grilles (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_modifie_grilles(char typ_grille,char *repert,
-				     char *nom_image,
-				     int  *nb_can,
-				     int  *nboct_pix,
-				     int  *nb_col,
-				     int  *nb_lig)
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier         */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image    */ 
-   int  iret;			/* indicateur de retour ok ou pas              */
-   char nom_fic[1024];		/* nom du fichier en-tete		       */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence   */
-   int nbbit;			/* nb de bits par pixel du fichier en-tete     */
-   int retour;			/* retour de la fonction comparaison chaines   */ 
-   int i,num;			/* indice 				       */
-   char type_cod[5];		/* type de codage du pixel		       */
-   int temp;                    /* zone temporaire de lecture                  */
-   char extens[5];
-   char type_image[3];          /* type code+ordre rangement octets dans entete*/
-   char *type_machine;          /* ordre rangement octets machine de travail   */
-   char  buf[59];               /* buffer contenant entete image               */
-   int v;                       /* comparaison type machine-type image         */
-   char *v1;	                /* comparaison type image avec chaine vide     */
-   int nb_col2, nb_lig2;        /* variables intermediaires inversion octets   */ 
-   int temp2,nb;                /* zone temporaire de lecture                  */
-
-   /*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
- nb=2;
- *nb_can=0;
-
- *nb_lig=0;
-
- *nb_col=0;
-
- *nboct_pix=0;
- 
- iret=1;
-
- 
- type_machine = (char *) calloc(3,sizeof(char));
-   
- if (type_machine == NULL)
- {
-    iret=0;
-    strcpy(CAI_ERREUR,"Erreur allocation memoire dans cai_ouvre_modifie");
- }
-
- image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
- 
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
- if (image1==NULL)
- {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_modifie");
- }
- else
- {
-   extens[0]='\0';
-   if (typ_grille == 'B')
-      strcpy(extens,".gdb");
-   else
-      strcpy(extens,".gdr");
-      
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long)strlen(repert)!= 0)
-   {
-       sprintf(nom_fic,"%s/%s%s",repert,nom_image,extens);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s%s",nom_image,extens);
-   }
-
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : modifications fopen binaire pour PC/NT         */
-/*****************************************************************************/
-   fic_in=fopen(nom_fic,"rb");
-   if (fic_in==NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur ouverture fichier entete GRILLE");
-    }
-   else
-   {
-
-    
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications indications Big ou Little Endian */
-/*****************************************************************************/  
-   
-   /*..................................
-   recuperation infos completes format.gdb 
-  ......................................*/ 
-    
-   if (typ_grille =='B')
-   	fread(buf,36,1,fic_in);
-	
-/*..................................
-   recuperation infos completes format.gdr 
-  ......................................*/ 
-   else fread(buf,56,1,fic_in);
-    
-   
-/*..................................
-   recuperation du type de codage des pixels 
-  ......................................*/
-	memcpy(type_cod,&buf[8],4);
-	
-        if (strncmp(type_cod,"FLOA",4) ==0)
-	{
-    	   image1->NB_BITS_PIX=32;
-    	   image1->NBOCT_PIX=4;
-	   sprintf(image1->COD_PIX,"R4");
-           strcpy(type_image,"BE");
-           sprintf(image1->TYPE_COD,"FLOA");
-	}
-	
-	else if (strncmp(type_cod,"FLOL",4) ==0)
-	{
-	   image1->NB_BITS_PIX=32;
-    	   image1->NBOCT_PIX=4;
-	   sprintf(image1->COD_PIX,"R4");
-           strcpy(type_image,"LE");
-           sprintf(image1->TYPE_COD,"FLOL");
-	}
-	
-	else 
-	{
-	  iret=0;
-     	  sprintf(CAI_ERREUR,"Type de codage GRILLE non reconnu : %s",type_cod);
-        }
-	
-	*nboct_pix = image1->NBOCT_PIX;
-              
-/*..................................
-   determination ordre de rangement 
-   des octets sur machine de travail
-  ......................................*/   
-   
-   	type_machine = cai_test_pFpf();  
- 
- /*..................................
-   determination des autres infos 
-   en fonction inversion
-  ......................................*/  
-   
-	v = strncmp(type_machine,type_image,2);
-	v1 = strrchr(type_image,'E');
-	  	  		  	  	
-/*..................................
-   recuperation du nombre de colonne 
-  ......................................*/
-	memcpy(nb_col,&buf[0],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) &&  (v1!=NULL) ) 
-	{	
-		swab( (void*)nb_col, (void*)&nb_col2,4 );
-		cai_inverser_tableau((short *)nb_col, (short *)&nb_col2,nb);
-	}
-
-/*..................................
-   recuperation du nombre de lignes 
-  ......................................*/
-	memcpy(nb_lig,&buf[4],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) && (v1!=NULL) )
-	{
-		swab( (void*)nb_lig, (void*)&nb_lig2,4 );
-		cai_inverser_tableau((short *)nb_lig, (short *)&nb_lig2,nb);
-	}	      
-/*.....................................................................
-   recuperation du numero de ligne du 1er point de la matrice 
-  .....................................................................*/
-        
-	memcpy(&temp,&buf[12],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) &&  (v1!=NULL) ) 
-	{	
-		swab( (void*)&temp, (void*)&temp2,4 );
-		cai_inverser_tableau((short *)&temp,(short *) &temp2,nb);
-	}
-  
-	image1->NUM_LIG_DEB = temp;
-/*.....................................................................
-   recuperation du numero de colonne du 1er point de la matrice 
-  .....................................................................*/
-	       
-	memcpy(&temp,&buf[16],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) &&  (v1!=NULL) ) 
-	{	
-		swab( (void*)&temp, (void*)&temp2,4 );
-		cai_inverser_tableau((short *)&temp,(short *) &temp2,nb);
-	}
-	
-	image1->NUM_COL_DEB = temp;
-
-/*.....................................................................
-   recuperation du pas de la grille le long des lignes 
-  .....................................................................*/
-	
-	       
-	memcpy(&temp,&buf[20],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) &&  (v1!=NULL) ) 
-	{	
-		swab( (void*)&temp, (void*)&temp2,4 );
-		cai_inverser_tableau((short *)&temp, (short *)&temp2,nb);
-	}
-	
-	image1->PAS_GRIL_LIG = temp;
-
-/*.....................................................................
-   recuperation du pas de la grille le long des colonnes  
-   .....................................................................*/
-	
-	       
-	memcpy(&temp,&buf[24],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) &&  (v1!=NULL) ) 
-	{	
-		swab( (void*)&temp, (void*)&temp2,4 );
-		cai_inverser_tableau((short *)&temp,(short *) &temp2,nb);
-	}
-	
-	image1->PAS_GRIL_COL = temp;
-
-/*.....................................................................
-   recuperation du decalage initial le long des lignes 
-  .....................................................................*/
-	
-	       
-	memcpy(&temp,&buf[28],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) &&  (v1!=NULL) ) 
-	{	
-		swab( (void*)&temp, (void*)&temp2,4 );
-		cai_inverser_tableau((short *)&temp, (short *)&temp2,nb);
-	}
-	
-	image1->DECAL_LIG = temp;
-
-/*.....................................................................
-   recuperation du decalage initial le long des colonnes  
-   .....................................................................*/
-		       
-	memcpy(&temp,&buf[32],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) &&  (v1!=NULL) ) 
-	{	
-		swab( (void*)&temp, (void*)&temp2,4 );
-		cai_inverser_tableau((short *)&temp, (short *)&temp2,nb);
-	}
-	
-	image1->DECAL_COL = temp;
-
-/*.....................................................................
-   recuperation de la caracteristique de la grille si .gdr
-.....................................................................*/
-        if (typ_grille == 'R')
-        {
-	    memcpy(image1->CAR_GRIL,&buf[36],20);
-            *nb_can = 2;
-        }
-        else
-	    *nb_can = 3;
-     }
-
-/************************/
-/*  fin modifications   */
-/************************/   
-   
-
-/*..................................
-   Fermeture du fichier 
-  ......................................*/
-   if (fic_in!=NULL) fclose(fic_in);
-
-   if (iret !=0)
-   {
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-
-     nom_fic[0]='\0';
-     nom_fic_canal[0]='\0';
-
-     if ((long)strlen(repert)!= 0)
-     {
-       sprintf(nom_fic_canal,"%s/%s%s",repert,nom_image,extens);
-      }
-      else
-      {
-       sprintf(nom_fic_canal,"%s%s",nom_image,extens);
-      }
-  
-     num=open(nom_fic_canal,O_RDWR|O_BINARY,0);
-     if (num!= -1)
-     {
-
-       for (i=0;i<*nb_can;i=i+1)
-       {
-           sscanf(nom_image,"%s",image1->NOM_FIC_CAN);
-           sscanf(nom_image,"%s",image1->NOM_UTIL_CAN);
-            image1->ACCES_CANAL_INT[i]=num;
-           image1->POS_OCTET[i]=((i*(*nb_lig))+1)*(*nb_col)*image1->NBOCT_PIX;
-        }
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications indications Big ou Little Endian */
-/*****************************************************************************/  
-	
-        if ( (v!=0) && (v1!=NULL) )
-	{
-	   image1->INV_OCTETS =1;
-	}
-	else
-	{
-	   image1->INV_OCTETS =0;
-	}
-	
-/***********************/
-/*  fin modifications  */        
-/***********************/
-      }
-      else
-         iret=0;
-    }
-  }
-  if (iret == 0)
-  {
-	return (NULL);
-   }
-  else
-  {
-      return(image1);
-   }
-
-}
-/* 
-   Fin de l'operation cai_ouvre_modifie_grilles
-*/
-
-
-
diff --git a/Utilities/CAI/cai_dll/src/cai_hdf.c b/Utilities/CAI/cai_dll/src/cai_hdf.c
deleted file mode 100755
index ae8bff03e6..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_hdf.c
+++ /dev/null
@@ -1,1779 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_hdf16.c                                                   */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format hdf                                        */ 
-/*		Seuls l'acces aux Scientific Data Set est possible, code en  */
-/*		8bits non signes ou 16 bits non signes                       */
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CISI)                                   */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    Octobre 1996                                        */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V2                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 3.3 : DM : optimisation du sous-echantillonnage           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.0 : DM : possibilite de traiter des images en R4 et R8  */
-/*			   flottant simple et double precision               */
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 : FA : Rajout des tests sur les retours d'allocation  */
-/*			   memoire                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications pour compatibilite HP64bits      */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : test sur  fclose  pour PC/LINUX                */
-/*****************************************************************************/
-/* MOD : VERSION : 4.8 : FA : pb sur le sous-echantillonnage-prise en compte */
-/*			   du nombre d'octets par pixel pour ssech en lignes */
-/*****************************************************************************/
-/* MOD : VERSION : 5.0 : DM : Identification ds l'entete des SDS par le nom  */
-/*			   ou par le numero indifferemment.                  */
-/*****************************************************************************/
-/* MOD : VERSION : 5.0 : DM : Prise en compte  images codées I4 en lecture   */
-/*****************************************************************************/
-/* MOD : VERSION : 5.0 : DM : Remplacer les appels systemes pour renommer un */
-/*                            fichier par la commande C rename               */
-/*****************************************************************************/
-/* MOD : VERSION : 5.1 : DM : Prise en compte en lecture des images codées en*/
-/*                            8, 16 et 32 bits signés                        */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte des I2,I4,UI2,UI4 et R8       */
-/*                             en lecture et ecriture                        */
-/*****************************************************************************/
-
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-# include <stdio.h>
-# include <string.h>
-# include <unistd.h>
-# include <sys/types.h>
-# include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-# include <errno.h>
-
-#define _CAI_IMAGE
-#define IN_CAI_HDF
-
-# include "cai_image.h"
-# include "hdf.h"
-/*# include "mfhdf.h"*/
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header: cai_hdf.c,v 1.10 01/05/31 10:47:25 cmf Exp $";
-
-
-extern char *getenv();
-
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_hdf16                                        */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images au format hdf                    */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_ima_hdf16(repert,tab_ima)           */
-/* -----------------                                                         */
-/*                                                                           */
-/*     repert       (E) (char *)   : repertoire a explorer		     */
-/*     tab_ima      (S) (char ***) : pointeur sur tableau des images listees */
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_ima_hdf16       (S) (int)     : = -1 repertoire inexistant  */                                    /*					       = > 0 nombre d'images listees */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-long int cai_liste_ima_hdf16 (char *repert,
-		       char ***tab_ima)
-
-{
-
-   DIR *dirp;		/* pointeur sur structure ouverture repertoire */
-   struct dirent *dp;   /* structure resultat de la fonction readdir   */
-   char *pch0,*pch1;    /* pointeurs sur chaine de caracteres          */
-   char car;            /* variable de travail                         */  
-   int nb_ima;          /* nombre d'images hdf identifiees             */
-   long int i;          /* indice de boucle                            */
-   long int ll,dif;     /* variables de travail                        */
-   char blanc;          /* caractere blanc                             */
-
-/*........................................
-   INITIALISATION et ouverture du repertoire choisi
-  .........................................*/
-   nb_ima=0;
-   dirp=opendir(repert);
-   blanc = ' ';
-
-   if(dirp!=NULL)
-   {
-
-
-/*......................................
-
-   premiere passe pour comptabiliser les images du format donne
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE HDF
-      (EXTENSION =.hdf)
-   ..........................................*/
-   while((dp=readdir(dirp))!=NULL)
-   {
-     pch0=strstr(dp->d_name,".hdf");
-     if (pch0 != NULL)
-     {
-        ll = (long int)strlen(dp->d_name);
-        dif = (long int)(dp->d_name-pch0);
-        dif=labs(dif);
-        pch1=pch0+4;
-
-/*****************************************************************************/
-/* MOD:VERSION:3.3:DM lecture de toutes les images dont l'extension commence */
-/*		    par .hdf. Cette modif permet de prendre en compte .hdf16 */
-/*****************************************************************************/
-/*ligne supprimee        if (((ll-4)==dif)||((*pch1)==blanc)) */
-	     nb_ima=nb_ima+1;
-     
-     }
-   }
-    (void)closedir(dirp);
-
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES DU FORMAT HDF
-     ......................................*/
-    *tab_ima = (char **) calloc(nb_ima,sizeof(char *));
-    for (i=0;i<nb_ima;i=i+1)
-      (*tab_ima)[i]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE HDF
-      (EXTENSION =.hdf)
-   SI C`EST LE CAS,STOCKAGE DANS LA LISTE
-   ..........................................*/
-   dirp=opendir(repert);
-
-   nb_ima=0;
-   while((dp=readdir(dirp))!=NULL)
-   {
-     pch0=strstr(dp->d_name,".hdf");
-     if (pch0 != NULL)
-     {
-        ll = strlen(dp->d_name);
-        dif = (long int)(dp->d_name-pch0);
-        dif=labs(dif);
-        pch1=pch0+4;
-/*****************************************************************************/
-/* MOD:VERSION:3.3:DM lecture de toutes les images dont l'extension commence */
-/*		    par .hdf. Cette modif permet de prendre en compte .hdf16 */
-/*****************************************************************************/
-
-/* ligne supprimee       if (((ll-4)==dif)||((*pch1)==blanc))
-        {*/
-            *pch0='\0';
-            strcpy((*tab_ima)[nb_ima],dp->d_name);
-	    nb_ima=nb_ima+1;
-/*  ligne supprimee        }*/
-     
-     }
-   }
-
-    (void)closedir(dirp);
-
-   }
-   else
-   {
-    /* repertoire inexistant */
-     nb_ima=-1;
-     }
-    return(nb_ima);
-
-}
-
-/* Fin de l'operation cai_liste_ima_hdf16
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_hdf16                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image au format hdf       */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :     CAI_IMAGE *cai_ouvre_lecture_hdf16 (nom_image,     */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels              */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_hdf16     (S) (CAI_IMAGE *)  : = NULL si pb         */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_lecture_hdf16(char *repert,
-				 char *nom_image,
-				 int  *nb_can,
-				 int  *nboct_pix,
-				 int  *nb_col,
-				 int  *nb_lig)
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   char label[80];		/* contient un enregistrement du fichier    */
-   int nbbit;			/* nb de bits par pixel du fichier en-tete  */
-   int retour,icr;		/* retour de fonctions                      */ 
-   char *deb,*deb1;		/* pointeurs sur chaine de caracteres       */
-   int num;		        /* indice 				    */
-   int nbplan;			/* nombre de canaux dans le fichier en-tete */
-   int plan;                    /* indice de boucle sur les canaux          */  
-   char nom_plan[100];          /* nom des fichiers plan                    */ 
-   int Ref,lon,Alpha;
-   int sds_id,status,attribute,num_type,nb_dim;
-   char name[MAX_NC_NAME];
-   int val_dim[MAX_VAR_DIMS];
-   int nbdataset,nfileattribut,retn,nbits;
-   char refSDS[50], sdsname[50];
-   int ind,isds;
-   int sds_trouve;
-
-   /*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-
-   *nb_lig=0;
-
-   *nb_col=0;
-
-   *nboct_pix=0;
- 
-   fic_in = NULL;
-
-   nbplan=0;
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1: FA Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_lecture");
-     goto ERREUR;
-    }
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-      sprintf(nom_fic,"%s/%s.hdf",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.hdf",nom_image);
-   }
-
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   fic_in=NULL;
-   fic_in=fopen(nom_fic,"r");
-   if (fic_in==NULL)
-   {
-/*****************************************************************************/
-/* MOD:VERSION:3.3:DM on essaie avec .hdf16 comme extension (vieille version)*/
-/* Cette modif permet de prendre en compte .hdf16 du QIV                     */
-/*****************************************************************************/
-     strcat(nom_fic,"16");
-     fic_in=fopen(nom_fic,"r");
-     if (fic_in==NULL)
-     {
-         strcpy(CAI_ERREUR,"Erreur ouverture fichier entete HDF");
-         goto ERREUR;
-      }
-   }
-/*................................................
-   Pour chaque plan image lecture du nom du fichier correspondant
-   et de la position du SDS dans le fichier
-  ..................................................*/
-  fgets(label,80,fic_in);
-  retour=strncmp(label,"PLANES_ID",9);
-  if (retour!=0)
-  {
-	strcpy(CAI_ERREUR,
-	      "Informations incoherentes ligne PLANES_ID ");
-        goto ERREUR;
-   }
-   icr=2;
-   retour=1;
-   deb = image1->NOM_FIC_CAN;
-   deb1= image1->NOM_UTIL_CAN;
-
-   while ((icr==2)&&(retour!=0))
-   {
-      icr = fscanf(fic_in,"%s %s",nom_plan,refSDS);
-      if (icr==1) 
-      {
-	Ref=0;
-        icr=2;
-      }
-      retour=strncmp(nom_plan,"NB_BITS_PIX",11);
-      if ((icr==2)&&(retour!=0))
-      {  
-        retour=strncmp(nom_plan,"COMMENT",7);
-        if ((icr==2)&&(retour!=0))
-        {  
-
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-          nom_fic[0]='\0';
-          nom_fic_canal[0]='\0';
-
-          if ((long int)strlen(repert)!=0)
-          {
-            sprintf(nom_fic_canal,"%s/%s",repert,nom_plan);
-           }
-          else
-          {
-            sscanf(nom_plan,"%s",nom_fic_canal);
-          }
-/*.......................................
-       test sur l'existence du fichier plan 
-       et ouverture du fichier plan
-  .......................................*/
-          num=SDstart(nom_fic_canal,DFACC_RDONLY);
-          if (num!= -1)
-          {
-              sscanf(nom_plan,"%s",deb);
-  	      deb=deb+100;
-              sscanf(nom_plan,"%s",deb1);
-  	      deb1=deb1+100;
-              image1->ACCES_CANAL_INT[nbplan]=num;
-
-/*         Recuperation des informations generales */
-/*.................................................*/
-              retn=SDfileinfo(num,&nbdataset,&nfileattribut);
-/*****************************************************************************/
-/* MOD : VERSION : 5.0 : DM : Identification ds l'entete des SDS par le nom  */
-/*			   ou par le numero indifferemment.                  */
-/*****************************************************************************/
-/* Verification si SDS identifie par son nom ou par son numero */
-              lon=strlen(refSDS ); 
-              Alpha=0;
-              for (ind=0;ind<lon;ind++)
-              {
-                  if (isalpha(refSDS[ind])!=0) Alpha=Alpha+1;
-              }
-              if (Alpha !=0)
-              {
-/*              Identification par nom de SDS boucle sur les SDS */
-/*              pour recuperer le numero de SDS                  */
-                sds_trouve = 0;
-                isds =0;
-                while ((isds<nbdataset)&&(sds_trouve==0))
-                {
-                   sds_id = SDselect(num,isds);
-/*                 Recuperation des infos du SDS                 */
-                  status = SDgetinfo(sds_id,sdsname,
-				        &nb_dim,val_dim,
-					&num_type,&attribute);
-
-    		   if ( strcmp ( sdsname, refSDS ) == 0 )
-    		   {
- /*      recuperer le numero de SD correspondant et repartir sur la version 
-        precedente*/
-                     Ref=isds;
-                     sds_trouve = 1;
-    		   }
-                   else
-			isds++;
-
-                 }
-                 if (sds_trouve == 0)
-                 {
-		   sprintf( CAI_ERREUR ,"Nom de SDS non trouve %s\0",refSDS);
-                   goto ERREUR;
-                 }
-               }
-               else
-               {
-                  Ref=atoi(refSDS);
-
-/*         Selection du Scientific Data Set contenant les donnees */
-/*................................................................*/
-                  sds_id = SDselect(num,Ref);
-                  status = SDgetinfo(sds_id,sdsname,
-				        &nb_dim,val_dim,
-					&num_type,&attribute);
-              }
-/*******************************************************/
-/* FIN MOD : VERSION : 5.0 : DM : Identification  SDS  */
-/*******************************************************/            
-              image1->POS_OCTET[nbplan]=sds_id;
-
-/*         Verification que tous les plans ont la meme taille */
-/*...........................................................*/
-              if (nbplan!=0)
-              {
-	        if ((*nb_lig!=val_dim[0])||(*nb_col!=val_dim[1]))
-                {            
-		   sprintf( CAI_ERREUR ,"Plans de taille differentes !\0");
-                   goto ERREUR;
-                }
-              }
-              *nb_lig=val_dim[0];
-              *nb_col=val_dim[1];
-              nbbit= num_type;  
-
-              nbplan=nbplan+1;
-
-           }
-           else
-           {
- 	     sprintf ( CAI_ERREUR ,
-	       "Le fichier plan %s HDF n'existe pas\n" , nom_fic_canal );
-             goto ERREUR;
-           }
-        }
-        else
-          icr=99;
-      }
-   }
-/*....................................
-  Decodage du nombre d'octets par pixel
-  ......................................*/
-  if ((retour==0)&&(icr!=99))
-  {
-    if (icr==2) 
-       image1->NB_BITS_PIX=Ref;
-    else
-       image1->NB_BITS_PIX=0;
-/*....................................
-  Decodage du commentaire
-  ......................................*/
-     icr = fscanf(fic_in,"%s",label);
-     retour=strncmp(label,"COMMENT",7);
-     if (retour==0)
-		icr=99;
-  }
-  else
-       image1->NB_BITS_PIX=0;
-
-
-
-/*....................................
-  Decodage du commentaire
-  ......................................*/
-  if (icr==99)
-     icr = fscanf(fic_in,"%s",image1->COMMENT);
-  else
-      strcpy(image1->COMMENT,"Pas de commentaire\0");
-
-/*...................................*/
-/* Initialisation du nombre de plans */
-/*...................................*/
-  *nb_can=nbplan;
-
-/*..................................
-   Initialisation du nombre d'octets par pixel
-  ........................................................*/
-/*****************************************************************************/
-/* MOD : VERSION : 5.1 : DM : Prise en compte en lecture des images codées en*/
-/*                            8, 16 et 32 bits signes                        */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte des I2,I4,UI2,UI4 et R8       */
-/*                             en lecture et ecriture                        */
-/*****************************************************************************/
-
-   if (nbbit==DFNT_INT8)
-   {
-	*nboct_pix=1;
-        if (image1->NB_BITS_PIX==0)
-           image1->NB_BITS_PIX=8;
-	sprintf(image1->COD_PIX,"OCT");
-   }
-   else if (nbbit==DFNT_UINT8)
-   {
-	*nboct_pix=1;
-        if (image1->NB_BITS_PIX==0)
-           image1->NB_BITS_PIX=8;
-	sprintf(image1->COD_PIX,"UOCT");
-
-   }
-   else if (nbbit==DFNT_INT16)
-   {
-	*nboct_pix=2;
-        if (image1->NB_BITS_PIX==0)
-           image1->NB_BITS_PIX=16;
-	sprintf(image1->COD_PIX,"I2");
-   }
-   else if (nbbit==DFNT_UINT16)
-   {
-	*nboct_pix=2;
-        if (image1->NB_BITS_PIX==0) image1->NB_BITS_PIX=16;
-	sprintf(image1->COD_PIX,"UI2");
-   }
-
-/* MOD : 5.0 Prise en compte des images codées en I4 non signe*/
-   else if (nbbit==DFNT_INT32)
-   {
-	*nboct_pix=4;
-        if (image1->NB_BITS_PIX==0)
-           image1->NB_BITS_PIX=32;
-	sprintf(image1->COD_PIX,"I4");
-   }
-   else if (nbbit==DFNT_UINT32)
-   {
-	*nboct_pix=4;
-        if (image1->NB_BITS_PIX==0)
-           image1->NB_BITS_PIX=32;
-	sprintf(image1->COD_PIX,"UI4");
-   }
-   else if (nbbit==DFNT_FLOAT)
-   {
-	*nboct_pix=4;
-        if (image1->NB_BITS_PIX==0)
-           image1->NB_BITS_PIX=32;
-	sprintf(image1->COD_PIX,"R4");
-
-   }
-   else if (nbbit==DFNT_DOUBLE)
-   {
-	*nboct_pix=8;
-        if (image1->NB_BITS_PIX==0)
-           image1->NB_BITS_PIX=64;
-	sprintf(image1->COD_PIX,"R8");
-
-   }
-   else
-   {
- 	 sprintf ( CAI_ERREUR ,
-	   "Type de donnees non supporte par la Couche Acces Image\n" );
-         goto ERREUR;
-    }
-/*..................................
-   Fermeture du fichier 
-  ......................................*/
-   if (fic_in!=NULL) fclose(fic_in);
-
-/*......................
-    sortie normale 
-  ....................*/
-      return(image1);
-
-ERREUR:
-
-/*......................
-    sortie degradee 
-  ....................*/
-   if (fic_in!=NULL)    fclose(fic_in);
-   for (plan=0;plan<nbplan;plan++)
-   {
-     num=image1->ACCES_CANAL_INT[plan];
-     if (num!=-1) retn=SDend(num);
-   }
-   return (NULL);
-
-}
-
-/* 
-   Fin de l'operation cai_ouvre_lecture_hdf16
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_hdf16                                   */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format hdf et de tous les fichiers qui la composent          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :    CAI_IMAGE *cai_ouvre_creation_hdf16 (nom_image,     */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            label)           */
-/*                                                                           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_hdf16     (S) (CAI_IMAGE *) : =NULL si pb          */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_creation_hdf16(char *repert,
-				  char *nom_image,
-				  int  *nb_can,
-				  int  *nboct_pix,
-				  int  *nb_col,
-				  int  * nb_lig,
-				  char *label)
-
-{
-   FILE *fic;		        /* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   int retour;			/* retour de fonction 			    */ 
-   char car[4];			/* indice du canal traite     		    */
-   int num;			/* indice 				    */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   int plan;                    /* indice de boucle sur les canaux          */
-   char nom_plan[100];          /* nom des fichiers plan                    */ 
-   int dims[2],rank,sds_id; 
-   int nbbit,Ref,Coher;
-   char NomSDS[80];  
-   int reconnaissance_type;            
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1: FA Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_creation");
-     goto ERREUR;
-   }
-
-   NomSDS[0]='\0';
-   Ref=0;
-
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  Maj du  TYPE lorsque l'utilisateur le         */
-/*                                  precise dans le param  "label"           */
-/*****************************************************************************/
-/* Verification si type de codage reconnu dans le label */
-    reconnaissance_type = cai_istyp_connu(label);
-    if (reconnaissance_type == -1)
-    {
-     	if (*nboct_pix==1)
-       		 nbbit=DFNT_UINT8;
-      	else if (*nboct_pix==2)
-       		 nbbit=DFNT_UINT16;
-      	else if (*nboct_pix==4)
-        	nbbit=DFNT_FLOAT;
-      	else if (*nboct_pix==8)
-        	nbbit=DFNT_DOUBLE;
-     }
-     else
-     {
-/* Verification de coherence entre le nb d'octets par pixel et le type donne */
-        Coher=1;
-        if(*nboct_pix == 1) 
-        {
-	  nbbit=DFNT_INT8;
-	  if (reconnaissance_type > 1) Coher=0;  
-          else if (reconnaissance_type ==1)  nbbit=DFNT_UINT8;
-        }    
-	else if(*nboct_pix == 2) 
-        {
-          if (reconnaissance_type ==2 )  nbbit=DFNT_INT16;
-          else if (reconnaissance_type ==3 )  nbbit=DFNT_UINT16;
-          else Coher=0;  	  
-        }  	  
-	else if(*nboct_pix == 4) 
-        {
-          if (reconnaissance_type ==4 )  nbbit=DFNT_INT32;
-          else if (reconnaissance_type ==5 )  nbbit=DFNT_UINT32;
-          else if (reconnaissance_type ==6 )  nbbit=DFNT_FLOAT;
-          else Coher=0;  	  
-        }  
-	else if(*nboct_pix == 8) 
-        {
-	  if (reconnaissance_type == 7)  nbbit=DFNT_DOUBLE;
-	  else Coher = 0;
-        }
-        else 
-	   Coher = 0;
-        if (Coher == 0) 
-        {      	
-	  sprintf(CAI_ERREUR,"incoherence entre TYPE et Nb bits par pixels\n");
-	  goto ERREUR;
-        }    
-    }
-/*.................................................
-   Constitution du nom du fichier entete et verification qu'il
-   n'existe pas deja
-  .................................................*/
-
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-      sprintf(nom_fic,"%s/%s.hdf",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.hdf",nom_image);
-   }
-   
-   retour = stat ( nom_fic , &buf_stat );
-   if ( retour == 0 )
-   { 
-	sprintf ( CAI_ERREUR , "L'image %s HDF existe \n" , nom_image );
-	goto ERREUR;
-   }
-
-/*......................................................
-  Ouverture du fichier entete en ecriture 
-  Ecriture du contenu
-  ..........................................................*/
-  fic = fopen(nom_fic,"w");
-  if (fic == NULL)
-  {
-      sprintf(CAI_ERREUR,"Erreur: Creation fichier %s impossible\n",nom_fic);
-      goto ERREUR;
-   }
-
-  fprintf ( fic , "PLANES_ID\n" );
-/*...............................................................
-  Pour chaque canal de l'image,constitution du nom de fichier correspondant
-  Verification qu'il n'existe pas deja
-  Ouverture du fichier en ecriture
-  .................................................................*/
-
-  for (plan=0;plan<*nb_can;plan++)
-  {
-     nom_plan[0]='\0';
-     nom_fic_canal[0]='\0';     
-     sprintf(nom_plan,"%s.b%d",nom_image,plan);
-     fprintf ( fic , "%s %d\n" , nom_plan,Ref );
-     if ((long int)strlen(repert)!=0)
-     {
-	sprintf(nom_fic_canal,"%s/%s",repert,nom_plan);
-
-     }
-     else
-     {
-    	 sprintf(nom_fic_canal,"%s",nom_plan);
-     }
-        retour = stat ( nom_fic_canal , &buf_stat );
-
-     if ( retour == 0 )
-     { 
-	sprintf ( CAI_ERREUR , "L'image %s HDF existe \n" , nom_fic_canal );
-	goto ERREUR;
-     }
-/* ouverture du fichier */
-     num=SDstart(nom_fic_canal,DFACC_CREATE);
-     if (num == -1)
-     {
-        sprintf(CAI_ERREUR,"Erreur: Creation %s impossible\n",nom_fic_canal);
-        goto ERREUR;
-      } 
-      image1->ACCES_CANAL_INT[plan]=num;
-
-/* ouverture et creation du SDS */
-      rank=2;
-      dims[0]=*nb_lig;
-      dims[1]=*nb_col;
-    
-      if((long int)strlen(repert)!=0)
-        strcpy(NomSDS,label);
-      else
-        strcpy(NomSDS,"SDS1");
-
-      sds_id=SDcreate(num,NomSDS,nbbit,rank,dims);
-
-      image1->POS_OCTET[plan]=sds_id;
-  }
-  retour=fprintf ( fic , "NB_BITS_PIX\n");
-  retour=fprintf ( fic , "%d\n" , (*nboct_pix)*8 );
-
-  retour=fprintf ( fic , "COMMENT\n");
-  retour=fprintf ( fic , "%s\n" , label );
-  if (retour == 0)
-  {
-      sprintf(CAI_ERREUR,"Erreur: Ecriture %s impossible\n",nom_fic);
-      goto ERREUR;
-   }
-
-/*************************************************/
-/* Fermeture du fichier                          */
-/*************************************************/
-
-  fclose ( fic );
-  return (image1);
-
-ERREUR :
-   return(NULL);
-}
-  
-/* 
-  Fin de l'operation cai_ouvre_creation_hdf16
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_hdf16                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image hdf                  */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_lecture_canal_hdf16(image1, canal,      */       		      /* ------------------                            premiere_ligne,             */
-/*                                               premiere_colonne,           */
-/*                                               nombre_lignes_lire ,        */
-/*                                               nombre_colonnes_lire,       */
-/*                                               pas_ligne ,pas_colonne,     */
-/*                 		                data_image )                 */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (int) : numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal_hdf16     (S) (CAI_OK_KO) : = CAI_KO si pb          */
-/*                                                 = CAI_OK si OK            */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO cai_lecture_canal_hdf16(CAI_IMAGE *image1 ,  
-                                int *canal ,           
-    		          	int *premiere_ligne  ,   
-     		          	int *premiere_colonne,
-                         	int *nombre_lignes_lire ,
-                          	int *nombre_colonnes_lire,
-                          	int *pas_ligne ,          
-                          	int *pas_colonne,
-		          	unsigned char *data_image )        
-{
-
- int   num,n,ilig,k,j;      /* variables de travail                          */
- int iret;                  /* indicateur d'erreur                           */
- int edges[2],strides[2],start[2];
- unsigned char *buf,*deb,*pch;
- int nboct;
-
-/*...........................
-  Initialisations diverses
-  ..........................*/
-
-   iret=CAI_OK;
-   num=image1->POS_OCTET[(*canal)-1];
-
-    if ((*pas_ligne==1)&&(*pas_colonne==1))
-    {
-       start[0]=(*premiere_ligne)-1;
-       start[1]=(*premiere_colonne)-1;
-       edges[0]=*nombre_lignes_lire;
-       edges[1]=*nombre_colonnes_lire;
-       strides[0]=*pas_ligne;
-       strides[1]=*pas_colonne;
-       n= SDreaddata(num,start,strides,edges,(VOIDP *)data_image);
-       if (n<0)
-       {
-             iret=CAI_KO;
-             strcpy(CAI_ERREUR,"Erreur lecture donnee image HDF");
-        }
-    }
-    else
-    {
-	nboct = (*nombre_lignes_lire)*(*pas_ligne)*
-				(image1->NB_COL)*(image1->NBOCT_PIX);
-	buf = (unsigned char *) calloc(nboct,sizeof(unsigned char));
-/*...........................................
-            lecture des lignes images
-  ................................................*/
-
-       start[0]=(*premiere_ligne)-1;
-       start[1]=0;
-       edges[0]=(((*nombre_lignes_lire)-1)*(*pas_ligne))+1;
-       edges[1]=image1->NB_COL;
-       strides[0]=1;
-       strides[1]=1;
-       n= SDreaddata(num,start,strides,edges,(VOIDP *)buf);
-       if (n<0)
-       {
-             iret=CAI_KO;
-             strcpy(CAI_ERREUR,"Erreur lecture donnee image HDF");
-        }
-        pch=data_image;
-
-/*......................................
-             Sauvegarde des donnees lues entenant compte du pas 
-             d'echantillonnage en colonne
-  ........................................*/  
-        for (ilig=0;ilig<*nombre_lignes_lire;ilig++)
-        {
-/*****************************************************************************/
-/* MOD : VERSION : 4.8 : FA : pb sur le sous-echantillonnage-prise en compte */
-/*			   du nombre d'octets par pixel pour ssech en lignes */
-/*****************************************************************************/
-
-             deb=buf+((ilig*(image1->NB_COL)*(*pas_ligne))+
-			((*premiere_colonne)-1))*image1->NBOCT_PIX;
-             j=1;
-             while (j <= (*nombre_colonnes_lire))
-	     {  
-               for (k=0;k<image1->NBOCT_PIX;k=k+1)
-                {
-                  *(pch+k)=*(deb+k);
-                 }
-              pch=pch+image1->NBOCT_PIX;
-              j=j+1;
-              deb=deb+((*pas_colonne)*image1->NBOCT_PIX);
-             }   
-         }
-          if (buf!=NULL) free(buf);
-    }
- 
-   return(iret);
- }
-
-/*
-  Fin de l'operation cai_lecture_canal_hdf16
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal_hdf16                                   */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un canal d'une image hdf                  */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      CAI_OK_KO cai_ecriture_canal_hdf16(image1, canal, */       		      /* ------------------                                 premiere_ligne,        */
-/*                                                    nombre_lignes_ecrire,  */
-/*                                                    nombre_colonnes_ecrire,*/
-/*                 		                      data_image )           */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal                 (E) (int) : numero du canal a ecrire            */
-/*     premiere_ligne        (E) (int) : premiere ligne a ecrire ds l'image  */
-/*     nombre_lignes_ecrire  (E) (int) : nombre de lignes a ecrire           */
-/*     nombre_colonnes_ecrire(E) (int) : nombre de lignes a ecrire           */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels ecris alloue et   */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_ecriture_canal_hdf16        (S) (CAI_OK_KO) : = CAI_KO si pb      */
-/*                                                     = CAI_OK si OK        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ecriture_canal_hdf16 (CAI_IMAGE *image1 ,  
-                                      int *canal ,           
-    		                      int *premiere_ligne  ,   
-                                      int *nombre_lignes_ecrire ,
-                                      int *nombre_colonnes_ecrire,
-		                      unsigned char *data_image )
-{
-
-int num,n;                        /* descripteur de fichier                */
-int edges[2],strides[2],start[2];
-
-
-/* initialisations */
-
-     num = image1->POS_OCTET[*canal-1];
-     start[0]=(*premiere_ligne)-1;
-     start[1]=0;
-     edges[0]=*nombre_lignes_ecrire;
-     edges[1]=*nombre_colonnes_ecrire;
-     n= SDwritedata(num,start,NULL,edges,(VOIDP *)data_image);
-     if (n<0)
-     {
-             strcpy(CAI_ERREUR,"Erreur lecture donnee image HDF");
-	     return (CAI_KO);
-      }
-
-return (CAI_OK);
-
-}
-
-/* 
-  Fin de l'operation cai_ecriture_canal_hdf16
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_hdf16                                            */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format hdf et de           */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_hdf16(image1)                     */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_hdf16        (S) (CAI_OK_KO) :   = CAI_KO si pb             */
-/*                                              = CAI_OK si OK               */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ferme_hdf16 (CAI_IMAGE *image1)
-
-{
- int iret;    /* code retour de l'operation      */
- int i_can;   /* indice du canal a fermer        */
- int num;     /* descripteur du fichier a fermer */
-
- iret=CAI_OK;
-/*.............................................
-   Fermeture de tous les canaux
-  .............................................*/
- for (i_can=0;i_can<image1->NB_CANAUX;i_can=i_can+1)
- {
-   num = image1->POS_OCTET[i_can];
-   iret=SDendaccess(num);
-   num=image1->ACCES_CANAL_INT[i_can];
-   iret=SDend(num);
- }
-  return (iret);
-}
-
-/*
-  Fin de l'operation cai_ferme_hdf16
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_hdf16                                         */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stocke en hdf et de         */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_dest_ima_hdf16(format,nom_ima)          */       		      /* ------------------                                                        */
-/*     format       (E) (char *) : format de l'image a detruire              */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_dest_ima_hdf16     (S) (CAI_OK_KO) : = CAI_KO si pb               */
-/*                                            = CAI_OK si OK                 */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO cai_dest_ima_hdf16 (char *repertoire , 
-                     	      char *nom_ima )
-
-{
-int	i_can;			/* compteur de canaux                        */
-long    iret;                   /* code retour fonction fermetrue lecture    */
-char	str_num_canal[3];	/* suffixe numero du canal                   */
-char	nom_fic_entete[1024];	/* nom du fichier entete a detruire          */
-char    nom_ima_complet[1024];  /* repertoire + nom de l'image               */
-char	nom_fic_canal[1024];	/* nom du fichier canal a detruire           */
-int	cr_stat;		/* code retour de fonction status de fichier */
-struct stat buf_stat;		/* structure decrivant status de fichier     */ 
-CAI_IMAGE   *image1;            /* structure ouverture image                 */
-int         nb_can;	        /* nombre de canaux de l'image               */
-int         nboct_pix;		/* nombre d'octets par pixel image           */
-int         nb_col;	        /* nombre de colonnes de l'image             */
-int         nb_lig;             /* nombre de lignes de l'image               */
-char    ptr_nom_fic_can[100*CAI_NB_MAX_CAN];  /* nom fichier canal traite    */
-char	nom_fichier[1024];	/* nom du fichier entete a detruire	     */
-char    chemin[1024];           /* repertoire + "/"			     */
-char *ptr,*deb;
-
-/************************************************/
-/* Constitution du nom du fichier d'entete	*/
-/************************************************/
-chemin[0]='\0';
-ptr_nom_fic_can[0]='\0';
-
-if ((long int)strlen(repertoire)!=0)
-{
-  sprintf(nom_ima_complet,"%s/%s",repertoire,nom_ima);
-  sprintf ( chemin ,"%s/", repertoire );
-}
-else
-{
-  strcpy ( nom_ima_complet , nom_ima);
-  strcpy ( chemin , "./");
-}
-  strcpy(nom_fic_entete , nom_ima_complet);
-  strcat ( nom_fic_entete , ".hdf\0" );
-
-/************************************************/
-/* Extraction des caracteristiques de l'image 	*/
-/* et noms des fichiers plans                   */
-/* du fichier entete par l'appel a la fonction	*/
-/* cai_ouvre_lecture_image			*/
-/************************************************/
-  image1 = cai_ouvre_lecture_image ( nom_ima_complet,"HDF", &nb_can ,
-				     &nboct_pix ,&nb_col, &nb_lig );
-	
-  if ( image1 == NULL) goto ERREUR;
-
-  ptr = ptr_nom_fic_can;
-  deb = image1->NOM_FIC_CAN;
-  for ( i_can = 0 ; i_can < nb_can ; i_can++ )
-  {
-      sscanf(deb,"%s",ptr);
-      deb=deb+100;
-      ptr=ptr+100;
-  }
-
-  ptr = ptr_nom_fic_can;
-
- iret=cai_ferme_image(image1);
- image1=NULL;
-/************************************************/
-/* Destruction des fichiers radiometrie		*/
-/************************************************/
-
-  for ( i_can = 0 ; i_can < nb_can ; i_can++ )
-  {
-	strncpy ( nom_fic_canal , ptr , 100 );
-	nom_fic_canal[99] = '\0';
-	strcpy ( nom_fichier , chemin );
-	strcat ( nom_fichier, nom_fic_canal );
-	nom_fichier[strlen(chemin)+strlen(nom_fic_canal)+1] = '\0';
-	cr_stat = stat ( nom_fichier , &buf_stat );
-	if ( cr_stat == 0 )
-		unlink ( nom_fichier );
-	ptr = ptr + 100;
-  }
-
- 
-/************************************************/
-/* Destruction du fichier d'entete		*/
-/************************************************/
-cr_stat = stat ( nom_fic_entete , &buf_stat );
-if ( cr_stat == 0 )
-	unlink ( nom_fic_entete );
-else
-{
-/*****************************************************************************/
-/* MOD:VERSION:3.3:DM on essaie avec .hdf16 comme extension (vieille version)*/
-/* Cette modif permet de prendre en compte .hdf16 du QIV                     */
-/*****************************************************************************/
-     strcat(nom_fic_entete,"16");
-     cr_stat = stat ( nom_fic_entete , &buf_stat );
-     if ( cr_stat == 0 )
-	unlink ( nom_fic_entete );
-}
- 
-return (CAI_OK);
-ERREUR:
-  return((CAI_OK_KO)NULL);
-}
-/*
- Fin de l'operation cai_dest_ima_hdf16
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_rename_fichiers_hdf16                                  */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    permet de modifier l'extension des plans d'une image HDF        */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_rename_fichiers_hdf16(image1,TabExtens) */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     TabExtens   (E) (CAI_EXTENS *) : tableau des nouvelles extensions     */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_rename_fichiers_hdf16(CAI_IMAGE *image1,CAI_EXTENS *TabExtens)
-
-{
-  int Can;		/* indice de boucle sur les canaux */
-  char fichierE[1024];  /* fichier a traiter               */
-  char fichierS[1024];  /* nouveau nom du fichier          */
-  FILE *fic;		/* pointeur descripteur fichier    */
-  int pt_oct;		/* position courante ds le fichier */
-  int *Ref;             /* Reference du SDS des fichiers   */
-  char label[80];       /* contient un enregist  fichier   */
-  char repert[1024];    /* repertoire de stockage image    */
-  char image[1024];     /* nom de l'image a ouvrir         */
-  char *pch,*deb;       /* pointeurs de travail            */
-  long nb1,nb2;		/* indice de longueur significative*/
-  char car;		/* variable de travail             */
-  int icr,tempo;        /* code retour fonction            */
-  CAI_CHAINE *NomIma;
-
-/* Separation du repertoire de stockage de l'image et du nom propre */
-
-      repert[0]='\0';
-      image[0]='\0';
-      car='/';
-      pch=(char *)strrchr(image1->NOM_IMAGE,car);
-      if (pch == NULL) 
-      {
-         /* le repertoire est celui courant */
-           sscanf(image1->NOM_IMAGE,"%s",image);
-           car='.';
-           pch=(char *)strrchr(image,car);
-           if (pch != NULL)
-               *pch='\0';        
-      }
-      else
-      {
-  
-           nb1=(long int)(pch)-(long int)(image1->NOM_IMAGE);
-           strncpy(repert,image1->NOM_IMAGE,nb1);
-           repert[nb1]='\0';
-           deb=image1->NOM_IMAGE+nb1+1;
-           nb2=strlen(image1->NOM_IMAGE)-(nb1+1);
-	   strncpy(image,deb,nb2);
-           image[nb2]='\0';
-           car='.';
-           pch=(char *)strrchr(image,car);
-           if (pch != NULL)
-               *pch='\0';          
-
-     }
-        
-/* Ouverture du fichier d'entete */
-
-   fichierE[0]='\0';
-   sprintf(fichierE,"%s.hdf",image1->NOM_IMAGE);
-   fic = fopen(fichierE,"r+");
-   if (fic == NULL)
-   {
-/*****************************************************************************/
-/* MOD:VERSION:3.3:DM on essaie avec .hdf16 comme extension (vieille version)*/
-/* Cette modif permet de prendre en compte .hdf16 du QIV                     */
-/*****************************************************************************/
-         strcat(fichierE,"16");
-         fic = fopen(fichierE,"r+");
-         if (fic == NULL)
-         {
-
-            sprintf(CAI_ERREUR,
-	       "Erreur: Modification fichier %s impossible\n",fichierE);
-            goto ERREUR;
-         }
-   }
-
-/* Lecture des references de chaque plan */
-
-  Ref = (int *) calloc(image1->NB_CANAUX,sizeof(int));
-  fgets(label,80,fic);
-  icr=strncmp(label,"PLANES_ID",9);
-  if (icr!=0)
-  {
-	strcpy(CAI_ERREUR,
-	      "Informations incoherentes ligne PLANES_ID ");
-        goto ERREUR;
-   }
-
-/*................................................*/
-/* Rename de chaque bande spectrale si necessaire */
-/*................................................*/
-  NomIma = NULL;
-  NomIma = (CAI_CHAINE *)calloc(image1->NB_CANAUX,sizeof(CAI_CHAINE));
-  if (NomIma == NULL) goto ERREUR;
-  for(Can=0;Can<image1->NB_CANAUX;Can++)
-  {
-    icr = fscanf(fic,"%s%d",label,&tempo);
-    if (icr==1) 
-	Ref[Can]=0;
-    else
-       Ref[Can]=tempo;
-    if (TabExtens != NULL)
-    {
-      fichierE[0]='\0';
-      fichierS[0]='\0';  
-      sprintf(fichierE,"%s/%s",repert,label);
-      sprintf(fichierS,"%s%s",image1->NOM_IMAGE,TabExtens[Can]);
-/*****************************************************************************/
-/* MOD : VERSION : 5.0 : DM : Remplacer les appels systemes pour renommer un */
-/*                            fichier par la commande C rename               */
-/*****************************************************************************/
-      rename(fichierE,fichierS);
-    }
-    else
-    {
-	strcpy(NomIma[Can],label);
-    }
-  }   
-
-/* Modification du fichier d'entete */
-   rewind(fic);
-   fprintf ( fic , "PLANES_ID\n" );
-   for(Can=0;Can<image1->NB_CANAUX;Can++)
-   {
-       tempo=Ref[Can];
-    if (TabExtens != NULL)
-       fprintf ( fic , "%s%s %d\n",image,TabExtens[Can],tempo);
-    else
-       fprintf ( fic , "%s %d\n",NomIma[Can],tempo);
-
-
-   }
-  fprintf ( fic , "NB_BITS_PIX\n");
-  fprintf ( fic , "%d\n" , image1->NB_BITS_PIX );
-
-  icr=fprintf ( fic , "COMMENT\n");
-  icr=fprintf ( fic , "%s\n" , image1->COMMENT );
-
-  fclose ( fic );
-
-  if (NomIma != NULL) free(NomIma);
-
-  return(CAI_OK);
-
-ERREUR :
-  return(CAI_KO);
-}
-/*
- Fin de l'operation cai_rename_fichiers_hdf16
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_modifie_hdf16                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture-ecriture d'une image au format  */
-/* -----     hdf et de tous les fichiers qui la composent                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :     CAI_IMAGE *cai_ouvre_modifie_hdf16 (nom_image,     */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_modifie_hdf16     (S) (CAI_IMAGE *)  : = NULL si pb         */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_modifie_hdf16(char *repert,
-				 char *nom_image,
-				 int  *nb_can,
-				 int  *nboct_pix,
-				 int  *nb_col,
-				 int  *nb_lig)
-
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   char label[80];		/* contient un enregistrement du fichier    */
-   int nbbit;			/* nb de bits par pixel du fichier en-tete  */
-   int retour,icr;		/* retour de fonctions                      */ 
-   char *deb,*deb1;		/* pointeurs sur chaine de caracteres       */
-   int num;			/* indice 				    */
-   int nbplan;			/* nombre de canaux dans le fichier en-tete */
-   int plan;                    /* indice de boucle sur les canaux          */
-   char nom_plan[100];          /* nom des fichiers plan                    */ 
-   int Ref;
-   int sds_id,status,attribute,num_type,nb_dim;
-   char name[MAX_NC_NAME];
-   int val_dim[MAX_VAR_DIMS];
-   int nbdataset,nfileattribut,retn,nbits;
-
-   /*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-
-   *nb_lig=0;
-
-   *nb_col=0;
-
-   *nboct_pix=0;
- 
-   fic_in = NULL;
-
-   nbplan=0;
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1: FA Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
- if (image1==NULL)
- {
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_modifie");
-     goto ERREUR;
- }
-
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-      sprintf(nom_fic,"%s/%s.hdf",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.hdf",nom_image);
-    }
-
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   fic_in=fopen(nom_fic,"r");
-   if (fic_in==NULL)
-   {
-/*****************************************************************************/
-/* MOD:VERSION:3.3:DM on essaie avec .hdf16 comme extension (vieille version)*/
-/* Cette modif permet de prendre en compte .hdf16 du QIV                     */
-/*****************************************************************************/
-     strcat(nom_fic,"16");
-     fic_in=fopen(nom_fic,"r");
-     if (fic_in==NULL)
-     {
-         strcpy(CAI_ERREUR,"Erreur ouverture fichier entete HDF");
-         goto ERREUR;
-      }
-    }
-
-/*................................................
-   Pour chaque plan image lecture du nom du fichier correspondant
-   et de la position du SDS dans le fichier
-  ..................................................*/
-  fgets(label,80,fic_in);
-  retour=strncmp(label,"PLANES_ID",9);
-  if (retour!=0)
-  {
-	strcpy(CAI_ERREUR,
-	      "Informations incoherentes ligne PLANES_ID ");
-        goto ERREUR;
-   }
-   icr=2;
-   retour=1;
-   deb = image1->NOM_FIC_CAN;
-   deb1= image1->NOM_UTIL_CAN;
-
-   while ((icr==2)&&(retour!=0))
-   {
-      icr = fscanf(fic_in,"%s%d",nom_plan,&Ref);
-      if (icr==1) 
-      {
-	Ref=0;
-        icr=2;
-      }
-      retour=strncmp(nom_plan,"NB_BITS_PIX",11);
-      if ((icr==2)&&(retour!=0))
-      {  
-        retour=strncmp(nom_plan,"COMMENT",7);
-        if ((icr==2)&&(retour!=0))
-        {  
-
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-          nom_fic[0]='\0';
-          nom_fic_canal[0]='\0';
-
-          if ((long int)strlen(repert)!=0)
-          {
-            sprintf(nom_fic_canal,"%s/%s",repert,nom_plan);
-            }
-          else
-          {
-            sscanf(nom_plan,"%s",nom_fic_canal);
-          }
-/*.......................................
-       test sur l'existence du fichier plan 
-       et ouverture du fichier plan
-  .......................................*/
-          num=SDstart(nom_fic_canal,DFACC_RDWR);
-          if (num!= -1)
-          {
-              sscanf(nom_plan,"%s",deb);
-  	      deb=deb+100;
-              sscanf(nom_plan,"%s",deb1);
-  	      deb1=deb1+100;
-              image1->ACCES_CANAL_INT[nbplan]=num;
-
-/*         Recuperation des informations generales */
-/*.................................................*/
-              retn=SDfileinfo(num,&nbdataset,&nfileattribut);
-
-/*         Selection du Scientific Data Set contenant les donnees */
-/*................................................................*/
-              sds_id = SDselect(num,Ref);
-              image1->POS_OCTET[nbplan]=sds_id;
-
-/*         Recherche des attributs (taille, nb oct pix) */
-/*......................................................*/
-
-              status = SDgetinfo(sds_id,name,&nb_dim,val_dim,
-					&num_type,&attribute);
-
-/*         Verification que tous les plans ont la meme taille */
-/*...........................................................*/
-              if (nbplan!=0)
-              {
-	        if ((*nb_lig!=val_dim[0])||(*nb_col!=val_dim[1]))
-                {            
-		   sprintf( CAI_ERREUR ,"Plans de taille differentes !\0");
-                   goto ERREUR;
-                }
-              }
-              *nb_lig=val_dim[0];
-              *nb_col=val_dim[1];
-              nbbit= num_type;  
-
-              nbplan=nbplan+1;
-
-           }
-           else
-           {
- 	     sprintf ( CAI_ERREUR ,
-	       "Le fichier plan %s HDF n'existe pas\n" , nom_fic_canal );
-             goto ERREUR;
-           }
-        }
-        else
-          icr=99;
-      }
-   }
-/*....................................
-  Decodage du nombre d'octets par pixel
-  ......................................*/
-  if ((retour==0)&&(icr!=99))
-  {
-    if (icr==2) 
-       image1->NB_BITS_PIX=Ref;
-    else
-       image1->NB_BITS_PIX=0;
-/*....................................
-  Decodage du commentaire
-  ......................................*/
-     icr = fscanf(fic_in,"%s",label);
-     retour=strncmp(label,"COMMENT",7);
-     if (retour==0)
-		icr=99;
-  }
-  else
-       image1->NB_BITS_PIX=0;
-
-
-
-/*....................................
-  Decodage du commentaire
-  ......................................*/
-  if (icr==99)
-     icr = fscanf(fic_in,"%s",image1->COMMENT);
-  else
-      strcpy(image1->COMMENT,"Pas de commentaire\0");
-
-/*...................................*/
-/* Initialisation du nombre de plans */
-/*...................................*/
-  *nb_can=nbplan;
-
-/*..................................
-   Initialisation du nombre d'octets par pixel
-  ........................................................*/
-/* MOD : VERSION : 5.2 : DM :  prise en compte des I2,I4,UI2,UI4 et R8       */
-/*                             en lecture et ecriture                        */
-/*****************************************************************************/
-
-   if (nbbit==DFNT_INT8)
-   {
-	*nboct_pix=1;
-        if (image1->NB_BITS_PIX==0)
-           image1->NB_BITS_PIX=8;
-	sprintf(image1->COD_PIX,"OCT");
-   }
-   else if (nbbit==DFNT_UINT8)
-   {
-	*nboct_pix=1;
-        if (image1->NB_BITS_PIX==0)
-           image1->NB_BITS_PIX=8;
-	sprintf(image1->COD_PIX,"UOCT");
-
-   }
-   else if (nbbit==DFNT_INT16)
-   {
-	*nboct_pix=2;
-        if (image1->NB_BITS_PIX==0)
-           image1->NB_BITS_PIX=16;
-	sprintf(image1->COD_PIX,"I2");
-   }
-   else if (nbbit==DFNT_UINT16)
-   {
-	*nboct_pix=2;
-        if (image1->NB_BITS_PIX==0)
-           image1->NB_BITS_PIX=16;
-	sprintf(image1->COD_PIX,"UI2");
-   }
-
-/* MOD : 5.0 Prise en compte des images codées en I4 non signe*/
-   else if (nbbit==DFNT_INT32)
-   {
-	*nboct_pix=4;
-        if (image1->NB_BITS_PIX==0)
-           image1->NB_BITS_PIX=32;
-	sprintf(image1->COD_PIX,"I4");
-   }
-   else if (nbbit==DFNT_UINT32)
-   {
-	*nboct_pix=4;
-        if (image1->NB_BITS_PIX==0)
-           image1->NB_BITS_PIX=32;
-	sprintf(image1->COD_PIX,"UI4");
-   }
-   else if (nbbit==DFNT_FLOAT)
-   {
-	*nboct_pix=4;
-        if (image1->NB_BITS_PIX==0)
-           image1->NB_BITS_PIX=32;
-	sprintf(image1->COD_PIX,"R4");
-
-   }
-   else if (nbbit==DFNT_DOUBLE)
-   {
-	*nboct_pix=8;
-        if (image1->NB_BITS_PIX==0)
-           image1->NB_BITS_PIX=64;
-	sprintf(image1->COD_PIX,"R8");
-
-   }
-   else
-   {
- 	 sprintf ( CAI_ERREUR ,
-	   "Type de donnees non supporte par la Couche Acces Image\n" );
-         goto ERREUR;
-    }
-
- /*..................................
-   Fermeture du fichier 
-  ......................................*/
-   if (fic_in!=NULL) fclose(fic_in);
-
-/*......................
-    sortie normale 
-  ....................*/
-      return(image1);
-
-ERREUR:
-
-/*......................
-    sortie degradee 
-  ....................*/
-   if (fic_in!=NULL)    fclose(fic_in);
-   for (plan=0;plan<nbplan;plan++)
-   {
-     num=image1->ACCES_CANAL_INT[plan];
-     if (num!=-1) retn=SDend(num);
-   }
-   return (NULL);
-
-}
-/* 
-   Fin de l'operation cai_ouvre_modifie_hdf16
-*/
-
diff --git a/Utilities/CAI/cai_dll/src/cai_inria.c b/Utilities/CAI/cai_dll/src/cai_inria.c
deleted file mode 100755
index 79e85bd2fc..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_inria.c
+++ /dev/null
@@ -1,1529 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_inria.c                                                   */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format inria                                      */
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CISI)                                   */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    fevrier 1995                                        */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V2                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 3.3 : DM:optimisation des acces                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.0 : DM: integration du module  ouverture en modification*/
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA: Rajout des tests sur les retours d'allocation    */
-/*			   memoire                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : FA : verification que l'image est codee sur un ou 2 */
-/*octets par pixel (contrainte du format)                                    */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications pour compatibilite HP64bits      */
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : modifications fopen binaire pour PC/NT         */
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : modifications  open binaire pour PC/NT         */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : test sur  fclose  pour PC/LINUX                */
-/*****************************************************************************/
-/* MOD : VERSION : 4.6 : FA: Rajout des tests sur les retours d'allocation   */
-/*			     memoire                                         */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : FA:  Correction  "PIXSIZE= %d bits\n"  au lieu de   */
-/*			       "PIXSIZE= bits\n" dans ouvre_creation         */
-/*****************************************************************************/
-
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-
-
-# include <stdio.h>
-# include <string.h>
-# include <unistd.h>
-# include <sys/types.h>
-#include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-# include <malloc.h>
-
-#define _CAI_IMAGE
-#define IN_CAI_INRIA
-
-# include "cai_image.h"
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header: cai_inria.c,v 1.13 01/05/31 10:47:04 cmf Exp $";
-
-extern char *getenv();
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_inria                                        */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images au format inria                  */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_ima_inria(repert,tab_ima)           */
-/* -----------------                                                         */
-/*                                                                           */
-/*     repert         (E) (char *)   : repertoire a explorer     	     */
-/*     tab_ima        (S) (char ***) : pointeur sur tableau  images listees  */
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_ima_inria     (S) (int)     : = -1 repertoire inexistant    */                                    /*					       = > 0 nombre d'images listees */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-long int cai_liste_ima_inria(char *repert,
-		       char ***tab_ima)
-
-{
-   DIR *dirp;		/* pointeur sur structure ouverture repertoire */
-
-struct dirent *dp;   /* structure resultat de la fonction readdir   */
-   char *pch0,*pch1;    /* pointeurs sur chaine de caracteres          */
-   char *pch2;          /* pointeurs sur chaine de caracteres          */
-   char car;            /* variable de travail                         */  
-   int nb_ima;          /* nombre d'images inria identifiees           */
-   int i;		/* indice de boucle                            */
-   char nom_prec[100];  /* contient le nom du dernier fichier inria vu */
-   char pch3[100];      /* permet le transfert du nom de fichier trouve*/
-
-/*........................................
-   initialisation et ouverture du repertoire
-  .........................................*/
-
-   nb_ima=0;
-
-   dirp=opendir(repert);
-
-   if(dirp!=NULL)
-   {
-
-
-/*......................................
-   premiere passe pour comptabiliser les images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE INRIA
-      (EXTENSION =.xs)
-     ..........................................*/
-
-    strcpy(nom_prec,"11");
-
-    while((dp=readdir(dirp))!=NULL)
-    {
-     car='.';
-     pch0=strrchr(dp->d_name,car);
-     if (pch0 != NULL)
-     {
-       car='x';
-       pch1=strrchr(dp->d_name,car);
-       if ((pch1 != NULL)&&(pch1==pch0+1))
-       {
-         car='s';
-         pch2=strrchr(dp->d_name,car);
-         if ((pch2 != NULL)&&(pch2==pch1+1))
-           {
-              *pch0='\0';
-              *pch1=' ';
-	      *pch2=' ';
-              pch2=pch2+1;
-	      *pch2=' ';
-              pch2=pch2+1;
-              *pch2=' ';
-	      pch2=pch2+1;
-	      *pch2='\0';
-              strcpy(pch3,dp->d_name);
-              i=strcmp(nom_prec,pch3);
-              if (i!=0)
-              {
-                 strcpy(nom_prec,pch3);
-	         nb_ima=nb_ima+1;
-
-              }
-           }
-         
-       }
-     }
-   }
-
-    (void)closedir(dirp);
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES DU FORMAT INRIA
-     ......................................*/
-    *tab_ima = (char **) calloc(nb_ima,sizeof(char *));
-    for (i=0;i<nb_ima;i=i+1)
-      (*tab_ima)[i]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE INRIA
-      (EXTENSION =.xs)
-      SI C'EST LE CAS STOCKAGE DE L'IMAGE DANS LA LISTE DES IMAGES INRIA
-   ..........................................*/
-  dirp=opendir(repert);
-
-   nb_ima=0;
-
-    strcpy(nom_prec,"11");
-
-    while((dp=readdir(dirp))!=NULL)
-    {
-     car='.';
-     pch0=strrchr(dp->d_name,car);
-     if (pch0 != NULL)
-     {
-       car='x';
-       pch1=strrchr(dp->d_name,car);
-       if ((pch1 != NULL)&&(pch1==pch0+1))
-       {
-         car='s';
-         pch2=strrchr(dp->d_name,car);
-         if ((pch2 != NULL)&&(pch2==pch1+1))
-           {
-              *pch0='\0';
-              *pch1=' ';
-	      *pch2=' ';
-              pch2=pch2+1;
-	      *pch2=' ';
-              pch2=pch2+1;
-              *pch2=' ';
-	      pch2=pch2+1;
-	      *pch2='\0';
-              strcpy(pch3,dp->d_name);
-              i=strcmp(nom_prec,pch3);
-              if (i!=0)
-              {
-                 strcpy(nom_prec,pch3);
-                 strcpy((*tab_ima)[nb_ima],dp->d_name);
-	         nb_ima=nb_ima+1;
-
-              }
-           }
-         
-       }
-     }
-   }
-    (void)closedir(dirp);
-
-   }
-   else
-   {
-     nb_ima=-1;
-   }
-
-    return(nb_ima);
-
-}
-/* Fin de l'operation cai_liste_ima_inria
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_inria                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image au format inria     */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :   CAI_IMAGE *cai_ouvre_lecture_inria (nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_inria   (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_lecture_inria(char *repert,
-				   char *nom_image,
-				   int  *nb_can,
-				   int  *nboct_pix,
-				   int  *nb_col,
-				   int  *nb_lig)
-{
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   long  iret,k,n;		/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];	/* nom du fichier canal a ouvrir	    */
-   char *deb,*deb1;		/* pointeurs sur chaine de caracteres       */
-   char car[3];			/* indice du canal traite     		    */
-   int i,num;	                /* indice 				    */
-   char *buf_lec ;              /* buffer lecture entete inria              */
-   int nb_bits;		        /* nombre de bits par pixels                */
-   char str_no;                 /* variable de lecture                      */
-   short int n1;		/* variable de travail de lecture           */
-
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
- 
-   *nb_lig=0;
-   *nb_col=0;
-   *nboct_pix=0;
-   *nb_can=0;
- 
-   iret=1;
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.6: FA Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_lecture");
-    }
-   else
-   {
-
-/*.......................................
-  INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-  ET LE NOM UTILISATEUR DE CHAQUE CANAL et ouverture
-  de ces fichiers
-  Recherche du nombre de canaux de l'image
-  .....................................................*/
-  
-  deb = image1->NOM_FIC_CAN;
-  deb1= image1->NOM_UTIL_CAN;
-
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-       sprintf(nom_fic,"%s/%s.xs",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.xs",nom_image);
-   }
-
-   for (i=0;i<50;i=i+1)
-   {
-         nom_fic_canal[0]='\0';
-         sscanf(nom_fic,"%s",nom_fic_canal);
-         sprintf(car,"%d",i);
-         strcat(nom_fic_canal,car);   
-         num=open(nom_fic_canal,O_RDONLY|O_BINARY,0);
-
-         if (num != -1)
-         {
-
-          if (*nb_can<CAI_NB_MAX_CAN)
-          {
-          sscanf(nom_image,"%s",deb);
-          strcat(deb,".xs");
-          strcat(deb,car);
-          deb=deb+100;
-          sscanf(nom_image,"%s",deb1);
-          strcat(deb1,".xs");
-          strcat(deb1,car);
-          deb1=deb1+100;
-          image1->ACCES_CANAL_INT[*nb_can]=num;
-	  *nb_can=*nb_can+1;
-
-
-          }
-        
-         }
-     }
-     if ((*nb_can) == 0)
-     {
-        iret = 0;
-     }
-     else
-     {
-/*...................................
-     Lecture du fichier entete
-  ............................................*/
-
-      buf_lec=(char *) calloc(256,sizeof(char));
-      if (buf_lec==NULL) 
-      {
-        iret=0;
-        strcpy(CAI_ERREUR,"Erreur allocation memoire dans cai_ouvre_lecture");
-      }
-      else
-      {
-
-     	num=image1->ACCES_CANAL_INT[0];
-
-     	k=read(num,buf_lec,256);
-     	if (k!=256)
-     	{
-       		iret=0;
-       		strcpy(CAI_ERREUR,"Erreur lecture entete Inria");
-    	 }
-    	 else
-     	 {
-/*.................................
-       Decodage de l'enregistrement (nouveu format inria)
-  .........................................*/
-        	if (buf_lec[10]=='4')
-        	{
-
-              		sscanf(&buf_lec[19],"%4d",nb_col);
-              		sscanf(&buf_lec[29],"%4d",nb_lig);
-	      		sscanf(&buf_lec[78],"%2d",&nb_bits);
-
-	      		/* le nombre recupere represente le nombre de */
-	      		/* bits ou le nombre d'octets codant un pixel */
-	      		/* cette information est transmise via le     */
-	      		/* parametre nboct_pix inutilise sur SUN   */
-	      		if ( (nb_bits==8) || (nb_bits==16) )
-	      			*nboct_pix = nb_bits/8;
-	      		else if ( (nb_bits==1) || (nb_bits==2) )
-				*nboct_pix =  nb_bits;
-              		image1->NB_BITS_PIX= nb_bits;
-              		for (i=0;i<*nb_can;i=i+1)
-              		{
-                   		image1->POS_OCTET[i]=1024; 
-               		}
-          	}                        
-         	else
-         	{
-/*.................................
-       Decodage de l'enregistrement (ancien format inria)
-  .........................................*/
-
-                 	lseek(num,0L,0);
-                 	n=read(num,(char*)&n1,2);
-                 	if (n<=0)
-	          	{
-        	    		 iret=0;
-          	    		 strcpy(CAI_ERREUR,
-					"Erreur lecture entete inria");
-        	  	}
-                 	*nb_col=(int)n1;
-
-                 	n=read(num,(char*)&n1,2);
-                 	if (n<=0)
-	          	{
-        	    		iret=0;
-          	     		strcpy(CAI_ERREUR,
-					"Erreur lecture entete inria");
-        	  	}
-                 	*nb_lig=(int)n1;
-
-                 	n=read(num,&str_no,1);
-                 	if (n<=0)
-	          	{
-        	     		iret=0;
-          	     		strcpy(CAI_ERREUR,
-					"Erreur lecture entete inria");
-        	  	}
-		  	nb_bits = (int)str_no;
-
-	      		/* le nombre recupere represente le nombre de */
-	      		/* bits ou le nombre d'octets codant un pixel */
-	      		/* cette information est transmise via le     */
-	      		/* parametre nboct_pix inutilise sur SUN   */
-	      		if ( (nb_bits==8) || (nb_bits==16) )
-	      			*nboct_pix = nb_bits/8;
-	      		else if ( (nb_bits==1) || (nb_bits==2) )
-				*nboct_pix = nb_bits;
-              
-              		for (i=0;i<*nb_can;i=i+1)
-              		{
-                  		 image1->POS_OCTET[i]=256;  
-              		} 
-        	}   
-        	if (*nboct_pix ==1)
-			sprintf(image1->COD_PIX,"OCT");
-        	else
-			sprintf(image1->COD_PIX,"I2");      
-      	 }
-      	free(buf_lec);        
-      }
-     }
-  }
-  if (iret == 0)
-  { 
-	return (NULL);
-   }
-   else
-   {
-	return (image1);
-   }
-
-}
-
-/* 
-   Fin de l'operation cai_ouvre_lecture_inria
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_inria                                   */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format inria et de tous les fichiers qui la composent        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_IMAGE *cai_ouvre_creation_inria  (nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            label)           */
-/*                                                                           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_inria   (S) (CAI_IMAGE *) : =NULL si pb            */
-/*                                                    = structure contenant  */
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_IMAGE *cai_ouvre_creation_inria(char *repert,
-				    char *nom_image,
-				    int  *nb_can,
-				    int  *nboct_pix,
-				    int  *nb_col,
-				    int  *nb_lig,
-				    char *label)
-
-{
-   FILE *fic;		        /* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   int retour;			/* retour de fonction 			    */ 
-   char car[2];			/* indice du canal traite     		    */
-   int i,num;			/* indice 				    */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   int i_oct,remplissage;       /* variables de travail                     */
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : FA : verification que l'image est codee sur un ou 2 */
-/*octets par pixel (contrainte du format)                                    */
-/*****************************************************************************/
-   if ((*nboct_pix != 1)&&(*nboct_pix != 2))
-   {
-	image1 = NULL;
- 	sprintf ( CAI_ERREUR , 
-	 "Une image INRIA ne peutetre codee que sur un ou 2 octets par pixel");
-	goto ERREUR;
-   }
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   image1 = NULL;
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 : FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_creation");
-     goto ERREUR;
-   }
-
-/*************************************************/
-/* constitution du nom des fichiers a ecrire     */
-/* - si un canal : image.xs0			 */
-/* - si +sieurs canaux : image.xsi avec i=1->99	 */
-/* et insertion dans les tableaux                */
-/*************************************************/
-	
-/*************************************************/
-/* SI l'image est panchromatique		 */
-/*************************************************/
-  if (* nb_can == 1 )
-  {
-/*************************************************/
-/*	constitution du nom du fichier avec	 */
-/*	l'extension .xs0 verif existence	 */
-/*************************************************/
-
-   nom_fic_canal[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-      sprintf(nom_fic_canal,"%s/%s.xs0",repert,nom_image);
-   }
-   else
-   {
-       sprintf(nom_fic_canal,"%s.xs0",nom_image);
-   }
-
-   retour = stat ( nom_fic_canal , &buf_stat );
-   if ( retour == 0 )
-    { 
-	sprintf ( CAI_ERREUR , "L'image %s INRIA existe \n" , nom_image );
-	goto ERREUR;
-    }
-
-/*************************************************/
-/*	ecriture de l'entete dans le fichier     */
-/*	l'extension .xs0			 */
-/*************************************************/
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : modifications fopen binaire pour PC/NT         */
-/*****************************************************************************/
-   fic = fopen(nom_fic_canal,"wb");
-   if (fic == NULL)
-    {
-     sprintf(CAI_ERREUR,"Erreur: Creation %s impossible\n",nom_fic_canal);
-     goto ERREUR;
-   }
-   retour= fprintf ( fic , "#INRIMAGE-4#{\n" );
-   if ( retour == 0 )
-   {
-	sprintf ( CAI_ERREUR , "Erreur : ecriture impossible dans fichier %s\n",
-	nom_fic_canal );
-	goto ERREUR;
-   }
-
-   fprintf ( fic , "XDIM=%-4d\n" , *nb_col);
-   fprintf ( fic , "YDIM=%-4d\n" , *nb_lig );
-   fprintf ( fic , "ZDIM=%-2d\n" , 1 );
-   fprintf ( fic , "VDIM=%-2d\n" , 1 );
-   fprintf ( fic , "TYPE=unsigned fixed\n" );
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : FA:  Correction  "PIXSIZE= %d bits\n"  au lieu de   */
-/*			       "PIXSIZE= bits\n" dans ouvre_creation         */
-/*****************************************************************************/
-
-   fprintf ( fic , "PIXSIZE= %d bits\n" , (*nboct_pix)*8 );
-   if (*nboct_pix == 1)
-   {
-	fprintf ( fic , "SCALE=1**0\n" );
-	remplissage = 916;
-    }
-   else
-   {
-	fprintf ( fic , "SCALE=2**16\n" );
-	remplissage = 915;
-    }
-    fprintf ( fic , "CPU=sun\n" );
-    for ( i_oct = 0 ; i_oct < remplissage ; i_oct++ )
-    {
-	fprintf ( fic , "\n" );
-    }
-    fprintf ( fic , "##}\n" );
-    if (fic!=NULL) fclose(fic);
-
-/*************************************************/
-/*  ouverture pour ecriture radiometrie	         */
-/*************************************************/
-  
-   num = open(nom_fic_canal,O_RDWR|O_BINARY,0);
-   if (num == -1)
-   {
-     sprintf(CAI_ERREUR,"Erreur: Creation %s impossible\n",nom_fic_canal);
-     goto ERREUR;
-   }
-   image1->ACCES_CANAL_INT[0]=num;
-   image1->POS_OCTET[0]=1024;
-  }
-
-/*************************************************/
-/* SINON 					 */
-/*************************************************/
-  else
-  {  
-/*************************************************/
-/*	POUR chacun des canaux			 */
-/*************************************************/
-   for ( i= 0 ; i < *nb_can ; i=i+1)
-   {
-/**************************************************/
-/*  constitution du nom du fichier extension .xsi */
-/**************************************************/
-    nom_fic[0]='\0';
-    if ((long int)strlen(repert)!=0)
-    {
-       sprintf(nom_fic_canal,"%s/%s.xs%d",repert,nom_image,i+1);
-    }
-   else
-   {
-       sprintf(nom_fic_canal,"%s.xs%d",nom_image,i+1);
-   }
-
-    retour = stat ( nom_fic_canal , &buf_stat );
-    if ( retour == 0 )
-    { 
-	sprintf ( CAI_ERREUR , "L'image %s INRIA existe \n" , nom_image );
-	goto ERREUR;
-    }
-    
-/*************************************************/
-/*	ecriture de l'entete dans le fichier     */
-/*	l'extension .xsi+1			 */
-/*************************************************/
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : modifications fopen binaire pour PC/NT         */
-/*****************************************************************************/
-    fic = fopen(nom_fic_canal,"wb");
-    if (fic == NULL)
-    {
-     sprintf(CAI_ERREUR,"Erreur: Creation %s impossible\n",nom_fic_canal);
-     goto ERREUR;
-    }
-    retour= fprintf ( fic , "#INRIMAGE-4#{\n" );
-    if ( retour == 0 )
-    {
-	sprintf ( CAI_ERREUR , "Erreur : ecriture impossible dans fichier %s\n",
-	nom_fic_canal );
-	goto ERREUR;
-    }
-
-    fprintf ( fic , "XDIM=%-4d\n" , *nb_col);
-    fprintf ( fic , "YDIM=%-4d\n" , *nb_lig );
-    fprintf ( fic , "ZDIM=%-2d\n" , 1 );
-    fprintf ( fic , "VDIM=%-2d\n" , 1 );
-    fprintf ( fic , "TYPE=unsigned fixed\n" );
-    fprintf ( fic , "PIXSIZE=%d bits\n" , (*nboct_pix)*8 );
-    if (*nboct_pix == 1)
-    {
-	fprintf ( fic , "SCALE=1**0\n" );
-	remplissage = 916;
-     }
-     else
-     {
-	fprintf ( fic , "SCALE=2**16\n" );
-	remplissage = 915;
-     }
-     fprintf ( fic , "CPU=sun\n" );
-     for ( i_oct = 0 ; i_oct < remplissage ; i_oct++ )
-     {
-	fprintf ( fic , "\n" );
-     }
-     fprintf ( fic , "##}\n" );
-     fclose(fic);
-
-/*************************************************/
-/*  ouverture pour ecriture radiometrie	         */
-/*************************************************/
-    num = open(nom_fic_canal,O_RDWR|O_BINARY,0);
-    if (num == -1)
-   {
-     sprintf(CAI_ERREUR,"Erreur: Creation %s impossible\n",nom_fic_canal);
-     goto ERREUR;
-   }
-   image1->ACCES_CANAL_INT[i]=num;
-   image1->POS_OCTET[i]=1024;
-  }
- }
-
-  return (image1);
-
-ERREUR :
-  if (image1 !=NULL) free(image1);
-  return(NULL);
-}
-/* 
-  Fin de l'operation cai_ouvre_creation_inria
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_inria                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image inria                */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_lecture_canal_inria(image1, canal,      */       		      /* ------------------                              premiere_ligne,           */
-/*                                                 premiere_colonne,         */
-/*                                                 nombre_lignes_lire ,      */
-/*                                                 nombre_colonnes_lire,     */
-/*                                                 pas_ligne ,pas_colonne,   */
-/*                 		                   data_image )              */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (int) : numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal_inria   (S) (CAI_OK_KO) : = CAI_KO si pb            */
-/*                                                 = CAI_OK si OK            */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_lecture_canal_inria(CAI_IMAGE *image1 ,  
-                            	  int *canal ,           
-    		           	  int *premiere_ligne  ,   
-     		          	  int *premiere_colonne,
-                          	  int *nombre_lignes_lire ,
-                          	  int *nombre_colonnes_lire,
-                          	  int *pas_ligne ,          
-                          	  int *pas_colonne,
-		           	  unsigned char *data_image )        
-{
-
- int   num,i,j;             /* variables de travail                          */
- long pt_oct,n;		    /* position courante dans le fichier image       */
- long no_oct;               /* numero du premier octet a lire                */
- long iret,k;               /* indicateur d'erreur                           */
- int lig;                   /* indice de boucle sur les lignes               */
- int   oct_pix;             /* nb octets par pixels                          */
- long  nb_oct;              /* nb oct =1er octet a lire - position courante  */
- long  oct_lig;             /* nb oct. par ligne en considerant taille pixel */
- unsigned char *buf_lec;    /* buffer lecture d'une  ligne                   */
- unsigned char *deb,*pch;   /* pointeur chaine pour transfert  buffer sortie */
-
-
-/*...........................
-  Initialisations diverses
-  ..........................*/
-
-   iret=CAI_OK;
-   num=image1->ACCES_CANAL_INT[*canal-1];
-   oct_pix=image1->NBOCT_PIX;
-   oct_lig=oct_pix*image1->NB_COL;
-
-/*.......................................*/
-/* verification si lecture image entiere */
-/*.......................................*/
-  if ((*nombre_lignes_lire==image1->NB_LIG)&&(*nombre_colonnes_lire==image1->NB_COL)
-       &&(*pas_ligne==1)&&(*pas_colonne==1))
-  {
-       oct_lig=oct_pix*(image1->NB_COL)*(image1->NB_LIG);
-
-    /* positionnement en debut de fichier */
-       pt_oct=(long int)lseek(num,0L,0);
-
-   /* lecture du canal complet */
-      n=read(num,data_image,oct_lig);
-      if (n<=0)
-      {
-             iret=CAI_KO;
-             strcpy(CAI_ERREUR,"Erreur lecture donnee image INRIA");
-       }
-        else
-             iret=CAI_OK;
-   }
-  else
-  {
-
-/*..............................................
-        allocation de memoire pour lire une ligne image
- ............................................. */
-
-   buf_lec = (unsigned char *) calloc(oct_lig,sizeof(unsigned char));
-   if (buf_lec == NULL)
-   {
-      iret=CAI_KO;
-      strcpy(CAI_ERREUR,"Probleme allocation memoire");
-   }
-   else
-   {
-/*....................
-        Initialisation
-  ......................*/
-        lig=*premiere_ligne;
-        i=1;
-        pch=data_image;
-
-/*.....................
-         Pour chaque ligne a lire
-  .......................................*/
-        while ((i <= *nombre_lignes_lire)&&(iret==CAI_OK))
-        {  
-/*............................................
-	    Recherche de la position courante dans le fichier
-  ............................................*/
-            pt_oct=lseek(num,0L,1);
-
-/*................................
-            Calcul du numero du 1er octet a lire
-  ....................................*/
-            no_oct=image1->POS_OCTET[*canal-1]+((lig-1)*oct_lig);
-
-/*..................................
-            Saut d'octets pour etre positionne sur la ligne a lire
-  .......................................*/
-            nb_oct=(long)(no_oct-pt_oct);
-            lseek(num,nb_oct,1);
-
-/*...........................................
-            lecture d'une ligne image
-  ................................................*/
-            n=read(num,buf_lec,oct_lig);
-            if (n<=0)
-            {
-             iret=CAI_KO;
-             strcpy(CAI_ERREUR,"Erreur lecture donnee image INRIA");
-             }
-            else
-            { 
-/*......................................
-             Sauvegarde des donnees lues entenant compte du pas 
-             d'echantillonnage en colonne
-  ........................................*/           
-             deb=buf_lec+((*premiere_colonne)-1)*oct_pix;
-             j=1;
-             while (j <= *nombre_colonnes_lire)
-	     {  
-               for (k=0;k<oct_pix;k=k+1)
-                {
-                  *(pch+k)=*(deb+k);
-                 }
-              j=j+1;
-              deb=deb+((*pas_colonne)*oct_pix);
-	      pch=pch+oct_pix;
-             }   
-             
-            }
-          i=i+1;
-          lig=lig+(*pas_ligne);
-
-        }        
-
-	free(buf_lec);
-     }
-   }
-
-   return(iret);
-}
-
-/*
-  Fin de l'operation cai_lecture_canal_inria
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal_inria                                   */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un canal d'une image inria                */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :    CAI_OK_KO cai_ecriture_canal_inria(image1, canal,   */       		      /* ------------------                                 premiere_ligne,        */
-/*                                                    nombre_lignes_ecrire,  */
-/*                                                    nombre_colonnes_ecrire,*/
-/*                 		                      data_image )           */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal                 (E) (int) : numero du canal a ecrire            */
-/*     premiere_ligne        (E) (int) : premiere ligne a ecrire ds l'image  */
-/*     nombre_lignes_ecrire  (E) (int) : nombre de lignes a ecrire           */
-/*     nombre_colonnes_ecrire(E) (int) : nombre de lignes a ecrire           */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels ecris alloue et   */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_ecriture_canal_inria      (S) (CAI_OK_KO) : = CAI_KO si pb        */
-/*                                                     = CAI_OK si OK        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_ecriture_canal_inria (CAI_IMAGE *image1 ,  
-                                      int *canal ,           
-    		                      int *premiere_ligne  ,   
-                                      int *nombre_lignes_ecrire ,
-                                      int *nombre_colonnes_ecrire,
-		                      unsigned char *data_image )    
-{
-long	position_first_lig;	/* position de la 1ere ligne a ecrire    */
-long	position_courante;	/* position courante dans le fichier     */
-long	deplacement;		/* deplacement a effectuer		 */
-int	i_ligne;		/* compteur de lignes 			 */
-unsigned char *buff_lig;	/* tableau contenant une ligne a ecrire  */
-long	cr_write;		/* code retour de write 		 */
-int num;                        /* descripteur de fichier		 */
-int nboct_pix;			/* nombre d'octets par pixel             */
-int tot_pix;                    /* nb de pixels total a ecrire           */
-
-/* initialisations */
-
-i_ligne = 0;
-num = image1->ACCES_CANAL_INT[*canal-1];
-nboct_pix = image1->NBOCT_PIX;
-
-/*.......................................*/
-/* verification si ecriture image entiere */
-/*.......................................*/
-  if ((*nombre_lignes_ecrire==image1->NB_LIG)&&
-		(*nombre_colonnes_ecrire==image1->NB_COL))
-  {
-       tot_pix=nboct_pix*(image1->NB_COL)*(image1->NB_LIG);
-
-    /* positionnement en debut de fichier */
-       position_first_lig=lseek(num,0L,0);
-
-   /* ecriture du canal complet */
-      cr_write = write ( num , data_image,tot_pix);
-      if (cr_write != nboct_pix)
-      {
-              strcpy(CAI_ERREUR,"Erreur ecriture donnee image INRIA");
-             goto ERREUR;
-       }
-   }
-  else
-  {
-
-
-/********************************************************/
-/* Calcul de la position de la premiere ligne a ecrire 	*/ 
-/********************************************************/
-
-position_first_lig =
-	(long) ( image1->POS_OCTET[*canal-1] + 
-               ((*premiere_ligne) - 1) *(*nombre_colonnes_ecrire) * nboct_pix );
-
-
-/********************************************************/
-/* Recuperation de la position courante			*/
-/********************************************************/
-
-position_courante = lseek ( num , 0L , 1 );
-
-
-/********************************************************/
-/* Deplacement jusqu'a la premiere ligne a ecrire	*/
-/********************************************************/
-
-deplacement = position_first_lig - position_courante;
-lseek ( num , deplacement , 1 ); 
-
-
-/********************************************************/
-/* TANT QUE il y a des lignes a ecrire                 	*/
-/********************************************************/
-while (i_ligne < (*nombre_lignes_ecrire))
-{
-
-/********************************************************/
-/*	extraction de la ligne du tableau 		*/
-/********************************************************/
-
-	buff_lig = data_image +(*nombre_colonnes_ecrire) * nboct_pix * i_ligne;
-
-/********************************************************/
-/*	ecriture de la ligne				*/
-/********************************************************/
-
-	cr_write = write ( num , buff_lig ,(*nombre_colonnes_ecrire) * nboct_pix );
-	if ( cr_write !=(*nombre_colonnes_ecrire) * nboct_pix )
-	{
-		strcpy ( CAI_ERREUR , "Erreur ecriture canal image inria\n" );
-		goto ERREUR;
-	}
- 
-/********************************************************/
-/*	incrementation du nombre de lignes		*/
-/********************************************************/
-
-	i_ligne++;
-
-/********************************************************/
-/* FIN TANT QUE						*/
-/********************************************************/
-  }
-}
-
-
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-
-/* 
-  Fin de l'operation cai_ecriture_canal_inria
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_inria                                            */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format inria et de         */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_inria(image1)                     */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_inria      (S) (CAI_OK_KO) :   = CA_KO si pb                */
-/*                                              = CAI_OK si OK               */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO cai_ferme_inria (CAI_IMAGE *image1)
-
-
-{
- int iret;    /* code retour de l'operation      */
- int i_can;   /* indice du canal a fermer        */
- int num;     /* descripteur du fichier a fermer */
-
-
- iret=CAI_OK;
-/*.............................................
-   Fermeture des fichiers image 
-  .............................................*/
-   for (i_can=0;i_can<image1->NB_CANAUX;i_can=i_can+1)
-   {
-     num=image1->ACCES_CANAL_INT[i_can];
-     if (num>0) close(num);
-    }
-
-  return (iret);
-}
-
-
-/*
-  Fin de l'operation cai_ferme_inria
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_inria                                         */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stocke en inria et de       */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_dest_ima_inria(format,nom_ima)          */       		      /* ------------------                                                        */
-/*     format       (E) (char *) : format de l'image a detruire              */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_dest_ima_inria   (S) (CAI_OK_KO) : = CAI_KO si pb                 */
-/*                                            = CAI_OK si OK                 */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO  cai_dest_ima_inria ( char *repertoire , 
-                       		char *nom_ima )
-
-{
-int	i_can;			/* compteur de canaux */
-long     iret;                  /* code retour fonction fermetrue lecture */
-char	str_num_canal[3];	/* suffixe numero du canal */
-char	nom_fic[1024];		/* nom du fichier entete a detruire */
-char    nom_ima_complet[1024];  /* repertoire + nom de l'image */
-char	nom_fic_canal[1024];	/* nom du fichier canal a detruire */
-
-int	cr_stat;		/* code retour de fonction status de fichier */
-struct stat buf_stat;		/* structure decrivant status de fichier */ 
-
-CAI_IMAGE   *image1;             /* structure ouverture image */
-int         nb_can;	        /* nombre de canaux de l'image */
-int         nboct_pix;		/* nombre d'octets par pixel image */
-int         nb_col;	        /* nombre de colonnes de l'image */
-int         nb_lig;             /* nombre de lignes de l'image */
-
-/************************************************/
-/* Constitution du nom du fichier d'entete	*/
-/************************************************/
-if ((long int)strlen(repertoire)!= 0)
-{
-  sprintf ( nom_ima_complet, "%s/%s",repertoire,nom_ima );
-
-}
-else
-{
-  strcpy ( nom_ima_complet , nom_ima);
-}
-sprintf(nom_fic ,"%s.xs", nom_ima_complet);
-
-/************************************************/
-/* Extraction des caracteristiques de l'image 	*/
-/* du fichier entete par l'appel a la fonction	*/
-/* cai_ouvre_lecture_inria			*/
-/************************************************/
-  image1 = cai_ouvre_lecture_inria ( repertoire,nom_ima, &nb_can ,&nboct_pix ,
-				     &nb_col , &nb_lig );	
-  if ( image1 == NULL) goto ERREUR;
-
-  image1->NB_CANAUX=nb_can;
-  image1->NB_COL=nb_col;
-  image1->NB_LIG=nb_lig;
-  image1->NBOCT_PIX=nboct_pix;
- 
-  iret=cai_ferme_inria(image1);
-
-  image1 = NULL;
-
-/************************************************/
-/* Recherche de tous les fichiers au nom 	*/
-/* de l'image comportant une extension  	*/
-/*.xsi avec i = 0 -> nb_can et destruction	*/
-/************************************************/
-	
-for ( i_can = 0 ; i_can < nb_can+1 ; i_can++ )
-{
-	nom_fic_canal[0] = '\0';
-	sscanf ( nom_fic , "%s" , nom_fic_canal );
-	sprintf ( str_num_canal , "%d" , i_can );
-	strcat ( nom_fic_canal , str_num_canal );
-	nom_fic_canal[strlen(nom_ima_complet)+3+strlen(str_num_canal)]='\0';
-
-	cr_stat = stat ( nom_fic_canal , &buf_stat );
-	if ( cr_stat == 0 )
-	{
-		/* le fichier existe => destruction */
-		unlink ( nom_fic_canal );
-	}
-}
-
-
-
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-/*
- Fin de l'operation cai_dest_ima_inria
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_modifie_inria                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture-ecriture d'une image au format  */
-/* -----     inria et de tous les fichiers qui la composent                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :   CAI_IMAGE *cai_ouvre_modifie_inria (nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_modifie_inria   (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_modifie_inria(char *repert,
-				   char *nom_image,
-				   int  *nb_can,
-				   int  *nboct_pix,
-				   int  *nb_col,
-				   int  *nb_lig)
-{
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];	/* nom du fichier canal a ouvrir	    */
-   char *deb,*deb1;		/* pointeurs sur chaine de caracteres       */
-   char car[3];			/* indice du canal traite     		    */
-   int i,num;	                /* indice 				    */
-   char *buf_lec ;              /* buffer lecture entete inria              */
-   int nb_bits;		        /* nombre de bits par pixels                */
-   char str_no;                 /* variable de lecture                      */
-   short int n1;		/* variable de travail de lecture           */
-   long k,n;
-
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
- 
-   *nb_lig=0;
-   *nb_col=0;
-   *nboct_pix=0;
-   *nb_can=0;
- 
-   iret=1;
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1: FA Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoire dans cai_ouvre_modifie");
-    }
-   else
-   {
-/*.......................................
-  INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-  ET LE NOM UTILISATEUR DE CHAQUE CANAL et ouverture
-  de ces fichiers
-  Recherche du nombre de canaux de l'image
-  .....................................................*/
-  
-  deb = image1->NOM_FIC_CAN;
-  deb1= image1->NOM_UTIL_CAN;
-
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-       sprintf(nom_fic,"%s/%s.xs",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.xs",nom_image);
-   }
-
-   for (i=0;i<50;i=i+1)
-   {
-         nom_fic_canal[0]='\0';
-         sscanf(nom_fic,"%s",nom_fic_canal);
-         sprintf(car,"%d",i);
-         strcat(nom_fic_canal,car);   
-         num=open(nom_fic_canal,O_RDWR|O_BINARY,0);
-
-
-         if (num != -1)
-         {
-
-          if (*nb_can<100)
-          {
-          sscanf(nom_image,"%s",deb);
-          strcat(deb,".xs");
-          strcat(deb,car);
-          deb=deb+100;
-
-
-          sscanf(nom_image,"%s",deb1);
-          strcat(deb1,".xs");
-          strcat(deb1,car);
-          deb1=deb1+100;
-          image1->ACCES_CANAL_INT[*nb_can]=num;
-	  *nb_can=*nb_can+1;
-          }
-        
-         }
-     }
-
-     if ((*nb_can) == 0)
-     {
-        iret = 0;
-     }
-     else
-     {
-/*...................................
-     Lecture du fichier entete
-  ............................................*/
-
-      buf_lec=(char *) calloc(256,sizeof(char));
-      if (buf_lec==NULL) 
-      {
-        iret=0;
-        strcpy(CAI_ERREUR,"Erreur allocation memoire dans cai_ouvre_modifie");
-      }
-      else
-      {
-
-     	num=image1->ACCES_CANAL_INT[0];
-
-     	k=read(num,buf_lec,256);
-     	if (k!=256)
-     	{
-       		iret=0;
-       		strcpy(CAI_ERREUR,"Erreur lecture entete Inria");
-    	 }
-    	 else
-     	 {
-
-/*.................................
-       Decodage de l'enregistrement (nouveu format inria)
-  .........................................*/
-        	if (buf_lec[10]=='4')
-        	{
-
-              		sscanf(&buf_lec[19],"%4d",nb_col);
-              		sscanf(&buf_lec[29],"%4d",nb_lig);
-	      		sscanf(&buf_lec[78],"%2d",&nb_bits);
-
-	      		/* le nombre recupere represente le nombre de */
-	      		/* bits ou le nombre d'octets codant un pixel */
-	      		/* cette information est transmise via le     */
-	      		/* parametre nboct_pix inutilise sur SUN   */
-	      		if ( (nb_bits==8) || (nb_bits==16) )
-	      			*nboct_pix = nb_bits/8;
-	      		else if ( (nb_bits==1) || (nb_bits==2) )
-				*nboct_pix =  nb_bits;
-              		image1->NB_BITS_PIX= nb_bits;
-              		for (i=0;i<*nb_can;i=i+1)
-              		{
-                   		image1->POS_OCTET[i]=1024; 
-               		}
-          	}                        
-         	else
-         	{
-/*.................................
-       Decodage de l'enregistrement (ancien format inria)
-  .........................................*/
-
-                 	lseek(num,0L,0);
-                 	n=read(num,(char*)&n1,2);
-                 	if (n<=0)
-	          	{
-        	    		 iret=0;
-          	    		 strcpy(CAI_ERREUR,
-					"Erreur lecture entete inria");
-        	  	}
-                 	*nb_col=(int)n1;
-
-                 	n=read(num,(char*)&n1,2);
-                 	if (n<=0)
-	          	{
-        	    		iret=0;
-          	     		strcpy(CAI_ERREUR,
-					"Erreur lecture entete inria");
-        	  	}
-                 	*nb_lig=(int)n1;
-
-                 	n=read(num,&str_no,1);
-                 	if (n<=0)
-	          	{
-        	     		iret=0;
-          	     		strcpy(CAI_ERREUR,
-					"Erreur lecture entete inria");
-        	  	}
-		  	nb_bits = (int)str_no;
-
-	      		/* le nombre recupere represente le nombre de */
-	      		/* bits ou le nombre d'octets codant un pixel */
-	      		/* cette information est transmise via le     */
-	      		/* parametre nboct_pix inutilise sur SUN   */
-	      		if ( (nb_bits==8) || (nb_bits==16) )
-	      			*nboct_pix = nb_bits/8;
-	      		else if ( (nb_bits==1) || (nb_bits==2) )
-				*nboct_pix = nb_bits;
-              
-              		for (i=0;i<*nb_can;i=i+1)
-              		{
-                  		 image1->POS_OCTET[i]=256;  
-              		} 
-        	}   
-        	if (*nboct_pix ==1)
-			sprintf(image1->COD_PIX,"OCT");
-        	else
-			sprintf(image1->COD_PIX,"I2");      
-      	 }
-      	free(buf_lec);        
-      }
-     }
-  }
-
-  if (iret == 0)
-  { 
-	return (NULL);
-  }
-  else
-  {
-	return (image1);
-  }
-
-}
-/* 
-   Fin de l'operation cai_ouvre_modifie_inria
-*/
-
diff --git a/Utilities/CAI/cai_dll/src/cai_jpeg.c b/Utilities/CAI/cai_dll/src/cai_jpeg.c
deleted file mode 100755
index ef2176cbd0..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_jpeg.c
+++ /dev/null
@@ -1,1008 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_jpeg.c                                                    */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format jpeg                                       */ 
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CISI)                                   */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    Octobre 1998                                        */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V4.0                                                            */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/* MOD : VERSION :2 : DM :optimisation                                       */
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 :FA:Verification que le nombre d'octets par pixel est */
-/* egal a 1 et le nombre de canaux est 1 ou 3. jpeg est un format de         */
-/* restitution							             */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications pour compatibilite HP64bits      */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : test sur  fclose  pour PC/LINUX                */
-/*****************************************************************************/
-/* MOD : VERSION : 4.8 : FA : modifiation fermeture avant decompression      */
-/*****************************************************************************/
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-
-
-# include <stdio.h>
-# include <string.h>
-# include <stdlib.h>
-# include <unistd.h>
-# include <sys/types.h>
-# include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-
-#define _CAI_IMAGE
-#define IN_CAI_JPEG
-
-# include "cai_image.h"
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header: cai_jpeg.c,v 1.4 01/05/31 10:47:32 cmf Exp $";
-
-
-extern char *getenv();
-
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_jpeg                                         */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images au format jpeg                   */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_ima_jpeg(repert,tab_ima)            */
-/* -----------------                                                         */
-/*                                                                           */
-/*     repert       (E) (char *)   : repertoire a explorer		     */
-/*     tab_ima      (S) (char ***) : pointeur sur tableau des images listees */
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_ima_jpeg       (S) (int)     : = -1 repertoire inexistant   */                                    /*					       = > 0 nombre d'images listees */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-long int cai_liste_ima_jpeg (char *repert,
-		               char ***tab_ima)
-
-
-{
-
-   DIR *dirp;		/* pointeur sur structure ouverture repertoire */
-   struct dirent *dp;   /* structure resultat de la fonction readdir   */
-   char *pch0,*pch1;    /* pointeurs sur chaine de caracteres          */ 
-   int nb_ima;          /* nombre d'images jpeg identifiees             */
-   long int i;          /* indice de boucle                            */
-   long int ll,dif;     /* variables de travail                        */
-   char blanc;          /* caractere blanc                             */
-
-
-/*........................................
-   INITIALISATION et ouverture du repertoire choisi
-  .........................................*/
-   nb_ima=0;
-   dirp=opendir(repert);
-   blanc = ' ';
-
-   if(dirp!=NULL)
-   {
-
-
-/*......................................
-
-   premiere passe pour comptabiliser les images du format donne
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE JPEG
-      (EXTENSION =.jpg)
-   ..........................................*/
-   while((dp=readdir(dirp))!=NULL)
-   {
-     pch0=strstr(dp->d_name,".jpg");
-     if (pch0 != NULL)
-     {
-        ll = strlen(dp->d_name);
-        dif = (long)(dp->d_name-pch0);
-        dif=labs(dif);
-        pch1=pch0+4;
-        if (((ll-4)==dif)||((*pch1)==blanc))
-	     nb_ima=nb_ima+1;
-     
-     }
-   }
-
-    (void)closedir(dirp);
-
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES DU FORMAT JPEG
-     ......................................*/
-    *tab_ima = (char **) calloc(nb_ima,sizeof(char *));
-    for (i=0;i<nb_ima;i=i+1)
-      (*tab_ima)[i]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE JPEG
-      (EXTENSION =.jpeg)
-   SI C`EST LE CAS,STOCKAGE DANS LA LISTE
-   ..........................................*/
-   dirp=opendir(repert);
-
-   nb_ima=0;
-   while((dp=readdir(dirp))!=NULL)
-   {
-     pch0=strstr(dp->d_name,".jpg");
-     if (pch0 != NULL)
-     {
-        ll = strlen(dp->d_name);
-        dif = (long)(dp->d_name-pch0);
-        dif=labs(dif);
-        pch1=pch0+4;
-        if (((ll-4)==dif)||((*pch1)==blanc))
-        {
-            *pch0='\0';
-            strcpy((*tab_ima)[nb_ima],dp->d_name);
-	    nb_ima=nb_ima+1;
-        }
-     
-     }
-   }
-
-    (void)closedir(dirp);
-
-
-   }
-   else
-   {
-    /* repertoire inexistant */
-     nb_ima=-1;
-     }
-    return(nb_ima);
-
-}
-
-/* Fin de l'operation cai_liste_ima_jpeg
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_jpeg                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image au format jpeg      */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :     CAI_IMAGE *cai_ouvre_lecture_jpeg (nom_image,      */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_jpeg     (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_lecture_jpeg(char *repert,
-				 char *nom_image,
-				 int  *nb_can,
-				 int  *nboct_pix,
-				 int  *nb_col,
-				 int  *nb_lig)
-
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   char label[80];		/* contient un enregistrement du fichier    */
-   int nbbit;			/* nb de bits par pixel du fichier en-tete  */
-   int retour;			/* retour de la fonction comparaison chaines*/ 
-   char *deb,*deb1;		/* pointeurs sur chaine de caracteres       */
-   int i,num;			/* indice 				    */
-   int nbplan;			/* nombre de canaux dans le fichier en-tete */
-   char COD_PIX[80];	        /* type de codage du pixel (optionnel)      */
-   struct jpeg_decompress_struct *cinfo;
-   static struct jpeg_error_mgr jerr;
-
-
-   /*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-
-   *nb_lig=0;
-
-   *nb_col=0;
-
-   *nboct_pix=0;
- 
-   iret=1;
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-   cinfo = (struct jpeg_decompress_struct *)calloc(1,
-				sizeof(struct jpeg_decompress_struct));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if ((image1==NULL)||(cinfo==NULL))
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoire dans cai_ouvre_lecture");
-    }
-   else
-   {
-
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if((long int)strlen(repert)!=0)
-   {
-      sprintf(nom_fic,"%s/%s.jpg",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.jpg",nom_image);
-   }
-
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   fic_in=NULL;
-   fic_in=fopen(nom_fic,"rb");
-   if (fic_in==NULL)
-   {
-     iret=0;
-     sprintf(CAI_ERREUR,"Erreur ouverture fichier entete JPEG %s",nom_fic);
-     free(cinfo);
-     cinfo = NULL;
-     image1->ACCES_CANAL_JPEG_LEC=cinfo;
-    }
-   else
-   {
- 	cinfo->err=jpeg_std_error(&jerr);
- 	jpeg_create_decompress(cinfo);
-
- 	jpeg_stdio_src(cinfo,fic_in);
-        (void) jpeg_read_header(cinfo,TRUE);
-	jpeg_start_decompress(cinfo);
-
-        *nb_can = cinfo->num_components;
-        *nb_lig = cinfo->image_height;
-        *nb_col = cinfo->image_width;
-        *nboct_pix = 1;
-	sprintf(image1->COD_PIX,"OCT");
-        image1->ACCES_CANAL_JPEG_LEC=cinfo;
-        image1->ACCES_FILE_JPEG=fic_in;
-        image1->POS_OCTET[0]=CAI_JPEG_LECTURE;
-
-    }
-
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-
-     nom_fic[0]='\0';
-     nom_fic_canal[0]='\0';
-
-    if((long int)strlen(repert)!=0)
-    {
-	sprintf(nom_fic_canal,"%s/%s.jpg",repert,nom_image);
-    }
-    else
-    {
- 	sprintf(nom_fic_canal,"%s.jpg",nom_image);
-    }
-  
-    deb = image1->NOM_FIC_CAN;
-    deb1= image1->NOM_UTIL_CAN;
-    for (i=0;i<*nb_can;i=i+1)
-    {
-           sscanf(nom_image,"%s",deb);
-  	   deb=deb+100;
-           sscanf(nom_image,"%s",deb1);
-  	   deb1=deb1+100;
-           image1->POS_OCTET[i]=0;
-    }
-   }
-   if (iret == 0)
-   {
-	return (NULL);
-   }
-   else
-   {
-      return(image1);
-   }
-
-}
-
-/* 
-   Fin de l'operation cai_ouvre_lecture_jpeg
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_jpeg                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format jpeg et de tous les fichiers qui la composent         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :    CAI_IMAGE *cai_ouvre_creation_jpeg (nom_image,      */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            label)           */
-/*                                                                           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_jpeg     (S) (CAI_IMAGE *) : =NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_creation_jpeg(char *repert,
-				  char *nom_image,
-				  int  *nb_can,
-				  int  *nboct_pix,
-				  int  *nb_col,
-				  int  *nb_lig,
-				  char *label)
-
-{
-   FILE *fic;		        /* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   int retour;			/* retour de fonction 			    */ 
-   int i,nboctet;		/* indice 				    */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   struct jpeg_compress_struct *cinfo;
-   static struct jpeg_error_mgr jerr;
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 :FA:Verification que le nombre d'octets par pixel est */
-/* egal a 1 et le nombre de canaux est 1 ou 3. jpeg est un format de         */
-/* restitution							             */
-/*****************************************************************************/
-/* Verification sur le nombre d'octets par pixel */
-
-   if (*nboct_pix !=1)
-   {
-     strcpy(CAI_ERREUR,"Erreur une image jpeg ne peut etre codee que sur un seul octet");
-     goto ERREUR;
-   }
-
-/* Verification sur le nombre de canaux */
-   if ((*nb_can !=1)&&(*nb_can !=3))
-   {
-     strcpy(CAI_ERREUR,"Erreur une image jpeg a 1 ou 3 canaux exclusivement");
-     goto ERREUR;
-   }
-
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_creation");
-     goto ERREUR;
-   }
-
-/*.................................................
-   Constitution du nom du fichier  et verification qu'il
-   n'existe pas deja
-  .................................................*/
-
-   nom_fic[0]='\0';
-   if((long int)strlen(repert)!=0)
-   {
-	sprintf(nom_fic,"%s/%s.jpg",repert,nom_image);
-   }
-   else
-   {
-	sprintf(nom_fic,"%s.jpg",nom_image);
-    }
-   
-   retour = stat ( nom_fic , &buf_stat );
-   if ( retour == 0 )
-   { 
-	sprintf ( CAI_ERREUR , "L'image %s JPEG existe \n" , nom_image );
-	goto ERREUR;
-   }
-
-/* allocation du tableau contenant l'image entiere */
-   nboctet = (*nb_col)*(*nb_lig)*(*nb_can);
-   image1->image_JPEG = (JSAMPLE *) calloc(nboctet,sizeof(JSAMPLE));
-   if (image1->image_JPEG==NULL)
-   {
-	sprintf(CAI_ERREUR,"Erreur allocation memoire image JPEG");
-	goto ERREUR;
-   }
-
-/*...............................................................
-   Ouverture du fichier en ecriture avec allocation de la structure
-  .................................................................*/
-   cinfo = (struct jpeg_compress_struct *)calloc(1,
-				sizeof(struct jpeg_compress_struct));
-   if (cinfo==NULL)
-   {
-      strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_creation");
-      goto ERREUR;
-   }
-
-   cinfo->err=jpeg_std_error(&jerr);
-/* Now we can initialize the JPEG compression object. */
-   jpeg_create_compress(cinfo);
-
-   fic = fopen(nom_fic,"wb"); 
-   if (fic == NULL)
-   {
-      sprintf(CAI_ERREUR,"Erreur: Creation fichier %s impossible\n",nom_fic);
-      goto ERREUR;
-   }
-   image1->ACCES_FILE_JPEG = fic;;
-
-   jpeg_stdio_dest(cinfo, fic);
-
-  /*  set parameters for compression */
-
-  /* First we supply a description of the input image.
-   * Four fields of the cinfo struct must be filled in:
-   */
-   cinfo->image_width = *nb_col; 	
-   cinfo->image_height = *nb_lig;
-   cinfo->input_components = *nb_can;	/* # of color components per pixel */
-   if (*nb_can==1)
-     cinfo->in_color_space = JCS_GRAYSCALE;
-   else
-     cinfo->in_color_space = JCS_RGB; /* colorspace of input image */
-
-  /* Now use the library's routine to set default compression parameters.
-   * (You must set at least cinfo.in_color_space before calling this,
-   * since the defaults depend on the source color space.)
-   */
-   jpeg_set_defaults(cinfo);
-
-  /* Now you can set any non-default parameters you wish to.
-   * Here we just illustrate the use of quality (quantization table) scaling:
-   */
-   jpeg_set_quality(cinfo, 90, TRUE /* limit to baseline-JPEG values */);
-
-  /* Start compressor */
-
-  /* TRUE ensures that we will write a complete interchange-JPEG file.
-   * Pass TRUE unless you are very sure of what you're doing.
-   */
-   jpeg_start_compress(cinfo, TRUE);
-
-   image1->ACCES_CANAL_JPEG_ECR = cinfo;
-
-   image1->POS_OCTET[0]=CAI_JPEG_ECRITURE;
-   image1->NBOCT_PIX = 1;
-
-   return (image1);
-
-ERREUR :
-  return(NULL);
-}
-  
-/* 
-  Fin de l'operation cai_ouvre_creation_jpeg
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_jpeg                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image jpeg                 */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_lecture_canal_jpeg(image1, canal,       */       		      /* ------------------                            premiere_ligne,             */
-/*                                               premiere_colonne,           */
-/*                                               nombre_lignes_lire ,        */
-/*                                               nombre_colonnes_lire,       */
-/*                                               pas_ligne ,pas_colonne,     */
-/*                 		                 data_image )                */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (int) : numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal_jpeg     (S) (CAI_OK_KO) : = CAI_KO si pb           */
-/*                                                 = CAI_OK si OK            */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO cai_lecture_canal_jpeg(CAI_IMAGE *image1 ,  
-                                int *canal ,           
-    		          	int *premiere_ligne  ,   
-     		          	int *premiere_colonne,
-                         	int *nombre_lignes_lire ,
-                          	int *nombre_colonnes_lire,
-                          	int *pas_ligne ,          
-                          	int *pas_colonne,
-		          	unsigned char *data_image )        
-{
- JSAMPARRAY buffer;
- struct jpeg_decompress_struct *cinfo;
- static struct jpeg_error_mgr jerr;
- int i,j,k,n;               /* variables de travail                          */
- int pt_oct;		    /* position courante dans le fichier image       */
- int no_oct;                /* numero du premier octet a lire                */
- int iret;                  /* indicateur d'erreur                           */
- int lig;                   /* indice de boucle sur les lignes               */
- int   oct_pix;             /* nb octets par pixels                          */
- long  nb_oct;              /* nb oct =1er octet a lire - position courante  */
- int  oct_lig;             /* nb oct. par ligne en considerant taille pixel */
- int  nbcan;               /* nombre de canaux de l'image                   */
- unsigned char *buf_lec;    /* buffer lecture d'une  ligne                   */
- unsigned char *deb,*pch;   /* pointeur chaine pour transfert  buffer sortie */
- FILE *infile;               /* acces au fichier jpeg                        */
-
-
-/*...........................
-  Initialisations diverses
-  ..........................*/
-
-   iret=CAI_OK;
-   cinfo=image1->ACCES_CANAL_JPEG_LEC;
-   oct_pix=image1->NBOCT_PIX;
-   nbcan = image1->NB_CANAUX;
-   oct_lig=nbcan*(image1->NB_COL);
-
-if ((*premiere_ligne)-1 != cinfo->output_scanline)
-{
-     cinfo->output_scanline = cinfo->image_height;
-     jpeg_finish_decompress(cinfo);
-     jpeg_destroy_decompress(cinfo);
-
-   infile = image1->ACCES_FILE_JPEG;
-   rewind(infile);
-   cinfo->err=jpeg_std_error(&jerr);
-   jpeg_create_decompress(cinfo);
-   jpeg_stdio_src(cinfo,infile);
-   (void) jpeg_read_header(cinfo,TRUE);
-   jpeg_start_decompress(cinfo); 
-}
-/*..............................................
-        allocation de memoire pour lire une ligne image
- ............................................. */
-   buffer = (*cinfo->mem->alloc_sarray)((j_common_ptr)cinfo,
-			JPOOL_IMAGE,oct_lig,1);
-   if (buffer == NULL)
-   {
-      iret=CAI_KO;
-      strcpy(CAI_ERREUR,"Probleme allocation memoire JPEG");
-   }
-   else
-   {
-if ((*premiere_ligne)-1 != cinfo->output_scanline)
-{
-
- 
-/* positionnement jusqu'a la premiere ligne a lire */
-      for (lig=0;lig <(*premiere_ligne)-1;lig++)
-      {
-     		(void) jpeg_read_scanlines(cinfo,buffer,1);
-                
-      }
-}
-/* recuperation des lignes demandees */
-       lig=(*premiere_ligne)-1;
-       i=1;
-       pch = data_image;
-
-       while ((i <= (*nombre_lignes_lire))&&(iret==CAI_OK))
-       {  
-    	  cinfo->output_scanline = lig;
-    	  n = jpeg_read_scanlines(cinfo,buffer,1);             
-          if (n<=0)
-          {
-             iret=CAI_KO;
-             strcpy(CAI_ERREUR,"Erreur lecture donnee image JPEG");
-          }
-          else
-          { 
-/*......................................
-             Sauvegarde des donnees lues entenant compte du pas 
-             d'echantillonnage en colonne
-  ........................................*/
-               deb = *buffer;  
-               deb=deb+((*premiere_colonne)-1)*nbcan+(*canal-1);
-               j=1;
-               while (j <= (*nombre_colonnes_lire))
-	       {  
-
-                  *pch=*deb;
-                  pch=pch+1;
-                  j=j+1;
-                  deb=deb+((*pas_colonne)*oct_pix*nbcan);
-                }   
-          
-                i=i+1;
-                lig=lig+1;
-                j = 1;
-		while ((j < (*pas_ligne))&&(iret==CAI_OK)
-				&&(lig+1<(image1->NB_LIG)))
-                {
-    	           cinfo->output_scanline = lig;
-    	           n = jpeg_read_scanlines(cinfo,buffer,1);
-                
-                   if (n<=0)
-                   {
-                     iret=CAI_KO;
-                     strcpy(CAI_ERREUR,"Erreur lecture donnee image JPEG");
-                    }
-                    else
-			lig=lig+1;
-		    j = j+1;
-                }
-          } 
-        }        
-   }
-
-   return(iret);
- }
-/*
-  Fin de l'operation cai_lecture_canal_jpeg
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal_jpeg                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un canal d'une image jpeg                 */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      CAI_OK_KO cai_ecriture_canal_jpeg(image1, canal,  */       		      /* ------------------                                 premiere_ligne,        */
-/*                                                    nombre_lignes_ecrire,  */
-/*                                                    nombre_colonnes_ecrire,*/
-/*                 		                      data_image )           */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal                 (E) (int) : numero du canal a ecrire            */
-/*     premiere_ligne        (E) (int) : premiere ligne a ecrire ds l'image  */
-/*     nombre_lignes_ecrire  (E) (int) : nombre de lignes a ecrire           */
-/*     nombre_colonnes_ecrire(E) (int) : nombre de lignes a ecrire           */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels ecris alloue et   */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_ecriture_canal_jpeg        (S) (CAI_OK_KO) : = CAI_KO si pb       */
-/*                                                     = CAI_OK si OK        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ecriture_canal_jpeg (CAI_IMAGE *image1 ,  
-                                      int *canal ,           
-    		                      int *premiere_ligne  ,   
-                                      int *nombre_lignes_ecrire ,
-                                      int *nombre_colonnes_ecrire,
-		                      unsigned char *data_image )
-{
-int	i_ligne;		/* compteur de lignes                    */
-int num;                        /* descripteur de fichier                */
-int nboct_pix;			/* nombre d'octets par pixel             */
-int nbcan;                      /* nombre de canaux de l'image           */
-int nboctet;                    /* nombre d'octets d'une ligne multi     */
-int ires,ideb,col,indk;		/* indice 			         */
-
-/* initialisations */
-i_ligne = 0;
-nboct_pix = image1->NBOCT_PIX;
-nbcan = image1->NB_CANAUX;
-nboctet = (*nombre_colonnes_ecrire)*nbcan*(nboct_pix);
-
-
-/********************************************************/
-/* TANT QUE il y a des lignes a ecrire                 	*/
-/********************************************************/
-ires = ( *premiere_ligne - 1) *nboctet+(*canal-1);
-ideb = 0;
-while (i_ligne < (*nombre_lignes_ecrire))
-{
-
-/*************************************************************************/
-/*   chargement de la ligne entrelacant les pixels par rapport aux canaux*/
-/*************************************************************************/
-   for (col=0;col<(*nombre_colonnes_ecrire);col++)
-   {
-        for (indk=0;indk<nboct_pix;indk++)
-        {
-	   image1->image_JPEG[ires] = data_image[ideb+indk];
-         }
-	ires = ires + (nboct_pix*nbcan);
-	ideb = ideb + nboct_pix;
-   }
-/********************************************************/
-/*	incrementation du nombre de lignes		*/
-/********************************************************/
-
-	i_ligne++;
-
-/********************************************************/
-/* FIN TANT QUE						*/
-/********************************************************/
-
-}
-
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-
-/* 
-  Fin de l'operation cai_ecriture_canal_jpeg
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_jpeg                                             */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format jpeg et de          */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_jpeg(image1)                      */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_jpeg        (S) (CAI_OK_KO) :   = CAI_KO si pb              */
-/*                                              = CAI_OK si OK               */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ferme_jpeg (CAI_IMAGE *image1)
-
-
-{
- int iret;     			        /* code retour de l'operation      */
- FILE *infile; 			        /* descripteur du fichier a fermer */
- struct jpeg_decompress_struct *cinfoL; /* structure du fichier a fermer   */
- struct jpeg_compress_struct *cinfoE;   /* structure du fichier a fermer   */
- JSAMPROW row_pointer[1];	        /* pointer to JSAMPLE row[s]       */
- int nboctet;			        /* nb d'octets par ligne           */
-
-/* initialisations */
-/*.................*/
-  iret=CAI_OK;
-
-if (image1 !=NULL)
-{
-  nboctet = (image1->NB_COL)*(image1->NB_CANAUX);
-/*.............................................
-   Fermeture differente si lecture ou ecriture d'images
-  .............................................*/
-   if (image1->POS_OCTET[0]==CAI_JPEG_LECTURE)
-   {
-/* Fermeture d'image simple pour une lecture avec liberation des */
-/* espaces memoires					         */
-     cinfoL = image1->ACCES_CANAL_JPEG_LEC;
-     if (cinfoL != NULL)
-     {
-/*****************************************************************************/
-/* MOD : VERSION : 4.8 : FA : modifiation fermeture avant decompression      */
-/*****************************************************************************/
-	cinfoL->output_scanline=image1->NB_LIG;
-
-       jpeg_finish_decompress(cinfoL);
-       jpeg_destroy_decompress(cinfoL);
-       free(cinfoL);
-       cinfoL = NULL; 
-     }    
-   }
-   else
-   {
-/* cas ecriture d'une image au format JPEG : avant de fermer l'image */
-/* ecriture compressee du tableau conteant l'image                   */
-     cinfoE = image1->ACCES_CANAL_JPEG_ECR;
-     if (cinfoE != NULL)
-     {
-    
-         while (cinfoE->next_scanline < cinfoE->image_height)
-         {
-            /* jpeg_write_scanlines expects an array of pointers to scanlines.
-             * Here the array is only one element long, but you could pass
-             * more than one scanline at a time if that's more convenient.
-            */
-            row_pointer[0] =
-			& (image1->image_JPEG[cinfoE->next_scanline * nboctet]);
-            (void) jpeg_write_scanlines(cinfoE, row_pointer, 1);
-         }
-        /* Finish compression */
-
-        jpeg_finish_compress(cinfoE);
-
-       /* After finish_compress, we can close the output file. */
-
-       /*  release JPEG compression object */
-
-       /* This is an important step since it will release a good */
-       /* deal of memory. 				         */
-       jpeg_destroy_compress(cinfoE);
-       free(cinfoE);
-       cinfoL = NULL; 
-     }
-     if (image1->image_JPEG != NULL)
-     {
-	free(image1->image_JPEG);
-        image1->image_JPEG = NULL;
-     }
-   } 
-
-   infile=image1->ACCES_FILE_JPEG;
-   if (infile!=NULL) fclose(infile);
-}
-  return (iret);
-}
-
-/*
-  Fin de l'operation cai_ferme_jpeg
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_jpeg                                          */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stocke en jpeg et de        */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_dest_ima_jpeg(repertoire,nom_ima)       */       		      /* ------------------                                                        */
-/*     repertoire   (E) (char *) : repertoire de l'image a detruire          */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_dest_ima_jpeg     (S) (CAI_OK_KO) : = CAI_KO si pb                */
-/*                                            = CAI_OK si OK                 */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO cai_dest_ima_jpeg ( char *repertoire , 
-                     	     char *nom_ima )
-
-{
-char    nom_ima_complet[1024];  /* repertoire + nom de l'image */
-
-int	cr_stat;		/* code retour de fonction status de fichier */
-struct stat buf_stat;		/* structure decrivant status de fichier */ 
-
-/************************************************/
-/* Constitution du nom du fichier d'entete	*/
-/************************************************/
-
-if ((long)strlen(repertoire)!= 0)
-{
-  sprintf(nom_ima_complet,"%s/%s.jpg",repertoire,nom_ima);
-}
-else
-{
-  sprintf(nom_ima_complet,"./%s.jpg",nom_ima);
-}
-
-/********************************/
-/* Destruction du fichier 	*/
-/********************************/
-
-cr_stat = stat ( nom_ima_complet , &buf_stat );
-if ( cr_stat == 0 )
-	unlink ( nom_ima_complet );
-
-return (CAI_OK);
-
-}
-/*
- Fin de l'operation cai_dest_ima_jpeg
-*/    
diff --git a/Utilities/CAI/cai_dll/src/cai_lum.c b/Utilities/CAI/cai_dll/src/cai_lum.c
deleted file mode 100755
index 764e2103d5..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_lum.c
+++ /dev/null
@@ -1,1765 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_lum.c                                                     */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format lum                                        */ 
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CISI)                                   */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    Octobre 97                                          */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 3.3 : DM:optimisation des acces                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.0 : DM:possibilite de lire des  images en R4            */
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications indications Big ou Little Endian */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications pour compatibilite HP64bits      */
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM :fonctions de test machine et inversions         */
-/*			     deviennent generiques                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : modifications fopen binaire pour PC/NT         */
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : modifications  open binaire pour PC/NT         */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : test sur  fclose  pour PC/LINUX                */
-/*****************************************************************************/
-/* MOD : VERSION : 4.8 : DM : Lecture des images codées de 9 à 16 bits en    */
-/*                            IEEE (BI) et INTEL (LI)                        */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte des I4,UI2,UI4 et R8          */
-/*                            en lecture et ecriture en big et little endian */
-/*****************************************************************************/
-	
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-
-
-# include <stdio.h>
-# include <string.h>
-# include <sys/types.h>
-# include <stdlib.h>
-# include <unistd.h>
-# include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-# include <fcntl.h>
-# include <malloc.h>
-# include <math.h>
-# include <unistd.h>
-
-
-
-#define _CAI_IMAGE
-#define IN_CAI_LUM
-
-# include "cai_image.h"
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header: cai_lum.c,v 1.11 01/05/31 10:47:29 cmf Exp $";
-
-
-extern char *getenv();
-int cai_recuptyp_lum(char *type_code, char *SensCode, int *nbbits, 
-							char *cod_pix);
-
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_lum                                          */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images au format lum                    */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_ima_lum(repert,tab_ima)             */
-/* -----------------                                                         */
-/*                                                                           */
-/*     repert       (E) (char *)   : repertoire a explorer		     */
-/*     tab_ima      (S) (char ***) : pointeur sur tableau des images listees */
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_ima_lum   (S) (int)     :     = -1 repertoire inexistant    */                                    
-/*					       = > 0 nombre d'images listees */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-long int cai_liste_ima_lum (char *repert,
-		           char ***tab_ima)
-
-
-{
-   DIR *dirp;		/* pointeur sur structure ouverture repertoire */
-   struct dirent *dp;   /* structure resultat de la fonction readdir   */
-   char *pch0,*pch1;    /* pointeurs sur chaine de caracteres          */
-   char car;            /* variable de travail                         */  
-   int nb_ima;          /* nombre d'images lum identifiees             */
-   long int i;          /* indice de boucle                            */
-   long int ll,dif;     /* variables de travail                        */
-   char blanc;          /* caractere blanc                             */
-
-
-/*........................................
-   INITIALISATION et ouverture du repertoire choisi
-  .........................................*/
-   nb_ima=0;
-
-   dirp=opendir(repert);
-
-   if(dirp!=NULL)
-   {
-/*......................................
-
-   premiere passe pour comptabiliser les images du format donne
-
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE LUM
-      (EXTENSION =.lum)
-     ..........................................*/
-
-      while((dp=readdir(dirp))!=NULL)
-      {
-    	 pch0=strstr(dp->d_name,".lum");
-     	if (pch0 != NULL)
-     	{
-        	ll = strlen(dp->d_name);
-        	dif = (long)(dp->d_name-pch0);
-        	dif=labs(dif);
-        	pch1=pch0+4;
-        	if (((ll-4)==dif)||((*pch1)==blanc))
-	     		nb_ima=nb_ima+1;
-     
-    	 }
-
-      }
-
-    closedir(dirp);
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES DU FORMAT LUM
-     ......................................*/
-    *tab_ima = (char **) calloc(nb_ima,sizeof(char *));
-    for (i=0;i<nb_ima;i=i+1)
-      (*tab_ima)[i]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE LUM
-       (EXTENSION =.lum)
-   SI C`EST LE CAS,STOCKAGE DANS LA LISTE
-   ..........................................*/
-   dirp=opendir(repert);
-
-   nb_ima=0;
- 
-   while((dp=readdir(dirp))!=NULL)
-   {
-     pch0=strstr(dp->d_name,".lum");
-     if (pch0 != NULL)
-     {
-        ll = strlen(dp->d_name);
-        dif = (long)(dp->d_name-pch0);
-        dif=labs(dif);
-        pch1=pch0+4;
-        if (((ll-4)==dif)||((*pch1)==blanc))
-        {
-            *pch0='\0';
-            strcpy((*tab_ima)[nb_ima],dp->d_name);
-	    nb_ima=nb_ima+1;
-        }
-     
-     }
-   }   
-
-    closedir(dirp);
-
-   }
-   else
-   {
-     /* Erreur : Repertoire inexistant */
-      nb_ima=-1;
-   }
-
-    return(nb_ima);
-
-}
-/* Fin de l'operation cai_liste_ima_lum*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_lum                                      */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image au format lum       */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_lecture_lum(nom_image,           */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_lum (S) (CAI_IMAGE *)  : = NULL si pb               */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */                                                                         /*                                                                           */  
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte des UOCT, I4,UI2,UI4 et R8    */
-/*                            en lecture et ecriture en big et little endian */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_lecture_lum(char *repert,
-				     char *nom_image,
-				     int  *nb_can,
-				     int  *nboct_pix,
-				     int  *nb_col,
-				     int  *nb_lig)
-{
-   FILE *fic_in;	      /* pointeur sur descripteur de fichier         */
-   CAI_IMAGE *image1;	      /* pointeur su descripteur de fichier image    */       
-   int  iret,icr;	      /* indicateur de retour ok ou pas              */
-   char nom_fic[1024];	      /* nom du fichier en-tete		             */
-   char nom_fic_canal[1024];  /* nom fichier canal dont on teste existence   */
-   int nbbits;		      /* nb de bits par pixel du fichier en-tete     */
-   int retour;		      /* retour de la fonction comparaison chaines   */ 
-   int i,num;		      /* indice 			             */
-   char *type_cod;	      /* type de codage du pixel                     */
-   char cod_pix[5];           /* codage du pixel                             */
-   char type_image[3];        /* type code+ordre rangement octets dans entete*/
-   char *type_machine;        /* ordre rangement octets machine travail      */
-   char  buf[15];             /* buffer contenant entete image               */
-   int v;	              /* comparaison type machine-type image         */
-   char *v1;                  /* comparaison type image avec chaine vide     */
-   int nb_col2, nb_lig2,nb;   /* variables intermediaires inversion octets   */
-   int taille;                /* nb d'octets par pixel                       */
-   
-   /*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   nb=2;
-   *nb_can=0;
-
-   *nb_lig=0;
-
-   *nb_col=0;
-
-   *nboct_pix=0;
-   
- 
-   iret=1;
-   type_cod = NULL;
-   type_cod = (char *) calloc(5,sizeof(char)) ; 
-   type_machine = NULL;
-   type_machine = (char *) calloc(3,sizeof(char));
-   
-   if (type_machine == NULL)
-   {
-      iret=0;
-      strcpy(CAI_ERREUR,"Erreur allocation memoire dans cai_ouvre_lecture");
-   }
-
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-   
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoire dans cai_ouvre_lecture");
-    }
-   else
-   {
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long)strlen(repert)!=0)
-   {
-       sprintf(nom_fic,"%s/%s.lum",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.lum",nom_image);
-   }
-
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : modifications fopen binaire pour PC/NT         */
-/*****************************************************************************/
-   fic_in=NULL;
-   fic_in=fopen(nom_fic,"rb");
-   if (fic_in==NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur ouverture fichier entete LUM");
-    }
-   else
-   {
-   
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications indications Big ou Little Endian */
-/*****************************************************************************/   
-/*..................................
-   recuperation infos completes 
-  ......................................*/   
-   	fread(buf,12,1,fic_in);
-   		
-/*..................................
-   recuperation du type de codage des pixels
-        et donc du type de l'image 
-  ......................................*/
-	memcpy(type_cod,&buf[8],4);
-	taille = cai_recuptyp_lum(type_cod,type_image,&nbbits,cod_pix);
-        if (taille != -1)
-        {
-            sprintf(image1->TYPE_COD,type_cod);
-	    image1->NB_BITS_PIX=nbbits;
-    	    image1->NBOCT_PIX=taille;
-	    sprintf(image1->COD_PIX,cod_pix);
-	    *nboct_pix = image1->NBOCT_PIX;
-	    *nb_can = 1;	
-        }
-	else
-	{
-	   iret=0;
-     	   sprintf(CAI_ERREUR,"Type de codage LUM non reconnu : %s",type_cod);
-           goto ERREUR;
-        }
-			
- /*..................................
-   determination ordre de rangement 
-   des octets sur machine de travail
-  ......................................*/   
-   	type_machine = cai_test_pFpf();
-   
- /*..................................
-   determination des autres infos 
-   en fonction inversion
-  ......................................*/  
-   
-	v = strncmp(type_machine,type_image,2);
-	v1 = strrchr(type_image,'E');
-	  	  	
-/*..................................
-   recuperation du nombre de colonne 
-  ......................................*/
-	memcpy(nb_col,&buf[0],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) &&  (v1!=NULL) ) 
-	{	
-		swab( (void*)nb_col, (void*)&nb_col2,4 );
-		cai_inverser_tableau((short *)nb_col, (short *)&nb_col2,nb);
-	}
-/*..................................
-   recuperation du nombre de lignes 
-  ......................................*/
-	memcpy(nb_lig,&buf[4],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) && (v1!=NULL) )
-	{
-		swab( (void*)nb_lig, (void*)&nb_lig2,4 );
-		cai_inverser_tableau((short *)nb_lig, (short *)&nb_lig2,nb);
-	}
-	
-/**********************/	
-/* fin modifications  */
-/**********************/	
-  }
-
-/*..................................
-   Fermeture du fichier 
-  ......................................*/
-  if (fic_in != NULL)  fclose(fic_in);
-
-   if (iret !=0)
-   {
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-
-     nom_fic[0]='\0';
-     nom_fic_canal[0]='\0';
-
-     if ((long)strlen(repert)!=0)
-     {
-       sprintf(nom_fic_canal,"%s/%s.lum",repert,nom_image);
-      }
-      else
-      {
-       sprintf(nom_fic_canal,"%s.lum",nom_image);
-      }
-  
-     num=open(nom_fic_canal,O_RDONLY|O_BINARY,0);
-     if (num!= -1)
-     {
-
-       for (i=0;i<*nb_can;i=i+1)
-       {
-           sscanf(nom_image,"%s",image1->NOM_FIC_CAN);
-           sscanf(nom_image,"%s",image1->NOM_UTIL_CAN);
-           image1->ACCES_CANAL_INT[i]=num;
-           image1->POS_OCTET[i]=(*nb_col)*image1->NBOCT_PIX;
-	}
-	
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications indications Big ou Little Endian */
-/*****************************************************************************/ 
-	   if ( (v!=0) && (v1!=NULL) )
-	   {
-		image1->INV_OCTETS =1;
-	   }
-	   else
-	   {
-		image1->INV_OCTETS =0;
-	   }
-	   
-/**************************/
-/*    fin modifications   */ 
-/**************************/        
-      }
-      else
-         iret=0;
-     }
-    }
-//    if (type_cod!=NULL) free(type_cod);
-//    if (type_machine!=NULL) free(type_machine);
-
-ERREUR:
-
-    if (iret == 0)
-    {
-	return (NULL);
-     }
-    else
-    {
-      return(image1);
-     }
-}
-/* 
-   Fin de l'operation cai_ouvre_lecture_lum
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_lum                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format lum et de tous les fichiers qui la composent          */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_IMAGE *cai_ouvre_creation_lum(nom_image,           */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            label)           */
-/*                                                                           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_lum (S) (CAI_IMAGE *) :     =NULL si pb            */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_creation_lum(char *repert,
-				      char * nom_image,
-				      int  *nb_can,
-				      int  *nboct_pix,
-				      int  *nb_col,
-				      int  *nb_lig,
-				      char *label)
-
-
-{
-   FILE *fic;		      /* pointeur sur descripteur de fichier         */
-   CAI_IMAGE *image1;	      /* pointeur su descripteur de fichier image    */ 
-   char nom_fic[1024];	      /* nom du fichier en-tete		             */
-   long retour;		      /* retour de fonction 			     */ 
-   int i,num;		      /* indice 				     */
-   struct stat	buf_stat;     /* structure decrivant status de fichier       */
-   unsigned char *Header;     /* entete du fichier lum 	                     */
-   int taille_entete;	      /* taille de l'entete		             */
-   char *type_image;          /* type_code+infos ordre des octets dans entete*/
-   int reconnaissance_type;   /* taille du pixel                             */
-
-   fic = NULL;
-   image1=NULL;
-
-
-/*********************************************/
-/* Verification qu'un seul canal est demande */
-/*********************************************/
-   if (*nb_can != 1)
-   {
-	image1 = NULL;
- 	sprintf ( CAI_ERREUR , 
-		"Une image LUM ne peut contenir qu'un seul canal");
-	goto ERREUR;
-   }
-    
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_creation");
-     goto ERREUR;
-   }
-
-/*.................................................
-   Constitution du nom du fichier entete et verification qu'il
-   n'existe pas deja
-  .................................................*/
-
-   nom_fic[0]='\0';
-   if ((long)strlen(repert)!=0)
-   {
-       sprintf(nom_fic,"%s/%s.lum",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.lum",nom_image);
-    }
-   
-   retour = stat ( nom_fic , &buf_stat );
-   if ( retour == 0 )
-   { 
-	sprintf ( CAI_ERREUR , "L'image %s LUM existe \n" , nom_image );
-	goto ERREUR;
-   }
-
-/*......................................................
-  Ouverture du fichier entete en ecriture 
-  Ecriture du contenu
-  ..........................................................*/
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : modifications fopen binaire pour PC/NT         */
-/*****************************************************************************/
-  fic = NULL;
-  fic = fopen(nom_fic,"wb");
-  if (fic == NULL)
-  {
-      sprintf(CAI_ERREUR,"Erreur: Creation fichier %s impossible\n",nom_fic);
-      goto ERREUR;
-   }
-   taille_entete = (*nb_col)*(*nboct_pix);
-   Header = (unsigned char *) calloc(taille_entete,sizeof( unsigned char));
-   if (Header == NULL)
-   {
-      sprintf(CAI_ERREUR,"Erreur alloc: Creation fichier %s impossible\n",
-				nom_fic);
-      goto ERREUR;
-   }
-
-/*********************************************/
-/* ecriture du nombre de colonnes de l'image */
-/*********************************************/
-   memcpy(Header,nb_col , 4 );
-
-/*******************************************/
-/* ecriture du nombre de lignes de l'image */
-/*******************************************/
-   memcpy(&Header[4],nb_lig , 4 );
-
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications indications Big ou Little Endian */
-/*****************************************************************************/  	
-  
-/*******************************************/
-/* ecriture du type de l'image dans la zone*/
-/*     reservee au type de codage          */
-/*******************************************/
-   
-  /*....................................
-  test sur la machine de travail pour 
-         typer image en LE ou BE      
-  .....................................*/
-  
-  type_image = cai_test_pFpf();
-
-
-/**************************************/
-/* ecriture type de codage de l'image */
-/**************************************/
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  Maj du tag TYPE lorsque l'utilisateur le      */
-/*                                  precise dans le param  "label"           */
-/*****************************************************************************/
-/* Verification si type de codage reconnu dans le label */
-  reconnaissance_type = cai_istyp_connu(label);
-  if (strncmp(type_image,"BE",2)==0)
-  {
-     if (*nboct_pix == 1) 
-     {
-	if (reconnaissance_type < 1)
- 	   sprintf(image1->TYPE_COD,"08BI");
-	else if (reconnaissance_type ==1)
-           sprintf(image1->TYPE_COD,"08BU");
-        else 
-        {
-	  sprintf(CAI_ERREUR,"incoherence entre TYPE et Nb bits par pixels\n");
-	  goto ERREUR;
-        }          
-      }
-      else if (*nboct_pix == 2)
-      {
-	if (reconnaissance_type ==3)
-           sprintf(image1->TYPE_COD,"16BU");
-        else if ((reconnaissance_type == -1)|| (reconnaissance_type == 2))
-           sprintf(image1->TYPE_COD,"16BI");
-        else 
-        {
-	  sprintf(CAI_ERREUR,"incoherence entre TYPE et Nb bits par pixels\n");
-	  goto ERREUR;
-        }     
-      }
-      else if (*nboct_pix == 4) 
-      {
-	if (reconnaissance_type ==4)
-           sprintf(image1->TYPE_COD,"32BI");
-        else if (reconnaissance_type ==5)
-           sprintf(image1->TYPE_COD,"32BU");
-        else if ((reconnaissance_type == -1)|| (reconnaissance_type == 6))
-           sprintf(image1->TYPE_COD,"FLOA");
-        else 
-        {
-	  sprintf(CAI_ERREUR,"incoherence entre TYPE et Nb bits par pixels\n");
-	  goto ERREUR;
-        }     
-      }
-      else if (*nboct_pix == 8) 
-      {
-          if ((reconnaissance_type == -1)|| (reconnaissance_type ==7))
-               sprintf(image1->TYPE_COD,"R8B ");
-          else 
-          {
-	    sprintf(CAI_ERREUR,"incoherence entre TYPE et Nbbits par pixels\n");
-	    goto ERREUR;
-           } 
-      }
-    }
-  else
-  {
-     if (*nboct_pix == 1) 
-     {
-	if (reconnaissance_type < 1)
- 	   sprintf(image1->TYPE_COD,"08LI");
-	else if (reconnaissance_type ==1)
-           sprintf(image1->TYPE_COD,"08LU");
-        else 
-        {
-	  sprintf(CAI_ERREUR,"incoherence entre TYPE et Nb bits par pixels\n");
-	  goto ERREUR;
-        }      
-      }
-      else if (*nboct_pix == 2)
-      {
-	if (reconnaissance_type ==3)
-           sprintf(image1->TYPE_COD,"16LU");
-        else if ((reconnaissance_type == -1)|| (reconnaissance_type == 2))
-           sprintf(image1->TYPE_COD,"16LI");
-        else 
-        {
-	  sprintf(CAI_ERREUR,"incoherence entre TYPE et Nb bits par pixels\n");
-	  goto ERREUR;
-        }     
-      }
-      else if (*nboct_pix == 4) 
-      {
-	if (reconnaissance_type ==4)
-           sprintf(image1->TYPE_COD,"32LI");
-        else if (reconnaissance_type ==5)
-           sprintf(image1->TYPE_COD,"32LU");
-        else if ((reconnaissance_type == -1)|| (reconnaissance_type == 6))
-           sprintf(image1->TYPE_COD,"FLOL");
-        else 
-        {
-	  sprintf(CAI_ERREUR,"incoherence entre TYPE et Nb bits par pixels\n");
-	  goto ERREUR;
-        }     
-      }
-      else if (*nboct_pix == 8) 
-      {
-          if ((reconnaissance_type == -1)|| (reconnaissance_type ==7))
-               sprintf(image1->TYPE_COD,"R8L ");
-          else 
-          {
-	    sprintf(CAI_ERREUR,"incoherence entre TYPE et Nbbits par pixels\n");
-	    goto ERREUR;
-           } 
-      }
-
-   }
-   memcpy(&Header[8],image1->TYPE_COD , 4 );
-  
-/***********************/
-/* fin modifications   */
-/***********************/
-  
-   retour = fwrite ( Header , taille_entete , 1 , fic );
-   free(Header);
-   if ( retour == 0 )
-   {
-      sprintf ( CAI_ERREUR ,
-		 "Erreur : ecriture entete impossible dans fichier %s\n",
-		  nom_fic );
-      goto ERREUR;
-   }
-       
-/*************************************************/
-/* Fermeture du fichier                          */
-/*************************************************/
-
-   if (fic != NULL) fclose ( fic );
-
-   num = open(nom_fic,O_RDWR|O_BINARY,PERMS); 
-   if (num == -1)
-   {
-
-     sprintf(CAI_ERREUR,"Erreur: Creation %s impossible\n",nom_fic);
-     goto ERREUR;
-   } 
-
-   for (i=0;i<*nb_can;i=i+1)
-   {
-     image1->ACCES_CANAL_INT[i]=num;
-     image1->POS_OCTET[i]=taille_entete;
-    }
-
-  return (image1);
-
-ERREUR :
-
-   if (fic !=NULL) cai_dest_ima_lum ( repert ,  nom_image );
-   return(NULL);
-}
-  
-/* 
-  Fin de l'operation cai_ouvre_creation_lum
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_lum                                      */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image LUM                  */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_lecture_canal_lum(image1, canal,        */  
-/* ------------------                        premiere_ligne,                 */
-/*                                           premiere_colonne,               */
-/*                                           nombre_lignes_lire ,            */
-/*                                           nombre_colonnes_lire,           */
-/*                                           pas_ligne ,pas_colonne,         */
-/*                 		             data_image )                    */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (int) : numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal_lum (S) (CAI_OK_KO) :     = CAI_KO si pb            */
-/*                                                 = CAI_OK si OK            */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_lecture_canal_lum(CAI_IMAGE *image1 ,  
-                                    int *canal ,           
-    		                    int * premiere_ligne  ,   
-     		                    int *premiere_colonne,
-                                    int *nombre_lignes_lire ,
-                                    int *nombre_colonnes_lire,
-                                    int *pas_ligne ,          
-                                    int *pas_colonne,
-		                    unsigned char *data_image )        
-
-{
-
- int   num,i,j,k,kk;        /* variables de travail                          */
- long pt_oct,n;		    /* position courante dans le fichier image       */
- int no_oct;                /* numero du premier octet a lire                */
- int iret;                  /* indicateur d'erreur                           */
- int lig;                   /* indice de boucle sur les lignes               */
- int   oct_pix;             /* nb octets par pixels                          */
- long  nb_oct;              /* nb oct =1er octet a lire - position courante  */
- long  oct_lig;             /* nb oct. par ligne en considerant taille pixel */
- unsigned char *buf_lec;    /* buffer lecture d'une  ligne                   */
- unsigned char *deb,*pch;   /* pointeur chaine pour transfert  buffer sortie */
- unsigned char *data_image2;/* pointeur donnees image pour inversion octets  */
- int taille_image,Nb;       /* taille en octets de l'image                   */ 
- 
-
-/*********************************************/
-/* Verification qu'un seul canal est demande */
-/*********************************************/
- if (*canal != 1)
- {
-	image1 = NULL;
- 	sprintf ( CAI_ERREUR , 
-		"Une image LUM ne contient qu'un seul canal");
-        iret=CAI_KO;
- }
- else
- {
-/*...........................
-  Initialisations diverses
-  ..........................*/
-   iret=CAI_OK;
-   num=image1->ACCES_CANAL_INT[*canal-1];
-   oct_pix=image1->NBOCT_PIX;
-   taille_image = (*nombre_lignes_lire)*oct_pix*(*nombre_colonnes_lire);
-   data_image2 = NULL;
-   data_image2 = (unsigned char *) calloc(taille_image,sizeof(unsigned char));
-
-   if (data_image2 == NULL)
-   {
-      strcpy(CAI_ERREUR,"Erreur allocation memoire dans cai_lecture_canal");
-      iret=CAI_KO;
-      goto FIN;
-   }
-
-   
-/*.............................................................*/
-/* verification si lecture non sous-echantillonnee par bandeau */
-/*.............................................................*/
-  if ((*nombre_colonnes_lire==image1->NB_COL)&&(*premiere_colonne==1)&&
-      (*pas_ligne==1)&&(*pas_colonne==1))
-  {
-       oct_lig=(*nombre_lignes_lire)*oct_pix*(image1->NB_COL);
-       pch=data_image;
-
-/*............................................
-	Recherche de la position courante dans le fichier
-  ............................................*/
-        pt_oct=lseek(num,0L,1);
-
-/*................................
-        Calcul du numero du 1er octet a lire
-  ....................................*/
-        lig=*premiere_ligne;  
-	no_oct=image1->POS_OCTET[*canal-1]+
-	          (lig-1)*image1->NB_COL*oct_pix;
-
-
-/*..................................
-        Saut d'octets pour etre positionne sur la ligne a lire
-  .......................................*/
-        nb_oct=(long)(no_oct-pt_oct);
-        lseek(num,nb_oct,1);
-
-/*...........................................
-        lecture des lignes completes
-  ................................................*/
-         n=read(num,pch,oct_lig);
- 
-         if (n<=0)
-         {
-             	iret=CAI_KO;
-             	strcpy(CAI_ERREUR,"Erreur lecture donnee image LUM");
-	        goto FIN;
-         }
-
-   }
-   else
-   {
-	oct_lig=oct_pix*image1->NB_COL;
-
-/*..............................................
-        allocation de memoire pour lire une ligne image
- ............................................. */
-        buf_lec = NULL;
-      	buf_lec = (unsigned char *) calloc(oct_lig,sizeof(unsigned char));
-      	if (buf_lec == NULL)
-      	{
-     	 	iret=CAI_KO;
-      		strcpy(CAI_ERREUR,"Probleme allocation memoire");
-      	}
-      	else
-      	{
-/*....................
-        Initialisation
-  ......................*/
-            lig=*premiere_ligne;
-       	    i=1;
-            pch=data_image;
-
-/*.....................
-         Pour chaque ligne a lire
-  .......................................*/
-           while ((i <= *nombre_lignes_lire)&&(iret==CAI_OK))
-           {  
-/*............................................
-	    Recherche de la position courante dans le fichier
-  ............................................*/
-               pt_oct=lseek(num,0L,1);
-
-/*................................
-            Calcul du numero du 1er octet a lire
-  ....................................*/
-               
-	      no_oct=image1->POS_OCTET[*canal-1]+
-	          (lig-1)*image1->NB_COL*oct_pix;
-
-
-/*..................................
-            Saut d'octets pour etre positionne sur la ligne a lire
-  .......................................*/
-              nb_oct=(long)(no_oct-pt_oct);
-              lseek(num,nb_oct,1);
-
-/*...........................................
-            lecture d'une ligne image
-  ................................................*/
-              n=read(num,buf_lec,oct_lig);
- 
-              if (n<=0)
-              {
-             	iret=CAI_KO;
-             	strcpy(CAI_ERREUR,"Erreur lecture donnee image LUM");
-              }
-              else
-              { 
-/*......................................
-             Sauvegarde des donnees lues entenant compte du pas 
-             d'echantillonnage en colonne
-  ........................................*/           
-                 deb=buf_lec+(*premiere_colonne-1)*oct_pix;
-                 j=1;
-                 while (j <= *nombre_colonnes_lire)
-	         {  
-                	for (k=0;k<oct_pix;k=k+1)
-                	{
-                  	  *(pch+k)=*(deb+k);
-                 	}
-                 	j=j+1;
-                	 pch=pch+oct_pix;
-                	 deb=deb+(*pas_colonne*oct_pix);
-                  }   
-             
-              }
-              i=i+1;
-              lig=lig+(*pas_ligne);
-           }        
-          	    
-	   free(buf_lec);
-           buf_lec=NULL;
-      	}
-    }
-  }
-  
-  
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications indications Big ou Little Endian */
-/*****************************************************************************/    
-
-     
-   if ( (iret!= CAI_KO) && (image1->INV_OCTETS==1) && (oct_pix!=1) )
-   {
-	
-	/*modification ordre selon nb octets par pixel*/
-       	swab( (void*)(data_image), (void*)(data_image2), taille_image);
-		
-	if (oct_pix!=2)
-        { 
-           Nb = taille_image/2;
-	   cai_inverser_tableau(data_image, data_image2,Nb);
-	}
-	else 
-	   for (i=0; i<taille_image;i++)
-	   {
-	   /*stockage dans data_image*/
-	   data_image[i] = data_image2[i];
-	   }	   
-	   
-    }
-       
-/*************************/
-/*   fin modifications   */    
-/*************************/
- FIN:  
-   if (data_image2!= NULL) free(data_image2);
- 
-  return(iret);
-}
-
-/*
-  Fin de l'operation cai_lecture_canal_lum
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal_lum                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un canal d'une image lum                  */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ecriture_canal_lum(image1, canal,       */ 
-/* ------------------                                 premiere_ligne,        */
-/*                                                    nombre_lignes_ecrire,  */
-/*                                                    nombre_colonnes_ecrire,*/
-/*                 		                      data_image )           */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal                 (E) (int) : numero du canal a ecrire            */
-/*     premiere_ligne        (E) (int) : premiere ligne a ecrire ds l'image  */
-/*     nombre_lignes_ecrire  (E) (int) : nombre de lignes a ecrire           */
-/*     nombre_colonnes_ecrire(E) (int) : nombre de colonnes a ecrire         */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels ecris alloue et   */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_ecriture_canal_lum    (S) (CAI_OK_KO) : = CAI_KO si pb            */
-/*                                                     = CAI_OK si OK        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_ecriture_canal_lum (CAI_IMAGE *image1 ,  
-                                      int *canal ,           
-    		                      int *premiere_ligne  ,   
-                                      int *nombre_lignes_ecrire ,
-                                      int *nombre_colonnes_ecrire,
-		                      unsigned char *data_image )
-{
-long	position_first_lig;	/* position de la 1ere ligne a ecrire    */
-long	position_courante;	/* position courante dans le fichier     */
-long	deplacement;		/* deplacement a effectuer               */
-unsigned char *buff_lig;	/* pointeur de travail  bandeau a ecrire */
-long	cr_write;		/* code retour de write                  */
-int num;                        /* descripteur de fichier                */
-int nboct_pix;			/* nombre d'octets par pixel             */
-int nb_canaux;			/* nombre de canaux de l'image totale    */
-int nboct_ecrire;		/* nb d'octets du bandeau a ecrire       */
-
-/*********************************************/
-/* Verification qu'un seul canal est demande */
-/*********************************************/
-	if (*canal != 1)
- 	{
-		image1 = NULL;
- 		sprintf ( CAI_ERREUR , 
-			"Une image LUM ne contient qu'un seul canal");
-		goto ERREUR;
- 	}
-
-/* ................
-   Initialisations 
-  .................*/
-
-	num = image1->ACCES_CANAL_INT[*canal-1];
-	nboct_pix = image1->NBOCT_PIX;
-	nb_canaux = 1;
-	position_first_lig = 0;
-	position_courante = 0;
-	deplacement = 0;
-	nboct_ecrire = 0;
-
-/********************************************************/
-/* Calcul de la position de la premiere ligne a ecrire 	*/ 
-/********************************************************/
-
-	position_first_lig = (long) ( image1->POS_OCTET[*canal-1] + 
- 		+ (*premiere_ligne - 1) * 
-		(*nombre_colonnes_ecrire) * nboct_pix );
-/********************************************************/
-/* Recuperation de la position courante			*/
-/********************************************************/
-
-	position_courante = lseek ( num , 0L , 1 );
-
-/********************************************************/
-/* Calcul du deplacement jusqu'a la 1ere ligne a ecrire	*/
-/********************************************************/
-
-	deplacement = position_first_lig - position_courante;
-
-/*******************************************************/
-/*	deplacement jusqu'a la premiere ligne a ecrire*/
-/*******************************************************/
-
-	lseek ( num , deplacement , 1 ); 
-
-/***********************************************/
-/*	position en debut de bandeau a ecrire  */
-/***********************************************/
-
-	buff_lig = data_image; 
-
-/********************************************************/
-/*	ecriture des lignes				*/
-/********************************************************/
-	nboct_ecrire = (*nombre_colonnes_ecrire)*nboct_pix*
-			(*nombre_lignes_ecrire);
-
-	cr_write = write ( num , buff_lig,nboct_ecrire);
-
-	if ( cr_write !=  nboct_ecrire)
-	{
-		   strcpy ( CAI_ERREUR , "Erreur ecriture canal image lum\n" );
-		   goto ERREUR;
-	}
- 
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-/* 
-  Fin de l'operation cai_ecriture_canal_lum
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_lum                                              */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format lum et de           */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_lum(image1)                       */  
-/* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_lum    (S) (CAI_OK_KO) :       = CAI_KO si pb               */
-/*                                              = CAI_OK si OK               */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO  cai_ferme_lum (CAI_IMAGE *image1)
-
-
-{
-
- int iret;                 /* code retour de l'operation         */
- int num;                  /* descripteur du fichier a fermer    */
- unsigned char Header[12]; /* entete a MAJ si creation           */
- int temp;                 /* variable temporaire                */
- long pt_oct;		   /* position courante ds fichier image */
- long retour;
-
-/*--------------------------*/
-/* Initialisations diverses */
-/*--------------------------*/
- iret=CAI_OK;
- num=image1->ACCES_CANAL_INT[0];
-
-/*--------------------------------------------------*/
-/* Mise a jour de l'entete si ouverture en creation */
-/*--------------------------------------------------*/
-if (image1->MODE == CAI_ECRITURE)
-{
-   pt_oct=lseek(num,0L,0);
- 
-/*******************************************************/
-/* ecriture nombre de colonnes		               */
-/*******************************************************/
-   temp = image1->NB_COL;
-   memcpy(Header,&temp , 4 );
-
-/*******************************************************/
-/* ecriture nombre de ligne			       */
-/*******************************************************/
-   temp = image1->NB_LIG;
-   memcpy(&Header[4],&temp , 4 );
-
-/*****************************************************************/
-/* ecriture du type de codage en fonctions de la taille du pixel */
-/* et du codage des Poids Forts, poids faibles                   */
-/*****************************************************************/
-   memcpy(&Header[8],image1->TYPE_COD , 4 );
-
-   retour = write ( num,Header , 12 );
-   if ( temp == 0 )
-   {
-      sprintf ( CAI_ERREUR ,
-       "Erreur : MAJ entete a la fermeture impossible ds fichier lum\n");
-      goto ERREUR;
-   }
-
-}
-
-/*.............................................
-   Fermeture du fichier qui contient tous les canaux
-  .............................................*/
-   if (num>0) close(num);
-
-  return (iret);
-
-ERREUR:
-  return(CAI_KO);
-
-}
-
-/*
-  Fin de l'operation cai_ferme_lum
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_lum                                           */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stocke en lum et de         */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_dest_ima_lum(repertoire,nom_ima)        */  
-/* ------------------                                                        */
-/*     repertoire   (E) (char *) : repertoire de l'image a detruire          */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_dest_ima_lum (S) (CAI_OK_KO) : = CAI_KO si pb                     */
-/*                                            = CAI_OK si OK                 */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO cai_dest_ima_lum ( char *repertoire , 
-                                 char *nom_ima )
-
-
-{
-int	i_can;			/* compteur de canaux */
-int     iret;                   /* code retour fonction fermetrue lecture */
-char	str_num_canal[3];	/* suffixe numero du canal */
-char	nom_fic_entete[1024];	/* nom du fichier entete a detruire */
-char    nom_ima_complet[1024];  /* repertoire + nom de l'image */
-char	nom_fic_canal[1024];	/* nom du fichier canal a detruire */
-
-int	cr_stat;		/* code retour de fonction status de fichier */
-struct stat buf_stat;		/* structure decrivant status de fichier */ 
-
-CAI_IMAGE   *image1;             /* structure ouverture image */
-int         nb_can;	        /* nombre de canaux de l'image */
-int         nboct_pix;		/* nombre d'octets par pixel image */
-int         nb_col;	        /* nombre de colonnes de l'image */
-int         nb_lig;             /* nombre de lignes de l'image */
-
-/************************************************/
-/* Constitution du nom du fichier d'entete	*/
-/************************************************/
-
-if ((long)strlen(repertoire)!= 0)
-{
-  sprintf( nom_ima_complet, "%s/%s" ,repertoire,nom_ima);
-}
-else
-{
-  strcpy ( nom_ima_complet , nom_ima);
-}
-  sprintf(nom_fic_entete ,"%s.lum", nom_ima_complet);
-
-/************************************************/
-/* Destruction du fichier d'entete		*/
-/************************************************/
-
-cr_stat = stat ( nom_fic_entete , &buf_stat );
-if ( cr_stat == 0 )
-	unlink ( nom_fic_entete );
-
-
-return (CAI_OK);
-
-}
-/*
- Fin de l'operation cai_dest_ima_lum
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_modifie_lum                                      */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture-ecriture d'une image au format  */
-/* -----     lum et de tous les fichiers qui la composent                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_modifie_lum(nom_image,           */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_modifie_lum (S) (CAI_IMAGE *)  : = NULL si pb               */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */                                                                            /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_modifie_lum(char *repert,
-				     char *nom_image,
-				     int  *nb_can,
-				     int  *nboct_pix,
-				     int  *nb_col,
-				     int  *nb_lig)
-
-
-{
-   FILE *fic_in;	      /* pointeur sur descripteur de fichier         */
-   CAI_IMAGE *image1;	      /* pointeur su descripteur de fichier image    */       
-   int  iret,icr;	      /* indicateur de retour ok ou pas              */
-   char nom_fic[1024];	      /* nom du fichier en-tete		             */
-   char nom_fic_canal[1024];  /* nom fichier canal dont on teste existence   */
-   int nbbits;		      /* nb de bits par pixel du fichier en-tete     */
-   int retour;		      /* retour de la fonction comparaison chaines   */ 
-   int i,num;		      /* indice 			             */
-   char *type_cod;	      /* type de codage du pixel                     */
-   char cod_pix[5];           /* codage du pixel                             */
-   char type_image[3];        /* type code+ordre rangement octets dans entete*/
-   char *type_machine;        /* ordre rangement octets machine travail      */
-   char  buf[15];             /* buffer contenant entete image               */
-   int v;	              /* comparaison type machine-type image         */
-   char *v1;                  /* comparaison type image avec chaine vide     */
-   int nb_col2, nb_lig2,nb;   /* variables intermediaires inversion octets   */
-   int taille;                /* nb d'octets par pixel                       */
-
-    
-   /*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   nb=2;
-   *nb_can=0;
-
-   *nb_lig=0;
-
-   *nb_col=0;
-
-   *nboct_pix=0;
- 
-   iret=1;
-   
-   type_cod = NULL;
-   type_cod = (char *) calloc(5,sizeof(char)) ; 
-   type_machine = NULL;
-   type_machine = (char *) calloc(3,sizeof(char));
-   
-   if (type_machine == NULL)
-   {
-      iret=0;
-      strcpy(CAI_ERREUR,"Erreur allocation memoire dans cai_ouvre_lecture");
-   }
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-   
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
- if (image1==NULL)
- {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_modifie");
- }
- else
- {
-
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long)strlen(repert)!=0)
-   {
-       sprintf(nom_fic,"%s/%s.lum",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.lum",nom_image);
-   }
-
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : modifications fopen binaire pour PC/NT         */
-/*****************************************************************************/
-   fic_in=NULL;
-   fic_in=fopen(nom_fic,"rb");
-   if (fic_in==NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur ouverture fichier entete LUM");
-    }
-   else
-   {
-    	
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications indications Big ou Little Endian */
-/*****************************************************************************/  
- /*..................................
-   recuperation infos completes 
-  ......................................*/   
-   	fread(buf,12,1,fic_in);
-	
-   /*..................................
-   recuperation du type de codage des pixels
-        et donc du type de l'image 
-  ......................................*/
-	memcpy(type_cod,&buf[8],4);
-	taille = cai_recuptyp_lum(type_cod,type_image,&nbbits,cod_pix);
-
-        if (taille != -1)
-        {
-            sprintf(image1->TYPE_COD,type_cod);
-	    image1->NB_BITS_PIX=nbbits;
-    	    image1->NBOCT_PIX=taille;
-	    sprintf(image1->COD_PIX,cod_pix);
-	    *nboct_pix = image1->NBOCT_PIX;
-	    *nb_can = 1;	
-        }
-	else
-	{
-	   iret=0;
-     	   sprintf(CAI_ERREUR,"Type de codage LUM non reconnu : %s",type_cod);
-           goto ERREUR;
-        }
-	   	
- /*..................................
-   determination ordre de rangement 
-   des octets sur machine de travail
-  ......................................*/   
-   
-   	type_machine = cai_test_pFpf();
-	
- /*..................................
-   determination des autres infos 
-   en fonction inversion
-  ......................................*/  
-   
-	v = strncmp(type_machine,type_image,2);
-	v1 = strrchr(type_image,'E');
-	  	  	
-/*..................................
-   recuperation du nombre de colonne 
-  ......................................*/
-	memcpy(nb_col,&buf[0],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) && (v1!=NULL) )
-	
-	{	
-		swab( (void*)nb_col, (void*)&nb_col2,4 );
-		cai_inverser_tableau((short *)nb_col, (short *)&nb_col2,nb);
-	}
-/*..................................
-   recuperation du nombre de lignes 
-  ......................................*/
-	memcpy(nb_lig,&buf[4],4);
-
-/*modification si (type_image et type_machine st differentes) */
-/*et si (type_image existe avec BE ou LE)*/
-
-	if ( (v!=0) && (v1!=NULL) )
-	{
-		swab( (void*)nb_lig, (void*)&nb_lig2,4 );
-		cai_inverser_tableau((short *)nb_lig, (short *)&nb_lig2,nb);
-	}
-
-
-/************************/
-/*  fin modifications   */
-/************************/
-  }
-  
-/*..................................
-   Fermeture du fichier 
-  ......................................*/
-   if (fic_in != NULL) fclose(fic_in);
-
-   if (iret !=0)
-   {
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-
-     nom_fic[0]='\0';
-     nom_fic_canal[0]='\0';
-
-     if ((long)strlen(repert)!=0)
-     {
-       sprintf(nom_fic_canal,"%s/%s.lum",repert,nom_image);
-
-      }
-      else
-      {
-      	 sprintf(nom_fic_canal,"%s.lum",nom_image);
-        }
-  
-     num=open(nom_fic_canal,O_RDWR|O_BINARY,0);
-     if (num!= -1)
-     {
-
-       for (i=0;i<*nb_can;i=i+1)
-       {
-           sscanf(nom_image,"%s",image1->NOM_FIC_CAN);
-           sscanf(nom_image,"%s",image1->NOM_UTIL_CAN);
-            image1->ACCES_CANAL_INT[i]=num;
-           image1->POS_OCTET[i]=(*nb_col)*image1->NBOCT_PIX;
-        }
-	
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications indications Big ou Little Endian */
-/*****************************************************************************/  	
-	
-        if ( (v!=0) && (v1!=NULL) )
-	{
-	   image1->INV_OCTETS =1;
-	}
-	else
-	{
-	   image1->INV_OCTETS =0;
-	}
-	
-/***********************/
-/*  fin modifications  */        
-/***********************/
-
-      }
-      else
-         iret=0;
-     }
-    }
-ERREUR:
-    if (iret == 0)
-    {
-	return (NULL);
-     }
-    else
-    {
-      return(image1);
-     }
-
-}
-/* 
-   Fin de l'operation cai_ouvre_modifie_lum
-
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_recuptyp_lum                                           */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de verification si pixels de type lum ou non           */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  retour = cai_recuptyp_lum(type_code,SensCode,nbbits , */
-/*					             cod_pix)                */
-/*  ---------------- 		                                             */
-/*                                                                           */
-/*     type_code    (E) (char *) : type de codage a verifier                 */
-/*     SensCode     (S) (char *) : sens du codage BE ou LE                   */
-/*     nbbits       (S) (char *) : nombre de bits significatifs ds le pixel  */
-/*     cod_pix      (S) (char *) : codage du pixel                           */
-/*     retour       (S) (int)    : Taille du pixel en octet si OK reconnu    */ 
-/*				   -1 si non reconnu			     */
-/*                                                                           */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-int cai_recuptyp_lum(char *type_code, char *SensCode, int *nbbits, 
-							char *cod_pix)
-{
-	int ind;	        /* indice de boucle sur les types reconnus */
-	int trouve,icr,taille;  /* indice pour la recherche                */
-        int mod2;		/* modulo2				   */
-        char* pch0;
-
-/* Initialisations diverses */
-	trouve = -1;
-	taille = -1;
-	*nbbits=-1;
-	ind = 0;
-        pch0=NULL;
-	while ((trouve==-1)&&(ind< CAI_NB_LUM))
-	{
-	  pch0=strstr(type_code,CAI_LUM_TYP[ind]);
-	  if (pch0!=NULL)
-	       trouve=ind;
-	  else
-	       ind=ind+1;
-	}
-	if (trouve !=-1)
-        {
-            mod2=ind%2;
-            if (mod2==0) sprintf(SensCode,"BE");
-		 else sprintf(SensCode,"LE");            
-
-	    if (ind < 4)
-            {
-               icr=sscanf(type_code,"%d",nbbits);
-               if (icr ==0) *nbbits=-1 ;
-	       else
-               {
-		    trouve =(int)(*nbbits/8);
-		    if ((*nbbits%8)!=0) taille =trouve+1;
-			else taille  = trouve;		    
-               } 
-	       pch0 = strstr(type_code,"U");
-               if (taille == 1)
-               {
-		  if (pch0==NULL) sprintf(cod_pix,"OCT");
-			else sprintf(cod_pix,"UOCT");
-               }
-               else if (taille == 2)
-               {
-		  if (pch0==NULL) sprintf(cod_pix,"I2");
-			else sprintf(cod_pix,"UI2");
-               }
-               else if (taille == 4)
-               {
-		  if (pch0==NULL) sprintf(cod_pix,"I4");
-			else sprintf(cod_pix,"UI4");
-               }
-               else taille=-1;
-            }
-            else if  ((ind ==4)||(ind==5) ) 
-            {
-                taille=4;
-	        *nbbits = 32;
-		sprintf(cod_pix,"R4");
-
-            }
-            else if ((ind ==6)||(ind==7) )
-            {
-                taille=8;
-	        *nbbits = 64;
-		sprintf(cod_pix,"R8");
-            }
-        }
-
-/* sortie normale */
-	return(taille);
-}
-/* 
-   Fin de l'operation cai_recuptyp_lum
-*/
-
-
-
-
-
diff --git a/Utilities/CAI/cai_dll/src/cai_mapsat.c b/Utilities/CAI/cai_dll/src/cai_mapsat.c
deleted file mode 100755
index f50fe9c5f8..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_mapsat.c
+++ /dev/null
@@ -1,1080 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_mapsat.c                                                  */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format mapsat                                     */ 
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CISI)                                   */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    fevrier 1995                                        */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V2                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-
-
-# include <stdio.h>
-# include <string.h>
-# include <sys/types.h>
-# include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-
-#define _CAI_IMAGE
-# include "cai_image.h"
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header: cai_mapsat.c,v 1.4 98/07/21 14:54:07 cmf Exp $";
-
-extern char *getenv();
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_mapsat                                       */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images au format mapsat                 */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_ima_mapsat (repert,tab_ima)         */
-/* -----------------                                                         */
-/*                                                                           */
-/*     repert        (E) (char *)   : repertoire a explorer		     */
-/*     tab_ima       (S) (char ***) : pointeur sur tableau des images listees*/
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_ima_mapsat   (S) (int)     :  = -1 repertoire inexistant    */                                    /*					       = > 0 nombre d'images listees */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-int cai_liste_ima_mapsat (repert,
-		          tab_ima)
-
-char *repert;
-char ***tab_ima;
-
-{
-   DIR *dirp;		/* pointeur sur structure ouverture repertoire */
-
-struct dirent *dp;   /* structure resultat de la fonction readdir   */
-
-   char *pch0,*pch1;    /* pointeurs sur chaine de caracteres          */
-   char *pch2;          /* pointeurs sur chaine de caracteres          */
-   char car;            /* variable de travail                         */  
-   int nb_ima;          /* nombre d'images mapsat  identifiees         */
-   int i;               /* indice de boucle                            */
-
-  /*........................................
-   INITIALISATION et ouverture du repertoire choisi
-  .........................................*/
-   nb_ima=0;
-   dirp=opendir(repert);
-
-   if(dirp!=NULL)
-   {
-
-
-/*......................................
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE MAPSAT
-      (EXTENSION =.im ou .it)
-   ..........................................*/
-
-   while((dp=readdir(dirp))!=NULL)
-   {
-     car='.';
-     pch0=(char *)strrchr(dp->d_name,car);
-     if (pch0 != NULL)
-     {
-       car='i';
-       pch1=(char *)strrchr(dp->d_name,car);
-       if ((pch1 != NULL)&&(pch1==pch0+1))
-       {
-         car='m';
-         pch2=(char *)strrchr(dp->d_name,car);
-         if ((pch2 != NULL)&&(pch2==pch1+1))
-           {
-              *pch0='\0';
-              *pch1=' ';
-	      *pch2=' ';
-	      pch2++;
-	      if (*pch2 == '\0' )
-	      {
-	       nb_ima=nb_ima+1;
-	      }
-           }
-	 else         
-          {
-              car='t';
-              pch2=(char *)strrchr(dp->d_name,car);
-              if ((pch2 != NULL)&&(pch2==pch1+1))
-              {
-                *pch0='\0';
-                *pch1=' ';
-	        *pch2=' ';
-	      	pch2++;
-	      	*pch2='\0';
-	         nb_ima=nb_ima+1;
-               }
-	   }
-        }
-      }
-    }
-
-    (void)closedir(dirp);
-
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES DU FORMAT MAPSAT
-     ......................................*/
-    *tab_ima = (char **) calloc(nb_ima,sizeof(char *));
-    for (i=0;i<nb_ima;i=i+1)
-      (*tab_ima)[i]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE MAPSAT
-      (EXTENSION =.im ou .it)
-      SI C'EST LE CAS STOCKAGE DE L'IMAGE DANS LA LISTE DES IMAGES MAPSAT
-   ..........................................*/
-   dirp=opendir(repert);
-
-   nb_ima=0;
-   while((dp=readdir(dirp))!=NULL)
-   {
-     car='.';
-     pch0=(char *)strrchr(dp->d_name,car);
-     if (pch0 != NULL)
-     {
-       car='i';
-       pch1=strrchr(dp->d_name,car);
-       if ((pch1 != NULL)&&(pch1==pch0+1))
-       {
-         car='m';
-         pch2=(char *)strrchr(dp->d_name,car);
-         if ((pch2 != NULL)&&(pch2==pch1+1))
-           {
-              *pch0='\0';
-              *pch1=' ';
-	      *pch2=' ';
-	      pch2++;
-	      if (*pch2 == '\0' )
-	      {
-               strcpy((*tab_ima)[nb_ima],dp->d_name);
-	       nb_ima=nb_ima+1;
-	      }
-           }
-	 else         
-          {
-              car='t';
-              pch2=(char *)strrchr(dp->d_name,car);
-              if ((pch2 != NULL)&&(pch2==pch1+1))
-              {
-                *pch0='\0';
-                *pch1=' ';
-	        *pch2=' ';
-	      	pch2++;
-	      	*pch2='\0';
-                strcpy((*tab_ima)[nb_ima],dp->d_name);
-	         nb_ima=nb_ima+1;
-               }
-	   }
-        }
-      }
-    }
-
-    (void)closedir(dirp);
-
-   }
-   else
-   {
-     /* Erreur:Repertoire inexistant */
-        nb_ima=-1;
-   }
-
-    return(nb_ima);
-
-}
-
-/*
- Fin de l'operation cai_liste_ima_mapsat
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_mapsat                                   */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image au format mapsat    */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_lecture_mapsat (nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_mapsat  (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_lecture_mapsat(repert,
-				    nom_image,
-				    nb_can,
-				    nboct_pix,
-				    nb_col,
-				    nb_lig)
-
-char *repert;
-char *nom_image;
-int  *nb_can;
-int  *nboct_pix;
-int  *nb_col;
-int  *nb_lig;
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char *deb,*deb1;		/* pointeurs sur chaine de caracteres       */
-   char car[4];			/* indice du canal traite     		    */
-   int i,fic;			/* indice 				    */
-   int RVB,MONO;                /* indique le nombre de canaux              */
-   char type_inf[5];            /* type fichier lu dans l'entete            */
-   char label[64];		/* label lu dans l'entete		    */
-   int lig,col;                 /* variables intermediaires                 */
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-   *nb_lig=0;
-   *nb_col=0;
-   *nboct_pix=0;
-   iret=1;
-   RVB=3;
-   MONO=1;
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*.................................................
-   Constitution du nom du fichier MAPSAT .it
-   et test sur son existence
-  .................................................*/
-   nom_fic[0]='\0';
-   if (strlen(repert)!=0)
-   {
-      sscanf(repert,"%s",nom_fic);
-      strcat(nom_fic,"/");
-      strcat(nom_fic,nom_image);
-      strcat(nom_fic,".it");
-      nom_fic[strlen(repert)+1+strlen(nom_image)+3]='\0';
-   }
-   else
-   {
-      sscanf(nom_image,"%s",nom_fic);
-      strcat(nom_fic,".it");
-      nom_fic[strlen(nom_image)+3]='\0';
-   }
-   fic_in=fopen(nom_fic,"r");
-   *nb_can=RVB;
-   strncpy(car,".it",3);
-   car[3]='\0';
-   if (fic_in==NULL)
-    {
-/*...........................................................
-     Test sur l'existence du fichier MAPSAT avec extension .im
-   ..........................................................*/
-     nom_fic[0]='\0';
-     if (strlen(repert)!=0)
-     {
-      sscanf(repert,"%s",nom_fic);
-      strcat(nom_fic,"/");
-      strcat(nom_fic,nom_image);
-      strcat(nom_fic,".im");
-      nom_fic[strlen(repert)+1+strlen(nom_image)+3]='\0';
-     }
-     else
-     {
-      sscanf(nom_image,"%s",nom_fic);
-      strcat(nom_fic,".im");
-      nom_fic[strlen(nom_image)+3]='\0';
-     }
-     fic_in=fopen(nom_fic,"r");
-     *nb_can=MONO;
-     car[0]='\0';
-     strncpy(car,".im",3);
-     car[3]='\0';
-     if (fic_in==NULL)
-     {
-       iret=0;
-       strcpy(CAI_ERREUR,"Erreur Ouverture Fichier MAPSAT");
-       return (NULL);
-      }
-     }
-/*..........................................
-    verification que le fichier est de type mapsat
-  ...................................................*/
-    fread(type_inf,4,1,fic_in);
-/*...
-    pour une image trichrome
-  ......*/
-    if (*nb_can==RVB)
-    {
-      if (strncmp(type_inf,"ITRI",4) !=0)
-	{
-	   iret=0;
-	   strcpy(CAI_ERREUR,"l'image n'est pas au format MAPSAT");
-           return (NULL);
-         }
-      }
-
-/*.....
-     pour une image monochrome
-  .....*/
-     if (*nb_can==MONO)
-     {
-       if (strncmp(type_inf,"IMON",4) !=0)
-	{
-	   iret=0;
-	   strcpy(CAI_ERREUR,"l'image n'est pas au format MAPSAT");
-           return (NULL);
-         }
-      }
-
-/*.....
-     positionnement sur les infos a recuperer
-  .....*/
-     fread(label,64,1,fic_in);
-     fread(nb_lig,4,1,fic_in);
-     fread(nb_col,4,1,fic_in);
-     *nboct_pix=1;
-     image1->NB_BITS_PIX=8;
-     lig=*nb_lig;
-     col=*nb_col;
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-     fclose (fic_in);
-     fic=open(nom_fic,O_RDONLY,0);
-  
-     deb = image1->NOM_FIC_CAN;
-     deb1= image1->NOM_UTIL_CAN;
-
-     for (i=0;i<*nb_can;i=i+1)
-     {
-           sscanf(nom_image,"%s",deb);
-	   strcat(deb,car);
-  	   deb=deb+100;
-           sscanf(nom_image,"%s",deb1);
-           strcat(deb1,car);
-           deb1=deb1+100;
-           image1->POS_OCTET[i]=col+(i*lig*col);
-           image1->ACCES_CANAL_INT[i]=fic;
-
-
-      }
-
- 
-      return(image1);
-  
-}
-
-/* 
-   Fin de l'operation cai_ouvre_lecture_mapsat
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_mapsat                                  */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format mapsat et de tous les fichiers qui la composent       */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_IMAGE *cai_ouvre_creation_mapsat (nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            label)           */
-/*                                                                           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_mapsat  (S) (CAI_IMAGE *) : =NULL si pb            */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_IMAGE *cai_ouvre_creation_mapsat(repert,
-				     nom_image,
-				     nb_can,
-				     nboct_pix,
-				     nb_col,
-				     nb_lig,
-				     label)
-
-char *repert;
-char *nom_image;
-int  *nb_can;
-int  *nboct_pix;
-int  *nb_col;
-int  *nb_lig;
-char *label;
-{
-   FILE *fic;		        /* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   int retour;			/* retour de fonction 			    */ 
-   int i,num;			/* indice 				    */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   unsigned char *ptr;          /* pointeur sur buffer fichier              */
-   int	taille_entete;		/* taille de l'entete en octets		    */
-   int pas_echantil;            /* pas d'echantillonnage de l'image         */
-   int taille_buff_label;	/* taille en octets du label a ecrire       */
-   char *buff_label;		/* pointeur sur la chaine label a ecrire    */
-   
-
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-
-/*.................................................
-   Constitution du nom du fichier entete et verification qu'il
-   n'existe pas deja .Il n'y a qu'un fichier .it si multispectral
-   .im si monospectral
-  .................................................*/
-   nom_fic[0]='\0';
-   if (strlen(repert)!=0)
-   {
-      sscanf(repert,"%s",nom_fic);
-      strcat(nom_fic,"/");
-      strcat(nom_fic,nom_image);
-      if (*nb_can == 1)
-       strcat(nom_fic,".im");
-      else
-       strcat(nom_fic,".it");
-      nom_fic[strlen(repert)+1+strlen(nom_image)+3]='\0';
-   }
-   else
-   {
-      sscanf(nom_image,"%s",nom_fic);
-      if (*nb_can == 1)
-       strcat(nom_fic,".im");
-     else
-       strcat(nom_fic,".it"); 
-      nom_fic[strlen(nom_image)+3]='\0';
-   }
-
-
-   retour = stat ( nom_fic , &buf_stat );
-   if ( retour == 0 )
-   { 
-	sprintf ( CAI_ERREUR , "L'image %s MAPSAT existe \n" , nom_image );
-	goto ERREUR;
-   }
-
-/*************************************************/
-/* determination de la taille de l'entete :	 */
-/* taille de l'entete = taille d'une ligne, soit */
-/* nb_col et au minimum 128 octets	 	 */
-/* ecriture de l'entete                          */
-/*************************************************/
-
-   taille_entete = ( *nb_col > 128 )? (*nb_col) : 128;
-   fic = fopen(nom_fic,"w");
-   if (fic == NULL)
-   {
-     sprintf(CAI_ERREUR,"Erreur: Creation %s impossible\n",nom_fic);
-     goto ERREUR;
-   }
-   ptr = (unsigned char *) malloc ( taille_entete );
-   if ( ptr == NULL )
-   {
-  	strcpy ( CAI_ERREUR , "Erreur : probleme d'allocation MAPSAT\n" );
-	goto ERREUR;
-    }
-   if (*nb_can == 1) 
-   {
-	memcpy ( ptr , "IMON" , 4 );
-   }
-   else
-   {
-	memcpy ( ptr , "ITRI" , 4 );
-   }
-   taille_buff_label = ((int)(strlen(label))+1 > 65 )? 
-			 (int)(strlen(label))+1 : 65;
-   buff_label = (char *) malloc ( taille_buff_label*sizeof(char *) );
-   strcpy( buff_label , label );
-   for ( i = strlen(label) ; i < 64 ; i++ )
-   {
-	buff_label[i]=' ';
-   }
-   buff_label[64]='\0';
-
-   memcpy ( &ptr[4] , buff_label , 64 );
-   memcpy ( &ptr[68] , nb_lig , 4 );
-   memcpy ( &ptr[72] , nb_col , 4 );
-   memcpy ( &ptr[76] , nb_can , 4 );
-   pas_echantil = 0;
-   memcpy ( &ptr[80] , &pas_echantil , 4 );
-   for ( i = 84 ; i < taille_entete - 1 ; i++ )
-   {
-	ptr[i] = 0;
-   }
-
-   retour = fwrite ( ptr , taille_entete , 1 , fic );
-  if ( retour == 0 )
-  {
-    sprintf ( CAI_ERREUR , "Erreur : ecriture impossible dans fichier %s\n",
-	nom_fic );
-    goto ERREUR;
-  }
-
-  fclose ( fic );
-  free (ptr);
-
-/*.................................................
-   Ouverture du fichier pour ecriture radiometrie
-  ...................................................*/
-   num = open(nom_fic,O_RDWR,0);
-   if (num == -1)
-   {
-     sprintf(CAI_ERREUR,"Erreur: Creation %s impossible\n",nom_fic);
-     goto ERREUR;
-   }
-   for (i=0;i<*nb_can;i=i+1)
-   {
-     image1->ACCES_CANAL_INT[i]=num;
-     image1->POS_OCTET[i]=taille_entete;
-    }
-
-  return (image1);
-
-ERREUR :
-  return(NULL);
-}
- /* 
-  Fin de l'operation cai_ouvre_creation_mapsat
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_mapsat                                   */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image mapsat               */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_lecture_canal_mapsat(image1, canal,     */       		      /* ------------------                               premiere_ligne,          */
-/*                                           	    premiere_colonne,        */
-/*                                           	    nombre_lignes_lire ,     */
-/*                                          	    nombre_colonnes_lire,    */
-/*                                           	    pas_ligne ,pas_colonne,  */
-/*                 		             	    data_image )             */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (int) : numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal_mapsat (S) (CAI_OK_KO) :  = CAI_KO si pb            */
-/*                                                 = CAI_OK si OK            */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
- CAI_OK_KO cai_lecture_canal_mapsat(image1 ,  
-                            	    canal ,           
-    		       	 	    premiere_ligne  ,   
-     		          	    premiere_colonne,
-                         	    nombre_lignes_lire ,
-                        	    nombre_colonnes_lire,
-                        	    pas_ligne ,          
-                       	     	    pas_colonne,
-		       		    data_image )        
-CAI_IMAGE *image1;
-int *canal ;          
-int *premiere_ligne  ;   
-int *premiere_colonne   ;
-int *nombre_lignes_lire ;
-int *nombre_colonnes_lire;
-int *pas_ligne ;                              
-int *pas_colonne;        
-unsigned char *data_image;
-
-{
-
- int   num,i,j,n;           /* variables de travail                          */
- int pt_oct;		    /* position courante dans le fichier image       */
- int no_oct;                /* numero du premier octet a lire                */
- int iret;                  /* indicateur d'erreur                           */
- int lig;                   /* indice de boucle sur les lignes               */
- int   oct_pix;             /* nb octets par pixels                          */
- long  nb_oct;              /* nb oct =1er octet a lire - position courante  */
- long  oct_lig;             /* nb oct. par ligne en considerant taille pixel */
- unsigned char *buf_lec;    /* buffer lecture d'une  ligne                   */
- unsigned char *deb,*pch;   /* pointeur chaine pour transfert  buffer sortie */
-
-/*...........................
-  Initialisations diverses
-  ..........................*/
-   iret=CAI_OK;
-   num=image1->ACCES_CANAL_INT[*canal-1];
-   oct_pix=image1->NBOCT_PIX;
-   oct_lig=oct_pix*image1->NB_COL;
-   lig=*premiere_ligne;
-   i=1;
-   pch=data_image;
-
-/*..............................................
-        allocation de memoire pour lire une ligne image
- ............................................. */
-
-   buf_lec = (unsigned char *) malloc(oct_lig);
-   if (buf_lec == NULL)
-   {
-      iret=CAI_KO;
-      strcpy(CAI_ERREUR,"Probleme allocation memoire");
-   }
-   else
-   {
-
-/*.....................
-         Pour chaque ligne a lire
-  .......................................*/
-        while ((i <= *nombre_lignes_lire)&&(iret==CAI_OK))
-        {  
-/*............................................
-	    Recherche de la position courante dans le fichier
-  ............................................*/
-            pt_oct=lseek(num,0L,1);
-
-/*................................
-            Calcul du numero du 1er octet a lire
-  ....................................*/
-            no_oct=image1->POS_OCTET[*canal-1]+(lig-1)*image1->NB_COL;
-
-/*..................................
-            Saut d'octets pour etre positionne sur la ligne a lire
-  .......................................*/
-            nb_oct=(long)(no_oct-pt_oct);
-            lseek(num,nb_oct,1);
-
-/*...........................................
-            lecture d'une ligne image
-  ................................................*/
-            n=read(num,buf_lec,image1->NB_COL);
-
-            if (n<=0)
-            {
-             iret=CAI_KO;
-             strcpy(CAI_ERREUR,"Erreur lecture donnee image mapsat");
-            }
-            else
-            { 
-/*......................................
-             Sauvegarde des donnees lues entenant compte du pas 
-             d'echantillonnage en colonne
-  ........................................*/           
-             deb=buf_lec+(*premiere_colonne)-1;
-             j=1;
-             while (j <= *nombre_colonnes_lire)
-	     {                         
-              *pch=*deb;
-              pch=pch+1;
-              j=j+1;
-              deb=deb+(*pas_colonne);
-             }   
-             
-            }
-          i=i+1;
-          lig=lig+(*pas_ligne);
-
-        }        
-
-	free(buf_lec);
-   }
-   return(iret);
-}
-
-/*
-  Fin de l'operation cai_lecture_canal_mapsat
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal_mapsat                                  */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un canal d'une image mapsat               */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ecriture_canal_mapsat (image1, canal,   */       		      /* ------------------                                 premiere_ligne,        */
-/*                                                    nombre_lignes_ecrire,  */
-/*                                                    nombre_colonnes_ecrire,*/
-/*                 		                      data_image )           */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal                 (E) (int) : numero du canal a ecrire            */
-/*     premiere_ligne        (E) (int) : premiere ligne a ecrire ds l'image  */
-/*     nombre_lignes_ecrire  (E) (int) : nombre de lignes a ecrire           */
-/*     nombre_colonnes_ecrire(E) (int) : nombre de lignes a ecrire           */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels ecris alloue et   */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_ecriture_canal_mapsat     (S) (CAI_OK_KO) : = CAI_KO si pb        */
-/*                                                     = CAI_OK si OK        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO cai_ecriture_canal_mapsat (image1 ,  
-                              	     canal ,           
-    		               	     premiere_ligne  ,   
-                           	     nombre_lignes_ecrire ,
-                          	     nombre_colonnes_ecrire,
-		          	     data_image )        
-CAI_IMAGE *image1;
-int *canal ;          
-int *premiere_ligne  ;   
-int *nombre_lignes_ecrire ;
-int *nombre_colonnes_ecrire;
-unsigned char *data_image;
-
-{
-
-long	position_first_lig;	/* position de la 1ere ligne a ecrire	 */
-long	position_courante;	/* position courante dans le fichier     */
-long	deplacement;		/* deplacement a effectuer 		 */
-int	i_ligne;		/* compteur de lignes 			 */
-unsigned char *buff_lig;	/* tableau contenant une ligne a ecrire  */
-int	cr_write;		/* code retour de write			 */
-int num;                        /* descripteur de fichier                */
-int nboct_pix;			/* nombre d'octets par pixel             */
-
-/*...............
-  Initialisations 
- ................*/
-
-i_ligne = 0;
-num = image1->ACCES_CANAL_INT[*canal-1];
-nboct_pix = image1->NBOCT_PIX;
-
-
-/*************************************************/
-/* Les donnees doivent etre codees sur 8 bits	 */
-/*************************************************/
-
-if ( nboct_pix != 1 )
-{
-	strcpy ( CAI_ERREUR , "Erreur : les donnees doivent etre codees sur 8 bits\n");
-	goto ERREUR;
-}
-
-
-/********************************************************/
-/* Calcul de la position de la premiere ligne a ecrire 	*/ 
-/********************************************************/
-
-position_first_lig = (long) ( image1->POS_OCTET[*canal-1] +
-	             (*canal - 1) * image1->NB_LIG* (*nombre_colonnes_ecrire)
-		     + ((*premiere_ligne) - 1) * (*nombre_colonnes_ecrire) );
-
-
-/********************************************************/
-/* Recuperation de la position courante			*/
-/********************************************************/
-
-position_courante = lseek ( num , 0L , 1 );
-
-
-/********************************************************/
-/* Deplacement jusqu'a la premiere ligne a ecrire	*/
-/********************************************************/
-
-deplacement = position_first_lig - position_courante;
-lseek ( num , deplacement , 1 ); 
-
-
-/********************************************************/
-/* TANT QUE il y a des lignes a ecrire                 	*/
-/********************************************************/
-while (i_ligne < *nombre_lignes_ecrire)
-{
-
-/********************************************************/
-/*	extraction de la ligne du tableau 		*/
-/********************************************************/
-
-	buff_lig = data_image + (*nombre_colonnes_ecrire) * i_ligne;
-
-/********************************************************/
-/*	ecriture de la ligne				*/
-/********************************************************/
-
-	cr_write = write ( num , buff_lig , (*nombre_colonnes_ecrire) );
-	if ( cr_write != (*nombre_colonnes_ecrire) )
-	{
-		strcpy ( CAI_ERREUR , "Erreur ecriture canal image mapsat\n" );
-		goto ERREUR;
-	}
- 
-/********************************************************/
-/*	incrementation du nombre de lignes		*/
-/********************************************************/
-
-	i_ligne++;
-
-/********************************************************/
-/* FIN TANT QUE						*/
-/********************************************************/
-}
-
-
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-
-/* 
-  Fin de l'operation cai_ecriture_canal_mapsat
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_mapsat                                           */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format mapsat et de        */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_mapsat (image1)                   */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_mapsat     (S) (CAI_OK_KO) :   = CAI_KO si pb               */
-/*                                              = CAI_OK si OK               */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ferme_mapsat (image1)
-
-CAI_IMAGE *image1;
-
-{
- int iret;    /* code retour de l'operation      */
- int num;     /* descripteur du fichier a fermer */
-
- iret=CAI_OK;
-/*.............................................
-   Fermeture de tous les canaux qui sont tous contenus
-   dans un seul fichier .im ou .it suivant le nb de canaux
-  .............................................*/
-
-
-   num=image1->ACCES_CANAL_INT[0];
-   close(num);
-
-
-  return (iret);
-}
-
-/*
-  Fin de l'operation cai_ferme_mapsat
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_mapsat                                        */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stocke en mapsat et de      */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_dest_ima_mapsat (format,nom_ima)        */       		      /* ------------------                                                        */
-/*     format       (E) (char *) : format de l'image a detruire              */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_dest_ima_mapsat  (S) (CAI_OK_KO) : = CAI_KO si pb                 */
-/*                                            = CAI_OK si OK                 */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_dest_ima_mapsat ( repertoire , 
-                          	nom_ima )
-
-char	*repertoire;		/* repertoire de stockage de l'image */
-char	*nom_ima;		/* nom de l'image */
-
-{
-int     iret;                   /* code retour fonction fermetrue lecture */
-char	nom_fic[1024];		/* nom du fichier entete a detruire */
-char    nom_ima_complet[1024];  /* repertoire + nom de l'image */
-
-CAI_IMAGE   *image1;             /* structure ouverture image */
-int         nb_can;	        /* nombre de canaux de l'image */
-int         nboct_pix;		/* nombre d'octets par pixel image */
-int         nb_col;	        /* nombre de colonnes de l'image */
-int         nb_lig;             /* nombre de lignes de l'image */
-
-/************************************************/
-/* Constitution du nom du fichier 		*/
-/************************************************/
-if (strlen(repertoire)!= 0)
-{
-  strcpy ( nom_ima_complet , repertoire );
-  strcat ( nom_ima_complet, "/" );
-  strcat ( nom_ima_complet , nom_ima );
-}
-else
-{
-  strcpy ( nom_ima_complet , nom_ima);
-}
-
-/************************************************/
-/* Extraction des caracteristiques de l'image 	*/
-/* du fichier entete par l'appel a la fonction	*/
-/* cai_ouvre_lecture_mapsat			*/
-/************************************************/
-
-  image1 = cai_ouvre_lecture_mapsat (repertoire, nom_ima, &nb_can ,&nboct_pix ,
-				      &nb_col , &nb_lig);
-  if ( image1 == NULL) goto ERREUR;
-
-  image1->NB_CANAUX=nb_can;
-  image1->NB_COL=nb_col;
-  image1->NB_LIG=nb_lig;
-  image1->NBOCT_PIX=nboct_pix;
- 
-  iret=cai_ferme_mapsat(image1);
-
-/************************************************/
-/* constitution du fichier + extension en       */
-/* fonction du  nombre de canaux                */
-/************************************************/
-  nom_fic[0]='\0';
-  strcpy(nom_fic,nom_ima_complet);
-  if (nb_can == 1) 
-   {
-     strcat ( nom_fic , ".im" );
-     nom_fic[strlen(nom_ima_complet)+3]='\0';
-   }
-   else 
-   {
-     strcat ( nom_fic , ".it" );
-     nom_fic[strlen(nom_ima_complet)+3]='\0';
-   }
-
-
-/************************************************/
-/* Destruction du fichier image			*/
-/************************************************/
-
-  unlink ( nom_fic );
-
-
-  return (CAI_OK);
-
-ERREUR:
-
-return (CAI_KO);
-
-
-}
-/*
- Fin de l'operation cai_dest_ima_mapsat
-*/
diff --git a/Utilities/CAI/cai_dll/src/cai_multis.c b/Utilities/CAI/cai_dll/src/cai_multis.c
deleted file mode 100755
index a9d80866ef..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_multis.c
+++ /dev/null
@@ -1,1985 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_multis.c                                                  */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format multiscope                                 */ 
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CISI)                                   */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    fevrier 1995                                        */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V2                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : FA : modifications pour compatibilite HP64bits      */
-/*****************************************************************************/
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-
-
-# include <stdio.h>
-# include <string.h>
-# include <stdlib.h>
-# include <ctype.h>
-# include <unistd.h>
-# include <sys/types.h>
-#include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-
-#define _CAI_IMAGE
-# include "cai_image.h"
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header: cai_multis.c,v 1.8 01/05/31 10:47:08 cmf Exp $";
-
-
-extern char *getenv();
-
-
-static void inverser (char * s , int nboct );
-static void calculer_histo(CAI_IMAGE *image1, unsigned char *buffer ,
-				int nb_pix , int canal );
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_multis                                       */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images au format multiscope             */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_ima_multis (repert,tab_ima)         */
-/* -----------------                                                         */
-/*                                                                           */
-/*     repert        (E) (char *)   : repertoire a explorer		     */
-/*     tab_ima       (S) (char ***) : pointeur sur tableau des images listees*/
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_ima_multis    (S) (int)     : = -1 repertoire inexistant    */                                    /*					       = > 0 nombre d'images listees */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-long int cai_liste_ima_multis (char *repert,
-		          char ***tab_ima)
- 
-
-{
-   DIR *dirp;		/* pointeur sur structure ouverture repertoire */
-
-struct dirent *dp;   /* structure resultat de la fonction readdir   */
-
-   char *pch0,*pch1;    /* pointeurs sur chaine de caracteres          */
-   char *pch2,*pch3;    /* pointeurs sur chaine de caracteres          */
-   char car;            /* variable de travail                         */  
-   int nb_ima;          /* nombre d'images multiscope identifiees      */
-   int i;		/* indice de boucle			       */
-
-/*........................................
-   INITIALISATION et ouverture du repertoire choisi
-  .........................................*/
-   nb_ima=0;
-
-   dirp=opendir(repert);
-
-   if(dirp!=NULL)
-   {
-
-/*......................................
-
-   premiere passe pour comptabiliser les images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE MULTISCOPE
-      (EXTENSION =.img)
-    ..........................................*/
-
-
-   while((dp=readdir(dirp))!=NULL)
-   {
-
-     car='.';
-     pch0=strrchr(dp->d_name,car);
-     if (pch0 != NULL)
-     {
-       car='i';
-       pch1=strrchr(dp->d_name,car);
-       if ((pch1 != NULL)&&(pch1==pch0+1))
-       {
-         car='m';
-         pch2=strrchr(dp->d_name,car);
-         if ((pch2 != NULL)&&(pch2==pch1+1))
-         {
-	      car='g';
-              pch3=strrchr(dp->d_name,car);
-              if ((pch3 != NULL)&&(pch3==pch2+1))
-	      {
-                *pch0='\0';
-              	*pch1=' ';
-	      	*pch2=' ';
-		*pch3=' ';
-	        nb_ima=nb_ima+1;
-              }
-           }
-       }
-     }
-   }
-
-    (void)closedir(dirp);
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES DU FORMAT MULTISCOPE
-     ......................................*/
-    *tab_ima = (char **) calloc(nb_ima,sizeof(char *));
-    for (i=0;i<nb_ima;i=i+1)
-      (*tab_ima)[i]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE MULTISCOPE
-      (EXTENSION =.img)
-   SI C`EST LE CAS,STOCKAGE DANS LA LISTE
-   ..........................................*/
-   dirp=opendir(repert);
-
-   nb_ima=0;
-   while((dp=readdir(dirp))!=NULL)
-   {
-
-     car='.';
-     pch0=strrchr(dp->d_name,car);
-     if (pch0 != NULL)
-     {
-       car='i';
-       pch1=strrchr(dp->d_name,car);
-       if ((pch1 != NULL)&&(pch1==pch0+1))
-       {
-         car='m';
-         pch2=strrchr(dp->d_name,car);
-         if ((pch2 != NULL)&&(pch2==pch1+1))
-         {
-	      car='g';
-              pch3=strrchr(dp->d_name,car);
-              if ((pch3 != NULL)&&(pch3==pch2+1))
-	      {
-                *pch0='\0';
-              	*pch1=' ';
-	      	*pch2=' ';
-		*pch3=' ';
-                strcpy((*tab_ima)[nb_ima],dp->d_name);
-	        nb_ima=nb_ima+1;
-              }
-           }
-       }
-     }
-   }
-
-    (void)closedir(dirp);
-
-
-   }
-   else
-   {
-     /* Repertoire inexistant */
-     nb_ima=-1;
-   }
-    return(nb_ima);
-
-}
-
-/* Fin de l'operation cai_liste_ima_multis
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_multis                                   */
-/* ----------								     */
-/*                                                                           */
-/* ROLE : fonction d'ouverture en lecture d'une image au format multiscope   */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_lecture_multis (nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_multis  (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_lecture_multis(char *repert,
-				    char *nom_image,
-				    int *nb_can,
-				    int *nboct_pix,
-				    int *nb_col,
-				    int *nb_lig)
-
-{
-   FILE *fic;			/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];	/* nom du fichier canal			    */
-   char nom_util_canal[1024];	/* nom du fichier utilisateur		    */
-   char *deb,*deb1;		/* pointeurs sur chaine de caracteres       */
-   int num,retour,lon;	        /*  variables de travail                    */
-   short int type,fin;          /* variables de trvail			    */
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
- 
-   *nb_lig=0;
-   *nb_col=0;
-   *nboct_pix=0;
-   *nb_can=0; 
-   iret=1;
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-      sscanf(repert,"%s",nom_fic);
-      strcat(nom_fic,"/");
-      strcat(nom_fic,nom_image);
-      strcat(nom_fic,".img");
-      nom_fic[strlen(repert)+1+strlen(nom_image)+4]='\0';
-   }
-   else
-   {
-      sscanf(nom_image,"%s",nom_fic);
-      strcat(nom_fic,".img");
-      nom_fic[strlen(nom_image)+4]='\0';
-   }
-   
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   fic=fopen(nom_fic,"rb");
-   if (fic == NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur ouverture fichier entete MULTISCOPE");
-    }
-   else
-   {
-     
-/*....................................
-          positionnement sur le nombre de colonnes
-*/
-	  fseek(fic,8,0);
-/*
-	  recuperation du nombre de colonnes */
-	  fread(nb_col,4,1,fic);
-/*
-	  inversion des octets pour compatibilite SUN */
-	  lon=sizeof(*nb_col)-1;
-	  inverser((char *)nb_col,lon);
-
-/*....................................
-	  recuperation du nombre de lignes
-*/
-	  fread(nb_lig,4,1,fic);
-/*
-	  inversion des octets pour compatibilite SUN */
-	  lon=sizeof(*nb_lig)-1;
-	  inverser((char *)nb_lig,lon);
-
-/*......................................
-	  initialisation du nombre d'octets par pixel
-*/
-	  *nboct_pix=1;
-          image1->NB_BITS_PIX=8;
-	  sprintf(image1->COD_PIX,"OCT");
-/*.................................
-	  positionnement sur le premier objet
-*/
-	  fseek(fic,114,1);
-	  retour=0;
-          deb = image1->NOM_FIC_CAN;
-          deb1= image1->NOM_UTIL_CAN;
-
-
-	  while (retour == 0)
-	  {
-/*...........Recuperation de tous les objets jusqu'a l'eof
-	     nom fichier,nom utilisateur et type de l'objet(avec inversion)
-*/
-	     fread(nom_fic_canal,14,1,fic);
-	     fread(nom_util_canal,40,1,fic);
-	     fread(&type,2,1,fic);
-	     lon=sizeof(type)-1;
-	     inverser((char *)&type,lon);
-	     if (type == 3)
-	      {
-/*.......................................
-                 Initialisation des tableaux contenant le nom de fichier
-                 et le nom utilisateur de chaque canal
-  .....................................................*/
-
-
-          	if (*nb_can<CAI_NB_MAX_CAN)
-          	{
-		  nom_fic_canal[0] = tolower(nom_fic_canal[0]);
-		  nom_fic_canal[1] = tolower(nom_fic_canal[1]);
-		  nom_fic_canal[2] = tolower(nom_fic_canal[2]);
-		  nom_fic_canal[9] = tolower(nom_fic_canal[9]);
-		  nom_fic_canal[10] = tolower(nom_fic_canal[10]);
-		  nom_fic_canal[11] = tolower(nom_fic_canal[11]);
-  	          nom_fic[0]='\0';
-                  if ((long int)strlen(repert) != 0)
-                  {
-                    sscanf(repert,"%s",nom_fic);
-                    strcat(nom_fic,"/");
-                    strcat(nom_fic,nom_fic_canal);
-                    nom_fic[strlen(repert)+1+strlen(nom_fic_canal)]='\0';
-       		   }
-       		  else
-       		  {
-                     sscanf(nom_fic_canal,"%s",nom_fic);
-                     nom_fic[strlen(nom_fic_canal)]='\0';
-    		  }
-        	  sscanf(nom_fic_canal,"%s",deb);
-	          deb=deb+100;
-        	  sscanf(nom_util_canal,"%s",deb1);
-	          deb1=deb1+100;
-
-                  num=open(nom_fic,O_RDONLY,0);
-                  if (num==-1)
-                  {
-                    iret=0;
-                    strcpy(CAI_ERREUR,"Erreur ouverture fi canal Multiscope");
-       		   }
-       		  else
-       		  {
-                    image1->ACCES_CANAL_INT[*nb_can]=num;
-		    image1->POS_OCTET[*nb_can]=1280;
-	            image1->NB_PIX_ECRITS[*nb_can]=0;
-                  }
-
-        	}
-	        *nb_can=*nb_can+1;
-	      }
-
-/*............Positionnement en fin de bloc */
-	      fseek(fic,70,1);
-/*
-  ............Test fin de fichier */
-	      fread(&fin,2,1,fic);
-	      retour=feof(fic);
-	  }      
-/*..................................
-          Fermeture du fichier 
-  ......................................*/
-          fclose(fic);
-       }
-
- 
-   if (iret != 0)
-      return (image1);
-    else
-     return(NULL);
-
-}
-
-/* 
-   Fin de l'operation cai_ouvre_lecture_multis
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_multis                                  */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format multiscope et de tous les fichiers qui la composent   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_IMAGE *cai_ouvre_creation_multis (nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            label)           */
-/*                                                                           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_multis  (S) (CAI_IMAGE *) : =NULL si pb            */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_IMAGE *cai_ouvre_creation_multis(char *repert,
-				     char *nom_image,
-				     int *nb_can,
-				     int *nboct_pix,
-				     int *nb_col,
-				     int *nb_lig,
-				     char *label)
-
-{
-   FILE *fic;		        /* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char fichier[1024];          /* variable intermediaire		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   long int retour;		/* retour de fonction 			    */ 
-   char car3[3],car6[6];	/* indice du canal traite     		    */
-   int i,num,numero_fic;	/* indice 				    */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   unsigned char *buff ;        /* buffer a ecrire                          */
-   int taille,nb;	        /* variables de travail sur taille fichier  */
-   char *deb;			/* pointeur sur chaine pour transfert       */
-   int	col_pix_1;		/* colonne du premier pixel		    */
-   int	lig_pix_1;		/* ligne du premier pixel 		    */
-   char	*nom_fic_carac;		/* nom relatif du fichier caracteristiques  */	
-   long int taille_nom_dos_vue; /* taille de fichier 			    */
-   char	*nom_dos_vue;		/* nom DOS de la vue			    */
-   long int taille_nom_dos_ima;	/* taille de fichier		            */
-   char	*nom_dos_ima;		/* nom DOS de l'image			    */
-   int	flag_sauvegarde;	/* flag de sauvegarde			    */
-   char	*nom_dos_obj;		/* nom DOS de l'objet			    */
-   char	nom_util[100+1];	/* intitule ou nom utilisateur		    */
-   int	flag_suppression;	/* flag de suppression 			    */
-   int	type_obj;		/* type de l'objet		            */
-   int	version;		/* version 				    */
-   int	filler;			/* filler				    */
-   int	dim_bloc;		/* dimension d'un bloc 			    */
-   int	presence_histo;		/* indicateur de presence des histogrammes  */
-   int	int_tempo;		/* entier utilise pour inversion d'octets   */
-   int	lon;			/* longueur de l'entier - 1                 */
-   int i_can;			/* indice de boucle sur les canaux          */
-   long li;
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-
-/*.................................................
-   Constitution du nom du fichier entete et verification qu'il
-   n'existe pas deja
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-      sscanf(repert,"%s",nom_fic);
-      strcat(nom_fic,"/");
-      strcat(nom_fic,nom_image);
-      strcat(nom_fic,".img");
-      nom_fic[strlen(repert)+1+strlen(nom_image)+4]='\0';
-   }
-   else
-   {
-      sscanf(nom_image,"%s",nom_fic);
-      strcat(nom_fic,".img");
-      nom_fic[strlen(nom_image)+4]='\0';
-   }
-   retour = stat ( nom_fic , &buf_stat );
-   if ( retour == 0 )
-   { 
-	sprintf ( CAI_ERREUR , "L'image %s MULTISCOPE existe \n" , nom_image );
-	goto ERREUR;
-   }
-
-/*...............................................................
-  Pour chaque canal de l'image,constitution du nom de fichier correspondant
-  Verification qu'il n'existe pas deja
-  Ouverture du fichier en ecriture
-  .................................................................*/
-
-  deb =(char *) image1->NOM_FIC_CAN;
-  i=0;
-  numero_fic=0;
-  while ((i<*nb_can)&& (numero_fic<10000))
-  {
-   nom_fic_canal[0]='\0';
-   fichier[0]='\0';
-   sprintf ( car6 , "%05d" , numero_fic );
-   strcat ( fichier,"fdo");
-   strcat ( fichier , car6);
-   strcat ( fichier , ".per" );
-   fichier[strlen(car6)+7]='\0';
-
-   if ((long int)strlen(repert) != 0)
-   {
-     sscanf(repert,"%s",nom_fic_canal);
-     strcat(nom_fic_canal,"/fdo");
-     strcat ( nom_fic_canal , car6 );
-     strcat ( nom_fic_canal , ".per" );
-     nom_fic_canal[strlen(repert)+4+strlen(car6)+4]='\0';
-    }
-    else
-    {
-     sscanf(fichier,"%s",nom_fic_canal);
-     nom_fic_canal[strlen(car6)+7]='\0';
-    }
-   retour = stat ( nom_fic_canal , &buf_stat );
-   if ( retour != 0 )  /* si ce fichier n'existe pas il peut etre creer */
-   {    
-      sscanf(fichier,"%s",deb);
-      i=i+1;
-      deb=deb+100;
-    }
-    numero_fic=numero_fic+1;
-
-   }
-
-/*..................................................................
-   ecriture du fichier img et de l'entete des fichiers canaux
-  .................................................................*/
-  fic = fopen(nom_fic,"w");
-  if ( fic == NULL )
-   { 
-	sprintf ( CAI_ERREUR , "Creation image multiscope impossible \n" ,
-		   nom_image );
-	goto ERREUR;
-   }
-/* la taille du fichier entete doit etre multiple de 512 */
-   taille = 128*(1+(*nb_can));
-   nb=taille;
-   if ( taille % 512 == 0 )
-	taille = taille;
-   else
-	taille = taille - (taille%512) + 512;
-
-
-/*************************************************/
-/* Ecriture des enregistrements d'entete et de   */
-/* description des objets :		         */
-/* 128 + n*128 octets avec n = nombre d'objets   */
-/*************************************************/
-
-/*************************************************/
-/* ecriture de l'enregistrement d'entete	 */
-/*************************************************/
-   buff = (unsigned char *) calloc ( 128,sizeof(unsigned char) );
-   if ( buff == NULL )
-   {
-	sprintf ( CAI_ERREUR , "Erreur : probleme d'allocation \n" );
-	unlink(nom_fic);
-	goto ERREUR;
-    }
-
-    col_pix_1 = 0;
-    int_tempo = col_pix_1;
-    lon = sizeof(int_tempo)-1;
-    inverser((char *)&int_tempo,lon);
-    memcpy ( buff , &int_tempo , 4 );
-
-    lig_pix_1 = 0;
-    int_tempo = lig_pix_1;
-    lon = sizeof(int_tempo)-1;
-    inverser((char *)&int_tempo,lon);
-    memcpy ( &buff[4] , &int_tempo , 4 );
-
-    int_tempo = (*nb_col);
-    lon = sizeof(int_tempo)-1;
-    inverser((char *)&int_tempo,lon);
-    memcpy ( &buff[8] , &int_tempo , 4 );
-
-    int_tempo = (*nb_lig);
-    lon = sizeof(int_tempo)-1;
-    inverser((char *)&int_tempo,lon);
-    memcpy ( &buff[12] , &int_tempo , 4 );
-/* construction du nom relatif du fichier */
-/* caracteristiques : nom_image.img */
-    nom_fic_carac = (char *) strrchr ( nom_fic , '/' ) + 1;
-
-
-   taille_nom_dos_vue =
-   ( (long int)(strlen(nom_fic_carac))-3 > 15 )? 
-	(long int)(strlen(nom_fic_carac))-3 : 15;
-     nom_dos_vue = (char *) malloc ( taille_nom_dos_vue*sizeof(char *) );
-    strncpy ( nom_dos_vue , nom_fic_carac , strlen(nom_fic_carac)-4 );
-    for ( li = (long int)(strlen(nom_fic_carac)-4) ; li < 14 ; li++ )
-    {
-	nom_dos_vue[li]=' ';
-    }
-    nom_dos_vue[14]='\0';
-   /* passage en majuscules */
-   for ( i = 0 ; i < 14 ; i++ )
-   {
-	nom_dos_vue[i] = toupper(nom_dos_vue[i]);
-    }
-/*    memcpy ( &buff[16] , nom_dos_vue , 14 ); */
-
-
-    taille_nom_dos_ima =
-         ( (long int)(strlen(nom_fic_carac))-3 > 15 )? 
-	   (long int)(strlen(nom_fic_carac))-3 : 15;
-    nom_dos_ima = (char *) malloc ( taille_nom_dos_ima*sizeof(char *) );
-    strncpy ( nom_dos_ima , nom_fic_carac , strlen(nom_fic_carac)-4 );
-    nom_dos_ima[strlen(nom_fic_carac)-4]='\0';
-    /* le nom DOS de l'image ne doit pas depasser 10 caracteres */
-    if ( (long int)(strlen(nom_dos_ima)) > 10 )
-	nom_dos_ima[10]='\0';
-    /* passage en majuscule */
-    for ( li = 0 ; li < (long int)(strlen(nom_dos_ima)) ; li++ )
-    {
-	nom_dos_ima[li] = toupper(nom_dos_ima[li]);
-     }
-     li = (long int)strlen(nom_dos_ima)+1 ;
-     memcpy ( &buff[30] , nom_dos_ima , li);
- 
-/*     memcpy ( &buff[30+li] , "IMG" , 3 );
-     for ( li = 30+(long int)strlen(nom_dos_ima)+1+3 ; li < 44 ; li++ )
-     {
-	buff[li] = 0;
-      }*/
- 
-     flag_sauvegarde = 0;
-     int_tempo = flag_sauvegarde;
-     lon = sizeof(int_tempo)-1;
-     inverser((char *)&int_tempo,lon);
-     memcpy ( &buff[44] , &int_tempo , 2 );
-
-/*    for ( i = 46 ; i < 128 ; i++ )
-    {
-	buff[i] = 0;
-    }*/
-   if ((*nb_can)==1)
-   	buff[46]='I';
-   retour = fwrite ( buff , 128 , 1 , fic );
-   if ( retour == 0 )
-   {
-    sprintf ( CAI_ERREUR ,"Ecriture impossible dans fichier %s\n" ,nom_fic);
-    unlink(nom_fic);
-    goto ERREUR;
-    }
-    free ( nom_dos_vue );
-    free ( nom_dos_ima );
-    free ( buff );
-
-/*************************************************/
-/* POUR	    chacun des objets			 */
-/*************************************************/
-   deb=image1->NOM_FIC_CAN;
-   for ( i_can= 0 ; i_can< *nb_can ; i_can++ )
-   {
-
-    
-     buff = (unsigned char *) calloc ( 128,sizeof(unsigned char) );
-     if ( buff == NULL )
-     {
-	sprintf ( CAI_ERREUR , "Erreur : probleme d'allocation \n" );
-	unlink(nom_fic);
-	goto ERREUR;
-      }
-  
-/*************************************************/
-/*   ecriture de la description de l'objet 	 */
-/*************************************************/
-
-     flag_suppression = 1;
-     int_tempo = flag_suppression;
-     lon = sizeof(int_tempo)-1;
-     inverser((char *)&int_tempo,lon);
-     memcpy ( buff , &int_tempo , 2 );
-
- 
-     nom_fic_canal[0]='\0';
-     sscanf(deb,"%s",nom_fic_canal);
-     deb=deb+100;
-     nom_dos_obj = (char *) calloc ( 15,sizeof(char *) );
-     strcpy ( nom_dos_obj , nom_fic_canal );
-     for ( li = (long int)strlen(nom_fic_canal) ; li < 14 ; li++ )
-     {
-		nom_dos_obj[li]='\0';
-      }
-      nom_dos_obj[14]='\0';
-      nom_dos_obj[0] = toupper(nom_dos_obj[0]);
-      nom_dos_obj[1] = toupper(nom_dos_obj[1]);
-      nom_dos_obj[2] = toupper(nom_dos_obj[2]);
-      nom_dos_obj[9] = toupper(nom_dos_obj[9]);
-      nom_dos_obj[10] = toupper(nom_dos_obj[10]);
-      nom_dos_obj[11] = toupper(nom_dos_obj[11]);
-      memcpy ( &buff[2] , nom_dos_obj , 14 );
-
-      for ( i = 6 ; i < 40 ; i++ )
-      {
-		nom_util[i]='\0';
-       }
-      nom_util[40]='\0';
-      sprintf(nom_util,"CANAL/PLAN%d",i_can+1);
-      memcpy ( &buff[16] , nom_util , 40 );
-
-      type_obj = 3;
-      int_tempo = type_obj;
-      lon = sizeof(int_tempo)-1;
-      inverser((char *)&int_tempo,lon);
-      memcpy ( &buff[56] , &int_tempo , 2 );
-
-      memcpy ( &buff[58] , "01-04-01 10:10" , 14 );
-
-      for ( i = 72 ; i < 128 ; i++ )
-      {
-		buff[i] = 0;
-      }
-
-     retour = fwrite ( buff , 128 , 1 , fic );
-     if ( retour == 0 )
-     {
-       sprintf ( CAI_ERREUR ,"Ecriture impossible dans fichier %s\n" ,nom_fic);
-       unlink(nom_fic);
-      goto ERREUR;
-      }
-      free(buff);
-/*..........................................................
-   Ecriture de 0 jusqu'a la taille du fichier
-  .........................................................*/
-    if (nb != taille)
-    {
-       buff = (unsigned char *) calloc ( taille-nb,sizeof(unsigned char) );
-       if ( buff == NULL )
-       {
-	sprintf ( CAI_ERREUR , "Erreur : probleme d'allocation \n" );
-	unlink(nom_fic);
-	goto ERREUR;
-        }
-       retour = fwrite ( buff , taille-nb , 1 , fic );
-       if ( retour == 0 )
-       {
-        sprintf ( CAI_ERREUR ,"Ecriture impossible dans fichier %s\n" ,nom_fic);
-        unlink(nom_fic);
-        goto ERREUR;
-        }
-       free(buff);
-      }
-    }
-    fclose(fic);
-
-  /*************************************************/
-  /* POUR      chacun des fichiers canaux	   */
-  /*************************************************/
-  deb=image1->NOM_FIC_CAN;
-  for ( i_can = 0 ; i_can< *nb_can ; i_can++ )
-  {
-
-/*************************************************/
-/*	ouverture du fichier            	 */
-/*************************************************/
-       fichier[0]='\0';
-      if ((long int)strlen(repert)!=0)
-      {
-       sscanf(repert,"%s",fichier);
-       strcat(fichier,"/");
-       strcat(fichier,deb);
-       }
-       else
-       {
-         sscanf(deb,"%s",fichier);
-        }
-       deb=deb+100;
-
-	fic = fopen ( fichier , "w" );
-	if ( fic == NULL )
-	{
-	   sprintf ( CAI_ERREUR , "Erreur : ouverture fichier %s impossible \n",
-		     fichier);
-		goto ERREUR ;
-	 }
-
-
-/*************************************************/
-/*	ecriture de l'enregistrement d'entete	 */
-/*	du filler et des enregistrements	 */
-/*	histogrammes	 			 */
-/* 	24 + 232 + 4*256 octets 		 */
-/*************************************************/
-
-/*************************************************/
-/*	ecriture de l'enregistrement d'entete	 */
-/*************************************************/
-
-	buff = (unsigned char *) calloc ( 24 ,sizeof(unsigned char));
-	if ( buff == NULL )
-	{
-		strcpy ( CAI_ERREUR , "Erreur : probleme d'allocation\n" );
-		goto ERREUR;
-	}
-
-	version = 1;
-	int_tempo = version;
-	lon = sizeof(int_tempo)-1;
-	inverser((char *)&int_tempo,lon);
-	memcpy ( buff , &int_tempo , 2 );
-
-	type_obj = 3;
-	int_tempo = type_obj;
-	lon = sizeof(int_tempo)-1;
-	inverser((char *)&int_tempo,lon);
-	memcpy ( &buff[2] , &int_tempo , 2 );
-
-/*	memcpy ( &buff[4] , "*CAI**" , 6 ); */
-
-	filler = 0;
-	int_tempo = filler;
-	lon = sizeof(int_tempo)-1;
-	inverser((char *)&int_tempo,lon);
-	memcpy ( &buff[10] , &int_tempo , 2 );
-
-	dim_bloc = 16;
-	int_tempo = dim_bloc;
-	lon = sizeof(int_tempo)-1;
-	inverser((char *)&int_tempo,lon);
-	memcpy ( &buff[12] , &int_tempo , 2 );
-
-	int_tempo = (*nb_lig);
-	lon = sizeof(int_tempo)-1;
-	inverser((char *)&int_tempo,lon);
-	memcpy ( &buff[14] , &int_tempo , 4 );
-
-	int_tempo = (*nb_col);
-	lon = sizeof(int_tempo)-1;
-	inverser((char *)&int_tempo,lon);
-	memcpy ( &buff[18] , &int_tempo , 4 );
-
-	presence_histo = 0;
-	int_tempo = presence_histo;
-	lon = sizeof(int_tempo)-1;
-	inverser((char *)&int_tempo,lon);
-	memcpy ( &buff[22] , &int_tempo , 2 );
-	retour = fwrite ( buff , 24 , 1 , fic );
-	if ( retour == 0 )
-	{
-	  sprintf ( CAI_ERREUR , "Erreur : ecriture impossible dans fichier %s\n", fichier );
-	  goto ERREUR;
-	}
-
-	free ( buff );
-
-
-/*************************************************/
-/*	ecriture du filler a 0 			 */
-/*************************************************/
-
-	buff = (unsigned char *) calloc ( 232 ,sizeof(unsigned char));
-	if ( buff == NULL )
-	{
-		strcpy ( CAI_ERREUR , "Erreur : probleme d'allocation\n" );
-		goto ERREUR;
-	}
-
-	retour = fwrite ( buff , 232 , 1 , fic );
-	if ( retour == 0 )
-	{
-	  sprintf ( CAI_ERREUR , "Erreur : ecriture impossible dans fichier %s\n", fichier );
-		goto ERREUR;
-	}
-
-	free ( buff );
-
-/*************************************************/
-/*	ecriture des histogrammes a 0          	 */
-/*************************************************/
-
-	/* initialisations de variables necessaire au calcul d'histogramme */
-
-	for ( i=0 ; i<256 ; i++ )
-	{
-		image1->HISTO[i_can][i]=0;
-	}
-
-	retour = fwrite ( image1->HISTO[i_can] , (sizeof(int)*256) , 1 , fic );
-	if ( retour == 0 )
-	{
-	  sprintf (CAI_ERREUR  , "Erreur : ecriture impossible dans fichier %s\n", fichier );
-		goto ERREUR;
-	}
-
-
-/*************************************************/
-/*	fermeture du fichier canal 		 */
-/*************************************************/
-
-	fclose ( fic );
-
-/*................................................
-         Ouverture du fichier canal pour ecriture radiometrie
-  .............................................................*/
-      num = open(fichier,O_RDWR,0);
-      image1->ACCES_CANAL_INT[i_can]=num;
-      image1->POS_OCTET[i_can]=24 +232+ 4*256;
-
-    }
-
-   
-    free ( nom_dos_obj );
-
-
-  return (image1);
-
-ERREUR :
-  return(NULL);
-}
-
-/* 
-  Fin de l'operation cai_ouvre_creation_multis
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_multis                                   */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image multiscope           */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_lecture_canal_multis(image1, canal,     */       		      /* ------------------                               premiere_ligne,          */
-/*                                          	    premiere_colonne,        */
-/*                                           	    nombre_lignes_lire ,     */
-/*                                           	    nombre_colonnes_lire,    */
-/*                                           	    pas_ligne ,pas_colonne,  */
-/*                 		             	    data_image )             */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (int) : numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal_multis  (S) (CAI_OK_KO) : = CAI_KO si pb            */
-/*                                                 = CAI_OK si OK            */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_lecture_canal_multis(CAI_IMAGE *image1 ,  
-                            	   int *canal ,           
-    		             	   int *premiere_ligne  ,   
-     		             	   int *premiere_colonne,
-                             	   int *nombre_lignes_lire ,
-                             	   int *nombre_colonnes_lire,
-                              	   int *pas_ligne ,          
-                             	   int *pas_colonne,
-		             	   unsigned char *data_image )        
-
-{
-
- int   num,i,j;             /* variables de travail                          */
- long int pt_oct,n;	    /* position courante dans le fichier image       */
- int no_oct;                /* numero du premier octet a lire                */
- int iret;                  /* indicateur d'erreur                           */
- int lig;                   /* indice de boucle sur les lignes               */
- int l,p;		    /* variables de travail			     */
- long  nb_oct;              /* nb oct =1er octet a lire - position courante  */
- unsigned char *buf_lec;    /* buffer lecture d'une  ligne                   */
- unsigned char *deb,*pch;   /* pointeur chaine pour transfert  buffer sortie */
- unsigned char *buffer;     /* buffer de lecture d'un pave 16*16             */
- int pave;                  /* nombre de paves colonnes dans une ligne       */
- int taille;                /* nbcol_tot*taille lignes pave                  */
- int bloc;		    /* indice de boucle sur les paves                */
- int nolig;		    /* indice de boucle sur les lignes               */
- int numlig;                /* numero de la ligne reconstituee               */
- unsigned char *ind_lec;    /* pointeur de travai pour transfert pave        */
- unsigned char *ind_tab;    /* pointeur de travai pour transfert pave        */
- int nbcol16;               /* nb pave*taille colonnes du pave  (16)         */
-
-/*.........................
-  Initialisations
-  ........................*/
-   iret=CAI_OK;
-   num=image1->ACCES_CANAL_INT[*canal-1];
-   lig=*premiere_ligne;
-   i=0;
-   pch=data_image;
-
-/*..............................................
-        allocation de memoire pour lire une ligne image
- ............................................. */
-   pave=image1->NB_COL/16;
-   if ((image1->NB_COL%16)!=0)
-   {
-      pave=pave+1;
-   }
-   nbcol16=pave*16;
-   taille=nbcol16*16;
-   buf_lec = (unsigned char *) malloc(256);
-   if (buf_lec == NULL)
-   {
-      iret=CAI_KO;
-      strcpy(CAI_ERREUR,"Probleme allocation memoire");
-   }
-   else
-   {
-      buffer = (unsigned char *) malloc(taille);
-      if (buffer == NULL)
-      {
-         iret=CAI_KO;
-         strcpy(CAI_ERREUR,"Probleme allocation memoire");
-      }
-      else
-      {
-        lig=*premiere_ligne;
-        i=0;
-        pch=data_image;
-/*.....................
-         Pour chaque ligne a lire
-  .......................................*/
-        while ((i < *nombre_lignes_lire)&&(iret==CAI_OK))
-        {  
-/*............................................
-	    Recherche de la position courante dans le fichier
-  ............................................*/
-            pt_oct=lseek(num,0L,1);
-
-/*................................
-            Calcul du numero du 1er octet a lire
-  ....................................*/
-  	    nolig=((lig-1)/16)*16;
-            no_oct=image1->POS_OCTET[*canal-1]+(nolig*nbcol16);
-
-/*..................................
-            Saut d'octets pour etre positionne sur la ligne a lire
-  .......................................*/
-            nb_oct=(long)(no_oct-pt_oct);
-
-            lseek(num,nb_oct,1);
-/*...........................................
-            lecture de 16 lignes completes de nolig+1 a nolig+16
-  ................................................*/
-	    for (bloc=1;bloc<=pave;bloc=bloc+1)
-	    {
-/*	      lecture d'un bloc de 256 octets consecutifs */
-              n=read(num,buf_lec,256);
-              if (n<=0)
-              {
-                iret=CAI_KO;
-                strcpy(CAI_ERREUR,"Erreur lecture donnee image multis");
-              }
-              else
-              { 
-/*	        stockage du pave dans le tableau de 16 lignes completes */
-		ind_tab=buffer+(bloc-1)*16;
-		ind_lec=buf_lec;
-
-	        for (l=1;l<=16;l=l+1)
-                {
-		  for (p=1;p<=16;p=p+1)
-		  {
-			*ind_tab=*ind_lec;
-			ind_tab=ind_tab+1;
-			ind_lec=ind_lec+1;
-	          }
-		  ind_tab=ind_tab+nbcol16-16;
-		}
-	       }
-              }
-
-/*......................................
-             Sauvegarde des donnees lues entenant compte du pas 
-             d'echantillonnage en colonne
-  ........................................*/   
-       
-	     if (iret==CAI_OK)
-	     {
-		numlig=lig-nolig;
-		deb=buffer+(numlig-1)*nbcol16+(*premiere_colonne)-1;
-	        while ((numlig<=16)&&(i<*nombre_lignes_lire))
-		{
-		  j=1;
-		  while (j<=*nombre_colonnes_lire)
-		  {
-		    *pch=*deb;
-		    pch=pch+1;
-		    j=j+1;
-		    deb=deb+(*pas_colonne);
-	          }
-		  numlig=numlig+(*pas_ligne);
-	          deb=buffer+(numlig-1)*nbcol16+(*premiere_colonne)-1;
-		  lig=lig+(*pas_ligne);
-		  i=i+1;
-	        }
-	      }
-        }
-
-	free(buffer);
-      }
-      free(buf_lec);
-   }
-
-   return(iret);
-}
-/*
-  Fin de l'operation cai_lecture_canal_multis
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal_multis                                  */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un canal d'une image multiscope           */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ecriture_canal_multis(image1, canal,    */       		      /* ------------------                                premiere_ligne,         */
-/*                                                   nombre_lignes_ecrire,   */
-/*                                                   nombre_colonnes_ecrire, */
-/*                 		                     data_image )            */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal                 (E) (int) : numero du canal a ecrire            */
-/*     premiere_ligne        (E) (int) : premiere ligne a ecrire ds l'image  */
-/*     nombre_lignes_ecrire  (E) (int) : nombre de lignes a ecrire           */
-/*     nombre_colonnes_ecrire(E) (int) : nombre de lignes a ecrire           */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels ecris alloue et   */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_ecriture_canal_multis     (S) (CAI_OK_KO) : = CAI_KO si pb        */
-/*                                                     = CAI_OK si OK        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ecriture_canal_multis (CAI_IMAGE *image1 ,  
-                                      int *canal ,           
-    		                      int *premiere_ligne  ,   
-                                      int *nombre_lignes_ecrire ,
-                                      int *nombre_colonnes_ecrire,
-		                      unsigned char *data_image )  
-{
-int num;                        /* descripteur de fichier		     */
-int nboct_pix;			/* nombre d'octets par pixel                 */
-int	nb_colon_correc;	/* nombre de colonnes multiple de 16 	     */
-int	nb_blocs;		/* nombre de paquets de 16 pixels	     */
-int	i_bloc;			/* compteur de blocs			     */
-int	nb_last_pix;		/* nb initial de pixels dans le dernier bloc */
-int	nb_blocs_prec_first_lig;/* nb de blocs avant 1ere ligne a ecrire     */
-int	nb_blocs_prec_lig;	/* nb de blocs avant ligne courante 	     */
-int	pos_first_lig_ds_bloc;	/* position 1ere ligne a ecrire dans son bloc*/
-int	pos_lig_ds_bloc;	/* position ligne courante dans son bloc     */
-long	position_first_oct;	/* position du 1er octet a ecrire 	     */
-long	position_courante;	/* position courante dans le fichier 	     */
-long	deplacement;		/* deplacement a effectuer		     */
-long	depla_bl;		/* deplacement a effectuer		     */
-int	i_ligne;		/* compteur de lignes 			     */
-unsigned char *buff_lig;	/* tableau contenant une ligne a ecrire      */
-unsigned char *buff_bloc;	/* tableau contenant un bloc a ecrire        */
-int	taille_wr,octwr;	/* nombre d'elements du buffer a ecrire      */
-long int cr_write;		/* code retour de write 		     */
-int	i,can;			/* indice de boucle     		     */
-int Nb1; 		        /* Nombre d'octets de completion             */
-int NbL,NbC,i_can;
-unsigned char *buf;
- 
-/* initialisations */
-
-i_ligne = 0;
-num = image1->ACCES_CANAL_INT[*canal-1];
-nboct_pix = image1->NBOCT_PIX;
-
-
-/*************************************************/
-/* Les donnees doivent etre codees sur 8 bits	 */
-/*************************************************/
-
-if ( nboct_pix != 1 )
-{
-	strcpy ( CAI_ERREUR , "Erreur : les donnees doivent etre codees sur 8 bits\n");
-	goto ERREUR;
-}
-
-
-/********************************************************/
-/* Calcul du nombre de colonnes multiple de 16 de 	*/
-/* l'image a ecrire					*/
-/********************************************************/
-
-if ( (*nombre_colonnes_ecrire) % 16 == 0 )
-	nb_colon_correc = (*nombre_colonnes_ecrire);
-else
-	nb_colon_correc = (*nombre_colonnes_ecrire) - ((*nombre_colonnes_ecrire)%16) + 16;
-
-/********************************************************/
-/* Calcul du nombre de blocs complets de 16 pixels 	*/
-/* sur une meme ligne (eventuellement completes par 0)	*/
-/********************************************************/
-
-nb_blocs = nb_colon_correc / 16;
-
-/********************************************************/
-/* Calcul du nombre de pixels presents initialement 	*/
-/* dans le dernier bloc d'une ligne			*/
-/********************************************************/
-
-nb_last_pix = 16 - ( nb_colon_correc - (*nombre_colonnes_ecrire) );
-
-
-/********************************************************/
-/* Calcul du nombre de blocs de 16 lignes precedant la	*/
-/* premiere ligne a ecrire				*/
-/* Calcul de la position de la premiere ligne a ecrire 	*/
-/* au sein d'un bloc de 16 lignes			*/
-/********************************************************/
-if ( (*premiere_ligne) <= 16 )
-{
-	nb_blocs_prec_first_lig = 0;
-	pos_first_lig_ds_bloc = (*premiere_ligne);
-}
-else if ( ((*premiere_ligne) - 1) % 16 == 0 )
-{
-	nb_blocs_prec_first_lig = ((*premiere_ligne) - 1) / 16;
-	pos_first_lig_ds_bloc = 1;
-}
-else
-{
-	nb_blocs_prec_first_lig =
-	( ((*premiere_ligne) - 1 ) - ((*premiere_ligne) - 1)%16 ) / 16;
-	pos_first_lig_ds_bloc = 1 + ((*premiere_ligne) - 1)%16;
-}
-
-
-
-/********************************************************/
-/* Initialisations					*/
-/********************************************************/
-
-pos_lig_ds_bloc = pos_first_lig_ds_bloc;
-nb_blocs_prec_lig = nb_blocs_prec_first_lig;
-
-
-/********************************************************/
-/* POUR	chacune des lignes a ecrire	               	*/
-/********************************************************/
-for ( i_ligne = 0 ; i_ligne < (*nombre_lignes_ecrire) ; i_ligne++ )
-{
-
-/********************************************************/
-/*	calcul de la position du premier octet de la	*/
-/*	ligne a ecrire					*/
-/********************************************************/
-
-	position_first_oct = (long) ( image1->POS_OCTET[*canal-1] 
-			   + 16 * (pos_lig_ds_bloc - 1) 
-			   + 16 * nb_blocs_prec_lig * nb_colon_correc );
-/********************************************************/
-/*	recuperation de la position courante		*/
-/********************************************************/
-
-	position_courante = lseek ( num , 0L , 1 );
-
-/********************************************************/
-/*	deplacement jusqu'au premier octet a ecrire	*/
-/********************************************************/
-
-	deplacement = position_first_oct - position_courante;
-	lseek ( num , deplacement , 1 ); 
-
-/********************************************************/
-/*	extraction de la ligne du tableau 		*/
-/********************************************************/
-
-	buff_lig = data_image + (*nombre_colonnes_ecrire) * i_ligne;
-
-/********************************************************/
-/*	initialisation du decalage de 15*16 octets	*/
-/********************************************************/
-
-	depla_bl = 0;
-
-/********************************************************/
-/*	POUR	chacun des blocs de 16 pixels		*/
-/********************************************************/
-	for ( i_bloc = 0 ; i_bloc < nb_blocs ; i_bloc++ )
-	{
-
-/********************************************************/
-/*		deplacement 				*/
-/********************************************************/
-
-		lseek ( num , depla_bl , 1 );
-
-/********************************************************/
-/*		extraction d'un bloc de la ligne	*/
-/********************************************************/
-
-		buff_bloc = buff_lig + i_bloc * 16;
-
-/********************************************************/
-/*		determination du nombre de pixels a 	*/
-/*		ecrire					*/
-/********************************************************/
-
-		if ( i_bloc == nb_blocs - 1 )
-			taille_wr = (int) nb_last_pix;
-		else
-			taille_wr = 16;
-
-                image1->NB_PIX_ECRITS[(*canal)-1] = 
-                      image1->NB_PIX_ECRITS[(*canal)-1] + taille_wr;
-
-/********************************************************/
-/*		ecriture dans le fichier		*/
-/********************************************************/
-		cr_write = write ( num , buff_bloc , taille_wr );
-		if ( cr_write != taille_wr )
-		{
-			strcpy ( CAI_ERREUR ,
-			"Erreur ecriture canal image multiscope\n" );
-			goto ERREUR;
-		}
-/*	        ecriture des colonnes de completion si necessaire */
-		octwr = 16 - taille_wr;
-                buf = (unsigned char *) calloc(octwr,sizeof(unsigned char));
-                if (buf==NULL)
-                {
-	          printf(CAI_ERREUR,"Erreur completion multiscope");
-                  return(CAI_KO);
-                }
-
- 		cr_write = write ( num , buf , octwr );
-		if ( cr_write != octwr )
-		{
-			strcpy ( CAI_ERREUR ,
-			"Erreur ecriture canal image multiscope\n" );
-			goto ERREUR;
-		}
-                free(buf);
-		
- 
-/********************************************************/
-/*		calcul de l'histogramme 		*/
-/********************************************************/
-		can=(*canal)-1;
-		calculer_histo (image1, buff_bloc , taille_wr , can);
-/********************************************************/
-/*		mise a jour du decalage de 15*16 octets	*/
-/********************************************************/
-
-		depla_bl = 15*16;
-
-/********************************************************/
-/*	FIN POUR                                        */ 
-/********************************************************/
-	}
-
-/********************************************************/
-/*	mise a jour de la position de la ligne dans le	*/
-/*	bloc, et du nombre de blocs precedant la ligne	*/
-/********************************************************/
-
-	if ( pos_lig_ds_bloc == 16 )
-	{
-		pos_lig_ds_bloc = 1;
-		nb_blocs_prec_lig++;
-	}
-	else
-		pos_lig_ds_bloc++;
-
-/********************************************************/
-/* FIN POUR    						*/
-/********************************************************/
-}
-
-
-/********************************************************/
-/* SI  on a ecrit le dernier pixel du canal             */
-/********************************************************/
-
-if ( image1->NB_PIX_ECRITS[*canal-1] == image1->NB_COL*image1->NB_LIG )
-{
-/* Ecriture des 0 de completions si necessaires */
-
-  NbL= image1->NB_LIG;
-  NbC= image1->NB_COL;
-  if ((NbL%16) !=0)
-  	NbL = ((NbL/16)+1)*16;
-
-  if ((NbC%16) !=0)
-  	NbC = ((NbC/16)+1)*16;
-
-  Nb1 = (NbL*NbC)+1280;
-  if (Nb1 !=0)
-  {
-        position_courante = lseek ( num , 0L , 1 );
-        deplacement = Nb1 - position_courante;
-        buf = (unsigned char *) calloc(deplacement,sizeof(unsigned char));
-        if (buf==NULL)
-        {
-	   printf(CAI_ERREUR,"Erreur ecriture multiscope");
-           return(CAI_KO);
-        }
-
- 
-   /* ecriture des octets a 0 pour bloc de 16 */
-        num=image1->ACCES_CANAL_INT[(*canal)-1];
-        cr_write = write ( num , buf , deplacement );
-
-        free(buf);
-   }
-
-/********************************************************/
-/* 	on ecrit l'histogramme dans le fichier          */
-/*	apres positionnement dans le fichier		*/
-/********************************************************/
-
-        lseek ( num , 0L , 0 );
-        lseek ( num , 256L , 0 );
-
-	/* inversion des octets */
-	for ( i=0 ; i<256 ; i++ )
-	{
-		inverser((char *)&(image1->HISTO[(*canal)-1][i]),
-				(sizeof(int)-1));
-	}
-
-	cr_write = write ( num , image1->HISTO[(*canal)-1] , 
-				(sizeof(int)*256) );
-	if ( cr_write != (sizeof(int)*256) )
-	{
-		strcpy ( CAI_ERREUR ,
-			 "Erreur ecriture canal image multiscope\n" );
-		goto ERREUR;
-	}
-}
-
-
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-
-/* 
-  Fin de l'operation cai_ecriture_canal_multis
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_multis                                           */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format multiscope et de    */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_multis(image1)                    */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_multis     (S) (CAI_OK_KO) :   = CAI_KO si pb               */
-/*                                              = CAI_OK si OK               */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ferme_multis (CAI_IMAGE *image1)
-
-{
- int iret;    /* code retour de l'operation      */
- int i_can;   /* indice du canal a fermer        */
- int num;     /* descripteur du fichier a fermer */
-
- iret=CAI_OK;
-
-/*.............................................
-   Fermeture des fichiers image 
-  .............................................*/
-   for (i_can=0;i_can<image1->NB_CANAUX;i_can=i_can+1)
-   {
-     num=image1->ACCES_CANAL_INT[i_can];
-     close(num);
-    }
-
-
-  return (iret);
-}
-/*
-  Fin de l'operation cai_ferme_multis
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_multis                                        */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stocke en multiscope et de  */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_dest_ima_multis(format,nom_ima)         */       		      /* ------------------                                                        */
-/*     format       (E) (char *) : format de l'image a detruire              */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_dest_ima_multis  (S) (CAI_OK_KO) : = CAI_KO si pb                 */
-/*                                            = CAI_OK si OK                 */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_dest_ima_multis (char *repertoire , 
-                               char *nom_ima )
-
-{
-int	i_can;			/* compteur de canaux			    */
-long     iret;                  /* code retour fonction fermetrue lecture   */
-char	nom_fichier[1024];	/* nom du fichier entete a detruire	    */
-char    nom_ima_complet[1024];  /* repertoire + nom de l'image 		    */
-char	nom_fic_canal[1024];	/* nom du fichier canal a detruire 	    */
-char    chemin[1024];           /* repertoire + "/"			    */
-char    *ptr_nom_fic_can;       /* pointeur sur nom fichier canal traite    */
-int	cr_stat;		/* code retour de fonction status de fichier*/
-struct stat buf_stat;		/* structure decrivant status de fichier    */ 
-CAI_IMAGE   *image1;             /* structure ouverture image 		    */
-int         nb_can;	        /* nombre de canaux de l'image 		    */
-int         nboct_pix;		/* nombre d'octets par pixel image          */
-int         nb_col;	        /* nombre de colonnes de l'image	    */
-int         nb_lig;             /* nombre de lignes de l'image  	    */
-
-/************************************************/
-/* Constitution du nom du fichier d'entete	*/
-/************************************************/
-nom_ima_complet[0]='\0';
-if ((long int)strlen(repertoire)!= 0)
-{
-  strcpy ( nom_ima_complet , repertoire );
-  strcat ( nom_ima_complet, "/" );
-  strcpy ( chemin,nom_ima_complet );
-  strcat ( nom_ima_complet , nom_ima );
- chemin[strlen(repertoire)+1] = '\0';
-}
-else
-{
-  strcpy ( nom_ima_complet , nom_ima);
-  chemin[0]='\0';
-}
-strcpy(nom_fichier , nom_ima_complet);
-strcat ( nom_fichier , ".img" );
-nom_fichier[strlen(nom_ima_complet)+4]='\0';
-
-
-/************************************************/
-/* Extraction des caracteristiques de l'image 	*/
-/* et noms des fichiers fdoxxxxx.per            */
-/* du fichier entete par l'appel a la fonction	*/
-/* cai_ouvre_lecture_multis			*/
-/************************************************/
-  image1 = cai_ouvre_lecture_multis ( repertoire,nom_ima, &nb_can ,&nboct_pix ,
-				      &nb_col, &nb_lig );	
-  if ( image1 == NULL) goto ERREUR;
-
-image1->NB_CANAUX=nb_can;
-image1->NB_COL=nb_col;
-image1->NB_LIG=nb_lig;
-image1->NBOCT_PIX=nboct_pix;
-
-ptr_nom_fic_can = image1->NOM_FIC_CAN;
-
-for ( i_can = 0 ; i_can < nb_can ; i_can++ )
-{
-	strncpy ( nom_fic_canal , ptr_nom_fic_can , 49 );
-	nom_fic_canal[49] = '\0';
-	strcpy ( nom_fichier , chemin );
-	strcat ( nom_fichier, nom_fic_canal );
-	nom_fichier[strlen(chemin)+12] = '\0';
-	cr_stat = stat ( nom_fichier , &buf_stat );
-	if ( cr_stat == 0 )
-		unlink ( nom_fichier );
-	ptr_nom_fic_can = ptr_nom_fic_can + 100;
-}
-
- iret=cai_ferme_multis(image1);
-
-/************************************************/
-/* Destruction du fichier d'entete		*/
-/************************************************/
-nom_fichier[0]='\0';
-strcpy(nom_fichier , nom_ima_complet);
-strcat ( nom_fichier , ".img" );
-nom_fichier[strlen(nom_ima_complet)+4]='\0';
-
-cr_stat = stat ( nom_fichier , &buf_stat );
-if ( cr_stat == 0 )
-unlink ( nom_fichier );
-
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-/*
- Fin de l'operation cai_dest_ima_multis
-*/
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS INTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    inverser                                                   */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    Inversion des octets poids forts,poids faibles                  */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      void inverser((char *)s,nboct)                            */
-/* -----------------                                                         */
-/*                                                                           */
-/*     s              (E/S) (char *) : chaine a inverser                     */
-/*     nboct          (E)   (int)    : longueur de la chaine                 */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-static void inverser ( char *s , int nboct )
-{
-	int c;
-	char *t;
-
-	for ( t=s+nboct ; s<t ; s++,t-- )
-	{
-		c=*s;
-		*s=*t;
-		*t=c;
-	}
-}
-/* Fin de l'operation inverser */
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :   calculer_histo                                              */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    Inversion des octets poids forts,poids faibles                  */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      void calculer_histo(s,nboct)                      */
-/* -----------------                                                         */
-/*                                                                           */
-/*     s              (E/S) (char *) : chaine a inverser                     */
-/*     nboct          (E)   (int)    : longueur de la chaine                 */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-static void calculer_histo (CAI_IMAGE *image1, unsigned char *buffer , 
-						int nb_pix , int canal )
-{
-   int i_pix;     /* indice de boucle sur les pixels   */
-   int val_pix;   /* valeur du pixel traite	       */
-
-   for ( i_pix=0 ; i_pix<nb_pix ; i_pix++ )
-   {
-      val_pix = (int) buffer[i_pix];
-      image1->HISTO[canal][val_pix]++;
-   }
-}
-/*
- Fin de l'operation calculer_histo    
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_modifie_multis                                   */
-/* ----------								     */
-/*                                                                           */
-/* ROLE : fonction d'ouverture en lecture-ecriture d'une image au format     */
-/* -----     multiscope et de tous les fichiers qui la composent             */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_modifie_multis (nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_modifie_multis  (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_modifie_multis(char *repert,
-				    char *nom_image,
-				    int  *nb_can,
-				    int  *nboct_pix,
-				    int  *nb_col,
-				    int  *nb_lig)
-
-
-{
-   FILE *fic;			/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];	/* nom du fichier canal			    */
-   char nom_util_canal[1024];	/* nom du fichier utilisateur		    */
-   char *deb,*deb1;		/* pointeurs sur chaine de caracteres       */
-   int num,retour,lon;	        /*  variables de travail                    */
-   short int type,fin;          /* variables de trvail			    */
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
- 
-   *nb_lig=0;
-   *nb_col=0;
-   *nboct_pix=0;
-   *nb_can=0; 
-   iret=1;
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-      sscanf(repert,"%s",nom_fic);
-      strcat(nom_fic,"/");
-      strcat(nom_fic,nom_image);
-      strcat(nom_fic,".img");
-      nom_fic[strlen(repert)+1+strlen(nom_image)+4]='\0';
-   }
-   else
-   {
-      sscanf(nom_image,"%s",nom_fic);
-      strcat(nom_fic,".img");
-      nom_fic[strlen(nom_image)+4]='\0';
-   }
-   
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   fic=fopen(nom_fic,"rb");
-   if (fic == NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur ouverture fichier entete MULTISCOPE");
-    }
-   else
-   {
-     
-/*....................................
-          positionnement sur le nombre de colonnes
-*/
-	  fseek(fic,8,0);
-/*
-	  recuperation du nombre de colonnes */
-	  fread(nb_col,4,1,fic);
-/*
-	  inversion des octets pour compatibilite SUN */
-	  lon=sizeof(*nb_col)-1;
-	  inverser((char *)nb_col,lon);
-
-/*....................................
-	  recuperation du nombre de lignes
-*/
-	  fread(nb_lig,4,1,fic);
-/*
-	  inversion des octets pour compatibilite SUN */
-	  lon=sizeof(*nb_lig)-1;
-	  inverser((char *)nb_lig,lon);
-
-/*......................................
-	  initialisation du nombre d'octets par pixel
-*/
-	  *nboct_pix=1;
-          image1->NB_BITS_PIX=8;
-	  sprintf(image1->COD_PIX,"OCT");
-/*.................................
-	  positionnement sur le premier objet
-*/
-	  fseek(fic,114,1);
-	  retour=0;
-          deb = image1->NOM_FIC_CAN;
-          deb1= image1->NOM_UTIL_CAN;
-
-
-	  while (retour == 0)
-	  {
-/*...........Recuperation de tous les objets jusqu'a l'eof
-	     nom fichier,nom utilisateur et type de l'objet(avec inversion)
-*/
-	     fread(nom_fic_canal,14,1,fic);
-	     fread(nom_util_canal,40,1,fic);
-	     fread(&type,2,1,fic);
-	     lon=sizeof(type)-1;
-	     inverser((char *)&type,lon);
-	     if (type == 3)
-	      {
-/*.......................................
-                 Initialisation des tableaux contenant le nom de fichier
-                 et le nom utilisateur de chaque canal
-  .....................................................*/
-
-
-          	if (*nb_can<CAI_NB_MAX_CAN)
-          	{
-		  nom_fic_canal[0] = tolower(nom_fic_canal[0]);
-		  nom_fic_canal[1] = tolower(nom_fic_canal[1]);
-		  nom_fic_canal[2] = tolower(nom_fic_canal[2]);
-		  nom_fic_canal[9] = tolower(nom_fic_canal[9]);
-		  nom_fic_canal[10] = tolower(nom_fic_canal[10]);
-		  nom_fic_canal[11] = tolower(nom_fic_canal[11]);
-  	          nom_fic[0]='\0';
-                  if ((long int)strlen(repert) != 0)
-                  {
-                    sscanf(repert,"%s",nom_fic);
-                    strcat(nom_fic,"/");
-                    strcat(nom_fic,nom_fic_canal);
-                    nom_fic[strlen(repert)+1+strlen(nom_fic_canal)]='\0';
-       		   }
-       		  else
-       		  {
-                     sscanf(nom_fic_canal,"%s",nom_fic);
-                     nom_fic[strlen(nom_fic_canal)]='\0';
-    		  }
-        	  sscanf(nom_fic_canal,"%s",deb);
-	          deb=deb+100;
-        	  sscanf(nom_util_canal,"%s",deb1);
-	          deb1=deb1+100;
-
-                  num=open(nom_fic,O_RDWR,0);
-                  if (num==-1)
-                  {
-                    iret=0;
-                    strcpy(CAI_ERREUR,"Erreur ouverture fi canal Multiscope");
-       		   }
-       		  else
-       		  {
-                    image1->ACCES_CANAL_INT[*nb_can]=num;
-		    image1->POS_OCTET[*nb_can]=1280;
-	            image1->NB_PIX_ECRITS[*nb_can]=0;
-                  }
-
-        	}
-	        *nb_can=*nb_can+1;
-	      }
-
-/*............Positionnement en fin de bloc */
-	      fseek(fic,70,1);
-/*
-  ............Test fin de fichier */
-	      fread(&fin,2,1,fic);
-	      retour=feof(fic);
-	  }      
-/*..................................
-          Fermeture du fichier 
-  ......................................*/
-          fclose(fic);
-       }
-
- 
-   if (iret != 0)
-      return (image1);
-    else
-     return(NULL);
-
-}
-/* 
-   Fin de l'operation cai_ouvre_modifie_multis
-*/
diff --git a/Utilities/CAI/cai_dll/src/cai_onera.c b/Utilities/CAI/cai_dll/src/cai_onera.c
deleted file mode 100755
index 76b55d78ab..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_onera.c
+++ /dev/null
@@ -1,1296 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_onera.c                                                   */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format onera                                      */ 
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CISI)                                   */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    fevrier 1995                                        */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V2                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 3.3: DM : optimisation des acces                          */
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : FA : verification que l'image est codee sur un seul */
-/*octet par pixel (contrainte du format)                                     */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications pour compatibilite HP64bits      */
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : modifications open et fopen pour PC NT         */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : test sur  fclose  pour PC/LINUX                */
-/*****************************************************************************/
-/* MOD : VERSION : 4.6 : FA : erreur ouverture en modification               */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : FA : ecriture image entiere. Correction du test de  */
-/*                            retour sur le nb d'octets ecrits               */
-/*****************************************************************************/
-/* MOD : VERSION : 5.3 : FA : ouverture en lecture/ecriture                  */
-/*****************************************************************************/
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-
-# include <stdio.h>
-# include <string.h>
-# include <stdlib.h>
-# include <unistd.h>
-# include <sys/types.h>
-#include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-
-#define _CAI_IMAGE
-#define IN_CAI_ONERA
-
-# include "cai_image.h"
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header: cai_onera.c,v 1.10 01/05/31 10:47:12 cmf Exp $";
-
-extern char *getenv();
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_onera                                        */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images au format onera                  */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_ima_onera(repert,tab_ima)           */
-/* -----------------                                                         */
-/*                                                                           */
-/*     repert        (E) (char *)   : repertoire a explorer		     */
-/*     tab_ima       (S) (char ***) : pointeur sur tableau des images listees*/
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_ima_onera     (S) (int)     : = -1 repertoire inexistant    */                                    /*					       = > 0 nombre d'images listees */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-long int cai_liste_ima_onera (char *repert,
-		         	char ***tab_ima)
- 
-
-{
-   DIR *dirp;		/* pointeur sur structure ouverture repertoire */
-
-struct dirent *dp;   /* structure resultat de la fonction readdir   */
-
-   char *pch0,*pch1;    /* pointeurs sur chaine de caracteres          */
-   char *pch2,*pch3;    /* pointeurs sur chaine de caracteres          */
-   char car;            /* variable de travail                         */  
-   int nb_ima;          /* nombre d'images onera identifiees           */
-   int i;               /* indice de boucle                            */
-
-
-/*........................................
-   INITIALISATION et ouverture du repertoire choisi
-  .........................................*/
-   nb_ima=0;
- 
-   dirp=opendir(repert);
-
-   if(dirp!=NULL)
-   {
-
-/*......................................
-  premiere passe pour comptabiliser les images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE ONERA
-      (EXTENSION =.inf)
-   ..........................................*/
-
-   while((dp=readdir(dirp))!=NULL)
-   {
-
-     car='.';
-     pch0=strrchr(dp->d_name,car);
-     if (pch0 != NULL)
-     {
-       car='i';
-       pch1=strrchr(dp->d_name,car);
-       if ((pch1 != NULL)&&(pch1==pch0+1))
-       {
-         car='n';
-         pch2=strrchr(dp->d_name,car);
-         if ((pch2 != NULL)&&(pch2==pch1+1))
-         {
-           car='f';
-           pch3=strrchr(dp->d_name,car);
-           if ((pch3 != NULL)&&(pch3==pch2+1))
-           {
-              *pch0='\0';
-              *pch1=' ';
-	      *pch2=' ';
-              *pch3=' ';
-	      nb_ima=nb_ima+1;
-           }
-         }
-       }
-     }
-   }
-
-    closedir(dirp);
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES DU FORMAT ONERA
-     ......................................*/
-    *tab_ima = (char **) calloc(nb_ima,sizeof(char *));
-    for (i=0;i<nb_ima;i=i+1)
-      (*tab_ima)[i]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE ONERA
-      (EXTENSION =.inf)
-   SI C`EST LE CAS,STOCKAGE DANS LA LISTE
-   ..........................................*/
-   dirp=opendir(repert);
-
-   nb_ima=0;
-   while((dp=readdir(dirp))!=NULL)
-   {
-
-     car='.';
-     pch0=strrchr(dp->d_name,car);
-     if (pch0 != NULL)
-     {
-       car='i';
-       pch1=strrchr(dp->d_name,car);
-       if ((pch1 != NULL)&&(pch1==pch0+1))
-       {
-         car='n';
-         pch2=strrchr(dp->d_name,car);
-         if ((pch2 != NULL)&&(pch2==pch1+1))
-         {
-           car='f';
-           pch3=strrchr(dp->d_name,car);
-           if ((pch3 != NULL)&&(pch3==pch2+1))
-           {
-              *pch0='\0';
-              *pch1=' ';
-	      *pch2=' ';
-              *pch3=' ';
-              strcpy((*tab_ima)[nb_ima],dp->d_name);
-	      nb_ima=nb_ima+1;
-           }
-         }
-       }
-     }
-   }
-
-    (void)closedir(dirp);
-
-   }
-   else
-   {
-    /* Repertoire inexistant */
-      nb_ima=-1;
-   }
-
-    return(nb_ima);
-
-}
-
-/* Fin de l'operation cai_liste_ima_onera
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_onera                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image au format onera     */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :   CAI_IMAGE *cai_ouvre_lecture_onera (nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1)          */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_onera   (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_lecture_onera(char *repert,
-				   char *nom_image,
-				   int *nb_can,
-				   int *nboct_pix,
-				   int *nb_col,
-				   int *nb_lig)
-
-{
-   int fic;			/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char *deb,*deb1;		/* pointeurs sur chaine de caracteres       */
-   char car[2];			/* indice du canal traite     		    */
-   int num,ican;		/* indice 				    */
-   char *buf_lec ;              /* buffer lecture entete onera              */
-   long k;			/* indice 				    */
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
- 
-   *nb_lig=0;
-   *nb_col=0;
-   *nboct_pix=0;
-   *nb_can=0;
-
- 
-   iret=1;
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoire dans cai_ouvre_lecture");
-    }
-   else
-   {
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-       sprintf(nom_fic,"%s/%s.inf",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.inf",nom_image);
-   }
-
-
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   num=open(nom_fic,O_RDONLY|O_BINARY,0);
-   if (num == -1)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur ouverture fichier entete ONERA");
-    }
-   else
-   {
-     
-/*....................................
-     Lecture du fichier entete
-  ............................................*/
-     buf_lec=(char *) malloc(257);
-     if (buf_lec==NULL)
-     {
-       iret=0;
-       strcpy(CAI_ERREUR,"Erreur allocation memoire dans cai_ouvre_lecture");
-      }
-      else
-      {
-
-     k=read(num,buf_lec,256);
-     if (k<=0)
-      {
-         iret=0;
-         strcpy(CAI_ERREUR,"Erreur lecture entete Onera");
-         close(num);
-       }
-       else
-       {
-        buf_lec[k]='\0';
-/*.........................................
-       Initialisation du nombre d'octets par pixel . Pour onera les pixels
-	sont toujours codes sur 1 octet
-  ...............................................................*/
-	*nboct_pix=1;
-        image1->NB_BITS_PIX=8;
-        sprintf(image1->COD_PIX,"OCT");
-/*.................................
-       Decodage de l'enregistrement
-  .........................................*/
-          deb=buf_lec;
-          sscanf(deb,"%d%d%d",nb_col,nb_lig,nb_can);
- 	  close(num);
-        }
-        free(buf_lec);
-     }
-   }
-
-   if (iret !=0)
-   {
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL et ouverture
-      de ces fichiers
-  .....................................................*/
-  
-     deb = image1->NOM_FIC_CAN;
-     deb1= image1->NOM_UTIL_CAN;
-
-     ican=1;    
-     while((ican<=*nb_can)&&(ican<CAI_NB_MAX_CAN))
-     {
-          sprintf(deb,"%s.%d",nom_image,ican);
-          deb=deb+100;
-          sprintf(deb1,"%s.%d",nom_image,ican);
-          deb1=deb1+100;
-          nom_fic[0]='\0';
-          if ((long int)strlen(repert)!=0)
-          {
-    		sprintf(nom_fic,"%s/%s.%d",repert,nom_image,ican);
-          }
-	  else
-          {
-             sprintf(nom_fic,"%s.%d",nom_image,ican);
- 	  }
-          fic=open(nom_fic,O_RDONLY|O_BINARY,0);
-          if (fic != -1) 
-          {
-           image1->ACCES_CANAL_INT[ican-1]=fic;
-           image1->POS_OCTET[ican-1]=0;
-           ican=ican+1;
-          }
-	  else
-          {
-	    iret=0;
-            strcpy(CAI_ERREUR,"incoherence au niveau du nb fichiers canaux");
-	    return(NULL);
-          }
-       }
-      }
-    }
-
-    if (iret == 0)
-    {
-	return (NULL);
-     }
-    else
-    {
-      return(image1);
-     }
-
-}
-
-/* 
-   Fin de l'operation cai_ouvre_lecture_onera
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_onera                                   */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format onera et de tous les fichiers qui la composent        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :   CAI_IMAGE *cai_ouvre_creation_onera(nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            label)           */
-/*                                                                           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 )         */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_onera   (S) (CAI_IMAGE *) : =NULL si pb            */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_creation_onera(char *repert,
-				    char *nom_image,
-				    int *nb_can,
-				    int *nboct_pix,
-				    int *nb_col,
-				    int *nb_lig,
-				    char *label)
-
-{
-   FILE *fic;		        /* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   int retour;			/* retour de fonction 			    */ 
-   char car[2];			/* indice du canal traite     		    */
-   int i,num;			/* indice 				    */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : FA : verification que l'image est codee sur un seul */
-/*octet par pixel (contrainte du format)                                     */
-/*****************************************************************************/
-   if (*nboct_pix != 1)
-   {
-	image1 = NULL;
- 	sprintf ( CAI_ERREUR , 
-		"Une image onera ne peutetre codee que sur un seul octet par pixel");
-	goto ERREUR;
-   }
-
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_creation");
-     goto ERREUR;
-   }
-
-/*.................................................
-   Constitution du nom du fichier entete et verification qu'il
-   n'existe pas deja
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-      sprintf(nom_fic,"%s/%s.inf",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.inf",nom_image);
-   }
-
-   retour = stat ( nom_fic , &buf_stat );
-   if ( retour == 0 )
-   { 
-	sprintf ( CAI_ERREUR , "L'image %s ONERA existe \n" , nom_image );
-	goto ERREUR;
-   }
-
-/*...............................................................
-  Pour chaque canal de l'image,constitution du nom de fichier correspondant
-  Verification qu'il n'existe pas deja
-  Ouverture du fichier en ecriture
-  .................................................................*/
-
-  for (i=0;i<*nb_can;i=i+1)
-  {
-   nom_fic_canal[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-      sprintf(nom_fic_canal,"%s/%s.%d",repert,nom_image,i+1);
-   }
-   else
-   {
-      sprintf(nom_fic_canal,"%s.%d",nom_image,i+1); 
-   }
-   retour = stat ( nom_fic_canal , &buf_stat );
-   if ( retour == 0 )
-   { 
-	sprintf ( CAI_ERREUR , "L'image %s ONERA existe \n" , nom_image );
-	goto ERREUR;
-   }
-   
-    num = open(nom_fic_canal,O_RDWR|O_CREAT|O_BINARY,PERMS); 
-   if (num == -1)
-   {
-     sprintf(CAI_ERREUR,"Erreur: Creation %s canl impossible\n",nom_fic_canal);
-     goto ERREUR;
-   }
-   image1->ACCES_CANAL_INT[i]=num;
-   image1->POS_OCTET[i]=0;
-  }
-
-/*......................................................
-  Ouverture du fichier entete en ecriture 
-  Ecriture du contenu
-  ..........................................................*/
-  fic = fopen(nom_fic,"w");
-  if (fic == NULL)
-  {
-      sprintf(CAI_ERREUR,
-	"Erreur: Creation fichier entete  %s impossible\n",
-	nom_fic);
-      goto ERREUR;
-   }
-   fprintf ( fic , "%d\n" , *nb_col );
-   fprintf ( fic , "%d\n" , *nb_lig);
-   fprintf ( fic , "%d" , *nb_can );
-
-
-/*************************************************/
-/* Fermeture du fichier                          */
-/*************************************************/
-
- if (fic!=NULL)  fclose ( fic );
-  return (image1);
-
-ERREUR :
-  return(NULL);
-}
-  
-/* 
-  Fin de l'operation cai_ouvre_creation_onera
-*/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_onera                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image onera                */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_lecture_canal_onera(image1, canal,      */       		      /* ------------------                              premiere_ligne,           */
-/*                                          	   premiere_colonne,         */
-/*                                          	   nombre_lignes_lire ,      */
-/*                                          	   nombre_colonnes_lire,     */
-/*                                           	   pas_ligne ,pas_colonne,   */
-/*                 		             	   data_image )              */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (int) : numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal_onera   (S) (CAI_OK_KO) : = CAI_KO si pb            */
-/*                                                 = CAI_OK si OK            */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_lecture_canal_onera(CAI_IMAGE *image1 ,  
-                           	  int *canal ,           
-    		            	  int *premiere_ligne  ,   
-     		          	  int *premiere_colonne,
-                          	  int *nombre_lignes_lire ,
-                          	  int *nombre_colonnes_lire,
-                          	  int *pas_ligne ,          
-                          	  int *pas_colonne,
-		          	  unsigned char *data_image )        
-
-{
- int   num,i,j;             /* variables de travail                          */
- long pt_oct,n;		    /* position courante dans le fichier image       */
- int no_oct;                /* numero du premier octet a lire                */
- int iret;                  /* indicateur d'erreur                           */
- int lig;                   /* indice de boucle sur les lignes               */
- int   oct_pix;             /* nb octets par pixels                          */
- long  nb_oct;              /* nb oct =1er octet a lire - position courante  */
- long  oct_lig;             /* nb oct. par ligne en considerant taille pixel */
- unsigned char *buf_lec;    /* buffer lecture d'une  ligne                   */
- unsigned char *deb,*pch;   /* pointeur chaine pour transfert  buffer sortie */
-
-
-/*...........................
-  Initialisations diverses
-  ..........................*/
- 
-   iret=CAI_OK;
-   num=image1->ACCES_CANAL_INT[*canal-1];
-   oct_pix=image1->NBOCT_PIX;
-   oct_lig=oct_pix*(image1->NB_COL);
-
-/*.......................................*/
-/* verification si lecture image entiere */
-/*.......................................*/
-  if ((*nombre_lignes_lire==image1->NB_LIG)&&(*nombre_colonnes_lire==image1->NB_COL)
-       &&(*pas_ligne==1)&&(*pas_colonne==1))
-  {
-       oct_lig=oct_pix*(image1->NB_COL)*(image1->NB_LIG);
-
-    /* positionnement en debut de fichier */
-       pt_oct=lseek(num,0L,0);
-
-   /* lecture du canal complet */
-      n=read(num,data_image,oct_lig);
-      if (n<=0)
-      {
-             iret=CAI_KO;
-             strcpy(CAI_ERREUR,"Erreur lecture donnee image ONERA");
-       }
-        else
-             iret=CAI_OK;
-   }
-  else
-  {
-
-/*..............................................
-        allocation de memoire pour lire une ligne image
- ............................................. */
-
-   buf_lec = (unsigned char *) malloc(oct_lig);
-   if (buf_lec == NULL)
-   {
-      iret=CAI_KO;
-      strcpy(CAI_ERREUR,"Probleme allocation memoire");
-   }
-   else
-   {
-/*....................
-        Initialisation
-  ......................*/
-        lig=*premiere_ligne;
-        i=1;
-        pch=data_image;
-
-/*.....................
-         Pour chaque ligne a lire
-  .......................................*/
-        while ((i <= *nombre_lignes_lire)&&(iret==CAI_OK))
-        {  
-/*............................................
-	    Recherche de la position courante dans le fichier
-  ............................................*/
-            pt_oct=lseek(num,0L,1);
-
-/*................................
-            Calcul du numero du 1er octet a lire
-  ....................................*/
-            no_oct=(lig-1)*image1->NB_COL;
-
-/*..................................
-            Saut d'octets pour etre positionne sur la ligne a lire
-  .......................................*/
-            nb_oct=(long)(no_oct-pt_oct);
-            lseek(num,nb_oct,1);
-
-/*...........................................
-            lecture d'une ligne image
-  ................................................*/
-            n=read(num,buf_lec,image1->NB_COL);
-
-            if (n<=0)
-            {
-             iret=CAI_KO;
-             strcpy(CAI_ERREUR,"Erreur lecture donnee image onera");
-            }
-            else
-            { 
-/*......................................
-             Sauvegarde des donnees lues entenant compte du pas 
-             d'echantillonnage en colonne
-  ........................................*/           
-             deb=buf_lec+(*premiere_colonne-1);
-             j=1;
-             while (j <= *nombre_colonnes_lire)
-	     {                         
-              *pch=*deb;
-              pch=pch+1;
-              j=j+1;
-              deb=deb+*pas_colonne;
-             }   
-             
-            }
-          i=i+1;
-          lig=lig+*pas_ligne;
-
-        }        
-
-	free(buf_lec);
-      }
-   }
-
-   return(iret);
-}
-    
-/*
-  Fin de l'operation cai_lecture_canal_onera
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal_onera                                   */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un canal d'une image onera                */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_OK_KO cai_ecriture_canal_onera(image1, canal,      */       		      /* ------------------                                 premiere_ligne,        */
-/*                                                    nombre_lignes_ecrire,  */
-/*                                                    nombre_colonnes_ecrire,*/
-/*                 		                      data_image )           */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal                 (E) (int) : numero du canal a ecrire            */
-/*     premiere_ligne        (E) (int) : premiere ligne a ecrire ds l'image  */
-/*     nombre_lignes_ecrire  (E) (int) : nombre de lignes a ecrire           */
-/*     nombre_colonnes_ecrire(E) (int) : nombre de lignes a ecrire           */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels ecris alloue et   */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_ecriture_canal_onera      (S) (CAI_OK_KO) : = CAI_KO si pb        */
-/*                                                     = CAI_OK si OK        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ecriture_canal_onera (CAI_IMAGE *image1 ,  
-                                      int *canal ,           
-    		                      int *premiere_ligne  ,   
-                                      int *nombre_lignes_ecrire ,
-                                      int *nombre_colonnes_ecrire,
-		                      unsigned char *data_image ) 
-{
-long	position_first_lig;	/* position de la 1ere ligne a ecrire 	*/
-long	position_courante;	/* position courante dans le fichier 	*/
-long	deplacement;		/* deplacement a effectuer		*/
-int	i_ligne;		/* compteur de lignes			*/
-unsigned char *buff_lig;	/* tableau contenant une ligne a ecrire */
-long	cr_write;		/* code retour de write			*/
-int num;                        /* descripteur de fichier 		*/
-int nboct_pix;			/* nombre d'octets par pixel            */
-int tot_pix;                    /* nb de pixels total a ecrire          */
-
-/* ................
-   Initialisations 
-  .................*/
-i_ligne = 0;
-num = image1->ACCES_CANAL_INT[*canal-1];
-nboct_pix = image1->NBOCT_PIX;
-
-
-/*************************************************/
-/* Les donnees doivent etre codees sur 8 bits	 */
-/*************************************************/
-
-if ( nboct_pix != 1 )
-{
-	strcpy ( CAI_ERREUR , "Erreur : les donnees doivent etre codees sur 8 bits\n");
-	goto ERREUR;
-}
-/*.......................................*/
-/* verification si ecriture image entiere */
-/*.......................................*/
-  if ((*nombre_lignes_ecrire==image1->NB_LIG)&&
-		(*nombre_colonnes_ecrire==image1->NB_COL))
-  {
-       tot_pix=nboct_pix*(image1->NB_COL)*(image1->NB_LIG);
-
-    /* positionnement en debut de fichier */
-       position_first_lig=lseek(num,0L,0);
-
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : FA : ecriture image entiere. Correction du test de  */
-/*                            retour sur le nb d'octets ecrits               */
-/*           tot_pix au lieu de nboct_pix                                    */
-/*****************************************************************************/
-   /* ecriture du canal complet */
-      cr_write = write ( num , data_image,tot_pix);
-      if (cr_write != tot_pix)
-      {
-              strcpy(CAI_ERREUR,"Erreur ecriture donnee image ONERA");
-             goto ERREUR;
-       }
-   }
-  else
-  {
-
-/********************************************************/
-/* Calcul de la position de la premiere ligne a ecrire 	*/ 
-/********************************************************/
-
-position_first_lig =
-	(long) ( image1->POS_OCTET[*canal-1] +
-        (*premiere_ligne - 1) * (*nombre_colonnes_ecrire) );
-
-
-/********************************************************/
-/* Recuperation de la position courante			*/
-/********************************************************/
-
-position_courante = lseek ( num , 0L , 1 );
-
-
-/********************************************************/
-/* Deplacement jusqu'a la premiere ligne a ecrire	*/
-/********************************************************/
-
-deplacement = position_first_lig - position_courante;
-lseek ( num, deplacement , 1 ); 
-
-
-/********************************************************/
-/* TANT QUE il y a des lignes a ecrire                 	*/
-/********************************************************/
-while (i_ligne < *nombre_lignes_ecrire)
-{
-
-/********************************************************/
-/*	extraction de la ligne du tableau 		*/
-/********************************************************/
-
-	buff_lig = data_image + (*nombre_colonnes_ecrire) * i_ligne;
-
-/********************************************************/
-/*	ecriture de la ligne				*/
-/********************************************************/
-
-	cr_write = write ( num , buff_lig ,(*nombre_colonnes_ecrire) );
-	if ( cr_write !=(*nombre_colonnes_ecrire) )
-	{
-		strcpy ( CAI_ERREUR , "Erreur ecriture canal image onera \n" );
-		goto ERREUR;
-	}
- 
-/********************************************************/
-/*	incrementation du nombre de lignes		*/
-/********************************************************/
-
-	i_ligne++;
-
-/********************************************************/
-/* FIN TANT QUE						*/
-/********************************************************/
- }
-}
-
-
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-/* 
-  Fin de l'operation cai_ecriture_canal_onera
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_onera                                            */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format onera et de         */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_onera(image1)                     */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_onera      (S) (CAI_OK_KO) :   = CAI_KO si pb               */
-/*                                              = CAI_OK si OK               */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ferme_onera (CAI_IMAGE *image1)
-
-
-{
- int iret;    /* code retour de l'operation      */
- int i_can;   /* indice du canal a fermer        */
- int num;     /* descripteur du fichier a fermer */
-
-
- iret=CAI_OK;
-/*.............................................
-   Fermeture des fichiers image 
-  .............................................*/
-   for (i_can=0;i_can<image1->NB_CANAUX;i_can=i_can+1)
-   {
-     num=image1->ACCES_CANAL_INT[i_can];
-     if (num>0) close(num);
-    }
-
-
-  return (iret);
-}
-
-/*
-  Fin de l'operation cai_ferme_onera
-*/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_onera                                         */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stocke en onera et de       */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_dest_ima_onera(format,nom_ima)          */       		      /* ------------------                                                        */
-/*     format       (E) (char *) : format de l'image a detruire              */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_dest_ima_onera   (S) (CAI_OK_KO) : = CAI_KO si pb                 */
-/*                                            = CAI_OK si OK                 */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_dest_ima_onera ( char *repertoire , 
-                      	       char *nom_ima )
-
-{
-
-int	i_can;			/* compteur de canaux 			     */
-long     iret;                   /* code retour fonction fermetrue lecture    */
-char	str_num_canal[3];	/* suffixe numero du canal		     */
-char	nom_fic_entete[1024];	/* nom du fichier entete a detruire          */
-char    nom_ima_complet[1024];  /* repertoire + nom de l'image		     */
-char	nom_fic_canal[1024];	/* nom du fichier canal a detruire 	     */
-int	cr_stat;		/* code retour de fonction status de fichier */
-struct stat buf_stat;		/* structure decrivant status de fichier     */ 
-CAI_IMAGE   *image1;             /* structure ouverture image 		     */
-int         nb_can;	        /* nombre de canaux de l'image 		     */
-int         nboct_pix;		/* nombre d'octets par pixel image 	     */
-int         nb_col;	        /* nombre de colonnes de l'image 	     */
-int         nb_lig;             /* nombre de lignes de l'image		     */
-
-/************************************************/
-/* Constitution du nom du fichier d'entete	*/
-/************************************************/
-if ((long)strlen(repertoire)!= 0)
-{
-  sprintf ( nom_ima_complet, "%s/%s",repertoire,nom_ima );
-
-}
-else
-{
-  strcpy ( nom_ima_complet , nom_ima);
-}
-sprintf(nom_fic_entete ,"%s.inf", nom_ima_complet);
-
-/************************************************/
-/* Extraction des caracteristiques de l'image 	*/
-/* du fichier entete par l'appel a la fonction	*/
-/* cai_ouvre_lecture_onera			*/
-/************************************************/
-
-  image1 = cai_ouvre_lecture_onera ( repertoire,nom_ima, &nb_can ,&nboct_pix ,
-				     &nb_col , &nb_lig);	
-  if ( image1 == NULL) goto ERREUR;
-
-  image1->NB_CANAUX=nb_can;
-  image1->NB_COL=nb_col;
-  image1->NB_LIG=nb_lig;
-  image1->NBOCT_PIX=nboct_pix;
-
-iret=cai_ferme_onera(image1);
-image1 = NULL;
-
-/************************************************/
-/* Destruction du fichier d'entete		*/
-/************************************************/
-
-cr_stat = stat ( nom_fic_entete , &buf_stat );
-if ( cr_stat == 0 )
-	unlink ( nom_fic_entete );
-
- 
-/************************************************/
-/* Constitution un a un des noms des fichiers	*/
-/* canaux et destruction 			*/
-/************************************************/
-
-for ( i_can = 0 ; i_can < nb_can ; i_can++ )
-{
-	sprintf( nom_fic_canal , "%s.%d" ,nom_ima_complet,i_can+1);
-  	cr_stat = stat ( nom_fic_canal , &buf_stat );
-	if ( cr_stat == 0 )
-		unlink ( nom_fic_canal );
-}
-
-
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-/*
- Fin de l'operation cai_dest-ima_onera
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_modifie_onera                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture-ecriture d'une image au format  */
-/* -----     onera et de tous les fichiers qui la composent                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :   CAI_IMAGE *cai_ouvre_modifie_onera (nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 )         */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_modifie_onera   (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_modifie_onera(char *repert,
-				   char *nom_image,
-				   int  *nb_can,
-				   int  *nboct_pix,
-				   int  *nb_col,
-				   int  *nb_lig)
-
-{
-   int fic;			/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char *deb,*deb1;		/* pointeurs sur chaine de caracteres       */
-   char car[2];			/* indice du canal traite     		    */
-   int num,ican;		/* indice 				    */
-   char *buf_lec ;              /* buffer lecture entete onera              */
-   long k;			/* indice 				    */
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
- 
-   *nb_lig=0;
-   *nb_col=0;
-   *nboct_pix=0;
-   *nb_can=0;
-
- 
-   iret=1;
-
- image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
- if (image1==NULL)
- {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_modifie");
- }
- else
- {
-
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-      sprintf(nom_fic,"%s/%s.inf",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.inf",nom_image);
-   }
-
-
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   num=open(nom_fic,O_RDWR|O_BINARY,0);
-   if (num == -1)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur ouverture fichier entete ONERA");
-    }
-   else
-   {     
-/*....................................
-     Lecture du fichier entete
-  ............................................*/
-     buf_lec=(char *) malloc(257);
-     if (buf_lec==NULL)
-     {
-       iret=0;
-       strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_modifie");
-     }
-    else
-    {
-
-     k=read(num,buf_lec,256);
-     if (k<=0)
-      {
-         iret=0;
-         strcpy(CAI_ERREUR,"Erreur lecture entete Onera");
-         close(num);
-       }
-       else
-       {
-        buf_lec[k]='\0';
-/*.........................................
-       Initialisation du nombre d'octets par pixel . Pour onera les pixels
-	sont toujours codes sur 1 octet
-  ...............................................................*/
-	*nboct_pix=1;
-        image1->NB_BITS_PIX=8;
-        sprintf(image1->COD_PIX,"OCT");
-/*.................................
-       Decodage de l'enregistrement
-  .........................................*/
-          deb=buf_lec;
-          sscanf(deb,"%d%d%d",nb_col,nb_lig,nb_can);
- 	  close(num);
-        }
-        free(buf_lec);
-     }
-   }
-
-   if (iret !=0)
-   {
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL et ouverture
-      de ces fichiers
-  .....................................................*/
-  
-     deb = image1->NOM_FIC_CAN;
-     deb1= image1->NOM_UTIL_CAN;
-
-     ican=1;    
-     while((ican<=*nb_can)&&(ican<CAI_NB_MAX_CAN))
-     {
-          sprintf(deb,"%s.%d",nom_image,ican);
-          deb=deb+100;
-          sprintf(deb1,"%s.%d",nom_image,ican);
-          deb1=deb1+100;
-          nom_fic[0]='\0';
-          if ((long int)strlen(repert)!=0)
-          {
-    		sprintf(nom_fic,"%s/%s.%d",repert,nom_image,ican);
-          }
-	  else
-          {
-             sprintf(nom_fic,"%s.%d",nom_image,ican);
- 	  }
-/*****************************************************************************/
-/* MOD : VERSION : 5.3 : FA : ouverture en lecture/ecriture                  */
-/*****************************************************************************/
-          fic=open(nom_fic,O_RDWR|O_BINARY,0);
-          if (fic != -1) 
-          {
-           image1->ACCES_CANAL_INT[ican-1]=fic;
-           image1->POS_OCTET[ican-1]=0;
-           ican=ican+1;
-          }
-	  else
-          {
-	    iret=0;
-            strcpy(CAI_ERREUR,"incoherence au niveau du nb fichiers canaux");
-	    return(NULL);
-          }
-       }
-
-     }
-   }
-   if (iret==0)
-   {
-     return (NULL);
-   }
-   else
-   {
-     return(image1);
-    }
-
-}
-/* 
-   Fin de l'operation cai_ouvre_modifie_onera
-*/
diff --git a/Utilities/CAI/cai_dll/src/cai_radar.c b/Utilities/CAI/cai_dll/src/cai_radar.c
deleted file mode 100755
index ebf80637a4..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_radar.c
+++ /dev/null
@@ -1,1466 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_radar.c                                                   */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format radar                                      */ 
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CS)                                     */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    Juin 2001                                           */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V5.1                                                            */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 1.2 : FA : IMA-FA-011 pb inversion des octets complexes   */
-/*****************************************************************************/
-/* MOD : VERSION : 5.1 : DM :  Maj du tag COD_PIX lorsque l'image est codée  */
-/*                                            en reel  a partir du TYPE_CODE */
-/*****************************************************************************/
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-
-
-# include <stdio.h>
-#ifndef _MSC_VER
-# include <strings.h>
-#endif
-# include <stdlib.h>
-# include <sys/types.h>
-# include <unistd.h>
-# include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-#include <errno.h>
-
-#define _CAI_IMAGE
-#define IN_CAI_RADAR
-
-# include "cai_image.h"
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header$";
-
-extern char *getenv();
-
-#define FREE(A)        { if ((A)!=NULL) { free(A); (A)=NULL; } }
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_radar                                        */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images au format radar                  */
-/* ------                                                                    */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_ima_radar(repert,tab_ima)           */
-/* -----------------                                                         */
-/*                                                                           */
-/*     repert       (E) (char *)   : repertoire a explorer		     */
-/*     tab_ima      (S) (char ***) : pointeur sur tableau des images listees */
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_ima_radar  (S) (long int)   : = -1 repertoire inexistant    */ 
-/*					       = > 0 nombre d'images listees */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-long int cai_liste_ima_radar (char *repert,
-		       char ***tab_ima)
-{
-
-   DIR *dirp;		/* pointeur sur structure ouverture repertoire */
-   struct dirent *dp;   /* structure resultat de la fonction readdir   */
-   char *pch0,*pch1;    /* pointeurs sur chaine de caracteres          */
-   int nb_ima;          /* nombre d'images radar identifiees           */
-   int ind;		/* indice de boucles			       */
- 
-/*........................................
-   INITIALISATION et ouverture du repertoire choisi
-  .........................................*/
-   nb_ima=0;
-   dirp=opendir(repert);
-
-   if(dirp!=NULL)
-   {
-
-/*......................................
-
-   premiere passe pour comptabiliser les images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE RADAR_CNES
-      (EXTENSION =.rad ou .RAD)
-   ..........................................*/
-   while((dp=readdir(dirp))!=NULL)
-   {
-/* recherche de l'extension en minuscule */
-       pch0 = strstr(dp->d_name,".rad");
-       if (pch0==NULL)
-       {
-/* recherche de l'extension en majuscule */
-	 pch1=strstr(dp->d_name,".RAD");
-	 if ((pch1 != NULL)&&(*(pch1+4) == '\0'))
-         {
-		nb_ima=nb_ima+1;
-         }
-       }
-      else
-      {
-	 if (*(pch0+4) == '\0')
-		nb_ima=nb_ima+1;
-        }
-     }
-    (void)closedir(dirp);
-
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES DU FORMAT RADAR
-     ......................................*/
-    *tab_ima = (char **) calloc(nb_ima,sizeof(char *));
-    for (ind=0;ind<nb_ima;ind++)
-      (*tab_ima)[ind]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE RADAR_CNES
-      (EXTENSION =.rar ou .RAD)
-   SI C`EST LE CAS,STOCKAGE DANS LA LISTE
-   ..........................................*/
-   dirp=opendir(repert);
-
-   nb_ima=0;
-   while((dp=readdir(dirp))!=NULL)
-   {
-/* recherche de l'extension en minuscule */
-       pch0 = strstr(dp->d_name,".rad");
-       if (pch0==NULL)
-       {
-/* recherche de l'extension en majuscule */
-	 pch1=strstr(dp->d_name,".RAD");
-	 if ((pch1 != NULL)&&(*(pch1+4) == '\0'))
-         {
-		*pch1='\0';
-            	strcpy((*tab_ima)[nb_ima],dp->d_name);
-		nb_ima=nb_ima+1;
-         }
-       }
-      else
-      {
-	 if (*(pch0+4) == '\0')
-         {
-		*pch0='\0';
-            	strcpy((*tab_ima)[nb_ima],dp->d_name);
-		nb_ima=nb_ima+1;
-         }
-        }
-   }
-   (void)closedir(dirp);
- }
- else
- {
-    /* repertoire inexistant */
-     nb_ima=-1;
- }
- return(nb_ima);
-}
-
-/* Fin de l'operation cai_liste_ima_radar
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_radar                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image au format radar     */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :     CAI_IMAGE *cai_ouvre_lecture_radar (nom_image,     */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels et par canal */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_radar     (S) (CAI_IMAGE *)  : = NULL si pb         */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_lecture_radar(char *repert,
-				 char *nom_image,
-				 int  *nb_can,
-				 int  *nboct_pix,
-				 int  *nb_col,
-				 int  *nb_lig)
-
-
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   char label[80];		/* contient un enregistrement du fichier    */
-   int nbplan;			/* nombre de canaux dans le fichier en-tete */
-   int retour;			/* retour de la fonction comparaison chaines*/ 
-   char *deb,*pch0;	        /* pointeurs sur chaine de caracteres       */
-   int ind,num;			/* indice 				    */
-   int nboct;			/* variables de travail			    */
-   int ind_typ;                 /* Indice du type de codage                 */
-   int is_Cplx;                 /* Indique si type complexe ou pas          */
-   char *type_machine;          /* ordre rangement octets machine de travail*/
-   int cmp;			/* retour de comparaison de chaine          */
-
-   /*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-   *nb_lig=0;
-   *nb_col=0;
-   *nboct_pix = 0;
-   pch0=NULL;
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-   if (image1==NULL)
-   {
-      strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_lecture");
-      goto ERREUR;
-   }
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)== 0)
-	sprintf(repert,"./");
-   sprintf(nom_fic,"%s/%s.rad",repert,nom_image);
-   sprintf(image1->NOM_IMAGE,"%s/%s",repert,nom_image);
-
-  /*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   fic_in=NULL;
-   fic_in=fopen(nom_fic,"r");
-   if (fic_in==NULL)
-   {
-/* verification si extension en majuscule */
-      nom_fic[0]='\0';
-      sprintf(nom_fic,"%s/%s.RAD",repert,nom_image);
-      fic_in=fopen(nom_fic,"r");
-      if (fic_in==NULL)
-      {
-          strcpy(CAI_ERREUR,"Erreur ouverture fichier entete RADAR-CNES");
-          goto ERREUR;
-     }
-   }
- /*....................................
-    Decodage du nombre de colonnes
-  ............................................*/
-   retour=fscanf(fic_in,"%s",label);
-   pch0=strstr(label,"NBCOLONNES");
-   if (pch0==NULL)
-   {
-        sprintf(CAI_ERREUR,"Informations incoherentes NBCOLONNES dans %s",
-		nom_fic);
-	goto ERREUR;
-   }
-   retour=fscanf(fic_in,"%d",nb_col);
-
-
- /*....................................
-    Decodage du nombre de lignes
-  ............................................*/
-   retour=fscanf(fic_in,"%s",label);
-   pch0=strstr(label,"NBLIGNES");
-   if (pch0==NULL)
-   {
-        sprintf(CAI_ERREUR,"Informations incoherentes NBLIGNES dans %s",
-		nom_fic);
-	goto ERREUR;
-   }
-  retour=fscanf(fic_in,"%d",nb_lig);
-
- /*........................................
-    Decodage du nombre de plans
-  .........................................*/
-   retour=fscanf(fic_in,"%s",label);
-   pch0=strstr(label,"NBPLANS");
-   if (pch0==NULL)
-   {
-        sprintf(CAI_ERREUR,"Informations incoherentes NBPLANS dans %s",
-		nom_fic);
-	goto ERREUR;
-   }
-  retour=fscanf(fic_in,"%d",&nbplan);
-  *nb_can=nbplan;
-
- /*........................................
-   Recuperation du type de codage du plan   .........................................*/
-   retour=fscanf(fic_in,"%s",label);
-   pch0=strstr(label,"TYPECODAGE");
-   if (pch0==NULL)
-   {
-        sprintf(CAI_ERREUR,"Informations incoherentes TYPECODAGE dans %s",
-		nom_fic);
-	goto ERREUR;
-   }
-
-   retour=fscanf(fic_in,"%s",label);
-   pch0=cai_En_majuscule( label );
-
-/* Verification si type de codage reconnu et recuperation de la taille pixel*/
-   nboct = cai_istyp_radar(pch0,&ind_typ,&is_Cplx);
-   if (nboct == -1)
-   {
-      sprintf(CAI_ERREUR,"Type de codage du plan %s non reconnu ",
-							nom_fic_canal);
-      goto ERREUR;
-    }
-    *nboct_pix=nboct;
-    sprintf(image1->TYPE_COD,"%s",pch0);
-
-/* ...........................................................
-   Determination du sens de codage de la machine de travail
-  .............................................................*/
-    type_machine = cai_test_pFpf();
-
-/*.....................................................
-   Recuperation du type de codage du plan (INTEL ou IEEE)  .......................................................*/
-   retour=fscanf(fic_in,"%s",label);
-   pch0=strstr(label,"SENSCODAGE");
-   if (pch0==NULL)
-   {
-        sprintf(CAI_ERREUR,"Informations incoherentes SENSCODAGE dans %s",
-		nom_fic);
-	goto ERREUR;
-   }
-
-   retour=fscanf(fic_in,"%s\n",label);
-   retour=strncmp(label,"IEEE",4);
-   if (retour==0)	
-	sprintf(image1->COD_PIX,"BE");
-   else
-	sprintf(image1->COD_PIX,"LE");
-   cmp = strncmp(type_machine,image1->COD_PIX,2);
-   if (cmp!=0)
-   {
-/*****************************************************************************/
-/* MOD : VERSION : 1.2 : FA : IMA-FA-011 pb inversion des octets complexes   */
-/*****************************************************************************/
-	if (is_Cplx==0)
-	  image1->INV_OCTETS =1;
-	else
-	  image1->INV_OCTETS =2;
-   }
-   else
-   {
-	  image1->INV_OCTETS =0;
-   }
-/*****************************************************************************/
-/* MOD : VERSION : 5.1 : DM :  Maj du tag COD_PIX lorsque l'image est codée  */
-/*                                            en reel  a partir du TYPE_CODE */
-/*****************************************************************************/    sprintf(image1->COD_PIX,"%s",image1->TYPE_COD);
-
-/*...............................................
-	Pour chaque plan , decodage des caracteristiques du plans
-..................................................................*/
-   deb=image1->NOM_FIC_CAN;
-   for (ind=0;ind<nbplan;ind++)
-   {
-/* Recuperation nom du plan */
-        retour=fscanf(fic_in,"%s",label);
-	sprintf(deb,"%s",label);
-        sprintf(nom_fic_canal,"%s/%s",repert,label);
-	deb = deb+100;
-  
-/* Verification de l'existence du plan et ouverture */
-        num=open(nom_fic_canal,O_RDONLY|O_BINARY,0);
-        if (num!= -1)
-        {
- 		image1->ACCES_CANAL_INT[ind]=num;
-          	image1->POS_OCTET[ind]=0;   
-        }
-	else
-	{
-           	sprintf(CAI_ERREUR,"Impossible d'ouvrir le plan %s",
-							nom_fic_canal);
-	   	goto ERREUR;
-	}
-   }  
-	
- /*..................................
-   Fermeture du fichier 
-  ......................................*/
-   if (fic_in!=NULL) fclose(fic_in);
-
-
-/* sortie nominale */
-     return(image1);
-
-ERREUR:
-/* sortie en erreur */
-     FREE(image1);
-     return (NULL);
-}
-/* 
-   Fin de l'operation cai_ouvre_lecture_radar
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_radar                                   */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format radar et de tous les fichiers qui la composent        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :    CAI_IMAGE *cai_ouvre_creation_radar (nom_image,     */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            typcode)         */
-/*                                                                           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nb d'octets pixels                      */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     typcode        (E) (char *) : type de codage   de l'image             */
-/*                                                                           */
-/*     cai_ouvre_creation_radar     (S) (CAI_IMAGE *) : =NULL si pb          */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_creation_radar(char *repert,
-				  char *nom_image,
-				  int  *nb_can,
-				  int  *nboct_pix,
-				  int  *nb_col,
-				  int  *nb_lig,
-				  char *typcode)
-
-{
-   FILE *fic;		        /* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   int retour,retour1;		/* retour de fonction 			    */ 
-   int can,num;			/* indice 				    */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   char *type_machine;          /* ordre rangement octets machine de travail*/
-   int ind_typ;			/* Indice du type de codage radar           */
-   int is_Cplx;                 /* Indique si type complexe ou pas          */
-   int nboct;
-   char *pch0;
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-   if (image1==NULL)
-   {
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_creation");
-     goto ERREUR;
-   }
-
-/* Vérification si typecode est un type radar si non par défaut mettre und */
-   pch0=cai_En_majuscule( typcode );
-   nboct = cai_istyp_radar(pch0,&ind_typ,&is_Cplx);
-   if (nboct == -1)
-   {
-	sprintf(typcode,"und");
-   }
-/*.................................................
-   Constitution du nom du fichier entete et verification qu'il
-   n'existe pas deja
-  .................................................*/
-
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert) == 0)
-	sprintf(repert,"./");
-
-/* Recherche avec l'extension en majuscule */
-   sprintf(nom_fic,"%s/%s.RAD",repert,nom_image);
-   retour = stat ( nom_fic , &buf_stat );
-   if ( retour == 0 )
-   { 
-	unlink(nom_fic);
-   }
-
-/* Recherche avec l'extension en minuscule */
-   sprintf(nom_fic,"%s/%s.rad",repert,nom_image);
-   retour = stat ( nom_fic , &buf_stat );
-   if ( retour == 0 )
-   { 
-	unlink(nom_fic);
-   }
-   sprintf(image1->NOM_IMAGE,"%s/%s",repert,nom_image);
-
-
-/*......................................................
-  Ouverture du fichier entete en ecriture 
-  Ecriture du contenu
-  ..........................................................*/
-  fic = fopen(nom_fic,"w");
-  if (fic == NULL)
-  {
-      sprintf(CAI_ERREUR,"Erreur: Creation fichier %s impossible\n",nom_fic);
-      goto ERREUR;
-   }
-
-/* Nombre de colonnes */
-  retour=fprintf ( fic , "NBCOLONNES ");
-  retour1=fprintf ( fic , "%d\n" , *nb_col );
-  if ((retour == 0)||(retour1 == 0))
-  {
-      sprintf(CAI_ERREUR,"Erreur: Ecriture %s impossible\n",nom_fic);
-      goto ERREUR;
-  }
-/* Nombre de lignes */
-  retour=fprintf ( fic , "NBLIGNES ");
-  retour1=fprintf ( fic , "%d\n" , *nb_lig );
-  if ((retour == 0)||(retour1 == 0))
-  {
-      sprintf(CAI_ERREUR,"Erreur: Ecriture %s impossible\n",nom_fic);
-      goto ERREUR;
-  }
-
-/* Nombre de plans */
-  retour=fprintf ( fic , "NBPLANS ");
-  retour1=fprintf ( fic , "%d\n" , *nb_can);
-  if ((retour == 0)||(retour1 == 0))
-  {
-      sprintf(CAI_ERREUR,"Erreur: Ecriture %s impossible\n",nom_fic);
-      goto ERREUR;
-  }
-
-/* TYPE DE CODAGE */
-  retour=fprintf ( fic , "TYPECODAGE ");
-  retour1=fprintf ( fic , "%s\n" , typcode );
-  if ((retour == 0)||(retour1 == 1))
-  {
-      sprintf(CAI_ERREUR,"Erreur: Ecriture %s impossible\n",nom_fic);
-      goto ERREUR;
-  }
- /*..................................
-   determination ordre de rangement 
-   des octets sur machine de travail
-  ......................................*/ 
-   type_machine = cai_test_pFpf();
-
-/* TYPE DE CODAGE */
-  retour=fprintf ( fic , "SENSCODAGE ");
-
-   if (strcmp(type_machine,"BE")==0)
- 	retour=fprintf ( fic , "IEEE\n");
-   else
-	retour=fprintf ( fic , "INTEL\n");
-   if (retour == 0)
-   {
-      	sprintf(CAI_ERREUR,"Erreur: Ecriture %s impossible\n",
-					nom_fic);
-      	goto ERREUR;
-    }
-
-/*...............................................................
-  Pour chaque canal de l'image,constitution du nom de fichier correspondant
-  Verification qu'il n'existe pas deja
-  Ouverture du fichier en ecriture
-  .................................................................*/
-  pch0=cai_En_minuscule( typcode );
-
-  for (can=0;can<*nb_can;can++)
-  {
-       nom_fic[0]='\0';
-       if (*nb_can==1)
-         sprintf(nom_fic,"%s/%s.%s",repert,nom_image,pch0);
-       else
-          sprintf(nom_fic,"%s/%s_%d.%s",repert,nom_image,can+1,pch0);
-
-       retour = stat ( nom_fic , &buf_stat );
-
-       if ( retour == 0 )
-       { 
-		unlink(nom_fic);
-       }
-       num = open(nom_fic,O_RDWR|O_CREAT|O_BINARY,PERMS); 
-       if (num == -1)
-       {
-     		sprintf(CAI_ERREUR,"Erreur: Creation %s impossible\n",
-				nom_fic);
-     		goto ERREUR;
-       } 
-       image1->ACCES_CANAL_INT[can]=num;
-       image1->POS_OCTET[can]=0;
-       if (*nb_can==1)
-       {
-          retour1=fprintf ( fic , "%s.%s\n" , nom_image,pch0);
-	  snprintf(image1->NOM_FIC_CAN,100,"%s.%s",nom_image,pch0);
-	 *(image1->NOM_FIC_CAN+99)='\0';
-       }
-       else
-       {
-          retour1=fprintf ( fic , "%s_%d.%s\n" , nom_image,can+1,pch0);
-	  snprintf(image1->NOM_FIC_CAN+can*100,100,"%s_%d.%s",nom_image,can+1,pch0);
-	 *(image1->NOM_FIC_CAN+can*100+99)='\0';
-       }
-       if (retour1 == 1)
-       {
-      		sprintf(CAI_ERREUR,"Erreur: Ecriture %s impossible\n",
-					nom_fic);
-      		goto ERREUR;
-  	}
-  }
-
-/*************************************************/
-/* Fermeture du fichier                          */
-/*************************************************/
-
-  fclose ( fic );
-  return (image1);
-
-ERREUR :
-  return(NULL);
-}
-  
-/* 
-  Fin de l'operation cai_ouvre_creation_radar
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_radar                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image radar                */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_lecture_canal_radar(image1, canal,      */
-/* ------------------                            premiere_ligne,             */
-/*                                               premiere_colonne,           */
-/*                                               nombre_lignes_lire ,        */
-/*                                               nombre_colonnes_lire,       */
-/*                                               pas_ligne ,pas_colonne,     */
-/*                 		                data_image )                 */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (lint): numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal_radar     (S) (CAI_OK_KO) : = CAI_KO si pb          */
-/*                                                 = CAI_OK si OK            */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO cai_lecture_canal_radar(CAI_IMAGE *image1 ,  
-                                int *canal ,           
-    		          	int *premiere_ligne  ,   
-     		          	int *premiere_colonne,
-                         	int *nombre_lignes_lire ,
-                          	int *nombre_colonnes_lire,
-                          	int *pas_ligne ,          
-                          	int *pas_colonne,
-		          	unsigned char *data_image )        
-
-{
-
- int   num,i,j,k;         /* variables de travail                          */
- long int pt_oct;	  /* position courante dans le fichier image       */
- long int no_oct;         /* numero du premier octet a lire                */
- int iret;                /* indicateur d'erreur                           */
- long int lig;            /* indice de boucle sur les lignes               */
- long int oct_pix,octpix; /* nb octets par pixels                          */
- long int nb_oct;         /* nb oct =1er octet a lire - position courante  */
- long int oct_lig;        /* nb oct. par ligne en considerant taille pixel */
- unsigned char *buf_lec;  /* buffer lecture d'une  ligne                   */
- unsigned char *deb,*pch; /* pointeur chaine pour transfert  buffer sortie */
- long int n;
- int nbpix;
-/*...........................
-  Initialisations diverses
-  ..........................*/
-
-   iret=CAI_OK;
-   num=(int)image1->ACCES_CANAL_INT[(*canal)-1];
-   oct_pix=image1->NBOCT_PIX;;
-   oct_lig=oct_pix*(image1->NB_COL);
-
-/*..............................................
-        allocation de memoire pour lire une ligne image
- ............................................. */
-   buf_lec = (unsigned char *) calloc(oct_lig,sizeof(unsigned char));
-   if (buf_lec == NULL)
-   {
-      iret=CAI_KO;
-      strcpy(CAI_ERREUR,"Probleme allocation memoire");
-   }
-   else
-   {
-/*....................
-        Initialisation
-  ......................*/
-        lig=*premiere_ligne;
-        i=1;
-        pch=data_image;
- /*.....................
-         Pour chaque ligne a lire
-  .......................................*/
-        while ((i <= (*nombre_lignes_lire))&&(iret==CAI_OK))
-        {  
-
-/*............................................
-	    Recherche de la position courante dans le fichier
-  ............................................*/
-            pt_oct=lseek(num,0L,1);
-
-/*................................
-            Calcul du numero du 1er octet a lire
-  ....................................*/
-            no_oct=image1->POS_OCTET[(*canal)-1]+((lig-1)*oct_lig);
-
-/*..................................
-            Saut d'octets pour etre positionne sur la ligne a lire
-  .......................................*/
-            nb_oct=(long)(no_oct-pt_oct);
-            lseek(num,nb_oct,1);
-
-/*...........................................
-            lecture d'une ligne image
-  ................................................*/
-            n=read(num,buf_lec,oct_lig);
-            if (n<=0)
-            {
-             iret=CAI_KO;
-             sprintf(CAI_ERREUR,"Erreur lecture donnee image RADAR  %s",
-		                image1->NOM_IMAGE);
-
-            }
-            else
-            { 
-/*......................................
-             Sauvegarde des donnees lues entenant compte du pas 
-             d'echantillonnage en colonne
-  ........................................*/   
-             deb=buf_lec+((*premiere_colonne)-1)*oct_pix;
-             j=1;
-             while (j <= (*nombre_colonnes_lire))
-	     {  
-                 for (k=0;k<oct_pix;k=k+1)
-                 {
-                    *(pch+k)=*(deb+k);
-                  }
-                  pch=pch+oct_pix;
-                 j=j+1;
-                 deb=deb+((*pas_colonne)*oct_pix);
-              }
-
-           }
-          i=i+1;
-          lig=lig+(*pas_ligne);
-       
-	  if ((image1->INV_OCTETS==1) && (oct_pix!=1))
-          {
-            nbpix = (*nombre_lignes_lire)*(*nombre_colonnes_lire);
-	    cai_inverser_tableau_complet(data_image,(int)nbpix,(int)oct_pix);
-          }
-
-/*****************************************************************************/
-/* MOD : VERSION : 1.2 : FA : IMA-FA-011 pb inversion des octets complexes   */
-/*****************************************************************************/
-	  else if (image1->INV_OCTETS==2)
-	  {
-            nbpix = (*nombre_lignes_lire)*(*nombre_colonnes_lire)*2;
-	    octpix = oct_pix/2;
-	    cai_inverser_tableau_complet(data_image,(int)nbpix,(int)octpix);	 
-          }
-
-        } 
-	free(buf_lec);
-    }
-        return(iret);
- }
-/*
-  Fin de l'operation cai_lecture_canal_radar
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal_radar                                   */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un plan d'une image radar                 */
-/* -----    								     */
-/*                                                                           */
-/* CONTEXTE D'APPEL :     CAI_OK_KO cai_ecriture_canal_radar(image1, canal,  */
-/* ------------------                                 premiere_ligne,        */
-/*                                                    nombre_lignes_ecrire,  */
-/*                                                    nombre_colonnes_ecrire,*/
-/*                 		                      data_image )           */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal            (E) (int)      : numero du canal a ecrire            */
-/*     premiere_ligne   (E)  (int)     : premiere ligne a ecrire ds l'image  */
-/*     nombre_lignes_ecrire  (E) (int) : nombre de lignes a ecrire           */
-/*     nombre_colonnes_ecrire(E) (int) : nombre de lignes a ecrire           */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels ecris alloue et   */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_ecriture_canal_radar        (S) (CAI_OK_KO) : = CAI_KO si pb      */
-/*                                                     = CAI_OK si OK        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ecriture_canal_radar (CAI_IMAGE *image1 ,  
-                            	  int *canal ,           
-    		            	  int *premiere_ligne  ,   
-                            	  int *nombre_lignes_ecrire ,
-                            	  int *nombre_colonnes_ecrire,
-		            	  unsigned char *data_image )        
-
-{
-
- long int position_first_lig;	/* position de la 1ere ligne a ecrire    */
- long int position_courante;	/* position courante dans le fichier     */
- long int deplacement;		/* deplacement a effectuer               */
- int i_ligne;			/* compteur de lignes                    */
- unsigned char *buff_lig;	/* tableau contenant une ligne a ecrire  */
- long  int cr_write;		/* code retour de write                  */
- int num;                       /* descripteur de fichier                */
- int nboct_pix;		        /* nombre d'octets par pixel             */
- int tot_pix;                   /* nb de pixels total a ecrire           */
-
-/* initialisations */
-
-i_ligne = 0;
-num = image1->ACCES_CANAL_INT[*canal-1];
-nboct_pix = image1->NBOCT_PIX;
-
-/*.......................................*/
-/* verification si ecriture image entiere */
-/*.......................................*/
-  if ((*nombre_lignes_ecrire==image1->NB_LIG)&&
-		(*nombre_colonnes_ecrire==image1->NB_COL))
-  {
-       tot_pix=nboct_pix*(image1->NB_COL)*(image1->NB_LIG);
-
-    /* positionnement en debut de fichier */
-       position_first_lig=lseek(num,0L,0);
-
-   /* ecriture du canal complet */
-      cr_write = write ( num , data_image,tot_pix);
-      if (cr_write != tot_pix)
-      {
-              sprintf(CAI_ERREUR,"Erreur ecriture donnee image RADAR  %s",
-		image1->NOM_IMAGE);
-
-             goto ERREUR;
-       }
-   }
-  else
-  {
-
-/********************************************************/
-/* Calcul de la position de la premiere ligne a ecrire 	*/ 
-/********************************************************/
-
-position_first_lig =(long int) ( image1->POS_OCTET[*canal-1]+ 
-			    (( *premiere_ligne - 1) * (*nombre_colonnes_ecrire)
-		              * nboct_pix));
-		
-
-/********************************************************/
-/* Recuperation de la position courante			*/
-/********************************************************/
-
-position_courante = lseek ( num , 0L , 1 );
-
-
-/********************************************************/
-/* Deplacement jusqu'a la premiere ligne a ecrire	*/
-/********************************************************/
-
-deplacement = position_first_lig - position_courante;
-lseek ( num , deplacement , 1 ); 
-
-/********************************************************/
-/* TANT QUE il y a des lignes a ecrire                 	*/
-/********************************************************/
-while (i_ligne < (*nombre_lignes_ecrire))
-{
-
-/********************************************************/
-/*	extraction de la ligne du tableau 		*/
-/********************************************************/
-
-	buff_lig = data_image + (*nombre_colonnes_ecrire) * nboct_pix * i_ligne;
-
-/********************************************************/
-/*	ecriture de la ligne				*/
-/********************************************************/
- 
-	cr_write = write ( num , buff_lig ,
-			 (*nombre_colonnes_ecrire) * nboct_pix );
-	if ( cr_write != (*nombre_colonnes_ecrire)*nboct_pix )
-	{
-	    sprintf( CAI_ERREUR , "Erreur ecriture canal image radar_cnes  %s",
-				   image1->NOM_IMAGE);
-
-		goto ERREUR;
-	}
- 
-/********************************************************/
-/*	incrementation du nombre de lignes		*/
-/********************************************************/
-
-	i_ligne++;
-/********************************************************/
-/* FIN TANT QUE						*/
-/********************************************************/
-  }
-}
-
-
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-
-/* 
-  Fin de l'operation cai_ecriture_canal_radar
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_radar                                            */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format radar et de         */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_radar(image1)                     */
-/* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_radar        (S) (CAI_OK_KO) : = CAI_KO si pb               */
-/*                                              = CAI_OK si OK               */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ferme_radar (CAI_IMAGE *image1)
-
-{
- 	 int iret;    /* code retour de l'operation      */
- 	 int i_can;   /* indice du canal a fermer        */
- 	 int num;     /* descripteur du fichier a fermer */
-
- iret=CAI_OK;
-/*.............................................
-   Fermeture de tous les canaux
-  .............................................*/
- for (i_can=0;i_can<image1->NB_CANAUX;i_can=i_can+1)
- {
-
-   num=image1->ACCES_CANAL_INT[i_can];
-   if (num>0) close(num);
- }
-
-  return (iret);
-}
-
-/*
-  Fin de l'operation cai_ferme_radar
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_radar                                         */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stocke en radar et de       */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_dest_ima_radar(repertoire,nom_ima)      */
-/* ------------------                                                        */
-/*     repertoire   (E) (char *) : repertoire de l'image a detruire          */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_dest_ima_radar     (S) (CAI_OK_KO) : = CAI_KO si pb               */
-/*                                            = CAI_OK si OK                 */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO cai_dest_ima_radar ( char *repertoire , 
-                     	     char *nom_ima )
-
-{
-int	i_can;			/* compteur de canaux */
-long int     iret;              /* code retour fonction fermeture lecture */
-char	nom_fic[1024];		/* nom du fichier entete a detruire */
-long int	cr_stat;	/* code retour de fonction status de fichier */
-struct stat buf_stat;		/* structure decrivant status de fichier */ 
-
-CAI_IMAGE   *image1;            /* structure ouverture image */
-int         nb_can;	/* nombre de canaux de l'image */
-int         nboct_pix;	/* nombre d'octets par pixel image */
-int         nb_col;	/* nombre de colonnes de l'image */
-int         nb_lig;        /* nombre de lignes de l'image */
-char *pch;
-
-  if ((long int)strlen(repertoire)!= 0)
-       sprintf(repertoire,"./");
-
-/************************************************/
-/* Extraction des caracteristiques de l'image 	*/
-/* du fichier entete par l'appel a la fonction	*/
-/* cai_ouvre_lecture_radar			*/
-/************************************************/
-
-  image1 = cai_ouvre_lecture_radar ( repertoire,nom_ima, &nb_can ,&nboct_pix ,
-				   &nb_col , &nb_lig );	
-  if ( image1 == NULL) goto ERREUR;
-
-  image1->NB_CANAUX=nb_can;
-  image1->NB_COL=nb_col;
-  image1->NB_LIG=nb_lig;
-  image1->NBOCT_PIX=nboct_pix;
-
- 
-/************************************************/
-/* Constitution un a un des noms des fichiers	*/
-/* canaux et destruction 			*/
-/************************************************/
-pch = image1->NOM_FIC_CAN;
-for ( i_can = 0 ; i_can < nb_can ; i_can++ )
-{
-	sprintf(nom_fic,"%s/%s",repertoire,pch);
-	cr_stat = stat ( nom_fic , &buf_stat );
-	if ( cr_stat == 0 )
-		unlink ( nom_fic );
-        pch=pch+100;
-}
-
-  iret=cai_ferme_radar(image1);
-
-/************************************************/
-/* Destruction du fichier d'entete		*/
-/************************************************/
-sprintf(nom_fic ,"%s/%s.RAD", repertoire,nom_ima);
-cr_stat = stat ( nom_fic , &buf_stat );
-if ( cr_stat == 0 )
-	unlink ( nom_fic );
-else
-{
-  sprintf(nom_fic ,"%s/%s.rad", repertoire,nom_ima);
-  cr_stat = stat ( nom_fic , &buf_stat );
-  if ( cr_stat == 0 )
-	unlink ( nom_fic );
-}
-
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-/*
- Fin de l'operation cai_dest_ima_radar
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_modifie_radar                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture-ecriture d'une image au format  */
-/* -----     radar et de tous les fichiers qui la composent                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :     CAI_IMAGE *cai_ouvre_modifie_radar (nom_image,     */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels              */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_modifie_radar     (S) (CAI_IMAGE *)  : = NULL si pb         */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_modifie_radar(char *repert,
-				     char *nom_image,
-				     int  *nb_can,
-				     int  *nboct_pix,
-				     int  *nb_col,
-				     int  *nb_lig)
-
-
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char nom_fic_canal[1024];    /* nom fichier canal dont on teste existence*/
-   char label[80];		/* contient un enregistrement du fichier    */
-   int nbplan;			/* nombre de canaux dans le fichier en-tete */
-   int retour;			/* retour de la fonction comparaison chaines*/ 
-   char *deb,*pch0;	        /* pointeurs sur chaine de caracteres       */
-   int ind,num;			/* indice 				    */
-   int nboct;			/* variables de travail			    */
-   int ind_typ;			/* Indice du type de codage radar           */
-   int is_Cplx;                 /* Indique si type complexe ou pas          */
-   char *type_machine;		/* Type de codage de la machine             */
-   int cmp;			/* variable de travail                      */
-
-   /*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-   *nb_lig=0;
-   *nb_col=0;
-   *nboct_pix = 0;
-   pch0=NULL;
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-   if (image1==NULL)
-   {
-      strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_modifie");
-      goto ERREUR;
-   }
-/*.................................................
-   Constitution du nom du fichier entete
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)== 0)
-	sprintf(repert,"./");
-   sprintf(nom_fic,"%s/%s.rad",repert,nom_image);
-   sprintf(image1->NOM_IMAGE,"%s/%s",repert,nom_image);
-
-  /*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   fic_in=NULL;
-   fic_in=fopen(nom_fic,"rw");
-   if (fic_in==NULL)
-   {
-/* verification si extension en majuscule */
-      nom_fic[0]='\0';
-      sprintf(nom_fic,"%s/%s.RAD",repert,nom_image);
-      fic_in=fopen(nom_fic,"r");
-      if (fic_in==NULL)
-      {
-          strcpy(CAI_ERREUR,"Erreur ouverture fichier entete RADAR-CNES");
-          goto ERREUR;
-     }
-   }
- /*....................................
-    Decodage du nombre de colonnes
-  ............................................*/
-   retour=fscanf(fic_in,"%s",label);
-   pch0=strstr(label,"NBCOLONNES");
-   if (pch0==NULL)
-   {
-        sprintf(CAI_ERREUR,"Informations incoherentes NBCOLONNES dans %s",
-		nom_fic);
-	goto ERREUR;
-   }
-   retour=fscanf(fic_in,"%d",nb_col);
-
-
- /*....................................
-    Decodage du nombre de lignes
-  ............................................*/
-   retour=fscanf(fic_in,"%s",label);
-   pch0=strstr(label,"NBLIGNES");
-   if (pch0==NULL)
-   {
-        sprintf(CAI_ERREUR,"Informations incoherentes NBLIGNES dans %s",
-		nom_fic);
-	goto ERREUR;
-   }
-  retour=fscanf(fic_in,"%d",nb_lig);
-
- /*........................................
-    Decodage du nombre de plans
-  .........................................*/
-   retour=fscanf(fic_in,"%s",label);
-   pch0=strstr(label,"NBPLANS");
-   if (pch0==NULL)
-   {
-        sprintf(CAI_ERREUR,"Informations incoherentes NBPLANS dans %s",
-		nom_fic);
-	goto ERREUR;
-   }
-  retour=fscanf(fic_in,"%d",&nbplan);
-  *nb_can=nbplan;
-
- /*........................................
-   Recuperation du type de codage du plan   .........................................*/
-   retour=fscanf(fic_in,"%s",label);
-   pch0=strstr(label,"TYPECODAGE");
-   if (pch0==NULL)
-   {
-        sprintf(CAI_ERREUR,"Informations incoherentes TYPECODAGE dans %s",
-		nom_fic);
-	goto ERREUR;
-   }
-
-   retour=fscanf(fic_in,"%s",label);
-   pch0=cai_En_majuscule( label );
-
-/* Verification si type de codage reconnu et recuperation de la taille pixel*/
-   nboct = cai_istyp_radar(pch0,&ind_typ,&is_Cplx);
-   if (nboct == -1)
-   {
-      sprintf(CAI_ERREUR,"Type de codage du plan %s non reconnu ",
-							nom_fic_canal);
-      goto ERREUR;
-    }
-    *nboct_pix=nboct;
-    sprintf(image1->TYPE_COD,"%s",pch0);
-/* ...........................................................
-   Determination du sens de codage de la machine de travail
-  .............................................................*/
-    type_machine = cai_test_pFpf();
-
-/*.....................................................
-   Recuperation du type de codage du plan (INTEL ou IEEE)  .......................................................*/
-   retour=fscanf(fic_in,"%s",label);
-   pch0=strstr(label,"SENSCODAGE");
-   if (pch0==NULL)
-   {
-        sprintf(CAI_ERREUR,"Informations incoherentes SENSCODAGE dans %s",
-		nom_fic);
-	goto ERREUR;
-   }
-
-   retour=fscanf(fic_in,"%s\n",label);
-   retour=strncmp(label,"IEEE",4);
-   if (retour==0)	
-	sprintf(image1->COD_PIX,"BE");
-   else
-	sprintf(image1->COD_PIX,"LE");
-   cmp = strncmp(type_machine,image1->COD_PIX,2);
-   if (cmp!=0)
-   {
-/*****************************************************************************/
-/* MOD : VERSION : 1.2 : FA : IMA-FA-011 pb inversion des octets complexes   */
-/*****************************************************************************/
-	if (is_Cplx==0)
-	  image1->INV_OCTETS =1;
-	else
-	  image1->INV_OCTETS =2;
-   }
-   else
-   {
-	  image1->INV_OCTETS =0;
-   }
-/*****************************************************************************/
-/* MOD : VERSION : 5.1 : DM :  Maj du tag COD_PIX lorsque l'image est codée  */
-/*                                            en reel  a partir du TYPE_CODE */
-/*****************************************************************************/    sprintf(image1->COD_PIX,"%s",image1->TYPE_COD);
-
-/*...............................................
-	Pour chaque plan , decodage des caracteristiques du plans
-..................................................................*/
-   deb=image1->NOM_FIC_CAN;
-   for (ind=0;ind<nbplan;ind++)
-   {
-/* Recuperation nom du plan */
-        retour=fscanf(fic_in,"%s",label);
-	sprintf(deb,"%s",label);
-        sprintf(nom_fic_canal,"%s/%s",repert,label);
-	deb = deb+100;
-  
-/* Verification de l'existence du plan et ouverture */
-        num=open(nom_fic_canal,O_RDWR|O_BINARY,0);
-        if (num!= -1)
-        {
- 		image1->ACCES_CANAL_INT[ind]=num;
-          	image1->POS_OCTET[ind]=0;   
-        }
-	else
-	{
-           	sprintf(CAI_ERREUR,"Impossible d'ouvrir le plan %s",
-							nom_fic_canal);
-	   	goto ERREUR;
-	}
-   }  
-	
- /*..................................
-   Fermeture du fichier 
-  ......................................*/
-   if (fic_in!=NULL) fclose(fic_in);
-
-
-/* sortie nominale */
-     return(image1);
-
-ERREUR:
-/* sortie en erreur */
-     FREE(image1);
-     return (NULL);
-}
-
-/* 
-   Fin de l'operation cai_ouvre_modifie_radar
-*/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_istyp_radar                                            */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de verification si pixels de type radar ou non         */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :    retour = cai_istyp_radar(type_code)                 */
-/*  ---------------- 		                                             */
-/*                                                                           */
-/*     type_code    (E) (char *) : type de codage a verifier                 */
-/*     ind_typ      (S) (int *)  : indice du type des pixels                 */
-/*     is_Cplx      (S) (int *)  : 1 si type complexe, 0 si non              */
-/*     retour       (S) (int)    : nb d'octets par pixel si type reconnu     */ 
-/*				   -1 si non reconnu			     */
-/*                                                                           */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-int cai_istyp_radar(char *type_code,int *ind_typ,int *is_Cplx )
-{
-	int ind;	 /* indice de boucle sur les types reconnus */
-	int trouve,icr;  /* indice pour la recherche                */
-
-/* Initialisations diverses */
-	trouve = 0;
-	ind = 0;
-	while ((trouve==0)&&(ind< CAI_NB_RADAR))
-	{
-	  icr=strncmp(type_code,CAI_RADAR_TYP[ind],strlen(type_code));
-	  if (icr==0) 
-		trouve=1;
-	  else
-	       ind=ind+1;
-	}
-	
-	if (trouve ==1)
-	{
-	      *ind_typ=ind; 
-	      ind=CAI_RADAR_LONG[ind];
-	}
-	else
-	{
-		*ind_typ=-1; 
-	        ind=-1;
-	}
-
-	if (type_code[0]=='C')
-	    *is_Cplx=1;
-	else
-	    *is_Cplx=0;
-
-/* sortie normale */
-	return(ind);
-}
-/* 
-   Fin de l'operation cai_istyp_radar
-*/
diff --git a/Utilities/CAI/cai_dll/src/cai_rasterfile.c b/Utilities/CAI/cai_dll/src/cai_rasterfile.c
deleted file mode 100755
index 15ebf31274..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_rasterfile.c
+++ /dev/null
@@ -1,1440 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_rasterfile.c                                              */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format rasterfile                                 */ 
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CISI)                                   */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    fevrier 1995                                        */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V2                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 3.3 : DM :optimisation des acces                          */
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 :FA:Verification que le nombre de canaux est 1 ou 3.  */
-/* sunrasterfile est un format de  restitution	                             */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications pour compatibilite HP64bits      */
-/*****************************************************************************/
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : modifications fopen binaire pour PC/NT         */
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : modifications  open binaire pour PC/NT         */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : test sur  fclose  pour PC/LINUX                */
-/*****************************************************************************/
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : FA :  == au lieu de = simple                        */
-/*                                         image1->MODE == CAI_ECRITURE      */
-/*****************************************************************************/
-
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-
-
-# include <stdio.h>
-# include <string.h>
-# include <stdlib.h>
-# include <unistd.h>
-# include <sys/types.h>
-#include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-
-#define _CAI_IMAGE
-#define IN_CAI_RASTER
-
-# include "cai_image.h"
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header: cai_rasterfile.c,v 1.11 01/05/31 10:47:16 cmf Exp $";
-
-extern char *getenv();
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_sun_raster                                   */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images au format rasterfile             */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_ima_sun_raster(repert,tab_ima)     */
-/* -----------------                                                         */
-/*                                                                           */
-/*     repert        (E) (char *)   : repertoire a explorer		     */
-/*     tab_ima       (S) (char ***) : pointeur sur tableau des images listees*/
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*    cai_liste_ima_sun_raster (S) (int)     : = -1 repertoire inexistant    */                                    /*					       = > 0 nombre d'images listees */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-long int cai_liste_ima_sun_raster (char *repert,
-		              	char ***tab_ima)
-
-
-{
-   DIR *dirp;		/* pointeur sur structure ouverture repertoire */
-   struct dirent *dp;   /* structure resultat de la fonction readdir   */
-   char *pch0,*pch1;    /* pointeurs sur chaine de caracteres          */
-   char *pch2,*pch3;    /* pointeurs sur chaine de caracteres          */
-   char car;            /* variable de travail                         */  
-   int nb_ima;          /* nombre d'images rasterfile identifiees      */
-   int i;               /* indice de boucle                            */
-
-
-/*........................................
-   INITIALISATION et ouverture du repertoire choisi
-  .........................................*/
-   nb_ima=0;
-
-   dirp=opendir(repert);
-
-   if(dirp!=NULL)
-   {
-
-/*......................................
-  premiere passe pour comptabiliser les images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE sun_raster_file
-      (EXTENSION =.srf)
- ..........................................*/
-
-
-   while((dp=readdir(dirp))!=NULL)
-   {
-
-     car='.';
-     pch0=strrchr(dp->d_name,car);
-     if (pch0 != NULL)
-     {
-       car='s';
-       pch1=strrchr(dp->d_name,car);
-       if ((pch1 != NULL)&&(pch1==pch0+1))
-       {
-         car='r';
-         pch2=strrchr(dp->d_name,car);
-         if ((pch2 != NULL)&&(pch2==pch1+1))
-         {
-	      car='f';
-              pch3=strrchr(dp->d_name,car);
-              if ((pch3 != NULL)&&(pch3==pch2+1))
-	      {
-
-                  *pch0=' ';
-              	  *pch1=' ';
-	      	  *pch2=' ';
-		  *pch3=' ';
-	          nb_ima=nb_ima+1;
-              }
-           }
-       }
-     }
-   }
-
-    (void)closedir(dirp);
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES 
-     ......................................*/
-    *tab_ima = (char **) calloc(nb_ima,sizeof(char *));
-    for (i=0;i<nb_ima;i=i+1)
-      (*tab_ima)[i]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE RASTERFILE
-      (EXTENSION =.srf)
-   SI C`EST LE CAS,STOCKAGE DANS LA LISTE
-   ..........................................*/
-   dirp=opendir(repert);
-
-   nb_ima=0;
-   while((dp=readdir(dirp))!=NULL)
-   {
-
-     car='.';
-     pch0=strrchr(dp->d_name,car);
-     if (pch0 != NULL)
-     {
-       car='s';
-       pch1=strrchr(dp->d_name,car);
-       if ((pch1 != NULL)&&(pch1==pch0+1))
-       {
-         car='r';
-         pch2=strrchr(dp->d_name,car);
-         if ((pch2 != NULL)&&(pch2==pch1+1))
-         {
-	      car='f';
-              pch3=strrchr(dp->d_name,car);
-              if ((pch3 != NULL)&&(pch3==pch2+1))
-	      {
-
-                  *pch0=' ';
-              	  *pch1=' ';
-	      	  *pch2=' ';
-		  *pch3=' ';
-                  strcpy((*tab_ima)[nb_ima],dp->d_name);
-	          nb_ima=nb_ima+1;
-              }
-           }
-       }
-     }
-   }
-
-    (void)closedir(dirp);
-
-   }
-   else
-   {
-     /* Erreur:Repertoire inexistant */
-      nb_ima=-1;
-   }
-
-    return(nb_ima);
-
-}
-/* Fin de l'operation cai_liste_ima_sun_raster
-*/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_sun_raster                               */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image au format rasterfile*/
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_IMAGE *cai_ouvre_lecture_sun_raster(nom_image,     */
-/*  ---------------- 		                              nb_can,        */
-/*				                              nboct_pix      */	
-/*				                              nb_col,        */
-/*				                              nb_lig)        */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*  cai_ouvre_lecture_sun_raster (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */  
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_lecture_sun_raster(char *repert,
-				        char *nom_image,
-				        int *nb_can,
-				        int *nboct_pix,
-				        int *nb_col,
-				        int *nb_lig)
-
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char *deb,*deb1;		/* pointeurs sur chaine de caracteres       */
-   int i,j,ind;			/* indice 				    */
-   int ras_type;                /* type de fichier raster                   */
-   int fic;			/* code retour fonction open		    */
-   unsigned char *colormap;     /* tableau de colormap                      */
-   unsigned char *pch;
-   int taille;
-   long li;
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-   *nb_lig=0;
-   *nb_col=0;
-   *nboct_pix=0;
-   iret=1;
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoire dans cai_ouvre_lecture");
-    }
-   else
-   {
-/*.................................................
-   Constitution du nom du fichier SUN_RASTER srf
-   .................................................*/
-   nom_fic[0]='\0';
-   if((long int)strlen(repert)!=0)
-   {
-      sprintf(nom_fic,"%s/%s.srf",repert,nom_image);
-
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.srf",nom_image);
-   }
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   fic_in=fopen(nom_fic,"rb");
-   if (fic_in==NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur ouverture fichier sun_raster");
-   }
-   else
-   {
-/*....................................
-    positionnement sur le nombre de colonnes */
-    fseek(fic_in,4,0);
-
-/*  recuperation du nombre de colonnes 
-............................................*/
-
-    li=fread(nb_col,4,1,fic_in);
-
- /*....................................
-     recuperation du nombre de lignes
-............................................*/
-
-     fread(nb_lig,4,1,fic_in);
-
-/*......................................
-     recuperation du nombre de canaux
-............................................*/
-     fread(nb_can,4,1,fic_in);
-     if ((*nb_can!=8)&&(*nb_can!=24))
-     {
-       iret=0;
-       strcpy(CAI_ERREUR,"Profondeur encodage ni 8 ni 24. Format non traite");
-      }
-      else
-      {
-
-       *nb_can=(*nb_can)/8;
-/*.........................................
-       recuperation du type de fichier
-  ............................................*/
-
-        fseek(fic_in,4,1);
-        fread(&ras_type,4,1,fic_in);
-	if (ras_type!=1)
-        {
-          iret=0;
-          strcpy(CAI_ERREUR,"Type de fichier non standard.Non traite");
-         }
-         else
-         {
-/*.........................................
-	    recuperation du nombre d'octets de colormap
-  ............................................*/
-            fseek(fic_in,4,1);
-            fread(nboct_pix,4,1,fic_in);
-            image1->COLORMAP=*nboct_pix;
-	    if (image1->COLORMAP != 0)
-            {
-/*.....................................................
-              lecture de la colormap si elle existe
-  ......................................................*/
-	      colormap = (unsigned char *) malloc(image1->COLORMAP);
-              image1->TABCOLOR = (int *)malloc(sizeof(int)*768);
-              if (image1->TABCOLOR == NULL)
-              {
-                iret=CAI_KO;
-                strcpy(CAI_ERREUR,"Probleme d'allocation memoire");
-               }
-
-              if (colormap == NULL)
-              {
-                iret=CAI_KO;
-                strcpy(CAI_ERREUR,"Probleme d'allocation memoire");
-               }
-               else
-               {
-	         li=fread(colormap,image1->COLORMAP,1,fic_in);
-                 pch=colormap;
-	         taille=(image1->COLORMAP/3);
-/*
--------------    recuperation pour chaque couleur R V B ----*/
-                 for(j=0;j<3;j++)
-                 {
-                   for (i=0;i<taille;i++)
-                   {
-		     ind=i+(j*256);
-                     image1->TABCOLOR[ind]=(int)(*pch);
-                     pch=pch+1;
-                   }
-                   for (i=taille;i<256;i++)
-                   {
-		     ind=i+(j*256);
-                     image1->TABCOLOR[ind]=0;
-
-                   }
-	          }
-                  free(colormap);
-                 }
-             }
-/*.........................................
-	    recuperation du nombre d'octets par pixel
-  .................................................*/
-	    *nboct_pix=1;
-            image1->NB_BITS_PIX=1;
-	    sprintf(image1->COD_PIX,"OCT");
-
-            }
-           }
-        }
-
-	if (fic_in!=NULL) fclose(fic_in);
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-     fic=NULL;
-     fic=open(nom_fic,O_RDONLY|O_BINARY,0);
-     if (fic == -1)
-      {
-	 iret=0;
-         strcpy(CAI_ERREUR,"Erreur ouverture fichier sun_raster");
-      }
-     else
-     {
-
-       deb = image1->NOM_FIC_CAN;
-       deb1= image1->NOM_UTIL_CAN;
-
-       for (i=0;i<*nb_can;i=i+1)
-       {
-	   sprintf(deb,"%s.srf",nom_image);
-  	   deb=deb+100;
-	   sprintf(deb1,"%s.srf",nom_image);
-           deb1=deb1+100;
-           image1->POS_OCTET[i]=32+image1->COLORMAP;
-           image1->ACCES_CANAL_INT[i]=fic;
-        }
-
-      }
-    }
-    if (iret == 0)
-	return (NULL);
-    else     
-    return(image1);
-  
-}
-/* 
-   Fin de l'operation cai_ouvre_lecture_sun_raster
-*/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_sun_raster                              */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format rasterfile et de tous les fichiers qui la composent   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_IMAGE *cai_ouvre_creation_sun_raster(nom_image,    */
-/*  ---------------- 		                               nb_can,       */
-/*				                               nboct_pix,    */
-/*				                               nb_col,       */
-/*				                               nb_lig,       */
-/*				                               label)        */
-/*                                                                           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*  cai_ouvre_creation_sun_raster (S) (CAI_IMAGE *) : =NULL si pb            */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-#define RAS_MAGIC 0x59a66a95
-
-
-CAI_IMAGE *cai_ouvre_creation_sun_raster(char *repert,
-				  	 char *nom_image,
-				  	 int *nb_can,
-				  	 int *nboct_pix,
-				  	 int *nb_col,
-				  	 int *nb_lig,
-				  	 char *label)
-
-{
-   FILE *fic;		        /* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   long retour;			/* retour de fonction 			    */ 
-   int i,num;			/* indice 				    */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   unsigned char *buff;         /* pointeur sur buffer fichier              */
-   int	taille;		        /* taille du fichier en octets		    */
-   int     ras_depth;           /* profondeur d'encodage du pixel 8 ou 24   */
-   int     ras_magic;           /* nombre magique raster file               */
-   int     ras_length;          /* nb octets total de l'image               */
-   int     ras_type;		/* type de fichier 1=sun raster standard    */
-
-  
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_creation");
-     goto ERREUR;
-   }
-
-
-/*************************************************/
-/* Les donnees doivent etre codees sur 8 bits	 */
-/*************************************************/
-
-   if ( *nboct_pix != 1 )
-   {
-	strcpy ( CAI_ERREUR ,
-	   "Erreur : les donnees doivent etre codees sur 8 bits\n");
-	goto ERREUR;
-    }
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 :FA:Verification que le nombre de canaux est 1 ou 3.  */
-/* sunrasterfile est un format de  restitution	                             */
-/*****************************************************************************/
-/* Verification sur le nombre de canaux 1(noir&blanc) ou 3 (RVB) */
-   if ((*nb_can !=1)&&(*nb_can !=3))
-   {
-     strcpy(CAI_ERREUR,"Erreur une image RASTERFILE a 1 ou 3 canaux exclusivement");
-     goto ERREUR;
-   }
-
-/*.................................................
-   Constitution du nom du fichier entete et verification qu'il
-   n'existe pas deja .
-  .................................................*/
-
-   nom_fic[0]='\0';
-   if((long int)strlen(repert)!=0)
-   {
-      sprintf(nom_fic,"%s/%s.srf",repert,nom_image);
-    }
-   else
-   {
-      sprintf(nom_fic,"%s.srf",nom_image);
-   }
-
-    retour = stat ( nom_fic , &buf_stat );
-   if ( retour == 0 )
-   { 
-	sprintf ( CAI_ERREUR , "L'image %s SUN_RASTER existe \n" , nom_image );
-	goto ERREUR;
-   }
-
-/*************************************************/
-/* creation du fichier et reservation de la      */
-/* place necessaire a l'ecriture de l'entete	 */
-/*************************************************/
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : modifications fopen binaire pour PC/NT         */
-/*****************************************************************************/
-
-    fic = fopen ( nom_fic, "wb" );
-    if ( nom_fic == NULL )
-    {
-   	sprintf ( CAI_ERREUR , "Erreur : creation fichier %s impossible\n" ,
-	nom_fic );
-	goto ERREUR;
-     }
-
-     taille=32 ;
-
-     buff = (unsigned char *) malloc (taille);
-     if ( buff== NULL )
-     {
-	strcpy ( CAI_ERREUR , "Erreur : probleme d'allocation \n" );
-	unlink(nom_fic);
-	goto ERREUR;
-      }
-
-       ras_length=(*nb_lig)*(*nb_col)*(*nb_can);
-       if ((*nb_col)%2!=0)
-         ras_length=ras_length+(*nb_lig);
-       ras_magic=RAS_MAGIC;
-       ras_depth=(*nb_can)*8;
-       ras_type=1;
-       memcpy ( &buff[0] , &ras_magic , 4);
-       memcpy ( &buff[4] , nb_col , 4 );
-       memcpy ( &buff[8] , nb_lig , 4 );
-       memcpy ( &buff[12] , &ras_depth , 4 );
-       memcpy ( &buff[16] , &ras_length, 4 );
-       memcpy ( &buff[20] , &ras_type, 4 );
-
-
-       for ( i = 24 ; i < taille ; i++ )
-       {
-	buff[i] = 0;
-        }
-
-        retour= fwrite ( buff , taille , 1 , fic );
-        if ( retour == 0 )
-        {
-	sprintf (CAI_ERREUR , "Erreur : ecriture impossible dans fichier %s\n",
-	nom_fic );
-	goto ERREUR;
-        }
-
-
-
-       free ( buff );
-       if (fic!=NULL) fclose(fic);
-
-/*.................................................
-   Ouverture du fichier pour ecriture radiometrie
-  ...................................................*/
-   num = open(nom_fic,O_RDWR|O_BINARY,0);
-   if (num == -1)
-   {
-     sprintf(CAI_ERREUR,"Erreur: Creation %s impossible\n",nom_fic);
-     goto ERREUR;
-   }
-   for (i=0;i<*nb_can;i=i+1)
-   {
-     image1->ACCES_CANAL_INT[i]=num;
-     image1->POS_OCTET[i]=32;
-   }
-
-  return (image1);
-
-ERREUR :
-  return(NULL);
-}
-  
-/* 
-  Fin de l'operation cai_ouvre_creation_sun_raster
-*/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_sun_raster                               */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image rasterfile           */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_OK_KO cai_lecture_canal_sun_raster(image1, canal,  */       		      /* ------------------                                  premiere_ligne,       */
-/*                                          	       premiere_colonne,     */
-/*                                          	       nombre_lignes_lire ,  */
-/*                                          	       nombre_colonnes_lire, */
-/*                                           	       pas_ligne ,           */
-/*						       pas_colonne,          */
-/*                 		             	       data_image )          */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (int) : numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*  cai_lecture_canal_sun_raster (S) (CAI_OK_KO) : = CAI_KO si pb            */
-/*                                                 = CAI_OK si OK            */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO cai_lecture_canal_sun_raster( CAI_IMAGE *image1 ,  
-                         	        int *canal ,           
-    		         	        int *premiere_ligne  ,   
-     		        	 	int *premiere_colonne,
-                       	   	 	int *nombre_lignes_lire ,
-                         	 	int *nombre_colonnes_lire,
-                          		int *pas_ligne ,          
-                          		int *pas_colonne,
-		          		unsigned char *data_image )        
-{
- int   num,i,j,k;           /* variables de travail                          */
- long pt_oct,n;		    /* position courante dans le fichier image       */
- int no_oct;                /* numero du premier octet a lire                */
- int iret;                  /* indicateur d'erreur                           */
- int lig;                   /* indice de boucle sur les lignes               */
- int   oct_pix;             /* nb octets par pixels                          */
- long  nb_oct;              /* nb oct =1er octet a lire - position courante  */
- unsigned char *buf_lec;    /* buffer lecture d'une  ligne                   */
- unsigned char *deb,*pch;   /* pointeur chaine pour transfert  buffer sortie */
- int Arrond;                /* pixels rajoutes pour arrondi 2 octets         */
-
-
-/*...........................
-  Initialisations diverses
-  ..........................*/
-   iret=CAI_OK;
-   strcpy(CAI_ERREUR,"        ");
-   lig=*premiere_ligne;
-   i=1;
-   pch=data_image;
-   num = image1->ACCES_CANAL_INT[*canal-1];
-   oct_pix = image1->NBOCT_PIX;
-
-/*..............................................
-        allocation de memoire pour lire une ligne image
- ............................................. */
-
-   buf_lec = (unsigned char *) malloc(image1->NB_COL*oct_pix*image1->NB_CANAUX);
-   if (buf_lec == NULL)
-   {
-      iret=CAI_KO;
-      strcpy(CAI_ERREUR,"Probleme d'allocation memoire");
-   }
-   else
-   {
-/*.....................
-         Pour chaque ligne a lire
-  .......................................*/
-        while ((i <= *nombre_lignes_lire)&&(iret==CAI_OK))
-        {  
-/*............................................
-	    Recherche de la position courante dans le fichier
-  ............................................*/
-            pt_oct=lseek(num,0L,1);
-
-/*................................
-            Calcul du numero du 1er octet a lire
-  ....................................*/
-            if ( image1->NB_COL%2 == 0 )
-               Arrond=0;
-            else
-	       Arrond=(lig-1);
-            no_oct= image1->POS_OCTET[*canal-1] + Arrond +
-		   (lig-1)*(image1->NB_COL)*(oct_pix)*(image1->NB_CANAUX);
-
-
-/*..................................
-            Saut d'octets pour etre positionne sur la ligne a lire
-  .......................................*/
-            nb_oct=(long)(no_oct-pt_oct);
-            lseek(num,nb_oct,1);
-
-/*...........................................
-            lecture d'une ligne image
-  ................................................*/
-            n=read(num,buf_lec,(image1->NB_COL)*(oct_pix)*(image1->NB_CANAUX));
-
-            if (n<=0)
-            {
-             iret=CAI_KO;
-             strcpy(CAI_ERREUR,"Erreur lecture donnee image sun_raster");
-            }
-            else
-            { 
-/*......................................
-             Sauvegarde des donnees lues en tenant compte du pas 
-             d'echantillonnage en colonne
-  ........................................*/           
-             
-            deb=buf_lec+(((*premiere_colonne)-1)*(oct_pix)*(image1->NB_CANAUX))+
-		(image1->NB_CANAUX-(*canal));
-             j=1;
-             while (j <= *nombre_colonnes_lire)
-	     {                         
-		for(k=0;k<oct_pix;k++)
-		{
-              	     *(pch+k)=*(deb+k);
-		}
-              j=j+1;
-              pch=pch+oct_pix;
-              deb=deb+((*pas_colonne)*(oct_pix)*(image1->NB_CANAUX));
-             }   
-             
-            }
-          i=i+1;
-          lig=lig+(*pas_ligne);
-
-        }        
-
-	free(buf_lec);
-   }
-
-   return(iret);
-}
-/*
-  Fin de l'operation cai_lecture_canal_sun_raster
-*/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal_sun_raster                              */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un canal d'une image rasterfile           */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_OK_KO cai_ecriture_canal_sun_raster(image1, canal, */       		      /* ------------------                                 premiere_ligne,        */
-/*                                                    nombre_lignes_ecrire,  */
-/*                                                    nombre_colonnes_ecrire,*/
-/*                 		                      data_image )           */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal                 (E) (int) : numero du canal a ecrire            */
-/*     premiere_ligne        (E) (int) : premiere ligne a ecrire ds l'image  */
-/*     nombre_lignes_ecrire  (E) (int) : nombre de lignes a ecrire           */
-/*     nombre_colonnes_ecrire(E) (int) : nombre de lignes a ecrire           */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels ecris alloue et   */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_ecriture_canal_sun_raster (S) (CAI_OK_KO) : = CAI_KO si pb        */
-/*                                                     = CAI_OK si OK        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO cai_ecriture_canal_sun_raster (CAI_IMAGE *image1 ,  
-                                      int *canal ,           
-    		                      int *premiere_ligne  ,   
-                                      int *nombre_lignes_ecrire ,
-                                      int *nombre_colonnes_ecrire,
-		                      unsigned char *data_image ) 
-{
-long	position_first_lig;	/* position de la 1ere ligne a ecrire   */
-long	position_courante;	/* position courante dans le fichie	*/
-long	deplacement;		/* deplacement a effectuer		*/
-int	i_ligne;		/* compteur de lignes 			*/
-unsigned char *buff_lig;	/* tableau contenant une ligne a ecrire */
-long	cr_write;		/* code retour de write 		*/
-int num;                        /* descripteur de fichier 		*/
-int nboct_pix;			/* nombre d'octets par pixel            */
-int i,j;			/* indice de boucle sur les colonnes    */
-long  cr_read;			/* code retour de la fonction read      */
-int nb;				/* nombre d'octets lus par le read      */
-unsigned char *deb,*pch;	/* pointeur sur chaine pour transfert   */
-int nb_canaux;			/* nombre de canaux de l'image          */
-int Arrond;                     /* arrondi pour les lignes non paires   */
-
-/* ................
-   Initialisations 
-  .................*/
-i_ligne = 0;
-num = image1->ACCES_CANAL_INT[(*canal)-1];
-nboct_pix = image1->NBOCT_PIX;
-nb_canaux = image1->NB_CANAUX;
-
-/*************************************************/
-/* Les donnees doivent etre codees sur 8 bits	 */
-/*************************************************/
-
-if ( nboct_pix != 1 )
-{
-	strcpy ( CAI_ERREUR ,
-	    "Erreur : les donnees doivent etre codees sur 8 bits\n");
-	goto ERREUR;
-}
-
-
-/********************************************************/
-/* Calcul de la position de la premiere ligne a ecrire 	*/ 
-/********************************************************/
-Arrond=0;
-if (*nombre_colonnes_ecrire%2 !=0)
-    Arrond=((*premiere_ligne) - 1);
-position_first_lig = (long) ( image1->POS_OCTET[*canal-1] + Arrond +
-       ((*premiere_ligne) - 1) *(*nombre_colonnes_ecrire)*nb_canaux );
-/********************************************************/
-/* Recuperation de la position courante			*/
-/********************************************************/
-
-position_courante = lseek ( num , 0L , 1 );
-
-
-/************************************************************************/
-/* Deplacement jusqu'au premier pixel de la premiere ligne a ecrire 	*/
-/************************************************************************/
-
-deplacement = position_first_lig - position_courante;
-lseek ( num , deplacement , 1 ); 
-nb=(*nombre_colonnes_ecrire)*nb_canaux;
-if (*nombre_colonnes_ecrire%2 !=0)
-	nb=nb+1;
-buff_lig=(unsigned char *)(calloc(nb,sizeof(unsigned char)));
-if (buff_lig == NULL)
-{
-      strcpy(CAI_ERREUR,"Probleme d'allocation memoire ecriture");
-      goto ERREUR;
- }
-
-pch=data_image;
-
-/********************************************************/
-/* TANT QUE il y a des lignes a ecrire                 	*/
-/********************************************************/
-while (i_ligne < (*nombre_lignes_ecrire))
-{
-
-cr_read=read(num,buff_lig,nb);
-if (cr_read <0)
-	   {  
-	    strcpy ( CAI_ERREUR , "Erreur ecriture canal image sun_raster\n" );
-	    goto ERREUR;
-	    }
-else
-	   {
-             if (cr_read==0)
-  	     {
-  		 for (i=0;i<nb;i++)
-     		   *(buff_lig+i)=0;
-                 deplacement=0;
-  	     }
-             else
-		deplacement= - nb;
-           }
-/************************************************************************/
-/* Redeplacement jusqu'au premier pixel de la premiere ligne a ecrire 	*/
-/************************************************************************/
-lseek ( num , deplacement , 1 ); 
-
-/*************************************************************************/
-/*chargement de la ligne en entrelacant les pixels par rapport aux canaux*/
-/*************************************************************************/
-
-deb=buff_lig+(nb_canaux-(*canal));
-for (j=0;j<(*nombre_colonnes_ecrire);j=j+1)
-{
-	*deb=*pch;
-	pch=pch+1;
-	deb=deb+nb_canaux;
-}
-
-/********************************************************/
-/*	ecriture de la ligne				*/
-/********************************************************/
-
-	   cr_write = write ( num , buff_lig , nb );
-
-	   if ( cr_write != nb )
-	   {  
-	    strcpy ( CAI_ERREUR , "Erreur ecriture canal image sun_raster\n" );
-	    goto ERREUR;
-	    }
-/********************************************************/
-/*	incrementation du nombre de lignes		*/
-/********************************************************/
-
-	i_ligne++;
-
-/********************************************************/
-/* FIN TANT QUE						*/
-/********************************************************/
-}
-free(buff_lig);
-
-return (CAI_OK);
-
-ERREUR :
-
-return (CAI_KO);
-
-
-}
-
-/* 
-  Fin de l'operation cai_ecriture_canal_sun_raster
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_sun_raster                                       */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format rasterfile et de    */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_sun_raster(image1)                */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_sun_raster (S) (CAI_OK_KO) :   = CAI_KO si pb               */
-/*                                              = CAI_OK si OK               */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_ferme_sun_raster (CAI_IMAGE *image1)
-
-
-{
- long           iret;	       /* code retour de l'operation      */
- int           num;	       /* descripteur du fichier a fermer */
- unsigned char *colormap;      /* tableau de colormap             */
- unsigned char *pch;           /* pointeur de travail             */
- int            i;	       /* indice de boucle		  */
- long int       pos_cour,li;   /* position courante               */
- long int       deplacement;   /* deplacement a effectuer         */
- unsigned char *buf;           /* buffer de lecture de l'image    */ 
- int taille;                   /* taille totale de l'image (oct)  */ 
- int val;		       /* variable intermediaire          */
-   	 
-
- iret=CAI_OK;
- num=image1->ACCES_CANAL_INT[0];
-
-/*.............................................
-   Traitement de la Colormap si ecriture
- .............................................*/
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : FA :  == au lieu de = simple                        */
-/*                                         image1->MODE == CAI_ECRITURE      */
-/*****************************************************************************/
-
-  if ((image1->COLORMAP !=0) && (image1->MODE == CAI_ECRITURE))
-  {
-/*--- recuperation de la position courante ---*/
-      pos_cour=lseek(num,0L,1);
-
-/*-- on se positionne sur le debut de la radiometrie  --*/
-      deplacement = 32 - pos_cour;
-      lseek(num,deplacement,1);
-
-/*--- lecture de l'image rasterfile ---*/
-      taille = image1->NB_LIG*image1->NB_COL*image1->NB_CANAUX;
-      buf = (unsigned char *)malloc(taille);
-      li=read(num,buf,taille);
-
-/*--- recuperation de la position courante ---*/
-      pos_cour=lseek(num,0L,1);
-
-/*-- on se positionne sur le debut des caracteristiques COLORMAP  --*/
-      deplacement = 24 - pos_cour;
-      lseek(num,deplacement,1);
-
-/*-- positionnement de l'indicateur de presence colormap --*/
-     val=1;
-     li=write(num,(char *)(&val),4);
-     
-/*-- positionnement de la taille de la colormap --*/
-     val=image1->COLORMAP;
-     li=write(num,(char *)(&val),4);
-
-/*--- recuperation de la Colormap ---*/
-      colormap = (unsigned char *) malloc(image1->COLORMAP);
-      pch=colormap;
-      for (i=0;i<image1->COLORMAP;i++)
-      {
-        *pch = (unsigned char )(image1->TABCOLOR[i]);
-         pch=pch+1;
-      }
-
-/*--- ecriture des octets de colormap dans l'image ---*/
-     iret=write(num,colormap,image1->COLORMAP);
-     if (iret != image1->COLORMAP)
-     {
-        strcpy(CAI_ERREUR,"Erreur ecriture Colormap rasterfile ");
-        iret=CAI_KO;
-     }
-     else
-     {
-/*--- ecriture de l'image ---*/
-     iret=write(num,buf,taille);
-     }
-     free(buf);
-     free(colormap);
- 
-
-   }
-
-/*.............................................
-   Fermeture de tous les canaux qui sont tous contenus
-   dans un seul fichier .srf
-  .............................................*/
-
-   if (num>0) close(num);
-
-  return (iret);
-}
-
-/*
-  Fin de l'operation cai_ferme_sun_raster
-*/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_sun_raster                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stocke en rasterfile et de  */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_dest_ima_sun_raster(format,nom_ima)     */       		      /* ------------------                                                        */
-/*     format       (E) (char *) : format de l'image a detruire              */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*   cai_dest_ima_sun_raster (S) (CAI_OK_KO) : = CAI_KO si pb                */
-/*                                             = CAI_OK_KO si OK             */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_dest_ima_sun_raster (char * repertoire , 
-                              	    char *nom_ima )
-
-{
-
-char	nom_fic[1024];		/* nom du fichier entete a detruire 	     */
-char    nom_ima_complet[1024];  /* repertoire + nom de l'image 		     */
-int	cr_stat;		/* code retour de fonction status de fichier */
-struct stat buf_stat;		/* structure decrivant status de fichier     */ 
-
-
-/************************************************/
-/* Constitution du nom du fichier d'entete	*/
-/************************************************/
-if ((long)strlen(repertoire)!= 0)
-{
-  sprintf ( nom_ima_complet, "%s/%s",repertoire,nom_ima );
-}
-else
-{
-  strcpy ( nom_ima_complet , nom_ima);
-}
-sprintf ( nom_fic , "%s.srf" ,nom_ima_complet);
-
-/************************************************/
-/* Destruction du fichier sun_raster 		*/
-/************************************************/
-
-cr_stat = stat ( nom_fic , &buf_stat );
-if ( cr_stat == 0 )
-	unlink ( nom_fic );
-
-
-return (CAI_OK);
-
-
-}
-/* 
- Fin de l'operation cai_dest_ima_sun_raster
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_modifie_sun_raster                               */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture-ecriture d'une image au format  */
-/* -----    rasterfile et de tous les fichiers qui la composent              */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_IMAGE *cai_ouvre_modifie_sun_raster(nom_image,     */
-/*  ---------------- 		                              nb_can,        */
-/*				                              nboct_pix      */	
-/*				                              nb_col,        */
-/*				                              nb_lig)        */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*  cai_ouvre_modifie_sun_raster (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */  
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_modifie_sun_raster(char *repert,
-				        char *nom_image,
-				        int  *nb_can,
-				        int  *nboct_pix,
-				        int  *nb_col,
-				        int  *nb_lig)
-
-{
-   FILE *fic_in;		/* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   int  iret;			/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char *deb,*deb1;		/* pointeurs sur chaine de caracteres       */
-   int i,j,ind;			/* indice 				    */
-   int ras_type;                /* type de fichier raster                   */
-   int fic;			/* code retour fonction open		    */
-   unsigned char *colormap;     /* tableau de colormap                      */
-   unsigned char *pch;
-   int taille;
-   long li;
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-   *nb_lig=0;
-   *nb_col=0;
-   *nboct_pix=0;
-   iret=1;
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION : 4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
- if (image1==NULL)
- {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_modifie");
- }
- else
- {
-/*.................................................
-   Constitution du nom du fichier SUN_RASTER srf
-   .................................................*/
-   nom_fic[0]='\0';
-   if((long int)strlen(repert)!=0)
-   {
-      sprintf(nom_fic,"%s/%s.srf",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.srf",nom_image);
-   }
-/*........................
-   Ouverture du fichier entete
-  ..........................................*/
-   fic_in=fopen(nom_fic,"rb");
-   if (fic_in==NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur ouverture fichier sun_raster");
-   }
-   else
-   {
-/*....................................
-    positionnement sur le nombre de colonnes */
-    fseek(fic_in,4,0);
-
-/*  recuperation du nombre de colonnes 
-............................................*/
-
-     li=fread(nb_col,4,1,fic_in);
-
- /*....................................
-     recuperation du nombre de lignes
-............................................*/
-
-     fread(nb_lig,4,1,fic_in);
-
-/*......................................
-     recuperation du nombre de canaux
-............................................*/
-     fread(nb_can,4,1,fic_in);
-     if ((*nb_can!=8)&&(*nb_can!=24))
-     {
-       iret=0;
-       strcpy(CAI_ERREUR,"Profondeur encodage ni 8 ni 24. Format non traite");
-      }
-      else
-      {
-
-       *nb_can=(*nb_can)/8;
-/*.........................................
-       recuperation du type de fichier
-  ............................................*/
-
-        fseek(fic_in,4,1);
-        fread(&ras_type,4,1,fic_in);
-	if (ras_type!=1)
-        {
-          iret=0;
-          strcpy(CAI_ERREUR,"Type de fichier non standard.Non traite");
-         }
-         else
-         {
-/*.........................................
-	    recuperation du nombre d'octets de colormap
-  ............................................*/
-            fseek(fic_in,4,1);
-            fread(nboct_pix,4,1,fic_in);
-            image1->COLORMAP=*nboct_pix;
-	    if (image1->COLORMAP != 0)
-            {
-/*.....................................................
-              lecture de la colormap si elle existe
-  ......................................................*/
-	      colormap = (unsigned char *) malloc(image1->COLORMAP);
-              image1->TABCOLOR = (int *)malloc(sizeof(int)*768);
-              if (image1->TABCOLOR == NULL)
-              {
-                iret=CAI_KO;
-                strcpy(CAI_ERREUR,"Probleme d'allocation memoire");
-               }
-
-              if (colormap == NULL)
-              {
-                iret=CAI_KO;
-                strcpy(CAI_ERREUR,"Probleme d'allocation memoire");
-               }
-               else
-               {
-	         li=fread(colormap,image1->COLORMAP,1,fic_in);
-                 pch=colormap;
-	         taille=(image1->COLORMAP/3);
-/*
--------------    recuperation pour chaque couleur R V B ----*/
-                 for(j=0;j<3;j++)
-                 {
-                   for (i=0;i<taille;i++)
-                   {
-		     ind=i+(j*256);
-                     image1->TABCOLOR[ind]=(int)(*pch);
-                     pch=pch+1;
-                   }
-                   for (i=taille;i<256;i++)
-                   {
-		     ind=i+(j*256);
-                     image1->TABCOLOR[ind]=0;
-
-                   }
-	          }
-                  free(colormap);
-                 }
-             }
-/*.........................................
-	    recuperation du nombre d'octets par pixel
-  .................................................*/
-	    *nboct_pix=1;
-            image1->NB_BITS_PIX=1;
-	    sprintf(image1->COD_PIX,"OCT");
-            }
-           }
-        }
-
-	if (fic_in!=NULL) fclose(fic_in);
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-
-     fic=open(nom_fic,O_RDWR|O_BINARY,0);
-     if (fic == -1)
-      {
-	 iret=0;
-         strcpy(CAI_ERREUR,"Erreur ouverture fichier sun_raster");
-      }
-     else
-     {
-
-       deb = image1->NOM_FIC_CAN;
-       deb1= image1->NOM_UTIL_CAN;
-
-       for (i=0;i<*nb_can;i=i+1)
-       {
-	   sprintf(deb,"%s.srf",nom_image);
-  	   deb=deb+100;
-	   sprintf(deb1,"%s.srf",nom_image);
-           deb1=deb1+100;
-           image1->POS_OCTET[i]=32+image1->COLORMAP;
-           image1->ACCES_CANAL_INT[i]=fic;
-        }
-
-      }
-   }
-   if (iret == 0)
-	return (NULL);
-   else     
-      return(image1);
-  
-}/* 
-   Fin de l'operation cai_ouvre_modifie_sun_raster
-*/
diff --git a/Utilities/CAI/cai_dll/src/cai_spot.c b/Utilities/CAI/cai_dll/src/cai_spot.c
deleted file mode 100755
index ce687ed637..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_spot.c
+++ /dev/null
@@ -1,22134 +0,0 @@
-/*****************************************************************************/
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_spot.c                                                    */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format spot                                       */ 
-/*                                                                           */
-/* AUTEUR :       (CS-SI)                                                    */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :  Octobre 2000                                          */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.4 : DM : prise en compte  ecriture SPOT5 TIF et BIL     */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : test sur  fclose  pour PC/LINUX                */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : initialisation de image1=NULL a l'ouverture    */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : anomalie sur sous-echantillonnage en lecture   */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : erreur d'orthographe sur LATITUDE_ARGUMENT     */
-/*			      et Look_Angles				     */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : erreur d'ecriture detector_id lookangle pour   */
-/*                            PAN                                            */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : erreur conversion jour julien dans CAI         */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : Initialisation du champ COD_PIX (OCT,I2 ou UND)*/
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : erreur d'ecriture detector_id lookangle pour   */
-/*                            PAN                                            */
-/*****************************************************************************/
-/* MOD : VERSION : 4.6 : FA : indice ind_tab_gain non initialise dans boucle */
-/*****************************************************************************/
-/* MOD : VERSION : 4.6 : FA : correction anomalie ecriture SOURCE_ID         */
-/*****************************************************************************/
-/* MOD : VERSION : 4.6 : FA : pas d'ecriture <badlines> si pas de badlines   */
-/*****************************************************************************/
-/*****************************************************************************/
-/* MOD : VERSION : 4.6 : FA : erreur calcul de la datation des attitudes     */
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : FA : erreur initialisation BYTEORDER en creation    */
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : FA :  mot cle  lignes perdues LOST au lieu de LOSS  */
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM :  LEAD_XX.dat devient METADATA.DIM              */
-/*			       IMAG_XX.bil (tif) devient IMAGERY.BIL (.TIF)  */
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : FA :  Prise en compte date de la scene non shiftée */
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'attribut href=""                   */
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'attribut version="5.2"             */
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element PIXEL_ORIGIN               */
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element TIE_POINTS_CRS_Z           */
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Deplacement de Simplified_Location_Model      */
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element lc_List                    */
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element pc_List                    */
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout attribut href="http://www.spotimage.fr" */
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element DATA_TYPE                  */
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : remplacement de SATURATE par SATURATED        */
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : remplacement 255 par 1 dans les element LEVEL */
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : remplacement de BAND par BAND_DESCRIPTION     */
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : ajout de l'unite dans PHYSICAL_UNIT           */
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM :  Ajout de l'element  Bad_Line_List            */
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM :  Ds les dates, utilisation du . au lieu de ,  */
-/*			       Separation de la date et heure par "T"       */
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element Look_Angles_List            */
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element Angles_List                 */
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element Angular_Speeds_List         */
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element Instrument_look_Angles_List */
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : FA : SPECIAL_VALUE_TEXT  NODATA a la place NO_DATA  */
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Version DIMAP passe de 2.0 à 2.9               */
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Rajouter ALPHA_LEVEL unqiement pour SPOT4 MIR  */
-/*****************************************************************************/ 
-/* MOD : VERSION : 4.8 : FA : Rajout SCENE au début de chaine DATASET_NAME   */
-/*****************************************************************************/
-/* MOD : VERSION : 4.8 : FA : Enlever le signe + pour FRAME_ROW, FRAME_COL   */
-/*			      et pour TIE_POINTS_DATA_X et TIE_POINTS_DATA_Y */
-/*****************************************************************************/
-/* MOD : VERSION : 4.8 : FA : Blindage de la reconnaissance du fichier image */
-/*****************************************************************************/
-/* MOD : VERSION : 5.0 : DM : Remplacer les appels systemes pour renommer un */
-/*                            fichier par la commande C rename               */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : FA : DIMAP Ajouter un espace entre SCENE et numsat  */
-/*                            dans le DATASET_NAME                           */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : FA : DIMAP dans le DATASET_FRAME, inversion des deux*/
-/*                            derniers vertex : à mettre dans l'ordre        */
-/*				NO,NE,SE,SO                                  */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM : DIMAP remplissage des tags HORIZONTAL_CS_CODE  */
-/*                            et HORIZONTAL_CS_NAME avec des valeurs défauts */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM : DIMAP tag LOOK_ANGLE_LIST valeurs de PSI_X et  */
-/*                            PSI_Y 1er et dernier detecteur inverses        */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM : Prise en compte de la lecture sur systeme LE   */
-/*                            pour inversion des octets SPOT1A4              */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : FA : Correction sprintf(nom_fic,"IMAGERY") au lieu  */
-/*                                de sprintf(nom_fic,"IMAGERY",nom_rep)      */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : FA : Correction  de                                 */
-/*            sprintf(valeur,"%d", (ind_tab_gain+1+1500*i)) au lieu de       */
-/*		sprintf(valeur,"%f", (ind_tab_gain+1+1500*i))                */
-/*****************************************************************************/
-/* MOD : VERSION : 5.3 : DM :  portage de la couche CAI dans plateforme      */
-/*                             Microsof Visual C++ V6.0                      */
-/*****************************************************************************/
-
-
-
-
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-
-
-# include <stdio.h>
-# include <string.h>
-# ifndef _MSC_VER
-# include <strings.h>
-# endif
-#include <stdlib.h>
-# include <sys/types.h>
-# include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-# include <malloc.h>
-# include <math.h>
-# include <unistd.h>
-# include <limits.h>
-#include <ctype.h>
-#include <errno.h>
-#include <time.h>
-
-#define _CAI_IMAGE
-#define IN_CAI_SPOT
-
-# include "cai_image.h"
-
-/*----------------------------------------------------------------------------*/
-/*                 Definition des CONSTANTES PROPRES                          */
-/*----------------------------------------------------------------------------*/
-
-#define FREE(A)        { if ((A)!=NULL) { free(A); (A)=NULL; } }
-#define NOMBRE_DE_BITS "NBITS"
-#define NOMBRE_DE_LIGNES "NROWS"
-#define NOMBRE_DE_COLONNES "NCOLS"
-#define NOMBRE_DE_CANAUX "NBANDS"
-#define ORDRE_LECTURE_OCTETS "BYTEORDER"
-#define NB_OCTETS_A_SAUTER "SKIPBYTES"
-#define NB_SEC_PAR_JOUR 86400
-#define NB_MIN_PAR_JOUR 1440
-#define NB_HEURE_PAR_JOUR 24
-#define NB_JOURS_AN_BISSEX 366
-#define NB_JOURS_AN_NON_BISSEX 365
-#define NB_CENTIEME_PAR_JOUR 8640000
-#define ANNEE_DEBUT_JULIEN 1950
-#define PI 3.141592653589
-
-/*----------------------------------------------------------------------------*/
-/*                 Declaration des OPERATION INTERNES (static)                */
-/*----------------------------------------------------------------------------*/
-
-static void cai_DMS_To_Float ( char DegMinSec [17] , double *Degre );
-static CAI_OK_KO cai_WriteElementXML ( FILE *desc , char *motCle ,
-                                             char *valeur );
-static CAI_OK_KO cai_WriteOpenTagXML ( FILE *des , char *TagName );
-static CAI_OK_KO cai_WriteCloseTagXML ( FILE *des , char *TagName );
-static CAI_OK_KO cai_WriteNulTagXML ( FILE *des , char *TagName );
-static CAI_OK_KO cai_WriteEnteteXML ( FILE *des );
-static CAI_OK_KO cai_WriteElementXMLWithAttribute ( FILE *desc ,
-                                                          char *motCle ,
-							  char *valeur,
-							  char *attribut,
-							  char *valat ,
-							  int type);
-
-static void cai_JulToGreg ( long nbjours , double nbsec , char* dategreg );
-static double cai_DegreeToRadian ( double angle_degree );
-static int cai_addtime ( char ret[26] , char temps[18] , double milisec );
-static int cai_recup_nom_spot(char typspot,char * str_repertoire ,
-						char * str_debut ,
-					        char **str_fichier );
-static CAI_OK_KO cai_lire_dimensions_spot5 ( char *fich_xml , int *nbcan ,
-					     int *nboct , int *nbcol ,
-					     int *nblig , char *byteorder ,
-					     int *skipbytes );
-static CAI_IMAGE *cai_ouvre_creation_spot1a4(char *repert,
-				   		char *nom_image,
-				   		int *nbca,
-				   		int *nboct_pix,
-				   		int *nbcol,
-				   		int *nblig,
-				   		char *label);
-static CAI_IMAGE *cai_ouvre_creation_spot5TIF(char *repert,
-				   		char *nom_image,
-				   		int *nbca,
-				   		int *nboct_pix,
-				   		int *nbcol,
-				   		int *nblig,
-				   		char *label);
-static CAI_IMAGE *cai_ouvre_creation_spot5BIL(char *repert,
-				   		char *nom_image,
-				   		int *nbca,
-				   		int *nboct_pix,
-				   		int *nbcol,
-				   		int *nblig,
-				   		char *label);
-static char* cai_spot5_gettoken ( FILE *MyFile );
-
-/*----------------------------------------------------------------------------*/
-/* Variables globales                                                         */
-/*----------------------------------------------------------------------------*/
-
-char *type_machine;         /* ordre rangement octets machine de travail     */
-static char Command[1024];  /* commande envoye au shell			     */
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-
-static char *rcs_id="$Header: cai_spot.c,v 1.3 01/05/31 10:47:53 cmf Exp $";
-
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_spot                                         */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de determination des images au format spot             */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  int cai_liste_ima_spot(typspot,repert,tab_ima)        */
-/* -----------------                                                         */
-/*                                                                           */
-/*     typspot      (E) (char)     : type spot (1=1a4,b=5bil ou t=5tif)      */
-/*     repert       (E) (char *)   : repertoire a explorer		     */
-/*     tab_ima      (S) (char ***) : pointeur sur tableau des images listees */
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_ima_spot   (S) (int)     :     = -1 repertoire inexistant   */                                    /*					       = > 0 nombre d'images listees */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-long int cai_liste_ima_spot (char typspot, char *repert,
-		             char ***tab_ima)
-
- {
-   DIR *dirp;		    /* pointeur sur structure ouverture repertoire   */
-   struct dirent *dp;       /* structure resultat de la fonction readdir     */
-   struct stat buf_stat;    /* structure contenant resultat stat             */
-   char *nom_entete_spot;   /* nom fichier entete image SPOT                 */
-   char *nom_trailer_spot;  /* nom fichier trailer image SPOT                */
-   char *nom_fic_spot;      /* nom fichier image SPOT                        */
-   char *nom_vol_spot;      /* nom fichier pour volume repertoire image SPOT */
-   char *nom_NULL_spot;     /* nom fichier volume NULL repertoire image SPOT */ 
-   int nb_ima;              /* nombre d'images lum identifiees               */                    
-
-   int cr,i;                /* compte rendu appel fonction                   */ 
-   int v1,v2;               /* comparaison nom repertoire avec . et ..       */
-   char path_rep[PATH_MAX]; /* chemin acces fichiers ds repertoire courant   */
-   
-/*........................................
-   INITIALISATION et ouverture du repertoire courant choisi
-  .........................................*/
-  
-   nb_ima=0;
-     
-   dirp=opendir(repert);
-
-   if(dirp!=NULL)
-   {
-/*......................................
-
-   premiere passe pour comptabiliser les images du format donne
-
-   POUR CHAQUE REPERTOIRE DU REPERTOIRE COURANT,
-      TEST POUR SAVOIR SI CE REPERTOIRE CONTIENT 
-      	TOUS LES FICHIER PROPRES AU FORMAT SPOT 
-     ..........................................*/
-     
-    while( (dp=readdir(dirp))!=NULL )
-    {
-    
-    /********************************************/
-    /*  on ne doit pas tenir compte des . et .. */
-    /*      sous le repertoire courant          */
-    /*******************************************/
-    
-    	v1 = strcmp(dp->d_name, ".");
-	v2 = strcmp(dp->d_name, "..");
-	
-        if ( (v1 != 0) && (v2 != 0) )
-	{
-	   sprintf(path_rep, "%s/%s", repert, dp->d_name);
-		
-	   /*--------------------------------*/		
-	   /*test sur exitence du repertoire */
-	   /*--------------------------------*/
-		
-	   cr = stat(path_rep,&buf_stat);
-			
-    	   if ( (cr!=-1) && ((buf_stat.st_mode&S_IFMT) == S_IFDIR) )
-    	   {	     		
- /* verification existence des fichiers propres au format SPOT 1 a 4*/
-	     if (typspot == '1')
-             {
-    			if ( 
-	(cai_recup_nom_spot(typspot,path_rep,"lea",&nom_entete_spot) == 0) && 
-        (cai_recup_nom_spot(typspot,path_rep,"tra",&nom_trailer_spot) == 0) &&
-        (cai_recup_nom_spot(typspot,path_rep,"ima",&nom_fic_spot) == 0) &&
-        (cai_recup_nom_spot(typspot,path_rep,"vol",&nom_vol_spot) == 0) && 
-	( cai_recup_nom_spot(typspot,path_rep,"NUL",&nom_NULL_spot) == 0) )
-    			{
-				/*image SPOT1 4*/
-				nb_ima=nb_ima+1;
-    			}
-              }      
-	      else if (typspot == 'B')
-              {
- /* verification existence des fichiers propres au format SPOT5 BIL */
-/*****************************************************************/
-/* MOD : VERSION : 4.7 : DM : LEAD_01.DAT  devient METADATA.DIM  */
-/*****************************************************************/
-		 if ( 
-	(cai_recup_nom_spot(typspot,path_rep,"METADATA.DIM",&nom_entete_spot) == 0) &&
-	(cai_recup_nom_spot(typspot,path_rep,"im",&nom_fic_spot) == 0) )
-			{
-			        /*image SPOT5 BIL*/
-				nb_ima=nb_ima+1;
-			}
-              }
-	      else if (typspot == 'T')
-              {
- /* verification existence des fichiers propres au format SPOT5 TIF */
-/*****************************************************************/
-/* MOD : VERSION : 4.7 : DM : LEAD_01.DAT  devient METADATA.DIM  */
-/*****************************************************************/
-		 if ( 
-	(cai_recup_nom_spot(typspot,path_rep,"METADATA.DIM",&nom_entete_spot) == 0) &&
-	(cai_recup_nom_spot(typspot,path_rep,"im",&nom_fic_spot) == 0) )
-			{
-			        /*image SPOT5 TIF*/
-				nb_ima=nb_ima+1;
-			}
-	      }
-     	   } /*fin if cr*/
-		
-     	} /*fin if (v1 v2)*/
-	
-     } /*fin while*/
-     
-     /*fermeture du repertoire*/
-     (void)closedir(dirp);
-    
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES DU FORMAT SPOT
-     ......................................*/
-    *tab_ima = (char **) calloc( nb_ima,sizeof(char *) );
-    for (i=0;i<nb_ima;i=i+1)
-      (*tab_ima)[i]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-
-  POUR CHAQUE REPERTOIRE DU REPERTOIRE COURANT,
-      TEST POUR SAVOIR SI CE REPERTOIRE CONTIENT 
-      	TOUS LES FICHIER PROPRES AU FORMAT SPOT 
-   SI C`EST LE CAS,STOCKAGE DANS LA LISTE
-   ..........................................*/ 
-	 
-   dirp=opendir(repert);
-
-   nb_ima=0;
- 
-   while((dp=readdir(dirp))!=NULL)
-   {
-   
-   /**********************************************/
-   /*   on ne doit pas tenir compte des . et ..  */
-   /*       sous le repertoire courant           */
-   /**********************************************/
-    
-      v1 = strcmp(dp->d_name, ".");
-      v2 = strcmp(dp->d_name, "..");
-	
-      if ( (v1 != 0) && (v2 != 0) )
-      {		
-	sprintf(path_rep, "%s/%s", repert,dp->d_name);	
-		
-	/*-------------------------------------*/
-	/*   test sur exitence du repertoire   */
-	/*-------------------------------------*/
-		
-	cr = stat(path_rep,&buf_stat);
-			
-    	if ( (cr!=-1) && ((buf_stat.st_mode&S_IFMT) == S_IFDIR) )
-    	{	     		
-    	 /* verification existence des fichiers propres au format SPOT 1 a 4*/
-	     if (typspot == '1')
-             {
-    			if ( 
-	(cai_recup_nom_spot(typspot,path_rep,"lea",&nom_entete_spot) == 0) && 
-        (cai_recup_nom_spot(typspot,path_rep,"tra",&nom_trailer_spot) == 0) &&
-        (cai_recup_nom_spot(typspot,path_rep,"ima",&nom_fic_spot) == 0) &&
-        (cai_recup_nom_spot(typspot,path_rep,"vol",&nom_vol_spot) == 0) && 
-	( cai_recup_nom_spot(typspot,path_rep,"NUL",&nom_NULL_spot) == 0) )
-    			{
-				/*image SPOT1 4*/
-				nb_ima=nb_ima+1;
-				strcpy( (*tab_ima)[nb_ima-1],dp->d_name );
-    			}
-              }      
-	      else if (typspot == 'B')
-              {
- /* verification existence des fichiers propres au format SPOT5 BIL */
-/*****************************************************************/
-/* MOD : VERSION : 4.7 : DM : LEAD_01.DAT  devient METADATA.DIM  */
-/*****************************************************************/
-		 if ( 
-	(cai_recup_nom_spot(typspot,path_rep,"METADATA.DIM",&nom_entete_spot) == 0) &&
-	(cai_recup_nom_spot(typspot,path_rep,"im",&nom_fic_spot) == 0) )
-			{
-			        /*image SPOT5 BIL*/
-				nb_ima=nb_ima+1;
-				strcpy( (*tab_ima)[nb_ima-1],dp->d_name );
-			}
-              }
-	      else if (typspot == 'T')
-              {
- /* verification existence des fichiers propres au format SPOT5 TIF */
-/*****************************************************************/
-/* MOD : VERSION : 4.7 : DM : LEAD_01.DAT  devient METADATA.DIM  */
-/*****************************************************************/
-		 if ( 
-	(cai_recup_nom_spot(typspot,path_rep,"METADATA.DIM",&nom_entete_spot) == 0) &&
-	(cai_recup_nom_spot(typspot,path_rep,"im",&nom_fic_spot) == 0) )
-			{
-			        /*image SPOT5 TIF*/
-				nb_ima=nb_ima+1;
-				strcpy( (*tab_ima)[nb_ima-1],dp->d_name );
-			}
-	      }
-  	   } /*fin if cr*/
-			
-       	}/*fin if (v1 v2)*/	
-
-   }/*fin while*/
-     
-    /*fermeture du repertoire*/ 
-   (void)closedir(dirp);
-
-   }
-   else
-   {
-     /* Erreur : Repertoire inexistant sous repertoire courant */
-      nb_ima=-1;
-   }
-
-    return(nb_ima);
-
-}
-/* Fin de l'operation cai_liste_ima_spot*/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_spot                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image au format spot      */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_lecture_spot(typspot,nom_image,  */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*                                                                           */
-/*     typspot        (E) (char)   : type spot (1=1a4,b=5bil ou t=5tif)      */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_spot (S) (CAI_IMAGE *)  : = NULL si pb              */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */                                                                           /*                                                                           */  /* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_lecture_spot(char typspot,char *repert,
-				  char *nom_image,
-				  int *nb_can,
-				  int *nboct_pix,
-				  int *nb_col,
-				  int *nb_lig)
-
-{
-DIR *dirp;		    /* pointeur sur structure ouverture repertoire   */
-CAI_IMAGE *image1;          /* pointeur su descripteur de fichier image      */ 
-struct dirent *dp;          /* structure resultat de la fonction readdir     */
-char fichier_clefs[1024];   /* Nom du fichier des donnees auxiliaires        */
-int i,j,k;		    /* Variables de boucle                           */
-int descrip_leader;	    /* Descripteur du fichier LEADER                 */
-int descrip_imagery;	    /* Descripteur du fichier IMAGERY                */
-int descrip_volume;	    /* Descripteur du fichier VOLUME                 */
-long cr_lseek;		    /* Code retour de lseek                          */
-long cr_read;		    /* Code retour de read                           */
-long lg_saut;		    /* Nombre d'octets a sauter                      */
-int  lg_enreg,lgtemp;	    /* longueur d'un enregistrement                  */
-int NbCan;                  /* nombre de canaux de l'image                   */
-int test1,test2,test3,test4,test5;/* test sur nom de fichiers                */
-int lg_entete;	            /* longueur de l'entete fichier IMAGERY          */
-int num,trouve;		    /* variable de test                              */
-char nom_fic[1024];         /* nom du fichier en-tete		             */
-char nom_fic_canal[1024];   /* nom fichier canal dont on teste existence     */
-char nom_rep[1024];         /* nom du repertoire image SPOT		     */
-char nom_fic_ima[1024];     /* nom du fichier imagery.dat	             */
-char nom_leader[1024];      /* nom du fichier leader		             */
-char path_rep[PATH_MAX];    /* chemin acces fichiers ds repertoire courant   */
-char nom_fic_spot5[PATH_MAX];/* chemin acces fichier image tiff ou BIL SPOT5 */
-char nom_ima_spot5[PATH_MAX];/* nom du fichier image spot5                   */
-char *pch0,*pch1;            /* pointeur sur chaine de caracteres            */
-char car[2],carpoint;           /* variable de travail                          */
-int type_spot;               /* type d'image spot                            */
-char byteorder[1];           /* Ordre de codage intel (LE) ou Motorola (BE)  */
-int skipbytes;               /* Taille entete pour les fichiers BIL SPOT5    */
-int Trouve;
-CAI_OK_KO icr;
-
-
-/* Donnees auxiliaires */
-
-char TABLEAU[1][257];	/* Variable intermediaire */
-
-/* premiere variable = pour le nombre d'elements = nbre de colonnes */
-/* deuxieme element = pour la taille de l'element */
-
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-  descrip_leader = 0;
-  descrip_imagery = 0;
-  descrip_volume = 0;
-  *nb_can=0;
-  *nb_lig=0;
-  *nb_col=0;
-  *nboct_pix=1;
-  type_spot=0;
-  trouve=0;
-  car[0]='/';
-
-#ifdef _WIN
-      car[0]='\\';
-#endif
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : initialisation de image1=NULL a l'ouverture    */
-/*****************************************************************************/
-   image1= NULL;   
- /*..................................
-   determination ordre de rangement 
-   des octets sur machine de travail
-  ......................................*/   
-   
-  type_machine = cai_test_pFpf();
-
-/******************************************************************************/
-/*	Determination du type d'image : SPOT 1 a 4 ou SPOT 5                  */
-/******************************************************************************/
-sprintf(nom_rep, "%s%s%s", repert,car, nom_image);
-
-dirp=opendir(nom_rep);
-
- 
-if(dirp!=NULL)
- {
-  while( ((dp=readdir(dirp))!=NULL )&& (trouve ==0))
-  {
-   
-  /*---------------------------------------------*/
-  /*  on ne doit pas tenir compte des . et ..    */
-  /*        sous le repertoire courant           */
-  /*---------------------------------------------*/
-    
-   test1 = strcmp(dp->d_name, ".");
-   test2 = strcmp(dp->d_name, "..");
-	
-   if ( (test1 != 0) && (test2 != 0) )
-   {
-/*****************************************************************************/
-/* MOD : VERSION : 4.8 : FA : Blindage de la reconnaissance du fichier image */
-/*****************************************************************************/
-     
-  /*---------------------------------------------*/
-  /*  on recherche le fichier Image              */
-  /*---------------------------------------------*/
-     test3 = strncasecmp(dp->d_name,"IMAG", 4);
-     if (test3 == 0)
-     {
-        test4 = strcasecmp(dp->d_name,"imagery.tif");
-        if (test4==0)  /* format SPOT5TIF */
-        {
-                type_spot = 2;
-		sprintf (nom_fic_spot5, "%s%s%s%s%s", repert, car,
-						nom_image, car,dp->d_name);
-		sprintf (nom_ima_spot5, "%s", dp->d_name);
-		trouve=1;
-        }
-        else 
-        {
-	    test4 = strcasecmp(dp->d_name,"imagery.bil");
-            if (test4==0)  /* format SPOT5BIL */
-            {
-                type_spot = 3;
-		sprintf (nom_fic_spot5, "%s%s%s%s%s", repert, car,
-						nom_image, car,dp->d_name);
-		sprintf (nom_ima_spot5, "%s", dp->d_name);
-		trouve=1;
-             }
-	     else /* format SPOT 1 a 4*/
-             {
-		carpoint = '.';
-                pch0 = strchr (dp->d_name, carpoint);
-		if  (pch0 == NULL)
-                {
-			type_spot = 1;     /* format SPOT 1 a 4*/
-     		        sprintf(nom_fic_ima, "%s%s%s%s%s", repert, car,
-						nom_image, car,dp->d_name);
-			trouve=1;
-                }
-                else if (strcasecmp(pch0,".DAT")== 0)
-                {
-			type_spot = 1;     /* format SPOT 1 a 4*/
-     		        sprintf(nom_fic_ima, "%s%s%s%s%s", repert, car,
-						nom_image, car,dp->d_name);
-			trouve=1;
-                }
-
-             }		
-        }
-     }
-    }
-
-  }
-  closedir(dirp); 
- }
-
-
-if (type_spot == 0)
-{
-	sprintf (CAI_ERREUR,"Erreur : type d'image SPOT inconnu");
-	goto ERREUR;
-}
-/*........................................................................*/
-/* Verication ed la coherence du type spot annonce et du type spot trouve */
-/*........................................................................*/
-if (((typspot == '1')&&(type_spot != 1))||
-		((typspot == 'T')&&(type_spot != 2))||
-		((typspot == 'B')&&(type_spot != 3)))
-{
-	    sprintf (CAI_ERREUR,
-			"Erreur : L'image n'est pas du type SPOT annonce");
-	    goto ERREUR;
-}
-
-/*=============================================*/
-/* TRAITEMENT D'UNE IMAGE AU FORMAT SPOT 1 A 4 */
-/*=============================================*/
-if (type_spot == 1)
-{
-   image1= NULL;    
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-   image1->ACCES_SPOT[0]=0;
-   image1->ACCES_SPOT[1]=0;
-
-/*****************************************************************************/
-/* tests sur les retours d'allocation  memoire                               */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-       strcpy(CAI_ERREUR,"Erreur allocation memoire dans cai_ouvre_lecture");
-       goto ERREUR;
-    }
-
-/******************************************************************************/
-/*	Ouverture des fichiers LEADER et IMAGERY en lecture		      */
-/******************************************************************************/
-
-    sprintf(nom_rep, "%s%s%s", repert,car, nom_image);
-    dirp=opendir(nom_rep);
- 
-    if(dirp!=NULL)
-    {
-      while( (dp=readdir(dirp))!=NULL )
-      {
-   
-  /*---------------------------------------------*/
-  /*  on ne doit pas tenir compte des . et ..    */
-  /*        sous le repertoire courant           */
-  /*---------------------------------------------*/
-    
-        test1 = strcmp(dp->d_name, ".");
-        test2 = strcmp(dp->d_name, "..");
-	
-        if ( (test1 != 0) && (test2 != 0) )
-        {
-     
-     	   test3 = strncasecmp(dp->d_name,"LEAD", 4);
-     	   test4 = strncasecmp(dp->d_name,"IMAG", 4); 
-     	   test5 = strncasecmp(dp->d_name,"VOL", 3);   
-    
-     /********************************************************/
-     /* tests de determination du fichier LEADER sous repert */
-     /********************************************************/
-     
-           if (test3==0)
-           {
-     		 sprintf(path_rep, "%s%s%s%s%s", repert, car,nom_image, 
-								car,dp->d_name);
-      
-      /*ouverture du fichier LEADER*/
-            
-      		descrip_leader = open (path_rep, O_RDONLY |O_BINARY);
-      		if (descrip_leader == -1)
-      		{
-      	           strcpy(CAI_ERREUR,
-			"Erreur d'ouverture du fichier LEADER SPOT");
-       		   goto ERREUR;
-      		}        
-        /*---------------------------------------------------------*/
-	/* Lecture de la taille d'un enregistrement dans LEADER    */
-	/*---------------------------------------------------------*/
-
-		cr_lseek = lseek ( descrip_leader , 8L , 1 );
-		if ( cr_lseek == -1 )
-		{
-		  strcpy(CAI_ERREUR,"Erreur acces au fichier leader SPOT");
-		  goto ERREUR;
-		}
-
-		cr_read = read ( descrip_leader , &lg_enreg , 4 );
-		if ( cr_read == -1 )
-		{
-			strcpy(CAI_ERREUR,"Erreur acces au fichier leader SPOT");
-			goto ERREUR;
-		}
-	        if (strcmp(type_machine,"LE")==0)
-                {
-		  swab( (void*)&lg_enreg, (void*)&lgtemp,4 );
-		  cai_inverser_tableau((short *)&lg_enreg, (short *)&lgtemp,2);
-                }
-	
-	/*------------------------------------------------------*/
-	/* Retour au debut du fichier LEADER		        */
-	/*------------------------------------------------------*/
-
-		cr_lseek = lseek ( descrip_leader , 0L , 0 );
-		if ( cr_lseek == -1 )
-		{
-			strcpy(CAI_ERREUR,"Erreur acces au fichier leader SPOT");
-			goto ERREUR;
-		}
-
-        /*------------------------------------------------------*/
-	/* Saut de lg_enreg + 996 octets dans LEADER		*/
-	/*------------------------------------------------------*/
-
-		lg_saut = (long)(lg_enreg + 996);
-		cr_lseek = lseek ( descrip_leader , lg_saut , 0 );
-		if ( cr_lseek == -1 )
-		{
-			strcpy(CAI_ERREUR,"Erreur acces au fichier leader SPOT");
-			goto ERREUR;
-		}
-	/*------------------------------------------------------*/
-	/* Lecture du nombre de colonnes dans LEADER	        */
-	/*------------------------------------------------------*/
-
-  		cr_read = read (descrip_leader, TABLEAU[0], 16);
-		if ( cr_read != 16 )
-		{
-			strcpy(CAI_ERREUR,"Erreur acces au fichier leader SPOT");
-			goto ERREUR;
-		}
-        	TABLEAU[0][16] = '\0';  /* Pour ne pas lire les char suivants */
-        /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  		for (i=0;i<16;i++)
-  		{
-			TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-  		}
-
- 		sscanf ( TABLEAU[0], "%d", nb_col);
-	/*------------------------------------------------------*/
-	/* Lecture du nombre de lignes dans LEADER		*/
-	/*------------------------------------------------------*/
-
-  		cr_read = read (descrip_leader, TABLEAU[0], 16);
-		if ( cr_read != 16 )
-		{
-			strcpy(CAI_ERREUR,"Erreur acces au fichier leader SPOT");
-			goto ERREUR;
-		}
-       		TABLEAU[0][16] = '\0';  /* Pour ne pas lire les char suivants */
-        /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  		for (i=0;i<16;i++)
-  		{
-			TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-  		}
-
- 		sscanf ( TABLEAU[0], "%d", nb_lig);
-
-	/*------------------------------------------------------*/
-	/* Saut de 16 octets dans LEADER			*/
-	/*------------------------------------------------------*/
-
-		cr_lseek = lseek ( descrip_leader , 16L , 1 );
-		if ( cr_lseek == -1 )
-		{
-			strcpy(CAI_ERREUR,"Erreur acces au fichier leader SPOT");
-			goto ERREUR;
-		}
-	
-	/*------------------------------------------------------*/
-	/* Lecture du nombre de canaux	dans LEADER		*/
-	/*------------------------------------------------------*/
-
- 		cr_read = read (descrip_leader, TABLEAU[0], 16);
-		if ( cr_read != 16 )
-		{
-			strcpy(CAI_ERREUR,"Erreur acces au fichier leader SPOT");
-			goto ERREUR;
-		}
-        	TABLEAU[0][16] = '\0';  /* Pour ne pas lire les char suivants */
-        /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  		for (i=0;i<16;i++)
-  		{
-			TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-  		}
-
- 		sscanf ( TABLEAU[0], "%d", nb_can);	
-   	   } /*fin test3 (v==0)*/
-     
-          else  if (test5==0)
-          {
-    /********************************************************/
-    /* tests de determination du fichier VOLUME sous repert */
-    /********************************************************/
-
-      		sprintf(path_rep, "%s%s%s%s%s", repert, car,nom_image, 
-							car,dp->d_name);      
-      	/*ouverture du fichier VOLUME*/
-            
-      		descrip_volume = open (path_rep, O_RDONLY|O_BINARY );
-      		if (descrip_volume == -1)
-      		{
-       		     strcpy(CAI_ERREUR,
-			"Erreur d'ouverture du fichier VOLUME SPOT");
-       		     goto ERREUR;
-                 }
-           }
-    /********************************************************/
-    /* tests de determination du fichier IMAGERY sous repert */
-    /********************************************************/
-    	       
-           else if (test4==0)
-           {   
-     
-      /*ouverture du fichier IMAGERY*/
-      
-      		descrip_imagery = open (nom_fic_ima, O_RDONLY|O_BINARY );
-      		if (descrip_imagery == -1)
-      		{
-      		   strcpy(CAI_ERREUR,
-			"Erreur d'ouverture du fichier IMAGERY SPOT");
-       	           goto ERREUR;
-      		}
-                  
-      /*------------------------------------------------------*/
-      /* Lecture de la taille de l'entete dans IMAGERY	      */
-      /*------------------------------------------------------*/
-
-  		cr_lseek = lseek ( descrip_imagery , 8L , 1);
-  		if ( cr_lseek == -1 )
-  		{
-			strcpy(CAI_ERREUR,
-			  "Erreur acces au fichier contenant donnees SPOT");
-			goto ERREUR;
-  		}	
-
-  		cr_read = read ( descrip_imagery , &lg_entete , 4 );
-  		if ( cr_read == -1 )
-  		{
-			strcpy(CAI_ERREUR,
-			  "Erreur acces au fichier contenant donnees SPOT");
-			goto ERREUR;
-  		}
-	        if (strcmp(type_machine,"LE")==0)
-                {
-		  swab( (void*)&lg_entete, (void*)&lgtemp,4 );
-		  cai_inverser_tableau((short *)&lg_entete, (short *)&lgtemp,2);
-                }
-      
-    	  } /*fin else if test4*/
-    	       
-        } /*fin else test1 test2*/
-   
-     }  /*fin while*/
-                   
-     closedir(dirp); 
- 
-   }  /*fin if (dirp=!NULL)*/
-
-
-/* verification que tous les fichiers necessaires (lead,imag et vol ont ete trouves */
-  if (descrip_leader == 0)
-  {
-      sprintf(CAI_ERREUR,"Erreur : Fichier Leader SPot1a4 absent");
-      goto ERREUR;
-  }
-  if (descrip_imagery == 0)
-  {
-      sprintf(CAI_ERREUR,"Erreur : Fichier imagery SPot1a4 absent");
-      goto ERREUR;
-  }
-  if (descrip_volume == 0)
-  {
-      sprintf(CAI_ERREUR,"Erreur : Fichier volume SPot1a4 absent");
-      goto ERREUR;
-  }
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-
-  nom_fic[0]='\0';
-  nom_fic_canal[0]='\0';
-     
-  sprintf(nom_fic_canal,"%s",nom_fic_ima);   
-
-  for (i=0;i<*nb_can;i=i+1)
-  {
-    sscanf(nom_image,"%s",image1->NOM_FIC_CAN);
-    sscanf(nom_image,"%s",image1->NOM_UTIL_CAN);
-    image1->ACCES_CANAL_INT[i]=descrip_imagery;
-    image1->ACCES_SPOT[0]=descrip_leader;
-    image1->ACCES_SPOT[1]=descrip_volume;
-    image1->POS_OCTET[i]=lg_entete;	   
-  }
-    image1->TYPE_SPOT = type_spot;
-    image1->NBOCT_PIX = *nboct_pix;
-      
- }  /* fin TYPE IMAGE SPOT 1 a 4 */ 
-    /*===========================*/
- 
-/*=============================================*/
-/* TRAITEMENT D'UNE IMAGE AU FORMAT SPOT 5 TIF */
-/*=============================================*/
- else if (type_spot == 2)
- {
-
-/* Ouverture de l'image */
-    image1  = cai_ouvre_lecture_image (nom_fic_spot5, "TIFF", 
-                                        nb_can,nboct_pix,nb_col,nb_lig);
-
-  if (image1 == NULL)
-  {
-  	strcpy(CAI_ERREUR,
-		"Erreur acces au fichier image TIFF contenant donnees SPOT");
-	goto ERREUR;
-  }
-
-   image1->NB_CANAUX = *nb_can  ;
-   image1->NBOCT_PIX = *nboct_pix  ;
-   image1->NB_COL =  *nb_col  ;
-   image1->NB_LIG = *nb_lig ;
-   image1->TYPE_SPOT = type_spot;
-   image1->ACCES_SPOT[0]=0;
-   image1->ACCES_SPOT[1]=0;
-
-
- }  /* fin TYPE IMAGE SPOT 5 TIFF */ 
-    /*============================*/
-
-/*=============================================*/
-/* TRAITEMENT D'UNE IMAGE AU FORMAT SPOT 5 BIL */
-/*=============================================*/
- else
- {
-
-   image1= NULL;    
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-   image1->ACCES_SPOT[0]=0;
-   image1->ACCES_SPOT[1]=0;
-  
-/*****************************************************************************/
-/* tests sur les retours d'allocation  memoire                               */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-       strcpy(CAI_ERREUR,"Erreur allocation memoire dans cai_ouvre_lecture");
-       goto ERREUR;
-    }
-
-   /* Recherche du leader Dimap */
-     dirp=opendir(nom_rep);
-     Trouve=0; 
-     if(dirp!=NULL)
-     {
-        while( (dp=readdir(dirp))!=NULL )
-        {
-   
-  /*---------------------------------------------*/
-  /*  on ne doit pas tenir compte des . et ..    */
-  /*        sous le repertoire courant           */
-  /*---------------------------------------------*/
-    
-   	   test1 = strcmp(dp->d_name, ".");
-   	   test2 = strcmp(dp->d_name, "..");
-	
-  	   if ( (test1 != 0) && (test2 != 0) )
-    	   {
-/*****************************************************************/
-/* MOD : VERSION : 4.7 : DM : LEAD_01.DAT  devient METADATA.DIM  */
-/*****************************************************************/     
-     	     test3 = strncasecmp(dp->d_name,"METADATA.DIM", 12);
-    
-     /**************************************************************/
-     /* tests de determination du fichier METADATA.DIM sous repert */
-     /**************************************************************/
-     	     if (test3==0)
-     	     {
-      	          sprintf(nom_leader, "%s%s%s%s%s", repert,car, nom_image, 
-							   car, dp->d_name);
-      
-
-/* Extraction du nombre de lig col can et nboct du fichier DIMAP */
-/*...............................................................*/
-    		   icr = cai_lire_dimensions_spot5(nom_leader,nb_can,nboct_pix ,
-                               			   nb_col , nb_lig,byteorder,
-						   &skipbytes );
-	           if (icr != CAI_OK)
-                   {
-			goto ERREUR;
-                   }
-		   else
-			Trouve=1;
-             }
-            } /*fin else test1 test2*/
-   
-         }  /*fin while*/
-                   
-         closedir(dirp); 
- 
-      }  /*fin if (dirp=!NULL)*/
-
-      if (Trouve==0)
-      {
-	 sprintf(CAI_ERREUR,
-	  "Erreur Le fichier METADATA.DIM n'existe pas ou erreur de lecture");
-	 goto ERREUR;
-       }
-
-
-/*   INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-
-     nom_fic[0]='\0';
-     nom_fic_canal[0]='\0';
-
-     sprintf(nom_fic_canal,"%s",nom_fic_spot5);
-
-     num=open(nom_fic_canal,O_RDONLY|O_BINARY,0);
-     if (num!= -1)
-     {
-       for (i=0;i<*nb_can;i=i+1)
-       {
-    		sscanf(nom_ima_spot5,"%s",image1->NOM_FIC_CAN);
-    		sscanf(nom_ima_spot5,"%s",image1->NOM_UTIL_CAN);
-    		image1->ACCES_CANAL_INT[i]=num;
-           	image1->POS_OCTET[i]=(*nb_col)*i*(*nboct_pix)+skipbytes;
-        }
-        image1->TYPE_SPOT = type_spot;
-        image1->NBOCT_PIX = *nboct_pix;
-        if (byteorder[0]=='M')
-        {
-	   if (strcmp(type_machine,"BE")==0)
-		image1->INV_OCTETS=0;
-	   else
-		image1->INV_OCTETS=1;
-        }
-        else
-        {
-	   if (strcmp(type_machine,"LE")==0)
-		image1->INV_OCTETS=0;
-	   else
-		image1->INV_OCTETS=1;
-        }
-
-      }
-      else
-      {
-  	strcpy(CAI_ERREUR,
-		"Erreur ouverture fichier BIL contenant donnees SPOT");
-	goto ERREUR;
-      }
-
- }  /* fin TYPE IMAGE SPOT 5 BIL */ 
-
-    /*===========================*/
-
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : Initialisation du champ COD_PIX (OCT,I2 ou UND)*/
-/*****************************************************************************/
- if (*nboct_pix==1) 
-	sprintf(image1->COD_PIX,"OCT");
- else if (*nboct_pix==2) 
-	sprintf(image1->COD_PIX,"I2");
- else 
-	sprintf(image1->COD_PIX,"UND");
-
-
- return(image1);
-
-
-ERREUR:
-  if (descrip_leader !=0) close(descrip_leader);
-  if (descrip_imagery !=0) close(descrip_imagery);
-  if (descrip_volume !=0) close(descrip_volume);
-  if (image1!=NULL) free(image1);
-  return(NULL);
-}
-/* 
-   Fin de l'operation cai_ouvre_lecture_spot
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_spot                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format spot et de tous les fichiers qui la composent         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_IMAGE *cai_ouvre_creation_spot(typspot,nom_image,  */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            label)           */
-/*                                                                           */
-/*     typspot        (E) (char )  : type d'images spot 91a4,5tif ou 5bil)   */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_spot (S) (CAI_IMAGE *) :     =NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_IMAGE *cai_ouvre_creation_spot(char typspot,char *repert,
-				   char *nom_image,
-				   int *nbca,
-				   int *nboct_pix,
-				   int *nbcol,
-				   int *nblig,
-				   char *label)
-
-{
-
-   CAI_IMAGE *image1;	     /* pointeur su descripteur de fichier image     */
-   int icr;		     /* Code retour de fonctions                     */ 
-
-/*........................................
-   INITIALISATIONS et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-  icr = CAI_OK;
-
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : initialisation de image1=NULL a l'ouverture    */
-/*****************************************************************************/
-   image1= NULL; 
-
-/*-------------------------------------------------------------*/
-/* test du type de machine sur laquelle est constituee l'image */
-/*-------------------------------------------------------------*/
-  type_machine = cai_test_pFpf();
-
-  if (typspot=='1')
-	image1 = cai_ouvre_creation_spot1a4(repert,nom_image,nbca,
-				   nboct_pix,nbcol,nblig,label);
-  else if (typspot=='B')
-	image1 = cai_ouvre_creation_spot5BIL(repert,nom_image,nbca,
-				   nboct_pix,nbcol,nblig,label);
-  else if (typspot=='T')
-	image1 = cai_ouvre_creation_spot5TIF(repert,nom_image,nbca,
-				   nboct_pix,nbcol,nblig,label);
-  if (image1==NULL) icr=CAI_KO;
-
-  if (icr != CAI_OK)
-  {
-      if (image1!=NULL) free(image1);
-      image1 = NULL;
-  }
-  return(image1);
-
-}
-
-/* 
-  Fin de l'operation cai_ouvre_creation_spot
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_spot                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image LUM                  */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_lecture_canal_spot(image1, canal,       */ 
-/* ------------------                        premiere_ligne,                 */
-/*                                           premiere_colonne,               */
-/*                                           nombre_lignes_lire ,            */
-/*                                           nombre_colonnes_lire,           */
-/*                                           pas_ligne ,pas_colonne,         */
-/*                 		             data_image )                    */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (int) : numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal_spot (S) (CAI_OK_KO) :     = CAI_KO si pb           */
-/*                                                 = CAI_OK si OK            */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_lecture_canal_spot(CAI_IMAGE *image1,int *canal, 
-				 int *premiere_ligne, int *premiere_colonne, 
-		      		 int *nb_lig_lire, int *nb_col_lire, 
-				 int *pas_lig, int *pas_col, 
-				 unsigned char *data_image  )        
-  
-    
-{
-DIR *dirp;		    /* pointeur sur structure ouverture repertoire   */
-struct dirent *dp;          /* structure resultat de la fonction readdir     */
-int descrip_imagery;	    /* descripteur du fichier imagery                */
-int nb_can;                 /* nombre de canaux de l'image SPOT              */
-int num,lig,i,j,k;          /* variables de travail                          */
-long  nb_oct;               /* nb oct =1er octet a lire - position courante  */
-long  oct_lig;              /* nb oct. par ligne en considerant taille pixel */
-long int offset;	    /* Deplacement dans le fichier                   */
-long cr_lseek;		    /* Code retour de lseek                          */
-long cr_read;		    /* Code retour de read                           */
-int lg_prefixe;	            /* longueur du prefixe d'une ligne               */
-int lg_suffixe;             /* longueur du suffixe d'une ligne               */
-int lg_entete ;             /* longueur de l'entete d'une ligne              */
-char *nom_fic;              /* nom contenant le chemin de l'image            */
-char path_rep[PATH_MAX];    /* chemin acces fichiers ds repertoire courant   */
-unsigned char *buf_lec;     /* buffer lecture d'une  ligne                   */
-long pt_oct;		    /* position courante dans le fichier image       */
-unsigned char *pch, *deb;   /* pointeur chaine pour transfert  buffer sortie */
-int no_oct;                 /* numero du premier octet a lire                */
-CAI_OK_KO icr;              /* code retour fonction                          */
-int taille_image;           /* Taille en octets de la zone a lire            */
-unsigned char *data_image2; /* pointeur donnees image pour inversion octets  */
-
-
-data_image2 = NULL;
-if ( (image1->TYPE_SPOT < 1) || (image1->TYPE_SPOT > 3) )
- {
-	sprintf (CAI_ERREUR,"Erreur : type d'image SPOT inconnu");
-	goto ERREUR;
- }
-/*=============================================*/
-/* TRAITEMENT D'UNE IMAGE AU FORMAT SPOT 1 A 4 */
-/*=============================================*/
-else if (image1->TYPE_SPOT == 1)
- {
-/*...........................
-  Initialisations diverses
-  ..........................*/
-  
-  lg_prefixe = 32;
-  descrip_imagery = image1->ACCES_CANAL_INT[*canal-1];
-  nb_can = image1->NB_CANAUX;
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : anomalie sur sous-echantillonnage en lecture   */
-/*****************************************************************************/
-/* Une ligne modifiee */
-  oct_lig = image1->NBOCT_PIX*(image1->NB_COL);
-              
-  /*..............................................
-        allocation de memoire pour lire une ligne image
- ............................................. */
-
-   buf_lec = (unsigned char *) calloc(oct_lig,sizeof(unsigned char));
-   if (buf_lec == NULL)
-   {     
-      sprintf(CAI_ERREUR,"ERREUR:Probleme allocation memoire\n");
-      goto ERREUR;
-   }
-   
-   else
-   {
-    /*....................
-        Initialisation
-    ......................*/
-        lig=*premiere_ligne;
-        i=1;
-        pch=data_image;
-	lg_entete=image1->POS_OCTET[*canal-1];
-
-/*.....................
-         Pour chaque ligne a lire
-  .......................................*/
-        while (i <= *nb_lig_lire)
-        {  
-/*............................................
-	    Recherche de la position courante dans le fichier
-  ............................................*/
-            pt_oct = lseek(descrip_imagery,0L,1);
-
-	    if ( pt_oct == -1 )
-    		{
-       	 	 strcpy(CAI_ERREUR,"Erreur acces au fichier contenant donnees SPOT");
-	  	 goto ERREUR;
-   		}	
-
-/*................................
-            Calcul du numero du 1er octet a lire
-	    no_oct=(*nblig-1)*lg_entete*nbcanaux+lg_entete*(canal-1)+lg_prefixe+(*canal-1)*lg_entete
-  ....................................*/
-               
-	   no_oct = (lig-1)*lg_entete*nb_can+image1->POS_OCTET[*canal-1]+lg_prefixe+(*canal-1)*lg_entete;
-	          
-/*..................................
-            Saut d'octets pour etre positionne sur la ligne a lire
-  .......................................*/
-            nb_oct=(long)(no_oct-pt_oct);
-            lseek(descrip_imagery,nb_oct,1);
-
-/*...........................................
-            lecture d'une ligne image
-  ................................................*/
-            cr_read=read(descrip_imagery,buf_lec,oct_lig);
-
-            if (cr_read==-1)
-            {             
-             strcpy(CAI_ERREUR,"Erreur lecture donnee image SPOT");
-	     goto ERREUR;
-            }
-            else
-            { 
-/*......................................
-             Sauvegarde des donnees lues en tenant compte du pas 
-             d'echantillonnage en colonne
-  ........................................*/           
-             deb = buf_lec+(*premiere_colonne-1)*image1->NBOCT_PIX;
-             j=1;
-	     while (j <= *nb_col_lire)
-	     {  
-               for (k=0;k<image1->NBOCT_PIX;k=k+1)
-                {
-                  *(pch+k)=*(deb+k);
-                }
-              j=j+1;
-              pch=pch+image1->NBOCT_PIX;
-              deb=deb+(*pas_col*image1->NBOCT_PIX);
-	      
-             }/*fin while j*/ 
-                           
-            }/*fin else*/
-	    
-          i=i+1;
-          lig=lig+(*pas_lig);
-
-        } /*fin while i*/        
-
-	free(buf_lec);
-   } /*fin else*/
-   
- 
-      
- }  /* fin TYPE IMAGE SPOT 1 a 4 */ 
-    /*===========================*/
- 
-/*=============================================*/
-/* TRAITEMENT D'UNE IMAGE AU FORMAT SPOT 5 TIF */
-/*=============================================*/
- else if (image1->TYPE_SPOT == 2)
- {
-
-	icr = cai_lecture_canal_tiff (image1, canal, 
-					premiere_ligne, premiere_colonne, 
-				 	nb_lig_lire, nb_col_lire, pas_lig, 
-					pas_col, data_image);
-	if (icr != CAI_OK)
-                 goto ERREUR;
-
- }  /* fin TYPE IMAGE SPOT 5 TIFF */ 
-    /*============================*/
- 
-/*=============================================*/
-/* TRAITEMENT D'UNE IMAGE AU FORMAT SPOT 5 BIL */
-/*=============================================*/
- else 
- {
-      
-	icr = cai_lecture_canal_bil (image1, canal, premiere_ligne, 
-				     premiere_colonne, nb_lig_lire, nb_col_lire,
-				      pas_lig, pas_col, data_image);
-	if (icr != CAI_OK)
-                 goto ERREUR;
-        else
-       {
-/* Si necessaire inversion des octets */
-          if ((image1->INV_OCTETS==1)&&(image1->NBOCT_PIX !=1))
-          {
-   	      taille_image = (*nb_lig_lire)*(*nb_col_lire)*(image1->NBOCT_PIX);
-  	      data_image2 = (unsigned char *) calloc(taille_image,
-				sizeof(unsigned char));
-
-              if (data_image2 == NULL)
-              {
-      		strcpy(CAI_ERREUR,
-			"Erreur allocation memoire dans cai_lecture_canal");
-      		goto ERREUR;
-   	      }
-      	      swab( (void*)(data_image), (void*)(data_image2), taille_image);
-	      for (i=0; i<taille_image;i++)
-	      {
-	   /*stockage dans data_image*/
-	         data_image[i] = data_image2[i];
-	       }	
-              free(data_image2);
-          }	     
-       }
-
- }  /* fin TYPE IMAGE SPOT 5 BIL */ 
-    /*===========================*/
- 
-
-/* Sortie normale */
-  return (CAI_OK);
-
-/* Sortie degradee */
-ERREUR:
-  if (descrip_imagery>0) close(descrip_imagery);
-  return(NULL);
-
-}
-
-/*
-  Fin de l'operation cai_lecture_canal_spot
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal_spot                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un canal d'une image spot                 */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ecriture_canal_spot(image1, canal,      */ 
-/* ------------------                                 premiere_ligne,        */
-/*                                                    nombre_lignes_ecrire,  */
-/*                                                    nombre_colonnes_ecrire,*/
-/*                 		                      data_image )           */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal                 (E) (int) : numero du canal a ecrire            */
-/*     premiere_ligne        (E) (int) : premiere ligne a ecrire ds l'image  */
-/*     nombre_lignes_ecrire  (E) (int) : nombre de lignes a ecrire           */
-/*     nombre_colonnes_ecrire(E) (int) : nombre de colonnes a ecrire         */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels ecris alloue et   */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_ecriture_canal_spot    (S) (CAI_OK_KO) : = CAI_KO si pb           */
-/*                                                     = CAI_OK si OK        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_ecriture_canal_spot (CAI_IMAGE *image1,
-					int *canal ,         
-					int *premiere_ligne  ,  
-					int *nombre_lignes_ecrire ,
-					int *nombre_colonnes_ecrire,
-					unsigned char *data_image )        
-
-{
-  long	cr_write;		/* code retour de write                  */
-  unsigned char *buf_lec;	/* Buffer des radiometries               */
-  int descrip_imagery;	        /* Descripteur du fichier IMAGERY        */
-  int lgrec;
-  int i_ligne, j, i;
-  CAI_OK_KO icr;
-  int nb_can, nboct_pix,nboct,compl;
-  int no_oct,nblig,nbcol;
-  long deplacement;		/* deplacement a effectuer               */
-  long	position_courante;	/* position courante dans le fichier     */
-
-/* Variables intermediaires */
-
-  unsigned char BYTE[4];
-  unsigned char COMP[5300];
-  int VAR_LONG[2];
-  short int TAB_SHORT;
-  char TAB[3];
-
-/************************************************/
-/* TRAITEMENT DIFFERENT SUIVANT LE TYPE DE SPOT */
-/************************************************/
-icr = CAI_OK;
-if (image1->TYPE_SPOT ==1)
-{
-/*--------------------*/
-/*   IMAGE SPOT1A4    */
-/*--------------------*/
-
-  /*...........................
-    Initialisations diverses
-    ..........................*/
-  
-   i_ligne = 0;   
-   lgrec =  image1->POS_OCTET[*canal-1];  /*long entete image SPOT*/
-   descrip_imagery = image1->ACCES_CANAL_INT[*canal-1];
-   nb_can = image1->NB_CANAUX;
-   nboct_pix = image1->NBOCT_PIX;
-   nboct= (*nombre_colonnes_ecrire) * nboct_pix ;
-   compl= lgrec-nboct-100;
-   for (i=0;i<5300;i++) COMP[i]=0;
-   nbcol = image1->NB_COL;
- 
-/*---------------------------------------------------------------------------*/
-/*		ECRITURE DU FICHIER IMAGERY				     */
-/*---------------------------------------------------------------------------*/
-
-  /*......................................................*/
-  /* Calcul de la position du premier octet a ecrire      */ 
-  /*......................................................*/
-
-   no_oct = lgrec+(*premiere_ligne-1)*lgrec*nb_can+lgrec*(*canal-1);
-  
-  /*......................................................*/
-  /* Recuperation de la position courante		  */
-  /*......................................................*/
-
-   position_courante = lseek ( descrip_imagery , 0L , 1 );
-
-  /*.......................................................*/
-  /* Calcul du deplacement jusqu'a la 1ere ligne a ecrire  */
-  /*.......................................................*/
-
-   deplacement = no_oct - position_courante;
-  
-  /********************************************************/
-  /* TANT QUE il y a des lignes a ecrire                  */
-  /********************************************************/
-   buf_lec=data_image;
-   while (i_ligne < (*nombre_lignes_ecrire))
-   {
-      nblig=(*premiere_ligne)+i_ligne;
- /*.............................................*/
-  /*	deplacement jusqu'a la ligne a ecrire   */
-  /*............................................*/
-
-      lseek ( descrip_imagery , deplacement , 1 ); 
-  
-  /******************************/
-  /* Pour le fichier IMAGE DATA */
-  /******************************/
-
-  /*initialisation des infos de l'entete de l'image dest*/
-      BYTE[0] = 237;
-      BYTE[1] = 237;
-      BYTE[2] = 18;
-      BYTE[3] = 18;
-      VAR_LONG[1] = lgrec;
-      VAR_LONG[0] = i_ligne+1;
-   
-  /*ecriture dans le fichier image dest*/  
-      cr_write = write ( descrip_imagery , VAR_LONG , 4); 
-      if (cr_write != 4)
-      {
-        icr = CAI_KO;
-	goto FIN;
-      }
-
-      cr_write = write ( descrip_imagery , BYTE , 4);
-      if (cr_write != 4)
-      {
-        icr = CAI_KO;
-	goto FIN;
-      }
-
-      cr_write = write ( descrip_imagery , &VAR_LONG[1] , 4);
-      if (cr_write != 4)
-      {
-        icr = CAI_KO;
-	goto FIN;
-      }
-
-   /* Ecriture des prefixes : */
-
-      cr_write = write ( descrip_imagery, &nblig, 4);
-      if (cr_write != 4)
-      {
-        icr = CAI_KO;
-	goto FIN;
-      }
-
-      strcpy ( TAB,"  ");
-      cr_write = write ( descrip_imagery , TAB, 2);
-      if (cr_write != 2)	
-      {
-        icr = CAI_KO;
-	goto FIN;
-      }
-
-      TAB_SHORT = (short)(*canal);
-
-      cr_write = write ( descrip_imagery , &TAB_SHORT  , 2); 
-      if (cr_write !=2)
-      {
-        icr = CAI_KO;
-	goto FIN;
-      }
-
-      cr_write = write ( descrip_imagery , COMP  , 12); 
-      if (cr_write != 12)
-      {
-        icr = CAI_KO;
-	goto FIN;
-      }
- 
-  /* Ecriture radiometries */
-
-      cr_write = write ( descrip_imagery , buf_lec ,nboct  );
-      if (cr_write != nboct)
-      {
-        icr = CAI_KO;
-	goto FIN;
-      }
-
-  /* ecriture des octets de completion */
-      cr_write = write ( descrip_imagery , COMP ,compl  );
-      if (cr_write != compl)
-      {
-        icr = CAI_KO;
-	goto FIN;
-      }
-  
-  /* Ecriture des suffixes : */
-
-      cr_write = write ( descrip_imagery , COMP , 24); 
-      if (cr_write != 24)
-      {
-        icr = CAI_KO;
-	goto FIN;
-      }
-
-      cr_write = write ( descrip_imagery , &nbcol , 4);
-      if (cr_write != 4)
-      {
-        icr = CAI_KO;
-	goto FIN;
-      }
-
-      cr_write = write ( descrip_imagery , COMP, 40);
-      if (cr_write != 40)
-      {
-        icr = CAI_KO;
-	goto FIN;
-      }
-
-  /********************************************************/
-  /*	mise a jour du deplacement jusqu'a la ligne	*/
-  /*	suivante                                   	*/
-  /********************************************************/
-
-      deplacement = ( nb_can - 1 ) * lgrec;
-      buf_lec = buf_lec+nboct;
-
-  /********************************************************/
-  /*	incrementation du nombre de lignes		*/
-  /********************************************************/
-
-       i_ligne++;
-
-     } /*fin while*/
-}
-else if (image1->TYPE_SPOT ==2)
-{
-/*--------------------*/
-/*   IMAGE SPOT5 TIFF */
-/*--------------------*/
-     icr = cai_ecriture_canal_tiff (image1,canal,premiere_ligne,  
-					nombre_lignes_ecrire ,
-					nombre_colonnes_ecrire,data_image);
-}
-else if (image1->TYPE_SPOT ==3)
-{
-/*--------------------*/
-/*   IMAGE SPOT5 BIL  */
-/*--------------------*/
-     icr = cai_ecriture_canal_bil(image1,canal,premiere_ligne,  
-					nombre_lignes_ecrire ,
-					nombre_colonnes_ecrire,data_image);
-
-}  
-
-FIN :
-  if (icr != CAI_OK)
-	  strcpy(CAI_ERREUR,"Erreur ecriture du fichier Imagery");
-
-  return (icr);
-
-}
-
-/* 
-  Fin de l'operation cai_ecriture_canal_spot
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_spot                                             */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format spot et de          */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_spot(typspot,image1)              */  /* ------------------                                                        */
-/*									     */
-/*     typspot     (E) (char )        : =1 spot1a4, =T spot5Tif,=B spot5Bil  */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_spot    (S) (CAI_OK_KO) :       = CAI_KO si pb              */
-/*                                              = CAI_OK si OK               */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-CAI_OK_KO  cai_ferme_spot (char typspot,CAI_IMAGE *image1)
-
-{
-
- CAI_OK_KO iret;           /* code retour de l'operation         */
- int num;                  /* descripteur du fichier a fermer    */
- int temp;                 /* variable temporaire                */
- long pt_oct;		   /* position courante ds fichier image */
-
-/*--------------------------*/
-/* Initialisations diverses */
-/*--------------------------*/
- iret=CAI_OK;
-
-/************************************************/
-/* TRAITEMENT DIFFERENT SUIVANT LE TYPE DE SPOT */
-/************************************************/
- if (typspot == '1')
- {
-/* SPOT1a4 */
-
-    num=image1->ACCES_CANAL_INT[0];
-
-/*--------------------------------------------------*/
-/* Mise a jour de l'entete si ouverture en creation */
-/*--------------------------------------------------*/
-   if (image1->MODE == CAI_ECRITURE)
-   {
-  	 pt_oct=lseek(num,0L,0);
- 
-/*........................................*/
-/* Mise a jour du niveau de pretraitement */
-/*........................................*/
-   	 pt_oct=lseek(num,53L,1); 
-   	 pt_oct = write ( num,image1->NIVEAU , 2 );
-   	 if ( pt_oct == 0 )
-    	 {
-      	  sprintf ( CAI_ERREUR ,
-       	   "Erreur : MAJ impossible entete a la fermeture fichier SPOT1a4\n");
-          iret=CAI_KO;
-          goto ERREUR;
-    	}
-
-    }
-/*.............................................
-   Fermeture du fichier qui contient tous les canaux
-  .............................................*/
-    if (num>0) close(num);
-
-    if (image1->ACCES_SPOT[0]!=0) close(image1->ACCES_SPOT[0]);
-    if (image1->ACCES_SPOT[1]!=0) close(image1->ACCES_SPOT[1]);
-   }
-   else if (typspot == 'T')
-   {
-/*   SPOT5TIF */
-     iret = cai_ferme_tiff(image1);
-   }
-   else if (typspot == 'B')
-   {
-/*   SPOT5BIL */
-     iret = cai_ferme_bil(image1);
-   }
-
-
-
-  return (iret);
-
-ERREUR:
-  return(CAI_KO);
-
-}
-
-/*
-  Fin de l'operation cai_ferme_spot
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_spot                                          */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stockee en spot et de       */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_OK_KO cai_dest_ima_spot(typspot,repertoire,nom_ima)*/ /* ------------------                                                        */
-/*     typspot     (E) (char )        : =1 spot1a4, =T spot5Tif,=B spot5Bil  */
-/*     repertoire   (E) (char *) : repertoire de l'image a detruire          */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_dest_ima_spot (S) (CAI_OK_KO) : = CAI_KO si pb                    */
-/*                                            = CAI_OK si OK                 */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_dest_ima_spot (char typspot, char *repertoire , 
-                              char *nom_ima )
-
-{
-char	nom_fic[1024];	/* nom du repertoire a detruire */
-
-/************************************************/
-/* Constitution du nom du repertoire image      */
-/************************************************/
-
-if ((long)strlen(repertoire)!= 0)
-{
-  sprintf( nom_fic, "%s/%s" ,repertoire,nom_ima);
-}
-else
-{
-  strcpy ( nom_fic , nom_ima);
-}
-
-/*****************************************************/
-/* Destruction du repertoire et de tous ses fichiers */
-/*****************************************************/
-
-     sprintf(Command,"rm -R %s",nom_fic);
-     system(Command);
-
-return (CAI_OK);
-
-}
-/*
- Fin de l'operation cai_dest_ima_spot
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_modifie_spot                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture-ecriture d'une image au format  */
-/* -----     spot et de tous les fichiers qui la composent                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_IMAGE *cai_ouvre_modifie_spot(typspot,nom_image,  */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*                                                                           */
-/*     typspot        (E) (char)   : type spot (1=1a4,b=5bil ou t=5tif)      */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_modifie_spot (S) (CAI_IMAGE *)  : = NULL si pb              */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */                                                                            /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_modifie_spot(char typspot,char *repert,
-				  char *nom_image,
-				  int  *nb_can,
-				  int  *nboct_pix,
-				  int  *nb_col,
-				  int  *nb_lig)
-
-{
-DIR *dirp;		    /* pointeur sur structure ouverture repertoire   */
-CAI_IMAGE *image1;          /* pointeur su descripteur de fichier image      */ 
-struct dirent *dp;          /* structure resultat de la fonction readdir     */
-char fichier_clefs[1024];   /* Nom du fichier des donnees auxiliaires        */
-int i,j,k;		    /* Variables de boucle                           */
-int descrip_leader;	    /* Descripteur du fichier LEADER                 */
-int descrip_imagery;	    /* Descripteur du fichier IMAGERY                */
-int descrip_volume;	    /* Descripteur du fichier VOLUME                 */
-long cr_lseek;		    /* Code retour de lseek                          */
-long cr_read;		    /* Code retour de read                           */
-long lg_saut;		    /* Nombre d'octets a sauter                      */
-int  lg_enreg,lgtemp;	    /* longueur d'un enregistrement                  */
-int NbCan;                  /* nombre de canaux de l'image                   */
-int test1,test2,test3,test4,test5;/* test sur nom de fichiers                */
-int lg_entete;	            /* longueur de l'entete fichier IMAGERY          */
-int num,trouve;		    /* variable de test                              */
-char nom_fic[1024];         /* nom du fichier en-tete		             */
-char nom_fic_canal[1024];   /* nom fichier canal dont on teste existence     */
-char nom_rep[1024];         /* nom du repertoire image SPOT		     */
-char nom_fic_ima[1024];     /* nom du fichier imagery.dat	             */
-char nom_leader[1024];      /* nom du fichier leader		             */
-char path_rep[PATH_MAX];    /* chemin acces fichiers ds repertoire courant   */
-char nom_fic_spot5[PATH_MAX];/* chemin acces fichier image tiff ou BIL SPOT5 */
-char nom_ima_spot5[PATH_MAX];/* nom du fichier image spot5                   */
-char *pch0;                  /* pointeur sur chaine de caracteres            */
-char car[2];                 /* variable de travail                          */
-int type_spot;               /* type d'image spot                            */
-char byteorder[1];           /* Ordre de codage intel (LE) ou Motorola (BE)  */
-int skipbytes;               /* Taille entete pour les fichiers BIL SPOT5    */
-CAI_OK_KO icr;
-int Trouve;
-
-
-/* Donnees auxiliaires */
-
-char TABLEAU[1][257];	/* Variable intermediaire */
-
-/* premiere variable = pour le nombre d'elements = nbre de colonnes */
-/* deuxieme element = pour la taille de l'element */
-
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-*nb_can=0;
-*nb_lig=0;
-*nb_col=0;
-*nboct_pix=1;
- type_spot=0;
- trouve=0;
- car[0]='/';
-
-#ifdef _WIN
-      car[0]='\\';
-#endif
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : initialisation de image1=NULL a l'ouverture    */
-/*****************************************************************************/
-   image1= NULL;   
-
- /*..................................
-   determination ordre de rangement 
-   des octets sur machine de travail
-  ......................................*/   
-   
-  type_machine = cai_test_pFpf();
-
-/******************************************************************************/
-/*	Determination du type d'image : SPOT 1 a 4 ou SPOT 5                  */
-/******************************************************************************/
-sprintf(nom_rep, "%s%s%s", repert,car, nom_image);
-
-dirp=opendir(nom_rep);
-
- 
-if(dirp!=NULL)
- {
-  while( ((dp=readdir(dirp))!=NULL )&& (trouve ==0))
-  {
-   
-  /*---------------------------------------------*/
-  /*  on ne doit pas tenir compte des . et ..    */
-  /*        sous le repertoire courant           */
-  /*---------------------------------------------*/
-    
-   test1 = strcmp(dp->d_name, ".");
-   test2 = strcmp(dp->d_name, "..");
-	
-   if ( (test1 != 0) && (test2 != 0) )
-{
-/*****************************************************************************/
-/* MOD : VERSION : 4.8 : FA : Blindage de la reconnaissance du fichier image */
-/*****************************************************************************/
-     
-  /*---------------------------------------------*/
-  /*  on recherche le fichier Image              */
-  /*---------------------------------------------*/
-     test3 = strncasecmp(dp->d_name,"IMAG", 4);
-     if (test3 == 0)
-     {
-        test4 = strcasecmp(dp->d_name,"imagery.tif");
-        if (test4==0)  /* format SPOT5TIF */
-        {
-                type_spot = 2;
-		sprintf (nom_fic_spot5, "%s%s%s%s%s", repert, car,
-						nom_image, car,dp->d_name);
-		sprintf (nom_ima_spot5, "%s", dp->d_name);
-		trouve=1;
-        }
-        else 
-        {
-	    test4 = strcasecmp(dp->d_name,"imagery.bil");
-            if (test4==0)  /* format SPOT5BIL */
-            {
-                type_spot = 3;
-		sprintf (nom_fic_spot5, "%s%s%s%s%s", repert, car,
-						nom_image, car,dp->d_name);
-		sprintf (nom_ima_spot5, "%s", dp->d_name);
-		trouve=1;
-             }
-	     else /* format SPOT 1 a 4*/
-             {
-		car[0] = '.';
-                pch0 = strchr (dp->d_name, car[0]);
-		if  (pch0 == NULL)
-                {
-			type_spot = 1;     /* format SPOT 1 a 4*/
-     		        sprintf(nom_fic_ima, "%s/%s/%s", repert, 
-						nom_image, dp->d_name);
-			trouve=1;
-                }
-                else if (strcasecmp(pch0,".DAT")== 0)
-                {
-			type_spot = 1;     /* format SPOT 1 a 4*/
-     		        sprintf(nom_fic_ima, "%s%s%s%s%s", repert, car,
-						nom_image, car,dp->d_name);
-			trouve=1;
-                }
-
-             }		
-        }
-     }
-    }
-  }
-  closedir(dirp); 
- }
-
-
-if (type_spot == 0)
-{
-	sprintf (CAI_ERREUR,"Erreur : type d'image SPOT inconnu");
-	goto ERREUR;
-}
-/*........................................................................*/
-/* Verication ed la coherence du type spot annonce et du type spot trouve */
-/*........................................................................*/
-	if (((typspot == '1')&&(type_spot != 1))||
-		((typspot == 'T')&&(type_spot != 2))||
-		((typspot == 'B')&&(type_spot != 3)))
-	{
-	    sprintf (CAI_ERREUR,
-			"Erreur : L'image n'est pas du type SPOT annonce");
-	    goto ERREUR;
-	}
-
-/*=============================================*/
-/* TRAITEMENT D'UNE IMAGE AU FORMAT SPOT 1 A 4 */
-/*=============================================*/
-if (type_spot == 1)
-{
-   image1= NULL;    
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-   image1->ACCES_SPOT[0]=0;
-   image1->ACCES_SPOT[1]=0;
-
-/*****************************************************************************/
-/* tests sur les retours d'allocation  memoire                               */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-       strcpy(CAI_ERREUR,
-	"Erreur allocation memoire dans cai_ouvre_modifie_image spot1a4");
-       goto ERREUR;
-    }
-
-/******************************************************************************/
-/*	Ouverture des fichiers LEADER et IMAGERY en lecture		      */
-/******************************************************************************/
-
-    sprintf(nom_rep, "%s/%s", repert, nom_image);
-
-    dirp=opendir(nom_rep);
- 
-    if(dirp!=NULL)
-    {
-      while( (dp=readdir(dirp))!=NULL )
-      {
-   
-  /*---------------------------------------------*/
-  /*  on ne doit pas tenir compte des . et ..    */
-  /*        sous le repertoire courant           */
-  /*---------------------------------------------*/
-    
-        test1 = strcmp(dp->d_name, ".");
-        test2 = strcmp(dp->d_name, "..");
-	
-        if ( (test1 != 0) && (test2 != 0) )
-        {
-     
-     	   test3 = strncasecmp(dp->d_name,"LEAD", 4);
-     	   test4 = strncasecmp(dp->d_name,"IMAG", 4); 
-     	   test5 = strncasecmp(dp->d_name,"VOL", 3);   
-    
-     /********************************************************/
-     /* tests de determination du fichier LEADER sous repert */
-     /********************************************************/
-     
-           if (test3==0)
-           {
-    		 sprintf(path_rep, "%s%s%s%s%s", repert, car,nom_image, 
-								car,dp->d_name);      
-      /*ouverture du fichier LEADER*/
-            
-      		descrip_leader = open (path_rep, O_RDWR|O_BINARY );
-      		if (descrip_leader == -1)
-      		{
-      		  strcpy(CAI_ERREUR,
-				"Erreur d'ouverture du fichier LEADER SPOT1a4");
-       		  goto ERREUR;
-      		}
-            
-        /*---------------------------------------------------------*/
-	/* Lecture de la taille d'un enregistrement dans LEADER    */
-	/*---------------------------------------------------------*/
-
-		cr_lseek = lseek ( descrip_leader , 8L , 1 );
-		if ( cr_lseek == -1 )
-		{
-		  strcpy(CAI_ERREUR,"Erreur acces au fichier leader SPOT1a4");
-		  goto ERREUR;
-		}
-
-		cr_read = read ( descrip_leader , &lg_enreg , 4 );
-		if ( cr_read == -1 )
-		{
-		  strcpy(CAI_ERREUR,"Erreur acces au fichier leader SPOT1a4");
-		  goto ERREUR;
-		}
-	        if (strcmp(type_machine,"LE")==0)
-                {
-		   swab( (void*)&lg_enreg, (void*)&lgtemp,4 );
-		   cai_inverser_tableau((short *)&lg_enreg, (short *)&lgtemp,2);
-                }
-	
-	/*------------------------------------------------------*/
-	/* Retour au debut du fichier LEADER		        */
-	/*------------------------------------------------------*/
-
-		cr_lseek = lseek ( descrip_leader , 0L , 0 );
-		if ( cr_lseek == -1 )
-		{
-		  strcpy(CAI_ERREUR,"Erreur acces au fichier leader SPOT1a4");
-		  goto ERREUR;
-		}
-
-        /*------------------------------------------------------*/
-	/* Saut de lg_enreg + 996 octets dans LEADER		*/
-	/*------------------------------------------------------*/
-
-		lg_saut = (long)(lg_enreg + 996);
-		cr_lseek = lseek ( descrip_leader , lg_saut , 0 );
-		if ( cr_lseek == -1 )
-		{
-		  strcpy(CAI_ERREUR,"Erreur acces au fichier leader SPOT1a4");
-		  goto ERREUR;
-		}
-	/*------------------------------------------------------*/
-	/* Lecture du nombre de colonnes dans LEADER	        */
-	/*------------------------------------------------------*/
-
-  		cr_read = read (descrip_leader, TABLEAU[0], 16);
-		if ( cr_read != 16 )
-		{
-		  strcpy(CAI_ERREUR,"Erreur acces au fichier leader SPOT1a4");
-		  goto ERREUR;
-		}
-        	TABLEAU[0][16] = '\0';  /* Pour ne pas lire les char suivants */
-        /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  		for (i=0;i<16;i++)
-  		{
-			TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-  		}
-
- 		sscanf ( TABLEAU[0], "%d", nb_col);
-
-	/*------------------------------------------------------*/
-	/* Lecture du nombre de lignes dans LEADER		*/
-	/*------------------------------------------------------*/
-
-  		cr_read = read (descrip_leader, TABLEAU[0], 16);
-		if ( cr_read != 16 )
-		{
-		  strcpy(CAI_ERREUR,"Erreur acces au fichier leader SPOT1a4");
-		  goto ERREUR;
-		}
-       		TABLEAU[0][16] = '\0';  /* Pour ne pas lire les char suivants */
-        /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  		for (i=0;i<16;i++)
-  		{
-			TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-  		}
-
- 		sscanf ( TABLEAU[0], "%d", nb_lig);
-
-	/*------------------------------------------------------*/
-	/* Saut de 16 octets dans LEADER			*/
-	/*------------------------------------------------------*/
-
-		cr_lseek = lseek ( descrip_leader , 16L , 1 );
-		if ( cr_lseek == -1 )
-		{
-		  strcpy(CAI_ERREUR,"Erreur acces au fichier leader SPOT1a4");
-		  goto ERREUR;
-		}
-	
-	/*------------------------------------------------------*/
-	/* Lecture du nombre de canaux	dans LEADER		*/
-	/*------------------------------------------------------*/
-
- 		cr_read = read (descrip_leader, TABLEAU[0], 16);
-		if ( cr_read != 16 )
-		{
-		  strcpy(CAI_ERREUR,"Erreur acces au fichier leader SPOT1a4");
-		  goto ERREUR;
-		}
-        	TABLEAU[0][16] = '\0';  /* Pour ne pas lire les char suivants */
-        /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  		for (i=0;i<16;i++)
-  		{
-			TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-  		}
-
- 		sscanf ( TABLEAU[0], "%d", nb_can);	
-   	   } /*fin test3 (v==0)*/
-     
-          else  if (test5==0)
-          {
-    /********************************************************/
-    /* tests de determination du fichier VOLUME sous repert */
-    /********************************************************/
-
-     		sprintf(path_rep, "%s%s%s%s%s", repert, car,nom_image, 
-							car,dp->d_name); 
-      
-      	/*ouverture du fichier VOLUME*/
-            
-      		descrip_volume = open (path_rep, O_RDWR|O_BINARY );
-      		if (descrip_volume == -1)
-      		{
-       		   strcpy(CAI_ERREUR,
-			"Erreur d'ouverture du fichier VOLUME SPOT1a4");
-       		   goto ERREUR;
-                 }
-           }
-    /********************************************************/
-    /* tests de determination du fichier IMAGERY sous repert */
-    /********************************************************/
-    	       
-           else if (test4==0)
-           {   
-       
-      /*ouverture du fichier IMAGERY*/
-      
-      		descrip_imagery = open (nom_fic_ima, O_RDWR |O_BINARY);
-      		if (descrip_imagery == -1)
-      		{
-      		  strcpy(CAI_ERREUR,
-			"Erreur d'ouverture du fichier IMAGERY SPOT1a4");
-       		  goto ERREUR;
-      		}
-                  
-      /*------------------------------------------------------*/
-      /* Lecture de la taille de l'entete dans IMAGERY	      */
-      /*------------------------------------------------------*/
-
-  		cr_lseek = lseek ( descrip_imagery , 8L , 1);
-  		if ( cr_lseek == -1 )
-  		{
-		  strcpy(CAI_ERREUR,
-			"Erreur acces au fichier contenant donnees SPOT1a4");
-		  goto ERREUR;
-  		}	
-
-  		cr_read = read ( descrip_imagery , &lg_entete , 4 );
-  		if ( cr_read == -1 )
-  		{
-			strcpy(CAI_ERREUR,
-				"Erreur acces au fichier contenant donnees SPOT");
-			goto ERREUR;
-  		}
-	        if (strcmp(type_machine,"LE")==0)
-                {
-		   swab( (void*)&lg_entete, (void*)&lgtemp,4 );
-		   cai_inverser_tableau((short *)&lg_entete, 
-				(short *)&lgtemp,2);
-                }
-      
-    	  } /*fin else if test4*/
-    	       
-        } /*fin else test1 test2*/
-   
-     }  /*fin while*/
-                   
-     closedir(dirp); 
- 
-   }  /*fin if (dirp=!NULL)*/
-
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-
-  for (i=0;i<*nb_can;i=i+1)
-  {
-    image1->ACCES_CANAL_INT[i]=descrip_imagery;
-    image1->ACCES_SPOT[0]=descrip_leader;
-    image1->ACCES_SPOT[1]=descrip_volume;
-    image1->POS_OCTET[i]=lg_entete;	   
-  }
-    image1->TYPE_SPOT = type_spot;
-    image1->NBOCT_PIX = *nboct_pix;
-      
- }  /* fin TYPE IMAGE SPOT 1 a 4 */ 
-    /*===========================*/
- 
-/*=============================================*/
-/* TRAITEMENT D'UNE IMAGE AU FORMAT SPOT 5 TIF */
-/*=============================================*/
- else if (type_spot == 2)
- {
-
-/* Ouverture de l'image */
-    image1  = cai_ouvre_modifie_image (nom_fic_spot5, "TIFF", 
-                                        nb_can,nboct_pix,nb_col,nb_lig);
-
-  if (image1 == NULL)
-  {
-    strcpy(CAI_ERREUR,
-	"Erreur acces au fichier image TIFF contenant donnees SPOT5TIF");
-	goto ERREUR;
-  }
-
-   image1->NB_CANAUX = *nb_can  ;
-   image1->NBOCT_PIX = *nboct_pix  ;
-   image1->NB_COL =  *nb_col  ;
-   image1->NB_LIG = *nb_lig ;
-   image1->TYPE_SPOT = type_spot;
-   image1->ACCES_SPOT[0]=0;
-   image1->ACCES_SPOT[1]=0;
-
-
- }  /* fin TYPE IMAGE SPOT 5 TIFF */ 
-    /*============================*/
-
-/*=============================================*/
-/* TRAITEMENT D'UNE IMAGE AU FORMAT SPOT 5 BIL */
-/*=============================================*/
- else
- {
-
-   image1= NULL;    
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-   image1->ACCES_SPOT[0]=0;
-   image1->ACCES_SPOT[1]=0;
-  
-/*****************************************************************************/
-/* tests sur les retours d'allocation  memoire                               */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-       strcpy(CAI_ERREUR,
-	"Erreur allocation memoire dans cai_ouvre_modifie_image SPOT5TIF");
-       goto ERREUR;
-    }
-
-   /* Recherche du leader Dimap */
-     dirp=opendir(nom_rep);
-     Trouve=0;
-     if(dirp!=NULL)
-     {
-        while( (dp=readdir(dirp))!=NULL )
-        {
-   
-  /*---------------------------------------------*/
-  /*  on ne doit pas tenir compte des . et ..    */
-  /*        sous le repertoire courant           */
-  /*---------------------------------------------*/
-    
-   	   test1 = strcmp(dp->d_name, ".");
-   	   test2 = strcmp(dp->d_name, "..");
-	
-  	   if ( (test1 != 0) && (test2 != 0) )
-    	   {
-     
-/*****************************************************************/
-/* MOD : VERSION : 4.7 : DM : LEAD_01.DAT  devient METADATA.DIM  */
-/*****************************************************************/     
-     	     test3 = strncasecmp(dp->d_name,"METADATA.DIM", 12);
-    
-     /**************************************************************/
-     /* tests de determination du fichier METADATA.DIM sous repert */
-     /**************************************************************/
-     	     if (test3==0)
-     	     {
-      	          sprintf(nom_leader, "%s%s%s%s%s", repert,car, nom_image, 
-							   car, dp->d_name);      
-
-/* Extraction du nombre de lig col can et nboct du fichier DIMAP */
-/*...............................................................*/
-    		   icr = cai_lire_dimensions_spot5(nom_leader,nb_can,nboct_pix ,
-                               			   nb_col , nb_lig,byteorder,
-						   &skipbytes );
-	           if (icr != CAI_OK)
-                   {
-			goto ERREUR;
-                   }
-		   else
-			Trouve=1;
-             }
-           } /*fin else test1 test2*/
-   
-         }  /*fin while*/
-                   
-         closedir(dirp); 
- 
-      }  /*fin if (dirp=!NULL)*/
-
-      if (Trouve==0)
-      {
-	  sprintf(CAI_ERREUR,
-	  "Erreur Le fichier METADATA.DIM n'existe pas ou erreur de lecture");
-	  goto ERREUR;
-       }
-
-
-/*   INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-
-     nom_fic_canal[0]='\0';
-
-     sprintf(nom_fic_canal,"%s",nom_fic_spot5);
-
-     num=open(nom_fic_canal,O_RDWR|O_BINARY,0);
-     if (num!= -1)
-     {
-       for (i=0;i<*nb_can;i=i+1)
-       {
-    		image1->ACCES_CANAL_INT[i]=num;
-           	image1->POS_OCTET[i]=(*nb_col)*i*(*nboct_pix)+skipbytes;
-        }
-        image1->TYPE_SPOT = type_spot;
-        image1->NBOCT_PIX = *nboct_pix;
-        if (byteorder[0]=='M')
-        {
-	   if (strcmp(type_machine,"BE")==0)
-		image1->INV_OCTETS=0;
-	   else
-		image1->INV_OCTETS=1;
-        }
-        else
-        {
-	   if (strcmp(type_machine,"LE")==0)
-		image1->INV_OCTETS=0;
-	   else
-		image1->INV_OCTETS=1;
-        }
-
-      }
-      else
-      {
-  	strcpy(CAI_ERREUR,
-		"Erreur ouverture fichier BIL contenant donnees SPOT5");
-	goto ERREUR;
-      }
-
- }  /* fin TYPE IMAGE SPOT 5 BIL */ 
-    /*===========================*/
-
- return(image1);
-
-
-ERREUR:
-  if (type_spot==1)
-  {
-     if (descrip_leader >0) close(descrip_leader);
-     if (descrip_imagery >0) close(descrip_imagery);
-     if (descrip_volume >0) close(descrip_volume);
-  } 
-  else 
-     icr = cai_ferme_spot(typspot,image1);
-
-  if (image1!=NULL) free(image1);
-  return(NULL);
-}
-
-/*
-  Fin de l'operation cai_ouvre_modifie_spot
-*/
-/******************************************************************************/
-/*                                                                            */
-/*OPERATION  : cai_lead4to5spot                                               */
-/*                                                                            */
-/*ROLE : Cette operation genère un fichier XML de donnees auxiliaires SPOT5   */
-/*       a partir du fichier Leader donne en parametre                        */
-/*                                                                            */
-/*CONTEXTE D'APPEL :                                                          */
-/*                                                                            */
-/*RETOUR : CAI_OK si tout va bien , CAI_KO sinon                              */
-/*                                                                            */
-/******************************************************************************/
-
-/* MOD : VERSION : 4.5 : FA : erreur d'ecriture detector id lookangle pour PAN*/
-
-CAI_OK_KO cai_lead4to5spot ( CAI_IMAGE *desc_im  , char *repertoire )
-{
-  CAI_OK_KO cr;
-  /* Variables destinees aux noms des fichiers manipules */
-  
-  FILE *des;
-  char chemin_descripteur[1024] ;
-  /* Variables destinees aux controles de la lecture des fichiers */
-  /*  int desc_lead;*/
-  
-  int BadFlag[4],Bad,type;
-  int desc_lead , desc_vol , desc_img;  
-  int detect_id;
-  int lg_enreg ;  /* longueur de l'enregistrement et retour de read */
-  long cr_lseek , lg_saut;  /* retour de lseek et saut demande                */
-  long cr_read;
-
-  int i , x , j , ind_gains;/* indices de boucle                              */
-  int can;
-  char TABLEAU[4][257];   /* variable destinee a la lecture des octets      */
-
-  /* Variables stockant les donnees auxiliaires lues */
-  
-  int nb_col , nb_lig;        /* nbre de lignes et de colonnes       */
-  int K , J , nb_bs;          /* valeurs K,J,decalage et nbre canaux */
-  int ind_max;
-  int anneecal , moiscal , jourcal;
-
-  char scene_id[17]   ;         /* identifiant de scene                */
-  char grille_ref[8]  ;        /* grille de reference K J             */
-  char shift_val[2]   ;         /* shift value                         */
-  char latc[17] , lonc[17] ;  /* lat lon au centre de scene          */
-  
-  char latse[17] , latso[17]; /* lat lon aux 4 coins                 */
-  char latne[17] , latno[17]; /*                                     */
-  char lonse[17] , lonso[17]; /*                                     */
-  char lonne[17] , lonno[17]; /*                                     */
-  char al[17] , bl[17] , cl[17];
-  char ap[17] , bp[17] , cp[17];
-
-  double lat_c  ,lon_c;       /* valeurs en double des latitudes et  */
-  double lat_se, lat_so;     /* longitudes au centre de scene et    */
-  double lon_se , lon_so;     /* 4 coins de scene                    */
-  double lat_ne , lat_no;
-  double lon_ne , lon_no;
-  double lat_nad , long_nad;
-  double yawdeg , yawrad;  
-  
-  char colc1[17] , ligc1[17]; /* Lignes et colonnes aux 4 coins       */
-  char colc2[17] , ligc2[17];
-  char colc3[17] , ligc3[17];
-  char colc4[17] , ligc4[17];
-  int nbl_c , nbc_c; /* x y ligne et colonne centre de scene */
-  int ivaleur;
-  char Valeur[17];
-
-  char decal_lat[17];       /* Decalage latitude          */
-  char decal_lon[17];       /* Decalage longitude         */
-  char longnad[17];         /* latitude nadir             */
-  char latnad[17];          /* longitude nadir            */
-  char datecalib[11];
-  char datecentre[17];
-  char datecal[9];
-  char relativedatecalib[16][20];
-  int relativeannee  , relativemois  , relativejour ;
-  char mapproj[33] ;         /* Projection cartographique  */
-  char gains_a[4][9];       /* coefficient de calibration */
-  char gains_b[4][9];       /* offset de calibration      */
-  char nb_gains[4][5];      /* nombre de gains            */
-  char date[11] ;             /* date  d'acquisition        */
-  char stepnum[5] ;
-  char heure[10] ;           /* heure d'acquisition        */
-  char coupled[3]  , sec[3] ;     /* minute , seconde           */
-  char niv_trait[17] ;       /* niveau de traitement       */
-  char direct_playback[17] ;
-  char compression[17] ;
-  char instrument[6] ;      /* instrument HRV             */
-  char time_angle[73][27];
-  char timeyaw[3][27];
-  float gain_value[16][1500];
-  float dark_value[16][1500];
-  float anglin ;
-  short int val,valtemp ;
-  float val_float ;
-  int type_gain , ind_gain_val  , ind_dark_val ;
-  int  instrument_index  , ind_tab_gain  ;
-  int line[73] , line_raw[2] ;
-  char yaw[73][20] ,pitch[73][20] ,roll[73][20] ;
-  char yaw_angle[2][20] , pitch_angle[2][20] , roll_angle[2][20];
-  double psi_x_first[3] ,psi_y_first[3] ,psi_x_last[3] ,psi_y_last[3];
-  double psideg  , periodeligne ;
-  char lineperiod[13] , outofrange[3] ;
-  char ins_ind[2] ;
-  char sat_ind[2] ;
-  char mode_spect[17];      /* mode spectral              */
-  char satellite[5];       /* nom du satellite           */
-  int satellite_index ;
-  char revolution[17];      /* revolution number          */
-  char band_layout[17];
-  char spect_ind[17];       /* indicateur de bandes       */
-  char sat_alt[9];          /* altitude du satellite      */
-  char nb_leader[9];        /* nb enregistrements leader  */
-  char lg_leader[9] ;        /* lg enregistrements leader  */
-  char nb_imagery[9] ;       /* nb enregistrements imagery */
-  char lg_imagery[9] ;       /* lg enregistrements imagery */
-  char nbima_imagery[9] ;    /* nb enregist imagery image  */
-  char nb_trailer[9] ;       /* nb enregistrements trailer */
-  char lg_trailer[9] ;       /* lg enregistrements trailer */
-  char fpixraw[9] , flineraw[9] , fpix1b[9] , fline1b[9];
-  char taille_pixlig[17];   /* taille pixel sur les lignes   */
-  char taille_pixcol[17];   /* taille pixel sur les colonnes */
-  char x0[33] , y0[33];     /* coordonnees en pixel 1,1      */
-  char lgx[17] , lgy [17];  /* longueur image en X et Y      */
-  char im[17] , deltai[17] , jm[17] ,deltaj[17];
-  char lm[17] , deltal[17] , pm[17] , deltap[17];
-  char valeur[100];
-  char prod_info[31];
-  char mean[9];
-  char lowtresh[4][9];
-  char uptresh[4][9];
-  char firstwave[4][20];
-  double unwave ;
-  double wavelong ;
-  char wavelengthstep[4][20] , solar_irradiance[4][5];
-  char spectral_sensitivitie[4][64][6];
-  char shval[9] , segmentstart[9] , scenestart[9] , segmentend[9];
-  char resampling[3];
-  int utdatej , utdates;
-  char p7[17] ,p8[17] ,p9[17] ,p10[17] ;
-  char axis[13] , ascension[13] , latarg[13];
-  char ex[17] , ey[17] , inclin[13];
-  char coeffi[17] , ai[17] , bi[17] , ci[17] , di[17] , ei[17];
-  char coeffj[17] , aj[17] , bj[17] , cj[17];
-  char coeff_a[17] , aa[17] , ba[17] , ca[17] , da[17];
-  char coeff_b[17] , ab[17] , bb[17] , cb[17] , db[17] , eb[17];
-  char coeff_l[17] , a_l[17] , b_l[17] , d_l[17] , e_l[17] , c_l[17];
-  char coeff_p[17] , a_p[17] , b_p[17] , c_p[17];
-  char alswir[17] , blswir[17] , clswir[17] , apswir[17] , bpswir[17];
-  char cpswir[17],car[2];
-  int jourjul;
-  int datejul;
-  char clockvalue[13] ;
-  char clockperiod[13] ;
-  double period  , pico ;
-  char boardtime[13];
-  double X_loc[9] , Y_loc[9] , Z_loc[9];
-  double X_vel[9] , Y_vel[9] , Z_vel[9];
-  char time[9][28];
-  char dorisused[3];
-  char time_scenecenter[31];
-  char timecenter[18];
-  char angle_in[17] , angle_o[17]; /* angles incidence et orientation Nord */
-  char sunazim[17], sunelev[17];   /* azimut et elevation solaire          */
-  char *profile;
-
-  int signe , swir ;                /* signe des lat lon ( +1 ou -1 )       */
-  char mirror_step[17] ;     /* nombre de pas mirroir                */
-  int nbpix ;                /* nombre de pixels */
-  char satn , insn;
-  char insid, codecapt;
-  char a0 , a1 , m0 , m1 , j0 , j1 , h0 , h1 , mi0 , mi1 , s0 , s1 ;
-  char aprim0 , aprim1 , mprim0 , mprim1 , jprim0 , jprim1 , hprim0 , hprim1 , miprim0 , miprim1 , sprim0 , sprim1 ;
-  char datasetname[40];
-  char datasetname_centre[40];
-  char dsetname[25];
-  char dsetname_centre[25];
-  char toto[32] , coeffa[17] , coeffb[17], coeffc[17] , coeffd[17];
-  char coeffe[17] , coefff[17] , coeffap[17] , coeffbp[17] ;
-  char coeffcp[17] , coeffdp[17] , coeffep[17] , coefffp[17];
-  char rlma[17] , rlmb[17], rlmc[17] , rlmd[17];
-  char rlme[17] , rlmf[17] , rlmap[17] , rlmbp[17] ;
-  char rlmcp[17] , rlmdp[17] , rlmep[17] , rlmfp[17];
-  long jours[9];
-  long jourscenter ;
-  int nb_passage = 0;
-  double secondescenter ;
-  double secondes[9];
-  double milisecondes[9];
-  
-  /* variables destinees a lire dans le voldir */
-
-  char job_id[17] , produser[13] , product_type[17];
-  char software_name[13] , processing_center[9];
-  int product_sec , product_min , product_heure;
-  int product_annee , product_jour , product_mois;
-  char copyright[100]  , source_description[200];
-
-  /* variables destinees a lire dans le imagery */
-
-  unsigned char bad_line[10000][4];
-
-/* Initialisations diverses */
-/*--------------------------*/
-  for (i=0 ; i<16 ; i++)
-  {
-     for (j=0 ; j<1500 ; j++)
-     {
-	gain_value[i][j] = 0.0;
-	dark_value[i][j] = 0.0;
-     }
-  }
-  signe=1;
-  desc_lead = desc_im->ACCES_SPOT[0];
-  desc_vol = desc_im->ACCES_SPOT[1];
-  desc_img = desc_im->ACCES_CANAL_INT[0];
-
-      car[0]='/';
-
-#ifdef _WIN
-      car[0]='\\';
-#endif
-
-
-  /* construction du chemin complet du fichier xml a generer */
-  sprintf ( chemin_descripteur , "%s%sSPOT_DIMAP.xml" , repertoire, car);
-  
-  /********************************************************/
-  /*             LECTURE DU FICHIER LEADER                */
-  /********************************************************/
- 
-  cr_lseek = lseek ( desc_lead , 8L , 1 );
-  
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-  
-  /*------------------------------------------------------*/
-  /*   lecture de la longueur de l'enregistrement 	  */
-  /*------------------------------------------------------*/
-  lg_enreg = 0;
-  cr_read = read ( desc_lead , &lg_enreg , 4 );
-  
-  if ( cr_read == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_read );
-    goto ERREUR;
-    }
-  /*------------------------------------------------------*/
-  /* Retour au debut du fichier		  		  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 0L , 0 );
-
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*------------------------------------------------------*/
-  /* Saut de 52 octets                                    */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 52 , SEEK_SET );
-
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /********************************************************/
-  /*           LEADER FILE DESCRIPTOR RECORD              */
-  /********************************************************/
-
-  /*------------------------------------------------------*/
-  /* Lecture du code capteur             		  */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 13 );
-  
-  if ( cr_read != 13 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-  TABLEAU[0][13] = '\0';
-  
-  for ( i = 0 ; i < 13 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  codecapt = '\0';
-  toto[0] ='\0';
-  sscanf ( TABLEAU[0] , "%c%s" , &codecapt , toto );
-
-  /*------------------------------------------------------*/
-  /* Retour au debut du fichier		  		  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 0L , 0 );
-
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*------------------------------------------------------*/
-  /* Saut de lg_enreg + 20 octets 			  */
-  /*------------------------------------------------------*/
-
-  lg_saut = (long)( 3960 + 20);
-  
-  cr_lseek = lseek ( desc_lead , lg_saut , SEEK_SET );
-
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /********************************************************/
-  /*                LEADER HEADER RECORD                  */
-  /********************************************************/
-
-  /*------------------------------------------------------*/
-  /* Lecture des coeeficients K et J  			  */
-  /*------------------------------------------------------*/
-  
-  for ( x = 0 ; x < 2 ; x++ )
-    {
-    cr_read = read ( desc_lead, TABLEAU[x], 3 );
-    if ( cr_read != 3 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-
-    TABLEAU[x][3] = '\0';
-    
-    for ( i = 0 ; i < 3 ; i++ )
-      {
-      TABLEAU[x][i] = TABLEAU[x][i] & 0177;
-      }
-    }
-  K=0;
-  J=0;
-  sscanf ( TABLEAU[0], "%d", &K );
-  sscanf ( TABLEAU[1], "%d", &J );
-  sprintf ( grille_ref , "%.3d%.3d" , K , J );
-
-  /*------------------------------------------------------*/
-  /* Lecture de shift value        			  */
-  /*------------------------------------------------------*/
-  
-  /* sauter le slash */
-  
-  cr_lseek = lseek ( desc_lead , 1 , SEEK_CUR );
-
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-  
-  cr_read = read ( desc_lead , TABLEAU[0] , 1 );
-
-  if ( cr_read != 1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-  TABLEAU[0][1] = '\0';
-    
-  for ( i = 0 ; i < 1 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  shift_val[0]='\0';
-  sscanf ( TABLEAU[0] , "%s" , shift_val );
-
-  /*------------------------------------------------------*/
-  /* Saut de 8 octets 			                  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 8 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*------------------------------------------------------*/
-  /* Lecture de l'identifiant de scene    		  */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
-  
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-  TABLEAU[0][16] = '\0';
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  
-  sprintf ( scene_id , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , scene_id );
-
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : FA :  Prise en compte date de la scene non shiftée */
-/****************************************************************************/  strcpy ( datecentre , scene_id );
-
-  /*------------------------------------------------------*/
-  /* Lecture de shift along track ( decal_lat )		  */
-  /*------------------------------------------------------*/
-
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
-  
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-  TABLEAU[0][16] = '\0';
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( decal_lat , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , decal_lat );
-
-  /*------------------------------------------------------*/
-  /* Lecture de shift along track ( decal_lon )		  */
-  /*------------------------------------------------------*/
-
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
-  
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-  TABLEAU[0][16] = '\0';
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( decal_lon, "\0" );
-  sscanf ( TABLEAU[0] , "%s" , decal_lon );
-
-  /*------------------------------------------------------*/
-  /* Lecture de la latitude du centre de la scene         */
-  /*------------------------------------------------------*/
-
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( latc , "\0" );
-  lat_c=0;
-  sscanf ( TABLEAU[0] , "%s" , latc );
-  cai_DMS_To_Float ( latc , &lat_c );
-
-  /*------------------------------------------------------*/
-  /* Lecture de la longitude du centre de la scene        */
-  /*------------------------------------------------------*/
-
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  sprintf ( lonc , "\0" );
-  lon_c=0;
-  sscanf ( TABLEAU[0] , "%s" , lonc );
-  cai_DMS_To_Float ( lonc , &lon_c );
-  
-  /*------------------------------------------------------*/
-  /* lecture des coordonnees lignes au centre de scene    */
-  /*------------------------------------------------------*/
-
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  nbc_c = 0;
-  sscanf ( TABLEAU[0] , "%d" , &nbc_c );
-  
-  /*------------------------------------------------------*/
-  /* lecture des coordonnees colonnes au centre de scene  */
-  /*------------------------------------------------------*/
-
-  cr_read = read ( desc_lead , TABLEAU[0] , 16 );
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  nbl_c = 0;
-  sscanf ( TABLEAU[0] , "%d" , &nbl_c );
-  /*------------------------------------------------------*/
-  /* Lecture de la latitude NO                            */  
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  sprintf ( latno , "\0" );
-  
-  lat_no=0;
-  
-  sscanf ( TABLEAU[0] , "%s" , latno );
-  cai_DMS_To_Float ( latno , &lat_no );
-
-  /*------------------------------------------------------*/
-  /* Lecture de la longitude NO                           */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( lonno , "\0" );
-  lon_no=0;
-  sscanf ( TABLEAU[0] , "%s" , lonno );
-  cai_DMS_To_Float ( lonno , &lon_no );
-  
-  /*------------------------------------------------------*/
-  /* Lecture ligne coin NO                                */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( ligc1 , "\0" );
-  sscanf ( TABLEAU[0] , "%s" ,ligc1  );
-
-  /*------------------------------------------------------*/
-  /* Lecture colonne coin NO                              */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( colc1 , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , colc1 );
-
-  /*------------------------------------------------------*/
-  /* Lecture de la latitude NE                            */  
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( latne , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , latne );
-  cai_DMS_To_Float ( latne , &lat_ne );
-  
-  /*------------------------------------------------------*/
-  /* Lecture de la longitude NE                           */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( lonne , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , lonne );
-  cai_DMS_To_Float ( lonne , &lon_ne );
-  
-  /*------------------------------------------------------*/
-  /* Lecture ligne coin NE                                */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( ligc2 , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , ligc2 );
-
-  /*------------------------------------------------------*/
-  /* Lecture colonne coin NE                              */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( colc2 , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , colc2 );
-
-  /*------------------------------------------------------*/
-  /* Lecture de la latitude SO                            */  
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( latso , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , latso );
-  cai_DMS_To_Float ( latso , &lat_so );
-
-  /*------------------------------------------------------*/
-  /* Lecture de la longitude SO                           */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';  
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( lonso , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , lonso );
-  cai_DMS_To_Float ( lonso , &lon_so );
-  
-  /*------------------------------------------------------*/
-  /* Lecture ligne coin SO                                */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( ligc3 , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , ligc3 );
-
-  /*------------------------------------------------------*/
-  /* Lecture colonne coin SO                              */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( colc3 , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , colc3 );
-
-  /*------------------------------------------------------*/
-  /* Lecture de la latitude SE                            */  
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( latse , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , latse );
-  cai_DMS_To_Float ( latse , &lat_se );
-  
-  /*------------------------------------------------------*/
-  /* Lecture de la longitude SE                           */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  sprintf ( lonse , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , lonse );
-  cai_DMS_To_Float ( lonse , &lon_se );
-
-  /*------------------------------------------------------*/
-  /* Lecture ligne coin SE                                */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf (ligc4 , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , ligc4 );
-
-  /*------------------------------------------------------*/
-  /* Lecture colonne coin SE                              */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( colc4 , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , colc4 );
-  
-  /*------------------------------------------------------*/
-  /* Lecture latitude nadir centre                        */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( latnad , "\0" );
-  lat_nad = 0;
-  sscanf ( TABLEAU[0] , "%s" , latnad );
-  cai_DMS_To_Float ( latnad , &lat_nad );
-  
-  /*------------------------------------------------------*/
-  /* Lecture longitude nadir centre                       */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( longnad , "\0" );
-  long_nad = 0;
-  sscanf ( TABLEAU[0] , "%s" , longnad );
-  cai_DMS_To_Float ( longnad , &long_nad );
-  
-  /*------------------------------------------------------*/
-  /* Lecture de l'angle d'orientation                     */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead , TABLEAU[0] , 16 );
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0'; 
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( angle_o , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , angle_o );
-
-  /*------------------------------------------------------*/
-  /* Lecture de l'angle d'incidence                       */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead , TABLEAU[0] , 16 );
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';  /* Pour ne pas lire les char suivants */
-  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( angle_in , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , angle_in );
-
-  /*------------------------------------------------------*/
-  /* Lecture de l'azimut solaire                          */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( sunazim , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , sunazim );
-
-  /*------------------------------------------------------*/
-  /* Lecture de l'elevation solaire                       */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( sunelev , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , sunelev );
-
-  /*------------------------------------------------------*/
-  /* Lecture de l'altitude du satellite                   */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 8 );
-
-  if ( cr_read != 8 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( sat_alt , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , sat_alt );
-
-  /*------------------------------------------------------*/
-  /* Saut de 72 octets 			                  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 72 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*------------------------------------------------------*/
-  /* Lecture de la date                                   */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 8 );
-
-  if ( cr_read != 8 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  date[0]='\0';
-  mi0='\0';
-  mi1='\0';
-  a0='\0';
-  a1='\0';
-  m0='\0';
-  m1='\0';
-  j0='\0';
-  j1='\0';
-  miprim0='\0';
-  miprim1='\0';
-  aprim0='\0';
-  aprim1='\0';
-  mprim0='\0';
-  mprim1='\0';
-  jprim0='\0';
-  jprim1='\0';
-
-  sscanf ( TABLEAU[0] , "%s" , date );
-  sscanf ( date , "%c%c%c%c%c%c%c%c" , &mi0 , &mi1 , &a0 ,
-           &a1 , &m0 , &m1 , &j0 , &j1 );
-  sprintf ( date , "%c%c%c%c-%c%c-%c%c" , mi0 , mi1 , a0 , a1 , m0 , m1 , j0 , j1 );
-
-  /*------------------------------------------------------*/
-  /* Lecture de l'heure                                   */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 9 );
-
-  if ( cr_read != 9 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][9] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 9 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  heure[0]='\0';
-  toto[0]='\0';
-  h0='\0';
-  h1='\0';
-  insid='\0';
-  insn='\0';
-  s1='\0';
-  s0='\0';
-  hprim0='\0';
-  hprim1='\0';
-  sprim1='\0';
-  sprim0='\0';
-
-  satn='\0';
-  sscanf ( TABLEAU[0] , "%s" , heure );
-
-  sscanf ( heure , "%c%c%c%c%c%c%s" , &h0 , &h1 , &mi0 , &mi1 , &s0 , &s1 , toto );
-  
-  sprintf ( heure , "%c%c:%c%c:%c%c" , h0 , h1 , mi0 , mi1 , s0 , s1 );
-  sscanf ( scene_id , "S%c%c%c%s" , &satn , &insid , &insn ,toto );
-
-  sprintf ( datasetname , "%c %.3d-%.3d %c%c/%c%c/%c%c %c%c:%c%c:%c%c %c %c\0" ,
-            satn , K , J , a0 , a1 , m0 , m1 , j0 , j1 , h0 ,
-	    h1 , mi0 , mi1 , s0 , s1 , insn , codecapt );
-
-  sscanf ( &datecentre[15] , "%c" , &sprim1 );
-  datecentre[15] = '\0' ;
-  sscanf ( &datecentre[14] , "%c" , &sprim0 );
-  datecentre[14] = '\0' ;
-  sscanf ( &datecentre[13] , "%c" , &miprim1 );
-  datecentre[13] = '\0' ;
-  sscanf ( &datecentre[12] , "%c" , &miprim0 );
-  datecentre[12] = '\0' ;
-  sscanf ( &datecentre[11] , "%c" , &hprim1 );
-  datecentre[11] = '\0' ;
-  sscanf ( &datecentre[10] , "%c" , &hprim0 );
-  datecentre[10] = '\0' ;
-  sscanf ( &datecentre[9] , "%c" , &jprim1 );
-  datecentre[9] = '\0' ;
-  sscanf ( &datecentre[8] , "%c" , &jprim0 );
-  datecentre[8] = '\0' ;
-  sscanf ( &datecentre[7] , "%c" , &mprim1 );
-  datecentre[7] = '\0' ;
-  sscanf ( &datecentre[6] , "%c" , &mprim0 );
-  datecentre[6] = '\0' ;
-  sscanf ( &datecentre[5] , "%c" , &aprim1 );
-  datecentre[5] = '\0' ;
-  sscanf ( &datecentre[4] , "%c" , &aprim0 );
-  datecentre[4] = '\0' ;
-/*****************************************************************************/ 
-/* MOD : VERSION : 4.8 : FA : Rajout SCENE au début de chaine DATASET_NAME   */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM : DIMAP Ajouter un espace entre SCENE et numsat  */
-/*                            dans le DATASET_NAME                           */
-/*****************************************************************************/
-  sprintf ( datasetname_centre , "SCENE %c %.3d-%.3d %c%c/%c%c/%c%c %c%c:%c%c:%c%c %c %c\0" ,
-            satn , K , J , aprim0 , aprim1 , mprim0 , mprim1 , jprim0 , jprim1 ,hprim0 ,
-	    hprim1 , miprim0 , miprim1 , sprim0 , sprim1 , insn , codecapt );
-  sprintf ( dsetname , "%c%.3d%.3d%c%c%c%c%c%c%c%c%c%c%c%c%c%c\0" ,
-            satn , K , J , a0 , a1 , m0 , m1 , j0 , j1 , h0 ,
-	    h1 , mi0 , mi1 , s0 , s1 , insn , codecapt );
-
-  sprintf ( dsetname_centre , "%c%.3d%.3d%c%c%c%c%c%c%c%c%c%c%c%c%c%c\0" ,
-            satn , K , J , aprim0 , aprim1 , mprim0 , mprim1 , jprim0 , jprim1 , hprim0 ,
-            hprim1 , miprim0 , miprim1 , sprim0 , sprim1 , insn , codecapt );
-
-
-  /*------------------------------------------------------*/
-  /* Saut de 15 octets 			                  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 15 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*------------------------------------------------------*/
-  /* Lecture du nom de satellite                          */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 4);
-
-  if ( cr_read != 4 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][4] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 4 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( satellite , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , satellite );
-  
-  /*------------------------------------------------------*/
-  /* Lecture du num de satellite                          */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 12 );
-
-  if ( cr_read != 12 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  satellite_index = 0;
-  sscanf ( TABLEAU[0] ,"%d" , &satellite_index ); 
-
-  /*------------------------------------------------------*/
-  /* Lecture du nom d'instrument                          */
-  /*------------------------------------------------------*/
-  
-  if ( satellite_index != 4 )
-    {
-    cr_read = read ( desc_lead, TABLEAU[0], 3 );
-
-    if ( cr_read != 3 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-
-    TABLEAU[0][3] = '\0';
-  
-    /* Pour ne pas lire les char suivants */  
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-
-    for ( i = 0 ; i < 3 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-   sprintf ( instrument , "\0" );
-   sscanf ( TABLEAU[0] , "%s" , instrument );
-    
-    cr_read = read ( desc_lead, TABLEAU[0], 13 );
-
-    if ( cr_read != 13 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-
-    TABLEAU[0][13] = '\0';
-  
-    /* Pour ne pas lire les char suivants */  
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-
-    for ( i = 0 ; i < 13 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-     instrument_index=0;      
-     sscanf ( TABLEAU[0] , "%d" , &instrument_index );      
-    }
-  else
-    {
-    cr_read = read ( desc_lead, TABLEAU[0], 5 );
-
-    if ( cr_read != 5 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-
-    TABLEAU[0][5] = '\0';
-  
-    /* Pour ne pas lire les char suivants */  
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-
-    for ( i = 0 ; i < 5 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-     
-     sprintf ( instrument , "\0" );   
-     sscanf ( TABLEAU[0] , "%s" , instrument );
-    
-    cr_read = read ( desc_lead, TABLEAU[0], 11 );
-
-    if ( cr_read != 11 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-
-    TABLEAU[0][11] = '\0';
-  
-    /* Pour ne pas lire les char suivants */  
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-
-    for ( i = 0 ; i < 11 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-      instrument_index=0;      
-     sscanf ( TABLEAU[0] , "%d" , &instrument_index );      
-    }
-    
-  /*------------------------------------------------------*/
-  /* Lecture du mode spectral                             */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-    
-    sprintf ( mode_spect , "\0" );
-    sscanf ( TABLEAU[0] , "%s" , mode_spect );
-
-  /*------------------------------------------------------*/
-  /* Lecture du revolution number                         */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( revolution , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , revolution );
-
-  /*------------------------------------------------------*/
-  /* Lecture du nombre de pas mirroir                     */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( mirror_step , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , mirror_step );
-
-  /*------------------------------------------------------*/
-  /* Lecture du mode de compression                       */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( compression , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , compression );
-
-  /*------------------------------------------------------*/
-  /* Lecture du direct playback                           */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( direct_playback , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , direct_playback );
-
-  /*------------------------------------------------------*/
-  /* Lecture du nombre_de_gains                           */
-  /*------------------------------------------------------*/
-
-  for ( j=0  ; j < 4 ; j++ )
-  {
-    cr_read = read ( desc_lead, TABLEAU[0], 4 );
-
-    if ( cr_read != 4 )
-    {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-    }
-
-    TABLEAU[0][4] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-    for ( i=0  ; i < 4 ; i++ )
-    {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-    sprintf(nb_gains[j],"\0");
-    sscanf ( TABLEAU[0] , "%s" , nb_gains[j] );
-  }
-
-  /*------------------------------------------------------*/
-  /* Lecture du step_num                                  */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 4 );
-
-  if ( cr_read != 4 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][4] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i = 0 ; i < 4 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  sprintf ( stepnum , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , stepnum );
-
-  /*------------------------------------------------------*/
-  /* Lecture du coupled mode                              */
-  /*------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 2 );
-
-  if ( cr_read != 2 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][2] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i=0  ; i < 2 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  sprintf ( coupled , "\0" );
- 
-  sscanf ( TABLEAU[0] , "%s" , coupled );
-
-  /*------------------------------------------------------*/
-  /* Saut de 250 octets			                  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 250 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*------------------------------------------------------*/
-  /* Lecture du nombre de colonnes			  */
-  /*------------------------------------------------------*/
-
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
-
-  if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */  
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-
-  for ( i=0  ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  nb_col=0;
-  sscanf ( TABLEAU[0], "%d", &nb_col );
-
-  /*------------------------------------------------------*/
-  /* Lecture du nombre de lignes			  */
-  /*------------------------------------------------------*/
-
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i=0  ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  nb_lig=0;
-  sscanf ( TABLEAU[0], "%d", &nb_lig );
-
-  /*------------------------------------------------------*/
-  /* Lecture de bands layout                              */
-  /*------------------------------------------------------*/
-
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i=0  ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  sprintf ( band_layout, "\0" );
-  sscanf ( TABLEAU[0] , "%s" , band_layout );
-  
-  /*------------------------------------------------------*/
-  /* Lecture du nombre de Bandes spectrales               */
-  /*------------------------------------------------------*/
-
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  nb_bs=0;
-  sscanf ( TABLEAU[0], "%d", &nb_bs );
-  
-  /*------------------------------------------------------*/
-  /* Lecture indicateur de Bandes spectrales              */
-  /*------------------------------------------------------*/
-
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-   sprintf ( spect_ind , "\0" );
-  strcpy ( spect_ind , TABLEAU[0] );
-  
-  /*------------------------------------------------------*/
-  /* Saut de 240 octets                                  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 240 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture du niveau de traitement                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  sprintf ( niv_trait , "\0" );
-
-  sscanf ( TABLEAU[0] , "%s" , niv_trait );
-  if (strlen(niv_trait)==0) sprintf ( niv_trait , "0" );
-
-  /*------------------------------------------------------*/
-  /* Saut de 32 octets                                    */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 32 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
- 
-  /*-------------------------------------------------------*/
-  /* Lecture de resampling method                          */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( resampling , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , resampling );
-
-  /*-------------------------------------------------------*/
-  /* Lecture de la taille des pixels sur les lignes        */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( taille_pixlig , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , taille_pixlig );
-
-  /*-------------------------------------------------------*/
-  /* Lecture de la taille des pixels sur les colonnes      */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( taille_pixcol , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , taille_pixcol );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture de la projection cartographique               */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 32);
- 
-   if ( cr_read != 32 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-   goto ERREUR;
-    }
-    
-  TABLEAU[0][32] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 32 ; i++)
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( mapproj , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , mapproj );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture longueur image en Y                           */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( lgy , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , lgy );
-
-  /*-------------------------------------------------------*/
-  /* Lecture longueur image en X                           */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16);
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( lgx , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , lgx );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture Mean_Rectification_Elevation (2A)             */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 9 );
- 
-   if ( cr_read != 9 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][9] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 9 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( mean , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , mean );
-  
-  /*------------------------------------------------------*/
-  /* Saut de 143 octets                                    */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 143 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture coordonnees X pixel 1,1                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 12);
- 
-   if ( cr_read != 12 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( x0 , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , x0 );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coordonnees Y pixel 1,1                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 12);
- 
-   if ( cr_read != 12 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( y0, "\0" );
-  sscanf ( TABLEAU[0] , "%s" , y0 );
-  
-  /*------------------------------------------------------*/
-  /* Saut de 96 octets                                    */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 96 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture date de calibration                           */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead , TABLEAU[0] , 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  sprintf ( datecal , "\0" );
-
-  jourcal=0;
-  moiscal=0;
-  anneecal=0;
-  sscanf ( TABLEAU[0] , "%s" , datecal );
-  if (strlen(datecal) != 0)
-  {
-    sscanf ( &datecal[6] , "%d" , &jourcal );
-    datecal[6] = '\0';
-    sscanf ( &datecal[4] , "%d" , &moiscal );
-
-    datecal[4] = '\0';
-    sscanf ( datecal, "%d" , &anneecal );
-  }
-  sprintf ( datecalib , "%.4d-%.2d-%.2d" , anneecal , moiscal , jourcal );
-
-  /*-------------------------------------------------------*/
-  /* Lecture coeff de calibration                          */
-  /*-------------------------------------------------------*/
-  
-  for ( j = 0; j < 4 ; j++ )
-  {
-    cr_read = read ( desc_lead , TABLEAU[j] , 8 );
- 
-     if ( cr_read != 8 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[j][8] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 8 ; i++ )
-      {
-      TABLEAU[j][i] = TABLEAU[j][i] & 0177;
-      }
-      sprintf(gains_a[j],"\0");
-
-    sscanf ( TABLEAU[j] , "%s" , gains_a[j] );
-  }
-      
-  /*------------------------------------------------------*/
-  /* Saut de 480 octets                                   */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 480 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture offset de calibration                         */
-  /*-------------------------------------------------------*/
-  
-  for ( j = 0; j < 4 ; j++ )
-  {
-    cr_read = read ( desc_lead, TABLEAU[j], 8 );
- 
-    if ( cr_read != 8 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[j][8] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 8 ; i++ )
-      {
-      TABLEAU[j][i] = TABLEAU[j][i] & 0177;
-      }
-   
-    sprintf ( gains_b[j] , "\0" );
-
-    sscanf ( TABLEAU[j] , "%s" , gains_b[j] );
-  }
-      
-  /*------------------------------------------------------*/
-  /* Saut de 1191 octets                                  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 608 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture shift val                                     */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-   if ( cr_read != 8 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( shval , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , shval );
-
-  /*------------------------------------------------------*/
-  /* Saut de 100 octets                                   */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 100 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture SWIR REGISTRATION FLAG                        */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  swir=0;
-  sscanf ( TABLEAU[0] , "%d" , &swir );
-
-  /*------------------------------------------------------*/
-  /* Saut de 459 octets                                   */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 459 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture coeff a                                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  sprintf ( coeffa , "\0" );
-
-  sscanf ( TABLEAU[0] , "%s" , coeffa );
-
-  /*-------------------------------------------------------*/
-  /* Lecture coeff b                                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( coeffb , "\0" ) ;
-
-  sscanf ( TABLEAU[0] , "%s" , coeffb );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff c                                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-   
-  sprintf ( coeffc , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , coeffc );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff d                                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-   
-   sprintf ( coeffd , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , coeffd );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff e                                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-   
-  sprintf ( coeffe , "\0" );
-
-  sscanf ( TABLEAU[0] , "%s" , coeffe );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff f                                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-   
-  sprintf ( coefff , "\0" );
-
-  sscanf ( TABLEAU[0] , "%s" , coefff );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff ap                                      */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( coeffap , "\0" );
-
-  sscanf ( TABLEAU[0] , "%s" , coeffap );
-
-  /*-------------------------------------------------------*/
-  /* Lecture coeff bp                                      */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( coeffbp , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , coeffbp );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff cp                                      */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-   
-  sprintf ( coeffcp , "\0" ) ;
-
-  sscanf ( TABLEAU[0] , "%s" , coeffcp );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff dp                                      */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( coeffdp , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , coeffdp );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff ep                                      */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( coeffep , "\0" );
-
-  sscanf ( TABLEAU[0] , "%s" , coeffep );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff fp                                      */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( coefffp , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , coefffp );
-  
-  /*------------------------------------------------------*/
-  /* Saut de 269 octets                                   */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 269 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /********************************************************/
-  /*         LEADER EPHEMERIS/ATTITUDE RECORD             */
-  /********************************************************/
-
-  /*------------------------------------------------------*/
-  /* Saut de 3384 octets                                  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 20 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     printf ( " erreur69\n" );
-    goto ERREUR;
-    }
-  
-  for ( j = 0; j < 9 ; j++ )
-    {
-    /*-------------------------------------------------------*/
-    /* Lecture X , Y , Z location points                     */
-    /*-------------------------------------------------------*/
-  
-    cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-     if ( cr_read != 12 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][12] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 12 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-
-    X_loc[j] =0.0;
-    sscanf ( TABLEAU[0] , "%lf" , &X_loc[j] );
-
-    cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-     if ( cr_read != 12 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][12] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 12 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-
-    Y_loc[j]= 0.0;
-    sscanf ( TABLEAU[0] , "%lf" , &Y_loc[j] );
-    
-    cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-     if ( cr_read != 12 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][12]='\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 12 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-
-    Z_loc[j] =0.0;
-    sscanf ( TABLEAU[0] , "%lf" , &Z_loc[j] );
-  
-    cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-     if ( cr_read != 12 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][12] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 12 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-
-    X_vel[j] =0.0;
-    sscanf ( TABLEAU[0] , "%lf" , &X_vel[j] );
-
-    cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-     if ( cr_read != 12 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][12] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 12 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-
-    Y_vel[j] =0.0;
-    sscanf ( TABLEAU[0] , "%lf" , &Y_vel[j] );
-  
-    cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-     if ( cr_read != 12 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][12] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 12 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-
-    Z_vel[j] =0.0;
-    sscanf ( TABLEAU[0] , "%lf" , &Z_vel[j] );
-
-    /*-------------------------------------------------------*/
-    /* Lecture satellite time                                */
-    /*-------------------------------------------------------*/
-
-    cr_read = read ( desc_lead, TABLEAU[0], 5 );
- 
-     if ( cr_read != 5 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][5]='\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 5 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-
-    jours[j] =0 ;
-    sscanf ( TABLEAU[0] , "%ld" , &jours[j] );
-
-    cr_read = read ( desc_lead, TABLEAU[0], 23 );
- 
-     if ( cr_read != 23 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][23] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 23 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-
-    sscanf ( TABLEAU[0] , "%s" , toto );
-    secondes[j] = (double) atof ( toto );
-    
-    cai_JulToGreg ( jours[j] , secondes[j] , time[j] );
-    
-    }
-    
-  /*-------------------------------------------------------*/
-  /* Lecture DORIS FLAG                                    */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 2 );
- 
-   if ( cr_read != 2 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][2] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 2 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-   dorisused[0]='\0';
-  sscanf ( TABLEAU[0] , "%s" , dorisused );
-  
-  /*------------------------------------------------------*/
-  /* Saut de 24 octets                                    */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 24 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture line period                                   */
-  /*-------------------------------------------------------*/
-
-  cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-   if ( cr_read != 12 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-   
-  sprintf ( lineperiod , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , lineperiod );
-  periodeligne = atof ( lineperiod ) * 0.001;
-  
-  /*-------------------------------------------------------*/
-  /* Lecture outofrange                                    */
-  /*-------------------------------------------------------*/
-
-  cr_read = read ( desc_lead, TABLEAU[0], 2 );
- 
-   if ( cr_read != 2 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][2] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 2 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( outofrange , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , outofrange );
-  
-  /*------------------------------------------------------*/
-  /* Saut de 4 octets                                     */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 4 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture timescenecenter                               */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 30 );
- 
-   if ( cr_read != 30 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][30] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 30 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  sprintf ( timecenter , "\0" );
-  sprintf ( time_scenecenter , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , time_scenecenter );
-  if (time_scenecenter[0]!='\0')
-  {
-      strcpy ( timecenter , time_scenecenter );
-     secondescenter = atof ( &time_scenecenter[5] );
-     time_scenecenter[5] = '\0';
-     jourscenter = 0;
-     sscanf ( time_scenecenter , "%ld" , &jourscenter );
-     cai_JulToGreg ( jourscenter , secondescenter , time_scenecenter );
-  }
-  /*------------------------------------------------------*/
-  /* Saut de 6 octets                                     */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 6 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  for ( j = 0; j < 73 ; j++ )
-    {
-    /*-------------------------------------------------------*/
-    /* Lecture attitude line number                          */
-    /*-------------------------------------------------------*/
-  
-    cr_read = read ( desc_lead, TABLEAU[0], 4 );
- 
-     if ( cr_read != 4 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][4] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 4 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-
-    line[j] = 0 ;
-    sscanf ( TABLEAU[0] , "%d" , &line[j] );
-   
-/*****************************************************************************/
-/* MOD : VERSION : 4.6 : FA : erreur calcul de la datation des attitudes     */
-/*****************************************************************************/
- 
-    cai_addtime ( time_angle[j] ,  timecenter ,
-                                  ((double) ( line[j] - nbc_c ))*periodeligne );
-    
-    /*-------------------------------------------------------*/
-    /* Lecture rotation yaw axis                             */
-    /*-------------------------------------------------------*/
-  
-    cr_read = read ( desc_lead, TABLEAU[0], 5 );
- 
-     if ( cr_read != 5 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][5] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 5 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-    
-    yawdeg = atof ( TABLEAU[0] );
-    yawrad = cai_DegreeToRadian ( yawdeg ) * 0.000001;
-    
-    if ( j == 72 )
-      {
-      strcpy ( yaw[j] , "" );
-      sscanf ( TABLEAU[0] , "%s" , yaw[j] );
-      if ( strcmp ( yaw[j] , "" ) !=0)
-        sprintf ( yaw[j] , "%.12lf" , yawrad );
-      }
-    else      
-      sprintf ( yaw[j] , "%.12lf" , yawrad );
-
-    /*-------------------------------------------------------*/
-    /* Lecture rotation roll axis                            */
-    /*-------------------------------------------------------*/
-  
-    cr_read = read ( desc_lead, TABLEAU[0], 5 );
- 
-     if ( cr_read != 5 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][5] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 5 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-
-    yawdeg = atof ( TABLEAU[0] ) * 0.000001;
-    yawrad = cai_DegreeToRadian ( yawdeg );
-    sprintf ( roll[j] , "%.12lf" , yawrad );
-
-    /*-------------------------------------------------------*/
-    /* Lecture rotation pitch axis                           */
-    /*-------------------------------------------------------*/
-  
-    cr_read = read ( desc_lead, TABLEAU[0], 5 );
- 
-     if ( cr_read != 5 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][5] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 5 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-
-    yawdeg = atof ( TABLEAU[0] ) * 0.000001;
-    yawrad = cai_DegreeToRadian ( yawdeg );
-
-    sprintf ( pitch[j] , "%.12lf" , yawrad );
-
-    /*------------------------------------------------------*/
-    /* Saut de 1 octet                                      */
-    /*------------------------------------------------------*/
-
-    cr_lseek = lseek ( desc_lead , 1 , SEEK_CUR );
-  
-    if ( cr_lseek == -1 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture psi_x_first                                   */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-   if ( cr_read != 8 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  /*  sscanf ( TABLEAU[0] , "%s" , psi_x_first );*/
-  
-  /*-------------------------------------------------------*/
-  /* Lecture psi_x_last                                    */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-   if ( cr_read != 8 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  /*  sscanf ( TABLEAU[0] , "%s" , psi_x_last );*/
-  
-  /*-------------------------------------------------------*/
-  /* Lecture psi_y_first                                   */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-   if ( cr_read != 8 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  /*  sscanf ( TABLEAU[0] , "%s" , psi_y_first );*/
-  
-  /*-------------------------------------------------------*/
-  /* Lecture psi_y_last                                    */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-   if ( cr_read != 8 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  /*  sscanf ( TABLEAU[0] , "%s" , psi_x_last );*/
-  
-  /*------------------------------------------------------*/
-  /* Saut de 508 octets                                   */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 508 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  for ( j = 0; j < 2 ; j++ )
-  {
-  /*-------------------------------------------------------*/
-  /* Lecture line number raw scene                         */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-   if ( cr_read != 8 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  line_raw[j]= 0 ;
-  sscanf ( TABLEAU[0] , "%d" , &line_raw[j] );
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.6 : FA : erreur calcul de la datation des attitudes     */
-/*****************************************************************************/
-
-  cai_addtime ( timeyaw[j] ,  timecenter ,
-                             ((double) ( line_raw[j] - nbc_c ))*periodeligne );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture yaw_angle                                     */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-   if ( cr_read != 8 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  yawdeg = atof ( TABLEAU[0] ) * 0.000001;
-  yawrad = cai_DegreeToRadian ( yawdeg );
-
-  sprintf ( yaw_angle[j] , "%.12lf" , yawrad );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture roll_angle                                    */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-   if ( cr_read != 8 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  yawdeg = atof ( TABLEAU[0] ) * 0.000001;
-  yawrad = cai_DegreeToRadian ( yawdeg );
-
-  sprintf ( roll_angle[j] , "%.12lf" , yawrad );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture pitch_angle                                   */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-   if ( cr_read != 8 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  yawdeg = atof ( TABLEAU[0] ) * 0.000001;
-  yawrad = cai_DegreeToRadian ( yawdeg );
-
-  sprintf ( pitch_angle[j] , "%.12lf" , yawrad );
-  
-  }
-  
-  if ( nb_bs == 1 )
-    ind_max = nb_bs;
-  else
-  if ( nb_bs == 3 )
-    ind_max = 2;
-  else
-    ind_max = 3;
-    
-  for ( j = 0; j < ind_max ; j++ )
-  {
-
-  /*-------------------------------------------------------*/
-  /* Lecture psi_x_first                                   */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-   if ( cr_read != 12 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  cai_DMS_To_Float ( TABLEAU[0] , &psideg );
-  psi_x_first[j] = cai_DegreeToRadian ( psideg );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture psi_x_last                                    */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-   if ( cr_read != 12 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  cai_DMS_To_Float ( TABLEAU[0] , &psideg );
-  psi_x_last[j] = cai_DegreeToRadian ( psideg );  
-    
-  /*-------------------------------------------------------*/
-  /* Lecture psi_y_first                                   */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-   if ( cr_read != 12 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  cai_DMS_To_Float ( TABLEAU[0] , &psideg );
-  psi_y_first[j] = cai_DegreeToRadian ( psideg );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture psi_y_last                                    */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-   if ( cr_read != 12 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  psideg = 0.0;
-  cai_DMS_To_Float ( TABLEAU[0] , &psideg );
-  psi_y_last[j] = cai_DegreeToRadian ( psideg );
-  }
-
-  /*-------------------------------------------------------*/
-  /* saut different selon le nombre d'angles lus           */
-  /*-------------------------------------------------------*/
-  
-  if ( ind_max == 1 )
-    {
-    /* saut de 8*12 octets */
-    
-    /*------------------------------------------------------*/
-    /* Saut de 96 octets                                    */
-    /*------------------------------------------------------*/
-
-    cr_lseek = lseek ( desc_lead , 96 , SEEK_CUR );
-  
-    if ( cr_lseek == -1 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    }
-  else
-  if ( ind_max == 2 )
-    {
-    /* saut de 4*12 octets */
-    
-    /*------------------------------------------------------*/
-    /* Saut de 48 octets                                    */
-    /*------------------------------------------------------*/
-
-    cr_lseek = lseek ( desc_lead , 48 , SEEK_CUR );
-  
-    if ( cr_lseek == -1 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture date julienne                                 */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 7 );
- 
-   if ( cr_read != 7 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][7] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 7 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  jourjul=0;
-  sscanf ( TABLEAU[0] , "%d" , &jourjul );
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 5 );
- 
-   if ( cr_read != 5 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][5] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 5 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  datejul=0;
-  sscanf ( TABLEAU[0] , "%d" , &datejul );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture major axis                                    */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-   if ( cr_read != 12 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( axis , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , axis );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture ex                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( ex , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , ex );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture ey                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( ey , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , ey );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture inclinaison                                   */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-   if ( cr_read != 12 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( inclin , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , inclin );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture ascension                                     */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-   if ( cr_read != 12 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( ascension , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , ascension );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture latitude argument                             */
-  /*-------------------------------------------------------*/
-
-  cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-   if ( cr_read != 12 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( latarg , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , latarg );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture p7                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  sprintf ( p7 , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , p7 );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture p8                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( p8 , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , p8 );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture p9                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-   if ( cr_read != 12 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( p9 , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , p9 );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture p10                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( p10 , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , p10 );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture segmentstart                                  */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-   if ( cr_read != 8 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( segmentstart , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , segmentstart );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture scenestart                                    */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-   if ( cr_read != 8 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( scenestart , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , scenestart );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture segmentend                                    */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-   if ( cr_read != 8 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( segmentend , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , segmentend );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture UT date                                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 7 );
- 
-   if ( cr_read != 7 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][7] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 7 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  utdatej=0;
-  sscanf ( TABLEAU[0] , "%d" , &utdatej );
-
-  cr_read = read ( desc_lead, TABLEAU[0], 5 );
- 
-   if ( cr_read != 5 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][5] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 5 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  utdates=0;
-  sscanf ( TABLEAU[0] , "%d" , &utdates );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture clockvalue                                    */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-   if ( cr_read != 12 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( clockvalue , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , clockvalue );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture clockperiod                                   */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-   if ( cr_read != 12 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( clockperiod , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , clockperiod );  
-  
-  /*-------------------------------------------------------*/
-  /* Lecture boardtime                                     */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 12 );
- 
-   if ( cr_read != 12 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( boardtime , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , boardtime );
-  
-  /*------------------------------------------------------*/
-  /* Saut de 528 octets                                   */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 528 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /********************************************************/
-  /*        LEADER RADIOMETRIC CALIBRATION RECORD         */
-  /********************************************************/
-  ind_gain_val = 0;
-  ind_dark_val = 0;
-
-  for ( ind_gains = 0 ; ind_gains < 16 ; ind_gains++ )
-    {
-
-    /*------------------------------------------------------*/
-    /* Saut de 24 octets                                    */
-    /*------------------------------------------------------*/
-
-    cr_lseek = lseek ( desc_lead , 24 , SEEK_CUR );
-  
-    if ( cr_lseek == -1 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-
-    /*------------------------------------------------------*/
-    /* Lecture du flag indiquant si c'est un gains ou dark  */
-    /*------------------------------------------------------*/
-
-    cr_read = read ( desc_lead, TABLEAU[0], 4 );
- 
-    if ( cr_read != 4 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][4] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 4 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-    type_gain =0;
-    sscanf ( TABLEAU[0] , "%d" , &type_gain );
-
-    /*------------------------------------------------------*/
-    /* Saut de 20 octets                                    */
-    /*------------------------------------------------------*/
-
-    cr_lseek = lseek ( desc_lead , 20 , SEEK_CUR );
-  
-    if ( cr_lseek == -1 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-
-    /*------------------------------------------------------*/
-    /* Lecture date calibration de cette bande              */
-    /*------------------------------------------------------*/
-
-    cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-    if ( cr_read != 8 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][8] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 8 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-    relativeannee=0;
-    sscanf ( &(TABLEAU[0][4]) , "%d" , &relativeannee );
-    TABLEAU[0][4] = '\0';
-    relativemois=0;
-    sscanf ( &(TABLEAU[0][2]) , "%d" , &relativemois );
-    TABLEAU[0][2] = '\0';
-    relativejour=0;
-    sscanf ( TABLEAU[0] , "%d" , &relativejour );
-    
-    sprintf ( relativedatecalib[ind_gains] , "%.4d-%.2d-%.2d 00:00:00" , relativeannee ,
-              relativemois , relativejour );
-
-    /*------------------------------------------------------*/
-    /* Saut de 4 octets                                     */
-    /*------------------------------------------------------*/
-
-    cr_lseek = lseek ( desc_lead , 4 , SEEK_CUR );
-    if ( cr_lseek == -1 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    if ( type_gain == 1 )
-      {
-      for ( ind_tab_gain = 0 ; ind_tab_gain < 1500 ; ind_tab_gain++ )
-        {
-
-        /*------------------------------------------------------*/
-        /* Lecture des 1500 gains                               */
-        /*------------------------------------------------------*/
-
-        cr_read = read ( desc_lead, &val , 2 );
- 
-        if ( cr_read != 2 )
-          {
-          sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-          goto ERREUR;
-          }
-         if (strcmp(type_machine,"LE")==0) 
-         { 
-	     swab((void*)&val,(void*)&valtemp,2);
-             val=valtemp;
-         }
-	 val_float = (float) val/10000.0;
-	 gain_value[ind_gain_val][ind_tab_gain] = val_float ;
-        }
-      ind_gain_val++;
-      }
-    else if ( type_gain == 2 )
-    {
-      for ( ind_tab_gain =0 ; ind_tab_gain < 1500 ; ind_tab_gain++ )
-        {
-
-        /*------------------------------------------------------*/
-        /* Lecture des 1500 darks                               */
-        /*------------------------------------------------------*/
-
-        cr_read = read ( desc_lead, &val, 2 );
-        if ( cr_read != 2 )
-          {
-          sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-          goto ERREUR;
-          }
-         if (strcmp(type_machine,"LE")==0) 
-         { 
-	     swab((void*)&val,(void*)&valtemp,2);
-             val=valtemp;
-         }
-	 val_float = (float) val/10.0;
-	 dark_value[ind_dark_val][ind_tab_gain] = val_float ;
-        }
-      ind_dark_val++;
-     }
-     else
-     {
-/* Valeurs non significatives . Saut de l'enregistrement */
-	 cr_lseek = lseek ( desc_lead , 3000 , SEEK_CUR );
-     }
-
-    /*------------------------------------------------------*/
-    /* Saut de 900 octets                                   */
-    /*------------------------------------------------------*/
-
-    cr_lseek = lseek ( desc_lead , 900 , SEEK_CUR );
-  
-    if ( cr_lseek == -1 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }      
-    }
-
-  /********************************************************/
-  /*             LEADER MODELIZATION RECORD               */
-  /********************************************************/
-
-  /*------------------------------------------------------*/
-  /* Saut de 16 octets                                    */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 16 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture first pixel of the raw scene                  */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-   if ( cr_read != 8 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( fpixraw , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , fpixraw );
-
-  /*-------------------------------------------------------*/
-  /* Lecture first line of the raw scene                   */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-   if ( cr_read != 8 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( flineraw , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , flineraw );
-
-  /*-------------------------------------------------------*/
-  /* Lecture first pixel 1b of the raw scene               */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-   if ( cr_read != 8 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( fpix1b , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , fpix1b );
-
-  /*-------------------------------------------------------*/
-  /* Lecture first line 1b of the raw scene                */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-   if ( cr_read != 8 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( fline1b , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , fline1b );
-
-  /*------------------------------------------------------*/
-  /* Saut de 32 octets                                    */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 32 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture al                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( al , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , al );
-
-  /*-------------------------------------------------------*/
-  /* Lecture bl                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( bl , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , bl );
-
-  /*-------------------------------------------------------*/
-  /* Lecture cl                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( cl , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , cl );
-
-  /*-------------------------------------------------------*/
-  /* Lecture ap                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( ap , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , ap );
-
-  /*-------------------------------------------------------*/
-  /* Lecture bp                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  sprintf ( bp , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , bp );
-
-  /*-------------------------------------------------------*/
-  /* Lecture cp                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( cp , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , cp );
-
-  /*------------------------------------------------------*/
-  /* Saut de 16 octets                                    */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 16 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture i_m                                           */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( im , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , im );
-
-  /*-------------------------------------------------------*/
-  /* Lecture delta_i                                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( deltai , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , deltai );
-
-  /*-------------------------------------------------------*/
-  /* Lecture j_m                                           */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( jm , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , jm );
-
-  /*-------------------------------------------------------*/
-  /* Lecture delta_j                                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( deltaj , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , deltaj );
-
-  /*-------------------------------------------------------*/
-  /* Lecture l_m                                           */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( lm , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , lm );
-
-  /*-------------------------------------------------------*/
-  /* Lecture delta_l                                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( deltal , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , deltal );
-
-  /*-------------------------------------------------------*/
-  /* Lecture p_m                                           */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( pm , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , pm );
-
-  /*-------------------------------------------------------*/
-  /* Lecture delta_p                                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( deltap , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , deltap );
-  
-  /*------------------------------------------------------*/
-  /* Saut de 16 octets                                    */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 16 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture coeff_i                                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  sprintf ( coeffi , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , coeffi );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture ai                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( ai , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , ai );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture bi                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  sprintf ( bi  , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , bi );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture ci                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( ci , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , ci );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture di                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( di , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , di );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture ei                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( ei , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , ei );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff_j                                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( coeffj , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , coeffj );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture aj                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( aj , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , aj );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture bj                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( bj , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , bj );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture cj                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( cj , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , cj );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff_a                                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( coeff_a , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , coeff_a );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture aa                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( aa , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , aa );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture ba                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( ba , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , ba );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture ca                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( ca  , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , ca );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture da                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( da  , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , da );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff_b                                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( coeff_b , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , coeff_b );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture ab                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( ab , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , ab );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture bb                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( bb , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , bb );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture cb                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( cb , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , cb );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture db                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( db , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , db );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture eb                                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( eb , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , eb );
-  
-  /*------------------------------------------------------*/
-  /* Saut de 16 octets                                    */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 16 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture coeff_l                                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( coeff_l , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , coeff_l );
-   /*-------------------------------------------------------*/
-  /* Lecture a_l                                           */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( a_l , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , a_l );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture b_l                                           */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( b_l , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , b_l );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture c_l                                           */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( c_l , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , c_l );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture d_l                                           */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( d_l , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , d_l );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture e_l                                           */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( e_l , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , e_l );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff_p                                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( coeff_p , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , coeff_p );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture a_p                                           */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( a_p , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , a_p );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture b_p                                           */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( b_p , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , b_p );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture c_p                                           */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( c_p , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , c_p );
-  
-  /*------------------------------------------------------*/
-  /* Saut de 16 octets                                    */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 16 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture alswir                                        */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-   
-  sprintf ( alswir  , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , alswir );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture blswir                                        */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-   ;
-  sprintf ( blswir , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , blswir );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture clswir                                        */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-   
-  sprintf ( clswir , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , clswir );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture apswir                                        */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  sprintf ( apswir , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , apswir );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture bpswir                                        */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-    
-  sprintf ( bpswir  , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , bpswir );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture cpswir                                        */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( cpswir , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , cpswir );
-  
-  /*------------------------------------------------------*/
-  /* Saut de 16 octets                                    */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 16 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*------------------------------------------------------*/
-  /*     lecture de reverse simplified location model     */
-  /*------------------------------------------------------*/
-
-  /*-------------------------------------------------------*/
-  /* Lecture coeff rlma                                    */
-  /*-------------------------------------------------------*/
- 
-
-  TABLEAU[0][0]='\0'; 
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-    
-  strcpy ( rlma , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , rlma );
-
-  /*-------------------------------------------------------*/
-  /* Lecture coeff rlmb                                    */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-    
-  strcpy ( rlmb , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , rlmb );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff rlmc                                    */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  strcpy ( rlmc , "\0" );
-  sscanf ( TABLEAU[0] , "%s" ,  rlmc);
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff rlmd                                    */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-   
-  strcpy ( rlmd , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , rlmd );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff rlme                                    */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  strcpy ( rlme , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , rlme );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff rlmf                                    */
-  /*-------------------------------------------------------*/
-  
-  TABLEAU[0][0]='\0'; 
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  strcpy ( rlmf , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , rlmf );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff rlmap                                   */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-    
-  strcpy ( rlmap , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , rlmap );
-
-  /*-------------------------------------------------------*/
-  /* Lecture coeff rlmbp                                   */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  strcpy ( rlmbp , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , rlmbp );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff rlmcp                                   */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-    
-  sprintf ( rlmcp  , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , rlmcp );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff rlmdp                                   */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-    
-  sprintf ( rlmdp , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , rlmdp );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff rlmep                                   */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-    
-  sprintf ( rlmep , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , rlmep );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture coeff rlmfp                                   */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_lead, TABLEAU[0], 16 );
- 
-   if ( cr_read != 16 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( rlmfp , "\0" );
-  sscanf ( TABLEAU[0] , "%s" , rlmfp );
-  
-  /*------------------------------------------------------*/
-  /* Saut de 2792 octets                                  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 2792 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /********************************************************/
-  /*         LEADER GROUND CONTROL POINT RECORD           */
-  /********************************************************/
-
-  /*------------------------------------------------------*/
-  /* Saut de 3960 octets                                  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_lead , 3960 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-     sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /********************************************************/
-  /*             LEADER HISTOGRAM RECORD                  */
-  /********************************************************/
-
-  for ( j = 0; j < nb_bs ; j++ )
-    {
-    
-    /*------------------------------------------------------*/
-    /* Saut de 2470 octets                                  */
-    /*------------------------------------------------------*/
-
-    cr_lseek = lseek ( desc_lead , 2470 , SEEK_CUR );
-  
-    if ( cr_lseek == -1 )
-      {
-       sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-       goto ERREUR;
-      }
-
-    /*-------------------------------------------------------*/
-    /* Lecture lowthresh                                     */
-    /*-------------------------------------------------------*/
-  
-    cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-     if ( cr_read != 8 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][8] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 8 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-    
-    sprintf ( lowtresh[j] , "\0" );
-    sscanf ( TABLEAU[0] , "%s" , lowtresh[j]  );
-    
-    /*-------------------------------------------------------*/
-    /* Lecture upthresh                                      */
-    /*-------------------------------------------------------*/
-  
-    cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-     if ( cr_read != 8 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][8] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 8 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-    
-    sprintf ( uptresh[j] , "\0" );
-    sscanf ( TABLEAU[0] , "%s" , uptresh[j] );
-
-    /*-------------------------------------------------------*/
-    /* Lecture firstwavelength                               */
-    /*-------------------------------------------------------*/
-  
-    cr_read = read ( desc_lead, TABLEAU[0], 8 );
- 
-     if ( cr_read != 8 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][8] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 8 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-
-    unwave =0.0;
-    
-    sscanf ( TABLEAU[0] , "%lf" , &unwave );
-    sprintf ( firstwave[j] , "%.12lf" , unwave * 0.000001 );
-
-    /*-------------------------------------------------------*/
-    /* Lecture wavelengthstep                                */
-    /*-------------------------------------------------------*/
-  
-    cr_read = read ( desc_lead, TABLEAU[0], 4 );
- 
-     if ( cr_read != 4 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][4] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 4 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-    wavelong=0.0;
-    sscanf ( TABLEAU[0] , "%lf" , &wavelong );
-    sprintf ( wavelengthstep[j] , "%.12lf" , wavelong * 0.000000001 );
-
-    /*-------------------------------------------------------*/
-    /* Lecture des 64 coefficients                           */
-    /*-------------------------------------------------------*/
-
-    for ( ind_tab_gain = 0  ; ind_tab_gain < 64 ; ind_tab_gain++ )
-      {  
-      cr_read = read ( desc_lead, TABLEAU[0], 5 );
- 
-      if ( cr_read != 5 )
-        {
-        sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-        goto ERREUR;
-        }
-    
-      TABLEAU[0][5] = '\0';
-   
-      /* Pour ne pas lire les char suivants */
-      /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-      for ( i = 0 ; i < 5 ; i++ )
-        {
-        TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-        }
-
-      sprintf (  spectral_sensitivitie[j][ind_tab_gain] , "\0" );
-      sscanf ( TABLEAU[0] , "%s" , spectral_sensitivitie[j][ind_tab_gain] );
-      }
-    
-    /*-------------------------------------------------------*/
-    /* Lecture solar_irradiance                              */
-    /*-------------------------------------------------------*/
-  
-    cr_read = read ( desc_lead, TABLEAU[0], 4 );
- 
-     if ( cr_read != 4 )
-      {
-      sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-      goto ERREUR;
-      }
-    
-    TABLEAU[0][4] = '\0';
-  
-    /* Pour ne pas lire les char suivants */
-    /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-    for ( i = 0 ; i < 4 ; i++ )
-      {
-      TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-      }
-     
-     sprintf ( solar_irradiance[j] , "\0" );
-     sscanf ( TABLEAU[0] , "%s" , solar_irradiance[j] );
-
-    /*------------------------------------------------------*/
-    /* Saut de 1138 octets                                  */
-    /*------------------------------------------------------*/
-
-    cr_lseek = lseek ( desc_lead , 1138 , SEEK_CUR );
-  
-    if ( cr_lseek == -1 )
-      {
-       sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Leader octet %ld" , cr_lseek );
-       goto ERREUR;
-      }
-    }
-
-  /********************************************************/
-  /*         LECTURE DU FICHIER VOLUME DIRECTORY          */
-  /********************************************************/
-
-  /*------------------------------------------------------*/
-  /* Retour au debut du fichier		  		  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_vol , 0L , 0 );
-
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*------------------------------------------------------*/
-  /* Saut de 60 octects 		  		  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_vol , 60 , SEEK_SET );
-  
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture job_id                                        */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_vol, TABLEAU[0], 16 );
- 
-  if ( cr_read != 16 )
-   {
-   sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-   goto ERREUR;
-   }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-    sprintf ( job_id , "\0" );
-  strcpy ( job_id , TABLEAU[0] );
-
-  /*-------------------------------------------------------*/
-  /* Lecture product_type                                  */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_vol, TABLEAU[0], 16 );
- 
-  if ( cr_read != 16 )
-   {
-   sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-   goto ERREUR;
-   }
-    
-  TABLEAU[0][16] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 16 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  sprintf( product_type, "\0" );
-  strcpy ( product_type , TABLEAU[0] );
-  
-  /*------------------------------------------------------*/
-  /* Saut de 20 octects 		  		  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_vol , 20 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture product_date                                  */
-  /*-------------------------------------------------------*/
-
-  /*-------------------------------------------------------*/
-  /* Lecture product_annee                                 */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_vol, TABLEAU[0], 4 );
- 
-  if ( cr_read != 4 )
-   {
-   sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-   goto ERREUR;
-   }
-    
-  TABLEAU[0][4] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 4 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  product_annee=0;
-  sscanf ( TABLEAU[0] , "%d" , &product_annee );
-
-  /*-------------------------------------------------------*/
-  /* Lecture product_mois                                  */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_vol, TABLEAU[0], 2 );
- 
-  if ( cr_read != 2 )
-   {
-   sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-   goto ERREUR;
-   }
-    
-  TABLEAU[0][2] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 2 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  product_mois=0;
-  sscanf ( TABLEAU[0] , "%d" , &product_mois );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture product_jour                                  */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_vol, TABLEAU[0], 2 );
- 
-  if ( cr_read != 2 )
-   {
-   sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-   goto ERREUR;
-   }
-    
-  TABLEAU[0][2] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 2 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  product_jour=0;
-  sscanf ( TABLEAU[0] , "%d" , &product_jour );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture product_heure                                 */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_vol, TABLEAU[0], 2 );
- 
-  if ( cr_read != 2 )
-   {
-   sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-   goto ERREUR;
-   }
-    
-  TABLEAU[0][2] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 2 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  product_heure =0;
-  sscanf ( TABLEAU[0] , "%d" , &product_heure );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture product_min                                   */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_vol, TABLEAU[0], 2 );
- 
-  if ( cr_read != 2 )
-   {
-   sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-   goto ERREUR;
-   }
-    
-  TABLEAU[0][2] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 2 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  product_min=0;
-  sscanf ( TABLEAU[0] , "%d" , &product_min );
-  
-  /*-------------------------------------------------------*/
-  /* Lecture product_sec                                   */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_vol, TABLEAU[0], 2 );
- 
-  if ( cr_read != 2 )
-   {
-   sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-   goto ERREUR;
-   }
-    
-  TABLEAU[0][2] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 2 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  product_sec=0;
-  sscanf ( TABLEAU[0] , "%d" , &product_sec );
-
-  /*------------------------------------------------------*/
-  /* Saut de 2 octects 			  		  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_vol , 2 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture produser                                      */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_vol, TABLEAU[0], 12 );
- 
-  if ( cr_read != 12 )
-   {
-   sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-   goto ERREUR;
-   }
-    
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
- 
-  sprintf ( produser , "\0" );
-  strcpy ( produser , TABLEAU[0] );
-
-  /*-------------------------------------------------------*/
-  /* Lecture processing_center                             */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_vol, TABLEAU[0], 8 );
- 
-  if ( cr_read != 8 )
-   {
-   sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-   goto ERREUR;
-   }
-    
-  TABLEAU[0][8] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 8 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( processing_center , "\0" );
-  strcpy ( processing_center , TABLEAU[0] );
-
-  /*-------------------------------------------------------*/
-  /* Lecture software_name                                 */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_vol, TABLEAU[0], 12 );
- 
-  if ( cr_read != 12 )
-   {
-   sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-   goto ERREUR;
-   }
-    
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( software_name , "\0" );
-  strcpy ( software_name , TABLEAU[0] );
-
-  /*------------------------------------------------------*/
-  /* Saut de 1296 octects 			  	  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_vol , 1296 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture source_description                            */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_vol, TABLEAU[0], 104 );
- 
-  if ( cr_read != 104 )
-   {
-   sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-   goto ERREUR;
-   }
-    
-  TABLEAU[0][104] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 104 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  
-  sprintf ( source_description , "\0" );
-  strcpy ( source_description , TABLEAU[0] );
-
-  /*------------------------------------------------------*/
-  /* Saut de 18 octects 			  	  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_vol , 18 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture copyright                                     */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_vol, TABLEAU[0], 14 );
- 
-  if ( cr_read != 14 )
-   {
-   sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-   goto ERREUR;
-   }
-    
-  TABLEAU[0][14] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 14 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-  strcpy ( copyright , TABLEAU[0] );
-  
-  /*------------------------------------------------------*/
-  /* Saut de 2 octects 			     	          */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_vol , 2 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  cr_read = read ( desc_vol, TABLEAU[0], 12 );
- 
-  if ( cr_read != 12 )
-   {
-   sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-   goto ERREUR;
-   }
-    
-  TABLEAU[0][12] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 12 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  strcat ( copyright , TABLEAU[0] );
-  
-  /*------------------------------------------------------*/
-  /* Saut de 2 octects 			     	          */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_vol , 2 , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  cr_read = read ( desc_vol, TABLEAU[0], 10 );
- 
-  if ( cr_read != 10 )
-   {
-   sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Volume Directory octet %ld" , cr_lseek );
-   goto ERREUR;
-   }
-    
-  TABLEAU[0][10] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 10 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  strcat ( copyright , TABLEAU[0] );
-
-  /********************************************************/
-  /*         LECTURE DU FICHIER IMAGERY                   */
-  /********************************************************/
-
-  /*------------------------------------------------------*/
-  /* Retour au debut du fichier		  		  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_img , 0L , 0 );
-
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Imagery octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*------------------------------------------------------*/
-  /* Saut de 186 octects 		    	          */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_img , 186 , SEEK_SET );
-  
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Imagery octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*-------------------------------------------------------*/
-  /* Lecture longueur enregistrement                       */
-  /*-------------------------------------------------------*/
-  
-  cr_read = read ( desc_img, TABLEAU[0], 6 );
- 
-  if ( cr_read != 6 )
-   {
-   sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Imagery octet %ld" , cr_lseek );
-   goto ERREUR;
-   }
-    
-  TABLEAU[0][6] = '\0';
-  
-  /* Pour ne pas lire les char suivants */
-  /* On met un masque sur le 8ieme bit de chaque octet : */
-  
-  for ( i = 0 ; i < 6 ; i++ )
-    {
-    TABLEAU[0][i] = TABLEAU[0][i] & 0177;
-    }
-
-  lg_enreg = 0;
-  sscanf ( TABLEAU[0] , "%d" , &lg_enreg );
-  
-  /*------------------------------------------------------*/
-  /* Retour au debut du fichier		  		  */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_img , 0L , SEEK_SET );
-
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Imagery octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-
-  /*------------------------------------------------------*/
-  /* Saut de lg_enreg octects 		    	          */
-  /*------------------------------------------------------*/
-
-  cr_lseek = lseek ( desc_img , (long) lg_enreg , SEEK_CUR );
-  
-  if ( cr_lseek == -1 )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Imagery octet %ld" , cr_lseek );
-    goto ERREUR;
-    }
-  
-  for ( j = 0; j < nb_lig ; j++ )
-    {
-    for ( can = 0 ; can < nb_bs ; can++ )
-      {
-      /*---------------------------------------------------*/
-      /* Saut de lg_enreg octects 		           */
-      /*---------------------------------------------------*/
-      cr_lseek = lseek ( desc_img , (long) ( lg_enreg - 69 ), SEEK_CUR );
-    
-      if ( cr_lseek == -1 )
-        {
-        sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Imagery octet %ld" , cr_lseek );
-        goto ERREUR;
-        }
-      
-      /*----------------------------------------------------*/
-      /* Lecture loss flag                                  */
-      /*----------------------------------------------------*/
-  
-      cr_read = read ( desc_img , &bad_line[j][can] , 1 );
- 
-      if ( cr_read != 1 )
-        {
-        sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Imagery octet %ld" , cr_lseek );
-        goto ERREUR;
-        }
-
-      /*---------------------------------------------------*/
-      /* Saut de 68 octects 		                   */
-      /*---------------------------------------------------*/
-      
-      cr_lseek = lseek ( desc_img , 68 , SEEK_CUR );
-    
-      if ( cr_lseek == -1 )
-        {
-        sprintf ( CAI_ERREUR , "Erreur Lecture du fichier Imagery octet %ld" , cr_lseek );
-        goto ERREUR;
-        }
-      }
-    }
-    
-  /********************************************************/
-  /*         OUVERTURE DU FICHIER XML PRODUIT             */
-  /********************************************************/
-
-  if ( ( des = fopen ( chemin_descripteur , "wb" ) ) == NULL )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Ouverture du fichier XML" );
-    goto ERREUR;
-    }
-
-  /********************************************************/
-  /*      ECRITURE DES DONNEES XML DANS LE FICHIER        */
-  /********************************************************/
-
-  /* Entete du document XML */
-
-  cr = cai_WriteEnteteXML ( des );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur Ecriture du fichier XML" );
-    goto ERREUR;
-    }
-  
-  /* Element Dimap_document */
- 
-  cr = cai_WriteOpenTagXML ( des , "Dimap_Document" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Dimap_Document" );
-    goto ERREUR;
-    }
-
-  /* Sous element Metadata_Id */
-  
-  cr = cai_WriteOpenTagXML ( des , "Metadata_Id" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Metadata_Id" );
-    goto ERREUR;
-    }
-
-  /* sous element METADATA_FORMAT */
-  /*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Version DIMAP passe de 2.0 à 2.9               */
-/*****************************************************************************/
-  type=0;
-  cr = cai_WriteElementXMLWithAttribute ( des , "METADATA_FORMAT" , "DIMAP" ,
-                                          "version" , "2.9" ,type);
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element METADATA_FORMAT" );
-    goto ERREUR;
-    }
-
-  /* sous element METADATA_PROFILE */
-
-  profile = (char*) NULL;
-  profile = (char*) calloc ( strlen ( niv_trait ) + 11 , sizeof (char) );
-  
-  sprintf ( profile , "SPOTSCENE_%s" , niv_trait );
-  
-  cr = cai_WriteElementXML ( des , "METADATA_PROFILE" , profile );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element METADATA_PROFILE" );
-    goto ERREUR;
-    }
-
-  FREE ( profile );
-  
- /* Fermeture de l'element Metadata_Id */
-
-  cr = cai_WriteCloseTagXML ( des , "Metadata_Id" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Metadata_Id" );
-    goto ERREUR;
-    }
-  
- /* Sous element Dataset_Id */
-  
-  cr = cai_WriteOpenTagXML ( des , "Dataset_Id" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Dataset_Id" );
-    goto ERREUR;
-    }
-
-  /* sous element DATASET_NAME */
-  
-  cr = cai_WriteElementXML ( des , "DATASET_NAME" , datasetname_centre );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DATASET_NAME" );
-    goto ERREUR;
-    }
-
-  /* sous element COPYRIGHT */
-
-  cr = cai_WriteElementXML ( des , "COPYRIGHT" , copyright );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element COPYRIGHT" );
-    goto ERREUR;
-    }
-
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'attribut href=""                   */
-/****************************************************************************/
-
-  /* sous element DATASET_TN_PATH */
-  type=1;
-  cr = cai_WriteElementXMLWithAttribute ( des , "DATASET_TN_PATH" , "" , "href" , "" ,type);
-
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DATASET_TN_PATH" );
-    goto ERREUR;
-    }
-
-  /* sous element DATASET_TN_FORMAT */
-
-  cr = cai_WriteElementXML ( des , "DATASET_TN_FORMAT" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DATASET_TN_FORMAT" );
-    goto ERREUR;
-    }
-
-  /* sous element DATASET_QL_PATH */
-  type=1;
-  cr = cai_WriteElementXMLWithAttribute ( des , "DATASET_QL_PATH" , "" , "href" , "",type );
-
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DATASET_QL_PATH" );
-    goto ERREUR;
-    }
-
-  /* sous element DATASET_QL_FORMAT */
-
-  cr = cai_WriteElementXML ( des , "DATASET_QL_FORMAT" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DATASET_QL_FORMAT" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Dataset_Id */
-
-  cr = cai_WriteCloseTagXML ( des , "Dataset_Id" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Dataset_Id" );
-    goto ERREUR;
-    }
-
- /* Sous element Dataset_Frame */
-  
-  cr = cai_WriteOpenTagXML ( des , "Dataset_Frame" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Dataset_Frame" );
-    goto ERREUR;
-    }
-
-  /* sous element Vertex */
-
-  cr = cai_WriteOpenTagXML ( des , "Vertex" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Vertex" );
-    goto ERREUR;
-    }
-
-  /* sous element FRAME_LON */
-  
-  sprintf ( valeur , "%lf" , lon_no );
-
-  cr = cai_WriteElementXML ( des , "FRAME_LON" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_LON" );
-    goto ERREUR;
-    }
-
-  /* sous element FRAME_LAT */
-
-  sprintf ( valeur , "%lf" , lat_no );
-  
-  cr = cai_WriteElementXML ( des , "FRAME_LAT" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_LAT" );
-    goto ERREUR;
-    }
-/*****************************************************************************/
-/* MOD : VERSION : 4.8 : FA : Enlever le signe + pour FRAME_ROW, FRAME_COL   */
-/*****************************************************************************/
-/* Coin NO */
-/***********/
-  /* sous element FRAME_ROW */
-    sscanf ( ligc1 , "%d" ,&ivaleur  );
-    sprintf(Valeur,"%d",ivaleur);
-
-  cr = cai_WriteElementXML ( des , "FRAME_ROW" , Valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_ROW" );
-    goto ERREUR;
-    }
-  /* sous element FRAME_COL */
-    sscanf ( colc1 , "%d" ,&ivaleur  );
-    sprintf(Valeur,"%d",ivaleur);
- 
-  cr = cai_WriteElementXML ( des , "FRAME_COL" , Valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_COL" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Vertex */
-
-  cr = cai_WriteCloseTagXML ( des , "Vertex" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Vertex" );
-    goto ERREUR;
-    }
-
-  /* sous element Vertex */
-
-  cr = cai_WriteOpenTagXML ( des , "Vertex" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Vertex" );
-    goto ERREUR;
-    }
-
-  /* sous element FRAME_LON */
-  
-  sprintf ( valeur , "%f" , lon_ne );
-
-  cr = cai_WriteElementXML ( des , "FRAME_LON" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_LON" );
-    goto ERREUR;
-    }
-
-  /* sous element FRAME_LAT */
-  
-  sprintf ( valeur , "%f" , lat_ne );
-
-  cr = cai_WriteElementXML ( des , "FRAME_LAT" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_LAT" );
-    goto ERREUR;
-    }
-  /*****************************************************************************/
-/* MOD : VERSION : 4.8 : FA : Enlever le signe + pour FRAME_ROW, FRAME_COL   */
-/*****************************************************************************/
-/* Coin NE */
-/***********/
-  /* sous element FRAME_ROW */
-    sscanf ( ligc2 , "%d" ,&ivaleur  );
-    sprintf(Valeur,"%d",ivaleur);
-
-  cr = cai_WriteElementXML ( des , "FRAME_ROW" , Valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_ROW" );
-    goto ERREUR;
-    }
-  /* sous element FRAME_COL */
-    sscanf ( colc2 , "%d" ,&ivaleur  );
-    sprintf(Valeur,"%d",ivaleur);
-
-  cr = cai_WriteElementXML ( des , "FRAME_COL" , Valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_COL" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Vertex */
-
-  cr = cai_WriteCloseTagXML ( des , "Vertex" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Vertex" );
-    goto ERREUR;
-    }
-
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : FA : DIMAP dans le DATASET_FRAME, inversion des deux*/
-/*                            derniers vertex : à mettre dans l'ordre        */
-/*				NO,NE,SE,SO : inversion de c3 et c4          */
-/*****************************************************************************/
-/* Coin SE */
-/***********/
-/* sous element Vertex */
-
-  cr = cai_WriteOpenTagXML ( des , "Vertex" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Vertex" );
-    goto ERREUR;
-    }
-
-  /* sous element FRAME_LON */
-  
-  sprintf ( valeur , "%lf" , lon_se );
-
-  cr = cai_WriteElementXML ( des , "FRAME_LON" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_LON" );
-    goto ERREUR;
-    }
-
-  /* sous element FRAME_LAT */
-
-  sprintf ( valeur , "%lf" , lat_se );
-  
-  cr = cai_WriteElementXML ( des , "FRAME_LAT" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_LAT" );
-    goto ERREUR;
-    }
-/*****************************************************************************/
-/* MOD : VERSION : 4.8 : FA : Enlever le signe + pour FRAME_ROW, FRAME_COL   */
-/*****************************************************************************/
-
-  /* sous element FRAME_ROW */
-    sscanf ( ligc4 , "%d" ,&ivaleur  );
-    sprintf(Valeur,"%d",ivaleur);
-  
-  cr = cai_WriteElementXML ( des , "FRAME_ROW" , Valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_ROW" );
-    goto ERREUR;
-    }
-  /* sous element FRAME_COL */
-    sscanf ( colc4 , "%d" ,&ivaleur  );
-    sprintf(Valeur,"%d",ivaleur);
-
-  cr = cai_WriteElementXML ( des , "FRAME_COL" , Valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_COL" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Vertex */
-
-  cr = cai_WriteCloseTagXML ( des , "Vertex" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Vertex" );
-    goto ERREUR;
-    }
-/***********/
-/* Coin SO */
-/***********/ 
-  /* sous element Vertex */
-
-  cr = cai_WriteOpenTagXML ( des , "Vertex" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Vertex" );
-    goto ERREUR;
-    }
-
-  /* sous element FRAME_LON */
-  
-  sprintf ( valeur , "%lf" , lon_so );
-
-  cr = cai_WriteElementXML ( des , "FRAME_LON" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_LON" );
-    goto ERREUR;
-    }
-
-  /* sous element FRAME_LAT */
-
-  sprintf ( valeur , "%lf" , lat_so );
-  
-  cr = cai_WriteElementXML ( des , "FRAME_LAT" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_LAT" );
-    goto ERREUR;
-    }
-    
-/*****************************************************************************/
-/* MOD : VERSION : 4.8 : FA : Enlever le signe + pour FRAME_ROW, FRAME_COL   */
-/*****************************************************************************/
-/* sous element FRAME_ROW */
-    sscanf ( ligc3 , "%d" ,&ivaleur  );
-    sprintf(Valeur,"%d",ivaleur);
-  
-  cr = cai_WriteElementXML ( des , "FRAME_ROW" , Valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_ROW" );
-    goto ERREUR;
-    }
-  /* sous element FRAME_COL */
-     sscanf ( colc3 , "%d" ,&ivaleur  );
-    sprintf(Valeur,"%d",ivaleur);
- 
-  cr = cai_WriteElementXML ( des , "FRAME_COL" , Valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_COL" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Vertex */
-
-  cr = cai_WriteCloseTagXML ( des , "Vertex" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Vertex" );
-    goto ERREUR;
-    }
-
-  /* sous element Scene_Center */
-
-  cr = cai_WriteOpenTagXML ( des , "Scene_Center" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Scene_Center" );
-    goto ERREUR;
-    }
-
-  /* sous element FRAME_LON */
-  
-  sprintf ( valeur , "%lf" , lon_c );
-  cr = cai_WriteElementXML ( des , "FRAME_LON" ,  valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_LON" );
-    goto ERREUR;
-    }
-  /* sous element FRAME_LAT */
-  
-  sprintf ( valeur , "%lf" , lat_c );
-  
-  cr = cai_WriteElementXML ( des , "FRAME_LAT" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_LAT" );
-    goto ERREUR;
-    }
-  /* sous element FRAME_ROW */
-  
-  sprintf ( valeur , "%d" , nbc_c );
-  cr = cai_WriteElementXML ( des , "FRAME_ROW" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_ROW" );
-    goto ERREUR;
-    }
-
-  /* sous element FRAME_COL */
-  
-  sprintf ( valeur , "%d" , nbl_c );
-  cr = cai_WriteElementXML ( des , "FRAME_COL" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FRAME_COL" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Scene_Center */
-
-  cr = cai_WriteCloseTagXML ( des , "Scene_Center" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Scene_Center" );
-    goto ERREUR;
-    }
-
-  /* sous element SCENE_ORIENTATION */
-
-  cr = cai_WriteElementXML ( des , "SCENE_ORIENTATION" , angle_o );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SCENE_ORIENTATION" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Dataset_Frame */
-
-  cr = cai_WriteCloseTagXML ( des , "Dataset_Frame" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Dataset_Frame" );
-    goto ERREUR;
-    }
-
-  /* sous element Dataset_Sources */
-  
-  cr = cai_WriteOpenTagXML ( des , "Dataset_Sources" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Dataset_Sources" );
-    goto ERREUR;
-    }
-
-  /* sous element Source_Information */
-  
-  cr = cai_WriteOpenTagXML ( des , "Source_Information" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Source_Information" );
-    goto ERREUR;
-    }
-
-  /* sous element SOURCE_TYPE */
-  
-  cr = cai_WriteElementXML ( des , "SOURCE_TYPE" , "SCENE" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SOURCE_TYPE" );
-    goto ERREUR;
-    }
-
-  /* sous element SOURCE_ID */
-  
-  cr = cai_WriteElementXML ( des , "SOURCE_ID" , dsetname_centre );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SOURCE_ID" );
-    goto ERREUR;
-    }
-
-  /* sous element SOURCE_DESCRIPTION */
-  
-  cr = cai_WriteElementXML ( des , "SOURCE_DESCRIPTION" , source_description );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SOURCE_DESCRIPTION" );
-    goto ERREUR;
-    }
-
-  /* sous element Scene_Source */
-  
-  cr = cai_WriteOpenTagXML ( des , "Scene_Source" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Scene_Source" );
-    goto ERREUR;
-    }
-
-  /* sous element GRID_REFERENCE */
-  
-  cr = cai_WriteElementXML ( des , "GRID_REFERENCE" , grille_ref );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element GRID_REFERENCE" );
-    goto ERREUR;
-    }
-
-  /* sous element SHIFT_VALUE */
-  
-  cr = cai_WriteElementXML ( des , "SHIFT_VALUE" , shift_val );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SHIFT_VALUE" );
-    goto ERREUR;
-    }
-
-  /* sous element IMAGING_DATE */
-  
-  cr = cai_WriteElementXML ( des , "IMAGING_DATE" , date );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element IMAGING_DATE" );
-    goto ERREUR;
-    }
-
-  /* sous element IMAGING_TIME */
-  
-  cr = cai_WriteElementXML ( des , "IMAGING_TIME" , heure );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element IMAGING_TIME" );
-    goto ERREUR;
-    }
-
-  /* sous element MISSION */
-  
-  cr = cai_WriteElementXML ( des , "MISSION" , satellite );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element MISSION" );
-    goto ERREUR;
-    }
-
-  /* sous element MISSION_INDEX */
-  
-  sprintf ( sat_ind , "%d" , satellite_index );
-
-  cr = cai_WriteElementXML ( des , "MISSION_INDEX" , sat_ind );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element MISSION_INDEX" );
-    goto ERREUR;
-    }
-
-  /* sous element INSTRUMENT */
-  
-  cr = cai_WriteElementXML ( des , "INSTRUMENT" , instrument );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element INSTRUMENT" );
-    goto ERREUR;
-    }
-
-  /* sous element INSTRUMENT_INDEX */
-  
-  sprintf ( ins_ind , "%d" , instrument_index );
-  
-  cr = cai_WriteElementXML ( des , "INSTRUMENT_INDEX" , ins_ind );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element INSTRUMENT_INDEX" );
-    goto ERREUR;
-    }
-
-  /* sous element SENSOR_CODE */
-  
-  sprintf ( valeur , "%c" , codecapt );
-  cr = cai_WriteElementXML ( des , "SENSOR_CODE" , valeur );
-
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SENSOR_CODE" );
-    goto ERREUR;
-    }
-
-  /* sous element SCENE_PROCESSING_LEVEL */
-  
-  cr = cai_WriteElementXML ( des , "SCENE_PROCESSING_LEVEL" , niv_trait );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SCENE_PROCESSING_LEVEL" );
-    goto ERREUR;
-    }
-
-  /* sous element INCIDENCE_ANGLE */
-  
-  if ( angle_in[0] == 'L' )
-    {
-    sprintf ( valeur , "-%s" , &angle_in[1] );
-    }
-  else if (angle_in[0] != '\0')
-    {
-    sprintf ( valeur , "%s" , &angle_in[1] );
-    }
-   else
-	sprintf(valeur, "\0");
-
-  cr = cai_WriteElementXML ( des , "INCIDENCE_ANGLE" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element INCIDENCE_ANGLE" );
-    goto ERREUR;
-    }
-
-  /* sous element SUN_AZIMUT */
-  
-  cr = cai_WriteElementXML ( des , "SUN_AZIMUTH" , sunazim );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SUN_AZIMUT" );
-    goto ERREUR;
-    }
-
-  /* sous element SUN_ELEVATION */
-  
-  cr = cai_WriteElementXML ( des , "SUN_ELEVATION" , sunelev );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SUN_ELEVATION" );
-    goto ERREUR;
-    }
-
-  /* sous element Imaging_Parameters */
-  
-  cr = cai_WriteOpenTagXML ( des , "Imaging_Parameters" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Imaging_Parameters" );
-    goto ERREUR;
-    }
-
-  /* sous element REVOLUTION_NUMBER */
-  
-  cr = cai_WriteElementXML ( des , "REVOLUTION_NUMBER" , revolution );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element REVOLUTION_NUMBER" );
-    goto ERREUR;
-    }
-
-  /* sous element COMPRESSION_MODE */
-  
-  cr = cai_WriteElementXML ( des , "COMPRESSION_MODE" , compression );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element COMPRESSION_MODE" );
-    goto ERREUR;
-    }
-
-  /* sous element DIRECT_PLAYBACK_INDICATOR */
-  
-  cr = cai_WriteElementXML ( des , "DIRECT_PLAYBACK_INDICATOR" , direct_playback );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DIRECT_PLAYBACK_INDICATOR" );
-    goto ERREUR;
-    }
-
-  /* sous element REFOCUSING_STEP_NUM */
-  
-  cr = cai_WriteElementXML ( des , "REFOCUSING_STEP_NUM" , stepnum );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element REFOCUSING_STEP_NUM" );
-    goto ERREUR;
-    }
-
-  /* sous element COUPLED_MODE_FLAG */
-  
-  cr = cai_WriteElementXML ( des , "COUPLED_MODE_FLAG" , coupled );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element COUPLED_MODE_FLAG" );
-    goto ERREUR;
-    }
-
-  /* sous element SWATH_MODE */
-  
-  cr = cai_WriteElementXML ( des , "SWATH_MODE" , "FULL" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SWATH_MODE" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Imaging_Parameters */
-
-  cr = cai_WriteCloseTagXML ( des , "Imaging_Parameters" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Imaging_Parameters" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Scene_Source */
-
-  cr = cai_WriteCloseTagXML ( des , "Scene_Source" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Scene_Source" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Source_Information */
-
-  cr = cai_WriteCloseTagXML ( des , "Source_Information" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Source_Information" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Dataset_Sources */
-
-  cr = cai_WriteCloseTagXML ( des , "Dataset_Sources" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Dataset_Sources" );
-    goto ERREUR;
-    }
-
-  /* sous element Coordinate_Reference_System */
-
-  cr = cai_WriteOpenTagXML ( des , "Coordinate_Reference_System" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Coordinate_Reference_System" );
-    goto ERREUR;
-    }
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'attribut version="5.2"              */
-/*****************************************************************************/
-
-  /* sous element GEO_TABLES */
-    type=0;
-  cr = cai_WriteElementXMLWithAttribute ( des , "GEO_TABLES" , "EPSG" , "version" , "5.2",type );
-
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element GEO_TABLES" );
-    goto ERREUR;
-    }
-
-  /* sous element Horizontal_CS */
-
-  cr = cai_WriteOpenTagXML ( des , "Horizontal_CS" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Horizontal_CS" );
-    goto ERREUR;
-    }
-
-  /* sous element HORIZONTAL_CS_TYPE */
-  
-  cr = cai_WriteElementXML ( des , "HORIZONTAL_CS_TYPE" , "GEOGRAPHIC" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element HORIZONTAL_CS_TYPE" );
-    goto ERREUR;
-    }
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM : DIMAP remplissage des tags HORIZONTAL_CS_CODE  */
-/*                            et HORIZONTAL_CS_NAME avec des valeurs défauts */
-/*****************************************************************************/
-  /* sous element HORIZONTAL_CS_CODE */
-  
-  cr = cai_WriteElementXML ( des , "HORIZONTAL_CS_CODE" , "epsg:4326" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element HORIZONTAL_CS_CODE" );
-    goto ERREUR;
-    }
-
-  /* sous element HORIZONTAL_CS_NAME */
-  
-  cr = cai_WriteElementXML ( des , "HORIZONTAL_CS_NAME" , "WGS 84" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element HORIZONTAL_CS_NAME" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Horizontal_CS */
-
-  cr = cai_WriteCloseTagXML ( des , "Horizontal_CS" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Horizontal_CS" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Coordinate_Reference_System */
-
-  cr = cai_WriteCloseTagXML ( des , "Coordinate_Reference_System" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Coordinate_Reference_System" );
-    goto ERREUR;
-    }
-
-  /* sous element Raster_CS */
-
-  cr = cai_WriteOpenTagXML ( des , "Raster_CS" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Raster_CS" );
-    goto ERREUR;
-    }
-
-  /* sous element RASTER_CS_TYPE */
-
-  if ( strncmp ( niv_trait , "2A" , 2 ) ==0 )
-    {
-    cr = cai_WriteElementXML ( des , "RASTER_CS_TYPE" , "CELL" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element RASTER_CS_TYPE" );
-      goto ERREUR;
-      }
-    }
-  else
-    {
-    cr = cai_WriteElementXML ( des , "RASTER_CS_TYPE" , "POINT" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element RASTER_CS_TYPE" );
-      goto ERREUR;
-      }
-    }
-    
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element PIXEL_ORIGIN               */
-/****************************************************************************/
-  
-  /* sous element PIXEL_ORIGIN */
-
-  cr = cai_WriteElementXML ( des , "PIXEL_ORIGIN" , "1" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element PIXEL_ORIGIN" );
-    goto ERREUR;
-    }
-  
-
-  /* Fermeture de l'element Raster_CS */
-
-  cr = cai_WriteCloseTagXML ( des , "Raster_CS" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Raster_CS" );
-    goto ERREUR;
-    }
-
-  /* sous element Geoposition */
-  
-  cr = cai_WriteOpenTagXML ( des , "Geoposition" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Geoposition" );
-    goto ERREUR;
-    }
-
-  /* sous element Geoposition_Points */
-  
-  cr = cai_WriteOpenTagXML ( des , "Geoposition_Points" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Geoposition_Points" );
-    goto ERREUR;
-    }
-
-  /* sous element Tie_Point */
-  
-  cr = cai_WriteOpenTagXML ( des , "Tie_Point" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Tie_Point" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_CRS_X */
-
-  sprintf ( valeur , "%lf" , lon_no );
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_X" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_CRS_X" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_CRS_Y */
-
-  sprintf ( valeur , "%lf" , lat_no );
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_Y" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_CRS_Y" );
-    goto ERREUR;
-    }
-
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element TIE_POINTS_CRS_Z           */
-/****************************************************************************/
-
-  /* sous element TIE_POINTS_CRS_Z */
-
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_Z" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_CRS_Z" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_DATA_X */
-/*****************************************************************************/
-/* MOD : VERSION : 4.8 : FA : Enlever le signe + pour TIE_POINTS_DATA_X et   */
-/*					TIE_POINTS_DATA_Y                    */
-/*****************************************************************************/
-     sscanf ( ligc1 , "%d" ,&ivaleur  );
-    sprintf(Valeur,"%d",ivaleur);
-
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_DATA_X" , Valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_DATA_X" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_DATA_Y */
-     sscanf ( colc1 , "%d" ,&ivaleur  );
-    sprintf(Valeur,"%d",ivaleur);
- 
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_DATA_Y" , Valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_DATA_Y" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Tie_Point */
-
-  cr = cai_WriteCloseTagXML ( des , "Tie_Point" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Tie_Point" );
-    goto ERREUR;
-    }
-
-  /* sous element Tie_Point */
-  
-  cr = cai_WriteOpenTagXML ( des , "Tie_Point" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Tie_Point" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_CRS_X */
-  
-  sprintf ( valeur , "%f" , lon_ne );
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_X" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_CRS_X" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_CRS_Y */
-
-  sprintf ( valeur , "%f" , lat_ne );
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_Y" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_CRS_Y" );
-    goto ERREUR;
-    }
-
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element TIE_POINTS_CRS_Z           */
-/****************************************************************************/
-
-  /* sous element TIE_POINTS_CRS_Z */
-
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_Z" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_CRS_Z" );
-    goto ERREUR;
-    }
-
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.8 : FA : Enlever le signe + pour TIE_POINTS_DATA_X et   */
-/*					TIE_POINTS_DATA_Y                    */
-/*****************************************************************************/
-     sscanf ( ligc2 , "%d" ,&ivaleur  );
-    sprintf(Valeur,"%d",ivaleur);
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_DATA_X" , Valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_DATA_X" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_DATA_Y */
-    sscanf ( colc2 , "%d" ,&ivaleur  );
-    sprintf(Valeur,"%d",ivaleur);
-
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_DATA_Y" , Valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_DATA_Y" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Tie_Point */
-
-  cr = cai_WriteCloseTagXML ( des , "Tie_Point" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Tie_Point" );
-    goto ERREUR;
-    }
-
-  /* sous element Tie_Point */
-  
-  cr = cai_WriteOpenTagXML ( des , "Tie_Point" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Tie_Point" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_CRS_X */
-  
-  sprintf ( valeur , "%lf" , lon_so );
-
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_X" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_CRS_X" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_CRS_Y */
-  
-  sprintf ( valeur , "%lf" , lat_so );
-
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_Y" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_CRS_Y" );
-    goto ERREUR;
-    }
-
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element TIE_POINTS_CRS_Z           */
-/****************************************************************************/
-
-  /* sous element TIE_POINTS_CRS_Z */
-
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_Z" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_CRS_Z" );
-    goto ERREUR;
-    }
-
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.8 : FA : Enlever le signe + pour TIE_POINTS_DATA_X et   */
-/*					TIE_POINTS_DATA_Y                    */
-/*****************************************************************************/
- /* sous element TIE_POINTS_DATA_X */
-
-     sscanf ( ligc3 , "%d" ,&ivaleur  );
-    sprintf(Valeur,"%d",ivaleur);
-
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_DATA_X" , Valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_DATA_X" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_DATA_Y */
-    sscanf ( colc3 , "%d" ,&ivaleur  );
-    sprintf(Valeur,"%d",ivaleur);
-
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_DATA_Y" , Valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_DATA_Y" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Tie_Point */
-
-  cr = cai_WriteCloseTagXML ( des , "Tie_Point" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Tie_Point" );
-    goto ERREUR;
-    }
-
-  /* sous element Tie_Point */
-  
-  cr = cai_WriteOpenTagXML ( des , "Tie_Point" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Tie_Point" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_CRS_X */
-  
-  sprintf ( valeur , "%lf" , lon_se );
-
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_X" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_CRS_X" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_CRS_Y */
-  
-  sprintf ( valeur , "%lf" , lat_se );
-
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_Y" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_CRS_Y" );
-    goto ERREUR;
-    }
-
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element TIE_POINTS_CRS_Z           */
-/****************************************************************************/
-
-  /* sous element TIE_POINTS_CRS_Z */
-
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_Z" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_CRS_Z" );
-    goto ERREUR;
-    }
-
-
- /*****************************************************************************/
-/* MOD : VERSION : 4.8 : FA : Enlever le signe + pour TIE_POINTS_DATA_X et   */
-/*					TIE_POINTS_DATA_Y                    */
-/*****************************************************************************/
- /* sous element TIE_POINTS_DATA_X */
-
-     sscanf ( ligc4 , "%d" ,&ivaleur  );
-    sprintf(Valeur,"%d",ivaleur);
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_DATA_X" , Valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_DATA_X" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_DATA_Y */
-     sscanf ( colc4 , "%d" ,&ivaleur  );
-    sprintf(Valeur,"%d",ivaleur);
- 
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_DATA_Y" , Valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_DATA_Y" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Tie_Point */
-
-  cr = cai_WriteCloseTagXML ( des , "Tie_Point" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Tie_Point" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Geoposition_Points */
-
-  cr = cai_WriteCloseTagXML ( des , "Geoposition_Points" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Geoposition_Points" );
-    goto ERREUR;
-    }
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Deplacement de Simplified_Location_Model       */
-/*****************************************************************************/
-
-  /* sous element Simplified_Location_Model */
-  
-  cr = cai_WriteOpenTagXML ( des , "Simplified_Location_Model" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Simplified_Location_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element Direct_Location_Model */
-  
-  cr = cai_WriteOpenTagXML ( des , "Direct_Location_Model" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Direct_Location_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element lc_List */
-
-  cr = cai_WriteOpenTagXML ( des , "lc_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc_List" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , coeffa );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , coeffb );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , coeffc );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , coeffd );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , coeffe );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , coefff );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element lc" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element lc_List */
-
-  cr = cai_WriteCloseTagXML ( des , "lc_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc_List" );
-    goto ERREUR;
-    }
-
-  /* sous element pc_List */
-
-  cr = cai_WriteOpenTagXML ( des , "pc_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc_List" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , coeffap );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , coeffbp );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , coeffcp );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , coeffdp );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , coeffep );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , coefffp );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element pc" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element pc_List */
-
-  cr = cai_WriteCloseTagXML ( des , "pc_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc_List" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Direct_Location_Model */
-
-  cr = cai_WriteCloseTagXML ( des , "Direct_Location_Model" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Direct_Location_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element Reverse_Location_Model */
-  
-  cr = cai_WriteOpenTagXML ( des , "Reverse_Location_Model" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Reverse_Location_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element lc_List */
-
-  cr = cai_WriteOpenTagXML ( des , "lc_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc_List" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , rlma );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , rlmb );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , rlmc );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , rlmd );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , rlme );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , rlmf );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element lc" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element lc_List */
-
-  cr = cai_WriteCloseTagXML ( des , "lc_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc_List" );
-    goto ERREUR;
-    }
-
-  /* sous element pc_List */
-
-  cr = cai_WriteOpenTagXML ( des , "pc_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc_List" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , rlmap );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , rlmbp );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , rlmcp );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , rlmdp );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , rlmep );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , rlmfp );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element pc" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element pc_List */
-
-  cr = cai_WriteCloseTagXML ( des , "pc_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc_List" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Reverse_Location_Model */
-
-  cr = cai_WriteCloseTagXML ( des , "Reverse_Location_Model" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Reverse_Location_Model" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Simplified_Location_Model */
-
-  cr = cai_WriteCloseTagXML ( des , "Simplified_Location_Model" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Simplified_Location_Model" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Geoposition */
-
-  cr = cai_WriteCloseTagXML ( des , "Geoposition" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Geoposition" );
-    goto ERREUR;
-    }
-
-  /* sous element Production */
-  
-  cr = cai_WriteOpenTagXML ( des , "Production" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Production" );
-    goto ERREUR;
-    }
-
-  /* sous element DATASET_PRODUCER_NAME */
-  
-  cr = cai_WriteElementXML ( des , "DATASET_PRODUCER_NAME" , processing_center );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DATASET_PRODUCER_NAME" );
-    goto ERREUR;
-    }
-  
-/******************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout attribut href="http://www.spotimage.fr"   */
-/******************************************************************************/
-   
-  /* sous element DATASET_PRODUCER_URL */
-  type=1;
-  cr = cai_WriteElementXMLWithAttribute ( des , "DATASET_PRODUCER_URL" , "" ,
-                                  "href" , "http://www.spotimage.fr" ,type);
-  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DATASET_PRODUCER_URL" );
-    goto ERREUR;
-    }
-
-  /* sous element DATASET_PRODUCTION_DATE */
-  
-  sprintf ( valeur , "%.4d-%.2d-%.2d %.2d:%.2d:%.2d" , product_annee ,
-            product_mois , product_jour , product_heure , product_min ,
-	    product_sec );
-  
-  cr = cai_WriteElementXML ( des , "DATASET_PRODUCTION_DATE" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DATASET_PRODUCTION_DATE" );
-    goto ERREUR;
-    }
-
-  /* sous element PRODUCT_TYPE */
-
-  cr = cai_WriteElementXML ( des , "PRODUCT_TYPE" , product_type );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PRODUCT_TYPE" );
-    goto ERREUR;
-    }
-
-  /* sous element PRODUCT_INFO */
-
-  sprintf ( prod_info , "Spot SYSTEM SCENE level %s" , niv_trait );
-  
-  cr = cai_WriteElementXML ( des , "PRODUCT_INFO" , prod_info );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PRODUCT_INFO" );
-    goto ERREUR;
-    }
-
-  /* sous element JOB_ID */
-  
-  cr = cai_WriteElementXML ( des , "JOB_ID" , job_id );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element JOB_ID" );
-    goto ERREUR;
-    }
-
-  /* sous element Production_Facility */
-  
-  cr = cai_WriteOpenTagXML ( des , "Production_Facility" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Production_Facility" );
-    goto ERREUR;
-    }
-
-  /* sous element SOFTWARE_NAME */
-
-  cr = cai_WriteElementXML ( des , "SOFTWARE_NAME" , software_name );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SOFTWARE_NAME" );
-    goto ERREUR;
-    }
-
-  /* sous element SOFTWARE_VERSION */
-  
-  cr = cai_WriteElementXML ( des , "SOFTWARE_VERSION" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SOFTWARE_VERSION" );
-    goto ERREUR;
-    }
-
-  /* sous element PROCESSING_CENTER */
-  
-  cr = cai_WriteElementXML ( des , "PROCESSING_CENTER" , software_name );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PROCESSING_CENTER" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Production_Facility */
-
-  cr = cai_WriteCloseTagXML ( des , "Production_Facility" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Production_Facility" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Production */
-
-  cr = cai_WriteCloseTagXML ( des , "Production" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Production" );
-    goto ERREUR;
-    }
-    
-  /* sous element Raster_Dimensions */
-  
-  cr = cai_WriteOpenTagXML ( des , "Raster_Dimensions" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Raster_Dimensions" );
-    goto ERREUR;
-    }
-
-  /* sous element NCOLS */
-  
-  sprintf ( valeur , "%d" , nb_col );
-  cr = cai_WriteElementXML ( des , "NCOLS" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element NCOLS" );
-    goto ERREUR;
-    }
-
-  /* sous element NROWS */
-  
-  sprintf ( valeur , "%d" , nb_lig );
-  cr = cai_WriteElementXML ( des , "NROWS" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element NROWS" );
-    goto ERREUR;
-    }
-
-  /* sous element NBANDS */
-  
-  sprintf ( valeur , "%d" , nb_bs );
-  cr = cai_WriteElementXML ( des , "NBANDS" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element NBANDS" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Raster_Dimensions */
-
-  cr = cai_WriteCloseTagXML ( des , "Raster_Dimensions" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Raster_Dimensions" );
-    goto ERREUR;
-    }
-
-  /* sous element Raster_Encoding */
-  
-  cr = cai_WriteOpenTagXML ( des , "Raster_Encoding" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Raster_Encoding" );
-    goto ERREUR;
-    }
-
-  /* sous element NBITS */
-  
-  cr = cai_WriteElementXML ( des , "NBITS" , "8" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element NBITS" );
-    goto ERREUR;
-    }
-
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element DATA_TYPE                  */
-/****************************************************************************/
-
-  /* sous element DATA_TYPE */
-
-  cr = cai_WriteElementXML ( des , "DATA_TYPE" , "UNSIGNED" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DATA_TYPE" );
-    goto ERREUR;
-    }
-
-  /* sous element BYTEORDER */
-  
-  cr = cai_WriteElementXML ( des , "BYTEORDER" , "M" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element BYTEORDER" );
-    goto ERREUR;
-    }
-
-  /* sous element BANDS_LAYOUT */
-  
-  cr = cai_WriteElementXML ( des , "BANDS_LAYOUT" , band_layout );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element BANDS_LAYOUT" );
-    goto ERREUR;
-    }
-
-   /* sous element SKIPBYTES */
-  
-  cr = cai_WriteElementXML ( des , "SKIPBYTES" , "0" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SKIPBYTES" );
-    goto ERREUR;
-    }
-
- /* sous element COMPRESSION_NAME */
-  
-  cr = cai_WriteElementXML ( des , "COMPRESSION_NAME" , "NONE" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element COMPRESSION_NAME" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Raster_Encoding */
-
-  cr = cai_WriteCloseTagXML ( des , "Raster_Encoding" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Raster_Encoding" );
-    goto ERREUR;
-    }
-
-  /* sous element Data_Processing */
-  
-  cr = cai_WriteOpenTagXML ( des , "Data_Processing" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Data_Processing" );
-    goto ERREUR;
-    }
-
-  /* sous element PROCESSING_LEVEL */
-  
-  cr = cai_WriteElementXML ( des , "PROCESSING_LEVEL" , niv_trait );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PROCESSING_LEVEL" );
-    goto ERREUR;
-    }
-
-  /* sous element GEOMETRIC_PROCESSING */
-
-  if ( strncmp ( niv_trait , "2A" , 2 ) == 0)
-    {
-    cr = cai_WriteElementXML ( des , "GEOMETRIC_PROCESSING" , "CARTO" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element GEOMETRIC_PROCESSING" );
-      goto ERREUR;
-      }
-    }
-  else
-  if ( ( strncmp ( niv_trait , "1A" , 2 ) == 0) ||
-       ( strncmp ( niv_trait , "0" , 1 ) == 0) )
-    {
-    cr = cai_WriteElementXML ( des , "GEOMETRIC_PROCESSING" , "RAW" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element GEOMETRIC_PROCESSING" );
-      goto ERREUR;
-      }
-    }
-  else
-    {
-    cr = cai_WriteElementXML ( des , "GEOMETRIC_PROCESSING" , "SYSTEM" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element GEOMETRIC_PROCESSING" );
-      goto ERREUR;
-      }
-    }
-  
-  /* sous element RADIOMETRIC_PROCESSING */
-  
-  if ( strncmp ( niv_trait , "0" , 1 ) != 0)
-    {
-    cr = cai_WriteElementXML ( des , "RADIOMETRIC_PROCESSING" , "SYSTEM" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element RADIOMETRIC_PROCESSING" );
-      goto ERREUR;
-      }
-    }
-  else
-    {
-    cr = cai_WriteElementXML ( des , "RADIOMETRIC_PROCESSING" , "NONE" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element RADIOMETRIC_PROCESSING" );
-      goto ERREUR;
-      }
-    }
-  
-  /* sous element SPECTRAL_PROCESSING */
-
-  if ( ( codecapt == 'I' ) && ( nb_bs == 3 ) )
-    {
-    cr = cai_WriteElementXML ( des , "SPECTRAL_PROCESSING" , "X" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element SPECTRAL_PROCESSING" );
-      goto ERREUR;
-      }
-    }
-  else
-  if ( ( codecapt == 'M' ) && ( nb_bs == 3 ) )
-    {
-    cr = cai_WriteElementXML ( des , "SPECTRAL_PROCESSING" , "M+X" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element SPECTRAL_PROCESSING" );
-      goto ERREUR;
-      }
-    }
-  else
-  if ( ( codecapt == 'M' ) && ( nb_bs == 4 ) )
-    {
-    cr = cai_WriteElementXML ( des , "SPECTRAL_PROCESSING" , "M+I" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element SPECTRAL_PROCESSING" );
-      goto ERREUR;
-      }
-    }
-  
-  /* sous element Processing_Options */
-  
-  cr = cai_WriteOpenTagXML ( des , "Processing_Options" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Processing_Options" );
-    goto ERREUR;
-    }
-
-  /* sous element MEAN_RECTIFICATION_ELEVATION */
-  
-  if ( strncmp ( niv_trait , "1B" , 2 ) == 0)
-    {
-    cr = cai_WriteElementXML ( des , "MEAN_RECTIFICATION_ELEVATION" , "0" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element MEAN_RECTIFICATION_ELEVATION" );
-      goto ERREUR;
-      }
-    }
-  else
-  if ( strncmp ( niv_trait , "2A" , 2 ) == 0)  
-    {
-    cr = cai_WriteElementXML ( des , "MEAN_RECTIFICATION_ELEVATION" , mean );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element MEAN_RECTIFICATION_ELEVATION" );
-      goto ERREUR;
-      }
-    }
-  /* sous element Dynamic_Stretch */
-  
-  cr = cai_WriteOpenTagXML ( des , "Dynamic_Stretch" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Dynamic_Stretch" );
-    goto ERREUR;
-    }
-
-  for ( i = 0 ; i < nb_bs ; i++ )
-  {
-  /* sous element Thresholds */
-  
-  cr = cai_WriteOpenTagXML ( des , "Thresholds" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Thresholds" );
-    goto ERREUR;
-    }
-
-  /* sous element BAND_INDEX */
-  
-  sprintf ( valeur , "%d" , (i+1) );
-  cr = cai_WriteElementXML ( des , "BAND_INDEX" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element BAND_INDEX" );
-    goto ERREUR;
-    }
-
-  /* sous element LOW_THRESHOLD */
-  
-  cr = cai_WriteElementXML ( des , "LOW_THRESHOLD" , lowtresh[i] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element LOW_THRESHOLD" );
-    goto ERREUR;
-    }
-
-  /* sous element HIGH_THRESHOLD */
-  
-  cr = cai_WriteElementXML ( des , "HIGH_THRESHOLD" , uptresh[i] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element HIGH_THRESHOLD" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Thresholds */
-
-  cr = cai_WriteCloseTagXML ( des , "Thresholds" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Thresholds" );
-    goto ERREUR;
-    }
-  }
- /* Fermeture de l'element Dynamic_Stretch */
-
-  cr = cai_WriteCloseTagXML ( des , "Dynamic_Stretch" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Dynamic_Stretch" );
-    goto ERREUR;
-    }
-
-  /* sous element LINE_SHIFT */
-  
-  cr = cai_WriteElementXML ( des , "LINE_SHIFT" , shval );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element LINE_SHIFT" );
-    goto ERREUR;
-    }
-
-  if ( ( strcmp ( niv_trait , "1A" ) != 0) &&
-       ( strcmp ( niv_trait , "0" ) != 0) )
-  {
-  /* sous element RESAMPLING_METHOD */
-  
-  cr = cai_WriteElementXML ( des , "RESAMPLING_METHOD" , resampling );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element RESAMPLING_METHOD" );
-    goto ERREUR;
-    }
-  
-  /* sous element Sampling_Step */
-  
-  cr = cai_WriteOpenTagXML ( des , "Sampling_Step" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Sampling_Step" );
-    goto ERREUR;
-    }
-
-  /* sous element SAMPLING_STEP_X */
-  
-  cr = cai_WriteElementXML ( des , "SAMPLING_STEP_X" , taille_pixlig );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SAMPLING_STEP_X" );
-    goto ERREUR;
-    }
-
-  /* sous element SAMPLING_STEP_Y */
-  
-  cr = cai_WriteElementXML ( des , "SAMPLING_STEP_Y" , taille_pixcol );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SAMPLING_STEP_Y" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Sampling_Step */
-
-  cr = cai_WriteCloseTagXML ( des , "Sampling_Step" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Sampling_Step" );
-    goto ERREUR;
-    }
-  }
-  /* sous element SWIR_BAND_REGISTRATION_FLAG */
-  
-  if ( swir == 1 )
-    cr = cai_WriteElementXML ( des , "SWIR_BAND_REGISTRATION_FLAG" , "Y" );
-  else
-    cr = cai_WriteElementXML ( des , "SWIR_BAND_REGISTRATION_FLAG" , "N" );
-
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SWIR_BAND_REGISTRATION_FLAG" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Processing_Options */
-
-  cr = cai_WriteCloseTagXML ( des , "Processing_Options" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Processing_Options" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Data_Processing */
-
-  cr = cai_WriteCloseTagXML ( des , "Data_Processing" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Data_Processing" );
-    goto ERREUR;
-    }
-
-  /* sous element Data_Access */
-  
-  cr = cai_WriteOpenTagXML ( des , "Data_Access" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Data_Access" );
-    goto ERREUR;
-    }
-
-  /* sous element DATA_FILE_ORGANISATION */
-  
-  cr = cai_WriteElementXML ( des , "DATA_FILE_ORGANISATION" , "BAND_COMPOSITE" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DATA_FILE_ORGANISATION" );
-    goto ERREUR;
-    }
-
-  /* sous element DATA_FILE_FORMAT */
-  
-  cr = cai_WriteElementXML ( des , "DATA_FILE_FORMAT" , "RAW" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DATA_FILE_FORMAT" );
-    goto ERREUR;
-    }
-
-  /* sous element Data_File */
-  
-  cr = cai_WriteOpenTagXML ( des , "Data_File" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Data_File" );
-    goto ERREUR;
-    }
-
-  /* sous element DATA_FILE_PATH */
-  
-  cr = cai_WriteElementXML ( des , "DATA_FILE_PATH" , "./" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DATA_FILE_PATH" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Data_File */
-
-  cr = cai_WriteCloseTagXML ( des , "Data_File" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Data_File" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Data_Access */
-
-  cr = cai_WriteCloseTagXML ( des , "Data_Access" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Data_Access" );
-    goto ERREUR;
-    }
-
-  /* sous element Image_Display */
-  
-  cr = cai_WriteOpenTagXML ( des , "Image_Display" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Image_Display" );
-    goto ERREUR;
-    }
-
-  /* sous element Band_Display_Order */
-  
-  cr = cai_WriteOpenTagXML ( des , "Band_Display_Order" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Band_Display_Order" );
-    goto ERREUR;
-    }
-
-  if ( strncasecmp ( mode_spect , "PM" , 2) == 0)
-    {    
-
-    /* sous element RED_CHANNEL */
- 
-    cr = cai_WriteElementXML ( des , "RED_CHANNEL" , "1" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element RED_CHANNEL" );
-      goto ERREUR;
-      }    
-    /* sous element GREEN_CHANNEL */
- 
-    cr = cai_WriteElementXML ( des , "GREEN_CHANNEL" , "1" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element GREEN_CHANNEL" );
-      goto ERREUR;
-      }    
-    /* sous element BLUE_CHANNEL */
- 
-    cr = cai_WriteElementXML ( des , "BLUE_CHANNEL" , "1" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element BLUE_CHANNEL" );
-      goto ERREUR;
-      }    
-    }
-  else
-  if ( ( strncasecmp ( mode_spect , "XS" , 2) == 0)|| 
-       ( strncasecmp ( mode_spect , "XI" , 2) == 0) )
-    {
-    /* sous element RED_CHANNEL */
- 
-    cr = cai_WriteElementXML ( des , "RED_CHANNEL" , "3" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element RED_CHANNEL" );
-      goto ERREUR;
-      }    
-    /* sous element GREEN_CHANNEL */
- 
-    cr = cai_WriteElementXML ( des , "GREEN_CHANNEL" , "2" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element GREEN_CHANNEL" );
-      goto ERREUR;
-      }    
-
-    /* sous element BLUE_CHANNEL */
- 
-    cr = cai_WriteElementXML ( des , "BLUE_CHANNEL" , "1" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element BLUE_CHANNEL" );
-      goto ERREUR;
-      }    
-    }
-  
- /* Fermeture de l'element Band_Display_Order */
-
-  cr = cai_WriteCloseTagXML ( des , "Band_Display_Order" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Band_Display_Order" );
-    goto ERREUR;
-    }
-
-  /* sous element Special_Value */
-  
-  cr = cai_WriteOpenTagXML ( des , "Special_Value" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Special_Value" );
-    goto ERREUR;
-    }
-
-  /* sous element SPECIAL_VALUE_INDEX */
- 
-  cr = cai_WriteElementXML ( des , "SPECIAL_VALUE_INDEX" , "0" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SPECIAL_VALUE_INDEX" );
-    goto ERREUR;
-    }
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : FA : SPECIAL_VALUE_TEXT  NODATA a la place NO_DATA  */
-/*****************************************************************************/  
-  /* sous element SPECIAL_VALUE_TEXT */
- 
-  cr = cai_WriteElementXML ( des , "SPECIAL_VALUE_TEXT" , "NODATA" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SPECIAL_VALUE_TEXT" );
-    goto ERREUR;
-    }    
-   
-  /* sous element Special_Value_Color */
-  
-  cr = cai_WriteOpenTagXML ( des , "Special_Value_Color" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Special_Value_Color" );
-    goto ERREUR;
-    }
-  
-  /* sous element RED_LEVEL */
- 
-  cr = cai_WriteElementXML ( des , "RED_LEVEL" , "0" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element RED_LEVEL" );
-    goto ERREUR;
-    }    
-  
-  /* sous element GREEN_LEVEL */
- 
-  cr = cai_WriteElementXML ( des , "GREEN_LEVEL" , "0" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element GREEN_LEVEL" );
-    goto ERREUR;
-    }    
-  
-  /* sous element BLUE_LEVEL */
- 
-  cr = cai_WriteElementXML ( des , "BLUE_LEVEL" , "0" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element BLUE_LEVEL" );
-    goto ERREUR;
-    }    
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Rajouter ALPHA_LEVEL unqiement pour SPOT4 MIR  */
-/*****************************************************************************/ 
-
-   if ((nb_bs == 4)&&(satellite_index==4))
-   {
-  /* sous element ALPHA_LEVEL */
- 
-      cr = cai_WriteElementXML ( des , "ALPHA_LEVEL" , "0" );
-      if ( cr == CAI_KO )
-      {
-        sprintf ( CAI_ERREUR , "Erreur ecriture Element ALPHA_LEVEL" );
-        goto ERREUR;
-       }    
-   } 
-
-  /* Fermeture de l'element Special_Value_Color */
-
-  cr = cai_WriteCloseTagXML ( des , "Special_Value_Color" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Special_Value_Color" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Special_Value */
-
-  cr = cai_WriteCloseTagXML ( des , "Special_Value" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Special_Value" );
-    goto ERREUR;
-    }
-
-  /* sous element Special_Value */
-  
-  cr = cai_WriteOpenTagXML ( des , "Special_Value" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Special_Value" );
-    goto ERREUR;
-    }
-  
-  /* sous element SPECIAL_VALUE_INDEX */
- 
-  cr = cai_WriteElementXML ( des , "SPECIAL_VALUE_INDEX" , "255" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SPECIAL_VALUE_INDEX" );
-    goto ERREUR;
-    }    
- 
-/******************************************************************************/
-/* MOD : VERSION : 4.7 : DM : remplacement de SATURATE par SATURATED          */
-/******************************************************************************/
- 
-  /* sous element SPECIAL_VALUE_TEXT */
- 
-  cr = cai_WriteElementXML ( des , "SPECIAL_VALUE_TEXT" , "SATURATED" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SPECIAL_VALUE_TEXT" );
-    goto ERREUR;
-    }    
-  
-  /* sous element Special_Value_Color */
-  
-  cr = cai_WriteOpenTagXML ( des , "Special_Value_Color" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Special_Value_Color" );
-    goto ERREUR;
-    }
- 
-/******************************************************************************/
-/* MOD : VERSION : 4.7 : DM : remplacement de 255 par 1 dans les element LEVEL*/
-/******************************************************************************/
- 
-  /* sous element RED_LEVEL */
- 
-  cr = cai_WriteElementXML ( des , "RED_LEVEL" , "1" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element RED_LEVEL" );
-    goto ERREUR;
-    }    
-  
-  /* sous element GREEN_LEVEL */
- 
-  cr = cai_WriteElementXML ( des , "GREEN_LEVEL" , "1" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element GREEN_LEVEL" );
-    goto ERREUR;
-    }    
-  
-  /* sous element BLUE_LEVEL */
- 
-  cr = cai_WriteElementXML ( des , "BLUE_LEVEL" , "1" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element BLUE_LEVEL" );
-    goto ERREUR;
-    }
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Rajouter ALPHA_LEVEL uniquement pour SPOT4 MIR */
-/*****************************************************************************/ 
-
-   if ((nb_bs == 4)&&(satellite_index==4))
-   {
-  /* sous element ALPHA_LEVEL */
- 
-      cr = cai_WriteElementXML ( des , "ALPHA_LEVEL" , "1" );
-      if ( cr == CAI_KO )
-      {
-        sprintf ( CAI_ERREUR , "Erreur ecriture Element ALPHA_LEVEL" );
-        goto ERREUR;
-       }    
-   } 
-
-  /* Fermeture de l'element Special_Value_Color */
-
-  cr = cai_WriteCloseTagXML ( des , "Special_Value_Color" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Special_Value_Color" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Special_Value */
-
-  cr = cai_WriteCloseTagXML ( des , "Special_Value" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Special_Value" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Image_Display */
-
-  cr = cai_WriteCloseTagXML ( des , "Image_Display" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Image_Display" );
-    goto ERREUR;
-    }
-
-  /* sous element Image_Interpretation */
-  
-  cr = cai_WriteOpenTagXML ( des , "Image_Interpretation" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Image_Interpretation" );
-    goto ERREUR;
-    }
-
-  for ( j = 0; j < nb_bs ; j++ )
-    {
-    /* sous element Spectral_Band_Info */
-  
-    cr = cai_WriteOpenTagXML ( des , "Spectral_Band_Info" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element Spectral_Band_Info" );
-      goto ERREUR;
-      }
-
-    /* sous element BAND_INDEX */
-  
-    sprintf ( valeur , "%d" , (j+1) );
-  
-    cr = cai_WriteElementXML ( des , "BAND_INDEX" , valeur );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element BAND_INDEX" );
-      goto ERREUR;
-      }
-    
-    /* sous element BAND_DESCRIPTION */
-
-    if ( nb_bs == 1 )
-      sprintf ( valeur , "PAN" );
-    else
-    if ( ( ( j == 0) || ( j == 1 ) ) || ( j == 2 ) )
-      sprintf ( valeur , "XS%d" , (j+1) );
-    else
-    if ( j == 3 )
-      sprintf ( valeur , "SWIR" );
-     
-/******************************************************************************/
-/* MOD : VERSION : 4.7 : DM : remplacement de BAND par BAND_DESCRIPTION       */
-/******************************************************************************/
- 
-    cr = cai_WriteElementXML ( des , "BAND_DESCRIPTION" , valeur );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element BAND_DESCRIPTION" );
-      goto ERREUR;
-      }
- 
-   /* sous element PHYSICAL_CALIBRATION_DATE */
-  
-  cr = cai_WriteElementXML ( des , "PHYSICAL_CALIBRATION_DATE" , datecalib );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PHYSICAL_CALIBRATION_DATE" );
-    goto ERREUR;
-    }
-
-  /* sous element PHYSICAL_BIAIS */
-  
-  cr = cai_WriteElementXML ( des , "PHYSICAL_BIAIS" , gains_b[j] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PHYSICAL_BIAIS" );
-    goto ERREUR;
-    }
-
-  /* sous element PHYSICAL_GAIN */
-  
-  cr = cai_WriteElementXML ( des , "PHYSICAL_GAIN" , gains_a[j] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PHYSICAL_GAIN" );
-    goto ERREUR;
-    }
-
-/******************************************************************************/
-/* MOD : VERSION : 4.7 : DM : ajout de l'unite dans PHYSICAL_UNIT             */
-/******************************************************************************/
- 
-  /* sous element PHYSICAL_UNIT */
-  
-  cr = cai_WriteElementXML ( des , "PHYSICAL_UNIT" , "equivalent radiance (W.m-2.Sr-1.um-1)" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PHYSICAL_UNIT" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Spectral_Band_Info */
-
-  cr = cai_WriteCloseTagXML ( des , "Spectral_Band_Info" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Spectral_Band_Info" );
-    goto ERREUR;
-    }
-  }
-
-  /* Fermeture de l'element Image_Interpretation */
-
-  cr = cai_WriteCloseTagXML ( des , "Image_Interpretation" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Image_Interpretation" );
-    goto ERREUR;
-    }
-
-  /* sous element Data_Strip */
-  
-  cr = cai_WriteOpenTagXML ( des , "Data_Strip" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Data_Strip" );
-    goto ERREUR;
-    }
-
-  /* sous element Satellite_Time */
-  
-  cr = cai_WriteOpenTagXML ( des , "Satellite_Time" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Satellite_Time" );
-    goto ERREUR;
-    }
-
-  /* sous element UT_DATE */
-  
-  sprintf ( valeur , "%.7d %.5d.000000" , utdatej , utdates );
-  cr = cai_WriteElementXML ( des , "UT_DATE" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element UT_DATE" );
-    goto ERREUR;
-    }
-
-  /* sous element CLOCK_VALUE */
-  
-  cr = cai_WriteElementXML ( des , "CLOCK_VALUE" , clockvalue );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element CLOCK_VALUE" );
-    goto ERREUR;
-    }
-
-  /* sous element CLOCK_PERIOD */
-  
-  if ( clockperiod[0] != '\0' )
-     sscanf ( clockperiod , "%lf" , &period );
-  else
-	period = 0.0;
-  pico =0.000000000001;
-  period = period * pico;
-  
-  sprintf ( valeur , "%.12lf" , period );
-  
-  cr = cai_WriteElementXML ( des , "CLOCK_PERIOD" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element CLOCK_PERIOD" );
-    goto ERREUR;
-    }
-
-  /* sous element BOARD_TIME */
-  
-  cr = cai_WriteElementXML ( des , "BOARD_TIME" , boardtime );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element BOARD_TIME" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Satellite_Time */
-
-  cr = cai_WriteCloseTagXML ( des , "Satellite_Time" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Satellite_Time" );
-    goto ERREUR;
-    }
-
-  /* sous element Ephemeris */
-  
-  cr = cai_WriteOpenTagXML ( des , "Ephemeris" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Ephemeris" );
-    goto ERREUR;
-    }
-
-  /* sous element SATELLITE_ALTITUDE */
-  
-  cr = cai_WriteElementXML ( des , "SATELLITE_ALTITUDE" , sat_alt );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SATELLITE_ALTITUDE" );
-    goto ERREUR;
-    }
-
-  /* sous element NADIR_LAT */
-  
-  sprintf ( valeur , "%lf" , lat_nad );
-  cr = cai_WriteElementXML ( des , "NADIR_LAT" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element NADIR_LAT" );
-    goto ERREUR;
-    }
-
-  /* sous element NADIR_LON */
-  
-  sprintf ( valeur , "%lf" , long_nad );
-  cr = cai_WriteElementXML ( des , "NADIR_LON" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element NADIR_LON" );
-    goto ERREUR;
-    }
-
-  /* sous element Points */
-  
-  cr = cai_WriteOpenTagXML ( des , "Points" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Points" );
-    goto ERREUR;
-    }
-
-  for ( j = 0; j < 8 ; j++ )
-  {
-  /* sous element Point */
-  
-  cr = cai_WriteOpenTagXML ( des , "Point" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Point" );
-    goto ERREUR;
-    }
-
-  /* sous element Location */
-  
-  cr = cai_WriteOpenTagXML ( des , "Location" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Location" );
-    goto ERREUR;
-    }
-
-  /* sous element X */
-  
-  sprintf ( valeur , "%.3lf" , X_loc[j]*1000.0 );
-  cr = cai_WriteElementXML ( des , "X" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element X" );
-    goto ERREUR;
-    }
-
-  /* sous element Y */
-  
-  sprintf ( valeur , "%.3lf" , Y_loc[j]*1000.0 );
-  cr = cai_WriteElementXML ( des , "Y" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Y" );
-    goto ERREUR;
-    }
-
-  /* sous element Z */
-  
-  sprintf ( valeur , "%.3lf" , Z_loc[j]*1000.0 );
-  cr = cai_WriteElementXML ( des , "Z" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Z" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Location */
-
-  cr = cai_WriteCloseTagXML ( des , "Location" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Location" );
-    goto ERREUR;
-    }
-
-  /* sous element Velocity */
-  
-  cr = cai_WriteOpenTagXML ( des , "Velocity" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Velocity" );
-    goto ERREUR;
-    }
-
-  /* sous element X */
-  
-  sprintf ( valeur , "%.3lf" , X_vel[j]*1000.0 );
-  cr = cai_WriteElementXML ( des , "X" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element X" );
-    goto ERREUR;
-    }
-
-  /* sous element Y */
-  
-  sprintf ( valeur , "%.3lf" , Y_vel[j]*1000.0 );
-  cr = cai_WriteElementXML ( des , "Y" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Y" );
-    goto ERREUR;
-    }
-
-  /* sous element Z */
-  
-  sprintf ( valeur , "%.3lf" , Z_vel[j]*1000.0 );
-  cr = cai_WriteElementXML ( des , "Z" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Z" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Velocity */
-
-  cr = cai_WriteCloseTagXML ( des , "Velocity" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Velocity" );
-    goto ERREUR;
-    }
-
-  /* sous element TIME */
-  
-  cr = cai_WriteElementXML ( des , "TIME" , time[j] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIME" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Point */
-
-  cr = cai_WriteCloseTagXML ( des , "Point" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Point" );
-    goto ERREUR;
-    }
-  }
-  
-  if ( X_loc[8] != 0.0 )
-    {
-  /* sous element Point */
-  
-  cr = cai_WriteOpenTagXML ( des , "Point" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Point" );
-    goto ERREUR;
-    }
-
-  /* sous element Location */
-  
-  cr = cai_WriteOpenTagXML ( des , "Location" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Location" );
-    goto ERREUR;
-    }
-
-  /* sous element X */
-  
-  sprintf ( valeur , "%.3lf" , X_loc[8] );
-  
-  cr = cai_WriteElementXML ( des , "X" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element X" );
-    goto ERREUR;
-    }
-
-  /* sous element Y */
-  
-  sprintf ( valeur , "%.3lf" , Y_loc[8] );
-  cr = cai_WriteElementXML ( des , "Y" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Y" );
-    goto ERREUR;
-    }
-
-  /* sous element Z */
-  
-  sprintf ( valeur , "%.3lf" , Z_loc[8] );
-  cr = cai_WriteElementXML ( des , "Z" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Z" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Location */
-
-  cr = cai_WriteCloseTagXML ( des , "Location" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Location" );
-    goto ERREUR;
-    }
-
-  /* sous element Velocity */
-  
-  cr = cai_WriteOpenTagXML ( des , "Velocity" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Velocity" );
-    goto ERREUR;
-    }
-
-  /* sous element X */
-  
-  sprintf ( valeur , "%.3lf" , X_vel[8]*1000.0 );
-  cr = cai_WriteElementXML ( des , "X" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element X" );
-    goto ERREUR;
-    }
-
-  /* sous element Y */
-  
-  sprintf ( valeur , "%lf" , Y_vel[8]*1000.0 );
-  cr = cai_WriteElementXML ( des , "Y" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Y" );
-    goto ERREUR;
-    }
-
-  /* sous element Z */
-  
-  sprintf ( valeur , "%.3lf" , Z_vel[8]*1000.0 );
-  cr = cai_WriteElementXML ( des , "Z" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Z" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Velocity */
-
-  cr = cai_WriteCloseTagXML ( des , "Velocity" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Velocity" );
-    goto ERREUR;
-    }
-
-  /* sous element TIME */
-  
-  cr = cai_WriteElementXML ( des , "TIME" , time[8] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIME" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Point */
-
-  cr = cai_WriteCloseTagXML ( des , "Point" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Point" );
-    goto ERREUR;
-    }
-
-  }
-  /* Fermeture de l'element Points */
-
-  cr = cai_WriteCloseTagXML ( des , "Points" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Points" );
-    goto ERREUR;
-    }
-
-  /* sous element DORIS_USED */
-  
-  cr = cai_WriteElementXML ( des , "DORIS_USED" , dorisused );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DORIS_USED" );
-    goto ERREUR;
-    }
-
-  if ( satellite_index == 4 )
-    {
-  /* sous element Orbital_Bulletin */
-  
-  cr = cai_WriteOpenTagXML ( des , "Orbital_Bulletin" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Orbital_Bulletin" );
-    goto ERREUR;
-    }
-
-  /* sous element UT_DATE */
-  
-  sprintf ( valeur , "%.7d %.5d.000000" , jourjul , datejul );
-  cr = cai_WriteElementXML ( des , "UT_DATE" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element UT_DATE" );
-    goto ERREUR;
-    }
-
-  /* sous element ELLIPSE_AXIS */
-  
-  cr = cai_WriteElementXML ( des , "ELLIPSE_AXIS" , axis );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element ELLIPSE_AXIS" );
-    goto ERREUR;
-    }
-
-  /* sous element ELLIPSE_ECCENTRICITY_VECTOR_EX */
-  
-  cr = cai_WriteElementXML ( des , "ELLIPSE_ECCENTRICITY_VECTOR_EX" , ex );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element ELLIPSE_ECCENTRICITY_VECTOR_EX" );
-    goto ERREUR;
-    }
-
-  /* sous element ELLIPSE_ECCENTRICITY_VECTOR_EY */
-  
-  cr = cai_WriteElementXML ( des , "ELLIPSE_ECCENTRICITY_VECTOR_EY" , ey );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element ELLIPSE_ECCENTRICITY_VECTOR_EY" );
-    goto ERREUR;
-    }
-
-  /* sous element ELLIPSE_INCLINATION */
-  
-  cr = cai_WriteElementXML ( des , "ELLIPSE_INCLINATION" , inclin );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element ELLIPSE_INCLINATION" );
-    goto ERREUR;
-    }
-
-  /* sous element RIGHT_ASCENSION */
-  
-  cr = cai_WriteElementXML ( des , "RIGHT_ASCENSION" , ascension );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element RIGHT_ASCENSION" );
-    goto ERREUR;
-    }
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : erreur d'orthographe sur LATITUDE_ARGUMENT     */
-/*			      et Look_Angles				     */
-/*****************************************************************************/
-
-  /* sous element LATITUDE_ARGUMENT */
-  
-  cr = cai_WriteElementXML ( des , "LATITUDE_ARGUMENT" , latarg );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element LATITUDE_ARGUMENT" );
-    goto ERREUR;
-    }
-
-  /* sous element P7 */
-  
-  cr = cai_WriteElementXML ( des , "P7" , p7 );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element P7" );
-    goto ERREUR;
-    }
-
-  /* sous element P8 */
-  
-  cr = cai_WriteElementXML ( des , "P8" , p8 );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element P8" );
-    goto ERREUR;
-    }
-
-  /* sous element P9 */
-  
-  cr = cai_WriteElementXML ( des , "P9" , p9 );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element P9" );
-    goto ERREUR;
-    }
-
-  /* sous element P10 */
-  
-  cr = cai_WriteElementXML ( des , "P10" , p10 );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element P10" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Orbital_Bulletin */
-
-  cr = cai_WriteCloseTagXML ( des , "Orbital_Bulletin" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Orbital_Bulletin" );
-    goto ERREUR;
-    }
-    
-  }
-
-  /* Fermeture de l'element Ephemeris */
-
-  cr = cai_WriteCloseTagXML ( des , "Ephemeris" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Ephemeris" );
-    goto ERREUR;
-    }
-
-  /* sous element Satellite_Attitudes */
-  
-  cr = cai_WriteOpenTagXML ( des , "Satellite_Attitudes" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Satellite_Attitudes" );
-    goto ERREUR;
-    }
-
-  /* sous element Raw_Attitudes */
-  
-  cr = cai_WriteOpenTagXML ( des , "Raw_Attitudes" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Raw_Attitudes" );
-    goto ERREUR;
-    }
-
-  /* sous element Aocs_Attitude */
-  
-  cr = cai_WriteOpenTagXML ( des , "Aocs_Attitude" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Aocs_Attitude" );
-    goto ERREUR;
-    }
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element Angles_List                 */
-/*****************************************************************************/
-
-  /* sous element Angles_List */
-  
-  cr = cai_WriteOpenTagXML ( des , "Angles_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Angles_List" );
-    goto ERREUR;
-    }
-
-  for ( j = 0; j < 2 ; j++ )
-  {
-  /* sous element Angles */
-  
-  cr = cai_WriteOpenTagXML ( des , "Angles" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Angles" );
-    goto ERREUR;
-    }
-
-  /* sous element TIME */
-  
-  cr = cai_WriteElementXML ( des , "TIME" , timeyaw[j] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIME" );
-    goto ERREUR;
-    }
-
-  /* sous element YAW */
-  
-  cr = cai_WriteElementXML ( des , "YAW" , yaw_angle[j] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element YAW" );
-    goto ERREUR;
-    }
-
-  /* sous element PITCH */
-  
-  cr = cai_WriteElementXML ( des , "PITCH" , pitch_angle[j] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PITCH" );
-    goto ERREUR;
-    }
-
-  /* sous element ROLL */
-  
-  cr = cai_WriteElementXML ( des , "ROLL" , roll_angle[j] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element ROLL" );
-    goto ERREUR;
-    }
-
-  /* sous element OUT_OF_RANGE */
-  
-  cr = cai_WriteElementXML ( des , "OUT_OF_RANGE" , "N" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element OUT_OF_RANGE" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Angles */
-
-  cr = cai_WriteCloseTagXML ( des , "Angles" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Angles" );
-    goto ERREUR;
-    }
-  }
- 
-  /* Fermeture de l'element Angles_List */
-
-  cr = cai_WriteCloseTagXML ( des , "Angles_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Angles_List" );
-    goto ERREUR;
-    }
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element Angular_Speeds_List         */
-/*****************************************************************************/
-
-  /* sous element Angular_Speeds_List */
- 
-  cr = cai_WriteOpenTagXML ( des , "Angular_Speeds_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Angular_Speeds_List" );
-    goto ERREUR;
-    }
- 
-  for ( j = 0; j < 72 ; j++ )
-  {
-  /* sous element Angular_Speeds */
-  
-  cr = cai_WriteOpenTagXML ( des , "Angular_Speeds" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Angular_Speeds" );
-    goto ERREUR;
-    }
-
-  /* sous element TIME */
-  
-  cr = cai_WriteElementXML ( des , "TIME" , time_angle[j] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIME" );
-    goto ERREUR;
-    }
-
-  /* sous element YAW */
-  
-  cr = cai_WriteElementXML ( des , "YAW" , yaw[j] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element YAW" );
-    goto ERREUR;
-    }
-
-  /* sous element PITCH */
-  
-  cr = cai_WriteElementXML ( des , "PITCH" , pitch[j] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PITCH" );
-    goto ERREUR;
-    }
-
-  /* sous element ROLL */
-  
-  cr = cai_WriteElementXML ( des , "ROLL" , roll[j] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element ROLL" );
-    goto ERREUR;
-    }
-
-  /* sous element OUT_OF_RANGE */
-  
-  cr = cai_WriteElementXML ( des , "OUT_OF_RANGE" , outofrange );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element OUT_OF_RANGE" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Angular_Speeds */
-
-  cr = cai_WriteCloseTagXML ( des , "Angular_Speeds" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Angular_Speeds" );
-    goto ERREUR;
-    }
-  }
-
-  if ( strcmp ( yaw[72] , "" ) != 0)
-   {
-     /* sous element Angular_Speeds */
-  
-  cr = cai_WriteOpenTagXML ( des , "Angular_Speeds" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Angular_Speeds" );
-    goto ERREUR;
-    }
-
-  /* sous element TIME */
-  
-  cr = cai_WriteElementXML ( des , "TIME" , time_angle[72] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIME" );
-    goto ERREUR;
-    }
-
-  /* sous element YAW */
-  
-  cr = cai_WriteElementXML ( des , "YAW" , yaw[72] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element YAW" );
-    goto ERREUR;
-    }
-
-  /* sous element PITCH */
-  
-  cr = cai_WriteElementXML ( des , "PITCH" , pitch[72] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PITCH" );
-    goto ERREUR;
-    }
-
-  /* sous element ROLL */
-  
-  cr = cai_WriteElementXML ( des , "ROLL" , roll[72] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element ROLL" );
-    goto ERREUR;
-    }
-
-  /* sous element OUT_OF_RANGE */
-  
-  cr = cai_WriteElementXML ( des , "OUT_OF_RANGE" , outofrange );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element OUT_OF_RANGE" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Angular_Speeds */
-
-  cr = cai_WriteCloseTagXML ( des , "Angular_Speeds" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Angular_Speeds" );
-    goto ERREUR;
-    }
-  }
-
-  /* Fermeture de l'element Angular_Speeds_List */
-
-  cr = cai_WriteCloseTagXML ( des , "Angular_Speeds_List" ); 
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Angular_Speeds_List" );
-    goto ERREUR;
-    }
-
-   /* Fermeture de l'element Aocs_Attitude */
-
-  cr = cai_WriteCloseTagXML ( des , "Aocs_Attitude" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Aocs_Attitude" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Raw_Attitudes */
-
-  cr = cai_WriteCloseTagXML ( des , "Raw_Attitudes" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Raw_Attitudes" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Satellite_Attitudes */
-
-  cr = cai_WriteCloseTagXML ( des , "Satellite_Attitudes" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Satellite_Attitudes" );
-    goto ERREUR;
-    }
-
-  /* sous element Sensor_Configuration */
-  
-  cr = cai_WriteOpenTagXML ( des , "Sensor_Configuration" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Sensor_Configuration" );
-    goto ERREUR;
-    }
-
-  /* sous element Time_Stamp */
-  
-  cr = cai_WriteOpenTagXML ( des , "Time_Stamp" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Time_Stamp " );
-    goto ERREUR;
-    }
-
-  /* sous element LINE_PERIOD */
-  
-  sprintf ( valeur , "%.12lf" , periodeligne );
-  cr = cai_WriteElementXML ( des , "LINE_PERIOD" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element LINE_PERIOD" );
-    goto ERREUR;
-    }
-
-  /* sous element SCENE_CENTER_TIME */
-  
-  cr = cai_WriteElementXML ( des , "SCENE_CENTER_TIME" , time_scenecenter );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SCENE_CENTER_TIME" );
-    goto ERREUR;
-    }
-
-  /* sous element SCENE_CENTER_LINE */
-  
-  sprintf ( valeur , "%d" , nbc_c );
-  cr = cai_WriteElementXML ( des , "SCENE_CENTER_LINE" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SCENE_CENTER_LINE" );
-    goto ERREUR;
-    }
-
-  /* sous element SCENE_CENTER_COL */
-  
-  sprintf ( valeur , "%d" , nbl_c );
-  cr = cai_WriteElementXML ( des , "SCENE_CENTER_COL" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SCENE_CENTER_COL" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Time_Stamp */
-
-  cr = cai_WriteCloseTagXML ( des , "Time_Stamp" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Time_Stamp" );
-    goto ERREUR;
-    }
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element Instrument_look_Angles_List */
-/*****************************************************************************/
-
-  /* sous element Instrument_Look_Angles_List */
-  
-  cr = cai_WriteOpenTagXML ( des , "Instrument_Look_Angles_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Instrument_Look_Angles_List" );
-    goto ERREUR;
-    }
-
-  j = 0;
-  while ( ( j < nb_bs ) && ( j < 3 ) )
-  {
-  /* sous element Instrument_Look_Angles */
-  
-  cr = cai_WriteOpenTagXML ( des , "Instrument_Look_Angles" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Instrument_Look_Angles" );
-    goto ERREUR;
-    }
-
-  /* sous element VALIDITY_DATE */
-  
-  cr = cai_WriteElementXML ( des , "VALIDITY_DATE" , datecalib );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element VALIDITY_DATE" );
-    goto ERREUR;
-    }
-
-  /* sous element BAND_INDEX */
-  
-  sprintf ( valeur , "%d" , (j+1) );
-  cr = cai_WriteElementXML ( des , "BAND_INDEX" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element BAND_INDEX" );
-    goto ERREUR;
-    }
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element Look_Angles_List            */
-/*****************************************************************************/
-
-  /* sous element Look_Angles_List */
-
-  cr = cai_WriteOpenTagXML ( des , "Look_Angles_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Look_Angles_List" );
-    goto ERREUR;
-    }
-
-  /* sous element Look_Angles */
-  
-  cr = cai_WriteOpenTagXML ( des , "Look_Angles" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Look_Angles" );
-    goto ERREUR;
-    }
-
-  /* sous element DETECTOR_ID */
-
-  cr = cai_WriteElementXML ( des , "DETECTOR_ID" , "1" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DETECTOR_ID" );
-    goto ERREUR;
-    }
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM : DIMAP tag LOOK_ANGLE_LIST valeurs de PSI_X et  */
-/*                            PSI_Y 1er et dernier detecteur inverses        */
-/*****************************************************************************/
-
-  /* sous element PSI_X */
-  
-  sprintf ( valeur , "%lf" , psi_x_last[0] );
-  cr = cai_WriteElementXML ( des , "PSI_X" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PSI_X" );
-    goto ERREUR;
-    }
-
-  /* sous element PSI_Y */
-  
-  sprintf ( valeur , "%lf" , psi_y_last[0] );
-  cr = cai_WriteElementXML ( des , "PSI_Y" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PSI_Y" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Look_Angles */
-
-  cr = cai_WriteCloseTagXML ( des , "Look_Angles" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Look_Angles" );
-    goto ERREUR;
-    }
-
-  /* sous element Look_Angle */
-  
-  cr = cai_WriteOpenTagXML ( des , "Look_Angles" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Look_Angles" );
-    goto ERREUR;
-    }
-
-  /* sous element DETECTOR_ID */
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : erreur d'ecriture detector_id lookangle pour   */
-/*                            PAN                                            */
-/*****************************************************************************/
-
-  if ( nb_bs == 1 ) 
-     detect_id = 6000;
-  else
-     detect_id = 3000;
-
-  sprintf ( valeur , "%d" , detect_id );
-
-  cr = cai_WriteElementXML ( des , "DETECTOR_ID" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DETECTOR_ID" );
-    goto ERREUR;
-    }
-
-  /* sous element PSI_X */
-  
-  sprintf ( valeur , "%lf" , psi_x_first[0] );
-  cr = cai_WriteElementXML ( des , "PSI_X" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PSI_X" );
-    goto ERREUR;
-    }
-
-  /* sous element PSI_Y */
-  
-  sprintf ( valeur , "%lf" , psi_y_first[0] );
-  cr = cai_WriteElementXML ( des , "PSI_Y" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PSI_Y" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Look_Angles */
-
-  cr = cai_WriteCloseTagXML ( des , "Look_Angles" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Look_Angles" );
-    goto ERREUR;
-    }
- 
-  /* Fermeture de l'element Look_Angles_List */
-
-  cr = cai_WriteCloseTagXML ( des , "Look_Angles_List" ); 
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Look_Angles_List" );
-    goto ERREUR;
-    }
- 
-  /* Fermeture de l'element Instrument_Look_Angles */
-
-  cr = cai_WriteCloseTagXML ( des , "Instrument_Look_Angles" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Instrument_Look_Angles" );
-    goto ERREUR;
-    }
-  j++;
-  }
-
-  while ( ( nb_bs != 1 ) && ( j < nb_bs + 1 ) )
-  {
-  /* sous element Instrument_Look_Angles */
-  
-  cr = cai_WriteOpenTagXML ( des , "Instrument_Look_Angles" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Instrument_Look_Angles" );
-    goto ERREUR;
-    }
-
-  /* sous element VALIDITY_DATE */
-  
-  cr = cai_WriteElementXML ( des , "VALIDITY_DATE" , datecalib );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element VALIDITY_DATE" );
-    goto ERREUR;
-    }
-
-  /* sous element BAND_INDEX */
-  
-  sprintf ( valeur , "%d" , (j+1) );
-  cr = cai_WriteElementXML ( des , "BAND_INDEX" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element BAND_INDEX" );
-    goto ERREUR;
-    }
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element Look_Angles_List            */
-/*****************************************************************************/
-
-  /* sous element Look_Angles_List */
-
-  cr = cai_WriteOpenTagXML ( des , "Look_Angles_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Look_Angles_List" );
-    goto ERREUR;
-    }
-
-
-  /* sous element Look_Angles */
-  
-  cr = cai_WriteOpenTagXML ( des , "Look_Angles" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Look_Angles" );
-    goto ERREUR;
-    }
-
-  /* sous element DETECTOR_ID */
-
-  cr = cai_WriteElementXML ( des , "DETECTOR_ID" , "1" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DETECTOR_ID" );
-    goto ERREUR;
-    }
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM : DIMAP tag LOOK_ANGLE_LIST valeurs de PSI_X et  */
-/*                            PSI_Y 1er et dernier detecteur inverses        */
-/*****************************************************************************/
-
-  /* sous element PSI_X */
-  
-  sprintf ( valeur , "%lf" , psi_x_last[j-2] );
-  cr = cai_WriteElementXML ( des , "PSI_X" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PSI_X" );
-    goto ERREUR;
-    }
-
-  /* sous element PSI_Y */
-  
-  sprintf ( valeur , "%lf" , psi_y_last[j-2] );
-  cr = cai_WriteElementXML ( des , "PSI_Y" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PSI_Y" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Look_Angles */
-
-  cr = cai_WriteCloseTagXML ( des , "Look_Angles" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Look_Angles" );
-    goto ERREUR;
-    }
-
-  /* sous element Look_Angles */
-  
-  cr = cai_WriteOpenTagXML ( des , "Look_Angles" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Look_Angles" );
-    goto ERREUR;
-    }
-
-  /* sous element DETECTOR_ID */
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : erreur d'ecriture detector_id lookangle pour   */
-/*                            PAN                                            */
-/*****************************************************************************/
-
-  if ( nb_bs == 1 )
-     detect_id = 6000;
-  else
-     detect_id = 3000;
-
-  sprintf ( valeur , "%d" , detect_id );
-
-  cr = cai_WriteElementXML ( des , "DETECTOR_ID" , valeur );
-
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DETECTOR_ID" );
-    goto ERREUR;
-    }
-
-  /* sous element PSI_X */
-  
-  sprintf ( valeur , "%lf" , psi_x_first[j-2] );
-  cr = cai_WriteElementXML ( des , "PSI_X" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PSI_X" );
-    goto ERREUR;
-    }
-
-  /* sous element PSI_Y */
-  
-  sprintf ( valeur , "%lf" , psi_y_first[j-2] );
-  cr = cai_WriteElementXML ( des , "PSI_Y" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element PSI_Y" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Look_Angles */
-
-  cr = cai_WriteCloseTagXML ( des , "Look_Angles" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Look_Angles" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Look_Angles_List */
-
-  cr = cai_WriteCloseTagXML ( des , "Look_Angles_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Look_Angles_List" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Instrument_Look_Angles */
-
-  cr = cai_WriteCloseTagXML ( des , "Instrument_Look_Angles" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Instrument_Look_Angles" );
-    goto ERREUR;
-    }
-  j++;
-  
-  }
-
-  /* Fermeture de l'element Instrument_Look_Angles_List */
-
-  cr = cai_WriteCloseTagXML ( des , "Instrument_Look_Angles_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Instrument_Look_Angles_List" );
-    goto ERREUR;
-    }
-
-  /* sous element Mirror_Position */
-  
-  cr = cai_WriteOpenTagXML ( des , "Mirror_Position" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Mirror_Position" );
-    goto ERREUR;
-    }
-
-  /* sous element STEP_COUNT */
-  
-  cr = cai_WriteElementXML ( des , "STEP_COUNT" , mirror_step );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element STEP_COUNT" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Mirror_Position */
-
-  cr = cai_WriteCloseTagXML ( des , "Mirror_Position" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Mirror_Position" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Sensor_Configuration */
-
-  cr = cai_WriteCloseTagXML ( des , "Sensor_Configuration" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Sensor_Configuration" );
-    goto ERREUR;
-    }
-
-  /* sous element Frame_Counters */
-  
-  cr = cai_WriteOpenTagXML ( des , "Frame_Counters" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Frame_Counters" );
-    goto ERREUR;
-    }
-
-  /* sous element SEGMENT_START */
-  
-  cr = cai_WriteElementXML ( des , "SEGMENT_START" , segmentstart );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SEGMENT_START" );
-    goto ERREUR;
-    }
-
-   /* sous element SCENE_START */
-  
-  cr = cai_WriteElementXML ( des , "SCENE_START" , scenestart );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SCENE_START" );
-    goto ERREUR;
-    }
-
-  /* sous element SEGMENT_END */
-  
-  cr = cai_WriteElementXML ( des , "SEGMENT_END" , segmentend );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SEGMENT_END" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Frame_Counters */
-
-  cr = cai_WriteCloseTagXML ( des , "Frame_Counters" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Frame_Counters" );
-    goto ERREUR;
-    }
-
-  /* sous element Data_Strip_Coordinates */
-  
-  cr = cai_WriteOpenTagXML ( des , "Data_Strip_Coordinates" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Data_Strip_Coordinates" );
-    goto ERREUR;
-    }
-
-  /* sous element FIRST_PIXEL_RAW */
-  
-  cr = cai_WriteElementXML ( des , "FIRST_PIXEL_RAW" , fpixraw );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FIRST_PIXEL_RAW" );
-    goto ERREUR;
-    }
-
-   /* sous element FIRST_LINE_RAW */
-  
-  cr = cai_WriteElementXML ( des , "FIRST_LINE_RAW" , flineraw );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FIRST_LINE_RAW" );
-    goto ERREUR;
-    }
-
-  /* sous element FIRST_PIXEL_1B */
-  
-  cr = cai_WriteElementXML ( des , "FIRST_PIXEL_1B" , fpix1b );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FIRST_PIXEL_1B" );
-    goto ERREUR;
-    }
-
-  /* sous element FIRST_LINE_1B */
-  
-  cr = cai_WriteElementXML ( des , "FIRST_LINE_1B" , fline1b );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element FIRST_LINE_1B" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Data_Strip_Coordinates */
-
-  cr = cai_WriteCloseTagXML ( des , "Data_Strip_Coordinates" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Data_Strip_Coordinates" );
-    goto ERREUR;
-    }
-
-  /* sous element Models */
-  
-  cr = cai_WriteOpenTagXML ( des , "Models" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Models" );
-    goto ERREUR;
-    }
-
-  /* sous element OneB_Model */
-  
-  cr = cai_WriteOpenTagXML ( des , "OneB_Model" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element OneB_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element Coordinate_Normalization */
-  
-  cr = cai_WriteOpenTagXML ( des , "Coordinate_Normalization" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Coordinate_Normalization" );
-    goto ERREUR;
-    }
-
-  /* sous element LINES_I_M */
-  
-  cr = cai_WriteElementXML ( des , "LINES_I_M" , im );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element LINES_I_M" );
-    goto ERREUR;
-    }
-
-  /* sous element LINES_DELTA_I */
-  
-  cr = cai_WriteElementXML ( des , "LINES_DELTA_I" , deltai );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element LINES_DELTA_I" );
-    goto ERREUR;
-    }
-
-  /* sous element COLUMNS_J_M */
-  
-  cr = cai_WriteElementXML ( des , "COLUMNS_J_M" , jm );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element COLUMNS_J_M" );
-    goto ERREUR;
-    }
-
-  /* sous element COLUMNS_DELTA_J */
-  
-  cr = cai_WriteElementXML ( des , "COLUMNS_DELTA_J" , deltaj );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element COLUMNS_DELTA_J" );
-    goto ERREUR;
-    }
-
-  /* sous element LINES_L_M */
-  
-  cr = cai_WriteElementXML ( des , "LINES_L_M" , lm );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element LINES_L_M" );
-    goto ERREUR;
-    }
-
-  /* sous element LINES_DELTA_L */
-  
-  cr = cai_WriteElementXML ( des , "LINES_DELTA_L" , deltal );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element LINES_DELTA_L" );
-    goto ERREUR;
-    }
-
-  /* sous element COLUMNS_P_M */
-  
-  cr = cai_WriteElementXML ( des , "COLUMNS_P_M" , pm );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element COLUMNS_P_M" );
-    goto ERREUR;
-    }
-
-  /* sous element COLUMNS_DELTA_P */
-  
-  cr = cai_WriteElementXML ( des , "COLUMNS_DELTA_P" , deltap );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element COLUMNS_DELTA_P" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Coordinate_Normalization */
-
-  cr = cai_WriteCloseTagXML ( des , "Coordinate_Normalization" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Coordinate_Normalization" );
-    goto ERREUR;
-    }
-
-  /* sous element Direct_OneB_Model */
-  
-  cr = cai_WriteOpenTagXML ( des , "Direct_OneB_Model" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Direct_OneB_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element I */
-  
-  cr = cai_WriteOpenTagXML ( des , "I" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element I" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , coeffi );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , ai );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , bi );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , ci );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , di );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , ei );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element I */
-
-  cr = cai_WriteCloseTagXML ( des , "I" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element I" );
-    goto ERREUR;
-    }
-
-  /* sous element J */
-  
-  cr = cai_WriteOpenTagXML ( des , "J" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element J" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , coeffj );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , aj );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , bj );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , cj );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element J */
-
-  cr = cai_WriteCloseTagXML ( des , "J" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element J" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Direct_OneB_Model */
-
-  cr = cai_WriteCloseTagXML ( des , "Direct_OneB_Model" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Direct_OneB_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element Reverse_OneB_Model */
-  
-  cr = cai_WriteOpenTagXML ( des , "Reverse_OneB_Model" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Reverse_OneB_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element L */
-  
-  cr = cai_WriteOpenTagXML ( des , "L" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element L" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , coeff_l );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , a_l );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , b_l );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , c_l );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , d_l );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , e_l );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element L */
-
-  cr = cai_WriteCloseTagXML ( des , "L" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element L" );
-    goto ERREUR;
-    }
-
-  /* sous element P */
-  
-  cr = cai_WriteOpenTagXML ( des , "P" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element P" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , coeff_p );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , a_p );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , b_p );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , c_p );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element P */
-
-  cr = cai_WriteCloseTagXML ( des , "P" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element P" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Reverse_OneB_Model */
-
-  cr = cai_WriteCloseTagXML ( des , "Reverse_OneB_Model" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Reverse_OneB_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element A */
-  
-  cr = cai_WriteOpenTagXML ( des , "A" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element A" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , coeff_a );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , aa );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , ba );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , ca );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , da );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element A */
-
-  cr = cai_WriteCloseTagXML ( des , "A" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element A" );
-    goto ERREUR;
-    }
-
-  /* sous element B */
-  
-  cr = cai_WriteOpenTagXML ( des , "B" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element B" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , coeff_b );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , ab );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , bb );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , cb );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , db );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , eb );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element c" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element B */
-
-  cr = cai_WriteCloseTagXML ( des , "B" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element B" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element OneB_Model */
-
-  cr = cai_WriteCloseTagXML ( des , "OneB_Model" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element OneB_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element Attitude_Model */
-  
-  cr = cai_WriteOpenTagXML ( des , "Attitude_Model" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Attitude_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element D_L */
-  
-  cr = cai_WriteOpenTagXML ( des , "D_L" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element D_L" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , al );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element abc" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , bl );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element abc" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , cl );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element abc" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element D_L */
-
-  cr = cai_WriteCloseTagXML ( des , "D_L" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element D_L" );
-    goto ERREUR;
-    }
-
-  /* sous element D_P */
-  
-  cr = cai_WriteOpenTagXML ( des , "D_P" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element D_P" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , ap );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element abc" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , bp );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element abc" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , cp );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element abc" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element D_P */
-
-  cr = cai_WriteCloseTagXML ( des , "D_P" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element D_P" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Attitude_Model */
-
-  cr = cai_WriteCloseTagXML ( des , "Attitude_Model" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Attitude_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element SWIR_Registration_Model */
-  
-  cr = cai_WriteOpenTagXML ( des , "SWIR_Registration_Model" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SWIR_Registration_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element D_L */
-  
-  cr = cai_WriteOpenTagXML ( des , "D_L" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element D_L" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , alswir );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element abc" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , blswir );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element abc" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , clswir );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element abc" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element D_L */
-
-  cr = cai_WriteCloseTagXML ( des , "D_L" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element D_L" );
-    goto ERREUR;
-    }
-
-  /* sous element D_P */
-  
-  cr = cai_WriteOpenTagXML ( des , "D_P" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element D_P" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , apswir );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element abc" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , bpswir );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element abc" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , cpswir );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element abc" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element D_P */
-
-  cr = cai_WriteCloseTagXML ( des , "D_P" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element D_P" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element SWIR_Registration_Model */
-
-  cr = cai_WriteCloseTagXML ( des , "SWIR_Registration_Model" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element SWIR_Registration_Model" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Models */
-
-  cr = cai_WriteCloseTagXML ( des , "Models" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Models" );
-    goto ERREUR;
-    }
-  /* sous element Sensor_Calibration */
-  
-  cr = cai_WriteOpenTagXML ( des , "Sensor_Calibration" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Sensor_Calibration" );
-    goto ERREUR;
-    }
-
-  /* sous element METHOD */
-  
-  cr = cai_WriteElementXML ( des , "METHOD" , "system" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element METHOD" );
-
-    goto ERREUR;
-    }
-
-  /* sous element Calibration */
-  
-  cr = cai_WriteOpenTagXML ( des , "Calibration" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Calibration" );
-    goto ERREUR;
-    }
-
-  for ( j = 0; j < nb_bs ; j++ )
-  {
-  /* sous element Band_Parameters */
-  
-  cr = cai_WriteOpenTagXML ( des , "Band_Parameters" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Band_Parameters" );
-    goto ERREUR;
-    }
-
-  /* sous element BAND_INDEX */
-  sprintf ( valeur , "%d" , (j+1) );
-  
-  cr = cai_WriteElementXML ( des , "BAND_INDEX" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element BAND_INDEX" );
-    goto ERREUR;
-    }
-
-  /* sous element Gain_Section */
-  
-  cr = cai_WriteOpenTagXML ( des , "Gain_Section" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Gain_Section" );
-    goto ERREUR;
-    }
-
-  /* sous element GAIN_NUMBER */
-  
-  cr = cai_WriteElementXML ( des , "GAIN_NUMBER" , nb_gains[j] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element GAIN_NUMBER" );
-    goto ERREUR;
-    }
-
-  /* sous element GAIN_ANALOG_VALUE */
-  
-  cr = cai_WriteElementXML ( des , "GAIN_ANALOG_VALUE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element GAIN_ANALOG_VALUE" );
-    goto ERREUR;
-    }
-
-  /* sous element Pixel_Parameters */
-  
-  cr = cai_WriteOpenTagXML ( des , "Pixel_Parameters" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Pixel_Parameters" );
-    goto ERREUR;
-    }
-
-  /* sous element G_DATE */
-  
-  cr = cai_WriteElementXML ( des , "G_DATE" , relativedatecalib[2*j] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element G_DATE" );
-    goto ERREUR;
-    }
-
-  /* sous element DC_DATE */
-  
-  cr = cai_WriteElementXML ( des , "DC_DATE" , relativedatecalib[2*j+nb_bs*2] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DC_DATE" );
-    goto ERREUR;
-    }
-
-  /* sous element Cells */
-  
-  cr = cai_WriteOpenTagXML ( des , "Cells" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Cells" );
-    goto ERREUR;
-    }
-
-  if ( nb_bs == 1 )
-  {
-    for ( i = 0 ; i < 4 ; i ++ )
-    { /* MOD : VERSION 4.6 : FA : initialisation de ind_tab_gain dans la boucle */ 
-      for ( ind_tab_gain = 0  ; ind_tab_gain < 1500 ; ind_tab_gain ++ )
-        {
-	
-        /* sous element Cell */
-  
-        cr = cai_WriteOpenTagXML ( des , "Cell" );
-        if ( cr == CAI_KO )
-          {
-          sprintf ( CAI_ERREUR , "Erreur ecriture element Cell" );
-          goto ERREUR;
-          }
-
-        /* sous element G */
-    
-        sprintf ( valeur , "%5.4f" , gain_value[i][ind_tab_gain] ); 
-    
-        cr = cai_WriteElementXML ( des , "G" , valeur );
-        if ( cr == CAI_KO )
-          {
-          sprintf ( CAI_ERREUR , "Erreur ecriture element G" );
-          goto ERREUR;
-          }
-
-        /* sous element DARK_CURRENT */
-     
-        sprintf ( valeur , "%2.1f" , dark_value[i][ind_tab_gain] ); 
-
-        cr = cai_WriteElementXML ( des , "DARK_CURRENT" , valeur );
-        if ( cr == CAI_KO )
-          {
-          sprintf ( CAI_ERREUR , "Erreur ecriture element DARK_CURRENT" );
-          goto ERREUR;
-          }
-
-        /* Fermeture de l'element Cell */
- 
-        cr = cai_WriteCloseTagXML ( des , "Cell" );  
-        if ( cr == CAI_KO )
-          {
-          sprintf ( CAI_ERREUR , "Erreur ecriture element Cell" );
-          goto ERREUR;
-          }
-        }
-      }
-  }
-  else
-  {
-    for ( i = 2*j ; i < 2*j+2 ; i++ )
-      {
-      for ( ind_tab_gain = 0 ; ind_tab_gain < 1500 ; ind_tab_gain ++ )
-        {
-        /* sous element Cell */
-  
-        cr = cai_WriteOpenTagXML ( des , "Cell" );
-        if ( cr == CAI_KO )
-          {
-          sprintf ( CAI_ERREUR , "Erreur ecriture element Cell" );
-          goto ERREUR;
-          }
-
-        /* sous element G */
-    
-        sprintf ( valeur , "%5.4f" , gain_value[i][ind_tab_gain] ); 
-    
-        cr = cai_WriteElementXML ( des , "G" , valeur );
-        if ( cr == CAI_KO )
-          {
-          sprintf ( CAI_ERREUR , "Erreur ecriture element G" );
-          goto ERREUR;
-          }
-
-        /* sous element DARK_CURRENT */
-
-        sprintf ( valeur , "%2.1f" , dark_value[i][ind_tab_gain] ); 
-
-        cr = cai_WriteElementXML ( des , "DARK_CURRENT" , valeur );
-        if ( cr == CAI_KO )
-          {
-          sprintf ( CAI_ERREUR , "Erreur ecriture element DARK_CURRENT" );
-          goto ERREUR;
-          }
-
-        /* Fermeture de l'element Cell */
- 
-        cr = cai_WriteCloseTagXML ( des , "Cell" );  
-        if ( cr == CAI_KO )
-          {
-          sprintf ( CAI_ERREUR , "Erreur ecriture element Cell" );
-          goto ERREUR;
-          }
-        }
-       }	
-    }
-  
-  /* Fermeture de l'element Cells */
-
-  cr = cai_WriteCloseTagXML ( des , "Cells" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Cells" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Pixel_Parameters */
-
-  cr = cai_WriteCloseTagXML ( des , "Pixel_Parameters" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Pixel_Parameters" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Gain_Section */
-
-  cr = cai_WriteCloseTagXML ( des , "Gain_Section" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Gain_Section" );
-    goto ERREUR;
-    }
-
-  /* sous element Dead_Detectors */
-  
-  cr = cai_WriteOpenTagXML ( des , "Dead_Detectors" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Dead_Detectors" );
-    goto ERREUR;
-    }
-
-  /* sous element VALIDITY_DATE */
-  
-  cr = cai_WriteElementXML ( des , "VALIDITY_DATE" , 
-					relativedatecalib[2*j+1] );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element VALIDITY_DATE" );
-    goto ERREUR;
-    }
-
-  /* sous element Bad_Pixels */
-  
-  cr = cai_WriteOpenTagXML ( des , "Bad_Pixels" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Bad_Pixels" );
-    goto ERREUR;
-    }
-
-  if ( nb_bs == 1 )
-  {
-    for ( i = 0 ; i < 4 ; i ++ )
-    {
-      for ( ind_tab_gain = 0; ind_tab_gain < 1500 ; ind_tab_gain ++ )
-      {
-         if ( gain_value[i][ind_tab_gain] == (float) 0 )
-         {
-	    /* sous element Bad_Pixel */
-          
-	    cr = cai_WriteOpenTagXML ( des , "Bad_Pixel" );
-            if ( cr == CAI_KO )
-            {
-              sprintf ( CAI_ERREUR , "Erreur ecriture element Bad_Pixel" );
-              goto ERREUR;
-            }
-
-            /* sous element PIXEL_INDEX */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : FA : Correction  de                                 */
-/*            sprintf(valeur,"%d", (ind_tab_gain+1+1500*i)) au lieu de       */
-/*		sprintf(valeur,"%f", (ind_tab_gain+1+1500*i))                */
-/*****************************************************************************/
-
-            sprintf ( valeur , "%d" , (ind_tab_gain+1+1500*i) );
-            cr = cai_WriteElementXML ( des , "PIXEL_INDEX" , valeur );
-            if ( cr == CAI_KO )
-            {
-              sprintf ( CAI_ERREUR , "Erreur ecriture element PIXEL_INDEX" );
-              goto ERREUR;
-            }
-
-          /* sous element BAD_PIXEL_STATUS */
-  
-           cr = cai_WriteElementXML ( des , 
-				"BAD_PIXEL_STATUS" , "ABERRANT" );
-           if ( cr == CAI_KO )
-           {
-              sprintf ( CAI_ERREUR , "Erreur ecriture element BAD_PIXEL_STATUS" );
-              goto ERREUR;
-            }
-
-           /* Fermeture de l'element Bad_Pixel */
-
-          cr = cai_WriteCloseTagXML ( des , "Bad_Pixel" );  
-          if ( cr == CAI_KO )
-          {
-            sprintf ( CAI_ERREUR , "Erreur ecriture element Bad_Pixel" );
-            goto ERREUR;
-          }
-        }
-      }	  
-    }
-  }
-  else
-  {
-    nb_passage = 0;
-    for ( i = 2*j ; i < j*2 + 2 ; i++ )
-    {
-      for ( ind_tab_gain = 0 ; ind_tab_gain < 1500 ; ind_tab_gain ++ )
-      {
-          if ( gain_value[i][ind_tab_gain] == (float) 0 )
-          {
-	  /* sous element Bad_Pixel */
-          
-	    cr = cai_WriteOpenTagXML ( des , "Bad_Pixel" );
-            if ( cr == CAI_KO )
-            {
-               sprintf ( CAI_ERREUR , "Erreur ecriture element Bad_Pixel" );
-               goto ERREUR;
-            }
-
-          /* sous element PIXEL_INDEX */
-  
-            sprintf ( valeur , "%d" , ( ind_tab_gain+1+1500*nb_passage ) );
-	    cr = cai_WriteElementXML ( des , "PIXEL_INDEX" , valeur );
-            if ( cr == CAI_KO )
-            {
-              sprintf ( CAI_ERREUR , "Erreur ecriture element PIXEL_INDEX" );
-              goto ERREUR;
-            }
-
-          /* sous element BAD_PIXEL_STATUS */
-  
-            cr = cai_WriteElementXML ( des , 
-					"BAD_PIXEL_STATUS" , "ABERRANT" );
-           if ( cr == CAI_KO )
-           {
-             sprintf ( CAI_ERREUR , "Erreur ecriture element BAD_PIXEL_STATUS" );
-             goto ERREUR;
-           }
-
-         /* Fermeture de l'element Bad_Pixel */
-
-           cr = cai_WriteCloseTagXML ( des , "Bad_Pixel" );  
-           if ( cr == CAI_KO )
-           {
-             sprintf ( CAI_ERREUR , "Erreur ecriture element Bad_Pixel" );
-             goto ERREUR;
-           }
-	 }
-       }
-      if ( nb_passage == 0 )
-         nb_passage = 1;
-      else
-         nb_passage = 0;
-
-    }
-  }
-    
-  /* Fermeture de l'element Bad_Pixels */
-
-  cr = cai_WriteCloseTagXML ( des , "Bad_Pixels" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Bad_Pixels" );
-    goto ERREUR;
-    }
-
-   /* Fermeture de l'element Dead_Detectors */
-
-  cr = cai_WriteCloseTagXML ( des , "Dead_Detectors" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Dead_Detectors" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Band_Parameters */
-
-  cr = cai_WriteCloseTagXML ( des , "Band_Parameters" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Band_Parameters" );
-    goto ERREUR;
-    }
-  }
-   /* Fermeture de l'element Calibration */
-
-  cr = cai_WriteCloseTagXML ( des , "Calibration" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Calibration" );
-    goto ERREUR;
-    }
-
-  /* sous element Spectral_Sensitivities */
-  
-  cr = cai_WriteOpenTagXML ( des , "Spectral_Sensitivities" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Spectral_Sensitivities" );
-    goto ERREUR;
-    }
-
-
-  for ( j = 0; j < nb_bs ; j++ )
-  {
-
-    /* sous element Band_Spectral_Sensitivities */
-   
-    cr = cai_WriteOpenTagXML ( des , "Band_Spectral_Sensitivities" );
-    if ( cr == CAI_KO )
-    {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element Band_Spectral_Sensitivities" );
-      goto ERREUR;
-    }
-
-     sprintf( valeur , "%d" , ( j+1 ) );
-     /* sous element BAND_INDEX */
-  
-     cr = cai_WriteElementXML ( des , "BAND_INDEX" , valeur );
-     if ( cr == CAI_KO )
-     {
-        sprintf ( CAI_ERREUR , "Erreur ecriture element BAND_INDEX" );
-        goto ERREUR;
-     }
-
-  /* sous element FIRST_WAVELENGTH_VALUE */
-  
-     cr = cai_WriteElementXML ( des , 
-			"FIRST_WAVELENGTH_VALUE" , firstwave[j] );
-     if ( cr == CAI_KO )
-     {
-       sprintf ( CAI_ERREUR , "Erreur ecriture element FIRST_WAVELENGTH_VALUE" );
-       goto ERREUR;
-     }
-
-  /* sous element WAVELENGTH_STEP */
-  
-     cr = cai_WriteElementXML ( des , 
-			"WAVELENGTH_STEP" , wavelengthstep[j] );
-     if ( cr == CAI_KO )
-     {
-        sprintf ( CAI_ERREUR , "Erreur ecriture element WAVELENGTH_STEP" );
-        goto ERREUR;
-      }
-
-  /* sous element CALIBRATION_DATE */
-  
-     cr = cai_WriteElementXML ( des , "CALIBRATION_DATE" , "" );
-     if ( cr == CAI_KO )
-     {
-         sprintf ( CAI_ERREUR , "Erreur ecriture element CALIBRATION_DATE" );
-         goto ERREUR;
-      }
-  
-  /* sous element Spectral_Sensitivity_Values */
-  
-     cr = cai_WriteOpenTagXML ( des , "Spectral_Sensitivity_Values" );
-     if ( cr == CAI_KO )
-     {
-        sprintf ( CAI_ERREUR , "Erreur ecriture element Spectral_Sensitivity_Values" );
-        goto ERREUR;
-     }
-
-    for ( ind_tab_gain = 0  ; ind_tab_gain < 64 ; ind_tab_gain++ )
-    {
-    
-    /* sous element SPECTRAL_SENSITIVITY_VALUE */
-  
-        cr = cai_WriteElementXML ( des , "SPECTRAL_SENSITIVITY_VALUE" , 
-				spectral_sensitivitie[j][ind_tab_gain] );
-        if ( cr == CAI_KO )
-        {
-            sprintf ( CAI_ERREUR , "Erreur ecriture element SPECTRAL_SENSITIVITY_VALUE" );
-            goto ERREUR;
-         }
-     }
-     
-    /* Fermeture de l'element Spectral_Sensitivity_Values */
-
-     cr = cai_WriteCloseTagXML ( des , "Spectral_Sensitivity_Values" );  
-     if ( cr == CAI_KO )
-     {
-       sprintf ( CAI_ERREUR , "Erreur ecriture element Spectral_Sensitivity_Values" );
-       goto ERREUR;
-     }
-
-    /* Fermeture de l'element Band_Spectral_Sensitivities */
-
-    cr = cai_WriteCloseTagXML ( des , "Band_Spectral_Sensitivities" );  
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element Band_Spectral_Sensitivities" );
-      goto ERREUR;
-      }
-  }  
-  
-  /* Fermeture de l'element Spectral_Sensitivities */
-
-  cr = cai_WriteCloseTagXML ( des , "Spectral_Sensitivities" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Spectral_Sensitivities" );
-    goto ERREUR;
-    }
-
-  /* sous element Solar_Irradiance */
-  
-  cr = cai_WriteOpenTagXML ( des , "Solar_Irradiance" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Solar_Irradiance" );
-    goto ERREUR;
-    }
-
-  for ( j = 0; j < nb_bs ; j++ )
-  {
-    sprintf ( valeur , "%d" , ( j+1 ) );
-  /* sous element Band_Solar_Irradiance */
-  
-    cr = cai_WriteOpenTagXML ( des , "Band_Solar_Irradiance" );
-    if ( cr == CAI_KO )
-    {
-       sprintf ( CAI_ERREUR , "Erreur ecriture element Band_Solar_Irradiance" );
-       goto ERREUR;
-    }
-
-  /* sous element BAND_INDEX */
-  
-    cr = cai_WriteElementXML ( des , "BAND_INDEX" , valeur );
-    if ( cr == CAI_KO )
-    {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element BAND_INDEX" );
-      goto ERREUR;
-     }
-
-  /* sous element SOLAR_IRRADIANCE_VALUE */
-  
-     cr = cai_WriteElementXML ( des , "SOLAR_IRRADIANCE_VALUE" , 
-			solar_irradiance[j] );
-     if ( cr == CAI_KO )
-     {
-        sprintf ( CAI_ERREUR , "Erreur ecriture element SOLAR_IRRADIANCE_VALUE" );
-        goto ERREUR;
-      }
-
-  /* Fermeture de l'element Band_Solar_Irradiance */
-
-    cr = cai_WriteCloseTagXML ( des , "Band_Solar_Irradiance" );  
-    if ( cr == CAI_KO )
-    {
-       sprintf ( CAI_ERREUR , "Erreur ecriture element Band_Solar_Irradiance" );
-       goto ERREUR;
-    }
-  }
-  /* Fermeture de l'element Solar_Irradiance */
-
-  cr = cai_WriteCloseTagXML ( des , "Solar_Irradiance" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Solar_Irradiance" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Sensor_Calibration */
-
-  cr = cai_WriteCloseTagXML ( des , "Sensor_Calibration" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Sensor_Calibration" );
-    goto ERREUR;
-    }
-
-/* MOD : VERSION : 4.6 : FA : pas d'écriture <badlines> si pas de badlines   */
-/* le test s'effectue pour chaque canal   */
-   Bad=0;
-   for (can=0;can<nb_bs;can++)
-      BadFlag[can]=0;
-   can=0;
-   j=0;
-   while ((can<nb_bs)&&(BadFlag[can]==0))
-   {	
-      j=0;
-      while ((j<nb_lig)&&(BadFlag[can]==0))
-      {
-	 if ( bad_line[j][can] != 0)
-	 {
-		BadFlag[can]=1; 
-		Bad=1;
-         }
-         j=j+1;
-       }
-      can=can+1;
-   }
-
- if (Bad==1)
- {
-
-  /* sous element Bad_Lines */
-  
-  cr = cai_WriteOpenTagXML ( des , "Bad_Lines" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Bad_Lines" );
-    goto ERREUR;
-    }
-  }
-
-  for ( can = 0 ; can < nb_bs ; can++ )
-  {
-    if (BadFlag[can]==1)
-    {   
-
-    sprintf ( valeur , "%d" , (can+1) );
-  
-  /* sous element Band_Bad_Lines */
-  
-    cr = cai_WriteOpenTagXML ( des , "Band_Bad_Lines" );
-    if ( cr == CAI_KO )
-    {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element Band_Bad_Lines" );
-      goto ERREUR;
-    }
-
-  /* sous element BAND_INDEX */
-  
-    cr = cai_WriteElementXML ( des , "BAND_INDEX" , valeur );
-    if ( cr == CAI_KO )
-    {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element BAND_INDEX" );
-      goto ERREUR;
-    }
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM :  Ajout de l'element  Bad_Line_List             */
-/*****************************************************************************/    
-
-   /* sous element Bad_Line_List */
-  
-    cr = cai_WriteOpenTagXML ( des , "Bad_Line_List" );
-    if ( cr == CAI_KO )
-    {
-      sprintf ( CAI_ERREUR , "Erreur ecriture element Bad_Line_List" );
-      goto ERREUR;
-    }
-
-    for ( j = 0; j < nb_lig ; j++ )
-    {    
-      if ( bad_line[j][can] == 1 )
-      {
-      /* sous element Bad_Line */
-  
-        cr = cai_WriteOpenTagXML ( des , "Bad_Line" );
-        if ( cr == CAI_KO )
-        {
-          sprintf ( CAI_ERREUR , "Erreur ecriture element Bad_Line" );
-          goto ERREUR;
-        }
-
-      /* sous element BL_INDEX */
-  
-        sprintf ( valeur , "%d" , ( j+1 ) );
-  
-        cr = cai_WriteElementXML ( des , "BL_INDEX" , valeur );
-        if ( cr == CAI_KO )
-        {
-          sprintf ( CAI_ERREUR , "Erreur ecriture element BL_INDEX" );
-          goto ERREUR;
-        }
-
-       /* sous element BL_STATUS */
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : FA :  mot cle  lignes perdues LOST au lieu de LOSS  */
-/*****************************************************************************/    
-        cr = cai_WriteElementXML ( des , "BL_STATUS" , "LOST" );
-        if ( cr == CAI_KO )
-        {
-          sprintf ( CAI_ERREUR , "Erreur ecriture element BL_STATUS" );
-          goto ERREUR;
-        }
-
-      /* Fermeture de l'element Bad_Line */
- 
-        cr = cai_WriteCloseTagXML ( des , "Bad_Line" );
-        if ( cr == CAI_KO )
-        {
-          sprintf ( CAI_ERREUR , "Erreur ecriture element Bad_Line" );
-          goto ERREUR;
-        }
-      }
-   else
-   {
-      if ( bad_line[j][can] == 2 )
-      {
-        /* sous element Bad_Line */
-  
-        cr = cai_WriteOpenTagXML ( des , "Bad_Line" );
-        if ( cr == CAI_KO )
-        {
-          sprintf ( CAI_ERREUR , "Erreur ecriture element Bad_Line" );
-          goto ERREUR;
-        }
-
-      /* sous element BL_INDEX */
-    
-        sprintf ( valeur , "%d" , ( j+1 ) );
-    
-        cr = cai_WriteElementXML ( des , "BL_INDEX" , valeur );
-        if ( cr == CAI_KO )
-        {
-          sprintf ( CAI_ERREUR , "Erreur ecriture element BL_INDEX" );
-          goto ERREUR;
-        }
-
-       /* sous element BL_STATUS */
-  
-        cr = cai_WriteElementXML ( des , "BL_STATUS" , "DEGRADED" );
-        if ( cr == CAI_KO )
-        {
-          sprintf ( CAI_ERREUR , "Erreur ecriture element BL_STATUS" );
-          goto ERREUR;
-        }
- 
-      /* Fermeture de l'element Bad_Line */
-
-        cr = cai_WriteCloseTagXML ( des , "Bad_Line" );
-        if ( cr == CAI_KO )
-        {
-          sprintf ( CAI_ERREUR , "Erreur ecriture element Bad_Line" );
-          goto ERREUR;
-        }
-      } 
-    } 
-  } /* Fin boucle sur les lignes */
- 
-  /* Fermeture de l'element Bad_Line_List */
-
-  cr = cai_WriteCloseTagXML ( des , "Bad_Line_List" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Bad_Line_List" );
-    goto ERREUR;
-    }
- 
-  /* Fermeture de l'element Band_Bad_Lines */
-
-  cr = cai_WriteCloseTagXML ( des , "Band_Bad_Lines" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Band_Bad_Lines" );
-    goto ERREUR;
-    }
-    
-  }
- }
- if (Bad==1)
- {
-
-  /* Fermeture de l'element Bad_Lines */
-
-  cr = cai_WriteCloseTagXML ( des , "Bad_Lines" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Bad_Lines" );
-    goto ERREUR;
-    }
- 
- }
-  /* Fermeture de l'element Data_Strip */
-
-  cr = cai_WriteCloseTagXML ( des , "Data_Strip" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Data_Strip" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Dimap_Document */
-
-  cr = cai_WriteCloseTagXML ( des , "Dimap_Document" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Dimap_Document" );
-    goto ERREUR;
-    }
-
-  /* fermeture du fichier descripteur */
-  
-  if (des!=NULL) fclose ( des );
-  return CAI_OK;
-  
-  ERREUR:
-  return CAI_KO;
-  }  
-/* 
-	Fin de l'operation cai_lead4to5spot
-*/
-
-/******************************************************************************/
-/******************************************************************************/
-/*                                                                            */
-/*                 Definition des OPERATIONS INTERNES                         */
-/*                                                                            */
-/******************************************************************************/
-/******************************************************************************/
- 
-/******************************************************************************/
-/*                                                                            */
-/*OPERATION  : cai_ElementWriteXML                                            */
-/*                                                                            */
-/*ROLE : Cette operation ecrit un element XML dans le fichier donne en        */
-/*       parametre                                                            */
-/*                                                                            */
-/*CONTEXTE D'APPEL :                                                          */
-/*                                                                            */
-/* RETOUR : CAI_OK ou CAI_KO                                                  */
-/*                                                                            */
-/******************************************************************************/
-
-static CAI_OK_KO cai_WriteElementXML ( FILE *desc , char *motCle , char *valeur )
- {
-  char *BaliseXmlOpen;
-  char *BaliseXmlClose;
-  
-  BaliseXmlOpen = (char*) NULL;
-  BaliseXmlOpen = (char*) calloc ( strlen ( motCle ) + 3 , sizeof ( char ) );
-
-  BaliseXmlClose = (char*) NULL;
-  BaliseXmlClose = (char*) calloc ( strlen ( motCle ) + 4 , sizeof ( char ) );
-
-  sprintf ( BaliseXmlOpen , "<%s>" , motCle );
-  sprintf ( BaliseXmlClose , "</%s>" , motCle );
-  
-  fprintf ( desc , "%s%s%s\n" , BaliseXmlOpen , valeur , BaliseXmlClose );
-  
-  FREE ( BaliseXmlClose );
-  FREE ( BaliseXmlOpen );
-  return CAI_OK;
-  
-  }
-/* 
-	Fin de l'operation cai_WriteElementXML
-*/
-/******************************************************************************/
-/*                                                                            */
-/*OPERATION  : cai_ElementWriteXMLWithAttribute                         */
-/*                                                                            */
-/*ROLE : Cette operation ecrit un element XML dans le fichier donne en        */
-/*       parametre                                                            */
-/*                                                                            */
-/*CONTEXTE D'APPEL :                                                          */
-/*                                                                            */
-/* RETOUR : CAI_OK ou CAI_KO                                                  */
-/*                                                                            */
-/******************************************************************************/
-
-static CAI_OK_KO cai_WriteElementXMLWithAttribute ( FILE *desc ,
-                                                          char *motCle ,
-							  char *valeur,
-							  char *attribut,
-							  char *valat ,
-							  int type)
- {
-  char *BaliseXmlOpen;
-  char *BaliseXmlClose;
-  
-  BaliseXmlOpen = (char*) NULL;
-  BaliseXmlOpen = (char*) calloc ( strlen ( motCle ) +
-                                   strlen ( attribut ) +
-				   strlen ( valat ) + 10 , sizeof ( char ) );
-
-  BaliseXmlClose = (char*) NULL;
-  BaliseXmlClose = (char*) calloc ( strlen ( motCle ) + 4 , sizeof ( char ) );
-  if (type==0)
-     sprintf ( BaliseXmlOpen , "<%s %s='%s'>" , motCle , attribut , valat );
-  else
-     sprintf ( BaliseXmlOpen , "<%s %s=\"%s\">" , motCle , attribut , valat );
-  sprintf ( BaliseXmlClose , "</%s>" , motCle );
-  
-  fprintf ( desc , "%s%s%s\n" , BaliseXmlOpen , valeur , BaliseXmlClose );
-  
-  FREE ( BaliseXmlClose );
-  FREE ( BaliseXmlOpen );
-  return CAI_OK;
-  
-  }
-
-/******************************************************************************/
-/*                                                                            */
-/*OPERATION  : cai_WriteOpenTagXML                                      */
-/*                                                                            */
-/*ROLE : Cette operation ecrit une balise ouvrante XML dans le fichier donne  */
-/*       en parametre                                                         */
-/*                                                                            */
-/*CONTEXTE D'APPEL :                                                          */
-/*                                                                            */
-/* RETOUR : CAI_OK ou CAI_KO                                                  */
-/*                                                                            */
-/******************************************************************************/
-
-static CAI_OK_KO cai_WriteOpenTagXML ( FILE *des , char *TagName )
-  {
-  fprintf ( des , "<%s>\n" , TagName );
-  return CAI_OK;
-  }
-/* 
-	Fin de l'operation cai_WriteOpenTagXML
-*/
- 
-/******************************************************************************/
-/*                                                                            */
-/*OPERATION  : cai_WriteCloseTagXML                                     */
-/*                                                                            */
-/*ROLE : Cette operation ecrit une balise fermante XML dans le fichier donne  */
-/*       en parametre                                                         */
-/*                                                                            */
-/*CONTEXTE D'APPEL :                                                          */
-/*                                                                            */
-/* RETOUR : CAI_OK ou CAI_KO                                                  */
-/*                                                                            */
-/******************************************************************************/
-
-static CAI_OK_KO cai_WriteCloseTagXML ( FILE *des , char *TagName )
-  {
-  fprintf ( des , "</%s>\n" , TagName );
-  return CAI_OK;
-  }
-/* 
-	Fin de l'operation cai_WriteCloseTagXML
-*/
-  
-/******************************************************************************/
-/*                                                                            */
-/*OPERATION  : cai_WriteNulTagXML                                       */
-/*                                                                            */
-/*ROLE : Cette operation ecrit une balise vide XML dans le fichier donne      */
-/*       en parametre                                                         */
-/*                                                                            */
-/*CONTEXTE D'APPEL :                                                          */
-/*                                                                            */
-/* RETOUR : CAI_OK ou CAI_KO                                                  */
-/*                                                                            */
-/******************************************************************************/
-
-static CAI_OK_KO cai_WriteNulTagXML ( FILE *des , char *TagName )
-  {
-  fprintf ( des , "<%s/>\n" , TagName );
-  return CAI_OK;
-  }
-/* 
-	Fin de l'operation cai_WriteNulTagXML
-*/
-
-/******************************************************************************/
-/*                                                                            */
-/*OPERATION  :  cai_WriteEnteteXML                                      */
-/*                                                                            */
-/*ROLE : Cette operation ecrit l'entete d'un document XML                     */
-/*                                                                            */
-/*CONTEXTE D'APPEL :                                                          */
-/*                                                                            */
-/* RETOUR : CAI_OK ou CAI_KO                                                  */
-/*                                                                            */
-/******************************************************************************/
-
-static CAI_OK_KO cai_WriteEnteteXML ( FILE *des )
-  {
-  fprintf ( des , "<?xml version='1.0'?>\n" );
-  return CAI_OK;  }
-/* 
-	Fin de l'operation cai_WriteEnteteXML
-*/
-
-/******************************************************************************/
-/*                                                                            */
-/*OPERATION  : cai_DMS_To_Float                                               */
-/*                                                                            */
-/*ROLE : Cette operation convertie une latitude/longitude exprimee en DDDMMSS */
-/*       sous forme de chaine de caracteres en Flotants                       */
-/*                                                                            */
-/*CONTEXTE D'APPEL :                                                          */
-/*                                                                            */
-/* RETOUR : la donnee exprimee en double                                      */
-/*                                                                            */
-/******************************************************************************/
-
-static void cai_DMS_To_Float ( char DegMinSec [17] , double *Degre )
- {
-  /*-------------------------------*/
-  /* debut du code de l'operation  */
-  /*-------------------------------*/
-  int i;
-  int signe = 1;
-  long int ValD = 0 , ValM = 0;
-  double ValS = 0.0;
-  char ValDeg[4] = "";
-  char ValMin[3] = "";
-  char ValSec[6] = "";
-
-  if (strlen(DegMinSec) != 0)
-  {
-    /* Traitement du signe */
-
-    if ( (DegMinSec[0] == 'N') || (DegMinSec[0] == 'E') )
-       signe = 1;
-
-    if ( (DegMinSec[0] == 'S') || (DegMinSec[0] == 'W') )
-       signe = -1;
-
-    if ( (DegMinSec[0] == 'R') || ( DegMinSec[0] == '+') )
-       signe = 1;
-
-    if ( (DegMinSec[0] == 'L') || ( DegMinSec[0] == '-') )
-      signe = -1;
-    
-  /* Traitement de la valeur absolue */
-
-    for ( i = 0 ; i < 3 ; i++ )
-      ValDeg[i] = DegMinSec[i+1];
-
-    ValDeg[3] = '\0';
-    sscanf( ValDeg , "%ld" , &ValD );
-
-    for ( i = 0 ; i < 2 ; i++ )
-      ValMin[i] = DegMinSec[i+4];
-
-    ValMin[2] = '\0';
-    sscanf( ValMin , "%ld" , &ValM );
-
-    for ( i = 0 ; i < 5 ; i++ )
-       ValSec[i] = DegMinSec[i+6];
-
-    ValSec[5] = '\0';
-    sscanf( ValSec , "%lf" , &ValS );
-
-    *Degre = (double)signe*((double)ValD + 
-			(double)ValM/60.0 + (double)ValS/3600.0);
-   }
-   else
-     *Degre = 0.0;
-
-  /*-----------------------------------------------*/
-  /* fin du code de l'operation cai_DMS_To_Float   */
-  /*-----------------------------------------------*/
-  } 
-
-/******************************************************************************/
-/*                                                                            */
-/*OPERATION : cai_JulToGreg                                                   */
-/*                                                                            */
-/*ROLE : Convertir une date julienne en date gregorienne                      */
-/*ROLE :                                                                      */
-/*                                                                            */
-/*RETOUR :                                                                    */
-/*                                                                            */
-/******************************************************************************/
-
-int nb_jours_mois[12] = { 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 };
-
-static void cai_JulToGreg ( long nbjours , double nbsec , char* dategreg )
- {
-  /*-----------------------------------*/
-  /* Declaration des variables locales */
-  /*-----------------------------------*/
-  int  an = ANNEE_DEBUT_JULIEN ;              /* annee debut = 1950 */
-  int  nb_jour_an = NB_JOURS_AN_NON_BISSEX ;  /* 1950 = annee non bissextile */
-  int  mois, jour, heure, minute, seconde, centieme ;
-  long  jourjulien = 0 ;
-  double  secjulien = 0. ;
-  
-  /*---------------------------------------*/
-  /* DEBUT DE L'OPERATION   cai_JulToGreg  */
-  /*---------------------------------------*/
-  jourjulien = nbjours ;
-  secjulien = nbsec ;
-  
-  /*---------------------------------------*/
-  /* Calculer l'annee gregorienne          */
-  /*---------------------------------------*/
-  while ( jourjulien >= (long)nb_jour_an )
-    {
-    an = an + 1;    
-    jourjulien = jourjulien - (long)nb_jour_an ;
-    
-    /*------------------------------------------------*/
-    /* si anne bissextile mettre a jour le nb_jour_an */
-    /*------------------------------------------------*/
-    if ( ( ((an%4) == 0) && ((an%100) != 0) ) || (an%400 == 0) )
-      nb_jour_an = NB_JOURS_AN_BISSEX ;
-    else
-      nb_jour_an = NB_JOURS_AN_NON_BISSEX ; 
-    }
-    
-  /*---------------------------------------*/
-  /* Attention : si l'annee est bissextile */
-  /* il faut modifier le mois de fevrier ! */
-  /*---------------------------------------*/
-  if ( nb_jour_an == NB_JOURS_AN_BISSEX )
-    nb_jours_mois[1] = 29 ;
-        
-  /*---------------------------------------*/
-  /* Calculer le mois                      */
-  /*---------------------------------------*/
-  mois = 0 ;
-  while ( jourjulien >= (long)nb_jours_mois[mois] )
-    {
-    jourjulien = jourjulien - (long)nb_jours_mois[mois] ;
-    mois++;
-    }
-  
-  /*---------------------------------------*/
-  /* Calculer le jour                      */
-  /*---------------------------------------*/
-  
-/* MOD : VERSION : 4.5 : FA : erreur conversion jour julien dans CAI         */
-  jour = (int)jourjulien +1;
-
-  /*---------------------------------------*/
-  /* Calculer l'heure                      */
-  /*---------------------------------------*/
-  heure = (int) ( secjulien / 3600 ) ;
-  secjulien = secjulien - ( heure * 3600 ) ;
-  
-  /*---------------------------------------*/
-  /* Calculer les minutes                  */
-  /*---------------------------------------*/
-  minute = (int) ( secjulien / 60 ) ;
-  secjulien = secjulien - ( minute * 60 ) ;
-  
-  /*---------------------------------------*/
-  /* Calculer les secondes                 */
-  /*---------------------------------------*/
-  seconde = (int)secjulien  ;
-  secjulien = secjulien - seconde ;
-   
-  /*---------------------------------------*/
-  /* Calculer les centiemes                */
-  /*---------------------------------------*/
-  centieme = (int) ( secjulien * 1000000.0 + 0.5 ) ;
-
-  /*---------------------------------------*/
-  /* Ecrire le resultat                    */
-  /*---------------------------------------*/
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM :  Ds les dates, utilisation du . au lieu de ,   */
-/*			       Separation de la date et heure par "T"        */
-/*****************************************************************************/
-  sprintf ( dategreg , "%.4d-%.2d-%.2dT%.2d:%.2d:%.2d.%.6d\0" , an , (mois +1) ,
-            jour , heure , minute , seconde , centieme );
-
-  } 
-/* Fin de l'operation cai_JulToGreg */
-
-
-
-/*------------------------------------------*/
-/* Debut de l'operation cai_DegreeToRadian  */
-
-static double cai_DegreeToRadian ( double angle_degree )
-  {
-  return ( (angle_degree * (double )PI) / 180.0);
-  }
-/* Fin de l'operation cai_DegreeToRadian */
-
-
-
-/*-----------------------------------*/
-/* Debut de l'operation cai_addtime  */
-
-static int cai_addtime ( char ret[26] , char temps[18] , double milisec )
-{
-double sec;
-long lesjours=0;
-char retour[25]="";
-char variable[18]="";
-strcpy ( variable , temps );
-
-sec = atof ( &variable[5] ) + milisec;
-if ( sec < 0 )
-  {
-  sec = -sec;
-  lesjours--;
-  }
-  
-variable[5] = '\0';
-sscanf ( variable , "%ld" , &lesjours );
-
-while ( sec >= NB_SEC_PAR_JOUR )
-  {
-  lesjours++;
-  sec = sec - NB_SEC_PAR_JOUR ;
-  }
-
-cai_JulToGreg ( lesjours , sec , retour );
-strcpy ( ret , retour );
-
-return CAI_OK;
-}
-
-/* Fin de l'operation cai_addtime */
-
-/****************************************************************/
-/* Fonction permettant de retourner le nom d'un fichier a partir*/
-/* du nom du repertoire qui le contient et du debut de son nom  */
-/*                                                              */
-/* PARAMETRES :                                                 */
-/* typspot     (E) : type de spot (spot1a4, spot5 tif,spot5bil  */
-/* str_repertoire (E) : chaine donnant le nom du repertoire     */
-/* str_debut (E) : debut du nom du fichier                      */
-/* str_fichier (S) : nom complet du fichier                     */
-/*                                                              */
-/* VALEUR RETOURNEE :                                           */
-/* 0 : ok                                                       */
-/* 1 : ko                                                       */
-/****************************************************************/
-
-static int cai_recup_nom_spot (char typspot, char * str_repertoire ,
-				char * str_debut , char **str_fichier )
-{
-
-     DIR *ptr_repertoire;
-     struct dirent *cr_readdir;
-     long lg_comp;
-     char str_comp[20];
-     int fic_trouve;
-     int retour;
-
-
-     strcpy(CAI_ERREUR,"");
-     fic_trouve = 0;
-     retour = 0;
-     lg_comp = strlen(str_debut);
-
-/* --------------------------------------------------
-  Ouverture du repertoire et listage des fichiers
--------------------------------------------------- */
-/**************************************/
-/* Traitement suivant le type de spot */
-/**************************************/
- if (typspot=='1')
-{
-/* Format SPOT1a4 */
-
-   ptr_repertoire = opendir(str_repertoire);
-   if (ptr_repertoire != NULL)
-   {
-     while ((cr_readdir=readdir(ptr_repertoire))!=NULL)
-     {
-       strncpy(str_comp,cr_readdir->d_name,lg_comp);
-       str_comp[lg_comp]='\0';  
-       if ((strcasecmp(str_comp,str_debut)==0) && (fic_trouve == 0)
-							 && (retour == 0))
-	 {
-	     *str_fichier = (char *) calloc(strlen(str_repertoire)+1+strlen(cr_readdir->d_name)+1, sizeof(char));
-	     if (*str_fichier != NULL)
-	     {
-		strcpy(*str_fichier,str_repertoire);
-	        strcat(*str_fichier,"/");
-		strcat(*str_fichier,cr_readdir->d_name);
-			(*str_fichier)[strlen(str_repertoire)+1+strlen(cr_readdir->d_name)]='\0';
-		fic_trouve++;
-	     }
-	     else
-	     {
-		strcpy(CAI_ERREUR,"Erreur : Probleme d'allocation memoire");
-	        retour = 1;
-	     }
-          }
-	}
-	closedir(ptr_repertoire);
-
-	if (fic_trouve == 0)
-	{
-	    sprintf(CAI_ERREUR,"Erreur : fichier %s/%s... n'existe pas",
-			str_repertoire,str_debut);
-	   retour = 1;
-	}
-   }
- }
- else if (typspot=='B')
-{
-/* Format SPOT5 BIL */
-
-   ptr_repertoire = opendir(str_repertoire);
-   if (ptr_repertoire != NULL)
-   {
-     while ((cr_readdir=readdir(ptr_repertoire))!=NULL)
-     {
-       strncpy(str_comp,cr_readdir->d_name,lg_comp);
-       str_comp[lg_comp]='\0';
-       if ((strcasecmp(str_comp,str_debut)==0) && (fic_trouve == 0)
-							 && (retour == 0))
-       {
-         if (((strncasecmp(str_debut,"IM",2)== 0)&&
-		(((strstr(cr_readdir->d_name,".BIL")) != 0)||
-		  ((strstr(cr_readdir->d_name,".bil")) != 0)))||
-	      (strncasecmp(str_debut,"METADATA.DIM",12)== 0))
-         {
-	     *str_fichier = (char *) calloc(strlen(str_repertoire)+1+strlen(cr_readdir->d_name)+1, sizeof(char));
-	     if (*str_fichier != NULL)
-	     {
-		strcpy(*str_fichier,str_repertoire);
-	        strcat(*str_fichier,"/");
-		strcat(*str_fichier,cr_readdir->d_name);
-			(*str_fichier)[strlen(str_repertoire)+1+strlen(cr_readdir->d_name)]='\0';
-		fic_trouve++;
-	     }
-	     else
-	     {
-		strcpy(CAI_ERREUR,"Erreur : Probleme d'allocation memoire");
-	        retour = 1;
-	     }
-           }
-          }
-	}
-	closedir(ptr_repertoire);
-
-	if (fic_trouve == 0)
-	{
-	    sprintf(CAI_ERREUR,"Erreur : fichier %s/%s... n'existe pas",
-			str_repertoire,str_debut);
-	   retour = 1;
-	}
-   }
-
-}
-else if (typspot=='T')
-{
-/* Format SPOT5 TIF */
-
-   ptr_repertoire = opendir(str_repertoire);
-   if (ptr_repertoire != NULL)
-   {
-     while ((cr_readdir=readdir(ptr_repertoire))!=NULL)
-     {
-       strncpy(str_comp,cr_readdir->d_name,lg_comp);
-       str_comp[lg_comp]='\0';
-       if ((strcasecmp(str_comp,str_debut)==0) && (fic_trouve == 0)
-							 && (retour == 0))
-       {
-         if (((strncasecmp(str_debut,"IM",2)== 0)&&
-		(((strstr(cr_readdir->d_name,".TIF")) != 0)||
-		  ((strstr(cr_readdir->d_name,".tif")) != 0)))||
-	      (strncasecmp(str_debut,"METADATA.DIM",12)== 0))
-         {
-	     *str_fichier = (char *) calloc(strlen(str_repertoire)+1+strlen(cr_readdir->d_name)+1, sizeof(char));
-	     if (*str_fichier != NULL)
-	     {
-		strcpy(*str_fichier,str_repertoire);
-	        strcat(*str_fichier,"/");
-		strcat(*str_fichier,cr_readdir->d_name);
-			(*str_fichier)[strlen(str_repertoire)+1+strlen(cr_readdir->d_name)]='\0';
-		fic_trouve++;
-	     }
-	     else
-	     {
-		strcpy(CAI_ERREUR,"Erreur : Probleme d'allocation memoire");
-	        retour = 1;
-	     }
-           }
-          }
-	}
-	closedir(ptr_repertoire);
-
-	if (fic_trouve == 0)
-	{
-	    sprintf(CAI_ERREUR,"Erreur : fichier %s/%s... n'existe pas",
-			str_repertoire,str_debut);
-	   retour = 1;
-	}
-   }
-
-}
-else	
-	retour=1;
-   return(retour);
-}
-
-/*
-  Fin de l'operation cai_recup_nom_spot
-*/
-/******************************************************************************/
-/*                                                                            */
-/*OPERATION  : cai_lire_dimensions_spot5                                      */
-/*                                                                            */
-/*ROLE : Cette operation lit dans le leader XML de SPOT5 les caracteristiques */
-/*       de l'image a lire                                                    */
-/*                                                                            */
-/*CONTEXTE D'APPEL :                                                          */
-/*                                                                            */
-/*RETOUR : CAI_OK si tout va bien , CAI_KO sinon                              */
-/*                                                                            */
-/******************************************************************************/
-
-static CAI_OK_KO cai_lire_dimensions_spot5 ( char *fich_xml , int *nbcan ,
-					     int *nboct , int *nbcol ,
-					     int *nblig , char *byteorder,
-					     int *skipbytes )
-{
-  /* variables locales */  
-  FILE *descripteur;    /* descripteur du fichier XML             */
-  char *maval;          /* variable servant a la lecture des mots */
-  int trouve = 0;       /* nombre de mot cles trouves             */
-  int ok_ncols  = 0;    /* indicateur de presence de NCOLS        */
-  int ok_nbits  = 0;    /* indicateur de presence de NBITS        */
-  int ok_nbands = 0;    /* indicateur de presence de NBANDS       */
-  int ok_nrows  = 0;    /* indicateur de presence de NROWS        */
-  int ok_byteorder = 0; /* indicateur de presence de BYTEORDER    */
-  int ok_skipbytes = 0; /* indicateur de presence de SKIPBYTES    */
-  int nbits;            /* nombre de bits par pixel               */
-
-
-  /* Initialisation par defaut */
-    if (strcmp(type_machine,"BE")==0)
-		byteorder[0]='M';
-    else
-		byteorder[0]='I';
-
-  /* ouvrir le fichier a lire */
-   
-  if ( ( descripteur = fopen ( fich_xml , "rb" ) ) == NULL )
-    {
-    sprintf ( CAI_ERREUR , "erreur ouverure de fichier" );
-    goto ERREUR;
-    }
-
-  /* tant que le fichier n'est pas a la fin */
-  
-  while ( !feof ( descripteur ) )
-    {
-    /* lire un mot */
-    maval = cai_spot5_gettoken ( descripteur );
-    if ( maval == NULL ) goto ERREUR;
-
-    /* comparer le mot lu */    
-
-    if ( strcasecmp ( maval , NOMBRE_DE_BITS ) == 0 )
-      {
-      /* lire mot suivant */
-      maval = cai_spot5_gettoken ( descripteur );
-      if ( maval == NULL ) goto ERREUR;
-      
-      /* en deduire la valeur */
-      sscanf ( maval , "%d" , &nbits );
-      *nboct = nbits / 8 ;
-      
-      /* incrementer le nombre de champs trouves */
-      trouve++;
-      
-      /* positionner le flag pour ce champs a 1 */
-      ok_nbits = 1;
-      }
-    else  
-    if ( strcasecmp ( maval , NOMBRE_DE_COLONNES ) == 0 )
-      {
-      /* lire mot suivant */
-      maval = cai_spot5_gettoken ( descripteur );
-      if ( maval == NULL ) goto ERREUR;
-      
-      /* en deduire la valeur */
-      sscanf ( maval , "%d" , nbcol );
-      
-      /* incrementer le nombre de champs trouves */
-      trouve++;
-      
-      /* positionner le flag pour ce champs a 1 */
-      ok_ncols = 1;
-      }
-    else
-    if ( strcasecmp ( maval , NOMBRE_DE_CANAUX ) == 0 )
-      {
-      /* lire mot suivant */
-      maval = cai_spot5_gettoken ( descripteur );
-      if ( maval == NULL ) goto ERREUR;
-      
-      /* en deduire la valeur */
-      sscanf ( maval , "%d" , nbcan );
-      
-      /* incrementer le nombre de champs trouves */
-      trouve++;
-      
-      /* positionner le flag pour ce champs a 1 */
-      ok_nbands = 1;      
-      }
-    else
-    if ( strcasecmp ( maval , NOMBRE_DE_LIGNES ) == 0 )
-      {
-      /* lire mot suivant */
-      maval = cai_spot5_gettoken ( descripteur );
-      if ( maval == NULL ) goto ERREUR;
-      
-      /* en deduire la valeur */
-      sscanf ( maval , "%d" , nblig );
-      
-      /* incrementer le nombre de champs trouves */
-      trouve++;
-      
-      /* positionner le flag pour ce champs a 1 */
-      ok_nrows = 1;     
-      }
-    else
-    if ( strcasecmp ( maval , ORDRE_LECTURE_OCTETS ) == 0 )
-      {
-      /* lire mot suivant */
-      maval = cai_spot5_gettoken ( descripteur );
-      if ( maval == NULL ) goto ERREUR;
-      
-      /* en deduire la valeur */
-      sscanf ( maval , "%c" , byteorder );
-      
-      /* incrementer le nombre de champs trouves */
-      trouve++;
-      
-      /* positionner le flag pour ce champs a 1 */
-      ok_byteorder = 1;
-      }
-    else
-    if ( strcasecmp ( maval , NB_OCTETS_A_SAUTER ) == 0 )
-      {
-      /* lire mot suivant */
-      maval = cai_spot5_gettoken ( descripteur );
-      if ( maval == NULL ) goto ERREUR;
-      
-      /* en deduire la valeur */
-      sscanf ( maval , "%d" , skipbytes );
-      
-      /* incrementer le nombre de champs trouves */
-      trouve++;
-      
-      /* positionner le flag pour ce champs a 1 */
-      ok_skipbytes = 1;
-      }
-      
-    /* liber la ressource */
-    FREE ( maval );
-    
-    /* si les 6 mots a lire ont ete trouves , sortir de la boucle */    
-    if ( trouve == 6 )
-      break;
-    }
-
-  /* traiter les erreur dues au document */
-  if ( trouve != 6 )
-    {
-     if ( ok_ncols == 0 )
-      {
-      sprintf ( CAI_ERREUR , "manque le tag %s dans le fichier DIMAP" , 
-			     NOMBRE_DE_COLONNES );
-      goto ERREUR;
-      }
-
-    if ( ok_nbits == 0 )
-      {
-      sprintf ( CAI_ERREUR , "manque le tag %s dans le fichier DIMAP" , 
-			     NOMBRE_DE_BITS );
-      goto ERREUR;
-      }
-    if ( ok_nrows == 0 )
-      {
-      sprintf ( CAI_ERREUR , "manque le tag %s dans le fichier DIMAP" , 
-			     NOMBRE_DE_LIGNES );
-      goto ERREUR;
-      }
-
-    if ( ok_nbands == 0 )
-      {
-      sprintf ( CAI_ERREUR , "manque le tag %s dans le fichier DIMAP" , 
-			     NOMBRE_DE_CANAUX );
-      goto ERREUR;
-      }
-
-     if ( ok_byteorder == 0 )
-     {      sprintf ( CAI_ERREUR , "manque le tag %s dans le fichier DIMAP" , 
-			     ORDRE_LECTURE_OCTETS );
-      goto ERREUR;
-      }
-
-/* le skip byte n'est pas obligatoire */
-    if ( ok_skipbytes == 0 )
-      {
-	*skipbytes = 0;
-      }
-    }
-
-  /* fermeture du fichier */  
-  if (descripteur !=NULL) fclose ( descripteur );
-  
-  /* liberation des ressources */  
-  FREE ( maval );
-  
-  return CAI_OK;
-
-ERREUR:
-   FREE ( maval );
-   return CAI_KO;
-  }
-
- /* Fin de l'operation cai_lire_dimensions_spot5 */
- 
-/******************************************************************************/
-/*                                                                            */
-/*OPERATION  : cai_spot5_gettoken                                             */
-/*                                                                            */
-/*ROLE : Cette operation lit lit un mot dans le fichier donne en parametre    */
-/*        etretourne sa valeur en enlevent les eventuels caracteres < et >    */
-/*                                                                            */
-/*CONTEXTE D'APPEL :                                                          */
-/*                                                                            */
-/*RETOUR :  la valeur si tout va bien , CAI_KO sinon                          */
-/*                                                                            */
-/******************************************************************************/
-
-static char* cai_spot5_gettoken ( FILE *MyFile )
-{
-  char valeur[1024] = ""; /* variable servant a stocker le mot lu       */
-  char *ret;              /* variable retourne qui contiendra le mot lu */
-  char c;                 /* caractere lu                               */
-  int i = 0;              /* indice de la chaine de caractere valeur    */
-  
-  /* lire le premier caractere */
-  
-  if ( fscanf ( MyFile , "%c" , &c ) == 0 )
-    {
-    sprintf ( CAI_ERREUR , "erreur lecture xml" );
-    return (char*) NULL;
-    }
-  
-  /* tester si le caractere est <,>,retour chariot, espace  */
-  /* auquel cas, sauter les blancs < , > , tabulations, etc */
-  /* et si on n'est pas en fin de fichier                   */
-  
-  while ( ( ( ( c == '<' ) || ( c == ' ' ) ) || 
-          ( ( c == '>' ) || ( c == '\n' ) ) || 
-	  ( ( c == '\r' ) || ( c == '\t' ) ) )
-	  && ( !feof ( MyFile ) ) )
-    {
-    if ( fscanf ( MyFile , "%c" , &c ) == 0 )
-      {
-      sprintf ( CAI_ERREUR , "erreur lecture xml" );
-      return (char*) NULL;
-      }
-    }
-
-
-  /* tant que que le mot n'est pas fini, lire les caracteres */
-  
-  while ( ( ( c != '>' ) && ( c != '<' ) ) &&
-          ( ( c != ' ' ) && ( c != '\n' ) ) )
-    {
-    valeur[i] = c;
-    if ( fscanf ( MyFile , "%c" , &c ) == 0 )
-      {
-      sprintf ( CAI_ERREUR , "erreur lecture xml" );
-      return (char*) NULL;
-      }
-    i++;
-    }
-
-  /* terminer la chaine de caractere lue */
-  
-  valeur[i+1] = '\0';
-  
-  /* allouer la place pour la chaine qui contiendra le resultat */
-  
-  ret = (char*) NULL;
-  ret = (char*) calloc ( strlen ( valeur ) + 1 , sizeof ( char ) );
-
-  /* copie du mot lu dans la variable resultat */
-  
-  strcpy ( ret , valeur );
-
-  /* retour du resultat */
-  
-  return ret;
-  }
-/* fin de l'operation cai_spot5_gettoken */
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_spot1a4                                 */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format spot1a4 et de tous les fichiers qui la composent      */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_IMAGE *cai_ouvre_creation_spot1a4(repert,          */
-/*  ---------------- 		                       nom_image,nb_can,     */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            label)           */
-/*                                                                           */
-/*     repert	      (E) (char *) : repertoire	de stockage		     */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir                 */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_spot1a4 (S) (CAI_IMAGE *) :  =NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-static CAI_IMAGE *cai_ouvre_creation_spot1a4(char *repert,
-				   		char *nom_image,
-				   		int *nbca,
-				   		int *nboct_pix,
-				   		int *nbcol,
-				   		int *nblig,
-				   		char *label)
-{
-   CAI_IMAGE *image1;        /* descripteur image			     */
-   char nom_fic[1024];	     /* nom du fichier en-tete		             */
-   char nom_rep[1024];	     /* nom du fichier en-tete		             */
-   int i,j,num,k;	     /* indice 				             */
-   int cr;                   /* compte rendu d'operation                     */
-   int retour;               /* compte rendu d'operation                     */
-   struct stat	buf_stat;    /* structure decrivant status de fichier        */
-   int descrip_leader;	     /* Descripteur du fichier LEADER                */
-   int descrip_trailer;	     /* Descripteur du fichier TRAILER               */
-   int descrip_volume;	     /* Descripteur du fichier VOLUME DIRECTORY      */
-   int descrip_null;	     /* Descripteur du fichier NULL VOLUME DIRECTORY */
-   int descrip_imagery;	     /* Descripteur du fichier IMAGERY               */
-   long cr_write;	     /* Code retour de write                         */
-   CAI_OK_KO icr;	     /* code retour ecriture dans DA                 */
-   int nouv_indic;           /* indice 				             */
-   char str_int4[5];	     /* Chaines intermediaires                       */
-   char str_int5[6];         /* Chaines intermediaires                       */
-   char str_int1[2];         /* Chaines intermediaires                       */
-   char mode[4];	     /* Mode spectral                                */
-   int lgrec;		     /* Longueur des enregistrements                 */
-   int nbrec;		     /* Nombre d'enregistrements de l'image          */
-   int nb;                   /* taille de l'image                            */
-   int Existe;		     /* Indicateur d'existence du repertoire image   */
-
-  char Message[200];
-  
-  /* Variables intermediaires */
-   unsigned char BYTE[4];
-   int VAR_LONG[2];
-
-   char TAB[13000];  
-   char LEVEL[1];
-   char TAMP2[5][9];
-
-   int LgDate;
-   char StrDate[24];
-   time_t LocalTime;
-   int nbre_enreg;
-	 
-
-/*........................................
-   INITIALISATIONS et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-  
-  descrip_leader = -1;
-  descrip_trailer = -1;
-  descrip_volume = -1;
-  descrip_null = -1;
-  descrip_imagery = -1;
-  Existe = 0;
-  image1 = NULL;
-
-  image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-
-  if (image1==NULL)
-  {
-    strcpy(CAI_ERREUR,
-		"Erreur allocation memoirem dans cai_ouvre_creation_spot1a4");
-    goto ERREUR;
-  }
-
-  if ((*nboct_pix) != 1 )
-  {
-    strcpy(CAI_ERREUR,
-	"Seul un octet par pixel est autorise pour l'ecriture SPOT1a4");
-    goto ERREUR;
-  }
-
-  sprintf(image1->NIVEAU,"0 ");
- 
-/******************************************************************/
-/*   Constitution du nom du fichier LEADER et verification qu'il  */
-/*                    n'existe pas deja	                          */				
-/******************************************************************/
-
-  nom_fic[0]='\0';
-  if ((long)strlen(repert)!= 0)
-  {
-      sprintf(nom_rep,"%s/%s",repert,nom_image);     
-  }
-  else
-  {
-      sprintf(nom_rep,"%s",nom_image);
-  }
-
-  retour = stat ( nom_rep , &buf_stat );
-    
-  /* si le repertoire image n'existe pas, le creer*/  
-  if ( retour != 0 )
-  {  
-      cr = mkdir (nom_rep,0775);
-      if (cr !=0)
-      {
-         sprintf ( CAI_ERREUR , 
-		"probleme a la creation du repertoire image %s SPOT1A4 \n" ,
-		 nom_image );
-         goto ERREUR;
-      }
-  }
-  else
-    Existe = 1;
-
-  sprintf(nom_fic,"%s/LEAD_01.DAT",nom_rep);
-  
-  retour = stat ( nom_fic , &buf_stat );
-  if ( retour == 0 )
-  { 
-       sprintf ( CAI_ERREUR , "Le fichier %s LEADER SPOT1A4 existe \n" , 
-							nom_image );
-       goto ERREUR;
-  }
-
-
-/*---------------------------------------------------------------------------*/
-/*	Ouverture du fichier LEADER en creation				     */
-/*---------------------------------------------------------------------------*/
-
-  descrip_leader = open (nom_fic,O_RDWR|O_CREAT|O_BINARY, PERMS );
-  if (descrip_leader == -1)
-  {
-	strcpy ( CAI_ERREUR , "Erreur de creation du fichier Leader SPOT1A4");
-    	goto ERREUR;
-  }
-
-/*---------------------------------------------------------------------------*/
-/*		ECRITURE DU FICHIER LEADER				     */
-/*---------------------------------------------------------------------------*/
-
-
-/***********************************/
-/* Pour le fichier FILE DESCRIPTOR */
-/***********************************/
-
-/* 1 RECORD */
-
-/* SEGMENT FIXE : */
-
-  VAR_LONG[0] = 1;
-  BYTE[0] = 63;
-  BYTE[1] = 192;
-  BYTE[2] = 18;
-  BYTE[3] = 18;
-  VAR_LONG[1] = 3960;
-
-  cr_write = write ( descrip_leader , &VAR_LONG[0] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader SPOT1A4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_leader , &BYTE[0] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader SPOT1A4");
-	goto ERREUR;
-  }
-
-
-  cr_write = write ( descrip_leader , &VAR_LONG[1] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  strcpy( TAB , "A   S4-ST-73-1CN 0 0               1");
-  cr_write  = write ( descrip_leader , TAB , 36);
-  if (cr_write != 36)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  if (*nbca == 1)
-  {
-	strcpy(mode,"PAN");
-        strcpy(TAB,"SP0 P0  LEADBIL ");
-  }
-  else
-  {
-    if (*nbca == 3)
-    {
-	strcpy(mode,"XS ");
-        strcpy(TAB,"SP0 X0  LEADBIL ");
-    }
-    else
-    {
-     if (*nbca == 4)
-     {
-	strcpy(mode,"XI ");
-        strcpy(TAB,"SP0 I0  LEADBIL ");
-     }
-    }
-   }	
-
-  cr_write = write ( descrip_leader, TAB , 16);
-  if (cr_write != 16)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  
-  strcpy( TAB , "FSEQ       1   4FTYP       5   4FLGT       9   4YNNN");
-  cr_write  = write ( descrip_leader , TAB , 52);
-  if (cr_write != 52)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-
-  for (i=0;i<13000;i++)
-  {
-	 strcpy ( &TAB[i]," ");
-  }
-
-  cr_write  = write ( descrip_leader , TAB , 64);
-  if (cr_write != 64)
-  {
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  }
-
-/* SEGMENT VARIABLE : */
-
-  strcpy( TAB , "     1  3960    24  3960     1  3960     2    37 16A     2    21 16A");
-  cr_write  = write ( descrip_leader , TAB , 68);
-  if (cr_write != 68)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-
- for (i=0;i<81;i++)
-  {
-	 strcpy ( &TAB[i]," ");
-  }
-
-  strcpy( TAB , "     2   613 16A     2   629 16A     2   581 32A     2    85 32A     2  1317 64A");
-  cr_write  = write ( descrip_leader , TAB , 80);
-  if (cr_write != 80)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
- for (i=0;i<50;i++)
-  {
-	 strcpy ( &TAB[i]," ");
-  }
-
-  strcpy( TAB , "     2  1029 16A     2  1061256A                ");
-  cr_write  = write ( descrip_leader , TAB , 48);
-  if (cr_write != 48)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
- for (i=0;i<3600;i++)
-  {
-	 strcpy ( &TAB[i]," ");
-  }
-
-  cr_write = write ( descrip_leader , TAB , 3584);
-  if (cr_write != 3584)
-  {
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  }
-
-/**************************/
-/* Pour le fichier HEADER */
-/**************************/
-
-/* 1 RECORD */
-
-  VAR_LONG[0] = 2;
-  BYTE[0] = 18;
-  BYTE[1] = 18;
-  BYTE[2] = 18;
-  BYTE[3] = 18;
-  VAR_LONG[1] = 3960;
-
-
-  cr_write = write ( descrip_leader , &VAR_LONG[0] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_leader , BYTE , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-
-  cr_write = write ( descrip_leader , &VAR_LONG[1] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB, "   1");
-  cr_write  = write ( descrip_leader , TAB , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
- for (i=0;i<630;i++)
-  {
-	 strcpy ( &TAB[i]," ");
-  }
-
-   cr_write = write ( descrip_leader , TAB , 628);
-  if (cr_write != 628)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-   /* Ecriture du mode spectral */
-
-   cr_write = write(descrip_leader,mode,3);
-   if (cr_write != 3)
-   {
-	 strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	 goto ERREUR;
-   }
-
-    cr_write = write(descrip_leader,TAB,360);
-    if (cr_write != 360)
-    {
-         strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-         goto ERREUR;
-    }
- 
-   /* Initialisation du nombre de colonnes, du nombre de lignes et du nombre 
-   de canaux : */
-   sprintf(TAB,"%5d" , *nbcol);
-
-   cr_write = write ( descrip_leader , TAB , 5);
-   if (cr_write != 5)
-   {
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-   }
-   strcpy ( TAB, "               ");
-   cr_write = write ( descrip_leader , TAB , 11);
-   if (cr_write != 11)
-   {
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-   }
-   sprintf(TAB,"%5d" , *nblig);
-   cr_write = write ( descrip_leader , TAB , 5);
-   if (cr_write != 5)
-   {
-	   strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	   goto ERREUR;
-   }
-   for (i=0;i<35;i++)
-   {
-	 strcpy(&TAB[i], " ");
-   }
-   cr_write = write ( descrip_leader , TAB , 31);
-   if (cr_write != 31)
-   {
-	   strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	   goto ERREUR;
-   }
-   
-   
-  sprintf(TAB,"%d",*nbca);
-  cr_write = write ( descrip_leader , TAB , 1);
-  if (cr_write != 1)
-  {
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  }
-   for (i=0;i<2741;i++)
-   {
-	 strcpy(&TAB[i], " ");
-   }
-
-  cr_write = write ( descrip_leader , TAB , 2740);
-  if (cr_write != 2740)
-  {
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  }
-  
-                 
-  strcpy ( TAB , "   1            3960              16            3960            ");
-  cr_write = write ( descrip_leader , TAB , 64);
-  if (cr_write != 64)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
- 
-  strcpy ( TAB , "   1            3960               4            3960            ");
-  cr_write = write ( descrip_leader , TAB , 64);
-  if (cr_write != 64)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB , "   1            3960            ");
-  cr_write = write ( descrip_leader , TAB , 32);
-  if (cr_write != 32)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-
-
-/**************************************/
-/* Pour le fichier EPHEMERIS/ATTITUDE */
-/**************************************/
-
-/* 1 RECORD */
-
-  VAR_LONG[0] = 3;
-  BYTE[0] = 246;
-  BYTE[1] = 36;
-  BYTE[2] = 18;
-  BYTE[3] = 18;
-  VAR_LONG[1] = 3960;
-
-
-  cr_write = write ( descrip_leader , &VAR_LONG[0] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_leader , BYTE , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_leader , &VAR_LONG[1] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB , "   1");
-  cr_write = write ( descrip_leader , TAB , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-  for (i=0;i<3945;i++)
-  {
-	 strcpy(&TAB[i], " ");
-  }
-
-/* Ecriture dans le fichier Leader */
-
-  cr_write = write ( descrip_leader , TAB , 3944);
-  if (cr_write != 3944)
-  {
-	strcpy(CAI_ERREUR, "Erreur acces au fichier Leader");
-	goto ERREUR;
-  }
-
-
-
-/*******************************************/
-/* Pour le fichier RADIOMETRIC CALIBRATION */
-/*******************************************/
-
-/* 16 RECORDS */
-
-  BYTE[0] = 63;
-  BYTE[1] = 36;
-  BYTE[2] = 18;
-  BYTE[3] = 18;
-  VAR_LONG[1] = 3960;
-
-  /*image source non SPOT*/
-
-/* Ecriture dans le fichier Leader */
-
-  for (i=0;i<16;i++)	/* Pour 16 records */
-  {
-	VAR_LONG[0] = 4+i;
-	cr_write = write ( descrip_leader , &VAR_LONG[0] , 4);
- 	if (cr_write != 4)
-  	{
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  	}
-
-  	cr_write = write ( descrip_leader , BYTE , 4);
-  	if (cr_write != 4)
-  	{
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  	}
-
-	cr_write = write ( descrip_leader , &VAR_LONG[1] , 4);
- 	if (cr_write != 4)
-  	{
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  	}
-
-  	cr_write = write ( descrip_leader , TAB , 48);
-	if (cr_write != 48)
-	{
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  	}
-        for (j=0;j<3000;j=j+2)
-        {
-	   strcpy(&TAB[j], " ");
-	   strcpy(&TAB[j+1], "0");
-        }
-
-	cr_write = write ( descrip_leader , TAB , 3000);
-	if ( cr_write != 3000)
-	{
-	  strcpy(CAI_ERREUR,"Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-	}
-        for (j=0;j<900;j++)
-        {
-	   strcpy(&TAB[j], " ");
-        }
-
-  	cr_write = write ( descrip_leader , TAB , 900);
-	if (cr_write != 900)
-	{
-	  	strcpy ( CAI_ERREUR, 
-			"Erreur ecriture du fichier Leader Spot1a4");
-	  	goto ERREUR;
-  	}
-
-  }
-
-
-/**********************************************/
-/* Pour  MODELIZATION et GROUND CONTROL POINTS*/
-/**********************************************/
-
-/* 2 RECORD */
-
-for (i=0;i<2;i++)
-{
-  VAR_LONG[0] = 20+i;
-  BYTE[0] = 8;
-  BYTE[1] = 21;
-  BYTE[2] = 48;
-  BYTE[3] = 35;
-  VAR_LONG[1] = 3960;
-
-  cr_write = write ( descrip_leader , &VAR_LONG[0] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_leader , BYTE , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_leader , &VAR_LONG[1] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-
-  strcpy ( TAB , "   1");
-  cr_write = write ( descrip_leader , TAB, 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR , "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  for (i=0;i<3950;i++)
-  {
-	 strcpy(&TAB[j], " ");
-  }
-
-  
-  /* Ecriture dans le fichier Leader */
-
-  cr_write = write ( descrip_leader , TAB , 3944);
-  if ( cr_write != 3944)
-  {
-	  strcpy(CAI_ERREUR,"Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  }
-}
-
-/*****************************/
-/* Pour  HISTOGRAM           */
-/*****************************/
-
-/* 4 RECORDS */
-
-  BYTE[0] = 192;
-  BYTE[1] = 36;
-  BYTE[2] = 18;
-  BYTE[3] = 18;
-  VAR_LONG[1] = 3960;
-
-
-  for (i=0;i<*nbca;i++)	/* nbca records */
-  {
-
-	VAR_LONG[0] = 22+i;
-
-	cr_write = write ( descrip_leader , &VAR_LONG[0] , 4);
-  	if (cr_write != 4)
-  	{
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  	}
-
-  	cr_write = write ( descrip_leader , BYTE , 4);
-  	if (cr_write != 4)
- 	{
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  	}
-
-	cr_write = write ( descrip_leader , &VAR_LONG[1] , 4);
-  	if (cr_write != 4)
-  	{
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  	}
-
-  	cr_write = write ( descrip_leader , TAB , 3948);
-	if (cr_write != 3948)
-	{
-	  	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  	goto ERREUR;
-  	}
-
-  }
-
-  if (*nbca!=4)
-  {
-    for (i=0;i<(4-(*nbca));i++)
-    {
-	VAR_LONG[0] = 22+i+(*nbca);
-
-	cr_write = write ( descrip_leader , &VAR_LONG[0] , 4);
-  	if (cr_write != 4)
-  	{
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  	}
-
-  	cr_write = write ( descrip_leader , BYTE , 4);
-  	if (cr_write != 4)
- 	{
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  	}
-
-
-	cr_write = write ( descrip_leader , &VAR_LONG[1] , 4);
-  	if (cr_write != 4)
-  	{
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  	}
-
-	if (*nbca == 1)
-	{
-          sprintf(TAB,"   %d",i+2);
-	}
-	if (*nbca == 3)
-	{
-	  strcpy(TAB,"   4");
-	}
-
-	cr_write = write ( descrip_leader , TAB , 4);
-  	if (cr_write != 4)
-  	{
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  	}
-
-  	for (i=0;i<4000;i++)
-  	{
-		 strcpy(&TAB[j], " ");
-  	}
-
-        cr_write = write(descrip_leader, TAB, 3944);
-	if (cr_write != 3944)
-	{
-		strcpy(CAI_ERREUR,"Erreur ecriture du fichier Leader Spot1a4");
-		goto ERREUR;
-	}
-     }
-  }
-
-
-/**********************************/
-/* Pour le fichier MAP PROJECTION */
-/**********************************/
-
-/* 1 RECORD */
-
-
-  VAR_LONG[0] = 26;
-  BYTE[0] = 36;
-  BYTE[1] = 36;
-  BYTE[2] = 18;
-  BYTE[3] = 18;
-  VAR_LONG[1] = 3960;
-
-  cr_write = write ( descrip_leader , &VAR_LONG[0] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_leader , BYTE , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_leader , &VAR_LONG[1] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  strcpy(TAB, "   1");
-  cr_write = write ( descrip_leader , TAB , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  for (i=0;i<4000;i++)
-  {
-	 strcpy(&TAB[i], " ");
-  }
-
-  cr_write = write ( descrip_leader , TAB , 3944);
-  if (cr_write != 3944)
-  {
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  }
-
-/*******************************/
-/* Pour le fichier ANNOTATIONS */
-/*******************************/
-
-/* 1 RECORD */
-
-
-  VAR_LONG[0] = 27;
-  BYTE[0] = 18;
-  BYTE[1] = 219;
-  BYTE[2] = 18;
-  BYTE[3] = 18;
-  VAR_LONG[1] = 3960;
-
-  cr_write = write ( descrip_leader , &VAR_LONG[0] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_leader , BYTE , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_leader , &VAR_LONG[1] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  strcpy(TAB, "   1   3");
-  cr_write = write ( descrip_leader , TAB , 8);
-  if (cr_write != 8)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-   strcpy(TAB, "                                             ");
-
-  cr_write = write ( descrip_leader , TAB , 32);
-  if (cr_write != 32)
-  {
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  }
-
-  strcpy(TAB, " 180  36VT  ");
-  cr_write = write ( descrip_leader , TAB , 12);
-  if (cr_write != 12)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
- for (i=0;i<170;i++)
- { 
-	 strcpy ( &TAB[i]," ");
-  }
-
-  cr_write = write ( descrip_leader , TAB , 168);
-  if (cr_write != 168)
-  {
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  }
-
-  strcpy(TAB, " 360  98VZ1 ");
-  cr_write = write ( descrip_leader , TAB , 12);
-  if (cr_write != 12)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  for (i=0;i<350;i++)
-  {
-	 strcpy ( &TAB[i]," ");
-  }
-
-  cr_write = write ( descrip_leader , TAB , 348);
-  if (cr_write != 348)
-  {
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-
-  }
-
-  strcpy(TAB, " 540  60VZ2 ");
-  cr_write = write ( descrip_leader , TAB , 12);
-  if (cr_write != 12)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  for (i=0;i<1120;i++)
-  {
-	 strcpy ( &TAB[i]," ");
-  }
-
-  cr_write = write ( descrip_leader , TAB , 1112);
-  if (cr_write != 1112)
-  {
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	  goto ERREUR;
-  }
-
-  strcpy(TAB, "   4 8  ");
-  cr_write = write ( descrip_leader , TAB , 8);
-  if (cr_write != 8)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
-
-  for (i=0;i<2240;i++)
-  {
-	 strcpy(&TAB[i], " ");
-  }
-
-  cr_write = write ( descrip_leader , TAB , 2236);
-  if (cr_write != 2236)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Leader Spot1a4");
-	goto ERREUR;
-  }
- 
-/*--------------------------------------------*/
-/*       Fermeture du fichier LEADER          */
-/*--------------------------------------------*/
-
-  close (descrip_leader);
-
-
-/******************************************************************/
-/*   Constitution du nom du fichier TRAILER et verification qu'il */
-/*                    n'existe pas deja	                          */				
-/******************************************************************/
-  sprintf(nom_fic,"%s/TRAI_01.DAT",nom_rep);
-  retour = stat ( nom_fic , &buf_stat );
-  if ( retour == 0 )
-  { 
-       sprintf ( CAI_ERREUR , "Le fichier %s TRAILER SPOT1A4 existe \n" , 
-				nom_image );
-       goto ERREUR;
-  }
-
-
-/*---------------------------------------------------------------------------*/
-/*	Ouverture du fichier TRAILER en creation			     */
-/*---------------------------------------------------------------------------*/
-
-  descrip_trailer =  open (nom_fic,O_RDWR|O_CREAT|O_BINARY, PERMS );
-
-  if (descrip_trailer == -1)
-  {
-  	strcpy (CAI_ERREUR,"Erreur ouverture du fichier TRAILER SPOT1A4 ");
-  	goto ERREUR;
-  }
-
-/*---------------------------------------------------------------------------*/
-/*		ECRITURE DU FICHIER TRAILER				     */
-/*---------------------------------------------------------------------------*/
-
-/***********************************/
-/* Pour le fichier FILE DESCRIPTOR */
-/***********************************/
-
-/* 1 RECORD */
-
-/* SEGMENT FIXE : */
-
-  VAR_LONG[0] = 1;
-  BYTE[0] = 63;
-  BYTE[1] = 192;
-  BYTE[2] = 18;
-  BYTE[3] = 18;
-  VAR_LONG[1] = 1080;
-
-  cr_write = write ( descrip_trailer , &VAR_LONG[0] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_trailer , BYTE , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-
-
-  cr_write = write ( descrip_trailer , &VAR_LONG[1] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB , "A   S4-ST-73-1CN 0 0               3");
-  cr_write = write ( descrip_trailer , TAB , 36);
-  if ( cr_write != 36)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-
-  strcpy (TAB,"        TRAIBIL FSEQ       1   4FTYP       5   4FLGT       9   4YNNN");
-  cr_write = write ( descrip_trailer , TAB , 68);
-  if ( cr_write != 68)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-
-  for (i=0;i<70;i++)
-  {
-	 strcpy(&TAB[i], " ");
-  }
-  
-  cr_write = write ( descrip_trailer , TAB , 64);
-  if ( cr_write != 64)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-
-
-/* SEGMENT VARIABLE : */
-
-  strcpy ( TAB , "   3    1080");
-  cr_write = write ( descrip_trailer , TAB , 12);
-  if ( cr_write != 12)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-
-  for (i=0;i<30;i++)
-  {
-	 strcpy(&TAB[i], " ");
-  }
-  
-  cr_write = write ( descrip_trailer , TAB , 24);
-  if ( cr_write != 24)
-  {
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	  goto ERREUR;
-  }
-  strcpy ( TAB , "     2    21  4N     2    35200A");
-  cr_write = write ( descrip_trailer , TAB , 32);
-  if ( cr_write != 32)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-  for (i=0;i<835;i++)
-  {
-	 strcpy(&TAB[i], " ");
-  }
-
-  cr_write = write ( descrip_trailer , TAB , 832);
-  if ( cr_write != 832)
-  {
-	  strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	  goto ERREUR;
-  }
-
-
-/***********************************/
-/* Pour le fichier TRAILER-QUALITY */
-/***********************************/
-
-/* 1 RECORD */
-
-/* SEGMENT FIXE : */
-
-  VAR_LONG[0] = 2;
-  BYTE[0] = 18;
-  BYTE[1] = 246;
-  BYTE[2] = 18;
-  BYTE[3] = 18;
-  VAR_LONG[1] = 1080;
-
-  cr_write = write ( descrip_trailer , &VAR_LONG[0] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_trailer , BYTE , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_trailer , &VAR_LONG[1] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB , "   1    ");
-  cr_write = write ( descrip_trailer , TAB , 8);
-  if ( cr_write != 8)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-
-
-  /*ecriture dans le fichier trailer*/
-  for (i=0;i<215;i++)
-  {
-	 strcpy(&TAB[i], " ");
-  }
-  cr_write = write ( descrip_trailer , TAB , 214);
-  if ( cr_write != 214)
-  {
-	strcpy ( CAI_ERREUR , "Erreur ecriture du fichier Trailer SPOT1A4");
- 	goto ERREUR;
-  }
- 
-  strcpy ( TAB , "   1  1080");
-  cr_write = write ( descrip_trailer , TAB , 10);
-  if ( cr_write != 10)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-
-  for (i=0;i<840;i++)
-  {
-	 strcpy(&TAB[i], " ");
-  }
-
-  cr_write = write ( descrip_trailer , TAB , 836);
-  if ( cr_write != 836)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-
-/*********************************************/
-/* Pour le fichier GEOMETRIC TRANSFORMATIONS */
-/*********************************************/
-
-/* 1 RECORD */
-
-/* SEGMENT FIXE : */
-
-  VAR_LONG[0] = 3;
-  BYTE[0] = 18;
-  BYTE[1] = 246;
-  BYTE[2] = 18;
-  BYTE[3] = 18;
-  VAR_LONG[1] = 1080;
-
-  cr_write = write ( descrip_trailer , &VAR_LONG[0] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_trailer , BYTE , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_trailer , &VAR_LONG[1] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB , "   1");
-  cr_write = write ( descrip_trailer , TAB , 4);
-  if ( cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-
-  for (i=0;i<1070;i++)
-  {
-	 strcpy(&TAB[i], " ");
-  }
-
-  cr_write = write ( descrip_trailer , TAB, 1064);
-  if ( cr_write != 1064)
-  {
-	strcpy ( CAI_ERREUR, "Erreur ecriture du fichier Trailer SPOT1A4");
-	goto ERREUR;
-  }
-
-
-/*----------------------------------------------*/
-/*        Fermeture du fichier TRAILER          */
-/*----------------------------------------------*/
-
-  close (descrip_trailer);
-
-
-/******************************************************************/
-/*   Constitution du nom du fichier VOLUME_DIRECTORY et           */
-/*      verification qu'il n'existe pas deja	                  */				
-/******************************************************************/
-  sprintf(nom_fic,"%s/VOLD_01.DAT",nom_rep);  
-  retour = stat ( nom_fic , &buf_stat );
-  if ( retour == 0 )
-  { 
-       sprintf ( CAI_ERREUR ,
-		 "Le fichier %s VOLUME_DIRECTORY SPOT1A4 existe \n" ,
-		 nom_image );
-       goto ERREUR;
-  }
-
-
-/*---------------------------------------------------------------------------*/
-/*	Ouverture du fichier VOLUME DIRECTORY en creation		     */
-/*---------------------------------------------------------------------------*/
-
-  descrip_volume = open (nom_fic,O_RDWR|O_CREAT|O_BINARY, PERMS );
-  if (descrip_volume == -1)
-  {
-  	strcpy (CAI_ERREUR,
-		"Erreur de creation du fichier VOLUME DIRECTORY  SPOT1A4");
-  	goto ERREUR;
-  }
-
-
-/*---------------------------------------------------------------------------*/
-/*		ECRITURE DU FICHIER VOLUME DIRECTORY			     */
-/*---------------------------------------------------------------------------*/
-
-/*************************************/
-/* Pour le fichier VOLUME DESCRIPTOR */
-/*************************************/
-
-/* 1 RECORD */
-
-  VAR_LONG[0] = 1;
-  BYTE[0] =192;
-  BYTE[1] = 192;
-  BYTE[2] = 18;
-  BYTE[3] = 18;
-  VAR_LONG[1] = 360;
-
-  cr_write = write ( descrip_volume , &VAR_LONG[0] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory  SPOT1A4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_volume , BYTE , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory  SPOT1A4");
-	goto ERREUR;
-  }
-
-
-  cr_write = write ( descrip_volume , &VAR_LONG[1] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory  SPOT1A4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB , "A   CCB-CCT-0002 A AECR_EXT_SPOT");
-  cr_write = write ( descrip_volume, TAB, 32);
-  if (cr_write != 32)
-  {
-	strcpy ( CAI_ERREUR,
-		 "Erreur d'ecriture du fichier Volume Directory  SPOT1A4");
-	goto ERREUR;
-  }
-
-  
-  for (i=0;i<70;i++)
-  {
-	 strcpy ( &TAB[i]," ");
-  }
-  cr_write = write ( descrip_volume, TAB, 68);
-  if (cr_write != 68)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory  SPOT1A4");
-	goto ERREUR;
-  }
-
-
-/* Recuperation de la date systeme */
-
-  LocalTime = time(NULL);	/* Date calendaire */
-
-
-/* Ecriture dans une chaine de caracteres */
-
-  LgDate = 17;
-
-  strftime ( StrDate , LgDate , "%Y%m%d%H%M%S  ",localtime(&LocalTime));
-
-  cr_write = write ( descrip_volume,StrDate,16);
-  if (cr_write != 16)
-  {
-	  strcpy ( CAI_ERREUR,
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	  goto ERREUR;
-  }
- 
-  strcpy ( &TAB[33], "   3   5");
-  cr_write = write ( descrip_volume , TAB , 232);
-  if (cr_write != 232)
-  {
-	strcpy ( CAI_ERREUR,
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-
-
-/************************************************/
-/* Pour le fichier FILE POINTER for Leader File */
-/************************************************/
-
-/* 1 RECORD */
-
-  VAR_LONG[0] = 2;
-  BYTE[0] =219;
-  BYTE[1] = 192;
-  BYTE[2] = 18;
-  BYTE[3] = 18;
-  VAR_LONG[1] = 360;
-
-  cr_write = write ( descrip_volume , &VAR_LONG[0] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_volume , BYTE , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_volume , &VAR_LONG[1] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR,
-		 "Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB,"A      1SP      LEADBIL LEADER FILE ");
-  cr_write = write ( descrip_volume, TAB, 36);
-  if (cr_write != 36)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB , "                                   ");
-  cr_write = write ( descrip_volume, TAB, 16);
-  if (cr_write != 16)
-  {
-	  strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	  goto ERREUR;
-  }
-
-  strcpy ( TAB,"LEADMIXED BINARY AND ASCII      MBAA      27    3960    3960FIXED LENGHTFIXD    ");
-  cr_write = write ( descrip_volume, TAB, 80);
-  if (cr_write != 80)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-
-  for (i=0;i<217;i++)
-  {
-	 strcpy ( &TAB[i]," ");
-  }
-
-  cr_write = write ( descrip_volume, TAB, 216);
-  if (cr_write != 216)
-  {
-	  strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	  goto ERREUR;
-  }
-
-
-/*************************************************/
-/* Pour le fichier FILE POINTER for Imagery File */
-/*************************************************/
-
-/* 1 RECORD */
-
-  VAR_LONG[0] = 3;
-  BYTE[0] =219;
-  BYTE[1] = 192;
-  BYTE[2] = 18;
-  BYTE[3] = 18;
-  VAR_LONG[1] = 360;
-
-  cr_write = write ( descrip_volume , &VAR_LONG[0] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_volume , BYTE , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR,
-		 "Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_volume , &VAR_LONG[1] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB,"A      2SP      IMGYBIL IMAGERY FIL ");
-  cr_write = write ( descrip_volume, TAB, 36);
-  if (cr_write != 36)
-  {
-	strcpy ( CAI_ERREUR,
-		 "Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB , "                IMGYBINARY ONLY                 BINO");
-  cr_write = write ( descrip_volume, TAB, 52);
-  if (cr_write != 52)
-  {
-	  strcpy ( CAI_ERREUR,
-		 "Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	  goto ERREUR;
-  }
-
-  strcpy ( TAB ,"000                     FIXED LENGTHFIXD");
-  cr_write = write ( descrip_volume, TAB, 40);
-  if (cr_write != 40)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
- 
-   for (i=0;i<125;i++)
-   {
-	 strcpy ( &TAB[i]," ");
-   }
-
-  cr_write = write ( descrip_volume, TAB, 120);
-  if (cr_write != 120)
-  {
-	strcpy ( CAI_ERREUR,
-		 "Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
- 
-  strcpy(TAB,"000     ");
-  cr_write = write ( descrip_volume, TAB, 100);
-  if (cr_write != 100)
-  {
-	  strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	  goto ERREUR;
-  }
-
-
-/*************************************************/
-/* Pour le fichier FILE POINTER for Trailer File */
-/*************************************************/
-
-/* 1 RECORD */
-
-  VAR_LONG[0] = 4;
-  BYTE[0] = 219;
-  BYTE[1] = 192;
-  BYTE[2] = 18;
-  BYTE[3] = 18;
-  VAR_LONG[1] = 360;
-
-  cr_write = write ( descrip_volume , &VAR_LONG[0] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR,
-		 "Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_volume , BYTE , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_volume , &VAR_LONG[1] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR,
-		 "Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB,"A      3SP      TRAIBIL TRAILER FILE");
-  cr_write = write ( descrip_volume, TAB, 36);
-  if (cr_write != 36)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-  strcpy(TAB,"                                    ");
-  cr_write = write ( descrip_volume, TAB, 16);
-  if (cr_write != 16)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB,"TRAIMIXED BINARY AND ASCII      MBAA       3    1080    1080FIXED LENGTHFIXD");
-  cr_write = write ( descrip_volume, TAB, 76);
-  if (cr_write != 76)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory  SPOT1A4");
-	goto ERREUR;
-  }
-
-   for (i=0;i<225;i++)
-   {
-	 strcpy ( &TAB[i]," ");
-   }
-  cr_write = write ( descrip_volume, TAB, 220);
-  if (cr_write != 220)
-  {
-	  strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	  goto ERREUR;
-  }
-
-/************************/
-/* Pour le fichier TEXT */
-/************************/
-
-/* 1 RECORD */
-
-  VAR_LONG[0] = 5;
-  BYTE[0] = 18;
-  BYTE[1] = 63;
-  BYTE[2] = 18;
-  BYTE[3] = 18;
-  VAR_LONG[1] = 360;
-
-  cr_write = write ( descrip_volume , &VAR_LONG[0] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR,
-		 "Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_volume , BYTE , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-
-  cr_write = write ( descrip_volume , &VAR_LONG[1] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR,
-		 "Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB,"A   PRODUCT:            SPOT");
-  cr_write = write ( descrip_volume, TAB, 28);
-  if (cr_write != 28)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-
-  strcpy ( TAB,"             MODE       BIL  LEVEL    \r\n");
-  cr_write = write ( descrip_volume, TAB, 40);
-  if (cr_write != 40)
-  {
-	strcpy ( CAI_ERREUR, "Erreur d'ecriture du fichier Volume Directory");
-	goto ERREUR;
-  }
-
-   for (i=0;i<50;i++)
-   {
-	 strcpy ( &TAB[i]," ");
-   }
-
-  cr_write = write ( descrip_volume, TAB, 40);
-  if ( cr_write != 40)
-  {
-	strcpy ( CAI_ERREUR,
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-
-  strcpy ( TAB , "PROD. CNES_QTIS   COPYRIGHT CNES   ");
-  cr_write = write ( descrip_volume , TAB , 35);
-  if (cr_write != 35)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
- 
-/* Recuperation de la date systeme */
-
-  LocalTime = time(NULL);	/* Date calendaire */
-
-/* Ecriture dans une chaine de caracteres */
-
-  LgDate = 24;
-
-  strftime ( StrDate , LgDate , "%d %m %Y - %HH%MMN%SS" , 
-		localtime(&LocalTime));
-  cr_write = write ( descrip_volume, StrDate , 23);
-  if (cr_write != 23)
-  {
-	  strcpy ( CAI_ERREUR,
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	  goto ERREUR;
-  }
- 
-  strcpy ( TAB ,"\r\nSCENE               -       THE               ");
-  cr_write = write ( descrip_volume , TAB , 48);
-  if (cr_write != 48)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB,"\r\nVOL : VOLUME 1 ORDER: ORDRE 1         \r\n");
-  cr_write = write ( descrip_volume , TAB , 42);
-  if (cr_write != 42)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-   for (i=0;i<95;i++)
-   {
-	 strcpy ( &TAB[i]," ");
-   }
-
-  cr_write = write ( descrip_volume , TAB , 92);
-  if (cr_write != 92)
-  {
-	  strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Volume Directory SPOT1A4");
-	  goto ERREUR;
-  }
-
-/*----------------------------------------------*/
-/*        Fermeture du fichier VOLUME           */
-/*----------------------------------------------*/
-
-  close (descrip_volume);
-
-
-/******************************************************************/
-/*   Constitution du nom du fichier NULL_VOLUME_DIRECTORY         */ 
-/*          et verification qu'il n'existe pas deja	          */				
-/******************************************************************/
-  sprintf(nom_fic,"%s/NULL_01.DAT",nom_rep);
-  retour = stat ( nom_fic , &buf_stat );
-  if ( retour == 0 )
-  { 
-       sprintf ( CAI_ERREUR , 
-		"Le fichier %s NULL_VOLUME_DIRECTORY  SPOT1A4 existe \n" , 
-		nom_image );
-       goto ERREUR;
-  }
-
-
-/*---------------------------------------------------------------------------*/
-/*	Ouverture du fichier NULL VOLUME DIRECTORY en creation		     */
-/*---------------------------------------------------------------------------*/
-
-  descrip_null = open (nom_fic,O_RDWR|O_CREAT|O_BINARY, PERMS );
-  if (descrip_null == -1)
-  {
-  	strcpy (CAI_ERREUR,
-		"Erreur de creation du fichier NULL VOLUME DIRECTORY SPOT1A4");
-  	goto ERREUR;
-  }
-
-
-/*---------------------------------------------------------------------------*/
-/*		ECRITURE DU FICHIER NULL VOLUME DIRECTORY		     */
-/*---------------------------------------------------------------------------*/
-
-/******************************************/
-/* Pour le fichier NULL VOLUME DESCRIPTOR */
-/******************************************/
-
-/* 1 RECORD */
-
-  VAR_LONG[0] = 1;
-  BYTE[0] =192;
-  BYTE[1] = 192;
-  BYTE[2] = 63;
-  BYTE[3] = 18;
-  VAR_LONG[1] = 360;
-
-  cr_write = write ( descrip_null , &VAR_LONG[0] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Null Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_null , BYTE , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Null Volume Directory SPOT1A4");
-	goto ERREUR;
-  }
-
-
-  cr_write = write ( descrip_null , &VAR_LONG[1] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Null Volume Directory SPOT1A4");
-	goto ERREUR; 
- }
-
-  strcpy ( TAB , "A   CCB-CCT-0002 A A");
-  cr_write = write ( descrip_null, TAB, 20);
-  if (cr_write != 20)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Null Volume Directory SPOT1A4");
-	goto ERREUR; 
- }
-
-  for (i=0;i<340;i++)
-  {
-	 strcpy ( &TAB[i]," ");
-  }
-  cr_write = write ( descrip_null, TAB, 328);
-  if (cr_write != 328)
-  {
-	strcpy ( CAI_ERREUR, 
-		"Erreur d'ecriture du fichier Null Volume Directory SPOT1A4");
-	goto ERREUR; 
- }
- 
-
-
-/*-------------------------------------------*/
-/*    Fermeture du fichier NULL VOLUME       */
-/*-------------------------------------------*/
-
-  close (descrip_null);
-
-
-/******************************************************************/
-/*   Constitution du nom du fichier IMAGERY et verification qu'il */
-/*                    n'existe pas deja	                          */				
-/******************************************************************/
-  sprintf(nom_fic,"%s/IMAG_01.DAT",nom_rep); 
-  retour = stat ( nom_fic , &buf_stat );
-  if ( retour == 0 )
-  { 
-       sprintf ( CAI_ERREUR , "Le fichier %s IMAGERY SPOT1A4 existe \n" , 
-			nom_image );
-       goto ERREUR;
-  }
-
-
-/*---------------------------------------------------------------------------*/
-/*	Ouverture du fichier IMAGERY en creation		             */
-/*---------------------------------------------------------------------------*/
-
-  descrip_imagery = open (nom_fic,O_RDWR|O_CREAT|O_BINARY, PERMS );
-  if (descrip_imagery == -1)
-  {
-	strcpy ( CAI_ERREUR , "Erreur de creation du fichier Imagerie SPOT1A4");
-    	goto ERREUR;
-  }
-
-/*---------------------------------------------------------------------------*/
-/*		ECRITURE DU FICHIER IMAGERY				     */
-/*---------------------------------------------------------------------------*/
-
-/***********************************/
-/* Pour le fichier FILE DESCRIPTOR */
-/***********************************/
-
-/* SEGMENT FIXE : */
-
-  /* Initialisation de nbrec et lgrec et des autres donnees utiles */
-   nb = (*nbcol)*(*nboct_pix);
-  /* Definition de lgrec : */
-  if (nb<=5300) 
-	 lgrec = 5400;
-  else if ((nb>5300) && (nb<=8540))
-	 lgrec = 8640;
-  else if ((nb>8540) && (nb<=10880))
-	 lgrec = 10980;
-  else if ((nb>10880) && (nb<=12140))
-	 lgrec = 12240;
-  else
-  {
-	strcpy ( CAI_ERREUR , "Enregistrement trop long pour le fichier imagery");
-    	goto ERREUR;
-  }
-
-
-  /* 1 RECORD */
-  VAR_LONG[0] = 1;
-  BYTE[0] = 63;
-  BYTE[1] = 192;
-  BYTE[2] = 18;
-  BYTE[3] = 18;
-  VAR_LONG[1] = lgrec;
-
-
-  nbrec = (*nbca)*(*nblig);
-  if (nbrec<10000)
-  {
-	 strcpy(&TAMP2[0][0]," ");
-	 strcpy(&TAMP2[0][1]," ");
-	 sprintf ( str_int4,"%d",nbrec);
-  	 for (i=0;i<4;i++)
-  	 {
-	  strcpy(&TAMP2[0][i+2],&str_int4[i]); 
-  	 }
-  }
-  else
-  { 
-	 strcpy(&TAMP2[0][0]," ");
-	 sprintf (str_int5,"%d",nbrec);
-	 for (i=0;i<5;i++)
-	 {
-		strcpy(&TAMP2[0][i+1],&str_int5[i]);
-	 }
-  }
-
-
-  if (lgrec<10000)
-  {
-	 strcpy(&TAMP2[1][0]," ");
-	 strcpy(&TAMP2[1][1]," ");
-	 sprintf ( str_int4,"%d",lgrec);
-  	 for (i=0;i<4;i++)
-  	 {
-	  	strcpy(&TAMP2[1][i+2],&str_int4[i]); 
-  	 }
-  }
-  else
-  {
-	 strcpy(&TAMP2[1][0]," ");
-	 sprintf (str_int5,"%d",lgrec);
-	 for (i=0;i<5;i++)
-	 {
-		strcpy(&TAMP2[1][i+1],&str_int5[i]);
-	 }
-  }
-
-
-  /* Initialisation du nombre de colonnes et du nombre de lignes : */
-
-  for (i=0;i<3;i++)
-  {
-	 strcpy ( &TAMP2[2][i]," ");
-	 strcpy ( &TAMP2[3][i]," ");
-  }
-
-  if (*nblig < 10000)
-  {
-	 strcpy ( &TAMP2[2][3] , "0");
-	 sprintf( str_int4 , "%d" , *nblig);
-	 for (j=0;j<4;j++)
-	 {
-		strcpy(&TAMP2[2][j+4],&str_int4[j]);
-	 }
-  }
-  else
-  {
-	 sprintf( str_int5, "%d", *nblig);
-	 for (j=0;j<5;j++)
-	 {
-		strcpy ( &TAMP2[2][j+3],&str_int5[j]);
-	 }
-  }
-
-  if (*nbcol < 10000)
-  {
-	 strcpy ( &TAMP2[3][3] , "0");
-	 sprintf ( str_int4 , "%d" , *nbcol);
-	 for (j=0;j<4;j++)
-	 {
-		strcpy ( &TAMP2[3][j+4],&str_int4[j]);
-	 }
-  }
-  else
-  {
-	 sprintf ( str_int5 , "%d" , *nbcol);
-	 for ( j=0;j<5;j++)
-	 {
-		strcpy ( &TAMP2[3][j+3],&str_int5[j]);
-	 }
-  }
- 
-  for (i=0;i<4;i++)
-  {
-	  strcpy(&TAMP2[4][i]," "); 
-  }
-
-
-  cr_write = write ( descrip_imagery , &VAR_LONG[0] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-  cr_write = write ( descrip_imagery , BYTE , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-
-  cr_write = write ( descrip_imagery , &VAR_LONG[1] , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR, "Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB, "A   S4-ST-73-1CN 0 0               2");
-  cr_write = write ( descrip_imagery , TAB , 36);
-  if ( cr_write != 36)
-  {
-	strcpy ( CAI_ERREUR, "Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-  
-/* Initialisation du mode spectral et du niveau : */
-   if ((mode[0]=='X')&&(mode[1]=='I'))
-         sprintf(TAB,"    I0  ");
-   else
-         sprintf(TAB,"    %.1s0  ",&mode[0]);
-  
-
-  cr_write = write (descrip_imagery, TAB, 8);
-  if (cr_write != 8)
-  {
-	strcpy(CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-  /* Initialisation du niveau de traitement : */
-
-  LEVEL[0]=' ';
-  strcpy(TAB, "IMGYBIL FSEQ       1   4FTYP       5   4FLGT       9   4YNYN");
-  cr_write = write (descrip_imagery, TAB, 60);
-  if (cr_write != 60)
-  {
-	strcpy(CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-  for (i=0;i<70;i++)
-  {
-	 strcpy ( &TAB[i]," ");
-  }
-
-  cr_write = write (descrip_imagery, TAB, 64);
-  if (cr_write != 64)
-  {
-	strcpy(CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-
-/* SEGMENT VARIABLE : */
-
-  cr_write = write (descrip_imagery , TAMP2 , 6); 
-  if (cr_write != 6)
-  {
-	strcpy ( CAI_ERREUR, "Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
- cr_write = write (descrip_imagery , TAMP2[1] , 6); 
-  if (cr_write != 6)
-  {
-	strcpy ( CAI_ERREUR, "Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-
-  cr_write = write (descrip_imagery, TAB, 24);
-  if (cr_write != 24)
-  {
- 	strcpy(CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-  if (*nboct_pix == 1)
-  {
-	strcpy ( TAB ,"   8");
-  }
-  else if (*nboct_pix == 2)
-  {
-	strcpy ( TAB, "  16");
-  }
-  
-
-  cr_write = write (descrip_imagery, TAB, 4);
-  if (cr_write != 4)
-  {
- 	strcpy(CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-   for (i=0;i<15;i++)
-  {
-	 strcpy ( &TAB[i]," ");
-  }
-
-  strcpy(TAB, "   1   1    ");
-  cr_write = write (descrip_imagery, TAB, 12);
-  if (cr_write != 12)
-  {
- 	strcpy(CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-
-  sprintf(TAB,"%4.d",*nbca);
-  cr_write = write ( descrip_imagery , TAB , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-  cr_write = write (descrip_imagery, TAMP2[2], 8);
-  if (cr_write != 8)
-  {
-	strcpy(CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-  for (i=0;i<5;i++)
-  {
-	 strcpy ( &TAB[i]," ");
-  }
- 
-
-  strcpy ( TAB, "   0");
-  cr_write = write ( descrip_imagery , TAB , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-  
- cr_write = write (descrip_imagery, TAMP2[3], 8);
-  if (cr_write != 8)
-  {
-	strcpy(CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-  cr_write = write (descrip_imagery, TAMP2[4], 4);
-  if (cr_write != 4)
-  {
-	strcpy(CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-  for (i=0;i<16;i++)
-  {
-	 strcpy ( &TAB[i]," ");
-  }
- 
-  strcpy ( TAB, "   0   0BIL  1");
-  cr_write = write ( descrip_imagery , TAB , 14);
-  if (cr_write != 14)
-  {
-	strcpy ( CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-  sprintf(TAB,"%4.d",*nbca);
-
-  cr_write = write ( descrip_imagery , TAB , 2);
-  if (cr_write != 2)
-  {
-	strcpy ( CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
- 
-  for (i=0;i<6;i++)
-  {
-	 strcpy ( &TAB[i]," ");
-  }
-
-  strcpy ( TAB, "  20");
-  cr_write = write ( descrip_imagery , TAB , 4);
-  if (cr_write != 4)
-  {
-	strcpy ( CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-  if (lgrec == 5400)
-  {
-	strcpy(TAB , "    5300");
-  }
-  else
-  {
-	if (lgrec == 8640)
-	{
-	  strcpy(TAB , "    8540");
-	}
-	else
-	{
-	  if (lgrec == 10980)
-	  {
-		strcpy(TAB, "   10880");
-	  }
-	  else strcpy(TAB, "   12140");
-	}
-  }
-  cr_write = write ( descrip_imagery , TAB , 8);
-  if (cr_write != 8)
-  {
-	strcpy ( CAI_ERREUR , "Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB, "  28       1 4PB   5 4PB");
-  cr_write = write ( descrip_imagery , TAB , 24);
-  if (cr_write != 24)
-  {
-	strcpy ( CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-  strcpy ( TAB, "                              ");
-  if ( LEVEL[0] == 'A')
-  {
-	strcpy(TAB,"   9 4PB");
-  }
-  if (( LEVEL[0] == 'B') || (LEVEL[0] == ' '))
-  {
-	strcpy(TAB,"        ");
-  }
-  cr_write = write ( descrip_imagery , TAB , 8);
-  if (cr_write != 8)
-  {
-	strcpy ( CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB , "  13 4PB  17 4PB");
-  cr_write = write ( descrip_imagery , TAB , 16);
-  if (cr_write != 16)
-  {
-	strcpy ( CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-  for (i=0;i<40;i++)
-  {
-	 strcpy ( &TAB[i]," ");
-  }
-
-  cr_write = write ( descrip_imagery , TAB , 32);
-  if (cr_write != 32)
-  {
-	  strcpy ( CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	  goto ERREUR;
-  }
- 
-  if ( LEVEL[0] == 'A')
-  {
-	strcpy(TAB,"   1 2PB");
-  }
-  if (( LEVEL[0] == 'B')  || ( LEVEL[0] == ' '))
-  {
-	strcpy(TAB,"        ");
-  }
-  cr_write = write ( descrip_imagery , TAB , 8);
-  if (cr_write != 8)
-  {
-	strcpy ( CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
- for (i=0;i<60;i++)
-  {
-	 strcpy ( &TAB[i]," ");
-  }  
-
-  cr_write = write ( descrip_imagery , TAB , 56);
-  if (cr_write != 56)
-  {
-	strcpy ( CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-  strcpy ( TAB, "   0   0     254");
-  cr_write = write ( descrip_imagery , TAB , 16);
-  if (cr_write != 16)
-  {
-	strcpy ( CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	goto ERREUR;
-  }
-
-
-/* Mise a blanc de lgrec-180-268 = lgrec-448 octets */
-
-  for (i=0;i<5000;i++)
-  {
-	 strcpy ( &TAB[i]," ");
-  }  
-  
-  k = lgrec-448;
-  cr_write = write ( descrip_imagery , TAB , k);
-  if (cr_write != k)
-  {
-	  strcpy ( CAI_ERREUR,"Erreur d'ecriture du fichier Imagery SPOT1A4");
-	  goto ERREUR;
-  }
-
-/*------------------------------------*/
-/* Ecriture de l'image entiere a vide */
-/*------------------------------------*/
-  nb=(*nblig)*(*nbca);
-  for (i=0;i<lgrec;i++)
-  {
-	 TAB[i]=0;
-  }  
-  
-  for (i=0;i<nb;i++)
-  {
- 	cr_write = write ( descrip_imagery , TAB , lgrec);
-  	if (cr_write != lgrec)
-  	{
-	  strcpy ( CAI_ERREUR,
-		"Erreur d'ecriture du fichier Imagery SPOT1A4 a vide");	
-	  goto ERREUR;
-  	}
-    }
-
-  /*stockage de la long enregistrement et port */
-
- for (i=0;i<*nbca;i=i+1)
-   {
-    image1->ACCES_CANAL_INT[i]=descrip_imagery;
-    image1->POS_OCTET[i]=lgrec;
-   }
-  image1->TYPE_SPOT = 1;
-
-    /* Sortie sans erreur : */
-  return(image1);
- 
-/* Sorties degradees : */
-
-ERREUR:
-
-/* Fermeture des fichiers et destructions */
-  if (descrip_leader>0) close(descrip_leader);
-  if (descrip_trailer>0) close(descrip_trailer);
-  if (descrip_volume>0) close(descrip_volume);
-  if (descrip_null>0) close(descrip_null);
-  if (descrip_imagery>0) close(descrip_imagery);
-  if (Existe==0)
-  {
-     sprintf(Command,"rm -R %s",nom_rep);
-     system(Command);
-  }
-  else
-  {
-      sprintf(nom_fic,"%s/LEAD_01.DAT",nom_rep);
-      unlink(nom_fic);
-      sprintf(nom_fic,"%s/TRAI_01.DAT",nom_rep);
-      unlink(nom_fic);
-      sprintf(nom_fic,"%s/VOLD_01.DAT",nom_rep);
-      unlink(nom_fic);
-      sprintf(nom_fic,"%s/IMAG_01.DAT",nom_rep);
-      unlink(nom_fic);
-      sprintf(nom_fic,"%s/NULL_01.DAT",nom_rep);
-      unlink(nom_fic);
-  }
-     
-  return(NULL);
-
-}
-/* 
-  Fin de l'operation cai_ouvre_creation_spot1a4
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_spot5TIF                                */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format spot5 TIFF et de tous les fichiers qui la composent   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_IMAGE *cai_ouvre_creation_spot5TIF(repert,         */
-/*  ---------------- 		                       nom_image,nb_can,     */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            label)           */
-/*                                                                           */
-/*     repert	      (E) (char *) : repertoire	de stockage		     */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir                 */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_spot5TIF (S) (CAI_IMAGE *) :  =NULL si pb          */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-static CAI_IMAGE *cai_ouvre_creation_spot5TIF(char *repert,
-				   		char *nom_image,
-				   		int *nbca,
-				   		int *nboct_pix,
-				   		int *nbcol,
-				   		int *nblig,
-				   		char *label)
-
-{
-   char nom_fic[1024];	     /* nom du fichier leader    	             */
-   char nom_ficM[1024];	     /* nom du fichier leader renomme 	             */
-   char nom_rep[1024];	     /* nom du repertoire image 	             */
-   CAI_OK_KO icr;            /* compte rendu d'operation                     */
-   struct stat	buf_stat;    /* structure decrivant status de fichier        */
-   CAI_IMAGE *image1;        /* descripteur image			     */
-   int Existe;		     /* Indicateur d'existence du repertoire image   */
-   int retour,cr;            /* retour de fonction stat                      */
-	 
-/*........................................
-   INITIALISATIONS et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-  Existe = 0;
-
-/******************************************************************/
-/*   Constitution du repertoire image s'il n'existe pas deja      */
-/******************************************************************/
-
-  nom_fic[0]='\0';
-  if ((long)strlen(repert)!= 0)
-  {
-      sprintf(nom_rep,"%s/%s",repert,nom_image);     
-  }
-  else
-  {
-      sprintf(nom_rep,"%s",nom_image);
-  }
-
-  retour = stat ( nom_rep , &buf_stat );
-    
-  /* si le repertoire image n'existe pas, le creer*/  
-  if ( retour != 0 )
-  {  
-      cr = mkdir (nom_rep,0775);
-      if (cr !=0)
-      {
-         sprintf ( CAI_ERREUR , 
-		"probleme a la creation du repertoire image %s SPOT5TIFF \n" ,
-		 nom_image );
-         retour =0;
-         goto ERREUR;
-      }
-  }
-  else
-	Existe = 1;
-
-/******************************************************************/
-/*   Constitution du nom du fichier IMAGERY et verification qu'il */
-/*                    n'existe pas deja	                          */				/******************************************************************/
-/*****************************************************************/
-/* MOD : VERSION : 4.7 : DM :  IMAG_01.TIF  devient IMAGERY.TIF  */
-/*****************************************************************/
-  sprintf(nom_fic,"%s/IMAGERY.TIF",nom_rep); 
-  retour = stat ( nom_fic , &buf_stat );
-  if ( retour == 0 )
-  { 
-       sprintf ( CAI_ERREUR , "Le fichier %s IMAGERY SPOT5TIFF existe \n" , 
-			nom_image );
-       goto ERREUR;
-  }
-  sprintf(nom_fic,"IMAGERY"); 
-  image1 = cai_ouvre_creation_tiff(nom_rep,nom_fic,nbca,
-				   nboct_pix,nbcol,nblig,label);
-  if (image1 == NULL)
-     goto ERREUR;
-/******************************************************************/
-/*   fichier LEADER : verification s'il existe pas deja           */
-/******************************************************************/
-/*****************************************************************/
-/* MOD : VERSION : 4.7 : DM : LEAD_01.DAT  devient METADATA.DIM  */
-/*****************************************************************/
-
-  sprintf(nom_fic,"%s/METADATA.DIM",nom_rep);
-  
-  retour = stat ( nom_fic , &buf_stat );
-  if ( retour == 0 )
-  { 
-       sprintf ( CAI_ERREUR ,"Le fichier %s METADATA.DIM SPOT5TIFF existe \n" , 
-							nom_image );
-       goto ERREUR;
-  }
-
-/******************************************************************/
-/*   fichier METADATA.DIM : constitution                          */
-/******************************************************************/
-   image1->NB_LIG = (*nblig);
-   image1->NB_COL = (*nbcol);
-   image1->NB_CANAUX = (*nbca);
-   image1->NBOCT_PIX = (*nboct_pix);
-   image1->TYPE_SPOT = 2;
-   icr = cai_creat_leader_spot5(image1,nom_fic);
-   if (icr !=CAI_OK)
-   {
-       sprintf ( CAI_ERREUR , "Erreur creation METADATA.DIM SPOT5TIFF" );
-       goto ERREUR;
-
-   }
-
-/*****************************************************************************/
-/* MOD : VERSION : 5.0 : DM : Remplacer les appels systemes pour renommer un */
-/*                            fichier par la commande C rename               */
-/*****************************************************************************/
-    /* Sortie sans erreur : */
-/* renommer l'image en majuscule */
-     sprintf(nom_fic,"%s/IMAGERY.tif",nom_rep);
-     sprintf(nom_ficM,"%s/IMAGERY.TIF",nom_rep);
-     rename(nom_fic,nom_ficM);
-
-  return(image1);
- 
-/* Sorties degradees : */
-
-ERREUR:
-/* destruction du fichier leader et de l'image */
-/* et s'il n'existe pas du repertoire */ 
-  if (image1 != NULL)
-     icr = cai_ferme_tiff (image1);
- 
-  if (Existe==0)
-  {
-     sprintf(Command,"rm -R %s",nom_rep);
-     system(Command);
-  }
-  return(NULL);
-
-}
-/* 
-  Fin de l'operation cai_ouvre_creation_spot5TIF
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_spot5BIL                                */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format spot5 BIL et de tous les fichiers qui la composent    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_IMAGE *cai_ouvre_creation_spot5BIL(repert,         */
-/*  ---------------- 		                       nom_image,nb_can,     */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            label)           */
-/*                                                                           */
-/*     repert	      (E) (char *) : repertoire	de stockage		     */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir                 */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_spot5BIL (S) (CAI_IMAGE *) :  =NULL si pb          */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-static CAI_IMAGE *cai_ouvre_creation_spot5BIL(char *repert,
-				   		char *nom_image,
-				   		int *nbca,
-				   		int *nboct_pix,
-				   		int *nbcol,
-				   		int *nblig,
-				   		char *label)
-{
-   char nom_fic[1024];	     /* nom du fichier leader    	             */
-   char nom_ficM[1024];	     /* nom du fichier leader renomme	             */
-   char nom_rep[1024],*Fic;  /* nom du repertoire image 	             */
-   CAI_OK_KO icr;            /* compte rendu d'operation                     */
-   struct stat	buf_stat;    /* structure decrivant status de fichier        */
-   CAI_IMAGE *image1;        /* descripteur image			     */
-   int Existe;		     /* Indicateur d'existence du repertoire image   */
-   int retour,cr;            /* retour de fonction stat                      */
-
-/*........................................
-   INITIALISATIONS et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-  Existe = 0;
-
-/******************************************************************/
-/*   Constitution du repertoire image s'il n'existe pas deja      */
-/******************************************************************/
-
-  nom_fic[0]='\0';
-  if ((long)strlen(repert)!= 0)
-  {
-      sprintf(nom_rep,"%s/%s",repert,nom_image);     
-  }
-  else
-  {
-      sprintf(nom_rep,"%s",nom_image);
-  }
-
-  retour = stat ( nom_rep , &buf_stat );
-    
-  /* si le repertoire image n'existe pas, le creer*/  
-  if ( retour != 0 )
-  {  
-      cr = mkdir (nom_rep,0775);
-      if (cr !=0)
-      {
-          sprintf ( CAI_ERREUR , 
-		"probleme a la creation du repertoire image %s SPOT5BIL \n" ,
-		 nom_image );
-           goto ERREUR;
-      }
-  }
-  else
-	Existe = 1;
-
-/******************************************************************/
-/*   Constitution du nom du fichier IMAGERY et verification qu'il */
-/*                    n'existe pas deja	                          */				/******************************************************************/
-/****************************************************************/
-/* MOD : VERSION : 4.7 : DM :  IMAG_XX.bil  devient IMAGERY.BIL */
-/****************************************************************/
-  sprintf(nom_fic,"%s/IMAGERY.BIL",nom_rep); 
-  retour = stat ( nom_fic , &buf_stat );
-  if ( retour == 0 )
-  { 
-       sprintf ( CAI_ERREUR , "Le fichier %s IMAGERY SPOT5BIL existe \n" , 
-			nom_image );
-       goto ERREUR;
-  }
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : FA : Correction sprintf(nom_fic,"IMAGERY") au lieu  */
-/*                                de sprintf(nom_fic,"IMAGERY",nom_rep)      */
-/*****************************************************************************/
-  sprintf(nom_fic,"IMAGERY");
-  image1 = cai_ouvre_creation_bil(nom_rep,nom_fic,nbca,
-				   nboct_pix,nbcol,nblig,label);
-  if (image1 == NULL)
-     goto ERREUR;
-  else
-  {
-/* destruction du fichier .bil_hd qui n'a aucune utilite pour Spot5 */
-      sprintf(nom_fic,"%s/IMAGERY.bil_hd",nom_rep);
-      unlink(nom_fic);
-   }
-/******************************************************************/
-/*   fichier LEADER : verification s'il existe pas deja           */
-/******************************************************************/
-/*****************************************************************/
-/* MOD : VERSION : 4.7 : DM :  LEAD_01.DAT  devient METADATA.DIM */
-/*****************************************************************/
-  sprintf(nom_fic,"%s/METADATA.DIM",nom_rep);
-  
-  retour = stat ( nom_fic , &buf_stat );
-  if ( retour == 0 )
-  { 
-       sprintf ( CAI_ERREUR , "Le fichier %s METADATA.DIM SPOT5BIL existe \n" , 
-							nom_image );
-       goto ERREUR;
-  }
-
-/******************************************************************/
-/*   fichier METADATA.DIM : constitution                          */
-/******************************************************************/
-   image1->NB_LIG = (*nblig);
-   image1->NB_COL = (*nbcol);
-   image1->NB_CANAUX = (*nbca);
-   image1->NBOCT_PIX = (*nboct_pix);
-   image1->TYPE_SPOT = 3;
-   icr = cai_creat_leader_spot5(image1,nom_fic);
-   if (icr !=CAI_OK)
-   {
-       sprintf ( CAI_ERREUR , "Erreur creation METADATA.DIM SPOT5BIL" );
-       goto ERREUR;
-
-   }
-
-/*****************************************************************************/
-/* MOD : VERSION : 5.0 : DM : Remplacer les appels systemes pour renommer un */
-/*                            fichier par la commande C rename               */
-/*****************************************************************************/
-    /* Sortie sans erreur : */
-/* renommer l'image en majuscule */
-     sprintf(nom_fic,"%s/IMAGERY.bil",nom_rep);
-     sprintf(nom_ficM,"%s/IMAGERY.BIL",nom_rep);
-     rename(nom_fic,nom_ficM);
-
-     return(image1);
- 
-/* Sorties degradees : */
-
-ERREUR:
-/* destruction du fichier leader et de l'image */
-/* et s'il n'existe pas du repertoire */ 
-  if (image1 != NULL)
-     icr = cai_ferme_bil (image1);
- 
-  if (Existe==0)
-  {
-     sprintf(Command,"rm -R %s",nom_rep);
-     system(Command);
-  }
-  return(NULL);
-
-}
-/* 
-  Fin de l'operation cai_ouvre_creation_spot5BIL
-*/
-/******************************************************************************/
-/*                                                                            */
-/*OPERATION  : cai_creat_leader_spot5                                         */
-/*                                                                            */
-/*ROLE : Cette operation genère un fichier XML de donnees auxiliaires SPOT5   */
-/*       a partir des donnees cai_image passees en parametre                  */
-/*                                                                            */
-/*CONTEXTE D'APPEL :                                                          */
-/*                                                                            */
-/*RETOUR : CAI_OK si tout va bien , CAI_KO sinon                              */
-/*                                                                            */
-/******************************************************************************/
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : FA : erreur d'orthographe sur LATITUDE_ARGUMENT     */
-/*			      et Look_Angles				     */
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : FA : erreur initialisation BYTEORDER en creation    */
-/*****************************************************************************/
-
-CAI_OK_KO cai_creat_leader_spot5 ( CAI_IMAGE *desc_im  , char *nom_fich )
- {
-  /* Code retour */
-  CAI_OK_KO cr;
-  /* Fichier XML a generer */
-  FILE *des;
-  /* Nombre de lignes de l'image */
-  int nblig;
-  /* Nombre de colonnes */
-  int nbcol;
-  /* Nombre de canaux */
-  int nbcan;
-  /* Nombre d'octets par pixel */
-  int nboct;
-  /* type de SPOT ( TIFF ou BIL ) */
-  int typeimg;
-  int type;
-  
-  int i;
-  
-  char valeur[200];
- 
-  /* affectation des variables */
-  
-  nblig = desc_im->NB_LIG;
-  nbcol = desc_im->NB_COL;
-  nbcan = desc_im->NB_CANAUX;
-  nboct = desc_im->NBOCT_PIX;
-  typeimg = desc_im->TYPE_SPOT;
-
-  /********************************************************/
-  /*         OUVERTURE DU FICHIER XML PRODUIT             */
-  /********************************************************/
-
-  if ( ( des = fopen ( nom_fich , "wb" ) ) == NULL )
-    {
-    sprintf ( CAI_ERREUR , "Impossible de creer le fichier XML %s" , nom_fich );
-    goto ERREUR;
-    }
-
-  /********************************************************/
-  /*      ECRITURE DES DONNEES XML DANS LE FICHIER        */
-  /********************************************************/
-
-  /* Entete du document XML */
-
-  cr = cai_WriteEnteteXML ( des );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture entete XML" );
-    goto ERREUR;
-    }
-  
-  /* Element Dimap_Document */
- 
-  cr = cai_WriteOpenTagXML ( des , "Dimap_Document" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Dimap_Document" );
-    goto ERREUR;
-    }
-
-  /* Sous element Metadata_Id */
-  
-  cr = cai_WriteOpenTagXML ( des , "Metadata_Id" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Metadata_Id" );
-    goto ERREUR;
-    }
-
-  /* sous element METADATA_FORMAT */
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Version DIMAP passe de 2.0 à 2.9               */
-/*****************************************************************************/
-  type=0;
-  cr = cai_WriteElementXMLWithAttribute ( des , "METADATA_FORMAT" , "DIMAP" ,
-                                          "version" , "2.9",type );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element METADATA_FORMAT" );
-    goto ERREUR;
-    }
-
-  /* sous element METADATA_PROFILE */
-
-  cr = cai_WriteElementXML ( des , "METADATA_PROFILE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element METADATA_PROFILE" );
-    goto ERREUR;
-    }
-  
- /* Fermeture de l'element Metadata_Id */
-
-  cr = cai_WriteCloseTagXML ( des , "Metadata_Id" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Metadata_Id" );
-    goto ERREUR;
-    }
-  
- /* Sous element Dataset_Id */
-  
-  cr = cai_WriteOpenTagXML ( des , "Dataset_Id" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Dataset_Id" );
-    goto ERREUR;
-    }
-
-  /* sous element DATASET_NAME */
-  
-  cr = cai_WriteElementXML ( des , "DATASET_NAME" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element DATASET_NAME" );
-    goto ERREUR;
-    }
-
-  /* sous element COPYRIGHT */
-
-  cr = cai_WriteElementXML ( des , "COPYRIGHT" , "COPYRIGHT CNES" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element COPYRIGHT" );
-    goto ERREUR;
-    }
-
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'attribut href=""                   */
-/****************************************************************************/
-
-  /* sous element DATASET_TN_PATH */
-  type=1;
-  cr = cai_WriteElementXMLWithAttribute ( des , "DATASET_TN_PATH" , "" , "href" , "" ,type);
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element DATASET_TN_PATH" );
-    goto ERREUR;
-    }
-
-  /* sous element DATASET_TN_FORMAT */
-
-  cr = cai_WriteElementXML ( des , "DATASET_TN_FORMAT" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element DATASET_TN_FORMAT" );
-    goto ERREUR;
-    }
-
-  /* sous element DATASET_QL_PATH */
-  type=1;
-  cr = cai_WriteElementXMLWithAttribute ( des , "DATASET_QL_PATH" , "" , "href" , "" ,type);
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element DATASET_QL_PATH" );
-    goto ERREUR;
-    }
-
-  /* sous element DATASET_QL_FORMAT */
-
-  cr = cai_WriteElementXML ( des , "DATASET_QL_FORMAT" , "" );
-
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element DATASET_QL_FORMAT" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Dataset_Id */
-
-  cr = cai_WriteCloseTagXML ( des , "Dataset_Id" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Dataset_Id" );
-    goto ERREUR;
-    }
-
-  /* sous element Dataset_Sources */
-  
-  cr = cai_WriteOpenTagXML ( des , "Dataset_Sources" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Dataset_Sources" );
-    goto ERREUR;
-    }
-
-  /* sous element Source_Information */
-  
-  cr = cai_WriteOpenTagXML ( des , "Source_Information" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Source_Information" );
-    goto ERREUR;
-    }
-
-  /* sous element SOURCE_TYPE */
-  
-  cr = cai_WriteElementXML ( des , "SOURCE_TYPE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SOURCE_TYPE" );
-    goto ERREUR;
-    }
-
-  /* sous element SOURCE_ID */
-  
-  cr = cai_WriteElementXML ( des , "SOURCE_ID" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SOURCE_ID" );
-    goto ERREUR;
-    }
-
-  /* sous element SOURCE_DESCRIPTION */
-  
-  cr = cai_WriteElementXML ( des , "SOURCE_DESCRIPTION" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SOURCE_DESCRIPTION" );
-    goto ERREUR;
-    }
-
-  /* sous element Scene_Source */
-  
-  cr = cai_WriteOpenTagXML ( des , "Scene_Source" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Scene_Source" );
-    goto ERREUR;
-    }
-
-  /* sous element IMAGING_DATE */
-  
-  cr = cai_WriteElementXML ( des , "IMAGING_DATE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element IMAGING_DATE" );
-    goto ERREUR;
-    }
-
-  /* sous element IMAGING_TIME */
-  
-  cr = cai_WriteElementXML ( des , "IMAGING_TIME" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element IMAGING_TIME" );
-    goto ERREUR;
-    }
-
-  /* sous element MISSION */
-  
-  cr = cai_WriteElementXML ( des , "MISSION" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element MISSION" );
-    goto ERREUR;
-    }
-
-  /* sous element MISSION_INDEX */
-  
-  cr = cai_WriteElementXML ( des , "MISSION_INDEX" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element MISSION_INDEX" );
-    goto ERREUR;
-    }
-
-  /* sous element INSTRUMENT */
-  
-  cr = cai_WriteElementXML ( des , "INSTRUMENT" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element INSTRUMENT" );
-    goto ERREUR;
-    }
-
-  /* sous element INSTRUMENT_INDEX */
-  
-  cr = cai_WriteElementXML ( des , "INSTRUMENT_INDEX" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element INSTRUMENT_INDEX" );
-    goto ERREUR;
-    }
-
-  /* sous element SENSOR_CODE */
-  
-  cr = cai_WriteElementXML ( des , "SENSOR_CODE" , "" );
-
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SENSOR_CODE" );
-    goto ERREUR;
-    }
-
-  /* sous element INCIDENCE_ANGLE */
-  
-  cr = cai_WriteElementXML ( des , "INCIDENCE_ANGLE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element INCIDENCE_ANGLE" );
-    goto ERREUR;
-    }
-
-  /* sous element SUN_AZIMUT */
-  
-  cr = cai_WriteElementXML ( des , "SUN_AZIMUTH" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SUN_AZIMUT" );
-    goto ERREUR;
-    }
-
-  /* sous element SUN_ELEVATION */
-  
-  cr = cai_WriteElementXML ( des , "SUN_ELEVATION" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SUN_ELEVATION" );
-    goto ERREUR;
-    }
-
-  /* sous element Imaging_Parameters */
-  
-  cr = cai_WriteOpenTagXML ( des , "Imaging_Parameters" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Imaging_Parameters" );
-    goto ERREUR;
-    }
-
-  /* sous element REVOLUTION_NUMBER */
-  
-  cr = cai_WriteElementXML ( des , "REVOLUTION_NUMBER" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element REVOLUTION_NUMBER" );
-    goto ERREUR;
-    }
-
-  /* sous element COMPRESSION_MODE */
-  
-  cr = cai_WriteElementXML ( des , "COMPRESSION_MODE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element COMPRESSION_MODE" );
-    goto ERREUR;
-    }
-
-  /* sous element DIRECT_PLAYBACK_INDICATOR */
-  
-  cr = cai_WriteElementXML ( des , "DIRECT_PLAYBACK_INDICATOR" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element DIRECT_PLAYBACK_INDICATOR" );
-    goto ERREUR;
-    }
-
-  /* sous element REFOCUSING_STEP_NUM */
-  
-  cr = cai_WriteElementXML ( des , "REFOCUSING_STEP_NUM" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element REFOCUSING_STEP_NUM" );
-    goto ERREUR;
-    }
-
-  /* sous element SWATH_MODE */
-  
-  cr = cai_WriteElementXML ( des , "SWATH_MODE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SWATH_MODE" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Imaging_Parameters */
-
-  cr = cai_WriteCloseTagXML ( des , "Imaging_Parameters" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Imaging_Parameters" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Scene_Source */
-
-  cr = cai_WriteCloseTagXML ( des , "Scene_Source" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Scene_Source" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Source_Information */
-
-  cr = cai_WriteCloseTagXML ( des , "Source_Information" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Source_Information" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Dataset_Sources */
-
-  cr = cai_WriteCloseTagXML ( des , "Dataset_Sources" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Dataset_Sources" );
-    goto ERREUR;
-    }
-
-  /* sous element Coordinate_Reference_System */
-
-  cr = cai_WriteOpenTagXML ( des , "Coordinate_Reference_System" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Coordinate_Reference_System" );
-    goto ERREUR;
-    }
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'attribut version="5.2"              */
-/*****************************************************************************/
-
-  /* sous element GEO_TABLES */
-    type=0;
-  cr = cai_WriteElementXMLWithAttribute ( des , "GEO_TABLES" , "" , "version" , "5.2" ,type);
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element GEO_TABLES" );
-    goto ERREUR;
-    }
-
-  /* sous element Horizontal_CS */
-
-  cr = cai_WriteOpenTagXML ( des , "Horizontal_CS" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Horizontal_CS" );
-    goto ERREUR;
-    }
-
-  /* sous element HORIZONTAL_CS_TYPE */
-  
-  cr = cai_WriteElementXML ( des , "HORIZONTAL_CS_TYPE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element HORIZONTAL_CS_TYPE" );
-    goto ERREUR;
-    }
-
-  /* sous element HORIZONTAL_CS_CODE */
-  
-  cr = cai_WriteElementXML ( des , "HORIZONTAL_CS_CODE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element HORIZONTAL_CS_CODE" );
-    goto ERREUR;
-    }
-
-  /* sous element HORIZONTAL_CS_NAME */
-  
-  cr = cai_WriteElementXML ( des , "HORIZONTAL_CS_NAME" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element HORIZONTAL_CS_NAME" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Horizontal_CS */
-
-  cr = cai_WriteCloseTagXML ( des , "Horizontal_CS" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Horizontal_CS" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Coordinate_Reference_System */
-
-  cr = cai_WriteCloseTagXML ( des , "Coordinate_Reference_System" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Coordinate_Reference_System" );
-    goto ERREUR;
-    }
-
-  /* sous element Raster_CS */
-
-  cr = cai_WriteOpenTagXML ( des , "Raster_CS" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Raster_CS" );
-    goto ERREUR;
-    }
-
-  /* sous element RASTER_CS_TYPE */
-
-  cr = cai_WriteElementXML ( des , "RASTER_CS_TYPE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element RASTER_CS_TYPE" );
-    goto ERREUR;
-    }
-
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element PIXEL_ORIGIN               */
-/****************************************************************************/
-  
-  /* sous element PIXEL_ORIGIN */
-
-  cr = cai_WriteElementXML ( des , "PIXEL_ORIGIN" , "1" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element PIXEL_ORIGIN" );
-    goto ERREUR;
-    }
-  
-  /* Fermeture de l'element Raster_CS */
-
-  cr = cai_WriteCloseTagXML ( des , "Raster_CS" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Raster_CS" );
-    goto ERREUR;
-    }
-
-  /* sous element Geoposition */
-  
-  cr = cai_WriteOpenTagXML ( des , "Geoposition" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Geoposition" );
-    goto ERREUR;
-    }
-
-  /* sous element Geoposition_Points */
-  
-  cr = cai_WriteOpenTagXML ( des , "Geoposition_Points" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Geoposition_Points" );
-    goto ERREUR;
-    }
-
-  /* sous element Tie_Point */
-  
-  cr = cai_WriteOpenTagXML ( des , "Tie_Point" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Tie_Point" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_CRS_X */
-
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_X" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element TIE_POINTS_CRS_X" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_CRS_Y */
-
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_Y" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element TIE_POINTS_CRS_Y" );
-    goto ERREUR;
-    }
-
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element TIE_POINTS_CRS_Z           */
-/****************************************************************************/
-
-  /* sous element TIE_POINTS_CRS_Z */
-
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_Z" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_CRS_Z" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_DATA_X */
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_DATA_X" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element TIE_POINTS_DATA_X" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_DATA_Y */
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_DATA_Y" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element TIE_POINTS_DATA_Y" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Tie_Point */
-
-  cr = cai_WriteCloseTagXML ( des , "Tie_Point" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Tie_Point" );
-    goto ERREUR;
-    }
-
-  /* sous element Tie_Point */
-  
-  cr = cai_WriteOpenTagXML ( des , "Tie_Point" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Tie_Point" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_CRS_X */
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_X" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element TIE_POINTS_CRS_X" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_CRS_Y */
-
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_Y" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element TIE_POINTS_CRS_Y" );
-    goto ERREUR;
-    }
-
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element TIE_POINTS_CRS_Z           */
-/****************************************************************************/
-
-  /* sous element TIE_POINTS_CRS_Z */
-
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_Z" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_CRS_Z" );
-    goto ERREUR;
-    }
-
-
-  /* sous element TIE_POINTS_DATA_X */
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_DATA_X" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element TIE_POINTS_DATA_X" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_DATA_Y */
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_DATA_Y" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element TIE_POINTS_DATA_Y" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Tie_Point */
-
-  cr = cai_WriteCloseTagXML ( des , "Tie_Point" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Tie_Point" );
-    goto ERREUR;
-    }
-
-  /* sous element Tie_Point */
-  
-  cr = cai_WriteOpenTagXML ( des , "Tie_Point" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Tie_Point" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_CRS_X */
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_X" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element TIE_POINTS_CRS_X" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_CRS_Y */
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_Y" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element TIE_POINTS_CRS_Y" );
-    goto ERREUR;
-    }
-    
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element TIE_POINTS_CRS_Z           */
-/****************************************************************************/
-
-  /* sous element TIE_POINTS_CRS_Z */
-
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_Z" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_CRS_Z" );
-    goto ERREUR;
-    }
-
-
-  /* sous element TIE_POINTS_DATA_X */
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_DATA_X" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element TIE_POINTS_DATA_X" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_DATA_Y */
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_DATA_Y" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element TIE_POINTS_DATA_Y" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Tie_Point */
-
-  cr = cai_WriteCloseTagXML ( des , "Tie_Point" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Tie_Point" );
-    goto ERREUR;
-    }
-
-  /* sous element Tie_Point */
-  
-  cr = cai_WriteOpenTagXML ( des , "Tie_Point" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Tie_Point" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_CRS_X */
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_X" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element TIE_POINTS_CRS_X" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_CRS_Y */
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_Y" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element TIE_POINTS_CRS_Y" );
-    goto ERREUR;
-    }
-
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element TIE_POINTS_CRS_Z           */
-/****************************************************************************/
-
-  /* sous element TIE_POINTS_CRS_Z */
-
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_CRS_Z" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element TIE_POINTS_CRS_Z" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_DATA_X */
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_DATA_X" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element TIE_POINTS_DATA_X" );
-    goto ERREUR;
-    }
-
-  /* sous element TIE_POINTS_DATA_Y */
-  
-  cr = cai_WriteElementXML ( des , "TIE_POINTS_DATA_Y" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element TIE_POINTS_DATA_Y" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Tie_Point */
-
-  cr = cai_WriteCloseTagXML ( des , "Tie_Point" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Tie_Point" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Geoposition_Points */
-
-  cr = cai_WriteCloseTagXML ( des , "Geoposition_Points" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Geoposition_Points" );
-    goto ERREUR;
-    }
-    
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Deplacement de Simplified_Location_Model       */
-/*****************************************************************************/
-
-  /* sous element Simplified_Location_Model */
-  
-  cr = cai_WriteOpenTagXML ( des , "Simplified_Location_Model" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Simplified_Location_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element Direct_Location_Model */
-  
-  cr = cai_WriteOpenTagXML ( des , "Direct_Location_Model" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Direct_Location_Model" );
-    goto ERREUR;
-    }
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element lc_List                     */
-/*****************************************************************************/
-
-  /* sous element lc_List */
-
-  cr = cai_WriteOpenTagXML ( des , "lc_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc_List" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element lc_List */
-
-  cr = cai_WriteCloseTagXML ( des , "lc_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc_List" );
-    goto ERREUR;
-    }
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element pc_List                     */
-/*****************************************************************************/
-
-  /* sous element pc_List */
-
-  cr = cai_WriteOpenTagXML ( des , "pc_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc_List" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element pc_List */
-
-  cr = cai_WriteCloseTagXML ( des , "pc_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc_List" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Direct_Location_Model */
-
-  cr = cai_WriteCloseTagXML ( des , "Direct_Location_Model" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Direct_Location_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element Reverse_Location_Model */
-  
-  cr = cai_WriteOpenTagXML ( des , "Reverse_Location_Model" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Reverse_Location_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element lc_List */
-
-  cr = cai_WriteOpenTagXML ( des , "lc_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc_List" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc" );
-    goto ERREUR;
-    }
-
-  /* sous element lc */
-  
-  cr = cai_WriteElementXML ( des , "lc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element lc_List */
-
-  cr = cai_WriteCloseTagXML ( des , "lc_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element lc_List" );
-    goto ERREUR;
-    }
-
-  /* sous element pc_List */
-
-  cr = cai_WriteOpenTagXML ( des , "pc_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc_List" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc" );
-    goto ERREUR;
-    }
-
-  /* sous element pc */
-  
-  cr = cai_WriteElementXML ( des , "pc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element pc_List */
-
-  cr = cai_WriteCloseTagXML ( des , "pc_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element pc_List" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Reverse_Location_Model */
-
-  cr = cai_WriteCloseTagXML ( des , "Reverse_Location_Model" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Reverse_Location_Model" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Simplified_Location_Model */
-
-  cr = cai_WriteCloseTagXML ( des , "Simplified_Location_Model" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Simplified_Location_Model" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Geoposition */
-
-  cr = cai_WriteCloseTagXML ( des , "Geoposition" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Geoposition" );
-    goto ERREUR;
-    }
-
-  /* sous element Production */
-  
-  cr = cai_WriteOpenTagXML ( des , "Production" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Production" );
-    goto ERREUR;
-    }
-
-  /* sous element DATASET_PRODUCER_NAME */
-  
-  cr = cai_WriteElementXML ( des , "DATASET_PRODUCER_NAME" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element DATASET_PRODUCER_NAME" );
-    goto ERREUR;
-    }
-
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout attribut href="http://www.spotimage.fr" */
-/****************************************************************************/
-    
-  /* sous element DATASET_PRODUCER_URL */
-  type=1;
-  cr = cai_WriteElementXMLWithAttribute ( des , "DATASET_PRODUCER_URL" , "" ,
-                                   "href" , "http://www.spotimage.fr" ,type);
- 
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element DATASET_PRODUCER_URL" );
-    goto ERREUR;
-    }
-
-  /* sous element DATASET_PRODUCTION_DATE */
-  
-  cr = cai_WriteElementXML ( des , "DATASET_PRODUCTION_DATE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element DATASET_PRODUCTION_DATE" );
-    goto ERREUR;
-    }
-
-  /* sous element PRODUCT_TYPE */
-
-  cr = cai_WriteElementXML ( des , "PRODUCT_TYPE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element PRODUCT_TYPE" );
-    goto ERREUR;
-    }
-
-  /* sous element PRODUCT_INFO */
-
-  cr = cai_WriteElementXML ( des , "PRODUCT_INFO" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element PRODUCT_INFO" );
-    goto ERREUR;
-    }
-
-  /* sous element Production_Facility */
-  
-  cr = cai_WriteOpenTagXML ( des , "Production_Facility" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Production_Facility" );
-    goto ERREUR;
-    }
-
-  /* sous element SOFTWARE_NAME */
-
-  cr = cai_WriteElementXML ( des , "SOFTWARE_NAME" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SOFTWARE_NAME" );
-    goto ERREUR;
-    }
-
-  /* sous element SOFTWARE_VERSION */
-  
-  cr = cai_WriteElementXML ( des , "SOFTWARE_VERSION" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SOFTWARE_VERSION" );
-    goto ERREUR;
-    }
-
-  /* sous element PROCESSING_CENTER */
-  
-  cr = cai_WriteElementXML ( des , "PROCESSING_CENTER" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element PROCESSING_CENTER" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Production_Facility */
-
-  cr = cai_WriteCloseTagXML ( des , "Production_Facility" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Production_Facility" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Production */
-
-  cr = cai_WriteCloseTagXML ( des , "Production" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Production" );
-    goto ERREUR;
-    }
-
-  /* sous element Raster_Dimensions */
-  
-  cr = cai_WriteOpenTagXML ( des , "Raster_Dimensions" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Raster_Dimension" );
-    goto ERREUR;
-    }
-
-  /* sous element NCOLS */
-  
-  sprintf ( valeur , "%d" , nbcol );
-  cr = cai_WriteElementXML ( des , "NCOLS" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element NCOLS" );
-    goto ERREUR;
-    }
-
-  /* sous element NROWS */
-  
-  sprintf ( valeur , "%d" , nblig );
-  cr = cai_WriteElementXML ( des , "NROWS" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element NROWS" );
-    goto ERREUR;
-    }
-
-  /* sous element NBANDS */
-  
-  sprintf ( valeur , "%d" , nbcan );
-  cr = cai_WriteElementXML ( des , "NBANDS" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element NBANDS" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Raster_Dimensions */
-
-  cr = cai_WriteCloseTagXML ( des , "Raster_Dimensions" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Raster_Dimensions" );
-    goto ERREUR;
-    }
-
-  /* sous element Raster_Encoding */
-  
-  cr = cai_WriteOpenTagXML ( des , "Raster_Encoding" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Raster_Encoding" );
-    goto ERREUR;
-    }
-
-  /* sous element NBITS */
-  
-  sprintf ( valeur , "%d" , nboct*8 );
-  cr = cai_WriteElementXML ( des , "NBITS" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element NBITS" );
-    goto ERREUR;
-    }
-
-/****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element DATA_TYPE                  */
-/****************************************************************************/
-
-  /* sous element DATA_TYPE */
-
-  cr = cai_WriteElementXML ( des , "DATA_TYPE" , "UNSIGNED" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element DATA_TYPE" );
-    goto ERREUR;
-    }
-
-  /* sous element BYTEORDER */
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : FA : erreur initialisation BYTEORDER en creation    */
-/*****************************************************************************/
-
-  /* Initialisation par defaut */
-  if (strcmp(type_machine,"BE")==0)
-     cr = cai_WriteElementXML ( des , "BYTEORDER" , "M" );
-  else
-     cr = cai_WriteElementXML ( des , "BYTEORDER" , "I" );
-
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element BYTEORDER" );
-    goto ERREUR;
-    }
-
-  /* sous element BANDS_LAYOUT */
-  
-  if ( typeimg == 3 )
-    sprintf ( valeur , "BIL" );
-  else
-    sprintf ( valeur , "" );  
-  cr = cai_WriteElementXML ( des , "BANDS_LAYOUT" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element BANDS_LAYOUT" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Raster_Encoding */
-
-  cr = cai_WriteCloseTagXML ( des , "Raster_Encoding" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Raster_Encoding" );
-    goto ERREUR;
-    }
-
-  /* sous element Data_Processing */
-  
-  cr = cai_WriteOpenTagXML ( des , "Data_Processing" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Data_Processing" );
-    goto ERREUR;
-    }
-
-  /* sous element PROCESSING_LEVEL */
-  
-  cr = cai_WriteElementXML ( des , "PROCESSING_LEVEL" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element PROCESSING_LEVEL" );
-    goto ERREUR;
-    }
-
-  /* sous element GEOMETRIC_PROCESSING */
-
-  cr = cai_WriteElementXML ( des , "GEOMETRIC_PROCESSING" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element GEOMETRIC_PROCESSING" );
-    goto ERREUR;
-    }
-  
-  /* sous element Processing_Options */
-  
-  cr = cai_WriteOpenTagXML ( des , "Processing_Options" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Processing_Options" );
-    goto ERREUR;
-    }
-
-  /* sous element Dynamic_Stretch */
-  
-  cr = cai_WriteOpenTagXML ( des , "Dynamic_Stretch" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Dynamic_Stretch" );
-    goto ERREUR;
-    }
-
-  for ( i = 0 ; i < nbcan ; i++ )
-  {
-  /* sous element Thresholds */
-  
-  cr = cai_WriteOpenTagXML ( des , "Thresholds" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Thresholds" );
-    goto ERREUR;
-    }
-
-  /* sous element BAND_INDEX */
-  
-  sprintf ( valeur , "%d" , (i+1) );
-  cr = cai_WriteElementXML ( des , "BAND_INDEX" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element BAND_INDEX" );
-    goto ERREUR;
-    }
-
-  /* sous element LOW_THRESHOLD */
-  
-  cr = cai_WriteElementXML ( des , "LOW_THRESHOLD" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element LOW_THRESHOLD" );
-    goto ERREUR;
-    }
-
-  /* sous element HIGH_THRESHOLD */
-  
-  cr = cai_WriteElementXML ( des , "HIGH_THRESHOLD" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element HIGH_THRESHOLD" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Thresholds */
-
-  cr = cai_WriteCloseTagXML ( des , "Thresholds" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Thresholds" );
-    goto ERREUR;
-    }
-  }
- /* Fermeture de l'element Dynamic_Stretch */
-
-  cr = cai_WriteCloseTagXML ( des , "Dynamic_Stretch" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Dynamic_Stretch" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Processing_Options */
-
-  cr = cai_WriteCloseTagXML ( des , "Processing_Options" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Processing_Options" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Data_Processing */
-
-  cr = cai_WriteCloseTagXML ( des , "Data_Processing" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Data_Processing" );
-    goto ERREUR;
-    }
-
-  /* sous element Data_Access */
-  
-  cr = cai_WriteOpenTagXML ( des , "Data_Access" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Data_Access" );
-    goto ERREUR;
-    }
-
-  /* sous element DATA_FILE_ORGANISATION */
-  
-  if ( typeimg == 3 )
-    sprintf ( valeur , "BAND_COMPOSITE" );
-  else
-    sprintf ( valeur , "" );  
-
-  cr = cai_WriteElementXML ( des , "DATA_FILE_ORGANISATION" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element DATA_FILE_ORGANISATION" );
-    goto ERREUR;
-    }
-
-  /* sous element DATA_FILE_FORMAT */
-  
-  if ( typeimg == 3 )
-    sprintf ( valeur , "RAW" );
-  else
-    sprintf ( valeur , "TIFF" );
-    
-  cr = cai_WriteElementXML ( des , "DATA_FILE_FORMAT" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element DATA_FILE_FORMAT" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Data_Access */
-
-  cr = cai_WriteCloseTagXML ( des , "Data_Access" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Data_Access" );
-    goto ERREUR;
-    }
-
-  /* sous element Image_Display */
-  
-  cr = cai_WriteOpenTagXML ( des , "Image_Display" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Image_Display" );
-    goto ERREUR;
-    }
-
-  /* sous element Band_Display_Order */
-  
-  cr = cai_WriteOpenTagXML ( des , "Band_Display_Order" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Band_Display_Order" );
-    goto ERREUR;
-    }
-
-    /* sous element RED_CHANNEL */
- 
-    cr = cai_WriteElementXML ( des , "RED_CHANNEL" , "" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture Element RED_CHANNEL" );
-      goto ERREUR;
-      }    
-    /* sous element GREEN_CHANNEL */
- 
-    cr = cai_WriteElementXML ( des , "GREEN_CHANNEL" , "" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture Element GREEN_CHANNEL" );
-      goto ERREUR;
-      }    
-    /* sous element BLUE_CHANNEL */
- 
-    cr = cai_WriteElementXML ( des , "BLUE_CHANNEL" , "" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture Element BLUE_CHANNEL" );
-      goto ERREUR;
-      }
-  
- /* Fermeture de l'element Band_Display_Order */
-
-  cr = cai_WriteCloseTagXML ( des , "Band_Display_Order" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Band_Display_Order" );
-    goto ERREUR;
-    }
-
-  /* sous element Special_Value */
-  
-  cr = cai_WriteOpenTagXML ( des , "Special_Value" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Special_Value" );
-    goto ERREUR;
-    }
-
-  /* sous element SPECIAL_VALUE_INDEX */
- 
-  cr = cai_WriteElementXML ( des , "SPECIAL_VALUE_INDEX" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SPECIAL_VALUE_INDEX" );
-    goto ERREUR;
-    }
-   
-  /* sous element SPECIAL_VALUE_TEXT */
- 
-  cr = cai_WriteElementXML ( des , "SPECIAL_VALUE_TEXT" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SPECIAL_VALUE_TEXT" );
-    goto ERREUR;
-    }    
-   
-  /* sous element Special_Value_Color */
-  
-  cr = cai_WriteOpenTagXML ( des , "Special_Value_Color" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Special_Value_Color" );
-    goto ERREUR;
-    }
-  
-  /* sous element RED_LEVEL */
- 
-  cr = cai_WriteElementXML ( des , "RED_LEVEL" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element RED_LEVEL" );
-    goto ERREUR;
-    }    
-  
-  /* sous element GREEN_LEVEL */
- 
-  cr = cai_WriteElementXML ( des , "GREEN_LEVEL" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element GREEN_LEVEL" );
-    goto ERREUR;
-    }    
-  
-  /* sous element BLUE_LEVEL */
- 
-  cr = cai_WriteElementXML ( des , "BLUE_LEVEL" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element BLUE_LEVEL" );
-    goto ERREUR;
-    }    
-
-   if (nbcan == 4)
-   {
-  /* sous element ALPHA_LEVEL */
- 
-      cr = cai_WriteElementXML ( des , "ALPHA_LEVEL" , "" );
-      if ( cr == CAI_KO )
-      {
-        sprintf ( CAI_ERREUR , "Erreur ecriture Element ALPHA_LEVEL" );
-        goto ERREUR;
-       }    
-   } 
-
-  /* Fermeture de l'element Special_Value_Color */
-
-  cr = cai_WriteCloseTagXML ( des , "Special_Value_Color" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Special_Value_Color" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Special_Value */
-
-  cr = cai_WriteCloseTagXML ( des , "Special_Value" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Special_Value" );
-    goto ERREUR;
-    }
-
-  /* sous element Special_Value */
-  
-  cr = cai_WriteOpenTagXML ( des , "Special_Value" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Special_Value" );
-    goto ERREUR;
-    }
-  
-  /* sous element SPECIAL_VALUE_INDEX */
- 
-  cr = cai_WriteElementXML ( des , "SPECIAL_VALUE_INDEX" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SPECIAL_VALUE_INDEX" );
-    goto ERREUR;
-    }    
-  
-  /* sous element SPECIAL_VALUE_TEXT */
- 
-  cr = cai_WriteElementXML ( des , "SPECIAL_VALUE_TEXT" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SPECIAL_VALUE_TEXT" );
-    goto ERREUR;
-    }    
-  
-  /* sous element Special_Value_Color */
-  
-  cr = cai_WriteOpenTagXML ( des , "Special_Value_Color" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Special_Value_Color" );
-    goto ERREUR;
-    }
-  
-  /* sous element RED_LEVEL */
- 
-  cr = cai_WriteElementXML ( des , "RED_LEVEL" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element RED_LEVEL" );
-    goto ERREUR;
-    }    
-  
-  /* sous element GREEN_LEVEL */
- 
-  cr = cai_WriteElementXML ( des , "GREEN_LEVEL" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element GREEN_LEVEL" );
-    goto ERREUR;
-    }    
-  
-  /* sous element BLUE_LEVEL */
- 
-  cr = cai_WriteElementXML ( des , "BLUE_LEVEL" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element BLUE_LEVEL" );
-    goto ERREUR;
-    }    
-
-   if (nbcan == 4)
-   {
-  /* sous element ALPHA_LEVEL */
- 
-      cr = cai_WriteElementXML ( des , "ALPHA_LEVEL" , "" );
-      if ( cr == CAI_KO )
-      {
-        sprintf ( CAI_ERREUR , "Erreur ecriture Element ALPHA_LEVEL" );
-        goto ERREUR;
-       }    
-   } 
-  
-  /* Fermeture de l'element Special_Value_Color */
-
-  cr = cai_WriteCloseTagXML ( des , "Special_Value_Color" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Special_Value_Color" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Special_Value */
-
-  cr = cai_WriteCloseTagXML ( des , "Special_Value" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Special_Value" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Image_Display */
-
-  cr = cai_WriteCloseTagXML ( des , "Image_Display" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Image_Display" );
-    goto ERREUR;
-    }
-
-  /* sous element Image_Interpretation */
-  
-  cr = cai_WriteOpenTagXML ( des , "Image_Interpretation" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Image_Interpretation" );
-    goto ERREUR;
-    }
-
-  for ( i = 0; i < nbcan ; i++ )
-    {
-    /* sous element Spectral_Band_Info */
-  
-    cr = cai_WriteOpenTagXML ( des , "Spectral_Band_Info" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture Element Spectral_Band_Info" );
-      goto ERREUR;
-      }
-
-  /* sous element BAND_INDEX */
-  
-  sprintf ( valeur , "%d" , (i+1) );
-  
-  cr = cai_WriteElementXML ( des , "BAND_INDEX" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element BAND_INDEX" );
-    goto ERREUR;
-    }
-
-/******************************************************************************/
-/* MOD : VERSION : 4.7 : DM : remplacement de BAND par BAND_DESCRIPTION       */
-/******************************************************************************/
-
-    /* sous element BAND_DESCRIPTION */
-
-    cr = cai_WriteElementXML ( des , "BAND_DESCRIPTION" , "" );
-    if ( cr == CAI_KO )
-      {
-      sprintf ( CAI_ERREUR , "Erreur ecriture Element BAND" );
-      goto ERREUR;
-      }
-    
-  /* sous element PHYSICAL_CALIBRATION_DATE */
-  
-  cr = cai_WriteElementXML ( des , "PHYSICAL_CALIBRATION_DATE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element PHYSICAL_CALIBRATION_DATE" );
-    goto ERREUR;
-    }
-
-  /* sous element PHYSICAL_BIAIS */
-  
-  cr = cai_WriteElementXML ( des , "PHYSICAL_BIAIS" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element PHYSICAL_BIAIS" );
-    goto ERREUR;
-    }
-
-  /* sous element PHYSICAL_GAIN */
-  
-  cr = cai_WriteElementXML ( des , "PHYSICAL_GAIN" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element PHYSICAL_GAIN" );
-    goto ERREUR;
-    }
-
-  /* sous element PHYSICAL_UNIT */
-  
-  cr = cai_WriteElementXML ( des , "PHYSICAL_UNIT" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element PHYSICAL_UNIT" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Spectral_Band_Info */
-
-  cr = cai_WriteCloseTagXML ( des , "Spectral_Band_Info" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Spectral_Band_Info" );
-    goto ERREUR;
-    }
-
-  }
-  /* Fermeture de l'element Image_Interpretation */
-
-  cr = cai_WriteCloseTagXML ( des , "Image_Interpretation" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Image_Interpretation" );
-    goto ERREUR;
-    }
-
-  /* sous element Data_Strip */
-  
-  cr = cai_WriteOpenTagXML ( des , "Data_Strip" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Data_Strip" );
-    goto ERREUR;
-    }
-
-  /* sous element Satellite_Time */
-  
-  cr = cai_WriteOpenTagXML ( des , "Satellite_Time" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Satellite_Time" );
-    goto ERREUR;
-    }
-
-  /* sous element UT_DATE */
-  
-  cr = cai_WriteElementXML ( des , "UT_DATE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element UT_DATE" );
-    goto ERREUR;
-    }
-
-  /* sous element CLOCK_VALUE */
-  
-  cr = cai_WriteElementXML ( des , "CLOCK_VALUE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element CLOCK_VALUE" );
-    goto ERREUR;
-    }
-
-  /* sous element CLOCK_PERIOD */
-  
-  cr = cai_WriteElementXML ( des , "CLOCK_PERIOD" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element CLOCK_PERIOD" );
-    goto ERREUR;
-    }
-
-  /* sous element BOARD_TIME */
-  
-  cr = cai_WriteElementXML ( des , "BOARD_TIME" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element BOARD_TIME" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Satellite_Time */
-
-  cr = cai_WriteCloseTagXML ( des , "Satellite_Time" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Satellite_Time" );
-    goto ERREUR;
-    }
-
-  /* sous element Ephemeris */
-  
-  cr = cai_WriteOpenTagXML ( des , "Ephemeris" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Ephemeris" );
-    goto ERREUR;
-    }
-
-  /* sous element SATELLITE_ALTITUDE */
-  
-  cr = cai_WriteElementXML ( des , "SATELLITE_ALTITUDE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SATELLITE_ALTITUDE" );
-    goto ERREUR;
-    }
-
-  /* sous element NADIR_LAT */
-  
-  cr = cai_WriteElementXML ( des , "NADIR_LAT" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element NADIR_LAT" );
-    goto ERREUR;
-    }
-
-  /* sous element NADIR_LON */
-  
-  cr = cai_WriteElementXML ( des , "NADIR_LON" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element NADIR_LON" );
-    goto ERREUR;
-    }
-
-  /* sous element Points */
-  
-  cr = cai_WriteOpenTagXML ( des , "Points" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Points" );
-    goto ERREUR;
-    }
-
-  for ( i = 0; i < 8 ; i++ )
-  {
-  /* sous element Point */
-  
-  cr = cai_WriteOpenTagXML ( des , "Point" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Point" );
-    goto ERREUR;
-    }
-
-  /* sous element Location */
-  
-  cr = cai_WriteOpenTagXML ( des , "Location" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Location" );
-    goto ERREUR;
-    }
-
-  /* sous element X */
-  
-  cr = cai_WriteElementXML ( des , "X" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element X" );
-    goto ERREUR;
-    }
-
-  /* sous element Y */
-  
-  cr = cai_WriteElementXML ( des , "Y" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Y" );
-    goto ERREUR;
-    }
-
-  /* sous element Z */
-  
-  cr = cai_WriteElementXML ( des , "Z" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Z" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Location */
-
-  cr = cai_WriteCloseTagXML ( des , "Location" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Location" );
-    goto ERREUR;
-    }
-
-  /* sous element Velocity */
-  
-  cr = cai_WriteOpenTagXML ( des , "Velocity" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Velocity" );
-    goto ERREUR;
-    }
-
-  /* sous element X */
-  
-  cr = cai_WriteElementXML ( des , "X" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element X" );
-    goto ERREUR;
-    }
-
-  /* sous element Y */
-  
-  cr = cai_WriteElementXML ( des , "Y" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Y" );
-    goto ERREUR;
-    }
-
-  /* sous element Z */
-  
-  cr = cai_WriteElementXML ( des , "Z" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Z" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Velocity */
-
-  cr = cai_WriteCloseTagXML ( des , "Velocity" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Velocity" );
-    goto ERREUR;
-    }
-
-  /* sous element TIME */
-  
-  cr = cai_WriteElementXML ( des , "TIME" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element TIME" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Point */
-
-  cr = cai_WriteCloseTagXML ( des , "Point" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Point" );
-    goto ERREUR;
-    }
-  }
-  
-  /* Fermeture de l'element Points */
-
-  cr = cai_WriteCloseTagXML ( des , "Points" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Points" );
-    goto ERREUR;
-    }
-
-  /* sous element DORIS_USED */
-  
-  cr = cai_WriteElementXML ( des , "DORIS_USED" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element DORIS_USED" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Ephemeris */
-
-  cr = cai_WriteCloseTagXML ( des , "Ephemeris" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Ephemeris" );
-    goto ERREUR;
-    }
-
-  /* sous element Sensor_Configuration */
-  
-  cr = cai_WriteOpenTagXML ( des , "Sensor_Configuration" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Sensor_Configuration" );
-    goto ERREUR;
-    }
-
-  /* sous element Time_Stamp */
-  
-  cr = cai_WriteOpenTagXML ( des , "Time_Stamp" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Time_Stamp" );
-    goto ERREUR;
-    }
-
-  /* sous element LINE_PERIOD */
-  
-  cr = cai_WriteElementXML ( des , "LINE_PERIOD" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element LINE_PERIOD" );
-    goto ERREUR;
-    }
-
-  /* sous element SCENE_CENTER_TIME */
-  
-  cr = cai_WriteElementXML ( des , "SCENE_CENTER_TIME" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SCENE_CENTER_TIME" );
-    goto ERREUR;
-    }
-
-  /* sous element SCENE_CENTER_LINE */
-  
-  cr = cai_WriteElementXML ( des , "SCENE_CENTER_LINE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SCENE_CENTER_LINE" );
-    goto ERREUR;
-    }
-
-  /* sous element SCENE_CENTER_COL */
-  
-  cr = cai_WriteElementXML ( des , "SCENE_CENTER_COL" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SCENE_CENTER_COL" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Time_Stamp */
-
-  cr = cai_WriteCloseTagXML ( des , "Time_Stamp" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Time_Stamp" );
-    goto ERREUR;
-    }
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element Instrument_look_Angles_List */
-/*****************************************************************************/
-
-  /* sous element Instrument_Look_Angles_List */
-
-  cr = cai_WriteOpenTagXML ( des , "Instrument_Look_Angles_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Instrument_Look_Angles_List" );
-    goto ERREUR;
-    }
-
-  for ( i = 0 ; i < nbcan ; i++ )
-    {
-  /* sous element Instrument_Look_Angles */
-  
-  cr = cai_WriteOpenTagXML ( des , "Instrument_Look_Angles" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Instrument_Look_Angles" );
-    goto ERREUR;
-    }
-
-  /* sous element VALIDITY_DATE */
-  
-  cr = cai_WriteElementXML ( des , "VALIDITY_DATE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element VALIDITY_DATE" );
-    goto ERREUR;
-    }
-
-  /* sous element BAND_INDEX */
-  
-  sprintf ( valeur , "%d" , (i+1) );
-  cr = cai_WriteElementXML ( des , "BAND_INDEX" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element BAND_INDEX" );
-    goto ERREUR;
-    }
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.7 : DM : Ajout de l'element Look_Angles_List            */
-/*****************************************************************************/
-
-  /* sous element Look_Angles_List */
-
-  cr = cai_WriteOpenTagXML ( des , "Look_Angles_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture element Look_Angles_List" );
-    goto ERREUR;
-    }
-
-  /* sous element Look_Angles */
-  
-  cr = cai_WriteOpenTagXML ( des , "Look_Angles" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Look_Angles" );
-    goto ERREUR;
-    }
-
-  /* sous element DETECTOR_ID */
-
-  cr = cai_WriteElementXML ( des , "DETECTOR_ID" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element DETECTOR_ID" );
-    goto ERREUR;
-    }
-
-  /* sous element PSI_X */
-  
-  cr = cai_WriteElementXML ( des , "PSI_X" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element PSI_X" );
-    goto ERREUR;
-    }
-
-  /* sous element PSI_Y */
-  
-  cr = cai_WriteElementXML ( des , "PSI_Y" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element PSI_Y" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Look_Angles */
-
-  cr = cai_WriteCloseTagXML ( des , "Look_Angles" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Look_Angles" );
-    goto ERREUR;
-    }
-
-  /* sous element Look_Angles */
-  
-  cr = cai_WriteOpenTagXML ( des , "Look_Angles" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Look_Angles" );
-    goto ERREUR;
-    }
-
-  /* sous element DETECTOR_ID */
-
-  cr = cai_WriteElementXML ( des , "DETECTOR_ID" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element DETECTOR_ID" );
-    goto ERREUR;
-    }
-
-  /* sous element PSI_X */
-  
-  cr = cai_WriteElementXML ( des , "PSI_X" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element PSI_X" );
-    goto ERREUR;
-    }
-
-  /* sous element PSI_Y */
-  
-  cr = cai_WriteElementXML ( des , "PSI_Y" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element PSI_Y" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Look_Angles */
-
-  cr = cai_WriteCloseTagXML ( des , "Look_Angles" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Look_Angles" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Look_Angles_List */
-
-  cr = cai_WriteCloseTagXML ( des , "Look_Angles_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Look_Angles_List" );
-    goto ERREUR;
-    }
-   
-  /* Fermeture de l'element Instrument_Look_Angles */
-
-  cr = cai_WriteCloseTagXML ( des , "Instrument_Look_Angles" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Instrument_Look_Angles" );
-    goto ERREUR;
-    }
-  }
-
-  /* Fermeture de l'element Instrument_Look_Angles_List */
-
-  cr = cai_WriteCloseTagXML ( des , "Instrument_Look_Angles_List" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Instrument_Look_Angles_List" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Sensor_Configuration */
-
-  cr = cai_WriteCloseTagXML ( des , "Sensor_Configuration" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Sensor_Configuration" );
-    goto ERREUR;
-    }
-
-  /* sous element Frame_Counters */
-  
-  cr = cai_WriteOpenTagXML ( des , "Frame_Counters" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Frame_Counters" );
-    goto ERREUR;
-    }
-
-  /* sous element SEGMENT_START */
-  
-  cr = cai_WriteElementXML ( des , "SEGMENT_START" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SEGMENT_START" );
-    goto ERREUR;
-    }
-
-   /* sous element SCENE_START */
-  
-  cr = cai_WriteElementXML ( des , "SCENE_START" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SCENE_START" );
-    goto ERREUR;
-    }
-
-  /* sous element SEGMENT_END */
-  
-  cr = cai_WriteElementXML ( des , "SEGMENT_END" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SEGMENT_END" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Frame_Counters */
-
-  cr = cai_WriteCloseTagXML ( des , "Frame_Counters" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Frame_Counters" );
-    goto ERREUR;
-    }
-
-  /* sous element Data_Strip_Coordinates */
-  
-  cr = cai_WriteOpenTagXML ( des , "Data_Strip_Coordinates" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Data_Strip_Coordinates" );
-    goto ERREUR;
-    }
-
-  /* sous element FIRST_PIXEL_RAW */
-  
-  cr = cai_WriteElementXML ( des , "FIRST_PIXEL_RAW" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element FIRST_PIXEL_RAW" );
-    goto ERREUR;
-    }
-
-   /* sous element FIRST_LINE_RAW */
-  
-  cr = cai_WriteElementXML ( des , "FIRST_LINE_RAW" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element FIRST_LINE_RAW" );
-    goto ERREUR;
-    }
-
-  /* sous element FIRST_PIXEL_1B */
-  
-  cr = cai_WriteElementXML ( des , "FIRST_PIXEL_1B" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element FIRST_PIXEL_1B" );
-    goto ERREUR;
-    }
-
-  /* sous element FIRST_LINE_1B */
-  
-  cr = cai_WriteElementXML ( des , "FIRST_LINE_1B" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element FIRST_LINE_1B" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Data_Strip_Coordinates */
-
-  cr = cai_WriteCloseTagXML ( des , "Data_Strip_Coordinates" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Data_Strip_Coordinates" );
-    goto ERREUR;
-    }
-
-  /* sous element Models */
-  
-  cr = cai_WriteOpenTagXML ( des , "Models" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Models" );
-    goto ERREUR;
-    }
-
-  /* sous element OneB_Model */
-  
-  cr = cai_WriteOpenTagXML ( des , "OneB_Model" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element OneB_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element Coordinate_Normalization */
-  
-  cr = cai_WriteOpenTagXML ( des , "Coordinate_Normalization" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Coordinate_Normalization" );
-    goto ERREUR;
-    }
-
-  /* sous element LINES_I_M */
-  
-  cr = cai_WriteElementXML ( des , "LINES_I_M" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element LINES_I_M" );
-    goto ERREUR;
-    }
-
-  /* sous element LINES_DELTA_I */
-  
-  cr = cai_WriteElementXML ( des , "LINES_DELTA_I" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element LINES_DELTA_I" );
-    goto ERREUR;
-    }
-
-  /* sous element COLUMNS_J_M */
-  
-  cr = cai_WriteElementXML ( des , "COLUMNS_J_M" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element COLUMNS_J_M" );
-    goto ERREUR;
-    }
-
-  /* sous element COLUMNS_DELTA_J */
-  
-  cr = cai_WriteElementXML ( des , "COLUMNS_DELTA_J" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element COLUMNS_DELTA_J" );
-    goto ERREUR;
-    }
-
-  /* sous element LINES_L_M */
-  
-  cr = cai_WriteElementXML ( des , "LINES_L_M" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element LINES_L_M" );
-    goto ERREUR;
-    }
-
-  /* sous element LINES_DELTA_L */
-  
-  cr = cai_WriteElementXML ( des , "LINES_DELTA_L" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element LINES_DELTA_L" );
-    goto ERREUR;
-    }
-
-  /* sous element COLUMNS_P_M */
-  
-  cr = cai_WriteElementXML ( des , "COLUMNS_P_M" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element COLUMNS_P_M" );
-    goto ERREUR;
-    }
-
-  /* sous element COLUMNS_DELTA_P */
-  
-  cr = cai_WriteElementXML ( des , "COLUMNS_DELTA_P" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element COLUMNS_DELTA_P" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Coordinate_Normalization */
-
-  cr = cai_WriteCloseTagXML ( des , "Coordinate_Normalization" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Coordinate_Normalization" );
-    goto ERREUR;
-    }
-
-
-  /* sous element Direct_OneB_Model */
-  
-  cr = cai_WriteOpenTagXML ( des , "Direct_OneB_Model" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Direct_OneB_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element I */
-  
-  cr = cai_WriteOpenTagXML ( des , "I" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element I" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element I */
-
-  cr = cai_WriteCloseTagXML ( des , "I" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element I" );
-    goto ERREUR;
-    }
-
-  /* sous element J */
-  
-  cr = cai_WriteOpenTagXML ( des , "J" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element J" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element J */
-
-  cr = cai_WriteCloseTagXML ( des , "J" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element J" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Direct_OneB_Model */
-
-  cr = cai_WriteCloseTagXML ( des , "Direct_OneB_Model" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Direct_OneB_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element Reverse_OneB_Model */
-  
-  cr = cai_WriteOpenTagXML ( des , "Reverse_OneB_Model" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Reverse_OneB_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element L */
-  
-  cr = cai_WriteOpenTagXML ( des , "L" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element L" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element L */
-
-  cr = cai_WriteCloseTagXML ( des , "L" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element L" );
-    goto ERREUR;
-    }
-
-  /* sous element P */
-  
-  cr = cai_WriteOpenTagXML ( des , "P" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element P" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element P */
-
-  cr = cai_WriteCloseTagXML ( des , "P" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element P" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Reverse_OneB_Model */
-
-  cr = cai_WriteCloseTagXML ( des , "Reverse_OneB_Model" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Reverse_OneB_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element A */
-  
-  cr = cai_WriteOpenTagXML ( des , "A" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element A" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element A */
-
-  cr = cai_WriteCloseTagXML ( des , "A" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element A" );
-    goto ERREUR;
-    }
-
-  /* sous element B */
-  
-  cr = cai_WriteOpenTagXML ( des , "B" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element B" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* sous element c */
-  
-  cr = cai_WriteElementXML ( des , "c" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element c" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element B */
-
-  cr = cai_WriteCloseTagXML ( des , "B" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element B" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element OneB_Model */
-
-  cr = cai_WriteCloseTagXML ( des , "OneB_Model" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element OneB_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element Attitude_Model */
-  
-  cr = cai_WriteOpenTagXML ( des , "Attitude_Model" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Attitude_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element D_L */
-  
-  cr = cai_WriteOpenTagXML ( des , "D_L" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element D_L" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element abc" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element abc" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element abc" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element D_L */
-
-  cr = cai_WriteCloseTagXML ( des , "D_L" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element D_L" );
-    goto ERREUR;
-    }
-
-  /* sous element D_P */
-  
-  cr = cai_WriteOpenTagXML ( des , "D_P" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element D_P" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element abc" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element abc" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element abc" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element D_P */
-
-  cr = cai_WriteCloseTagXML ( des , "D_P" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element D_P" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Attitude_Model */
-
-  cr = cai_WriteCloseTagXML ( des , "Attitude_Model" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Attitude_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element SWIR_Registration_Model */
-  
-  cr = cai_WriteOpenTagXML ( des , "SWIR_Registration_Model" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SWIR_Registration_Model" );
-    goto ERREUR;
-    }
-
-  /* sous element D_L */
-  
-  cr = cai_WriteOpenTagXML ( des , "D_L" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element D_L" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element abc" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element abc" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element abc" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element D_L */
-
-  cr = cai_WriteCloseTagXML ( des , "D_L" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element D_L" );
-    goto ERREUR;
-    }
-
-  /* sous element D_P */
-  
-  cr = cai_WriteOpenTagXML ( des , "D_P" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element D_P" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element abc" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element abc" );
-    goto ERREUR;
-    }
-
-  /* sous element abc */
-  
-  cr = cai_WriteElementXML ( des , "abc" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element abc" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element D_P */
-
-  cr = cai_WriteCloseTagXML ( des , "D_P" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element D_P" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element SWIR_Registration_Model */
-
-  cr = cai_WriteCloseTagXML ( des , "SWIR_Registration_Model" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SWIR_Registration_Model" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Models */
-
-  cr = cai_WriteCloseTagXML ( des , "Models" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Models" );
-    goto ERREUR;
-    }
-  /* sous element Sensor_Calibration */
-  
-  cr = cai_WriteOpenTagXML ( des , "Sensor_Calibration" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Sensor_Calibration" );
-    goto ERREUR;
-    }
-
-  /* sous element METHOD */
-  
-  cr = cai_WriteElementXML ( des , "METHOD" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element METHOD" );
-    goto ERREUR;
-    }
-
-  /* sous element Calibration */
-  
-  cr = cai_WriteOpenTagXML ( des , "Calibration" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Calibration" );
-    goto ERREUR;
-    }
-
-  for ( i = 0; i < nbcan ; i++ )
-  {
-  /* sous element Band_Parameters */
-  
-  cr = cai_WriteOpenTagXML ( des , "Band_Parameters" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Band_Parameters" );
-    goto ERREUR;
-    }
-
-  /* sous element BAND_INDEX */
-  sprintf ( valeur , "%d" , (i+1) );
-  
-  cr = cai_WriteElementXML ( des , "BAND_INDEX" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element BAND_INDEX" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Band_Parameters */
-
-  cr = cai_WriteCloseTagXML ( des , "Band_Parameters" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Band_Parameters" );
-    goto ERREUR;
-    }
-  }
-   /* Fermeture de l'element Calibration */
-
-  cr = cai_WriteCloseTagXML ( des , "Calibration" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Calibration" );
-    goto ERREUR;
-    }
-
-  /* sous element Spectral_Sensitivities */
-  
-  cr = cai_WriteOpenTagXML ( des , "Spectral_Sensitivities" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Spectral_Sensitivities" );
-    goto ERREUR;
-    }
-
-  for ( i = 0; i < nbcan ; i++ )
-  {
-    /* sous element Band_Spectral_Sensitivities */
-   
-    cr = cai_WriteOpenTagXML ( des , "Band_Spectral_Sensitivities" );
-    if ( cr == CAI_KO )
-    {
-      sprintf ( CAI_ERREUR , "Erreur ecriture Element Band_Spectral_Sensitivities" );
-      goto ERREUR;
-    }
-
-  sprintf( valeur , "%d" , ( i+1 ) );
-  /* sous element BAND_INDEX */
-  
-  cr = cai_WriteElementXML ( des , "BAND_INDEX" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element BAND_INDEX" );
-    goto ERREUR;
-    }
-
-  /* sous element FIRST_WAVELENGTH_VALUE */
-  
-  cr = cai_WriteElementXML ( des , "FIRST_WAVELENGTH_VALUE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element FIRST_WAVELENGTH_VALUE" );
-    goto ERREUR;
-    }
-
-  /* sous element WAVELENGTH_STEP */
-  
-  cr = cai_WriteElementXML ( des , "WAVELENGTH_STEP" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element WAVELENGTH_STEP" );
-    goto ERREUR;
-    }
-
-  /* sous element CALIBRATION_DATE */
-  
-  cr = cai_WriteElementXML ( des , "CALIBRATION_DATE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element CALIBRATION_DATE" );
-    goto ERREUR;
-    }
-  
-  /* sous element Spectral_Sensitivity_Values */
-  
-  cr = cai_WriteOpenTagXML ( des , "Spectral_Sensitivity_Values" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Spectral_Sensitivity_Values" );
-    goto ERREUR;
-    }
-
-  /* sous element SPECTRAL_SENSITIVITY_VALUE */
-  
-  cr = cai_WriteElementXML ( des , "SPECTRAL_SENSITIVITY_VALUE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SPECTRAL_SENSITIVITY_VALUE" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Spectral_Sensitivity_Values */
-
-  cr = cai_WriteCloseTagXML ( des , "Spectral_Sensitivity_Values" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Spectral_Sensitivity_Values" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Band_Spectral_Sensitivities */
-
-  cr = cai_WriteCloseTagXML ( des , "Band_Spectral_Sensitivities" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Band_Spectral_Sensitivities" );
-    goto ERREUR;
-    }
-
-  }  
-
-  /* Fermeture de l'element Spectral_Sensitivities */
-
-  cr = cai_WriteCloseTagXML ( des , "Spectral_Sensitivities" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Spectral_Sensitivities" );
-    goto ERREUR;
-    }
-
-  /* sous element Solar_Irradiance */
-  
-  cr = cai_WriteOpenTagXML ( des , "Solar_Irradiance" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Solar_Irradiance" );
-    goto ERREUR;
-    }
-
-  for ( i = 0; i < nbcan ; i++ )
-  {
-  sprintf ( valeur , "%d" , ( i+1 ) );
-  /* sous element Band_Solar_Irradiance */
-  
-  cr = cai_WriteOpenTagXML ( des , "Band_Solar_Irradiance" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Band_Solar_Irradiance" );
-    goto ERREUR;
-    }
-
-  /* sous element BAND_INDEX */
-  
-  cr = cai_WriteElementXML ( des , "BAND_INDEX" , valeur );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element BAND_INDEX" );
-    goto ERREUR;
-    }
-
-  /* sous element SOLAR_IRRADIANCE_VALUE */
-  
-  cr = cai_WriteElementXML ( des , "SOLAR_IRRADIANCE_VALUE" , "" );
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element SOLAR_IRRADIANCE_VALUE" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Band_Solar_Irradiance */
-
-  cr = cai_WriteCloseTagXML ( des , "Band_Solar_Irradiance" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Band_Solar_Irradiance" );
-    goto ERREUR;
-    }
-  }
-  /* Fermeture de l'element Solar_Irradiance */
-
-  cr = cai_WriteCloseTagXML ( des , "Solar_Irradiance" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Solar_Irradiance" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Sensor_Calibration */
-
-  cr = cai_WriteCloseTagXML ( des , "Sensor_Calibration" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Sensor_Calibration" );
-    goto ERREUR;
-    }
-
-  /* Fermeture de l'element Data_Strip */
-
-  cr = cai_WriteCloseTagXML ( des , "Data_Strip" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Data_Strip" );
-    goto ERREUR;
-    }
-
- /* Fermeture de l'element Dimap_Document */
-
-  cr = cai_WriteCloseTagXML ( des , "Dimap_Document" );  
-  if ( cr == CAI_KO )
-    {
-    sprintf ( CAI_ERREUR , "Erreur ecriture Element Dimap_document" );
-    goto ERREUR;
-    }
-
-  /* fermeture du fichier descripteur */
-  
-  if (des!=NULL) fclose ( des );
-
-  return CAI_OK;
-  
-  ERREUR:
-
-  return CAI_KO;
-  }  
-/* 
-  Fin de l'operation cai_creat_leader_spot5
-*/
diff --git a/Utilities/CAI/cai_dll/src/cai_tiff.c b/Utilities/CAI/cai_dll/src/cai_tiff.c
deleted file mode 100755
index 3162c7542c..0000000000
--- a/Utilities/CAI/cai_dll/src/cai_tiff.c
+++ /dev/null
@@ -1,1534 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/* PROJET :    COUCHE ACCES IMAGE                                            */
-/* -------								     */
-/*                                                                           */
-/* MODULE :    cai_tiff.c                                                    */
-/* -------								     */
-/*                                                                           */
-/* ROLE   :    Ce module rassemble toutes les fonctions d'acces aux images   */
-/* -------     stockees au format tiff                                       */ 
-/*                                                                           */
-/* AUTEUR :      R.CHAISEMARTIN     (CISI)                                   */
-/* -------								     */
-/*                                                                           */
-/* DATE DE CREATION :    fevrier 1995                                        */
-/* -----------------						             */
-/*                                                                           */
-/* LANGAGE : C                                                               */
-/* --------                                                                  */
-/*****************************************************************************/
-/*****************************************************************************/
-/**							      		    **/
-/**    CE MODULE A ETE DEVELOPPE EN UTILISANT LA BIBLIOTHEQUE 		    **/
-/**  D'ACCES AUX IMAGES TIFF DIPONIBLE EN FREE_WARE AVEC XV  		    **/
-/**	libtiff.a version 3.0				      		    **/
-/**							      		    **/
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/* VERSION : V3.3                                                            */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 3.3: DM : optimisation des acces                          */
-/*****************************************************************************/
-/* MOD : VERSION :4.1 :FA: Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 :FA:Verification que le nombre d'octets par pixel est */
-/* egal a 1 et le nombre de canaux est 1 ou 3. tiff est un format de         */
-/* restitution							             */
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 : DM : modifications pour compatibilite HP64bits      */
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 :FA: Suppression de la contrainte sur le nb d'octets  */
-/* par pixel et du nombre de canaux                                          */
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : DM : modification du nombre de lignes en ecriture   */
-/* dans le TAG ROWPERSTRIP pour manipulation aussi bien pour chaque ligne,   */
-/* tous les canaux qu pour chaque canal toutes les lignes                    */
-/*****************************************************************************/
-/*****************************************************************************/
-/* MOD : VERSION : 4.6 : FA : En ouverture en modification, ouverture en "a" */
-/* au lieu de "w"                                                            */
-/*****************************************************************************/
-/*****************************************************************************/
-/* MOD : VERSION : 4.9 : DM :  Lecture d'une image sur 1 bit. Chaque bit est */
-/*  expensé sur un octet avant d'être renvoyé à l'appelant                   */
-/*****************************************************************************/
-/*****************************************************************************/
-/* MOD : VERSION : 5.0 : DM :  A l'ouverture d'une image en lecture, renvoie */
-/* de COD_PIX à I4 ou R4 pour les images codees en I4 ou R4                  */
-/*****************************************************************************/
-/* MOD : VERSION : 5.0 : FA :  Image 1bit  :prise en compte de la lecture de */
-/*  portion de lignes ou de sous-echantillonnage                             */
-/*****************************************************************************/
-/* MOD : VERSION : 5.1 : FA :  Image 1bit  :prise en compte de la lecture de */
-/*  l'image en entier                                                        */
-/*****************************************************************************/
-/* MOD : VERSION : 5.1 : DM :  Mise à jour du tag SAMPLEFORMAT lorsque       */
-/* l'image est codée en reel  et que l'utilisateur le precise dans le param  */
-/* "label"                                                                   */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte des I2,I4,UI2,UI4 et R8       */
-/*                             en lecture et ecriture                        */
-/*****************************************************************************/
-/*---------------------------------------------------------------------------*/
-/*                Inclusion des fichiers STANDARDS (.h)                      */
-/*---------------------------------------------------------------------------*/
-
-
-# include <stdio.h>
-# include <string.h>
-# include <stdlib.h>
-# include <unistd.h>
-# include <sys/types.h>
-#include <dirent.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-
-#define _CAI_IMAGE
-#define IN_CAI_TIFF
-
-# include "cai_image.h"
-
-/*----------------------------------------------------------------------------*/
-/* Variable pour la  gestion en configuration                                 */
-/*----------------------------------------------------------------------------*/
-static char *rcs_id="$Header: cai_tiff.c,v 1.11 01/05/31 10:47:19 cmf Exp $";
-
-
-extern char *getenv();
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*                                                                           */
-/*                Definition des OPERATIONS EXTERNES                         */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_liste_ima_tiff                                         */
-/* ----------                                                                */
-/*                                                                           */
-/* ROLE :    fonction de listage des images au format tiff                   */
-/* ------                                                                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :      int cai_liste_ima_tiff (repert,tab_ima)           */
-/* -----------------                                                         */
-/*                                                                           */
-/*     repert        (E) (char *)   : repertoire a explorer		     */
-/*     tab_ima       (S) (char ***) : pointeur sur tableau des images listees*/
-/*                                    alloue par la fonction,il doit etre    */
-/*                                    LIBERE PAR L'APPELANT                  */
-/*									     */
-/*     cai_liste_ima_tiff      (S) (int)     : = -1 repertoire inexistant    */                                    /*					       = > 0 nombre d'images listees */
-/*                                                                           */
-/* VERSION :  V2                                                             */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-long int cai_liste_ima_tiff (char *repert,
-		       		char ***tab_ima)
-
-
-{
-   FILE *fp;		  /* descripteur de fichier. retour fopen        */
-
-   struct dirent *dp;     /* structure resultat de la fonction readdir   */
-
-   DIR *dirp;		  /* pointeur sur structure ouverture repertoire */
-   char *pch0;	          /* pointeurs sur chaine de caracteres          */
-   unsigned short magic;  /* nombre magique de reconnaissance tiff       */
-   char nomfic[1024];     /* nom du fichier dont on verifie s'il est tiff*/
-   int nb_ima;            /* nombre d'images tiff  identifiees           */
-   int i;                 /* indice de boucle                            */
-   char car;              /* variable de travail                         */    
-
-/*........................................
-   INITIALISATION et ouverture du repertoire choisi
-  .........................................*/
-   nb_ima=0;
-    dirp=opendir(repert);
-
-   if(dirp!=NULL)
-   {
-/*......................................
-  premiere passe pour comptabiliser les images du format donne
-
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE tiff
-    lecture du nombre magique 
-      ........................................*/
-
-   while((dp=readdir(dirp))!=NULL)
-   {
-        nomfic[0]='\0';
-        sscanf(repert,"%s",nomfic);
-        strcat(nomfic,"/");
-        strcat(nomfic,dp->d_name);
-	fp=fopen(nomfic,"r");
-        if (fp != NULL)
-        {
-         fread(&magic,2,1,fp);
-         fclose(fp);
-         if ((magic == TIFF_BIGENDIAN)||(magic== TIFF_LITTLEENDIAN))
-          {
-	   nb_ima=nb_ima+1;
-          }
-         }
-     }
-
-    (void)closedir(dirp);
-/*.....................................
-     ALLOCATION DU TABLEAU CONTENANT LA LISTE DES IMAGES DU FORMAT BSQ
-     ......................................*/
-    *tab_ima = (char **) calloc(nb_ima,sizeof(char *));
-    for (i=0;i<nb_ima;i=i+1)
-      (*tab_ima)[i]=(char *)calloc(1,100);
-
-/*......................................
-
-   deuxieme passe pour constituer la liste des images du format donne
-   POUR CHAQUE FICHIER DU REPERTOIRE ,
-      TEST POUR SAVOIR SI CE FICHIER EST UNE IMAGE tiff
-    lecture du nombre magique 
-    si oui ,stockage dans la liste des images TIFF
-      ........................................*/
-   nb_ima=0;
-   dirp=opendir(repert);
-
-   while((dp=readdir(dirp))!=NULL)
-   {
-
-        nomfic[0]='\0';
-        sscanf(repert,"%s",nomfic);
-        strcat(nomfic,"/");
-        strcat(nomfic,dp->d_name);
-	fp=fopen(nomfic,"r");
-
-        if (fp != NULL)
-
-        {
-
-         fread(&magic,2,1,fp);
-         fclose(fp);
-         if ((magic == TIFF_BIGENDIAN)||(magic== TIFF_LITTLEENDIAN))
-          {
-
-/*         suppression de l'extension */
-           car='.';
-           pch0=strrchr(dp->d_name,car);
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-           if ((pch0 != NULL)&&((*(pch0+1)=='t')||(*(pch0+1)=='T')))
-           {
-               *pch0 =  '\0';
-               strcpy((*tab_ima)[nb_ima],dp->d_name);
-	       nb_ima=nb_ima+1;
-            }
-          }
-         }
-     }
-
-    (void)closedir(dirp);
-
-   }
-   else
-   {
-     /* Erreur:Repertoire inexistant */
-       nb_ima=-1;
-   }
-
-    return(nb_ima);
-
-}
-
-/* Fin de l'operation cai_liste_ima_tiff
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_lecture_tiff                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture d'une image au format tiff      */
-/* -----     et de tous les fichiers qui la composent                        */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :   CAI_IMAGE *cai_ouvre_lecture_tiff (nom_image,        */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels              */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_lecture_tiff    (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_lecture_tiff(char *repert,
-				  char *nom_image,
-				  int  *nb_can,
-				  int  *nboct_pix,
-				  int  *nb_col,
-				  int  *nb_lig)
-
-{
-   TIFF *tif;		        /* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;	    	/* pointeur su descripteur de fichier image */ 
-   int  iret,icr;		/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char *deb,*deb1;		/* pointeurs sur chaine de caracteres       */
-   char Extension[6];           /* extension du fichier .tiff ou .tif       */
-   int i,Coher;			/* indice 				    */
-   unsigned int imagelength;    /* nombre de lignes de l'image              */
-   unsigned int imagewidth;     /* nombre de colonnes de l'image	    */
-   short samplesperpixel;       /* nombre de canaux			    */
-   short compression;		/* indicateur de compression		    */
-   short photo;			/* indicateur de photometric interpretation */
-   short bitspersample;	        /* nombre de bits par pixels                */
-   short sampleformat;		/* type de codage du pixel                  */
-   int Istile;			/* indicateur de stockage en pave	    */
-   int Mode;			/* mode test existence d'un fichier         */
-
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-   *nb_lig=0;
-   *nb_col=0;
-   *nboct_pix=0;
-   iret=1;
-   Mode = F_OK;
-   icr= 0;
-   sprintf(Extension,".tiff");
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-
-/*****************************************************************************/
-/* MOD : VERSION :4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoire dans cai_ouvre_lecture");
-    }
-   else
-   {
-
-/*.................................................
-   Constitution du nom du fichier TIFF 
-   .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-      sprintf(nom_fic,"%s/%s.tiff",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.tiff",nom_image);
-   }
-/* test sur l'existence avec .tiff sinon .tif */
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-      icr = access(nom_fic,Mode);
-      if (icr !=0)
-      {
-	nom_fic[strlen(nom_fic)-1]='\0';
-        Extension[4]='\0';
-        icr = access(nom_fic,Mode);
-        if (icr !=0)
-        {
-   	    sprintf(Extension,".TIF");
-   	    if ((long int)strlen(repert)!=0)
-   	    {
-      		sprintf(nom_fic,"%s/%s%s",repert,nom_image,Extension);
-   	    }
-   	    else
-   	    {
-      		sprintf(nom_fic,"%s.%s",nom_image,Extension);
-   	    }
-        }
-      }
-
-
-/*........................
-    Ouverture du fichier entete
-  ..........................................*/
-    tif = TIFFOpen(nom_fic,"r");
-    if (tif==NULL)
-    {
-      iret=0;
-      strcpy(CAI_ERREUR,"Erreur ouverture fichier tiff");
-     }
-    else
-    {
-/*..........................................................
-      verification si l'image n'est pas comprimee
-.............................................................*/
-      TIFFGetField(tif,TIFFTAG_COMPRESSION,&compression);
-      if (compression != COMPRESSION_NONE)
-      {  
-        iret=0;
-        strcpy(CAI_ERREUR,"Le fichier tiff est comprime. Format non traite !");
-       }
-       else
-       {
-          
-/*..........................................................
-        verification si le fichier n'est pas code en pave
-.............................................................*/
-        Istile=TIFFIsTiled(tif);
-        if (Istile!=0)
-         {  
-          iret=0;
-          strcpy(CAI_ERREUR,"Le fichier tiff est en paves . Format non traite !");
-         }
-         else
-          {
-/*....................................
-	  recuperation du nombre de colonnes 
-............................................*/
-	  TIFFGetField(tif,TIFFTAG_IMAGEWIDTH,&imagewidth);
-   	  *nb_col=imagewidth;
-/*....................................
-	  recuperation du nombre de lignes
-............................................*/
-          TIFFGetField(tif,TIFFTAG_IMAGELENGTH,&imagelength);
-	  *nb_lig=imagelength;
-
-/*......................................
-	  recuperation du nombre de canaux
-............................................*/
-	  TIFFGetFieldDefaulted(tif,TIFFTAG_SAMPLESPERPIXEL,&samplesperpixel);
-          *nb_can=samplesperpixel;
-/*.........................................
-	  recuperation du nombre d'octets par pixel
-  .................................................*/
-/* Nombre de bits par pixels */
-/*****************************/
-          TIFFGetField(tif,TIFFTAG_BITSPERSAMPLE,&bitspersample);
-          if ((bitspersample %8)==0)
-		*nboct_pix=(int)(bitspersample/8);
-          else
-		*nboct_pix=(int)((bitspersample/8)+1);
-          image1->NB_BITS_PIX=bitspersample;
-
-/*.........................................
-	  recuperation du type de codage
-  .................................................*/
-/*****************************************************************************/
-/* MOD : VERSION : 5.0 : DM :  A l'ouverture d'une image en lecture, renvoie */
-/* de COD_PIX à I4 ou R4 pour les images codees en I4 ou R4                  */
-/*****************************************************************************/
-          TIFFGetField(tif,TIFFTAG_SAMPLEFORMAT,&sampleformat);
-
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte des I2,I4,UI2,UI4 et R8       */
-/*                             en lecture et ecriture                        */
-/*****************************************************************************/
-	  Coher = 1;
-	  if (*nboct_pix==1)
-          {
-	    sprintf(image1->COD_PIX,"UOCT");
-	    if (sampleformat == SAMPLEFORMAT_INT) 
-		sprintf(image1->COD_PIX,"OCT");
-	    else if (sampleformat != SAMPLEFORMAT_UINT) 
-		Coher=0;
-          }
-	  else if (*nboct_pix==2) 
-          {
-	    sprintf(image1->COD_PIX,"UI2");
-	    if (sampleformat == SAMPLEFORMAT_INT) 
-		sprintf(image1->COD_PIX,"I2");
-	    else if (sampleformat != SAMPLEFORMAT_UINT) 
-		Coher=0;
-          }
-	  else if (*nboct_pix==4)
-          {
-	     sprintf(image1->COD_PIX,"I4");
-	     if (sampleformat == SAMPLEFORMAT_IEEEFP) 
-			sprintf(image1->COD_PIX,"R4");
-              else if (sampleformat == SAMPLEFORMAT_UINT)
-			sprintf(image1->COD_PIX,"UI4");
-              else if  (sampleformat != SAMPLEFORMAT_INT)
-		Coher=0;
-          }
-	  else if (*nboct_pix==8)
-          {
-	     sprintf(image1->COD_PIX,"R8");
-	     if (sampleformat != SAMPLEFORMAT_IEEEFP) 
-				Coher=0;
-	  }
-	  else
-		 sprintf(image1->COD_PIX,"UND");
-
-/*............................................*/
-/* Recuperation du type de codages des pixels */
-/*............................................*/
-	TIFFGetField(tif,TIFFTAG_PLANARCONFIG,&photo);
-
-/*...................................................
-          recuperation de l'indice de photometric interpretation
- ..............................................................*/
-	TIFFGetField(tif,TIFFTAG_PHOTOMETRIC,&photo);
-        if ((photo<0)&&(photo>3))
-         {
-	  iret=0;
-          strcpy(CAI_ERREUR,"Photometric non connue . Format non traite !");
-         }
-      
-        }
-       }
-      }
-     if (iret != 0)
-     {
-
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-
- 
-       deb = image1->NOM_FIC_CAN;
-       deb1= image1->NOM_UTIL_CAN;
-
-       for (i=0;i<*nb_can;i=i+1)
-       {
-	   sprintf(deb,"%s%s",nom_image,Extension);
-  	   deb=deb+100;
-	   sprintf(deb1,"%s%s",nom_image,Extension);
-           deb1=deb1+100;
-           image1->POS_OCTET[i]=0;
-           image1->ACCES_CANAL_TIFF[i]=tif;
-        }
-      }
-     }
-     if (iret==0)
-     {
-    	return (NULL);
-      }
-      else  
-      {   
-        return(image1);
-      }
-  
-}
-
-/* 
-   Fin de l'operation cai_ouvre_lecture_tiff
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_creation_tiff                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de creation et d'ouverture en ecriture d'une image     */
-/* -----     au format tiff et de tous les fichiers qui la composent         */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :   CAI_IMAGE *cai_ouvre_creation_tiff (nom_image,       */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */
-/*				                            nb_col,          */
-/*				                            nb_lig,          */
-/*				                            label)           */
-/*                                                                           */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*     nb_can         (E) (int )   : nombre de canaux de l'image             */
-/*     nboct_pix      (E) (int )   : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (E) (int )   : nombre de lignes de l'image             */
-/*     nb_col         (E) (int )   : nombre de colonnes de l'image           */
-/*     label          (E) (char *) : commentaire lie a l'image               */
-/*                                                                           */
-/*     cai_ouvre_creation_tiff    (S) (CAI_IMAGE *) : =NULL si pb            */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_IMAGE *cai_ouvre_creation_tiff(char *repert,
-				   char *nom_image,
-				   int  *nb_can,
-				   int  *nboct_pix,
-				   int  *nb_col,
-				   int  *nb_lig,
-				   char *label)
-
-{
-   TIFF *tif;		        /* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;		/* pointeur su descripteur de fichier image */ 
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   int retour;			/* retour de fonction 			    */ 
-   int i;			/* indice 				    */
-   struct stat	buf_stat;	/* structure decrivant status de fichier    */
-   unsigned int imagelength;    /* nombre de lignes de l'image              */
-   unsigned int imagewidth;     /* nombre de colonnes de l'image	    */
-   short samplesperpixel;       /* nombre de canaux			    */
-   short photo;			/* indicateur de photometric interpretation */
-   int  rowsperstrip;           /* taille totale de l'image en octets       */
-   short bitspersample;		/* nombre de bits par pixels                */
-   short sampleformat;		/* type de codage du pixel                  */
-   int reconnaissance_type,Coher;
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 :FA: Suppression de la contrainte sur le nb d'octets  */
-/* par pixel et du nombre de canaux                                          */
-/*****************************************************************************/
-/*****************************************************************************/
-/* MOD : VERSION : 4.2 :FA:Verification que le nombre d'octets par pixel est */
-/* egal a 1 et le nombre de canaux est 1 ou 3. tiff est un format de         */
-/* restitution							             */
-/*****************************************************************************/
-/* Verification sur le nombre d'octets par pixel */
-
- /*  if (*nboct_pix !=1)
-   {
-     strcpy(CAI_ERREUR,"Erreur une image TIFF ne peut etre codee que sur un seul octet");
-     goto ERREUR;
-   }
-*/
-/* Verification sur le nombre de canaux */
-/*   if ((*nb_can !=1)&&(*nb_can !=3))
-   {
-     strcpy(CAI_ERREUR,"Erreur une image TIFF a 1 ou 3 canaux exclusivement");
-     goto ERREUR;
-   }
-*/
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION :4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
-   if (image1==NULL)
-   {
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_creation");
-     goto ERREUR;
-   }
-
-/*.................................................
-   Constitution du nom du fichier entete et verification qu'il
-   n'existe pas deja
-  .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-      sprintf(nom_fic,"%s/%s.tif",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.tif",nom_image);
-   }
-   retour = stat ( nom_fic , &buf_stat );
-   if ( retour == 0 )
-   { 
-	sprintf ( CAI_ERREUR , "L'image %s TIFF existe \n" , nom_image );
-	goto ERREUR;
-   }
-
-/*************************************************/
-/* Ouverture du fichier 			 */ 
-/*************************************************/
-tif = TIFFOpen ( nom_fic , "w");
-if ( tif == NULL )
-{
-	sprintf ( CAI_ERREUR , "Erreur : ouverture fichier %s impossible \n" ,
-	nom_fic );
-	goto ERREUR ;
-}
-/*************************************************/
-/* Ecriture de l'enregistrement d'entete         */
-/*************************************************/
-/* Nombre de colonnes */
-/**********************/
-imagewidth=(unsigned int)(*nb_col);
-TIFFSetField(tif,TIFFTAG_IMAGEWIDTH,imagewidth);
-
-/* Nombre de lignes */
-/********************/
-imagelength=(unsigned int)(*nb_lig);
-TIFFSetField(tif,TIFFTAG_IMAGELENGTH,imagelength);
-
-/*****************************************************************************/
-/* MOD : VERSION : 4.5 : DM : modification du nombre de lignes en ecriture   */
-/* dans le TAG ROWPERSTRIP pour manipulation aussi bien pour chaque ligne,   */
-/* tous les canaux qu pour chaque canal toutes les lignes                    */
-/*****************************************************************************/
-
-/* Nombre de lignes par strip */
-/******************************/
-/*rowsperstrip=(int)((*nb_lig));*/
-rowsperstrip = 1;
-TIFFSetField(tif,TIFFTAG_ROWSPERSTRIP,rowsperstrip);
-
-/* Nombre de canaux */
-/********************/
-samplesperpixel=(short)(*nb_can);
-TIFFSetField(tif,TIFFTAG_SAMPLESPERPIXEL,samplesperpixel);
-
-/* Indicateur de non compression */
-/*********************************/
-TIFFSetField(tif,TIFFTAG_COMPRESSION,COMPRESSION_NONE);
-
-/* Nombre de bits par pixels */
-/*****************************/
-bitspersample=(short)(*nboct_pix);
-bitspersample=bitspersample*8;
-TIFFSetField(tif,TIFFTAG_BITSPERSAMPLE,bitspersample);
-
-/* Type de codage du pixel */
-/*****************************************************************************/
-/* MOD : VERSION : 5.1 : DM :  Mise à jour du tag SAMPLEFORMAT lorsque       */
-/* l'image est codée en reel  et que l'utilisateur le precise dans le param  */
-/* "label"                                                                   */
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte des I2,I4,UI2,UI4 et R8       */
-/*                             en lecture et ecriture                        */
-/*****************************************************************************/
-/*****************************************************************************/
-/* MOD : VERSION : 5.3 : DM :   Correction erreur lorsque label non reconnu */
-/*****************************************************************************/
-
-/*****************************************************************************/
-/* Verification si type de codage reconnu dans le label */
-  reconnaissance_type = cai_istyp_connu(label);
-  if (reconnaissance_type == -1)
-  {
-     if (*nboct_pix == 1) sampleformat=SAMPLEFORMAT_UINT;
-     else if (*nboct_pix==2) sampleformat=SAMPLEFORMAT_INT;
-     else if ((*nboct_pix==4) && ((strcasecmp(label,"R4") == 0)||
-				(strcasecmp(label,"FLOAT")== 0)||
-				(strcasecmp(label,"REEL") == 0)))
-                                   sampleformat = SAMPLEFORMAT_IEEEFP;
-     else sampleformat=SAMPLEFORMAT_VOID;
-  }
-  else
-  {
-
-/* Verification de coherence entre le nb d'octets par pixel et le type donne */
-     Coher=1;
-     if(*nboct_pix == 1) 
-     {
-	sampleformat=SAMPLEFORMAT_UINT;
-	if (reconnaissance_type == 0)
- 	   sampleformat=SAMPLEFORMAT_INT;
-	else if (reconnaissance_type !=1)
-          Coher=0;  
-     }    
-     else if(*nboct_pix == 2) 
-     {
-	sampleformat=SAMPLEFORMAT_INT;
-	if (reconnaissance_type == 3)
- 	   sampleformat=SAMPLEFORMAT_UINT;
-	else if (reconnaissance_type !=2)
-          Coher=0;  
-     }
-     else if(*nboct_pix == 4) 
-     {
-	sampleformat=SAMPLEFORMAT_IEEEFP;
-	if (reconnaissance_type == 4)
- 	   sampleformat=SAMPLEFORMAT_INT;
-	else if (reconnaissance_type == 5)
- 	   sampleformat=SAMPLEFORMAT_UINT;
-	else if (reconnaissance_type !=6)
-          Coher=0; 
-     } 
-     else if(*nboct_pix == 8) 
-     {
-	sampleformat=SAMPLEFORMAT_IEEEFP;
-	if (reconnaissance_type != 7)  Coher=0;
-     }
-     else 
-	   Coher = 0;
-     if (Coher == 0) 
-     {      	
-	  sprintf(CAI_ERREUR,"incoherence entre TYPE et Nb bits par pixels\n");
-	  goto ERREUR;
-      }    
-      else
-      {
-     		sprintf ( image1->COD_PIX , "%s" ,label);
-       }
-   }
-  
-/* 
-  FIN MOD 5.1 */
-/**************/
-TIFFSetField(tif,TIFFTAG_SAMPLEFORMAT,sampleformat);
-
-/*indicateur de photometric suivant le nombre de canaux */
-if (*nb_can==1)
- {
-   photo=1; 
-   TIFFSetField(tif,TIFFTAG_PLANARCONFIG,PLANARCONFIG_CONTIG);
-
-  }
-else
-  {
-   photo=2;
-   TIFFSetField(tif,TIFFTAG_PLANARCONFIG,PLANARCONFIG_SEPARATE);
-
-   }
-TIFFSetField(tif,TIFFTAG_PHOTOMETRIC,photo);
-  for (i=0;i<*nb_can;i=i+1)
-  {
-    image1->ACCES_CANAL_TIFF[i]=tif;
-    image1->POS_OCTET[i]=0;
-   }
-  return (image1);
-
-ERREUR :
-  cai_dest_ima_tiff ( repert , nom_image );
-  return(NULL);
-}
- /* 
-  Fin de l'operation cai_ouvre_creation_tiff
-*/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_lecture_canal_tiff                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de lecture d'un canal d'une image tiff                 */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_lecture_canal_tiff (image1, canal,      */       		      /* ------------------                              premiere_ligne,           */
-/*                                          	   premiere_colonne,         */
-/*                                          	   nombre_lignes_lire ,      */
-/*                                          	   nombre_colonnes_lire,     */
-/*                                           	   pas_ligne ,pas_colonne,   */
-/*                 		             	   data_image )              */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*     canal                (E) (int) : numero du canal a lire               */
-/*     premiere_ligne       (E) (int) : premiere ligne a lire dans l'image   */
-/*     premiere _colonne    (E) (int) : premiere colonne a lire dans l'image */
-/*     nombre_lignes_lire   (E) (int) : nombre de lignes a lire              */
-/*     nombre_colonnes_lire (E) (int) : nombre de colonnes a lire            */
-/*     pas_ligne            (E) (int) : pas en ligne                         */
-/*     pas_colonne          (E) (int) : pas en colonne                       */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels lus alloue et     */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_lecture_canal_tiff    (S) (CAI_OK_KO) : = CAI_KO si pb            */
-/*                                                 = CAI_OK si OK            */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-/*****************************************************************************/
-/* MOD : VERSION : 4.9 : DM :  Lecture d'une image sur 1 bit. Chaque bit est */
-/*  expensé sur un octet avant d'être renvoyé à l'appelant                   */
-/*****************************************************************************/
-
-CAI_OK_KO cai_lecture_canal_tiff(CAI_IMAGE *image1 ,  
-                          	 int *canal ,           
-    		          	 int *premiere_ligne  ,   
-     		          	 int *premiere_colonne,
-                           	 int *nombre_lignes_lire ,
-                           	 int *nombre_colonnes_lire,
-                          	 int *pas_ligne ,          
-                           	 int *pas_colonne,
-		           	 unsigned char *data_image )        
-
-{
- TIFF *tif;		    /* descripteur de fichier , retour de TIFFOpen   */
- int num,i,j,k,val;         /* variables de travail                          */
- int mul,decal;             /* variables de travail                          */
- int iret;                  /* indicateur d'erreur                           */
- long lig;                  /* indice de boucle sur les lignes               */
- long  nb_oct;		    /* nb oct =1er octet a lire - position courante  */
- unsigned char *buf_lec;    /* buffer lecture d'une  ligne                   */
- unsigned char *deb,*pch;   /* pointeur chaine pour transfert  buffer sortie */
- int   oct_pix;             /* nb octets par pixels                          */
- unsigned char val1;
- unsigned char Masque[8]={1,2,4,8,16,32,64,128};
- int temp1,temp2,temp3;
-
-/*...........................
-  Initialisations diverses
-  ..........................*/
-
-   iret=CAI_OK;
-   strcpy(CAI_ERREUR,"        ");
-
-   tif=image1->ACCES_CANAL_TIFF[0];
-   oct_pix = image1->NBOCT_PIX;
-   pch=data_image;
-
-/*..............................................
-        allocation de memoire pour lire une ligne image
- ............................................. */
-   nb_oct=TIFFScanlineSize(tif);
-   if ((nb_oct==(image1->NB_COL)*(image1->NB_CANAUX))&&(image1->NB_CANAUX!=1))
-   {
-/* ligne multispectrale */
-      num=0;
-      val=(*canal-1);
-      mul=image1->NB_CANAUX;
-    }
-   else
-   {
-/* ligne monospectrale */
-      num=*canal-1;
-      mul=1;
-      val=0; 
-   }
-   buf_lec = (unsigned char *) malloc(nb_oct);
-   if (buf_lec == NULL)
-   {
-      iret=CAI_KO;
-      strcpy(CAI_ERREUR,"Probleme d'allocation memoire");
-   }
-   else
-   {
-
-/*....................
-        Initialisation
-  ......................*/
-        lig=(long)(*premiere_ligne); 
-	lig=lig-1;   
-        i=0;
-        if ( image1->NB_BITS_PIX!=1)
-        {
-          while (i<(*nombre_lignes_lire))
-            {
-	       TIFFReadScanline(tif,buf_lec,lig,num);
-/*......................................
-               Sauvegarde des donnees lues entenant compte du pas 
-               d'echantillonnage en colonne
-  ........................................*/    
-               decal= ((*premiere_colonne-1)*mul*oct_pix)+val;   
-               deb=buf_lec+decal;
-               j=1;
-               while (j <= (*nombre_colonnes_lire))
-	       {  
-                  for (k=0;k<oct_pix;k=k+1)
-                  {
-                 	 *(pch+k)=*(deb+k);
-                  }
-                  pch=pch+oct_pix;
-                  j=j+1;
-                  deb=deb+((*pas_colonne)*oct_pix*mul);   
-               }   
-               i=i+1;
-               lig=lig+(long)(*pas_ligne);
-
-            } 
-        }
-        else  
-        {
-/*****************************************************************************/
-/* MOD : VERSION : 4.9 : DM :  Lecture d'une image sur 1 bit. Chaque bit est */
-/*  expensé sur un octet avant d'être renvoyé à l'appelant                   */
-/*****************************************************************************/
-
-          while (i<(*nombre_lignes_lire))
-            {
-	       TIFFReadScanline(tif,buf_lec,lig,num);
-/*......................................
-               Sauvegarde des donnees lues entenant compte du pas 
-               d'echantillonnage en colonne
-  ........................................*/   
-/*****************************************************************************/
-/* MOD : VERSION : 5.0 : FA :  Image 1bit  :prise en compte de la lecture de */
-/*  portion de lignes ou de sous-echantillonnage                             */
-/*****************************************************************************/
-/* se déplacer jusqu'au premier paquet octet concerné */
-               decal= (*premiere_colonne-1)/8;           
-               deb=buf_lec+decal;
-               j=0;
-               while (j < (*nombre_colonnes_lire))
-	       {  
-		  val1 = *(deb);
-		  if (j==0)
-                  {
-/* se déplacer jusqu'à la première colonne concernée */
-                      k = (*premiere_colonne -1) - (decal*8);
-                  }
-		  else
-		    k=k-8;
-                  while ((k<8)&&(j <(*nombre_colonnes_lire)))
-                  {
-                       *(pch+j) = val1 & Masque[7-k];
-                        if (*(pch+j) != 0) *(pch+j)=1;
-			k=k+(*pas_colonne);
-                        j=j+1;
-                  }
-                  deb=deb+1;   
-               }   
-/*****************************************************************************/
-/* MOD : VERSION : 5.1 : FA :  Image 1bit  :prise en compte de la lecture de */
-/*  l'image en entier                                                        */
-/*****************************************************************************/
-               pch=pch+(*nombre_colonnes_lire);
-/**********/
-/*FIN MOD */
-/**********/
-               i=i+1;
-               lig=lig+(long)(*pas_ligne);
-
-            } 
-        }
- 
-    	free(buf_lec);
-   }
-
-   return(iret);
-}
-/*
-  Fin de l'operation cai_lecture_canal_tiff
-*/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ecriture_canal_tiff                                    */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ecriture d'un canal d'une image tiff                 */
-/* -----    								     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL : CAI_OK_KO cai_ecriture_canal_tiff (image1, canal,      */       		      /* ------------------                                 premiere_ligne,        */
-/*                                                    nombre_lignes_ecrire,  */
-/*                                                    nombre_colonnes_ecrire,*/
-/*                 		                      data_image )           */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)   : pointeur sur descripteur de fichier */
-/*     canal                 (E) (int) : numero du canal a ecrire            */
-/*     premiere_ligne        (E) (int) : premiere ligne a ecrire ds l'image  */
-/*     nombre_lignes_ecrire  (E) (int) : nombre de lignes a ecrire           */
-/*     nombre_colonnes_ecrire(E) (int) : nombre de lignes a ecrire           */
-/*                                                                           */
-/*     data_image  (S) (unsigned char): tableau des pixels ecris alloue et   */
-/*                                      libere par l'appelant                */
-/*									     */
-/*     cai_ecriture_canal_tiff       (S) (CAI_OK_KO) : = CAI_KO si pb        */
-/*                                                     = CAI_OK si OK        */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-CAI_OK_KO cai_ecriture_canal_tiff(CAI_IMAGE *image1 ,  
-                                      int *canal ,           
-    		                      int *premiere_ligne  ,   
-                                      int *nombre_lignes_ecrire ,
-                                      int *nombre_colonnes_ecrire,
-		                      unsigned char *data_image ) 
-{
-int nboct_pix;			/* nombre d'octets par pixel              */
-unsigned int row,sample;	/* variables intermediaires               */
-int	i_ligne,lig;		/* compteur de lignes			  */
-unsigned char *buff_lig;	/* tableau contenant une ligne a ecrire   */
-TIFF *tif;			/* descriteur de fichier,issu de TIFFopen */
-int icr;
-
-/* ................
-   Initialisations 
-  .................*/
-
-i_ligne = 0;
-lig=(*premiere_ligne);
-tif = image1->ACCES_CANAL_TIFF[(*canal)-1];
-nboct_pix = image1->NBOCT_PIX;
-/********************************************************/
-/* TANT QUE il y a des lignes a ecrire                 	*/
-/********************************************************/
-while (i_ligne < (*nombre_lignes_ecrire))
-{
-
-/********************************************************/
-/*	extraction de la ligne du tableau 		*/
-/********************************************************/
-
-	buff_lig = data_image + (*nombre_colonnes_ecrire) * nboct_pix * i_ligne;
-
-/********************************************************/
-/*	ecriture de la ligne				*/
-/********************************************************/
-	row=(unsigned int)(lig);
-	row=row-1;
-	sample=(unsigned int)(*canal);
-	sample=sample-1;
-        icr=TIFFWriteScanline(tif,buff_lig,row,sample);
-/********************************************************/
-/*	incrementation du nombre de lignes		*/
-/********************************************************/
-        lig=lig+1;
-	i_ligne++;
-
-/********************************************************/
-/* FIN TANT QUE						*/
-/********************************************************/
-}
-return (CAI_OK);
-
-
-}
-/* 
-  Fin de l'operation cai_ecriture_canal_tiff
-*/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ferme_tiff                                             */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de fermeture d'une image au format tiff et de          */
-/* -----     tous les fichiers qui la composent 			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_ferme_tiff (image1)                     */       		      /* ------------------                                                        */
-/*									     */
-/*     image1      (E) (CAI_IMAGE *)  : pointeur sur descripteur de fichier  */
-/*									     */
-/*     cai_ferme_tiff       (S) (CAI_OK_KO) :   = CAI_KO si pb               */
-/*                                              = CAI_OK si OK               */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_ferme_tiff (CAI_IMAGE *image1)
-
-
-{
- int iret;       /* code retour de l'operation      */
- TIFF *num;	/* descripteur du fichier a fermer */
-
-
- iret=CAI_OK;
-/*.............................................
-   Fermeture de tous les canaux qui sont tous contenus
-   dans un seul fichier .srf
-  .............................................*/
-
-   num=image1->ACCES_CANAL_TIFF[0];
-   TIFFClose(num);
-
-  return (iret);
-}
-/*
-  Fin de l'operation cai_ferme_tiff
-*/
-
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_dest_ima_tiff                                          */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction de destruction d'une image stocke en onera et de       */
-/* -----     tous les fichiers qui la composent  			     */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :  CAI_OK_KO cai_dest_ima_tiff (format,nom_ima)          */       		      /* ------------------                                                        */
-/*     format       (E) (char *) : format de l'image a detruire              */
-/*     nom_image    (E) (char *) : nom de l'image a detruire avec repertoire */
-/*									     */
-/*     cai_dest_ima_tiff    (S) (CAI_OK_KO) : = CAI_KO si pb                 */
-/*                                            = CAI_OK si OK                 */ 
-/*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_OK_KO cai_dest_ima_tiff ( char *repertoire , 
-                       	      char *nom_ima )
-
-{
-
-char	nom_fichier[1024];	/* nom du fichier entete a detruire 	     */
-char    nom_ima_complet[1024];  /* repertoire + nom de l'image               */
-int	cr_stat;		/* code retour de fonction status de fichier */
-struct stat buf_stat;		/* structure decrivant status de fichier     */
-int     Mode,icr; 
-
-
-/************************************************/
-/* Constitution du nom du fichier d'entete	*/
-/************************************************/
-if ((long)strlen(repertoire)!= 0)
-{
-  sprintf ( nom_ima_complet, "%s/%s" ,repertoire,nom_ima);
-}
-else
-{
-  strcpy ( nom_ima_complet , nom_ima);
-}
-sprintf ( nom_fichier , "%s.tiff",nom_ima_complet );
-
-/* test sur l'existence avec .tiff sinon .tif */
- Mode = F_OK;
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
- icr = access(nom_fichier,Mode);
- if (icr !=0)
- {
-	nom_fichier[strlen(nom_fichier)-1]='\0';
-        icr = access(nom_fichier,Mode);
-        if (icr !=0)
-        {
-   	    if ((long int)strlen(repertoire)!=0)
-   	    {
-      		sprintf(nom_fichier,"%s/%s.TIF",repertoire,nom_ima_complet);
-   	    }
-   	    else
-   	    {
-      		sprintf(nom_fichier,"%s.TIF",nom_ima_complet);
-   	    }
-        }
- }
-
-/************************************************/
-/* Destruction du fichier TIFF   		*/
-/************************************************/
-cr_stat = stat ( nom_fichier , &buf_stat );
-if ( cr_stat == 0 )
-{
-	unlink ( nom_fichier );
-	return (CAI_OK);
-}
-else
-{
-   return (CAI_KO);
-}
-
-
-}
-/*
- Fin de l'operation cai_dest_ima_tiff
-*/
-/*****************************************************************************/
-/*                                                                           */
-/* OPERATION :    cai_ouvre_modifie_tiff                                     */
-/* ----------								     */
-/*                                                                           */
-/* ROLE :    fonction d'ouverture en lecture-ecriture d'une image au forma   */
-/* -----     tiff et de tous les fichiers qui la composent                   */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* CONTEXTE D'APPEL :   CAI_IMAGE *cai_ouvre_modifie_tiff (nom_image,        */
-/*  ---------------- 		                            nb_can,          */
-/*				                            nboct_pix,	     */	
-/*				                            nb_col,          */
-/*				                            nb_lig)          */
-/*     nom_image      (E) (char *) : nom de l'image a ouvrir avec repertoire */
-/*									     */
-/*     nb_can         (S) (int *)  : nombre de canaux de l'image             */
-/*     nboct_pix      (S) (int *)  : nombre d'octets par pixels (1 ou 2)     */
-/*     nb_lig         (S) (int *)  : nombre de lignes de l'image             */
-/*     nb_col         (S) (int *)  : nombre de colonnes de l'image           */
-/*                                                                           */
-/*     cai_ouvre_modifie_tiff    (S) (CAI_IMAGE *)  : = NULL si pb           */
-/*                                                    = structure contenant  */ 
-/*				toutes les informations necessaires au       */
-/*				traitement de l'image                        */   /*                                                                           */
-/* VERSION : V1                                                              */
-/* --------                                                                  */
-/*                                                                           */
-/*****************************************************************************/
-
-CAI_IMAGE *cai_ouvre_modifie_tiff(char *repert,
-				  char *nom_image,
-				  int  *nb_can,
-				  int  *nboct_pix,
-				  int  *nb_col,
-				  int  *nb_lig)
-
-{
-   TIFF *tif;		        /* pointeur sur descripteur de fichier      */
-   CAI_IMAGE *image1;	    	/* pointeur su descripteur de fichier image */ 
-   int  iret,icr;		/* indicateur de retour ok ou pas           */
-   char nom_fic[1024];		/* nom du fichier en-tete		    */
-   char *deb,*deb1;		/* pointeurs sur chaine de caracteres       */
-   int i,Coher;			/* indice 				    */
-   unsigned int  imagelength;   /* nombre de lignes de l'image              */
-   unsigned int  imagewidth;    /* nombre de colonnes de l'image	    */
-   short samplesperpixel;       /* nombre de canaux			    */
-   short compression;		/* indicateur de compression		    */
-   short photo;			/* indicateur de photometric interpretation */
-   short bitspersample;	        /* nombre de bits par pixels                */
-   int Istile;			/* indicateur de stockage en pave	    */
-   short sampleformat;		/* type de codage du pixel                  */
-   int Mode;
-   char Extension[6];
-
-/*........................................
-   INITIALISATION et allocation de place pour la structure CAI_IMAGE
-  .........................................*/
-   *nb_can=0;
-   *nb_lig=0;
-   *nb_col=0;
-   *nboct_pix=0;
-   iret=1;
-   Mode = F_OK;
-   icr = 0;
-   sprintf(Extension,".tiff");
-
-   image1 = (CAI_IMAGE *)calloc(1,sizeof(CAI_IMAGE));
-/*****************************************************************************/
-/* MOD : VERSION :4.1 :FA:Rajout des tests sur les retours d'allocation     */
-/*			   memoire                                           */
-/*****************************************************************************/
-
- if (image1==NULL)
- {
-     iret=0;
-     strcpy(CAI_ERREUR,"Erreur allocation memoirem dans cai_ouvre_modifie");
- }
- else
- {
-/*.................................................
-   Constitution du nom du fichier TIFF 
-   .................................................*/
-   nom_fic[0]='\0';
-   if ((long int)strlen(repert)!=0)
-   {
-	   sprintf(nom_fic,"%s%s.tiff",repert,nom_image);
-   }
-   else
-   {
-      sprintf(nom_fic,"%s.tiff",nom_image);
-   }
-
-/* test sur l'existence avec .tiff sinon .tif */
-/*****************************************************************************/
-/* MOD : VERSION : 4.3 : DM : prise en compte des  extensions en majuscule   */
-/*****************************************************************************/
-      icr = access(nom_fic,Mode);
-      if (icr !=0)
-      {
-	nom_fic[strlen(nom_fic)-1]='\0';
-        Extension[4]='\0';
-        icr = access(nom_fic,Mode);
-        if (icr !=0)
-        {
-   	    sprintf(Extension,".TIF");
-   	    if ((long int)strlen(repert)!=0)
-   	    {
-      		sprintf(nom_fic,"%s/%s%s",repert,nom_image,Extension);
-   	    }
-   	    else
-   	    {
-      		sprintf(nom_fic,"%s.%s",nom_image,Extension);
-   	    }
-        }
-      }
-
-/*........................
-    Ouverture du fichier entete
-  ..........................................*/
-/******************************************************************************/
-/* MOD : VERSION : 4.6 : FA : En ouverture en modification, ouverture en "r+" */
-/* au lieu de "w"                                                             */
-/******************************************************************************/
-
-    tif = TIFFOpen(nom_fic,"r+");
-    if (tif==NULL)
-    {
-      iret=0;
-      strcpy(CAI_ERREUR,"Erreur ouverture fichier tiff");
-     }
-    else
-    {
-/*..........................................................
-      verification si l'image n'est pas comprimee
-.............................................................*/
-      TIFFGetField(tif,TIFFTAG_COMPRESSION,&compression);
-      if (compression != COMPRESSION_NONE)
-      {  
-        iret=0;
-        strcpy(CAI_ERREUR,"Le fichier tiff est comprime. Format non traite !");
-       }
-       else
-       {
-          
-/*..........................................................
-        verification si le fichier n'est pas code en pave
-.............................................................*/
-        Istile=TIFFIsTiled(tif);
-        if (Istile!=0)
-         {  
-          iret=0;
-          strcpy(CAI_ERREUR,"Le fichier tiff est en paves . Format non traite !");
-         }
-         else
-          {
-/*....................................
-	  recuperation du nombre de colonnes 
-............................................*/
-	  TIFFGetField(tif,TIFFTAG_IMAGEWIDTH,&imagewidth);
-   	  *nb_col=imagewidth;
-/*....................................
-	  recuperation du nombre de lignes
-............................................*/
-          TIFFGetField(tif,TIFFTAG_IMAGELENGTH,&imagelength);
-	  *nb_lig=imagelength;
-
-/*......................................
-	  recuperation du nombre de canaux
-............................................*/
-	  TIFFGetFieldDefaulted(tif,TIFFTAG_SAMPLESPERPIXEL,&samplesperpixel);
-          *nb_can=samplesperpixel;
-/*.........................................
-	  recuperation du nombre d'octets par pixel
-  .................................................*/
-/* Nombre de bits par pixels */
-/*****************************/
-          TIFFGetField(tif,TIFFTAG_BITSPERSAMPLE,&bitspersample);
-          if ((bitspersample %8)==0)
-		*nboct_pix=(int)(bitspersample/8);
-          else
-		*nboct_pix=(int)((bitspersample/8)+1);
- /*.........................................
-	  recuperation du type de codage
-  .................................................*/
-/*****************************************************************************/
-/* MOD : VERSION : 5.0 : DM :  A l'ouverture d'une image en lecture, renvoie */
-/* de COD_PIX à I4 ou R4 pour les images codees en I4 ou R4                  */
-/*****************************************************************************/
-          TIFFGetField(tif,TIFFTAG_SAMPLEFORMAT,&sampleformat);
-
-/*****************************************************************************/
-/* MOD : VERSION : 5.2 : DM :  prise en compte des I2,I4,UI2,UI4 et R8       */
-/*                             en lecture et ecriture                        */
-/*****************************************************************************/
-	  Coher = 1;
-	  if (*nboct_pix==1)
-          {
-	    sprintf(image1->COD_PIX,"UOCT");
-	    if (sampleformat == SAMPLEFORMAT_INT) 
-		sprintf(image1->COD_PIX,"OCT");
-	    else if (sampleformat != SAMPLEFORMAT_UINT) 
-		Coher=0;
-          }
-	  else if (*nboct_pix==2) 
-          {
-	    sprintf(image1->COD_PIX,"UI2");
-	    if (sampleformat == SAMPLEFORMAT_INT) 
-		sprintf(image1->COD_PIX,"I2");
-	    else if (sampleformat != SAMPLEFORMAT_UINT) 
-		Coher=0;
-          }
-	  else if (*nboct_pix==4)
-          {
-	     sprintf(image1->COD_PIX,"I4");
-	     if (sampleformat == SAMPLEFORMAT_IEEEFP) 
-			sprintf(image1->COD_PIX,"R4");
-              else if (sampleformat == SAMPLEFORMAT_UINT)
-			sprintf(image1->COD_PIX,"UI4");
-              else if  (sampleformat != SAMPLEFORMAT_INT)
-		Coher=0;
-          }
-	  else if (*nboct_pix==8)
-          {
-	     sprintf(image1->COD_PIX,"R8");
-	     if (sampleformat != SAMPLEFORMAT_IEEEFP) 
-				Coher=0;
-	  }
-	  else
-		 sprintf(image1->COD_PIX,"UND");
-
-/*............................................*/
-/* Recuperation du type de codages des pixels */
-/*............................................*/
-	TIFFGetField(tif,TIFFTAG_PLANARCONFIG,&photo);
-
-/*...................................................
-          recuperation de l'indice de photometric interpretation
- ..............................................................*/
-	TIFFGetField(tif,TIFFTAG_PHOTOMETRIC,&photo);
-        if ((photo<0)&&(photo>3))
-         {
-	  iret=0;
-          strcpy(CAI_ERREUR,"Photometric non connue . Format non traite !");
-         }
-      
-        }
-       }
-      }
-     }
-     if (iret != 0)
-     {
-
-/*.......................................
-     INTIALISATION DES TABLEAUX CONTENANT LE NOM DE FICHIER
-      ET LE NOM UTILISATEUR DE CHAQUE CANAL
-  .....................................................*/
-
- 
-       deb = image1->NOM_FIC_CAN;
-       deb1= image1->NOM_UTIL_CAN;
-
-       for (i=0;i<*nb_can;i=i+1)
-       {
-   	   sprintf(deb,"%s%s",nom_image,Extension);
-  	   deb=deb+100;
-  	   sprintf(deb1,"%s%s",nom_image,Extension);
-           deb1=deb1+100;
-           image1->POS_OCTET[i]=0;
-           image1->ACCES_CANAL_TIFF[i]=tif;
-        }
-    	return (image1);
-      }
-      else  
-      {   
-        return(NULL);
-      }
-  
-}
-
-/* 
-   Fin de l'operation cai_ouvre_modifie_tiff
-*/
-- 
GitLab