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