From 06d0ad70821ebfdcbd02ca82f100ae53d8de7cad Mon Sep 17 00:00:00 2001 From: eddyem Date: Tue, 31 Jan 2017 18:21:26 +0300 Subject: [PATCH] take image works --- Makefile | 2 +- cmdlnopts.c | 21 +- cmdlnopts.h | 9 + imfunctions.c | 156 +++++++ imfunctions.h | 60 +++ main.c | 28 +- parseargs.c | 6 +- sbig340.c.tags | 1083 +++++++++++++++++++++++++++++++++++++++++++++--- term.c | 447 ++++++++++++++++++-- term.h | 42 +- 10 files changed, 1750 insertions(+), 104 deletions(-) create mode 100644 imfunctions.c create mode 100644 imfunctions.h diff --git a/Makefile b/Makefile index 9aeb8d2..f479fd9 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ # run `make DEF=...` to add extra defines PROGRAM := sbig340 -LDFLAGS := -fdata-sections -ffunction-sections -Wl,--gc-sections -Wl,--discard-all +LDFLAGS := -ltiff -fdata-sections -ffunction-sections -Wl,--gc-sections -Wl,--discard-all SRCS := $(wildcard *.c) DEFINES := $(DEF) -D_XOPEN_SOURCE=1111 -DEBUG OBJDIR := mk diff --git a/cmdlnopts.c b/cmdlnopts.c index 656a385..bc58dd6 100644 --- a/cmdlnopts.c +++ b/cmdlnopts.c @@ -45,7 +45,16 @@ glob_pars const Gdefault = { .rest_pars_num = 0, .splist = 0, .newspeed = 0, - .rest_pars = NULL + .rest_pars = NULL, + .shutter_cmd = NULL, + .subframe = NULL, + .speed = 0, + .exptime = 1., + .binning = 0, + .takeimg = 0, + .imtype = "a", + .imstoretype = NULL, + .outpfname = "output.tiff" }; /* @@ -61,7 +70,17 @@ myoption cmdlnopts[] = { {"heater-on",NO_ARGS, APTR(&G.heater),HEATER_ON, arg_none, NULL, _("turn heater on")}, {"heater-off",NO_ARGS, APTR(&G.heater),HEATER_OFF, arg_none, NULL, _("turn heater off")}, {"spd-list",NO_ARGS, NULL, 'l', arg_int, APTR(&G.splist), _("list speeds available")}, + {"baudrate",NEED_ARG, NULL, 'b', arg_int, APTR(&G.speed), _("connect at given baudrate without autocheck")}, {"spd-set", NEED_ARG, NULL, 's', arg_int, APTR(&G.newspeed), _("set terminal speed")}, + // only long variants + {"shutter", NEED_ARG, NULL, 0, arg_string, APTR(&G.shutter_cmd),_("shutter command: 'o' for open, 'c' for close, 'k' for de-energize")}, + {"subframe",NEED_ARG, NULL, 0, arg_string, APTR(&G.subframe), _("select subframe: x,y,size")}, + {"exptime", NEED_ARG, NULL, 'x', arg_double, APTR(&G.exptime), _("exposition time (1s by default)")}, + {"binning", NEED_ARG, NULL, 'B', arg_int, APTR(&G.binning), _("binning (1 by default)")}, + {"start-exp",NO_ARGS, NULL, 'X', arg_int, APTR(&G.takeimg), _("start exposition")}, + {"imtype", NEED_ARG, NULL, 'T', arg_string, APTR(&G.imtype), _("image type: light (l, L), autodark (a, A), dark (d, D)")}, + {"storetype",NEED_ARG, NULL, 'S', arg_string, APTR(&G.imstoretype),_("'overwrite'/'rewrite' to rewrite existing image, 'enumerate'/'numerate' to use given filename as base for series")}, + {"output", NEED_ARG, NULL, 'o', arg_string, APTR(&G.outpfname), _("output file name (default: output.tiff)")}, // simple integer parameter with obligatory arg: end_option }; diff --git a/cmdlnopts.h b/cmdlnopts.h index b8fcffd..5c400b1 100644 --- a/cmdlnopts.h +++ b/cmdlnopts.h @@ -37,6 +37,15 @@ typedef struct{ heater_cmd heater; // turn heater on/off/leave unchanged int splist; // list speeds available int newspeed; // change speed + int speed; // connect @ this speed + char *shutter_cmd; // shutter command: 'o' for open, 'c' for close, 'k' for de-energize + char *subframe; // select subframe (x,y,size) + double exptime; // exsposition time (1s by default) + int binning; // binning (1 by default) + int takeimg; // take image + char *imtype; // image type (light, autodark, dark) + char *imstoretype; // "overwrite" (or "rewrite"), "normal" (or NULL), "enumerate" (or "numerate") + char *outpfname; // output filename for image storing char** rest_pars; // the rest parameters: array of char* } glob_pars; diff --git a/imfunctions.c b/imfunctions.c new file mode 100644 index 0000000..8dc1394 --- /dev/null +++ b/imfunctions.c @@ -0,0 +1,156 @@ +/* + * geany_encoding=koi8-r + * imfunctions.c - functions to work with image + * + * Copyright 2017 Edward V. Emelianov + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + * + */ + +#include "usefull_macros.h" +#include "imfunctions.h" +#include "term.h" +#include // strncasecmp +#include // save tiff + + +// find the first non-exists filename +char *make_filename(char *outfile, char *ext){ + struct stat filestat; + static char buff[FILENAME_MAX]; + int num; + for(num = 1; num < 10000; num++){ + if(snprintf(buff, FILENAME_MAX, "%s_%04d.%s", outfile, num, ext) < 1) + return NULL; + if(stat(buff, &filestat) && ENOENT == errno) // OK, file not exists + return buff; + } + return NULL; +} + +/** + * Check image to store + * @param filename (i) - output file name (or prefix with suffix) + * @param store (i) - "overwrite" (or "rewrite"), "normal" (or NULL), "enumerate" (or "numerate") + */ +imstorage *chk_storeimg(char *filename, char* store){ + store_type st = STORE_NORMAL; + if(store){ // rewrite or enumerate + int L = strlen(store); + if(0 == strncasecmp(store, "overwrite", L) || 0 == strncasecmp(store, "rewrite", L)) st = STORE_REWRITE; + else if(0 == strncasecmp(store, "enumerate", L) || 0 == strncasecmp(store, "numerate", L)) st = STORE_NEXTNUM; + else{ + WARNX(_("Wrong storing type: %s"), store); + return NULL; + } + } + char *f2store = filename; + char *nm = strdup(filename); + if(!nm) ERRX("strdup"); + char *pt = strrchr(nm, '.'); + if(!pt){ + WARNX(_("Wrong image name pattern: this should be a filename with suffix .tiff or .jpg")); + FREE(nm); + return NULL; + } + *pt++ = 0; + if(strcmp(pt, "tiff") && strcmp(pt, "jpg")){ + WARNX("Can save only into jpg or tiff files!"); + return NULL; + } + if(st == STORE_NORMAL){ + struct stat filestat; + if(stat(filename, &filestat)){ + if(ENOENT != errno){ + WARN(_("Error access file %s"), filename); + return NULL; + } + }else{ + WARNX(_("The file %s exists, use '-Srew' option to rewrite")); + return NULL; + } + }else if(st == STORE_NEXTNUM){ + f2store = make_filename(nm, pt); + } + FREE(nm); + imstorage *ist = MALLOC(imstorage, 1); + ist->st = st; + ist->imname = strdup(f2store); + if(!ist->imname)ERR("strdup"); + return ist; +} + +/** + * Try to write tiff file + */ +int writetiff(imstorage *img){ + int ret = 1, H = img->H, W = img->W, y; + uint16_t *data = img->imdata; + TIFF *image = TIFFOpen(img->imname, "w"); + if(!image){ + WARN("Can't open tiff file"); + ret = 0; + goto done; + } + TIFFSetField(image, TIFFTAG_IMAGEWIDTH, W); + TIFFSetField(image, TIFFTAG_IMAGELENGTH, H); + TIFFSetField(image, TIFFTAG_BITSPERSAMPLE, 16); + TIFFSetField(image, TIFFTAG_SAMPLESPERPIXEL, 1); + TIFFSetField(image, TIFFTAG_ROWSPERSTRIP, 1); + TIFFSetField(image, TIFFTAG_ORIENTATION, ORIENTATION_BOTLEFT); + TIFFSetField(image, TIFFTAG_COMPRESSION, COMPRESSION_DEFLATE); + TIFFSetField(image, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); + TIFFSetField(image, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField(image, TIFFTAG_RESOLUTIONUNIT, RESUNIT_NONE); + //tstrip_t strip = 0; + for (y = 0; y < H; ++y, data += W){ +TIFFWriteScanline(image, data, y, 0); + /* if(TIFFWriteEncodedStrip(image, strip, data, W) < 0){ + ret = 0; + goto done; + }*/ + } + +done: + if(image) TIFFClose(image); + return ret; +} + + +/** + * Save image + * @param filename (i) - output file name + * @return 0 if all OK + */ +int store_image(imstorage *img){ + if(wait4image()) return 1; + DBG("OK, get image"); + uint16_t *imdata = get_image(img); + if(!imdata){ + WARNX(_("Error readout")); + return 2; + } + img->imdata = imdata; + green("Save image into %s\n", img->imname); + /*int f = open(img->imname, O_WRONLY|O_CREAT|O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + if(f){ + DBG("%zd", write(f, img->imdata, img->W*img->H*2)); + close(f); + }*/ + if(!writetiff(img)) return 3; + return 0; +} diff --git a/imfunctions.h b/imfunctions.h new file mode 100644 index 0000000..5376c59 --- /dev/null +++ b/imfunctions.h @@ -0,0 +1,60 @@ +/* + * geany_encoding=koi8-r + * imfunctions.h + * + * Copyright 2017 Edward V. Emelianov + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + * + */ +#pragma once +#ifndef __IMFUNCTIONS_H__ +#define __IMFUNCTIONS_H__ +#include + +typedef enum{ + STORE_REWRITE, + STORE_NORMAL, + STORE_NEXTNUM +} store_type; + +typedef enum{ + IMTYPE_AUTODARK, + IMTYPE_LIGHT, + IMTYPE_DARK +} image_type; + +typedef struct{ + uint16_t Xstart; + uint16_t Ystart; + uint8_t size; +} imsubframe; + +typedef struct{ + store_type st; // how would files be stored + char *imname; + int binning; + image_type imtype; + double exptime; + imsubframe *subframe; + size_t W, H; // image size + uint16_t *imdata; // image data itself +} imstorage; + +imstorage *chk_storeimg(char *filename, char* store); +int store_image(imstorage *filename); + +#endif // __IMFUNCTIONS_H__ diff --git a/main.c b/main.c index 0ca5042..2662db2 100644 --- a/main.c +++ b/main.c @@ -22,8 +22,10 @@ #include #include "term.h" #include "cmdlnopts.h" +#include "imfunctions.h" void signals(int signo){ + abort_image(); restore_console(); restore_tty(); exit(signo); @@ -42,7 +44,7 @@ int main(int argc, char **argv){ WARNX(_("Options --daemon and --terminal can't be together!")); return 1; } - if(!try_connect(G->device)){ + if(!try_connect(G->device, G->speed)){ WARNX(_("Check power and connection: device not answer!")); return 1; } @@ -50,8 +52,32 @@ int main(int argc, char **argv){ if(fw) printf(_("Firmware version: %s\n"), fw); if(G->newspeed && term_setspeed(G->newspeed)) ERRX(_("Can't change speed to %d"), G->newspeed); + if(G->shutter_cmd && shutter_command(G->shutter_cmd)) + WARNX(_("Can't send shutter command: %s"), G->shutter_cmd); if(G->heater != HEATER_LEAVE) heater(G->heater); // turn on/off heater + if(G->takeimg){ + imsubframe *F = NULL; + if(G->subframe){ + if(!(F = define_subframe(G->subframe))) + ERRX(_("Error defining subframe")); + G->binning = 0xff; // take subframe + } + imstorage *img = chk_storeimg(G->outpfname, G->imstoretype); + if(img){ + img->subframe = F; + img->exptime = G->exptime; + img->binning = G->binning; + if(start_exposition(img, G->imtype)) + WARNX(_("Error starting exposition")); + else if(store_image(img)) + WARNX(_("Error storing image %s"), img->imname); + FREE(img->imname); + FREE(img->imdata); + FREE(img); + } + FREE(F); + } if(G->daemon || G->terminal){ red(_("All other commandline options rejected!\n")); if(G->terminal) run_terminal(); // non-echo terminal mode diff --git a/parseargs.c b/parseargs.c index 03fd825..10959bb 100644 --- a/parseargs.c +++ b/parseargs.c @@ -340,12 +340,12 @@ static int argsort(const void *a1, const void *a2){ int s1 = o1->val, s2 = o2->val; int *f1 = o1->flag, *f2 = o2->flag; // check if both options has short arg - if(f1 == NULL && f2 == NULL){ // both have short arg + if(f1 == NULL && f2 == NULL && s1 && s2){ // both have short arg return (s1 - s2); - }else if(f1 != NULL && f2 != NULL){ // both don't have short arg - sort by long + }else if((f1 != NULL || !s1) && (f2 != NULL || !s2)){ // both don't have short arg - sort by long return strcmp(l1, l2); }else{ // only one have short arg -- return it - if(f2) return -1; // a1 have short - it is 'lesser' + if(f2 || !s2) return -1; // a1 have short - it is 'lesser' else return 1; } } diff --git a/sbig340.c.tags b/sbig340.c.tags index 93876ee..d65ad00 100644 --- a/sbig340.c.tags +++ b/sbig340.c.tags @@ -3,7 +3,11 @@ ACCESSPERMS AIO_PRIO_DELTA_MAXÌ65536Ö0 ALLOCÌ131072Í(type,var,size)Ö0 ALLPERMSÌ65536Ö0 +ANS_CHANGE_BAUDRATEÌ65536Ö0 ANS_COMM_TESTÌ65536Ö0 +ANS_EXP_DONEÌ65536Ö0 +ANS_EXP_IN_PROGRESSÌ65536Ö0 +ANS_RDOUT_IN_PROGRESSÌ65536Ö0 APTRÌ131072Í(x)Ö0 ARG_MAXÌ65536Ö0 AT_EACCESSÌ65536Ö0 @@ -56,12 +60,20 @@ BS1 BSDLYÌ65536Ö0 BUFLENÌ65536Ö0 BUFSIZÌ65536Ö0 +BUS_ADRALNÌ65536Ö0 +BUS_ADRERRÌ65536Ö0 +BUS_MCEERR_AOÌ65536Ö0 +BUS_MCEERR_ARÌ65536Ö0 +BUS_OBJERRÌ65536Ö0 +BWmapÌ64Î_TIFFRGBAImageÖ0Ïuint32 * * BYTE_ORDERÌ65536Ö0 +Bitdepth16To8Ì64Î_TIFFRGBAImageÖ0Ïuint8 * BspeedsÌ16384Ö0Ïtcflag_t CBAUDÌ65536Ö0 CBAUDEXÌ65536Ö0 CBRKÌ65536Ö0 CCEQÌ131072Í(val,c)Ö0 +CCITT_SUPPORTÌ65536Ö0 CDISCARDÌ65536Ö0 CDSUSPÌ65536Ö0 CEOFÌ65536Ö0 @@ -73,15 +85,78 @@ CHARCLASS_NAME_MAX CHAR_BITÌ65536Ö0 CHAR_MAXÌ65536Ö0 CHAR_MINÌ65536Ö0 +CHECK_JPEG_YCBCR_SUBSAMPLINGÌ65536Ö0 CIBAUDÌ65536Ö0 +CIELABTORGB_TABLE_RANGEÌ65536Ö0 CINTRÌ65536Ö0 CKILLÌ65536Ö0 +CLD_CONTINUEDÌ65536Ö0 +CLD_DUMPEDÌ65536Ö0 +CLD_EXITEDÌ65536Ö0 +CLD_KILLEDÌ65536Ö0 +CLD_STOPPEDÌ65536Ö0 +CLD_TRAPPEDÌ65536Ö0 +CLEANFAXDATA_CLEANÌ65536Ö0 +CLEANFAXDATA_REGENERATEDÌ65536Ö0 +CLEANFAXDATA_UNCLEANÌ65536Ö0 CLNEXTÌ65536Ö0 CLOCALÌ65536Ö0 +CMD_ABORT_IMAGEÌ65536Ö0 +CMD_CHANGE_BAUDRATEÌ65536Ö0 CMD_COMM_TESTÌ65536Ö0 +CMD_DEFINE_SUBFRAMEÌ65536Ö0 +CMD_FIRMWARE_VERSIONÌ65536Ö0 +CMD_HEATERÌ65536Ö0 +CMD_SHUTTER_CLOSEÌ65536Ö0 +CMD_SHUTTER_DEENERGIZEÌ65536Ö0 +CMD_SHUTTER_OPENÌ65536Ö0 +CMD_TAKE_IMAGEÌ65536Ö0 +CMD_XFER_IMAGEÌ65536Ö0 CMINÌ65536Ö0 CMSPARÌ65536Ö0 +CMYK_SUPPORTÌ65536Ö0 +CODINGMETHODS_T42Ì65536Ö0 +CODINGMETHODS_T43Ì65536Ö0 +CODINGMETHODS_T4_1DÌ65536Ö0 +CODINGMETHODS_T4_2DÌ65536Ö0 +CODINGMETHODS_T6Ì65536Ö0 +CODINGMETHODS_T85Ì65536Ö0 COLL_WEIGHTS_MAXÌ65536Ö0 +COLORIMETRY_SUPPORTÌ65536Ö0 +COLORRESPONSEUNIT_100000SÌ65536Ö0 +COLORRESPONSEUNIT_10000SÌ65536Ö0 +COLORRESPONSEUNIT_1000SÌ65536Ö0 +COLORRESPONSEUNIT_100SÌ65536Ö0 +COLORRESPONSEUNIT_10SÌ65536Ö0 +COMPRESSION_ADOBE_DEFLATEÌ65536Ö0 +COMPRESSION_CCITTFAX3Ì65536Ö0 +COMPRESSION_CCITTFAX4Ì65536Ö0 +COMPRESSION_CCITTRLEÌ65536Ö0 +COMPRESSION_CCITTRLEWÌ65536Ö0 +COMPRESSION_CCITT_T4Ì65536Ö0 +COMPRESSION_CCITT_T6Ì65536Ö0 +COMPRESSION_DCSÌ65536Ö0 +COMPRESSION_DEFLATEÌ65536Ö0 +COMPRESSION_IT8BLÌ65536Ö0 +COMPRESSION_IT8CTPADÌ65536Ö0 +COMPRESSION_IT8LWÌ65536Ö0 +COMPRESSION_IT8MPÌ65536Ö0 +COMPRESSION_JBIGÌ65536Ö0 +COMPRESSION_JP2000Ì65536Ö0 +COMPRESSION_JPEGÌ65536Ö0 +COMPRESSION_LZMAÌ65536Ö0 +COMPRESSION_LZWÌ65536Ö0 +COMPRESSION_NEXTÌ65536Ö0 +COMPRESSION_NONEÌ65536Ö0 +COMPRESSION_OJPEGÌ65536Ö0 +COMPRESSION_PACKBITSÌ65536Ö0 +COMPRESSION_PIXARFILMÌ65536Ö0 +COMPRESSION_PIXARLOGÌ65536Ö0 +COMPRESSION_SGILOGÌ65536Ö0 +COMPRESSION_SGILOG24Ì65536Ö0 +COMPRESSION_T43Ì65536Ö0 +COMPRESSION_T85Ì65536Ö0 +COMPRESSION_THUNDERSCANÌ65536Ö0 CQUITÌ65536Ö0 CR0Ì65536Ö0 CR1Ì65536Ö0 @@ -105,9 +180,29 @@ CSUSP CTIMEÌ65536Ö0 CTRLÌ131072Í(x)Ö0 CWERASEÌ65536Ö0 +Cb_b_tabÌ64Îanon_struct_18Ö0Ïint * +Cb_g_tabÌ64Îanon_struct_18Ö0Ïint32 * +Cr_g_tabÌ64Îanon_struct_18Ö0Ïint32 * +Cr_r_tabÌ64Îanon_struct_18Ö0Ïint * +D50_X0Ì65536Ö0 +D50_Y0Ì65536Ö0 +D50_Z0Ì65536Ö0 +D65_X0Ì65536Ö0 +D65_Y0Ì65536Ö0 +D65_Z0Ì65536Ö0 DBGÌ131072Í(...)Ö0 DBL_EPSILONÌ65536Ö0 +DCSIMAGERFILTER_CFAÌ65536Ö0 +DCSIMAGERFILTER_IRÌ65536Ö0 +DCSIMAGERFILTER_MONOÌ65536Ö0 +DCSIMAGERFILTER_OTHERÌ65536Ö0 +DCSIMAGERMODEL_M3Ì65536Ö0 +DCSIMAGERMODEL_M5Ì65536Ö0 +DCSIMAGERMODEL_M6Ì65536Ö0 +DCSINTERPMODE_NORMALÌ65536Ö0 +DCSINTERPMODE_PREVIEWÌ65536Ö0 DEFAULT_COMDEVÌ65536Ö0 +DEFAULT_EXTRASAMPLE_AS_ALPHAÌ65536Ö0 DEFFILEMODEÌ65536Ö0 DELAYTIMER_MAXÌ65536Ö0 DN_ACCESSÌ65536Ö0 @@ -263,12 +358,72 @@ EUSERS EWOULDBLOCKÌ65536Ö0 EXDEVÌ65536Ö0 EXFULLÌ65536Ö0 +EXIFTAG_APERTUREVALUEÌ65536Ö0 +EXIFTAG_BRIGHTNESSVALUEÌ65536Ö0 +EXIFTAG_CFAPATTERNÌ65536Ö0 +EXIFTAG_COLORSPACEÌ65536Ö0 +EXIFTAG_COMPONENTSCONFIGURATIONÌ65536Ö0 +EXIFTAG_COMPRESSEDBITSPERPIXELÌ65536Ö0 +EXIFTAG_CONTRASTÌ65536Ö0 +EXIFTAG_CUSTOMRENDEREDÌ65536Ö0 +EXIFTAG_DATETIMEDIGITIZEDÌ65536Ö0 +EXIFTAG_DATETIMEORIGINALÌ65536Ö0 +EXIFTAG_DEVICESETTINGDESCRIPTIONÌ65536Ö0 +EXIFTAG_DIGITALZOOMRATIOÌ65536Ö0 +EXIFTAG_EXIFVERSIONÌ65536Ö0 +EXIFTAG_EXPOSUREBIASVALUEÌ65536Ö0 +EXIFTAG_EXPOSUREINDEXÌ65536Ö0 +EXIFTAG_EXPOSUREMODEÌ65536Ö0 +EXIFTAG_EXPOSUREPROGRAMÌ65536Ö0 +EXIFTAG_EXPOSURETIMEÌ65536Ö0 +EXIFTAG_FILESOURCEÌ65536Ö0 +EXIFTAG_FLASHÌ65536Ö0 +EXIFTAG_FLASHENERGYÌ65536Ö0 +EXIFTAG_FLASHPIXVERSIONÌ65536Ö0 +EXIFTAG_FNUMBERÌ65536Ö0 +EXIFTAG_FOCALLENGTHÌ65536Ö0 +EXIFTAG_FOCALLENGTHIN35MMFILMÌ65536Ö0 +EXIFTAG_FOCALPLANERESOLUTIONUNITÌ65536Ö0 +EXIFTAG_FOCALPLANEXRESOLUTIONÌ65536Ö0 +EXIFTAG_FOCALPLANEYRESOLUTIONÌ65536Ö0 +EXIFTAG_GAINCONTROLÌ65536Ö0 +EXIFTAG_IMAGEUNIQUEIDÌ65536Ö0 +EXIFTAG_ISOSPEEDRATINGSÌ65536Ö0 +EXIFTAG_LIGHTSOURCEÌ65536Ö0 +EXIFTAG_MAKERNOTEÌ65536Ö0 +EXIFTAG_MAXAPERTUREVALUEÌ65536Ö0 +EXIFTAG_METERINGMODEÌ65536Ö0 +EXIFTAG_OECFÌ65536Ö0 +EXIFTAG_PIXELXDIMENSIONÌ65536Ö0 +EXIFTAG_PIXELYDIMENSIONÌ65536Ö0 +EXIFTAG_RELATEDSOUNDFILEÌ65536Ö0 +EXIFTAG_SATURATIONÌ65536Ö0 +EXIFTAG_SCENECAPTURETYPEÌ65536Ö0 +EXIFTAG_SCENETYPEÌ65536Ö0 +EXIFTAG_SENSINGMETHODÌ65536Ö0 +EXIFTAG_SHARPNESSÌ65536Ö0 +EXIFTAG_SHUTTERSPEEDVALUEÌ65536Ö0 +EXIFTAG_SPATIALFREQUENCYRESPONSEÌ65536Ö0 +EXIFTAG_SPECTRALSENSITIVITYÌ65536Ö0 +EXIFTAG_SUBJECTAREAÌ65536Ö0 +EXIFTAG_SUBJECTDISTANCEÌ65536Ö0 +EXIFTAG_SUBJECTDISTANCERANGEÌ65536Ö0 +EXIFTAG_SUBJECTLOCATIONÌ65536Ö0 +EXIFTAG_SUBSECTIMEÌ65536Ö0 +EXIFTAG_SUBSECTIMEDIGITIZEDÌ65536Ö0 +EXIFTAG_SUBSECTIMEORIGINALÌ65536Ö0 +EXIFTAG_USERCOMMENTÌ65536Ö0 +EXIFTAG_WHITEBALANCEÌ65536Ö0 EXIT_FAILUREÌ65536Ö0 EXIT_SUCCESSÌ65536Ö0 EXPR_NEST_MAXÌ65536Ö0 +EXP_DONE_TMOUTÌ65536Ö0 EXTAÌ65536Ö0 EXTBÌ65536Ö0 EXTPROCÌ65536Ö0 +EXTRASAMPLE_ASSOCALPHAÌ65536Ö0 +EXTRASAMPLE_UNASSALPHAÌ65536Ö0 +EXTRASAMPLE_UNSPECIFIEDÌ65536Ö0 FALLOC_FL_COLLAPSE_RANGEÌ65536Ö0 FALLOC_FL_KEEP_SIZEÌ65536Ö0 FALLOC_FL_PUNCH_HOLEÌ65536Ö0 @@ -276,6 +431,18 @@ FALLOC_FL_ZERO_RANGE FALSEÌ65536Ö0 FAPPENDÌ65536Ö0 FASYNCÌ65536Ö0 +FAXMODE_BYTEALIGNÌ65536Ö0 +FAXMODE_CLASSFÌ65536Ö0 +FAXMODE_CLASSICÌ65536Ö0 +FAXMODE_NOEOLÌ65536Ö0 +FAXMODE_NORTCÌ65536Ö0 +FAXMODE_WORDALIGNÌ65536Ö0 +FAXPROFILE_CÌ65536Ö0 +FAXPROFILE_FÌ65536Ö0 +FAXPROFILE_JÌ65536Ö0 +FAXPROFILE_LÌ65536Ö0 +FAXPROFILE_MÌ65536Ö0 +FAXPROFILE_SÌ65536Ö0 FD_CLOEXECÌ65536Ö0 FD_CLRÌ131072Í(fd,fdsetp)Ö0 FD_ISSETÌ131072Í(fd,fdsetp)Ö0 @@ -286,7 +453,13 @@ FF0 FF1Ì65536Ö0 FFDLYÌ65536Ö0 FFSYNCÌ65536Ö0 +FIELD_CUSTOMÌ65536Ö0 FILENAME_MAXÌ65536Ö0 +FILETYPE_MASKÌ65536Ö0 +FILETYPE_PAGEÌ65536Ö0 +FILETYPE_REDUCEDIMAGEÌ65536Ö0 +FILLORDER_LSB2MSBÌ65536Ö0 +FILLORDER_MSB2LSBÌ65536Ö0 FIOASYNCÌ65536Ö0 FIOCLEXÌ65536Ö0 FIONBIOÌ65536Ö0 @@ -298,12 +471,23 @@ FNAME FNDELAYÌ65536Ö0 FNONBLOCKÌ65536Ö0 FOPEN_MAXÌ65536Ö0 +FPE_FLTDIVÌ65536Ö0 +FPE_FLTINVÌ65536Ö0 +FPE_FLTOVFÌ65536Ö0 +FPE_FLTRESÌ65536Ö0 +FPE_FLTSUBÌ65536Ö0 +FPE_FLTUNDÌ65536Ö0 +FPE_INTDIVÌ65536Ö0 +FPE_INTOVFÌ65536Ö0 FP_ILOGB0Ì65536Ö0 FP_ILOGBNANÌ65536Ö0 FP_INFINITEÌ65536Ö0 FP_NANÌ65536Ö0 FP_NORMALÌ65536Ö0 FP_SUBNORMALÌ65536Ö0 +FP_XSTATE_MAGIC1Ì65536Ö0 +FP_XSTATE_MAGIC2Ì65536Ö0 +FP_XSTATE_MAGIC2_SIZEÌ65536Ö0 FP_ZEROÌ65536Ö0 FREEÌ131072Í(ptr)Ö0 F_DUPFDÌ65536Ö0 @@ -343,8 +527,24 @@ F_ULOCK F_UNLCKÌ65536Ö0 F_WRLCKÌ65536Ö0 GÌ16384Ö0Ïglob_pars +GRAYRESPONSEUNIT_100000SÌ65536Ö0 +GRAYRESPONSEUNIT_10000SÌ65536Ö0 +GRAYRESPONSEUNIT_1000SÌ65536Ö0 +GRAYRESPONSEUNIT_100SÌ65536Ö0 +GRAYRESPONSEUNIT_10SÌ65536Ö0 GREENÌ65536Ö0 +GROUP3OPT_2DENCODINGÌ65536Ö0 +GROUP3OPT_FILLBITSÌ65536Ö0 +GROUP3OPT_UNCOMPRESSEDÌ65536Ö0 +GROUP4OPT_UNCOMPRESSEDÌ65536Ö0 GdefaultÌ16384Ö0Ïglob_pars const +HÌ64Îanon_struct_5Ö0Ïsize_t +HAVE_IEEEFPÌ65536Ö0 +HEATER_LEAVEÌ4Îanon_enum_7Ö0 +HEATER_OFFÌ4Îanon_enum_7Ö0 +HEATER_ONÌ4Îanon_enum_7Ö0 +HOST_BIGENDIANÌ65536Ö0 +HOST_FILLORDERÌ65536Ö0 HOST_NAME_MAXÌ65536Ö0 HUGEÌ65536Ö0 HUGE_VALÌ65536Ö0 @@ -352,13 +552,34 @@ HUGE_VALF HUGE_VALLÌ65536Ö0 HUPCLÌ65536Ö0 ICANONÌ65536Ö0 +ICC_SUPPORTÌ65536Ö0 ICRNLÌ65536Ö0 IEXTENÌ65536Ö0 IGNBRKÌ65536Ö0 IGNCRÌ65536Ö0 IGNPARÌ65536Ö0 +ILL_BADSTKÌ65536Ö0 +ILL_COPROCÌ65536Ö0 +ILL_ILLADRÌ65536Ö0 +ILL_ILLOPCÌ65536Ö0 +ILL_ILLOPNÌ65536Ö0 +ILL_ILLTRPÌ65536Ö0 +ILL_PRVOPCÌ65536Ö0 +ILL_PRVREGÌ65536Ö0 IMAXBELÌ65536Ö0 +IMHEIGHTÌ65536Ö0 +IMTRANS_CONTINUEÌ65536Ö0 +IMTRANS_RESENDÌ65536Ö0 +IMTRANS_STOPÌ65536Ö0 +IMTRANS_TMOUTÌ65536Ö0 +IMTYPE_AUTODARKÌ4Îanon_enum_3Ö0 +IMTYPE_DARKÌ4Îanon_enum_3Ö0 +IMTYPE_LIGHTÌ4Îanon_enum_3Ö0 +IMWIDTHÌ65536Ö0 +IM_CROPWIDTHÌ65536Ö0 INFINITYÌ65536Ö0 +INKSET_CMYKÌ65536Ö0 +INKSET_MULTIINKÌ65536Ö0 INLCRÌ65536Ö0 INPCKÌ65536Ö0 INT16_CÌ131072Í(c)Ö0 @@ -402,6 +623,7 @@ IOC_IN IOC_INOUTÌ65536Ö0 IOC_OUTÌ65536Ö0 IOV_MAXÌ65536Ö0 +IPTC_SUPPORTÌ65536Ö0 ISIGÌ65536Ö0 ISTRIPÌ65536Ö0 ITIMER_PROFÌ65536Ö0 @@ -412,6 +634,13 @@ IUTF8 IXANYÌ65536Ö0 IXOFFÌ65536Ö0 IXONÌ65536Ö0 +JPEGCOLORMODE_RAWÌ65536Ö0 +JPEGCOLORMODE_RGBÌ65536Ö0 +JPEGPROC_BASELINEÌ65536Ö0 +JPEGPROC_LOSSLESSÌ65536Ö0 +JPEGTABLESMODE_HUFFÌ65536Ö0 +JPEGTABLESMODE_QUANTÌ65536Ö0 +JPEG_SUPPORTÌ65536Ö0 LC_ADDRESSÌ65536Ö0 LC_ADDRESS_MASKÌ65536Ö0 LC_ALLÌ65536Ö0 @@ -453,11 +682,14 @@ LOCK_SH LOCK_UNÌ65536Ö0 LOCK_WRITEÌ65536Ö0 LOGIN_NAME_MAXÌ65536Ö0 +LOGLUV_PUBLICÌ65536Ö0 +LOGLUV_SUPPORTÌ65536Ö0 LONG_BITÌ65536Ö0 LONG_LONG_MAXÌ65536Ö0 LONG_LONG_MINÌ65536Ö0 LONG_MAXÌ65536Ö0 LONG_MINÌ65536Ö0 +LZW_SUPPORTÌ65536Ö0 L_INCRÌ65536Ö0 L_SETÌ65536Ö0 L_XTNDÌ65536Ö0 @@ -503,20 +735,26 @@ MAP_TYPE MATH_ERREXCEPTÌ65536Ö0 MATH_ERRNOÌ65536Ö0 MAX_CANONÌ65536Ö0 +MAX_EXPTIME_100Ì65536Ö0 MAX_HANDLE_SZÌ65536Ö0 MAX_INPUTÌ65536Ö0 +MAX_SUBFRAME_SZÌ65536Ö0 MB_CUR_MAXÌ65536Ö0 MB_LEN_MAXÌ65536Ö0 MCL_CURRENTÌ65536Ö0 MCL_FUTUREÌ65536Ö0 MCL_ONFAULTÌ65536Ö0 +MDI_BIGENDIANÌ65536Ö0 +MDI_LITTLEENDIANÌ65536Ö0 +MDI_SUPPORTÌ65536Ö0 +MINSIGSTKSZÌ65536Ö0 MQ_PRIO_MAXÌ65536Ö0 MREMAP_FIXEDÌ65536Ö0 MREMAP_MAYMOVEÌ65536Ö0 MS_ASYNCÌ65536Ö0 MS_INVALIDATEÌ65536Ö0 MS_SYNCÌ65536Ö0 -MULT_PARÌ4Îanon_enum_1Ö0 +MULT_PARÌ4Îanon_enum_9Ö0 M_1_PIÌ65536Ö0 M_1_PIlÌ65536Ö0 M_2_PIÌ65536Ö0 @@ -543,6 +781,7 @@ M_SQRT1_2 M_SQRT1_2lÌ65536Ö0 M_SQRT2Ì65536Ö0 M_SQRT2lÌ65536Ö0 +MapÌ64Î_TIFFRGBAImageÖ0ÏTIFFRGBValue * My_mmapÌ16Í(char *filename)Ö0Ïmmapbuf * My_mmapÌ1024Í(char *filename)Ö0Ïmmapbuf * My_munmapÌ16Í(mmapbuf *b)Ö0Ïvoid @@ -551,8 +790,10 @@ NAME_MAX NANÌ65536Ö0 NCCÌ65536Ö0 NCCSÌ65536Ö0 -NEED_ARGÌ4Îanon_enum_1Ö0 +NEED_ARGÌ4Îanon_enum_9Ö0 +NEXT_SUPPORTÌ65536Ö0 NFDBITSÌ65536Ö0 +NGREGÌ65536Ö0 NGROUPS_MAXÌ65536Ö0 NL0Ì65536Ö0 NL1Ì65536Ö0 @@ -564,8 +805,9 @@ NL_NMAX NL_SETMAXÌ65536Ö0 NL_TEXTMAXÌ65536Ö0 NOFLSHÌ65536Ö0 -NO_ARGSÌ4Îanon_enum_1Ö0 +NO_ARGSÌ4Îanon_enum_9Ö0 NR_OPENÌ65536Ö0 +NSIGÌ65536Ö0 NULLÌ65536Ö0 NZEROÌ65536Ö0 N_Ì131072Í(String)Ö0 @@ -587,7 +829,11 @@ N_TTY N_X25Ì65536Ö0 OCRNLÌ65536Ö0 OFDELÌ65536Ö0 +OFILETYPE_IMAGEÌ65536Ö0 +OFILETYPE_PAGEÌ65536Ö0 +OFILETYPE_REDUCEDIMAGEÌ65536Ö0 OFILLÌ65536Ö0 +OJPEG_SUPPORTÌ65536Ö0 OLCUCÌ65536Ö0 OLDCOLORÌ65536Ö0 ONLCRÌ65536Ö0 @@ -595,7 +841,15 @@ ONLRET ONOCRÌ65536Ö0 OPEN_MAXÌ65536Ö0 OPOSTÌ65536Ö0 -OPT_ARGÌ4Îanon_enum_1Ö0 +OPT_ARGÌ4Îanon_enum_9Ö0 +ORIENTATION_BOTLEFTÌ65536Ö0 +ORIENTATION_BOTRIGHTÌ65536Ö0 +ORIENTATION_LEFTBOTÌ65536Ö0 +ORIENTATION_LEFTTOPÌ65536Ö0 +ORIENTATION_RIGHTBOTÌ65536Ö0 +ORIENTATION_RIGHTTOPÌ65536Ö0 +ORIENTATION_TOPLEFTÌ65536Ö0 +ORIENTATION_TOPRIGHTÌ65536Ö0 OVERFLOWÌ65536Ö0 O_ACCMODEÌ65536Ö0 O_APPENDÌ65536Ö0 @@ -621,14 +875,47 @@ O_SYNC O_TMPFILEÌ65536Ö0 O_TRUNCÌ65536Ö0 O_WRONLYÌ65536Ö0 +PACKBITS_SUPPORTÌ65536Ö0 +PALmapÌ64Î_TIFFRGBAImageÖ0Ïuint32 * * PARENBÌ65536Ö0 PARMRKÌ65536Ö0 PARODDÌ65536Ö0 PATH_MAXÌ65536Ö0 PDP_ENDIANÌ65536Ö0 PENDINÌ65536Ö0 +PERSAMPLE_MERGEDÌ65536Ö0 +PERSAMPLE_MULTIÌ65536Ö0 +PHOTOMETRIC_CFAÌ65536Ö0 +PHOTOMETRIC_CIELABÌ65536Ö0 +PHOTOMETRIC_ICCLABÌ65536Ö0 +PHOTOMETRIC_ITULABÌ65536Ö0 +PHOTOMETRIC_LOGLÌ65536Ö0 +PHOTOMETRIC_LOGLUVÌ65536Ö0 +PHOTOMETRIC_MASKÌ65536Ö0 +PHOTOMETRIC_MINISBLACKÌ65536Ö0 +PHOTOMETRIC_MINISWHITEÌ65536Ö0 +PHOTOMETRIC_PALETTEÌ65536Ö0 +PHOTOMETRIC_RGBÌ65536Ö0 +PHOTOMETRIC_SEPARATEDÌ65536Ö0 +PHOTOMETRIC_YCBCRÌ65536Ö0 +PHOTOSHOP_SUPPORTÌ65536Ö0 PIPE_BUFÌ65536Ö0 +PIXARLOGDATAFMT_11BITLOGÌ65536Ö0 +PIXARLOGDATAFMT_12BITPICIOÌ65536Ö0 +PIXARLOGDATAFMT_16BITÌ65536Ö0 +PIXARLOGDATAFMT_8BITÌ65536Ö0 +PIXARLOGDATAFMT_8BITABGRÌ65536Ö0 +PIXARLOGDATAFMT_FLOATÌ65536Ö0 +PIXARLOG_SUPPORTÌ65536Ö0 +PLANARCONFIG_CONTIGÌ65536Ö0 +PLANARCONFIG_SEPARATEÌ65536Ö0 PLOSSÌ65536Ö0 +POLL_ERRÌ65536Ö0 +POLL_HUPÌ65536Ö0 +POLL_INÌ65536Ö0 +POLL_MSGÌ65536Ö0 +POLL_OUTÌ65536Ö0 +POLL_PRIÌ65536Ö0 POSIX_FADV_DONTNEEDÌ65536Ö0 POSIX_FADV_NOREUSEÌ65536Ö0 POSIX_FADV_NORMALÌ65536Ö0 @@ -640,6 +927,11 @@ POSIX_MADV_NORMAL POSIX_MADV_RANDOMÌ65536Ö0 POSIX_MADV_SEQUENTIALÌ65536Ö0 POSIX_MADV_WILLNEEDÌ65536Ö0 +PREDICTOR_FLOATINGPOINTÌ65536Ö0 +PREDICTOR_HORIZONTALÌ65536Ö0 +PREDICTOR_NONEÌ65536Ö0 +PROFILETYPE_G3_FAXÌ65536Ö0 +PROFILETYPE_UNSPECIFIEDÌ65536Ö0 PROT_EXECÌ65536Ö0 PROT_GROWSDOWNÌ65536Ö0 PROT_GROWSUPÌ65536Ö0 @@ -655,9 +947,52 @@ PTRDIFF_MIN P_tmpdirÌ65536Ö0 RAND_MAXÌ65536Ö0 REDÌ65536Ö0 +REG_CR2Ì65536Ö0 +REG_CSGSFSÌ65536Ö0 +REG_EFLÌ65536Ö0 +REG_ERRÌ65536Ö0 +REG_OLDMASKÌ65536Ö0 +REG_R10Ì65536Ö0 +REG_R11Ì65536Ö0 +REG_R12Ì65536Ö0 +REG_R13Ì65536Ö0 +REG_R14Ì65536Ö0 +REG_R15Ì65536Ö0 +REG_R8Ì65536Ö0 +REG_R9Ì65536Ö0 +REG_RAXÌ65536Ö0 +REG_RBPÌ65536Ö0 +REG_RBXÌ65536Ö0 +REG_RCXÌ65536Ö0 +REG_RDIÌ65536Ö0 +REG_RDXÌ65536Ö0 +REG_RIPÌ65536Ö0 +REG_RSIÌ65536Ö0 +REG_RSPÌ65536Ö0 +REG_TRAPNOÌ65536Ö0 +RESUNIT_CENTIMETERÌ65536Ö0 +RESUNIT_INCHÌ65536Ö0 +RESUNIT_NONEÌ65536Ö0 RE_DUP_MAXÌ65536Ö0 RTSIG_MAXÌ65536Ö0 R_OKÌ65536Ö0 +SAMPLEFORMAT_COMPLEXIEEEFPÌ65536Ö0 +SAMPLEFORMAT_COMPLEXINTÌ65536Ö0 +SAMPLEFORMAT_IEEEFPÌ65536Ö0 +SAMPLEFORMAT_INTÌ65536Ö0 +SAMPLEFORMAT_UINTÌ65536Ö0 +SAMPLEFORMAT_VOIDÌ65536Ö0 +SA_INTERRUPTÌ65536Ö0 +SA_NOCLDSTOPÌ65536Ö0 +SA_NOCLDWAITÌ65536Ö0 +SA_NODEFERÌ65536Ö0 +SA_NOMASKÌ65536Ö0 +SA_ONESHOTÌ65536Ö0 +SA_ONSTACKÌ65536Ö0 +SA_RESETHANDÌ65536Ö0 +SA_RESTARTÌ65536Ö0 +SA_SIGINFOÌ65536Ö0 +SA_STACKÌ65536Ö0 SCHAR_MAXÌ65536Ö0 SCHAR_MINÌ65536Ö0 SEEK_CURÌ65536Ö0 @@ -665,11 +1000,68 @@ SEEK_DATA SEEK_ENDÌ65536Ö0 SEEK_HOLEÌ65536Ö0 SEEK_SETÌ65536Ö0 +SEGV_ACCERRÌ65536Ö0 +SEGV_MAPERRÌ65536Ö0 SEM_VALUE_MAXÌ65536Ö0 +SGILOGDATAFMT_16BITÌ65536Ö0 +SGILOGDATAFMT_8BITÌ65536Ö0 +SGILOGDATAFMT_FLOATÌ65536Ö0 +SGILOGDATAFMT_RAWÌ65536Ö0 +SGILOGENCODE_NODITHERÌ65536Ö0 +SGILOGENCODE_RANDITHERÌ65536Ö0 SHRT_MAXÌ65536Ö0 SHRT_MINÌ65536Ö0 +SIGABRTÌ65536Ö0 +SIGALRMÌ65536Ö0 +SIGBUSÌ65536Ö0 +SIGCHLDÌ65536Ö0 +SIGCLDÌ65536Ö0 +SIGCONTÌ65536Ö0 +SIGEV_NONEÌ65536Ö0 +SIGEV_SIGNALÌ65536Ö0 +SIGEV_THREADÌ65536Ö0 +SIGEV_THREAD_IDÌ65536Ö0 +SIGFPEÌ65536Ö0 +SIGHUPÌ65536Ö0 +SIGILLÌ65536Ö0 +SIGINTÌ65536Ö0 +SIGIOÌ65536Ö0 +SIGIOTÌ65536Ö0 +SIGKILLÌ65536Ö0 +SIGPIPEÌ65536Ö0 +SIGPOLLÌ65536Ö0 +SIGPROFÌ65536Ö0 +SIGPWRÌ65536Ö0 +SIGQUITÌ65536Ö0 +SIGRTMAXÌ65536Ö0 +SIGRTMINÌ65536Ö0 +SIGSEGVÌ65536Ö0 +SIGSTKFLTÌ65536Ö0 +SIGSTKSZÌ65536Ö0 +SIGSTOPÌ65536Ö0 +SIGSYSÌ65536Ö0 +SIGTERMÌ65536Ö0 +SIGTRAPÌ65536Ö0 +SIGTSTPÌ65536Ö0 +SIGTTINÌ65536Ö0 +SIGTTOUÌ65536Ö0 +SIGUNUSEDÌ65536Ö0 +SIGURGÌ65536Ö0 +SIGUSR1Ì65536Ö0 +SIGUSR2Ì65536Ö0 +SIGVTALRMÌ65536Ö0 +SIGWINCHÌ65536Ö0 +SIGXCPUÌ65536Ö0 +SIGXFSZÌ65536Ö0 SIG_ATOMIC_MAXÌ65536Ö0 SIG_ATOMIC_MINÌ65536Ö0 +SIG_BLOCKÌ65536Ö0 +SIG_DFLÌ65536Ö0 +SIG_ERRÌ65536Ö0 +SIG_HOLDÌ65536Ö0 +SIG_IGNÌ65536Ö0 +SIG_SETMASKÌ65536Ö0 +SIG_UNBLOCKÌ65536Ö0 SINGÌ65536Ö0 SIOCADDDLCIÌ65536Ö0 SIOCADDMULTIÌ65536Ö0 @@ -726,14 +1118,30 @@ SIOCSIFTXQLEN SIOCSRARPÌ65536Ö0 SIOGIFINDEXÌ65536Ö0 SIZE_MAXÌ65536Ö0 +SI_ASYNCIOÌ65536Ö0 +SI_ASYNCNLÌ65536Ö0 +SI_KERNELÌ65536Ö0 +SI_MESGQÌ65536Ö0 +SI_QUEUEÌ65536Ö0 +SI_SIGIOÌ65536Ö0 +SI_TIMERÌ65536Ö0 +SI_TKILLÌ65536Ö0 +SI_USERÌ65536Ö0 SPLICE_F_GIFTÌ65536Ö0 SPLICE_F_MOREÌ65536Ö0 SPLICE_F_MOVEÌ65536Ö0 SPLICE_F_NONBLOCKÌ65536Ö0 SSIZE_MAXÌ65536Ö0 +SS_DISABLEÌ65536Ö0 +SS_ONSTACKÌ65536Ö0 STDERR_FILENOÌ65536Ö0 STDIN_FILENOÌ65536Ö0 STDOUT_FILENOÌ65536Ö0 +STORE_NEXTNUMÌ4Îanon_enum_2Ö0 +STORE_NORMALÌ4Îanon_enum_2Ö0 +STORE_REWRITEÌ4Îanon_enum_2Ö0 +STRIPCHOP_DEFAULTÌ65536Ö0 +SUBIFD_SUPPORTÌ65536Ö0 SYNC_FILE_RANGE_WAIT_AFTERÌ65536Ö0 SYNC_FILE_RANGE_WAIT_BEFOREÌ65536Ö0 SYNC_FILE_RANGE_WRITEÌ65536Ö0 @@ -810,6 +1218,287 @@ TCSETXF TCSETXWÌ65536Ö0 TCXONCÌ65536Ö0 TEMP_FAILURE_RETRYÌ131072Í(expression)Ö0 +THRESHHOLD_BILEVELÌ65536Ö0 +THRESHHOLD_ERRORDIFFUSEÌ65536Ö0 +THRESHHOLD_HALFTONEÌ65536Ö0 +THUNDER_SUPPORTÌ65536Ö0 +TIFFÌ4096Ö0Ïtiff +TIFFCIELabToRGBÌ4096Ö0Ïanon_struct_19 +TIFFCodecÌ4096Ö0Ïanon_struct_21 +TIFFDataTypeÌ4096Ö0Ïanon_enum_16 +TIFFDisplayÌ4096Ö0Ïanon_struct_17 +TIFFGetAÌ131072Í(abgr)Ö0 +TIFFGetBÌ131072Í(abgr)Ö0 +TIFFGetGÌ131072Í(abgr)Ö0 +TIFFGetRÌ131072Í(abgr)Ö0 +TIFFHeaderBigÌ4096Ö0Ïanon_struct_15 +TIFFHeaderClassicÌ4096Ö0Ïanon_struct_14 +TIFFHeaderCommonÌ4096Ö0Ïanon_struct_13 +TIFFInitMethodÌ4096Ö0Ïtypedef int +TIFFLIB_VERSIONÌ65536Ö0 +TIFFLIB_VERSION_STRÌ65536Ö0 +TIFFPRINT_COLORMAPÌ65536Ö0 +TIFFPRINT_CURVESÌ65536Ö0 +TIFFPRINT_JPEGACTABLESÌ65536Ö0 +TIFFPRINT_JPEGDCTABLESÌ65536Ö0 +TIFFPRINT_JPEGQTABLESÌ65536Ö0 +TIFFPRINT_NONEÌ65536Ö0 +TIFFPRINT_STRIPSÌ65536Ö0 +TIFFRGBAImageÌ4096Ö0Ï_TIFFRGBAImage +TIFFRGBValueÌ4096Ö0Ïunsigned char +TIFFTAG_ACTIVEAREAÌ65536Ö0 +TIFFTAG_ANALOGBALANCEÌ65536Ö0 +TIFFTAG_ANTIALIASSTRENGTHÌ65536Ö0 +TIFFTAG_ARTISTÌ65536Ö0 +TIFFTAG_ASSHOTICCPROFILEÌ65536Ö0 +TIFFTAG_ASSHOTNEUTRALÌ65536Ö0 +TIFFTAG_ASSHOTPREPROFILEMATRIXÌ65536Ö0 +TIFFTAG_ASSHOTWHITEXYÌ65536Ö0 +TIFFTAG_BADFAXLINESÌ65536Ö0 +TIFFTAG_BASELINEEXPOSUREÌ65536Ö0 +TIFFTAG_BASELINENOISEÌ65536Ö0 +TIFFTAG_BASELINESHARPNESSÌ65536Ö0 +TIFFTAG_BAYERGREENSPLITÌ65536Ö0 +TIFFTAG_BESTQUALITYSCALEÌ65536Ö0 +TIFFTAG_BITSPERSAMPLEÌ65536Ö0 +TIFFTAG_BLACKLEVELÌ65536Ö0 +TIFFTAG_BLACKLEVELDELTAHÌ65536Ö0 +TIFFTAG_BLACKLEVELDELTAVÌ65536Ö0 +TIFFTAG_BLACKLEVELREPEATDIMÌ65536Ö0 +TIFFTAG_CALIBRATIONILLUMINANT1Ì65536Ö0 +TIFFTAG_CALIBRATIONILLUMINANT2Ì65536Ö0 +TIFFTAG_CAMERACALIBRATION1Ì65536Ö0 +TIFFTAG_CAMERACALIBRATION2Ì65536Ö0 +TIFFTAG_CAMERASERIALNUMBERÌ65536Ö0 +TIFFTAG_CELLLENGTHÌ65536Ö0 +TIFFTAG_CELLWIDTHÌ65536Ö0 +TIFFTAG_CFALAYOUTÌ65536Ö0 +TIFFTAG_CFAPATTERNÌ65536Ö0 +TIFFTAG_CFAPLANECOLORÌ65536Ö0 +TIFFTAG_CFAREPEATPATTERNDIMÌ65536Ö0 +TIFFTAG_CHROMABLURRADIUSÌ65536Ö0 +TIFFTAG_CLEANFAXDATAÌ65536Ö0 +TIFFTAG_CLIPPATHÌ65536Ö0 +TIFFTAG_CODINGMETHODSÌ65536Ö0 +TIFFTAG_COLORMAPÌ65536Ö0 +TIFFTAG_COLORMATRIX1Ì65536Ö0 +TIFFTAG_COLORMATRIX2Ì65536Ö0 +TIFFTAG_COLORRESPONSEUNITÌ65536Ö0 +TIFFTAG_COMPRESSIONÌ65536Ö0 +TIFFTAG_CONSECUTIVEBADFAXLINESÌ65536Ö0 +TIFFTAG_COPYRIGHTÌ65536Ö0 +TIFFTAG_CURRENTICCPROFILEÌ65536Ö0 +TIFFTAG_CURRENTPREPROFILEMATRIXÌ65536Ö0 +TIFFTAG_DATATYPEÌ65536Ö0 +TIFFTAG_DATETIMEÌ65536Ö0 +TIFFTAG_DCSBALANCEARRAYÌ65536Ö0 +TIFFTAG_DCSCALIBRATIONFDÌ65536Ö0 +TIFFTAG_DCSCLIPRECTANGLEÌ65536Ö0 +TIFFTAG_DCSCORRECTMATRIXÌ65536Ö0 +TIFFTAG_DCSGAMMAÌ65536Ö0 +TIFFTAG_DCSHUESHIFTVALUESÌ65536Ö0 +TIFFTAG_DCSIMAGERTYPEÌ65536Ö0 +TIFFTAG_DCSINTERPMODEÌ65536Ö0 +TIFFTAG_DCSTOESHOULDERPTSÌ65536Ö0 +TIFFTAG_DECODEÌ65536Ö0 +TIFFTAG_DEFAULTCROPORIGINÌ65536Ö0 +TIFFTAG_DEFAULTCROPSIZEÌ65536Ö0 +TIFFTAG_DEFAULTSCALEÌ65536Ö0 +TIFFTAG_DNGBACKWARDVERSIONÌ65536Ö0 +TIFFTAG_DNGPRIVATEDATAÌ65536Ö0 +TIFFTAG_DNGVERSIONÌ65536Ö0 +TIFFTAG_DOCUMENTNAMEÌ65536Ö0 +TIFFTAG_DOTRANGEÌ65536Ö0 +TIFFTAG_EXIFIFDÌ65536Ö0 +TIFFTAG_EXTRASAMPLESÌ65536Ö0 +TIFFTAG_FAXDCSÌ65536Ö0 +TIFFTAG_FAXFILLFUNCÌ65536Ö0 +TIFFTAG_FAXMODEÌ65536Ö0 +TIFFTAG_FAXPROFILEÌ65536Ö0 +TIFFTAG_FAXRECVPARAMSÌ65536Ö0 +TIFFTAG_FAXRECVTIMEÌ65536Ö0 +TIFFTAG_FAXSUBADDRESSÌ65536Ö0 +TIFFTAG_FEDEX_EDRÌ65536Ö0 +TIFFTAG_FILLORDERÌ65536Ö0 +TIFFTAG_FRAMECOUNTÌ65536Ö0 +TIFFTAG_FREEBYTECOUNTSÌ65536Ö0 +TIFFTAG_FREEOFFSETSÌ65536Ö0 +TIFFTAG_GLOBALPARAMETERSIFDÌ65536Ö0 +TIFFTAG_GPSIFDÌ65536Ö0 +TIFFTAG_GRAYRESPONSECURVEÌ65536Ö0 +TIFFTAG_GRAYRESPONSEUNITÌ65536Ö0 +TIFFTAG_GROUP3OPTIONSÌ65536Ö0 +TIFFTAG_GROUP4OPTIONSÌ65536Ö0 +TIFFTAG_HALFTONEHINTSÌ65536Ö0 +TIFFTAG_HOSTCOMPUTERÌ65536Ö0 +TIFFTAG_ICCPROFILEÌ65536Ö0 +TIFFTAG_IMAGEBASECOLORÌ65536Ö0 +TIFFTAG_IMAGEDEPTHÌ65536Ö0 +TIFFTAG_IMAGEDESCRIPTIONÌ65536Ö0 +TIFFTAG_IMAGELAYERÌ65536Ö0 +TIFFTAG_IMAGELENGTHÌ65536Ö0 +TIFFTAG_IMAGEWIDTHÌ65536Ö0 +TIFFTAG_INDEXEDÌ65536Ö0 +TIFFTAG_INKNAMESÌ65536Ö0 +TIFFTAG_INKSETÌ65536Ö0 +TIFFTAG_INTEROPERABILITYIFDÌ65536Ö0 +TIFFTAG_IT8BITSPEREXTENDEDRUNLENGTHÌ65536Ö0 +TIFFTAG_IT8BITSPERRUNLENGTHÌ65536Ö0 +TIFFTAG_IT8BKGCOLORINDICATORÌ65536Ö0 +TIFFTAG_IT8BKGCOLORVALUEÌ65536Ö0 +TIFFTAG_IT8CMYKEQUIVALENTÌ65536Ö0 +TIFFTAG_IT8COLORCHARACTERIZATIONÌ65536Ö0 +TIFFTAG_IT8COLORSEQUENCEÌ65536Ö0 +TIFFTAG_IT8COLORTABLEÌ65536Ö0 +TIFFTAG_IT8HCUSAGEÌ65536Ö0 +TIFFTAG_IT8HEADERÌ65536Ö0 +TIFFTAG_IT8IMAGECOLORINDICATORÌ65536Ö0 +TIFFTAG_IT8IMAGECOLORVALUEÌ65536Ö0 +TIFFTAG_IT8PIXELINTENSITYRANGEÌ65536Ö0 +TIFFTAG_IT8RASTERPADDINGÌ65536Ö0 +TIFFTAG_IT8SITEÌ65536Ö0 +TIFFTAG_IT8TRANSPARENCYINDICATORÌ65536Ö0 +TIFFTAG_IT8TRAPINDICATORÌ65536Ö0 +TIFFTAG_JBIGOPTIONSÌ65536Ö0 +TIFFTAG_JPEGACTABLESÌ65536Ö0 +TIFFTAG_JPEGCOLORMODEÌ65536Ö0 +TIFFTAG_JPEGDCTABLESÌ65536Ö0 +TIFFTAG_JPEGIFBYTECOUNTÌ65536Ö0 +TIFFTAG_JPEGIFOFFSETÌ65536Ö0 +TIFFTAG_JPEGLOSSLESSPREDICTORSÌ65536Ö0 +TIFFTAG_JPEGPOINTTRANSFORMÌ65536Ö0 +TIFFTAG_JPEGPROCÌ65536Ö0 +TIFFTAG_JPEGQTABLESÌ65536Ö0 +TIFFTAG_JPEGQUALITYÌ65536Ö0 +TIFFTAG_JPEGRESTARTINTERVALÌ65536Ö0 +TIFFTAG_JPEGTABLESÌ65536Ö0 +TIFFTAG_JPEGTABLESMODEÌ65536Ö0 +TIFFTAG_LENSINFOÌ65536Ö0 +TIFFTAG_LINEARIZATIONTABLEÌ65536Ö0 +TIFFTAG_LINEARRESPONSELIMITÌ65536Ö0 +TIFFTAG_LOCALIZEDCAMERAMODELÌ65536Ö0 +TIFFTAG_LZMAPRESETÌ65536Ö0 +TIFFTAG_MAKEÌ65536Ö0 +TIFFTAG_MAKERNOTESAFETYÌ65536Ö0 +TIFFTAG_MASKEDAREASÌ65536Ö0 +TIFFTAG_MATTEINGÌ65536Ö0 +TIFFTAG_MAXSAMPLEVALUEÌ65536Ö0 +TIFFTAG_MINSAMPLEVALUEÌ65536Ö0 +TIFFTAG_MODELÌ65536Ö0 +TIFFTAG_MODENUMBERÌ65536Ö0 +TIFFTAG_NUMBEROFINKSÌ65536Ö0 +TIFFTAG_OPIIMAGEIDÌ65536Ö0 +TIFFTAG_OPIPROXYÌ65536Ö0 +TIFFTAG_ORIENTATIONÌ65536Ö0 +TIFFTAG_ORIGINALRAWFILEDATAÌ65536Ö0 +TIFFTAG_ORIGINALRAWFILENAMEÌ65536Ö0 +TIFFTAG_OSUBFILETYPEÌ65536Ö0 +TIFFTAG_PAGENAMEÌ65536Ö0 +TIFFTAG_PAGENUMBERÌ65536Ö0 +TIFFTAG_PERSAMPLEÌ65536Ö0 +TIFFTAG_PHOTOMETRICÌ65536Ö0 +TIFFTAG_PHOTOSHOPÌ65536Ö0 +TIFFTAG_PIXARLOGDATAFMTÌ65536Ö0 +TIFFTAG_PIXARLOGQUALITYÌ65536Ö0 +TIFFTAG_PIXAR_FOVCOTÌ65536Ö0 +TIFFTAG_PIXAR_IMAGEFULLLENGTHÌ65536Ö0 +TIFFTAG_PIXAR_IMAGEFULLWIDTHÌ65536Ö0 +TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERAÌ65536Ö0 +TIFFTAG_PIXAR_MATRIX_WORLDTOSCREENÌ65536Ö0 +TIFFTAG_PIXAR_TEXTUREFORMATÌ65536Ö0 +TIFFTAG_PIXAR_WRAPMODESÌ65536Ö0 +TIFFTAG_PLANARCONFIGÌ65536Ö0 +TIFFTAG_PREDICTORÌ65536Ö0 +TIFFTAG_PRIMARYCHROMATICITIESÌ65536Ö0 +TIFFTAG_PROFILETYPEÌ65536Ö0 +TIFFTAG_RAWDATAUNIQUEIDÌ65536Ö0 +TIFFTAG_REDUCTIONMATRIX1Ì65536Ö0 +TIFFTAG_REDUCTIONMATRIX2Ì65536Ö0 +TIFFTAG_REFERENCEBLACKWHITEÌ65536Ö0 +TIFFTAG_REFPTSÌ65536Ö0 +TIFFTAG_REGIONAFFINEÌ65536Ö0 +TIFFTAG_REGIONTACKPOINTÌ65536Ö0 +TIFFTAG_REGIONWARPCORNERSÌ65536Ö0 +TIFFTAG_RESOLUTIONUNITÌ65536Ö0 +TIFFTAG_RICHTIFFIPTCÌ65536Ö0 +TIFFTAG_ROWSPERSTRIPÌ65536Ö0 +TIFFTAG_SAMPLEFORMATÌ65536Ö0 +TIFFTAG_SAMPLESPERPIXELÌ65536Ö0 +TIFFTAG_SGILOGDATAFMTÌ65536Ö0 +TIFFTAG_SGILOGENCODEÌ65536Ö0 +TIFFTAG_SHADOWSCALEÌ65536Ö0 +TIFFTAG_SMAXSAMPLEVALUEÌ65536Ö0 +TIFFTAG_SMINSAMPLEVALUEÌ65536Ö0 +TIFFTAG_SOFTWAREÌ65536Ö0 +TIFFTAG_STONITSÌ65536Ö0 +TIFFTAG_STRIPBYTECOUNTSÌ65536Ö0 +TIFFTAG_STRIPOFFSETSÌ65536Ö0 +TIFFTAG_STRIPROWCOUNTSÌ65536Ö0 +TIFFTAG_SUBFILETYPEÌ65536Ö0 +TIFFTAG_SUBIFDÌ65536Ö0 +TIFFTAG_T4OPTIONSÌ65536Ö0 +TIFFTAG_T6OPTIONSÌ65536Ö0 +TIFFTAG_T82OPTIONSÌ65536Ö0 +TIFFTAG_TARGETPRINTERÌ65536Ö0 +TIFFTAG_THRESHHOLDINGÌ65536Ö0 +TIFFTAG_TILEBYTECOUNTSÌ65536Ö0 +TIFFTAG_TILEDEPTHÌ65536Ö0 +TIFFTAG_TILELENGTHÌ65536Ö0 +TIFFTAG_TILEOFFSETSÌ65536Ö0 +TIFFTAG_TILEWIDTHÌ65536Ö0 +TIFFTAG_TRANSFERFUNCTIONÌ65536Ö0 +TIFFTAG_UNIQUECAMERAMODELÌ65536Ö0 +TIFFTAG_VERSIONYEARÌ65536Ö0 +TIFFTAG_WHITELEVELÌ65536Ö0 +TIFFTAG_WHITEPOINTÌ65536Ö0 +TIFFTAG_WRITERSERIALNUMBERÌ65536Ö0 +TIFFTAG_XCLIPPATHUNITSÌ65536Ö0 +TIFFTAG_XMLPACKETÌ65536Ö0 +TIFFTAG_XPOSITIONÌ65536Ö0 +TIFFTAG_XRESOLUTIONÌ65536Ö0 +TIFFTAG_YCBCRCOEFFICIENTSÌ65536Ö0 +TIFFTAG_YCBCRPOSITIONINGÌ65536Ö0 +TIFFTAG_YCBCRSUBSAMPLINGÌ65536Ö0 +TIFFTAG_YCLIPPATHUNITSÌ65536Ö0 +TIFFTAG_YPOSITIONÌ65536Ö0 +TIFFTAG_YRESOLUTIONÌ65536Ö0 +TIFFTAG_ZIPQUALITYÌ65536Ö0 +TIFFYCbCrToRGBÌ4096Ö0Ïanon_struct_18 +TIFF_ANYÌ65536Ö0 +TIFF_ASCIIÌ4Îanon_enum_16Ö0 +TIFF_BIGENDIANÌ65536Ö0 +TIFF_BYTEÌ4Îanon_enum_16Ö0 +TIFF_DOUBLEÌ4Îanon_enum_16Ö0 +TIFF_FLOATÌ4Îanon_enum_16Ö0 +TIFF_IFDÌ4Îanon_enum_16Ö0 +TIFF_IFD8Ì4Îanon_enum_16Ö0 +TIFF_INT16_TÌ65536Ö0 +TIFF_INT32_TÌ65536Ö0 +TIFF_INT64_TÌ65536Ö0 +TIFF_INT8_TÌ65536Ö0 +TIFF_LITTLEENDIANÌ65536Ö0 +TIFF_LONGÌ4Îanon_enum_16Ö0 +TIFF_LONG8Ì4Îanon_enum_16Ö0 +TIFF_NOTYPEÌ4Îanon_enum_16Ö0 +TIFF_PTRDIFF_TÌ65536Ö0 +TIFF_RATIONALÌ4Îanon_enum_16Ö0 +TIFF_SBYTEÌ4Îanon_enum_16Ö0 +TIFF_SHORTÌ4Îanon_enum_16Ö0 +TIFF_SLONGÌ4Îanon_enum_16Ö0 +TIFF_SLONG8Ì4Îanon_enum_16Ö0 +TIFF_SPPÌ65536Ö0 +TIFF_SRATIONALÌ4Îanon_enum_16Ö0 +TIFF_SSHORTÌ4Îanon_enum_16Ö0 +TIFF_SSIZE_TÌ65536Ö0 +TIFF_UINT16_TÌ65536Ö0 +TIFF_UINT32_TÌ65536Ö0 +TIFF_UINT64_TÌ65536Ö0 +TIFF_UINT8_TÌ65536Ö0 +TIFF_UNDEFINEDÌ4Îanon_enum_16Ö0 +TIFF_VARIABLEÌ65536Ö0 +TIFF_VARIABLE2Ì65536Ö0 +TIFF_VERSION_BIGÌ65536Ö0 +TIFF_VERSION_CLASSICÌ65536Ö0 TIMESPEC_TO_TIMEVALÌ131072Í(tv,ts)Ö0 TIMEVAL_TO_TIMESPECÌ131072Í(tv,ts)Ö0 TIOCCBRKÌ65536Ö0 @@ -883,9 +1572,14 @@ TIOCVHANGUP TLOSSÌ65536Ö0 TMP_MAXÌ65536Ö0 TOSTOPÌ65536Ö0 -TRANS_BADCHSUMÌ4Îanon_enum_5Ö0 -TRANS_SUCCEEDÌ4Îanon_enum_5Ö0 -TRANS_TIMEOUTÌ4Îanon_enum_5Ö0 +TRANS_BADCHSUMÌ4Îanon_enum_6Ö0 +TRANS_BUSYÌ4Îanon_enum_6Ö0 +TRANS_ERRORÌ4Îanon_enum_6Ö0 +TRANS_SUCCEEDÌ4Îanon_enum_6Ö0 +TRANS_TIMEOUTÌ4Îanon_enum_6Ö0 +TRANS_TRYAGAINÌ4Îanon_enum_6Ö0 +TRAP_BRKPTÌ65536Ö0 +TRAP_TRACEÌ65536Ö0 TRUEÌ65536Ö0 TTYDEF_CFLAGÌ65536Ö0 TTYDEF_IFLAGÌ65536Ö0 @@ -922,6 +1616,9 @@ UNDERFLOW USHRT_MAXÌ65536Ö0 UTIME_NOWÌ65536Ö0 UTIME_OMITÌ65536Ö0 +UVSCALEÌ65536Ö0 +U_NEUÌ65536Ö0 +UaToAaÌ64Î_TIFFRGBAImageÖ0Ïuint8 * VDISCARDÌ65536Ö0 VEOFÌ65536Ö0 VEOLÌ65536Ö0 @@ -942,6 +1639,9 @@ VT1 VTDLYÌ65536Ö0 VTIMEÌ65536Ö0 VWERASEÌ65536Ö0 +V_NEUÌ65536Ö0 +WÌ64Îanon_struct_5Ö0Ïsize_t +WAIT_TMOUTÌ65536Ö0 WARNÌ131072Í(...)Ö0 WARNXÌ131072Í(...)Ö0 WCHAR_MAXÌ65536Ö0 @@ -963,6 +1663,7 @@ WSTOPSIG WTERMSIGÌ131072Í(status)Ö0 WUNTRACEDÌ65536Ö0 W_OKÌ65536Ö0 +X0Ì64Îanon_struct_19Ö0Ïfloat XATTR_LIST_MAXÌ65536Ö0 XATTR_NAME_MAXÌ65536Ö0 XATTR_SIZE_MAXÌ65536Ö0 @@ -970,6 +1671,18 @@ XCASE XTABSÌ65536Ö0 X_OKÌ65536Ö0 X_TLOSSÌ65536Ö0 +XstartÌ64Îanon_struct_4Ö0Ïuint16_t +Y0Ì64Îanon_struct_19Ö0Ïfloat +YCBCRPOSITION_CENTEREDÌ65536Ö0 +YCBCRPOSITION_COSITEDÌ65536Ö0 +YCBCR_SUPPORTÌ65536Ö0 +Y_tabÌ64Îanon_struct_18Ö0Ïint32 * +Yb2bÌ64Îanon_struct_19Ö0Ïfloat +Yg2gÌ64Îanon_struct_19Ö0Ïfloat +Yr2rÌ64Îanon_struct_19Ö0Ïfloat +YstartÌ64Îanon_struct_4Ö0Ïuint16_t +Z0Ì64Îanon_struct_19Ö0Ïfloat +ZIP_SUPPORTÌ65536Ö0 _Ì131072Í(String)Ö0 _ALLOCA_HÌ65536Ö0 _ANSI_STDARG_H_Ì65536Ö0 @@ -985,6 +1698,8 @@ _BITS_POSIX1_LIM_H _BITS_POSIX2_LIM_HÌ65536Ö0 _BITS_POSIX_OPT_HÌ65536Ö0 _BITS_PTHREADTYPES_HÌ65536Ö0 +_BITS_SIGCONTEXT_HÌ65536Ö0 +_BITS_SIGTHREAD_HÌ65536Ö0 _BITS_STAT_HÌ65536Ö0 _BITS_TYPESIZES_HÌ65536Ö0 _BITS_TYPES_HÌ65536Ö0 @@ -1066,6 +1781,7 @@ _DEFAULT_SOURCE _ENDIAN_HÌ65536Ö0 _ERRNO_HÌ65536Ö0 _ERR_HÌ65536Ö0 +_EXTERN_INLINEÌ65536Ö0 _FCNTL_HÌ65536Ö0 _FEATURES_HÌ65536Ö0 _FORTIFY_SOURCEÌ65536Ö0 @@ -1222,6 +1938,7 @@ _Mdouble_BEGIN_NAMESPACE _Mdouble_END_NAMESPACEÌ65536Ö0 _Mfloat_Ì65536Ö0 _Mlong_double_Ì65536Ö0 +_NSIGÌ65536Ö0 _OLD_STDIO_MAGICÌ65536Ö0 _PC_2_SYMLINKSÌ65536Ö0 _PC_ALLOC_SIZE_MINÌ65536Ö0 @@ -1572,6 +2289,8 @@ _SC_XOPEN_XCU_VERSION _SC_XOPEN_XPG2Ì65536Ö0 _SC_XOPEN_XPG3Ì65536Ö0 _SC_XOPEN_XPG4Ì65536Ö0 +_SIGNAL_HÌ65536Ö0 +_SIGSET_H_fnsÌ65536Ö0 _SIGSET_H_typesÌ65536Ö0 _SIGSET_NWORDSÌ65536Ö0 _SIZET_Ì65536Ö0 @@ -1606,7 +2325,12 @@ _SYS_SYSMACROS_H _SYS_TIME_HÌ65536Ö0 _SYS_TTYDEFAULTS_H_Ì65536Ö0 _SYS_TYPES_HÌ65536Ö0 +_SYS_UCONTEXT_HÌ65536Ö0 _TERMIOS_HÌ65536Ö0 +_TIFFCONF_Ì65536Ö0 +_TIFFIO_Ì65536Ö0 +_TIFFRGBAImageÌ2048Ö0 +_TIFF_Ì65536Ö0 _T_SIZEÌ65536Ö0 _T_SIZE_Ì65536Ö0 _T_WCHARÌ65536Ö0 @@ -1826,6 +2550,7 @@ __ILP32_OFF32_CFLAGS __ILP32_OFF32_LDFLAGSÌ65536Ö0 __ILP32_OFFBIG_CFLAGSÌ65536Ö0 __ILP32_OFFBIG_LDFLAGSÌ65536Ö0 +__IMFUNCTIONS_H__Ì65536Ö0 __INO64_T_TYPEÌ65536Ö0 __INO_T_MATCHES_INO64_TÌ65536Ö0 __INO_T_TYPEÌ65536Ö0 @@ -1974,6 +2699,12 @@ __S32_TYPE __S64_TYPEÌ65536Ö0 __SCHAR_MAX__Ì65536Ö0 __SHRT_MAX__Ì65536Ö0 +__SIGEV_MAX_SIZEÌ65536Ö0 +__SIGEV_PAD_SIZEÌ65536Ö0 +__SIGRTMAXÌ65536Ö0 +__SIGRTMINÌ65536Ö0 +__SIGSETFNÌ65536Ö0 +__SIGSETFNÌ131072Í(NAME,BODY,CONST)Ö0 __SIG_ATOMIC_MAX__Ì65536Ö0 __SIG_ATOMIC_MIN__Ì65536Ö0 __SIG_ATOMIC_TYPE__Ì65536Ö0 @@ -2006,6 +2737,9 @@ __SIZE_MAX__ __SIZE_TÌ65536Ö0 __SIZE_TYPE__Ì65536Ö0 __SIZE_T__Ì65536Ö0 +__SI_ALIGNMENTÌ65536Ö0 +__SI_MAX_SIZEÌ65536Ö0 +__SI_PAD_SIZEÌ65536Ö0 __SLONG32_TYPEÌ65536Ö0 __SLONGWORD_TYPEÌ65536Ö0 __SQUAD_TYPEÌ65536Ö0 @@ -2173,7 +2907,10 @@ __attribute_noinline__ __attribute_pure__Ì65536Ö0 __attribute_used__Ì65536Ö0 __attribute_warn_unused_result__Ì65536Ö0 +__blkcnt64_tÌ4096Ö0Ïlong int +__blkcnt_tÌ4096Ö0Ïlong int __blkcnt_t_definedÌ65536Ö0 +__blksize_tÌ4096Ö0Ïlong int __blksize_t_definedÌ65536Ö0 __bool_true_false_are_definedÌ65536Ö0 __bosÌ131072Í(ptr)Ö0 @@ -2182,7 +2919,10 @@ __bswap_16 __bswap_constant_16Ì131072Í(x)Ö0 __bswap_constant_32Ì131072Í(x)Ö0 __bswap_constant_64Ì131072Í(x)Ö0 +__caddr_tÌ4096Ö0Ïchar * +__clock_tÌ4096Ö0Ïlong int __clock_t_definedÌ65536Ö0 +__clockid_tÌ4096Ö0Ïint __clockid_t_definedÌ65536Ö0 __clockid_time_tÌ65536Ö0 __code_model_small__Ì65536Ö0 @@ -2191,7 +2931,9 @@ __cpp_binary_literals __cpp_exceptionsÌ65536Ö0 __cpp_rttiÌ65536Ö0 __cpp_runtime_arraysÌ65536Ö0 +__daddr_tÌ4096Ö0Ïint __daddr_t_definedÌ65536Ö0 +__dev_tÌ4096Ö0Ïunsigned long int __dev_t_definedÌ65536Ö0 __error_t_definedÌ65536Ö0 __errordeclÌ131072Í(name,msg)Ö0 @@ -2201,8 +2943,15 @@ __extern_always_inline __extern_inlineÌ65536Ö0 __flexarrÌ65536Ö0 __fortify_functionÌ65536Ö0 +__fsblkcnt64_tÌ4096Ö0Ïunsigned long int +__fsblkcnt_tÌ4096Ö0Ïunsigned long int __fsblkcnt_t_definedÌ65536Ö0 +__fsfilcnt64_tÌ4096Ö0Ïunsigned long int +__fsfilcnt_tÌ4096Ö0Ïunsigned long int __fsfilcnt_t_definedÌ65536Ö0 +__fsid_tÌ4096Ö0Ïanon_struct_0 +__fsword_tÌ4096Ö0Ïlong int +__gid_tÌ4096Ö0Ïunsigned int __gid_t_definedÌ65536Ö0 __glibc_likelyÌ131072Í(cond)Ö0 __glibc_unlikelyÌ131072Í(cond)Ö0 @@ -2210,11 +2959,22 @@ __gnu_linux__ __has_includeÌ131072Í(STR)Ö0 __has_include_nextÌ131072Í(STR)Ö0 __have_pthread_attr_tÌ65536Ö0 +__have_sigevent_tÌ65536Ö0 +__have_siginfo_tÌ65536Ö0 +__have_sigval_tÌ65536Ö0 +__id_tÌ4096Ö0Ïunsigned int __id_t_definedÌ65536Ö0 +__ino64_tÌ4096Ö0Ïunsigned long int __ino64_t_definedÌ65536Ö0 +__ino_tÌ4096Ö0Ïunsigned long int __ino_t_definedÌ65536Ö0 +__int16_tÌ4096Ö0Ïsigned short int +__int32_tÌ4096Ö0Ïsigned int +__int64_tÌ4096Ö0Ïsigned long int +__int8_tÌ4096Ö0Ïsigned char __int8_t_definedÌ65536Ö0 __intN_tÌ131072Í(N,MODE)Ö0 +__intptr_tÌ4096Ö0Ïlong int __intptr_t_definedÌ65536Ö0 __isalnum_lÌ131072Í(c,l)Ö0 __isalpha_lÌ131072Í(c,l)Ö0 @@ -2234,15 +2994,18 @@ __isupper_l __isxdigit_lÌ131072Í(c,l)Ö0 __k8Ì65536Ö0 __k8__Ì65536Ö0 +__key_tÌ4096Ö0Ïint __key_t_definedÌ65536Ö0 __ldiv_t_definedÌ65536Ö0 __linuxÌ65536Ö0 __linux__Ì65536Ö0 __lldiv_t_definedÌ65536Ö0 +__loff_tÌ4096Ö0Ï__off64_t __long_double_tÌ65536Ö0 __malloc_and_calloc_definedÌ65536Ö0 __mempcpyÌ65536Ö0 __mempcpyÌ131072Í(dest,src,n)Ö0 +__mode_tÌ4096Ö0Ïunsigned int __mode_t_definedÌ65536Ö0 __need_EmathÌ65536Ö0 __need_FILEÌ65536Ö0 @@ -2256,6 +3019,9 @@ __need_error_t __need_getoptÌ65536Ö0 __need_malloc_and_callocÌ65536Ö0 __need_mbstate_tÌ65536Ö0 +__need_sig_atomic_tÌ65536Ö0 +__need_siginfo_tÌ65536Ö0 +__need_sigset_tÌ65536Ö0 __need_size_tÌ65536Ö0 __need_time_tÌ65536Ö0 __need_timer_tÌ65536Ö0 @@ -2263,18 +3029,36 @@ __need_timespec __need_timevalÌ65536Ö0 __need_wchar_tÌ65536Ö0 __need_wint_tÌ65536Ö0 +__nlink_tÌ4096Ö0Ïunsigned long int __nlink_t_definedÌ65536Ö0 __nonnullÌ131072Í(params)Ö0 +__off64_tÌ4096Ö0Ïlong int __off64_t_definedÌ65536Ö0 +__off_tÌ4096Ö0Ïlong int __off_t_definedÌ65536Ö0 +__pid_tÌ4096Ö0Ïint __pid_t_definedÌ65536Ö0 __prognameÌ32768Ö0Ïconst char * __ptr_tÌ65536Ö0 +__qaddr_tÌ4096Ö0Ï__quad_t * +__quad_tÌ4096Ö0Ïlong int __restrict_arrÌ65536Ö0 +__rlim64_tÌ4096Ö0Ïunsigned long int +__rlim_tÌ4096Ö0Ïunsigned long int +__sig_atomic_t_definedÌ65536Ö0 +__sigandsetÌ131072Í(dest,left,right)Ö0 +__sigemptysetÌ131072Í(set)Ö0 +__sigfillsetÌ131072Í(set)Ö0 +__sigisemptysetÌ131072Í(set)Ö0 +__sigmaskÌ131072Í(sig)Ö0 +__sigorsetÌ131072Í(dest,left,right)Ö0 __sigset_t_definedÌ65536Ö0 +__sigwordÌ131072Í(sig)Ö0 __size_tÌ65536Ö0 __size_t__Ì65536Ö0 +__socklen_tÌ4096Ö0Ïunsigned int __socklen_t_definedÌ65536Ö0 +__ssize_tÌ4096Ö0Ïlong int __ssize_t_definedÌ65536Ö0 __stub___compat_bdflushÌ65536Ö0 __stub_chflagsÌ65536Ö0 @@ -2290,28 +3074,45 @@ __stub_setlogin __stub_sigreturnÌ65536Ö0 __stub_sstkÌ65536Ö0 __stub_sttyÌ65536Ö0 +__suseconds_tÌ4096Ö0Ïlong int __suseconds_t_definedÌ65536Ö0 +__syscall_slong_tÌ4096Ö0Ïlong int +__syscall_ulong_tÌ4096Ö0Ïunsigned long int +__time_tÌ4096Ö0Ïlong int __time_t_definedÌ65536Ö0 +__timer_tÌ4096Ö0Ïvoid * __timer_t_definedÌ65536Ö0 __timespec_definedÌ65536Ö0 __toasciiÌ131072Í(c)Ö0 __toascii_lÌ131072Í(c,l)Ö0 __tobodyÌ131072Í(c,f,a,args)Ö0 +__u_charÌ4096Ö0Ïunsigned char __u_char_definedÌ65536Ö0 +__u_intÌ4096Ö0Ïunsigned int __u_intN_tÌ131072Í(N,MODE)Ö0 +__u_longÌ4096Ö0Ïunsigned long int +__u_quad_tÌ4096Ö0Ïunsigned long int +__u_shortÌ4096Ö0Ïunsigned short int +__uid_tÌ4096Ö0Ïunsigned int __uid_t_definedÌ65536Ö0 +__uint16_tÌ4096Ö0Ïunsigned short int +__uint32_tÌ4096Ö0Ïunsigned int __uint32_t_definedÌ65536Ö0 +__uint64_tÌ4096Ö0Ïunsigned long int +__uint8_tÌ4096Ö0Ïunsigned char __undef_ARG_MAXÌ65536Ö0 __undef_LINK_MAXÌ65536Ö0 __undef_NR_OPENÌ65536Ö0 __undef_OPEN_MAXÌ65536Ö0 __unixÌ65536Ö0 __unix__Ì65536Ö0 +__useconds_tÌ4096Ö0Ïunsigned int __useconds_t_definedÌ65536Ö0 __va_arg_packÌ131072Í()Ö0 __va_arg_pack_lenÌ131072Í()Ö0 __va_copyÌ131072Í(d,s)Ö0 __va_list__Ì65536Ö0 +__valÌ64Îanon_struct_0Ö0Ïint __warnattrÌ131072Í(msg)Ö0 __warndeclÌ131072Í(name,msg)Ö0 __wchar_t__Ì65536Ö0 @@ -2320,27 +3121,46 @@ __x86_64 __x86_64__Ì65536Ö0 _tolowerÌ131072Í(c)Ö0 _toupperÌ131072Í(c)Ö0 +abort_imageÌ16Í()Ö0Ïvoid +abort_imageÌ1024Í()Ö0Ïvoid allocaÌ65536Ö0 allocaÌ131072Í(size)Ö0 -anon_enum_0Ì2Ö0 -anon_enum_1Ì2Ö0 -anon_enum_5Ì2Ö0 -anon_struct_2Ì2048Ö0 -anon_struct_3Ì2048Ö0 +alphaÌ64Î_TIFFRGBAImageÖ0Ïint +anon_enum_16Ì2Ö0 +anon_enum_2Ì2Ö0 +anon_enum_3Ì2Ö0 +anon_enum_6Ì2Ö0 +anon_enum_7Ì2Ö0 +anon_enum_8Ì2Ö0 +anon_enum_9Ì2Ö0 +anon_struct_0Ì2048Ö0 +anon_struct_1Ì2048Ö0 +anon_struct_10Ì2048Ö0 +anon_struct_11Ì2048Ö0 +anon_struct_12Ì2048Ö0 +anon_struct_13Ì2048Ö0 +anon_struct_14Ì2048Ö0 +anon_struct_15Ì2048Ö0 +anon_struct_17Ì2048Ö0 +anon_struct_18Ì2048Ö0 +anon_struct_19Ì2048Ö0 +anon_struct_21Ì2048Ö0 anon_struct_4Ì2048Ö0 -anon_struct_6Ì2048Ö0 -arg_doubleÌ4Îanon_enum_0Ö0 -arg_floatÌ4Îanon_enum_0Ö0 -arg_functionÌ4Îanon_enum_0Ö0 -arg_intÌ4Îanon_enum_0Ö0 -arg_longlongÌ4Îanon_enum_0Ö0 -arg_noneÌ4Îanon_enum_0Ö0 -arg_stringÌ4Îanon_enum_0Ö0 +anon_struct_5Ì2048Ö0 +anon_union_20Ì8192Î_TIFFRGBAImageÖ0 +anyÌ1024Í(TIFFRGBAImage*)Î_TIFFRGBAImage::anon_union_20Ö0Ïvoid +arg_doubleÌ4Îanon_enum_8Ö0 +arg_floatÌ4Îanon_enum_8Ö0 +arg_functionÌ4Îanon_enum_8Ö0 +arg_intÌ4Îanon_enum_8Ö0 +arg_longlongÌ4Îanon_enum_8Ö0 +arg_noneÌ4Îanon_enum_8Ö0 +arg_stringÌ4Îanon_enum_8Ö0 argfnÌ4096Ö0Ïtypedef bool -argptrÌ64Îanon_struct_2Ö0Ïvoid * -argptrÌ64Îanon_struct_3Ö0Ïvoid * +argptrÌ64Îanon_struct_10Ö0Ïvoid * +argptrÌ64Îanon_struct_11Ö0Ïvoid * argsortÌ16Í(const void *a1, const void *a2)Ö0Ïint -argtypeÌ4096Ö0Ïanon_enum_0 +argtypeÌ4096Ö0Ïanon_enum_8 assertÌ65536Ö0 assertÌ131072Í(expr)Ö0 assert_perrorÌ65536Ö0 @@ -2348,44 +3168,90 @@ assert_perror be16tohÌ131072Í(x)Ö0 be32tohÌ131072Í(x)Ö0 be64tohÌ131072Í(x)Ö0 +binningÌ64Îanon_struct_12Ö0Ïint +binningÌ64Îanon_struct_5Ö0Ïint +bitspersampleÌ64Î_TIFFRGBAImageÖ0Ïuint16 +blkcnt_tÌ4096Ö0Ï__blkcnt_t +blksize_tÌ4096Ö0Ï__blksize_t +bluecmapÌ64Î_TIFFRGBAImageÖ0Ïuint16 * boolÌ65536Ö0 +bstepÌ64Îanon_struct_19Ö0Ïfloat change_helpstringÌ16Í(char *s)Ö0Ïvoid change_helpstringÌ1024Í(char *s)Ö0Ïvoid +chk_storeimgÌ16Í(char *filename, char* store)Ö0Ïimstorage * +chk_storeimgÌ1024Í(char *filename, char* store)Ö0Ïimstorage * +chkspeedÌ16Í(int speed)Ö0Ïint +cielabÌ64Î_TIFFRGBAImageÖ0ÏTIFFCIELabToRGB * +clamptabÌ64Îanon_struct_18Ö0ÏTIFFRGBValue * cmdlnoptsÌ16384Ö0Ïmyoption +col_offsetÌ64Î_TIFFRGBAImageÖ0Ïint comfdÌ16384Ö0Ïint console_changedÌ16384Ö0Ïint +contigÌ64Î_TIFFRGBAImage::anon_union_20Ö0ÏtileContigRoutine curspdÌ16384Ö0Ïint -daemonÌ64Îanon_struct_6Ö0Ïint +d_VrwbÌ64Îanon_struct_17Ö0Ïuint32 +d_VrwgÌ64Îanon_struct_17Ö0Ïuint32 +d_VrwrÌ64Îanon_struct_17Ö0Ïuint32 +d_Y0BÌ64Îanon_struct_17Ö0Ïfloat +d_Y0GÌ64Îanon_struct_17Ö0Ïfloat +d_Y0RÌ64Îanon_struct_17Ö0Ïfloat +d_YCBÌ64Îanon_struct_17Ö0Ïfloat +d_YCGÌ64Îanon_struct_17Ö0Ïfloat +d_YCRÌ64Îanon_struct_17Ö0Ïfloat +d_gammaBÌ64Îanon_struct_17Ö0Ïfloat +d_gammaGÌ64Îanon_struct_17Ö0Ïfloat +d_gammaRÌ64Îanon_struct_17Ö0Ïfloat +d_matÌ64Îanon_struct_17Ö0Ïfloat +daemonÌ64Îanon_struct_12Ö0Ïint daemonizeÌ16Í()Ö0Ïvoid daemonizeÌ1024Í()Ö0Ïvoid -dataÌ64Îanon_struct_4Ö0Ïchar * -deviceÌ64Îanon_struct_6Ö0Ïchar * +dataÌ64Îanon_struct_1Ö0Ïchar * +define_subframeÌ16Í(char *parm)Ö0Ïimsubframe * +define_subframeÌ1024Í(char *parm)Ö0Ïimsubframe * +dev_tÌ4096Ö0Ï__dev_t +deviceÌ64Îanon_struct_12Ö0Ïchar * +displayÌ64Îanon_struct_19Ö0ÏTIFFDisplay dtimeÌ16Í()Ö0Ïdouble dtimeÌ1024Í()Ö0Ïdouble end_optionÌ65536Ö0 end_suboptionÌ65536Ö0 errnoÌ65536Ö0 error_tÌ4096Ö0Ïint +exptimeÌ64Îanon_struct_12Ö0Ïdouble +exptimeÌ64Îanon_struct_5Ö0Ïdouble falseÌ65536Ö0 -flagÌ64Îanon_struct_2Ö0Ïint * +flagÌ64Îanon_struct_10Ö0Ïint * fpclassifyÌ131072Í(x)Ö0 fread_unlockedÌ65536Ö0 g_pr_Ì16Í(const char *fmt, ...)Ö0Ïint +getÌ1024Í(TIFFRGBAImage*, uint32*, uint32, uint32)Î_TIFFRGBAImageÖ0Ïint get_aptrÌ16Í(void *paptr, argtype type)Ö0Ïvoid * get_curspeedÌ16Í()Ö0Ïint get_curspeedÌ1024Í()Ö0Ïint +get_firmvare_versionÌ16Í()Ö0Ïchar * +get_firmvare_versionÌ1024Í()Ö0Ïchar * +get_imageÌ16Í(imstorage *img)Ö0Ïuint16_t * +get_imageÌ1024Í(imstorage *img)Ö0Ïuint16_t * get_optindÌ16Í(int opt, myoption *options)Ö0Ïint get_suboptionÌ16Í(char *str, mysuboption *opt)Ö0Ïbool get_suboptionÌ1024Í(char *str, mysuboption *opt)Ö0Ïbool getcÌ131072Í(_fp)Ö0 +gid_tÌ4096Ö0Ï__gid_t globErrÌ16384Ö0Ïint globErrÌ32768Ö0Ïint -glob_parsÌ4096Ö0Ïanon_struct_6 +glob_parsÌ4096Ö0Ïanon_struct_12 greenÌ1024Í(const char *fmt, ...)Ö0Ïint -has_argÌ64Îanon_struct_2Ö0Ïhasarg -has_argÌ64Îanon_struct_3Ö0Ïhasarg -hasargÌ4096Ö0Ïanon_enum_1 -helpÌ64Îanon_struct_2Ö0Ïconst char * +greencmapÌ64Î_TIFFRGBAImageÖ0Ïuint16 * +gstepÌ64Îanon_struct_19Ö0Ïfloat +has_argÌ64Îanon_struct_10Ö0Ïhasarg +has_argÌ64Îanon_struct_11Ö0Ïhasarg +hasargÌ4096Ö0Ïanon_enum_9 +heaterÌ16Í(heater_cmd cmd)Ö0Ïvoid +heaterÌ64Îanon_struct_12Ö0Ïheater_cmd +heaterÌ1024Í(heater_cmd cmd)Ö0Ïvoid +heater_cmdÌ4096Ö0Ïanon_enum_7 +heightÌ64Î_TIFFRGBAImageÖ0Ïuint32 +helpÌ64Îanon_struct_10Ö0Ïconst char * helpÌ16384Ö0Ïint helpstringÌ16384Ö0Ïchar * htobe16Ì131072Í(x)Ö0 @@ -2394,8 +3260,21 @@ htobe64 htole16Ì131072Í(x)Ö0 htole32Ì131072Í(x)Ö0 htole64Ì131072Í(x)Ö0 +image_typeÌ4096Ö0Ïanon_enum_3 +imnameÌ64Îanon_struct_5Ö0Ïchar * +imstorageÌ4096Ö0Ïanon_struct_5 +imstoretypeÌ64Îanon_struct_12Ö0Ïchar * +imsubframeÌ4096Ö0Ïanon_struct_4 +imtypeÌ64Îanon_struct_12Ö0Ïchar * +imtypeÌ64Îanon_struct_5Ö0Ïimage_type +initÌ64Îanon_struct_21Ö0ÏTIFFInitMethod initial_setupÌ16Í()Ö0Ïvoid initial_setupÌ1024Í()Ö0Ïvoid +ino_tÌ4096Ö0Ï__ino_t +int16Ì4096Ö0Ïsigned short +int32Ì4096Ö0Ïsigned int +int64Ì4096Ö0Ïsigned long +int8Ì4096Ö0Ïsigned char int_fast16_tÌ4096Ö0Ïlong int int_fast32_tÌ4096Ö0Ïlong int int_fast64_tÌ4096Ö0Ïlong int @@ -2405,6 +3284,7 @@ int_least32_t int_least64_tÌ4096Ö0Ïlong int int_least8_tÌ4096Ö0Ïsigned char intmax_tÌ4096Ö0Ïlong int +isContigÌ64Î_TIFFRGBAImageÖ0Ïint isalnum_lÌ131072Í(c,l)Ö0 isalpha_lÌ131072Í(c,l)Ö0 isasciiÌ131072Í(c)Ö0 @@ -2434,99 +3314,197 @@ last_chksum le16tohÌ131072Í(x)Ö0 le32tohÌ131072Í(x)Ö0 le64tohÌ131072Í(x)Ö0 -lenÌ64Îanon_struct_4Ö0Ïsize_t +lenÌ64Îanon_struct_1Ö0Ïsize_t linuxÌ65536Ö0 +list_speedsÌ16Í()Ö0Ïvoid +list_speedsÌ1024Í()Ö0Ïvoid mainÌ16Í(int argc, char **argv)Ö0Ïint majorÌ131072Í(dev)Ö0 +make_filenameÌ16Í(char *outfile, char *ext)Ö0Ïchar * makedevÌ131072Í(maj,min)Ö0 math_errhandlingÌ65536Ö0 mempcpyÌ65536Ö0 mempcpyÌ131072Í(dest,src,n)Ö0 minorÌ131072Í(dev)Ö0 -mmapbufÌ4096Ö0Ïanon_struct_4 +mmapbufÌ4096Ö0Ïanon_struct_1 +mode_tÌ4096Ö0Ï__mode_t my_allocÌ16Í(size_t N, size_t S)Ö0Ïvoid * my_allocÌ1024Í(size_t N, size_t S)Ö0Ïvoid * myatodÌ16Í(void *num, const char *str, argtype t)Ö0Ïbool myatollÌ16Í(void *num, char *str, argtype t)Ö0Ïbool mygetcharÌ16Í()Ö0Ïint mygetcharÌ1024Í()Ö0Ïint -myoptionÌ4096Ö0Ïanon_struct_2 -mysuboptionÌ4096Ö0Ïanon_struct_3 -nameÌ64Îanon_struct_2Ö0Ïconst char * -nameÌ64Îanon_struct_3Ö0Ïconst char * +myoptionÌ4096Ö0Ïanon_struct_10 +mysuboptionÌ4096Ö0Ïanon_struct_11 +nameÌ64Îanon_struct_10Ö0Ïconst char * +nameÌ64Îanon_struct_11Ö0Ïconst char * +nameÌ64Îanon_struct_21Ö0Ïchar * +newspeedÌ64Îanon_struct_12Ö0Ïint newtÌ16384Ö0Ïtermios +nlink_tÌ4096Ö0Ï__nlink_t no_argumentÌ65536Ö0 +off_tÌ4096Ö0Ï__off_t oldtÌ16384Ö0Ïtermios oldttyÌ16384Ö0Ïtermio open_serialÌ1024Í(char *dev)Ö0Ïint optional_argumentÌ65536Ö0 +orientationÌ64Î_TIFFRGBAImageÖ0Ïuint16 +outpfnameÌ64Îanon_struct_12Ö0Ïchar * parse_argsÌ16Í(int argc, char **argv)Ö0Ïglob_pars * parse_argsÌ1024Í(int argc, char **argv)Ö0Ïglob_pars * parseargsÌ16Í(int *argc, char ***argv, myoption *options)Ö0Ïvoid parseargsÌ1024Í(int *argc, char ***argv, myoption *options)Ö0Ïvoid +photometricÌ64Î_TIFFRGBAImageÖ0Ïuint16 +putÌ64Î_TIFFRGBAImageÖ0Ïanon_union_20 putcÌ131072Í(_ch,_fp)Ö0 r_WARNÌ16Í(const char *fmt, ...)Ö0Ïint r_pr_Ì16Í(const char *fmt, ...)Ö0Ïint r_pr_nottyÌ16Í(const char *fmt, ...)Ö0Ïint +rangeÌ64Îanon_struct_19Ö0Ïint read_consoleÌ16Í()Ö0Ïint read_consoleÌ1024Í()Ö0Ïint +read_stringÌ16Í(uint8_t *str, int L)Ö0Ïsize_t read_ttyÌ16Í(uint8_t *buff, size_t length)Ö0Ïsize_t read_ttyÌ1024Í(uint8_t *buff, size_t length)Ö0Ïsize_t redÌ1024Í(const char *fmt, ...)Ö0Ïint +redcmapÌ64Î_TIFFRGBAImageÖ0Ïuint16 * +req_orientationÌ64Î_TIFFRGBAImageÖ0Ïuint16 required_argumentÌ65536Ö0 -rest_parsÌ64Îanon_struct_6Ö0Ïchar * * -rest_pars_numÌ64Îanon_struct_6Ö0Ïint +rest_parsÌ64Îanon_struct_12Ö0Ïchar * * +rest_pars_numÌ64Îanon_struct_12Ö0Ïint restore_consoleÌ16Í()Ö0Ïvoid restore_consoleÌ1024Í()Ö0Ïvoid restore_ttyÌ16Í()Ö0Ïvoid restore_ttyÌ1024Í()Ö0Ïvoid rewrite_ifexistsÌ16384Ö0Ïint rewrite_ifexistsÌ32768Ö0Ïint +row_offsetÌ64Î_TIFFRGBAImageÖ0Ïint +rstepÌ64Îanon_struct_19Ö0Ïfloat run_terminalÌ16Í()Ö0Ïvoid run_terminalÌ1024Í()Ö0Ïvoid s_WARNÌ16Í(const char *fmt, ...)Ö0Ïint +sa_handlerÌ65536Ö0 +sa_sigactionÌ65536Ö0 +samplesperpixelÌ64Î_TIFFRGBAImageÖ0Ïuint16 +schemeÌ64Îanon_struct_21Ö0Ïuint16 send_cmdÌ16Í(uint8_t cmd)Ö0Ïint -send_dataÌ16Í(uint8_t *buf)Ö0Ïint +send_cmd_csÌ16Í(uint8_t cmd)Ö0Ïtrans_status +send_dataÌ16Í(uint8_t *buf, int len)Ö0Ïint +separateÌ64Î_TIFFRGBAImage::anon_union_20Ö0ÏtileSeparateRoutine setup_conÌ16Í()Ö0Ïvoid setup_conÌ1024Í()Ö0Ïvoid showhelpÌ16Í(int oindex, myoption *options)Ö0Ïvoid showhelpÌ1024Í(int oindex, myoption *options)Ö0Ïvoid +shutter_cmdÌ64Îanon_struct_12Ö0Ïchar * +shutter_commandÌ16Í(char *cmd)Ö0Ïint +shutter_commandÌ1024Í(char *cmd)Ö0Ïint +si_addrÌ65536Ö0 +si_addr_lsbÌ65536Ö0 +si_archÌ65536Ö0 +si_bandÌ65536Ö0 +si_call_addrÌ65536Ö0 +si_fdÌ65536Ö0 +si_intÌ65536Ö0 +si_lowerÌ65536Ö0 +si_overrunÌ65536Ö0 +si_pidÌ65536Ö0 +si_ptrÌ65536Ö0 +si_statusÌ65536Ö0 +si_stimeÌ65536Ö0 +si_syscallÌ65536Ö0 +si_timeridÌ65536Ö0 +si_uidÌ65536Ö0 +si_upperÌ65536Ö0 +si_utimeÌ65536Ö0 +si_valueÌ65536Ö0 +sigev_notify_attributesÌ65536Ö0 +sigev_notify_functionÌ65536Ö0 +sigmaskÌ131072Í(sig)Ö0 signalsÌ16Í(int signo)Ö0Ïvoid signalsÌ1024Í(int sig)Ö0Ïvoid signbitÌ131072Í(x)Ö0 +sizeÌ64Îanon_struct_4Ö0Ïuint8_t +speedÌ64Îanon_struct_12Ö0Ïint speedsÌ16384Ö0Ïint speedssizeÌ16384Ö0Ïconst int +splistÌ64Îanon_struct_12Ö0Ïint +stÌ64Îanon_struct_5Ö0Ïstore_type st_atimeÌ65536Ö0 st_ctimeÌ65536Ö0 st_mtimeÌ65536Ö0 starsÌ16384Ö0Ïconst char +start_expositionÌ16Í(imstorage *im, char *imtype)Ö0Ïint +start_expositionÌ1024Í(imstorage *im, char *imtype)Ö0Ïint stderrÌ65536Ö0 stdinÌ65536Ö0 stdoutÌ65536Ö0 +stoponerrÌ64Î_TIFFRGBAImageÖ0Ïint +store_imageÌ16Í(imstorage *img)Ö0Ï *int +store_imageÌ1024Í(imstorage *filename)Ö0Ïint +store_typeÌ4096Ö0Ïanon_enum_2 str2doubleÌ16Í(double *num, const char *str)Ö0Ïint str2doubleÌ1024Í(double *num, const char *str)Ö0Ïint strdupaÌ131072Í(s)Ö0 strndupaÌ131072Í(s,n)Ö0 -terminalÌ64Îanon_struct_6Ö0Ïint +subframeÌ64Îanon_struct_12Ö0Ïchar * +subframeÌ64Îanon_struct_5Ö0Ïimsubframe * +takeimgÌ64Îanon_struct_12Ö0Ïint +tdata_tÌ4096Ö0Ïvoid * +tdir_tÌ4096Ö0Ïuint16 +term_setspeedÌ16Í(int speed)Ö0Ïint +term_setspeedÌ1024Í(int speed)Ö0Ïint +terminalÌ64Îanon_struct_12Ö0Ïint +thandle_tÌ4096Ö0Ïvoid * +tifÌ64Î_TIFFRGBAImageÖ0ÏTIFF * +tiff_diroffÌ64Îanon_struct_14Ö0Ïuint32 +tiff_diroffÌ64Îanon_struct_15Ö0Ïuint64 +tiff_magicÌ64Îanon_struct_13Ö0Ïuint16 +tiff_magicÌ64Îanon_struct_14Ö0Ïuint16 +tiff_magicÌ64Îanon_struct_15Ö0Ïuint16 +tiff_offsetsizeÌ64Îanon_struct_15Ö0Ïuint16 +tiff_unusedÌ64Îanon_struct_15Ö0Ïuint16 +tiff_versionÌ64Îanon_struct_13Ö0Ïuint16 +tiff_versionÌ64Îanon_struct_14Ö0Ïuint16 +tiff_versionÌ64Îanon_struct_15Ö0Ïuint16 +tileContigRoutineÌ4096Ö0Ïtypedef void +tileSeparateRoutineÌ4096Ö0Ïtypedef void +time_tÌ4096Ö0Ï__time_t timeraddÌ131072Í(a,b,result)Ö0 timerclearÌ131072Í(tvp)Ö0 timercmpÌ131072Í(a,b,CMP)Ö0 timerissetÌ131072Í(tvp)Ö0 timersubÌ131072Í(a,b,result)Ö0 +timespecÌ2048Ö0 +tmsize_tÌ4096Ö0Ïsigned long toasciiÌ131072Í(c)Ö0 toascii_lÌ131072Í(c,l)Ö0 -trans_statusÌ4096Ö0Ïanon_enum_5 +toff_tÌ4096Ö0Ïuint64 +trans_statusÌ4096Ö0Ïanon_enum_6 trueÌ65536Ö0 -try_connectÌ16Í(char *device)Ö0Ïint -try_connectÌ1024Í(char *device)Ö0Ïint +try_connectÌ16Í(char *device, int speed)Ö0Ïint +try_connectÌ1024Í(char *device, int speed)Ö0Ïint +tsample_tÌ4096Ö0Ïuint16 +tsize_tÌ4096Ö0Ïtmsize_t +tstrile_tÌ4096Ö0Ïuint32 +tstrip_tÌ4096Ö0Ïtstrile_t +ttag_tÌ4096Ö0Ïuint32 +ttile_tÌ4096Ö0Ïtstrile_t ttyÌ16384Ö0Ïtermio tty_initÌ16Í(char *comdev, tcflag_t speed)Ö0Ïvoid tty_initÌ1024Í(char *comdev, tcflag_t speed)Ö0Ïvoid -typeÌ64Îanon_struct_2Ö0Ïargtype -typeÌ64Îanon_struct_3Ö0Ïargtype +tv_nsecÌ64ÎtimespecÖ0Ï__syscall_slong_t +tv_secÌ64ÎtimespecÖ0Ï__time_t +typeÌ64Îanon_struct_10Ö0Ïargtype +typeÌ64Îanon_struct_11Ö0Ïargtype +uid_tÌ4096Ö0Ï__uid_t +uint16Ì4096Ö0Ïunsigned short uint16_tÌ4096Ö0Ïunsigned short int +uint16_vapÌ4096Ö0Ïint +uint32Ì4096Ö0Ïunsigned int uint32_tÌ4096Ö0Ïunsigned int +uint64Ì4096Ö0Ïunsigned long uint64_tÌ4096Ö0Ïunsigned long int +uint8Ì4096Ö0Ïunsigned char uint8_tÌ4096Ö0Ïunsigned char uint_fast16_tÌ4096Ö0Ïunsigned long int uint_fast32_tÌ4096Ö0Ïunsigned long int @@ -2543,7 +3521,7 @@ va_arg va_copyÌ131072Í(d,s)Ö0 va_endÌ131072Í(v)Ö0 va_startÌ131072Í(v,l)Ö0 -valÌ64Îanon_struct_2Ö0Ïint +valÌ64Îanon_struct_10Ö0Ïint verboseÌ16384Ö0Ïint verboseÌ32768Ö0Ïint w_coredumpÌ65536Ö0 @@ -2552,6 +3530,11 @@ w_stopsig w_stopvalÌ65536Ö0 w_termsigÌ65536Ö0 wait4answerÌ16Í(uint8_t **rdata, int *rdlen)Ö0Ïtrans_status +wait4imageÌ16Í()Ö0Ïint +wait4imageÌ1024Í()Ö0Ïint wait_checksumÌ16Í()Ö0Ïtrans_status -write_ttyÌ16Í(uint8_t *buff, size_t length)Ö0Ïint -write_ttyÌ1024Í(uint8_t *buff, size_t length)Ö0Ïint +widthÌ64Î_TIFFRGBAImageÖ0Ïuint32 +write_ttyÌ16Í(const uint8_t *buff, size_t length)Ö0Ïint +write_ttyÌ1024Í(const uint8_t *buff, size_t length)Ö0Ïint +writetiffÌ16Í(imstorage *img)Ö0Ïint +ycbcrÌ64Î_TIFFRGBAImageÖ0ÏTIFFYCbCrToRGB * diff --git a/term.c b/term.c index 92d6ea0..1d35cf9 100644 --- a/term.c +++ b/term.c @@ -20,20 +20,8 @@ */ #include "usefull_macros.h" #include "term.h" -/* -#include // tcsetattr -#include // tcsetattr, close, read, write -#include // ioctl -#include // printf, getchar, fopen, perror -#include // exit -#include // read -#include // read -#include // signal -#include // time -#include // memcpy -#include // int types -#include // gettimeofday -*/ +#include // strncasecmp + #define BUFLEN 1024 tcflag_t Bspeeds[] = { @@ -75,17 +63,17 @@ int get_curspeed(){ * Send command by serial port, return 0 if all OK */ static uint8_t last_chksum = 0; -int send_data(uint8_t *buf){ - if(!*buf) return 1; +int send_data(uint8_t *buf, int len){ + if(len < 1) return 1; uint8_t chksum = 0, *ptr = buf; int l; - for(l = 0; *ptr; ++l) + for(l = 0; l < len; ++l) chksum ^= ~(*ptr++) & 0x7f; - DBG("send: %s%c", buf, (char)chksum); - if(write_tty(buf, l)) return 1; - DBG("cmd done"); + DBG("send: %s (chksum: 0x%X)", buf, chksum); + if(write_tty(buf, len)) return 1; + DBG("cmd sent"); if(write_tty(&chksum, 1)) return 1; - DBG("checksum done"); + DBG("checksum sent"); last_chksum = chksum; return 0; } @@ -93,6 +81,7 @@ int send_cmd(uint8_t cmd){ uint8_t s[2]; s[0] = cmd; s[1] = ~(cmd) & 0x7f; + DBG("Write %c", cmd); if(write_tty(s, 2)) return 1; last_chksum = s[1]; return 0; @@ -102,18 +91,40 @@ int send_cmd(uint8_t cmd){ * Wait for answer with checksum */ trans_status wait_checksum(){ - double d0 = dtime(); uint8_t chr; + int r; + double d0 = dtime(); do{ - if(read_tty(&chr, 1)) break; + if((r = read_tty(&chr, 1))) break; DBG("wait.."); }while(dtime() - d0 < WAIT_TMOUT); if(dtime() - d0 >= WAIT_TMOUT) return TRANS_TIMEOUT; DBG("chksum: got 0x%x, need 0x%x", chr, last_chksum); - if(chr != last_chksum) return TRANS_BADCHSUM; + if(chr != last_chksum){ + if(chr == 0x7f) return TRANS_TRYAGAIN; + else if(chr == ANS_EXP_IN_PROGRESS) return TRANS_BUSY; + else return TRANS_BADCHSUM; + } return TRANS_SUCCEED; } +/** + * send command and wait for checksum + * @return TRANS_SUCCEED if all OK + */ +trans_status send_cmd_cs(uint8_t cmd){ + if(send_cmd(cmd)) return TRANS_ERROR; + return wait_checksum(); +} + +/** + * Abort image exposition + * Used only on exit, so don't check commands status + */ +void abort_image(){ + send_cmd_cs(CMD_ABORT_IMAGE); +} + /** * read string from terminal (with timeout) * @param str (o) - buffer for string @@ -140,7 +151,7 @@ size_t read_string(uint8_t *str, int L){ * @return transaction status */ trans_status wait4answer(uint8_t **rdata, int *rdlen){ - *rdlen = 0; + if(rdlen) *rdlen = 0; static uint8_t buf[128]; int L = 0; trans_status st = wait_checksum(); @@ -149,20 +160,42 @@ trans_status wait4answer(uint8_t **rdata, int *rdlen){ do{ if((L = read_tty(buf, sizeof(buf)))) break; }while(dtime() - d0 < WAIT_TMOUT); + DBG("read %d bytes, first: 0x%x",L, buf[0]); if(!L) return TRANS_TIMEOUT; - *rdata = buf; - *rdlen = L; + if(rdata) *rdata = buf; + if(rdlen) *rdlen = L; return TRANS_SUCCEED; } /** - * Try to connect to `device` at different speeds + * check if given baudrate right + * @return its number in `speeds` array or -1 if fault + */ +int chkspeed(int speed){ + int spdidx = 0; + for(; spdidx < speedssize; ++spdidx) + if(speeds[spdidx] == speed) break; + if(spdidx == speedssize){ + WARNX(_("Wrong speed: %d!"), speed); + list_speeds(); + return -1; + } + return spdidx; +} + +/** + * Try to connect to `device` at given speed (or try all speeds, if speed == 0) * @return connection speed if success or 0 */ -int try_connect(char *device){ +int try_connect(char *device, int speed){ if(!device) return 0; + int spdstart = 0, spdmax = speedssize; + if(speed){ + if((spdstart = chkspeed(speed)) < 0) return 0; + spdmax = spdstart + 1; + } green(_("Connecting to %s... "), device); - for(curspd = 0; curspd < speedssize; ++curspd){ + for(curspd = spdstart; curspd < spdmax; ++curspd){ tty_init(device, Bspeeds[curspd]); DBG("Try speed %d", speeds[curspd]); int ctr; @@ -174,12 +207,23 @@ int try_connect(char *device){ uint8_t *rd; int l; // OK, now check an answer - if(TRANS_SUCCEED != wait4answer(&rd, &l) || l != 1 || *rd != ANS_COMM_TEST) continue; + trans_status st = wait4answer(&rd, &l); + DBG("st: %d", st); + if(st == TRANS_BUSY){ // busy - send command 'abort exp' + send_cmd(CMD_ABORT_IMAGE); + --curspd; + continue; + } + if(st == TRANS_TRYAGAIN){ // there was an error in last communications - try again + --curspd; + continue; + } + if(TRANS_SUCCEED != st || l != 1 || *rd != ANS_COMM_TEST) continue; DBG("Got it!"); green(_("Connection established at B%d.\n"), speeds[curspd]); return speeds[curspd]; } - green(_("No connection!")); + green(_("No connection!\n")); return 0; } @@ -188,22 +232,16 @@ int try_connect(char *device){ * @return 0 if all OK */ int term_setspeed(int speed){ - int spdidx = 0; size_t L; - for(; spdidx < speedssize; ++spdidx) - if(speeds[spdidx] == speed) break; - if(spdidx == speedssize){ - WARNX(_("Wrong speed: %d!"), speed); - list_speeds(); - return 1; - } + int spdidx = chkspeed(speed); + if(spdidx < 0) return 1; if(spdidx == curspd){ printf(_("Already connected at %d\n"), speeds[spdidx]); return 0; } green(_("Try to change speed to %d\n"), speed); - uint8_t msg[7] = {CMD_CHANGE_BAUDRATE, spdidx + '0', 0}; - if(send_data(msg)){ + uint8_t msg[7] = {CMD_CHANGE_BAUDRATE, spdidx + '0'}; + if(send_data(msg, 2)){ WARNX(_("Error during message send")); return 1; } @@ -284,10 +322,10 @@ void daemonize(){ void heater(heater_cmd cmd){ if(cmd == HEATER_LEAVE) return; - uint8_t buf[3] = {CMD_HEATER, 0, 0}; + uint8_t buf[2] = {CMD_HEATER, 0}; if(cmd == HEATER_ON) buf[1] = 1; int i; - for(i = 0; i < 10 && send_data(buf); ++i); + for(i = 0; i < 10 && send_data(buf, 2); ++i); trans_status st = TRANS_TIMEOUT; if(i < 10) st = wait_checksum(); if(i == 10 || st != TRANS_SUCCEED){ @@ -300,10 +338,329 @@ void heater(heater_cmd cmd){ */ char *get_firmvare_version(){ static char buf[256]; - if(TRANS_SUCCEED != send_cmd(CMD_FIRMWARE_WERSION)) return NULL; + if(TRANS_SUCCEED != send_cmd(CMD_FIRMWARE_VERSION)) return NULL; if(TRANS_SUCCEED != wait_checksum()) return NULL; uint8_t V[2]; if(2 != read_string(V, 2)) return NULL; snprintf(buf, 256, "%c%d.%d", (V[0] &0x80)?'T':'V', V[0]&0x7f, V[1]); return buf; } + +/** + * Send command to shutter + * @param cmd (i) - command (register-independent): o - open, c - close, k - de-energize + * cmd may include 'k' with 'o' or 'c' (means "open/close and de-energize") + * @return 1 in case of wrong command + */ +int shutter_command(char *cmd){ + if(!cmd) return 1; + int deenerg = 0, openclose = 0, N = 0; + while(*cmd){ + char c = *cmd++; + if(N > 2) return 1; // too much commands + if(c == 'o' || c == 'O'){ + ++N; if(openclose) return 1; // already meet 'o' or 'c' + openclose = 1; // open + }else if(c == 'c' || c == 'C'){ + ++N; if(openclose) return 1; + openclose = -1; // close + }else if(c == 'k' || c == 'K'){ + ++N; deenerg = 1; + } + else if(c != '\'' && c != '"') return 1; // wrong symbol in command + } + if(openclose){ + if(TRANS_SUCCEED != send_cmd_cs(openclose > 0 ? CMD_SHUTTER_OPEN : CMD_SHUTTER_CLOSE)) + return 1; + } + if(deenerg){ + if(TRANS_SUCCEED != send_cmd_cs(CMD_SHUTTER_DEENERGIZE)) + return 1; + } + return 0; +} + +/** + * Define subframe region + * TODO: test this function. It doesnt work + * @param parm (i) - parameters in format Xstart,Ystart,size + * `parm` can be Xstart,Ystart for default size (127px) + * @return structure allocated here (should be free'd outside) + */ +imsubframe *define_subframe(char *parm){ + if(!parm) return NULL; + // default parameters + uint16_t X = 0, Y = 0; + uint8_t sz = 127; + char *eptr; + long int L = strtol(parm, &eptr, 10); + DBG("L=%ld, parm=%s, eptr=%s",L,parm,eptr); + if(eptr == parm || !*eptr || *eptr != ','){ + WARNX(_("Subframe parameter should have format Xstart,Ystart,size or Xstart,Ystart when size=127")); + return NULL; + } + if(L > IMWIDTH - 1 || L < 1){ + WARNX(_("Xstart should be in range 0..%d"), IMWIDTH - 1 ); + return NULL; + } + parm = eptr + 1; + X = (uint16_t)L; + L = strtol(parm, &eptr, 10); + if(eptr == parm){ + WARNX(_("Wrong Ystart format")); + return NULL; + } + if(L > IMHEIGHT - 1 || L < 1){ + WARNX(_("Ystart should be in range 0..%d"), IMHEIGHT - 1 ); + return NULL; + } + Y = (uint16_t)L; + if(*eptr){ + if(*eptr != ','){ + WARNX(_("Wrong size format")); + return NULL; + } + parm = eptr + 1; + L = strtol(parm, &eptr, 10); + if(L > MAX_SUBFRAME_SZ || L < 1){ + WARNX(_("Subframe size could be in range 1..%d"), MAX_SUBFRAME_SZ); + return NULL; + } + sz = (uint8_t)L; + } + if(X+sz > IMWIDTH){ + WARNX(_("Xstart+size should be less or equal %d"), IMWIDTH); + return NULL; + } + if(Y+sz > IMHEIGHT){ + WARNX(_("Ystart+size should be less or equal %d"), IMHEIGHT); + return NULL; + } + // now all OK, send command + uint8_t cmd[6] = {CMD_DEFINE_SUBFRAME, 0}; + cmd[1] = (X>>8) & 0xff; + cmd[2] = X & 0xff; + cmd[3] = (Y>>8) & 0xff; + cmd[4] = Y & 0xff; + cmd[5] = sz; + if(send_data(cmd, 6)){ + WARNX(_("Error sending command")); + return NULL; + } + wait4answer(NULL, NULL); + // ALL OK! + imsubframe *F = MALLOC(imsubframe, 1); + F->Xstart = X, F->Ystart = Y, F->size = sz; + return F; +} + +/** + * Send command to start exposition + * @param binning - binning to expose + * @param exptime - exposition time + * @param imtype - autodark, light or dark + * @return 0 if all OK + */ +int start_exposition(imstorage *im, char *imtype){ + double exptime = im->exptime; + uint64_t exp100us = exptime * 10000.; + uint8_t cmd[6] = {CMD_TAKE_IMAGE}; + int binning = im->binning; + image_type it = IMTYPE_AUTODARK; + if(exptime < 5e-5){// 50us + WARNX(_("Exposition time should be not less than 1us")); + return 1; + } + DBG("exp: %lu", exp100us); + cmd[1] = (exp100us >> 16) & 0xff; + cmd[2] = (exp100us >> 8) & 0xff; + cmd[3] = exp100us & 0xff; + if(exp100us > MAX_EXPTIME_100){ + WARNX(_("Exposition time too large! Max value: %gs"), ((double)MAX_EXPTIME_100)/10000.); + return 2; + } + const char *bngs[] = {"full", "cropped", "binned 2x2"}; + const char *b; + if(binning != 0xff){ // check binning for non-subframe + if(binning > 2 || binning < 0){ + WARNX(_("Bad binning size: %d, should be 0 (full), 1 (crop) or 2 (binned)"), binning); + return 3; + } + b = bngs[binning]; + }else b = "subframe"; + cmd[4] = binning; + // and now check image type + if(!imtype) return 4; + int L = strlen(imtype); + if(!L){ WARNX(_("Empty image type")); return 4;} + const char *m = "autodark"; + if(0 == strncasecmp(imtype, "autodark", L)){ + if(binning == 0){ + WARNX(_("Auto dark mode don't support full image")); + return 5; + } + cmd[5] = 2;} + else if(0 == strncasecmp(imtype, "dark", L)) { cmd[5] = 0; m = "dark"; it = IMTYPE_DARK; } + else if(0 == strncasecmp(imtype, "light", L)){ cmd[5] = 1; m = "light"; it = IMTYPE_LIGHT;} + else{ + WARNX(_("Wrong image type: %s, should be \"autodark\", \"light\" or \"dark\""), imtype); + return 6; + } + if(shutter_command("ok")){ // open shutter + WARNX(_("Can't open shutter")); + return 8; + } + green("Start expose for %gseconds, mode \"%s\", %s image\n", exptime, m, b); + if(send_data(cmd, 6)){ + WARNX(_("Error sending command")); + return 7; + } + DBG("send: %c %u %u %u %u %u", cmd[0], cmd[1],cmd[2],cmd[3],cmd[4],cmd[5]); + if(TRANS_SUCCEED != wait_checksum()){ + WARNX(_("Didn't get the respond")); + return 8; + } + im->imtype = it; + size_t W, H; + switch(im->binning){ // set image size + case 1: // cropped + W = IM_CROPWIDTH; + H = IMHEIGHT; + break; + case 2: // binned + W = IMWIDTH / 2; + H = IMHEIGHT / 2; + break; + case 0xff: // subframe + W = H = im->subframe->size; + break; + case 0: // full image + default: + W = IMWIDTH; + H = IMHEIGHT; + } + im->W = W; im->H = H; + return 0; +} + +/** + * Wait till image ready + * @return 0 if all OK + */ +int wait4image(){ + uint8_t rd = 0; + char indi[] = "|/-\\"; + char *iptr = indi; + int stage = 1; // 1 - exp in progress, 2 - readout, 3 - done + printf("\nExposure in progress "); + fflush(stdout); + while(rd != ANS_EXP_DONE){ + int L = 0; + double d0 = dtime(); + do{ + if((L = read_tty(&rd, 1))) break; + }while(dtime() - d0 < EXP_DONE_TMOUT); + if(!L){ + printf("\n"); + WARNX(_("CCD not answer")); + return 1; + } + int nxtstage = 1; + if(rd != ANS_EXP_IN_PROGRESS){ + if(rd == ANS_RDOUT_IN_PROGRESS) nxtstage = 2; + else nxtstage = 3; + } + if(nxtstage == stage){ + printf("\b%c", *iptr++); // rotating line + fflush(stdout); + if(!*iptr) iptr = indi; + }else{ + stage = nxtstage; + if(stage == 2){ + printf(_("\nReadout ")); + fflush(stdout); + }else printf(_("\nDone!\n")); + } + } + return 0; +} + +/** + * Collect data by serial terminal + * @param img - parameters of exposed image + * @return array with image data (allocated here) or NULL + */ +uint16_t *get_image(imstorage *img){ + size_t L = img->W * img->H, rest = L * 2; // rest is datasize in bytes + uint16_t *buff = MALLOC(uint16_t, L); + if(TRANS_SUCCEED != send_cmd_cs(CMD_XFER_IMAGE)){ + WARNX(_("Error sending transfer command")); + FREE(buff); + return NULL; + } + #ifdef EBUG + double tstart = dtime(); + #endif + DBG("rest = %zd", rest); + uint8_t *getdataportion(uint8_t *start, size_t l){ // return last byte read + 1 + int i; + uint8_t cs = 0; + for(i = 0; i < 4; ++i){ // four tries to get datablock + size_t r = 0, got = 0; + uint8_t *ptr = start; + double d0 = dtime(); + do{ + if((r = read_tty(ptr, l))){ + d0 = dtime(); + ptr += r; + got += r; + l -= r; + } + }while(l && dtime() - d0 < IMTRANS_TMOUT); + DBG("got: %zd", got); + if(got < 3){ + cs = IMTRANS_STOP; + write_tty(&cs, 1); + return NULL; // nothing to read + } + --ptr; // *ptr is checksum + while(start < ptr) cs ^= *start++; + DBG("got checksum: %x, calc: %x", *ptr, cs); + if(*ptr == cs){ // all OK + DBG("Checksum good"); + cs = IMTRANS_CONTINUE; + write_tty(&cs, 1); + return ptr; + }else{ // bad checksum + DBG("Ask to resend data"); + cs = IMTRANS_RESEND; + write_tty(&cs, 1); + } + } + DBG("not reached"); + cs = IMTRANS_STOP; + write_tty(&cs, 1); + return NULL; + } + uint8_t *bptr = (uint8_t*) buff; + int i = 0; + // size of single block: 4096 pix in full frame or 1x1bin mode, 1024 in binned mode, subfrmsize in subframe mode + size_t dpsize = 4096*2 + 1; + if(img->binning == 2) dpsize = 1024*2 + 1; + else if(img->binning == 0xff) dpsize = 2*img->subframe->size + 1; + do{ + size_t need = (rest > dpsize) ? dpsize : rest + 1; + DBG("I want %zd bytes", need); + uint8_t *ptr = getdataportion(bptr, need); + if(!ptr){ + WARNX(_("Error receiving data")); + FREE(buff); + return NULL; + } + DBG("portion %d", ++i); + rest -= need - 1; + bptr = ptr; + }while(rest); + DBG("Got full data packet, capture time: %.1f seconds", dtime() - tstart); + return buff; +} diff --git a/term.h b/term.h index b1e3403..fb69f08 100644 --- a/term.h +++ b/term.h @@ -21,12 +21,16 @@ #pragma once #ifndef __TERM_H__ #define __TERM_H__ +#include "imfunctions.h" // communication errors typedef enum{ TRANS_SUCCEED = 0, // no errors + TRANS_ERROR, // some error occured TRANS_BADCHSUM, // wrong checksum - TRANS_TIMEOUT // no data for 0.1s + TRANS_TIMEOUT, // no data for 0.1s + TRANS_TRYAGAIN, // checksum return 0x7f - maybe try again? + TRANS_BUSY // image exposure in progress } trans_status; // change heater @@ -38,25 +42,57 @@ typedef enum{ // terminal timeout (seconds) #define WAIT_TMOUT (0.1) +// timeout waitint 'D' +#define EXP_DONE_TMOUT (5.0) +// dataportion transfer timeout +#define IMTRANS_TMOUT (1.0) +// image size +#define IMWIDTH (640) +#define IM_CROPWIDTH (512) +#define IMHEIGHT (480) +#define MAX_SUBFRAME_SZ (127) +// maximal expposition time in 100th of us +#define MAX_EXPTIME_100 ((uint64_t)0x63ffff) /******************************** Commands definition ********************************/ // communications test #define CMD_COMM_TEST 'E' #define CMD_HEATER 'g' #define CMD_CHANGE_BAUDRATE 'B' -#define CMD_FIRMWARE_WERSION 'V' +#define CMD_FIRMWARE_VERSION 'V' +#define CMD_SHUTTER_OPEN 'O' +#define CMD_SHUTTER_CLOSE 'C' +#define CMD_SHUTTER_DEENERGIZE 'K' +#define CMD_DEFINE_SUBFRAME 'S' +#define CMD_TAKE_IMAGE 'T' +#define CMD_ABORT_IMAGE 'A' +#define CMD_XFER_IMAGE 'X' + +/******************************** Image transfer ********************************/ +#define IMTRANS_CONTINUE 'K' +#define IMTRANS_RESEND 'R' +#define IMTRANS_STOP 'S' /******************************** Answers definition ********************************/ #define ANS_COMM_TEST 'O' #define ANS_CHANGE_BAUDRATE 'S' +#define ANS_EXP_IN_PROGRESS 'E' +#define ANS_RDOUT_IN_PROGRESS 'R' +#define ANS_EXP_DONE 'D' void run_terminal(); void daemonize(); int open_serial(char *dev); int get_curspeed(); -int try_connect(char *device); +int try_connect(char *device, int speed); void heater(heater_cmd cmd); void list_speeds(); +void abort_image(); int term_setspeed(int speed); char *get_firmvare_version(); +int shutter_command(char *cmd); +imsubframe *define_subframe(char *parm); +int start_exposition(imstorage *im, char *imtype); +int wait4image(); +uint16_t *get_image(imstorage *img); #endif // __TERM_H__