
NanoMUD - The small, but yet fast and powerful, opensource MUD-client for Windows.
NanoMUD was written for a replacement for those who do not like to have to pay for zMUD from Zugg software, as well as a personal project for myself and
any who wished to enter it. As it is, NanoMUD is written in raw C and remains open source (did I mention free?) for as long as it can be maintained. Sofar,
NanoMUD is in it's beta stages and is currently migrating towards a finished product - which should be available within a few months time. Any interested in
beta testing it may send me an email.
* Written in C for speed and size
* OpenSource - How can you go wrong?
* Supports zMUD style scripting with plans for Tintin style as well.
* Import function to convert zMUD as well as tintin to it's own scripting style.
* Unlimited (as much as your ram and operating system will allow) scroll back allowed.
* Free - As with opensource; how can you go wrong?
* Advanced logging with the ability to export to HTML.
* And many more unique features.
Current Change Log:
(May 18th, 2003)
* Started project.
* Wrote main GUi controls.
* Wrote prototype of ansi parsing engine. (Failure)
* Re-wrote ansi parsing engine. (Failure)
* Finnaly got some sleep. Re-re-wrote ansi parsing engine. (Psuedo-success)
* Found ansi parsing bug, unable to resolve.
* Started to re-re-re-write ansi parsing engine, using vt100 manual. (duh!)
(Failure)
(Nov 3rd, 2003)
* Fixed a thought-to-be-memory-leak-that-turned-out-not-to-be-one. Was calling
GetDC(MudMain) everytime I called my FlushBuffer function. Big nono as it
caused windows to lag horridly and eat alot of memory.
Started on painting routines and scrolling routines. NOTE: Not as easy
as I thought. Fiddled around with WM_PAINT and things just went screwy,
will try again tomorrow. Now its time to goto bed. Yes, I sleep sometimes.
* Created ATOMBOMB, the mud-client's memory/buffer handling stuff. Began work
on putting ATOMBOMB into the ansi parsing engine so it may set the correct
buffers. The buffer will allow up to sizeof(unsigned long int) (4 billion
lines) of backbuffer. Scrolling stuff is done, just needs to be re-worked
into the code so that it may repaint what is actually needed. Macros for
converting rows and colums tonight as well as conversion macros.
* Start working on the project again. -Finally- got that fucking redraw crap
figured out, and it is now working -beautifully-. Also, fixed that stupid
problem in my parsing engine that was allowing junk characters (note to
self: check for memory leak) fixed.
* Adapted code for PuTTY's tree234 code. A big thanks to them for allowing
me to use this code under their license agreement (which happens to be the
same as mine.) tree234 is a very-nicely-but-yet-simple impliment of a binary
tree system. This could help quite a bit. With that, I have begun to re-code
my current ansi-parsing engine, and flush_buffer code for this adaption. With
this, I can get rid of my earlier change for the screen redraw. No more
bitblting different screens. This way, if we need to redraw, we can do it
quickly, and acuratly. Implimented the client-side ping as well. Now, you can
see what you ping is to the MUD server as you play. (Bow down, PK'rs);
* Worked on new buffer code (may NOT use tree234), and implimented my very own
word-wrap code. First time actually making word wrap code. I must admit, it was
a toughy :)
* Been a while since I updated the changelog file, so here is a quick recap of what
all has been done in the past months or two. Took a little while off from coding
and it was very well needed. But now, i'm back and a slue of things that are done.
1) Parsing engine stablized. 2) wrote my OWN buffer code from scratch. Stripped out
the tree code from the putty project. 3) Started script code. Sofar, only a skeleton
of it is done, but it's a start. 4) Tidyed up some code and fixed a few bugs. Been
trying to track down some memory leaks, but they aren't that easy to find. Stay tuned!
(April 21st, 2004)
* Added memory handler, or perhaps even should be called a re-write of it.
* Fixed bug in memory handler which caused allocated chunks to be too small.
* Fixed bug inwhich the mud would send fragmented data. It now checks for this and fixes it's self.
* Tweaked ansi parsing engine; still not where we'd like it, but good enough for beta.
* Began scripting code (alex)
* Fixed some of Alex's code messups. Did I mention C++ differs from C?
* Fixed an annoying bug in the colour controls that would leave a command sent to the mud with a straggling colour.
* Fixed colour bug which wasn't resetting like it should, as well as the green and lt_green colours.
* Fixed my parselines() code. It wasn't grabbing chunks correctly, which would leave you with somewhat messy 'line' structs.
This would, in turn, cause parsing through parse_ansi to gimp up a bit. No worries now.
* Fixed new bug brought up by the fixing of parselines(). Gotta love how fixing a bug makes another bug. This one had to do with
the scrollbar code. All fixed now. *wiggle*
* Fixed that annoying "rising screen" bug which would make the text look like it was 'rising' from the input bar after a while. That
was actually caused by the gimpedness of parselines() code.
* Fixed HTML log code. Now should load fine in browsers.
* Lowered chunk receive size in winsock code. Was trying to receive 5,000 bytes - which isn't probable since most [stock] muds send only around 2,096. Dsl sends around 1,496ish. So we'll read 1,000.
* Improved overall speed of the main parsing engine. I swear to you guys; it's fast!
* Tweaked the parsing engine a bit more.
* Added a command list of all script functions. First stage.
* Fixed scroll bug that wouldn't let you drag the scrollbar.
* Fixed memory leak in updateterminal() function. It also caused an overpaint onto the input bar. This was also a result of scrollbar problems.
* Uncommented out the ping code. LET ME KNOW if there are any problems with it. This is top priority right now.
(April 26th)
* Mouse-wheel support added. Was in before, but apparently wasn't realized that the input bar was taking it's focus. Fixed.
* Terminal's painting (When receiving a WM_PAINT message) isn't erratic anymore when dragging something over the terminal area. This was due to the fact I was calling an update_term() every time, which would repaint it all at once instead of the clipped area. Fixed.
* Select/copy/paste code started. Kinda buggy, but started.
* Thanks to Frank, HTML code is a little better.
* URL handling code is started and functioning within internal builds. Expect full support for it in beta soon. This will allow you to click links pasted to MUDs.
* Improved over all memory usage; at 65,000 lines of scrollback, NanoMUD is using ~40MB of ram. Compared to zMUD's 60-90mB usage, this is quite an accomplishment.
* Code added (which came in with select/copy/paste code) to allow for reverse video. Which reminded me, sadly, that I need to make the ansi parsing engine 100% ansi-sequence compatible.
* Quite a bit of code added into scripts. It's one step closer to a reality, truly. It's still got quite a ways to go, but it's closer. Right now it's in a 'theory' stage of how to write the script parsing engine. Anyone ever read up on compiler design? Huge headache.
(May 15th)
* Parsing engine for Ansi sequences has been completely redone, this time using table lookups. It should have been done this way before, but I never felt like writing out the table. The table was made by code i've been working on that basically writes code for me. More on that later.
* Scripts are about 40% done. Code has been written that wrote out the tables as well as the functions. yes, I am lazy. Only thing left now is the script engine it's self.
* Memory has been reduced yet AGAIN. And speed is phenominal thanks to the way the ansi engine is done now! I'm very impressed with it's speed and memory usage.
* The ansi engine is NOW ansi-compliant! It can even interpret the \e[0;3;31m strings correctly. Enjoy.
(November 20th)
* Bug in credit window where clicking OK would crash on some OS's, fixed.
* Bug in about window where clicking OK would crash on some OS's, Fixed.
* Hash base finished. New hashing code will help with low memory footprint.
* New 'terminal reporting' code done. This will allow for debug/error/regular stuff to be sent directly to the terminal window witout having to log.
* Moved to newer version of GCC. Code output should be much better now.
* About 4,000 more lines added to the script engine. Although still not done, doing better.
* Improved 'interp_function'. New function does lookups on first character only, then does another lookup. This will keep recursion down.
* 'is_function_internal' done. This will provide a very fast lookup of internal functions for the script engine.
* Various tweaks done to the parsing engine of the main terminal screen.
* Fixed a few memory leaks in parsing engine.
* Fixed various memory leaks in script engine.
* New testing/benchmarking suit now coded. Not sure to release with actual client.
* 'export_to_html' now actually works.
* Hashing removed from main program flow - code still in place, but not activated. This will hold off until memory compression is placed back into the working build. Could be a while.
* A few parse script tweaks have been done. Importantly in the way of finding if statement arguments. Fairly fast -- not as fast as I'd like, but doing quite well. Should be fairly fast for the common user.
* ~40 new functions coded into the internals of the function. ~140 more bugs found in those ~40 functions. Isn't coding fun?
* Unnecessary free() calls within the main terminal fixed. No clue why these were put there in the first place considering they were not allocated buffers.
* Added VHM(tm)(very high math) to the benchmark code. This should also put a computer to it's knees with it's random number calls. It's well worth it, though.
* Added settings saving/loading.
* Settings window under-development. This should make a few of you gimps happy.
* Add a new command to the over-all parser -- #setoption. This should allow you to do input-line option settings. Such as enabling colour/buffer control/etc.
* Fixed a bug in my strprefix code that, for some reason, just now came about -- even though i've used it forever. Thank god for GDB debugging!
* Tidied up some code for a new release of the source code. New beta should be released by Monday.
(Jan 28th - 2005)
* Lot's of updates here since I do not keep an actual change log for web use.
* Ansi engine has been redone, again, yes, again. This time using bit masks. Much prettier and has much better support. No more table lookup.
* Heap managment is in. This is only actually enabled during debugging versions so that I may find out what is and is not being allocated and managed.
* HTML export in.
* Import file in.
* FreeTerm and FreeScripts finally coded.
* General cleanup of code.
* Blinking text is now supported.
* Reversed text is now supported.
* Removed several buffers from our old buffer code which now will result in less memory used. This was one of the reasons for using bitmasks.
* Settings are now coded in.
* Input line now accepts setting configurations via #setoptions.
* term_debug, term_error and term_echo are now coded. These help with little things now and then. Most disabled in non-debug versions.
* SEVERAL memory leaks fixed.
* parse_scripts bug fixed.
* alias/path bug fixed which was caused by an over-ran buffer.
* Tokenizer code written for script parsing.
* Hash coding added, then taken out, added again and then taken out again. I'll make up my mind eventually.
* Settings window-dialog created.
* Several bugs in the new parsing engine, fixed.
* Term blinking and reversed text are DISABLED while recoding for new parsing engine.
* Precache file code written. This is for file loading stuff.
* FreeTerm() now actually..uh...works.
* Changes to defines on colour declarations.
* Ability to run the terminal code without having any TBUF* lines added. Before this would result in a crash.
* Few minor sock optimizations.
* Memory usage is now reported in the title bar of the window.
* Title bar now updates more often.
* When moving mouse over window, X and Y coords are reported in COL/ROW format.
* Proper cleanup code added in the destroy routine.
* Most functions now use dynamic buffers instead of static. This will help combat buffer-overruns.
* Stripped out alot of dead and unused code.
* Nanomud now has it's own exception handler.
* I realized that I spend far too much time hunting bugs than actually writing code. It was then, that I realized that my exception handler was taking over of GDB, which, in turn, was causing back traces to report wayyy incorrectly. Exception handling disabled in debug version.
* Stripped out all code the if-statement checks. I really need to write better code. Performance is nice and all, but when you try to error check everything, you cannot obtain performance. We'll see what I can do.
* Edit menu added. no code actually -done- to it yet, it's just there for looks..for now.
* Lot's of other, minor stuff done, too, that I simply did not write down. Look for beta 6 soon!
(Jan 28th - 2005)
* Redid the send_buff code. There was absolutely NO reason why I should have used a temporary allocated buffer for something I could have done on the very same buffer.
* Fixed heap management code. This was causing nanomud to stay open for up to 30 minutes after closing it. This only did it when it allocated alot of stuff. Big bug that is now squashed.
* Fixed bug where, when alot of allocations (AKA: lines) were done, where all sending items lagged the client to 100% cpu usage for a second or so.
* Nanomud-b5-r2 now released.
(Jan 28th - 2005)
* Lots of updates to this one, so bare with me and don't expect all to be listed since I didn't really write any of them down, so i'm going by pure memory.
* General code tidy. Was mucho needed.
* Comments added to terminal.c to aide in reading.
* Ansi engine re-done, again. This time using bit masks. Reason for this? Well, it's faster. It also only uses one buffer instead of the 3 that we were using before, so the memory footprint is MUCH nicers. Honestly, it's where I originally wanted it to be.
* Export HTML code re-written to support new ansi buffers. It was also re-re-written after that to not only make html smaller, but more efficient. Much nicers now.
* Blink_term, parselines, etc etc all re-written for new buffer code.
* Selection is now an option. You cannot copy/paste as of yet, but by god you can select the text!
* All core text functions modified to take into account the selection code.
* Do_nasty is now officialy the file_import function. It has been changed to be faster, as well as give a progress report.
* chop_line did work, at one point, but was disabled due to some new bugs with the new code. But, it was doing it's job correctly once. That's all that matters, isn't it?
* All memory allocations are now done correctly and only allocate as much memory as needed instead of a vast ammount more.
* New code for mouse functions. This was made with the selection code, but it'll serve other needs as well.
* Found a nice bug in flushbuffer that was making painting a bit slow. Fixed that and now painting is a berjillion times faster. We also now paint every char at once instead of allocating a buffer of same-type chars, and then sending that.
* Memory manager now works correctly.
* Strip ansi now takes a few more things into account. Is also much better than the other one.
* Added a 'do_peek' function so that I can peek at the Window's call stack during hard-core operations. This'll let you still click
menus/type/etc.
* Added time-stamp option as well as code to store time stamps so that you can see when a line was added to the buffer.
* Configuration fixes in the save/load stuff as well as added a few more config checks.
* Added a nifty dragon intro.
* Disabled home-grown exception handler for now. Got a new debugger here that i'm using and it won't work with it enabled. So boohoo to you.
* Tweaked the scroll bar a bit.
* Fixed a bug in the output parser.
* Eval expression is now nearly complete. Currently being tested with huge evaulations.
* Math functions are now coded. They work pretty well, too.
* Compile script and check_grammar are now coded.
* Various tweaks to parsescript.
* Left/right token code in. This is for the evaluation of expressions. It also has 'mid' code, too.
* Various fixes to the strings code. Basically, it had too many memory leaks.
* Fixed about a berjillion memory leaks.
* Cleanup code is now working.
* export html now exports valid html.
* New function to retreive the string of a line from the bitmasks. ret_string.
* (insert about 3,000 other small changes here that I didn't document at all, but should have.)
View Nanomud doxygen files : Nanomud Beta 1.03
View Nanomud doxygen files : Nanomud Beta 1.05
View Nanomud doxygen files : Nanomud Beta 1.07
Download Source code(b7-r1): Here
Download beta2(release4): here
Download beta3(release1):(was never released)
Download beta5(release1): here
Download beta5(release2): here
Download beta6(release1):(was never released)
Download beta7(release1): here
|