Hello, I'm going to spoke about a little utility that I wrote around 1993, but only released in 1996 in Aminet.
First I'm gonna present myself a bit. A trip down memory lane...
My name is Kamel Biskri and like many of you of my age I experienced games before computers. Back in the day it started with the pocket electronics games like Tandy Cosmic 1000 Fire Away, Puckman, Donkey Kong to name a few.
Fire Away, Donkey Kong and Puckman
This was my first introduction to games and I loved it. Later on, I went the usual route. My friends father bought a Sinclair ZX81, we play with it, typed programs, modified them and before we realized we were hooked, maybe addicted is a better word to describe that feeling. Then in 1983 I beg my parents to buy an Oric One because it won the Videor price in 1983 instead of a ZX Spectrum and they did (thanks Dad). The C64 was out of reach. Three years later, I got a ZX Spectrum+ for my birthday (thanks Mom).
Oric 1, ZX Spectrum+ and ZX81
Defender Of The Crown
Graphic interface, icons and borders
When AmigaOS 2.0 came out in 1990, I was thrilled like many amigans I guess. I was a fan of the Next GUI. I heard later on, in a speech given by Peter Cherna at the Amiga 30th Anniversary that indeed the look of AmigaOS 2.0 was inspired by the Next Operating System GUI.
Then, maybe it is a call to the graphics.library as the borders were a call to RectFill() and Draw() functions (that was my guess). Maybe then it could be the workbench.library as the icons are handled by it. I had to try all those options to be able to avoid the borders to be drawn. Remember that any library could call functions of any others.
I disliked the borders but I also disliked the overhead added to the icons drawing. I thought that the icons display was slow. It was logical that avoiding the borders to be drawn will also increase the performance even if it's a little. The Blitter had more important things to do!
I was searching for a tool to help me locating who was doing the border drawing around the icons. I found a tool by Carolyn Scheppner called Wedge. "Wedge allows you to monitor the library function calls of system and application tasks. This is useful for both debugging and the optimization of software. Wedge reports the name and address of the task calling the function".
I played with the Workbench to make it draw the icons and Wedge gave me an output of results. IIRC it was not sufficient, what Wedge was reporting didn't told me who was the culprit. So my quest for another tool to help me started.
I found another tool, this time written by Michael Sinz of Enforcer fame among others things called SegTracker. What interested me was this part: "When SegTracker is installed, it will scan the ROM for ROM modules and add their locations to the tracking list such that addresses within those modules can be identified. Note that the offsets from the module is based on the location of the module's ROMTAG. The NOROM option will prevent this feature from being installed."
Those tools helped me and I was able to point out the culprit, it's famous name is the Workbench. It was the culprit that I was looking for. It seems obvious but it has to be proved! It could have been the icon.library I guess.
Delete the borders
Now I was asking to myself the question how can I avoid this to happens? How could I stop the drawing of the borders around the icons? I needed to investigate more. At the time my setup was an A500 with an A590 lend by a friend (Éric Laffont). This time around I decided to do it at a lower level. I unplugged the A590 and attached my trusty Action Replay III to my beloved A500. I booted into the Workbench put a breakpoint to the Draw() and RectFill() functions.
When the icons were drawn it triggered the Action Replay monitor and I started to trace the ROM. Unfortunately the calls to the functions that draw the borders were not at a location where I could patch them in the workbench.library using a call to SetFunction() of Exec (I didn't knew first about it, remember that documentation back then were hard to get, and so I wrote my own patching routine prior to that). I needed to find another way of doing it. It was obvious now that I should patch the Draw() and RectFill() functions of the graphics.library but the problem is that everybody is using those calls so I cannot simply avoid the functions calls for everybody. It should be only when it is the workench.library calling and only when it draws the borders around the icons.
I didn't find any better solution back then but while tracing the calls to Draw() and RectFill() functions I looked at the stack frame. After some investigations I came to the conclusion that when the borders were drawn around the icons the value #$00000008 was always located at the same place in the stack, if the value I was looking for was there I checked if it was the Workbench who was calling and if it was the case I skipped the calls to Draw() and RectFill() if not I let the normal flow continue.
My solution was not perfect as I noted some bizarre artefacts when using some icons with the Nofill patch. I can't recall if they were standard icons or not.
That was it, I was with a solution that fit my needs and I was the only one using it for years. One day though another friend of mine (Jérôme Chesnot) looked at my Workbench setup and say something along the line "why does your Workbench didn't have any borders around the icons?" He told me that he found that the look was better without them and I was a bit surprised as I wrote the patch only for my own needs and wasn't expecting any interest by others. I told him that I wrote the patchs and he told me that I should upload it to Aminet. I answered saying I was too lazy to do so but that I could give him the pathchs and let him upload them himself.
So, the 25th of July 1996, two days after the 11th Amiga anniversary, the first program to remove the borders around Amiga icons was available for everybody to try.
Avec et sans NoFillNoDraw
Jérôme Chesnot asked what I wanted for it and I said how about cardware? (it could have been him that suggested the cardware, remember it was 24 years ago). I received some cards with nice words in them from many parts of the world and I remember that I felt proud, knowing that other amigans could enjoy my small tools was quite a nice feeling.
You can find below the examples that Jérôme Chesnot uploaded with the patchs.
NoFillNoDraw in a personalized Workbench
In the end, if you have an idea of a patch don't hesitate to ping me, I've an account on AmigaImpact, EAB, Amiga.org and AmigaWorld.net under the nick "Kamelito".
One more thing, I made a patch for Lucas Janin back then because I wanted to use the 3D application Imagine at higher resolution than the one provided by the program. I wrote a little patch call PatchImagine for him. This gave me the idea to extend this patch to all programs, work started in this regard, but one day a guy uploaded NewMode into Aminet and it was the end of it.