home *** CD-ROM | disk | FTP | other *** search
-
- /* *
- * *
- * * I M A I L D E F I N I T I O N S A N D S T R U C T U R E S
- * *
- * */
-
- /*
- * Definitions and structures for IMAIL 1.40 Gamma
- *
- * Copyright (C) 1992/1993 by IMAIL INC. All rights reserved.
- *
- * The contents of this file are subject to change without notice!
- * Fields marked reserved may NOT be used.
- *
- * It is an ERROR to write to any of the configuration files
- * while IMAIL (or any of its companion programs) is running.
- *
- */
-
- #include <dir.h>
- #include <io.h>
- #include <time.h>
-
- #define IMAIL_MAJ_VERSION 1
- #define IMAIL_MIN_VERSION 40
- #define STRUCT_MAJ_VERSION 1
- #define STRUCT_MIN_VERSION 00
- #define IM_PRD_CODE 0x4B
-
- /*
- *
- * Data type definitions
- *
- */
-
- #define byte unsigned char
- #define word unsigned
- #define boolean int
- #define integer int
-
- typedef unsigned int bit;
-
- /*
- *
- * Internal limits
- *
- */
-
- #define MAXAKAS 16 // Max # of addresses
- #define MAXPACKERS 11 // Max # of packer def
- #define MAXEXPORT 60 // Max export defs
- #define MAXVIA 40 // max nodes packed via
- #define MAXGROUPS 26 // max nodes packed via
- #define MAXEXCEPT 10 // max EXCEPT nodes
- #define MAXPACK 32 // max default pack cmd
- #define MAXFWDLINK 10 // max fwd link structs
- #define MAXNOIMPT 20 // max # names for IMPORT
- #define ZONESDOM 10 // zones per domain entry
- #define MAXTAG 51 // max areatag length
- #define MAXNAME 37 // max namefield lenght
- #define MAXPACKNAME 50 // max packer length
- #define MAXORIGIN 64 // max origin length
-
- /*
- *
- * Log Style Definitions
- *
- */
-
- #define LOG_NORMAL 0 // normal log level
- #define LOG_VERBOSE 1 // verbose log level
-
- #define LOG_LOG 252 // Always, but to file
- #define LOG_SCREEN 253 // Always, but to scrn
- #define LOG_ALL 254 // Always log this
- #define LOG_ERROR 255 // Force error logging
-
- /*
- *
- * Environment Type (FroDo or Bink)
- *
- */
-
- #define ENV_FRODO 0 // FrontDoor/D'Bridge
- #define ENV_BINK 1 // Binkley
-
- /*
- *
- * File Attach Message Status (used in IMAIL.ND)
- *
- */
-
- #define S_NORMAL 0
- #define S_HOLD 1
- #define S_CRASH 2
- #define S_IMMEDIATE 3
- #define S_DIRECT 4
- #define S_NORMAL_DIR 4
- #define S_HOLD_DIR 5
- #define S_CRASH_DIR 6
- #define S_IMMEDIATE_DIR 7
-
- /*
- *
- * Message Base Types
- *
- */
-
- #ifndef MSGTYPE_SDM
- #define MSGTYPE_SDM 0x01
- #endif
- #ifndef MSGTYPE_SQUISH
- #define MSGTYPE_SQUISH 0x02
- #endif
- #ifndef MSGTYPE_HUDSON
- #define MSGTYPE_HUDSON 0x03
- #endif
- #ifndef MSGTYPE_QBBS
- #define MSGTYPE_QBBS 0x03
- #endif
- #ifndef MSGTYPE_PASSTH
- #define MSGTYPE_PASSTH 0x0F
- #endif
- #ifndef MSGTYPE_ECHO
- #define MSGTYPE_ECHO 0x80
- #endif
- #ifndef MSGTYPE_LOCAL
- #define MSGTYPE_LOCAL 0x90
- #endif
- #ifndef MSGTYPE_NET
- #define MSGTYPE_NET 0xA0
- #endif
-
- /*
- *
- * Via Line Switches
- *
- */
-
- #ifndef VIA_NONE
- #define VIA_NONE 0x01
- #endif
- #ifndef VIA_EXP
- #define VIA_EXP 0x02
- #endif
- #ifndef VIA_IMP
- #define VIA_IMP 0x03
- #endif
- #ifndef VIA_BOTH
- #define VIA_BOTH 0x04
- #endif
-
- /*
- *
- * Dupe ring check switches
- *
- */
-
- #ifndef DUPE_NONE
- #define DUPE_NONE 0x00
- #endif
- #ifndef DUPE_WARN
- #define DUPE_WARN 0x01
- #endif
- #ifndef DUPE_ZONE
- #define DUPE_ZONE 0x02
- #endif
- #ifndef DUPE_KILL
- #define DUPE_KILL 0x03
- #endif
-
- /*
- *
- * Circular path detection switches
- *
- */
-
- #ifndef CPD_NONE
- #define CPD_NONE 0x00
- #endif
- #ifndef CPD_WARN
- #define CPD_WARN 0x01
- #endif
- #ifndef CPD_KILL
- #define CPD_KILL 0x02
- #endif
-
- /*
- *
- * Unlink handling
- *
- */
-
- #ifndef ULNK_NONE
- #define ULNK_NONE 0x00
- #endif
- #ifndef ULNK_PASSTH
- #define ULNK_PASSTH 0x01
- #endif
- #ifndef ULNK_ALL
- #define ULNK_ALL 0x02
- #endif
-
- /*
- *
- * Personal Mail handling
- *
- */
-
- #ifndef PERSM_NONE
- #define PERSM_NONE 0x00
- #endif
- #ifndef PERSM_LOG
- #define PERSM_LOG 0x01
- #endif
- #ifndef PERSM_MSG
- #define PERSM_MSG 0x02
- #endif
- #ifndef PERSM_COPY
- #define PERSM_COPY 0x03
- #endif
-
- /*
- *
- * AreaLink Request Handling
- *
- */
-
- #ifndef KEEP_NONE
- #define KEEP_NONE 0x00
- #endif
- #ifndef KEEP_MSG
- #define KEEP_MSG 0x01
- #endif
- #ifndef KEEP_ALL
- #define KEEP_ALL 0x02
- #endif
-
- /*
- *
- * Macros to make life easier
- *
- */
-
- #define BASEMASK 0x0F
- #define TYPEMASK 0xF0
-
- #define IsSdm(Type) ((Type & BASEMASK) == MSGTYPE_SDM)
- #define IsMsg(Type) ((Type & BASEMASK) == MSGTYPE_SDM)
- #define IsSquish(Type) ((Type & BASEMASK) == MSGTYPE_SQUISH)
- #define IsHudson(Type) ((Type & BASEMASK) == MSGTYPE_HUDSON)
- #define IsQbbs(Type) ((Type & BASEMASK) == MSGTYPE_QBBS)
- #define IsPassth(Type) ((Type & BASEMASK) == MSGTYPE_PASSTH)
- #define IsEcho(Type) ((Type & TYPEMASK) == MSGTYPE_ECHO)
- #define IsLocal(Type) ((Type & TYPEMASK) == MSGTYPE_LOCAL)
- #define IsNet(Type) ((Type & TYPEMASK) == MSGTYPE_NET)
-
-
- /*
- *
- * Exit Errorlevels & Error Messages
- *
- */
-
- #define E_NOERR 0 // no error
- #define E_CRDIR 238 // Error creating directory
- #define E_ELOCK 239 // File locking error
- #define E_AOPEN 240 // Error opening IMAIL.AX
- #define E_BOPEN 241 // Error opening IMAIL.BX
- #define E_NOIDX 242 // Index file missing/corrupt
- #define E_NOCFG 243 // IMAIL.CF not found
- #define E_NOARE 244 // IMAIL.AR not found
- #define E_NONOD 245 // IMAIL.ND not found
- #define E_BADCF 246 // Error in IMAIL.CF
- #define E_BADVR 247 // Bad version of IMAIL.CF
- #define E_EOPEN 248 // Error opening file
- #define E_EREAD 249 // Error reading file
- #define E_EWRIT 250 // Error writing file
- #define E_CMDPR 251 // Command Line Parameter error
- #define E_FILNF 252 // File not found
- #define E_MEMRY 253 // Memory Allocation error
- #define E_DISKF 254 // Insufficient disk space
- #define E_UNKWN 255 // Unknown error
-
- /* === ERRORLEVELs returned by TOSS and/or SCAN === */
-
- #define T_NOMAIL 0x00 // no mail processed
- #define T_NET 0x01 // Net mail
- #define T_ECHO 0x02 // Echo mail
- #define T_BAD 0x04 // Bad and/or dupe mail
- #define T_QBBS 0x08 // Qbbs message base changed
- #define T_MSG 0x10 // *.MSG message base changed
- #define T_SQUISH 0x20 // Squish message base changed
- #define T_PERS 0x40 // Mail to Sysop received
-
- /*
- *
- * Special values for 'ALL'
- *
- */
-
- #define ZONE_ALL 56685u
- #define NET_ALL 56685u
- #define NODE_ALL 56685u
- #define POINT_ALL 56685u
-
- /*
- *
- * Misc other definitions required
- *
- */
-
- #define FA_ANYFILE FA_RDONLY+FA_HIDDEN+FA_SYSTEM+FA_ARCH
-
- #define TRUE 1
- #define FALSE 0
- #define BLANK ' '
-
- typedef char str255[256];
- typedef char str35[36];
- typedef char str16[16];
-
- typedef char pktdate[20];
-
- typedef struct array512 {
- word len;
- char longstring[512];
- } array512;
-
- /* define some simple keyword replacements */
-
- #define strdelete(s,p,num) strcpy(s+p-1,s+p+num)
-
- #define STRSIZ 255 // default string length
-
- /*
- *
- * In case your compiler doesn't have these ...
- *
- */
-
- #ifndef MAXPATH
- #define MAXPATH 80
- #endif
- #ifndef MAXDRIVE
- #define MAXDRIVE 3
- #endif
- #ifndef MAXDIR
- #define MAXDIR 66
- #endif
- #ifndef MAXFILE
- #define MAXFILE 9
- #endif
- #ifndef MAXEXT
- #define MAXEXT 5
- #endif
-
-
- /*
- *
- * QuickBBS Structures
- *
- */
-
- typedef byte flagtype[4];
-
- typedef struct userrecord { /* Used in the USERS.BBS File */
- char name[36];
- char city[26];
- char pwd[16];
- char dataphone[13];
- char homephone[13];
- char lasttime[6];
- char lastdate[9];
- byte attrib;
- flagtype flags;
- integer credit;
- integer pending;
- integer timesposted;
- integer highmsgread;
- integer seclvl;
- integer times;
- integer ups;
- integer downs;
- integer upk;
- integer downk;
- integer todayk;
- integer elapsed;
- integer len;
- byte extraspace[8];
- } userrecord;
-
- /* --- Attrib: -----------------------------------------------------
-
- Bit 0: Deleted
- Bit 1: Screen Clear Codes
- Bit 2: More Prompt
- Bit 3: ANSI
- Bit 4: No-Kill
- Bit 5: Ignore Download Hours
- Bit 6: ANSI Full Screen Editor
- Bit 7: [ Reserved ]
-
- ------------------------------------------------------------- */
-
- /*
- *
- * Message Records
- *
- */
-
- typedef struct inforecord { // Used in the MSGINFO.BBS file
- word lowmsg; // Lowest Message in File
- word highmsg; // Highest Message in File
- word totalactive; // Total Active Messages
- word activemsgs[200];
- } inforecord;
-
- typedef struct idxrecord { // Used in the MSGIDX.BBS file
- word msgnum;
- byte board;
- } idxrecord;
-
- typedef struct hdrrecord { // Used in the MSGHDR.BBS file
- word msgnum, replyto, seealsonum, tread;
- word startrec;
- word numrecs, destnet, destnode, orignet, orignode;
- byte destzone, origzone;
- word cost;
- byte msgattr, netattr, board;
- char posttime[6];
- char postdate[9];
- char whoto[36], whofrom[36];
- char subj[73];
- } hdrrecord;
-
-
- /* --- Msg Attributes: --------------------------------------------- */
-
- #define QMSGDELTD 0x01 // deleted message, 0000 0001
- #define QMSGOUTN 0x02 // outgoing net message 0000 0010
- #define QMSGISNET 0x04 // Is a net message 0000 0100
- #define QMSGPRIVATE 0x08 // Private 0000 1000
- #define QMSGREAD 0x10 // Received 0001 0000
- #define QMSGOUTE 0x20 // Outgoing echo message 0010 0000
- #define QMSGLOCAL 0x40 // Local 0100 0000
- #define QMSGXX1 0x80 // [reserved] 1000 0000
-
- /* --- Net Attributes: --------------------------------------------- */
-
- #define QNETKILL 0x01 // Kill when sent 0000 0001
- #define QNETSENT 0x02 // Sent 0000 0010
- #define QNETFILE 0x04 // File attach 0000 0100
- #define QNETCRASH 0x08 // Crash Priority 0000 1000
- #define QNETRRQ 0x10 // Request Receipt 0001 0000
- #define QNETARQ 0x20 // Audit request 0010 0000
- #define QNETCPT 0x40 // Is a return receipt 0100 0000
- #define QNETXX1 0x80 // [reserved] 1000 0000
-
- /* --------------------------------------------------------------------
-
- Each record in the MSGTOIDX.BBS file is of type String[35], each
- entry is simply the name of the person the corresponding message
- in MSGHDR.BBS is addressed to.
-
- Each record in the MSGTXT.BBS file is of type String[255], each
- entry is used to store blocks of message text. The variable
- "StartRec" in the MSGHDR.BBS file contains the starting record
- position for the text, the variable "NumRecs" indicates how many
- consecutive blocks of text there are in the MSGTXT.BBS file.
-
- ----------------------------------------------------------------- */
-
-
- /* *
- * *
- * * Fido Packet Structures
- * *
- * */
-
-
- /*
- *
- * Normal Message Header (*.MSG)
- *
- */
-
- typedef struct f2normsghdr {
- char fromwho[36]; // From username
- char towho[36]; // To username
- char subj[72]; // Subject
- char date[20]; // date string
- word times; // times read
- word destnode; // destination node
- word orignode; // origin node
- word cost; // cost
- word orignet; // origin net
- word destnet; // destination net
- word destzone; // destination zone
- word origzone; // origin zone
- word destpoint; // destination point
- word origpoint; // origin point
- word reply; // this is a reply to?
- word attr; // Attribute
- word nextreply; // reply to this msg...
- } f2normsghdr;
-
-
-
- /*
- *
- * Message attributes
- *
- */
-
- #define FMSGPRIVATE 0x0001 // private message, 0000 0000 0000 0001
- #define FMSGCRASH 0x0002 // accept for forwarding 0000 0000 0000 0010
- #define FMSGREAD 0x0004 // read by addressee 0000 0000 0000 0100
- #define FMSGSENT 0x0008 // sent OK (remote) 0000 0000 0000 1000
- #define FMSGFILE 0x0010 // file attached to msg 0000 0000 0001 0000
- #define FMSGFWD 0x0020 // being forwarded 0000 0000 0010 0000
- #define FMSGORPHAN 0x0040 // unknown dest node 0000 0000 0100 0000
- #define FMSGKILL 0x0080 // kill after mailing 0000 0000 1000 0000
- #define FMSGLOCAL 0x0100 // FidoNet vs. local 0000 0001 0000 0000
- #define FMSGHOLD 0x0200 // 0000 0010 0000 0000
- #define FMSGXX1 0x0400 // STRIPPED by FidoNet<tm> 0000 0100 0000 0000
- #define FMSGFRQ 0x0800 // file request 0000 1000 0000 0000
- #define FMSGRRQ 0x1000 // receipt requested 0001 0000 0000 0000
- #define FMSGCPT 0x2000 // is a return receipt 0010 0000 0000 0000
- #define FMSGARQ 0x4000 // audit trail requested 0100 0000 0000 0000
- #define FMSGURQ 0x8000 // update request 1000 0000 0000 0000
-
- #define BUNDLE_VER 2 // IFNA Bundle Version
- #define CAP_TYPE2 0x0001 // Can make Type 2 bundles
- #define CAP_STONAGE 0x0000 // No particular capabailties, Type 2 assumed
-
- /*
- *
- * Header for Message Bundles (Bundle Type 2+)
- *
- */
-
- typedef struct f2pktmsghdr {
- word orignode, // originating node
- destnode, // destination node
- year, // 1990 - nnnnn
- month,
- day,
- hour,
- minute,
- second,
- rate, // unused
- ver, // 2
- orignet, // originating net
- destnet; // destination net
- byte
- prod_lo, // product code
- rev_major, // revision level, major
- password[8]; // packet level password
- word
- qm_origzone, // QMail wants orig.zone here
- qm_destzone; // QMail wants dest.zone here
- byte
- trash[2]; // junk[8]
- word
- cap_valid; // Cap. validity, byte swapped
- byte
- prod_hi, // product code, hi byte
- rev_minor; // revision level, minor
- word
- capability, // bundling capability
- origzone, // originating zone
- destzone, // destination zone
- origpoint, // originating point
- destpoint; // destination point
- long
- junk; // junk
- } f2pktmsghdr;
-
- /* --- Note ----------------------------------------------------
-
- (*) In the original FSC-0001 specification, these fields
- were part of the Filler, and so may not be recognized
- by all software.
-
- ------------------------------------------------------------- */
-
-
- /*
- *
- * Packeted Message Header (Bundle Type 2+)
- *
- */
-
- typedef struct f2msghdr {
- word ver; // Version (=2)
- word orignode; // Originate Node
- word destnode; // Destination Node
- word orignet; // Originate Net
- word destnet; // Destination Net
- word attr; // Attribute
- word cost; // Cost
- pktdate date; // Date String
- /*
- char towho[36]; To username
- char fromwho[36]; From username
- char subject[72]; Subject
- */
- } f2msghdr;
-
- /* --- Note ----------------------------------------------------
-
- The last three fields are variable length; they are
- shown above for reference, but are not part of the
- structure.
-
- ------------------------------------------------------------- */
-
-
- /*
- *
- * Structs used in IMAIL Configuration files
- *
- */
-
- typedef struct naddress { // std node number ...
- word zone; // Zone Number
- word net; // Net Number
- word node; // Node Number
- word point; // Point Number
- } naddress;
-
- typedef struct expt {
- naddress dest;
- boolean doexpt;
- } expt;
-
- typedef struct eaddress { // used in Area Manager ...
- struct naddress dstn; // node number
- bit exp_only:1; // export only flag
- bit imp_only:1; // import only flag
- bit paused:1; // echo mail paused
- bit rsvd1:5; // reserved
- } eaddress;
-
- typedef struct fwd_link { // used for forward request nodes ...
- char areasfile[MAXFILE+MAXEXT]; // name of areas file
- char toprogram[10]; // name of area manager
- char password[21]; // area manager password
- struct naddress uplink; // address of uplink
- } fwd_link;
-
- typedef struct dom {
- char domain[21]; // name of domain
- char outbound[MAXPATH]; // root outbound path
- word zones[ZONESDOM]; // Zones in this domain
- byte akas[MAXAKAS]; // =my= AKAs in this domain
- } dom;
-
- typedef struct im_stats { // Used mainly by IUTIL
- word th_day; // this day
- word la_day; // last day
- word th_week; // this week
- word la_week; // last week
- word th_month; // this month
- word la_month; // last month
- word th_year; // this year
- word la_year; // last year
- } im_stats;
-
-
- /*
- *
- * IMAIL.CF Structure
- *
- */
-
- typedef struct im_config_type {
- byte im_ver_maj; // Major Version
- byte im_ver_min; // Minor Version
- byte struct_maj; // reserved
- byte struct_min; // reserved
- char sysop[MAXNAME]; // name of sysop
- struct naddress aka[MAXAKAS]; // the AKAs
- struct dom domains[MAXAKAS]; // domain names & zones
- byte prod[10]; // Type2+ product codes
- char netmail[MAXPATH]; // net mail subdirectory
- char netfile[MAXPATH]; // inbound files directory
- char in_pkt[MAXPATH]; // Directory for inbound PKTs
- char out_pkt[MAXPATH]; // Directory for outbound PKTs
- char outbound[MAXPATH]; // outbound directory
- char quickbbs[MAXPATH]; // QuickBBS system directory
- char rsvd1[MAXPATH]; // reserved
- char rsvd2[MAXPATH]; // reserved
- char rsvd3[MAXPATH]; // reserved
- char semaphor[MAXPATH]; // Semaphor directory
- char logfilename[MAXPATH]; // Log file name
- char before_toss[MAXPATH]; // call before proc. PKTs
- char semaphor_net[MAXFILE+MAXEXT]; // Netmail rescan semaphor file
- char alnk_help[MAXFILE+MAXEXT]; // AreaLink help text
- char maint_help[MAXFILE+MAXEXT]; // Alnk Remote Maint. Helptext
- char new_areas[MAXFILE+MAXEXT]; // name of file for new areas
- char dflt_origin[MAXORIGIN]; // default origin line
- bit rtnrecpt:1; // True if to send rtn recpt
- bit del_empty_msg:1; // delete empty netmails (TOSS)
- bit ARCmail06:1; // ARCmail 0.6 compatibility
- bit environment:1; // FroDo or Binkley
- bit auto_add:1; // Auto-add unknown areas
- bit multi_tasking:1; // TRUE if multi-tasking
- bit forward_for:1; // forward PKTs not for us
- bit singleextract:1; // extract 1 bundle at a time
- bit trunc_sent:1; // 1 = Trunc 0 = Delete
- bit keep_alnk_answ:1; // keep arealink answer
- bit prod_names:1; // use the FTSC product list
- bit swap_ems:1; // swap to EMS
- bit swap_ext:1; // swap to extended memory
- bit forward_everything:1; // forward req. not in fwd-lists
- bit direct_video:1; // use direct screen writing
- bit forward_req:1; // Execute forward link req.
- bit rsvd4:8; // reserved
- long last_run; // last run of IUTIL STAT
- byte rsvd5; // reserved
- byte rsvd6; // reserved
- word rsvd7; // reserved
- word max_arcmail_size; // max size of arcmail bundles
- word pwd_expire_days; // days before pwd expr'd
- word max_pkt_size; // max size of pkt to create
- word rsvd8; // reserved
- byte kill_dead; // kill echos without traffic
- byte max_msg_size; // max size of netmail (split)
- byte via_line; // add Via Line to netmails
- byte dupe_ring; // Check for possible d-rings
- byte cpd_check; // circular path detection
- byte pers_mail; // use personal mail feature
- byte unlink_req; // Unlink areas without dlink
- byte keep_alnk_req; // keep arealink request
- byte log_level; // logging level
- char no_import[MAXNOIMPT][38]; // ignore when importing
- struct fwd_link fwd[MAXFWDLINK]; // forward link requests
- long max_dupes; // max dupes kept in database
- long false_dupes; // false dupes found
- char filler[242]; // reserved
- } im_config_type;
-
- /* --- Note ----------------------------------------------------
-
- The information about the badmail-area, the dupe-area
- and the personalmail-area has been moved to IMAIL.AR,
- see there for detailed information.
-
- ------------------------------------------------------------- */
-
- /*
- *
- * IMAIL.AR Structure
- *
- */
-
- typedef struct areas_record_type {
- char aname[MAXTAG]; // area name
- char comment[61]; // area comment
- char origin[MAXORIGIN]; // origin line to use
- char group; // area group
- char o_addr; // address for origin
- char use_akas[MAXAKAS]; // addresses for seen-bys
- byte msg_base_type; // message base type
- byte brd; // board number
- char msg_path[MAXPATH]; // MSG/Squish path
- bit active:1; // flag area active
- bit zone_gate:1; // Zone-gate stripping
- bit tiny_seen:1; // tiny seen-by flag
- bit secure:1; // secure flag
- bit keep_seen:1; // keep seen-by flag
- bit deleted:1; // flag deleted area
- bit auto_added:1; // flag auto-added record
- bit mandatory:1; // area is mandatory
- bit read_only:1; // area is read only
- bit unlinked:1; // area has been unlinked
- bit ulnk_req:1; // perform unlinked requests?
- bit hidden:1; // area is hidden
- bit to_link:1; // should by processed by LINK
- bit rsvd:3; // reserved
- byte iutil_bits; // bits for IUTIL
- byte user_bits; // 8 user-available bits
- byte days; // days to keep messages
- word msgs; // num messages to keep
- struct im_stats t_stats; // TOSS stats
- struct im_stats s_stats; // SCAN stats
- struct im_stats d_stats; // dupe statistics
- time_t creation; // date/time of creation
- time_t update; // last update by STAT
- time_t marked; // used by IUTIL
- char filler[10];
- struct eaddress export[MAXEXPORT]; // export list
- } areas_record_type;
-
- /* --- Notes --------------------------------------------------
-
- 1) The entries in 'o_addr' and 'use_akas' are indexes into
- the list of AKAs in IMAIL.CF, minus 1. eg:
- im_config.aka[o_addr-1]
- A value of 0 means 'no address'
- 2) the 'user_bits' entry allows third-part software to store
- extra information in IMAIL.AR. Their meaning is program-
- specific, so be careful when making use of them!
-
- 3) IMAIL.AR knows three predefined areatags:
-
- BADMAIL for the IMAIL badmail area,
- DUPES for the IMAIL dupe area and
- PERSMAIL for the IMAIL personal mail area.
-
- All three boards are treated as local areas and
- the BADMAIL area must be present and non-passthru
- otherwise IMAIL will not run.
-
- ------------------------------------------------------------- */
-
-
- /*
- *
- * IMAIL.AX & IMAIL.BX Structures
- *
- */
-
- /* --- Notes ---------------------------------------------------
-
- 1) These are "true" index files, created by BTree routines;
- they cannot be used unless you have the BTree source
- code as implemented in IMAIL.
-
- ------------------------------------------------------------- */
-
- /*
- *
- * IMAIL.ND Structure
- *
- */
-
- typedef struct node_record_type {
- struct naddress dstn; // Node to pack for
- char sysop[MAXNAME]; // name of sysop
- char domain; // index to domain
- char pwd[21]; // AreaLink password
- char att_status; // Status of file attach msg
- char program; // packer to use ("packers")
- char groups[MAXGROUPS+1]; // groups node can request
- word capability; // capability word for node
- bit allow_remote:1; // allow remote maint.
- bit rsvd1:1; // reserved
- bit auto_cap:1; // TRUE = auto-detect capability
- bit auto_added:1; // record added by IMAIL
- bit newarea_add:1; // auto add to new areas?
- bit newarea_create:1; // create new areas?
- bit rescan_ok:1; // allow node to rescan
- bit notify:1; // Send notify messages?
- bit rsvd1:2; // Define security handling
- bit forward_req:1; // Forward ALNK requests?
- bit uplink:1; // Is this system an uplink?
- bit fsc_comp:1; // Is a FSC-0057 arealink used?
- bit change_packer:1; // system may change packer
- bit rsvd2:2; // reserved bits
- word user_bits; // 16 user-available bits
- char newarea_group; // new areas default group
- char pkt_pwd[9]; // PKT password
- long last_pwd_change; // time ALNK pwd last changed
- char toprogram[11]; // name of area manager
- char msg_status; // Status of Alnk messages
- char filler[8];
- struct node_record_type *next_node;
- struct node_record_type *prev_node;
- } node_record_type;
-
-
- /* --- Notes ---------------------------------------------------
-
- 1) The last 2 fields are not saved to IMAIL.ND
-
- 2) the 'user_bits' entry allows third-part software to store
- extra information in IMAIL.ND. Their meaning is program-
- specific, so be careful when making use of them!
-
- ------------------------------------------------------------- */
-
-
- /*
- *
- * IMAIL.GR Structure
- *
- */
-
- typedef struct group_record_type {
- char grp_desc[27]; // Group description
- byte msg_base_type; // message base type
- char msg_path[MAXPATH]; // MSG/Squish path
- bit active:1; // flag area active
- bit zone_gate:1; // Zone-gate stripping
- bit tiny_seen:1; // tiny seen-by flag
- bit secure:1; // secure flag
- bit keep_seen:1; // keep seen-by flag
- bit mandatory:1; // area is mandatory
- bit read_only:1; // area is read only
- bit ulnk_req:1; // perform unlinked requests?
- bit hidden:1; // area is hidden
- bit rsvd:7; // reserved
- byte days; // days to keep messages
- word msgs; // num messages to keep
- char filler[20]; // reserved
- } group_record_type;
-
-
- /*
- *
- * IMAIL.PR Structure
- *
- */
-
- typedef struct pack_routing_type { // used in pack routing
- struct naddress dst; // pack via this node
- struct naddress nodes[MAXVIA]; // nodes to pack
- struct naddress except[MAXEXCEPT]; // exceptions
- } pack_routing_type;
-
- // Note: In the current implementation, the pack routing has
- // as much records as defined in MAXPACK.
-
- /*
- *
- * IMAIL.PP Structure
- *
- */
-
- typedef struct packers {
- char packname[5];
- char packer[MAXPACKNAME];
- } packers;
-
- typedef struct compression_type {
- packers prg[MAXPACKERS]; // Packer defintions
- char arcunpak[MAXPACKNAME]; // cmd to de-arc .ARC files
- char arjunpak[MAXPACKNAME]; // cmd to de-arc .ARJ files
- char pkpakunpak[MAXPACKNAME]; // cmd to de-arc .PKA files
- char pkzipunpak[MAXPACKNAME]; // cmd to de-arc .ZIP files
- char lharcunpak[MAXPACKNAME]; // cmd to de-arc .LZH files
- char zoounpak[MAXPACKNAME]; // cmd to de-arc .ZOO files
- char pakunpak[MAXPACKNAME]; // cmd to de-arc .PAK files
- char sqzunpak[MAXPACKNAME]; // cmd to de-arc .SQZ files
- char unkunpak[MAXPACKNAME]; // cmd to de-arc unknown files
- } compression_type;
-
-
- /*
- *
- * IMAIL.DP/IMAIL.DP1/IMAIL.DP2 Structure
- *
- */
-
- /* --- Notes ---------------------------------------------------------
-
- 1) The dupe database consists simply of a series of word-sized values,
- which are a 32-bit CRC of (in order) the following data:
- Addressee's name
- Sender's name
- Date
- Subject
- Address and MSGID (if any)
-
- -------------------------------------------------------------------- */
-
-