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