cdbfapi (C) for Windows

extern "C" { 
 
    cdbfapiPlus* cdbfapiCreate();             
    void cdbfapiRelease(cdbfapiPlus* handle); 

    void  initLibrary(cdbfapiPlus* handle, int magicNumber, char *email);

    BOOL  openDBFfile(cdbfapiPlus* handle, char *filename);
    void  closeDBFfile(cdbfapiPlus* handle);

    int   recCount(cdbfapiPlus* handle);
    int   fieldCount(cdbfapiPlus* handle);

    BOOL  getRecord(cdbfapiPlus* handle, int recno);
    BOOL  readRecord(cdbfapiPlus* handle, int recno);
    BOOL  writeRecord(cdbfapiPlus* handle, int recno);

    BOOL  readField(cdbfapiPlus* handle, int recno, int fieldno);
    BOOL  writeField(cdbfapiPlus* handle, int recno, int fieldno);

    int   indexOfField(cdbfapiPlus* handle, char* fieldname);

    char*   getString(cdbfapiPlus* handle, int fieldno);
    double  getValue(cdbfapiPlus* handle, int fieldno);
    struct  tm getDateTime(cdbfapiPlus* handle, int fieldno);
    __int64 getTicks(cdbfapiPlus* handle, int fieldno);

    int   getMemoBuf(cdbfapiPlus* handle, int fieldno, char **output);

    BOOL  isMemoField(cdbfapiPlus* handle, int fieldno);
    BOOL  isNumericField(cdbfapiPlus* handle, int fieldno);
    BOOL  isDateField(cdbfapiPlus* handle, int fieldno);

    BOOL  isCurrentDeleted(cdbfapiPlus* handle);
    BOOL  isDeleted(cdbfapiPlus* handle, int fieldno);

    void  clearRecord(cdbfapiPlus* handle);
    void  clearField(cdbfapiPlus* handle, int fieldno);

    void  setFieldString(cdbfapiPlus* handle, int fieldno, char* string);
    void  setFieldDouble(cdbfapiPlus* handle, int fieldno, double value);
    void  setField(cdbfapiPlus* handle, int fieldno, char* string, double value);   

    void  setMemoBuf(cdbfapiPlus* handle, int fieldno, char *input, int len);

    BOOL  markAsDeleted(cdbfapiPlus* handle, int fieldno);
    BOOL  recallDeleted(cdbfapiPlus* handle, int fieldno);

    BOOL  deleteRecord(cdbfapiPlus* handle, int recno);
    BOOL  appendRecord(cdbfapiPlus* handle, BOOL blankrecord);
    BOOL  insertRecord(cdbfapiPlus* handle, int recno, BOOL blankrecord);

    void  setOrder(cdbfapiPlus* handle, char* fieldlist);
    void  setOrderA(cdbfapiPlus* handle, char* fields[]);
    void  unsetOrder(cdbfapiPlus* handle);
    void  descendingMode(cdbfapiPlus* handle, BOOL descending);

    void  setFilter(cdbfapiPlus* handle, char* expression);
    void  unsetFilter(cdbfapiPlus* handle);
    void  caseSensitiveMode(cdbfapiPlus* handle, BOOL sensitive);

    BOOL  pack(cdbfapiPlus* handle);
    BOOL  truncate(cdbfapiPlus* handle, int recno);
    BOOL  zap(cdbfapiPlus* handle);

    int   fileType(cdbfapiPlus* handle);
    char* filetypeAsText(cdbfapiPlus* handle);

    int   recordLength(cdbfapiPlus* handle);
    char* lastUpdated(cdbfapiPlus* handle);
    int   headerSize(cdbfapiPlus* handle);

    char* filename(cdbfapiPlus* handle);
    char* filenameMemo(cdbfapiPlus* handle);
    char* driverName(cdbfapiPlus* handle);

    void  resetLastRecord(cdbfapiPlus* handle);

    char* fieldName(cdbfapiPlus* handle, int fieldno);
    int   fieldData(cdbfapiPlus* handle, int fieldno, char **output);
    char  fieldType(cdbfapiPlus* handle, int fieldno);
    int   fieldLength(cdbfapiPlus* handle, int fieldno);
    int   fieldDecimal(cdbfapiPlus* handle, int fieldno);

    char* typeAsText(char c);

    void  setEncoding(cdbfapiPlus* handle, int e);
    void  setDateFormat(cdbfapiPlus* handle, char* format);
    void  setDateDelimiter(cdbfapiPlus* handle, char delimiter);

    void  setReadOnly(cdbfapiPlus* handle, BOOL value);
    BOOL  isReadOnly(cdbfapiPlus* handle);

    BOOL  prepareNewTable(cdbfapiPlus* handle, int fileType);
    BOOL  prepareNewTableX(cdbfapiPlus* handle, int fileType, int memoSize, char *driver);

    void  addField(cdbfapiPlus* handle, char* fieldname, char fieldType, int length);
    void  addFieldX(cdbfapiPlus* handle, char* fieldname, char fieldType, int length, int decimal);

    BOOL  createTable(cdbfapiPlus* handle, char* filename);
    BOOL  createAndOpenTable(cdbfapiPlus* handle, char* filename);

    void  setByte(cdbfapiPlus* handle, int offset, char b);
    char  getByte(cdbfapiPlus* handle, int offset);

}