|
|
3.12a Javascript
/* scfgdefs.h */
/* Synchronet configuration structure (scfg_t) definition */
/* $Id: scfgdefs.h,v 1.1.1.2 2018/04/24 16:40:01 root Exp $ */
/****************************************************************************
* @format.tab-size 4 (Plain Text/Source Code File Header) *
* @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) *
* *
* Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* See the GNU General Public License for more details: gpl.txt or *
* http://www.fsf.org/copyleft/gpl.html *
* *
* Anonymous FTP access to the most recent released source is available at *
* ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net *
* *
* Anonymous CVS access to the development source and modification history *
* is available at cvs.synchro.net:/cvsroot/sbbs, example: *
* cvs -d :pserver:[email protected]:/cvsroot/sbbs login *
* (just hit return, no password is necessary) *
* cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src *
* *
* For Synchronet coding style and modification guidelines, see *
* http://www.synchro.net/source.html *
* *
* You are encouraged to submit any modifications (preferably in Unix diff *
* format) via e-mail to [email protected] *
* *
* Note: If this box doesn't appear square, then you need to fix your tabs. *
****************************************************************************/
#include "sbbsdefs.h"
#ifndef _SCFGDEFS_H_
#define _SCFGDEFS_H_
typedef struct { /* Message sub board info */
char code[LEN_EXTCODE+1]; /* Internal code (with optional lib prefix) */
char code_suffix[LEN_CODE+1]; /* Eight character code suffix */
char lname[LEN_SLNAME+1], /* Short name - used for prompts */
sname[LEN_SSNAME+1], /* Long name - used for listing */
arstr[LEN_ARSTR+1], /* Access requirements */
read_arstr[LEN_ARSTR+1], /* Read requirements */
post_arstr[LEN_ARSTR+1], /* Post requirements */
op_arstr[LEN_ARSTR+1], /* Operator requirements */
mod_arstr[LEN_ARSTR+1], /* Moderated user requirements */
qwkname[11], /* QWK name - only 10 chars */
data_dir[LEN_DIR+1], /* Data file directory */
origline[51], /* Optional EchoMail origin line */
post_sem[LEN_DIR+1], /* Semaphore file for this sub */
tagline[81], /* Optional QWK net tag line */
newsgroup[LEN_DIR+1]; /* Newsgroup name */
uchar *ar,
*read_ar,
*post_ar,
*op_ar,
*mod_ar;
ushort grp, /* Which group this sub belongs to */
ptridx, /* Index into pointer file */
qwkconf, /* QWK conference number */
maxage; /* Max age of messages (in days) */
ulong misc, /* Miscellaneous flags */
maxmsgs, /* Max number of messages allowed */
maxcrcs; /* Max number of CRCs to keep */
faddr_t faddr; /* FidoNet address */
} sub_t;
typedef struct { /* Message group info */
char lname[LEN_GLNAME+1], /* Short name */
sname[LEN_GSNAME+1], /* Long name */
arstr[LEN_ARSTR+1], /* Access requirements */
code_prefix[LEN_CODE+1]; /* Prefix for internal code */
uchar *ar;
} grp_t;
typedef struct { /* Transfer Directory Info */
char code[LEN_EXTCODE+1]; /* Internal code (with optional lib prefix) */
char code_suffix[LEN_CODE+1]; /* Eight character code suffix */
char lname[LEN_SLNAME+1], /* Short name - used for prompts */
sname[LEN_SSNAME+1], /* Long name - used for listing */
arstr[LEN_ARSTR+1], /* Access Requirements */
ul_arstr[LEN_ARSTR+1], /* Upload Requirements */
dl_arstr[LEN_ARSTR+1], /* Download Requirements */
ex_arstr[LEN_ARSTR+1], /* Exemption Requirements (credits) */
op_arstr[LEN_ARSTR+1], /* Operator Requirements */
path[LEN_DIR+1], /* Path to directory for files */
exts[41], /* Extensions allowed */
upload_sem[LEN_DIR+1], /* Upload semaphore file */
data_dir[LEN_DIR+1]; /* Directory where data is stored */
uchar *ar,
*ul_ar,
*dl_ar,
*ex_ar,
*op_ar,
seqdev, /* Sequential access device number */
sort; /* Sort type */
ushort maxfiles, /* Max number of files allowed */
maxage, /* Max age of files (in days) */
up_pct, /* Percentage of credits on uloads */
dn_pct, /* Percentage of credits on dloads */
lib; /* Which library this dir is in */
ulong misc; /* Miscellaneous bits */
} dir_t;
typedef struct { /* Transfer Library Information */
char lname[LEN_GLNAME+1], /* Short Name - used for prompts */
sname[LEN_GSNAME+1], /* Long Name - used for listings */
arstr[LEN_ARSTR+1], /* Access Requirements */
code_prefix[LEN_CODE+1], /* Prefix for internal code */
parent_path[48]; /* Parent for dir paths */
uchar *ar;
ushort offline_dir; /* Offline file directory */
} lib_t;
typedef struct { /* Gfile Section Information */
char code[LEN_CODE+1]; /* Eight character code */
char name[41], /* Name of section */
arstr[LEN_ARSTR+1]; /* Access requirements */
uchar *ar;
} txtsec_t;
typedef struct { /* External Section Information */
char code[LEN_CODE+1]; /* Eight character code */
char name[41], /* Name of section */
arstr[LEN_ARSTR+1]; /* Access requirements */
uchar *ar;
} xtrnsec_t;
typedef struct { /* Swappable executable */
char cmd[LEN_CMD+1]; /* Program name */
} swap_t;
typedef struct { /* OS/2 executable */
char name[13]; /* Program name */
ulong misc; /* See OS2PGM_* */
} natvpgm_t;
typedef struct { /* External Program Information */
char code[LEN_CODE+1]; /* Internal code for program */
char name[41], /* Name of External */
arstr[LEN_ARSTR+1], /* Access Requirements */
run_arstr[LEN_ARSTR+1], /* Run Requirements */
cmd[LEN_CMD+1], /* Command line */
clean[LEN_CMD+1], /* Clean-up command line */
path[LEN_DIR+1]; /* Start-up path */
uchar *ar,
*run_ar;
uchar type, /* What type of external program */
event, /* Execute upon what event */
textra, /* Extra time while in this program */
maxtime; /* Maximum time allowed in this door */
ushort sec; /* Section this program belongs to */
ulong cost, /* Cost to run in credits */
misc; /* Misc. bits - ANSI, DOS I/O etc. */
} xtrn_t;
typedef struct { /* External Page program info */
char cmd[LEN_CMD+1], /* Command line */
arstr[LEN_ARSTR+1]; /* ARS for this chat page */
uchar *ar;
ulong misc; /* Intercept I/O */
} page_t;
typedef struct { /* Chat action set */
char name[26]; /* Name of set */
} actset_t;
typedef struct { /* Chat action info */
char cmd[LEN_CHATACTCMD+1], /* Command word */
out[LEN_CHATACTOUT+1]; /* Output */
ushort actset; /* Set this action belongs to */
} chatact_t;
typedef struct { /* Gurus */
char code[LEN_CODE+1];
char name[26],
arstr[LEN_ARSTR+1];
uchar *ar;
} guru_t;
typedef struct { /* Chat Channel Information */
char code[LEN_CODE+1];
char name[26]; /* Channel description */
char arstr[LEN_ARSTR+1]; /* Access requirements */
uchar *ar;
ushort actset, /* Set of actions used in this chan */
guru; /* Guru file number */
ulong cost, /* Cost to join */
misc; /* Misc. bits CHAN_* definitions */
} chan_t;
typedef struct { /* Modem Result codes info */
ushort code, /* Numeric Result Code */
cps, /* Average Transfer CPS */
rate; /* DCE Rate (Modem to Modem) */
char str[LEN_MODEM+1]; /* String to use for description */
} mdm_result_t;
typedef struct { /* Transfer Protocol information */
char mnemonic; /* Letter to select this protocol */
char name[26], /* Name of protocol */
arstr[LEN_ARSTR+1], /* ARS */
ulcmd[LEN_CMD+1], /* Upload command line */
dlcmd[LEN_CMD+1], /* Download command line */
batulcmd[LEN_CMD+1], /* Batch upload command line */
batdlcmd[LEN_CMD+1], /* Batch download command line */
blindcmd[LEN_CMD+1], /* Blind upload command line */
bicmd[LEN_CMD+1]; /* Bidirectional command line */
uchar *ar;
ulong misc; /* Miscellaneous bits */
} prot_t;
typedef struct { /* Extractable file types */
char ext[4]; /* Extension */
char arstr[LEN_ARSTR+1], /* Access Requirements */
cmd[LEN_CMD+1]; /* Command line */
uchar *ar;
} fextr_t;
typedef struct { /* Compressable file types */
char ext[4]; /* Extension */
char arstr[LEN_ARSTR+1], /* Access Requirements */
cmd[LEN_CMD+1]; /* Command line */
uchar *ar;
} fcomp_t;
typedef struct { /* Viewable file types */
char ext[4]; /* Extension */
char arstr[LEN_ARSTR+1], /* Access Requirements */
cmd[LEN_CMD+1]; /* Command line */
uchar *ar;
} fview_t;
typedef struct { /* Testable file types */
char ext[4]; /* Extension */
char arstr[LEN_ARSTR+1], /* Access requirement */
cmd[LEN_CMD+1], /* Command line */
workstr[41]; /* String to display while working */
uchar *ar;
} ftest_t;
typedef struct { /* Download events */
char ext[4];
char arstr[LEN_ARSTR+1], /* Access requirement */
cmd[LEN_CMD+1], /* Command line */
workstr[41]; /* String to display while working */
uchar *ar;
} dlevent_t;
typedef struct { /* External Editors */
char code[LEN_CODE+1],
name[41], /* Name (description) */
arstr[LEN_ARSTR+1], /* Access Requirement */
lcmd[LEN_CMD+1], /* Local command line */
rcmd[LEN_CMD+1]; /* Remote command line */
uchar *ar;
ulong misc; /* Misc. bits */
uchar type; /* Drop file type */
} xedit_t;
typedef struct { /* Generic Timed Event */
char code[LEN_CODE+1], /* Internal code */
days, /* week days to run event */
dir[LEN_DIR+1], /* Start-up directory */
cmd[LEN_CMD+1]; /* Command line */
ushort node, /* Node to execute event */
time, /* Time to run event */
freq; /* Frequency to run event */
ulong misc, /* Misc bits */
mdays; /* days of month (if non-zero) to run event */
time_t last; /* Last time event ran */
} event_t;
typedef struct { /* QWK Network Hub */
char id[LEN_QWKID+1], /* System ID of Hub */
*mode, /* Mode for Ctrl-A codes for ea. sub */
days, /* Days to call-out on */
call[LEN_CMD+1], /* Call-out command line to execute */
pack[LEN_CMD+1], /* Packing command line */
unpack[LEN_CMD+1]; /* Unpacking command line */
ushort time, /* Time to call-out */
node, /* Node to do the call-out */
freq, /* Frequency of call-outs */
subs, /* Number Sub-boards carried */
*sub, /* Number of local sub-board for ea. */
*conf; /* Conference number of ea. */
time_t last; /* Last network attempt */
} qhub_t;
typedef struct { /* PCRelay/PostLink Hub */
char days, /* Days to call-out on */
name[11], /* Site Name of Hub */
call[LEN_CMD+1]; /* Call-out command line to execute */
ushort time, /* Time to call-out */
node, /* Node to do the call-out */
freq; /* Frequency of call-outs */
time_t last; /* Last network attempt */
} phub_t;
typedef struct { /* Command Shells */
char code[LEN_CODE+1];
char name[41], /* Name (description) */
arstr[LEN_ARSTR+1]; /* Access Requirement */
uchar *ar;
ulong misc;
} shell_t;
typedef struct {
uchar key;
char cmd[LEN_CMD+1];
} hotkey_t;
typedef struct
{
DWORD size; /* sizeof(scfg_t) */
BOOL prepped; /* TRUE if prep_cfg() has been used */
grp_t **grp; /* Each message group */
ushort total_grps; /* Total number of groups */
sub_t **sub; /* Each message sub */
ushort total_subs; /* Total number of subs */
lib_t **lib; /* Each library */
ushort total_libs; /* Total number of libraries */
dir_t **dir; /* Each message directory */
ushort total_dirs; /* Total number of directories */
txtsec_t **txtsec; /* Each text section */
ushort total_txtsecs; /* Total number of text sections */
xtrnsec_t **xtrnsec; /* Each external section */
ushort total_xtrnsecs; /* Total number of external sections */
xtrn_t **xtrn; /* Each external program */
ushort total_xtrns; /* Total number of externals */
mdm_result_t *mdm_result; /* Each Modem Result Code */
ushort mdm_results; /* Total number of Modem Results */
prot_t **prot; /* Each Transfer Protocol */
ushort total_prots; /* Total Transfer Protocols */
fextr_t **fextr; /* Each extractable file type */
ushort total_fextrs; /* Total extractable file types */
fcomp_t **fcomp; /* Each compressable file type */
ushort total_fcomps; /* Total */
fview_t **fview; /* Each veiwable file type */
ushort total_fviews; /* Total viewable file types */
ftest_t **ftest; /* Each testable file type */
ushort total_ftests; /* Total testable file types */
xedit_t **xedit; /* Each external editor */
ushort total_xedits; /* Total external editors */
qhub_t **qhub; /* QWK network hubs */
ushort total_qhubs; /* Total qwk network hubs */
phub_t **phub; /* PostLink/PCRelay network hubs */
ushort total_phubs; /* Total PostLink/PCRelay hubs */
chan_t **chan; /* Each chat channel */
ushort total_chans; /* Total number of chat channels */
chatact_t **chatact; /* Chat action commands */
ushort total_chatacts; /* Total number of action commands */
actset_t **actset; /* Name of action set */
ushort total_actsets; /* Total number of action sets */
page_t **page; /* External chat page */
ushort total_pages; /* Total number of external pages */
event_t **event; /* Timed events */
ushort total_events; /* Total number of timed events */
dlevent_t **dlevent; /* Download events */
ushort total_dlevents; /* Total download events */
faddr_t *faddr; /* FidoNet addresses */
ushort total_faddrs; /* Total number of fido addresses */
swap_t **swap; /* Swapping externals */
ushort total_swaps; /* Total number of non-swap xtrns */
natvpgm_t **natvpgm; /* Native (32-bit) Programs */
ushort total_natvpgms; /* Total number of native pgms */
guru_t **guru; /* Gurus */
ushort total_gurus; /* Total number of guru files */
shell_t **shell; /* Command shells */
ushort total_shells; /* Total number of command shells */
hotkey_t **hotkey; /* Global hot keys */
ushort total_hotkeys; /* Total number of global hot keys */
/* COM port registers: */
ushort com_base, /* COM base address */
com_irq; /* irq line number */
ulong com_rate; /* DTE rate in bps */
char com_port; /* Number of COM port */
/* Modem command strings */
char mdm_init[64], /* Initialization */
mdm_spec[64], /* Special Initialization */
mdm_term[64], /* Terminal Initialization String */
mdm_dial[64], /* Dial */
mdm_offh[64], /* Off hook */
mdm_answ[64], /* Answer */
mdm_hang[64]; /* Hang-up */
ulong mdm_misc; /* Misc bits used for flags */
ushort mdm_reinit; /* Modem reinitialization minute count */
ushort mdm_ansdelay; /* Modem seconds to delay after answer */
uchar mdm_rings; /* Rings to wait till answer */
long sys_misc; /* System Misc Settings */
char sys_pass[41]; /* System Pass Word */
char sys_name[41]; /* System Name */
char sys_id[LEN_QWKID+1];/* System ID for QWK Packets */
char sys_psname[13]; /* PostLink and PCRelay Site Name */
ulong sys_psnum; /* PostLink and PCRelay Site Number */
char sys_inetaddr[128]; /* System's internet address */
char sys_location[41]; /* System Location */
short sys_timezone; /* Time Zone of BBS */
char sys_daily[LEN_CMD+1]; /* Daily event */
char sys_logon[LEN_CMD+1]; /* Logon event */
char sys_logout[LEN_CMD+1]; /* Logoff event */
ushort sys_pwdays; /* Max days between password change */
ushort sys_deldays; /* Days to keep deleted users */
ushort sys_autodel; /* Autodeletion after x days inactive */
ushort sys_nodes; /* Number of nodes on system */
char sys_op[41]; /* Name of system operator */
char sys_guru[41]; /* Name of system guru */
uchar sys_exp_warn; /* Days left till expire to notify */
char sys_def_stat; /* Default status line */
char sys_phonefmt[LEN_PHONE+1]; /* format of phone numbers */
ushort sys_lastnode; /* Last displayable node number */
ushort sys_autonode; /* First node number for autonode */
char sys_chat_arstr[LEN_ARSTR+1]; /* chat override */
uchar * sys_chat_ar;
long msg_misc; /* Global Message-Related Settings */
long file_misc; /* File Misc Settings */
long xtrn_misc; /* External Programs Misc Settings */
char node_comspec[LEN_CMD+1]; /* DOS COMMAND.COM to use */
char node_editor[LEN_CMD+1]; /* Local text editor command line to use */
char node_viewer[LEN_CMD+1]; /* Local text viewer command line */
char node_daily[LEN_CMD+1]; /* Name of node's daily event */
uchar node_scrnlen; /* Length of screen (rows) */
uchar node_scrnblank; /* Min of inactivity for blank screen */
ulong node_misc; /* Misc bits for node setup */
ushort node_valuser; /* User validation mail goes to */
ushort node_ivt; /* Time-slice APIs */
uchar node_swap; /* Swap types allowed */
char node_swapdir[LEN_DIR+1]; /* Swap directory */
ushort node_minbps; /* Minimum connect rate of this node */
ushort node_num; /* Local node number of this node */
char node_phone[13], /* Phone number of this node */
node_name[41]; /* Name of this node */
char node_arstr[LEN_ARSTR+1]; /* Node minimum requirements */
uchar *node_ar;
ulong node_cost; /* Node cost to call - in credits */
uchar node_dollars_per_call; /* Billing Node Dollars Per Call */
ushort node_sem_check; /* Seconds between semaphore checks */
ushort node_stat_check; /* Seconds between statistic checks */
char new_install; /* This is a brand new installation */
char new_pass[41]; /* New User Password */
char new_magic[21]; /* New User Magic Word */
char new_sif[LEN_SIFNAME+1]; /* New User SIF Questionaire */
char new_sof[LEN_SIFNAME+1]; /* New User SIF Questionaire output SIF */
char new_level; /* New User Main Level */
ulong new_flags1; /* New User Main Flags from set #1*/
ulong new_flags2; /* New User Main Flags from set #2*/
ulong new_flags3; /* New User Main Flags from set #3*/
ulong new_flags4; /* New User Main Flags from set #4*/
ulong new_exempt; /* New User Exemptions */
ulong new_rest; /* New User Restrictions */
ulong new_cdt; /* New User Credits */
ulong new_min; /* New User Minutes */
char new_xedit[LEN_CODE+1]; /* New User Default Editor */
ushort new_shell; /* New User Default Command Set */
ulong new_misc; /* New User Miscellaneous Defaults */
ushort new_expire; /* Expiration days for new user */
uchar new_prot; /* New User Default Download Protocol */
char val_level[10]; /* Validation User Main Level */
ulong val_flags1[10]; /* Validation User Flags from set #1*/
ulong val_flags2[10]; /* Validation User Flags from set #2*/
ulong val_flags3[10]; /* Validation User Flags from set #3*/
ulong val_flags4[10]; /* Validation User Flags from set #4*/
ulong val_exempt[10]; /* Validation User Exemption Flags */
ulong val_rest[10]; /* Validation User Restriction Flags */
ulong val_cdt[10]; /* Validation User Additional Credits */
ushort val_expire[10]; /* Validation User Extend Expire #days */
uchar level_expireto[100];
ushort level_timepercall[100], /* Security level settings */
level_timeperday[100],
level_callsperday[100],
level_linespermsg[100],
level_postsperday[100],
level_emailperday[100];
long level_freecdtperday[100];
long level_misc[100];
char expired_level; /* Expired user's ML */
ulong expired_flags1; /* Flags from set #1 to remove when expired */
ulong expired_flags2; /* Flags from set #2 to remove when expired */
ulong expired_flags3; /* Flags from set #3 to remove when expired */
ulong expired_flags4; /* Flags from set #4 to remove when expired */
ulong expired_exempt; /* Exemptions to remove when expired */
ulong expired_rest; /* Restrictions to add when expired */
ushort min_dspace; /* Minimum amount of free space for uploads */
ushort max_batup; /* Max number of files in upload queue */
ushort max_batdn; /* Max number of files in download queue */
ushort max_userxfer; /* Max dest. users of user to user xfer */
ulong max_minutes; /* Maximum minutes a user can have */
ulong max_qwkmsgs; /* Maximum messages per QWK packet */
char preqwk_arstr[LEN_ARSTR+1]; /* pre pack QWK */
uchar * preqwk_ar;
ushort cdt_min_value; /* Minutes per 100k credits */
ulong cdt_per_dollar; /* Credits per dollar */
ushort cdt_up_pct; /* Pct of credits credited on uploads */
ushort cdt_dn_pct; /* Pct of credits credited per download */
char node_dir[LEN_DIR+1];
char ctrl_dir[LEN_DIR+1];
char data_dir[LEN_DIR+1];
char text_dir[LEN_DIR+1];
char exec_dir[LEN_DIR+1];
char temp_dir[LEN_DIR+1];
char mods_dir[LEN_DIR+1];
char logs_dir[LEN_DIR+1];
char node_path[MAX_NODES][LEN_DIR+1]; /* paths to all node dirs */
ushort sysop_dir; /* Destination for uploads to sysop */
ushort user_dir; /* Directory for user to user xfers */
ushort upload_dir; /* Directory where all uploads go */
char ** altpath; /* Alternate paths for files */
ushort altpaths; /* Total number of alternate paths */
ushort leech_pct; /* Leech detection percentage */
ushort leech_sec; /* Minimum seconds before possible leech */
ulong netmail_cost; /* Cost in credits to send netmail */
char netmail_dir[LEN_DIR+1]; /* Directory to store netmail */
ushort netmail_misc; /* Miscellaneous bits regarding netmail */
ulong inetmail_misc; /* Miscellaneous bits regarding inetmail */
ulong inetmail_cost; /* Cost in credits to send Internet mail */
char smtpmail_sem[LEN_DIR+1]; /* Inbound Internet Mail semaphore file */
char inetmail_sem[LEN_DIR+1]; /* Outbound Internet Mail semaphore file */
char echomail_dir[LEN_DIR+1]; /* Directory to store echomail in */
char fidofile_dir[LEN_DIR+1]; /* Directory where inbound files go */
char netmail_sem[LEN_DIR+1]; /* FidoNet NetMail semaphore */
char echomail_sem[LEN_DIR+1]; /* FidoNet EchoMail semaphore */
char origline[51]; /* Default EchoMail origin line */
char qnet_tagline[128]; /* Default QWK Network tagline */
long uq; /* User Questions */
ulong mail_maxcrcs; /* Dupe checking in e-mail */
ushort mail_maxage; /* Maximum age of e-mail */
faddr_t dflt_faddr; /* Default FidoNet address */
char logon_mod[LEN_MODNAME+1]; /* Logon module */
char logoff_mod[LEN_MODNAME+1]; /* Logoff module */
char newuser_mod[LEN_MODNAME+1]; /* New User Module */
char login_mod[LEN_MODNAME+1]; /* Login module */
char logout_mod[LEN_MODNAME+1]; /* Logout module */
char sync_mod[LEN_MODNAME+1]; /* Synchronization module */
char expire_mod[LEN_MODNAME+1]; /* User expiration module */
char scfg_cmd[LEN_CMD+1]; /* SCFG command line */
uchar smb_retry_time; /* Seconds to retry on SMBs */
ushort sec_warn; /* Seconds before inactivity warning */
ushort sec_hangup; /* Seconds before inactivity hang-up */
char* color; /* Different colors for the BBS */
ulong total_colors;
ulong ctrlkey_passthru; /* Bits represent control keys NOT handled by inkey() */
char wfc_cmd[10][LEN_CMD+1]; /* 0-9 WFC DOS commands */
char wfc_scmd[12][LEN_CMD+1]; /* F1-F12 WFC shrinking DOS commands */
ushort user_backup_level;
ushort mail_backup_level;
} scfg_t;
#endif /* Don't add anything after this line */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.