|
|
1.1 ! root 1: /* SBBSDEFS.H */ ! 2: ! 3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */ ! 4: ! 5: /************************************************************/ ! 6: /* Constants, macros, and typedefs for use ONLY with SBBS */ ! 7: /************************************************************/ ! 8: ! 9: #ifndef _SBBSDEFS_H ! 10: #define _SBBSDEFS_H ! 11: ! 12: #include "gen_defs.h" ! 13: #include "nodedefs.h" ! 14: #include <time.h> ! 15: ! 16: /*************/ ! 17: /* Constants */ ! 18: /*************/ ! 19: ! 20: #define VERSION "2.30" /* Version: Major.minor */ ! 21: #define REVISION 'A' ! 22: #define BETA " " /* Space if non-beta, " �eta" otherwise */ ! 23: ! 24: /************/ ! 25: /* Maximums */ ! 26: /************/ ! 27: ! 28: #define DEMO_NODES 2 ! 29: #define MAX_NODES 250 ! 30: ! 31: #ifdef __FLAT__ ! 32: #define MAX_FILES 10000 /* Maximum number of files per dir */ ! 33: #define MAX_SYSMAIL 50000 /* Maximum number of total emails in system */ ! 34: #else ! 35: #define MAX_FILES 1000 /* Maximum number of files per dir */ ! 36: #define MAX_SYSMAIL 5000 /* Maximum number of total emails in system */ ! 37: #endif ! 38: #define MAX_USERXFER 500 /* Maximum number of dest. users of usrxfer */ ! 39: ! 40: ! 41: #define LEN_DIR 63 /* Maximum length of directory paths */ ! 42: #define LEN_CMD 63 /* Maximum length of command lines */ ! 43: ! 44: /* Lengths of various strings */ ! 45: #define LEN_GSNAME 15 /* Group/Lib short name */ ! 46: #define LEN_GLNAME 40 /* Group/Lib long name */ ! 47: #define LEN_SSNAME 25 /* Sub/Dir short name */ ! 48: #define LEN_SLNAME 40 /* Sub/Dir long name */ ! 49: ! 50: /* User Questions */ ! 51: #define UQ_ALIASES (1L<<0) /* Ask for alias */ ! 52: #define UQ_LOCATION (1L<<1) /* Ask for location */ ! 53: #define UQ_ADDRESS (1L<<2) /* Ask for address */ ! 54: #define UQ_PHONE (1L<<3) /* Ask for phone number */ ! 55: #define UQ_HANDLE (1L<<4) /* Ask for chat handle */ ! 56: #define UQ_DUPHAND (1L<<5) /* Search for duplicate handles */ ! 57: #define UQ_SEX (1L<<6) /* Ask for sex :) */ ! 58: #define UQ_BIRTH (1L<<7) /* Ask for birth date */ ! 59: #define UQ_COMP (1L<<8) /* Ask for computer type */ ! 60: #define UQ_MC_COMP (1L<<9) /* Multiple choice computer type */ ! 61: #define UQ_REALNAME (1L<<10) /* Ask for real name */ ! 62: #define UQ_DUPREAL (1L<<11) /* Search for duplicate real names */ ! 63: #define UQ_COMPANY (1L<<12) /* Ask for company name */ ! 64: #define UQ_NOEXASC (1L<<13) /* Don't allow ex-ASCII in user text */ ! 65: #define UQ_CMDSHELL (1L<<14) /* Ask for command shell */ ! 66: #define UQ_XEDIT (1L<<15) /* Ask for external editor */ ! 67: #define UQ_NODEF (1L<<16) /* Don't ask for default settings */ ! 68: #define UQ_NOCOMMAS (1L<<17) /* Do not require commas in location */ ! 69: ! 70: ! 71: /* Different bits in sys_misc */ ! 72: #define SM_CLOSED (1L<<0) /* System is clsoed to New Users */ ! 73: #define SM_SYSSTAT (1L<<1) /* Sysops activity included in statistics */ ! 74: #define SM_NOBEEP (1L<<2) /* No beep sound locally */ ! 75: #define SM_PWEDIT (1L<<3) /* Allow users to change their passwords */ ! 76: #define SM_TIMED_EX (1L<<4) /* Timed event must run exclusively */ ! 77: #define SM_ANON_EM (1L<<5) /* Allow anonymous e-mail */ ! 78: #define SM_LISTLOC (1L<<6) /* Use location of caller in user lists */ ! 79: #define SM_WILDCAT (1L<<7) /* Expand Wildcat color codes in messages */ ! 80: #define SM_PCBOARD (1L<<8) /* Expand PCBoard color codes in messages */ ! 81: #define SM_WWIV (1L<<9) /* Expand WWIV color codes in messages */ ! 82: #define SM_CELERITY (1L<<10) /* Expand Celerity color codes in messages */ ! 83: #define SM_RENEGADE (1L<<11) /* Expand Renegade color codes in messages */ ! 84: #define SM_ECHO_PW (1L<<12) /* Echo passwords locally */ ! 85: #define SM_REQ_PW (1L<<13) /* Require passwords locally */ ! 86: #define SM_L_SYSOP (1L<<14) /* Allow local sysop logon/commands */ ! 87: #define SM_R_SYSOP (1L<<15) /* Allow remote sysop logon/commands */ ! 88: #define SM_QUOTE_EM (1L<<16) /* Allow quoting of e-mail */ ! 89: #define SM_EURODATE (1L<<17) /* Europian date format (DD/MM/YY) */ ! 90: #define SM_MILITARY (1L<<18) /* Military time format */ ! 91: #define SM_TIMEBANK (1L<<19) /* Allow time bank functions */ ! 92: #define SM_FILE_EM (1L<<20) /* Allow file attachments in E-mail */ ! 93: #define SM_SHRTPAGE (1L<<21) /* Short sysop page */ ! 94: #define SM_TIME_EXP (1L<<22) /* Set to expired values if out-of-time */ ! 95: #define SM_FASTMAIL (1L<<23) /* Fast e-mail storage mode */ ! 96: #define SM_QVALKEYS (1L<<24) /* Quick validation keys enabled */ ! 97: #define SM_ERRALARM (1L<<25) /* Error beeps on */ ! 98: #define SM_FWDTONET (1L<<26) /* Allow forwarding of e-mail to netmail */ ! 99: #define SM_DELREADM (1L<<27) /* Delete read mail automatically */ ! 100: #define SM_NOCDTCVT (1L<<28) /* No credit to minute conversions allowed */ ! 101: #define SM_DELEMAIL (1L<<29) /* Physically remove deleted e-mail immed. */ ! 102: #define SM_USRVDELM (1L<<30) /* Users can see deleted msgs */ ! 103: #define SM_SYSVDELM (1L<<31) /* Sysops can see deleted msgs */ ! 104: ! 105: /* Different bits in node_misc */ ! 106: #define NM_ANSALARM (1<<0) /* Alarm locally on answer */ ! 107: #define NM_WFCSCRN (1<<1) /* Wait for call screen */ ! 108: #define NM_WFCMSGS (1<<2) /* Include total messages/files on WFC */ ! 109: #define NM_LCL_EDIT (1<<3) /* Use local editor to create messages */ ! 110: #define NM_EMSOVL (1<<4) /* Use expanded memory of overlays */ ! 111: #define NM_WINOS2 (1<<5) /* Use Windows/OS2 time slice API call */ ! 112: #define NM_INT28 (1<<6) /* Make int 28 DOS idle calls */ ! 113: #define NM_NODV (1<<7) /* Don't detect and use DESQview API */ ! 114: #define NM_NO_NUM (1<<8) /* Don't allow logons by user number */ ! 115: #define NM_LOGON_R (1<<9) /* Allow logons by user real name */ ! 116: #define NM_LOGON_P (1<<10) /* Secure logons (always ask for password) */ ! 117: #define NM_NO_LKBRD (1<<11) /* No local keyboard (at all) */ ! 118: #define NM_SYSPW (1<<12) /* Protect WFC keys and Alt keys with SY: */ ! 119: #define NM_NO_INACT (1<<13) /* No local inactivity alert/logoff */ ! 120: #define NM_NOBEEP (1<<14) /* Don't beep locally */ ! 121: #define NM_LOWPRIO (1<<15) /* Always use low priority input */ ! 122: #define NM_7BITONLY (1L<<16) /* Except 7-bit input only (E71 terminals) */ ! 123: #define NM_RESETVID (1L<<17) /* Reset video mode between callers? */ ! 124: ! 125: /* Miscellaneous Modem Settings (mdm_misc) */ ! 126: #define MDM_CTS (1<<0) /* Use hardware send flow control */ ! 127: #define MDM_RTS (1<<1) /* Use hardware recv flow control */ ! 128: #define MDM_STAYHIGH (1<<2) /* Stay at highest DTE rate */ ! 129: #define MDM_CALLERID (1<<3) /* Supports Caller ID */ ! 130: #define MDM_DUMB (1<<4) /* Just watch DCD for answer - dumb modem */ ! 131: #define MDM_NODTR (1<<5) /* Don't drop DTR for hang-up */ ! 132: #define MDM_KNOWNRES (1<<6) /* Allow known result codes only */ ! 133: #define MDM_VERBAL (1<<7) /* Use verbal result codes */ ! 134: ! 135: /* Bit values for level_misc[x] */ ! 136: #define LEVEL_EXPTOLVL (1<<0) /* Expire to level_expireto[x] */ ! 137: #define LEVEL_EXPTOVAL (1<<1) /* Expire to val[level_expireto[x]] */ ! 138: ! 139: /* Bit values for prot[x].misc */ ! 140: #define PROT_DSZLOG (1<<0) /* Supports DSZ Log */ ! 141: ! 142: /* Bit values in netmail_misc */ ! 143: ! 144: #define NMAIL_ALLOW (1<<0) /* Allow NetMail */ ! 145: #define NMAIL_CRASH (1<<1) /* Default netmail to crash */ ! 146: #define NMAIL_HOLD (1<<2) /* Default netmail to hold */ ! 147: #define NMAIL_KILL (1<<3) /* Default netmail to kill after sent */ ! 148: #define NMAIL_ALIAS (1<<4) /* Use Aliases in NetMail */ ! 149: #define NMAIL_FILE (1<<5) /* Allow file attachments */ ! 150: #define NMAIL_DIRECT (1<<6) /* Default netmail to direct */ ! 151: ! 152: /* Attribute bits for fido msg header */ ! 153: #define FIDO_PRIVATE (1<<0) /* Private message */ ! 154: #define FIDO_CRASH (1<<1) /* Crash-mail (send immediately) */ ! 155: #define FIDO_RECV (1<<2) /* Received successfully */ ! 156: #define FIDO_SENT (1<<3) /* Sent successfully */ ! 157: #define FIDO_FILE (1<<4) /* File attached */ ! 158: #define FIDO_INTRANS (1<<5) /* In transit */ ! 159: #define FIDO_ORPHAN (1<<6) /* Orphan */ ! 160: #define FIDO_KILLSENT (1<<7) /* Kill it after sending it */ ! 161: #define FIDO_LOCAL (1<<8) /* Created locally - on this system */ ! 162: #define FIDO_HOLD (1<<9) /* Hold - don't send it yet */ ! 163: #define FIDO_FREQ (1<<11) /* File request */ ! 164: #define FIDO_RRREQ (1<<12) /* Return receipt request */ ! 165: #define FIDO_RR (1<<13) /* This is a return receipt */ ! 166: #define FIDO_AUDIT (1<<14) /* Audit request */ ! 167: #define FIDO_FUPREQ (1<<15) /* File update request */ ! 168: ! 169: /* Bit values for sub[x].misc */ ! 170: #define SUB_NSCAN (1L<<0) /* Scan this sub-board for new msgs */ ! 171: #define SUB_YSCAN (1L<<1) /* Scan for new messages to you only */ ! 172: #define SUB_SSCAN (1L<<2) /* Scan this sub-board for msgs to you */ ! 173: #define SUB_QNET (1L<<3) /* Sub-board is netted via QWK network */ ! 174: #define SUB_PNET (1L<<4) /* Sub-board is netted via PostLink */ ! 175: #define SUB_FIDO (1L<<5) /* Sub-board is netted via FidoNet */ ! 176: #define SUB_PRIV (1L<<6) /* Allow private posts on sub */ ! 177: #define SUB_PONLY (1L<<7) /* Private posts only */ ! 178: #define SUB_ANON (1L<<8) /* Allow anonymous posts on sub */ ! 179: #define SUB_AONLY (1L<<9) /* Anonymous only */ ! 180: #define SUB_NAME (1L<<10) /* Must use real names */ ! 181: #define SUB_DEL (1L<<11) /* Allow users to delete messages */ ! 182: #define SUB_DELLAST (1L<<12) /* Allow users to delete last msg only */ ! 183: #define SUB_FORCED (1L<<13) /* Sub-board is forced scanning */ ! 184: #define SUB_NOTAG (1L<<14) /* Don't add tag or origin lines */ ! 185: #define SUB_TOUSER (1L<<15) /* Prompt for to user on posts */ ! 186: #define SUB_ASCII (1L<<16) /* ASCII characters only */ ! 187: #define SUB_QUOTE (1L<<17) /* Allow online quoting */ ! 188: #define SUB_NSDEF (1L<<18) /* New-Scan on by default */ ! 189: #define SUB_INET (1L<<19) /* Sub-board is netted via Internet */ ! 190: #define SUB_FAST (1L<<20) /* Fast storage mode */ ! 191: #define SUB_KILL (1L<<21) /* Kill read messages automatically */ ! 192: #define SUB_KILLP (1L<<22) /* Kill read pvt messages automatically */ ! 193: #define SUB_SYSPERM (1L<<23) /* Sysop messages are permament */ ! 194: #define SUB_GATE (1L<<24) /* Gateway between Network types */ ! 195: #define SUB_LZH (1L<<25) /* Use LZH compression for msgs */ ! 196: #define SUB_SSDEF (1L<<26) /* Default ON for Scan for Your msgs */ ! 197: #define SUB_HYPER (1L<<27) /* Hyper allocation */ ! 198: ! 199: /* Bit values for dir[x].misc */ ! 200: #define DIR_FCHK (1L<<0) /* Check for file existance */ ! 201: #define DIR_RATE (1L<<1) /* Force uploads to be rated G,R, or X */ ! 202: #define DIR_MULT (1L<<2) /* Ask for multi-disk numbering */ ! 203: #define DIR_DUPES (1L<<3) /* Search this dir for upload dupes */ ! 204: #define DIR_FREE (1L<<4) /* Free downloads */ ! 205: #define DIR_TFREE (1L<<5) /* Time to download is free */ ! 206: #define DIR_CDTUL (1L<<6) /* Credit Uploads */ ! 207: #define DIR_CDTDL (1L<<7) /* Credit Downloads */ ! 208: #define DIR_ANON (1L<<8) /* Anonymous uploads */ ! 209: #define DIR_AONLY (1L<<9) /* Anonymous only */ ! 210: #define DIR_ULDATE (1L<<10) /* Include upload date in listing */ ! 211: #define DIR_DIZ (1L<<11) /* FILE_ID.DIZ and DESC.SDI support */ ! 212: #define DIR_NOSCAN (1L<<12) /* Don't new-scan this directory */ ! 213: #define DIR_NOAUTO (1L<<13) /* Don't auto-add this directory */ ! 214: #define DIR_ULTIME (1L<<14) /* Deduct time during uploads */ ! 215: #define DIR_CDTMIN (1L<<15) /* Give uploader minutes instead of cdt */ ! 216: #define DIR_SINCEDL (1L<<16) /* Purge based on days since last dl */ ! 217: #define DIR_MOVENEW (1L<<17) /* Files marked as new when moved */ ! 218: ! 219: /* Bit values for file_t.misc */ ! 220: #define FM_EXTDESC (1<<0) /* Extended description exists */ ! 221: #define FM_ANON (1<<1) /* Anonymous upload */ ! 222: ! 223: enum { /* errormsg() codes */ ! 224: ERR_OPEN /* opening a file */ ! 225: ,ERR_CLOSE /* close a file */ ! 226: ,ERR_FDOPEN /* associating a stream with fd */ ! 227: ,ERR_READ /* reading from file */ ! 228: ,ERR_WRITE /* writing to file */ ! 229: ,ERR_REMOVE /* removing a file */ ! 230: ,ERR_ALLOC /* allocating memory */ ! 231: ,ERR_CHK /* checking */ ! 232: ,ERR_LEN /* file length */ ! 233: ,ERR_EXEC /* executing */ ! 234: ,ERR_CHDIR /* changing directory */ ! 235: ,ERR_CREATE /* creating */ ! 236: ,ERR_LOCK /* locking */ ! 237: ,ERR_UNLOCK /* unlocking */ ! 238: }; ! 239: ! 240: enum { /* Values for dir[x].sort */ ! 241: SORT_NAME_A /* Sort by filename, ascending */ ! 242: ,SORT_NAME_D /* Sort by filename, descending */ ! 243: ,SORT_DATE_A /* Sort by upload date, ascending */ ! 244: ,SORT_DATE_D /* Sort by upload date, descending */ ! 245: }; ! 246: ! 247: enum { ! 248: clr_mnehigh ! 249: ,clr_mnelow ! 250: ,clr_mnecmd ! 251: ,clr_inputline ! 252: ,clr_err ! 253: ,clr_nodenum ! 254: ,clr_nodeuser ! 255: ,clr_nodestatus ! 256: ,clr_filename ! 257: ,clr_filecdt ! 258: ,clr_filedesc ! 259: ,clr_filelsthdrbox ! 260: ,clr_filelstline ! 261: ,clr_chatlocal ! 262: ,clr_chatremote ! 263: ,clr_multichat ! 264: ,TOTAL_COLORS }; ! 265: ! 266: enum { /* Values for xtrn_t.type */ ! 267: XTRN_NONE /* No data file needed */ ! 268: ,XTRN_SBBS /* Synchronet external */ ! 269: ,XTRN_WWIV /* WWIV external */ ! 270: ,XTRN_GAP /* Gap door */ ! 271: ,XTRN_RBBS /* RBBS, QBBS, or Remote Access */ ! 272: ,XTRN_WILDCAT /* Wildcat */ ! 273: ,XTRN_PCBOARD /* PCBoard */ ! 274: ,XTRN_SPITFIRE /* SpitFire */ ! 275: ,XTRN_UTI /* UTI Doors - MegaMail */ ! 276: ,XTRN_SR /* Solar Realms */ ! 277: ,XTRN_RBBS1 /* DORINFO1.DEF always */ ! 278: ,XTRN_TRIBBS /* TRIBBS.SYS */ ! 279: }; ! 280: ! 281: enum { /* Values for xtrn_t.event */ ! 282: EVENT_NONE /* Only accessible by menu */ ! 283: ,EVENT_LOGON /* Execute during logon sequence */ ! 284: ,EVENT_LOGOFF /* Execute during logoff sequence */ ! 285: ,EVENT_NEWUSER /* Execute during newuser app. */ ! 286: ,EVENT_BIRTHDAY /* Execute on birthday */ ! 287: }; ! 288: ! 289: /* Misc bits for event_t.misc */ ! 290: #define EVENT_EXCL (1L<<0) /* Exclusive */ ! 291: #define EVENT_FORCE (1L<<1) /* Force users off-line for event */ ! 292: ! 293: /* Mode bits for QWK stuff */ ! 294: #define A_EXPAND (1<<0) /* Expand to ANSI sequences */ ! 295: #define A_LEAVE (1<<1) /* Leave in */ ! 296: #define A_STRIP (1<<2) /* Strip out */ ! 297: ! 298: /* Bits in xtrn_t.misc */ ! 299: #define MULTIUSER (1L<<0) /* allow multi simultaneous users */ ! 300: #define ANSI (1L<<1) /* user must have ANSI, same as ^^^ */ ! 301: #define IO_INTS (1L<<2) /* Intercept I/O interrupts */ ! 302: #define MODUSERDAT (1L<<3) /* Program can modify user data */ ! 303: #define WWIVCOLOR (1L<<4) /* Program uses WWIV color codes */ ! 304: #define EVENTONLY (1L<<5) /* Program executes as event only */ ! 305: #define STARTUPDIR (1L<<6) /* Create drop file in start-up dir */ ! 306: #define REALNAME (1L<<7) /* Use real name in drop file */ ! 307: #define SWAP (1L<<8) /* Swap for this door */ ! 308: #define FREETIME (1L<<9) /* Free time while in this door */ ! 309: #define QUICKBBS (1L<<10) /* QuickBBS style editor */ ! 310: #define EXPANDLF (1L<<11) /* Expand LF to CRLF editor */ ! 311: #define QUOTEALL (1L<<12) /* Automatically quote all of msg */ ! 312: #define QUOTENONE (1L<<13) /* Automatically quote none of msg */ ! 313: ! 314: /* Bits in user.qwk */ ! 315: #define QWK_FILES (1L<<0) /* Include new files list */ ! 316: #define QWK_EMAIL (1L<<1) /* Include unread e-mail */ ! 317: #define QWK_ALLMAIL (1L<<2) /* Include ALL e-mail */ ! 318: #define QWK_DELMAIL (1L<<3) /* Delete e-mail after download */ ! 319: #define QWK_BYSELF (1L<<4) /* Include messages from self */ ! 320: #define QWK_UNUSED (1L<<5) /* Currently unused */ ! 321: #define QWK_EXPCTLA (1L<<6) /* Expand ctrl-a codes to ascii */ ! 322: #define QWK_RETCTLA (1L<<7) /* Retain ctrl-a codes */ ! 323: #define QWK_ATTACH (1L<<8) /* Include file attachments */ ! 324: #define QWK_NOINDEX (1L<<9) /* Do not create index files in QWK */ ! 325: #define QWK_TZ (1L<<10) /* Include "@TZ" time zone in msgs */ ! 326: #define QWK_VIA (1L<<11) /* Include "@VIA" seen-bys in msgs */ ! 327: #define QWK_NOCTRL (1L<<12) /* No extraneous control files */ ! 328: ! 329: #define INVALID_DIR 0xffff /* Invalid directory value */ ! 330: #define INVALID_SUB 0xffff /* Invalid sub-board value */ ! 331: ! 332: #define KEY_BUFSIZE 1024 /* Size of keyboard input buffer */ ! 333: #define SAVE_LINES 4 /* Maximum number of lines to save */ ! 334: #define LINE_BUFSIZE 512 /* Size of line output buffer */ ! 335: ! 336: ! 337: #define TABSIZE 4 /* Tab Size */ ! 338: ! 339: #define SWAP_NONE 0x80 /* Allow no swapping for executables */ ! 340: ! 341: #define DSTSDABLEN 50 /* Length of DSTS.DAB file */ ! 342: ! 343: /* Console I/O Bits (console) */ ! 344: #define CON_R_ECHO (1<<0) /* Echo remotely */ ! 345: #define CON_R_ECHOX (1<<1) /* Echo X's to remote user */ ! 346: #define CON_R_INPUT (1<<2) /* Accept input remotely */ ! 347: #define CON_L_ECHO (1<<3) /* Echo locally */ ! 348: #define CON_L_ECHOX (1<<4) /* Echo X's locally */ ! 349: #define CON_L_INPUT (1<<5) /* Accept input locally */ ! 350: #define CON_RAW_IN (1<<8) /* Raw input mode - no editing capabilities */ ! 351: #define CON_ECHO_OFF (1<<10)/* Remote & Local echo disabled for ML/MF */ ! 352: #define CON_UPARROW (1<<11)/* Up arrow hit - move up one line */ ! 353: ! 354: /* Number of milliseconds */ ! 355: #define DELAY_HANGUP 250 /* Delay before modem drops carrier */ ! 356: #define DELAY_MDMTLD 500 /* Delay to give each ~ in modem strings */ ! 357: #define DELAY_SPIN 10 /* Delay for the spinning cursor */ ! 358: #define DELAY_AUTOHG 1500 /* Delay for auto-hangup (xfer) */ ! 359: ! 360: #define SEC_LOGON 1800 /* 30 minutes allowed to logon */ ! 361: #define SEC_BILLING 90 /* under 2 minutes per billing call */ ! 362: #define SEC_OK 5 /* Attempt to get an OK response from modem */ ! 363: #define SEC_ANSI 5 /* Attempt to get a valid ANSI response */ ! 364: #define SEC_ANSWER 30 /* Retries to get an answer code from modem */ ! 365: #define SEC_CID 10 /* Ten second pause for caller ID */ ! 366: #define SEC_RING 6 /* Maximum seconds between rings */ ! 367: ! 368: #define LOOP_NOPEN 500 /* Retries before file access denied */ ! 369: #define LOOP_NODEDAB 500 /* Retries on NODE.DAB locking/unlocking */ ! 370: ! 371: /* String lengths */ ! 372: #define LEN_ALIAS 25 /* User alias */ ! 373: #define LEN_NAME 25 /* User name */ ! 374: #define LEN_HANDLE 8 /* User chat handle */ ! 375: #define LEN_NOTE 30 /* User note */ ! 376: #define LEN_COMP 30 /* User computer description */ ! 377: #define LEN_COMMENT 60 /* User comment */ ! 378: #define LEN_NETMAIL 60 /* NetMail forwarding address */ ! 379: #define LEN_PASS 8 /* User password */ ! 380: #define LEN_PHONE 12 /* User phone number */ ! 381: #define LEN_BIRTH 8 /* Birthday in MM/DD/YY format */ ! 382: #define LEN_ADDRESS 30 /* User address */ ! 383: #define LEN_LOCATION 30 /* Location (City, State) */ ! 384: #define LEN_ZIPCODE 10 /* Zip/Postal code */ ! 385: #define LEN_MODEM 8 /* User modem type description */ ! 386: #define LEN_FDESC 58 /* File description */ ! 387: #define LEN_FCDT 9 /* 9 digits for file credit values */ ! 388: #define LEN_TITLE 70 /* Message title */ ! 389: #define LEN_MAIN_CMD 40 /* Storage in user.dat for custom commands */ ! 390: #define LEN_XFER_CMD 40 ! 391: #define LEN_SCAN_CMD 40 ! 392: #define LEN_MAIL_CMD 40 ! 393: #define LEN_CID 25 /* Caller ID (phone number) */ ! 394: #define LEN_ARSTR 40 /* Max length of Access Requirement string */ ! 395: #define LEN_CHATACTCMD 9 /* Chat action command */ ! 396: #define LEN_CHATACTOUT 65 /* Chat action output string */ ! 397: ! 398: /****************************************************************************/ ! 399: /* This is a list of offsets into the USER.DAT file for different variables */ ! 400: /* that are stored (for each user) */ ! 401: /****************************************************************************/ ! 402: #define U_ALIAS 0 /* Offset to alias */ ! 403: #define U_NAME (U_ALIAS+LEN_ALIAS) /* Offset to name */ ! 404: #define U_HANDLE (U_NAME+LEN_NAME) ! 405: #define U_NOTE (U_HANDLE+LEN_HANDLE+2) ! 406: #define U_COMP (U_NOTE+LEN_NOTE) ! 407: #define U_COMMENT (U_COMP+LEN_COMP+2) ! 408: ! 409: #define U_NETMAIL (U_COMMENT+LEN_COMMENT+2) ! 410: ! 411: #define U_ADDRESS (U_NETMAIL+LEN_NETMAIL+2) ! 412: #define U_LOCATION (U_ADDRESS+LEN_ADDRESS) ! 413: #define U_ZIPCODE (U_LOCATION+LEN_LOCATION) ! 414: ! 415: #define U_PASS (U_ZIPCODE+LEN_ZIPCODE+2) ! 416: #define U_PHONE (U_PASS+8) /* Offset to phone-number */ ! 417: #define U_BIRTH (U_PHONE+12) /* Offset to users birthday */ ! 418: #define U_MODEM (U_BIRTH+8) ! 419: #define U_LASTON (U_MODEM+8) ! 420: #define U_FIRSTON (U_LASTON+8) ! 421: #define U_EXPIRE (U_FIRSTON+8) ! 422: #define U_PWMOD (U_EXPIRE+8) ! 423: ! 424: #define U_LOGONS (U_PWMOD+8+2) ! 425: #define U_LTODAY (U_LOGONS+5) ! 426: #define U_TIMEON (U_LTODAY+5) ! 427: #define U_TEXTRA (U_TIMEON+5) ! 428: #define U_TTODAY (U_TEXTRA+5) ! 429: #define U_TLAST (U_TTODAY+5) ! 430: #define U_POSTS (U_TLAST+5) ! 431: #define U_EMAILS (U_POSTS+5) ! 432: #define U_FBACKS (U_EMAILS+5) ! 433: #define U_ETODAY (U_FBACKS+5) ! 434: #define U_PTODAY (U_ETODAY+5) ! 435: ! 436: #define U_ULB (U_PTODAY+5+2) ! 437: #define U_ULS (U_ULB+10) ! 438: #define U_DLB (U_ULS+5) ! 439: #define U_DLS (U_DLB+10) ! 440: #define U_CDT (U_DLS+5) ! 441: #define U_MIN (U_CDT+10) ! 442: ! 443: #define U_LEVEL (U_MIN+10+2) /* Offset to Security Level */ ! 444: #define U_FLAGS1 (U_LEVEL+2) /* Offset to Flags */ ! 445: #define U_TL (U_FLAGS1+8) /* Offset to unused field */ ! 446: #define U_FLAGS2 (U_TL+2) ! 447: #define U_EXEMPT (U_FLAGS2+8) ! 448: #define U_REST (U_EXEMPT+8) ! 449: #define U_ROWS (U_REST+8+2) /* Number of Rows on user's monitor */ ! 450: #define U_SEX (U_ROWS+2) /* Sex, Del, ANSI, color etc. */ ! 451: #define U_MISC (U_SEX+1) /* Miscellaneous flags in 8byte hex */ ! 452: #define U_OLDXEDIT (U_MISC+8) /* External editor (Version 1 method) */ ! 453: #define U_LEECH (U_OLDXEDIT+2) /* two hex digits - leech attempt count */ ! 454: #define U_CURSUB (U_LEECH+2) /* Current sub (internal code) */ ! 455: #define U_CURDIR (U_CURSUB+8) /* Current dir (internal code) */ ! 456: #define U_CMDSET (U_CURDIR+8) /* unused */ ! 457: #define U_MAIN_CMD (U_CMDSET+2+2) /* unused */ ! 458: #define U_XFER_CMD (U_MAIN_CMD+LEN_MAIN_CMD) /* unused */ ! 459: #define U_SCAN_CMD (U_XFER_CMD+LEN_XFER_CMD+2) /* unused */ ! 460: #define U_MAIL_CMD (U_SCAN_CMD+LEN_SCAN_CMD) /* unused */ ! 461: #define U_FREECDT (U_MAIL_CMD+LEN_MAIL_CMD+2) ! 462: #define U_FLAGS3 (U_FREECDT+10) /* Flag set #3 */ ! 463: #define U_FLAGS4 (U_FLAGS3+8) /* Flag set #4 */ ! 464: #define U_XEDIT (U_FLAGS4+8) /* External editor (code) */ ! 465: #define U_SHELL (U_XEDIT+8) /* Command shell (code) */ ! 466: #define U_QWK (U_SHELL+8) /* QWK settings */ ! 467: #define U_TMPEXT (U_QWK+8) /* QWK extension */ ! 468: #define U_CHAT (U_TMPEXT+3) /* Chat settings */ ! 469: #define U_NS_TIME (U_CHAT+8) /* New-file scan date/time */ ! 470: #define U_PROT (U_NS_TIME+8) /* Default transfer protocol */ ! 471: #define U_UNUSED (U_PROT+1) ! 472: #define U_LEN (U_UNUSED+28+2) ! 473: ! 474: /****************************************************************************/ ! 475: /* Offsets into DIR .DAT file for different fields for each file */ ! 476: /****************************************************************************/ ! 477: #define F_CDT 0 /* Offset in DIR#.DAT file for cdts */ ! 478: #define F_DESC (F_CDT+LEN_FCDT)/* Description */ ! 479: #define F_ULER (F_DESC+LEN_FDESC+2) /* Uploader */ ! 480: #define F_TIMESDLED (F_ULER+30+2) /* Number of times downloaded */ ! 481: #define F_OPENCOUNT (F_TIMESDLED+5+2) ! 482: #define F_MISC (F_OPENCOUNT+3+2) ! 483: #define F_ALTPATH (F_MISC+1) /* Two hex digit alternate path */ ! 484: #define F_LEN (F_ALTPATH+2+2) /* Total length of all fdat in file */ ! 485: ! 486: #define F_IXBSIZE 22 /* Length of each index entry */ ! 487: ! 488: ! 489: #define SIF_MAXBUF 0x7000 /* Maximum buffer size of SIF data */ ! 490: ! 491: /* NOTE: Do not change the values of the following block of defines! */ ! 492: ! 493: #define DELETED (1L<<0) /* Bit values for user.misc */ ! 494: #define ANSI (1L<<1) /* Supports ANSI terminal emulation */ ! 495: #define COLOR (1L<<2) /* Send color codes */ ! 496: #define RIP (1L<<3) /* Supports RIP terminal emulation */ ! 497: #define UPAUSE (1L<<4) /* Pause on every screen full */ ! 498: #define SPIN (1L<<5) /* Spinning cursor - Same as K_SPIN */ ! 499: #define INACTIVE (1L<<6) /* Inactive user slot */ ! 500: #define EXPERT (1L<<7) /* Expert menu mode */ ! 501: #define ANFSCAN (1L<<8) /* Auto New file scan */ ! 502: #define CLRSCRN (1L<<9) /* Clear screen before each message */ ! 503: #define QUIET (1L<<10) /* Quiet mode upon logon */ ! 504: #define BATCHFLAG (1L<<11) /* File list allow batch dl flags */ ! 505: #define NETMAIL (1L<<12) /* Forward e-mail to fidonet addr */ ! 506: #define CURSUB (1L<<13) /* Remember current sub-board/dir */ ! 507: #define ASK_NSCAN (1L<<14) /* Ask for newscanning upon logon */ ! 508: #define NO_EXASCII (1L<<15) /* Don't send extended ASCII */ ! 509: #define ASK_SSCAN (1L<<16) /* Ask for messages to you at logon */ ! 510: #define AUTOTERM (1L<<17) /* Autodetect terminal type */ ! 511: #define COLDKEYS (1L<<18) /* No hot-keys */ ! 512: #define EXTDESC (1L<<19) /* Extended file descriptions */ ! 513: #define AUTOHANG (1L<<20) /* Auto-hang-up after transfer */ ! 514: #define WIP (1L<<21) /* Supports WIP terminal emulation */ ! 515: ! 516: #define CLREOL 256 /* Character to erase to end of line */ ! 517: #define HIGH 8 /* High intensity for curatr */ ! 518: ! 519: /* Online status (online) */ ! 520: #define ON_LOCAL 1 /* Online locally */ ! 521: #define ON_REMOTE 2 /* Online remotely */ ! 522: #define ON_XFER 3 /* Online remotely - transferring file */ ! 523: #define ON_WFC 4 /* Online waiting for a call */ ! 524: ! 525: /* Varios SYSTEM parameters for sys_status */ ! 526: #define SS_LOGOPEN (1L<<0) /* Node's Log file is open */ ! 527: #define SS_INITIAL (1L<<1) /* The bbs data has been initialized. */ ! 528: #define SS_TMPSYSOP (1L<<2) /* Temporary Sysop Status */ ! 529: #define SS_USERON (1L<<3) /* A User is logged on to the BBS */ ! 530: #define SS_LCHAT (1L<<4) /* Local chat in progress */ ! 531: #define SS_CAP (1L<<5) /* Capture is on */ ! 532: #define SS_ANSCAP (1L<<6) /* Capture ANSI codes too */ ! 533: #define SS_FINPUT (1L<<7) /* Using file for input */ ! 534: #define SS_COMISR (1L<<8) /* Com port ISR is installed */ ! 535: #define SS_DAILY (1L<<9) /* Execute System Daily Event on logoff */ ! 536: #define SS_INUEDIT (1L<<10) /* Inside Alt-Useredit section */ ! 537: #define SS_ABORT (1L<<11) /* Global abort input or output flag */ ! 538: #define SS_SYSPAGE (1L<<12) /* Paging sysop */ ! 539: #define SS_SYSALERT (1L<<13) /* Notify sysop when users hangs up */ ! 540: #define SS_GURUCHAT (1L<<14) /* Guru chat in progress */ ! 541: #define SS_NODEDAB (1L<<15) /* NODE.DAB operations are okay */ ! 542: #define SS_EVENT (1L<<16) /* Time shortened due to upcoming event */ ! 543: #define SS_PAUSEON (1L<<17) /* Pause on, overriding user default */ ! 544: #define SS_PAUSEOFF (1L<<18) /* Pause off, overriding user default */ ! 545: #define SS_IN_CTRLP (1L<<19) /* Inside ctrl-p send node message func */ ! 546: #define SS_NEWUSER (1L<<20) /* New User online */ ! 547: #define SS_MDMDEBUG (1L<<21) /* Modem debug output */ ! 548: #define SS_NEST_PF (1L<<22) /* Nested in printfile function */ ! 549: #define SS_DCDHIGH (1L<<23) /* Assume DCD is high always */ ! 550: #define SS_SPLITP (1L<<24) /* Split-screen private chat */ ! 551: #define SS_NEWDAY (1L<<25) /* Date changed while online */ ! 552: ! 553: /* Bits in 'mode' for getkey and getstr */ ! 554: #define K_UPPER (1L<<0) /* Converts all letters to upper case */ ! 555: #define K_UPRLWR (1L<<1) /* Upper/Lower case automatically */ ! 556: #define K_NUMBER (1L<<2) /* Allow numbers only */ ! 557: #define K_WRAP (1L<<3) /* Allows word wrap */ ! 558: #define K_MSG (1L<<4) /* Allows ANSI, ^N ^A ^G */ ! 559: #define K_SPIN (1L<<5) /* Spinning cursor (same as SPIN) */ ! 560: #define K_LINE (1L<<6) /* Input line (inverse color) */ ! 561: #define K_EDIT (1L<<7) /* Edit string passed */ ! 562: #define K_CHAT (1L<<8) /* In chat multi-chat */ ! 563: #define K_NOCRLF (1L<<9) /* Don't print CRLF after string input */ ! 564: #define K_ALPHA (1L<<10) /* Only allow alphabetic characters */ ! 565: #define K_GETSTR (1L<<11) /* getkey called from getstr() */ ! 566: #define K_LOWPRIO (1L<<12) /* low priority input */ ! 567: #define K_NOEXASC (1L<<13) /* No extended ASCII allowed */ ! 568: #define K_E71DETECT (1L<<14) /* Detect E-7-1 terminal type */ ! 569: #define K_AUTODEL (1L<<15) /* Auto-delete text (used with K_EDIT) */ ! 570: #define K_COLD (1L<<16) /* Possible cold key mode */ ! 571: #define K_NOECHO (1L<<17) /* Don't echo input */ ! 572: ! 573: /* Bits in 'mode' for putmsg and printfile */ ! 574: #define P_NOABORT (1<<0) /* Disallows abortion of a message */ ! 575: #define P_SAVEATR (1<<1) /* Save the new current attributres after */ ! 576: /* msg has printed. */ ! 577: #define P_NOATCODES (1<<2) /* Don't allow @ codes */ ! 578: #define P_OPENCLOSE (1<<3) /* Open and close the file */ ! 579: ! 580: /* Bits in 'mode' for listfiles */ ! 581: #define FL_ULTIME (1<<0) /* List files by upload time */ ! 582: #define FL_DLTIME (1<<1) /* List files by download time */ ! 583: #define FL_NO_HDR (1<<2) /* Don't list directory header */ ! 584: #define FL_FINDDESC (1<<3) /* Find text in description */ ! 585: #define FL_EXFIND (1<<4) /* Find text in description - extended info */ ! 586: #define FL_VIEW (1<<5) /* View ZIP/ARC/GIF etc. info */ ! 587: ! 588: /* Bits in the mode of writemsg and email() */ ! 589: #define WM_EXTDESC (1<<0) /* Writing extended file description */ ! 590: #define WM_EMAIL (1<<1) /* Writing e-mail */ ! 591: #define WM_NETMAIL (1<<2) /* Writing NetMail */ ! 592: #define WM_ANON (1<<3) /* Writing anonymous message */ ! 593: #define WM_FILE (1<<4) /* Attaching a file to the message */ ! 594: #define WM_NOTOP (1<<5) /* Don't add top because we need top line */ ! 595: #define WM_QUOTE (1<<6) /* Quote file available */ ! 596: #define WM_QWKNET (1<<7) /* Writing QWK NetMail (25 char title) */ ! 597: #define WM_PRIVATE (1<<8) /* Private (for creating MSGINF file) */ ! 598: ! 599: /* Bits in the mode of loadposts() */ ! 600: #define LP_BYSELF (1<<0) /* Include messages sent by self */ ! 601: #define LP_OTHERS (1<<1) /* Include messages sent to others */ ! 602: #define LP_UNREAD (1<<2) /* Un-read messages only */ ! 603: #define LP_PRIVATE (1<<3) /* Include all private messages */ ! 604: #define LP_REP (1<<4) /* Packing REP packet */ ! 605: ! 606: /* Bits in the mode of loadmail() */ ! 607: #define LM_UNREAD (1<<0) /* Include un-read mail only */ ! 608: #define LM_QWK (1<<1) /* Loading for a QWK packet */ ! 609: ! 610: enum { /* readmail and delmailidx which types */ ! 611: MAIL_YOUR /* mail sent to you */ ! 612: ,MAIL_SENT /* mail you have sent */ ! 613: ,MAIL_ANY /* mail sent to or from you */ ! 614: ,MAIL_ALL /* all mail (ignores usernumber arg) */ ! 615: }; ! 616: ! 617: #if 0 ! 618: /* Message mode bits */ ! 619: #define MSG_PERM 1 /* Permanent - non-purgable message (post) */ ! 620: #define MSG_FORWARD 1 /* Forwarded message (mail) */ ! 621: #define MSG_ANON 2 /* Anonymous message */ ! 622: #define MSG_PRIVATE 4 /* Private posted message */ ! 623: #define MSG_READ 8 /* Private post has been read */ ! 624: #define MSG_FILE 16 /* File attached */ ! 625: ! 626: #endif ! 627: ! 628: /* Bits in the mode of external() */ ! 629: #define EX_CC (1<<0) /* Use command.com to load other process */ ! 630: #define EX_OUTR (1<<1) /* Copy DOS output to remote */ ! 631: #define EX_OUTL (1<<2) /* Use _lputc() for local DOS output */ ! 632: #define EX_INR (1<<3) /* Trap int 16h keyboard input requests */ ! 633: #define EX_WWIV (1<<4) /* Expand WWIV color codes to ANSI sequence */ ! 634: #define EX_SWAP (1<<5) /* Swap out for this external */ ! 635: #define EX_OS2 (1<<6) /* Executing an OS/2 pgm from SBBS4OS2 */ ! 636: #define EX_POPEN (1<<7) /* Leave COM port open */ ! 637: ! 638: #define OS2_POPEN (1<<0) /* Leave COM port open */ ! 639: ! 640: enum { /* Values for 'mode' in listfileinfo */ ! 641: FI_INFO /* Just list file information */ ! 642: ,FI_REMOVE /* Remove/Move/Edit file information */ ! 643: ,FI_DOWNLOAD /* Download files */ ! 644: ,FI_OLD /* Search/Remove files not downloaded since */ ! 645: ,FI_OLDUL /* Search/Remove files uploaded before */ ! 646: ,FI_OFFLINE /* Search/Remove files not online */ ! 647: ,FI_USERXFER /* User Xfer Download */ ! 648: ,FI_CLOSE /* Close any open records */ ! 649: }; ! 650: ! 651: #define L_LOGON 1 /* Logon List maintenance */ ! 652: #define LOL_SIZE 81 /* Length of each logon list entry */ ! 653: ! 654: #define CHAT_ECHO (1<<0) /* Multinode chat echo */ ! 655: #define CHAT_ACTION (1<<1) /* Chat actions */ ! 656: #define CHAT_NOPAGE (1<<2) /* Can't be paged */ ! 657: #define CHAT_NOACT (1<<3) /* No activity alerts */ ! 658: #define CHAT_SPLITP (1<<4) /* Split screen private chat */ ! 659: ! 660: /* Bits in mode of scanposts() function */ ! 661: #define SCAN_CONST (1<<0) /* Continuous message scanning */ ! 662: #define SCAN_NEW (1<<1) /* New scanning */ ! 663: #define SCAN_BACK (1<<2) /* Scan the last message if no new */ ! 664: #define SCAN_TOYOU (1<<3) /* Scan for messages to you */ ! 665: #define SCAN_FIND (1<<4) /* Scan for text in messages */ ! 666: #define SCAN_UNREAD (1<<5) /* Find un-read messages to you */ ! 667: ! 668: /* Bits in misc of chan_t */ ! 669: #define CHAN_PW (1<<0) /* Can be password protected */ ! 670: #define CHAN_GURU (1<<1) /* Guru joins empty channel */ ! 671: ! 672: enum { /* Values of mode for userlist function */ ! 673: UL_ALL /* List all users in userlist */ ! 674: ,UL_SUB /* List all users with access to cursub */ ! 675: ,UL_DIR /* List all users with access to curdir */ ! 676: }; ! 677: ! 678: ! 679: #define BO_LEN 16 /* BACKOUT.DAB record length */ ! 680: ! 681: #define BO_OPENFILE 0 /* Backout types */ ! 682: ! 683: ! 684: /**********/ ! 685: /* Macros */ ! 686: /**********/ ! 687: ! 688: #define CRLF { outchar(CR); outchar(LF); } ! 689: #define SYSOP (useron.level>=90 || sys_status & SS_TMPSYSOP) ! 690: #define REALSYSOP (useron.level>=90) ! 691: #define FLAG(x) (long)(1L<<(x-'A')) ! 692: #define CLS outchar(FF) ! 693: #define WHERE __LINE__,__FILE__ ! 694: #define SAVELINE { slatr[slcnt]=latr; \ ! 695: sprintf(slbuf[slcnt<SAVE_LINES ? slcnt++ : slcnt] \ ! 696: ,"%.*s",lbuflen,lbuf); \ ! 697: lbuflen=0; } ! 698: #define RESTORELINE { lbuflen=0; attr(slatr[--slcnt]); \ ! 699: bputs(slbuf[slcnt]); \ ! 700: curatr=lclatr(-1); } ! 701: #define RIOSYNC(x) { if(online==ON_REMOTE) riosync(x); } ! 702: #define SYNC { getnodedat(node_num,&thisnode,0); \ ! 703: RIOSYNC(0); \ ! 704: nodesync(); } ! 705: #define ASYNC { getnodedat(node_num,&thisnode,0); \ ! 706: RIOSYNC(1); \ ! 707: nodesync(); } ! 708: #define DCDHIGH (sys_status&SS_DCDHIGH || rioctl(IOSTATE)&DCD) ! 709: #define ANSI_SAVE() bputs("\x1b[s") ! 710: #define ANSI_RESTORE() bputs("\x1b[u") ! 711: #define GOTOXY(x,y) bprintf("\x1b[%d;%dH",y,x) ! 712: ! 713: extern long crc32tbl[]; ! 714: #define ucrc32(ch,crc) (crc32tbl[(crc^ch)&0xff]^(crc>>8)) ! 715: ! 716: #ifdef __FLAT__ ! 717: #define TEXTWINDOW window(1,1,80,node_scrnlen-1) ! 718: #define STATUSLINE window(1,node_scrnlen,80,node_scrnlen) ! 719: #else ! 720: #define TEXTWINDOW ! 721: #define STATUSLINE ! 722: #endif ! 723: ! 724: #define ucrc32(ch,crc) (crc32tbl[(crc^ch)&0xff]^(crc>>8)) ! 725: ! 726: #ifdef __WATCOMC__ ! 727: ! 728: #if !defined(__COLORS) ! 729: #define __COLORS ! 730: ! 731: enum COLORS { ! 732: BLACK, /* dark colors */ ! 733: BLUE, ! 734: GREEN, ! 735: CYAN, ! 736: RED, ! 737: MAGENTA, ! 738: BROWN, ! 739: LIGHTGRAY, ! 740: DARKGRAY, /* light colors */ ! 741: LIGHTBLUE, ! 742: LIGHTGREEN, ! 743: LIGHTCYAN, ! 744: LIGHTRED, ! 745: LIGHTMAGENTA, ! 746: YELLOW, ! 747: WHITE ! 748: }; ! 749: #endif ! 750: ! 751: #define BLINK 128 /* blink bit */ ! 752: ! 753: #define ffblk find_t ! 754: #define findfirst(x,y,z) _dos_findfirst(x,z,y) ! 755: #define findnext(x) _dos_findnext(x) ! 756: #endif ! 757: ! 758: #if DEBUG /* if DEBUG, call function */ ! 759: #define DLOG(where,txt) dlog(where,txt) ! 760: #else /* else, do nothing - function isn't even valid */ ! 761: #define DLOG(where,txt) ! 762: #endif ! 763: ! 764: ! 765: /********************/ ! 766: /* Type Definitions */ ! 767: /********************/ ! 768: ! 769: typedef struct { /* Users information */ ! 770: ushort number, /* Number */ ! 771: uls, /* Number of uploads */ ! 772: dls, /* Number of downloads */ ! 773: posts, /* Number of posts */ ! 774: emails, /* Number of emails */ ! 775: fbacks, /* Number of emails sent to sysop */ ! 776: etoday, /* Emails today */ ! 777: ptoday, /* Posts today */ ! 778: timeon, /* Total time on */ ! 779: textra, /* Extra time for today */ ! 780: logons, /* Total logons */ ! 781: ttoday, /* Time on today */ ! 782: tlast, /* Time on last call */ ! 783: ltoday, /* Logons today */ ! 784: xedit, /* External editor (1 based) */ ! 785: shell; /* Command shell */ ! 786: uchar level, /* Security level */ ! 787: sex, /* Sex - M or F */ ! 788: rows, /* Rows of text */ ! 789: prot, /* Default transfer protocol */ ! 790: alias[LEN_ALIAS+1], /* Alias */ ! 791: name[LEN_NAME+1], /* Name - Real */ ! 792: handle[LEN_HANDLE+1], /* Chat handle */ ! 793: comp[LEN_COMP+1], /* Computer type */ ! 794: note[LEN_NOTE+1], /* Public notice about this user */ ! 795: address[LEN_ADDRESS+1], /* Street Address */ ! 796: location[LEN_LOCATION+1], /* Location of user */ ! 797: zipcode[LEN_ZIPCODE+1], /* Zip/Postal code */ ! 798: pass[LEN_PASS+1], /* Password - not case sensitive */ ! 799: birth[LEN_BIRTH+1], /* Birthday in MM/DD/YY format */ ! 800: phone[LEN_PHONE+1], /* Phone number xxx-xxx-xxxx format */ ! 801: modem[LEN_MODEM+1], /* Modem type - 8 chars max */ ! 802: netmail[LEN_NETMAIL+1], /* NetMail forwarding address */ ! 803: leech, /* Leech attempt counter */ ! 804: tmpext[4], /* QWK Packet extension */ ! 805: comment[LEN_COMMENT+1], /* Private comment about user */ ! 806: cursub[9], /* Current sub-board internal code */ ! 807: curdir[9]; /* Current directory internal code */ ! 808: ulong misc, /* Misc. bits - ANSI, Deleted etc. */ ! 809: qwk, /* QWK settings */ ! 810: chat, /* Chat defaults */ ! 811: flags1, /* Flag set #1 */ ! 812: flags2, /* Flag set #2 */ ! 813: flags3, /* Flag set #3 */ ! 814: flags4, /* Flag set #4 */ ! 815: exempt, /* Exemption Flags */ ! 816: rest, /* Restriction Flags */ ! 817: ulb, /* Total bytes uploaded */ ! 818: dlb, /* Total bytes downloaded */ ! 819: cdt, /* Credits */ ! 820: min, /* Minutes */ ! 821: freecdt; /* Free credits (renewed daily) */ ! 822: time_t firston, /* Date/Time first called */ ! 823: laston, /* Last logoff date/time */ ! 824: expire, /* Expiration date */ ! 825: pwmod, /* Password last modified */ ! 826: ns_time; /* Date/Time of last new file scan */ ! 827: } user_t; ! 828: ! 829: typedef struct { /* File (transfers) Data */ ! 830: uchar name[13], /* Name of file FILENAME.EXT */ ! 831: desc[LEN_FDESC+1], /* Uploader's Description */ ! 832: uler[LEN_ALIAS+1], /* User who uploaded */ ! 833: opencount, /* Times record is currently open */ ! 834: path[LEN_DIR+1]; /* Alternate DOS path */ ! 835: time_t date, /* File date/time */ ! 836: dateuled, /* Date/Time (Unix) Uploaded */ ! 837: datedled; /* Date/Time (Unix) Last downloaded */ ! 838: ushort dir, /* Directory file is in */ ! 839: altpath, ! 840: timesdled, /* Total times downloaded */ ! 841: timetodl; /* How long transfer time */ ! 842: long datoffset, /* Offset into .DAT file */ ! 843: size, /* Size of file */ ! 844: misc; /* Miscellaneous bits */ ! 845: ulong cdt; /* Credit value for this file */ ! 846: } file_t; ! 847: ! 848: typedef struct { /* Mail data (taken from index) */ ! 849: ulong offset, /* Offset to header (in bytes) */ ! 850: number, /* Number of message */ ! 851: time; /* Time imported */ ! 852: ushort to, /* To user # */ ! 853: from, /* From user # */ ! 854: subj, /* CRC-16 of subject */ ! 855: attr; /* Attributes */ ! 856: } mail_t; ! 857: ! 858: typedef struct { /* System/Node Statistics */ ! 859: ulong logons, /* Total Logons on System */ ! 860: ltoday, /* Total Logons Today */ ! 861: timeon, /* Total Time on System */ ! 862: ttoday, /* Total Time Today */ ! 863: uls, /* Total Uploads Today */ ! 864: ulb, /* Total Upload Bytes Today */ ! 865: dls, /* Total Downloads Today */ ! 866: dlb, /* Total Download Bytes Today */ ! 867: ptoday, /* Total Posts Today */ ! 868: etoday, /* Total Emails Today */ ! 869: ftoday; /* Total Feedbacks Today */ ! 870: ushort nusers; /* Total New Users Today */ ! 871: } stats_t; ! 872: ! 873: typedef struct { /* FidoNet address */ ! 874: ushort zone, /* Zone */ ! 875: net, /* Network */ ! 876: node, /* Node */ ! 877: point; /* Point */ ! 878: } faddr_t; ! 879: ! 880: typedef struct { /* Message sub board info */ ! 881: uchar ! 882: #ifdef SCFG ! 883: lname[LEN_SLNAME+1], /* Short name - used for prompts */ ! 884: sname[LEN_SSNAME+1], /* Long name - used for listing */ ! 885: ar[LEN_ARSTR+1], /* Access requirements */ ! 886: read_ar[LEN_ARSTR+1], /* Read requirements */ ! 887: post_ar[LEN_ARSTR+1], /* Post requirements */ ! 888: op_ar[LEN_ARSTR+1], /* Operator requirements */ ! 889: mod_ar[LEN_ARSTR+1], /* Moderated user requirements */ ! 890: qwkname[11], /* QWK name - only 10 chars */ ! 891: data_dir[LEN_DIR+1], /* Data file directory */ ! 892: origline[51], /* Optional EchoMail origin line */ ! 893: echomail_sem[LEN_DIR+1], /* EchoMail semaphore for this sub */ ! 894: tagline[81], /* Optional QWK net tag line */ ! 895: #else ! 896: *lname, ! 897: *sname, ! 898: *ar, ! 899: *read_ar, ! 900: *post_ar, ! 901: *op_ar, ! 902: *mod_ar, ! 903: *qwkname, ! 904: *data_dir, ! 905: *origline, ! 906: *echomail_sem, ! 907: *tagline, ! 908: #endif ! 909: code[9]; /* Eight character code */ ! 910: #ifndef SBBS ! 911: uchar echopath[LEN_DIR+1]; /* EchoMail path */ ! 912: #endif ! 913: ushort grp, /* Which group this sub belongs to */ ! 914: ptridx, /* Index into pointer file */ ! 915: qwkconf, /* QWK conference number */ ! 916: maxage; /* Max age of messages (in days) */ ! 917: ulong misc, /* Miscellaneous flags */ ! 918: maxmsgs, /* Max number of messages allowed */ ! 919: maxcrcs; /* Max number of CRCs to keep */ ! 920: #ifdef SBBS ! 921: ulong ptr, /* Highest read message */ ! 922: last; /* Last read message */ ! 923: #endif ! 924: faddr_t faddr; /* FidoNet address */ ! 925: } sub_t; ! 926: ! 927: typedef struct { /* Message group info */ ! 928: uchar ! 929: #ifdef SCFG ! 930: lname[LEN_GLNAME+1], /* Short name */ ! 931: sname[LEN_GSNAME+1], /* Long name */ ! 932: ar[LEN_ARSTR+1]; /* Access requirements */ ! 933: ! 934: #else ! 935: *lname, ! 936: *sname, ! 937: *ar; ! 938: #endif ! 939: } grp_t; ! 940: ! 941: typedef struct { /* Transfer Directory Info */ ! 942: uchar /* Eight character code */ ! 943: #ifdef SCFG ! 944: lname[LEN_SLNAME+1], /* Short name - used for prompts */ ! 945: sname[LEN_SSNAME+1], /* Long name - used for listing */ ! 946: ar[LEN_ARSTR+1], /* Access Requirements */ ! 947: ul_ar[LEN_ARSTR+1], /* Upload Requirements */ ! 948: dl_ar[LEN_ARSTR+1], /* Download Requirements */ ! 949: ex_ar[LEN_ARSTR+1], /* Exemption Requirements (credits) */ ! 950: op_ar[LEN_ARSTR+1], /* Operator Requirements */ ! 951: path[LEN_DIR+1], /* Path to directory for files */ ! 952: exts[41], /* Extensions allowed */ ! 953: upload_sem[LEN_DIR+1], /* Upload semaphore file */ ! 954: data_dir[LEN_DIR+1], /* Directory where data is stored */ ! 955: #else ! 956: *lname, ! 957: *sname, ! 958: *ar, ! 959: *ul_ar, ! 960: *dl_ar, ! 961: *ex_ar, ! 962: *op_ar, ! 963: *path, ! 964: *exts, ! 965: *upload_sem, ! 966: *data_dir, ! 967: #endif ! 968: code[9], ! 969: seqdev, /* Sequential access device number */ ! 970: sort; /* Sort type */ ! 971: ushort maxfiles, /* Max number of files allowed */ ! 972: maxage, /* Max age of files (in days) */ ! 973: up_pct, /* Percentage of credits on uloads */ ! 974: dn_pct, /* Percentage of credits on dloads */ ! 975: lib; /* Which library this dir is in */ ! 976: ulong misc; /* Miscellaneous bits */ ! 977: } dir_t; ! 978: ! 979: typedef struct { /* Transfer Library Information */ ! 980: uchar ! 981: #ifdef SCFG ! 982: lname[LEN_GLNAME+1], /* Short Name - used for prompts */ ! 983: sname[LEN_GSNAME+1], /* Long Name - used for listings */ ! 984: ar[LEN_ARSTR+1]; /* Access Requirements */ ! 985: #else ! 986: *lname, ! 987: *sname, ! 988: *ar; ! 989: #endif ! 990: ushort offline_dir; /* Offline file directory */ ! 991: } lib_t; ! 992: ! 993: typedef struct { /* Gfile Section Information */ ! 994: uchar /* Eight character code */ ! 995: #ifdef SCFG ! 996: name[41], /* Name of section */ ! 997: ar[LEN_ARSTR+1], /* Access requirements */ ! 998: #else ! 999: *name, ! 1000: *ar, ! 1001: #endif ! 1002: code[9]; ! 1003: } txtsec_t; ! 1004: ! 1005: typedef struct { /* External Section Information */ ! 1006: uchar ! 1007: #ifdef SCFG ! 1008: name[41], /* Name of section */ ! 1009: ar[LEN_ARSTR+1], /* Access requirements */ ! 1010: #else ! 1011: *name, ! 1012: *ar, ! 1013: #endif ! 1014: code[9]; /* Eight character code */ ! 1015: } xtrnsec_t; ! 1016: ! 1017: typedef struct { /* Swappable executable */ ! 1018: #ifdef SCFG ! 1019: uchar cmd[LEN_CMD+1]; /* Program name */ ! 1020: #else ! 1021: uchar *cmd; ! 1022: #endif ! 1023: } swap_t; ! 1024: ! 1025: typedef struct { /* OS/2 executable */ ! 1026: #ifdef SCFG ! 1027: uchar name[13]; /* Program name */ ! 1028: #else ! 1029: uchar *name; ! 1030: #endif ! 1031: ulong misc; /* See OS2PGM_* */ ! 1032: ! 1033: } os2pgm_t; ! 1034: ! 1035: typedef struct { /* External Program Information */ ! 1036: uchar ! 1037: #ifdef SCFG ! 1038: name[41], /* Name of External */ ! 1039: ar[LEN_ARSTR+1], /* Access Requirements */ ! 1040: run_ar[LEN_ARSTR+1], /* Run Requirements */ ! 1041: cmd[LEN_CMD+1], /* Command line */ ! 1042: clean[LEN_CMD+1], /* Clean-up command line */ ! 1043: path[LEN_DIR+1], /* Start-up path */ ! 1044: #else ! 1045: *name, ! 1046: *ar, ! 1047: *run_ar, ! 1048: *cmd, ! 1049: *clean, ! 1050: *path, ! 1051: #endif ! 1052: type, /* What type of external program */ ! 1053: event, /* Execute upon what event */ ! 1054: textra, /* Extra time while in this program */ ! 1055: maxtime, /* Maximum time allowed in this door */ ! 1056: code[9]; /* Internal code for program */ ! 1057: ushort sec; /* Section this program belongs to */ ! 1058: ulong cost, /* Cost to run in credits */ ! 1059: misc; /* Misc. bits - ANSI, DOS I/O etc. */ ! 1060: } xtrn_t; ! 1061: ! 1062: typedef struct { /* External Page program info */ ! 1063: #ifdef SCFG ! 1064: uchar cmd[LEN_CMD+1], /* Command line */ ! 1065: ar[LEN_ARSTR+1]; /* ARS for this chat page */ ! 1066: #else ! 1067: uchar *cmd, ! 1068: *ar; ! 1069: #endif ! 1070: ulong misc; /* Intercept I/O */ ! 1071: } page_t; ! 1072: ! 1073: ! 1074: typedef struct { /* Chat action set */ ! 1075: #ifdef SCFG ! 1076: uchar name[26]; /* Name of set */ ! 1077: #else ! 1078: uchar *name; ! 1079: #endif ! 1080: } actset_t; ! 1081: ! 1082: typedef struct { /* Chat action info */ ! 1083: #ifdef SCFG ! 1084: uchar cmd[LEN_CHATACTCMD+1], /* Command word */ ! 1085: out[LEN_CHATACTOUT+1]; /* Output */ ! 1086: #else ! 1087: uchar *cmd, ! 1088: *out; ! 1089: #endif ! 1090: ushort actset; /* Set this action belongs to */ ! 1091: } chatact_t; ! 1092: ! 1093: typedef struct { /* Gurus */ ! 1094: uchar ! 1095: #ifdef SCFG ! 1096: name[26], ! 1097: ar[LEN_ARSTR+1], ! 1098: #else ! 1099: *name, ! 1100: *ar, ! 1101: #endif ! 1102: code[9]; ! 1103: ! 1104: } guru_t; ! 1105: ! 1106: typedef struct { /* Chat Channel Information */ ! 1107: uchar ! 1108: #ifdef SCFG ! 1109: ar[LEN_ARSTR+1], /* Access requirements */ ! 1110: name[26], /* Channel description */ ! 1111: #else ! 1112: *ar, ! 1113: *name, ! 1114: #endif ! 1115: code[9]; ! 1116: ushort actset, /* Set of actions used in this chan */ ! 1117: guru; /* Guru file number */ ! 1118: ulong cost, /* Cost to join */ ! 1119: misc; /* Misc. bits CHAN_* definitions */ ! 1120: } chan_t; ! 1121: ! 1122: typedef struct { /* Modem Result codes info */ ! 1123: ushort code, /* Numeric Result Code */ ! 1124: cps, /* Average Transfer CPS */ ! 1125: rate; /* DCE Rate (Modem to Modem) */ ! 1126: #ifdef SCFG ! 1127: uchar str[LEN_MODEM+1]; /* String to use for description */ ! 1128: #else ! 1129: uchar *str; ! 1130: #endif ! 1131: } mdm_result_t; ! 1132: ! 1133: typedef struct { /* Transfer Protocol information */ ! 1134: uchar mnemonic, /* Letter to select this protocol */ ! 1135: #ifdef SCFG ! 1136: name[26], /* Name of protocol */ ! 1137: ar[LEN_ARSTR+1], /* ARS */ ! 1138: ulcmd[LEN_CMD+1], /* Upload command line */ ! 1139: dlcmd[LEN_CMD+1], /* Download command line */ ! 1140: batulcmd[LEN_CMD+1], /* Batch upload command line */ ! 1141: batdlcmd[LEN_CMD+1], /* Batch download command line */ ! 1142: blindcmd[LEN_CMD+1], /* Blind upload command line */ ! 1143: bicmd[LEN_CMD+1]; /* Bidirectional command line */ ! 1144: #else ! 1145: *ar, ! 1146: *name, ! 1147: *ulcmd, ! 1148: *dlcmd, ! 1149: *batulcmd, ! 1150: *batdlcmd, ! 1151: *blindcmd, ! 1152: *bicmd; ! 1153: #endif ! 1154: ulong misc; /* Miscellaneous bits */ ! 1155: } prot_t; ! 1156: ! 1157: typedef struct { /* Extractable file types */ ! 1158: uchar ext[4], /* Extension */ ! 1159: #ifdef SCFG ! 1160: ar[LEN_ARSTR+1], /* Access Requirements */ ! 1161: cmd[LEN_CMD+1]; /* Command line */ ! 1162: #else ! 1163: *ar, ! 1164: *cmd; ! 1165: #endif ! 1166: } fextr_t; ! 1167: ! 1168: typedef struct { /* Compressable file types */ ! 1169: uchar ext[4], /* Extension */ ! 1170: #ifdef SCFG ! 1171: ar[LEN_ARSTR+1], /* Access Requirements */ ! 1172: cmd[LEN_CMD+1]; /* Command line */ ! 1173: #else ! 1174: *ar, ! 1175: *cmd; ! 1176: #endif ! 1177: } fcomp_t; ! 1178: ! 1179: typedef struct { /* Viewable file types */ ! 1180: uchar ext[4], /* Extension */ ! 1181: #ifdef SCFG ! 1182: ar[LEN_ARSTR+1], /* Access Requirements */ ! 1183: cmd[LEN_CMD+1]; /* Command line */ ! 1184: #else ! 1185: *ar, ! 1186: *cmd; ! 1187: #endif ! 1188: } fview_t; ! 1189: ! 1190: typedef struct { /* Testable file types */ ! 1191: uchar ext[4], /* Extension */ ! 1192: #ifdef SCFG ! 1193: ar[LEN_ARSTR+1], /* Access requirement */ ! 1194: cmd[LEN_CMD+1], /* Command line */ ! 1195: workstr[41]; /* String to display while working */ ! 1196: #else ! 1197: *ar, ! 1198: *cmd, ! 1199: *workstr; ! 1200: #endif ! 1201: } ftest_t; ! 1202: ! 1203: typedef struct { /* Download events */ ! 1204: uchar ext[4], ! 1205: #ifdef SCFG ! 1206: ar[LEN_ARSTR+1], /* Access requirement */ ! 1207: cmd[LEN_CMD+1], /* Command line */ ! 1208: workstr[41]; /* String to display while working */ ! 1209: #else ! 1210: *ar, ! 1211: *cmd, ! 1212: *workstr; ! 1213: #endif ! 1214: } dlevent_t; ! 1215: ! 1216: typedef struct { /* External Editors */ ! 1217: uchar ! 1218: #ifdef SCFG ! 1219: name[41], /* Name (description) */ ! 1220: ar[LEN_ARSTR+1], /* Access Requirement */ ! 1221: lcmd[LEN_CMD+1], /* Local command line */ ! 1222: rcmd[LEN_CMD+1], /* Remote command line */ ! 1223: #else ! 1224: *name, ! 1225: *ar, ! 1226: *lcmd, ! 1227: *rcmd, ! 1228: #endif ! 1229: code[9]; ! 1230: ulong misc; /* Misc. bits */ ! 1231: uchar type; /* Drop file type */ ! 1232: } xedit_t; ! 1233: ! 1234: ! 1235: typedef struct { /* Generic Timed Event */ ! 1236: uchar code[9], /* Internal code */ ! 1237: days, /* Days to run event */ ! 1238: #ifdef SCFG ! 1239: dir[LEN_DIR+1], /* Start-up directory */ ! 1240: cmd[LEN_CMD+1]; /* Command line */ ! 1241: #else ! 1242: *dir, ! 1243: *cmd; ! 1244: #endif ! 1245: ushort node, /* Node to execute event */ ! 1246: time; /* Time to run event */ ! 1247: ulong misc; /* Misc bits */ ! 1248: #ifndef SCFG ! 1249: time_t last; /* Last time event ran */ ! 1250: #endif ! 1251: } event_t; ! 1252: ! 1253: typedef struct { /* QWK Network Hub */ ! 1254: uchar id[9], /* System ID of Hub */ ! 1255: *mode, /* Mode for Ctrl-A codes for ea. sub */ ! 1256: days, /* Days to call-out on */ ! 1257: #ifdef SCFG ! 1258: call[LEN_CMD+1], /* Call-out command line to execute */ ! 1259: pack[LEN_CMD+1], /* Packing command line */ ! 1260: unpack[LEN_CMD+1]; /* Unpacking command line */ ! 1261: #else ! 1262: *call, ! 1263: *pack, ! 1264: *unpack; ! 1265: #endif ! 1266: ushort time, /* Time to call-out */ ! 1267: node, /* Node to do the call-out */ ! 1268: freq, /* Frequency of call-outs */ ! 1269: subs, /* Number Sub-boards carried */ ! 1270: *sub, /* Number of local sub-board for ea. */ ! 1271: *conf; /* Conference number of ea. */ ! 1272: #ifndef SCFG ! 1273: time_t last; /* Last network attempt */ ! 1274: #endif ! 1275: } qhub_t; ! 1276: ! 1277: typedef struct { /* PCRelay/PostLink Hub */ ! 1278: uchar days, /* Days to call-out on */ ! 1279: #ifdef SCFG ! 1280: name[11], /* Site Name of Hub */ ! 1281: call[LEN_CMD+1]; /* Call-out command line to execute */ ! 1282: #else ! 1283: *call; ! 1284: #endif ! 1285: ushort time, /* Time to call-out */ ! 1286: node, /* Node to do the call-out */ ! 1287: freq; /* Frequency of call-outs */ ! 1288: #ifndef SCFG ! 1289: time_t last; /* Last network attempt */ ! 1290: #endif ! 1291: } phub_t; ! 1292: ! 1293: ! 1294: typedef struct { /* FidoNet msg header */ ! 1295: uchar from[36], /* From user */ ! 1296: to[36], /* To user */ ! 1297: subj[72], /* Message title */ ! 1298: time[20]; /* Time in goof-ball ASCII format */ ! 1299: short read, /* Times read */ ! 1300: destnode, /* Destination node */ ! 1301: orignode, /* Origin node */ ! 1302: cost, /* Cost in pennies */ ! 1303: orignet, /* Origin net */ ! 1304: destnet, /* Destination net */ ! 1305: destzone, /* Destination zone */ ! 1306: origzone, /* Origin zone */ ! 1307: destpoint, /* Destination point */ ! 1308: origpoint, /* Origin point */ ! 1309: re, /* Message number regarding */ ! 1310: attr, /* Attributes - see FIDO_* */ ! 1311: next; /* Next message number in stream */ ! 1312: } fmsghdr_t; ! 1313: ! 1314: ! 1315: typedef struct { /* Command Shells */ ! 1316: uchar ! 1317: #ifdef SCFG ! 1318: name[41], /* Name (description) */ ! 1319: ar[LEN_ARSTR+1], /* Access Requirement */ ! 1320: #else ! 1321: *name, ! 1322: *ar, ! 1323: #endif ! 1324: code[9]; ! 1325: ulong misc; ! 1326: } shell_t; ! 1327: ! 1328: #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.