Structures within ArmBBS ======================== Last updated 24/12/96 --------------------- USER RECORD structure --------------------- typedef union { int value; struct { unsigned int deleted : 1; /* user flags for user's records */ unsigned int ansi : 1; /* user's terminal supports ANSI */ unsigned int more : 1; /* user wants prompts every screenfull */ unsigned int cls : 1; /* user wants screen clearing codes */ unsigned int sysop : 1; /* user has sysop privileges */ unsigned int registered : 1; /* user is registered with the system */ unsigned int expert : 1; /* user has expert menus */ unsigned int lockedout : 1; /* user is barred from entry to the system */ unsigned int nolimit : 1; /* user has no time limits online */ unsigned int invisible : 1; /* user is invisible to all sources (Online users, userlist etc) */ unsigned int userdir : 1; /* user has optional user private directory */ unsigned int chataccess : 2; /* chat access (0=Normal, 1=Always, 2=Never) */ unsigned int resettime : 1; /* reset time on login */ unsigned int padding : 18; } data; } userflags; typedef struct { char username[31]; /* user's username */ char realname[31]; /* user's realname */ int passval; /* user's password validation number */ char userkeys[27]; /* access keys for the user */ time_t lastlogon; /* the time & date when the user last logged on */ userflags flags; /* ANSI/CLS/MORE/DELETED/USERDIR etc flags */ int lines; /* screen lines to pass before More? prompt appears */ int access; /* access level the user has got */ int calls; /* number of calls the user has made so far */ int maxtime; /* amount of time in minutes the user is allowed in one day */ int todaytime; /* number of minutes used up today */ int areaflags; /* filebase and msgbase c.s.area */ int baseflags; /* c.s. base */ int uploadsk; /* number of kilobytes uploaded */ int downloadsk; /* number of kilobytes downloaded */ int ratios; /* download/upload ratio */ short uploads; /* number of uploads */ short downloads; /* number of downloads */ time_t lastmsg; /* time of last logon for message/file newscan */ time_t lastfile; /* (unused) */ } USER_REC; FILE RECORD structure --------------------- #define file_FDELETED 0x0001 #define file_FPRIVATE 0x0002 #define file_FRECEIVED 0x0004 #define file_FLONGDES 0x0008 #define file_FSENT 0x0010 typedef struct { int filenumber; /* file unique number */ char name[13]; /* filename */ char from_user[21];/* sender's username */ char to_user[21]; /* recipients username (private file) */ char userkeys[11]; /* required keys */ char shortdesc[51];/* short description */ int flags; /* flags for file (e.g. dltd, sent, recv, prvt etc) */ time_t import; /* time uploaded */ short tms_dload; /* number of times file has been downloaded */ short filetype; /* filetype */ ADDR org_addr; /* originating address */ int filesize; /* for speedier operation */ } FILE_REC; MESSAGE RECORD structure ------------------------ #define msg_FDELETED 0x0001 #define msg_FPRIVATE 0x0002 #define msg_FSENT 0x0004 #define msg_FRECEIVED 0x0008 #define msg_FREPLIED 0x0010 #define msg_FPRIORITY 0x0020 #define msg_FRECEIPT 0x0040 #define msg_FRETURNED 0x0080 #define msg_FNOREPLY 0x0100 #define msg_FNOTLOCAL 0x0200 #define msg_FINTERNET 0x0400 #define msg_FDUPE 0x0800 typedef struct { int msgnumber; /* message unique number */ char from_user[31];/* sender's username */ char to_user[31]; /* recipients username */ char time[24]; /* date message written */ char subject[64]; /* subject line of message */ int flags; /* flags for message (e.g. dltd, sent, recv, prvt etc) */ time_t import; /* time message stored in msgbase */ int tms_read; /* number of times message has been read */ int msgid; /* 'unique' message identification in reply linking list */ int seenptr; /* pointer to start of SEEN-BY etc */ ADDR org_addr; /* originating public network address */ ADDR dst_addr; /* destination public network address */ long pointer; /* file pointer to the null terminated message in MsgTxt */ long length; /* length of message in bytes */ } MSG_REC; FILE BASE linked list structure ------------------------------- typedef struct _base { struct _base *prev;/* pointer to previous one */ struct _base *next;/* pointer to next one */ AREA_HDR *areas; /* pointer to linked list of file areas */ short number; /* base number */ short rdaccess; /* read access userlevel */ short wraccess; /* write access userlevel */ short vsaccess; /* visible access userlevel */ char *keys; /* userkeys required */ char *name; /* name of filebase */ char *path; /* path to find .Index and .Descripts directories in */ char *filespath; /* path to find file (.000000.000000, .000000.000001 etc) in */ } BASE; FILE/MSG AREA linked list structure ----------------------------------- #define area_INCLUDE 0x0001 /* include in filelist */ #define type_LOCAL 0 #define type_ECHO 1 #define type_NETMAIL 2 #define type_JUNK 3 #define type_OTHER 4 #define type_FILE 5 #define type_TICK 6 typedef struct _areahdr { struct _areahdr *prev; /* Pointer to previous one */ struct _areahdr *next; /* Pointer to next one */ int areano; /* area number */ char *areaname; /* area name */ char *tagname; /* tag of ftn area (e.g. ARCNET [msg], ARCFIDO [file]) */ char *keys; /* userkeys */ int areaflags; /* flags e.g. Include in filelist etc. */ short areatype; /* type of area (LOCAL=0, ECHO=1, NETMAIL=2, JUNK=3, OTHER=4, FILE=5, TICK=6) */ short rdaccess; /* minimum access level for read/dl access */ short wraccess; /* minimum access level for write/ul access */ short vsaccess; /* minimum access level for making area 'visible' */ short dayskeep; /* max.days to keep in for */ short aka_use; /* aka number to use */ } AREA_HDR; FTN ADDRESSES linked list structure ----------------------------------- typedef struct _address { ADDR ad; /* FTN address storage */ struct _address *next; /* Pointer to next one */ } ADDRESS; ADDR struct ~~~~~~~~~~~ typedef struct { char domain[20]; /* Domain (network, e.g. Fidonet) */ int zone; /* Zone within FTN */ int net; /* Net within zone */ int node; /* Node within net */ int point; /* Point within node */ } ADDR; LINE DETAILS block structure ---------------------------- typedef struct _lineinfo { char *username; /* User logged on */ int usernumber; /* Usernumber of user */ char *activity; /* Current 'doing' activity */ int speed; /* Connect speed */ } LINE_INFO; LINE DEFINITIONS block structure -------------------------------- typedef struct _linedef { int number; int flags; int task; LINE_INFO info; struct _winptr *def; int mailerwatch_t; char *mailerwatch_n; char *logfilename; char logchars[16]; char *mailerpath; int portnumber; char *mailerparms; char *driver_name; char *init_string; char *answer_string; char *ring_string; long dte_speed; long lock_dte_speed; int number_of_rings; int ringback; int ringback_t; int doortx; int doorrx; char *doortit; int doorflags; struct _linedef *next; } LINEDEF; typedef struct _winptr { int line; struct _linedef *def; struct _winptr *next; } WINPTR;