========== BACKGROUND ========== FlipTerm/FlipSide was originally coded in 1991 in Ottawa, where it ran until late 1994. It's a custom BBS package written largely in c99. It was called FlipTerm because originally it was meant to be a terminal package. FlipTerm BBS is pretty strongly hard-coded - making changes will generally require either recompiling the program, or hex-editting the files (in which case strings need to be kept shorter or the same length as the original). Sorry. It was never intended as a general purpose BBS. In addition, some of the executables are lost (although we have source), and setting it up is a mess. On the other hand, for the sake of history and perhaps someone learning a neat trick from the code, I've created this package. These docs are to be the best that I can recollect! FlipTerm BBS software may be freely distributed, modified, and redistributed. All I ask is that all distributions include credit to the original in the program or included documentation as follows: Original program by Mike Brent aka Tursi - http://harmlesslion.com ===== FILES ===== Here is what we have. The program is written in c99 with some embedded assembly support code. it includes main menu, questionaires, sysop menu, message bases, and some online games. FlipTerm is meant to be run from a Horizon RAMdisk. It resets the system after each user, so if you don't use a RAMdisk, you need a way to automatically launch the loader! Except for those few things you can explicitly configure (message bases and door games), everything is expected to be stored on DSK5 when running. --------- Programs: --------- COT/COU/COV - Creature of the Maze 2 - Dungeon crawl roleplaying game FSL - FlipSide Loader - this program should be loaded on the RAMdisk as 'MENU' to autoboot SYS/SYT - Sysop menu FLP/FLQ/FLR - Main menu program TAR/TAS/TAT - Tarot reader door program SYSFIND - scans users for Sysop access OCEANARC - program that archived one of the message bases Unfortuantly, the executables for the Online Doors (DOR), Russian Roulette (RUS) and the Message Bases (MSG) are missing and would need to be built from source. ------------------------------------------- Source (it looks like everything is here!): ------------------------------------------- CFIO - c99 object code for formatted IO functions COTM;c/COTM;C2 - c99 source code for Creature of the Maze 2 DOOR;C - c99 source code for door game menu FILES;C - c99 Xmodem based file transfor code FLIP;C/FLIP;C2 - c99 Source code for main menu FLIPUTILS - Shared c99 file containing functions used by all modules FSL;C - c99 FlipSide loader v2.0 with Fidonet (but never proven to work!) FSL;OLD - c99 code for FlipSide Loader v1.0 MESSAGE/MESSAGE2 - Message base processor c99 code RANDOM;C - Clint Pulley's c99 Random number code RUS;C - c99 Source code for Russian Roulette game STDIO - c99 STDIO include file STRINGFNS - c99 string functions by Tom Wible SYSOP - c99 Source code for the Sysop Menu TAROT;C - c99 Source code for Tarot reader game XMODEM1/XMODEM2 - XModem Assembly code based on code by Paul Charleston ------------ Config files ------------ Unfortuantely I only have these as examples in PC format. Most of them you will need to construct for your particular setup anyway. Open them in Notepad or any other text editor, but you need to create the real ones on your TI. TITLE - original title ASCII art CONFIG - main BBS configuration (you must create this file!) Line 1: Unused, can leave blank Line 2: First digit is the number of online game credits each login gets. The rest of the line is the new user message base mask. Three digits that set the initial value for each message base (normally 000). You can restrict new users from a message base by using '***' instead. These three digits repeat till the end of the line. Line 3: name of the first message base. The first characters are significant and must be: "A - (010) Title goes here". The 'A' indicates the letter to be pressed and must be first, followed by a space, followed by a dash, then another space, a parenthesis, and three digits indicating the maximum number of messages in this message base. (In this case, that value is 10). After that the rest of the line may be any text to display a name. When the maximum count is reached, older messages are deleted. Line 4: Prefix path for the message base. Three digits are appended to this path to get the file name for each message. For instance, DSK5.NEW would indicate that the message filenames will look like: DSK5.NEW001, etc. Filenames wrap at 999 back to 000, but since a TI disk only supports 127 files (and the BBS only support 999 messages in a base anyway), that shouldn't be a problem. For more message bases, you may repeat lines 3 and 4 for letters B-Z. The first message base is special as it is where new user questionaires are placed! CREDS - auto generated - contains the number of door credits a user has left. COTM2DATA - Player data for Creature of the Maze 2 Line 1: Player BBS name Line 2: Player game Alias Line 3: Stats: abc123....eeefff...ggg a - level b - x position c - y position 1 - number of 'hurt' spells 2 - number of 'shield' spells 3 - number of 'heal' spells eee - skill fff - stamina ggg - hitpoints (life) ... - unused? Set to 0. Line 4: Gold (must be 4 digits): ie: 0100 (repeat for each player) BOSS - Creature of the Maze boss data file: Line 1: Boss name (usually a previous player) Line 2: Boss description (entered by that previous player) Line 3: Stats - 3 three digit numbers: aaabbbccc aaa - stamina bbb - skill ccc - hit points (life) LEVEL0/LEVEL9 - Mazes for each level. Consist of 10 rows of 10 characters representing the maze. The maze generator is lost but you could make your own - ensure the entire border is set as walls to prevent players from walking out of the maze. The valid characters are as follows: # - Wall $ - Empty passage % - Store & - Stairs up a level ' - Stairs down a level + - trapdoor (drops you a level, don't place on level 9) . - Final boss (usually the center of level 9) I didn't prepare examples for this one - have fun. ;) DATE - Created in the SYSOP menu, contains an arbitrary string containing the current date. Since there is no clock support, someone with access to the sysop menu usually changes this. It's placed into each message. FEEDBACK - autogenerated file that logs activity and feedback from users FIRSTMES - A list of digits containing current first message of each message base, each three digits. You should initialize this to a line of 000's, enough for all bases LASTMES - same as FIRSTMES, but the last message number in each message base. Initialize it the same way. LOGIN - A login message you can display to users after they login. NQUEST - A new user questionaire - this is a list of questions presented to new users when they login. The results are posted in the first message base. If a new user fails to complete the questionaire, their account is not saved. ONLINE - auto-generated file containing the name of the currently online user ONLINLIST - list of online games which the door program can load: Line 1 - Name of the game - displayed to the user (no need for selection key) Line 2 - Path to the EA5 loadable game, filename must be exactly 3 characters (for example: DSK3.RUS). Multiple EA5 files in the standard manner are fine (ie: RUS/RUT, etc. QUESTLIS - list of users who have performed the standard login questionaire already. When you post a new questionaire you may want to manually clear this list. QUESTS - Same idea as NQUEST, but this login questionaire is presented to all users when they log in. USERS - A simple list of names for users. The first row corresponds to USER00 and should probably not be used. The rest are used to match a name to a number by row. You will probably need to manually add yourself as a sysop in the next line, and fill in USER01 manually. Names in this file MUST be uppercase - you can block the first row trivially by using a lowercase string. USER00 - Sample template for a user. You probably want to create USER01 for yourself: Line 1: Password. This is unencrypted, so treat accordingly. Line 2: Access level. May be: "NORMAL" (normal access), "RESTRICTED" (no games or message bases), or "SYSOP" (actually anything with SYS in it - Sysop menu) Line 3: Help level and paging - used to manage menus. First 5 characters must be either "FULL " (note space) or "BRIEF" - only the first character is checked but five characters are needed. Full displays the menu, Brief shows only the summary. After that is the optional 'More' paging prompt - two digits representing the number of lines to count (usually 24), and then a 'Y' (paging enabled) or 'N' (paging disabled). The user can change these values inside the program so it is easiest if manually creating the file to just set 'Full' and leave the rest. Line 4: List of digits similar to the message base mask in CONFIG - here the numbers are updated by the program to represent the last message read in each message base. Any base tagged with *** represents a base the user has no access to. FILES - this is a simple list of available files dumped to the user. Since it's read as a simple text file, you can include descriptions if you like. It is not automatically updated. FILEINFO - This text file is where you put policies to display in the file menu. ===== Usage ===== If you get it all set up, I would heartily congratulate you! The one external hack required is that it expects DTR on the modem line to run through the cassette control 2 line - this connection is broken on reset to hang up the modem. The BBS watches the modem for 'RING' and will send 'ATA' (auto answer should not be set on the modem). There are a lot of references to 'Flipper' - this was me as the sysop back then. Also, note that the 'captures' below are simulated! First program to run is FSL, which is meant to be renamed to 'MENU' and run as the boot program on a Horizon RAMdisk. Anyway, it runs both over RS232 and local keyboard. When someone connects, it will cycle through 1200 and 2400 baud, waiting to receive a recognizable 'enter' key. After it does, it will launch FLP, the main program. The sysop may interrupt at any time to get a mini sysop menu by pressing a control key, I *think* it's control-period. This mini menu lets you enter a chat mode with the user, hang up on the user, jump to the main sysop menu, change the baud rate (the 'infinite' option is useful for local use as it speeds up the output), or return control to the user. ---------------------------------------- Flipper's here...just a second... What now, Flip? ------------- 1) enter chat mode 2) boot user off 3) enter sysop menu 4) set RS to 1200 baud 5) set RS to 2400 baud 6) set RS to 'infinite' 0) return control to user Current user is: Username ---------------------------------------- The BBS also supports Control-S and Control-Q to suspend and resume text, and most file displays can be aborted by pressing enter/return. Most input is single key based (ie: you just press the menu option, you don't have to press enter except when entering strings). ============ MAIN PROGRAM ============ Login looks something like this: ---------------------------------------- Flip Side Loader - Horizon boot routine v1.1 by Mike Ward REALITY.SYS corrupted. Press to reboot universe. Loading system... The FLIP Side! BBS By Mike Ward Written in c99. version 1.3 = abort -S = pause -Q = Continue >>>>>>>>>IBM/ATARI USERS: use , not the cursor arrow keys!!<<<<<<<<< +-------W-e-l-c-o-m-e---t-o---T-h-e---F-L-I-P---S-I-D-E---B-B-S-!-!-!---------+ :/ /-\ | . | . | \: : /-\ | . ..: : ### | . . . . .. ..... : : + ##### | **** ' . .......... .....: :+-+ ##### |******o* .... ...... .... .... : ::#: \-/ ### \-/ *****************..... ... ...... ##: :+-+ . *************...'. ..... . ###: :! ] ********. ... .. . ###:: :! ] . ****** *. .. ###::: :! ]-----------------------------*****-|..* | ' . ##:::: :! ]] ++ . **** | -*- . ##:::: :! ]]^^^^^^^^^^^^^^^^++^^^^^^^^***^^^^^| | '. #::::: :__. ] ++++ .***** . .| ::::: : \_].\/\/\/\/\/\/\+/++/\.\.\***\/\/\/| . ' :::: :. \ \]. ++ + . . * . | : | ::: : ]./\ /\ /\ /\++++++ /. /\./\ /\ /|. '. -*- . : :\ . \ ].. ++ ++. . .. . | .'. | /: +-------------------------------------------------------------------------(MW)+ Version 1.2 Written in c99 by Mike Ward Sysop: Flipper Co-Sysops: TIger, Feral Ferret (not by choice), Phantom Running on a TURBO Texas Instruments 99/4A Home Computer Please enter your handle: Tursi Scanning... Oh yeah? What's your password? ********* Hi there, TURSI We'rrrrrrrrrrrrrrre baaaaaaaaaaaaaaa-ack! The Flip Side, main menu ------------------------ 1) Message chatter 2) Online diversions 3) Utility 4) Call for Flipper 5) Feed Flipper 6) Sysop menu (for sysops) 7) Get out of here! Press the # of your choice ---------------------------------------- The questionaires, not shown here, are pretty strict and force the user to enter more than two characters (meant to block "y" or "n" answers). Message chatter would load MSG, the message forums. Online diversions loads DOR, the online door/game menu. Utility brings up a small utility/options menu. Call for Flipper plays an audible chime to summon the sysop. Sysop menu, if the user has SYSOP access, loads SYS, the sysop menu. Get out of here! logs the user out after confirmation. These are detailed below. ================= Message Processor ================= For a system without ANSI support or a full screen editor, the message system was pretty well received by people and logged literally thousands of messages. It was the main purpose of the board and saw a lot of use. Message bases are configured in the main CONFIG file, as well as FIRSTMES and LASTMES. Each user file has a line dedicated to the message bases too. Entering the message processor looks like this. ---------------------------------------- Mini Message Processor v2.0 ---------------------- [C]hange message base [R]ead single [F]orward read [B]ackward read [N]ew read [!]Quickscan New [E]nter message [Q]uit to main A - (100) General Message Discussion Last message you read: 010 First message #005 Last message #022 ---------------------------------------- Change message base brings up a list of configured message bases. The user may then select a new one to browse. Read Single lets the user enter a message number to read just that message. Reading just the last message, for instance, is a quick way to catch up on a base. Forward read will ask the user for the first message number, and one at a time display each message to the user, incrementing inbetween. Backward read will do the same as forward read, but decrements the message number. New read will perform a forward read that automatically starts with the first new message in that base. Quickscan New will automatically perform a 'new read' operation in every message base the user has access to. Enter message allows the user to enter a new message in the current message base. Quit to main reloads FLP, the main BBS menu. When reading a message, the message is displayed like so: ---------------------------------------- TO:OPUS From:FLIPPER Date:21st of June. Like, grr. Reply to 949 I'm not a big fan of Akira. I saw Akira, it was interesting. Not really my type of movie, though. I believe Rogue is a big Akira fan. [a]gain, [N]ext, [t]hread, [r]eply, [q]uit ---------------------------------------- Again will display the same message again - useful for messages that scrolled off the screen. Next will display the next message using the current message counting order. If there is no next message then it will return to the main menu. This option is the default if enter alone is pressed (indicated by uppercase letter). Thread, if the message is a reply, will display the original message. On that message, the options "[t]hread, [Q]uit" are available - thread here allows you to thread back again if the message is a reply. Quit will return back to the first message that was threaded from (default action). Reply will set up a reply action to this message, and enter the editor. Quit will return to the message board menu. Entering a message looks something like this: ---------------------------------------- sec... To:Flipper Private? (y/N) Nah. Enter your message now. Enter a blank line to end. >I think Akira was a great movie. So there. [C]ontinue, [A]bort, [S]ave, [L]ist, [E]dit? ---------------------------------------- The 'to' option is freeform. It may be entered as 'All' (or really anything else). 'All' will inhibit the 'Private?' question, however. If private, the userlist is scanned to make sure the entered name is valid. Note that Sysops can see all private messages. The message processor supports up to 50 lines in a message, and has a line-based editor to make minor edits possible. Continue will return to the editor in case the user hit a blank line by accident. Note that paragraphs can be done by typing a space before hitting enter. Abort will ask the user to clarify, then cancel the entry of the message. Save will save the message to disk then return to the menu. List will show the message in progress to the user. Edit brings up a small editor: ---------------------------------------- 1:I think Akira was a great movie. So there. [A,B,C,I,D,Q,0-9,?] ? Editor:[A]head, [B]ack, [C]hange line [I]nsert line, [D]elete line, [Q]uit [0-9] change step (0=10) ---------------------------------------- Ahead goes to the next line (or skips ahead if the step is set higher than 1) Back goes to the previous line (or skips back depending on step) Change Line brings up the input prompt to allow the user to retype this line. Insert Line inserts a blank line before this one and lets the user type it. Delete Line deletes the currently displayed line. 0-9 changes the step value to get to a particular line quicker Quit returns to the main message entry prompt. ============ Online Games ============ The online doors program could launch EA5 programs, but generally you would want programs written for FLIPUTILS in order to have the sysop key support, the RS232 interface, and the (manual) return to the main program on exit. As with all parts of FlipTerm, filenames were limited to 3 characters. Entering it looks something like this: ---------------------------------------- Flip Side Online Menu --------------------- A=Russian Roulette B=Creature of the Maze 2 C=Tarot Reader 0 - return to main menu You have 5 online credits. ---------------------------------------- The menu is configured in the ONLINLIST file. It's pretty straight forward, the user makes a selection, their credits are decremented by one, and the program is loaded. If the user runs out of credits, they are returned automatically to the main menu. ========= Utilities ========= Entering the utilities menu gives the following list: ---------------------------------------- Your current stats ------------------ Name:TURSI Password: [not shown] Main menu help level:FULL Security level:NORMAL 1 - change password 2 - change help level 3 - see user list 4 - see last callers 5 - change 'more' prompt 0 - exit to main ---------------------------------------- Change password prompts the user to enter a new password for themselves. Change help level toggles between 'FULL' and 'BRIEF'. In brief mode the main menu is just a single summary line ('?' will always bring up the full text in that case). See user list dumps a list of all registered usernames. See last callers opens the feedback file, and dumps a list of logins. Change 'more' prompt lets the user set how many lines to page at, or turn the prompting off altogether. ================= Sysop Harrassment ================= Call for Flipper plays chimes to get the Sysop's attention. If the sysop wants to chat, he can use the key sequence described above to break in. ---------------------------------------- Hey Flipper! Opus wants to talk to you!! Paging.... Well...he can't stand those chimes, so if he's around he'll break in. If he doesn't, well.....I tried! Leave feedback if no answer. ---------------------------------------- Feed Flipper lets the user add a note to the feedback file (note this is not meant to be displayed in the 'last callers' utility option). Entering a blank line saves the feedback. ========== Sysop Menu ========== Selecting the Sysop menu, if you have access, gives you this menu: ---------------------------------------- Yeah, yeah. Just a minute... Flip Side: Sysop ---------------- 1 - view/modify user stats 2 - view user list 3 - read feedback 4 - add login bulletin 5 - set message date 6 - add user 0 - exit to main (1-5,0): ---------------------------------------- View/Modify user stats gives a simple user editor: ---------------------------------------- Enter user name to modify >Opus User name:OPUS User #002 Password:Salmon123 Security level:NORMAL Message base access (*=banned): A - (010) General Conversation *B - (100) Secret Anti-Penguin Base C - (050) Friends of the Penguin Press P to change password Press S to change security level Press R to restrict a msg base Press C to clear a msg base Anything else to continue ---------------------------------------- Pressing P will let you enter a new password for this user. Pressing S will let you change the user's access level to "CO-SYSOP", "NORMAL", or "RESTRICTED". These are documented up in the user file section. Pressing R will ask you to select a message base, then ban that user's access to it by flagging it with asterisks. Note that restricted is not hidden - the user can still see the base, they just can't post. Pressing C will do the same, but will clear the ban and reset that user's last read count to 000. Viewing the user list will provide a list of all registered users. It differs from the public user list by including each user number. ---------------------------------------- 00 dummyuser 01 TURSI 02 OPUS ---------------------------------------- Read feedback will simply dump the feedback file. Add login bulletin will append a new bulletin to LOGIN, separated by a dashed line. Set message date will update DATE with a new string. (I used my co-sysops to set this. They had great fun placing taunts and teases in with the date.) Add user allowed the creation of a new user without requiring that user to log in: ---------------------------------------- Add new user? (y/N) >Y User #03 Enter new user's name. >Jackie Enter password. >ilikeicecream Saving new user... ---------------------------------------- The user is created with the FULL menu setting and NORMAL access. They get to bypass the new user questionaire this way. =========== Logging off =========== Get Out of Here lets the user leave the BBS. ---------------------------------------- WHAT?! Leave the Flip Side? Are you sure?? ([Y]/n) n Temporary insanity... WHAT?! Leave the Flip Side? Are you sure?? ([Y]/n) y OK...bye OPUS. Call again Goodbye, OPUS Returning you to reality... ---------------------------------------- There is also an idle timeout of about 5 minutes, if no entry is made at any prompt: ---------------------------------------- Press the # of your choice Universe becoming unstable... Universe collapses. ---------------------------------------- ================ Russian Roulette ================ This is a simple little game - you decide whether to press enter or chicken out. Each time you press enter, there is a chance of the 'gun' firing and your connection is hung up. If you fire a certain number of times and win, you get extra game credits. Currently there is a 1 in 4 chance of losing, and you need 10 pulls to win. It used to be simpler but the users complained they were winning when they wanted to disconnect. ;) ---------------------------------------- Welcome to Russian Roulette, comrade. (version 1.2) Instructions? (y/n) >y Here you will gamble with your connection with a loaded pistol. The pistol has four chambers and 1 bullet. You will pull the trigger by pressing enter. If the trigger goes off...you will be disconnected. If you pull the trigger 10 times (without being killed) you will win the game! (and get some extra credits!) NOTE: the chamber is spun between each pull if you don't want to pull the trigger (i.e. chicken out) type 'a' for abort and press enter. Pull #1 Press enter :>!CLICK!< Pull #2 Press enter :>!CLICK!< Pull #3 Press enter :!!!!! >>> --- BANG --- <<< !!! LOSER!! LOSER!! LOSER!! LOSER!! LOSER!! LOSER!! (you are dead! Call again! ---------------------------------------- ====================== Creature of the Maze 2 ====================== This is a simple dungeon crawl. I have a Creature of the Maze 3 on my website, but this was the last version running on the TI itself. I'm not going to go into detail on all the menus - if you get it going, it's pretty self explanatory. But since I don't have any maze files it may be a pain to get it going. :) See the files section for a description of its data files if you want to try. ============ Tarot Reader ============ This is a really simple Tarot reading program. ---------------------------------------- Greetings, OPUS I am Tee-Eye, the mystical sayer of sooth. Would you like me to tell you what the cards have in store for you? (press Y or N) Y Would you like a brief explanation? (Y/N) Y Tarot reading is an ancient art that goes back hundreds, if not thousands, of years. Tarot cards are brightly coloured cards, with divinitory meanings hidden in the pictures. The deck is similar to a regular playing deck, but larger. There are two parts, called 'Arcanas'. The 'Major Arcana' contains the 'picture' cards. These cards are all independant of the others, and tend to have a more definite meaning attached. Examples are 'The Star', or the well-known 'Death'. The 'Minor Arcana' has four suits (Swords, Wands, Cups and Pentacles), each with 14 cards (Ace-10, Page, Knight, Queen and King). The cards are layed out an interpreted by where and how they lay. This program will take care of interpretation for you. A computer can only give general meanings. Not all the meanings given necessarily apply. You must decide for yourself what the cards are trying to tell you. ---Press a key--- First we must choose a significator, a card to represent you. Please answer these questions as honestly as possible. How old are you? 1: 16 or under 2: 17-25 3: over 25 3 Are you: 1: male 2: female 1 Are you: 1: neutral 2: easy-going 3: easily angered 4: a deep thinker 4 Your significator is King of Pentacles Please enter your question, to better influence the cards. >Why are we here? Shuffling... This card crosses you.. it is your current main obstacle. Three of Swords This card is reversed... Error, loss, distraction, confusion. ---Press a key--- ---------------------------------------- ============= File Transfer ============= File transfer was designed to be built and loaded as a door game from the FILES;C module. It's *very* simple and offers XMODEM upload and download only. There is very little here because FlipSide was a floppy based system and had very little space for file transfers. The drive is hard coded to drive '4' in XMODEM2 (look for "*DRIVE 4 (TEMP)"). ---------------------------------------- Flip Side file transfers ------------------------ 1 - View file listing 2 - Upload a file 3 - Download a file 4 - see info about this area 0 - return to online menu ---------------------------------------- View file listing dumps the file 'FILES' to the user. It's intended that the sysop would have this contain a list of files and descriptions. Upload a file allows a user to upload. Filenames must meet TI specifications, which are only slightly checked before being tried. ---------------------------------------- Enter name of file being uploaded. Must be 10 characters or less, no punctuation, including period. (ex: PIC/GIF instead of PIC.GIF) >GAME@ Use CRC error checking? [Y]/n Yup! Ready to receive file. Control-x aborts. ---------------------------------------- Download is similar, even the text is the same. The user must enter a valid filename (which need not be listed in FILES). Thus they can get any file on DSK4. During transfer, the screen is used as a sector buffer, so you can see the transfer take place. One sector at a time is processed. See Info about this area dumps the file FILEINFO. Return to Online menu reloads DOR for the online menu.