This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
deb-goldedplus/goldlib/gmb3/gmo_msg.h

326 lines
9.7 KiB
C++

// 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$
// ------------------------------------------------------------------
// Message structures and classes.
// ------------------------------------------------------------------
// ------------------------------------------------------------------
#ifndef __GMB_MSG_H
#define __GMB_MSG_H
// ------------------------------------------------------------------
#include <gftnall.h>
#include <gtimall.h>
#include <gmsgattr.h>
// ------------------------------------------------------------------
// Internet name typedefs
typedef char INam[128];
// ------------------------------------------------------------------
// Internet subject typedefs
typedef char ISub[1301];
// ------------------------------------------------------------------
// Message modes
const uint GMSG_HDR = 0x0001;
const uint GMSG_TXT = 0x0002;
const uint GMSG_HDRTXT = 0x0003; // GMSG_HDR|GMSG_TXT
const uint GMSG_NEW = 0x0010;
const uint GMSG_UPDATE = 0x0020;
const uint GMSG_DELETE = 0x0040;
const uint GMSG_COPY = 0x0080;
const uint GMSG_MOVE = 0x0100;
const uint GMSG_UNS_NOT_RCV = 0x0200;
const uint GMSG_NOLSTUPD = 0x8000;
// ------------------------------------------------------------------
// Line attributes
const uint GLINE_TEAR = 0x0001;
const uint GLINE_ORIG = 0x0002;
const uint GLINE_HIDD = 0x0004;
const uint GLINE_KLUD = 0x0008;
const uint GLINE_QUOT = 0x0010;
const uint GLINE_HARD = 0x0020;
const uint GLINE_WRAP = 0x0040;
const uint GLINE_BLOK = 0x0080;
const uint GLINE_POSI = 0x0100;
const uint GLINE_HIGH = 0x0200;
const uint GLINE_TAGL = 0x0400;
const uint GLINE_SIGN = 0x0800;
const uint GLINE_NOAL = 0x1000; // text is not allocated
const uint GLINE_KLUDGE = GLINE_HIDD | GLINE_KLUD;
const uint GLINE_ALL = GLINE_HIDD | GLINE_KLUD | GLINE_QUOT;
// ------------------------------------------------------------------
// Kludge types
const uint GKLUD_INTL = 0x0001;
const uint GKLUD_FMPT = 0x0002;
const uint GKLUD_TOPT = 0x0004;
const uint GKLUD_FLAGS = 0x0008;
const uint GKLUD_AREA = 0x0010;
const uint GKLUD_MSGID = 0x0020;
const uint GKLUD_REPLY = 0x0040;
const uint GKLUD_PID = 0x0080;
const uint GKLUD_FWD = 0x0100;
const uint GKLUD_PATH = 0x0200;
const uint GKLUD_SEENBY = 0x0400;
const uint GKLUD_CHARSET = 0x0800;
const uint GKLUD_REPLYTO = 0x1000;
const uint GKLUD_REPLYADDR = 0x2000;
const uint GKLUD_KNOWN = 0x4000;
const uint GKLUD_RFC = 0x8000;
// ------------------------------------------------------------------
// Search locations
const uint GFIND_FROM = 0x0001;
const uint GFIND_TO = 0x0002;
const uint GFIND_SUBJECT = 0x0004;
const uint GFIND_BODY = 0x0008;
const uint GFIND_TAGLINE = 0x0010;
const uint GFIND_TEARLINE = 0x0020;
const uint GFIND_ORIGIN = 0x0040;
const uint GFIND_KLUDGES = 0x0080;
const uint GFIND_SIGNATURE = 0x0100;
const uint GFIND_HDR = GFIND_FROM | GFIND_TO | GFIND_SUBJECT;
const uint GFIND_HDRTXT = GFIND_HDR | GFIND_BODY;
// ------------------------------------------------------------------
// Charset encoding formats
const int GCHENC_CMP = 0x0001; // Composed characters
const int GCHENC_I51 = 0x0002; // FSC-51
const int GCHENC_MNE = 0x0004; // K.Simonsen Mnemonic
const int GCHENC_QP = 0x0008; // Quoted-Printable
// ------------------------------------------------------------------
// Line record
class Line {
public:
int color; // Line color
uint type; // GLINE_*
uint kludge; // GKLUD_*
std::string txt; // The line text
Line* prev; // Pointer to previous line
Line* next; // Pointer to next line
Line() : txt ("") { color = type = kludge = 0; prev = next = NULL; }
Line(const char *str) : txt (str) { color = type = kludge = 0; prev = next = NULL; }
~Line() {}
int istearline() { return !!(type & GLINE_TEAR); }
int isorigin() { return !!(type & GLINE_ORIG); }
int ishidden() { return !!(type & GLINE_HIDD); }
int iskludge() { return !!(type & GLINE_KLUD); }
int isquote() { return !!(type & GLINE_QUOT); }
int ishard() { return !!(type & GLINE_HARD); }
int iswrapped() { return !!(type & GLINE_WRAP); }
int isblock() { return !!(type & GLINE_BLOK); }
int isposition() { return !!(type & GLINE_POSI); }
int ishighlighted() { return !!(type & GLINE_HIGH); }
int istagline() { return !!(type & GLINE_TAGL); }
int isheader() { return !!kludge; }
int isallocated() { return !(type & GLINE_NOAL); }
};
// ------------------------------------------------------------------
Line* AddLineF(Line*& line, const char* format, ...) __attribute__ ((format (printf, 2, 3)));
Line* AddLine(Line* line, char* buf);
Line* AddHexdump(Line*& line, void* data, size_t datalen);
// ------------------------------------------------------------------
class gmsg_links {
private:
enum { list_limit = 29 };
ulong reply_to;
ulong reply_first;
ulong reply_list[list_limit];
ulong reply_next;
public:
void reset() {
reply_to = reply_first = reply_next = 0;
for(int n=0; n<list_max(); n++)
reply_list[n] = 0;
}
int list_max() const { return list_limit; }
void to_set(ulong m) { reply_to = m; }
void first_set(ulong m) { reply_first = m; }
void list_set(int n, ulong m) { reply_list[n] = m; }
void next_set(ulong m) { reply_next = m; }
ulong to() const { return reply_to; }
ulong first() const { return reply_first; }
ulong list(int n) const { return reply_list[n]; }
ulong next() const { return reply_next; }
};
// ------------------------------------------------------------------
struct gmsg_jam_fields {
long subfieldlen; // Size of subfields
};
// ------------------------------------------------------------------
struct gmsg_pcboard_fields {
char status; // Msg header status byte
byte exthdrflags; // Msg extended header flags
char password[13]; // Password needed to read the message
time_t reply_written; // Timestamp of the original
};
// ------------------------------------------------------------------
struct gmsg_wildcat_fields {
char from_title[11];
long from_userid;
char to_title[11];
long to_userid;
char network[9];
char internal_attach[13];
char external_attach[13];
ulong next_unread;
ulong prev_unread;
char reserved[20];
};
// ------------------------------------------------------------------
struct gmsg_adeptxbbs_fields {
ulong iflags; // Internet related flags
ulong oflags; // Other network related flags
};
// ------------------------------------------------------------------
struct gmsg_ezycom_fields {
byte extattr;
};
// ------------------------------------------------------------------
// Base class
class gmsg {
public:
uint board; // Board number (if applicable)
ulong msgno; // Message number
gmsg_links link; // Message reply links
ftn_addr oorig; // Original origination address
ftn_addr orig; // Origination address
ftn_domain odom; // Originating domain
ftn_addr odest; // Original destination address
ftn_addr dest; // Destination address
ftn_domain ddom; // Destination domain
INam by; // Who from
INam to; // Who to
ISub re; // Subject
time_t written; // Timestamp
time_t arrived; // Timestamp
time_t received; // Timestamp
Attr attr; // Message attributes
uint cost; // Cost of msg if Netmail
uint timesread; // Number of times read
ftn_addr msgid; // MSGID kludge address
char msgids[201]; // MSGID kludge string
char replys[201]; // REPLY kludge string
char pid[80]; // PID kludge string
long txtstart; // Text starting position or record
long txtlength; // Text length or number of records
uint txtblocks; // Number of msg text blocks
char* txt; // Message text
gmsg_jam_fields jam;
gmsg_pcboard_fields pcboard;
gmsg_wildcat_fields wildcat;
gmsg_adeptxbbs_fields adeptxbbs;
gmsg_ezycom_fields ezycom;
};
// ------------------------------------------------------------------
#endif
// ------------------------------------------------------------------