diff options
author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2014-09-01 13:56:46 +0200 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2014-09-01 13:56:46 +0200 |
commit | 22f703cab05b7cd368f4de9e03991b7664dc5022 (patch) | |
tree | 6f4d50beaa42328e24b1c6b56b6ec059e4ef21a5 /cgats/cgats.h |
Initial import of argyll version 1.5.1-8debian/1.5.1-8
Diffstat (limited to 'cgats/cgats.h')
-rw-r--r-- | cgats/cgats.h | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/cgats/cgats.h b/cgats/cgats.h new file mode 100644 index 0000000..2a6b1fd --- /dev/null +++ b/cgats/cgats.h @@ -0,0 +1,180 @@ +#ifndef CGATS_H + +/* + * Committee for Graphics Arts Technologies Standards + * CGATS.5 and IT8.7 family file I/O class + * Version 2.05 + * + * Author: Graeme W. Gill + * Date: 20/12/95 + * + * Copyright 1995, 1996, 2002, Graeme W. Gill + * All rights reserved. + * + * This material is licensed with an "MIT" free use license:- + * see the License.txt file in this directory for licensing details. + */ + +/* Version of cgatslib release */ + +#define CGATSLIB_VERSION 0x020005 +#define CGATSLIB_VERSION_STR "2.05" + +#define CGATS_ERRM_LENGTH 200 + +#ifdef __cplusplus + extern "C" { +#endif + +#include "pars.h" /* We use the ASCII parsing class */ + +/* Possible table types */ +typedef enum { it8_7_1, it8_7_2, it8_7_3, it8_7_4, cgats_5, cgats_X, tt_other, tt_none } table_type; + +/* Possible data types - real, integer, char string, non-quoted char string, no value */ +typedef enum { r_t, i_t, cs_t, nqcs_t, none_t } data_type; + +union _cgats_set_elem { + int i; + double d; + char *c; +}; typedef union _cgats_set_elem cgats_set_elem; + +struct _cgats_table { + cgatsAlloc *al; /* Copy of parent memory allocator */ + table_type tt; /* Table type */ + int oi; /* other type index */ + + /* Read only */ + int nkwords; /* Number of keywords */ + int nfields; /* Number of fields of data */ + int nsets; /* Number of data sets */ + + char **ksym; /* Pointer to [nkwords] array of pointers to keyword symbols */ + char **kdata; /* Pointer to [nkwords] array of pointers to keyword values */ + + char **fsym; /* Pointer to [nfields] array of pointers to field symbols */ + data_type *ftype; /* Pointer to [nfields] array of field types */ + char ***rfdata; /* Pointer to [nsets] array of pointers */ + /* to [nfields] array of pointers to read file field text values */ + void ***fdata; /* Pointer to [nsets] array of pointers */ + /* to [nfields] array of pointers to field set values of ftype */ + /* Private */ + int nkwordsa; /* Number of keywords allocated */ + int nfieldsa; /* Number of fields allocated */ + int nsetsa; /* Number of sets allocated */ + char **kcom; /* Pointer to [nkwords] array of pointers to keyword comments */ + int ndf; /* Next data field - used by add_data_item() */ + int sup_id; /* Set to non-zero if table ID output is to be suppressed */ + int sup_kwords; /* Set to non-zero if table default keyword output is to be suppressed */ + int sup_fields; /* Set to non-zero if table field output is to be suppressed */ +}; typedef struct _cgats_table cgats_table; + +struct _cgats { + /* Private */ + cgatsAlloc *al; /* Memory allocator */ + int del_al; /* Flag to indicate we al->del() */ + + /* Read only Variables */ + int ntables; /* Number of tables */ + + cgats_table *t; /* Pointer to an array of ntable table structures */ + + /* Undefined CGATS table type */ + char *cgats_type; + + /* User defined table types */ + int nothers; /* Number of other identifiers */ + char **others; /* Other file type identifiers */ + + /* Public Methods */ + int (*set_cgats_type)(struct _cgats *p, const char *osym); + /* Define the (one) variable CGATS type */ + /* Return -2, set errc & err on system error */ + + int (*add_other)(struct _cgats *p, const char *osym); + /* Add a user defined file identifier string. */ + /* Use a zero length string for wildcard. */ + /* Return the oi */ + /* Return -2, set errc & err on system error */ + + int (*get_oi)(struct _cgats *p, const char *osym); + /* Return the oi of the given other type */ + /* return -ve and errc and err set on error */ + + int (*read)(struct _cgats *p, cgatsFile *fp); /* Read a cgats file into structure */ + /* return -ve and errc and err set on error */ + + /* NULL if SEPARATE_STD is defined: */ + int (*read_name)(struct _cgats *p, const char *filename); /* Standard file I/O */ + /* return -ve and errc and err set on error */ + + int (*find_kword)(struct _cgats *p, int table, const char *ksym); + /* Return index of the keyword, -1 on fail */ + /* -2 on illegal table index, errc & err */ + int (*find_field)(struct _cgats *p, int table, const char *fsym); + /* Return index of the field, -1 on fail */ + /* -2 on illegal table index, errc & err */ + + int (*add_table)(struct _cgats *p, table_type tt, int oi); + /* Add a new (empty) table to the structure */ + /* Return the index of the table */ + /* Return -2, set errc & err on system error */ + /* if tt is tt_other, io sets the other index */ + int (*set_table_flags)(struct _cgats *p, int table, int sup_id,int sup_kwords,int sup_fields); + /* Set or reset table output suppresion flags */ + /* Return -ve, set errc & err on error */ + int (*add_kword)(struct _cgats *p, int table, const char *ksym, const char *kdata, const char *kcom); + /* Add a new keyword/value pair + optional comment to the table */ + /* Return index of new keyword, or -1, errc & err on error */ + int (*add_field)(struct _cgats *p, int table, const char *fsym, data_type ftype); + /* Add a new field to the table */ + /* Return index of new field, or -1, -2, errc and err on error */ + int (*add_set)(struct _cgats *p, int table, ...); /* Add a set of data */ + /* Return 0 normally, -1, -2, errc & err if error */ + int (*add_setarr)(struct _cgats *p, int table, cgats_set_elem *ary); /* Add data from array */ + /* Return 0 normally, -1, -2, errc & err if error */ + int (*write)(struct _cgats *p, cgatsFile *fp); /* Write structure into cgats file */ + /* return -ve and errc and err set on error */ + + int (*get_setarr)(struct _cgats *p, int table, int set_index, cgats_set_elem *ary); + /* Fill a suitable set_element with a line of data */ + /* Return 0 normally, -1, -2, errc & err if error */ + /* NULL if SEPARATE_STD is defined: */ + int (*write_name)(struct _cgats *p, const char *filename); /* Standard file I/O */ + /* return -ve and errc and err set on error */ + + + int (*error)(struct _cgats *p, char **mes); /* Return error code and message */ + /* for the first error, if any error */ + /* has occured since object creation. */ + void (*del)(struct _cgats *p); /* Delete the object */ + + char err[CGATS_ERRM_LENGTH]; /* Error message */ + int errc; /* Error code */ + char ferr[CGATS_ERRM_LENGTH]; /* First error message */ + int ferrc; /* First error code */ +}; typedef struct _cgats cgats; + +/* Creator */ +extern cgats *new_cgats_al(cgatsAlloc *al); /* with allocator object */ + +#ifdef COMBINED_STD +#define CGATS_STATIC static +#else +#define CGATS_STATIC +#endif + +/* Available if SEPARATE_STD is not defined */ +extern cgats *new_cgats(void); /* Standard allocator */ + +/* Available from cgatsstd.obj SEPARATE_STD is defined: */ +CGATS_STATIC int cgats_read_name(cgats *p, const char *filename); +CGATS_STATIC int cgats_write_name(cgats *p, const char *filename); + +#ifdef __cplusplus + } +#endif + +#define CGATS_H +#endif /* CGATS_H */ |