Yo, thanks for looking at this file.. To create any doors for HBBS you really should get hold of the full source code to it, when you have got that you'll be able to see loads of examples and figure out what does what better! But for now I'll give you a few instructions on how to create external programs (Doors) for HBBS. ============================================================================== To create a door all you have to do is this: 1) go to wb, find HBBS:Source/Doors_User/!NewDoor 2) select icon/copy from the menu to create a copy of the directory and all the files that are in it.. 3) rename it to the name of your door 3b) if your door is called NOT called by a user typing a command at the BBS command prompt then it should go in Doors_System instead (e.g. FrontEnd) 4) open your new directory, in it you will see several files, the important ones are: Main.C, Build, !NukeObjects!, and Update. Update and !NukeObjects! are just amigados scripts to move files to HBBS:Doors/[User|System]//.HBBS and to delete #?.o respectivly.. 5) load the file "Update" into a text editor and edit it so that it copies the file called "Main", that the compiler produces, to the right place. 6) now you need to set your door up so that hbbs can run it, to do this you need to edit a file in any Commands directory, there's one in each conference, one in each node directory and one in HBBS:commands. The file you need to edit depends on a) what type of door it is and b) what the minimum access level a user must have before thay can run it. If it is a system door then you'll need to edit the file called "System" in any commands dir. If it's a user door then you'll need to edit either "Level_Global" (all users can use it no matter what their access level is) or "Level_" where is the minimum access level a user must have to run your door. E.G. "Level_50" Once you've decided which file you need to edit just load it up into a text editor. 7) you now need to add a few lines to the file, these are as follows _Type_=NORMAL _Door_= the following parameters are optional. _Debug_=YES|NO _Params_= here's an example for a joinconf door: J_Type_1=NORMAL J_Door_1=HBBS:Doors/User/Download/Download.HBBS J_Debug_1=NO J_Type_2=NORMAL J_Door_2=HBBS:Doors/User/Stats/Stats.HBBS J_Params_2=JOINEDCONF (above) means the order in which the doors are run, you can run as many doors one after the other as you like, if your door fails and another following door relies on your door's output then just call DOOR_Continue(FALSE); and the following doors will not get run (see the download door's source for an example.. the are passed to your door as N_ND->CurrentDoor->SystemOptions, it's just a string so you can just parse it as you would a normal string. 8) thats it!.. it sounds complicated but it really is incredibly easy and simple.. Note: if you want to use a source code debugger on your door then you can set _Debug_ to YES or TRUE (or ON :-) and when the door is called, a window will open on the control screen's window telling you what parameters to run your program with.. so if you are using CPR (line debugger with SAS/C) then call your door as CPR and bob's your uncle.. a bit easier than /x :-) Here's couple more tips to get you going.. when you write strings to the bbs you can use either DOOR_SysopText(string) or DOOR_WriteText(string), you *MUST* use CR+LF ("\r\n") at the end of a line. not just "\n", (this is due to comms packages and the console.device... and it's not just HBBS that needs this.. Use DOOR_SysopText(string) to display stuff on the sysop's watch window ONLY, or use DOOR_WriteText(string) to write stuff to the serial port *AND* the sysop's watch window. check out DOOR_GetLine(), this is the main thing you use to get input from the user, at the moment the user cannot use thier cursor keys for anything other than line editing or scrolling through thier command history, so (for example) you can't use cursor up to scroll back when you are looking through the filelists. This will change soon, I'll just add another flag value that you'll be able to specify (something like GL_RAWKEY).. to read a line of text, with history, and timeout after 20 secs, max len 80 chars and a prompt string of "Banana" do this: DOOR_GetLine(GL_DISPLAY|GL_EDIT|GL_HISTORY,'\0',80,20,"Banana"); getline returns different numbers depending on what happened, check out HBBS:Source/Common/Defines.h and search for IN_#? e.g. a timeout returns IN_TIMEOUT, a normal line would be IN_GOTLINE, or IN_LOSSCARRIER. after EVERY call to DOOR_GetLine() you *MUST*, and I mean *MUST*, check the status of N_ND->OnlineStatus, if it is not equal to OS_ONLINE then your door must exit *without* sending *ANY* more data to the serial port.. then, if the user is still on-line, the string returned will be placed in N_ND->CurrentLine which is a pointer to a null terminated string. I cannot express just HOW important this is, if you don't do the online checking your door will cause the bbs to stop responding and may even cause crashes. When you have written your door you should login locally to a node and hangup at every point in your program that your door uses door_getline(). Also check out HBBS_LoadConfig(), HBBS_CreateConfig(), HBBS_GetSetting(), HBBS_AddCfgItem(), HBBS_RemoveCfgItem(), HBBS_SaveConfig(), and HBBS_FlushConfig() for some COOOOOL standard configuration file loading and saving routines, check out Node_Main.C for some examples....