summaryrefslogtreecommitdiff
path: root/imdi
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff-webhosting.net>2014-09-07 13:29:54 +0200
committerJörg Frings-Fürst <debian@jff-webhosting.net>2014-09-07 13:29:54 +0200
commita879b4e708b3e46c9697ba6581687eeb5b02a320 (patch)
treef85acc5cb1a7c0b03a050c879c20cab3deb9f40e /imdi
parent556dffcdad42b938bc196819aa463247de709765 (diff)
parentc07d0c2d2f6f7b0eb6e92cc6204bf05037957e82 (diff)
state from 2014-09-07 13:30 MESZ
Diffstat (limited to 'imdi')
-rw-r--r--imdi/Makefile.am40
-rw-r--r--imdi/cctiff.c497
-rw-r--r--imdi/imdi_k.h910
3 files changed, 270 insertions, 1177 deletions
diff --git a/imdi/Makefile.am b/imdi/Makefile.am
deleted file mode 100644
index 94ca112..0000000
--- a/imdi/Makefile.am
+++ /dev/null
@@ -1,40 +0,0 @@
-include $(top_srcdir)/Makefile.shared
-
-lib_LTLIBRARIES = libimdi.la
-
-LIBIMDI_VERSION=0.0
-
-libimdi_la_SOURCES = imdi.c imdi_tab.c imdi_arch.h imdi_gen.h imdi.h \
- imdi_tab.h imdi_utl.h refi.h imdi_k.h
-libimdi_la_LDFLAGS = -version $(shell echo $(LIBIMDI_VERSION) | tr . :):0
-
-include_HEADERS = imdi_arch.h imdi_gen.h imdi.h imdi_tab.h \
- imdi_utl.h refi.h
-
-bin_PROGRAMS = cctiff greytiff
-
-BINLDADD = ./libimdi.la ../spectro/libinsttypes.la ../plot/libvrml.la \
- ../xicc/libxicc.la ../xicc/libxutils.la ../gamut/libgamut.la \
- ../gamut/libgammap.la ../rspl/librspl.la $(ICC_LIBS) \
- ../cgats/libcgats.la ../numlib/libargyllnum.la ../libargyll.la \
- $(TIFF_LIBS) -ljpeg
-
-cctiff_LDADD = $(BINLDADD)
-greytiff_LDADD = $(BINLDADD)
-
-check_PROGRAMS = ctest
-
-ctest_SOURCES = ctest.c cgen.c
-
-noinst_PROGRAMS = imdi_make
-
-imdi_make_SOURCES = imdi_make.c imdi_gen.c cgen.c
-##imdi_make_CFLAGS = $(CFLAGS) -O
-
-BUILT_SOURCES = imdi_k.h
-
-imdi.c: imdi_k.h
-imdi_k.h: imdi_make
- ./imdi_make
-
-EXTRA_DIST = License.txt Readme.txt
diff --git a/imdi/cctiff.c b/imdi/cctiff.c
index 1f3eb9e..bb6ee0d 100644
--- a/imdi/cctiff.c
+++ b/imdi/cctiff.c
@@ -17,6 +17,10 @@
/* TTBD:
+ Should special case jpeg noop used to embed profile
+ in output, using jpeg_read_coefficients()/jpeg_write_coefficients()
+ rather than jpeg_start_decompress(), jpeg_read_scanlines() etc.
+
Should make -d option default to the last device
profile.
@@ -469,7 +473,7 @@ char **inknames /* Return ASCII inknames if non NULL */
return 0; /* Not CMYK */
case icSigCmykData:
if (inknames != NULL) {
- *inknames = NULL; /* No inknames */
+ *inknames = NULL; /* No inknames - it's coded */
*len = 0;
}
return INKSET_CMYK;
@@ -629,7 +633,7 @@ static void l2y_curve(double *out, double *in, int isXYZ) {
/* Callbacks used to initialise imdi */
-/* Information needed from a single profile */
+/* Information needed from a single profile or calibration */
struct _profinfo {
char name[MAXNAMEL+1];
icc *c; /* If non-NULL, ICC profile. */
@@ -984,6 +988,7 @@ main(int argc, char *argv[]) {
int alpha = 0; /* Use alpha for extra planes */
int ignoremm = 0; /* Ignore any colorspace mismatches */
int nodesc = 0; /* Don't append or set the description */
+ int copydct = 0; /* For jpeg->jpeg with no changes, copy DCT cooeficients */
int i, j, rv = 0;
/* TIFF file info */
@@ -1238,10 +1243,10 @@ main(int argc, char *argv[]) {
}
}
- /* The last two "profiles" are actually the input and output TIFF filenames */
+ /* The last two "profiles" are actually the input and output TIFF/JPEG filenames */
/* Unwind them */
if (su.nprofs < 2)
- usage("Not enough arguments to specify input and output TIFF files");
+ usage("Not enough arguments to specify input and output TIFF/JPEG files");
strncpy(out_name,su.profs[--su.nprofs].name, MAXNAMEL); out_name[MAXNAMEL] = '\000';
strncpy(in_name,su.profs[--su.nprofs].name, MAXNAMEL); in_name[MAXNAMEL] = '\000';
@@ -1250,13 +1255,13 @@ main(int argc, char *argv[]) {
su.lclut = su.last = su.nprofs-1;
if (check && (!doimdi || !dofloat))
- error("Can't do check unless both integera and float processing are enabled");
+ error("Can't do check unless both integeral and float processing are enabled");
/*
Logic required:
- Discover input TIFF colorspace and set as (ICC) "next_space"
+ Discover input TIFF/JPEG colorspace and set as (ICC) "next_space"
Set any special input space encoding transform (ie. device, Lab flavour)
For each profile:
@@ -1396,6 +1401,8 @@ main(int argc, char *argv[]) {
jpeg_stdio_src(&rj, rf);
jpeg_save_markers(&rj, JPEG_COM, 0xFFFF);
+ for (i = 0; i < 16; i++)
+ jpeg_save_markers(&rj, JPEG_APP0 + i, 0xFFFF);
/* we'll longjmp on error */
jpeg_read_header(&rj, TRUE);
@@ -1488,9 +1495,6 @@ main(int argc, char *argv[]) {
if (dojpg < 0)
dojpg = 1;
- /* ~~ Should determine deafult jpgq from tables of this file */
-
- jpeg_start_decompress(&rj);
}
@@ -1585,7 +1589,7 @@ main(int argc, char *argv[]) {
error("Last colorspace %s from file '%s' doesn't match input space %s of profile %s",
icm2str(icmColorSpaceSignature,last_colorspace),
last_cs_file,
- icm2str(icmColorSpaceSignature,su.profs[i].h->colorSpace),
+ icm2str(icmColorSpaceSignature,su.profs[i].ins),
su.profs[i].name);
last_dim = icmCSSig2nchan(su.profs[i].outs);
@@ -1680,10 +1684,13 @@ main(int argc, char *argv[]) {
if (no_pmtc > 1) { /* Need to choose a photometric */
if (ochoice < 1 || ochoice > no_pmtc ) {
- printf("Possible Output Encodings for output colorspace %s are:\n",
- icm2str(icmColorSpaceSignature,last_colorspace));
- for (i = 0; i < no_pmtc; i++)
- printf("%d: %s%s\n",i+1, Photometric2str(pmtc[i]), i == 0 ? " (Default)" : "");
+ if (su.verb) {
+ printf("Possible Output Encodings for output colorspace %s are:\n",
+ icm2str(icmColorSpaceSignature,last_colorspace));
+ for (i = 0; i < no_pmtc; i++)
+ printf("%d: %s%s\n",i+1, Photometric2str(pmtc[i]), i == 0 ? " (Default)" : "");
+ printf("Using default\n\n");
+ }
ochoice = 1;
}
wphotometric = pmtc[ochoice-1];
@@ -1710,13 +1717,14 @@ main(int argc, char *argv[]) {
int inlen;
char *inames = NULL;
- if (c == NULL
- || ((ct = (icmColorantTable *)c->read_tag(c, icSigColorantTableOutTag)) == NULL
- && (ct = (icmColorantTable *)c->read_tag(c, icSigColorantTableTag)) == NULL)
- || ct->count != wsamplesperpixel
+ iset = ColorSpaceSignature2TiffInkset(su.outs, &inlen, &inames);
+
+ /* Use ICC profile ink names if they are available */
+ if (c != NULL
+ && ((ct = (icmColorantTable *)c->read_tag(c, icSigColorantTableOutTag)) != NULL
+ || (ct = (icmColorantTable *)c->read_tag(c, icSigColorantTableTag)) != NULL)
+ && ct->count != wsamplesperpixel
) {
- iset = ColorSpaceSignature2TiffInkset(su.outs, &inlen, &inames);
- } else {
int i;
char *cp;
inlen = 0;
@@ -1732,11 +1740,12 @@ main(int argc, char *argv[]) {
cp += slen;
}
*cp = '\000';
- iset = INKSET_MULTIINK;
}
- if (iset != 0xffff && inlen > 0 && inames != NULL) {
+ if (iset != 0xffff) {
TIFFSetField(wh, TIFFTAG_INKSET, iset);
- if (inames != NULL) {
+ /* An inknames tage confuses Photoshop with standard spaces */
+ if ((iset == INKSET_MULTIINK || iset == 0) /* N color or CMY */
+ && inlen > 0 && inames != NULL) {
TIFFSetField(wh, TIFFTAG_INKNAMES, inlen, inames);
}
}
@@ -1834,87 +1843,12 @@ main(int argc, char *argv[]) {
if (wj.write_Adobe_marker)
su.oinv = 1;
-
- jpeg_start_compress(&wj, TRUE);
-
- /* Perhaps the description could be more informative ? */
- if (rdesc != NULL) {
- if ((wdesc = malloc(sizeof(char) * (strlen(rdesc) + strlen(ddesc) + 2))) == NULL)
- error("malloc failed on new desciption string");
-
- strcpy(wdesc, rdesc);
- if (nodesc == 0 && su.nprofs > 0) {
- strcat(wdesc, " ");
- strcat(wdesc, ddesc);
- }
- jpeg_write_marker(&wj, JPEG_COM, (const JOCTET *)wdesc, strlen(wdesc)+1);
- } else if (nodesc == 0 && su.nprofs > 0) {
- if ((wdesc = strdup(ddesc)) == NULL)
- error("malloc failed on new desciption string");
- jpeg_write_marker(&wj, JPEG_COM, (const JOCTET *)wdesc, strlen(wdesc)+1);
- }
}
/* - - - - - - - - - - - - - - - */
- /* Setup any destination embedded profile */
- if (dst_pname[0] != '\000') {
- icmFile *fp; /* Read fp for the profile */
- unsigned char *buf;
- int size;
-
- if ((deicc = read_embedded_icc(dst_pname)) == NULL)
- error("Unable to open profile for destination embedding '%s'",dst_pname);
-
- /* Check that it is compatible with the destination raster file */
- if (deicc->header->deviceClass != icSigColorSpaceClass
- && deicc->header->deviceClass != icSigInputClass
- && deicc->header->deviceClass != icSigDisplayClass
- && deicc->header->deviceClass != icSigOutputClass) {
- error("Destination embedded profile is wrong device class for embedding");
- }
-
- if (deicc->header->colorSpace != su.outs
- || (deicc->header->pcs != icSigXYZData
- && deicc->header->pcs != icSigLabData)) {
- error("Destination embedded profile colorspaces don't match TIFF");
- }
-
- if ((fp = deicc->get_rfp(deicc)) == NULL)
- error("Failed to be able to read destination embedded profile");
-
- if ((size = fp->get_size(fp)) == 0)
- error("Failed to be able to get size of destination embedded profile");
-
- if ((buf = malloc(size)) == NULL)
- error("malloc failed on destination embedded profile size %d",size);
-
- if (fp->seek(fp,0))
- error("rewind on destination embedded profile failed");
-
- if (fp->read(fp, buf, 1, size) != size)
- error("reading destination embedded profile failed");
-
- /* (For iccv4 we would now fp->del(fp) because we got a reference) */
-
- if (wh != NULL) {
- if (TIFFSetField(wh, TIFFTAG_ICCPROFILE, size, buf) == 0)
- error("setting TIFF embedded ICC profile field failed");
- } else {
- if (setjmp(jpeg_werr.env)) {
- jpeg_destroy_compress(&wj);
- error("setting JPEG embedded ICC profile marker failed");
- }
- write_icc_profile(&wj, buf, size);
- }
-
- free(buf);
- deicc->del(deicc);
- }
-
- /* - - - - - - - - - - - - - - - */
- if ((su.fclut <= su.lclut
- && (su.profs[su.fclut].natpcs == icSigXYZData) && (su.profs[su.fclut].alg == icmMatrixFwdType))
- || su.profs[su.fclut].ins == icSigXYZData) {
+ if (su.fclut <= su.lclut
+ && ((su.profs[su.fclut].natpcs == icSigXYZData && su.profs[su.fclut].alg == icmMatrixFwdType)
+ || su.profs[su.fclut].ins == icSigXYZData)) {
su.ilcurve = 1; /* Index CLUT with L* curve rather than Y */
}
@@ -1923,9 +1857,9 @@ main(int argc, char *argv[]) {
su.icombine = 1; /* CIE can't be conveyed through 0..1 domain lookup */
}
- if ((su.fclut <= su.lclut
- && (su.profs[su.lclut].natpcs == icSigXYZData && su.profs[su.lclut].alg == icmMatrixBwdType))
- || (su.profs[su.lclut].outs == icSigXYZData)) {
+ if (su.fclut <= su.lclut
+ && ((su.profs[su.lclut].natpcs == icSigXYZData && su.profs[su.lclut].alg == icmMatrixBwdType)
+ || su.profs[su.lclut].outs == icSigXYZData)) {
su.olcurve = 1; /* Interpolate in L* space rather than Y */
}
@@ -1933,6 +1867,11 @@ main(int argc, char *argv[]) {
su.ocombine = 1; /* CIE can't be conveyed through 0..1 domain lookup */
}
+ /* Decide if jpeg should decompress & compress */
+ if (rf != NULL && wf != NULL && su.nprofs == 0) {
+ copydct = 1;
+ }
+
/* - - - - - - - - - - - - - - - */
/* Report the connection sequence details */
@@ -1944,6 +1883,8 @@ main(int argc, char *argv[]) {
} else {
printf("Input raster file '%s' is JPEG\n",in_name);
printf("Input JPEG file original colorspace is %s\n",JPEG_cspace2str(rj.jpeg_color_space));
+ if (copydct)
+ printf("JPEG copy will be lossless\n");
}
printf("Input raster file ICC colorspace is %s\n",icm2str(icmColorSpaceSignature,su.ins));
printf("Input raster file is %d x %d pixels\n",su.width, su.height);
@@ -1953,6 +1894,7 @@ main(int argc, char *argv[]) {
printf("There are %d profiles/calibrations in the sequence:\n\n",su.nprofs);
+
for (i = su.first; i <= su.last; i++) {
if (su.profs[i].c != NULL) {
icmFile *op;
@@ -2119,164 +2061,251 @@ main(int argc, char *argv[]) {
}
}
+ /* NOTE :- the legal of jpeg calls is rather tricky.... */
- /* - - - - - - - - - - - - - - - */
- /* Process colors to translate */
- /* (Should fix this to process a group of lines at a time ?) */
+ if (!copydct) { /* Do this before writing description */
+ if (rf)
+ jpeg_start_decompress(&rj);
+ if (wf)
+ jpeg_start_compress(&wj, TRUE);
+ }
- for (y = 0; y < height; y++) {
- tdata_t *obuf;
+ if (wf != NULL) {
+ /* Perhaps the description could be more informative ? */
+ if (rdesc != NULL) {
+ if ((wdesc = malloc(sizeof(char) * (strlen(rdesc) + strlen(ddesc) + 2))) == NULL)
+ error("malloc failed on new desciption string");
+
+ strcpy(wdesc, rdesc);
+ if (nodesc == 0 && su.nprofs > 0) {
+ strcat(wdesc, " ");
+ strcat(wdesc, ddesc);
+ }
+ jpeg_write_marker(&wj, JPEG_COM, (const JOCTET *)wdesc, strlen(wdesc)+1);
+ } else if (nodesc == 0 && su.nprofs > 0) {
+ if ((wdesc = strdup(ddesc)) == NULL)
+ error("malloc failed on new desciption string");
+ jpeg_write_marker(&wj, JPEG_COM, (const JOCTET *)wdesc, strlen(wdesc)+1);
+ }
+ }
- /* Read in the next line */
- if (rh) {
- if (TIFFReadScanline(rh, inbuf, y, 0) < 0)
- error ("Failed to read TIFF line %d",y);
+ if (copydct) { /* Lossless JPEG copy - copy image data */
+ jvirt_barray_ptr *coefas;
+ jpeg_saved_marker_ptr marker;
+
+ coefas = jpeg_read_coefficients(&rj);
+ jpeg_copy_critical_parameters(&rj, &wj);
+ jpeg_write_coefficients(&wj, coefas);
+
+// We don't copy these normally.
+// for (marker = rj.marker_list; marker != NULL; marker = marker->next) {
+// jpeg_write_marker(&wj, marker->marker, marker->data, marker->data_length);
+ }
+
+ /* Setup any destination embedded profile */
+ if (dst_pname[0] != '\000') {
+ icmFile *fp; /* Read fp for the profile */
+ unsigned char *buf;
+ int size;
+
+ if ((deicc = read_embedded_icc(dst_pname)) == NULL)
+ error("Unable to open profile for destination embedding '%s'",dst_pname);
+
+ /* Check that it is compatible with the destination raster file */
+ if (deicc->header->deviceClass != icSigColorSpaceClass
+ && deicc->header->deviceClass != icSigInputClass
+ && deicc->header->deviceClass != icSigDisplayClass
+ && deicc->header->deviceClass != icSigOutputClass) {
+ error("Destination embedded profile is wrong device class for embedding");
+ }
+
+ if (deicc->header->colorSpace != su.outs
+ || (deicc->header->pcs != icSigXYZData
+ && deicc->header->pcs != icSigLabData)) {
+ error("Destination embedded profile colorspaces don't match TIFF");
+ }
+
+ if ((fp = deicc->get_rfp(deicc)) == NULL)
+ error("Failed to be able to read destination embedded profile");
+
+ if ((size = fp->get_size(fp)) == 0)
+ error("Failed to be able to get size of destination embedded profile");
+
+ if ((buf = malloc(size)) == NULL)
+ error("malloc failed on destination embedded profile size %d",size);
+
+ if (fp->seek(fp,0))
+ error("rewind on destination embedded profile failed");
+
+ if (fp->read(fp, buf, 1, size) != size)
+ error("reading destination embedded profile failed");
+
+ /* (For iccv4 we would now fp->del(fp) because we got a reference) */
+
+ if (wh != NULL) {
+ if (TIFFSetField(wh, TIFFTAG_ICCPROFILE, size, buf) == 0)
+ error("setting TIFF embedded ICC profile field failed");
} else {
- jpeg_read_scanlines(&rj, (JSAMPARRAY)&inbuf, 1);
- if (su.iinv) {
- unsigned char *cp, *ep = (unsigned char *)inbuf + inbpix;
- for (cp = (unsigned char *)inbuf; cp < ep; cp++)
- *cp = ~*cp;
+ if (setjmp(jpeg_werr.env)) {
+ jpeg_destroy_compress(&wj);
+ error("setting JPEG embedded ICC profile marker failed");
}
+ write_icc_profile(&wj, buf, size);
}
- if (doimdi && su.nprofs > 0) {
- /* Do fast conversion */
- s->interp(s, (void **)outp, 0, (void **)inp, su.id, width);
- }
-
- if (dofloat || su.nprofs == 0) {
- /* Do floating point conversion into the hprecbuf[] */
- for (x = 0; x < width; x++) {
- int i;
- double in[MAX_CHAN], out[MAX_CHAN];
-
+ free(buf);
+ deicc->del(deicc);
+ }
+
+ if (!copydct) {
+
+ /* We're not doing a lossless copy */
+
+
+ /* - - - - - - - - - - - - - - - */
+ /* Process colors to translate */
+ /* (Should fix this to process a group of lines at a time ?) */
+
+ for (y = 0; y < height; y++) {
+ tdata_t *obuf;
+
+ /* Read in the next line */
+ if (rh) {
+ if (TIFFReadScanline(rh, inbuf, y, 0) < 0)
+ error ("Failed to read TIFF line %d",y);
+ } else {
+ jpeg_read_scanlines(&rj, (JSAMPARRAY)&inbuf, 1);
+ if (su.iinv) {
+ unsigned char *cp, *ep = (unsigned char *)inbuf + inbpix;
+ for (cp = (unsigned char *)inbuf; cp < ep; cp++)
+ *cp = ~*cp;
+ }
+ }
+
+ if (doimdi && su.nprofs > 0) {
+ /* Do fast conversion */
+ s->interp(s, (void **)outp, 0, (void **)inp, su.id, width);
+ }
+
+ if (dofloat || su.nprofs == 0) {
+ /* Do floating point conversion into the hprecbuf[] */
+ for (x = 0; x < width; x++) {
+ int i;
+ double in[MAX_CHAN], out[MAX_CHAN];
+
//printf("\n");
- if (bitspersample == 8) {
- for (i = 0; i < su.id; i++) {
- int v = ((unsigned char *)inbuf)[x * su.id + i];
+ if (bitspersample == 8) {
+ for (i = 0; i < su.id; i++) {
+ int v = ((unsigned char *)inbuf)[x * su.id + i];
//printf("~1 8 bit pixel value chan %d = %d\n",i,v);
- if (su.isign_mask & (1 << i)) /* Treat input as signed */
- v = (v & 0x80) ? v - 0x80 : v + 0x80;
+ if (su.isign_mask & (1 << i)) /* Treat input as signed */
+ v = (v & 0x80) ? v - 0x80 : v + 0x80;
//printf("~1 8 bit after treat as signed chan %d = %d\n",i,v);
- in[i] = v/255.0;
+ in[i] = v/255.0;
//printf("~1 8 bit fp chan %d value = %f\n",i,in[i]);
- }
- } else {
- for (i = 0; i < su.id; i++) {
- int v = ((unsigned short *)inbuf)[x * su.id + i];
+ }
+ } else {
+ for (i = 0; i < su.id; i++) {
+ int v = ((unsigned short *)inbuf)[x * su.id + i];
//printf("~1 16 bit pixel value chan %d = %d\n",i,v);
- if (su.isign_mask & (1 << i)) /* Treat input as signed */
- v = (v & 0x8000) ? v - 0x8000 : v + 0x8000;
+ if (su.isign_mask & (1 << i)) /* Treat input as signed */
+ v = (v & 0x8000) ? v - 0x8000 : v + 0x8000;
//printf("~1 16 bit after treat as signed chan %d = %d\n",i,v);
- in[i] = v/65535.0;
+ in[i] = v/65535.0;
//printf("~1 16 bit fp chan %d value = %f\n",i,in[i]);
+ }
}
- }
- if (su.nprofs > 0) {
- /* Apply the reference conversion */
- input_curves((void *)&su, out, in);
+ if (su.nprofs > 0) {
+ /* Apply the reference conversion */
+ input_curves((void *)&su, out, in);
//for (i = 0; i < su.id; i++) printf("~1 after input curve chan %d = %f\n",i,out[i]);
- md_table((void *)&su, out, out);
+ md_table((void *)&su, out, out);
//for (i = 0; i < su.od; i++) printf("~1 after md table chan %d = %f\n",i,out[i]);
- output_curves((void *)&su, out, out);
+ output_curves((void *)&su, out, out);
//for (i = 0; i < su.od; i++) printf("~1 after output curve chan %d = %f\n",i,out[i]);
- } else {
- for (i = 0; i < su.od; i++)
- out[i] = in[i];
- }
+ } else {
+ for (i = 0; i < su.od; i++)
+ out[i] = in[i];
+ }
- if (bitspersample == 8) {
- for (i = 0; i < su.od; i++) {
- int v = (int)(out[i] * 255.0 + 0.5);
+ if (bitspersample == 8) {
+ for (i = 0; i < su.od; i++) {
+ int v = (int)(out[i] * 255.0 + 0.5);
//printf("~1 8 bit chan %d = %d\n",i,v);
- if (v < 0)
- v = 0;
- else if (v > 255)
- v = 255;
+ if (v < 0)
+ v = 0;
+ else if (v > 255)
+ v = 255;
//printf("~1 8 bit after clip curve chan %d = %d\n",i,v);
- if (su.osign_mask & (1 << i)) /* Treat input as offset */
- v = (v & 0x80) ? v - 0x80 : v + 0x80;
+ if (su.osign_mask & (1 << i)) /* Treat input as offset */
+ v = (v & 0x80) ? v - 0x80 : v + 0x80;
//printf("~1 8 bit after treat as offset chan %d = %d\n",i,v);
- ((unsigned char *)hprecbuf)[x * su.od + i] = v;
- }
- } else {
- for (i = 0; i < su.od; i++) {
- int v = (int)(out[i] * 65535.0 + 0.5);
+ ((unsigned char *)hprecbuf)[x * su.od + i] = v;
+ }
+ } else {
+ for (i = 0; i < su.od; i++) {
+ int v = (int)(out[i] * 65535.0 + 0.5);
//printf("~1 16 bit chan %d = %d\n",i,v);
- if (v < 0)
- v = 0;
- else if (v > 65535)
- v = 65535;
+ if (v < 0)
+ v = 0;
+ else if (v > 65535)
+ v = 65535;
//printf("~1 16 bit after clip curve chan %d = %d\n",i,v);
- if (su.osign_mask & (1 << i)) /* Treat input as offset */
- v = (v & 0x8000) ? v - 0x8000 : v + 0x8000;
+ if (su.osign_mask & (1 << i)) /* Treat input as offset */
+ v = (v & 0x8000) ? v - 0x8000 : v + 0x8000;
//printf("~1 16 bit after treat as offset chan %d = %d\n",i,v);
- ((unsigned short *)hprecbuf)[x * su.od + i] = v;
+ ((unsigned short *)hprecbuf)[x * su.od + i] = v;
+ }
}
}
- }
- if (check) {
- /* Compute the errors */
- for (x = 0; x < (width * su.od); x++) {
- int err;
- if (bitspersample == 8)
- err = ((unsigned char *)outbuf)[x] - ((unsigned char *)hprecbuf)[x];
- else
- err = ((unsigned short *)outbuf)[x] - ((unsigned short *)hprecbuf)[x];
- if (err < 0)
- err = -err;
- if (err > mxerr)
- mxerr = err;
- avgerr += (double)err;
- avgcount++;
+ if (check) {
+ /* Compute the errors */
+ for (x = 0; x < (width * su.od); x++) {
+ int err;
+ if (bitspersample == 8)
+ err = ((unsigned char *)outbuf)[x] - ((unsigned char *)hprecbuf)[x];
+ else
+ err = ((unsigned short *)outbuf)[x] - ((unsigned short *)hprecbuf)[x];
+ if (err < 0)
+ err = -err;
+ if (err > mxerr)
+ mxerr = err;
+ avgerr += (double)err;
+ avgcount++;
+ }
}
}
- }
-
- if (dofloat || su.nprofs == 0) /* Use the results of the f.p. conversion */
- obuf = hprecbuf;
- else
- obuf = outbuf;
-
- if (wh != NULL) {
- if (TIFFWriteScanline(wh, obuf, y, 0) < 0)
- error ("Failed to write TIFF line %d",y);
- } else {
- if (su.oinv) {
- unsigned char *cp, *ep = (unsigned char *)obuf + outbpix;
- for (cp = (unsigned char *)obuf; cp < ep; cp++)
- *cp = ~(*cp);
+
+ if (dofloat || su.nprofs == 0) /* Use the results of the f.p. conversion */
+ obuf = hprecbuf;
+ else
+ obuf = outbuf;
+
+ if (wh != NULL) {
+ if (TIFFWriteScanline(wh, obuf, y, 0) < 0)
+ error ("Failed to write TIFF line %d",y);
+ } else {
+ if (su.oinv) {
+ unsigned char *cp, *ep = (unsigned char *)obuf + outbpix;
+ for (cp = (unsigned char *)obuf; cp < ep; cp++)
+ *cp = ~(*cp);
+ }
+ jpeg_write_scanlines(&wj, (JSAMPARRAY)&obuf, 1);
}
- jpeg_write_scanlines(&wj, (JSAMPARRAY)&obuf, 1);
}
- }
-
- if (check) {
- printf("Worst error = %d bits, average error = %f bits\n", mxerr, avgerr/avgcount);
- if (bitspersample == 8)
- printf("Worst error = %f%%, average error = %f%%\n",
- mxerr/2.55, avgerr/(2.55 * avgcount));
- else
- printf("Worst error = %f%%, average error = %f%%\n",
- mxerr/655.35, avgerr/(655.35 * avgcount));
- }
+ if (check) {
+ printf("Worst error = %d bits, average error = %f bits\n", mxerr, avgerr/avgcount);
+ if (bitspersample == 8)
+ printf("Worst error = %f%%, average error = %f%%\n",
+ mxerr/2.55, avgerr/(2.55 * avgcount));
+ else
+ printf("Worst error = %f%%, average error = %f%%\n",
+ mxerr/655.35, avgerr/(655.35 * avgcount));
+ }
- /* Release buffers and close files */
- if (rh != NULL) {
- if (inbuf != NULL)
- _TIFFfree(inbuf);
- TIFFClose(rh); /* Close Input file */
- } else {
- jpeg_finish_decompress(&rj);
- jpeg_destroy_decompress(&rj);
- if (inbuf != NULL)
- free(inbuf);
- if (fclose(rf))
- error("Error closing JPEG input file '%s'\n",in_name);
}
if (wh != NULL) {
@@ -2296,6 +2325,20 @@ main(int argc, char *argv[]) {
error("Error closing output file '%s'\n",out_name);
}
+ /* Release buffers and close files */
+ if (rh != NULL) {
+ if (inbuf != NULL)
+ _TIFFfree(inbuf);
+ TIFFClose(rh); /* Close Input file */
+ } else {
+ jpeg_finish_decompress(&rj);
+ jpeg_destroy_decompress(&rj);
+ if (inbuf != NULL)
+ free(inbuf);
+ if (fclose(rf))
+ error("Error closing JPEG input file '%s'\n",in_name);
+ }
+
/* Done with lookup object */
if (s != NULL)
s->del(s);
diff --git a/imdi/imdi_k.h b/imdi/imdi_k.h
deleted file mode 100644
index 79f60d5..0000000
--- a/imdi/imdi_k.h
+++ /dev/null
@@ -1,910 +0,0 @@
-/* Integer Multi-Dimensional Interpolation */
-/* Declarations for all the generated kernel functions */
-/* This file is generated by imdi_make */
-
-/* Copyright 2000 - 2007 Graeme W. Gill */
-/* All rights reserved. */
-/* This material is licensed under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3 :- */
-/* see the License.txt file for licensing details.*/
-
-#include "imdi_k.c" /* All the kernel code */
-
-struct {
- void (*interp)(imdi *s, void **outp, int ostride, void **inp, int istride, unsigned int npix);
- void (*gentab)(genspec *g, tabspec *t);
-} ktable[891] = {
- { imdi_k1, imdi_k1_gentab },
- { imdi_k2, imdi_k2_gentab },
- { imdi_k3, imdi_k3_gentab },
- { imdi_k4, imdi_k4_gentab },
- { imdi_k5, imdi_k5_gentab },
- { imdi_k6, imdi_k6_gentab },
- { imdi_k7, imdi_k7_gentab },
- { imdi_k8, imdi_k8_gentab },
- { imdi_k9, imdi_k9_gentab },
- { imdi_k10, imdi_k10_gentab },
- { imdi_k11, imdi_k11_gentab },
- { imdi_k12, imdi_k12_gentab },
- { imdi_k13, imdi_k13_gentab },
- { imdi_k14, imdi_k14_gentab },
- { imdi_k15, imdi_k15_gentab },
- { imdi_k16, imdi_k16_gentab },
- { imdi_k17, imdi_k17_gentab },
- { imdi_k18, imdi_k18_gentab },
- { imdi_k19, imdi_k19_gentab },
- { imdi_k20, imdi_k20_gentab },
- { imdi_k21, imdi_k21_gentab },
- { imdi_k22, imdi_k22_gentab },
- { imdi_k23, imdi_k23_gentab },
- { imdi_k24, imdi_k24_gentab },
- { imdi_k25, imdi_k25_gentab },
- { imdi_k26, imdi_k26_gentab },
- { imdi_k27, imdi_k27_gentab },
- { imdi_k28, imdi_k28_gentab },
- { imdi_k29, imdi_k29_gentab },
- { imdi_k30, imdi_k30_gentab },
- { imdi_k31, imdi_k31_gentab },
- { imdi_k32, imdi_k32_gentab },
- { imdi_k33, imdi_k33_gentab },
- { imdi_k34, imdi_k34_gentab },
- { imdi_k35, imdi_k35_gentab },
- { imdi_k36, imdi_k36_gentab },
- { imdi_k37, imdi_k37_gentab },
- { imdi_k38, imdi_k38_gentab },
- { imdi_k39, imdi_k39_gentab },
- { imdi_k40, imdi_k40_gentab },
- { imdi_k41, imdi_k41_gentab },
- { imdi_k42, imdi_k42_gentab },
- { imdi_k43, imdi_k43_gentab },
- { imdi_k44, imdi_k44_gentab },
- { imdi_k45, imdi_k45_gentab },
- { imdi_k46, imdi_k46_gentab },
- { imdi_k47, imdi_k47_gentab },
- { imdi_k48, imdi_k48_gentab },
- { imdi_k49, imdi_k49_gentab },
- { imdi_k50, imdi_k50_gentab },
- { imdi_k51, imdi_k51_gentab },
- { imdi_k52, imdi_k52_gentab },
- { imdi_k53, imdi_k53_gentab },
- { imdi_k54, imdi_k54_gentab },
- { imdi_k55, imdi_k55_gentab },
- { imdi_k56, imdi_k56_gentab },
- { imdi_k57, imdi_k57_gentab },
- { imdi_k58, imdi_k58_gentab },
- { imdi_k59, imdi_k59_gentab },
- { imdi_k60, imdi_k60_gentab },
- { imdi_k61, imdi_k61_gentab },
- { imdi_k62, imdi_k62_gentab },
- { imdi_k63, imdi_k63_gentab },
- { imdi_k64, imdi_k64_gentab },
- { imdi_k65, imdi_k65_gentab },
- { imdi_k66, imdi_k66_gentab },
- { imdi_k67, imdi_k67_gentab },
- { imdi_k68, imdi_k68_gentab },
- { imdi_k69, imdi_k69_gentab },
- { imdi_k70, imdi_k70_gentab },
- { imdi_k71, imdi_k71_gentab },
- { imdi_k72, imdi_k72_gentab },
- { imdi_k73, imdi_k73_gentab },
- { imdi_k74, imdi_k74_gentab },
- { imdi_k75, imdi_k75_gentab },
- { imdi_k76, imdi_k76_gentab },
- { imdi_k77, imdi_k77_gentab },
- { imdi_k78, imdi_k78_gentab },
- { imdi_k79, imdi_k79_gentab },
- { imdi_k80, imdi_k80_gentab },
- { imdi_k81, imdi_k81_gentab },
- { imdi_k82, imdi_k82_gentab },
- { imdi_k83, imdi_k83_gentab },
- { imdi_k84, imdi_k84_gentab },
- { imdi_k85, imdi_k85_gentab },
- { imdi_k86, imdi_k86_gentab },
- { imdi_k87, imdi_k87_gentab },
- { imdi_k88, imdi_k88_gentab },
- { imdi_k89, imdi_k89_gentab },
- { imdi_k90, imdi_k90_gentab },
- { imdi_k91, imdi_k91_gentab },
- { imdi_k92, imdi_k92_gentab },
- { imdi_k93, imdi_k93_gentab },
- { imdi_k94, imdi_k94_gentab },
- { imdi_k95, imdi_k95_gentab },
- { imdi_k96, imdi_k96_gentab },
- { imdi_k97, imdi_k97_gentab },
- { imdi_k98, imdi_k98_gentab },
- { imdi_k99, imdi_k99_gentab },
- { imdi_k100, imdi_k100_gentab },
- { imdi_k101, imdi_k101_gentab },
- { imdi_k102, imdi_k102_gentab },
- { imdi_k103, imdi_k103_gentab },
- { imdi_k104, imdi_k104_gentab },
- { imdi_k105, imdi_k105_gentab },
- { imdi_k106, imdi_k106_gentab },
- { imdi_k107, imdi_k107_gentab },
- { imdi_k108, imdi_k108_gentab },
- { imdi_k109, imdi_k109_gentab },
- { imdi_k110, imdi_k110_gentab },
- { imdi_k111, imdi_k111_gentab },
- { imdi_k112, imdi_k112_gentab },
- { imdi_k113, imdi_k113_gentab },
- { imdi_k114, imdi_k114_gentab },
- { imdi_k115, imdi_k115_gentab },
- { imdi_k116, imdi_k116_gentab },
- { imdi_k117, imdi_k117_gentab },
- { imdi_k118, imdi_k118_gentab },
- { imdi_k119, imdi_k119_gentab },
- { imdi_k120, imdi_k120_gentab },
- { imdi_k121, imdi_k121_gentab },
- { imdi_k122, imdi_k122_gentab },
- { imdi_k123, imdi_k123_gentab },
- { imdi_k124, imdi_k124_gentab },
- { imdi_k125, imdi_k125_gentab },
- { imdi_k126, imdi_k126_gentab },
- { imdi_k127, imdi_k127_gentab },
- { imdi_k128, imdi_k128_gentab },
- { imdi_k129, imdi_k129_gentab },
- { imdi_k130, imdi_k130_gentab },
- { imdi_k131, imdi_k131_gentab },
- { imdi_k132, imdi_k132_gentab },
- { imdi_k133, imdi_k133_gentab },
- { imdi_k134, imdi_k134_gentab },
- { imdi_k135, imdi_k135_gentab },
- { imdi_k136, imdi_k136_gentab },
- { imdi_k137, imdi_k137_gentab },
- { imdi_k138, imdi_k138_gentab },
- { imdi_k139, imdi_k139_gentab },
- { imdi_k140, imdi_k140_gentab },
- { imdi_k141, imdi_k141_gentab },
- { imdi_k142, imdi_k142_gentab },
- { imdi_k143, imdi_k143_gentab },
- { imdi_k144, imdi_k144_gentab },
- { imdi_k145, imdi_k145_gentab },
- { imdi_k146, imdi_k146_gentab },
- { imdi_k147, imdi_k147_gentab },
- { imdi_k148, imdi_k148_gentab },
- { imdi_k149, imdi_k149_gentab },
- { imdi_k150, imdi_k150_gentab },
- { imdi_k151, imdi_k151_gentab },
- { imdi_k152, imdi_k152_gentab },
- { imdi_k153, imdi_k153_gentab },
- { imdi_k154, imdi_k154_gentab },
- { imdi_k155, imdi_k155_gentab },
- { imdi_k156, imdi_k156_gentab },
- { imdi_k157, imdi_k157_gentab },
- { imdi_k158, imdi_k158_gentab },
- { imdi_k159, imdi_k159_gentab },
- { imdi_k160, imdi_k160_gentab },
- { imdi_k161, imdi_k161_gentab },
- { imdi_k162, imdi_k162_gentab },
- { imdi_k163, imdi_k163_gentab },
- { imdi_k164, imdi_k164_gentab },
- { imdi_k165, imdi_k165_gentab },
- { imdi_k166, imdi_k166_gentab },
- { imdi_k167, imdi_k167_gentab },
- { imdi_k168, imdi_k168_gentab },
- { imdi_k169, imdi_k169_gentab },
- { imdi_k170, imdi_k170_gentab },
- { imdi_k171, imdi_k171_gentab },
- { imdi_k172, imdi_k172_gentab },
- { imdi_k173, imdi_k173_gentab },
- { imdi_k174, imdi_k174_gentab },
- { imdi_k175, imdi_k175_gentab },
- { imdi_k176, imdi_k176_gentab },
- { imdi_k177, imdi_k177_gentab },
- { imdi_k178, imdi_k178_gentab },
- { imdi_k179, imdi_k179_gentab },
- { imdi_k180, imdi_k180_gentab },
- { imdi_k181, imdi_k181_gentab },
- { imdi_k182, imdi_k182_gentab },
- { imdi_k183, imdi_k183_gentab },
- { imdi_k184, imdi_k184_gentab },
- { imdi_k185, imdi_k185_gentab },
- { imdi_k186, imdi_k186_gentab },
- { imdi_k187, imdi_k187_gentab },
- { imdi_k188, imdi_k188_gentab },
- { imdi_k189, imdi_k189_gentab },
- { imdi_k190, imdi_k190_gentab },
- { imdi_k191, imdi_k191_gentab },
- { imdi_k192, imdi_k192_gentab },
- { imdi_k193, imdi_k193_gentab },
- { imdi_k194, imdi_k194_gentab },
- { imdi_k195, imdi_k195_gentab },
- { imdi_k196, imdi_k196_gentab },
- { imdi_k197, imdi_k197_gentab },
- { imdi_k198, imdi_k198_gentab },
- { imdi_k199, imdi_k199_gentab },
- { imdi_k200, imdi_k200_gentab },
- { imdi_k201, imdi_k201_gentab },
- { imdi_k202, imdi_k202_gentab },
- { imdi_k203, imdi_k203_gentab },
- { imdi_k204, imdi_k204_gentab },
- { imdi_k205, imdi_k205_gentab },
- { imdi_k206, imdi_k206_gentab },
- { imdi_k207, imdi_k207_gentab },
- { imdi_k208, imdi_k208_gentab },
- { imdi_k209, imdi_k209_gentab },
- { imdi_k210, imdi_k210_gentab },
- { imdi_k211, imdi_k211_gentab },
- { imdi_k212, imdi_k212_gentab },
- { imdi_k213, imdi_k213_gentab },
- { imdi_k214, imdi_k214_gentab },
- { imdi_k215, imdi_k215_gentab },
- { imdi_k216, imdi_k216_gentab },
- { imdi_k217, imdi_k217_gentab },
- { imdi_k218, imdi_k218_gentab },
- { imdi_k219, imdi_k219_gentab },
- { imdi_k220, imdi_k220_gentab },
- { imdi_k221, imdi_k221_gentab },
- { imdi_k222, imdi_k222_gentab },
- { imdi_k223, imdi_k223_gentab },
- { imdi_k224, imdi_k224_gentab },
- { imdi_k225, imdi_k225_gentab },
- { imdi_k226, imdi_k226_gentab },
- { imdi_k227, imdi_k227_gentab },
- { imdi_k228, imdi_k228_gentab },
- { imdi_k229, imdi_k229_gentab },
- { imdi_k230, imdi_k230_gentab },
- { imdi_k231, imdi_k231_gentab },
- { imdi_k232, imdi_k232_gentab },
- { imdi_k233, imdi_k233_gentab },
- { imdi_k234, imdi_k234_gentab },
- { imdi_k235, imdi_k235_gentab },
- { imdi_k236, imdi_k236_gentab },
- { imdi_k237, imdi_k237_gentab },
- { imdi_k238, imdi_k238_gentab },
- { imdi_k239, imdi_k239_gentab },
- { imdi_k240, imdi_k240_gentab },
- { imdi_k241, imdi_k241_gentab },
- { imdi_k242, imdi_k242_gentab },
- { imdi_k243, imdi_k243_gentab },
- { imdi_k244, imdi_k244_gentab },
- { imdi_k245, imdi_k245_gentab },
- { imdi_k246, imdi_k246_gentab },
- { imdi_k247, imdi_k247_gentab },
- { imdi_k248, imdi_k248_gentab },
- { imdi_k249, imdi_k249_gentab },
- { imdi_k250, imdi_k250_gentab },
- { imdi_k251, imdi_k251_gentab },
- { imdi_k252, imdi_k252_gentab },
- { imdi_k253, imdi_k253_gentab },
- { imdi_k254, imdi_k254_gentab },
- { imdi_k255, imdi_k255_gentab },
- { imdi_k256, imdi_k256_gentab },
- { imdi_k257, imdi_k257_gentab },
- { imdi_k258, imdi_k258_gentab },
- { imdi_k259, imdi_k259_gentab },
- { imdi_k260, imdi_k260_gentab },
- { imdi_k261, imdi_k261_gentab },
- { imdi_k262, imdi_k262_gentab },
- { imdi_k263, imdi_k263_gentab },
- { imdi_k264, imdi_k264_gentab },
- { imdi_k265, imdi_k265_gentab },
- { imdi_k266, imdi_k266_gentab },
- { imdi_k267, imdi_k267_gentab },
- { imdi_k268, imdi_k268_gentab },
- { imdi_k269, imdi_k269_gentab },
- { imdi_k270, imdi_k270_gentab },
- { imdi_k271, imdi_k271_gentab },
- { imdi_k272, imdi_k272_gentab },
- { imdi_k273, imdi_k273_gentab },
- { imdi_k274, imdi_k274_gentab },
- { imdi_k275, imdi_k275_gentab },
- { imdi_k276, imdi_k276_gentab },
- { imdi_k277, imdi_k277_gentab },
- { imdi_k278, imdi_k278_gentab },
- { imdi_k279, imdi_k279_gentab },
- { imdi_k280, imdi_k280_gentab },
- { imdi_k281, imdi_k281_gentab },
- { imdi_k282, imdi_k282_gentab },
- { imdi_k283, imdi_k283_gentab },
- { imdi_k284, imdi_k284_gentab },
- { imdi_k285, imdi_k285_gentab },
- { imdi_k286, imdi_k286_gentab },
- { imdi_k287, imdi_k287_gentab },
- { imdi_k288, imdi_k288_gentab },
- { imdi_k289, imdi_k289_gentab },
- { imdi_k290, imdi_k290_gentab },
- { imdi_k291, imdi_k291_gentab },
- { imdi_k292, imdi_k292_gentab },
- { imdi_k293, imdi_k293_gentab },
- { imdi_k294, imdi_k294_gentab },
- { imdi_k295, imdi_k295_gentab },
- { imdi_k296, imdi_k296_gentab },
- { imdi_k297, imdi_k297_gentab },
- { imdi_k298, imdi_k298_gentab },
- { imdi_k299, imdi_k299_gentab },
- { imdi_k300, imdi_k300_gentab },
- { imdi_k301, imdi_k301_gentab },
- { imdi_k302, imdi_k302_gentab },
- { imdi_k303, imdi_k303_gentab },
- { imdi_k304, imdi_k304_gentab },
- { imdi_k305, imdi_k305_gentab },
- { imdi_k306, imdi_k306_gentab },
- { imdi_k307, imdi_k307_gentab },
- { imdi_k308, imdi_k308_gentab },
- { imdi_k309, imdi_k309_gentab },
- { imdi_k310, imdi_k310_gentab },
- { imdi_k311, imdi_k311_gentab },
- { imdi_k312, imdi_k312_gentab },
- { imdi_k313, imdi_k313_gentab },
- { imdi_k314, imdi_k314_gentab },
- { imdi_k315, imdi_k315_gentab },
- { imdi_k316, imdi_k316_gentab },
- { imdi_k317, imdi_k317_gentab },
- { imdi_k318, imdi_k318_gentab },
- { imdi_k319, imdi_k319_gentab },
- { imdi_k320, imdi_k320_gentab },
- { imdi_k321, imdi_k321_gentab },
- { imdi_k322, imdi_k322_gentab },
- { imdi_k323, imdi_k323_gentab },
- { imdi_k324, imdi_k324_gentab },
- { imdi_k325, imdi_k325_gentab },
- { imdi_k326, imdi_k326_gentab },
- { imdi_k327, imdi_k327_gentab },
- { imdi_k328, imdi_k328_gentab },
- { imdi_k329, imdi_k329_gentab },
- { imdi_k330, imdi_k330_gentab },
- { imdi_k331, imdi_k331_gentab },
- { imdi_k332, imdi_k332_gentab },
- { imdi_k333, imdi_k333_gentab },
- { imdi_k334, imdi_k334_gentab },
- { imdi_k335, imdi_k335_gentab },
- { imdi_k336, imdi_k336_gentab },
- { imdi_k337, imdi_k337_gentab },
- { imdi_k338, imdi_k338_gentab },
- { imdi_k339, imdi_k339_gentab },
- { imdi_k340, imdi_k340_gentab },
- { imdi_k341, imdi_k341_gentab },
- { imdi_k342, imdi_k342_gentab },
- { imdi_k343, imdi_k343_gentab },
- { imdi_k344, imdi_k344_gentab },
- { imdi_k345, imdi_k345_gentab },
- { imdi_k346, imdi_k346_gentab },
- { imdi_k347, imdi_k347_gentab },
- { imdi_k348, imdi_k348_gentab },
- { imdi_k349, imdi_k349_gentab },
- { imdi_k350, imdi_k350_gentab },
- { imdi_k351, imdi_k351_gentab },
- { imdi_k352, imdi_k352_gentab },
- { imdi_k353, imdi_k353_gentab },
- { imdi_k354, imdi_k354_gentab },
- { imdi_k355, imdi_k355_gentab },
- { imdi_k356, imdi_k356_gentab },
- { imdi_k357, imdi_k357_gentab },
- { imdi_k358, imdi_k358_gentab },
- { imdi_k359, imdi_k359_gentab },
- { imdi_k360, imdi_k360_gentab },
- { imdi_k361, imdi_k361_gentab },
- { imdi_k362, imdi_k362_gentab },
- { imdi_k363, imdi_k363_gentab },
- { imdi_k364, imdi_k364_gentab },
- { imdi_k365, imdi_k365_gentab },
- { imdi_k366, imdi_k366_gentab },
- { imdi_k367, imdi_k367_gentab },
- { imdi_k368, imdi_k368_gentab },
- { imdi_k369, imdi_k369_gentab },
- { imdi_k370, imdi_k370_gentab },
- { imdi_k371, imdi_k371_gentab },
- { imdi_k372, imdi_k372_gentab },
- { imdi_k373, imdi_k373_gentab },
- { imdi_k374, imdi_k374_gentab },
- { imdi_k375, imdi_k375_gentab },
- { imdi_k376, imdi_k376_gentab },
- { imdi_k377, imdi_k377_gentab },
- { imdi_k378, imdi_k378_gentab },
- { imdi_k379, imdi_k379_gentab },
- { imdi_k380, imdi_k380_gentab },
- { imdi_k381, imdi_k381_gentab },
- { imdi_k382, imdi_k382_gentab },
- { imdi_k383, imdi_k383_gentab },
- { imdi_k384, imdi_k384_gentab },
- { imdi_k385, imdi_k385_gentab },
- { imdi_k386, imdi_k386_gentab },
- { imdi_k387, imdi_k387_gentab },
- { imdi_k388, imdi_k388_gentab },
- { imdi_k389, imdi_k389_gentab },
- { imdi_k390, imdi_k390_gentab },
- { imdi_k391, imdi_k391_gentab },
- { imdi_k392, imdi_k392_gentab },
- { imdi_k393, imdi_k393_gentab },
- { imdi_k394, imdi_k394_gentab },
- { imdi_k395, imdi_k395_gentab },
- { imdi_k396, imdi_k396_gentab },
- { imdi_k397, imdi_k397_gentab },
- { imdi_k398, imdi_k398_gentab },
- { imdi_k399, imdi_k399_gentab },
- { imdi_k400, imdi_k400_gentab },
- { imdi_k401, imdi_k401_gentab },
- { imdi_k402, imdi_k402_gentab },
- { imdi_k403, imdi_k403_gentab },
- { imdi_k404, imdi_k404_gentab },
- { imdi_k405, imdi_k405_gentab },
- { imdi_k406, imdi_k406_gentab },
- { imdi_k407, imdi_k407_gentab },
- { imdi_k408, imdi_k408_gentab },
- { imdi_k409, imdi_k409_gentab },
- { imdi_k410, imdi_k410_gentab },
- { imdi_k411, imdi_k411_gentab },
- { imdi_k412, imdi_k412_gentab },
- { imdi_k413, imdi_k413_gentab },
- { imdi_k414, imdi_k414_gentab },
- { imdi_k415, imdi_k415_gentab },
- { imdi_k416, imdi_k416_gentab },
- { imdi_k417, imdi_k417_gentab },
- { imdi_k418, imdi_k418_gentab },
- { imdi_k419, imdi_k419_gentab },
- { imdi_k420, imdi_k420_gentab },
- { imdi_k421, imdi_k421_gentab },
- { imdi_k422, imdi_k422_gentab },
- { imdi_k423, imdi_k423_gentab },
- { imdi_k424, imdi_k424_gentab },
- { imdi_k425, imdi_k425_gentab },
- { imdi_k426, imdi_k426_gentab },
- { imdi_k427, imdi_k427_gentab },
- { imdi_k428, imdi_k428_gentab },
- { imdi_k429, imdi_k429_gentab },
- { imdi_k430, imdi_k430_gentab },
- { imdi_k431, imdi_k431_gentab },
- { imdi_k432, imdi_k432_gentab },
- { imdi_k433, imdi_k433_gentab },
- { imdi_k434, imdi_k434_gentab },
- { imdi_k435, imdi_k435_gentab },
- { imdi_k436, imdi_k436_gentab },
- { imdi_k437, imdi_k437_gentab },
- { imdi_k438, imdi_k438_gentab },
- { imdi_k439, imdi_k439_gentab },
- { imdi_k440, imdi_k440_gentab },
- { imdi_k441, imdi_k441_gentab },
- { imdi_k442, imdi_k442_gentab },
- { imdi_k443, imdi_k443_gentab },
- { imdi_k444, imdi_k444_gentab },
- { imdi_k445, imdi_k445_gentab },
- { imdi_k446, imdi_k446_gentab },
- { imdi_k447, imdi_k447_gentab },
- { imdi_k448, imdi_k448_gentab },
- { imdi_k449, imdi_k449_gentab },
- { imdi_k450, imdi_k450_gentab },
- { imdi_k451, imdi_k451_gentab },
- { imdi_k452, imdi_k452_gentab },
- { imdi_k453, imdi_k453_gentab },
- { imdi_k454, imdi_k454_gentab },
- { imdi_k455, imdi_k455_gentab },
- { imdi_k456, imdi_k456_gentab },
- { imdi_k457, imdi_k457_gentab },
- { imdi_k458, imdi_k458_gentab },
- { imdi_k459, imdi_k459_gentab },
- { imdi_k460, imdi_k460_gentab },
- { imdi_k461, imdi_k461_gentab },
- { imdi_k462, imdi_k462_gentab },
- { imdi_k463, imdi_k463_gentab },
- { imdi_k464, imdi_k464_gentab },
- { imdi_k465, imdi_k465_gentab },
- { imdi_k466, imdi_k466_gentab },
- { imdi_k467, imdi_k467_gentab },
- { imdi_k468, imdi_k468_gentab },
- { imdi_k469, imdi_k469_gentab },
- { imdi_k470, imdi_k470_gentab },
- { imdi_k471, imdi_k471_gentab },
- { imdi_k472, imdi_k472_gentab },
- { imdi_k473, imdi_k473_gentab },
- { imdi_k474, imdi_k474_gentab },
- { imdi_k475, imdi_k475_gentab },
- { imdi_k476, imdi_k476_gentab },
- { imdi_k477, imdi_k477_gentab },
- { imdi_k478, imdi_k478_gentab },
- { imdi_k479, imdi_k479_gentab },
- { imdi_k480, imdi_k480_gentab },
- { imdi_k481, imdi_k481_gentab },
- { imdi_k482, imdi_k482_gentab },
- { imdi_k483, imdi_k483_gentab },
- { imdi_k484, imdi_k484_gentab },
- { imdi_k485, imdi_k485_gentab },
- { imdi_k486, imdi_k486_gentab },
- { imdi_k487, imdi_k487_gentab },
- { imdi_k488, imdi_k488_gentab },
- { imdi_k489, imdi_k489_gentab },
- { imdi_k490, imdi_k490_gentab },
- { imdi_k491, imdi_k491_gentab },
- { imdi_k492, imdi_k492_gentab },
- { imdi_k493, imdi_k493_gentab },
- { imdi_k494, imdi_k494_gentab },
- { imdi_k495, imdi_k495_gentab },
- { imdi_k496, imdi_k496_gentab },
- { imdi_k497, imdi_k497_gentab },
- { imdi_k498, imdi_k498_gentab },
- { imdi_k499, imdi_k499_gentab },
- { imdi_k500, imdi_k500_gentab },
- { imdi_k501, imdi_k501_gentab },
- { imdi_k502, imdi_k502_gentab },
- { imdi_k503, imdi_k503_gentab },
- { imdi_k504, imdi_k504_gentab },
- { imdi_k505, imdi_k505_gentab },
- { imdi_k506, imdi_k506_gentab },
- { imdi_k507, imdi_k507_gentab },
- { imdi_k508, imdi_k508_gentab },
- { imdi_k509, imdi_k509_gentab },
- { imdi_k510, imdi_k510_gentab },
- { imdi_k511, imdi_k511_gentab },
- { imdi_k512, imdi_k512_gentab },
- { imdi_k513, imdi_k513_gentab },
- { imdi_k514, imdi_k514_gentab },
- { imdi_k515, imdi_k515_gentab },
- { imdi_k516, imdi_k516_gentab },
- { imdi_k517, imdi_k517_gentab },
- { imdi_k518, imdi_k518_gentab },
- { imdi_k519, imdi_k519_gentab },
- { imdi_k520, imdi_k520_gentab },
- { imdi_k521, imdi_k521_gentab },
- { imdi_k522, imdi_k522_gentab },
- { imdi_k523, imdi_k523_gentab },
- { imdi_k524, imdi_k524_gentab },
- { imdi_k525, imdi_k525_gentab },
- { imdi_k526, imdi_k526_gentab },
- { imdi_k527, imdi_k527_gentab },
- { imdi_k528, imdi_k528_gentab },
- { imdi_k529, imdi_k529_gentab },
- { imdi_k530, imdi_k530_gentab },
- { imdi_k531, imdi_k531_gentab },
- { imdi_k532, imdi_k532_gentab },
- { imdi_k533, imdi_k533_gentab },
- { imdi_k534, imdi_k534_gentab },
- { imdi_k535, imdi_k535_gentab },
- { imdi_k536, imdi_k536_gentab },
- { imdi_k537, imdi_k537_gentab },
- { imdi_k538, imdi_k538_gentab },
- { imdi_k539, imdi_k539_gentab },
- { imdi_k540, imdi_k540_gentab },
- { imdi_k541, imdi_k541_gentab },
- { imdi_k542, imdi_k542_gentab },
- { imdi_k543, imdi_k543_gentab },
- { imdi_k544, imdi_k544_gentab },
- { imdi_k545, imdi_k545_gentab },
- { imdi_k546, imdi_k546_gentab },
- { imdi_k547, imdi_k547_gentab },
- { imdi_k548, imdi_k548_gentab },
- { imdi_k549, imdi_k549_gentab },
- { imdi_k550, imdi_k550_gentab },
- { imdi_k551, imdi_k551_gentab },
- { imdi_k552, imdi_k552_gentab },
- { imdi_k553, imdi_k553_gentab },
- { imdi_k554, imdi_k554_gentab },
- { imdi_k555, imdi_k555_gentab },
- { imdi_k556, imdi_k556_gentab },
- { imdi_k557, imdi_k557_gentab },
- { imdi_k558, imdi_k558_gentab },
- { imdi_k559, imdi_k559_gentab },
- { imdi_k560, imdi_k560_gentab },
- { imdi_k561, imdi_k561_gentab },
- { imdi_k562, imdi_k562_gentab },
- { imdi_k563, imdi_k563_gentab },
- { imdi_k564, imdi_k564_gentab },
- { imdi_k565, imdi_k565_gentab },
- { imdi_k566, imdi_k566_gentab },
- { imdi_k567, imdi_k567_gentab },
- { imdi_k568, imdi_k568_gentab },
- { imdi_k569, imdi_k569_gentab },
- { imdi_k570, imdi_k570_gentab },
- { imdi_k571, imdi_k571_gentab },
- { imdi_k572, imdi_k572_gentab },
- { imdi_k573, imdi_k573_gentab },
- { imdi_k574, imdi_k574_gentab },
- { imdi_k575, imdi_k575_gentab },
- { imdi_k576, imdi_k576_gentab },
- { imdi_k577, imdi_k577_gentab },
- { imdi_k578, imdi_k578_gentab },
- { imdi_k579, imdi_k579_gentab },
- { imdi_k580, imdi_k580_gentab },
- { imdi_k581, imdi_k581_gentab },
- { imdi_k582, imdi_k582_gentab },
- { imdi_k583, imdi_k583_gentab },
- { imdi_k584, imdi_k584_gentab },
- { imdi_k585, imdi_k585_gentab },
- { imdi_k586, imdi_k586_gentab },
- { imdi_k587, imdi_k587_gentab },
- { imdi_k588, imdi_k588_gentab },
- { imdi_k589, imdi_k589_gentab },
- { imdi_k590, imdi_k590_gentab },
- { imdi_k591, imdi_k591_gentab },
- { imdi_k592, imdi_k592_gentab },
- { imdi_k593, imdi_k593_gentab },
- { imdi_k594, imdi_k594_gentab },
- { imdi_k595, imdi_k595_gentab },
- { imdi_k596, imdi_k596_gentab },
- { imdi_k597, imdi_k597_gentab },
- { imdi_k598, imdi_k598_gentab },
- { imdi_k599, imdi_k599_gentab },
- { imdi_k600, imdi_k600_gentab },
- { imdi_k601, imdi_k601_gentab },
- { imdi_k602, imdi_k602_gentab },
- { imdi_k603, imdi_k603_gentab },
- { imdi_k604, imdi_k604_gentab },
- { imdi_k605, imdi_k605_gentab },
- { imdi_k606, imdi_k606_gentab },
- { imdi_k607, imdi_k607_gentab },
- { imdi_k608, imdi_k608_gentab },
- { imdi_k609, imdi_k609_gentab },
- { imdi_k610, imdi_k610_gentab },
- { imdi_k611, imdi_k611_gentab },
- { imdi_k612, imdi_k612_gentab },
- { imdi_k613, imdi_k613_gentab },
- { imdi_k614, imdi_k614_gentab },
- { imdi_k615, imdi_k615_gentab },
- { imdi_k616, imdi_k616_gentab },
- { imdi_k617, imdi_k617_gentab },
- { imdi_k618, imdi_k618_gentab },
- { imdi_k619, imdi_k619_gentab },
- { imdi_k620, imdi_k620_gentab },
- { imdi_k621, imdi_k621_gentab },
- { imdi_k622, imdi_k622_gentab },
- { imdi_k623, imdi_k623_gentab },
- { imdi_k624, imdi_k624_gentab },
- { imdi_k625, imdi_k625_gentab },
- { imdi_k626, imdi_k626_gentab },
- { imdi_k627, imdi_k627_gentab },
- { imdi_k628, imdi_k628_gentab },
- { imdi_k629, imdi_k629_gentab },
- { imdi_k630, imdi_k630_gentab },
- { imdi_k631, imdi_k631_gentab },
- { imdi_k632, imdi_k632_gentab },
- { imdi_k633, imdi_k633_gentab },
- { imdi_k634, imdi_k634_gentab },
- { imdi_k635, imdi_k635_gentab },
- { imdi_k636, imdi_k636_gentab },
- { imdi_k637, imdi_k637_gentab },
- { imdi_k638, imdi_k638_gentab },
- { imdi_k639, imdi_k639_gentab },
- { imdi_k640, imdi_k640_gentab },
- { imdi_k641, imdi_k641_gentab },
- { imdi_k642, imdi_k642_gentab },
- { imdi_k643, imdi_k643_gentab },
- { imdi_k644, imdi_k644_gentab },
- { imdi_k645, imdi_k645_gentab },
- { imdi_k646, imdi_k646_gentab },
- { imdi_k647, imdi_k647_gentab },
- { imdi_k648, imdi_k648_gentab },
- { imdi_k649, imdi_k649_gentab },
- { imdi_k650, imdi_k650_gentab },
- { imdi_k651, imdi_k651_gentab },
- { imdi_k652, imdi_k652_gentab },
- { imdi_k653, imdi_k653_gentab },
- { imdi_k654, imdi_k654_gentab },
- { imdi_k655, imdi_k655_gentab },
- { imdi_k656, imdi_k656_gentab },
- { imdi_k657, imdi_k657_gentab },
- { imdi_k658, imdi_k658_gentab },
- { imdi_k659, imdi_k659_gentab },
- { imdi_k660, imdi_k660_gentab },
- { imdi_k661, imdi_k661_gentab },
- { imdi_k662, imdi_k662_gentab },
- { imdi_k663, imdi_k663_gentab },
- { imdi_k664, imdi_k664_gentab },
- { imdi_k665, imdi_k665_gentab },
- { imdi_k666, imdi_k666_gentab },
- { imdi_k667, imdi_k667_gentab },
- { imdi_k668, imdi_k668_gentab },
- { imdi_k669, imdi_k669_gentab },
- { imdi_k670, imdi_k670_gentab },
- { imdi_k671, imdi_k671_gentab },
- { imdi_k672, imdi_k672_gentab },
- { imdi_k673, imdi_k673_gentab },
- { imdi_k674, imdi_k674_gentab },
- { imdi_k675, imdi_k675_gentab },
- { imdi_k676, imdi_k676_gentab },
- { imdi_k677, imdi_k677_gentab },
- { imdi_k678, imdi_k678_gentab },
- { imdi_k679, imdi_k679_gentab },
- { imdi_k680, imdi_k680_gentab },
- { imdi_k681, imdi_k681_gentab },
- { imdi_k682, imdi_k682_gentab },
- { imdi_k683, imdi_k683_gentab },
- { imdi_k684, imdi_k684_gentab },
- { imdi_k685, imdi_k685_gentab },
- { imdi_k686, imdi_k686_gentab },
- { imdi_k687, imdi_k687_gentab },
- { imdi_k688, imdi_k688_gentab },
- { imdi_k689, imdi_k689_gentab },
- { imdi_k690, imdi_k690_gentab },
- { imdi_k691, imdi_k691_gentab },
- { imdi_k692, imdi_k692_gentab },
- { imdi_k693, imdi_k693_gentab },
- { imdi_k694, imdi_k694_gentab },
- { imdi_k695, imdi_k695_gentab },
- { imdi_k696, imdi_k696_gentab },
- { imdi_k697, imdi_k697_gentab },
- { imdi_k698, imdi_k698_gentab },
- { imdi_k699, imdi_k699_gentab },
- { imdi_k700, imdi_k700_gentab },
- { imdi_k701, imdi_k701_gentab },
- { imdi_k702, imdi_k702_gentab },
- { imdi_k703, imdi_k703_gentab },
- { imdi_k704, imdi_k704_gentab },
- { imdi_k705, imdi_k705_gentab },
- { imdi_k706, imdi_k706_gentab },
- { imdi_k707, imdi_k707_gentab },
- { imdi_k708, imdi_k708_gentab },
- { imdi_k709, imdi_k709_gentab },
- { imdi_k710, imdi_k710_gentab },
- { imdi_k711, imdi_k711_gentab },
- { imdi_k712, imdi_k712_gentab },
- { imdi_k713, imdi_k713_gentab },
- { imdi_k714, imdi_k714_gentab },
- { imdi_k715, imdi_k715_gentab },
- { imdi_k716, imdi_k716_gentab },
- { imdi_k717, imdi_k717_gentab },
- { imdi_k718, imdi_k718_gentab },
- { imdi_k719, imdi_k719_gentab },
- { imdi_k720, imdi_k720_gentab },
- { imdi_k721, imdi_k721_gentab },
- { imdi_k722, imdi_k722_gentab },
- { imdi_k723, imdi_k723_gentab },
- { imdi_k724, imdi_k724_gentab },
- { imdi_k725, imdi_k725_gentab },
- { imdi_k726, imdi_k726_gentab },
- { imdi_k727, imdi_k727_gentab },
- { imdi_k728, imdi_k728_gentab },
- { imdi_k729, imdi_k729_gentab },
- { imdi_k730, imdi_k730_gentab },
- { imdi_k731, imdi_k731_gentab },
- { imdi_k732, imdi_k732_gentab },
- { imdi_k733, imdi_k733_gentab },
- { imdi_k734, imdi_k734_gentab },
- { imdi_k735, imdi_k735_gentab },
- { imdi_k736, imdi_k736_gentab },
- { imdi_k737, imdi_k737_gentab },
- { imdi_k738, imdi_k738_gentab },
- { imdi_k739, imdi_k739_gentab },
- { imdi_k740, imdi_k740_gentab },
- { imdi_k741, imdi_k741_gentab },
- { imdi_k742, imdi_k742_gentab },
- { imdi_k743, imdi_k743_gentab },
- { imdi_k744, imdi_k744_gentab },
- { imdi_k745, imdi_k745_gentab },
- { imdi_k746, imdi_k746_gentab },
- { imdi_k747, imdi_k747_gentab },
- { imdi_k748, imdi_k748_gentab },
- { imdi_k749, imdi_k749_gentab },
- { imdi_k750, imdi_k750_gentab },
- { imdi_k751, imdi_k751_gentab },
- { imdi_k752, imdi_k752_gentab },
- { imdi_k753, imdi_k753_gentab },
- { imdi_k754, imdi_k754_gentab },
- { imdi_k755, imdi_k755_gentab },
- { imdi_k756, imdi_k756_gentab },
- { imdi_k757, imdi_k757_gentab },
- { imdi_k758, imdi_k758_gentab },
- { imdi_k759, imdi_k759_gentab },
- { imdi_k760, imdi_k760_gentab },
- { imdi_k761, imdi_k761_gentab },
- { imdi_k762, imdi_k762_gentab },
- { imdi_k763, imdi_k763_gentab },
- { imdi_k764, imdi_k764_gentab },
- { imdi_k765, imdi_k765_gentab },
- { imdi_k766, imdi_k766_gentab },
- { imdi_k767, imdi_k767_gentab },
- { imdi_k768, imdi_k768_gentab },
- { imdi_k769, imdi_k769_gentab },
- { imdi_k770, imdi_k770_gentab },
- { imdi_k771, imdi_k771_gentab },
- { imdi_k772, imdi_k772_gentab },
- { imdi_k773, imdi_k773_gentab },
- { imdi_k774, imdi_k774_gentab },
- { imdi_k775, imdi_k775_gentab },
- { imdi_k776, imdi_k776_gentab },
- { imdi_k777, imdi_k777_gentab },
- { imdi_k778, imdi_k778_gentab },
- { imdi_k779, imdi_k779_gentab },
- { imdi_k780, imdi_k780_gentab },
- { imdi_k781, imdi_k781_gentab },
- { imdi_k782, imdi_k782_gentab },
- { imdi_k783, imdi_k783_gentab },
- { imdi_k784, imdi_k784_gentab },
- { imdi_k785, imdi_k785_gentab },
- { imdi_k786, imdi_k786_gentab },
- { imdi_k787, imdi_k787_gentab },
- { imdi_k788, imdi_k788_gentab },
- { imdi_k789, imdi_k789_gentab },
- { imdi_k790, imdi_k790_gentab },
- { imdi_k791, imdi_k791_gentab },
- { imdi_k792, imdi_k792_gentab },
- { imdi_k793, imdi_k793_gentab },
- { imdi_k794, imdi_k794_gentab },
- { imdi_k795, imdi_k795_gentab },
- { imdi_k796, imdi_k796_gentab },
- { imdi_k797, imdi_k797_gentab },
- { imdi_k798, imdi_k798_gentab },
- { imdi_k799, imdi_k799_gentab },
- { imdi_k800, imdi_k800_gentab },
- { imdi_k801, imdi_k801_gentab },
- { imdi_k802, imdi_k802_gentab },
- { imdi_k803, imdi_k803_gentab },
- { imdi_k804, imdi_k804_gentab },
- { imdi_k805, imdi_k805_gentab },
- { imdi_k806, imdi_k806_gentab },
- { imdi_k807, imdi_k807_gentab },
- { imdi_k808, imdi_k808_gentab },
- { imdi_k809, imdi_k809_gentab },
- { imdi_k810, imdi_k810_gentab },
- { imdi_k811, imdi_k811_gentab },
- { imdi_k812, imdi_k812_gentab },
- { imdi_k813, imdi_k813_gentab },
- { imdi_k814, imdi_k814_gentab },
- { imdi_k815, imdi_k815_gentab },
- { imdi_k816, imdi_k816_gentab },
- { imdi_k817, imdi_k817_gentab },
- { imdi_k818, imdi_k818_gentab },
- { imdi_k819, imdi_k819_gentab },
- { imdi_k820, imdi_k820_gentab },
- { imdi_k821, imdi_k821_gentab },
- { imdi_k822, imdi_k822_gentab },
- { imdi_k823, imdi_k823_gentab },
- { imdi_k824, imdi_k824_gentab },
- { imdi_k825, imdi_k825_gentab },
- { imdi_k826, imdi_k826_gentab },
- { imdi_k827, imdi_k827_gentab },
- { imdi_k828, imdi_k828_gentab },
- { imdi_k829, imdi_k829_gentab },
- { imdi_k830, imdi_k830_gentab },
- { imdi_k831, imdi_k831_gentab },
- { imdi_k832, imdi_k832_gentab },
- { imdi_k833, imdi_k833_gentab },
- { imdi_k834, imdi_k834_gentab },
- { imdi_k835, imdi_k835_gentab },
- { imdi_k836, imdi_k836_gentab },
- { imdi_k837, imdi_k837_gentab },
- { imdi_k838, imdi_k838_gentab },
- { imdi_k839, imdi_k839_gentab },
- { imdi_k840, imdi_k840_gentab },
- { imdi_k841, imdi_k841_gentab },
- { imdi_k842, imdi_k842_gentab },
- { imdi_k843, imdi_k843_gentab },
- { imdi_k844, imdi_k844_gentab },
- { imdi_k845, imdi_k845_gentab },
- { imdi_k846, imdi_k846_gentab },
- { imdi_k847, imdi_k847_gentab },
- { imdi_k848, imdi_k848_gentab },
- { imdi_k849, imdi_k849_gentab },
- { imdi_k850, imdi_k850_gentab },
- { imdi_k851, imdi_k851_gentab },
- { imdi_k852, imdi_k852_gentab },
- { imdi_k853, imdi_k853_gentab },
- { imdi_k854, imdi_k854_gentab },
- { imdi_k855, imdi_k855_gentab },
- { imdi_k856, imdi_k856_gentab },
- { imdi_k857, imdi_k857_gentab },
- { imdi_k858, imdi_k858_gentab },
- { imdi_k859, imdi_k859_gentab },
- { imdi_k860, imdi_k860_gentab },
- { imdi_k861, imdi_k861_gentab },
- { imdi_k862, imdi_k862_gentab },
- { imdi_k863, imdi_k863_gentab },
- { imdi_k864, imdi_k864_gentab },
- { imdi_k865, imdi_k865_gentab },
- { imdi_k866, imdi_k866_gentab },
- { imdi_k867, imdi_k867_gentab },
- { imdi_k868, imdi_k868_gentab },
- { imdi_k869, imdi_k869_gentab },
- { imdi_k870, imdi_k870_gentab },
- { imdi_k871, imdi_k871_gentab },
- { imdi_k872, imdi_k872_gentab },
- { imdi_k873, imdi_k873_gentab },
- { imdi_k874, imdi_k874_gentab },
- { imdi_k875, imdi_k875_gentab },
- { imdi_k876, imdi_k876_gentab },
- { imdi_k877, imdi_k877_gentab },
- { imdi_k878, imdi_k878_gentab },
- { imdi_k879, imdi_k879_gentab },
- { imdi_k880, imdi_k880_gentab },
- { imdi_k881, imdi_k881_gentab },
- { imdi_k882, imdi_k882_gentab },
- { imdi_k883, imdi_k883_gentab },
- { imdi_k884, imdi_k884_gentab },
- { imdi_k885, imdi_k885_gentab },
- { imdi_k886, imdi_k886_gentab },
- { imdi_k887, imdi_k887_gentab },
- { imdi_k888, imdi_k888_gentab },
- { imdi_k889, imdi_k889_gentab },
- { imdi_k890, imdi_k890_gentab },
- { imdi_k891, imdi_k891_gentab }
-};
-
-int no_kfuncs = 891;
-