Listing 4: Implements file processing


#include <stdlib.h>
#include <string.h>
#include "Globals.h"
#include "File.h"

File::File()
: m_file(0)
{
}

File::~File()
{
    if (m_file) {
        m_file->close();
        delete m_file;
    }
}

void File::Init(char* FileName)
{
    m_file = new ifstream;
    m_file->open(FileName, ios::in);
//    int num = m.size();
}

BOOL File::GetRecord(sVariantRecord& record)
{
    char prefix, lpszTokenLine[81];
    short recordFormat;
    float number;
    char* here, *p;
    short datatype;
    CKey key;

    // priming read
    m_file->getline(lpszTokenLine, 81);
    if (m_file->eof()) {
        return FALSE;
    }
    prefix = lpszTokenLine[0];
    p = &1pszTokenLine[1];

    while (prefix != '^') {
        switch (prefix) {
        case 'N':
            strcpy(record.Name, p);
            break;
        case 'F':
            recordFormat = atoi(p);
            record.Format = recordFormat;
            break;
        default:
            key.m_format = recordFormat;
            key.m_prefix = prefix;
            j = m.find(key);
            if (j != m.end()) {
                datatype =
                    (*j).second.m_datatype;
                switch (datatype) {
                case FLOAT:
                    here = (char*)&record + (*j).second.m_offset;
                    number = atof(p);
                    memcpy(here, &number, sizeof(float));
                    break;
                case STRING:
                    here = (char*)&record + (*j).second.m_offset;
                    strcpy(here, p);
                    break;
                default:
                    // some error
                    break;
                }    // switch
            }
            break;
        }    // switch
        m_file->getline(lpszTokenLine, 81);
        prefix = lpszTokenLine[0];
        p = &lpszTokenLine[1];
    }
    return TRUE;
}

//omitted: brute force variant population method.  Full source code
//is available on code disk and via ftp, see page 3 for details --mb
//End of File