Metropoli BBS
VIEWER: read.c MODE: TEXT (ASCII)

#define BBSTYPE             1
#define BBSVERSION          2
#define SYSOPNAME           3
#define SYSOPHANDLE         4
#define BBSPATH             5
#define DTERATE             6
#define BPSRATE             7
#define PORTNAME            8
#define PORTHANDLE          9
#define PARITY              10
#define DATABITS            11
#define STOPBITS            12
#define LINENUMBER          13
#define USERNUMBER          14
#define NAME                15
#define HANDLE              16
#define ADDRESS             17
#define CITY                18
#define STATE               19
#define ZIPCODE             20
#define COUNTRY             21
#define HOMEPHONE           22
#define DATAPHONE           23
#define FAXPHONE            24
#define BUSPHONE            25
#define PASSWORD            26
#define PASSNUMBER          27
#define SECNUM              28
#define SECNAME             29
#define TIMESON             30
#define DATELASTON          31
#define TIMELASTON          32
#define TIMEON              33  //  not to be confused with TIMESON
#define SECSLEFT            34
#define MINSLEFT            35
#define EXPIREDATE          36
#define SCREENLENGTH        37
#define SCREENWIDTH         38
#define BIRTHDAY            39
#define CONFERENCE          40
#define PROTOCOL            41
#define UPLOADS             42
#define DOWNLOADS           43
#define DLTODAY             44
#define MAXDLTODAY          45
#define DLKTODAY            46
#define MAXDLKTODAY         47
#define ULTODAY             48
#define MAXULTODAY          49
#define ULKTODAY            50
#define MAXULKTODAY         51
#define ULBYTES             52
#define DLBYTES             53
#define ULKBYTES            54
#define DLKBYTES            55
#define EVENTTIME           56
#define LASTNEWFILESCAN     57
#define TIMECREDIT          58
#define TIMESPOSTED         59
#define COMMENT             60
#define LOCAL               61
#define LOCKING             62
#define DISPLAY             63
#define PRINTER             64
#define SYSOPPAGE           65
#define EXPERT              66
#define NOVICE              67
#define ARQCONNECT          68
#define ANSICOLOR           69
#define ANSIMONO            70
#define HIGHASCII           71
#define MSGAREA             72
#define FILEAREA            73
#define FOSSIL              74
#define BBSNAME             75
#define SYSOP               76
#define BANKTIME            77

typedef struct _KEYWORD
{
    char *Name;
    int   Number;
} KEYWORD, *PKEYWORD;

KEYWORD KeyWord[] =
{
    "SessionInfoKeywords",  0,
    "BBSTYPE",              BBSTYPE,
    "BBSVERSION",           BBSVERSION,
    "SYSOPNAME",            SYSOPNAME,
    "SYSOPHANDLE",          SYSOPHANDLE,
    "BBSPATH",              BBSPATH,
    "DTERATE",              DTERATE,
    "BPSRATE",              BPSRATE,
    "PORTNAME",             PORTNAME,
    "PORTHANDLE",           PORTHANDLE,
    "PARITY",               PARITY,
    "DATABITS",             DATABITS,
    "STOPBITS",             STOPBITS,
    "LINENUMBER",           LINENUMBER,
    "USERNUMBER",           USERNUMBER,
    "NAME",                 NAME,
    "HANDLE",               HANDLE,
    "ADDRESS",              ADDRESS,
    "CITY",                 CITY,
    "STATE",                STATE,
    "ZIPCODE",              ZIPCODE,
    "COUNTRY",              COUNTRY,
    "HOMEPHONE",            HOMEPHONE,
    "DATAPHONE",            DATAPHONE,
    "FAXPHONE",             FAXPHONE,
    "BUSPHONE",             BUSPHONE,
    "PASSWORD",             PASSWORD,
    "PASSNUMBER",           PASSNUMBER,
    "SECNUM",               SECNUM,
    "SECNAME",              SECNAME,
    "TIMESON",              TIMESON,
    "DATELASTON",           DATELASTON,
    "TIMELASTON",           TIMELASTON,
    "TIMEON",               TIMEON,
    "SECSLEFT",             SECSLEFT,
    "MINSLEFT",             MINSLEFT,
    "EXPIREDATE",           EXPIREDATE,
    "SCREENLENGTH",         SCREENLENGTH,
    "SCREENWIDTH",          SCREENWIDTH,
    "BIRTHDAY",             BIRTHDAY,
    "CONFERENCE",           CONFERENCE,
    "PROTOCOL",             PROTOCOL,
    "UPLOADS",              UPLOADS,
    "DOWNLOADS",            DOWNLOADS,
    "DLTODAY",              DLTODAY,
    "MAXDLTODAY",           MAXDLTODAY,
    "DLKTODAY",             DLKTODAY,
    "MAXDLKTODAY",          MAXDLKTODAY,
    "ULTODAY",              ULTODAY,
    "MAXULTODAY",           MAXULTODAY,
    "ULKTODAY",             ULKTODAY,
    "MAXULKTODAY",          MAXULKTODAY,
    "ULBYTES",              ULBYTES,
    "DLBYTES",              DLBYTES,
    "ULKBYTES",             ULKBYTES,
    "DLKBYTES",             DLKBYTES,
    "EVENTTIME",            EVENTTIME,
    "LASTNEWFILESCAN",      LASTNEWFILESCAN,
    "TIMECREDIT",           TIMECREDIT,
    "TIMESPOSTED",          TIMESPOSTED,
    "COMMENT",              COMMENT,
    "LOCAL",                LOCAL,
    "LOCKING",              LOCKING,
    "DISPLAY",              DISPLAY,
    "PRINTER",              PRINTER,
    "SYSOPPAGE",            SYSOPPAGE,
    "EXPERT",               EXPERT,
    "NOVICE",               NOVICE,
    "ARQCONNECT",           ARQCONNECT,
    "ANSICOLOR",            ANSICOLOR,
    "ANSIMONO",             ANSIMONO,
    "HIGHASCII",            HIGHASCII,
    "MSGAREA",              MSGAREA,
    "FILEAREA",             FILEAREA,
    "FOSSIL",               FOSSIL,
    "BBSNAME",              BBSNAME,
    "SYSOP",                SYSOP,
    "BANKTIME",             BANKTIME,
    NULL,                   0
};

#define NUMKEYWORDS  (sizeof(KeyWord)/sizeof(KEYWORD))

char *SkipWhiteSpace(char *String);
char *SkipNonWhiteSpace(char *String);


// goes thru keyword table looking for the keyword 'Lookfor'
// returns number of keyword, or 0 if keyword is not found.

int LookupKeyword(char *Lookfor)
{
    int KeywordIndex = 1;

    while (KeyWord[KeywordIndex].Name)
    {
        if (! stricmp(KeyWord[KeywordIndex].Name, Lookfor))
            return (KeyWord[KeywordIndex].Number);

        KeywordIndex++;
    }

    return (0);
}


// given the filename 'SessionInfoName'
// this function reads in the file and
// assigns variables of your choice with
// the info.   Since this is an example
//  the actual variables are not shown.
int ReadSessionInfo(char *SessionInfoName)
{
    FILE *SessionInfoHandle;
    char  Input[301];
    int   Key;
    char *Keyword;
    char *Data;
    char *NewLine;

    SessionInfoHandle = _fsopen(SessionInfoName, "rt", SH_DENYNO);

    if (SessionInfoHandle == NULL)
    {
        printf("SessionInfo file '%s' not found!\n", SessionInfoName);

        return (-1);
    }

    while (! eof(SessionInfoHandle))
    {
        if (! fgets(Input, 301, SessionInfoHandle))
            break;

        if (*Input == ';')
        {
            // comment line
            continue;
        }

        NewLine = strchr(Input, '\n');

        if (NewLine)
            *NewLine = '\0';

        /**************************************************

        on a return from a door, a BBS program
        will want to check for a '!' which neans
        the data has changed. It may also skip any data
        that has not changed

        (this code probably not needed for a door program)

        if (*Input == '!')
        {
            // keyword starts on second char
            Keyword = Input + 1;
        }
        else
        {
            // this line has not changed
            continue;
        }

        ***************************************************/

        Keyword = Input;

        Data = SkipNonWhiteSpace(Keyword);

        if (*Data)
        {
            *Data++ = '\0';

            Data = SkipWhiteSpace(Data);

            // Data now points to data!
        }

        Key = LookupKeyword(Keyword);

        switch (Key)
        {
            case BBSTYPE:
                // assign BBS type
                break;

            case BBSVERSION:
                // assign BBS version
                break;

            case BBSNAME:
                // assign BBS name
                break;

            case SYSOPNAME:
                // assign SysOp name
                break;

                //
                //

                //
                //  ETC. you need only look for and accept the data you want.
                //

                //
                //

            case FOSSIL
                // assign FOSSIL boolean
                break;

            default:
                printf("Key '%s' not used\n", Keyword);
                break;
        }
    }

    fclose(SessionInfoHandle);

    return (0);
}

char *SkipWhiteSpace(char *String)
{
    char *p = String;

    while (*p == ' ' || *p == '\t')
        p++;

    return (p);
}

char *SkipNonWhiteSpace(char *String)
{
    char *p = String;

    while (*p && *p != ' ' && *p != '\t')
        p++;

    return (p);
}

[ RETURN TO DIRECTORY ]