Listing 1: Variant record struct and switch statement used to populate it
typedef struct {
char Name[21];
short Format;
union {
struct {
float Amount;
char Date[9];
} sFormat1;
struct {
char Date[9];
char Desc[31];
} sFormat2;
struct {
float Amount;
char Date[9];
char Desc[30];
} sFormat3;
}
} sVariantRecord;
// switch statement used to process
// above record
switch (recordFormat) {
case FORMAT1:
switch (prefix) {
case '$':
record.sFormat1.Amount =
atof(p);
break;
case 'D':
strcpy(record.sFormat1.Date, p);
break;
}
break;
case FORMAT2:
switch (prefix) {
case 'D':
strcpy(record.sFormat2.Date, p);
break;
case 'T':
strcpy(record.sFormat2.Desc, p);
break;
}
break;
case FORMAT3:
switch (prefix) {
case '$':
record.sFormat3.Amount =
atof(p);
break;
case 'D':
strcpy(record.sFormat3.Date, p);
break;
case 'T':
strcpy(record.sFormat3.Desc, p);
break;
}
break;
}
// End of File