This replaces D-ISAM head/isbase.h
and includes an option to declare char *
arguments as const
, where this is appropriate.
In Xcode Swift this allows String
types to be passed directly to D-ISAM, as a pointer to an immutable character array.
Without this change Swift will require that all C strings are copied to a writeable first, which is wasteful in cases like file pathnames and such, where D-ISAM only needs to read the string in.
To activate this option you must define ISCONSTCHAR when including this file, for example:
#define ISCONSTCHAR 1 #include "isbase.h" #undef ISCONSTCHAR
Download the update here.
/* ----------------------------------------------------------------------------- isam base library header file ----------------------------------------------------------------------------- */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Worldwide Copyright (c) Byte Designs Ltd (2015) * * Version 7.2 (build 2015/03/10) (xcode) * * * * Byte Designs Ltd. * * 20568 - 32 Avenue * * LANGLEY, BC * * V2Z 2C8 CANADA * * * * Sales: sales@bytedesigns.com * * Support: support@bytedesigns.com * * Phone: (604) 534 0722 Fax: (604) 534 2601 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "isconfig.h" /* library configuration */ #include "isintstd.h" /* see read/stdint.ref */ #include <setjmp.h> /* error handling */ #include <stdarg.h> /* standard arguments */ /* note ----------------------------------------------------------- * the following is pulled from a common source in the disam master, and is *identical* from here through #endif ISAUTOLOCK below, in both isbase.h and iswrap.h ---------------------------------------------------------------- */ #ifndef ISAUTOLOCK /* avoid multiple inclusions */ /* structures ----------------------------------------------------- */ struct keypart /* key component description */ { short kp_start; /* offset within data record */ short kp_leng; /* physical length */ short kp_type; /* isam key type */ }; struct keydesc /* full key description */ { short k_flags; /* key characteristics */ short k_nparts; /* number of parts in key */ struct keypart k_part[ISMAXPARTS]; /* description of each part */ #if( defined ISINTERNAL || ISDANGEROUS ) short k_len; /* complete key length */ uint32_t k_rootnode; /* root node record number */ #endif }; struct dictinfo /* information about file */ { short di_nkeys; /* number of indexes */ short di_curidx; /* current index number */ short di_recsize; /* data record (max) length */ short di_idxsize; /* index record block size */ uint32_t di_nrecords; /* current record count */ }; struct audhead /* audit record header format */ { char au_type[2]; /* record type (aa/dd/rr/ww) */ char au_time[4]; /* date and time */ #if( ISLONGID == 1 ) char au_procid[4]; /* process id */ char au_userid[4]; /* user id */ #else char au_procid[2]; /* process id */ char au_userid[2]; /* user id */ #endif char au_recnum[4]; /* record number */ char au_reclen[2]; /* record length if variable */ }; #define AUDHEADSIZE 14 #define VAUDHEADSIZE 16 /* defines ------------------------------------------------------- */ /* file handling modes */ #define ISINPUT 0x00 /* input only */ #define ISOUTPUT 0x01 /* output only */ #define ISINOUT 0x02 /* input and output */ #define ISTRANS 0x04 /* transaction processing */ #define ISNOLOG 0x08 /* turn off logging */ #define ISFIXLEN 0x00 /* dummy */ #define ISVARLEN 0x10 /* variable length data */ #define ISVARCMP 0x30 /* compressed varlen */ #define ISSYNCWR 0x40 /* synchronous writes */ #define ISMASKED 0x80 /* masking active */ #define ISNOCARE 0x8000 /* set mode to match file */ /* locking methods */ #define ISRDONLY 0x100 /* read only - no locking */ #define ISAUTOLOCK 0x200 /* automatic lock on read */ #define ISMANULOCK 0x400 /* manual locking */ #define ISEXCLLOCK 0x800 /* exclusive access to file */ #if( SEMILOCK == 1 ) #define ISSEMILOCK 0x1000 /* C-ISAM compatible semi-lock */ #endif /* key types */ #define CHARTYPE 0 /* array of bytes/characters */ #define DECIMALTYPE 0 /* handled as per char type */ #define INTTYPE 1 /* two byte (short) integer */ #define LONGTYPE 2 /* four byte (long) integer */ #define DOUBLETYPE 3 /* ieee double floating point */ #define FLOATTYPE 4 /* ieee single floating point */ #define MINTTYPE 5 /* machine (native) short */ #define MLONGTYPE 6 /* machine (native) long */ #define STRINGTYPE 7 /* null terminated byte string */ #define ISDESC 0x80 /* add for descending order */ /* key atomic sizes */ #define CHARSIZE 1 #define INTSIZE 2 #define LONGSIZE 4 #define DOUBLESIZE 8 #define FLOATSIZE 4 #define MINTSIZE 2 #define MLONGSIZE 4 #define STRINGSIZE 1 /* shortcuts for single part keys */ #define k_start k_part[0].kp_start #define k_leng k_part[0].kp_leng #define k_type k_part[0].kp_type #define NPARTS ISMAXPARTS /* index management flags */ #define ISNODUPS 0x00 /* no duplicates permitted */ #define ISDUPS 0x01 /* duplicates permitted */ #define DCOMPRESS 0x02 /* compress duplicates */ #define LCOMPRESS 0x04 /* leading compression */ #define TCOMPRESS 0x08 /* trailing compression */ #define COMPRESS 0x0E /* full compression */ #define TNULL 0x10 /* compress trailing nulls */ #define NULLKEY 0x20 /* null key masking */ #define ISMASK(I) ( 1L << ((I)-1) ) /* index masking bit flags */ /* access control */ #define ISFIRST 0 /* first record */ #define ISLAST 1 /* last record */ #define ISNEXT 2 /* next record */ #define ISPREV 3 /* previous record */ #define ISCURR 4 /* current record */ #define ISEQUAL 5 /* find match */ #define ISGREAT 6 /* greater than current */ #define ISGTEQ 7 /* greater than or equal */ /* record locking */ #define ISLOCK 0x100 /* lock record or fail */ #if( ISCISAM != 0 ) # define ISSKIPLOCK 0x200 /* skip record if locked */ #endif #define ISWAIT 0x400 /* wait until free */ #define ISLCKW 0x500 /* wait and lock */ #define ISKEEPLOCK 0x800 /* isstart keep lock */ /* audit trace control */ #define AUDSETNAME 0 /* set audit file name */ #define AUDGETNAME 1 /* get audit file name */ #define AUDSTART 2 /* begin audit logging */ #define AUDSTOP 3 /* stop audit logging */ #define AUDINFO 4 /* logging status */ #define USERINFOSIZE 10 /* userinfo pad size */ /* isam specific error codes (iserrno) */ #define EDUPL ( ISERRBASE + 0 ) /* illegal duplicate */ #define ENOTOPEN ( ISERRBASE + 1 ) /* file not open */ #define EBADARG ( ISERRBASE + 2 ) /* illegal argument */ #define EBADKEY ( ISERRBASE + 3 ) /* illegal key description */ #define ETOOMANY ( ISERRBASE + 4 ) /* out of isam file handles */ #define EBADFILE ( ISERRBASE + 5 ) /* isam file is corrupt */ #define ENOTEXCL ( ISERRBASE + 6 ) /* can't get exclusive access */ #define ELOCKED ( ISERRBASE + 7 ) /* record is locked */ #define EKEXISTS ( ISERRBASE + 8 ) /* index already defined */ #define EPRIMKEY ( ISERRBASE + 9 ) /* illegal primary key operation */ #define EENDFILE ( ISERRBASE + 10 ) /* start or end file reached */ #define ENOREC ( ISERRBASE + 11 ) /* record not found */ #define ENOCURR ( ISERRBASE + 12 ) /* no current record */ #define EFLOCKED ( ISERRBASE + 13 ) /* file is locked */ #define EFNAME ( ISERRBASE + 14 ) /* file name is too long */ #define ENOLOK ( ISERRBASE + 15 ) /* not used */ #define EBADMEM ( ISERRBASE + 16 ) /* can't allocate memory */ #define EBADCOLL ( ISERRBASE + 17 ) /* not used, see next */ #define EBADIO ( ISERRBASE + 17 ) /* trouble in IO */ #define ELOGREAD ( ISERRBASE + 18 ) /* error reading log file */ #define EBADLOG ( ISERRBASE + 19 ) /* log file is corrupt */ #define ELOGOPEN ( ISERRBASE + 20 ) /* unable to open log */ #define ELOGWRIT ( ISERRBASE + 21 ) /* unable to write log */ #define ENOTRANS ( ISERRBASE + 22 ) /* transaction not found */ #define ENOSHMEM ( ISERRBASE + 23 ) /* out of shared memory */ #define ENOBEGIN ( ISERRBASE + 24 ) /* no current transaction */ #define ENONFS ( ISERRBASE + 25 ) /* not used */ #define EBADROWID ( ISERRBASE + 26 ) /* not used */ #define ENOPRIM ( ISERRBASE + 27 ) /* no primary key */ #define ENOLOG ( ISERRBASE + 28 ) /* logging not allowed */ #define EUSER ( ISERRBASE + 29 ) /* too many users */ #define ENODBS ( ISERRBASE + 30 ) /* not used */ #define ENOFREE ( ISERRBASE + 31 ) /* not used */ #define EROWSIZE ( ISERRBASE + 32 ) /* varlen record too big */ #define EAUDIT ( ISERRBASE + 33 ) /* existing audit trail */ #define ENOLOCKS ( ISERRBASE + 34 ) /* out of room in lock table */ #define EEXPIRED ( ISERRBASE + 35 ) /* evaluation library has expired */ #define ENOCONNECT ( ISERRBASE + 36 ) /* no connect with remote server */ #define ENETORDER ( ISERRBASE + 37 ) /* server has wrong endian order */ #define EREPAIR ( ISERRBASE + 38 ) /* auto repair in progress */ #define EBADADDR ( ISERRBASE + 39 ) /* bad network address */ #define ENOSCHEMA ( ISERRBASE + 40 ) /* no schema defined */ #define EEXSCHEMA ( ISERRBASE + 41 ) /* schema already defined */ #define ENOTAVAIL ( ISERRBASE + 42 ) /* remote function not available */ /* on system error - iserrio = IO_call + IO_file */ #define IO_OPEN 0x10 /* open */ #define IO_CREA 0x20 /* create */ #define IO_SEEK 0x30 /* seek */ #define IO_READ 0x40 /* read */ #define IO_WRIT 0x50 /* write */ #define IO_LOCK 0x60 /* lock */ #define IO_OTHER 0x70 /* other */ #define IO_IDX 0x01 /* index file */ #define IO_DAT 0x02 /* data file */ #define IO_AUD 0x03 /* audit trace */ #define IO_RAW 0x04 /* any other file */ #define IO_REP 0x05 /* auto repair file */ #define IO_LOG 0x06 /* transaction log */ #define IO_LCK 0x07 /* offline lock file */ #define IO_LOK 0x04 /* cisam, not used */ #define IO_SEM 0x05 /* cisam, not used */ /* cobol isstat4 values --------------------------------------------*/ #define STATNULL ' ' /* empty isstat4 value */ #define STAT1 '1' #define STAT2 '2' #define STAT3 '3' #define STAT4 '4' #define STAT5 '5' #define STAT6 '6' #define STAT7 '7' #define STAT8 '8' #define STAT9 '9' #define STAT0 '0' /* self check facility ------------------------------------------- */ #define IC_DATREAD 0 /* data file read error */ #define IC_BADDATA 1 /* data record corrupt */ #define IC_DATFREE 2 /* data free list is corrupt */ #define IC_IDXREAD 3 /* index file read error */ #define IC_ORDER 4 /* key out of order */ #define IC_COUNT 5 /* index count mismatch */ #define IC_BADMAGIC 6 /* bad index node magic number */ #define IC_MATCH 7 /* index/data mismatch */ #define IC_SANITY 8 /* compiler sanity check */ #define IC_DUPSEQ 9 /* bad duplicate sequence */ #if( ISVARIABLE ) #define IC_VLHASHZERO 11 /* hash table zero loaded */ #define IC_VLMISFILE 12 /* node misfiled in hash table */ #define IC_VLHASHLINK 13 /* mangled link in hash list */ #define IC_VLMISSING 14 /* nodes missing or unaccounted */ #define IC_VLBADDATA 15 /* data length mismatch */ struct IsVarStat /* variable length statistics */ { uint32_t hashcount; uint32_t hashspace; uint32_t fullcount; uint32_t fullspace; uint32_t filecount; uint32_t filespace; }; #endif #endif /*ISAUTOLOCK*/ /* ---------------------------------------------------------------- * above is pulled from common source, see #ifdef ISAUTOLOCK above. ---------------------------------------------------------------- */ /* useful defines ----------------------------------------------- */ #define ISTRUE 1 #define ISFALSE 0 /* convenient shortcuts ----------------------------------------- */ typedef struct IsamFile IsFile; typedef struct keydesc IsKdsc; typedef struct keypart IsKprt; #if( defined ISINTERNAL || defined ISDANGEROUS ) /* base library internal definitions ----------------------------- */ #define TRUE 1 #define FALSE 0 #define SETBIT( F, O ) ( F | ( 1 << ( O ) ) ) #define UNSBIT( F, O ) ( F & ~( 1 << ( O ) ) ) #define BITSET( F, O ) ( F & ( 1 << ( O ) ) ) #define ISREALLOC(S,P,O,N) ( struct S * )is_realloc( ( char * )P, O, N ) #define ISALLOC(S) ( struct S * )is_malloc( sizeof( struct S ) ) #define ISFREE(S,P) ( struct S * )is_free( ( char * )P ) #define ISNODEMAX ( isam->idxlen - 4 ) #define ISFAIL(I,M) ( ! isEntry( I, M ) || setjmp( I->trap ) ) #define ISFATAL is_fatal( "fatal isam error %s(%d)", __FILE__, __LINE__ ) /* path handling ------------------------------------------------- */ #define ISAMPRIME(I) ( (I)->maxidx ? (I)->path[0]->kdsc : NULL ) #define ISAMINDEX(I) ( ( (I)->curidx < (I)->maxidx ) ? (I)->path[(I)->curidx]->kdsc : NULL ) /* to be deprecated */ #define ISPATH ( isam->path[isam->curidx] ) #define ISKDSC ( isam->path[isam->curidx]->kdsc ) #define ISTAIL ( ISPATH->tail ) #define TAIL path->tail #define ISEMPTY(P) ( P->tail->used == 2 ) /* specialised machine independant integers ---------------------- */ #define LDRECD(P) ( ldMint( P, 4 ) & 0x7FFFFFFFL ) #define LDDUP(P,L) ( ldMint( P, L ) ) #define STDUP(P,L,D) ( stMint( P, L, D ) ) /* structure specific flags and state values --------------------- */ #define ISREALFILE 0 /* stored on file system */ #define ISIPSOCKET 1 /* mounted on network socket */ #define ISNAMEPIPE 2 /* mounted on named pipe */ #define ISEXECPIPE 3 /* mounted on process pipe */ /* IsamFile - bit flags */ #define ISNOPRIM 0 /* primary is natural order */ #define ISNOTNEXT 1 /* read/start next dislocate */ #define ISNOTPREV 2 /* read/start prev dislocate */ #define ISWRLOCK 3 /* lock records on write */ #define ISPRECIOUS 4 /* do not reuse data slots */ #define ISLOCKCHECK 5 /* check locked on update/delete */ #define ISNOCURRENT 6 /* current is not viable */ #define ISLOGDEFER 7 /* open/close deferred logging */ /* IsamNode - state values */ #define ISNDREF 0 /* image must be refreshed */ #define ISNDOK 1 /* image is current */ #define ISNDUPD 2 /* image has been updated */ /* index file records -------------------------------------------- */ struct IsamNode /* index file record */ { struct IsamNode *prev; /* parent node */ struct IsamNode *split; /* sibling */ uint32_t idxrec; /* idx file record number */ char *image; /* disk image */ char state; /* current status */ int used; /* number of bytes used */ int level; /* zero is leaf node */ int keyoff; /* current key offset */ int keyend; /* end of compressed key */ uint32_t recnum; /* current record number */ uint32_t dupnum; /* current duplicate number */ char *keyval; /* key contents */ }; /* schema/record layout ------------------------------------------ */ struct IsamRec { char *image; /* current node image */ uint32_t root; /* root recnum */ uint32_t last; /* last recnum */ }; /* index handling ------------------------------------------------ */ struct IsamPath /* index details */ { struct keydesc *kdsc; /* key description */ struct IsamNode *tail; /* current path tail */ struct IsamNode *buf[ISMAXBUF]; /* buffering system */ int slotlen; /* key slot length */ int duplen; /* valid if dups */ int partial; /* active partial length */ char current[ISMAXKEY]; /* current key value */ uint32_t recnum; /* current record number */ uint32_t dupnum; /* current dupnum i/a */ int cmplen; /* current compare */ char flags; /* bit flags */ }; /* free list control structure ----------------------------------- */ struct IsamFree { char *image; /* index node image */ char *split; /* hold for update */ char state; /* update status */ uint32_t root; /* list root record */ uint32_t last; /* last used recnum */ int used; /* bytes used in node */ }; /* typedefs */ typedef struct IsamPath IsPath; typedef struct IsamNode IsNode; typedef struct IsamFree IsFree; #endif /* ISINTERNAL || ISDANGEROUS */ /* isam file descriptor ------------------------------------------ */ struct IsamFile /* isam file description */ { /* IO block HEAD - this structure matches on all sources */ char *name; /* isam path and name */ char where; /* source switch case */ #if( ISADMIN ) int admid; /* admin table offset */ #endif /* IO block DATA - openmode through maxlen, should not change */ int openmode; /* open mode bit flags */ int idxlen; /* index node size */ int duplen; /* duplicate sequence width */ int maxidx; /* number of indexes */ int curidx; /* current index number */ uint32_t mask; /* index masking bit array */ uint32_t isrecnum; /* current record number */ int isreclen; /* current record length */ int iserrno; /* failure code */ int iserrio; /* what and where */ int datlen; /* data record length */ int datblk; /* data file record block */ int maxlen; /* variable length max */ #if( ISMFCOBOL > 0 ) char isstat1; /* cobol status variables */ char isstat2; char isstat3; char isstat4; #endif #if( ISEXTENDED ) int32_t ispid; /* pid of blocking lock */ #endif /* IO block END, remainder is local and specific to source */ #if( defined ISINTERNAL || defined ISDANGEROUS ) int flags; /* all internal bit flags */ int datfd; /* data file handle */ int idxfd; /* index file handle */ int ( *rdfilter )( int, char *, int );/* read filtering callback */ uint32_t natcurr; /* natural order current */ uint32_t kdsc; /* key desc list root node */ uint32_t delta; /* concurrency control */ uint32_t unique; /* unique id value */ struct IsamPath *path[ISMAXIDX]; /* active path array */ struct IsamFree idxfree; /* index free list */ struct IsamFree datfree; /* data free list */ struct IsamRec schema; /* schema pointers */ uint32_t *lklist; /* list of record locks */ uint32_t lkllen; /* current list length */ char lkstate; /* locking state flags */ char *image; /* header record image */ char *data; /* current data image */ int workmode; /* reading or writing */ jmp_buf trap; /* longjump trap point */ #if( ISAUDIT ) uint32_t audit; /* audit control node */ char audinfo[69]; /* allocated info block */ int audfd; /* trace file handle */ #endif #if( ISLOGGING ) int txnpid; /* transaction process id */ int txnfile; /* transaction file id */ #endif #if( ISVARIABLE ) uint32_t *hashtab; /* hash table array */ char *varnode; /* varlen node image */ char hashload; /* refresh flag */ char *vcbuf; /* vl compression temp buffer */ int vclen; /* vl compression temp length */ #endif #if( ISVARIABLE > 1 ) uint32_t hashrecd; /* hash table record */ char *hashnode; /* hash table image */ #endif #if( ISLOCKING == 3 ) int lokfd; /* lock file handle */ int32_t lokid; /* unique locking id */ #endif #if( ISLKINFO == 1 ) char *lockinfo; /* lock information block */ #endif #if( ISTHREADED ) int gotmtseek; int gotmtread; int gotmtlock; int gotmtwrite; int gotmtmast; #endif #endif /* ISINTERNAL || ISDANGEROUS */ }; /* custom details ------------------------------------------------ */ #if( ISCUSTOM == 1 ) # include <iscustom.h> #endif /* entry function prototypes ------------------------------------- */ #if( ISDECLARE ) # define ISD3(s) s #else # define ISD3(s) () #endif #if( ISDATAVOID ) # define ISDD void #else # define ISDD char #endif #if( ISCONSTCHAR ) # define ISCC const char #else # define ISCC char #endif #if( ISDYNAMIC == 0 || ISDYNAMIC == 3 || ISDYNAMIC == 4 ) # if( defined ISINTERNAL ) # define ISD1 # else # define ISD1 extern # endif # define ISD2 #endif #if( ISDYNAMIC == 1 ) # if( defined ISINTERNAL ) # define ISD1 # define ISD2 __far __pascal __export # else # define ISD1 extern # define ISD2 __far __pascal # endif #endif #if( ISDYNAMIC == 2 ) # if( defined ISINTERNAL ) # define ISD1 __declspec( dllexport ) # else # define ISD1 __declspec( dllimport ) # endif # define ISD2 #endif #ifdef __cplusplus extern "C" { #endif #if( ! defined ISINTERNAL ) # if( ISDYNAMIC < 3 ) # ifdef ISEXPIRE ISD1 ISCC * ISD2 isevaluation; # endif ISD1 ISCC * ISD2 isversnumber; ISD1 ISCC * ISD2 isverstring; ISD1 ISCC * ISD2 iscopyright; ISD1 int ISD2 is_nerr; ISD1 ISCC * ISD2 is_errlist[43]; ISD1 ISCC * ISD2 isCheckMsg[16]; # endif #endif ISD1 int ISD2 isLock ISD3((IsFile *isam)); ISD1 int ISD2 isUnLock ISD3((IsFile *isam)); ISD1 int ISD2 isRelease ISD3((IsFile *isam)); ISD1 int ISD2 isRelRec ISD3((IsFile *isam, uint32_t recnum)); ISD1 int ISD2 isRelCurr ISD3((IsFile *isam)); ISD1 int ISD2 isThreaded ISD3((void)); ISD1 int ISD2 isThreadedDone ISD3((void)); ISD1 int ISD2 isAdmDtoI ISD3((IsFile *isam)); ISD1 IsFile * ISD2 isAdmItoD ISD3((int id)); ISD1 int ISD2 isCleanUp ISD3((void)); ISD1 int ISD2 isRemoteFree ISD3((void)); ISD1 IsFile * ISD2 isAdmTxnLast ISD3((void)); ISD1 IsFile * ISD2 isBuild ISD3((ISCC *name, int dlen, int mlen, IsKdsc *kdsc, int mode)); ISD1 int ISD2 isPrecious ISD3((IsFile *isam, int flag)); ISD1 int ISD2 isAddIndex ISD3((IsFile *isam, IsKdsc *kdsc)); ISD1 int ISD2 isUserInfo ISD3((IsFile *isam, int mode, char *pad)); ISD1 int ISD2 isDelete ISD3((IsFile *isam, ISDD *pad)); ISD1 int ISD2 isDelCurr ISD3((IsFile *isam)); ISD1 int ISD2 isDelRec ISD3((IsFile *isam, uint32_t recnum)); ISD1 int ISD2 isErase ISD3((ISCC *name)); ISD1 int ISD2 isRename ISD3((ISCC *oname, ISCC *nname)); ISD1 int ISD2 isDelIndex ISD3((IsFile *isam, IsKdsc *kdsc)); ISD1 int ISD2 isIndexInfo ISD3((IsFile *isam, IsKdsc *kdsc, int idx)); ISD1 int ISD2 isIsamInfo ISD3((IsFile *isam, struct dictinfo *dict)); ISD1 int ISD2 isErrno ISD3((IsFile *isam)); ISD1 int ISD2 isErrio ISD3((IsFile *isam)); ISD1 int ISD2 isCount ISD3((IsFile *isam)); ISD1 int ISD2 isRecnum ISD3((IsFile *isam)); ISD1 int ISD2 isReclen ISD3((IsFile *isam)); ISD1 int ISD2 isSetrec ISD3((IsFile *isam, uint32_t recnum)); ISD1 int ISD2 isSetlen ISD3((IsFile *isam, short reclen)); ISD1 IsFile * ISD2 isOpen ISD3((ISCC *name, int mode)); ISD1 int ISD2 isClose ISD3((IsFile *isam)); ISD1 int ISD2 isLockCheck ISD3((IsFile *isam, int flag)); ISD1 int ISD2 isSetMode ISD3((IsFile *isam, int mode)); ISD1 IsFile * ISD2 isCluster ISD3((IsFile *isam, IsKdsc *kdsc)); ISD1 IsFile * ISD2 isClone ISD3((IsFile *isam, ISCC *name )); ISD1 int ISD2 isCopy ISD3((IsFile *dest, IsFile *source, IsKdsc *kdsc)); ISD1 int ISD2 isRead ISD3((IsFile *isam, ISDD *pad, int mode)); ISD1 int ISD2 isStart ISD3((IsFile *isam, IsKdsc *key, int len, ISDD *pad, int mode)); ISD1 int ISD2 isIndex ISD3((IsFile *isam, int idx)); ISD1 int ISD2 isGoto ISD3((IsFile *isam, uint32_t recnum)); ISD1 int ISD2 isPush ISD3((IsFile *isam, int *idx, uint32_t *rec)); ISD1 int ISD2 isPop ISD3((IsFile *isam, int idx, uint32_t rec)); ISD1 int ISD2 isData ISD3((IsFile *isam, ISDD *pad, uint32_t recnum)); ISD1 int ISD2 isLdSchema ISD3((IsFile *isam, ISCC *path)); ISD1 int ISD2 isDpSchema ISD3((IsFile *isam)); ISD1 int ISD2 isStSchema ISD3((IsFile *isam, ISCC *loadfile)); ISD1 int ISD2 isRmSchema ISD3((IsFile *isam)); ISD1 int ISD2 isSetUnique ISD3((IsFile *isam, uint32_t value)); ISD1 int ISD2 isUniqueId ISD3((IsFile *isam, uint32_t *dest)); ISD1 int ISD2 isGetLastRec ISD3((IsFile *isam, uint32_t *last)); ISD1 int ISD2 isSetLastRec ISD3((IsFile *isam, uint32_t last)); ISD1 int ISD2 isLastRec ISD3((IsFile *isam, uint32_t *last)); ISD1 int ISD2 isRewrite ISD3((IsFile *isam, ISDD *newpad)); ISD1 int ISD2 isRewCurr ISD3((IsFile *isam, ISDD *newpad)); ISD1 int ISD2 isRewRec ISD3((IsFile *isam, uint32_t recnum, ISDD *newpad)); ISD1 int ISD2 isRewNxt ISD3((IsFile *isam, ISDD *newpad)); ISD1 int ISD2 isWrite ISD3((IsFile *isam, ISDD *pad)); ISD1 int ISD2 isWrLock ISD3((IsFile *isam, ISDD *pad)); ISD1 int ISD2 isWrCurr ISD3((IsFile *isam, ISDD *pad)); ISD1 int ISD2 isAudit ISD3((IsFile *isam, char *pad, int mode)); ISD1 int ISD2 isTxnInit ISD3((short ( *call )(void) )); ISD1 int ISD2 isLogOpen ISD3((ISCC *name)); ISD1 int ISD2 isLogClose ISD3((void)); ISD1 int ISD2 isBegin ISD3((void)); ISD1 int ISD2 isCommit ISD3((void)); ISD1 int ISD2 isRollBack ISD3((void)); ISD1 int ISD2 isRecover ISD3((void)); ISD1 int ISD2 isSuspLog ISD3((void)); ISD1 int ISD2 isResumLog ISD3((void)); ISD1 int ISD2 isTxnId ISD3((int value)); ISD1 uint32_t ISD2 isFreeCount ISD3((IsFile *isam, int which, int (*call )(char *node ))); ISD1 int ISD2 isAmSane ISD3((void)); ISD1 int ISD2 isCheckData ISD3((IsFile *isam)); ISD1 int ISD2 isCheckIndex ISD3((IsFile *isam, int idx)); ISD1 int ISD2 isRebuildFree ISD3((IsFile *isam, int which)); ISD1 int ISD2 isRebuildIdx ISD3((IsFile *isam, int idx)); #if( ISVARIABLE ) ISD1 int ISD2 isCheckVarlen ISD3((IsFile *isam, struct IsVarStat *stats)); #endif ISD1 void ISD2 isFatal ISD3((void(*call)(char *))); ISD1 int ISD2 isStartUp ISD3((void)); ISD1 ISCC * ISD2 isSeeKey ISD3((int isfd)); ISD1 int64_t ISD2 ldHint ISD3((char *pad, int len)); ISD1 int ISD2 stHint ISD3((char *pad, int len, int64_t val)); ISD1 int32_t ISD2 ldMint ISD3((char *pad, int len)); ISD1 int ISD2 stMint ISD3((char *pad, int len, int32_t val)); ISD1 int ISD2 ldInt ISD3((char *pad)); ISD1 int ISD2 stInt ISD3((int value, char *pad)); ISD1 int32_t ISD2 ldLong ISD3((char *pad)); ISD1 int ISD2 stLong ISD3((int32_t value, char *pad)); ISD1 int ISD2 stChar ISD3((char *str, char *pad, int len)); ISD1 int ISD2 ldChar ISD3((char *pad, int len, char *str)); ISD1 float ISD2 ldFloat ISD3((char *pad)); ISD1 int ISD2 stFloat ISD3((float value, char *pad)); ISD1 double ISD2 ldDbl ISD3((char *pad)); ISD1 int ISD2 stDbl ISD3((double value, char *pad)); ISD1 int ISD2 stFltNull ISD3((float value, char *pad, short null)); ISD1 float ISD2 ldFltNull ISD3((char *pad, short *null)); ISD1 int ISD2 stDblNull ISD3((double value, char *pad, short null)); ISD1 double ISD2 ldDblNull ISD3((char *pad, short *null)); #if 0 /* deprecated, please contact Byte Designs if needed */ ISD1 int ISD2 stDate ISD3((Date *dest, char *src)); ISD1 char * ISD2 ldDate ISD3((char *dest, Date *src)); ISD1 int ISD2 stTime ISD3((Time *dest, char *src)); ISD1 char * ISD2 ldTime ISD3((char *dest, Time *src)); #endif /* base/isdebug.c */ ISD1 const char * ISD2 isWhere ISD3(( int work )); ISD1 const char * ISD2 isWhat ISD3(( int which )); ISD1 void ISD2 isDebug ISD3(( IsFile *isam, int level, ISCC *fmt, ... )); ISD1 void ISD2 isvDebug ISD3(( IsFile *isam, int level, ISCC *fmt, va_list ap )); ISD1 void ISD2 isDebugAsc ISD3(( IsFile *isam, int level, ISCC *tag, ISCC *dat, int len )); ISD1 void ISD2 isDebugHex ISD3(( IsFile *isam, int level, ISCC *tag, ISCC *dat, int len )); #ifdef __cplusplus }; #endif #if( defined ISINTERNAL ) #else # undef ISD1 # undef ISD2 # undef ISD3 # undef ISDD #endif /* end header ---------------------------------------------------- */