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