Annotation of sbbs/sbbs3/sbbsdefs.h, revision 1.1.1.2

1.1       root        1: /* sbbsdefs.h */
                      2: 
                      3: /* Synchronet constants, macros, and structure definitions */
                      4: 
1.1.1.2 ! root        5: /* $Id: sbbsdefs.h,v 1.123 2004/12/30 02:57:00 rswindell Exp $ */
1.1       root        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:  *                                                                                                                                                     *
1.1.1.2 ! root       11:  * Copyright 2004 Rob Swindell - http://www.synchro.net/copyright.html         *
1.1       root       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: 
1.1.1.2 ! root       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: 
1.1       root       47: /*************/
                     48: /* Constants */
                     49: /*************/
                     50: 
1.1.1.2 ! root       51: #define VERSION        "3.12"  /* Version: Major.minor  */
        !            52: #define REVISION       'a'     /* Revision: lowercase letter */
        !            53: 
1.1       root       54: #define VERSION_NOTICE         "Synchronet BBS for "PLATFORM_DESC\
1.1.1.2 ! root       55:                                                                "  Version " VERSION
        !            56: #define SYNCHRONET_CRC         0x9BCDD162
        !            57: #define COPYRIGHT_NOTICE       "Copyright 2004 Rob Swindell"
        !            58: #define COPYRIGHT_CRC          0x0004A86C
1.1       root       59: 
                     60: #define Y2K_2DIGIT_WINDOW      70
                     61: 
                     62: #define FNOPEN_BUF_SIZE                (2*1024)
                     63: 
1.1.1.2 ! root       64: #define ILLEGAL_FILENAME_CHARS "\\/|<>+[]:=\";,%"
        !            65: 
        !            66: #define BIND_FAILURE_HELP      "!Another application or service may be using this port"
        !            67: #define UNKNOWN_LOAD_ERROR     "Unknown load error - Library mismatch?"
        !            68: 
        !            69: #define        JAVASCRIPT_MAX_BYTES            (8*1024*1024)
        !            70: #define JAVASCRIPT_CONTEXT_STACK       (16*1024)
        !            71: #define JAVASCRIPT_BRANCH_LIMIT                99999999
        !            72: #define JAVASCRIPT_YIELD_INTERVAL      10000
        !            73: #define JAVASCRIPT_GC_INTERVAL         100 
        !            74: 
        !            75: typedef struct {
        !            76:        ulong   counter;
        !            77:        ulong   limit;
        !            78:        ulong   yield_interval;
        !            79:        ulong   gc_interval;
        !            80:        ulong   gc_attempts;
        !            81:        BOOL    auto_terminate;
        !            82:        BOOL*   terminated;
        !            83: } js_branch_t;
        !            84: 
        !            85: #define JSVAL_NULL_OR_VOID(val)                (JSVAL_IS_NULL(val) || JSVAL_IS_VOID(val))
        !            86: 
1.1       root       87: #ifndef __FLAT__
                     88: #define __FLAT__       /* 32-bit "flat" memory model */
                     89: #endif
                     90: 
                     91: /************/
                     92: /* Maximums */
                     93: /************/
                     94: 
                     95: #define MAX_NODES              250
                     96: 
                     97: #define MAX_FILES        10000 /* Maximum number of files per dir                      */
                     98: #define MAX_USERXFER   500 /* Maximum number of dest. users of usrxfer */
                     99: 
                    100: 
1.1.1.2 ! root      101: #define LEN_DIR                63              /* Maximum length of directory paths            */
        !           102: #define LEN_CMD                63              /* Maximum length of command lines                      */
        !           103: 
        !           104:                                                        /* MS-DOS limited values                                        */
        !           105: #define LEN_CODE       8               /* Maximum length of internal codes                     */
        !           106: #define LEN_QWKID      8               /* Maximum length of QWK-ID                                     */
        !           107: #define LEN_MODNAME 8          /* Maximum length of loadable module name       */
        !           108: #define LEN_SIFNAME 8          /* Maximum length of SIF filename                       */
        !           109: #define LEN_EXTCODE (LEN_CODE*2)       /* Code prefix + suffix */
1.1       root      110: 
                    111:                                                        /* Lengths of various strings                           */
                    112: #define LEN_GSNAME     15              /* Group/Lib short name                                         */
                    113: #define LEN_GLNAME     40              /* Group/Lib long name                                          */
                    114: #define LEN_SSNAME     25              /* Sub/Dir short name                                           */
                    115: #define LEN_SLNAME     40              /* Sub/Dir long name                                            */
                    116:                                                
                    117:                                                                        /* User Questions                                               */
                    118: #define UQ_ALIASES             (1L<<0)         /* Ask for alias                                                */
                    119: #define UQ_LOCATION            (1L<<1)         /* Ask for location                                     */
                    120: #define UQ_ADDRESS             (1L<<2)         /* Ask for address                                              */
                    121: #define UQ_PHONE               (1L<<3)         /* Ask for phone number                                 */
                    122: #define UQ_HANDLE              (1L<<4)         /* Ask for chat handle                                  */
                    123: #define UQ_DUPHAND             (1L<<5)         /* Search for duplicate handles                 */
                    124: #define UQ_SEX                 (1L<<6)         /* Ask for sex :)                                               */
                    125: #define UQ_BIRTH               (1L<<7)         /* Ask for birth date                                   */
                    126: #define UQ_COMP                (1L<<8)         /* Ask for computer type                                */
                    127: #define UQ_MC_COMP             (1L<<9)         /* Multiple choice computer type                */
                    128: #define UQ_REALNAME            (1L<<10)        /* Ask for real name                                    */
                    129: #define UQ_DUPREAL             (1L<<11)        /* Search for duplicate real names              */
                    130: #define UQ_COMPANY             (1L<<12)        /* Ask for company name                                 */
                    131: #define UQ_NOEXASC             (1L<<13)        /* Don't allow ex-ASCII in user text    */
                    132: #define UQ_CMDSHELL            (1L<<14)        /* Ask for command shell                                */
                    133: #define UQ_XEDIT               (1L<<15)        /* Ask for external editor                              */
                    134: #define UQ_NODEF               (1L<<16)        /* Don't ask for default settings       */
                    135: #define UQ_NOCOMMAS            (1L<<17)        /* Do not require commas in location    */
1.1.1.2 ! root      136: #define UQ_NONETMAIL   (1L<<18)        /* Don't ask for e-mail/netmail address */
        !           137: #define UQ_NOUPRLWR            (1L<<19)        /* Don't force upper/lower case strings */
1.1       root      138:                                                
                    139:                                                
                    140:                                                                        /* Different bits in sys_misc                           */
                    141: #define SM_CLOSED              (1L<<0)         /* System is clsoed to New Users                        */
                    142: #define SM_SYSSTAT             (1L<<1)         /* Sysops activity included in statistics       */
1.1.1.2 ! root      143: #define SM_NOSYSINFO   (1L<<2)         /* Suppress system info display at logon        */
1.1       root      144: #define SM_PWEDIT              (1L<<3)         /* Allow users to change their passwords        */
                    145: #define SM_RA_EMU              (1L<<4)         /* Reverse R/A commands at msg read prompt      */
                    146: #define SM_ANON_EM             (1L<<5)         /* Allow anonymous e-mail                                       */
                    147: #define SM_LISTLOC             (1L<<6)         /* Use location of caller in user lists         */
                    148: #define SM_WILDCAT             (1L<<7)         /* Expand Wildcat color codes in messages       */
                    149: #define SM_PCBOARD             (1L<<8)         /* Expand PCBoard color codes in messages       */
                    150: #define SM_WWIV                (1L<<9)         /* Expand WWIV color codes in messages          */
                    151: #define SM_CELERITY            (1L<<10)        /* Expand Celerity color codes in messages      */
                    152: #define SM_RENEGADE            (1L<<11)        /* Expand Renegade color codes in messages      */
                    153: #define SM_ECHO_PW             (1L<<12)        /* Echo passwords locally                                       */
1.1.1.2 ! root      154: #define SM_LOCAL_TZ            (1L<<13)        /* Use local timezone representations           */
        !           155: #define SM_AUTO_DST            (1L<<14)        /* Automatic Daylight Savings Toggle (US)   */
1.1       root      156: #define SM_R_SYSOP             (1L<<15)        /* Allow remote sysop logon/commands            */
                    157: #define SM_QUOTE_EM            (1L<<16)        /* Allow quoting of e-mail                                      */
                    158: #define SM_EURODATE            (1L<<17)        /* Europian date format (DD/MM/YY)                      */
                    159: #define SM_MILITARY            (1L<<18)        /* Military time format                                         */
                    160: #define SM_TIMEBANK            (1L<<19)        /* Allow time bank functions                            */
                    161: #define SM_FILE_EM             (1L<<20)        /* Allow file attachments in E-mail             */
                    162: #define SM_SHRTPAGE            (1L<<21)        /* Short sysop page                                             */
                    163: #define SM_TIME_EXP            (1L<<22)        /* Set to expired values if out-of-time         */
                    164: #define SM_FASTMAIL            (1L<<23)        /* Fast e-mail storage mode                             */
1.1.1.2 ! root      165: #define SM_NONODELIST  (1L<<24)        /* Suppress active node list during logon       */
1.1       root      166: #define SM_ERRALARM            (1L<<25)        /* Error beeps on                                                       */
                    167: #define SM_FWDTONET            (1L<<26)        /* Allow forwarding of e-mail to netmail        */
                    168: #define SM_DELREADM            (1L<<27)        /* Delete read mail automatically                       */
                    169: #define SM_NOCDTCVT            (1L<<28)        /* No credit to minute conversions allowed      */
                    170: #define SM_DELEMAIL            (1L<<29)        /* Physically remove deleted e-mail immed.      */
                    171: #define SM_USRVDELM            (1L<<30)        /* Users can see deleted msgs                           */
                    172: #define SM_SYSVDELM            (1L<<31)        /* Sysops can see deleted msgs                          */
                    173:                                                
                    174:                                                                        /* Different bits in node_misc                          */
                    175: #define NM_NO_NUM              (1<<8)          /* Don't allow logons by user number        */
                    176: #define NM_LOGON_R             (1<<9)          /* Allow logons by user real name                       */
                    177: #define NM_LOGON_P             (1<<10)         /* Secure logons (always ask for password)      */
                    178: #define NM_LOWPRIO             (1<<15)         /* Always use low priority input                        */
                    179: #define NM_7BITONLY            (1L<<16)        /* Except 7-bit input only (E71 terminals)      */
                    180: #define NM_NOPAUSESPIN (1L<<18)        /* No spinning cursor at pause prompt           */
1.1.1.2 ! root      181: #define NM_CLOSENODEDAB        (1L<<19)        /* Keep node.dab file closed (for Samba)        */
        !           182: 
        !           183:                                                                        /* Miscellaneous Modem Settings (mdm_misc)  */
        !           184: #define MDM_CTS                (1<<0)          /* Use hardware send flow control                       */
        !           185: #define MDM_RTS                (1<<1)          /* Use hardware recv flow control                       */
        !           186: #define MDM_STAYHIGH   (1<<2)          /* Stay at highest DTE rate                             */
        !           187: #define MDM_CALLERID   (1<<3)          /* Supports Caller ID                                           */
        !           188: #define MDM_DUMB               (1<<4)          /* Just watch DCD for answer - dumb modem       */
        !           189: #define MDM_NODTR              (1<<5)          /* Don't drop DTR for hang-up               */
        !           190: #define MDM_KNOWNRES   (1<<6)          /* Allow known result codes only                        */
        !           191: #define MDM_VERBAL             (1<<7)          /* Use verbal result codes                                      */
        !           192: 
1.1       root      193:                                                
                    194:                                                                        /* Bit values for level_misc[x]         */
1.1.1.2 ! root      195: #define LEVEL_EXPTOLVL (1<<0)          /* Expire to level_expireto[x]          */
        !           196: #define LEVEL_EXPTOVAL (1<<1)          /* Expire to val[level_expireto[x]] */
1.1       root      197: 
                    198:                                                                        /* Bit values for prot[x].misc */
1.1.1.2 ! root      199: #define PROT_DSZLOG            (1<<0)      /* Supports DSZ Log */
        !           200: #define PROT_NATIVE            (1<<1)          /* Native (32-bit) executable */
1.1       root      201: 
                    202:                                                                        /* Bit values in netmail_misc */
                    203: 
                    204: #define NMAIL_ALLOW    (1<<0)          /* Allow NetMail */
                    205: #define NMAIL_CRASH    (1<<1)          /* Default netmail to crash */
                    206: #define NMAIL_HOLD             (1<<2)          /* Default netmail to hold */
                    207: #define NMAIL_KILL             (1<<3)          /* Default netmail to kill after sent */
                    208: #define NMAIL_ALIAS    (1<<4)          /* Use Aliases in NetMail */
                    209: #define NMAIL_FILE             (1<<5)          /* Allow file attachments */
                    210: #define NMAIL_DIRECT   (1<<6)          /* Default netmail to direct */
                    211: 
1.1.1.2 ! root      212:                                                                        /* Bit values for subscan_t.cfg and sav_cfg     */
        !           213: #define SUB_CFG_NSCAN  0x0005          /* Auto-scan for new messages                           */
        !           214: #define SUB_CFG_SSCAN  0x0002          /* Auto-scan for unread messages to you         */
        !           215: #define SUB_CFG_YSCAN  0x0100          /* Auto-scan for new messages to you only       */
        !           216:                                                                        /* (bits 8-15 default to off)                           */
1.1       root      217: 
                    218:                                                                        /* Bit values for sub[x].misc */
1.1.1.2 ! root      219: #define SUB_QNET               (1L<<3)         /* Sub-board is netted via QWK network */
        !           220: #define SUB_PNET               (1L<<4)         /* Sub-board is netted via PostLink */
        !           221: #define SUB_FIDO               (1L<<5)         /* Sub-board is netted via FidoNet */
        !           222: #define SUB_PRIV               (1L<<6)         /* Allow private posts on sub */
        !           223: #define SUB_PONLY              (1L<<7)         /* Private posts only */
        !           224: #define SUB_ANON               (1L<<8)         /* Allow anonymous posts on sub */
        !           225: #define SUB_AONLY              (1L<<9)         /* Anonymous only */
        !           226: #define SUB_NAME               (1L<<10)        /* Must use real names */
        !           227: #define SUB_DEL                (1L<<11)        /* Allow users to delete messages */
        !           228: #define SUB_DELLAST            (1L<<12)        /* Allow users to delete last msg only */
        !           229: #define SUB_FORCED             (1L<<13)        /* Sub-board is forced scanning */
        !           230: #define SUB_NOTAG              (1L<<14)        /* Don't add tag or origin lines */
        !           231: #define SUB_TOUSER             (1L<<15)        /* Prompt for to user on posts */
        !           232: #define SUB_ASCII              (1L<<16)        /* ASCII characters only */
        !           233: #define SUB_QUOTE              (1L<<17)        /* Allow online quoting */
        !           234: #define SUB_NSDEF              (1L<<18)        /* New-Scan on by default */
        !           235: #define SUB_INET               (1L<<19)        /* Sub-board is netted via Internet */
        !           236: #define SUB_FAST               (1L<<20)        /* Fast storage mode */
        !           237: #define SUB_KILL               (1L<<21)        /* Kill read messages automatically */
        !           238: #define SUB_KILLP              (1L<<22)        /* Kill read pvt messages automatically */
        !           239: #define SUB_SYSPERM            (1L<<23)        /* Sysop messages are permament */
        !           240: #define SUB_GATE               (1L<<24)        /* Gateway between Network types */
        !           241: #define SUB_LZH                (1L<<25)        /* Use LZH compression for msgs */
        !           242: #define SUB_SSDEF              (1L<<26)        /* Default ON for Scan for Your msgs */
        !           243: #define SUB_HYPER              (1L<<27)        /* Hyper allocation */
        !           244: #define SUB_EDIT               (1L<<28)        /* Users can edit message text after posting */
        !           245: #define SUB_EDITLAST   (1L<<29)        /* Users can edit last message only */
        !           246: #define SUB_NOUSERSIG  (1L<<30)        /* Suppress user signatures */
        !           247: #define SUB_HDRMOD             (1L<<31)        /* Modified sub-board header info (SCFG) */
1.1       root      248: 
                    249:                                     /* Bit values for dir[x].misc */
1.1.1.2 ! root      250: #define DIR_FCHK       (1<<0)                  /* Check for file existance */
        !           251: #define DIR_RATE       (1<<1)                  /* Force uploads to be rated G,R, or X */
        !           252: #define DIR_MULT       (1<<2)                  /* Ask for multi-disk numbering */
        !           253: #define DIR_DUPES      (1<<3)                  /* Search this dir for upload dupes */
        !           254: #define DIR_FREE       (1<<4)                  /* Free downloads */
        !           255: #define DIR_TFREE      (1<<5)                  /* Time to download is free */
        !           256: #define DIR_CDTUL      (1<<6)                  /* Credit Uploads */
        !           257: #define DIR_CDTDL      (1<<7)                  /* Credit Downloads */
        !           258: #define DIR_ANON       (1<<8)                  /* Anonymous uploads */
        !           259: #define DIR_AONLY      (1<<9)                  /* Anonymous only */
        !           260: #define DIR_ULDATE     (1<<10)                 /* Include upload date in listing */
        !           261: #define DIR_DIZ        (1<<11)                 /* FILE_ID.DIZ and DESC.SDI support */
        !           262: #define DIR_NOSCAN     (1<<12)                 /* Don't new-scan this directory */
        !           263: #define DIR_NOAUTO     (1<<13)                 /* Don't auto-add this directory */
        !           264: #define DIR_ULTIME     (1<<14)                 /* Deduct time during uploads */
        !           265: #define DIR_CDTMIN     (1<<15)                 /* Give uploader minutes instead of cdt */
        !           266: #define DIR_SINCEDL (1<<16)                    /* Purge based on days since last dl */
        !           267: #define DIR_MOVENEW (1<<17)                    /* Files marked as new when moved */
        !           268: #define DIR_QUIET      (1<<18)                 /* Do not notify uploader of downloads */
        !           269: #define DIR_NOSTAT     (1<<19)                 /* Do not include transfers in system stats */
1.1       root      270: 
                    271:                                     /* Bit values for file_t.misc */
                    272: #define FM_EXTDESC  (1<<0)          /* Extended description exists */
                    273: #define FM_ANON        (1<<1)                  /* Anonymous upload */
                    274: 
1.1.1.2 ! root      275:                                                                        /* Bit values for cfg.file_misc                         */
        !           276: #define FM_NO_LFN      (1<<0)                  /* No long filenames in listings                        */
        !           277: 
        !           278:                                                                        /* Bit values for cfg.msg_misc                          */
        !           279: #define MM_REALNAME    (1<<16)                 /* Allow receipt of e-mail using real names     */
        !           280: 
        !           281: 
1.1       root      282: enum {                                                         /* errormsg() codes */
                    283:         ERR_OPEN                                               /* opening a file */
                    284:        ,ERR_CLOSE                                              /* close a file */
                    285:        ,ERR_FDOPEN                                     /* associating a stream with fd */
                    286:        ,ERR_READ                                               /* reading from file */
                    287:        ,ERR_WRITE                                              /* writing to file */
                    288:        ,ERR_REMOVE                                     /* removing a file */
                    289:        ,ERR_ALLOC                                              /* allocating memory */
                    290:        ,ERR_CHK                                                /* checking */
                    291:        ,ERR_LEN                                                /* file length */
                    292:        ,ERR_EXEC                                               /* executing */
                    293:        ,ERR_CHDIR                                              /* changing directory */
                    294:        ,ERR_CREATE                                     /* creating */
                    295:        ,ERR_LOCK                                               /* locking */
                    296:        ,ERR_UNLOCK                                     /* unlocking */
                    297:     ,ERR_TIMEOUT                                       /* timeout waiting for resource */
                    298:     ,ERR_IOCTL                                         /* IOCTL error */
                    299:        ,ERR_SEEK                                               /* SEEKing error */
                    300:        };
                    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
1.1.1.2 ! root      327:        ,MIN_COLORS 
        !           328: };
1.1       root      329: 
1.1.1.2 ! root      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                                    */
1.1       root      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 */
1.1.1.2 ! root      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 */
1.1       root      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 */
1.1.1.2 ! root      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)
1.1       root      569: 
                    570: /****************************************************************************/
                    571: /* Offsets into DIR .DAT file for different fields for each file                       */
                    572: /****************************************************************************/
1.1.1.2 ! root      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 CLREOL      256     /* Character to erase to end of line                       */
        !           618:                                                                                                                                                        
        !           619:                                                        /* Online status (online)                                               */
        !           620: #define ON_LOCAL       1               /* Online locally                                                               */
        !           621: #define ON_REMOTE   2                  /* Online remotely                                                              */
        !           622:                                                                                                                                                        
        !           623:                                                        /* Various SYSTEM parameters for sys_status             */
        !           624: #define SS_UNUSED      (1L<<0) /* Unused                                                                       */
        !           625: #define SS_INITIAL  (1L<<1)    /* The bbs data has been initialized.                   */
        !           626: #define SS_TMPSYSOP (1L<<2)    /* Temporary Sysop Status                                               */
        !           627: #define SS_USERON   (1L<<3)    /* A User is logged on to the BBS                               */
        !           628: #define SS_LCHAT    (1L<<4) /* Local chat in progress                                          */
        !           629: #define SS_CAP         (1L<<5) /* Capture is on                                                                */
        !           630: #define SS_ANSCAP      (1L<<6) /* Capture ANSI codes too                                               */
        !           631: #define SS_FINPUT      (1L<<7) /* Using file for input                                                 */
        !           632: #define SS_COMISR      (1L<<8) /* Com port ISR is installed                                    */
        !           633: #define SS_DAILY       (1L<<9) /* Execute System Daily Event on logoff                 */
        !           634: #define SS_INUEDIT     (1L<<10) /* Inside Alt-Useredit section                                 */
        !           635: #define SS_ABORT       (1L<<11) /* Global abort input or output flag                   */
        !           636: #define SS_SYSPAGE     (1L<<12) /* Paging sysop                                                                */
        !           637: #define SS_SYSALERT (1L<<13) /* Notify sysop when users hangs up                       */
        !           638: #define SS_GURUCHAT (1L<<14) /* Guru chat in progress                                          */
        !           639: #define SS_UNUSED2     (1L<<15) /* not used in v3 (used to be SS_NODEDAB)              */
        !           640: #define SS_EVENT       (1L<<16) /* Time shortened due to upcoming event                */
        !           641: #define SS_PAUSEON     (1L<<17) /* Pause on, overriding user default                   */
        !           642: #define SS_PAUSEOFF (1L<<18) /* Pause off, overriding user default                     */
        !           643: #define SS_IN_CTRLP (1L<<19) /* Inside ctrl-p send node message func           */
        !           644: #define SS_NEWUSER     (1L<<20) /* New User online                                                     */
        !           645: #define SS_MDMDEBUG (1L<<21) /* Modem debug output                                                     */
        !           646: #define SS_NEST_PF     (1L<<22) /* Nested in printfile function                                */
        !           647: #define SS_DCDHIGH     (1L<<23) /* Assume DCD is high always                                   */
        !           648: #define SS_SPLITP      (1L<<24) /* Split-screen private chat                                   */
        !           649: #define SS_NEWDAY      (1L<<25) /* Date changed while online                                   */
        !           650: #define SS_RLOGIN      (1L<<26) /* Current login via BSD RLogin                                */
        !           651: #define SS_FILEXFER    (1L<<27) /* File transfer in progress, halt spy                 */
1.1       root      652: 
                    653:                                                                /* Bits in 'mode' for getkey and getstr     */
1.1.1.2 ! root      654: #define K_NONE         0                       /* Use as a place holder for no mode flags      */
1.1       root      655: #define K_UPPER        (1L<<0)         /* Converts all letters to upper case           */
                    656: #define K_UPRLWR       (1L<<1)         /* Upper/Lower case automatically                       */
                    657: #define K_NUMBER       (1L<<2)         /* Allow numbers only                                           */
                    658: #define K_WRAP         (1L<<3)         /* Allows word wrap                                             */
                    659: #define K_MSG          (1L<<4)         /* Allows ANSI, ^N ^A ^G                                        */
                    660: #define K_SPIN         (1L<<5)         /* Spinning cursor (same as SPIN)                       */
                    661: #define K_LINE         (1L<<6)         /* Input line (inverse color)                           */
                    662: #define K_EDIT         (1L<<7)         /* Edit string passed                                           */
                    663: #define K_CHAT         (1L<<8)         /* In chat multi-chat                                           */
                    664: #define K_NOCRLF       (1L<<9)         /* Don't print CRLF after string input      */
                    665: #define K_ALPHA        (1L<<10)        /* Only allow alphabetic characters             */
                    666: #define K_GETSTR       (1L<<11)        /* getkey called from getstr()                          */
                    667: #define K_LOWPRIO      (1L<<12)        /* low priority input                                           */
                    668: #define K_NOEXASC      (1L<<13)        /* No extended ASCII allowed                            */
                    669: #define K_E71DETECT (1L<<14)   /* Detect E-7-1 terminal type                           */
                    670: #define K_AUTODEL      (1L<<15)        /* Auto-delete text (used with K_EDIT)          */
                    671: #define K_COLD         (1L<<16)        /* Possible cold key mode                                       */
                    672: #define K_NOECHO       (1L<<17)        /* Don't echo input                         */
                    673: #define K_TAB          (1L<<18)        /* Treat TAB key as CR                                          */
1.1.1.2 ! root      674: #define K_LEFTEXIT     (1L<<19)        /* Allow exit by backspacing/arrowing left      */
        !           675: #define K_USEOFFSET    (1L<<20)        /* Use getstr_offset for cursor position        */
1.1       root      676: 
1.1.1.2 ! root      677:                                                                /* Bits in 'mode' for putmsg and printfile  */
        !           678: #define P_NOABORT      (1<<0)          /* Disallows abortion of a message          */
        !           679: #define P_SAVEATR   (1<<1)             /* Save the new current attributres after       */
        !           680:                                                                /* msg has printed. */
        !           681: #define P_NOATCODES (1<<2)             /* Don't allow @ codes                      */
        !           682: #define P_OPENCLOSE (1<<3)             /* Open and close the file                                      */
        !           683: #define P_NOPAUSE      (1<<4)          /* Disable screen pause                                         */
        !           684: #define P_HTML         (1<<5)          /* Message is HTML                                                      */
        !           685:                                                                
        !           686:                                                                /* Bits in 'mode' for listfiles             */
        !           687: #define FL_ULTIME   (1<<0)             /* List files by upload time                */
        !           688: #define FL_DLTIME   (1<<1)             /* List files by download time              */
        !           689: #define FL_NO_HDR   (1<<2)             /* Don't list directory header              */
        !           690: #define FL_FINDDESC (1<<3)             /* Find text in description                 */
        !           691: #define FL_EXFIND   (1<<4)             /* Find text in description - extended info */
        !           692: #define FL_VIEW     (1<<5)             /* View ZIP/ARC/GIF etc. info               */
        !           693:                                                                
        !           694:                                                                /* Bits in the mode of writemsg and email() */
        !           695: #define WM_EXTDESC     (1<<0)          /* Writing extended file description            */
        !           696: #define WM_EMAIL       (1<<1)          /* Writing e-mail                                                       */
        !           697: #define WM_NETMAIL     (1<<2)          /* Writing NetMail                                                      */
        !           698: #define WM_ANON        (1<<3)          /* Writing anonymous message                            */
        !           699: #define WM_FILE        (1<<4)          /* Attaching a file to the message                      */
        !           700: #define WM_NOTOP       (1<<5)          /* Don't add top because we need top line   */
        !           701: #define WM_QUOTE       (1<<6)          /* Quote file available                                         */
        !           702: #define WM_QWKNET      (1<<7)          /* Writing QWK NetMail (25 char title)          */
        !           703: #define WM_PRIVATE     (1<<8)          /* Private (for creating MSGINF file)           */
        !           704:                                                                
        !           705:                                                                /* Bits in the mode of loadposts()                      */
        !           706: #define LP_BYSELF      (1<<0)          /* Include messages sent by self                        */
        !           707: #define LP_OTHERS      (1<<1)          /* Include messages sent to others                      */
        !           708: #define LP_UNREAD      (1<<2)          /* Un-read messages only                                        */
        !           709: #define LP_PRIVATE     (1<<3)          /* Include all private messages                         */
        !           710: #define LP_REP         (1<<4)          /* Packing REP packet                                           */
        !           711:                                                                
        !           712:                                                                /* Bits in the mode of loadmail()                       */
        !           713: #define LM_UNREAD      (1<<0)          /* Include un-read mail only                            */
        !           714: #define LM_INCDEL      (1<<1)          /* Include deleted mail                                         */
        !           715:                                                                
        !           716: enum {                                                 /* readmail and delmailidx which types          */
        !           717:         MAIL_YOUR                                      /* mail sent to you                                                     */
        !           718:        ,MAIL_SENT                                      /* mail you have sent                                           */
        !           719:        ,MAIL_ANY                                       /* mail sent to or from you                                     */
        !           720:        ,MAIL_ALL                                       /* all mail (ignores usernumber arg)            */
        !           721:        };                                                      
        !           722:                                                                
        !           723:                                                                /* Bits in the mode of external()           */
        !           724: #define EX_SH       (1<<0)             /* Use command shell to load other process  */
        !           725: #define EX_OUTR     (1<<1)             /* Copy DOS output to remote                */
        !           726: #define EX_OUTL        (1<<2)          /* Use _lputc() for local DOS output            */
        !           727: #define EX_INR         (1<<3)          /* Trap int 16h keyboard input requests     */
        !           728: #define EX_WWIV        WWIVCOLOR       /* Expand WWIV color codes to ANSI sequence */
        !           729: #define EX_SWAP        (1<<5)          /* Swap out for this external (*legacy*)        */
        !           730: #define EX_POPEN       (1<<7)          /* Leave COM port open  (*legacy*)                      */
        !           731: #define EX_OFFLINE     (1<<8)          /* Run this program offline                                     */
        !           732: #define EX_BG          (1<<10)         /* Back-ground/detached process                         */
        !           733: #define EX_BIN         (1<<11)         /* Binary mode (no Unix LF to CRLF)                     */
        !           734: #define EX_NATIVE      XTRN_NATIVE             /* Native 32-bit application                    */
        !           735: #define EX_CHKTIME     XTRN_CHKTIME    /* Check time left                                              */
        !           736: #define EX_NOECHO      XTRN_NOECHO             /* Don't echo stdin to stdout                   */
        !           737: 
        !           738: #if defined(__unix)
        !           739: #define EX_WILDCARD    EX_SH           /* Expand wildcards using 'sh' on Unix          */
        !           740: #else
        !           741: #define EX_WILDCARD    0
        !           742: #endif
        !           743:                                                                
        !           744:                                                                /* telnet_gate() mode bits                                      */                                                      
        !           745: #define TG_ECHO                        (1<<0)  /* Turn on telnet echo                                          */
        !           746: #define TG_CRLF                        (1<<1)  /* Expand sole CR to CRLF                                       */
        !           747: #define TG_LINEMODE            (1<<2)  /* Send entire lines only                                       */
        !           748: #define TG_NODESYNC            (1<<3)  /* Call Nodesync, get msgs, etc.                        */
        !           749: #define TG_CTRLKEYS            (1<<4)  /* Interpret ^P ^U ^T, etc locally                      */
        !           750: #define TG_PASSTHRU            (1<<5)  /* Pass-through telnet commands/responses       */
        !           751: #define TG_RLOGIN              (1<<6)  /* Use BSD RLogin protocol                                      */
        !           752: #define TG_NOCHKTIME   (1<<7)  /* Don't check time left while gated            */
        !           753: #define TG_NOTERMTYPE  (1<<8)  /* Request client "DONT TERM_TYPE"                      */
        !           754:                                                                
        !           755: enum {                                                 /* Values for 'mode' in listfileinfo        */
        !           756:         FI_INFO                        /* Just list file information               */
        !           757:        ,FI_REMOVE                      /* Remove/Move/Edit file information        */
        !           758:        ,FI_DOWNLOAD                    /* Download files                           */
        !           759:        ,FI_OLD                         /* Search/Remove files not downloaded since */
        !           760:        ,FI_OLDUL                                       /* Search/Remove files uploaded before      */
        !           761:        ,FI_OFFLINE                             /* Search/Remove files not online                       */
        !           762:        ,FI_USERXFER                            /* User Xfer Download                       */
        !           763:        ,FI_CLOSE                                       /* Close any open records                                       */
        !           764:        };                                                      
        !           765: 
        !           766: enum XFER_TYPE {                               /* Values for type in xfer_prot_select()        */
        !           767:         XFER_UPLOAD
        !           768:        ,XFER_DOWNLOAD
        !           769:        ,XFER_BATCH_UPLOAD
        !           770:        ,XFER_BATCH_DOWNLOAD
        !           771:        ,XFER_BIDIR
        !           772: };
        !           773:        
        !           774: #define L_LOGON     1                  /* Logon List maintenance                   */
        !           775: #define LOL_SIZE    81                 /* Length of each logon list entry          */
        !           776:                                                                
        !           777:                                                                /* Bits in mode of scanposts() function         */
        !           778: #define SCAN_CONST     (1<<0)          /* Continuous message scanning                          */
        !           779: #define SCAN_NEW       (1<<1)          /* New scanning                                                         */
        !           780: #define SCAN_BACK      (1<<2)          /* Scan the last message if no new                      */
        !           781: #define SCAN_TOYOU     (1<<3)          /* Scan for messages to you                             */
        !           782: #define SCAN_FIND      (1<<4)          /* Scan for text in messages                            */
        !           783: #define SCAN_UNREAD (1<<5)             /* Find un-read messages to you                         */
        !           784:                                                                
        !           785:                                                                /* Bits in misc of chan_t                                       */
        !           786: #define CHAN_PW        (1<<0)          /* Can be password protected                            */
        !           787: #define CHAN_GURU      (1<<1)          /* Guru joins empty channel                             */
        !           788:                                                                
        !           789: enum {                                                 /* Values of mode for userlist function     */
        !           790:         UL_ALL                                         /* List all users in userlist                           */
        !           791:        ,UL_SUB                                 /* List all users with access to cursub     */
        !           792:        ,UL_DIR                                         /* List all users with access to curdir         */
        !           793:        };                                                      
        !           794:                                                                
        !           795:                                                                
        !           796: #define BO_LEN         16                      /* backout.dab record length                            */
        !           797:                                                                
        !           798: #define BO_OPENFILE 0                  /* Backout types */
1.1       root      799: 
                    800: /**********/
                    801: /* Macros */
                    802: /**********/
                    803: 
                    804: #define CRLF                   { outchar(CR); outchar(LF); }
                    805: #define SYSOP_LEVEL            90
                    806: #define SYSOP                  (useron.level>=SYSOP_LEVEL || sys_status & SS_TMPSYSOP)
                    807: #define REALSYSOP              (useron.level>=SYSOP_LEVEL)
                    808: #define FLAG(x)                (ulong)(1UL<<(x-'A'))
                    809: #define CLS            outchar(FF)
                    810: #define WHERE          __LINE__,__FILE__
                    811: #define SAVELINE               { slatr[slcnt]=latr; \
1.1.1.2 ! root      812:                                                        slcuratr[slcnt]=curatr; \
        !           813:                                                        sprintf(slbuf[slcnt],"%.*s",lbuflen,lbuf); \
        !           814:                                                        if(slcnt<SAVE_LINES) slcnt++; \
1.1       root      815:                                                        lbuflen=0; }
1.1.1.2 ! root      816: #define RESTORELINE    { lbuflen=0; if(slcnt) --slcnt; \
        !           817:                                                        attr(slatr[slcnt]); \
1.1       root      818:                                                        rputs(slbuf[slcnt]); \
1.1.1.2 ! root      819:                                                        curatr=slcuratr[slcnt]; }
1.1       root      820: #define RIOSYNC(x)             { if(online==ON_REMOTE) riosync(x); }
                    821: #define SYNC                   { getnodedat(cfg.node_num,&thisnode,0); \
                    822:                                                  RIOSYNC(0); \
                    823:                                                  nodesync(); }
                    824: #define ASYNC                  { getnodedat(cfg.node_num,&thisnode,0); \
                    825:                                                  RIOSYNC(1); \
                    826:                                                  nodesync(); }
                    827: #define ANSI_SAVE()    rputs("\x1b[s")
                    828: #define ANSI_RESTORE() rputs("\x1b[u")
                    829: #define GOTOXY(x,y)     rprintf("\x1b[%d;%dH",y,x);
                    830: #define TM_YEAR(yy)            ((yy)%100)
1.1.1.2 ! root      831: #define sbbs_beep(f,d) BEEP(f,d)
        !           832: #define mswait(x)              SLEEP(x)
        !           833: #define sbbs_random(x) xp_random(x)
        !           834: 
        !           835: /**************************************/
        !           836: /* Text Attribute (color) Definitions */
        !           837: /**************************************/
        !           838: #define HIGH  0x08      /* High intensity foreground text */
1.1       root      839: #ifndef BLINK
1.1.1.2 ! root      840: #define BLINK 0x80             /* Blinking text */
1.1       root      841: #endif
                    842: 
                    843: #ifndef __COLORS
                    844: #define __COLORS
                    845: 
                    846: enum COLORS {
1.1.1.2 ! root      847:        BLACK,                  /* dark colors (HIGH bit unset) */
1.1       root      848:        BLUE,
                    849:        GREEN,
                    850:        CYAN,
                    851:        RED,
                    852:        MAGENTA,
                    853:        BROWN,
                    854:        LIGHTGRAY,
1.1.1.2 ! root      855:        DARKGRAY,               /* light colors (HIGH bit set) */
1.1       root      856:        LIGHTBLUE,
                    857:        LIGHTGREEN,
                    858:        LIGHTCYAN,
                    859:        LIGHTRED,
                    860:        LIGHTMAGENTA,
                    861:        YELLOW,
                    862:        WHITE
                    863: };
                    864: 
1.1.1.2 ! root      865: #endif /* __COLORS */
        !           866: 
        !           867: #define ANSI_NORMAL            0x100
        !           868: #define BG_BLACK               0x200
        !           869: #define BG_BLUE                        (BLUE<<4)
        !           870: #define BG_GREEN               (GREEN<<4)
        !           871: #define BG_CYAN                        (CYAN<<4)
        !           872: #define BG_RED                 (RED<<4)
        !           873: #define BG_MAGENTA             (MAGENTA<<4)
        !           874: #define BG_BROWN               (BROWN<<4)
        !           875: #define BG_LIGHTGRAY   (LIGHTGRAY<<4)
1.1       root      876: 
                    877: /********************/
                    878: /* Type Definitions */
                    879: /********************/
                    880: 
                    881: typedef struct {                                               /* Users information */
                    882:        ushort  number,                                         /* Number */
                    883:                        uls,                                            /* Number of uploads */
                    884:                        dls,                                            /* Number of downloads */
                    885:                        posts,                                          /* Number of posts */
                    886:                        emails,                                         /* Number of emails */
                    887:                        fbacks,                                         /* Number of emails sent to sysop */
                    888:                        etoday,                                         /* Emails today */
                    889:                        ptoday,                                         /* Posts today */
                    890:                        timeon,                                         /* Total time on */
                    891:                        textra,                                         /* Extra time for today */
                    892:                        logons,                                         /* Total logons */
                    893:                        ttoday,                                         /* Time on today */
                    894:                        tlast,                                          /* Time on last call */
                    895:                        ltoday,                                         /* Logons today */
                    896:                        xedit,                                          /* External editor (1 based) */
                    897:                        shell;                                          /* Command shell */
                    898: 
                    899:        char    alias[LEN_ALIAS+1],             /* Alias */
                    900:                        name[LEN_NAME+1],                       /* Name - Real */
                    901:                        handle[LEN_HANDLE+1],           /* Chat handle */
                    902:                        comp[LEN_COMP+1],                       /* Computer type */
                    903:                        note[LEN_NOTE+1],                       /* Public notice about this user */
                    904:                        address[LEN_ADDRESS+1],         /* Street Address */
                    905:                        location[LEN_LOCATION+1],       /* Location of user */
                    906:                        zipcode[LEN_ZIPCODE+1],         /* Zip/Postal code */
                    907:                        pass[LEN_PASS+1],                       /* Password - not case sensitive */
                    908:                        birth[LEN_BIRTH+1],             /* Birthday in MM/DD/YY format */
                    909:                        phone[LEN_PHONE+1],                     /* Phone number xxx-xxx-xxxx format */
                    910:                        modem[LEN_MODEM+1],                     /* Modem type - 8 chars max */
                    911:                        netmail[LEN_NETMAIL+1],         /* NetMail forwarding address */
                    912:                        tmpext[4],                                      /* QWK Packet extension */
                    913:                        comment[LEN_COMMENT+1],         /* Private comment about user */
1.1.1.2 ! root      914:                        cursub[LEN_EXTCODE+1],          /* Current sub-board internal code */
        !           915:                        curdir[LEN_EXTCODE+1],          /* Current directory internal code */
        !           916:                        curxtrn[9];                                     /* Current external program internal code */
1.1       root      917: 
                    918:        uchar   level,                                          /* Security level */
                    919:                        sex,                                            /* Sex - M or F */
                    920:                        rows,                           /* Rows of text */
                    921:                        prot,                                           /* Default transfer protocol */
                    922:                        leech;                                          /* Leech attempt counter */
                    923: 
                    924:        ulong   misc,                                           /* Misc. bits - ANSI, Deleted etc. */
                    925:                        qwk,                                            /* QWK settings */
                    926:                        chat,                                           /* Chat defaults */
                    927:                        flags1,                                         /* Flag set #1 */
                    928:                        flags2,                                         /* Flag set #2 */
                    929:                        flags3,                                         /* Flag set #3 */
                    930:                        flags4,                                         /* Flag set #4 */
                    931:                        exempt,                                         /* Exemption Flags */
                    932:                        rest,                                           /* Restriction Flags */
                    933:                        ulb,                                            /* Total bytes uploaded */
                    934:                        dlb,                                            /* Total bytes downloaded */
                    935:                        cdt,                                            /* Credits */
                    936:                        min,                                            /* Minutes */
                    937:                        freecdt;                                        /* Free credits (renewed daily) */
                    938:        time_t  firston,                                        /* Date/Time first called */
                    939:                        laston,                                         /* Last logoff date/time */
                    940:                        expire,                                         /* Expiration date */
                    941:                        pwmod,                                          /* Password last modified */
1.1.1.2 ! root      942:                        ns_time,                                        /* Date/Time of last new file scan */
        !           943:                        logontime;                                      /* Time of current logon */
        !           944: 
        !           945: } user_t;
1.1       root      946: 
                    947: typedef struct {                                               /* File (transfers) Data */
                    948:        char    name[13],                                       /* Name of file FILENAME.EXT */
                    949:                        desc[LEN_FDESC+1],                      /* Uploader's Description */
1.1.1.2 ! root      950:                        uler[LEN_ALIAS+1];                      /* User who uploaded */
1.1       root      951:        uchar   opencount;                                      /* Times record is currently open */
                    952:        time_t  date,                                           /* File date/time */
                    953:                        dateuled,                                       /* Date/Time (Unix) Uploaded */
                    954:                        datedled;                                       /* Date/Time (Unix) Last downloaded */
                    955:        ushort  dir,                                            /* Directory file is in */
                    956:                        altpath,
                    957:                        timesdled,                                      /* Total times downloaded */
                    958:                        timetodl;                                       /* How long transfer time */
                    959:        long    datoffset,                                      /* Offset into .DAT file */
                    960:                        size,                                           /* Size of file */
                    961:                        misc;                                           /* Miscellaneous bits */
                    962:        ulong   cdt;                                            /* Credit value for this file */
                    963: 
1.1.1.2 ! root      964: } file_t;
        !           965: 
        !           966: typedef idxrec_t post_t;                               /* defined in smbdefs.h */
        !           967: typedef idxrec_t mail_t;                               /* defined in smbdefs.h */
        !           968: typedef fidoaddr_t faddr_t;                            /* defined in smbdefs.h */
1.1       root      969: 
                    970: typedef struct {                                               /* System/Node Statistics */
                    971:        ulong   logons,                                         /* Total Logons on System */
                    972:                        ltoday,                                         /* Total Logons Today */
                    973:                        timeon,                                         /* Total Time on System */
                    974:                        ttoday,                                         /* Total Time Today */
                    975:                        uls,                                            /* Total Uploads Today */
                    976:                        ulb,                                            /* Total Upload Bytes Today */
                    977:                        dls,                                            /* Total Downloads Today */
                    978:                        dlb,                                            /* Total Download Bytes Today */
                    979:                        ptoday,                                         /* Total Posts Today */
                    980:                        etoday,                                         /* Total Emails Today */
                    981:                        ftoday;                                         /* Total Feedbacks Today */
                    982:        ushort  nusers;                                         /* Total New Users Today */
                    983: 
1.1.1.2 ! root      984: } stats_t;
1.1       root      985: 
1.1.1.2 ! root      986: typedef struct {                                               /* Sub-board scan information */
        !           987:        ushort  cfg;                                            /* User's configuration */
        !           988:        ulong   ptr;                                            /* New-message pointer */
        !           989:        ulong   last;                                           /* Last read message number */
        !           990:        ushort  sav_cfg;                                        /* Saved configuration */
        !           991:        ulong   sav_ptr;                                        /* Saved New-message pointer */
        !           992:        ulong   sav_last;                                       /* Saved Last read message number */
        !           993: } subscan_t;
1.1       root      994: 
                    995: #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.