Los bericht bekijken
  #1  
Oud 24 juni 2003, 13:22
Ploert
Guest
 
Berichten: n/a
Probleem palmprogramma

Wie kan mij helpen met een probleem bij het programmeren op de palmtop? Ik moet voor mijn afstuderen een applicatie schrijven op de palmtop waar ik een kilometer registratie programma moet maken.

Hierbij moet ik gebruik maken van records (het programma is in C). Als ik de informatie echter opsla en weer uitlees zijn het allerlei rare tekens geworden ipv wat ik opgeslagen had.

WIE KAN MIJ HELPEN!!!

Het programma moet geschreven worden in het bijgeleverde Databook. Hieronder enkele stukken code die ik toegevoegd heb, misschien is hier wat mee te doen.

Struct Kilometer (zelf toegevoegd):

typedef struct{
TimeType vertrekTijd;
TimeType aankomstTijd;
Char* vertrekKm;
Char* aankomstKm;
}KilometerType;

Struct RecordType (De DB opbouw, met toegevoegde KilometerType)

typedef struct {
ApptDateTimeType * when;
AlarmInfoType * alarm;
RepeatInfoType * repeat;
ExceptionsListType * exceptions;
Char * description;
Char * note;
KilometerType * kilometer;
} ApptDBRecordType;

Het record wordt voordat het opgeslagen wordt in gepakt en uiteraard weer uitgepackt als het gebruikt gaat worden:

Inpakken:

static void ApptPack(ApptDBRecordPtr s, ApptPackedDBRecordPtr d)
{
ApptDBRecordFlags flags;
UInt16 size;
UInt32 offset = 0;


*(UInt8 *)&flags = 0; // clear the flags


// copy the ApptDateTimeType
//c = (char *) d;
offset = 0;
DmWrite(d, offset, s->when, sizeof(ApptDateTimeType));
offset += sizeof (ApptDateTimeType) + sizeof (ApptDBRecordFlags);


if (s->alarm != NULL)
{
DmWrite(d, offset, s->alarm, sizeof(AlarmInfoType));
offset += sizeof (AlarmInfoType);
flags.alarm = 1;
}

//----------------------------------------------------------------------------------------------------------------------------------------
// INPAKKEN KILOMETER
if (s->kilometer != NULL){

FrmCustomAlert(KilometerAlert_Scherm, "Dateday", "DetailsInit", "Bestaat");
DmWrite(d, offset, s->kilometer, sizeof(KilometerType));
FrmCustomAlert(KilometerAlert_Scherm, "Dateday", "DetailsInit", "Bestaat");
offset += sizeof(KilometerType);
flags.kilometer = 1;
}
//----------------------------------------------------------------------------------------------------------------------------------------

if (s->repeat != NULL)
{
DmWrite(d, offset, s->repeat, sizeof(RepeatInfoType));
offset += sizeof (RepeatInfoType);
flags.repeat = 1;
}


if (s->exceptions != NULL)
{
size = sizeof (UInt16) +
(s->exceptions->numExceptions * sizeof (DateType));
DmWrite(d, offset, s->exceptions, size);
offset += size;
flags.exceptions = 1;
}


if (s->description != NULL)
{
size = StrLen(s->description) + 1;
DmWrite(d, offset, s->description, size);
offset += size;
flags.description = 1;
}

if (s->note != NULL)
{
size = StrLen(s->note) + 1;
DmWrite(d, offset, s->note, size);
offset += size;
flags.note = 1;
}



DmWrite(d, sizeof(ApptDateTimeType), &flags, sizeof(flags));
}


Uitpakken:

static void ApptUnpack(ApptPackedDBRecordPtr src, ApptDBRecordPtr dest)
{
ApptDBRecordFlags flags;
char *p;


flags = src->flags;
p = &src->firstField;

dest->when = (ApptDateTimeType *) src;

if (flags.alarm)
{
dest->alarm = (AlarmInfoType *) p;
p += sizeof (AlarmInfoType);
}
else
dest->alarm = NULL;

//----------------------------------------------------------------------------------------------------------------------------------------
// UITPAKKEN KILOMETER
if( flags.kilometer ){
dest->kilometer = (KilometerType *) p;
p += sizeof (KilometerType);
}else
dest->kilometer = NULL;
//----------------------------------------------------------------------------------------------------------------------------------------

if (flags.repeat)
{
dest->repeat = (RepeatInfoType *) p;
p += sizeof (RepeatInfoType);
}
else
dest->repeat = NULL;



if (flags.exceptions)
{
dest->exceptions = (ExceptionsListType *) p;
p += sizeof (UInt16) +
(((ExceptionsListType *) p)->numExceptions * sizeof (DateType));
}
else
dest->exceptions = NULL;


if (flags.description)
{
dest->description = p;
p += StrLen(p) + 1;
}
else
dest->description = NULL;


if (flags.note)
{
dest->note = p;
}
else
dest->note = NULL;

}

Als het niet genoeg is laat het maar weten, dan gooi ik er nog meer informatie bij.
BVD
Met citaat reageren