#pragma prototyped
#ifndef _IV_H
#define _IV_H 1
#include <fv.h>
#define IV_VERSION 20111001L
#define IV_OPEN 1
#define IV_CLOSE 2
typedef unsigned char* Ivpoint_t;
typedef struct Iv_s Iv_t;
typedef struct Ivdisc_s Ivdisc_t;
typedef struct Ivmeth_s Ivmeth_t;
typedef struct Ivseg_s Ivseg_t;
typedef void (*Ivfree_f)(Iv_t*, void*);
struct Ivseg_s
{
unsigned char* lo;
unsigned char* hi;
void* data;
#ifdef _IV_SEG_PRIVATE_
_IV_SEG_PRIVATE_
#endif
};
struct Ivdisc_s
{
uint32_t version;
void* unmatched;
Error_f errorf;
Ivfree_f freef;
};
struct Ivmeth_s
{
const char* name;
const char* description;
const char* options;
unsigned char* (*getf)(Iv_t*, unsigned char*);
int (*setf)(Iv_t*, unsigned char*, unsigned char*, void*);
int (*delf)(Iv_t*, unsigned char*, unsigned char*);
Ivseg_t* (*segf)(Iv_t*, unsigned char*);
int (*eventf)(Iv_t*, int, void*);
};
struct Iv_s
{
Ivmeth_t* meth;
Ivdisc_t* disc;
void* data;
unsigned char* unit;
unsigned char* r1;
unsigned char* r2;
int size;
};
#define ivinit(p) (memset(p,0,sizeof(*(p))),(p)->version=IV_VERSION)
#define ivset(iv,lo,hi,dt) (*(iv)->meth->setf)((iv),(lo),(hi),(dt))
#define ivget(iv,pt) (*(iv)->meth->getf)((iv),(pt))
#define ivdel(iv,lo,hi) (*(iv)->meth->delf)((iv),(lo),(hi))
#define ivseg(iv,pt) (*(iv)->meth->segf)((iv),(pt))
_BEGIN_EXTERNS_
extern Ivmeth_t* ivmeth(const char*);
extern Iv_t* ivopen(Ivdisc_t*, Ivmeth_t*, int, const char*);
extern int ivclose(Iv_t*);
extern int ivstr(Iv_t*, const char*, char**, unsigned char*, unsigned char*);
extern char* ivfmt(Iv_t*, const unsigned char*, int);
_END_EXTERNS_
#if _BLD_iv || _BLD_ip_t || _PACKAGE_astsa
#define IVLIB(m) Ivmeth_t* Iv##m = &_##Iv##m;
#else
#if defined(__EXPORT__)
#define IVLIB(m) Ivmethod_t* Iv##m = &_##Iv##m; extern __EXPORT__ Ivmethod_t* vcodex_lib(const char* path) { return Iv##m; }
#else
#define IVLIB(m) Ivmethod_t* Iv##m = &_##Iv##m; extern Ivmethod_t* iv_lib(const char* path) { return Iv##m; }
#endif
#endif
#endif