dss.h revision 3f54fd611f536639ec30dd53c48e5ec1897cc7d9
a9de0a2f34860a24f457c777e740b7e87e6e3827Christian Maeder/***********************************************************************
adea2e45fa61f1097aadc490a0aeaf4831b729ccChristian Maeder* This software is part of the ast package *
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski* Copyright (c) 2002-2011 AT&T Intellectual Property *
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder* and is licensed under the *
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski* Eclipse Public License, Version 1.0 *
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian Maeder* by AT&T Intellectual Property *
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski* A copy of the License is available at *
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski* http://www.eclipse.org/org/documents/epl-v10.html *
f3a94a197960e548ecd6520bb768cb0d547457bbChristian Maeder* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
0095c7efbddd0ffeed6aaf8ec015346be161d819Till Mossakowski* Information and Software Systems Research *
adea2e45fa61f1097aadc490a0aeaf4831b729ccChristian Maeder* AT&T Research *
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski* Florham Park NJ *
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder* Glenn Fowler <gsf@research.att.com> *
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder***********************************************************************/
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * data stream scan interface definitions
ad270004874ce1d0697fb30d7309f180553bb315Christian Maeder#define DSS_PLUGIN_VERSION AST_PLUGIN_VERSION(DSS_VERSION)
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski Dsslib_t* dss_lib(const char* name, Dssdisc_t* disc) { return &dss_lib_##m; } \
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski unsigned long plugin_version(void) { return DSS_PLUGIN_VERSION; }
adea2e45fa61f1097aadc490a0aeaf4831b729ccChristian Maeder Dsslib_t* dss_lib(name, disc) const char* name; Dssdisc_t* disc; { return &dss_lib_##m; } \
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder unsigned long plugin_version() { return DSS_PLUGIN_VERSION; }
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski#define DSS_DEBUG CX_DEBUG /* debug trace */
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski#define DSS_QUIET CX_QUIET /* no non-fatal messages*/
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski#define DSS_REGRESS CX_REGRESS /* regression output */
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder#define DSS_TRACE CX_TRACE /* algorithm trace */
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder#define DSS_VALIDATE CX_VALIDATE /* validate constraints */
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder#define DSS_VERBOSE CX_VERBOSE /* verbose feedback */
adea2e45fa61f1097aadc490a0aeaf4831b729ccChristian Maeder#define DSS_APPEND (CX_FLAGS<<0) /* DSS_FILE_APPEND */
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski#define DSS_BASE (CX_FLAGS<<1) /* base method */
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder#define DSS_FORCE (CX_FLAGS<<2) /* populate all fields */
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski#define DSS_WRITE (CX_FLAGS<<3) /* {write} referenced */
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski#define DSS_METH_FLAGS (CX_FLAGS<<4) /* first method flag */
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski#define DSS_FLAGS (DSS_METH_FLAGS<<8) /* first caller flag */
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski#define DSS_FILE_READ (1<<0) /* read mode */
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski#define DSS_FILE_WRITE (1<<1) /* write mode */
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder#define DSS_FILE_APPEND (1<<2) /* append (no header) */
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski#define DSS_FILE_KEEP (1<<3) /* keep stream on close */
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski#define DSS_FILE_ERROR (1<<4) /* an error occurred */
556f473448dfcceee22afaa89ed7a364489cdbbbChristian Maederstruct Dssfile_s; typedef struct Dssfile_s Dssfile_t;
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowskistruct Dssformat_s; typedef struct Dssformat_s Dssformat_t;
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowskistruct Dssoptdisc_s; typedef struct Dssoptdisc_s Dssoptdisc_t;
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowskistruct Dssrecord_s; typedef struct Dssrecord_s Dssrecord_t;
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederstruct Dssstate_s; typedef struct Dssstate_s Dssstate_t;
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowskistruct Dssoptdisc_s /* dssopt*() optget() disc */
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski Cxheader_t* header; /* current item header */
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder int (*identf)(Dssfile_t*, void*, size_t, Dssdisc_t*);
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski int (*readf)(Dssfile_t*, Dssrecord_t*, Dssdisc_t*);
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski int (*writef)(Dssfile_t*, Dssrecord_t*, Dssdisc_t*);
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski Sfoff_t (*seekf)(Dssfile_t*, Sfoff_t, Dssdisc_t*);
a98fd29a06e80e447af26d898044c23497adbc73Mihai Codescu Dssrecord_t* (*savef)(Dssfile_t*, Dssrecord_t*, Dssdisc_t*);
a98fd29a06e80e447af26d898044c23497adbc73Mihai Codescu int (*dropf)(Dssfile_t*, Dssrecord_t*, Dssdisc_t*);
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski Dssfile_t* file; /* file handle if not cloned */
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski Sfoff_t offset; /* current record offset */
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder Dssmeth_t* (*methf)(const char*, const char*, const char*, Dssdisc_t*, Dssmeth_t*);
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder const char* compress; /* preferred compression */
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder const char* print; /* default {print} format */
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder Dssmeth_t* meth; /* most recent dssmeth() */
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder Dssformat_t* format; /* first input file format */
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder#define dssinit(d,e) (memset(d,0,sizeof(*(d))),(d)->version=DSS_VERSION,(d)->errorf=(Error_f)(e),dssstate(d))
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder#define dssformat(n,d,m) ((Dssformat_t*)dtmatch((m)->formats,(char*)(n)))
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder#if DSS_STATIC || _BLD_STATIC || _BLD_STATIC_LINK
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder#define dssstatic(l,d) { extern Dsslib_t dss_lib_##l; dssadd(&dss_lib_##l,d); }
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederextern Dsslib_t* dss_lib(const char*, Dssdisc_t*);
e8eb2b9d68adc3024eb1aa9899b902ed5a3fb460Christian Maederextern Dsslib_t* dsslib(const char*, Dssflags_t, Dssdisc_t*);
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederextern Dsslib_t* dssload(const char*, Dssdisc_t*);
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederextern Dssmeth_t* dssmeth(const char*, Dssdisc_t*);
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederextern Dssmeth_t* dsstags(Sfio_t*, const char*, int, Dssflags_t, Dssdisc_t*, Dssmeth_t*);
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederextern Sfio_t* dssfind(const char*, const char*, Dssflags_t, char*, size_t, Dssdisc_t*);
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederextern int dssoptinfo(Opt_t*, Sfio_t*, const char*, Optdisc_t*);
cd6e5706893519bfcf24539afa252fcbed5097ddKlaus Luettichextern int dssoptlib(Sfio_t*, Dsslib_t*, const char*, Dssdisc_t*);
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederextern Dss_t* dssopen(Dssflags_t, Dssflags_t, Dssdisc_t*, Dssmeth_t*);
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederextern int dssrun(Dss_t*, const char*, const char*, const char*, char**);
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederextern Dssfile_t* dssfopen(Dss_t*, const char*, Sfio_t*, Dssflags_t, Dssformat_t*);
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederextern int dssfwrite(Dssfile_t*, Dssrecord_t*);
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederextern Dssexpr_t* dsscomp(Dss_t*, const char*, Sfio_t*);
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederextern int dsseval(Dss_t*, Dssexpr_t*, Dssrecord_t*);
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederextern int dsslist(Dss_t*, Dssexpr_t*, Sfio_t*);
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederextern ssize_t dssmagic(Dss_t*, Sfio_t*, const char*, const char*, uint32_t, size_t);
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederextern int dssprintf(Dss_t*, Cx_t*, Sfio_t*, const char*, Dssrecord_t*);
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederextern int dssget(Dssrecord_t*, Dssvariable_t*, Dsstype_t*, const char*, Dssvalue_t*);
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederextern Dsstype_t* dsstype(Dss_t*, const char*);
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maederextern Dssvariable_t* dssvariable(Dss_t*, const char*);