|
|
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.