Annotation of sbbs/src/sbbs3/sbbsdefs.h, revision 1.1

1.1     ! root        1: /* sbbsdefs.h */
        !             2: 
        !             3: /* Synchronet constants, macros, and structure definitions */
        !             4: 
        !             5: /* $Id: sbbsdefs.h,v 1.146 2006/09/25 06:09:37 deuce Exp $ */
        !             6: 
        !             7: /****************************************************************************
        !             8:  * @format.tab-size 4          (Plain Text/Source Code File Header)                    *
        !             9:  * @format.use-tabs true       (see http://www.synchro.net/ptsc_hdr.html)              *
        !            10:  *                                                                                                                                                     *
        !            11:  * Copyright 2006 Rob Swindell - http://www.synchro.net/copyright.html         *
        !            12:  *                                                                                                                                                     *
        !            13:  * This program is free software; you can redistribute it and/or                       *
        !            14:  * modify it under the terms of the GNU General Public License                         *
        !            15:  * as published by the Free Software Foundation; either version 2                      *
        !            16:  * of the License, or (at your option) any later version.                                      *
        !            17:  * See the GNU General Public License for more details: gpl.txt or                     *
        !            18:  * http://www.fsf.org/copyleft/gpl.html                                                                                *
        !            19:  *                                                                                                                                                     *
        !            20:  * Anonymous FTP access to the most recent released source is available at     *
        !            21:  * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net     *
        !            22:  *                                                                                                                                                     *
        !            23:  * Anonymous CVS access to the development source and modification history     *
        !            24:  * is available at cvs.synchro.net:/cvsroot/sbbs, example:                                     *
        !            25:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs login                       *
        !            26:  *     (just hit return, no password is necessary)                                                     *
        !            27:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src                *
        !            28:  *                                                                                                                                                     *
        !            29:  * For Synchronet coding style and modification guidelines, see                                *
        !            30:  * http://www.synchro.net/source.html                                                                          *
        !            31:  *                                                                                                                                                     *
        !            32:  * You are encouraged to submit any modifications (preferably in Unix diff     *
        !            33:  * format) via e-mail to [email protected]                                                                      *
        !            34:  *                                                                                                                                                     *
        !            35:  * Note: If this box doesn't appear square, then you need to fix your tabs.    *
        !            36:  ****************************************************************************/
        !            37: 
        !            38: #ifndef _SBBSDEFS_H
        !            39: #define _SBBSDEFS_H
        !            40: 
        !            41: #include <time.h>
        !            42: 
        !            43: #include "gen_defs.h"  /* uchar, ushort, uint, ulong, etc. */
        !            44: #include "nodedefs.h"  /* node_t */
        !            45: #include "fidodefs.h"  /* fmsghdr_t, fpkthdr_t, FIDO_*, etc. */
        !            46: #include "xpbeep.h"            /* BEEP() */
        !            47: #include "str_list.h"  /* str_list_t */
        !            48: 
        !            49: /*************/
        !            50: /* Constants */
        !            51: /*************/
        !            52: 
        !            53: #define VERSION        "3.14"  /* Version: Major.minor  */
        !            54: #define REVISION       'a'     /* Revision: lowercase letter */
        !            55: #define VERSION_NUM    (31400   + (tolower(REVISION)-'a'))
        !            56: #define VERSION_HEX    (0x31400 + (tolower(REVISION)-'a'))
        !            57: 
        !            58: #define VERSION_NOTICE         "Synchronet BBS for "PLATFORM_DESC\
        !            59:                                                                "  Version " VERSION
        !            60: #define SYNCHRONET_CRC         0x9BCDD162
        !            61: #define COPYRIGHT_NOTICE       "Copyright 2006 Rob Swindell"
        !            62: #define COPYRIGHT_CRC          0xE16A6CC1
        !            63: 
        !            64: #define Y2K_2DIGIT_WINDOW      70
        !            65: 
        !            66: #define FNOPEN_BUF_SIZE                (2*1024)
        !            67: 
        !            68: #define ILLEGAL_FILENAME_CHARS "\\/|<>+[]:=\";,%"
        !            69: 
        !            70: #define BIND_FAILURE_HELP      "!Another application or service may be using this port"
        !            71: #define UNKNOWN_LOAD_ERROR     "Unknown load error - Library mismatch?"
        !            72: 
        !            73: #define        JAVASCRIPT_MAX_BYTES            (8*1024*1024)
        !            74: #define JAVASCRIPT_CONTEXT_STACK       (16*1024)
        !            75: #define JAVASCRIPT_THREAD_STACK                (256*1024)
        !            76: #define JAVASCRIPT_BRANCH_LIMIT                99999999
        !            77: #define JAVASCRIPT_YIELD_INTERVAL      10000
        !            78: #define JAVASCRIPT_GC_INTERVAL         100 
        !            79: 
        !            80: typedef struct {
        !            81:        ulong   counter;
        !            82:        ulong   limit;
        !            83:        ulong   yield_interval;
        !            84:        ulong   gc_interval;
        !            85:        ulong   gc_attempts;
        !            86:        BOOL    auto_terminate;
        !            87:        BOOL*   terminated;
        !            88:        str_list_t      exit_func;
        !            89: } js_branch_t;
        !            90: 
        !            91: #define JSVAL_NULL_OR_VOID(val)                (JSVAL_IS_NULL(val) || JSVAL_IS_VOID(val))
        !            92: 
        !            93: /************/
        !            94: /* Maximums */
        !            95: /************/
        !            96: 
        !            97: #define MAX_NODES              250
        !            98: 
        !            99: #define MAX_FILES        10000 /* Maximum number of files per dir                      */
        !           100: #define MAX_USERXFER   500 /* Maximum number of dest. users of usrxfer */
        !           101: 
        !           102: 
        !           103: #define LEN_DIR                63              /* Maximum length of directory paths            */
        !           104: #define LEN_CMD                63              /* Maximum length of command lines                      */
        !           105: 
        !           106:                                                        /* MS-DOS limited values                                        */
        !           107: #define LEN_CODE       8               /* Maximum length of internal codes                     */
        !           108: #define LEN_QWKID      8               /* Maximum length of QWK-ID                                     */
        !           109: #define LEN_MODNAME 8          /* Maximum length of loadable module name       */
        !           110: #define LEN_SIFNAME 8          /* Maximum length of SIF filename                       */
        !           111: #define LEN_EXTCODE (LEN_CODE*2)       /* Code prefix + suffix */
        !           112: 
        !           113:                                                        /* Lengths of various strings                           */
        !           114: #define LEN_GSNAME     15              /* Group/Lib short name                                         */
        !           115: #define LEN_GLNAME     40              /* Group/Lib long name                                          */
        !           116: #define LEN_SSNAME     25              /* Sub/Dir short name                                           */
        !           117: #define LEN_SLNAME     40              /* Sub/Dir long name                                            */
        !           118:                                                
        !           119:                                                                        /* User Questions                                               */
        !           120: #define UQ_ALIASES             (1L<<0)         /* Ask for alias                                                */
        !           121: #define UQ_LOCATION            (1L<<1)         /* Ask for location                                     */
        !           122: #define UQ_ADDRESS             (1L<<2)         /* Ask for address                                              */
        !           123: #define UQ_PHONE               (1L<<3)         /* Ask for phone number                                 */
        !           124: #define UQ_HANDLE              (1L<<4)         /* Ask for chat handle                                  */
        !           125: #define UQ_DUPHAND             (1L<<5)         /* Search for duplicate handles                 */
        !           126: #define UQ_SEX                 (1L<<6)         /* Ask for sex :)                                               */
        !           127: #define UQ_BIRTH               (1L<<7)         /* Ask for birth date                                   */
        !           128: #define UQ_COMP                (1L<<8)         /* Ask for computer type                                */
        !           129: #define UQ_MC_COMP             (1L<<9)         /* Multiple choice computer type                */
        !           130: #define UQ_REALNAME            (1L<<10)        /* Ask for real name                                    */
        !           131: #define UQ_DUPREAL             (1L<<11)        /* Search for duplicate real names              */
        !           132: #define UQ_COMPANY             (1L<<12)        /* Ask for company name                                 */
        !           133: #define UQ_NOEXASC             (1L<<13)        /* Don't allow ex-ASCII in user text    */
        !           134: #define UQ_CMDSHELL            (1L<<14)        /* Ask for command shell                                */
        !           135: #define UQ_XEDIT               (1L<<15)        /* Ask for external editor                              */
        !           136: #define UQ_NODEF               (1L<<16)        /* Don't ask for default settings       */
        !           137: #define UQ_NOCOMMAS            (1L<<17)        /* Do not require commas in location    */
        !           138: #define UQ_NONETMAIL   (1L<<18)        /* Don't ask for e-mail/netmail address */
        !           139: #define UQ_NOUPRLWR            (1L<<19)        /* Don't force upper/lower case strings */
        !           140:                                                
        !           141:                                                
        !           142:                                                                        /* Different bits in sys_misc                           */
        !           143: #define SM_CLOSED              (1L<<0)         /* System is clsoed to New Users                        */
        !           144: #define SM_SYSSTAT             (1L<<1)         /* Sysops activity included in statistics       */
        !           145: #define SM_NOSYSINFO   (1L<<2)         /* Suppress system info display at logon        */
        !           146: #define SM_PWEDIT              (1L<<3)         /* Allow users to change their passwords        */
        !           147: #define SM_RA_EMU              (1L<<4)         /* Reverse R/A commands at msg read prompt      */
        !           148: #define SM_ANON_EM             (1L<<5)         /* Allow anonymous e-mail                                       */
        !           149: #define SM_LISTLOC             (1L<<6)         /* Use location of caller in user lists         */
        !           150: #define SM_WILDCAT             (1L<<7)         /* Expand Wildcat color codes in messages       */
        !           151: #define SM_PCBOARD             (1L<<8)         /* Expand PCBoard color codes in messages       */
        !           152: #define SM_WWIV                (1L<<9)         /* Expand WWIV color codes in messages          */
        !           153: #define SM_CELERITY            (1L<<10)        /* Expand Celerity color codes in messages      */
        !           154: #define SM_RENEGADE            (1L<<11)        /* Expand Renegade color codes in messages      */
        !           155: #define SM_ECHO_PW             (1L<<12)        /* Echo passwords locally                                       */
        !           156: #define SM_LOCAL_TZ            (1L<<13)        /* Use local timezone representations           */
        !           157: #define SM_AUTO_DST            (1L<<14)        /* Automatic Daylight Savings Toggle (US)   */
        !           158: #define SM_R_SYSOP             (1L<<15)        /* Allow remote sysop logon/commands            */
        !           159: #define SM_QUOTE_EM            (1L<<16)        /* Allow quoting of e-mail                                      */
        !           160: #define SM_EURODATE            (1L<<17)        /* Europian date format (DD/MM/YY)                      */
        !           161: #define SM_MILITARY            (1L<<18)        /* Military time format                                         */
        !           162: #define SM_TIMEBANK            (1L<<19)        /* Allow time bank functions                            */
        !           163: #define SM_FILE_EM             (1L<<20)        /* Allow file attachments in E-mail             */
        !           164: #define SM_SHRTPAGE            (1L<<21)        /* Short sysop page                                             */
        !           165: #define SM_TIME_EXP            (1L<<22)        /* Set to expired values if out-of-time         */
        !           166: #define SM_FASTMAIL            (1L<<23)        /* Fast e-mail storage mode                             */
        !           167: #define SM_NONODELIST  (1L<<24)        /* Suppress active node list during logon       */
        !           168: #define SM_ERRALARM            (1L<<25)        /* Error beeps on                                                       */
        !           169: #define SM_FWDTONET            (1L<<26)        /* Allow forwarding of e-mail to netmail        */
        !           170: #define SM_DELREADM            (1L<<27)        /* Delete read mail automatically                       */
        !           171: #define SM_NOCDTCVT            (1L<<28)        /* No credit to minute conversions allowed      */
        !           172: #define SM_DELEMAIL            (1L<<29)        /* Physically remove deleted e-mail immed.      */
        !           173: #define SM_USRVDELM            (1L<<30)        /* Users can see deleted msgs                           */
        !           174: #define SM_SYSVDELM            (1L<<31)        /* Sysops can see deleted msgs                          */
        !           175:                                                
        !           176:                                                                        /* Different bits in node_misc                          */
        !           177: #define NM_NO_NUM              (1<<8)          /* Don't allow logons by user number        */
        !           178: #define NM_LOGON_R             (1<<9)          /* Allow logons by user real name                       */
        !           179: #define NM_LOGON_P             (1<<10)         /* Secure logons (always ask for password)      */
        !           180: #define NM_LOWPRIO             (1<<15)         /* Always use low priority input                        */
        !           181: #define NM_7BITONLY            (1L<<16)        /* Except 7-bit input only (E71 terminals)      */
        !           182: #define NM_NOPAUSESPIN (1L<<18)        /* No spinning cursor at pause prompt           */
        !           183: #define NM_CLOSENODEDAB        (1L<<19)        /* Keep node.dab file closed (for Samba)        */
        !           184: 
        !           185:                                                                        /* Miscellaneous Modem Settings (mdm_misc)  */
        !           186: #define MDM_CTS                (1<<0)          /* Use hardware send flow control                       */
        !           187: #define MDM_RTS                (1<<1)          /* Use hardware recv flow control                       */
        !           188: #define MDM_STAYHIGH   (1<<2)          /* Stay at highest DTE rate                             */
        !           189: #define MDM_CALLERID   (1<<3)          /* Supports Caller ID                                           */
        !           190: #define MDM_DUMB               (1<<4)          /* Just watch DCD for answer - dumb modem       */
        !           191: #define MDM_NODTR              (1<<5)          /* Don't drop DTR for hang-up               */
        !           192: #define MDM_KNOWNRES   (1<<6)          /* Allow known result codes only                        */
        !           193: #define MDM_VERBAL             (1<<7)          /* Use verbal result codes                                      */
        !           194: 
        !           195:                                                
        !           196:                                                                        /* Bit values for level_misc[x]         */
        !           197: #define LEVEL_EXPTOLVL (1<<0)          /* Expire to level_expireto[x]          */
        !           198: #define LEVEL_EXPTOVAL (1<<1)          /* Expire to val[level_expireto[x]] */
        !           199: 
        !           200:                                                                        /* Bit values for prot[x].misc */
        !           201: #define PROT_DSZLOG            (1<<0)      /* Supports DSZ Log */
        !           202: #define PROT_NATIVE            (1<<1)          /* Native (32-bit) executable */
        !           203: #define PROT_SOCKET            (1<<2)          /* Use socket I/O, not stdio on *nix */
        !           204: 
        !           205:                                                                        /* Bit values in netmail_misc */
        !           206: 
        !           207: #define NMAIL_ALLOW    (1<<0)          /* Allow NetMail */
        !           208: #define NMAIL_CRASH    (1<<1)          /* Default netmail to crash */
        !           209: #define NMAIL_HOLD             (1<<2)          /* Default netmail to hold */
        !           210: #define NMAIL_KILL             (1<<3)          /* Default netmail to kill after sent */
        !           211: #define NMAIL_ALIAS    (1<<4)          /* Use Aliases in NetMail */
        !           212: #define NMAIL_FILE             (1<<5)          /* Allow file attachments */
        !           213: #define NMAIL_DIRECT   (1<<6)          /* Default netmail to direct */
        !           214: 
        !           215:                                                                        /* Bit values for subscan_t.cfg and sav_cfg     */
        !           216: #define SUB_CFG_NSCAN  0x0005          /* Auto-scan for new messages                           */
        !           217: #define SUB_CFG_SSCAN  0x0002          /* Auto-scan for unread messages to you         */
        !           218: #define SUB_CFG_YSCAN  0x0100          /* Auto-scan for new messages to you only       */
        !           219:                                                                        /* (bits 8-15 default to off)                           */
        !           220: 
        !           221:                                                                        /* Bit values for sub[x].misc */
        !           222: #define SUB_QNET               (1L<<3)         /* Sub-board is netted via QWK network */
        !           223: #define SUB_PNET               (1L<<4)         /* Sub-board is netted via PostLink */
        !           224: #define SUB_FIDO               (1L<<5)         /* Sub-board is netted via FidoNet */
        !           225: #define SUB_PRIV               (1L<<6)         /* Allow private posts on sub */
        !           226: #define SUB_PONLY              (1L<<7)         /* Private posts only */
        !           227: #define SUB_ANON               (1L<<8)         /* Allow anonymous posts on sub */
        !           228: #define SUB_AONLY              (1L<<9)         /* Anonymous only */
        !           229: #define SUB_NAME               (1L<<10)        /* Must use real names */
        !           230: #define SUB_DEL                (1L<<11)        /* Allow users to delete messages */
        !           231: #define SUB_DELLAST            (1L<<12)        /* Allow users to delete last msg only */
        !           232: #define SUB_FORCED             (1L<<13)        /* Sub-board is forced scanning */
        !           233: #define SUB_NOTAG              (1L<<14)        /* Don't add tag or origin lines */
        !           234: #define SUB_TOUSER             (1L<<15)        /* Prompt for to user on posts */
        !           235: #define SUB_ASCII              (1L<<16)        /* ASCII characters only */
        !           236: #define SUB_QUOTE              (1L<<17)        /* Allow online quoting */
        !           237: #define SUB_NSDEF              (1L<<18)        /* New-Scan on by default */
        !           238: #define SUB_INET               (1L<<19)        /* Sub-board is netted via Internet */
        !           239: #define SUB_FAST               (1L<<20)        /* Fast storage mode */
        !           240: #define SUB_KILL               (1L<<21)        /* Kill read messages automatically */
        !           241: #define SUB_KILLP              (1L<<22)        /* Kill read pvt messages automatically */
        !           242: #define SUB_SYSPERM            (1L<<23)        /* Sysop messages are permament */
        !           243: #define SUB_GATE               (1L<<24)        /* Gateway between Network types */
        !           244: #define SUB_LZH                (1L<<25)        /* Use LZH compression for msgs */
        !           245: #define SUB_SSDEF              (1L<<26)        /* Default ON for Scan for Your msgs */
        !           246: #define SUB_HYPER              (1L<<27)        /* Hyper allocation */
        !           247: #define SUB_EDIT               (1L<<28)        /* Users can edit message text after posting */
        !           248: #define SUB_EDITLAST   (1L<<29)        /* Users can edit last message only */
        !           249: #define SUB_NOUSERSIG  (1L<<30)        /* Suppress user signatures */
        !           250: #define SUB_HDRMOD             (1L<<31)        /* Modified sub-board header info (SCFG) */
        !           251: 
        !           252:                                     /* Bit values for dir[x].misc */
        !           253: #define DIR_FCHK       (1<<0)                  /* Check for file existance */
        !           254: #define DIR_RATE       (1<<1)                  /* Force uploads to be rated G,R, or X */
        !           255: #define DIR_MULT       (1<<2)                  /* Ask for multi-disk numbering */
        !           256: #define DIR_DUPES      (1<<3)                  /* Search this dir for upload dupes */
        !           257: #define DIR_FREE       (1<<4)                  /* Free downloads */
        !           258: #define DIR_TFREE      (1<<5)                  /* Time to download is free */
        !           259: #define DIR_CDTUL      (1<<6)                  /* Credit Uploads */
        !           260: #define DIR_CDTDL      (1<<7)                  /* Credit Downloads */
        !           261: #define DIR_ANON       (1<<8)                  /* Anonymous uploads */
        !           262: #define DIR_AONLY      (1<<9)                  /* Anonymous only */
        !           263: #define DIR_ULDATE     (1<<10)                 /* Include upload date in listing */
        !           264: #define DIR_DIZ        (1<<11)                 /* FILE_ID.DIZ and DESC.SDI support */
        !           265: #define DIR_NOSCAN     (1<<12)                 /* Don't new-scan this directory */
        !           266: #define DIR_NOAUTO     (1<<13)                 /* Don't auto-add this directory */
        !           267: #define DIR_ULTIME     (1<<14)                 /* Deduct time during uploads */
        !           268: #define DIR_CDTMIN     (1<<15)                 /* Give uploader minutes instead of cdt */
        !           269: #define DIR_SINCEDL (1<<16)                    /* Purge based on days since last dl */
        !           270: #define DIR_MOVENEW (1<<17)                    /* Files marked as new when moved */
        !           271: #define DIR_QUIET      (1<<18)                 /* Do not notify uploader of downloads */
        !           272: #define DIR_NOSTAT     (1<<19)                 /* Do not include transfers in system stats */
        !           273: 
        !           274:                                     /* Bit values for file_t.misc */
        !           275: #define FM_EXTDESC  (1<<0)          /* Extended description exists */
        !           276: #define FM_ANON        (1<<1)                  /* Anonymous upload */
        !           277: 
        !           278:                                                                        /* Bit values for cfg.file_misc                         */
        !           279: #define FM_NO_LFN      (1<<0)                  /* No long filenames in listings                        */
        !           280: 
        !           281:                                                                        /* Bit values for cfg.msg_misc                          */
        !           282: #define MM_REALNAME    (1<<16)                 /* Allow receipt of e-mail using real names     */
        !           283: 
        !           284:                                                                        /* errormsg() codes */
        !           285: #define ERR_OPEN       "opening"               /* opening a file */
        !           286: #define ERR_CLOSE      "closing"               /* close a file */
        !           287: #define ERR_FDOPEN     "fdopen"                /* associating a stream with fd */
        !           288: #define ERR_READ       "reading"               /* reading from file */
        !           289: #define ERR_WRITE      "writing"               /* writing to file */
        !           290: #define ERR_REMOVE     "removing"              /* removing a file */
        !           291: #define ERR_ALLOC      "allocating"    /* allocating memory */
        !           292: #define ERR_CHK                "checking"              /* checking */
        !           293: #define ERR_LEN                "checking length"
        !           294: #define ERR_EXEC       "executing"             /* executing */
        !           295: #define ERR_CREATE     "creating"              /* creating */
        !           296: #define ERR_LOCK       "locking"               /* locking */
        !           297: #define ERR_UNLOCK     "unlocking"             /* unlocking */
        !           298: #define ERR_TIMEOUT    "timeout"               /* timeout waiting for resource */      
        !           299: #define ERR_IOCTL      "sending IOCTL" /* IOCTL error */
        !           300: #define ERR_SEEK       "seeking"               /* SEEKing error */
        !           301: 
        !           302: enum {                              /* Values for dir[x].sort */
        !           303:      SORT_NAME_A                    /* Sort by filename, ascending */
        !           304:     ,SORT_NAME_D                    /* Sort by filename, descending */
        !           305:     ,SORT_DATE_A                    /* Sort by upload date, ascending */
        !           306:     ,SORT_DATE_D                    /* Sort by upload date, descending */
        !           307:     };
        !           308: 
        !           309: enum {
        !           310:         clr_mnehigh
        !           311:        ,clr_mnelow
        !           312:        ,clr_mnecmd
        !           313:        ,clr_inputline
        !           314:        ,clr_err
        !           315:        ,clr_nodenum
        !           316:        ,clr_nodeuser
        !           317:        ,clr_nodestatus
        !           318:        ,clr_filename
        !           319:        ,clr_filecdt
        !           320:        ,clr_filedesc
        !           321:        ,clr_filelsthdrbox
        !           322:        ,clr_filelstline
        !           323:        ,clr_chatlocal
        !           324:        ,clr_chatremote
        !           325:        ,clr_multichat
        !           326:        ,clr_external
        !           327:        ,MIN_COLORS 
        !           328: };
        !           329: 
        !           330: enum {                                                         /* Values for xtrn_t.type                               */
        !           331:         XTRN_NONE                                              /* No data file needed                                  */
        !           332:        ,XTRN_SBBS                                              /* Synchronet external                                  */
        !           333:        ,XTRN_WWIV                                              /* WWIV external                                                */
        !           334:        ,XTRN_GAP                                               /* Gap door                                                     */
        !           335:        ,XTRN_RBBS                                              /* RBBS, QBBS, or Remote Access                 */
        !           336:        ,XTRN_WILDCAT                                   /* Wildcat                                                              */
        !           337:        ,XTRN_PCBOARD                                   /* PCBoard                                                              */
        !           338:        ,XTRN_SPITFIRE                                  /* SpitFire                                                     */
        !           339:        ,XTRN_UTI                                               /* UTI Doors - MegaMail                                 */
        !           340:        ,XTRN_SR                                                /* Solar Realms                                                 */
        !           341:        ,XTRN_RBBS1                                     /* DORINFO1.DEF always                                  */
        !           342:        ,XTRN_TRIBBS                                    /* TRIBBS.SYS                                                   */
        !           343:        ,XTRN_DOOR32                                    /* DOOR32.SYS                                                   */
        !           344:        };                                                                                                                                              
        !           345:                                                                                                                                                        
        !           346: typedef enum {                                         /* Values for xtrn_t.event                              */
        !           347:         EVENT_NONE                                     /* Only accessible by menu                              */
        !           348:        ,EVENT_LOGON                                    /* Execute during logon sequence                */
        !           349:        ,EVENT_LOGOFF                                   /* Execute during logoff sequence               */
        !           350:        ,EVENT_NEWUSER                                  /* Execute during newuser app.                  */
        !           351:        ,EVENT_BIRTHDAY                                 /* Execute on birthday                                  */
        !           352:        ,EVENT_POST                                             /* Execute after posting a message              */
        !           353:        ,EVENT_UPLOAD                                   /* Execute after uploading a file               */
        !           354:        ,EVENT_DOWNLOAD                                 /* Execute after downloading a file             */
        !           355: } user_event_t;                                                                                                                                
        !           356:                                                                                                                                                        
        !           357:                                                                        /* Misc bits for event_t.misc                   */
        !           358: #define EVENT_EXCL             (1<<0)          /* Exclusive                                                    */
        !           359: #define EVENT_FORCE            (1<<1)          /* Force users off-line for event               */
        !           360: #define EVENT_INIT             (1<<2)          /* Always run event after init                  */
        !           361: #define EVENT_DISABLED (1<<3)          /* Disabled                                                             */
        !           362:                                                                                                                                                        
        !           363:                                                                        /* Mode bits for QWK stuff */                   
        !           364: #define A_EXPAND               (1<<0)          /* Expand to ANSI sequences */                  
        !           365: #define A_LEAVE                (1<<1)          /* Leave in */                                                  
        !           366: #define A_STRIP                (1<<2)          /* Strip out */                                                 
        !           367:                                                                                                                                                        
        !           368:                                                                        /* Bits in xtrn_t.misc                                  */
        !           369: #define MULTIUSER              (1<<0)          /* allow multi simultaneous users               */
        !           370: #define XTRN_ANSI              (1<<1)          /* user must have ANSI, same as ^^^             */
        !           371: #define IO_INTS                (1<<2)          /* Intercept I/O interrupts                     */
        !           372: #define MODUSERDAT             (1<<3)          /* Program can modify user data                 */
        !           373: #define WWIVCOLOR              (1<<4)          /* Program uses WWIV color codes                */
        !           374: #define EVENTONLY              (1<<5)          /* Program executes as event only               */
        !           375: #define STARTUPDIR             (1<<6)          /* Create drop file in start-up dir             */
        !           376: #define REALNAME               (1<<7)          /* Use real name in drop file                   */
        !           377: #define SWAP                   (1<<8)          /* Swap for this door                                   */
        !           378: #define FREETIME               (1<<9)          /* Free time while in this door                 */
        !           379: #define QUICKBBS               (1<<10)         /* QuickBBS style editor                                */
        !           380: #define EXPANDLF               (1<<11)         /* Expand LF to CRLF editor                     */
        !           381: #define QUOTEALL               (1<<12)         /* Automatically quote all of msg               */
        !           382: #define QUOTENONE              (1<<13)         /* Automatically quote none of msg              */
        !           383: #define XTRN_NATIVE            (1<<14)         /* Native application (EX_NATIVE)               */
        !           384: #define STRIPKLUDGE            (1<<15)         /* Strip FTN Kludge lines from msg              */
        !           385: #define XTRN_CHKTIME   (1<<16)         /* Check time online (EX_CHKTIME)               */
        !           386: #define XTRN_LWRCASE   (1<<17)         /* Use lowercase drop-file names                */
        !           387: #define XTRN_SH                        (1<<18)         /* Use command shell to execute                 */
        !           388: #define XTRN_PAUSE             (1<<19)         /* Force a screen pause on exit                 */
        !           389: #define XTRN_NOECHO            (1<<20)         /* Don't echo stdin to stdout                   */
        !           390: 
        !           391:                                                                        /* Bits in cfg.xtrn_misc                                */
        !           392: #define XTRN_NO_MUTEX  (1<<0)          /* Do not use exec_mutex for FOSSIL VXD */
        !           393: 
        !           394:                                                                        /* Bits in user.qwk                                     */
        !           395: #define QWK_FILES      (1L<<0)                 /* Include new files list                               */
        !           396: #define QWK_EMAIL      (1L<<1)                 /* Include unread e-mail                                */
        !           397: #define QWK_ALLMAIL (1L<<2)            /* Include ALL e-mail                                   */
        !           398: #define QWK_DELMAIL (1L<<3)            /* Delete e-mail after download                 */
        !           399: #define QWK_BYSELF     (1L<<4)                 /* Include messages from self                   */
        !           400: #define QWK_UNUSED     (1L<<5)                 /* Currently unused                                     */
        !           401: #define QWK_EXPCTLA (1L<<6)            /* Expand ctrl-a codes to ascii                 */
        !           402: #define QWK_RETCTLA (1L<<7)            /* Retain ctrl-a codes                                  */
        !           403: #define QWK_ATTACH     (1L<<8)                 /* Include file attachments                     */
        !           404: #define QWK_NOINDEX (1L<<9)            /* Do not create index files in QWK             */
        !           405: #define QWK_TZ         (1L<<10)                /* Include "@TZ" time zone in msgs              */
        !           406: #define QWK_VIA        (1L<<11)                /* Include "@VIA" seen-bys in msgs              */
        !           407: #define QWK_NOCTRL     (1L<<12)                /* No extraneous control files                  */
        !           408: #define QWK_EXT                (1L<<13)                /* QWK Extended (QWKE) format                   */
        !           409: #define QWK_MSGID      (1L<<14)                /* Include "@MSGID" in msgs                             */
        !           410: 
        !           411: #define QWK_DEFAULT    (QWK_FILES|QWK_ATTACH|QWK_EMAIL|QWK_DELMAIL)
        !           412:                                                                                                                                                        
        !           413:                                                        /* Bits in user.chat                                                    */
        !           414: #define CHAT_ECHO      (1<<0)  /* Multinode chat echo                                                  */
        !           415: #define CHAT_ACTION (1<<1)     /* Chat actions                                                                 */
        !           416: #define CHAT_NOPAGE (1<<2)     /* Can't be paged                                                               */
        !           417: #define CHAT_NOACT     (1<<3)  /* No activity alerts                                                   */
        !           418: #define CHAT_SPLITP (1<<4)     /* Split screen private chat                                    */
        !           419:                                                                                                                                                        
        !           420:                                                                                                                                                        
        !           421: #define INVALID_DIR 0xffff     /* Invalid directory value                                              */
        !           422: #define INVALID_SUB 0xffff     /* Invalid sub-board value                                              */
        !           423:                                                                                                                                                        
        !           424: #define KEY_BUFSIZE 1024       /* Size of keyboard input buffer                                */
        !           425: #define SAVE_LINES      4              /* Maximum number of lines to save                              */
        !           426: #define LINE_BUFSIZE 512       /* Size of line output buffer                                   */
        !           427:                                                                                                                                                        
        !           428:                                                                                                                                                        
        !           429: #define EDIT_TABSIZE 4         /* Tab size for internal message/line editor    */
        !           430:                                                                                                                                                        
        !           431: #define SWAP_NONE      0x80    /* Allow no swapping for executables                    */
        !           432:                                                                                                                                                        
        !           433: #define DSTSDABLEN     50              /* Length of dsts.dab file                                              */
        !           434:                                                                                                                                                        
        !           435:                                                                /* Console I/O Bits     (console)                               */
        !           436: #define CON_R_ECHO             (1<<0)  /* Echo remotely                                                        */
        !           437: #define CON_R_ECHOX            (1<<1)  /* Echo X's to remote user                                      */
        !           438: #define CON_R_INPUT            (1<<2)  /* Accept input remotely                                        */
        !           439: #define CON_L_ECHO             (1<<3)  /* Echo locally                                         */
        !           440: #define CON_L_ECHOX            (1<<4)  /* Echo X's locally                                                     */
        !           441: #define CON_L_INPUT            (1<<5)  /* Accept input locally                                         */
        !           442: #define CON_RAW_IN             (1<<8)  /* Raw input mode - no editing capabilities     */
        !           443: #define CON_ECHO_OFF   (1<<10) /* Remote & Local echo disabled for ML/MF       */
        !           444: #define CON_UPARROW            (1<<11) /* Up arrow hit - move up one line                      */
        !           445: #define CON_DOWNARROW  (1<<12) /* Down arrow hit, exiting from getstr()        */
        !           446: #define CON_NO_INACT   (1<<13) /* Console inactivity detection disabled        */
        !           447: #define CON_BACKSPACE  (1<<14) /* Backspace hit, exiting from getstr()         */
        !           448: #define CON_LEFTARROW  (1<<15) /* Left arrow hit, exiting from getstr()        */
        !           449: #define CON_INSERT             (1<<16) /* Insert mode, for getstr()                            */
        !           450: #define CON_DELETELINE (1<<17) /* Deleted line, exiting from getstr()          */
        !           451:                                                                                                                                                        
        !           452:                                                        /* Number of milliseconds                                               */
        !           453: #define DELAY_AUTOHG 1500      /* Delay for auto-hangup (xfer)                                 */
        !           454:                                                                                                                                                        
        !           455: #define SEC_LOGON      1800    /* 30 minutes allowed to logon                                  */
        !           456: #define SEC_BILLING   90       /* under 2 minutes per billing call                     */
        !           457: #define SEC_OK            5    /* Attempt to get an OK response from modem             */
        !           458: #define SEC_ANSI          5    /* Attempt to get a valid ANSI response                 */
        !           459: #define SEC_ANSWER       30    /* Retries to get an answer code from modem             */
        !           460: #define SEC_CID          10    /* Ten second pause for caller ID                               */
        !           461: #define SEC_RING          6    /* Maximum seconds between rings                                */
        !           462:                                                                                                                                                        
        !           463: #define LOOP_NOPEN       50    /* Retries before file access denied                    */
        !           464: #define LOOP_NODEDAB  50       /* Retries on node.dab locking/unlocking                */
        !           465:                                                                                                                                                        
        !           466:                                                        /* String lengths                                                               */
        !           467: #define LEN_ALIAS              25      /* User alias                                                                   */
        !           468: #define LEN_NAME               25      /* User name                                                                    */
        !           469: #define LEN_HANDLE             8       /* User chat handle                                                     */
        !           470: #define LEN_NOTE               30      /* User note                                                                    */
        !           471: #define LEN_COMP               30      /* User computer description                                    */
        !           472: #define LEN_COMMENT    60      /* User comment                                                                 */
        !           473: #define LEN_NETMAIL    60      /* NetMail forwarding address                                   */
        !           474: #define LEN_PASS                8      /* User password                                                                */
        !           475: #define LEN_PHONE              12      /* User phone number                                                    */
        !           476: #define LEN_BIRTH               8      /* Birthday in MM/DD/YY format                                  */
        !           477: #define LEN_ADDRESS    30      /* User address                                                                 */
        !           478: #define LEN_LOCATION   30      /* Location (City, State)                                               */
        !           479: #define LEN_ZIPCODE    10      /* Zip/Postal code                                                              */
        !           480: #define LEN_MODEM               8      /* User modem type description                                  */
        !           481: #define LEN_FDESC              58      /* File description                                                     */
        !           482: #define LEN_FCDT                9      /* 9 digits for file credit values                              */
        !           483: #define LEN_TITLE              70      /* Message title                                                                */
        !           484: #define LEN_MAIN_CMD   34      /* Storage in user.dat for custom commands              */
        !           485: #define LEN_XFER_CMD   40                                                                                                      
        !           486: #define LEN_SCAN_CMD   40                                                                                                      
        !           487: #define LEN_MAIL_CMD   40                                                                                                      
        !           488: #define LEN_CID                25      /* Caller ID (phone number)                                     */
        !           489: #define LEN_ARSTR              40      /* Max length of Access Requirement string              */
        !           490: #define LEN_CHATACTCMD  9      /* Chat action command                                                  */
        !           491: #define LEN_CHATACTOUT 65      /* Chat action output string                                    */
        !           492: 
        !           493: /****************************************************************************/
        !           494: /* This is a list of offsets into the USER.DAT file for different variables */
        !           495: /* that are stored (for each user)                                                                                     */
        !           496: /****************************************************************************/
        !           497: #define U_ALIAS        0                                       /* Offset to alias */
        !           498: #define U_NAME         U_ALIAS+LEN_ALIAS  /* Offset to name */
        !           499: #define U_HANDLE       U_NAME+LEN_NAME 
        !           500: #define U_NOTE         U_HANDLE+LEN_HANDLE+2 
        !           501: #define U_COMP         U_NOTE+LEN_NOTE 
        !           502: #define U_COMMENT      U_COMP+LEN_COMP+2 
        !           503: 
        !           504: #define U_NETMAIL      U_COMMENT+LEN_COMMENT+2 
        !           505: 
        !           506: #define U_ADDRESS      U_NETMAIL+LEN_NETMAIL+2 
        !           507: #define U_LOCATION     U_ADDRESS+LEN_ADDRESS 
        !           508: #define U_ZIPCODE      U_LOCATION+LEN_LOCATION 
        !           509: 
        !           510: #define U_PASS         U_ZIPCODE+LEN_ZIPCODE+2 
        !           511: #define U_PHONE        U_PASS+8                        /* Offset to phone-number */
        !           512: #define U_BIRTH        U_PHONE+12              /* Offset to users birthday     */
        !           513: #define U_MODEM     U_BIRTH+8 
        !           514: #define U_LASTON       U_MODEM+8 
        !           515: #define U_FIRSTON      U_LASTON+8 
        !           516: #define U_EXPIRE    U_FIRSTON+8 
        !           517: #define U_PWMOD     U_EXPIRE+8 
        !           518: 
        !           519: #define U_LOGONS    U_PWMOD+8+2 
        !           520: #define U_LTODAY    U_LOGONS+5 
        !           521: #define U_TIMEON    U_LTODAY+5 
        !           522: #define U_TEXTRA       U_TIMEON+5 
        !           523: #define U_TTODAY    U_TEXTRA+5 
        !           524: #define U_TLAST     U_TTODAY+5 
        !           525: #define U_POSTS     U_TLAST+5 
        !           526: #define U_EMAILS    U_POSTS+5 
        !           527: #define U_FBACKS    U_EMAILS+5 
        !           528: #define U_ETODAY       U_FBACKS+5 
        !           529: #define U_PTODAY       U_ETODAY+5 
        !           530: 
        !           531: #define U_ULB       U_PTODAY+5+2 
        !           532: #define U_ULS       U_ULB+10 
        !           533: #define U_DLB       U_ULS+5 
        !           534: #define U_DLS       U_DLB+10 
        !           535: #define U_CDT          U_DLS+5 
        !           536: #define U_MIN          U_CDT+10 
        !           537: 
        !           538: #define U_LEVEL        U_MIN+10+2      /* Offset to Security Level    */
        !           539: #define U_FLAGS1       U_LEVEL+2       /* Offset to Flags */
        !           540: #define U_TL           U_FLAGS1+8      /* Offset to unused field */
        !           541: #define U_FLAGS2       U_TL+2 
        !           542: #define U_EXEMPT       U_FLAGS2+8 
        !           543: #define U_REST         U_EXEMPT+8 
        !           544: #define U_ROWS         U_REST+8+2      /* Number of Rows on user's monitor */
        !           545: #define U_SEX          U_ROWS+2                /* Sex, Del, ANSI, color etc.           */
        !           546: #define U_MISC         U_SEX+1                 /* Miscellaneous flags in 8byte hex */
        !           547: #define U_OLDXEDIT     U_MISC+8                /* External editor (Version 1 method  */
        !           548: #define U_LEECH        U_OLDXEDIT+2    /* two hex digits - leech attempt count */
        !           549: #define U_CURSUB       U_LEECH+2       /* Current sub (internal code)  */
        !           550: #define U_CURXTRN      U_CURSUB+16 /* Current xtrn (internal code) */
        !           551: #define U_MAIN_CMD     U_CURXTRN+8+2   /* unused */
        !           552: #define U_XFER_CMD     U_MAIN_CMD+LEN_MAIN_CMD                 /* unused */
        !           553: #define U_SCAN_CMD     U_XFER_CMD+LEN_XFER_CMD+2       /* unused */
        !           554: #define U_MAIL_CMD     U_SCAN_CMD+LEN_SCAN_CMD                 /* unused */
        !           555: #define U_FREECDT      U_MAIL_CMD+LEN_MAIL_CMD+2 
        !           556: #define U_FLAGS3       U_FREECDT+10    /* Flag set #3 */
        !           557: #define U_FLAGS4       U_FLAGS3+8      /* Flag set #4 */
        !           558: #define U_XEDIT        U_FLAGS4+8      /* External editor (code  */
        !           559: #define U_SHELL        U_XEDIT+8       /* Command shell (code  */
        !           560: #define U_QWK          U_SHELL+8       /* QWK settings */
        !           561: #define U_TMPEXT       U_QWK+8                 /* QWK extension */
        !           562: #define U_CHAT         U_TMPEXT+3      /* Chat settings */
        !           563: #define U_NS_TIME      U_CHAT+8                /* New-file scan date/time */
        !           564: #define U_PROT         U_NS_TIME+8     /* Default transfer protocol */
        !           565: #define U_LOGONTIME    U_PROT+1
        !           566: #define U_CURDIR       U_LOGONTIME+8   /* Current dir (internal code  */
        !           567: #define U_UNUSED       U_CURDIR+16
        !           568: #define U_LEN          (U_UNUSED+4+2)
        !           569: 
        !           570: /****************************************************************************/
        !           571: /* Offsets into DIR .DAT file for different fields for each file                       */
        !           572: /****************************************************************************/
        !           573: #define F_CDT          0                               /* Offset in DIR#.DAT file for cdts             */
        !           574: #define F_DESC         (F_CDT+LEN_FCDT)/* Description                                                  */
        !           575: #define F_ULER         (F_DESC+LEN_FDESC+2)   /* Uploader                                              */
        !           576: #define F_TIMESDLED (F_ULER+30+2)      /* Number of times downloaded                   */
        !           577: #define F_OPENCOUNT    (F_TIMESDLED+5+2)                                                                               
        !           578: #define F_MISC         (F_OPENCOUNT+3+2)                                                                               
        !           579: #define F_ALTPATH      (F_MISC+1)              /* Two hex digit alternate path */              
        !           580: #define F_LEN          (F_ALTPATH+2+2) /* Total length of all fdat in file             */
        !           581:                                                                                                                                                        
        !           582: #define F_IXBSIZE      22                              /* Length of each index entry                   */
        !           583:                                                                                                                                                        
        !           584: #define F_EXBSIZE      512                             /* Length of each ext-desc entry                */
        !           585:                                                                                                                                                        
        !           586:                                                                                                                                                        
        !           587: #define SIF_MAXBUF  0x7000                     /* Maximum buffer size of SIF data              */
        !           588:                                                                                                                                                        
        !           589: /* NOTE: Do not change the values of the following block of defines!           */
        !           590:                                                                                                                                                        
        !           591: #define DELETED        (1L<<0)                 /* Bit values for user.misc                     */
        !           592: #define ANSI           (1L<<1)                 /* Supports ANSI terminal emulation             */
        !           593: #define COLOR          (1L<<2)                 /* Send color codes                                     */
        !           594: #define RIP            (1L<<3)                 /* Supports RIP terminal emulation              */
        !           595: #define UPAUSE         (1L<<4)                 /* Pause on every screen full                   */
        !           596: #define SPIN           (1L<<5)                 /* Spinning cursor - Same as K_SPIN             */
        !           597: #define INACTIVE       (1L<<6)                 /* Inactive user slot                                   */
        !           598: #define EXPERT         (1L<<7)                 /* Expert menu mode                                     */
        !           599: #define ANFSCAN        (1L<<8)                 /* Auto New file scan                                   */
        !           600: #define CLRSCRN        (1L<<9)                 /* Clear screen before each message             */
        !           601: #define QUIET          (1L<<10)                /* Quiet mode upon logon                                */
        !           602: #define BATCHFLAG      (1L<<11)                /* File list allow batch dl flags               */
        !           603: #define NETMAIL        (1L<<12)                /* Forward e-mail to fidonet addr               */
        !           604: #define CURSUB         (1L<<13)                /* Remember current sub-board/dir               */
        !           605: #define ASK_NSCAN      (1L<<14)                /* Ask for newscanning upon logon               */
        !           606: #define NO_EXASCII     (1L<<15)                /* Don't send extended ASCII                    */
        !           607: #define ASK_SSCAN      (1L<<16)                /* Ask for messages to you at logon             */
        !           608: #define AUTOTERM       (1L<<17)                /* Autodetect terminal type                     */
        !           609: #define COLDKEYS       (1L<<18)                /* No hot-keys                                                  */
        !           610: #define EXTDESC        (1L<<19)                /* Extended file descriptions                   */
        !           611: #define AUTOHANG       (1L<<20)                /* Auto-hang-up after transfer                  */
        !           612: #define WIP            (1L<<21)                /* Supports WIP terminal emulation              */
        !           613: #define AUTOLOGON      (1L<<22)                /* AutoLogon via IP                                             */
        !           614: #define HTML           (1L<<23)                /* Using Deuce's HTML terminal                  */
        !           615: #define NOPAUSESPIN    (1L<<24)                /* No spinning cursor at pause prompt   */
        !           616: 
        !           617: #define TERM_FLAGS     (ANSI|COLOR|NO_EXASCII|RIP|WIP|HTML)
        !           618:                                                                                                                                                        
        !           619: #define CLREOL      256     /* Character to erase to end of line                       */
        !           620:                                                                                                                                                        
        !           621:                                                        /* Online status (online)                                               */
        !           622: #define ON_LOCAL       1               /* Online locally                                                               */
        !           623: #define ON_REMOTE   2                  /* Online remotely                                                              */
        !           624:                                                                                                                                                        
        !           625:                                                        /* Various SYSTEM parameters for sys_status             */
        !           626: #define SS_UNUSED      (1L<<0) /* Unused                                                                       */
        !           627: #define SS_INITIAL  (1L<<1)    /* The bbs data has been initialized.                   */
        !           628: #define SS_TMPSYSOP (1L<<2)    /* Temporary Sysop Status                                               */
        !           629: #define SS_USERON   (1L<<3)    /* A User is logged on to the BBS                               */
        !           630: #define SS_LCHAT    (1L<<4) /* Local chat in progress                                          */
        !           631: #define SS_CAP         (1L<<5) /* Capture is on                                                                */
        !           632: #define SS_ANSCAP      (1L<<6) /* Capture ANSI codes too                                               */
        !           633: #define SS_FINPUT      (1L<<7) /* Using file for input                                                 */
        !           634: #define SS_COMISR      (1L<<8) /* Com port ISR is installed                                    */
        !           635: #define SS_DAILY       (1L<<9) /* Execute System Daily Event on logoff                 */
        !           636: #define SS_INUEDIT     (1L<<10) /* Inside Alt-Useredit section                                 */
        !           637: #define SS_ABORT       (1L<<11) /* Global abort input or output flag                   */
        !           638: #define SS_SYSPAGE     (1L<<12) /* Paging sysop                                                                */
        !           639: #define SS_SYSALERT (1L<<13) /* Notify sysop when users hangs up                       */
        !           640: #define SS_GURUCHAT (1L<<14) /* Guru chat in progress                                          */
        !           641: #define SS_UNUSED2     (1L<<15) /* not used in v3 (used to be SS_NODEDAB)              */
        !           642: #define SS_EVENT       (1L<<16) /* Time shortened due to upcoming event                */
        !           643: #define SS_PAUSEON     (1L<<17) /* Pause on, overriding user default                   */
        !           644: #define SS_PAUSEOFF (1L<<18) /* Pause off, overriding user default                     */
        !           645: #define SS_IN_CTRLP (1L<<19) /* Inside ctrl-p send node message func           */
        !           646: #define SS_NEWUSER     (1L<<20) /* New User online                                                     */
        !           647: #define SS_MDMDEBUG (1L<<21) /* Modem debug output                                                     */
        !           648: #define SS_NEST_PF     (1L<<22) /* Nested in printfile function                                */
        !           649: #define SS_DCDHIGH     (1L<<23) /* Assume DCD is high always                                   */
        !           650: #define SS_SPLITP      (1L<<24) /* Split-screen private chat                                   */
        !           651: #define SS_NEWDAY      (1L<<25) /* Date changed while online                                   */
        !           652: #define SS_RLOGIN      (1L<<26) /* Current login via BSD RLogin                                */
        !           653: #define SS_FILEXFER    (1L<<27) /* File transfer in progress, halt spy                 */
        !           654: #define SS_SSH         (1L<<28) /* Current login via SSH                                               */
        !           655: 
        !           656:                                                                /* Bits in 'mode' for getkey and getstr     */
        !           657: #define K_NONE         0                       /* Use as a place holder for no mode flags      */
        !           658: #define K_UPPER        (1L<<0)         /* Converts all letters to upper case           */
        !           659: #define K_UPRLWR       (1L<<1)         /* Upper/Lower case automatically                       */
        !           660: #define K_NUMBER       (1L<<2)         /* Allow numbers only                                           */
        !           661: #define K_WRAP         (1L<<3)         /* Allows word wrap                                             */
        !           662: #define K_MSG          (1L<<4)         /* Allows ANSI, ^N ^A ^G                                        */
        !           663: #define K_SPIN         (1L<<5)         /* Spinning cursor (same as SPIN)                       */
        !           664: #define K_LINE         (1L<<6)         /* Input line (inverse color)                           */
        !           665: #define K_EDIT         (1L<<7)         /* Edit string passed                                           */
        !           666: #define K_CHAT         (1L<<8)         /* In chat multi-chat                                           */
        !           667: #define K_NOCRLF       (1L<<9)         /* Don't print CRLF after string input      */
        !           668: #define K_ALPHA        (1L<<10)        /* Only allow alphabetic characters             */
        !           669: #define K_GETSTR       (1L<<11)        /* getkey called from getstr()                          */
        !           670: #define K_LOWPRIO      (1L<<12)        /* low priority input                                           */
        !           671: #define K_NOEXASC      (1L<<13)        /* No extended ASCII allowed                            */
        !           672: #define K_E71DETECT (1L<<14)   /* Detect E-7-1 terminal type                           */
        !           673: #define K_AUTODEL      (1L<<15)        /* Auto-delete text (used with K_EDIT)          */
        !           674: #define K_COLD         (1L<<16)        /* Possible cold key mode                                       */
        !           675: #define K_NOECHO       (1L<<17)        /* Don't echo input                         */
        !           676: #define K_TAB          (1L<<18)        /* Treat TAB key as CR                                          */
        !           677: #define K_LEFTEXIT     (1L<<19)        /* Allow exit by backspacing/arrowing left      */
        !           678: #define K_USEOFFSET    (1L<<20)        /* Use getstr_offset for cursor position        */
        !           679: #define K_NOSPIN       (1L<<21)        /* Do not honor the user's spinning cursor      */
        !           680: 
        !           681:                                                                /* Bits in 'mode' for putmsg and printfile  */
        !           682: #define P_NOABORT      (1<<0)          /* Disallows abortion of a message          */
        !           683: #define P_SAVEATR   (1<<1)             /* Save the new current attributres after       */
        !           684:                                                                /* msg has printed. */
        !           685: #define P_NOATCODES (1<<2)             /* Don't allow @ codes                      */
        !           686: #define P_OPENCLOSE (1<<3)             /* Open and close the file                                      */
        !           687: #define P_NOPAUSE      (1<<4)          /* Disable screen pause                                         */
        !           688: #define P_HTML         (1<<5)          /* Message is HTML                                                      */
        !           689: #define P_NOCRLF       (1<<6)          /* Don't prepend a CRLF in printfile()          */
        !           690:                                                                
        !           691:                                                                /* Bits in 'mode' for listfiles             */
        !           692: #define FL_ULTIME   (1<<0)             /* List files by upload time                */
        !           693: #define FL_DLTIME   (1<<1)             /* List files by download time              */
        !           694: #define FL_NO_HDR   (1<<2)             /* Don't list directory header              */
        !           695: #define FL_FINDDESC (1<<3)             /* Find text in description                 */
        !           696: #define FL_EXFIND   (1<<4)             /* Find text in description - extended info */
        !           697: #define FL_VIEW     (1<<5)             /* View ZIP/ARC/GIF etc. info               */
        !           698:                                                                
        !           699:                                                                /* Bits in the mode of writemsg and email() */
        !           700: #define WM_EXTDESC     (1<<0)          /* Writing extended file description            */
        !           701: #define WM_EMAIL       (1<<1)          /* Writing e-mail                                                       */
        !           702: #define WM_NETMAIL     (1<<2)          /* Writing NetMail                                                      */
        !           703: #define WM_ANON        (1<<3)          /* Writing anonymous message                            */
        !           704: #define WM_FILE        (1<<4)          /* Attaching a file to the message                      */
        !           705: #define WM_NOTOP       (1<<5)          /* Don't add top because we need top line   */
        !           706: #define WM_QUOTE       (1<<6)          /* Quote file available                                         */
        !           707: #define WM_QWKNET      (1<<7)          /* Writing QWK NetMail (25 char title)          */
        !           708: #define WM_PRIVATE     (1<<8)          /* Private (for creating MSGINF file)           */
        !           709: #define WM_SUBJ_RO     (1<<9)          /* Subject/title is read-only                           */
        !           710:                                                                
        !           711:                                                                /* Bits in the mode of loadposts()                      */
        !           712: #define LP_BYSELF      (1<<0)          /* Include messages sent by self                        */
        !           713: #define LP_OTHERS      (1<<1)          /* Include messages sent to others                      */
        !           714: #define LP_UNREAD      (1<<2)          /* Un-read messages only                                        */
        !           715: #define LP_PRIVATE     (1<<3)          /* Include all private messages                         */
        !           716: #define LP_REP         (1<<4)          /* Packing REP packet                                           */
        !           717:                                                                
        !           718:                                                                /* Bits in the mode of loadmail()                       */
        !           719: #define LM_UNREAD      (1<<0)          /* Include un-read mail only                            */
        !           720: #define LM_INCDEL      (1<<1)          /* Include deleted mail                                         */
        !           721:                                                                
        !           722: enum {                                                 /* readmail and delmailidx which types          */
        !           723:         MAIL_YOUR                                      /* mail sent to you                                                     */
        !           724:        ,MAIL_SENT                                      /* mail you have sent                                           */
        !           725:        ,MAIL_ANY                                       /* mail sent to or from you                                     */
        !           726:        ,MAIL_ALL                                       /* all mail (ignores usernumber arg)            */
        !           727:        };                                                      
        !           728:                                                                
        !           729:                                                                /* Bits in the mode of external()           */
        !           730: #define EX_SH       (1<<0)             /* Use command shell to load other process  */
        !           731: #define EX_OUTR     (1<<1)             /* Copy DOS output to remote                */
        !           732: #define EX_OUTL        (1<<2)          /* Use _lputc() for local DOS output            */
        !           733: #define EX_INR         (1<<3)          /* Trap int 16h keyboard input requests     */
        !           734: #define EX_WWIV        WWIVCOLOR       /* Expand WWIV color codes to ANSI sequence */
        !           735: #define EX_SWAP        (1<<5)          /* Swap out for this external (*legacy*)        */
        !           736: #define EX_POPEN       (1<<7)          /* Leave COM port open  (*legacy*)                      */
        !           737: #define EX_OFFLINE     (1<<8)          /* Run this program offline                                     */
        !           738: #define EX_BG          (1<<10)         /* Back-ground/detached process                         */
        !           739: #define EX_BIN         (1<<11)         /* Binary mode (no Unix LF to CRLF)                     */
        !           740: #define EX_NATIVE      XTRN_NATIVE             /* Native 32-bit application                    */
        !           741: #define EX_CHKTIME     XTRN_CHKTIME    /* Check time left                                              */
        !           742: #define EX_NOECHO      XTRN_NOECHO             /* Don't echo stdin to stdout                   */
        !           743: 
        !           744: #if defined(__unix)
        !           745: #define EX_WILDCARD    EX_SH           /* Expand wildcards using 'sh' on Unix          */
        !           746: #else
        !           747: #define EX_WILDCARD    0
        !           748: #endif
        !           749:                                                                
        !           750:                                                                /* telnet_gate() mode bits                                      */                                                      
        !           751: #define TG_ECHO                        (1<<0)  /* Turn on telnet echo                                          */
        !           752: #define TG_CRLF                        (1<<1)  /* Expand sole CR to CRLF                                       */
        !           753: #define TG_LINEMODE            (1<<2)  /* Send entire lines only                                       */
        !           754: #define TG_NODESYNC            (1<<3)  /* Call Nodesync, get msgs, etc.                        */
        !           755: #define TG_CTRLKEYS            (1<<4)  /* Interpret ^P ^U ^T, etc locally                      */
        !           756: #define TG_PASSTHRU            (1<<5)  /* Pass-through telnet commands/responses       */
        !           757: #define TG_RLOGIN              (1<<6)  /* Use BSD RLogin protocol                                      */
        !           758: #define TG_NOCHKTIME   (1<<7)  /* Don't check time left while gated            */
        !           759: #define TG_NOTERMTYPE  (1<<8)  /* Request client "DONT TERM_TYPE"                      */
        !           760:                                                                
        !           761: enum {                                                 /* Values for 'mode' in listfileinfo        */
        !           762:         FI_INFO                        /* Just list file information               */
        !           763:        ,FI_REMOVE                      /* Remove/Move/Edit file information        */
        !           764:        ,FI_DOWNLOAD                    /* Download files                           */
        !           765:        ,FI_OLD                         /* Search/Remove files not downloaded since */
        !           766:        ,FI_OLDUL                                       /* Search/Remove files uploaded before      */
        !           767:        ,FI_OFFLINE                             /* Search/Remove files not online                       */
        !           768:        ,FI_USERXFER                            /* User Xfer Download                       */
        !           769:        ,FI_CLOSE                                       /* Close any open records                                       */
        !           770:        };                                                      
        !           771: 
        !           772: enum XFER_TYPE {                               /* Values for type in xfer_prot_select()        */
        !           773:         XFER_UPLOAD
        !           774:        ,XFER_DOWNLOAD
        !           775:        ,XFER_BATCH_UPLOAD
        !           776:        ,XFER_BATCH_DOWNLOAD
        !           777:        ,XFER_BIDIR
        !           778: };
        !           779:        
        !           780: #define L_LOGON     1                  /* Logon List maintenance                   */
        !           781: #define LOL_SIZE    81                 /* Length of each logon list entry          */
        !           782:                                                                
        !           783:                                                                /* Bits in mode of scanposts() function         */
        !           784: #define SCAN_CONST     (1<<0)          /* Continuous message scanning                          */
        !           785: #define SCAN_NEW       (1<<1)          /* New scanning                                                         */
        !           786: #define SCAN_BACK      (1<<2)          /* Scan the last message if no new                      */
        !           787: #define SCAN_TOYOU     (1<<3)          /* Scan for messages to you                             */
        !           788: #define SCAN_FIND      (1<<4)          /* Scan for text in messages                            */
        !           789: #define SCAN_UNREAD (1<<5)             /* Find un-read messages to you                         */
        !           790:                                                                
        !           791:                                                                /* Bits in misc of chan_t                                       */
        !           792: #define CHAN_PW        (1<<0)          /* Can be password protected                            */
        !           793: #define CHAN_GURU      (1<<1)          /* Guru joins empty channel                             */
        !           794:                                                                
        !           795: enum {                                                 /* Values of mode for userlist function     */
        !           796:         UL_ALL                                         /* List all users in userlist                           */
        !           797:        ,UL_SUB                                 /* List all users with access to cursub     */
        !           798:        ,UL_DIR                                         /* List all users with access to curdir         */
        !           799:        };                                                      
        !           800:                                                                
        !           801:                                                                
        !           802: #define BO_LEN         16                      /* backout.dab record length                            */
        !           803:                                                                
        !           804: #define BO_OPENFILE 0                  /* Backout types */
        !           805: 
        !           806: /**********/
        !           807: /* Macros */
        !           808: /**********/
        !           809: 
        !           810: #define CRLF                   { outchar(CR); outchar(LF); }
        !           811: #define SYSOP_LEVEL            90
        !           812: #define SYSOP                  (useron.level>=SYSOP_LEVEL || sys_status & SS_TMPSYSOP)
        !           813: #define REALSYSOP              (useron.level>=SYSOP_LEVEL)
        !           814: #define FLAG(x)                (ulong)(1UL<<(x-'A'))
        !           815: #define CLS            outchar(FF)
        !           816: #define WHERE          __LINE__,__FILE__
        !           817: #define SAVELINE               { slatr[slcnt]=latr; \
        !           818:                                                        slcuratr[slcnt]=curatr; \
        !           819:                                                        sprintf(slbuf[slcnt],"%.*s",lbuflen,lbuf); \
        !           820:                                                        if(slcnt<SAVE_LINES) slcnt++; \
        !           821:                                                        lbuflen=0; }
        !           822: #define RESTORELINE    { lbuflen=0; if(slcnt) --slcnt; \
        !           823:                                                        attr(slatr[slcnt]); \
        !           824:                                                        rputs(slbuf[slcnt]); \
        !           825:                                                        curatr=slcuratr[slcnt]; }
        !           826: #define SYNC                   { getnodedat(cfg.node_num,&thisnode,0); \
        !           827:                                                  nodesync(); }
        !           828: #define ASYNC                  { getnodedat(cfg.node_num,&thisnode,0); \
        !           829:                                                  nodesync(); }
        !           830: #define ANSI_SAVE()    rputs("\x1b[s")
        !           831: #define ANSI_RESTORE() rputs("\x1b[u")
        !           832: #define GOTOXY(x,y)     rprintf("\x1b[%d;%dH",y,x);
        !           833: #define TM_YEAR(yy)            ((yy)%100)
        !           834: #define sbbs_beep(f,d) BEEP(f,d)
        !           835: #define mswait(x)              SLEEP(x)
        !           836: 
        !           837: /**************************************/
        !           838: /* Text Attribute (color) Definitions */
        !           839: /**************************************/
        !           840: #define HIGH  0x08      /* High intensity foreground text */
        !           841: #ifndef BLINK
        !           842: #define BLINK 0x80             /* Blinking text */
        !           843: #endif
        !           844: 
        !           845: #ifndef __COLORS
        !           846: #define __COLORS
        !           847: 
        !           848: enum COLORS {
        !           849:        BLACK,                  /* dark colors (HIGH bit unset) */
        !           850:        BLUE,
        !           851:        GREEN,
        !           852:        CYAN,
        !           853:        RED,
        !           854:        MAGENTA,
        !           855:        BROWN,
        !           856:        LIGHTGRAY,
        !           857:        DARKGRAY,               /* light colors (HIGH bit set) */
        !           858:        LIGHTBLUE,
        !           859:        LIGHTGREEN,
        !           860:        LIGHTCYAN,
        !           861:        LIGHTRED,
        !           862:        LIGHTMAGENTA,
        !           863:        YELLOW,
        !           864:        WHITE
        !           865: };
        !           866: 
        !           867: #endif /* __COLORS */
        !           868: 
        !           869: #define ANSI_NORMAL            0x100
        !           870: #define BG_BLACK               0x200
        !           871: #define BG_BLUE                        (BLUE<<4)
        !           872: #define BG_GREEN               (GREEN<<4)
        !           873: #define BG_CYAN                        (CYAN<<4)
        !           874: #define BG_RED                 (RED<<4)
        !           875: #define BG_MAGENTA             (MAGENTA<<4)
        !           876: #define BG_BROWN               (BROWN<<4)
        !           877: #define BG_LIGHTGRAY   (LIGHTGRAY<<4)
        !           878: 
        !           879: /********************/
        !           880: /* Type Definitions */
        !           881: /********************/
        !           882: 
        !           883: typedef struct {                                               /* Users information */
        !           884:        ushort  number,                                         /* Number */
        !           885:                        uls,                                            /* Number of uploads */
        !           886:                        dls,                                            /* Number of downloads */
        !           887:                        posts,                                          /* Number of posts */
        !           888:                        emails,                                         /* Number of emails */
        !           889:                        fbacks,                                         /* Number of emails sent to sysop */
        !           890:                        etoday,                                         /* Emails today */
        !           891:                        ptoday,                                         /* Posts today */
        !           892:                        timeon,                                         /* Total time on */
        !           893:                        textra,                                         /* Extra time for today */
        !           894:                        logons,                                         /* Total logons */
        !           895:                        ttoday,                                         /* Time on today */
        !           896:                        tlast,                                          /* Time on last call */
        !           897:                        ltoday,                                         /* Logons today */
        !           898:                        xedit,                                          /* External editor (1 based) */
        !           899:                        shell;                                          /* Command shell */
        !           900: 
        !           901:        char    alias[LEN_ALIAS+1],             /* Alias */
        !           902:                        name[LEN_NAME+1],                       /* Name - Real */
        !           903:                        handle[LEN_HANDLE+1],           /* Chat handle */
        !           904:                        comp[LEN_COMP+1],                       /* Computer type */
        !           905:                        note[LEN_NOTE+1],                       /* Public notice about this user */
        !           906:                        address[LEN_ADDRESS+1],         /* Street Address */
        !           907:                        location[LEN_LOCATION+1],       /* Location of user */
        !           908:                        zipcode[LEN_ZIPCODE+1],         /* Zip/Postal code */
        !           909:                        pass[LEN_PASS+1],                       /* Password - not case sensitive */
        !           910:                        birth[LEN_BIRTH+1],             /* Birthday in MM/DD/YY format */
        !           911:                        phone[LEN_PHONE+1],                     /* Phone number xxx-xxx-xxxx format */
        !           912:                        modem[LEN_MODEM+1],                     /* Modem type - 8 chars max */
        !           913:                        netmail[LEN_NETMAIL+1],         /* NetMail forwarding address */
        !           914:                        tmpext[4],                                      /* QWK Packet extension */
        !           915:                        comment[LEN_COMMENT+1],         /* Private comment about user */
        !           916:                        cursub[LEN_EXTCODE+1],          /* Current sub-board internal code */
        !           917:                        curdir[LEN_EXTCODE+1],          /* Current directory internal code */
        !           918:                        curxtrn[9];                                     /* Current external program internal code */
        !           919: 
        !           920:        uchar   level,                                          /* Security level */
        !           921:                        sex,                                            /* Sex - M or F */
        !           922:                        rows,                           /* Rows of text */
        !           923:                        prot,                                           /* Default transfer protocol */
        !           924:                        leech;                                          /* Leech attempt counter */
        !           925: 
        !           926:        ulong   misc,                                           /* Misc. bits - ANSI, Deleted etc. */
        !           927:                        qwk,                                            /* QWK settings */
        !           928:                        chat,                                           /* Chat defaults */
        !           929:                        flags1,                                         /* Flag set #1 */
        !           930:                        flags2,                                         /* Flag set #2 */
        !           931:                        flags3,                                         /* Flag set #3 */
        !           932:                        flags4,                                         /* Flag set #4 */
        !           933:                        exempt,                                         /* Exemption Flags */
        !           934:                        rest,                                           /* Restriction Flags */
        !           935:                        ulb,                                            /* Total bytes uploaded */
        !           936:                        dlb,                                            /* Total bytes downloaded */
        !           937:                        cdt,                                            /* Credits */
        !           938:                        min,                                            /* Minutes */
        !           939:                        freecdt;                                        /* Free credits (renewed daily) */
        !           940:        time_t  firston,                                        /* Date/Time first called */
        !           941:                        laston,                                         /* Last logoff date/time */
        !           942:                        expire,                                         /* Expiration date */
        !           943:                        pwmod,                                          /* Password last modified */
        !           944:                        ns_time,                                        /* Date/Time of last new file scan */
        !           945:                        logontime;                                      /* Time of current logon */
        !           946: 
        !           947: } user_t;
        !           948: 
        !           949: typedef struct {                                               /* File (transfers) Data */
        !           950:        char    name[13],                                       /* Name of file FILENAME.EXT */
        !           951:                        desc[LEN_FDESC+1],                      /* Uploader's Description */
        !           952:                        uler[LEN_ALIAS+1];                      /* User who uploaded */
        !           953:        uchar   opencount;                                      /* Times record is currently open */
        !           954:        time_t  date,                                           /* File date/time */
        !           955:                        dateuled,                                       /* Date/Time (Unix) Uploaded */
        !           956:                        datedled;                                       /* Date/Time (Unix) Last downloaded */
        !           957:        ushort  dir,                                            /* Directory file is in */
        !           958:                        altpath,
        !           959:                        timesdled,                                      /* Total times downloaded */
        !           960:                        timetodl;                                       /* How long transfer time */
        !           961:        long    datoffset,                                      /* Offset into .DAT file */
        !           962:                        size,                                           /* Size of file */
        !           963:                        misc;                                           /* Miscellaneous bits */
        !           964:        ulong   cdt;                                            /* Credit value for this file */
        !           965: 
        !           966: } file_t;
        !           967: 
        !           968: typedef idxrec_t post_t;                               /* defined in smbdefs.h */
        !           969: typedef idxrec_t mail_t;                               /* defined in smbdefs.h */
        !           970: typedef fidoaddr_t faddr_t;                            /* defined in smbdefs.h */
        !           971: 
        !           972: typedef struct {                                               /* System/Node Statistics */
        !           973:        ulong   logons,                                         /* Total Logons on System */
        !           974:                        ltoday,                                         /* Total Logons Today */
        !           975:                        timeon,                                         /* Total Time on System */
        !           976:                        ttoday,                                         /* Total Time Today */
        !           977:                        uls,                                            /* Total Uploads Today */
        !           978:                        ulb,                                            /* Total Upload Bytes Today */
        !           979:                        dls,                                            /* Total Downloads Today */
        !           980:                        dlb,                                            /* Total Download Bytes Today */
        !           981:                        ptoday,                                         /* Total Posts Today */
        !           982:                        etoday,                                         /* Total Emails Today */
        !           983:                        ftoday;                                         /* Total Feedbacks Today */
        !           984:        ushort  nusers;                                         /* Total New Users Today */
        !           985: 
        !           986: } stats_t;
        !           987: 
        !           988: typedef struct {                                               /* Sub-board scan information */
        !           989:        ushort  cfg;                                            /* User's configuration */
        !           990:        ulong   ptr;                                            /* New-message pointer */
        !           991:        ulong   last;                                           /* Last read message number */
        !           992:        ushort  sav_cfg;                                        /* Saved configuration */
        !           993:        ulong   sav_ptr;                                        /* Saved New-message pointer */
        !           994:        ulong   sav_last;                                       /* Saved Last read message number */
        !           995: } subscan_t;
        !           996: 
        !           997: #endif /* Don't add anything after this #endif statement */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.