// 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 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 instead of */ byte language; /* 0=english, 1=french */ word nulls; /* Number of Nulls (delays) after */ 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: 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 /* 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 */ /* X = not used by Opus */ /*-----------------------*/ /*--------------------------------------------------------------------------*/ /* */ /* EVENTS */ /* */ /*--------------------------------------------------------------------------*/ /* #include */ /*--------------------------------------------------------------------------*/ /* 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 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 // ------------------------------------------------------------------