// 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$ // ------------------------------------------------------------------ // WildCat! 4.0 Structures. // ------------------------------------------------------------------ // ------------------------------------------------------------------ // Only include once! #ifndef __GMWCAT_H #define __GMWCAT_H // ------------------------------------------------------------------ #include #include // ------------------------------------------------------------------ #if defined(GOLD_CANPACK) #pragma pack(1) #endif // ------------------------------------------------------------------ // WildCat! 4.0 Magic Numbers const uint32_t MagicHeaderActive = 0x001A1A1Bu; const uint32_t MagicHeaderInactive = 0x011A1A1Bu; // ------------------------------------------------------------------ // WildCat! 4.0 Message Attributes (mflags) const word mfPrivate = 0x0001; const word mfReceiveable = 0x0002; const word mfReceived = 0x0004; const word mfReceipt = 0x0008; const word mfCarboned = 0x0010; const word mfForwarded = 0x0020; const word mfEchoFlag = 0x0040; const word mfHasReplies = 0x0100; const word mfDeleted = 0x0200; const word mfTagged = 0x0400; const word mfSent = 0x0800; // ------------------------------------------------------------------ // Fido message attributes #define FIDO_PVT 0x0001 #define FIDO_CRASH 0x0002 #define FIDO_RECEIVED 0x0004 #define FIDO_SENT 0x0008 #define FIDO_ATTACH 0x0010 #define FIDO_TRANSIT 0x0020 #define FIDO_ORPHAN 0x0040 #define FIDO_KILLSENT 0x0080 #define FIDO_LOCAL 0x0100 #define FIDO_HOLD 0x0200 #define FIDO_RESERVED 0x0400 #define FIDO_FREQ 0x0800 #define FIDO_RETRECREQ 0x1000 #define FIDO_RETREC 0x2000 #define FIDO_AUDITREQ 0x4000 #define FIDO_UPDREQ 0x8000 // ------------------------------------------------------------------ // WildCat! 4.0 Message Header struct WCatHdr { uint32_t magicnumber; word msgno; char from[71]; char fromtitle[11]; int32_t fromuserid; char to[71]; char totitle[11]; int32_t touserid; char subject[71]; char network[9]; word msgdate; int32_t msgtime; word readdate; int32_t readtime; word mflags; word reference; Addr origaddr; Addr destaddr; word msgbytes; char internalattach[13]; char externalattach[13]; word prevunread; word nextunread; word fidoflags; int32_t cost; byte reserved[20]; }; // ------------------------------------------------------------------ // WildCat! 4.0 Message Index Base Record struct WCatBase { word recsize; word active; word nextmsgno; }; // ------------------------------------------------------------------ // WildCat! 4.0 Message Index Record struct WCatIdx { word msgno; int32_t offset; }; // ------------------------------------------------------------------ #if defined(GOLD_CANPACK) #pragma pack() #endif // ------------------------------------------------------------------ struct WCatData { int fhix; int fhdat; WCatBase base; WCatIdx* idx; int islocked; }; // ------------------------------------------------------------------ struct WCatWide { int userno; // WildCatUser* user; }; // ------------------------------------------------------------------ class WCatArea : public gmo_area { protected: WCatWide* wide; WCatData* data; void data_open(); void data_close(); int test_open(const char* __file); void raw_open(); void save_lastread(); void raw_scan(int __keep_index, int __scanpm=false); void save_message(int __mode, gmsg* __msg, WCatHdr& __hdr); void raw_close(); void refresh(); int load_message(int __mode, gmsg* __msg, WCatHdr& __hdr); public: WCatArea() { wide = NULL; data = NULL; } virtual ~WCatArea() {} virtual bool issoftdelete() const { return true; } virtual bool requirehardterm() 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 WCatWide* wcatwide; extern WCatData* wcatdata; extern int wcatdatano; // ------------------------------------------------------------------ #endif // ------------------------------------------------------------------