💾 Archived View for mirrors.apple2.org.za › archive › apple.cabi.net › Utilities › MSGCHKR1.02.SHK.T… captured on 2024-02-05 at 11:44:55.
View Raw
More Information
⬅️ Previous capture (2023-01-29)
-=-=-=-=-=-=-
MessageChecker v1.02
By Nathan Mates, 6/28/94
Table Of Contents:
1. What MessageChecker is
2. Installing MessageChecker
3. General Description of MessageChecker & its functions
4. About the options
5. Potential Problems
6. Hackers info
7. Random vaporware
8. Hellos
9. Distribution info
10. Version History
11. About the programmer
12. Signoff
If you want to quickly go to a section, just search for ~~ followed by
the number. For example, to read the distribution info, search for
'~~9', without the quotes.
~~1 What MessageChecker is:
MessageChecker is a CDA that installes a HeartBeat task to
constantly check on the integrity of the MessageCenter. For you
non-programmers, the MessageCenter is how programs on the Apple IIGS
communicate with each other, and used for some important system stuff.
The MessageCenter is a list of messages, but no integrity checks are
ever done on it. Therefore, when it is trashed, the system will
usually go off in an infinite loop trying to figure out what's in it.
On my system, after a number of crashes and memory-trashing bugs, I
have found that the MessageCenter was blasted. But, the system can
usually keep going for a while after the damage occurs, so it's hard
to trace exactly when the system got trashed. Such memory-trashing
bugs have been fairly serious, and required patch programs, such as my
FixKern204 init for the GNO 2.0.4 shell. (Shameless plug-- if you have
GNO 2.0.4, get it! It prevents some random memory trashing bugs in the
2.0.4 kernel. It's free, and prevents problems. Check your local Apple
II archive, or contact me). Therefore, I wrote MessageChecker to keep
tabs on the MessageCenter.
MessageChecker, when you turn it on, constantly checks on the
MessageCenter, and if it's messed up (if the IIGS Memory Manager feels
that where the next message isn't valid at all), MessageChecker
first stops everything to warn you that it has found what it
feels a problem. Once you acknowledge this, and 'ignore' the problem,
(the recommended action), MessageChecker simply flashes the screen
border so you won't forget. It does not crash the system, like when
the system detects a bad HeartBeat queue, as the system can keep
functioning for a bit. (Your system is in danger of crashing, so I'd
reboot rather soon)
~~2 Installing MessageChecker:
To install MessageChecker, drop the 'MessageChecker' file in the
"Desk.Accs" folder inside the "System" folder on your boot disk, and
reboot. There's also an icon file that you can drop in an "icons"
directory on one of your disks; this is merely fluff, and totally
unnecessary. In the icon file, there are 5 icons for MessageChecker.
Only the one with the name 'MessageChecker' will be used; the other
two will not be used. Icon editors such as IconEd and DicED can change
the names...
Programs capable of installing CDAs on the fly, such as IR, should
be able to install it, but I haven't tried any. (You may need to
select MessageChecker from the CDA menu once just to start the
background checks after installing it on the fly, but, again, I
haven't tried any of these installers.)
Although MessageChecker puts up an icon on booting (a big eyeball;
so sue me. I can't draw. You got a better idea/icon?), it should be
compatible with GS/OS system 4,5 and 6. I haven't tested it with
anything other than 6.0.1 on my HD. If you find it doesn't seem to
work with another system version, tell me so I can fix it.
~~3 General descripion of what the MessageChecker does, and its
functions
MessageChecker is an interactive CDA. When you select it, it will
display its current status, number of backed up messages, and a menu.
Pressing 'Q' or <Esc> will exit the MessageChecker CDA. Most of its
options are self-explanatory; the following text details exactly
what they do.
MessageChecker has 3 modes: off, normal, and paranoid. When it is
off, MessageChecker will never check for trashed MessageCenters.
Normal mode and paranoid mode both check repeatedly for trashed
messages; the only difference between them is the speed at which they
check. Normal mode usually checks twice per second, and paranoid, as
often as possible. When they detect a problem, both will take over the
system as they attempt to warn you, giving you a small menu of
options. The default option is 'Ignore' the problem, as trying to
restore the system is a dangerous thing. (See below) If you ignore the
problem, the border will simply be blinked repeatedly to show that
there are peoplems. Since they check at different speeds, normal and
paranoid blink the border at different rates, but there is nothing
implied in the urgency (or lack thereof) of border blinking.
From the MessageChecker CDA, you can view the list of system
messages. The list contains a few more pieces of information relevant
to messages than other list viewers (aka NiftyList 3.4), as it
displays the full 32-bit handle of the next message, allowing you to
see if anything is amiss in the upper 8 bits of the address. When
travelling the list of messages, MessageChecker asks the MemoryManager
to verify all handles it runs across, and if the MM doesn't like it,
the handle will be printed in inverse. This allows you to quickly see
where the problem is.
The list of messages goes until it reaches the end (a long-0 for
the next handle), or runs into a bad handle for the next message. If
it finds a bad handle, it displays it in inverse text. It also pauses
every screen, allowing you to check on things, while also stopping
infinite loops dead in their tracks.
You can also save what mode MessageChecker will be in when it boots
up; MessageChecker simply saves the current settings (the current mode
(normal/paranoid/off), and all the options from the options menu) to
disk, and restores them later at boot. The prefs are stored in
- /system/preferences/msgchkr.prefs, and if that file is not found at
boot, the defaults are used. See the section on the options for what
those defaults are. If your system folder does not contain the
preferences folder, it will be created for you. (Far better for all
those config files to sit there than all over.)
Note: If you're running GNO 2.0.4 or earlier, and in the
foreground, you're running a resource-using desktop app (like the
Finder), the prefs can't be saved. This isn't my fault, so bug
Jawaid for the fix, namely GNO 2.0.5.
When MessageChecker runs into a bad handle for the next message, it
stores the offending message, handle, and message contents for your
perusal. From the MessageChecker menu (either the menu you get from
CDA menu, or the shorter one that appears when MessageChecker takes
over your system), you can view the 'Top 10 List of Offending
Messages' that MessageChecker has run into. This is useful for keeping
track of all the damage your system has sustained. If you're a hacker,
you can also look at the memory near the damage; see below for a
quick bit of information on that.
MessageChecker also keeps track of your system, and as long as it
boots into Normal or Paranoid mode, roughly 105 seconds after boot
(enough time for most systems to load the boot program and become
stable), it backs up the current list of messages. It keeps the first
62 bytes of the first 64 messages (enough to hold most messages; I'm
not going to back up all 32K of your silly desktop pic, ok? :). This
backing up happens once and only once; if you do a number of things,
you may want to tell MessageChecker to back up the list again, which
you can do from the CDA.
Backing up the message list would be useless without the ability to
restore it. But, RESTORING THE MESSAGE LIST IS FUNDAMENTALLY STUPID!
Your system could have changed (for better or worse) since the last
backup; why should the current message backup have anything to do with
what's in your system? Before you restore the backup, you will have to
read a long disclaimer so that you acknowledge any and all
responsibility for things that happen as a result of the restoration.
MessageChecker might crash/trash your system when it restores
everything; tough. You asked for it.
In case you're stupid or desperate enough to try a restoration,
MessageChecker tries to do a good job at it. It notes the connections,
and the contents of the messages, and tries fix things, prompting you
when it can. If it detects a bad handle to the next message, it
replaces that bad handle with the next good handle in the backup. If
the message contents have changed, it says so, displays what it can of
the messages (the changes may have occurred in the non-printed parts
of the messages; they may look identical) and asks you if you want to
restore the backup.
If the number of messages has changed, MessageChecker will try to
accomodate. (Quit/enter the Finder to change it by the number of
Finder Extensions sitting in *:system:finderextensions). But, it may
really get confused. Oh well. You asked for it. That's why you should
manually back up the system every little bit if you want to keep track
of things.
~~4 About the options
MessageChecker is fairly configurable. This section explains most
of them, and recommendations as to what you should set them to:
0) The mode MessageChecker is in: Normal, Paranoid, or Off. Should
be self-explanatory unless you haven't read the documentation above.
1) For the speeds of Normal & Paranoid mode (see below), they can
be displayed and entered in either decimal or hexadecimal mode. This
defauls to decimal mode as most of you aren't hacker types, but if
you want, it can be displayed in hexadecimal. Memory dumps are always
done in hex, regardless.
2) The speed at which Normal Mode checks your system. This value is
in 'ticks' or 1/60 of a second slices. Because of the way the system
works, this is the time _between_ checks, so 1 tick is as fast as
MessageChecker can run. (0 is off). This value can be set to anything
between 1 and 65535 (FFFF hex). It defaults to 30 ($1E) ticks between
checks, or checking twice per second
3) The speed at which Paranoid Mode checks your system. Can be set
like the Normal speed. If you want, you can have Normal mode check
faster than Paranoid; you're the boss. Paranoid mode can really eat
up system time, and a time like 1 is best for trying to determine
exactly when some memory gets trashed.... For best debugging results,
turn your Zip down to .6 Mhz, and turn paranoid mode on :)
4) At boot time, under System 6.0 and later, MessageChecker can draw
an icon. MessageChecker has 5 boot icons it can show, namely an
eyeball by me, 'Eyes scanning a tape' by Richard King, and 'Says
ok' by Moah Mittman, and two by Frank M. Lin. MessageChecker can show
one of them, none of them, or a random icon chosen from those three
at boot. It defaults to my icon only. No matter what is chosen here,
MessageChecker always reports its presence and version in the text
bootup screen.
5) MessageChecker can report some information in its Classic Desk
accessory menu title. It can have just the name 'MessageChecker',
it contain the MessageChecker version currently running, or it
can display what mode it's in. It defaults to just 'MessageChecker',
but you change that. This purely fluff; doesn't really affect
anything. Note: You can have either the version or the mode in the
title, but not both at once.
6) When the GS reorganizes memory (this is done at times when it
needs certain large chunks of memory), there is the chance that
MessageChecker will look through the list of messages, and flag an
'error' because the next message is currently being moved. Things
such as Desktop background pictures are the single biggest cause
of this.
MessageChecker provides a fix for that. When it backs up the
messages (automatically, some time after booting up), it can 'lock'
the messages down so that they won't be moved, and hopefully fewer
false alarms will be generated. But, locked messages can't be
shuffled around in memory, so this will fragment your memory somewhat
more. MessageChecker defaults to doing nothing to the memory blocks,
but if you want, you can lock 'small' messages (usually programs
communicating with each other), 'large' messages (usually desktop
pictures), or both. It only locks them once when it backs things up,
so if you load a new background picture, it would probably become
unlocked...
I wish I had a way to let MessageChecker know when the system is
shuffling memory around; it would make this whole option nicely
obsolete.
~~5 Potential Problems:
Here's a list of things that have been reported by the beta
testers, and my comments/suggestions.
1) Since MessageChecker runs in the background, it eats some system
time. I've tried to get the time usage as small as possible, but in
some conditions, it may eat a lot of time and cause some char lossage
in modem programs:
- Your GS is not accelerated. Please, support the GS, and get an
accelerator. Your GS will run at the speed as a much more powerful
(and expensive) computer.
- In the first 2 minutes after boot, MessageChecker checks the system
time to see if it's time to back things up. That checking uses a
little more time than normal. After it backs things up, it totally
skips checking the time.
- When it detects a problem, it either takes over your system until
you dismiss it (I think it's far more important to be warned than
to get some chars), or flashes the border. Even when it's flashing
the border, it uses much, much more system time than when it finds
no errors.
- The faster it checks, the more system time it uses. If there's some
character loss, try setting the time between checks to something
large, like 120 (check every 2 seconds) or more.
- Other things are eating system time. Easy Access eats time and some
chars even when not 'on'.... Did I mention I have a vendetta against
the misuse of this program? :)
2) If 'paranoid' mode is turned on, when the system installs/removes
a message, there is a really, really slight chance that the list of
messages will be out of order when MessageChecker checks. Turning on
the 'locking' of messages will prevent a lot of problems, but, again,
will contribute to memory fragmentation. This is why you should try
and Ignore any problems that happen... If the border stops, this was
only a false alarm. If it keeps blinking, save everything, and reboot.
3) MessageChecker is mostly good for finding infinite loops and bad
handles in the Message list. If something prematurely truncates the
list (which isn't good at all, but things are wrapped up neatly),
MessageChecker won't think there is a problem. If you use
MessageChecker a lot, you should get look at the list of messages a
lot so you know roughly what messages are usually there, the number
of messages, and all....
4) Because of speed, not all errors that are flagged in the viewing
of the message list are caught. Without using lots of system time
to pinpoint problems (I use a 'pretty good' check to see when
there's a problem), there's nothing that can be done about this.
5) MessageChecker is not compatible with Easy Access on Rom 01 GS's.
The main menu should work fine, but when MC detects a problem and
takes over your GS, Easy Access prevents MC from getting any
keypresses. All you need is Easy Access installed (not just 'on';
Easy Access steals keys when installed) for this to happen. If you
don't really need it, deactivate it! It can steal keys from other
programs (like terminal programs) and MC....
~~6 What to do if you have some low-level programming skill:
(If you don't know a handle from a long word, skip this section).
Those of you who are hackers probably know about NiftyList's '~m'
command to view the message center. My beef with NiftyList's display
is that the address reported by NiftyList for a message is not
entirely correct. This is where the contents of the message are, yes,
but the actual message has a 6 byte header (see a few lines below)
that is needed by the system. Therefore, the addresses reported by
MC will be 6 bytes less than what NL reports. I like my method, as
you can see the whole structure of a message. If you want to know
where the message contents are, either add 6 to the MC address, or
just do a hex dump from the start of the message.
Also, NiftyList doesn't check for any problems with the handle of
the next message; it'll heppily go into an infinite loop looking
at bad handles; fortunately, this is stoppable by hitting 'esc'. On
the other hand, MessageChecker verifies all handles it runs across,
so it tells you that there's either a problem with the handle of
the next message, or the Memory Manager is toasted.
MessageChecker only looks at the first 4 bytes of each message, so
if you deliberately trash memory at the NL address, MC won't catch it.
But, if you try a 'Restore', it checks the internal contents of the
messages against the backup (first 62 bytes only), which can catch a
few more errors... But, Restore can get really confused at times (it
passes my simple tests fine, but if you add/delete messages, it can
get royally confused), and possibly lock up/trash your system! Use
at your own risk.
I put in the 'Memory Dump' screen into the system takeover code
for us hackers. It displays the preceeding $50 bytes, and the first
$60 or so bytes of the actual message. The structure of messages is
as follows:
+0: Handle to next. MC didn't like this.
+4: Word: message type. So what? People mostly use names nowadays.
+6... contents of message. Can be anything.
Messages usually are unlocked, so they float around near the top
of regular memory in the IIGS. On my 4.25MB Rom 01 system, all of
the messages (except for a desktop pic) sit in bank $41. If you
have other amounts of memory in your GS, this may vary. That is why
I recommend that you become familiar with a normal message list on
your computer before doing too much more.
MessageChecker also asks the Memory Manager for all the handle info
on the actual message (which is 90% of the time going to be shorter
than then $60 bytes I printed out, but what the heck :), as well as
the owner of the byte preceeding this message. This is nice for seeing
who owned that memory, in case it looks like they overstepped their
bounds, such as GNO 2.0.4 or earlier expanding pathnames without my
FixKern204. As to going from here, you're on your own. Good luck!
For a while (until I get sick of waiting for my GS to boot), I've
re-enabled virtually every little da/init/CDev that I had floating
around, and apart from my GS being more sluggish, I haven't managed
to get anything repeatable yet.... For version 1.0, I stated my
belief in at least one (there are more) memory-trashing bug in the
Orca languages. Well, about 10 days after 1.0 came out, I ran into
one, thanks to MessageChecker. If you have Orca/M 2.0 or 2.0.1,
bug Mike Westerfield for an update.
Also, if you have artistic skills better than my own, the icon
MessageChecker shows at boot is in MessageChecker's resource fork,
id #$00000101 to #$00000105. You may edit the icon on the copy of
MessageChecker you posess; do NOT pass around modified ones. If
you think you have a cooler icon, send it on to me (either rIcon
format or regular 'Finder' icon file), and I might include it on
future releases of MessageChecker.
Also, just for fun and thanks to Frank M. Lin for bugging me to
do this, MessageChecker has the ability to display at any of a
number of icons at boot in 'random' mode. Here's how: add more
icons to the MC resource fork, numbered sequentially from the last
one. Then, in the preferences file, byte 14 past the start contains
how many icons there are. For the 1.0.2 release, this byte should
be 5. Change that byte on disk, but if you ever delete the prefs
file, it'll revert back to 5.
If you want to look thru this program in GSBug, good luck. :)
I didn't plan it this way, but it seems that GSBug has lots of
trouble 'x'ing (do a subroutine now, no step-thru) over my printing
subroutines. Also, since I use rather custom routines for dumping
things to the screen, jsr's to my print a c-string are followed by
a 3-byte addr saying where the string is in memory... Saves lots of
space by doing just that, but GSBug can't figure out what to display.
Well, my source's fine for me. :)
~~7 Vaporware news:
Today's literary term is foreshadowing. Why is it that even though
they have really underpowered GS's (2 MB or less ram, no accelerator,
no HD), people tend install all these "cool" things that they don't
really seem to use 90% of the time. (background sound/music players,
picture viewers, other fluff.) Could it be....... they feel......
inadequate? Trying to overcome some shortcomings? Have no fear,
steroids is coming your way to prop up your ego even further.
For those of you who took offense at my slamming of all sorts of
'fluff' inits/das/cdevs, note that I use my IIGS for quite a lot of
things. I get by with these addons:
"fun stuff": SoftDisk G-S's II Scroll, ReadOnly and Shortcuts,
GUIMaster, Twilight II and Gamehacker
"programming/bugfixes": GSBug, Splat! (Damn Cool. Buy it.),
NiftyList, MessageChecker, FixKern204, FixFontMgr,
FixRomBlaster, and Hacker's Helper.
"optional.. install when needed": EasyOpen 1.56, Open-It
That's about it. My GS boots/runs a lot faster when only these
things are installed, which I like. I use Pointless only when I need
a fairly weird font from my 300+ TT font collection; the rest of the
time, Times/Geneva/Shaston are enough. One suggestion: If you're
booting up and see the icon for an addon that you haven't used in the
past week or month, DISABLE IT! It's only taking up memory and boot
time.
~~8 Hellos:
The guys on IRC for GS support. (Except the random pirate, such as
the 'plomar' Milhouse). Random IRC folks were beta testers. Here's a
list of people who gave suggestions as to what should be added and
complained about things... :)
Brian Tao (Traycer): 'Top 10' list, designing the main MessageChecker
menu.
Davius Rex (DaveR): sugesting the backup/restore
Alvin Tan (Corey): Debugging info screen
Richard King: The 'Eyes and Tape' Icon
Noah Mittman: 'Says OK' Icon
Frank M. Lin (fmlin/potty/etc): boot icon exists and read from resource
fork, plus 2 more boot icons.
Jawaid Bazyar (himself) for GNO, the best IIGS development environment.
(Far stabler than the Orca shell, in my experience, especially when
my FixKern204B is installed :)
Non-IRC folks who deserve honorable mentions:
Mike Westerfield for Orca/M, which MessageChecker was written in.
Dave Lyons: NiftyList 3.4 for showing me how to find the start of the
Message list (starthandle=GetWAP(0,2), in case you're interested).
Apple Computer Co: for 6.0.1, and lot more dreams. (You can still make
them real, guys. The GS is not dead). If you guys want to integrate
MessageChecker into 6.1, or distibute it with it, I'd be honored.
Can you find the easter eggs? One requires very fast reading in one
place; the other you'll find if you're a pirating, sector-editing,
bullcrap-claiming jerk.... (That should tell you what to look for :)
~~9 Distribution:
MessageChecker is FreeWare. If you know what you are doing, and use
it to find a serious bug on the GS, good! (Then, turning around and
fixing the bug is an even better step :). Pass it around at will, but
do not sell. There are 2 conditions for the distribution of
MessageChecker:
1) Don't mess with (add/remove files or text) my .shk archive when
you distribute it, unless I give express permission. (Especially
DON'T post it to places minus all docs and credit!!! The
MessageChecker archive should contain the MessageChecker CDA, this
readme file, and an icon file.
2) MessageChecker can be placed on BBS's, software collections, and
the like, so long as no more than $5 is charged for downloading, or
any 3.5" disk including this program. (If you want to put it on a
CD-Rom, that's ok, too). Forms of distribution that are acceptable
the last time I checked are, but not limited to: Internet ftp,
Internet fsp, IRC dcc, GEnie, AOL, Compuserve, Resource Central's
A2.Central, Big Red Computer Club, and Shareware Solutions II. Names
are trademarks of respective companies and are not a recommendation
on my part.
Although the text displayed on the screen by MessageChecker isn't
in its resource fork (where it's really easy to edit), I did manage
to put 99% of it into one source file, so if you would like to do a
different language version of MessageChecker (personally, I think
a Latin version would be really spiffy :), contact me, and we can
arrange for different versions with various languages to be built.
~~10 Version History
What? You never saw all these cool betas? Awww. If you have access
to the Internet, and IRC, drop by #AppleIIGS. We're a newbie
leg-pulling, and pirate-smashing (learn to spell 'warez' right, bozos;
we might take you seriously. You pirate GNO, you feel our wrath.)
group of mostly college-age or younger males. (So the subject matter
is mostly gutter-level when it's not about the IIGS, but we're working
on cleaning it up).
Anyhow, as I can send betas to people on IRC that I know, and they
do such a good job of finding bugs (well, of all these releases, only
one that I know of had a crashing problem, and that was merely a
debugging break), and suggesting cool things that I let them beta
this. My first version (which I was content with, and would have
released had they not suggested cool things to add) merely blinked
the border when things may have been wrong. (It used a really bad
method of deterining if things were ok).
v0.1b1 First released version. Simply flashed the border when it
thought things were amiss.
v0.11b1 Small update to code: interaction with user.
v0.20b1 Cut heartbeat code in half; should be faster. User-definable
speeds and boot mode; prefs saved to disk and loaded at boot.
Added support to recognize desktop background pics in list
of messages. No limit on # of messages anymore.
v0.30b1 Now prints out inversed text a bit better. Silly Apple folks
put Mousetext in the middle of the charmap. Added: Top 10
bad messages, Backup & restore message list.
v0.40b1 Added 'system takeover' code to heartbeat task: freezes system,
asks what you want to do as soon as it detects a problem. Also
added automatic backup a bit after booting. Some border code
was also added-- when it feels things are fine after the
takeover or from the control panel, it puts the border back
the way it found it.
v0.50b1 Optimized text i/o code. Added boot icon/text, and icon file.
Ok, so I can't draw. :) Put in some help during the system
takeover for those who who never bothered to read this file.
Added memory dump for hackers. Also saves the preferences to
*/system/preferences, not the desk.accs folder.
v0.51b1 Cool new main menu format designed by Brian Tao. Copy of boot
icon in resource fork, but not used. 2 segments to shoehorn
into small system, and easier to customize for various
languages. An options menu was added, but not everything was
functional.
v0.60b1 Reads rIcon off resource fork on boot for customizability.
Rest of the options finished.... <Forgot to update rVersion
and some other strings from v0.51 to v0.60. Also, some random
strings were wrong>
v1.00f1 Made printing routines better suited to deal with bank
crossing, as the system loader can load the TEXTDATA segment
across bank bounds. Sped up text i/o some more, removed some
duplicated code. (Can you tell I have no life? :)
Version # bumped to 1.00 for release.
v1.01f1 Cleaned up text a little. Checks for ProDOS 8 before saving
prefs. New icons thanks to Richard King and Noah Mittman,
ability to display random icon at boot.
v1.02f1 Two more icons by Frank M. Lin. rProgramInfo added for
compatibility with something, dunno what yet. Actually uses
00c02e for random #s for more randomness. Ability to display
any of a number of icons from resource fork, see hacker section
above.
~~11 About the programmer:
Since September 1992, I, Nathan Mates, have been an undergraduate
at The California Institute of Technology, aka Caltech. As Caltech is
a phenomenal university, it also costs a bit, so any donations ($,
Disks, other programs) to help defray the costs of my time helping the
Apple II community from within this prestigious university would be
appreciated.
My mailing address (good all year):
MSC #850, Caltech
Pasadena, CA 91126-0001
Email via Internet:
nathan@cco.caltech.edu
(Other systems can usually send email to the internet; ask your local
wizard.)
I've written a lot of little things, here's a few names off the top
of my head. Some of these things are published, and if you see them
floating around, report piracy!!!! Writing things to be published has
given me a summer job, and some royalties. If you pirate my stuff,
that means you're cheating me personally out of some $, and when
caning is legal again in the U.S., you're gonna get hit!
Some pirating bastards have said that "U can't/haven't program[ed]
sh*t". Is that an insult? Watch who you throw that comment at before
you say it. Well, just in case you idiots get around to reading this
message, let me just say that GSHacker (my IRC nick) has been a busy
little programmer, and programmed quite a lot of things, and they're
quite fine in my mind. Go back to the rock you crawled out from under;
you're a disgrace.
If any of the freeware/shareware things on this list seems
interesting, drop me a line, and I'll be more than happy to send it
on to you.
Patch Programs:
FixKern204B, and FixFontMgr601. Freeware. Fix problems in the
GNO 2.0.4 shell & TMTerm 1.1, and the Font Manager from System 6.0.1,
respectively.
Finder Extras:
Rebuilder, published on SoftDisk G-S #47 or 48, I think. Rebuilds
the system desktop by collecting up all of the rBundles on local
disks.
CDAs:
GameHacker, MessageChecker, Inverter, Hacker's Helper, Wizardry 5
cheaters. All freeware.
NDAs:
PowerGrid, MultiTris, Minehunt. Shareware, about $5 each
Shredder, Fun House, LED Message, Mouse Mileage, SoundFileFixer. All
Freeware.
Shortcuts. Published by Softdisk G-S, either #45 or 46
Twilight II blankers:
Clocks, LED Message, MiniFireworks, Modern Art, Perspective, Sharks
and Fish, TunnelGame. Published with Twilight II 1.1
Fish, Flames, Globe, MineHunt, PowerGrid, Snowflakes, Spirals,
Swirls, Toast, Voting, some more that exist only in my mind. To be
published with Twilight II 2.0
Unreleased: (too much of a hack to be used anywhere else, I guess)
PSWidth, toP16, delta/undelta. Random shell utils.
RandomT2. Init that shuffles modules every 45 seconds in
Twilight II 1.1
As always, these programs are dedicated to Ahram Kim, my girlfriend!
~~12 Signoff
Apple II Infinitum!!!
(For those of you who don't know Latin, "Apple II Forever")