From Just Solve the File Format Problem
Revision as of 13:20, 16 January 2013 by Dan Tobias (Talk | contribs)

Jump to: navigation, search
File Format
Name Opus-CBCS
Released 1985

Opus-CBCS (Opus Computer Based Conversation System) is a bulletin board system (BBS) program that runs under MS-DOS. It was popular from the mid-1980s through the 1990s.



Opus was created by Wynn Wagner as a FidoNet-compatible BBS program, designed to be compatible with Fido (the program that originated FidoNet) so that sysops of existing Fido boards could easily switch to Opus and preserve all their content, configurations, and user records. Thus, the files used by Opus are almost entirely the same as those of Fido, though over time some of them diverged in later Opus versions (e.g., the conversion of file lists from flat text files to a database format).

Opus rapidly gained popularity by supporting everything Fido did, plus some enhanced features such as the use of color in menus (for users with terminal programs supporting one of several protocols that supported this), and some new and improved data transmission protocols which made more efficient use of modems.

Later on, though, it lost ground to other BBS software which had greater support for such things as online games and multi-user chatting. There was a long delay between the release of versions 1.20 and 1.70 (they skipped the version numbers in between), with the only word on possible release dates being "When It's Ready", and many people switched away during that time, leaving a few hard-core Opus fans sticking with it.

Opus was one of the few FidoNet-capable boards that supported built-in network mail (and Echomail, the FidoNet answer to forums or newsgroups); other BBS software generally required an add-on front-end to support these features. Many Opus sysops, however, still used front-ends on their boards to do netmail/echomail, since those programs had more features in this area.

Opus has always been free software, with the author requesting that those who like it enough to want to pay for it send money to an AIDS research charity instead of to the author.

According to Wagner, Opus is not named after the cartoon penguin, but after the Latin word for "work". The plural of "opus" is "opera", but there is no apparent connection between Opus and the web browser Opera.

Control files

The standard control file is called BBS.CTL. Often it is split into multiple parts referenced in the main control file with "INCLUDE" statements; usually these parts have a .CTL extension as well. These files are ASCII-based, containing a series of configuration directives which are documented in the Opus sysop and technical manuals found in the file areas linked below. After modifying the control file, the sysop then needs to run a utility called NACL (from the chemical formula for table salt) to compile the control file into a file BBS.PRM which was used directly by Opus. Another utility CAYENNE makes the conversion in the opposite direction, generating a BBS.CTL file from the BBS.PRM file.

Menu, help, and other displayable text files

Various files with a .BBS extension are displayed in different situations. There can also be corresponding files with a .GBS extension which include ANSI graphic codes and are displayed in place of the .BBS files for users whose terminals support such codes. Both .BBS and .GBS files can include any of a set of Opus Embedded Commands/Codes (OECs), many of which are composed of control characters. The Opus Technical Manual (in one of the file areas below) documents these commands.

Some of these filenames (and the paths in which they are located) can be changed through lines in the configuration file.

AREAINFO.BBS, in a message-area directory, is displayed to the user when they enter the area, and can be used to describe the area, give rules for its use, etc.

CONFHELP.BBS Shown to new users (in Opus 1.70) to ask them how to configure their accounts. Replaced SHADES.BBS.

CONTENTS.BBS is the help file for the archive contents command in a file area.

DAYLIMIT.BBS is the message shown when a user attempts to log in after exceeding their daily time limit.

DIR.BBS was used in older versions to identify a message/file area; obsolete as of version 1.70.

EDITOR.BBS is the help file for the line-oriented editor (LORE) shown to new users.

EDITHELP.BBS is the help file available from the LORE editor menu.

F1.BBS through F10.BBS is displayed/executed when the sysop presses the corresponding function key while a user is online. (If no user is online, the function keys cause a batch file from F1.BAT through F10.BAT to be executed instead.)

FILEAREA.BBS is displayed when user requests a listing of file areas.

FILEHELP.BBS is the help file for file areas.

FILES.BBS is an obsolete (as of version 1.70) listing of files in a file area.

HISTORY.BBS is the help file for the history menu.

INTERLIN.BBS is the help file for Interline chat.

INQUIRE.BBS is the help file for the Inquire command in message areas.

LEAVING.BBS is displayed/executed when user leaves BBS to enter an external "door" program.

LOCATE.BBS is the help file for the Locate command in file areas.

LOGO.BBS is displayed on initial connect before login. ASCII text only, limit 1K.

MACRO.BBS is displayed to users when they are creating macros. (Opus 1.70)

MAIN.BBS is the help file from the main menu.

MAKE.BBS is displayed when users start to make their own user-defined sections. (Opus 1.70)

MAYBENEW.BBS is displayed when Opus can't find a user name and is going to prompt to register as a new user.

MSG.BBS is the help file from the message menu.

MSGAREA.BBS is displayed when user requests a menu of message areas.

MYQUEST.BBS displays a question upon user login, and stores the answer in the user data file.

NEWUSER1.BBS is displayed to new users immediately after signup, before they choose their password.

NEWUSER2.BBS is displayed to new users after they choose their password.

OPED.BBS is the help file for the OpEd full screen editor.

QUOTES.BBS Quotable quotes used for OEC commands to embed quotes (in round-robin order) in text displayed to users.

REP_EDIT.BBS is displayed when the Edit command of the LORE (line oriented) editor is used, to explain how to edit a line.

RETURN.BBS is displayed on return from an outside DOS program (unless EXIT command is used).

ROOKIE.BBS is displayed on a user's 2nd and 3rd calls.

RULES.BBS (RULES~.BBS, with a language code in place of the ~, for multi-language systems) is found in message areas and causes the rules of that area to be displayed on the menu.

SHADES.BBS was used prior to Opus 1.70 to ask configuration questions of new users. It was replaced with CONFHELP.BBS in 1.70.

SPANN#.BBS (where # is a number from 1 to 5) is a special announcement file, displayed to users a number of times set up in the user data fiile.

SYSHELP.BBS is the help file displayed for the sysop in the !) menu.

TIMEWARN.BBS warns the user of an impending event that will limit their time online.

TOOSLOW.BBS is displayed to users with a baud rate too low to access the board according to its configuration.

WELCOME.BBS is shown immediately after login.

WHY_ANSI.BBS is the help file about ANSI graphics for new users (when they're asked if they support them).

WHY_FB.BBS is the help file for the logoff question asking if user wants to leave feedback.

WHY_HU.BBS is the help file for the logoff (hangup) confirmation question. (Note: To get off quickly from an Opus session, just type GYN; it has nothing to do with gynecology, but sends the commands Goodbye, Yes (to the are-you-sure question), and No (to the leave-feedback question).

WHY_IBM.BBS is the help file for the new-user IBM-PC-character support question.

WHY_LOG.BBS is the help file for the "register as new user" question (Opus 1.70).

WHY_OPED.BBS is the help file for the new-user OpEd editor question.

WHY_PVT.BBS is the help file for the private-message entry question.

WHY_SHAD.BBS was used prior to Opus 1.70 as the help file connected with SHADES.BBS.

XDATGONE.BBS is displayed when a user has reached their account expiration date.

XDATWARN.BBS is displayed when a user is nearing their expiration date (number of days is set in config file with EXPIRE DAYS option).

XFERBAUD.BBS is displayed when user's baud rate is too low to download a file as set in the configuration.

XTIMGONE.BBS is displayed when a user's session time has ended.

XTIMWARN.BBS is displayed when a user is nearing their session time (within number of minutes set in config file under EXPIRE MINUTES option).

YELL.BBS is displayed to a user who tries the Yell command but it is disabled or the sysop does not answer.

#.BBS, where # is a (multi-digit) number, is a special welcome file for the user whose user number is the filename, displayed to them on login.

Message files

Continuing the structure used in the Fido BBS, message areas are stored in one directory per area, with each message in a separate file named with the .MSG extension and a name that represents the number of the message within the area (e.g., 123.MSG for message #123). There were some utilities for renumbering message areas when some of the messages in an area were deleted, since gaps in the numbering would slow down access.

A message file consisted of a 190-byte binary header followed by the plain text of the message body. There was no way of indicating Character Encoding, but messages were generally in ASCII; perhaps non-ASCII characters from an IBM PC code page might be encountered, but such use wouldn't be reliable since BBS users might be using non-PC systems or PCs with different internationalized code pages. Lines starting with Ctrl-A (01) were control lines, e.g. with routing information used in FidoNet transfer, and were intended not to be displayed in normal BBS use.

Mesage header

The binary header was similar to the one used in FidoNet message packets, but not exactly the same.

It consisted of elements in this order:

36 bytes containing the 'from' name (null-terminated string). In this and other null-terminated strings, the bytes after the null character might contain arbitrary content, perhaps left over from other data used by programs processing the message; this was ignored.

36 bytes containing the 'to' name (null-terminated string).

72 bytes containing the subject line (null-terminated string).

20 bytes containing the date/time of the message in a human-readable ASCII string. In an Opus source-code header file (found in one of the file sets linked below), this is indicated as "obsolete/unused", but it still seems to have a correct date string in it (at least in some versions of Opus).

2-byte unsigned integer (word) containing the number of times the message has been read. (Words/integers are little-endian.)

2-byte integer with the destination node number (the 'node' part of a FidoNet address of the form zone:net/node.point).

2-byte integer with the origination node number.

2-byte word with unit cost (in cents) charged to send the message (intended for boards that required accounts with balances, whether paid with real money or 'funny money', to send messages; remember, in those days there were real long-distance phone costs involved in sending remote messages).

2-byte integer with the origination network number (the 'net' part of the FidoNet address). Note that the nodes are stored destination first then origination while the nets were quirkily in the opposite order.

2-byte integer with the destination network number.

The next 4 bytes consist of the timestamp of when the message was written, used by Opus in place of the ASCII timestamp above. In Fido, these bytes were unused and were set to null (00). Now, the format of this gets a bit tangled. The header file has a comment claiming them to be a Unix timestamp, but it isn't; the same header proceeds to define the format instead as two words representing the date and time in turn. No indication is given about how these date/time words translate to actual dates and times, but some detective work on sample files reveals that they are segmented bitwise as follows:

The first 2 bytes (date) are taken as a little-endian unsigned integer, then its bits are grouped starting with the highest-order bit (which, given the little-endian format, is actually in the second byte):
First 7 bits represent the year minus 1980, so that 1980=0, 1981=1, and so on. This will work for years up to 2107.
Next 4 bits represent the month (1=Jan...12=Dec)
Final 5 bits represent the day (1-31)
The last 2 bytes (time) are grouped like this:
First 5 bits represent the hour (0-23)
Next 6 bits represent the minute (0-59; or perhaps 60 during a leap second?)
Final 5 bits represent the second divided by 2 (as a rounded integer) (0-30)

The next 4 bytes contain the timestamp of when the message arrived online, in the same format as above.

The next 2 bytes are a word containing the message number this one is a reply to.

The next 2 bytes are a word with attribute flags. Starting with the low-order bit:

Bit 0: Private
Bit 1: Crash / Squirtmail
Bit 2: Received
Bit 3: Sent
Bit 4: File Attached
Bit 5: In Transit
Bit 6: Orphan
Bit 7: Kill when sent
Bit 8: Local
Bit 9: Hold for pickup
Bit 10: unused
Bit 11: File Request
Bit 12: Return Receipt Request
Bit 13: Is Return Receipt
Bit 14: Audit Request
Bit 15: File Update Request

The final 2 bytes are the number of the next message in the thread.

Other files in message area

AREAINFO.BBS, in a message-area directory, is displayed to the user when they enter the area, and can be used to describe the area, give rules for its use, etc. AREAINF~.BBS (with ~ replaced with a hex digit representing a language) is used in multi-language systems.

RULES.BBS (RULES~.BBS, with a language code in place of the ~, for multi-language systems) is found in message areas and causes the rules of that area to be displayed on the menu.

File areas

DIR.BBS was used in older versions to identify a message/file area; obsolete as of version 1.70.

FILES.BBS is an obsolete (as of version 1.70) listing of files in a file area.

Log files

Other files

Traditionally, the batch file to invoke Opus is named NERF.BAT, apparently the result of an inside joke to do with the bats used on Nerf balls.

Sample files

Software and documentation

Other links and references

Personal tools