|
|
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 */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.