home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
top2src.zip
/
REVISION.TXT
< prev
next >
Wrap
Text File
|
1999-10-03
|
63KB
|
890 lines
The Online Pub Revision List
----------------------------
Version 2.00g1
0913 - Lost the old revision list to a HD crash. This is what was added as far
as I can remember: Poker, Slots, MatchGame, 90% support for language
file, partial new PubColour support (output only), new word splitter,
basic config. file support, and a rename from The RemoteAccess Pub (RAP)
to The Done-Right Online Pub-Chat Door (DROPChat). It was at this point
that I began rewriting.
0920 - Abandoned the rewrite since I was not enjoying it, and since I
discovered that the rewrite was only going to end up being more-or-less
the same as this version with just better names. I can do just as much
by just gradually overhauling this version. Renamed program from
DROPChat to The Online Pub (TOP), because I've discovered that most of
the users using teleconferencing programs want a professional
appearance, and a name like DROPChat doesn't offer that in my opinion.
Fixed the infamous "rescan bug" again (it was lost in the crash). MAY
have fixed the dreaded "memory flaw" by not using sizeof with pointers,
but I won't know this until some testing starts. It's about the only
thing left that I can think of. Reduced stack size from 32k to 8k. One
part in the RA code was creating a 8000 byte local array, which
accounted for most of the need for the increase. No overflows so far.
0950 - Added processing support for the new configuration file system. This
uses OpenDoors' built in config. file system, which is more flexible.
As with before, only a few settings are actually USED. I still need to
add in support in both the processor and the structure for new options
appearing in the rewrite, and also some new ones I have thought of.
Also removed a call to od_kernel() that was happening before od_init()
in LAN and Local modes.
1000 - About 67% of the DC1 configuration options are now actually used in the
program. This means I will be able to FINALLY get rid of the annoying
5 parameter command line. The command line still remains intact until I
test the new options, however the work path and /H switch are no longer
needed, which actually results in a 3 parameter command line.
1010 - Completely removed all of the old command line parameters, except for
the EDIT and PACK switches, which are optional, and also the node
number, which is also optional. Added a VERY cheap Node Config. Editor
to allow me to choose the type of each node and save the NODECFG.TOP
file. The editor is currently accessable by using NODES as the sole
command line parameter. The NODECFG.TOP file is not yet supported by
TOP itself.
1020 - Added basic support for the Node Config. The SolidNode parameter, and
the comport modification parameters are not supported yet.
1700 - Added basic support for MULTI-CHANNELS! Right now, channels from 0 to
over 2 BILLION are supported with the JOIN command. In the near future
I'll make this an unsigned long and use channels 0 to 4B-1 for "normal"
chat, channels 4B to 4.001B-1 for user's personal channels, and the rest
for defineable "conferences". Message types MSG_INCHANNEL and
MSG_OUTCHANNEL are used for channel notificaitons. The WHO command now
needs severe modifications because right now there's no way to find out
where another user is.
1750 - Updated fixname() and filter_string() to recognize new PubColour.
1850 - Fixed poker Name display problem (patched it to use wordret) and the
infamous "always tossout the lowest node" bug in poker. Converted
language file system to a Config. file style system, where each entry
takes the format of a keyword followed by the actual language text.
This allows the addition of new language items without having to
recompile all of the time, and also gets rid of the old DROPLang
compiler. In addition, I can sort the items any way I want with nothing
more than some cut and paste work in a text editor. Also fixed a few
cases in PROCMSGS where outnum[] wasn't being used so the raw numbers
were outputting garbage.
1851 - Sort of fixed the GA bug. They work now, but ANYTHING typed that starts
with GA will also trigger a GA. Oh well, better than them not working
at all, for now.
2500 - Overhauled SCAN to be more like MajorBBS. Changed pressing ENTER to
display the tiny "who's on" list (handles only), like MajorBBS. Added
support for the first TASK flag (TASK_EDITING). Changed leftover
internal occurences of "drc" and "rap" to "top".
2501 - Fixed small bug in outchecksuffix() that was causing the - to be left on
when the length was converted, resulting in weird results.
2502 - TOP now wipes the node's record in NODEIDX while unregistering the node.
3000 - Implemented Crash Protection. A new lastaccess variable in the NODEIDX
is used to determine when a node last accessed the file. Under normal
operation, this value is kept up-to-date either when the NODEIDX is
saved, or when CrashProtDelay-10 seconds have elapsed (the -10 is to
insure the value will be updated in time). The updating is maintained
by the new top_kernel() function, which is hooked into od_kernel() using
od_control.od_ker_exec. top_kernel() also checks the other nodes every
CrashProtDelay seconds, and deletes nodes who's lastaccess time is too
long ago. CrashProtDelay config. keyword added as a supplement. node
variable added to maintain an up-to-date node_idx_typ record for the
current node, which also saves stack memory.
3200 - Changed around Output routines. top_output() now calls the new
top_outstring() which outputs to a string, interpreting @ codes. Then
top_output() displays the string while parsing ^ codes. This allows the
addition of the new top_outlog(), which can be used for Log entries
using language items. It calls top_outstring() then od_log_write().
Also changed od_emulate() calls to od_putch() in an attempt to speed up
output. Right now even local output seems faster, but that may just be
wishful thinking.
3201 - Went back to old output routines for now, since the new ones are buggy
with long unbroken strings. I should note here that using od_putch()
instead of od_emulate() _HAS_ sped up output considerably!
3202 - Changed around output routines AGAIN. Now, top_output() takes a
new parameter as its first: outmode. Outmode is either OUT_SCREEN or
OUT_STRING. OUT_SCREEN acts as before, and OUT_STRING causes
top_output() to return a pointer to outputstr, a global variable where
the resulting output is held. top_outstring() and top_outlog() are
gone, and log entries are once again written manually, though all that's
actually needed is to call od_log_write(top_output(OUT_STRING, ...)).
3220 - Converted some hardcoded text to language prompts, mostly log entries
that now use the new OUT_STRING feature of top_output().
3221 - Hopefully fixed a problem with Poker aborting with a floating point
error at the end of some hands.
3222 - Internal modification - moved ver to a static global variable defined
and set in GLOBAL.C. This will make recompiling faster since INIT.C
doesn't have to compile after every change.
3223 - Any array that used MAXNODES has now been made Dynamic, meaning the
MaxNodes keyword will work more effectively now. It may also work with
>255 values, but I haven't verified this yet. Added MaxNodes and
MaxActions keywords, though I forget exactly when. Forgot to log them.
3224 - Corrected a small problem that caused allocation for extra language
items if comments were used in the language file.
3230 - Added PokerMinBet, PokerMaxBet, and PokerAnte config. keywords and
support for them in the program. Moved nodecfg variable to a global and
made some adjustments to farmalloc() it earlier than other vars.
3231 - Made Personal Preference Options available to all systems for testing
purposes. I'm not sure if I'll keep it this way for the release. On
one hand I'd like to join the ASP and get TOP as an ASP approved
program, and on the other I'd like to reward registered users. I guess
I'll make the decision when the release time comes.
3232 - Included ASSERT.H and added an assert() test to the division after a
poker hand for a divide by 0 error. The error I attempted to fix in
revision 3221 is still there.
3233 - Fixed a couple of cosmetic bugs, including renaming a few language items
(HandleChange, SexChange, EXMsgChange, DescChange) by adding the word
Msg after them to avoid a couple of possible future name conflicts. I
had renamed these in the language file but not in the program. Also
changed version number from 1.90 to 2.00, since there are more than
enough changes to call this a major new version.
3234 - Removed that stupid 2 second delay after "setting up" I put in there to
make TOP look like it was doing something. Updated @L token to new
language format (Format is now @L"LangItemName"). This also allows
users to define their own language tokens for "common" items and use
them globally, saving space. Fixed a couple of other cosmetic bugs,
including the extra space between the "who's in" list and the short
help.
3240 - Channel value changed to unsigned long as noted in the revision 1700
notes. Channel field added to NODEIDX. Corrected bug in SCAN which was
displaying the user's current channel for everybody online. Changed
detection of '\r' to '\n' to try and circumvent that pesky ANSI "bleed"
bug.
3241 - Upgraded the show_file() function a little to make some of the extra
needs optional. Moved the MiniHelp to an ANSI file (MINIHELP.A??).
Upgraded the external ANSI files to reflect the current commands.
3242 - Support for solidnode variable in Node Cfg. added. Poker index file now
cleared when a node enters TOP. MIDX and NODE files now truncated upon
entry of TOP.
3243 - Updated copyright dates to say 1995.
3250 - Added the rest of the node configuration and support for it at
initialization. Added the DefaultCyberCash keyword and support for it.
Added Enough Cash checks to MatchGame and Poker.
3251 - Raised max. slots bet to 500000. Fixed slots speed (based on bps rate).
Hopefully fixed problem with TOP Node Cfg. OpenDoors needs a 0-based
port, and TOP was using a 1-based port.
4150 - Completely overhauled BBS interface. Function pointers are now used to
call common BBS functions such as paging, loading a node's info, etc.,
and the PAGE and NODES command now each just call a single generic
routine which calls the BBS functions. Overhauled RA support to the new
method. Max support hasn't been touched yet pending testing of RA
support. Corrected a few cases of od_emulate() in BBS functions.
Removed an unused variable in nearly all Node functions which was taking
up 256 bytes a shot (about 1.5k there!). Also noting that the fix in
3251 worked, but there still needs to be some safety checking with the
port number.
4250 - Maximus support updated to the new interface, though it does not seem to
be working at the moment. It crashes the system right away. Also
made a few minor fixes to the mods installed in 4150. RA support is
working perfectly now.
4350 - SuperBBS support added. Most of it uses the RA calls.
4351 - Fixed problem where Max and SBBS were crashing. I (embarassingly)
forgot to uncomment the max_init() call, and there wasn't even a
sbbs_init() call, so that's how I found the error.
4352 - Tidied up everything to do with SBBS and RA BBS integration.
4353 - checkcmdmatch() now checks the entire command line instead of aborting
right away, and returns the highest value possible. SBBS support
changed so the useron file is NOT kept open during run, since it seems
to interfere with SBBS working.
4354 - Minor mods to the SBBS code - fixed wrong status type display and am
testing something which will hopefully ensure the proper nodes are
detected. Also fixed improper display of SBBS status codes.
4355 - Scrapped 4354 change to mods. Fixed bug where TOP was taking a GOOD
return code from bbs_call_loaduseron as a BAD one! Fixed places where a
0-based node was NOT being used, causing problems for all of the BBS
interfaces!
4400 - Internal change to use 0-based node numbers everywhere. This allows
node 0 to be a local node, and allows BBSs which use node 0 to use it
without problem.
4401 - Possibly fixed cause of SBBS crashing bug by changing the way the file
is opened (DENYNONE now, was DENYRW).
4500 - Added generic Field editor which will be used for all of the online
editors in the program, including, perhaps, the profile editor, for ANSI
users only of course.
4550 - Added user selector which will be used for the user editor. Corrected
bug that prevented CR/LFs from being written to RA/SBBS pages.
4560 - Fixed editor so it won't try to show NULL variables. Added disabled
field support to editor. Added a few fields of the user editor for
testing.
4561 - Fixed cheap bug in poker that prevented anybody but the first person
from calling/discarding.
4660 - Added Directed messages (> and DIRECT TO commands). Modified
dispatch_message() to echo messages if they're done to the sending node
regardless of other settings.
4700 - Added most of the rest of the user editor, though it still doesn't
actually save the edited values yet. Tried disabling crash protection
to see if it was causing crashes, but this is not the case, so it is now
definitely something in the RA BBS-specific module.
4701 - Reenabled crash protection.
4710 - User editor saves and other nodes load the edited info. now. Some user
editor fields still are disabled though since they require more detailed
editing.
4720 - Node editor no longer uses OD so the comport doesn't matter.
top_output() modified to use a new OUT_LOCAL mode, which will use normal
conio calls instead of OD output calls.
4721 - Found and fixed SERIOUS flaw in BBS node loading code (RA and SBBS).
Fields in the USERON file that were longer than the ones in TOP weren't
being truncated, leading to overshooting the buffer. The reverse was
also true, though this was less of a concern as nearly all of the info.
was being taken from the USERON file so it wasn't going to be too long.
However, both ways have been fixed.
4722 - Found stupid problem with the node editor in that it was still using
OD's input routine. Fixed. Had to write my own input routine
(my_input_str() for now) but that wasn't hard.
4723 - Fixed reported bugs about TOP using the Work Path instead of the BBS
Multi Path. Also made title page file name TOPTITLE.A?? instead of
TOPTITL.A??. The E was eliminated because the old DROPChat name made
the title page filename DROPTITL.A??.
4724 - Added DisableLogging language item test to see if there's a problem with
emessage distribution. Setting this item to "On" will disable sending
of an emessage.
4725 - Caught another occurence of the problems described in 4721. Doubt it
will fix crashing after doing a NODES command though. Added outproc
and outdefattrib vars for future use.
4726 - Found and fixed ANOTHER SERIOUS PROBLEM in new RA/SBBS code. During a
useron save, the size of the useron file was ALWAYS being changed even
if it was big enough. Furthermore it was being made one record too
small! This COULD be the cause of the NODES-related crashing, but we'll
have to see.
4727 - Fixed small problem that caused the channel in the nodeidx to get
corrupted whenever a person went into the Profile Editor. I wasn't
using the new global node variable which stores the nodeidx info. when
saving.
4750 - Rewrote most of the command processor. It's still buggy at this point
in time.
4751 - Changed strcpy() call in xxx_pascal_string() functions to memmove() in a
desperate attempt to fix the RA/SBBS crashing. memmove() calls should
be a little more stable. Small problem in ra_saveuseron() and
sbbs_saveuseron() corrected.
4752 - CrashProtDelay can now be set to 0 to disable Crash Protection in cases
where it's causing "vanishing acts".
4800 - RA USERON support overhauled, it's a little more efficient now. Pascal
string commands now have PROPER errorchecking, which was long overdue
and probably why RA support was barfing out. unbuild_pascal_string()
now takes the maximum length of the C string as its first parameter to
facilitate errorchecking. build_pascal_string() now returns the length
of the string, not including the Pascal length byte.
4810 - RA debugging stuff removed, it seems to work now! SBBS SUSERON support
overhauled, using the new RA USERON support as a framework.
4811 - Optimized build_pascal_string() a little more. Forced all bbs_call
function calls to far. Found & fixed serious problem in new SBBS
SUSERON support - the SUSERON file wasn't being opened!
4812 - Added check_nodes_used() call to start of bbs_useron(). Tracked down a
problem where TOP was copying a statustype regardless of whether or not
the status number was valid. Local testing indicates this could very
well be the cause of the RA/SBBS crashing that has been haunting me for
so long! Real-time testing will be needed to say for sure though.
4813 - Fixed problems with command processor. Was using a bad method of
comparing the strings. All of the other quirks (i.e. "/sewqrp" yielding
a whisper to Starhawk as "wqrp") all lie in the command checks
themselves now.
4814 - Re-updated SBBS support so it doesn't leave the SUSERON file open.
Hopefully this will mean it works properly from the SBBS side.
4815 - Fixed SBBS support. It was ignoring the Line In Use bit so that's why
it wasn't working probably.
4816 - Fixed possible problem in top_output() with controlled length params.
If lenbuf couldn't be allocated it would still be memset() and that
would be potentially dangerous if it ever failed. Added NULL function
checks to the bbs_call calls for added safety. Who knows, maybe it'll
give clues to why RA support is crashing?
5000 - Added support for Channel Definitions and CHANNELS.TOP file. Added
CHANNELS command and MaxChannelDefs config keyword. Still need to do
some work with regard to using the channel topics and stuff, and at the
moment you can't change to a conference yet. Personal channels are not
implemented, and SCAN needs updating to support channel names.
Moderator functions also need to be implemented, along with banning for
normal channels and invitations for personal channels.
5100 - Conferences can now be joined. Channel Aliases can also be used.
5110 - Added "You're in channel xxx" and "Topic: xxx" displays.
5111 - SCAN enhanced to show channel names.
5112 - Added length checks to top_output()'s parameter field-length processor.
It now seems apparent that the crash in RA Support is actually due to
a bug in top_output() and not the RA Support at all! I don't know if
this will fix it, but it's a good place to start. Corrected getlang()
so it returns a string with a single \0 in it and not a NULL pointer,
which will make things prettier if a language prompt isn't given. the
argptrs[] array is now initialized to \0s as well which should make
things prettier if a "too high" parameter number is given.
5113 - It now seems very likely that the problem in 5112 was the cause of the
RA crashing. Testing of 5112 showed that only PART of the "Yes"
language item (used for page status) was copied! Modified top_output()
to count the number of ^^ codes and add 2 bytes for each to lenbuf to
try and counter the problem described. whos_in_pub() modified to only
display users in the current channel. Problem with "leftover"
non-channel messages fixed (forgot to 0 the message idx byte for the
unneeded messages).
5114 - Added security checking to the JOIN command. Also added displaying of
Personal Channels for future use.
5115 - Moved almost all string literals to language items in about the first
1/2 of the modules. Still have the other half to go. Added changes to
allow TOP to recompile under BC++/2 2.0, and fixes to smooth out porting
problems. One fix includes a problem with user searching. An
uninitialized variable was being used as a condition while searching for
a user's name, which under OS/2 caused the entire user searching
procedure to be bypassed! Some other uninitialized variable problems
fixed too.
5500 - Converted to a brand new Poker which doesn't rely on the "first node"
method anymore. Also converted 95% of poker text to lang file, with the
rest to come once testing is done. Changed "more" prompts to call a
function and to (by default) delete themselves onscreen once used. New
poker hooks put in, naturally. Added data1 & minsec values to the
message structure and new global variables to accompany them.
5501 - Seem to have fixed all of the MAJOR bugs in Poker. Fortunately there
weren't any that were hard to fix. Added new OUT_STRINGNF type for
top_output() which tells TOP _not_ to filter colour codes when
outputting to a string, in case the string is going to be displayed
later.
6000 - Actions rewritten. Multiple lists are now supported. Each list can be
assigned to specific security levels and/or channels. TOPACT.EXE is the
action compiler to convert the text files to binary, until an editor for
the binary files can be made. The ACTION LIST command hasn't yet been
reimplemented.
6100 - Several more text movements to the language file. Added @< (backspace)
code to output function. It should also be noted that I have decided to
remove support for multiple-word commands. It makes things too
difficult to manage. I will be converting away from this shortly and
after that the command processor should run in tip-top shape. Added
mnemonics to TOPACT for miniumum & maximum security settings, and
several ranges of channel settings.
6200 - Reimplemented ACTION LIST command.
6210 - Fixed more bugs with Poker. It is now playable and should work well
enough to be tested by the beta people.
6211 - Fixed TOP/DOS's shelling! Had to take out the preshell() and
postshell() functions, that cleared things up. Ironic, since those
functions were actually supposed to _prevent_ crashing, but I guess that
crashing was due to something else. Fixed a problem in TOPACT that
wasn't incrementing the counter and thus not properly compiling the
files.
6220 - Redid checkcmdmatch() a little. It now _always_ matches exactly, and
expects a word rather than an entire string. Commands in the language
file must now be one word. Using an underscore to indicate two words
won't work. Most of the major commands have been converted, and the
rest will be done after some testing has been completed. Also fixed
problem where doing an action to ALL wasn't working.
6221 - @R (Repeat character) language token now works. I couldn't make it
repeat other language tokens, unfortunately, but I may put in support
for some tokens (@X comes to mind) later.
6222 - Corrected whispering - it is now FINALLY done properly, using the normal
command processor and no tricks. Corrected directed messages similarly.
Also moved whispering and directed messages to nearly the end of the
command checking function, just for safety. Also made slight
modification to find_node_from_name() so that it would zero the return
string if there was no remaining string after the handle, to assist in
invalid command checking.
6223 - Converted the last of the main commands to the new command processor.
6230 - Modified main_loop() so that typing no longer blocks out messages. This
is in preparation for the input/output split windows.
6500 - Implemented the basic dual window (input/output) pub chat mode.
6501 - Added CHANGE CHATMODE command to toggle between normal/dual window chat
mode.
7000 - Added most of the new command-oriented help system. Still have to
diversify the help for commands with multiple words (like CHANGE).
7010 - Added CHANGE LISTED command to toggle whether or not a user's channel
number should be displayed to other users. Added channellisted field to
the node_idx_typ struct.
7020 - Added these subcommands to the CHANGE command: SEX, EMESSAGE, XMESSAGE.
7021 - Added the structlength field to the start of the node_idx_typ and
msg_typ, for third party developers. Added the MSG_EXTCOMMAND for
future third-party support. Added code to support the AllowActions
keyword. Added ability to once again block text while typing, as well
as the option to have your own text echoed to you during chat (handy for
dual-window mode). Both options are controlled from the Profile Editor.
7022 - Added the two previous CHANGE toggles to the profile editor as well.
Added ANSI checking in both CHANGE CHATMODE and the Profile Editor.
AVATAR is not currently allowed for DW mode because I don't know the
cursor store/restore codes yet. Changed CHANNELS command to CONFLIST,
and updated help file name to reflect the change.
7023 - Added debugging log to INIT.C and searching in USER.C to help track the
persistant crashing. Debug mode is triggered by the DEBUG switch after
the node number.
7024 - DEBUG switch now turns on Fortify, the memory checker I got off one of
the PDN echoes. This may provide additional insight into why these
persistant but random crashes are happening. At release of this beta,
I had it reporting nothing. Hopefully in a crash situation, it will
report something to one of the testers. Also used Fortify to track down
a slight but potentially fatal flaw in checkcmdmatch(). I forgot to
allocate space for the \0 in the tmpstore string.
7025 - New Maximus support fixed. The logic for whether it was a new IPC file
was screwed. Corrected bugs in BBS support that didn't bring TOP to the
proper screen location in dual-window mode before displaying incoming
pages.
7026 - Fixed problem where directed messages were working like whispers.
That's what I get for cutting and pasting. Fixed several minor bugs
which I forgot to detail. Added support for the AllowNewHandles
keyword. If it's off, TOP will take the name from the drop file or name
prompt and use that in chat. Changed extension of all temporary files
to .TCH, which will make them easier to find and safer to delete.
7030 - Added internal security levels and support for most of the
security-related configuration keywords. Optimized PROCINP.C a little
so it returns after processing (faster). Added SYSOP SETSEC commmand.
Tried to add support for the MaxPWTries keyword, but it was already
done (I changed the constant to the config value a long time ago).
Added support for local beeping control. The short scan (ENTER) now
only displays the users in the current channel. Extremely cheap user
security setter added to TOP EDIT running method. TOP PACK now can
globally set user securities. It now runs TOP PACK [<sec>] [<cds>].
7040 - Fixed LOOKUP command to now use the language file and respect the
cfg.usehandles setting. Renamed TOP.CFG to CFG.TOP for consistency.
Changed the style of the node configuration. It is now a text
configuration file, with the same options. Fixed problem where RAP was
ignoring the "Ready" flag in USERON.BBS, thus showing users that were on
while RA was in WFC mode.
7041 - Found flaw related to the new node configuration loader. The kludge
value for cfg.maxmsglen was too high (256 instead of 255), which would
cause memory overruns.
7500 - Simple character-by-character chat mode added for private chats. CHAT
command added to engage this chat mode.
7501 - top_output() now recognizes the outproc... variables and will act
appropriately. Modified the places that require certain code processing
to be turned off to use these variables. Private chat mode now informs
the user who didn't press ESC that chat mode has been exitted, instead
of just dumping the user back to the Pub.
7502 - Added &%, &@, and &^ language parameter modifiers to top_output() to
dynamically toggle processing of codes. The &% token doesn't actually
have an effect, yet. I need to figure out a way to inform the message
processor not to use action codes first.
7503 - Fixed problem with secret actions not working (still using old command
recognition method). Fixed problem where TOP wouldn't ask for a sex
for new users when the BBS is RA 2.0x. I _thought_ that OD would get
the sex from the EXITINFO.BBS file, but after taking a look, it doesn't.
Fixed problem with Sysop commands not working. Also removed the
shorthand form of the Sysop commands. Finally fixed the problem with
the toss/zap comment displaying garbage sometimes.
7504 - Added /LOGOFF and /! commands for people to logoff from inside TOP.
7505 - Fixed a few small problems with the language file.
7506 - Added credit display to the TIME command. Added support for credit
deduction in top_kernel(). Added cfg.usecredits variable & support.
7510 - Reenabled support for personal actions. TOP will create a "fake" action
list as list number 0 and copy the info. from the user file to there on
startup.
7511 - Fixed problem with last-list actions not working. Fixed problem with
directed messages and whispers not reporting people not logged in. It
doesn't work exactly as I want it to (i.e. /fdfhg reports "fdfhg not
logged in" instead of "whisper not sent") but it works enough. Fixed
serious bug where if the name after a bad action was too long, TOP would
crash. Sometime a long time ago I forgot that tmphand[] may not just
have to hold normal handles but also failed handle inputs, and thus made
it too small.
7512 - Modified PRIVCHAT.C to call a share-aware file delete function
(sh_unlink()). Fixed credit kernel to use credits by 1 minute instead
of 1 second, which is how RA does it. Implemented possible temporary
fix for the reported "whisper-losing-first-character" bug. Added %e
(he/she) action token.
7513 - Added the ability for actions to read and show external files from the
TOPANSIPath (%p token). Added OUT_EMULATE mode to top_output() to
accomodate that and future file-display routines. Fixed stupid stack
overflow error that occured when private chat was exitted. The share
aware sh_unlink() function was calling itself instead of the regular
unlink() to do the actual deletion. Finally fixed the damn midnight
clock overwrap bug. I had to kludge in my own myclock() function to
manually compensate for the sudden loss of a day's worth of clock ticks
that happens at midnight under DOS. Whether this is a DOS or BC++ 3 bug
I do not know.
7514 - Fixed careless error. TOP tried to free the action-picture buffer even
when it wasn't being used, and the buffer was not initialized to NULL so
the dofree() shell had no way of blocking the problem. Also changed all
uninitialized pointers to initialize to NULL to prevent the same mistake
in the future. Updated copyright dates to say 1996. Got rid of all
occurences of actionfil since it's no longer needed with multiple lists.
7515 - Fixed cheap error where directed messages were being sent privately.
I'm not being careful with my cutting and pasting. Upgraded some of the
profile editor to use the language file, the rest will come. It's
crashing right now but I'll fix that after it's all converted.
Optimized message-sending to remove some needless code-duplication.
7516 - Converted the rest of the profile editor to use language items. Renamed
CFG.TOP to TOP.CFG, NODECFG.TOP to NODES.CFG, and CHANNELS.TOP to
CHANNELS.CFG. Fixed potentially serious bug where TOP wasn't allocating
space for the personal action list pointer in addition to the rest of
the lists. Thanks to Fortify for that one. Also made small change in
INIT.C to not try to disable Fortify if the FORTIFY macro is not
defined, in preparation for a public release with no debug code. Added
@E (Erase Screen) output token.
7520 - Converted every other known instance of hardcoded text to language
items, except the CHANGE and SYSOP command screens which need to be
converted to help screens. Removed support for the user editor and
generic editor module. Maybe in the future I'll put them back.
7530 - Added crude personal channel support. Modified JOIN command to not exit
the channel until it is confirmed that the user can enter the new
channel.
8000 - Implemented Channel Management Interface (CMI). Channel data is stored
in CHANIDX.TCH in the work path, and contains information like the
moderator, topic, and who is banned or invited. This is in addition to
the information used from the CHANNELS.CFG file. Currently, there is
no external difference from how channels used to be.
8010 - Added MODERATOR command and SETTOPIC subcommand. For testing purposes,
right now anybody can change any channel's topic. Modified cmi_load()
to check if the channel is not deleted before using it.
8100 - Modified cmi_setspec() to handle full and not found cases, as well as
fixed it to use the requested node instead of the current one .
Modified cmi_adduser() and cmi_subuser() to act on the current buffer
channel instead of loading a new one. It makes it easier on me this
way. Modified action processor and TOPACT so that "N/A" in the response
text field will cause no response to an action to be shown.
Changed TOP so that channel 0 is now a generic broadcast channel
for sending and receiving messages. All nodes will accept messages on
channel 0 no matter which channel the user has joined. Channel 1 is now
the lowest (and default) channel. This also solves my dilemma over
whether or not to allow users access to channel 0. I thought some may
find it confusing since the default channel on most BBS programs is
always 1. Now I don't have to worry. Support for SETMOD and Ban/Invite
commands added, though they are not yet acknowledged by other nodes.
8500 - Fixed initial problems with CMI loading/saving. Implemented remaining
moderator commands on the receiving end. Added support for
DefaultChannel keyword. Optimized some areas that displayed channel
names to use a function I had written originally for this purpose in
CHANNELS.C but forgot about. Joining (by command or force) a new
channel now shows a summary of that channel upon entering. Changed the
channelname() function so it takes a channel number instead of a channel
definition, so it can be used with all functions.
8501 - Added moderatorship check before doing a moderator command.
Node deregistering now scans and removes the node from any specnode[]
field from all channels. Fixed slight cosmetic bug with the channel
name when joining. When a user is "evicted" from their current channel
a MSG_INCHANNEL message will now be sent to the new channel. Sysops now
are exempted from channel and moderator restrictions. Users are now
"evicted" from a personal channel if the user it belongs to exits TOP.
Inadvertantly found and fixed places where I totally forgot to write the
user's security to the node index. Optimized check_dupe_handles() to
only read in the 31 handle bytes and not the entire user record, which
cuts the search time to 1/3 of the time needed before. Need to do the
same to the user search code at the start of TOP later.
8502 - Fixed silly problem with SBBS support. I had reordered and renamed the
BBS constants and forgot they were duplicated in TOP.H. Because the
SBBS constant was reordered in one place and not in the other, SBBS
support wouldn't work. The BBS constants are no longer duplicated in
TOP.H.
8503 - Corrected a few cosmetic bugs directly related to commands. Added cheap
fix code to restore the amount of credits after exiting so RA doesn't
deduct them again causing a double loss of credits.
8504 - Made slight change to nodeinfo time saving to try to prevent crash
protection failing. Doubt it will work though. Added support for
configured unlisted channels in the WHO command. Added ability to turn
actions off and back on.
8600 - Added ability to define custom commands that shell out to programs.
This is done via the new SPAWN.CFG file. No external command list is
displayed yet, though.
8601 - TOP now looks for the NODES.CFG file in the same directory as TOP.EXE.
Added checking for pages inside private chat. Temporarily disabled
spawning while some work is done to it.
8602 - Removed ability to perform some commands (FORGET, REMEMBER, CHAT) on
yourself. Added checking to see if a user is on your channel for some
commands (WHISPER, DIRECT, actions). Fixed slight problem with TOP
reporting no name when something is done to a user that has forgot you.
8700 - Finalized configuration options. Implemented support for all remaining
configuration options. Removed support for those options which are not
being used in the first release. Fixed TOP so it properly uses the TASK
environment variable.
8701 - May have fixed the problem with crash protection. I appeared to be
subtracting the current time from the old time, instead of vice versa.
Fixed problem with profile editor not showing pref2 settings correctly
(pref1 was being tested instead).
8800 - Added Private Chat task support. Added chat disable during tasks by
using channel 0xFFFFFFFF as a "busy" channel. Removed most debug code
(except Fortify and the wdl, which will remain for the gamma versions),
recompiled with more optimizations. Added MSG_FORCERESCAN type and
support.
8801 - Added extra logging. Added support for the LogFile field of the node
configuration. Added global msgminsec and msgmaxsec variables for
future use.
8900 - Implemented the show_helpfile() function to simplify help file displays
throughout TOP. Implemented support for help on all commands, including
multi-word commands, as well as non-command topics. Added ability for
sysops to join channel 0 to make global announcements.
8901 - Fixed several problems in Private Chat which were introduced in recent
modifications. One was the exitting was not being detected properly,
thus stranding nodes sometimes. Also, an accidentally inserted send of
a MSG_INEDITOR message caused the pcnode variable to be reset to -1,
which prevented proper operation. Damn my cutting and pasting! Also
fixed private chat's CPU hogging. There is still a slight problem if a
user exits Private Chat before the other user is ready, because each
node deletes the EPR* files before entering chat. Right now, I will
take this problem over the one caused by potential "loose" EPR* files,
because a) it is less serious than a loose EPR* file, and b) it is less
likely to occur.
8902 - Fixed problems with cmi_busy(). I tried to cut corners and paid for it.
The curchannel variable wasn't being set which was one problem. Also,
the messages needed to be processed while the channel was still
0xFFFFFFFF so the node wouldn't think it was back in the channel and
display them. Optimized the mused variable with the lastmsgused
variable, all in process_messages(). This means TOP no longer requires
special conditions about whether or not to display the message prefix -
it can determine this on its own. Fixed long-time cosmetic bug in Dual
Window mode. Extra CR/LFs were sometimes being shown. Fixing this bug
involved overhauling a lot of the language file as well as globalizing
the onflag variable. Probably too much work for a simple
non-destructive cosmetic bug, but at least it looks nice now.
9000 - Implemented new registration system for OS/2 and updated DOS
registration to use new key and reg. type. Fixed some flaws in the
language file usage. Fixed problems resulting from command
channel-checking. Redid check_nodes_used() so it also checks the
handles, which does away with the load_online_handles() function. This
was also necessary for nodes to catch other nodes who did not join TOP
in their channel. activenodes[] now converts all users not in the
current channel to the value 2 for easy testing. msgglobaldata variable
added to make global sending of messages easier. Some messages that
needed to be globalized (FORGET, REMEMBER, etc.) now are sent globally.
MSG_FORCERESCAN is no longer used at this time though support for it
will stay in in case I need it later. Disabled ability to do
ban/inviting commands to self. Fixed globalness of sysop commands.
Fixed problem with cmi_unbusy() not properly rejoining the channel.
Fixed cross-channel chatting. Fixed profile editor message sending.
Fixed SYSOP SETSEC command. Fixed short credit screen. Fixed
cfg.actionusesec usage with actions themselves. Changed TOP to test
user.security instead of od_control.user_security. Fixed CHANNELS.CFG
and .TAC loaders to use the TOPPath setting. Fixed stupid passing of
NULL on some messages, which TOP/2 didn't like. Added NoRegName keyword
and support. Fixed problem with displayed "vanished" nodes. Released
as TOP v2.00g1.
Version 2.00
9001 - Recompiled TOP/DOS with OD 6.00. Changed giveup_slice() calls to
od_sleep(0) calls. Changed BBS code to use the new bbs_call_pageedit
function hook. Moved page editor to the ra_longpageditor() function,
which now also uses the new od_multiline_edit() function introduced in
OD 6.00. It still needs to use the od_fsedit() call from Doors/2,
though. The max_shortpageeditor() also needs to be added. Added
modifications to compile with OD for Win95 and BC++ 4.52 and released a
limited beta version to see if it works.
9002 - Fixed a spot in the new user procedure where TOP used AllowNewHandles
instead of AllowHandles. Added support in the node config for OD 6.00's
new RTS/CTS support.
9100 - Added basic Censor and required CENSOR.CFG loading information. It
still needs to be able to distinguish whole words or parts of words.
9110 - Added ability for sysops to pick the default new user preferences to
suit their own language file and system. This is done by the
DefaultPrefs keyword.
9111 - Fixed compilation error in the Win95 version. I had Dynamic runtime
library linkage turned on, which meant the users needed a .DLL that I
didn't include. However, it was found to crash so more work will need
to be done.
A000 - Implemented the long-awaited Biography feature, including configurable
questions file, editor, and "fill out all" mode. The editor is entered
using the BIO command. Changed LOOKUP command to call up a user's
Biography instead of the cheap summary from before. Created
find_user_from_name() function to get a user's record num and data from
a name. Modified startup code to use this function, which will speed up
the initial name search a bit as the new function only reads the name
and handle during searching.
A100 - Added Maximus/2 MCP support at last. Unfortunately, Max/2 doesn't make
this easy. It does not disconnect its own pipe, leaving double nodes on
the who's on list, and causing all pages to be sent to nodes twice.
There is no correction for this at this time. The module BBSMAXMC,
which contains this support, compiles only in the OS/2 version of TOP.
Added the max_shortpageeditor() function for one-line pages. Moved
MECCA string display code to its own function.
A110 - Corrected small bugs with MCP support. Added ActionPrefix keyword to
allow periods or other characters or words to prefix action commands
(eg. ".yawn").
A111 - Changed from using atexit() to od_control.od_before_exit, since the
former wasn't working under OS/2. Put in a printf() so this can be
confirmed during testing; this will need to be removed later. Reenabled
the ability to process & tokens, which also required the creation of an
argnum variable to store the argument number instead of getting in
dynamically each time - probably what I should have done in the first
place. I am not convinced that the & processing is stable with regard
to the process flags remaining FALSE for subsequent outputs, but it
seems to work fine so I'll leave it as it is for now.
A112 - Added a language item to display if a user is typing text and gets
interrupted by an incoming message. Unfortunately, the detection for
this situation isn't working so it will need to be fixed later. Also
discovered that the censor replacement text doesn't work if the text
isn't the same length as the offending text. This may have been done by
design (I forget), but it needs to be changed in future.
A120 - Added the USERLIST command.
A121 - Removed some remaining Press Any Key prompts (hopefully all of them, but
we'll see).
A122 - Got rid of few (unimportant) instances of regular int variables being
used instead of XINT. There are a few more, but these require header
changes which I'm not willing to do just yet. MCP support now won't
poll node 0, which Max/2 does not use. The last MCP message is now
saved and the next incoming message is compared to it, in an attempt to
circumvent Max/2's double-paging (described above). A match also removes
the last message, so if a user sends the same message twice it won't be
ignored. Fixed a problem where the MCP msgbuf isn't freed after it's
used, and though that's not a big problem under OS/2 with only small
amounts of memory in question, it's still obviously not a wanted effect.
A123 - Fixed a bug in the bio editor that was using the question number instead
of the record number when saving responses. Fixed a very stupid
oversight where I forgot to add CMI support when joining Conferences,
which made them totally unpredictable. This should fix a reported
problem where the security wasn't being checked as well. Fixed problems
with channels being wrongly displayed as Unlisted under OS/2, and to a
lesser extent under DOS.
A124 - Temporarily disabled the profanity censor as it is causing problems.
A125 - Fixed the profanity censor by telling it not to try to censor words that
are longer than the remainder of the string to be checked. Also fixed
the censor so it will now properly use replacement words that are not
the same length as the one being censored. I was using the wrong string
length here.
A126 - Removed references to the user description, as the Bio makes that
obsolete. Changed fixname(), trim_string(), and filter_string() to
check for 0 length strings and ignore them. Added message processing
for the MSG_INBIOEDITOR and MSG_OUTBIOEDITOR types, which was omitted
when the Bio Editor was added.
A127 - Replaced a key line of code (the call to find_max_score()) that
accidentally got deleted in the last version. Gotta be more careful
with that Ctrl-Y key I guess.
A128 - Removed all references to the description field completely. Added the
sendtimemsgs() function which uses the od_control.od_time_msg_func hook
to trap "time left" or "inactivity" messages and echo them to the user
as proper MSG_GENERIC messages. The blocktimemsgs global variable has
also been added, which is set to TRUE while TOP is processing messages,
thus preventing the sendtimemsgs() function from causing sharing errors.
If a time message is received while this variable is TRUE, TOP will just
use od_printf() to inform the user. This may be enhanced in the future
so it does not interfere with displays that may be on the screen.
Removed the printf() that displays when TOP has exited abruptly.
Added a process_messages() call to before_exit(), which is needed so
"sorry, time is up" messages can be seen. I thought I put this in long
ago, but either I didn't, or it was causing problems so I took it out.
A200 - Rewrote the name parser function (find_node_from_name()). It now looks
for exact matches first, then looks for partial matches. It uses much
less memory and should also be faster! The find_max_score() function is
also no longer used, as name scoring is done inside the main function on
a "save high score only" basis.
A201 - Fixed a stupid mistake with the new processor. I was copying the data
for newstring to the handle string by accident.
A202 - Added a temporary fix for %P tokens in personal actions. It may become
permanent depending on how the attempt to fix the crashing related to
unfound %P files goes.
A203 - Fixed where I foolishly forgot to make the above fix work for just
personal actions. Added the FixNames configuration keyword to control
whether or not the fixname() function does anything.
A250 - Fixed a problem where TOP was letting Max/2 MCP pages and other messages
get through, which making a mess of the prompt line. I had forgotten to
make TOP check to make sure the messages were of CMSG_HEY_DUDE type.
Added the ForceBio option which forces users to fill out their
biographies before they can chat. The Bio editor now sends out
MSG_BIOCHG whenever users change anything in their biographies. Fixed a
minor bug where I didn't put the user in "busy channel" mode while
they're in the bio editor. Also changed TOP to use constants relating
to the busy and maximum channel numbers. Added FORCEOFF setting to
FixNames keyword so TOP will auto-correct the capitalization of existing
users' handles or names. Added a TOP icon and more information for the
About window in TOP/95. Corrected a small mistake in checking for
failed Bio string questions under the minimum length requested. Changed
all remaining instances of int to XINT, except of course where int is
needed (eg. WinMain() in TOP/95). Fixed a non-initialized variable in
the new name parser which was causing TOP/2 to exit with a TRAP 5.
A251 - Revised some of the errorlevels to make more logical sense, and to get
rid of the conditions with unassigned errorlevels that were just using
44. Moved the error message and log message for a sharing violation
error (in the openfile() function) to the language file. Obviously I
had thought it wasn't necessary to do so, but I want to be complete so
it's there now.
A260 - Removed support for the FixNames keyword. Unfortunately, OpenDoors and
Doors/2 have an auto-capitalizer for names as well, and until I have the
time to work around this, FixNames won't work. In order to preserve the
use of the .DLL files for the OS/2 and Win95 versions, I can't just
change the door kits and recompile, so something else will have to be
figured out. Made %m mandatory in personal action singular & plural
text to prevent "fake" messages from users. Wrote the 2G1TO200 upgrade
program which will enforce the same requirements on existing personal
actions. Changed Max/2 MCP support so the BBSIPCPath can now be set to
the pipe defined for Maximus. Corrected two small bugs in Maximus
support. One was with MCP support where the header wasn't being
properly added to messages, and the other was with regular support where
not a large enough buffer was being used to hold the MaxPageHeader
language item. REALLY fixed the TOP/2 unlisted channels bug. I'd made
a silly typo that stopped it from working. Fixed the detection for when
a user is typing and is interrupted by a message so that the language
item (*** or whatever) will now display properly.
A270 - Extended censor coverage to all input strings in TOP, except for strings
>= 512 bytes written with the long page editor, which are too big for
the censor to handle right now. Corrected a small mistake on my part in
the long page editor. I was using the FS language strings for the
regular page editor and regular strings for the FS editor. Fixed a
cosmetic bug where a CR/LF would be sent if you were typing and somebody
you've forgotten sent a message to you. Fixed where *** was being sent
to people even with Block Msgs While Typing turned on. Fixed the very
long standing "rogue MECCA code" problem with Maximus pages (damn
typos!).
A280 - Finally enhanced the find_node_from_name() function to take the entire
last word as part of the handle, not just the significant letters. This
means that if two people with similar handles are in TOP and one person
leaves while another person is whispering to him/her, TOP will say that
it can't find the handle, rather than sending the message to the other
person because the first letters matched. Also changed the same
function to only copy the first word or 30 characters of what the user
typed, whatever is less. This means if a user does an invalid whisper,
the user won't get the entire message dumped back at him/her.
A281 - Implemented "whole word" feature of the censor. Fixed a crash with the
Bio editor using the censor. I wasn't giving the response string a big
enough buffer. I should really change that 256-byte minimum on the
censor buffer, though. Changed the 511 byte limit on long page
censoring to 255, for the same reason. Fixed the BIO command so it only
works if it's the only word typed, like the other commands. Fixed a
problem with multi-word handles and the new name processor. Fixed
another problem with the name processor logic that stopped the
not-specific-enough detection from working with any command where the
handle doesn't end the string. Fixed a third name processor problem
with the returning of invalid/unspecific handles. Only showing the
first word wasn't enough if the error was in the second or later words,
so this has been removed (though the 30 character limit is still in
place).
A300 - Implemented SHARE detection in TOP/DOS. Fixed problems with Dual
Window chat mode. Finally fixed the problem with & tokens and
talktypes. They still won't work but internal modifications have been
made so that language token processing is turned off after the
talktypetextstart length has been processed. Fixed a small problem with
the wrong handle being used in invite/ban notifications. Finally added
single-line paging (eg. /P 4 Hey there!"). Fixed problems with the page
function return values that were causing the page confirm/error messages
to not be sent properly. Censor enhanced to ignore colour codes in the
middle of words. Released as v2.00.
Version 2.01
A301 - Restarted development after a year off. Demand is becoming significant
for me to get something done. It was probably always there but I was
both unwilling and unable to seek it out, until now. Now that I have a
new HD I can keep TOP "in easy reach" to work on it as well. More
important, I enjoy working on TOP and wish to resume at least minor
development. Fixed the bug that prevented the Win95 version from
working. I had forgotten to exclude the clock_tick timeslicing macro
from Win95 compilation, and Win95 didn't like it. TOP/DOS is now
compiled using BC 4.52 instead of 3.0. Now that I'm running Win95 and
always have access to the Windows IDE that 4.52 uses, there's little
point in my keeping BC 3.0 installed. Also, thanks to system upgrades,
TOP can now be fully compiled in under a minute. It used to take at
least five.
A310 - Fixed the bug that prevented high ASCII from working. Apparently BC
doesn't like ?: tests inside parentheses. Updated copyright dates to
say 1997. ASCII 127 (delete) is now interpreted as a backspace. It was
previously treated as displayable, but this is not always the case on
some terminals. The CHANGE command now issues MSG_SEXCHG and
MSG_EXMSGCHG messages when the appropriate commands are entered.
Removed the trim_string() calls that change the real name and handles
passed from the drop file. Apparently they are a security risk.
Directed messages now echo if the user has text echoing turned on.
Fixed slight logic error that allowed backspaces even with no text
typed.
A311 - Commented the source code in preparation for making it available. The
buffer that holds action output has been expanded to hold 1000 extra
bytes. If too many tokens were used in personal actions it was possible
to crash TOP. The extra bytes should solve this problem for personal
actions and normal actions. The only possible way it could still occur
is if a sysop goes nuts with tokens in a pictorial action. Fixed a small
bug where the XMsgPrefix wasn't being used (again due to cutting and
pasting). Updated copyright dates to say 1998. Fixed small bug where
the OpenDoors security was not being updated to the actual security in
local/LAN mode, which occurred due to careless searching and replacing.
A320 - Started fixing bugs found while making comments. Got rid of an old
RAPColour code compensator in the trim_string() function. Fixed where
the censor was using the number of non-comment lines in CENSOR.CFG,
which made the count too high and wasted memory. It now divides the
number of counted lines by 3, the number of lines per definition. The
channel summary now stops as soon as it finds another user in the
channel, instead of continuing to count the users. The count is no
longer used so aborting saves time. Fixed another problem in the name
processor with multi-word handles. Now specifying one full word of a
multi-word handle will work properly with things like secret actions.
TOP should (hopefully) now get the user's DND status from the BBS useron
file and save it in the NODEIDX. There's no way for me to test this,
unfortunately. RA credit support enhanced slightly. Now a negative
number _will_ cause TOP to deduct the credits, while a positive
number will not (the old behaviour). I've had old reports saying RA
won't deduct while my original tester said it would, so now TOP supports
both ways. Maybe it's a RA 2.00/2.50 thing.
A321 - Found and fixed a memory leak in the Profile Editor that has been around
for quite a while, probably since multiple action lists were added.
Thanks to Fortify once again! I forgot to add one byte for the
terminating \0 when reallocating the action pointers in the personal
action editor. Personally I have not had this bug cause a problem but I
had a report of an infrequent TRAP on an OS/2 test system, and I suspect
it was because of this leak.