//  This may look like C code, but it is really -*- C++ -*-

//  ------------------------------------------------------------------
//  The Goldware Library
//  Copyright (C) 1990-1999 Odinn Sorensen
//  ------------------------------------------------------------------
//  This library is free software; you can redistribute it and/or
//  modify it under the terms of the GNU Library General Public
//  License as published by the Free Software Foundation; either
//  version 2 of the License, or (at your option) any later version.
//
//  This library is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//  Library General Public License for more details.
//
//  You should have received a copy of the GNU Library General Public
//  License along with this program; if not, write to the Free
//  Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
//  MA 02111-1307, USA
//  ------------------------------------------------------------------
//  $Id$
//  ------------------------------------------------------------------
//  RemoteAccess 2.x derived userfile class.
//  ------------------------------------------------------------------

#ifndef __gusrra2_h
#define __gusrra2_h


//  ------------------------------------------------------------------

#include <gusrbase.h>


//  ------------------------------------------------------------------

#if defined(GOLD_CANPACK)
    #pragma pack(1)
#endif


//  ------------------------------------------------------------------
//  RA2 USERS.BBS record structure
//  sizeof = 1016

struct RA2Users
{

    char  name[36];
    char  location[26];
    char  organisation[51];
    char  address1[51];
    char  address2[51];
    char  address3[51];
    char  handle[36];
    char  comment[81];
    int32_t  passwordcrc;
    char  dataphone[16];
    char  voicephone[16];
    char  lasttime[6];
    char  lastdate[9];
    byte  attribute;
    byte  attribute2;
    byte  flagsx[4];
    int32_t  credit;
    int32_t  pending;
    word  msgsposted;
    word  security;
    int32_t  lastread;
    int32_t  nocalls;
    int32_t  uploads;
    int32_t  downloads;
    int32_t  uploadsk;
    int32_t  downloadsk;
    int32_t  todayk;
    short  elapsed;
    word  screenlength;
    byte  lastpwdchange;
    word  group;
    word  combinedinfo[200];
    char  firstdate[9];
    char  birthdate[9];
    char  subdate[9];
    byte  screenwidth;
    byte  language;
    byte  dateformat;
    char  forwardto[36];
    word  msgarea;
    word  filearea;
    char  defaultprotocol;
    word  filegroup;
    byte  lastdobcheck;
    byte  sex;
    int32_t  xirecord;
    word  msggroup;
    byte  freespace[48];
};


//  ------------------------------------------------------------------
//  RA2 userfile attributes

#define RA2_USERDELETED 0x0001


//  ------------------------------------------------------------------
//  RA2 USERSIDX.BBS record structure

struct RA2UsersIdx
{

    dword  namecrc32;
    dword  handlecrc32;
};


//  ------------------------------------------------------------------
//  RA2 USERSXI.BBS record structure

struct RA2UsersXi
{

    byte  freespace[200];
};


//  ------------------------------------------------------------------
//  RemoteAccess 2.x userfile class

class RA2User : public GUser
{
public:

    gfile* xifh;
    gfile* idxfh;

    RA2Users*    record;
    RA2UsersXi*  xirec;
    RA2UsersIdx* idxrec;

    RA2User();
    ~RA2User();

    int  isvalid();
    int  read();

    void     inctimesposted(int __times);
    uint32_t lastread();
    void     lastread(uint32_t __lastread);
    void     recinit(const char* __name);

    void  add(const char* __name);
};


//  ------------------------------------------------------------------

#if defined(GOLD_CANPACK)
    #pragma pack()
#endif


//  ------------------------------------------------------------------

#endif

//  ------------------------------------------------------------------
