OMEN -system Offline Message Environment (C)1991 by Omsoft Rev. F Offline Message Environment -system (OMEN) is designed to be used with any Bulletin Board Systems that have the capability to either pack messages into a file and get new messages out of a file, or use an outside program to do so. With OMEN you can minimize the Online-time you spend in the BBSmessage boards. This is done by downloading all new messages in a compressed file, reading and writing replies and new messages locally at your own computer and uploading the results next time in an other compressed file. OMEN is not machine or operating system dependent, it can be implemented virtually on any current system. The original idea for offline message system was introduced to me by Ari Laitinen of Arisoft and I have then been developing it into an open structure. The following structure is originally designed by Olli Majander of Omsoft and hereby declared Public Domain. ********************************************************************* OMEN in a BBS - Overview OMEN can be implemented into Bulletin Board Systems that comply with the following rules: 1. 2. 3. 4. 5. Messageboards are numbered from 0 up to Boardnames are up to max. 80 characters Messages are numbered from 1 up to max. Usernames are max. 35 characters long. Message subjects are max. 72 characters max. 255. long. 65535. long. Longer boardnames, usernames and subjects must be truncated to the mentioned lengths. Software compatible with earlier revisions of the OMEN-system may not be fully compatible with these rules. OMEN can be implemented into the code of the BBS-software or be run as a separate program. The BBS-OMEN should pack up to maximum of 1000 messages into a file in near-ASCII-format. The text and headerinformation of each message are pure ASCII, but some control bytes are used to make it easier to tell header and text as well as other messages apart. The messages should be stored into a file called NEWMSGxy.TXT. The x and y stand for ID-characters that are used to make sure that correct packages reach the correct BBS. They are suggested to be aphanumerical characters. It is up to each application to select the ID-characters. Another file that is needed with OMEN is SYSTEMxy.BBS. The x and y are the same as for the previous file. The systemfile should include the name of the BBS, as well as information about all of the messageboards on which the user has rights to read or write messages. Optional files that can be added to the package are: NFILExy.BBS BULLETxy.BBS BNAMESxy.BBS INFOxy.BBS Listing of new files System bulletin Names of the boards in system Additional information for the reader All the files should be compressed with some compressing utility, for instance PKZIP, which would result in OMENxy.ZIP. This will be the file that is sent to the user with whatever protocol the system allows. If the ID-characters for the system are for example R and 7, the corresponding filenames would then be: SYSTEMR7.BBS, NEWMSGR7.TXT, NFILER7.BBS, BULLETR7.BBS, BNAMESR7.BBS, INFOR7.BBS and for the complete package OMENR7.ZIP. BBS-OMEN must be able to receive a file called RETURNxy.ZIP (or other compressed file). Inside it will be files, that contain the messages the user has written offline and possibly other functions as well. The private-bit should only be used on boards that are allowed to contain both public and private messages. The files containing the messages will be described later in this document. A complete structure of the files included in OMENxy-package follows. ********************************************************************* NOTE: String[40] means an Pascal-style ASCII string with space for 41 bytes, where the first byte indicates the actual length of the string to follow. Byte is an 8-bit unsigned character and word is a 16-bit unsigned integer. --------------------------------------------------------------------SYSTEMxy.BBS : SystemName: BoardRights: BrdRecord: BrdNum: BrdStatus: Reserved: String[40]; Array[0..?] of BrdRecord; Byte; Byte; Byte; /* See below */ BrdName: (* String[16]; BrdStatus: Bit Bit Bit Bit Bit Bit 0: 1: 2: 3: 4: 5 - Write rigths SysOp rights Private board Public board NetMail board 7: Not yet implemented *) --------------------------------------------------------------------NEWMSGxy.TXT: MsgBase: EOF: Array[0..?] of MsgRecord; Byte = 26; MsgRecord: SOH: MessageHeader: STX: MessageText: ETX: Byte = 1; MsgHdrRecord; Byte = 2; MsgTxtRecord; Byte = 3; MsgHdrRecord: NumSign: MsgNum: TwoSpace: BoardNum: Colon: Brdname: TwoSpace: Date: TwoSpace: Time: TwoSpace: Chain: TwoSpace: Status: CrLf: WhoFrom: Separator: WhoTo: CrLf: Subject: Byte = '#'; Messagenumber in ASCII; " "; /* 2 consecutive ASCII 32's */ BoardNumber in ASCII; Byte = ':'; Name of the board in ASCII; " "; Creation date of the message; " "; Creation time of the message; " "; Previous and Next message in chain; " "; Private & Received -status; ASCII 13 + ASCII 10; Writer's name in ASCII; " => "; /* String to separate names */ Receiver's name in ASCII; ASCII 13 + ASCII 10;; Subject of message in ASCII; MsgTxtRecord: MessageText in ASCII; Messages must be placed in the file so that messages on each board are in sequence. The boards are recommended to follow ascending numerical order but this is not mandatory. The message header should not contain more than 3 lines. Recommended maximum lenght for the name of the board in the header is 30 characters. Longer names may result in the line exceeding 80 characters and this may cause problems with some of the readers. The Date-string should follow the format of dd-mmm-yy, where dd is the date, mmm is 3 character abbreviation of the month (e.g. Jan, Feb...) and yy is the 2 last digits of the year. The Time should have the format hh:mm where hh is the hour in 24-hour format and mm is the minutes. Chain consists of the number of the previous and the next message in reply chain in parenthesis separated by slash. If no previous or next message exist, the number must be replaced by dash. For exapmle a message with a previous message but a reply would have this kind of chain-indicator: (-/2653). Status consists of indicators for the private and received -status of the message. Private message is indicated by an uppercase P and received message by uppercase R in parenthesis. Possible combinations are: (PR), (P), (R) and (). An examplary header follows: <01>#12345 5:Communication Board John Doe => Archibald Leach Subj: What's cooking Cary? 12-Aug-92 21:15 (12340/12352) (PR) With NetMail messages the matrix address of the writer may be added after the name of the receiver as From: (xx:xxx/xxx) separated from the name by a single space. The end of the subject, the STX-byte, the actual text of the message and the ETX-byte should follow each other immediately. The text itself must not contain any other characters below ASCII 32 except TAB, LF and CR (09, 10, 13). --------------------------------------------------------------------NFILExy.BBS: This file should contain the names, sizes and descriptions of the new files in the system. The file must be pure ASCII. This file is optional. --------------------------------------------------------------------BULLETxy.BBS: This file contains any bulletins the operator of the system wants the users to read. The file must be pure ASCII. This file is optional. --------------------------------------------------------------------BNAMESxy.BBS: This file contains the names of each board reprisented in the SYSTEMxy-file. The names are presented with the number of each board followed by a colon followed by the name of the board in ASCII. The names must be presented in the same order as they appear in the SYSTEMxy-file. Example: 1:General 2:Private Mail 3:SysOp Only Each name can be up to 80 characters long. NOTE: Some of the reader-software may not support longer than 16-characters long boardnames. This file is optional and needed only in systems with longer boardnames than 16 characters. --------------------------------------------------------------------INFOxy.BBS: This file contains additional information for the reader software. The file must be pure ASCII. The overall format of the file is: <label>:<option> The following labels has been currently defined: Labels: Options: Description: ORIGIN - Name of the program that created the messagefile SYSOP - Name of the system operator C_SET {IBM|ISO|SF7} Preferred character set in the system MSGNUM {BOARD|BASE} Indicates whether the system numbers the messages board by board or the whole base in one sequence CHAINS {ON|OFF} Indicates whether the messages in the file are packed following the reply chain (ON) or in numerical order (OFF). This file is optional and all of the reader software do not use the information provided in this file. --------------------------------------------------------------------********************************************************************* OMEN at home - Overview The offline-OMEN can be implemented into the terminal software or be used as a separate program. The program should provide an interface for the user to read the new messages sent by BBS-OMEN. Replying to these messages, writing completely new messages and possibly performing some additional functions should be made available for the user. The functions and information of the message affected by each function are saved in a file called HEADERxy.BBS. The x and y characters should be taken from the OMENxy.ZIP-file (or other compressed file) that was sent by BBS-OMEN. The actual text of a reply or a new message should be pure ASCII, lines not longer than 70 characters and terminated with a CrLfsequence. The text is saved in a file called MSGxynn.TXT. The nn is the number of message relative to the headerblock position starting from zero. Single digit numbers will be padded with a leading zero. Up to 100 new messages can be transmitted to the BBS-OMEN at one connection, numbered as MSGxy00.TXT - MSGxy99.TXT. Any additional messages should be rejected. Only one function should be permitted to be operated on single message. Unused command-bits, other unused portions of headerblock and the ExtraSpace-bytes should be set to zero. Optional files that can be added to the package are: SKIPxy.PST TRASHxy.PST Unwanted subjects Names of unwanted writers The HEADERxy.BBS, optional SKIPxy.PST and TRASHxy.PST-files, and all of the MSGxynn.TXT-files must be compressed with PKZIP or alike to a file called RETURNxy.ZIP (extension varies), which will then be sent back to the BBS-OMEN. A structure of the files follows: --------------------------------------------------------------------HEADERxy.BBS: Array[1..?] of ActionRecord; ActionRecord: Command: CurBoard: MoveBoard: MsgNumber: WhoTo: Subject: DestZone: DestNet: DestNode: NetAttrib: ExtraSpace: (* Byte; /* See below! */ Byte; /* Original board of message */ Byte; /* Board to move message */ word; /* Message to operate on */ String[35]; String[72]; word; /* Destination NetMail Zone */ word; /* Destination NetMail Net */ word; /* Destination NetMail Node */ Byte; /* See below! */ Array[1..29] of Byte; Command: Bit 0: Bit 1: Bit 2: Save Message Delete Message Toggle Private/Public Bit 3: Move message Bit 4: Make message private Bit 5 - 7: Not yet implemented Only bits 0 & 4 and 3 & 4 can be combined allowing the message to be made private when written on a board which is both for public- and private messages as well as when a message is moved to another board. *) (* NetAttrib: Bit 0: Kill after sent Bit 1: CrashMail Bit 2 - 7: Not yet implemented *) Information placed in the headerblock in each operation: New messages: Bit 0 of the Command byte must be set. If the message is written on a board that contains both public and private messages, Bit 4 of the Command byte must be set according to the status of the message. WhoTo-field must contain the name of the receiver or "All" if message is not addressed to anyone perticular. Subject-field must contain the subject of the message. DestZone, DestNet and DestNode must contain the matrix address of the receiver if the message is written on a NetMail-board. Replies: as above, but MsgNumber must contain the number of the message to which this is a reply. Deleting: Bit 1 of the Command byte must be set. CurBoard must contain the number of the board the deleted message is on. MsgNumber must contain the number of the deleted message. WhoTo-field must contain the name of the writer of the deleted message. No corresponding MSG-file should be made for the headerblock. Pri/Pub Toggle: as above but Bit 2 of the Command byte must be set instead. Moving: as above, but Bit 3 of the Command byte must be set instead. MoveBoard must contain the number of the board on which the message is to be moved. Bit 4 of the Command byte must be set if the message is to be private after moving. Subject-field may contain a new subject for the message. --------------------------------------------------------------------MSGxynn.TXT Each file contains the ASCII-text of a message. The number nn is the number of the headerblock relative to the message, starting from zero and padded with a leading zero for the first 10 messages. --------------------------------------------------------------------- SKIPxy.PST Array[1..?] of Subject; This file contains the subjects that the user does not wish to be packed in the next messagefile. The subjects must be in the string[72] format without the "Subj: "-pretext. Recommended maximum amount of subjects is 100. Subject skipping can only be done if the RETURNxy-file is uploaded to the BBS-OMEN immediately before messagepacking. NOTE: All the BBS-OMENs may not support the message skipping by subjects. --------------------------------------------------------------------TRASHxy.PST This file contains the names of the users whose messages are not wanted to be packed in the messagefile. The names must be in pure ASCII followed by CrLf, one name on each line. Recommended maximum amount of names is 50. Subject skipping can only be done if the RETURNxy-file is uploaded to the BBS-OMEN immediately before messagepacking. NOTE: All the BBS-OMENs may not support the message skipping by writers. --------------------------------------------------------------------*********************************************************************