// This may look like C code, but it is really -*- C++ -*- // ------------------------------------------------------------------ // The Goldware Library // Copyright (C) 1990-1999 Odinn Sorensen // Copyright (C) 1999-2000 Alexander S. Aganichev // ------------------------------------------------------------------ // 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$ // ------------------------------------------------------------------ // Ezycom msgbase. // ------------------------------------------------------------------ // ------------------------------------------------------------------ // Only include once! #ifndef __GMEZYC_H #define __GMEZYC_H // ------------------------------------------------------------------ #include #include #if defined(GOLD_CANPACK) #pragma pack(1) #endif // ------------------------------------------------------------------ // Ezycom constants #define EZYC_MAXNAME 36 #define EZYC_MAXSUBJ 73 #define EZYC_MAXMESS102 1024 #define EZYC_MAXMESS110 1536 #define EZYC_USERSBUF 100 #define EZYC_USERDELETED 0x0001 // ------------------------------------------------------------------ const byte EZYC_MSGATTR_DELETED = 0x01; const byte EZYC_MSGATTR_NETPEND = 0x02; const byte EZYC_MSGATTR_RESERVED = 0x04; const byte EZYC_MSGATTR_PRIVATE = 0x08; const byte EZYC_MSGATTR_RECEIVED = 0x10; const byte EZYC_MSGATTR_ECHOPEND = 0x20; const byte EZYC_MSGATTR_LOCAL = 0x40; const byte EZYC_MSGATTR_NOKILL = 0x80; const byte EZYC_NETATTR_KILLSENT = 0x01; const byte EZYC_NETATTR_SENT = 0x02; const byte EZYC_NETATTR_ATTACH = 0x04; const byte EZYC_NETATTR_CRASH = 0x08; const byte EZYC_NETATTR_FREQ = 0x10; const byte EZYC_NETATTR_RREQ = 0x20; const byte EZYC_NETATTR_AREQ = 0x40; const byte EZYC_NETATTR_RREC = 0x80; const byte EZYC_EXTATTR_RSVD1 = 0x01; const byte EZYC_EXTATTR_RSVD2 = 0x02; const byte EZYC_EXTATTR_RSVD3 = 0x04; const byte EZYC_EXTATTR_RSVD4 = 0x08; const byte EZYC_EXTATTR_RSVD5 = 0x10; const byte EZYC_EXTATTR_RSVD6 = 0x20; const byte EZYC_EXTATTR_RSVD7 = 0x40; const byte EZYC_EXTATTR_SEEN = 0x80; // ------------------------------------------------------------------ // Ezycom message header struct EzycHdr { word replyto; word reply1st; ulong startposition; ulong messagelength; Addr destnet; Addr orignet; word cost; // redefine to replynext? byte msgattr; byte netattr; byte extattr; FTime posttimedate; FTime recvtimedate; char whoto[EZYC_MAXNAME]; char whofrom[EZYC_MAXNAME]; char subject[EZYC_MAXSUBJ]; }; // ------------------------------------------------------------------ // Ezycom LASTCOMB.BBS record structure struct EzycLast { word combinedinfo; word lastreadinfo[16]; }; // ------------------------------------------------------------------ // Ezycom MSGFAST.BBS record structure struct EzycFast { dword whoto; // 32 bit CRC on WhoTo in MSGHxxx.BBS word msgboard; word msgnumber; }; // ------------------------------------------------------------------ // Ezycom MSGDLTD.BBS record struct EzycDeleted { word msgboard; word msgnumber; }; // ------------------------------------------------------------------ #if defined(GOLD_CANPACK) #pragma pack() #endif // ------------------------------------------------------------------ struct EzycData { int fhhdr; int fhtxt; int fhnow; int omode; int smode; int timesposted; int islocked; Path ezyfile; }; // ------------------------------------------------------------------ struct EzycWide { int ver; EzycomUser* user; int userno; int maxmess; const char* msgbasepath; const char* userbasepath; }; // ------------------------------------------------------------------ class EzycomArea : public gmo_area { protected: EzycWide* wide; EzycData* data; void data_open(); void data_close(); char* ret_mess_xxx(char* __path, byte __type); char* ret_mess_area(char* __path); int raw_open(); void test_raw_open(int __fileline); void raw_close(); int test_open(const char* __file, int __mode, int __share); void save_lastread(); void raw_scan(int __keep_index); int load_message(int __mode, gmsg* __msg, EzycHdr& __hdr); void save_message(int __mode, gmsg* __msg, EzycHdr& __hdr); public: EzycomArea() { wide = NULL; data = NULL; } virtual ~EzycomArea() {} virtual bool havereceivedstamp() const { return false; } virtual bool requiresoftterm() const { return true; } // ---------------------------------------------------------------- // Messagebase member functions void open(); void close(); void suspend(); void resume(); void lock(); void unlock(); void scan(); void scan_area(); void scan_area_pm(); int load_hdr(gmsg* msg); int load_msg(gmsg* msg); void save_hdr(int mode, gmsg* msg); void save_msg(int mode, gmsg* msg); void del_msg(gmsg* msg); void new_msgno(gmsg* msg); char* user_lookup(char* lookfor); int renumber(); void update_timesread(gmsg* msg); Line* make_dump_msg(Line*& lin, gmsg* msg, char* lng_head); }; // ------------------------------------------------------------------ extern EzycWide* ezycomwide; extern EzycData* ezycomdata; extern int ezycomdatano; // ------------------------------------------------------------------ #endif // ------------------------------------------------------------------