home *** CD-ROM | disk | FTP | other *** search
- UltraBBS v2.08 File Formats
- 07/25/91
-
- Message File Format
- -------------------
-
- In the messages file (extension ".DAT"), each record is 150 bytes long. The
- first record in each messages file has the following format:
-
- struct firstrecord
- {
- long nextrecord;
- long highmsgnum;
- long lowmsgnum;
- long lastfidomsgimported;
- char reserved[134];
- }
-
- The nextrecord variable contains the next record # that should be used in
- the messages file (first record in file is record # 0). The highmsgnum
- variable contains the current high message number in the message base, and
- lowmsgnum contains the current low message number in the message base.
- The lastfidomsgimported variable is used by the FIDOCVT program and
- is the number of the last message that was imported by FIDOCVT (or the
- last message that has already been exported to FIDO format).
-
- The header of each message in the messages file has the following format:
-
- struct msgrecord
- {
- long msgnum;
- unsigned char from[26];
- unsigned char to[26];
- unsigned char msgdate[9];
- unsigned char msgtime[6];
- unsigned char subject[26];
- unsigned char msgpass[21];
- unsigned char active;
- long referto;
- unsigned char datercvd[9];
- unsigned char records;
- unsigned char private;
- unsigned char timercvd[6];
- unsigned char echoflag;
- unsigned char rr;
- unsigned char perm;
- unsigned char attached;
- int hasreplies;
- unsigned char reserved[4];
- }
-
- All character arrays ("strings") are NULL TERMINATED character arrays!
- They are NOT padded with spaces! This applies for the rest of this file,
- except where specifically stated otherwise. Whatever follows the null byte
- is of no consequence, it is ignored.
-
- The msgnum variable is the number of this message. The from variable
- is the name of the user who entered the message. The to variable is
- the name of the user to whom the message was entered. The msgdate variable
- is the date on which the message was entered ("MM/DD/YY" format). The
- msgtime variable is the time on which the message was entered ("HH:MM"
- format). The subject variable is the subject of the message. The msgpass
- variable is the password of the message, it should be null if there is no
- password on the message. The active variable is nonzero if the message is
- active, zero if the message is killed. The referto variable contains the
- message number of the message which this message is a reply off of, 0
- if this message is not a reply to any other message. The datercvd variable
- contains the date on which this message was received ("MM/DD/YY" format),
- it should be a 0 length string if the message has not been received yet.
- The records variable contains the # of records in the message's text area
- (it does NOT include the header!). The private variable is nonzero if the
- message is receiver only, or zero if it is public or password protected.
- The timercvd variable contains the time on which this message was received
- ("HH:MM" format), it should be a 0 length string if the message has not been
- received yet. The echoflag variable is used only for conferences designated
- as 'echo' conferences. If nonzero, it is assumed that the message is
- supposed to be exported for echomail, if zero, it should stay only in the
- local message base. The rr variable is nonzero if the user has requested a
- return receipt, zero if he has not (a return receipt is generated when the
- message is first received, the rr flag is NOT changed). The perm variable
- is nonzero if the message cannot be killed by the receiver, zero if it can
- (this should only be used on public messages). The attached variable is
- nonzero if a file is attached to the message, zero if a file is not
- attached. The hasreplies variable is nonzero if the message has replies
- to it, otherwise it is set to zero. The reserved variable is used for
- future use and should be set to all nulls. If a file is attached, it will
- be placed in a subdirectory off of your attach directory named
- MSGNUMBER.CONF (for example, ATTACHDIR\1.0\filename.ext for message # 1 in
- conference # 0).
-
- The actual text records of the message (following each header) are strings
- of text, each representing a line of the message, followed by (Ctrl-A)
- characters. The very last (Ctrl-A) of the message (representing the
- (Enter) on the last line of the message) is followed by a (Ctrl-B)
- character. The rest of the current record is padded out by unpredictable
- characters to the next 150-byte boundary.
-
- The records in the messages index file (extension ".NDX") have the
- following format:
-
- struct messageindexrecord
- {
- long record;
- unsigned char to[26];
- unsigned char from[26];
- unsigned char private;
- unsigned char active;
- unsigned char subject[26];
- }
-
- The index begins at the low message number specified in the first record of
- the message file. The long integer is the record # in the messages file of
- the message it represents (first record in file is record # 0 again). For
- example, if the low message number is 5, and you wanted to find message # 5
- in the messages file, you would look at the first record in the index file
- to get message # 5's record in the messages file. The to, from, private,
- active, and subject fields should correspond to those fields in that
- message's actual header. Since the index file is based on the lowmsgnum
- variable, you will not want to change the lowmsgnum variable at any time
- unless your program does a complete pack of the message files.
-
- FileBase File Format
- --------------------
-
- In the FileBase data file (extension ".DAT"), each record is 338 bytes
- long. Each file entry in the file has the following format:
-
- struct filerecord
- {
- unsigned char file[13];
- unsigned long filesize;
- unsigned char uploadedby[26];
- int timesdled;
- unsigned char filelocation[41];
- unsigned char lastdl[9];
- unsigned char dateoful[9];
- int freefile;
- unsigned char id[5];
- unsigned char descrip[225];
- int deleteflag;
- }
-
- The file variable contains the actual file name of the file on the BBS.
- The filesize variable contains the size (in bytes) of the file on disk, or
- 0 if the file has a "variable" size. The uploadedby field contains the full
- name of the user who uploaded the file. The timesdled field contains the
- number of times that this file has been downloaded. The filelocation
- variable contains the actual physical location of the file (on the disk
- drive). The lastdl and dateoful fields contain (in "MM/DD/YY" format) the
- last date the file was downloaded, and the date that the file was uploaded,
- respectively. The freefile variable is nonzero if the file is free (no
- download charge), or zero if not. The idvariable contains the 4 character
- Directory ID of the file. The descrip variable contains the description of
- the file (5 lines, 45 characters each). The descrip variable is NOT null
- terminated and is padded with spaces! The deleteflag variable is nonzero
- if the file is flagged for deletion, zero if not.
-
- The FileBase index files have a one-character extension that is the first
- letter in their file name. The records in the FileBase index files have
- the following format:
-
- struct fileindexrecord
- {
- unsigned char file[13];
- unsigned char id[5];
- long record;
- long binarydate;
- }
-
- The file variable contains the file name of the file. The id variable
- contains the 4 character Directory ID of the file. The record variable
- contains the actual record (again, first record in data file is # 0) in the
- FileBase data file where complete information on the file is stored. The
- binarydate field contains the file's date as a long integer. This value is
- obtained by rearranging the fields of the date to YYMMDD and then taking
- the value into a long integer (ie: 10/12/90 = 901012).
-
- User File Format
- ----------------
-
- In the Users data file (extension ".DAT"), each record is 1695 bytes
- long. Each user entry in the file has the following format:
-
- struct userrecord
- {
- unsigned char name[26];
- unsigned char userpass[21];
- int security;
- int expert;
- unsigned char city[21];
- unsigned char lastdate[9];
- unsigned char lasttime[6];
- unsigned char newfchk[9];
- int downloads;
- int uploads;
- int elapsedmins;
- unsigned char page;
- unsigned char voice[14];
- unsigned char data[14];
- unsigned char protocol;
- int timeson;
- unsigned int doorsent;
- unsigned int msgsent;
- unsigned char confs[25];
- long lastmsg[200];
- unsigned char expiredate[9];
- int expiresec;
- unsigned char econfs[25];
- unsigned char birthdate[9];
- unsigned char sysopcomment[61];
- unsigned char fileforuser[41];
- unsigned char autopage;
- unsigned char userscanconfs[25];
- int deleteuser;
- unsigned char reserved2;
- double kuploaded;
- double kdownloaded;
- unsigned char fsdefault;
- int clrscrn;
- int timestored;
- long kbytesdled;
- unsigned char reserved[6];
- }
-
- The name variable is the full name of the user. The userpass variable
- contains the user's password. The security variable contains the user's
- security level. The expert variable is nonzero if the user has turned on
- expert mode, zero if not. The city variable contains the user's
- city/state. The lastdate and lasttime variables (in "MM/DD/YY" and "HH:MM"
- form, respectively) contain the last date and last time on which the user
- called the BBS. The newfchk variable (in "MM/DD/YY" format) contains the
- last date that the user checked for new files. The downloads and uploads
- variables contain the number of downloads and uploads the user has done on
- the BBS. The elapsedmins field contains the elapsed minutes that the user
- has spent on the BBS in all his calls on the last date he called. The page
- variable contains the user's screen page length. The voice and data
- variable contains the user's voice and data phone numbers, respectively.
- The protocol variable contains the user's default transfer protocol. The
- timeson, doorsent, and msgsent variables contain the number of times the
- user has logged on, the number of doors he has opened, and the number of
- messages he has entered, respectively. The confs variable is a 25-byte
- (NOT null terminated) field that consists of 200 bits, each representing
- one conference in the user's conference string (for example, bit 0 of the
- first byte is conference 0, bit 2 of the second byte is conference 10).
- The lastmsg[] array is a 200-element array of long integers, representing the
- last message number read in each conference (0-199). The expiredate (in
- "MM/DD/YY" format) contains the date on which the user's subscription will
- expire ("00/00/00" means it won't expire). The expiresec variable contains
- the security level to set this user to after his subscription expires. The
- econfs variable is the same format as the confs variable described above,
- but is the conference string to set the user to after his subscription
- expires. The birthdate variable contains the date (in "MM/DD/YY" format)
- on which the user was born. The sysopcomment variable contains the comment
- which the sysop has put on this user. The fileforuser variable contains
- the name of a file to display to the user upon login (a 0 length string if
- no file should be displayed). The autopage character should be set to
- 'N', 'I', or 'V'. An 'N' means that no autopage will be done when this
- user logs on. If it is set to 'I' or 'V', an invisible or visible
- (respectively) autopage will be executed when the user logs in. The
- userscanconfs variable works the same way as the two conference variables
- mentioned above. It defined the conferences that will be scanned upon
- login, with the (Y) command, with (R A), for offline reading, etc. The
- deleteuser variable, if set to a nonzero value, means the user is marked
- for deletion, otherwise the user is not marked for deletion. The reserved2
- variable is reserved for future use and should be left alone. The
- kuploaded and kdownloaded variables (stored as double precision values in
- IEEE format) store the number of kilobytes (bytes / 1024) that the user has
- uploaded and downloaded, respectively. The fsdefault variable should be
- set to a value of 0, 1, or 2. A 0 means to ask the user if he wishes to
- use the full screen editor each time he enters a message. A 1 means that
- the user wishes to use the full screen editor whenever possible, and a 2
- means to not use it whenever possible. The clrscrn variable, if set to a
- nonzero value, means that the user wishes the screen to be clear prior to
- reading each message; otherwise, the screen is not cleared. The timestored
- variable stored the amount of time (in minutes) that the user has stored in
- the time bank. The kbytesdled variable stores the number of kilobytes that
- the user had downloaded on his last date on. The reserved variable is
- reserved for future use and must be set to all nulls.
-
- The User File index files have a one-character extension that is the first
- letter in the full name of the user. The records in the user index files
- have the following format:
-
- struct userindexrecord
- {
- unsigned char username[26];
- long record;
- }
-
- The username field is the full name of the user, and the record field is
- the record (again, record # 0 is the first record in the data file) in the
- users data file of this user.
-
- Conferences Data File Format
- ----------------------------
-
- In the conferences data file, each record is 2717 bytes long. The first
- record in the file contains the information for Conference # 0, the second
- record contains the information for Conference # 1, and so on. The format
- of each record is as follows:
-
- struct confrecord
- {
- unsigned char confname[41];
- int allowalias;
- int echoconf;
- int allowesc;
- int maxdir;
- unsigned char msgsfile[41];
- unsigned char mainmenufile[41];
- unsigned char sysopmenufile[41];
- unsigned char newsfile[41];
- unsigned char uploaddir[31];
- int defaultfiledir;
- unsigned char doormenu[41];
- unsigned char doorlst[41];
- unsigned char bltmenu[41];
- unsigned char bltlst[41];
- unsigned char quesmenu[41];
- unsigned char queslst[41];
- unsigned char dirmenu[41];
- unsigned char votingmenu[41];
- unsigned char votinglst[41];
- int allowupload;
- struct dirinfo
- {char dirid[5];
- int dirsec;
- } dir[300];
- }
-
- The confname variable is the name of this conference. The allowalias
- variable, if set to nonzero means that aliases will be allowed in this
- conference, else aliases will not be allowed. If echoconf is nonzero, then
- this conference is designated as 'echo', and users entering messages will
- be prompted as to whether they wish to make their messages 'echo' or not.
- If allowesc if nonzero, then users are allowed to use ESC (usually ANSI)
- codes in their messages. The maxdir variable contains the highest
- directory number in this conference. The msgsfile variable contains the
- name (without extension) of the message file for this conference. The
- mainmenufile, sysopmenufile, newsfile, and uploaddir variables contain the
- names for the main menu file, the sysop menu file, the news file, and the
- directory to place uploads, respectively. The defaultfiledir variable
- stores the default file directory number to place uploaded files in. The
- doormenu, doorlst, bltmenu, bltlst, quesmenu, queslst, dirmenu, votingmenu,
- and votinglst variables contain the file names of the door menu, door data
- file, bulletins menu, bulletins data file, questionnaire menu,
- questionnaire data file, file directory menu, voting booths menu, and
- voting booths data file. If the allowupload variable is zero, then uploads
- will not be allowed in this conference. The dir[] array is an array of 300
- structures, each containing a 4 character directory ID and the security
- required to download files from that directory ID. All elements of dir[]
- above the maxdir number are ignored.
-
- NODEINFO File Format
- --------------------
-
- The NODEINFO file contains 99 records, each corresponding to a node on the
- system. Any records above your highest node number are ignored, but should
- still be there. The format of each node's record is as follows (71 byte
- record length):
-
- struct noderecord
- {
- unsigned char status;
- unsigned char groupsummons;
- unsigned char nodepage;
- unsigned char nodebeeps;
- unsigned char lasteventdate[9];
- unsigned char lasteventtime[6];
- unsigned char nodeuser[26];
- unsigned char logoffflag;
- unsigned char nodedoor[21];
- int exittodos;
- int lasteventnumber;
- int pagingsysop;
- }
-
- The status variable contains the status of this node. Possible values are
- as follows:
- 0 = UltraBBS isn't loaded on this node
- 1 - 99 = User is in a private (1-99) channel in node chat
- 100 = User is available for chat
- 101 = User is unavailable for chat
- 102 = User is entering a message
- 103 = User is in a door
- 104 = User is in remote DOS
- 105 = User is transferring a file
- 108 = User is in main channel of node chat
- 109 = This node is waiting for calls
- 110 = User is chatting with sysop
- 111 = User is logging onto BBS (not at main menu yet)
- The groupsummons variable is nonzero if this node is being summoned to
- group chat. After displaying the summons to the user, this flag is set to
- zero. The nodepage and nodebeeps variables record the state of the page
- bell and beeps on this node (nonzero = on, zero = off). The lasteventdate
- and lasteventtime variables (in "MM/DD/YY" and "HH:MM" formats) store the
- date and time of the last event run on this node. The nodeuser variable
- stores the user name of the user on this node. The logoffflag variable, if
- set to 1, it means that the user on this node has a logoff pending. If it
- is set to 2, it means that the user on this node has a lockout pending.
- The nodedoor variable stores the name of the door that the user on this
- node is in, if he is in a door. The exittodos variable, if nonzero, means
- that this node should exit to DOS after the current caller, or if no caller
- is online, it should exit to DOS immediately. The lasteventnumber
- variable stores the number of the last event that was executed. The
- pagingsysop variable is nonzero if the user is currently paging the sysop,
- zero if he is not.
-
- Callers File Format
- -------------------
-
- The callers file for each node is created by taking the name specified in
- the SETUP program, and appending the current node number (for example, if
- Node 1's callers log would be CALLER1, then Node 99's callers log would be
- CALLER99). Each entry in the callers log is exactly 79 bytes long. The
- last two bytes are a CR/LF sequence (ASC 13, ASC 10). The file, when
- TYPEd, appears to be a text file, but must NOT be modified as a text file!
-
- Doors Data File Format
- ----------------------
-
- The first record in the doors data file is door # 1, the second record is
- door # 2, etc. The format of each record is as follows (98 byte record
- length):
-
- struct doorrecord
- {
- unsigned char doorname[21];
- unsigned char doorfile[41];
- int doorsec;
- unsigned char doorpass[21];
- unsigned char doortype[11];
- int doorwatch;
- }
-
- The doorname variable contains the name of this door. The doorfile
- variable contains the full path (and any parameters) to the .BAT file for
- this door. The doorsec variable contains the security level required to
- access this door. The doorpass variable contains the password required to
- access this door (a 0 length string if no password is required). The
- doortype variable contains the door type which will be used for the CONVERT
- program. The doorwatch variable, if nonzero, means that the FOSSIL will
- reboot the computer if the user hangs up in this door.
-
- Questionnaires Data File Format
- -------------------------------
-
- The first record in the questionnaires data file is questionnaire # 1, the
- second is questionnaire # 2, etc. The format of each record is as follows
- (126 byte record length):
-
- struct quesrecord
- {
- unsigned char quesname[21];
- unsigned char quesfile[41];
- unsigned char ansfile[41];
- int quessec;
- unsigned char quespass[21];
- }
-
- The quesname variable is the name of this questionnaire. The quesfile and
- ansfile variables are the file names of the questionnaire script file, and
- the output answers file, respectively. The quessec variable is the
- security required to answer this questionnaire, and the quespass variable
- is the password that is required (a 0 length string means no passworD).
-
- Voting Booths Data File Format
- ------------------------------
-
- The first record in the voting booths data file is voting booth # 1, the
- second is voting booth # 2, etc. The format of each record is as follows
- (1388 byte record length):
-
- struct votingrecord
- {
- unsigned char votingname[46];
- unsigned char datafile[41];
- int votingsec;
- unsigned char votingpass[21];
- unsigned char choices[18][71];
- }
-
- The votingname variable is the question presented by this voting booth.
- The datafile variable contains the name of the voting results data file for
- this voting booth. The votingsec & votingpass variables contain the
- security required for this voting booth, and the password required for the
- booth (0 length password means no password). The choices[] array is an 18
- element array containing strings of the 18 possible responses.
-
- Bulletins Data File Format
- --------------------------
-
- The first record in the bulletins data file is bulletin # 1, the second
- record is bulletin # 2, etc. The format of each record is as follows (64
- byte record length):
-
- struct bltrecord
- {
- unsigned char bltfile[41];
- unsigned char bltpass[21];
- int bltsec;
- }
-
- The bltfile variable contains the file name of the actual bulletin. The
- bltpass & bltsec variables contain the password (0 length means no
- password) and the security required to access this bulletin.
-
- No Uploads File Format
- ----------------------
-
- The format of a record in the no uploads file is as follows (43 byte record
- length):
-
- struct nouprecord
- {
- unsigned char file[41];
- int upsecurity;
- }
-
- The file variable is the wildcard specification for this entry. The
- upsecurity variable contains the minimum security level required to upload
- a file that matches the wildcard spec.
-
- Compression Methods Data File Format
- ------------------------------------
-
- The first record in the compression methods data file will be the default
- compression method for use in Qmail packets. The format for each entry is
- as follows (224 byte record length):
-
- struct comprecord
- {
- unsigned char ext[4];
- unsigned char viewform[51];
- unsigned char addform[51];
- unsigned char getform[51];
- unsigned char testform[51];
- unsigned char badtext[16];
- }
-
- The ext variable contains the 3 character extension used by this
- compression method. The viewform, addform, getform, and testform store the
- command line needed to execute the various functions. See the UltraBBS
- sysop documentation for more information on what these strings should look
- like. The badtext variable contains the text that the compressor will
- display if a file is bad during an integrity check.
-
- Protocols Data File Format
- --------------------------
-
- The format of each record in the protocols data file is as follows (109
- byte record length):
-
- struct protrecord
- {
- unsigned char letter;
- unsigned char batch;
- unsigned char uload[41];
- unsigned char dload[41];
- unsigned char protname[21];
- int atsign;
- int dszlog;
- }
-
- The letter variable is the letter used to select this protocol from the
- BBS. The batch variable should be set to 'S', 'M', or 'B' for single file,
- multiple files, or bidirectional multiple files. The uload and dload
- variables store the name of the batch file for uploads and downloads,
- respectively (dload variable is used for bidirectional transfer batch
- files). The protname variable contains the name of this protocol. The
- atsign variable, if nonzero, means that this protocol supports the
- '@listfile' command line parameter, to transfer up to 99 files instead of
- just 6 or 7. The dszlog variable, if nonzero, means that this protocol
- will write a DSZ.LOG file after a download.
-
- Limits Data File Format
- -----------------------
-
- The format of each record in the limits data file is as follows (14 byte
- record length):
-
- struct limitsrecord
- {
- int limitssec;
- int limitsmins;
- int kbytesperup;
- int filesperup;
- int doornumber;
- long kbytesperday;
- }
-
- The limitssec variable is the security for which this record applies. The
- limitsmins variable is the number of minutes that this security level will
- get each day. The kbytesperup (stored as a double precision IEEE format
- number) and filesperup variables determine how many Download Kilobytes the
- user may have for each 1 Upload Kilobyte; and the number of Download Files
- the user may have for each 1 Upload File. To negate the function of
- either, set it to 0. The doornumber variable contains the door number
- which will be automatically opened when any user of this security level
- logs on. The kbytesperday variable stores the number of kilobytes that
- a user of this security level can download per day.
-
- Voting Results Data File Format
- -------------------------------
-
- A voting results data file contains records 27 bytes in length for each
- user who has voted (a user will not appear more than once in the file).
- The format of each record is as follows:
-
- struct votedrecord
- {
- unsigned char name[26];
- unsigned char choice;
- }
-
- The name variable is the name of the user to which this vote applies, and
- the choice variable is the choice number which he voted for.
-
- Node Chat Data File Format
- --------------------------
-
- Each record (one character typed in node chat) is 3 bytes in the node chat
- data file. The first byte of the record is a char that should be set to
- the channel # that this message is going through (0-99). If the record is
- representing a character, then the second byte of the record should be set
- to the number of the node that is sending the character, and the third byte
- should be set to the actual character. If the record is to notify of an
- exit/entrance/hangup/etc, then the second byte should be set to 253 for a
- force off (hang up, etc), 254 for an entrance, and 255 for an exit; and the
- third byte should be set to the node number to which this
- exit/entrance/hangup applies to.
-
- UBBS.SYS Door Exit File Format
- ------------------------------
-
- The UBBS.SYS file is created before exiting to a door, and is read back in
- by UltraBBS upon returning to obtain info about who is on. This file is
- usually just used by CONVERT to make other, more commonly used, door files,
- but some software authors may wish to use it to alter user information, or
- obtain more detailed, UltraBBS-specific information. Its format is as
- follows:
-
- struct ubbs_sysfile
- {
- long modembaud;
- long callerbaud;
- int eight_bit;
- char time_on[6];
- char date_on[9];
- int kbytesperup;
- int filesperup;
- long kbytesperday;
- int graphics;
- long userpos;
- int local_user;
- int confnum;
- char confsjoined[200];
- char prevdate[9];
- char prevtime[6];
- int disable_remote;
- int available;
- long logon_time;
- long secs_session;
- long elapsedsecs;
- long eventadjust;
- char markedfiles[99][13];
- unsigned char markednum;
- char oldfchk[9];
- -------------------- Variables below this line are write-only. UltraBBS
- does not read them in upon returning from a door.
- If you wish to modify other variables, do so in the
- users file!
- char bbsname[31];
- char sysopname[26];
- char curtime[6];
- char page_bell;
- char beeps;
- int junk;
- long timeused;
- char eventtime[6];
- int eventactive;
- int port;
- char usermixed[26];
- int minsremaining;
- char node;
- struct user currentuser;
- }
-
- The modembaud variable contains the actual bps rate (locked bps rate) of
- the port. The callerbaud variable contains the bps rate the caller is
- actually communicating at. eight_bit is nonzero if the caller is 8N1, zero
- if 7E1. The time_on string contains the time at which the caller logged on
- (HH:MM format), and date_on contains the date at which he logged on
- (MM/DD/YY format). kbytesperup and filesperup contain the number of
- kilobytes that this user may download per kilobyte he uploads, and files he
- may down per file he uploads (a value of 0 sets these to unlimited). The
- graphics variable is 0 if (N)o graphics, 1 if (B)lack & White graphics, 2
- if (C)olor graphics. The userpos variable contains the user's position in
- the user file (the first record in user file is rec # 0). local_user is
- nonzero if the user is on local, zero if remote. confnum contains the
- current conference number the user is in. confsjoined is a non-null
- terminated string that contains spaces or 'X's, specifying which
- conferences the user has joined during the current call. The prevdate and
- prevtime variables (MM/DD/YY and HH:MM) contain the date and time of the
- user's last call (before this one). disable_remote if nonzero if the
- remote user's keyboard is disabled, zero otherwise. available is nonzero
- if the user is available for chat, zero otherwise. logon_time contains the
- seconds at which the user logged in (# of seconds elapsed since 00:00:00
- Greenwich mean time, January 1, 1970). secs_session contains the number of
- seconds this user has per call (obtained from LIMITS.DAT). elapsedsecs is
- the number of seconds this user has used in calls earlier today.
- eventadjust is the number of seconds the user has lost today because of
- time adjustments due to upcoming events. markedfiles is an array of
- strings (containing 99 strings) containing which files the user has marked
- to download via the (FL) command. markednum contains the number of files
- the user has marked. oldfchk contains the last date (MM/DD/YY format)
- which the user checked for new files. bbsname contains the name of the
- BBS. sysopname is the name of the sysop, in all caps. The curtime
- variable contains the time (HH:MM format) that this UBBS.SYS file was
- created. The page_bell variable is true (nonzero) if the page bell is on,
- zero if it's off. beeps is nonzero if beeps/music is on, zero otherwise.
- The junk variable is not used. timeused contains the amount of time (in
- seconds) the user has used so far today. eventtime contains the time
- (HH:MM format) of the next event. eventactive is nonzero if any events are
- configured, zero otherwise. port contains the COM port number of the
- current COM port (0=COM1, 1=COM2, 2=COM3, etc). usermixed contains the
- mixed case name of the user (ie: 'Bob Farmer'). minsremaining contains the
- time, in minutes, that the user has remaining as of the creation of this
- UBBS.SYS file. This variable can be used, possibly in conjunction with the
- curtime variable, to quickly obtain a time left calculation. The node
- variable contains the node # of this node. The currentuser structure is in
- the same format as a record in the user file (see above), and contains the
- user record of the current user.
-
- Caller Number Data File Format
- ------------------------------
-
- The caller number data file is 4 bytes, and simply contains a single
- long integer which is the number of calls made to the system.
-
- UltraBBS's UBBS.DAT File Format
- -------------------------------
-
- The UBBS.DAT file is a line-by-line, sequential text file maintained by the
- SETUP program. The lines, in order, are as follows:
-
- Maximum # of Messages for (O) and (D C)
- Event # 1 Guard Time
- Event # 2 Guard Time
- Event # 3 Guard Time
- Security to Edit His Own Messages
- Use BIOS Output?
- Security for (6)
- BBS Listing Data File Name
- Security for (BB)
- Use Terse Caller Logging?
- Caller Number File Name
- Number of Rings to Skip Before Answering
- Instant Logon Password
- Event # 2 Active?
- Event # 3 Active?
- Event # 2 Time
- Event # 3 Time
- Security for (11)
- Security for (TI)
- Maximum Storable Time in (TI)
- Check Message 'To' Field?
- Delete the File For User?
- Birthday File Name
- Security for (10)
- Start of SysOp Page Hours
- End of SysOp Page Hours
- Holding Directory Name
- Scratch Directory Name
- No New Users File Name
- FileBase File Name
- Help Prefix File Name
- Conference Data File Name
- Conference Menu File Name
- Caller File Prefix File Name
- Node Chat File Name
- Welcome File Name
- Goodbye File Name
- Limits Data File Name
- NODEINFO Data File Name
- Protocols Data File Name
- User Data File Name
- No Registration File Name
- No Uploads Data File Name
- Low Security File Name
- New User File Name
- Remote DOS Batch File Name
- Aliases Data File Name
- User Security Files Path Name
- Event # 1 Time
- BBS Name
- SysOp's Name
- Initialization Command
- Answer Command
- Off-Hook Command
- Batch Directory Name
- Public Conferences String (exactly 200 chars)
- New User Questionnaire File
- New User Answers File
- Expired Subscription File Name
- Compression Data File Name
- Post-Upload Batch File Name
- Node Number
- Communications Port
- Allow New Users?
- Security to Overwrite Files
- RTS/CTS Checking?
- Test Uploads?
- Security for (M)ultiple Copy Save
- Security to Read Killed Messages
- Security to Edit/Move Messages
- Security to Kill Any Messages
- Security to Skip Message Password
- Security to Leave Message To SysOp
- Initialization Baud Rate
- Page Bell FIle Name
- Private Directory ID
- Security for (G X)
- Highest Node Number
- Minimum Security to Logon
- Security to Classify Files
- Use Post-Upload Batch File?
- New User Security
- Allow Aborting of Welcome?
- Lowest Baud Rate Allowed
- Seconds Allowed for Registration
- Security to Read Private Messages
- Seconds Between Node Checks
- SysOp Menu Security
- Upload Time Credit Factor
- Seconds of Idle Time Allowed
- Security to Edit Any Description
- Security to Import File into Message
- Lock Baud Rate?
- Allow 7E1 Callers?
- Event # 1 Active?
- Shell to Doors?
- Reboot on DOS Hangup?
- Shell to DOS?
- Security for (NO)/(CH)
- Security for (B)
- Security for (W)
- Security for (OP)/(DO)
- Security for (G)
- Security for (I)
- Security for (J)
- Security for (K)
- Security for (O)
- Security for (P)
- Security for (Q)
- Security for (R)
- Security for (S)
- Security for (US)
- Security for (V)
- Security for (X)
- Security for (Y)
- Security for (1)
- Security for (2)
- Security for (3)
- Security for (4)
- Security for (5)
- Security for (7)
- Security for (8)
- Security for (BI)
- Security for (D)
- Security for (ED)
- Security for (U)
- Security for (Z)
- Security for (VI)
- Security for (RE)
- Security for (F)
- Security for (N)
- Security for (E)
- Security to Page Unavailable Users
- Security for (WH)
- Security for (L)
- Security to Request Return Receipt
- Security to Forward a Message
- Pre-Upload File Name
- Qmail Offline ID
- BBS City/State
- BBS Phone Number
- Qmail Menu File Name
- Security for (FL)
- File Attach Directory Name
- Allow Non-2-Word Names?
- Continue After Modem Init Failure?
- Security for (9)
-
- Information for BASIC Programmers
- ---------------------------------
-
- All numbers are stored in IEEE format. Variable information:
-
- An 'unsigned char' or a 'char' is a numerical value stored in one byte. To
- convert it to BASIC, read it in as a 1-character string (A$, for example),
- then, to get its value into a variable, (A%, for example), use A% = ASC(A$).
-
- An 'int' or an 'unsigned int' is a 2-byte number, equivalent to BASIC's
- INTEGER type (%).
-
- A 'long' or an 'unsigned long' is a 4-byte integral number, equivalent to
- QuickBASIC's LONG INTEGER type (&).
-
- A 'double' is an 8-byte floating point number, equivalent to BASIC's DOUBLE
- type (#). NOTE: older versions of Microsoft's QuickBASIC store DOUBLEs in
- Microsoft Binary format, remember, these are in IEEE format - 4.0+ of
- QuickBASIC is fine.
-
- A 'float' is a 4-byte floating point number, equivalent to BASIC's SINGLE
- type (!). NOTE: older versions of Microsoft's QuickBASIC store SINGLEs in
- Microsoft Binary format, remember, these are in IEEE format - 4.0+ of
- QuickBASIC is fine.
-
- Any numerical type with a number in brackets after the variable name is an
- array of the number of elements specified in brackets. Two pairs of
- brackets means a two-dimensional array, etc.
-
- An 'unsigned char ....[]' value (unless it is literally an array of char
- values) is a string. The value in brackets is the max length of the
- string. However, all strings are null terminated. First, this means that
- the 'max length of the string' in brackets will actually be one more than
- the true max length. Second, at the end of all meaningful characters
- in the string, there will be a null (ASCII 0) character, followed by
- unpredictable trash. The strings are NOT padded with spaces! When reading
- in these "string" values, use a BASIC STRING of the length in the brackets,
- and this command may be used afterwards to obtain a true BASIC string:
- REAL.STRING$ = LEFT$(STRING.FROM.FILE$, INSTR(STRING.FROM.FILE$, CHR$(0))-1)
- Some arrays of unsigned char are not actually strings, but as mentioned
- earlier, literally arrays of char values, and when this is the case, it is
- mentioned in the description of that structure in this document.
-
- Information for Pascal Programmers
- ----------------------------------
-
- An 'unsigned char' type corresponds to Turbo Pascal's byte type.
-
- A 'char' type corresponds to Turbo Pascal's shortint type.
-
- An 'unsigned int' type corresponds to Turbo Pascal's word type.
-
- An 'int' type corresponds to Turbo Pascal's integer type.
-
- An 'unsigned long' or 'long' type corresponds to Turbo Pascal's longint type.
-
- A 'double' is an 8-bit floating point type, and a 'float' is a 4-bit
- floating point type. Their Pascal equivalent types vary widely. See your
- compiler guide, and remember, these are in IEEE format.
-
- Any numerical type with a number in brackets after the variable name is an
- array of the number of elements specified in brackets. Two pairs of
- brackets means a two-dimensional array, etc.
-
- An 'unsigned char ....[]' value (unless it is literally an array of char
- values) is a string. The value in brackets is the max length of the
- string. However, all strings are null terminated. First, this means that
- the 'max length of the string' in brackets will actually be one more than
- the true max length. Second, at the end of all meaningful characters
- in the string, there will be a null (ASCII 0) character, followed by
- unpredictable trash. The strings are NOT padded with spaces! When reading
- in these "string" values, use a packed array of char of the length in the
- brackets. The true length of the string will be the position of the first
- ASCII 0 (null) minus one (assuming first char in the string is pos # 1).
- Some arrays of unsigned char are not actually strings, but as mentioned
- earlier, literally arrays of char values, and when this is the case, it is
- mentioned in the description of that structure in this document.
-