1541 lines
76 KiB
C++
1541 lines
76 KiB
C++
// 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$
|
|
// ------------------------------------------------------------------
|
|
|
|
#if defined(GOLD_CANPACK)
|
|
#pragma pack(1)
|
|
#endif
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//
|
|
// OPUS 1.1x
|
|
//
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
/* System*.DAT structure */
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
typedef struct {
|
|
/*........ Common System Data ....................................*/
|
|
|
|
word version; /* System Record version = 110 = v1.10 */
|
|
word menu; /* Alternate Menu file extension, 0=MNU */
|
|
word attrib; /* Area attributes (see below) */
|
|
byte fillc1[10]; /* Fill to 16th */
|
|
byte barrpath[ 40 ]; /* Barricade File path. */
|
|
byte fillc2[24]; /* Fill to 16th */
|
|
|
|
/*........ File System Information ...............................*/
|
|
|
|
char filtitle[50]; /* File Area Title (as per old Dir.Bbs) */
|
|
char filepath[40]; /* Path to the file download sub-dir */
|
|
char uppath[40]; /* Path to the file upload sub-directory */
|
|
char listpath[40]; /* Path to FILES.BBS equivilent */
|
|
byte fillf1[22]; /* Fill to 16th */
|
|
|
|
byte FilePriv; /* Min priv for file area */
|
|
byte DownPriv; /* Override priv to download */
|
|
byte UpPriv; /* Override priv to upload */
|
|
byte FileExtPriv; /* Override priv for outside */
|
|
byte fillf2[12]; /* Fill to 16th */
|
|
|
|
long FileLock; /* Locks for File Area */
|
|
long DownLock; /* Override Locks to download */
|
|
long UpLock; /* Override Locks to upload */
|
|
long FileExtLock; /* Override Locks for Outside */
|
|
byte fillf3[32]; /* Fill to 16th */
|
|
|
|
/*........ Message System Information ............................*/
|
|
|
|
char msgtitle[50]; /* Msg Area Title (as per old Dir.Bbs) */
|
|
char msgpath[40]; /* Path to messages */
|
|
byte fillm1[22]; /* Fill to 16th */
|
|
|
|
byte MsgPriv; /* Min priv for msg area */
|
|
byte EditPriv; /* Override priv for Enter/Rep */
|
|
byte MsgExtPriv; /* Override priv fot outside */
|
|
byte fillm2[13]; /* Fill to 16th */
|
|
|
|
long MsgLock; /* Locks for Msg Area */
|
|
long EditLock; /* Override Locks for Enter/Rep */
|
|
long MsgExtLock; /* Override Locks for Outside */
|
|
byte fillm3[4]; /* Fill to 16th */
|
|
char EchoName[32]; /* If an echo area, its name */
|
|
|
|
/*=================================== Total Record Size = 512 ==*/
|
|
} _systemdat;
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//
|
|
// OPUS 1.7x
|
|
//
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// INCLUDE OPUS.H ////////////////////////////////////////////////////////////
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* */
|
|
/* The Opus Computer-Based Conversation System */
|
|
/* (c) Copyright 1986-1991, Wynn Wagner III, All Rights Reserved */
|
|
/* */
|
|
/* */
|
|
/* YOOHOO is a trademark of Wynn Wagner III */
|
|
/* */
|
|
/* YOOHOO-YOOHOO/2U2 & WaZOO are */
|
|
/* Copyright 1987, Wynn Wagner III, All Rights Reserved */
|
|
/* */
|
|
/* */
|
|
/* This material is available for use by anybody with no strings and */
|
|
/* no guarantees. */
|
|
/* */
|
|
/* */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* LEGIBLE SECTION. Definitions to make "C" look like a real language. */
|
|
/*--------------------------------------------------------------------------*/
|
|
#undef log
|
|
|
|
#ifndef begin
|
|
# define begin {
|
|
# define end }
|
|
//# define true (-1)
|
|
# define false 0
|
|
# define Procedure void
|
|
# define shl <<
|
|
# define shr >>
|
|
# define xor ^
|
|
# define and &&
|
|
# define or ||
|
|
# define not !
|
|
# define mod %
|
|
typedef unsigned Bit;
|
|
typedef unsigned char const * const STRING;
|
|
# define fallthrough /* ... for use in switch statements for clarity. */
|
|
#endif
|
|
|
|
|
|
#ifndef max
|
|
#define max(a,b) ((a)>(b)?(a):(b))
|
|
#endif
|
|
|
|
#ifndef min
|
|
#define min(a,b) ((a)<=(b)?(a):(b))
|
|
#endif
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* TIME STAMP */
|
|
/*--------------------------------------------------------------------------*/
|
|
struct _stamp
|
|
begin
|
|
unsigned short date;
|
|
unsigned short time;
|
|
end;
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* FIDONET ADDRESS STRUCTURE */
|
|
/*--------------------------------------------------------------------------*/
|
|
typedef struct _ADDRESS
|
|
begin
|
|
short Zone;
|
|
short Net;
|
|
short Node;
|
|
short Point;
|
|
end ADDR;
|
|
|
|
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* NodeList.Sys */
|
|
/* */
|
|
/* NET > 0 and NODE > 0 Normal node */
|
|
/* */
|
|
/* NET > 0 and NODE <= 0 Host node */
|
|
/* Net host........node== 0 */
|
|
/* Regional host...node==-1 */
|
|
/* Country host....node==-2 */
|
|
/* */
|
|
/* NET == -1 Nodelist.Sys revision */
|
|
/* */
|
|
/* NET == -2 Nodelist statement */
|
|
/* */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* THE NEWSTYLE NODE LIST */
|
|
/*--------------------------------------------------------------------------*/
|
|
struct _node
|
|
begin
|
|
short NetNumber;
|
|
short NodeNumber;
|
|
word MsgFee; /* Amount charged to user for a message */
|
|
byte SystemName[34]; /* node name */
|
|
byte PhoneNumber[40]; /* phone number */
|
|
byte MiscInfo[30]; /* city and state */
|
|
byte Password[8]; /* WARNING: not necessarily null-terminated */
|
|
word CallCost; /* phone company's charge */
|
|
word HubNode; /* node # of this node's hub or 0 if none */
|
|
byte BaudRate; /* baud rate divided by 300 */
|
|
byte ModemType; /* RESERVED for modem type */
|
|
word NodeFlags; /* set of flags (see below) */
|
|
word NodeFiller;
|
|
end;
|
|
|
|
|
|
#define B_hub 0x0001 /* node is a net hub 0000 0000 0000 0001 */
|
|
#define B_host 0x0002 /* node is a net host 0000 0000 0000 0010 */
|
|
#define B_region 0x0004 /* node is region coord 0000 0000 0000 0100 */
|
|
#define B_zone 0x0008 /* is a zone gateway 0000 0000 0000 1000 */
|
|
#define B_CM 0x0010 /* runs continuous mail 0000 0000 0001 0000 */
|
|
#define B_res1 0x0020 /* reserved by Opus 0000 0000 0010 0000 */
|
|
#define B_res2 0x0040 /* reserved by Opus 0000 0000 0100 0000 */
|
|
#define B_res3 0x0080 /* reserved by Opus 0000 0000 1000 0000 */
|
|
#define B_res4 0x0100 /* reserved by Opus 0000 0001 0000 0000 */
|
|
#define B_res5 0x0200 /* reserved for non-Opus 0000 0010 0000 0000 */
|
|
#define B_res6 0x0400 /* reserved for non-Opus 0000 0100 0000 0000 */
|
|
#define B_res7 0x0800 /* reserved for non-Opus 0000 1000 0000 0000 */
|
|
#define B_point 0x1000 /* node is a point 0001 0000 0000 0000 */
|
|
#define B_res9 0x2000 /* reserved for non-Opus 0010 0000 0000 0000 */
|
|
#define B_resa 0x4000 /* reserved for non-Opus 0100 0000 0000 0000 */
|
|
#define B_resb 0x8000 /* reserved for non-Opus 1000 0000 0000 0000 */
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* Nodelist.Idx */
|
|
/* (File is terminated by EOF) */
|
|
/*--------------------------------------------------------------------------*/
|
|
struct _ndi
|
|
begin
|
|
short node; /* node number */
|
|
short net; /* net number */
|
|
end;
|
|
|
|
#define MAXEXPAND 30 /* max download files (wildcard expansion) */
|
|
#define CMDLEN 80 /* size of the command typeahead buffer */
|
|
#define CARRYLEN 20 /* LORE editor's carry buffer */
|
|
#define MAXLEN 85 /* size of primary line-input buffer */
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* OPUS CONTROL FILE and PARM FILE DECLARATIONS */
|
|
/*--------------------------------------------------------------------------*/
|
|
//#include "prm18.h"
|
|
// SUB-INCLUDE PRM18.H ///////////////////////////////////////////////////////////
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* */
|
|
/* The Opus Computer-Based Conversation System */
|
|
/* (c) Copyright 1986-1991, Wynn Wagner III, All Rights Reserved */
|
|
/* */
|
|
/* */
|
|
/* YOOHOO is a trademark of Wynn Wagner III */
|
|
/* */
|
|
/* YOOHOO-YOOHOO/2U2 & WaZOO are */
|
|
/* Copyright 1987, Wynn Wagner III, All Rights Reserved */
|
|
/* */
|
|
/* */
|
|
/* This material is available for use by anybody with no strings and */
|
|
/* no guarantees. */
|
|
/* */
|
|
/* */
|
|
/*--------------------------------------------------------------------------*/
|
|
/* */
|
|
/* OPUS 1.20 Message/File area database structures. */
|
|
/* Copyright 1991 Wynn Wagner III, Doug Boone and John Valentyn. */
|
|
/* */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#define THIS_CTL_VERSION 18 /* PRM structure version number */
|
|
|
|
#if COMPILER
|
|
# define CTLSIZE 0x7fff /* Only used when compiling OPUS_CTL */
|
|
# define OFS short
|
|
#elif UTILS
|
|
# define CTLSIZE 1 /* Only used when compiling Utilities*/
|
|
# define OFS short
|
|
#else
|
|
# define CTLSIZE 1
|
|
# define OFS char*
|
|
#endif
|
|
|
|
|
|
#define MAX_EXTERN 16 /* max. number of external programs */
|
|
#define MAXCLASS 12 /* number of possible priv levels */
|
|
#define ALIAS_CNT 15 /* number of matrix addresses */
|
|
|
|
#define _TWIT 0x10
|
|
#define _DISGRACE 0x30
|
|
#define _LIMITED 0x40
|
|
#define _NORMALL 0x50
|
|
#define _WORTHY 0x60
|
|
#define _PRIVEL 0x70
|
|
#define _FAVORED 0x80
|
|
#define _EXTRA 0x90
|
|
#define _CLERK 0xA0
|
|
#define _ASSTSYSOP 0xB0
|
|
#define _SYSOP 0xD0
|
|
#define _HIDDEN 0xE0
|
|
|
|
#define Twit _TWIT
|
|
#define Disgrace _DISGRACE
|
|
#define Limited _LIMITED
|
|
#define Normal _NORMALL
|
|
#define Worthy _WORTHY
|
|
#define Privil _PRIVEL
|
|
#define Favored _FAVORED
|
|
#define Extra _EXTRA
|
|
#define Clerk _CLERK
|
|
#define AsstSysop _ASSTSYSOP
|
|
#define Sysop _SYSOP
|
|
#define Hidden _HIDDEN
|
|
|
|
|
|
|
|
struct class_rec
|
|
begin
|
|
byte ClassPriv;
|
|
byte class_fill;
|
|
short max_time; /* max cume time per day */
|
|
short max_call; /* max time for one call */
|
|
word max_dl; /* max dl bytes per day */
|
|
byte ratio_down;
|
|
byte ratio_up;
|
|
word min_baud; /* speed needed for logon */
|
|
word min_file_baud; /* speed needed for file xfer */
|
|
end;
|
|
|
|
struct _FOSREGS
|
|
begin
|
|
word ax;
|
|
word bx;
|
|
word cx;
|
|
word dx;
|
|
end;
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* The format of the PRM file, VERSION 18 */
|
|
/* */
|
|
/* THIS IS AN EXPLOSIVE STRUCTURE. IT IS SUBJECT TO CHANGE WITH NO NOTICE. */
|
|
/* */
|
|
/* Offsets to the following item(s) are guaranteed: */
|
|
/* */
|
|
/* byte version; OFFSET 0, all versions */
|
|
/* byte task_num; OFFSET 1, 16+ */
|
|
/* */
|
|
/*--------------------------------------------------------------------------*/
|
|
struct _PRM
|
|
begin
|
|
/*-----------------------------------------------------------*/
|
|
/* DATA */
|
|
/*-----------------------------------------------------------*/
|
|
byte version; /* for safety STABLE*/
|
|
byte task_num; /* for multi-tasking systems STABLE*/
|
|
ADDR alias[ALIAS_CNT];
|
|
|
|
byte video; /* 0=Dos, 1=Fossil 2=IBM */
|
|
byte testmode; /* input from keyboard, not modem */
|
|
|
|
word carrier_mask;
|
|
word handshake_mask;
|
|
word max_baud; /* fastest speed we can use */
|
|
word com_port; /* Com1=0, Com2=1, FF=keyboard */
|
|
|
|
byte multitasker; /* flag for DoubleDos (see below) */
|
|
byte mailer_type; /* 0=Opus, 1=load external, 2=call external */
|
|
|
|
byte ModemFlag; /* (See MODEM FLAG below) */
|
|
byte LogFlag; /* (See LOG FLAG below) */
|
|
|
|
byte StyleFlag; /* (See STYLE FLAG below) */
|
|
byte FWDflag; /* Bits to control IN TRANSIT messages */
|
|
|
|
byte flags; /* See "FLAGS" below */
|
|
byte Flags2; /* See "FLAGS 2" below */
|
|
|
|
byte edit_exit; /* ERRORLEVEL to use if Matrix area changed */
|
|
byte exit_val; /* ERRORLEVEL to use after caller */
|
|
|
|
byte crashexit; /* non-zero= ErrorLevel exit */
|
|
byte arc_exit; /* ErrorLevel for after incomming ARCmail */
|
|
|
|
byte echo_exit; /* ERRORLEVEL for after inbound echomail */
|
|
byte UDB_Flags; /* User data base flags */
|
|
|
|
word min_baud; /* minimum baud to get on-line */
|
|
word color_baud; /* min baud for graphics */
|
|
word date_style; /* Used for FILES.BBS display */
|
|
|
|
byte logon_priv; /* Access level for new users */
|
|
byte seenby_priv; /* Min priv to see SEEN_BY line */
|
|
|
|
byte ctla_priv; /* Priv to see CONTROL-A lines in messages */
|
|
byte Interline_Flags; /* Flags relating to interline systems */
|
|
|
|
byte AskPrivs[16]; /* Array of privs. for message attr ask's */
|
|
byte AssumePrivs[16];/* Array of privs. for message attr assume's */
|
|
|
|
word logon_time; /* time to give for logons */
|
|
|
|
word matrix_mask;
|
|
|
|
word MinNetBaud; /* minimum baud rate for remote netmail */
|
|
byte exit_mailer; /* Exit when mailer is running */
|
|
byte num_crashes; /* Number of tries when sending crash */
|
|
|
|
struct class_rec Class[MAXCLASS];
|
|
struct _FOSREGS FosRegs[10];
|
|
|
|
word F_Reward; /* File upload time reward percentage */
|
|
word last_area; /* Highest msg area presumed to exist */
|
|
word last_farea; /* Highest file area presumed to exist */
|
|
|
|
byte return_secure; /* 0=ignore LASTUSER, >1 re-read LASTUSER */
|
|
|
|
/* New for Version 17 */
|
|
|
|
byte xuflags; /* ExtUser Flags: 1=Alias, 2=UserTel */
|
|
word xlmin; /* Lead mins for expiry warning */
|
|
char xlday; /* Lead days for expiry warning */
|
|
byte expriv; /* Expiry privilege */
|
|
char totlang; /* Total languages present (1-6) */
|
|
byte sylno; /* Def Sysop Language no. (0-5) */
|
|
byte uslno; /* Def User Language no. (0-5) */
|
|
byte relog_exit; /* Exit after -o relog */
|
|
word Scrn_Size; /* Local monitor's size, high byte = len */
|
|
|
|
/* New for version 18 */
|
|
|
|
word default_expire_days; /* Number of days before new users */
|
|
word default_expire_mins; /* Number of days before new users */
|
|
long default_keys; /* New user's default keys */
|
|
long default_section; /* New user's default section */
|
|
word Point_Net; /* My point net */
|
|
word Boss_Node; /* My point net */
|
|
byte NoPwd_Priv; /* Priv if you want to allow users without password */
|
|
byte Local_Exit; /* Exit after local messages */
|
|
byte Upload_Exit; /* Exit after an upload for checking */
|
|
byte ExtMail_Exit; /* Exit for externmail */
|
|
byte Max_Echo; /* Longest echomail message to handle 3-60k */
|
|
byte WhoPriv; /* Priv to see who uploaded a file */
|
|
|
|
ADDR GUUCP; /* Where to send gated UUCP messages */
|
|
long making_section;
|
|
byte ListSysop; /* Privilege neeeded to see sysops in net list */
|
|
byte rawpriv; /* Privilege needed to see/download files not listed */
|
|
byte uucp_priv; /* Privilege needed to turn off uucp addresses */
|
|
byte Flags3; /* More flags. */
|
|
byte Mail_Exit; /* Exit after mail connect */
|
|
byte byte_fill;
|
|
|
|
word PRM_FILL3[18];
|
|
|
|
|
|
/*-----------------------------------------------------------*/
|
|
/* OFFSETS */
|
|
/*-----------------------------------------------------------*/
|
|
|
|
/*-------------------------------------------*/
|
|
/* MODEM COMMAND STRINGS */
|
|
/*-------------------------------------------*/
|
|
OFS MDM_Init; /* modem initialization string */
|
|
OFS MDM_PreDial; /* modem dial command sent before number */
|
|
OFS MDM_PostDial; /* modem command sent after dialed number */
|
|
OFS MDM_LookBusy; /* mdm cmd to take modem off hook */
|
|
|
|
/*-------------------------------------------*/
|
|
/* PRIMROSE PATHS */
|
|
/*-------------------------------------------*/
|
|
OFS misc_path; /* path to BBS/GBS files */
|
|
OFS sys_path; /* path to SYSTEM?.BBS files */
|
|
OFS temppath; /* place to put temporary files */
|
|
OFS net_info; /* path to NODELIST files */
|
|
OFS mailpath; /* place to put received netmail bundles */
|
|
OFS filepath; /* place to put received netmail files */
|
|
OFS hold_area; /* path to pending outbound matrix traffic */
|
|
|
|
/*-------------------------------------------*/
|
|
/* DATA FILE NAMES */
|
|
/*-------------------------------------------*/
|
|
OFS user_file; /* path/filename of User.Bbs */
|
|
OFS sched_name; /* name of file with _sched array */
|
|
OFS langdir; /* Langauge file dir. (Was Syl in v16) */
|
|
OFS spcldir; /* Spcl Ann Text dir. (Was Usl in v16) */
|
|
|
|
/*-------------------------------------------*/
|
|
/* MISCELLANEOUS TEXT */
|
|
/*-------------------------------------------*/
|
|
OFS system_name; /* board's name */
|
|
OFS sysop; /* sysop's name */
|
|
OFS timeformat;
|
|
OFS dateformat;
|
|
OFS OFS_Filler1[8];
|
|
|
|
/*-------------------------------------------*/
|
|
/* BBS/GBS SUPPORT FILES */
|
|
/*-------------------------------------------*/
|
|
OFS logo; /* first file shown to a caller */
|
|
OFS welcome; /* shown after logon */
|
|
OFS newuser1;
|
|
OFS newuser2;
|
|
OFS rookie;
|
|
|
|
OFS HLP_Editor; /* Intro to msg editor for novices. */
|
|
OFS HLP_Replace; /* Explain the Msg.Editor E)dit command */
|
|
OFS HLP_Inquire; /* Explain the Msg. I)nquire command */
|
|
OFS HLP_Locate; /* Explain the Files L)ocate command */
|
|
OFS HLP_Contents; /* Explain the Files C)ontents command */
|
|
OFS HLP_OPed; /* help file for the full-screen editor */
|
|
OFS OUT_Leaving; /* Bon Voyage */
|
|
OFS OUT_Return; /* Welcome back from O)utside */
|
|
OFS ERR_DayLimit; /* Sorry, you've been on too long... */
|
|
OFS ERR_TimeWarn; /* warning about forced hangup */
|
|
OFS ERR_TooSlow; /* explains minimum logon baud rate */
|
|
OFS ERR_XferBaud; /* explains minimum file transfer baud rate */
|
|
OFS LIST_MsgAreas; /* dump file... used instead of Dir.Bbs */
|
|
OFS LIST_FileAreas; /* dump file... used instead of Dir.Bbs */
|
|
|
|
OFS FREQ_MyFiles; /* file to send when FILES is file requested */
|
|
OFS FREQ_OKList; /* list of files approved for file requests */
|
|
OFS FREQ_About; /* File Request: ABOUT file */
|
|
|
|
OFS OEC_Quotes;
|
|
OFS byebye; /* file displayed at logoff */
|
|
OFS local_editor; /* text editor to use in keyboard mode */
|
|
OFS barricade;
|
|
OFS STATUS_dir; /* Where to find INMAIL/ACTIVE/LASTUSER */
|
|
OFS mailer; /* full external mailer command */
|
|
OFS common; /* File with data common to all tasks */
|
|
|
|
/* New for Version 17 */
|
|
|
|
OFS xdwarn; /* Date Warning OEC BBS */
|
|
OFS xtwarn; /* Time Warning OEC BBS */
|
|
OFS xdexpd; /* Expired due-to-Date OEC BBS */
|
|
OFS xtexpd; /* Expired due-to-Time used OEC BBS */
|
|
OFS lang[12]; /* 12 Language File Root Name pointers */
|
|
|
|
OFS badpath; /* Path for unrecognized echo names */
|
|
/*--------------------------------------------------------------------------*/
|
|
/* New for version 18 */
|
|
/*--------------------------------------------------------------------------*/
|
|
OFS ConfHelp; /* Help file for newuser configure */
|
|
OFS Mainmenu; /* ASCII menu at MAIN */
|
|
OFS Confmenu; /* ASCII menu at Config */
|
|
OFS Sectmenu; /* ASCII menu at Section menu */
|
|
OFS Sysopmenu; /* ASCII menu at Sysop menu */
|
|
OFS Echotoss; /* Where to find EchoToss.Log */
|
|
OFS MDM_Answer; /* String to force autoanswer */
|
|
OFS BAD_PWD; /* File shown to users who've forgottent thiers */
|
|
OFS charset; /* File that contains character translation tables */
|
|
OFS DL_Log; /* Who's downloaded what */
|
|
OFS UL_Log; /* Who uploaded what */
|
|
OFS Name_Filter; /* Old USERNAME.TXT */
|
|
OFS Bad_Name; /* What to show user if filter catches them */
|
|
OFS CUSTOM1_menu; /* What to show before CUSTOM1 menu */
|
|
OFS CUSTOM2_menu; /* What to show before CUSTOM2 menu */
|
|
OFS CUSTOM3_menu; /* What to show before CUSTOM3 menu */
|
|
OFS CUSTOM4_menu; /* What to show before CUSTOM4 menu */
|
|
OFS CUSTOM5_menu; /* What to show before CUSTOM5 menu */
|
|
OFS CUSTOM6_menu; /* What to show before CUSTOM6 menu */
|
|
OFS EXT_mail_string; /* What we see when UUCP is coming */
|
|
OFS MaybeNew; /* File shown if didn't find user name */
|
|
OFS Histmenu; /* ASCII menu at History */
|
|
OFS My_Question; /* Sysop configured question */
|
|
OFS HLP_make; /* How to make a section */
|
|
OFS MDM_FDial[4]; /* Special dialing instructions */
|
|
OFS Yell; /* Yell OEC */
|
|
OFS HLP_Macro; /* Help for macro menu */
|
|
OFS UUCP_list; /* Address list for UUCP */
|
|
OFS HLP_IChat; /* Interline chat help */
|
|
OFS protocols[MAX_EXTERN]; /* external file protocol programs */
|
|
|
|
/*v18*/ OFS OFS_Filler[7];
|
|
|
|
/*-----------------------------------------------------------*/
|
|
/* Log_Name must always be the last offset in this struct */
|
|
/* because Bbs_Init uses that symbol to flag the end of */
|
|
/* the offsets. */
|
|
/*-----------------------------------------------------------*/
|
|
OFS log_name; /* name of the log file */
|
|
|
|
|
|
/*-----------------------------------------------------------*/
|
|
/* Big blob of stuff */
|
|
/* It's a sequence of null-terminated character arrays... */
|
|
/* pointed-to by the offsets (above). */
|
|
/*-----------------------------------------------------------*/
|
|
char buf[CTLSIZE];
|
|
end;
|
|
|
|
#define ASK_PHONE 0x01 /* Used with xuflags */
|
|
#define ASK_ALIAS 0x02 /* Used with xuflags */
|
|
#define ASK_REAL 0x04 /* Used with xuflags */
|
|
#define ASK_CITY 0x08 /* Used with xuflags */
|
|
#define CAN_ALIAS 0x10 /* Allow ALIAS' in some situations */
|
|
#define ASK_BDAY 0x20 /* Ask user for birthday */
|
|
#define ASK_ADDRESS 0x40 /* Ask user for street address */
|
|
|
|
/* Means no privilege level is set and/or applicable At LOGON, */
|
|
/* for example, it means system is for PRE-REGISTERED users only. */
|
|
#define NO_PRIV 0xFF
|
|
|
|
struct _common_data {
|
|
|
|
char Opus[16]; /* "OPUS-CBCS 1.20" */
|
|
long QuotePosition; /* Quote file position */
|
|
long CallerCount; /* Number of callers */
|
|
long Caller_ID; /* ID of current newest user */
|
|
long MSG_ID; /* Last used MSGID */
|
|
word FILLER[15]; /* RESERVED - do not use */
|
|
word MAX_task; /* Highest task number */
|
|
};
|
|
|
|
/* Explanation of _common_data:
|
|
|
|
Opus will EXPECT to find "OPUS-CBCS 1.20" at the beginning of this file.
|
|
If it does not find it, Opus will assume the file belongs to someone
|
|
else and will ignore the file.
|
|
|
|
File ctl.common is optional. It should be used only by systems that
|
|
multitask. Its purpose is to allow separate schedule files for each
|
|
task. If the file does not exist, Last quote pointer and Caller count
|
|
are read from and updated in the scheduler.
|
|
|
|
On the other hand, if this file exists the quote pointer is only updated
|
|
in this file. Caller Count is updated separately both in the scheduler
|
|
and this file, to allow separate statistics for each task, plus total
|
|
statistics.
|
|
|
|
MAX_task is informative only and should be set by the sysop. Its purpose
|
|
is to help external intertask programs figure out how many tasks there
|
|
exist. Its purpose is defeated if task numbers are not consecutive.
|
|
|
|
More data may be added in the future. If so, either the FILLER field
|
|
will be used, or the data will be appended. Existing definitions will
|
|
remain it their respective places. Any FILLER bytes will be set to 0.
|
|
*/
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* MATRIX_CHANGED flags */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#define MATRIX_CHANGED 0x0001 /* Changed matrix area. Scan */
|
|
#define LOCAL_CHANGED 0x0002 /* Changed Local area. */
|
|
#define GOT_BUNDLE 0x0100 /* Received a PKT file */
|
|
#define GOT_ARCMAIL 0x0200 /* Received an archived file */
|
|
#define GOT_REQUESTS 0x0400 /* Got file requests to handle */
|
|
#define GOT_ECHOMAIL 0x1000 /* Received Echomail */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* INTERLINE FLAGS */
|
|
/*--------------------------------------------------------------------------*/
|
|
#define CAN_CHAT 0x01 /* Multiline systems can do chats */
|
|
|
|
// END OF SUB-INCLUDE PRM18.H ////////////////////////////////////////////////////
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* Multitaskers (possible values for `ctl.multitasker' */
|
|
/* NOTE: 0 means no multitasker in use */
|
|
/*--------------------------------------------------------------------------*/
|
|
#define DoubleDOS 1
|
|
#define DesqView 2
|
|
#define TopView 3
|
|
#define TaskView 3
|
|
#define LAN 0x80
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* Matrix mask */
|
|
/* Undefined bits are reserved by Opus See EVENT.H */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* FLAGS */
|
|
/*--------------------------------------------------------------------------*/
|
|
#define LOGECHO 0x01 /* log echomail areas 0000 0001 */
|
|
#define STEADY 0x02 /* never change baud rate 0000 0010 */
|
|
#define ECHOSCAN 0x04 /* automatically scan echo's 0000 0100 */
|
|
#define ECHO_GUARD 0x08 /* no toss un-pwd echo arc 0000 1000 */
|
|
#define LEAVE_ESCN 0x10 /* Leave echotoss.log after Scanning 0001 0000 */
|
|
#define DO_MSGID 0x20 /* Put MSGID lines into echomail 0010 0000 */
|
|
#define F_NOCRASH 0x40 /* Don't accept crash mail 0100 0000 */
|
|
#define F_UNPK 0x80 /* Unpack incomming arcmail 1000 0000 */
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* FLAGS 2 */
|
|
/*--------------------------------------------------------------------------*/
|
|
#define NO_USRLIST 0x01 /* no user list (enter msg) 0000 0001 */
|
|
#define WATCHDOG 0x02 /* Reboot during outside 0000 0010 */
|
|
#define F2_TOSS 0x04 /* Toss incomming echomail 0000 0100 */
|
|
#define F2_LASTREAD 0x08 /* Uses LASTREAD for Sysop 0000 1000 */
|
|
#define F2_DOSFILE 0x10 /* Close stdAUX and stdPRN 0001 0000 */
|
|
#define F2_PRIMARY 0x20 /* MultiTasker Primary task 0010 0000 */
|
|
#define F2_SECOND 0x40 /* MultiTasker Secondary task 0100 0000 */
|
|
#define F2_ECON 0x80 /* Econo Echo handling 1000 0000 */
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* FLAGS 3 */
|
|
/*--------------------------------------------------------------------------*/
|
|
#define F3STEADY 0x01 /* Can do ARQ steady. &B2 */
|
|
#define F3GMENU 0x02 /* Will let users do graphics menus */
|
|
#define F3LOGOFF 0x04 /* Collect logoff messages */
|
|
#define F3NOALIAS 0x08 /* Don't put alias' in SEEN-BY */
|
|
#define F3HINAMES 0x10 /* Allow users with hi-bit names */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* FWDflags (bits to control IN TRANSIT messages) */
|
|
/*--------------------------------------------------------------------------*/
|
|
#define FWD_NONE 0x01 /* No IN TRANSIT netmail 0000 0001 */
|
|
#define FWD_PWD 0x02 /* IN TRANSIT by pwd only 0000 0010 */
|
|
#define FWD_TONET 0x04 /* Accept IN TRANSIT only to my net 0000 0100 */
|
|
#define FWD_NOBITS 0x08 /* No IN TRANSIT if extended bits used 0000 1000 */
|
|
#define FWD_HOST 0x10 /* Send mail to host if can't find. */
|
|
#define VERSION6 0x40 /* Use Version 6 nodelist */
|
|
#define IMAPOINT 0x80 /* This is a point */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* LOG FLAGS */
|
|
/*--------------------------------------------------------------------------*/
|
|
#define LOG_TERSE 0x01 /* brief log 0000 0001 */
|
|
#define LOG_wordY 0x02 /* wordy log 0000 0010 */
|
|
#define LOG_TRACE 0x04 /* very wordy log 0000 0100 */
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* MODEM FLAGS */
|
|
/*--------------------------------------------------------------------------*/
|
|
#define M_SNOOP 0x01 /* sysop display on 0000 0001 */
|
|
#define MOUSE 0x02 /* sysop mouse on 0000 0010 */
|
|
#define M_BRKCLEAR 0x04 /* Use BREAK to clear outbound buffer 0000 0100 */
|
|
#define SLOW_MODEM 0x08 /* Slow modem and fast computer */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* STYLE FLAGS */
|
|
/*--------------------------------------------------------------------------*/
|
|
#define SF_PATH 0x01 /* use path, not Dir.Bbs 0000 0001 */
|
|
#define SF_KILL 0x02 /* Kill rec'd pvt messages 0000 0010 */
|
|
#define SF_ASKKILL 0x04 /* ASK about killing msgs 0000 0100 */
|
|
#define SF_EUROPE 0x08 /* European date strings */
|
|
#define SF_TIME 0x10 /* Show time remaining on menu 0001 0000 */
|
|
#define SF_NOFLAG 0x20 /* Don't allow user config at logon 0010 0000 */
|
|
#define SF_HANDHOLD 0x40 /* Track user's errors and add help 0100 0000 */
|
|
#define SF_NOHIGH 0x80 /* Track user's errors and add help 0100 0000 */
|
|
|
|
|
|
#define SET_FLAG(x,y) ((x)|=(y))
|
|
#define CLEAR_FLAG(x,y) ((x)&=(~(y)))
|
|
#define isFLAG(x,y) ((x)&(y))
|
|
|
|
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* The rest of this file contains structure definitions similar to those */
|
|
/* used by Fido<tm> version 11w. No claim is made that Opus will maintain */
|
|
/* compatibility with these structures beyond Opus version 0. */
|
|
/* */
|
|
/* The original version of the following items can be found in STRUCT.H, an */
|
|
/* include file writte (and probably copyrighted by) Tom Jennings. */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* THE USER DATABASE */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#define MAX_USEC 80 /* Maximum number of areas in "user" section */
|
|
|
|
struct _usr
|
|
{
|
|
char name[36]; /* Caller's first and last names */
|
|
char city[36]; /* Caller's location */
|
|
char pwd[16]; /* Password */
|
|
char usrtel[16]; /* User Tel# for ref or future callback .........*/
|
|
char alias[32]; /* User alias if ID is not it ...................*/
|
|
/* 136 bytes */
|
|
word times; /* Number of previous calls to this system */
|
|
byte ClassPriv; /* User Access Privilege */
|
|
byte help; /* Help level (see below) */
|
|
byte tabs; /* 0=transmit <sp> instead of <tab> */
|
|
byte language; /* 0=english, 1=french */
|
|
word nulls; /* Number of Nulls (delays) after <cr> */
|
|
word msg; /* Last message area visited */
|
|
word Bits; /* SEE BELOW */
|
|
/* 148 bytes */
|
|
long ClassLock; /* 32 User Keys */
|
|
|
|
long ludate; /* Last UNIX Date on system */
|
|
/* 156 bytes */
|
|
short time; /* Time on-line so-far today */
|
|
|
|
word flag; /* Used to hold User maintainence information */
|
|
/* -------1 0x01 Reuse record for next new user */
|
|
/* xxxxxxx0 ---- Reserved reserved for opus Mgr */
|
|
|
|
long upld; /* K-bytes uploaded, all calls */
|
|
long dnld; /* K-bytes downloaded, all calls */
|
|
short dnldl; /* K-bytes downloaded, today */
|
|
word files; /* Last file area visited */
|
|
byte width; /* Width of the caller's monitor */
|
|
byte len; /* Height of the caller's */
|
|
word credit; /* FidoNet usage credit in cents */
|
|
word debit; /* FidoNet usage in cents */
|
|
|
|
char spcoec[8]; /* Special OECC to show after logon .............*/
|
|
/* Good for clubs, stores, user groups ..........*/
|
|
/* Eg, "Welcome to the dBase User Group" ........*/
|
|
|
|
byte saccnt[5]; /* Array of 5 special announcement cntrs ........*/
|
|
/* If any is > 0 than the user is shown .........*/
|
|
/* a corresponding announcement file & the ......*/
|
|
/* counter is decremented till zero .............*/
|
|
|
|
byte exflag; /* Flag of expiration control bits ..............*/
|
|
/* -------- 000 No expiry actions ...............*/
|
|
/* -------1 001 Expire AFTER xdate ..............*/
|
|
/* ------1- 002 Expire when dbmin GE crmin ......*/
|
|
/* -----:-- 004 ... Reserved ... ...............*/
|
|
/* ----:--- 008 ... Reserved ... ...............*/
|
|
/* ---1---- 016 Demote user priv to (expriv) ....*/
|
|
/* --1----- 032 Axe user when expired ..........*/
|
|
/* -:------ 064 ... Reserved ... ...............*/
|
|
/* :------- 128 ... Reserved ... ...............*/
|
|
|
|
|
|
long xdate; /* Expiry date (UNIX style for math/futr)........*/
|
|
long crmin; /* Total minutes given to user ..................*/
|
|
long dbmin; /* Total minutes used to user ..................*/
|
|
|
|
char u_section[16]; /* String for user current section */
|
|
char ulikes[16]; /* String of user interest keywords .............*/
|
|
long fudate; /* First time user called system in seconds */
|
|
unsigned long caller_id; /* Unique ID for this user. fudate */
|
|
unsigned long Section; /* What "section" of the bbs the user is in. */
|
|
word menu_mode; /* What menu the user was at last ...............*/
|
|
word TwoBits; /* More user configuration flags */
|
|
word After_Externs; /* Any special flags from external? */
|
|
byte msecs; /* Number of message areas in User sections defined */
|
|
byte fsecs; /* Number of file areas in User sections defined */
|
|
|
|
/* terminated!! */
|
|
#ifdef OLD
|
|
word lastmsg[MAXLREAD]; /* All the last message read stuff .....*/
|
|
#else
|
|
/* New for Opus 1.20 */
|
|
char Address[32]; /* User's address */
|
|
char My_Ans[64]; /* Reply to prm.My_Question */
|
|
char Strfill[32]; /* Filler for more strings */
|
|
char bday_mon; /* User's birthday/month */
|
|
char bday_day; /* User's birthday/day */
|
|
short bday_year; /* User's birthday/year */
|
|
unsigned long messages_read; /* Total number of messages read */
|
|
long messages_sent; /* Number of messages entered by user */
|
|
|
|
word my_section[MAX_USEC]; /* This is just a block of area */
|
|
/* numbers in the user's Section */
|
|
/* Message areas are first, then */
|
|
/* file areas. The first file */
|
|
/* area is at my_section[msecs] */
|
|
|
|
word big_fill[40]; /* Fill out to 512 bytes */
|
|
word Opus_Flags; /* Stores Opus temporary configuration */
|
|
byte byte_fill;
|
|
byte Default_Protocol; /* Default transfer protocol */
|
|
byte User_MMacro[16]; /* Message User's keyboard Macro */
|
|
byte User_FMacro[16]; /* File User's keyboard Macro */
|
|
byte User_DMacro[16]; /* Default User's keyboard Macro */
|
|
byte Sysop_Comment[80]; /* Anything you want to say about 'em */
|
|
#endif
|
|
unsigned long OPUS_id;
|
|
|
|
/* The next 7 sets of id and inf data are for */
|
|
/* external programs to use for auxialliary inf. */
|
|
/* Opus Mgr uses 1st 2 for reamrks about user. */
|
|
|
|
long extern_id[7]; /* LONG ID number for external programs */
|
|
/* Must be registered with OpusInfo ....*/
|
|
byte extern_inf[7][32]; /* 7 32-byte external util data blocks */
|
|
|
|
/* Total record size = 1024b .........................................*/
|
|
};
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* USER OPTIONS bit weights (undefined bits are reserved) */
|
|
/*--------------------------------------------------------------------------*/
|
|
#define FillerBit 0x0001 /* Reserved */
|
|
#define ASKED_LEN 0x0002 /* Asked user for screen length? */
|
|
#define NO_IBMCHAR 0x0004 /* Cannot receive IBM textmode graphics */
|
|
#define USE_LORE 0x0008 /* Wants LORE editor instead of OPed */
|
|
#define MORE_PROMPT 0x0010 /* Wants the page break "MORE?" question */
|
|
#define ANSI 0x0020 /* Can handle ANSI video */
|
|
#define CONFIG_SET 0x0040 /* OPUS logon questions answered */
|
|
#define FORMFEED 0x0080 /* SET=xmit clearscreen, CLEAR=eat formfeed */
|
|
#define AVATAR 0x0100 /* Can handle AVATAR (aka "oANSI") video */
|
|
#define TALKER 0x0200 /* Wants limited graphics for speech */
|
|
|
|
#define USE_PHONE 0x0400 /* Call Back User Modem */
|
|
#define USE_ALIAS 0x0800 /* Enable ALIAS searches, message entry, etc */
|
|
|
|
#define NO_NAME 0x1000 /* User List Name */
|
|
#define NO_TIME 0x2000 /* User List Time */
|
|
#define NO_CITY 0x4000 /* User List City */
|
|
|
|
|
|
#define CURSOR_CONTROL (ANSI|AVATAR)
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* 2Bits flags (More user configuration choices.... */
|
|
/*--------------------------------------------------------------------------*/
|
|
#define HOTKEYS 0x0001 /* Wants HotKeys at all help levels */
|
|
#define QMENU 0x0002 /* Wants to return to last menu instead of MAIN */
|
|
#define ASKGRAPH 0x0004 /* Wants to be asked about graphics every logon */
|
|
#define ASCIIMENU 0x0008 /* Wants long tedious graphics menus */
|
|
#define SHOW_TIME 0x0010 /* Show time remaining at prompts */
|
|
#define BLOCKCHAT 0x4000 /* User doesn't want to be sociable. */
|
|
#define INCRITAREA 0x8000 /* Opus is in critical area */
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* eXpiration flags */
|
|
/*--------------------------------------------------------------------------*/
|
|
#define BY_DATE 0x0001 /* Zap users by date */
|
|
#define BY_TIME 0x0002 /* Zap users when they run out of credit */
|
|
#define DEMOTE 0x0010 /* Demote user instead of deleting them */
|
|
#define AXE 0x0020 /* Delete user */
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* User help levels */
|
|
/*--------------------------------------------------------------------------*/
|
|
#define HITECH 0x00 /* Lotus style, top-of-screen, menu bars */
|
|
#define EXPERT 0x02 /* grizzled veteran, no menus at all */
|
|
#define REGULAR 0x04 /* experienced user, brief menus */
|
|
#define NOVICE 0x06 /* Full menus plus additional hand-holding */
|
|
#define USING_FTB 0xff /* caller is using the Full-Tilt-Boogie method */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* Flags for After_Externs */
|
|
/*--------------------------------------------------------------------------*/
|
|
#define NEW_ECHOS 0x0001 /* New Echomail entered by user */
|
|
#define NEW_MATRIX 0x0002 /* New Matrix entered by user */
|
|
#define NEW_LOCAL 0x0004 /* New Local mail entered by user */
|
|
#define UPLOADED 0x0008 /* User uploaded something */
|
|
#define DUP_UPLOAD 0x0010 /* User uploaded a duplicate file */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* LASTUSER.BBS file structure */
|
|
/*--------------------------------------------------------------------------*/
|
|
/* Struct of LASTUSE#.BBS file that is written everytime a user logons on */
|
|
/* or when Opus does an OUTSIDE exit. It contains a complete and exact */
|
|
/* copy of the user record, following by extended data for session control. */
|
|
/* If PRM is configured to reload user data upon return from an OUTSIDE */
|
|
/* exit, then Opus reloads user record portion, making it the active copy. */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#ifdef _TM_DEFINED
|
|
struct _lu_file
|
|
begin
|
|
struct _usr user; /* Copy of user record */
|
|
word baud; /* Current user's baud (0 == keyboard!) */
|
|
word port; /* Current port # */
|
|
word task; /* Active task number */
|
|
word mins; /* User's minutes remaining */
|
|
word msgarea; /* Which message area user is in */
|
|
word filearea; /* Which file area user is in */
|
|
long timeoff; /* UNIX GMT of latest time user stays on till */
|
|
struct tm tmoff; /* MS-C 'tm' struct of above but as local time */
|
|
char laston[25]; /* Orig Last Call Date as ASCIIZ string because */
|
|
/* same field in user rec now is curr logon time */
|
|
end;
|
|
#endif
|
|
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
/* */
|
|
/* MESSAGE and FILE AREAS */
|
|
/* */
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
/* See SYSTEM.H */
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* */
|
|
/* MESSAGES */
|
|
/* */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* Message header */
|
|
/*--------------------------------------------------------------------------*/
|
|
struct opus_msg
|
|
begin
|
|
byte from[36];
|
|
byte to[36];
|
|
byte subj[72];
|
|
byte date[20]; /* Obsolete/unused ASCII date information */
|
|
word times; /* FIDO<tm>: Number of times read */
|
|
word dest; /* Destination node */
|
|
word orig; /* Origination node number */
|
|
word cost; /* Unit cost charged to send the message */
|
|
|
|
word orig_net; /* Origination network number */
|
|
word dest_net; /* Destination network number */
|
|
|
|
/* A TIMESTAMP is a 32-bit integer in the Unix */
|
|
/* flavor (ie. the number of seconds since */
|
|
/* January 1, 1970). Timestamps in messages are */
|
|
/* always Greenwich Mean Time, never local time. */
|
|
|
|
struct _stamp date_written; /* When user wrote the msg */
|
|
struct _stamp date_arrived; /* When msg arrived on-line */
|
|
|
|
word reply; /* Current msg is a reply to this msg number */
|
|
word attr; /* Attribute (behavior) of the message */
|
|
word up; /* Next message in the thread */
|
|
end;
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* Message attributes */
|
|
/*--------------------------------------------------------------------------*/
|
|
#define MSGPRIVATE 0x0001 /* private message * 0000 0000 0000 0001 */
|
|
#define MSGCRASH 0x0002 /* squirtmail * 0000 0000 0000 0010 */
|
|
#define MSGREAD 0x0004 /* read by addressee * 0000 0000 0000 0100 */
|
|
#define MSGSENT 0x0008 /* sent OK (remote) 0000 0000 0000 1000 */
|
|
#define MSGFILE 0x0010 /* file attached to msg * 0000 0000 0001 0000 */
|
|
#define MSGFWD 0x0020 /* in transit 0000 0000 0010 0000 */
|
|
#define MSGORPHAN 0x0040 /* unknown dest node 0000 0000 0100 0000 */
|
|
#define MSGKILL 0x0080 /* kill after bundling * 0000 0000 1000 0000 */
|
|
#define MSGLOCAL 0x0100 /* FidoNet vs. local 0000 0001 0000 0000 */
|
|
#define MSGHOLD 0x0200 /* Hold, don't send * 0000 0010 0000 0000 */
|
|
#define MSGXX2 0x0400 /* <reserved> X? 0000 0100 0000 0000 */
|
|
#define MSGFRQ 0x0800 /* file request * 0000 1000 0000 0000 */
|
|
#define MSGRRQ 0x1000 /* receipt requested X* 0001 0000 0000 0000 */
|
|
#define MSGCPT 0x2000 /* is a return receipt X* 0010 0000 0000 0000 */
|
|
#define MSGARQ 0x4000 /* audit trail requested X* 0100 0000 0000 0000 */
|
|
#define MSGURQ 0x8000 /* update request X* 1000 0000 0000 0000 */
|
|
/*-----------------------*/
|
|
/* ^ */
|
|
/* | */
|
|
/* * = preserved by */
|
|
/* the network */
|
|
/* ? = stripped by the */
|
|
/* net (FTSC spec) */
|
|
/* but preserved */
|
|
/* by seadog<tm> */
|
|
/* X = not used by Opus */
|
|
/*-----------------------*/
|
|
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* */
|
|
/* EVENTS */
|
|
/* */
|
|
/*--------------------------------------------------------------------------*/
|
|
/* #include <event.h> */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* Message bundle header */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#define PKTVER 2 /* Used for `ver' (below) */
|
|
|
|
struct _pkthdr
|
|
begin
|
|
short orig_node; /* originating node */
|
|
short dest_node; /* destination node */
|
|
short year; /* 0..99 when packet was created */
|
|
short month; /* 1..12 when packet was created */
|
|
short day; /* 1..31 when packet was created */
|
|
short hour; /* 0..23 when packet was created */
|
|
short minute; /* 0..59 when packet was created */
|
|
short second; /* 0..59 when packet was created */
|
|
short rate; /* destination's baud rate */
|
|
short ver; /* packet version */
|
|
short orig_net; /* originating network number */
|
|
short dest_net; /* destination network number */
|
|
char product; /* product type */
|
|
char x1; /* filler (used by some systems) */
|
|
|
|
/* ------------------------------ */
|
|
/* THE FOLLOWING SECTION IS not */
|
|
/* THE SAME ACROSS SYSTEM LINES: */
|
|
/* ------------------------------ */
|
|
byte pktpwd[6];
|
|
byte B_fill1[2];
|
|
word Orig_Zone;
|
|
word Dest_Zone;
|
|
byte B_fill2[16];
|
|
long B_fill3;
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* WAZOO */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#ifndef ACK
|
|
#define ACK 0x06
|
|
#endif
|
|
|
|
#ifndef NAK
|
|
#define NAK 0x15
|
|
#endif
|
|
|
|
#ifndef ENQ
|
|
#define ENQ 0x05
|
|
#endif
|
|
|
|
#ifndef YOOHOO
|
|
#define YOOHOO 0x00f1 /* 241 (a prime number, I think) */
|
|
#endif
|
|
|
|
#ifndef TSYNC
|
|
#define TSYNC 0x00ae
|
|
#endif
|
|
|
|
struct _Hello
|
|
begin
|
|
word signal; /* always 'o' (0x6f) */
|
|
word hello_version; /* currently 1 (0x01) */
|
|
word product; /* product code */
|
|
word product_maj; /* major revision of the product */
|
|
word product_min; /* minor revision of the product */
|
|
char my_name[60]; /* Other end's name */
|
|
char sysop[20]; /* sysop's name */
|
|
ADDR my_address;
|
|
byte my_password[8]; /* ONLY 6 CHARACTERS ARE SIGNIFICANT !!!!! */
|
|
byte reserved2[8]; /* reserved by Opus */
|
|
word capabilities; /* see below */
|
|
byte reserved3[12]; /* available to non-Opus systems by prior */
|
|
/* "approval" of 124/108. */
|
|
end; /* size 128 bytes */
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* YOOHOO<tm> CAPABILITY VALUES */
|
|
/*--------------------------------------------------------------------------*/
|
|
#define Y_DIETIFNA 0x0001 /* Can do LoTek 0000 0000 0000 0001 */
|
|
#define FTB_USER 0x0002 /* reserved by Opus 0000 0000 0000 0010 */
|
|
#define Bit_2 0x0004 /* reserved by Opus 0000 0000 0000 0100 */
|
|
#define ZED_ZAPPER 0x0008 /* Can do ZModem/plain 0000 0000 0000 1000 */
|
|
#define DOES_IANUS 0x0010 /* Does Opus Janus 0000 0000 0001 0000 */
|
|
#define Bit_5 0x0020 /* reserved by Opus 0000 0000 0010 0000 */
|
|
#define Bit_6 0x0040 /* reserved by Opus 0000 0000 0100 0000 */
|
|
#define Bit_7 0x0080 /* reserved by Opus 0000 0000 1000 0000 */
|
|
#define Bit_8 0x0100 /* reserved by Opus 0000 0001 0000 0000 */
|
|
#define Bit_9 0x0200 /* reserved by Opus 0000 0010 0000 0000 */
|
|
#define Bit_a 0x0400 /* reserved by Opus 0000 0100 0000 0000 */
|
|
#define Bit_b 0x0800 /* reserved by Opus 0000 1000 0000 0000 */
|
|
#define Bit_c 0x1000 /* reserved by Opus 0001 0000 0000 0000 */
|
|
#define Bit_d 0x2000 /* reserved by Opus 0010 0000 0000 0000 */
|
|
#define Bit_e 0x4000 /* reserved by Opus 0100 0000 0000 0000 */
|
|
#define WZ_FREQ 0x8000 /* accepts file requests 1000 0000 0000 0000 */
|
|
|
|
|
|
/*
|
|
|
|
User Indexing Support Items
|
|
|
|
Bit setting of (word) UDB_Flags
|
|
|
|
& 1 ... Set ON if user name CRC indexing is expected. The general
|
|
init func should look for User.Idx and check its size for
|
|
a match to the user file size. Must be nrecs * sizeof(long).
|
|
|
|
Or, can simply be forced on and the first func that finds the
|
|
index to be missing or inconsistent will give a short status
|
|
error and turn the bit off, stopping further index attempts.
|
|
|
|
& 2 ... Set ON if user file locking is to be attempted which requires
|
|
SHARE.EXE to be loaded. This is desired as updates to the
|
|
user file index should be controlled as access to 2 separate
|
|
files in a multitasked scenario can span some time and the
|
|
chance of indexing errors is quite high. When ON, the 1st byte
|
|
of ONLY the user file is locked to mean that the user database
|
|
is being updated. There should be no need to lock the index
|
|
as the user file is always accessed first.
|
|
|
|
It has to be tested to see if the effect of other read accesses
|
|
to the user file (eg, user listing, searching) will fail if
|
|
the file is locked during an update. I suspect that other
|
|
activities will be transparent to it and ONLY other LOCKING
|
|
attempts will be foiled. This would allow compatibility with
|
|
other existing R/O accesses to the file.
|
|
|
|
If it proves to be safe, we can force this ON and allow the
|
|
the first function wherein it fails to turn it off with a
|
|
single short message.
|
|
|
|
*/
|
|
|
|
#define UsrIdx 1 /* Says, Attempt CRC indexing */
|
|
#define UsrLok 2 /* Says, Attempt File Locking */
|
|
#define UsrPwd 4
|
|
|
|
#define HAS_UF(v) (ctl.UDB_Flags & v) /* Check if Ufile feature used */
|
|
#define STOP_UF(v) ctl.UDB_Flags &= ~v /* Turn off Ufile feature */
|
|
|
|
/* END OF FILE: opus.h */
|
|
|
|
|
|
// INCLUDE SYSTEM.H //////////////////////////////////////////////////////////
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* */
|
|
/* The Opus Computer-Based Conversation System */
|
|
/* (c) Copyright 1986-1991, Wynn Wagner III, All Rights Reserved */
|
|
/* */
|
|
/* */
|
|
/* YOOHOO is a trademark of Wynn Wagner III */
|
|
/* */
|
|
/* YOOHOO-YOOHOO/2U2 & WaZOO are */
|
|
/* Copyright 1987, Wynn Wagner III, All Rights Reserved */
|
|
/* */
|
|
/* */
|
|
/* This material is available for use by anybody with no strings and */
|
|
/* no guarantees. */
|
|
/* */
|
|
/* */
|
|
/*--------------------------------------------------------------------------*/
|
|
/* */
|
|
/* OPUS 1.20 Message/File area database structures. */
|
|
/* Copyright 1991 Wynn Wagner III, Doug Boone and John Valentyn. */
|
|
/* */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* LEGIBLE SECTION. Definitions to make "C" look like a real language. */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#ifndef begin
|
|
# define begin {
|
|
# define end }
|
|
# define true (-1)
|
|
# define false 0
|
|
# define Procedure void
|
|
# define shl <<
|
|
# define shr >>
|
|
# define xor ^
|
|
# define and &&
|
|
# define or ||
|
|
# define not !
|
|
# define mod %
|
|
typedef unsigned Bit;
|
|
typedef unsigned short word;
|
|
typedef unsigned char byte;
|
|
typedef unsigned char const * const STRING;
|
|
# define fallthrough /* ... for use in switch statements for clarity. */
|
|
#endif
|
|
|
|
|
|
#ifndef max
|
|
#define max(a,b) ((a)>(b)?(a):(b))
|
|
#endif
|
|
|
|
#ifndef min
|
|
#define min(a,b) ((a)<=(b)?(a):(b))
|
|
#endif
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* Structure for SYSMSG.DAT */
|
|
/* A single-file message area database */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
struct _filesys {
|
|
|
|
char Area_Name[32]; /* Area's primary name */
|
|
|
|
word Area_Number; /* area number */
|
|
word Area_Menu; /* which menu? */
|
|
word Total_Size;
|
|
|
|
byte Area_Priv; /* Area Privilege */
|
|
byte Down_Priv; /* Download Privilege */
|
|
|
|
byte Up_Priv;
|
|
byte Priv_Up; /* Uploads from users with Priv>= Priv_Up */
|
|
byte Ratio_Priv; /* Privilege where u/d ratios start */
|
|
byte New_Priv;
|
|
|
|
byte fill_byte1[2];
|
|
/* 48 */
|
|
word Attrib; /* Area Attribute */
|
|
word Status; /* Area Status, extended Attribute? */
|
|
|
|
long Start_Pos; /* start of Area in sysfile.dat */
|
|
/* 56 */
|
|
long Area_Lock; /* Area Lock */
|
|
|
|
long Up_Lock;
|
|
|
|
long Down_Lock; /* edit Lock */
|
|
|
|
long Priv_Key; /* Private Key path */
|
|
|
|
/* 72 */
|
|
long Section; /* edit Lock */
|
|
|
|
long fill_long[2];
|
|
|
|
byte Title_Len; /* length of Title */
|
|
byte Prefiles_Len; /* files shown at Area access like Areainfo */
|
|
|
|
byte Downpath_Len; /* length of path */
|
|
byte Uppath_Len; /* length of path */
|
|
/* 88 */
|
|
byte Barricade_Len; /* Barricade length if used */
|
|
byte Rules_Len;
|
|
|
|
byte Privkey_Len; /* Uploads from users with "key" go here */
|
|
byte PrivUp_Len; /* Private Upload path */
|
|
byte Menu_Len; /* file name for this area's ascii menu */
|
|
byte Vol_Len; /* Length of volume name */
|
|
byte Help_Len; /* Length of help name for this area */
|
|
|
|
byte fill_byte2[5]; /* more filler */
|
|
/* 100 */
|
|
word Other_Len; /* external programs use this number bytes */
|
|
|
|
word Def_Upload; /* Area number for default uploads */
|
|
word Priv_Upload; /* Area number for Priv uploads */
|
|
word Key_Upload; /* Area number for Lock uploads */
|
|
|
|
word fill_word[10]; /* more filler to 128 bytes*/
|
|
};
|
|
|
|
/* Title */
|
|
/* Prefiles */
|
|
/* Downpath */
|
|
/* Barricade */
|
|
/* Rules */
|
|
/* Menu */
|
|
/* Help */
|
|
/* Upload */
|
|
/* Priv Upload */
|
|
/* Key Upload */
|
|
/* File area help file */
|
|
/* Volume */
|
|
/* "Other" field. Reserved for external programs */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* Structure for SYSMSG.DAT */
|
|
/* A single-file message Area database */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
struct _msgsys {
|
|
|
|
char Area_Name[32]; /* Area's primary name */
|
|
char Echo_Name[32]; /* Area's echo name */
|
|
word Area_Number; /* Area number */
|
|
word Area_Menu; /* which menu? */
|
|
word Total_Size; /* Total size of this Area in SYSMSG.DAT */
|
|
|
|
byte Area_Priv; /* Area Privilege */
|
|
byte Edit_Priv; /* Edit Privilege */
|
|
byte Private_Priv; /* Privilege to read Private messages*/
|
|
byte Upload_Priv;
|
|
byte fill_0[3];
|
|
byte Translate; /* Which character set to use 1, 2.... */
|
|
/* 80 */
|
|
long Area_Lock; /* Area Lock */
|
|
long Edit_Lock; /* Edit Lock */
|
|
|
|
long Private_Lock; /* Lock to read Private messages*/
|
|
long Upload_Lock;
|
|
|
|
word Attrib; /* Area Attribute */
|
|
word Status; /* Area Status, extended Attribute? */
|
|
|
|
long Start_Pos; /* start of Area in sysmsg.dat */
|
|
long Section;
|
|
byte Max_Lines; /* Maximum number of lines in messages */
|
|
byte fill_1[3];
|
|
/* 112 */
|
|
|
|
word Zone;
|
|
word Net;
|
|
word Node;
|
|
word Point;
|
|
|
|
byte Path_Len; /* length of Path */
|
|
byte Title_Len; /* length of Title */
|
|
|
|
byte Barricade_Len; /* Barricade length if used */
|
|
byte Origin_Len; /* non-default Origin line */
|
|
|
|
byte Domain_Len; /* Domain (if used) length */
|
|
byte Menu_Len; /* file name for this area's ascii menu */
|
|
byte Vol_Len; /* Length of volume name */
|
|
byte Help_Len; /* Length of help name for this area */
|
|
/* 144 */
|
|
|
|
byte Scan_Len; /* number of boards that Area is Scanned to */
|
|
byte Scan_Pos; /* where Opus is in the Scan right now */
|
|
word Other_Len; /* external programs use this number bytes */
|
|
word Extern_Flags;
|
|
word word_fill[5];
|
|
/* 160 */
|
|
};
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* Then some strings/structures follow as needed */
|
|
/*--------------------------------------------------------------------------*/
|
|
/* Path string */
|
|
/* Title string */
|
|
/* Barricade string */
|
|
/* Origin string */
|
|
/* Domain string */
|
|
/* Menu string */
|
|
/* Message area help file */
|
|
/* Volume ID */
|
|
/* aScan[Scan_Len] echoScan addresses */
|
|
/* "Other" field. Reserved for external programs */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* end of strings */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
|
|
struct _ascan { /* structure of address for echoScanning */
|
|
word Net;
|
|
word Node;
|
|
};
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* LMR is used in LREAD.DAT to store the user's last message read counter */
|
|
/*--------------------------------------------------------------------------*/
|
|
struct _lmr {
|
|
unsigned long user_id;
|
|
word high_msg;
|
|
word last_msg;
|
|
};
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* LF is used to store the last time a user has accessed each area */
|
|
/*--------------------------------------------------------------------------*/
|
|
struct _lf {
|
|
unsigned long user_id;
|
|
unsigned long last_timestamp;
|
|
};
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* File Area attributes (limit or describe the behavior of an area) */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#define F_DUPE 0x0001 /* Allow duplicate uploads in this area */
|
|
#define F_FREE 0x0002 /* Downloads from this area area all 0K */
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* Area attributes (limit or describe the behavior of an area) */
|
|
/*--------------------------------------------------------------------------*/
|
|
#define SYSMAIL 0x01 /* is a mail area */
|
|
#define P_REP 0x02 /* Net mail private echomail back */
|
|
#define NOPUBLIC 0x04 /* OPUS: Disallow public messages */
|
|
#define NOPRIVATE 0x08 /* OPUS: Disallow private messages */
|
|
#define ANON_OK 0x10 /* OPUS: Enable anonymous messages */
|
|
#define _ECHOMAIL 0x20 /* OPUS: Set=Echomail Clear=Not Echomail */
|
|
#define USEALIAS 0x40 /* OPUS: Use user's alias in this area if..... */
|
|
//#define PASSTHROUGH 0x80 /* OPUS: Allow high-bit characters in echo area */
|
|
#define INBOUND 0x0100 /* Inbound Only area */
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* msgsys.Extern_Flags */
|
|
/* Opus will not use these flags, set them or anything. The ones that are */
|
|
/* marked as RESERVED will be defined in the future for "standard" uses. */
|
|
/* The ones marked as EXTERN will have no "standard" meaning so conflicting */
|
|
/* programs MAY have conflicting uses. */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#define RENUMBER 0x0001 /* This area gets renumbered */
|
|
#define MAILCHECK 0x0002 /* The mail check program will do this area */
|
|
#define RESERVED2 0x0004 /* Reserved for Opus-defined flags */
|
|
#define RESERVED3 0x0008 /* Reserved for Opus-defined flags */
|
|
#define RESERVED4 0x0010 /* Reserved for Opus-defined flags */
|
|
#define RESERVED5 0x0020 /* Reserved for Opus-defined flags */
|
|
#define RESERVED6 0x0040 /* Reserved for Opus-defined flags */
|
|
#define RESERVED7 0x0080 /* Reserved for Opus-defined flags */
|
|
#define EXTERN1 0x0100 /* Undefined! Meaning varies for each program*/
|
|
#define EXTERN2 0x0200 /* Undefined! Meaning varies for each program*/
|
|
#define EXTERN3 0x0400 /* Undefined! Meaning varies for each program*/
|
|
#define EXTERN4 0x0800 /* Undefined! Meaning varies for each program*/
|
|
#define EXTERN5 0x1000 /* Undefined! Meaning varies for each program*/
|
|
#define EXTERN6 0x2000 /* Undefined! Meaning varies for each program*/
|
|
#define EXTERN7 0x4000 /* Undefined! Meaning varies for each program*/
|
|
#define EXTERN8 0x8000 /* Undefined! Meaning varies for each program*/
|
|
|
|
|
|
// ------------------------------------------------------------------
|
|
|
|
#if defined(GOLD_CANPACK)
|
|
#pragma pack()
|
|
#endif
|
|
|
|
// ------------------------------------------------------------------
|
|
|