Join GitHub today
GitHub is home to over 36 million developers working together to host and review code, manage projects, and build software together.Sign up
Fetching latest commit…
Cannot retrieve the latest commit at this time.
|Type||Name||Latest commit message||Commit time|
|Failed to load latest commit information.|
A man lived on his ship. He breathed her air, ate and drank from her stores. Her bulkheads solid around him kept the uncaring vacuum outside where it belonged and her driving engines bent the very curvature of space to take him wherever he wanted to go. But then he had to land ... Suddenly all that breathing and eating became a life support replenishment invoice. Those protecting bulkheads hid structural support members that had to be inspected and recertified by a licensed and commensurately expensive naval surveyor. Engines became fuel costs and a ten-thousand-hour service charge. Then there were berth fees, entry fees, value-added tax on cargo transactions, customs "courtesy" fees, outright bribes to the longshore- men's unions - and Moses Callahan wound up sitting in the deepest corner of the Hybreasil import bar complex, wondering whether to have another beer or have his good uniform cleaned and pressed before heading outport to try to unearth a cargo Celtic Crescent or Wstern Galactic might have overlooked. He ordered the beer, ignoring the cashplate's flickering scarlet reproach. The hovering waiter ejected his cashplate onto the table and floated off for his order, highlighted by the flickering glow of the alternate environment lounge -- "A touch of Elsewhere" the airlock announced -- where shadowed figures moved through a chemical fog Moses would never have called air. The Shattered Stars, Richard S. McEnroe This is the EW-too source code, finally released for you to download and promptly rm -r. So what should you expect from this release ? Not a lot is the answer. The code is provided simply because people asked for it. This code is here AS IS. I take no responsability for it and will not be applying any fixes for it, so don't come pestering me when it doesn't work. (There are many things wrong with the code, I know, but I aint gonna be doing anything about it, ok ?) If there is a bug, fix it yourself, and make the fixes public so that other people can benefit. Ok, so what is here ? LEGALISE - Read this to see how you can use this code. CREDITS - Who made this code possible. README - This file bin - Contains binaries and shell scripts doc - documenation and help files (what little there is) files - Database files needed at runtime. junk - A directory in which to stuff rubbish. (particularly .o files, if you are short of space, link this directory to somwhere in /tmp) logs - Files generated by the program src - The program source. Getting it to work ... Don't even think of trying to get something useable working unless you are a competant C programmer with plenty of time to spare, and the will to go hacking the code. This isn't some code that is going to work straight out the box, if you really want to use it, you are encouraged to modify and change it so that you end up with your own code, that is different, is better, and has its own unique style. The code was written using GCC on SunOS 4, and little has been done to aid portability. It should be relatively easy to get working on most UNIX boxes (though I wouldn't like to try on dynix/ptx or a DEC Alpha). I know for a fact the code will work on Ultrix, Prime/SGI mips machines, Solaris, and Linux given some minor modifications. However, if you want to get the code running on anything other than SunOS, then good luck, you will have some work to do ... Be aware that the code was intended for my use only, it has little (useful) commenting, and has been munged by more than one person. In other words its a mess, you will need to be very patient in order to use it. The code was designed to handle ~1000 residents with ~100 people connected simultaneously. With these numbers you can expect it to run in less than 1 meg of memory, take up 0% CPU on most machines and should stay up for weeks. As it happens, the code has run over 6000 residents, ~11000 rooms and with greater than 220 people on simultaneously. Its a big bloated beast with this sort of use (it runs with ~7meg of memory minimum and 20meg of disk including 3 days backups), but it works, and still takes up minimal CPU (< 3% on a SPARC 1 most of the time). Some documentation does exist in the 'doc' directory, but its probably out of date. Be prepared to trawl through all the documentation and change it to suit your own purposes. BEWARE of the stack. Unfortunatly, the stack is used to construct file saves before throwing out to disk. This means it must be configured larger than the largest saved file. This is typically the 's' player file. (to give you some numbers, you can expect ~400k for the s player files when running with 6000 residents, virtually all the other player files are half this size). If you suddenly find the program crashing for inexplicable reasons (on SunOS systems, it tends to crash in the localtime() system call in parse.c *boggle*) then the first thing to do is check that the stack is large enough. Places to look in order to get it to build. src/Makefile - The makefile that builds it all src/config.h - general configurables src/glue.c - There is lots of platform specific stuff here, particularly to do with resource limits. src/admin.c - You may have to comment out the malloc information code here. src/plists.c - Line 883 contains a name that will have hard coded administrator privs. The first ever time you boot, you will get a whole load of missing file errors. These files will be auto generated by the server. In case you are wondering, you should see something like this ... 22:06:20 - 05/09/94 - -=> EW-three <=- Boot Started 22:06:20 - 05/09/94 - Failed to load 'rooms' keys 22:06:20 - 05/09/94 - Failed to load player file 'a' 22:06:20 - 05/09/94 - Failed to load player file 'b' ... 22:06:20 - 05/09/94 - Failed to load player file 'y' 22:06:20 - 05/09/94 - Failed to load player file 'z' Character Saved ... Room deleted. Character Saved ... Room deleted. 22:06:20 - 05/09/94 - Failed to load track file 22:06:20 - 05/09/94 - Failed to load note hash0 22:06:20 - 05/09/94 - Failed to load note hash1 ... 22:06:20 - 05/09/94 - Failed to load note hash38 22:06:20 - 05/09/94 - Failed to load note hash39 22:06:20 - 05/09/94 - Can't find file:files/players/banished_players 22:06:20 - 05/09/94 - Main socket bound and listening on port 2010 22:06:20 - 05/09/94 - Failed to connect to alive socket - ignoring You will get the 'Failed to connect to alive socket - ignoring' message whenver you boot the server without the first booting the angel (this is an ok thing to do, it just means you don't get the crash protection offered by the angel) The first thing you will want to do is log in as the administrator character mentioned in plists.c (line 883). This will be the only char with any privs to start with, and should be used by the program maintainer. The login will look something like this ... $ telnet localhost 2010 Trying 127.0.0.1... Connected to your.local.host Escape character is '^]'. This is the logon header that is shown before the 'Please enter name' prompt. Please enter your name:admin This is a page shown during the login sequence for new users. Hit return to continue: This is another page shown during the login sequence, its a good idea to put your rules in here. Hit return to continue: You entered the name 'Admin' when you first logged in. Is this the name that you wish to be known as on the program ? Answer Y or N:y The program requires that you enter your gender. This is used solely for the purposes of correct english and grammar. If you object to this, then simply type 'n' for not applicable. Enter (M)ale, (F)emale or (N)ot applicable:m Gender set to Male. This is a disclaimer message. Its a good idea to have a disclaimer to prevent yourself getting into any legal difficulties. Enter 'continue' or 'end':continue This is the motd, shown whenever someone connects. Eeeeeeek ! No saved bits ! -- A simple entrance room. There is nobody here but you. ->privs You have a list. You can echo. You can use room commands. You can send mail. You can set sessions. You are an advanced superuser You are a lowly little admin thingie. You are an administrator. ->shutdown Shutting down server. -> ---====>>>> Program shutting down NOW <<<<====--- Tried to save character but failed ... Your character will not save until you set a password. Simply type 'password' whilst in command mode to set one. Tried to save character but failed ... Your character will not save until you set an email address. To set this just type 'email <whatever>', where <whatever> is your email address. If you do not have an email, please speak to one of the superusers. Character Saved ... Connection closed by foreign host. Note that users will connect to rooms owned by the 'ENTRANCE_NAME' user, and will actually be thrown into any such rooms at random, upto the maximum specified in config.h. Should all these rooms become full, further users will go into the void. Short description of source files, this isn't exhaustive, nor necessarily true anymore. Makefile - GNU makefile, type 'make' to build admin.c - Superuser functions angel.c - The guardian angel, a seperate binary to the server that tries to keep the server alive. clist.h - command list commands.c - functions for miscellaneous commands compaction.c - Simple (but quick!) text compression. config.h - configurables dynamic.c - blocked file support dynamic.h - defs for above editor.c - The editor used for rooms, mail etc fix.h - unused globals.c - global vars glue.c - holds everything together, this is where main() is. lists.c - stuff to do with lists. mail.c - internal mail and enws malloc.c - An alternative to the system malloc mms.c - The moved message server, useful for if the server isnt around for a while parse.c - command parsing, timer functions and help pc.c - unused player.h - lots and lots of defs plists.c - player database manipulation room.c - room stuff session.c - misc bits added by Chris Hughes socket.c - telnet handling tag.c - who commands, and handling of lists of players for various commands. Have fun with the code, but don't expect it to work miracles. The essence of a good talker is its atmosphere, and you wont get that just by copying this code. You have to code hard, make it unique and be prepared to put in major amounts of time and effort. Simon Marsh, September 1994