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