Can somebody please tell why this small sexy program
crushes when it calls DmResetRecordStates?

Without DmResetRecordStates, it works fine.

===




#include <Pilot.h>

#include "Callback.h"

#include "std.h"
#include "db.h"

#define CARD 0
#define NAME "D1-add1"
#define CREATOR ((ULong)'add1')
#define TYPE ((ULong)'Data')
#define RES false
#define MODE dmModeReadWrite

DmOpenRef db = NULL;
UInt dbaseIndex;
int dbaseErr=0;

void DbaseOpen(void) {
    db = DmOpenDatabaseByTypeCreator(TYPE, CREATOR, MODE);
}

Err DbaseCreate(void) {
    return DmCreateDatabase(CARD, NAME, CREATOR, TYPE, RES);
}

void DbaseClose(void) {
    if (dbaseErr) return;
    dbaseErr=DmResetRecordStates(db);  // Here it crushes
    if(dbaseErr) return;
    DmCloseDatabase(db);
}

void DbaseRead(VoidPtr buf, ULong size) {
    VoidHand recordH;
    VoidPtr recordP;
    if (dbaseErr) return;
    recordH = DmQueryRecord(db, dbaseIndex);
    recordP = MemHandleLock(recordH);
    MemMove(buf, recordP, size);
    MemHandleUnlock(recordH);
}

void DbaseWrite(VoidPtr buf, ULong size, int fNew) {
    VoidHand recordH;
    VoidPtr recordP;
    if (dbaseErr) return;
    if (fNew)
        recordH = DmNewRecord(db, &dbaseIndex, size);
    else
        recordH = DmGetRecord(db, dbaseIndex);
    recordP = MemHandleLock(recordH);
    DmWrite(recordP, 0, buf, size);
    MemHandleUnlock(recordH);
    DmReleaseRecord(db, dbaseIndex, true);
}

void DbaseStart(VoidPtr buf, ULong size) {
    DbaseOpen();
    if (!db) {
        dbaseErr = DbaseCreate();
        if (dbaseErr) return;
        DbaseOpen();
        dbaseErr = !db;
        if (dbaseErr) return;
        DbaseWrite(buf, size, 1);
    }
}

void DbaseFinish(void) {
    DbaseClose();
}

DWord PilotMain(Word cmd, Ptr bla1, Word bla2) {
    int buf[1];
    if (cmd) return 0;
    buf[0]=0;
    DbaseStart(buf,sizeof(buf));
    DbaseRead(buf,sizeof(buf));
    DbaseWrite(buf,sizeof(buf),0);
    DbaseFinish();
    return 0;
}



__________________________________________________
Do You Yahoo!?
Bid and sell for free at http://auctions.yahoo.com

Reply via email to