home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 September / PCO_0998.ISO / filesbbs / dos / sbbs_src.exe / SBBS / SBBSDEFS.H < prev    next >
Encoding:
C/C++ Source or Header  |  1997-04-13  |  51.1 KB  |  1,329 lines

  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 */
  1329.