Everyone knows what a "toolkit" in QL parlance is. But some of you may not
be aware that there are two fundamental types of toolkit:
1) System extensions, ie something that, usually, enhances, and affects
the whole system. For Qdos some of the main ones are TK2, ptr_gen, wman and
hot_rext. But there are other, less illustrious, ones too: TURBO_TK,
QLIB_run, Qptr, ptrmen_cde, ENV_BIN, etc.
The main thing with systems toolkits is that they should be loaded at boot
time and remain present throughout a session, from boot up to shut down.
Enough of that. This piece is about that other type of toolkit:
2) The ad hoc toolkit that adds functionality to specific programs. You
want them while a specific program is running, but youd prefer them to go
away once they are no longer needed. The simplest way to achieve that under
Qdos is to compile your program with Qlib or Turbo and include those
toolkits in the compilation. Once the program has terminated, the toolkit
vanishes with it, leaving an uncluttered nametable and freeing up memory.
With SBASIC (SMSQ/E) and MBASIC (Minerva) you have multitasking BASIC
interpreters, so toolkits loaded by your program in those will also vanish
when the program terminates and keywords wont clash with any in your main
interpreter. No absolute need to compile there, except for the other
advantages of compilation.
The problem with many off-the-shelf ad hoc toolkits is, to my mind, that
they often come in large collections. This means that though you may only
need a single command from a toolkit you may have to include tens of other
stuff that you dont need.
Now, one may think, what are a few extra bytes in this day and age with
multi-megabytes of memory? It might not matter that much, especially not to
emulator users. But Im old enough to remember that ancient derogatory term
"bloatware", and like the old grandfather who lived through the privations
of the war, frantically scraping out the last molecules of jam from the
jar, my OCD compels me to try to be as parsimonious as possible with
resources (although, admittedly, for the sake of ease and sanity, I have
let up a little in some departments).
Anyway, my point, and the burden of this whole essay, is that: What if
there were a way to include only those commands that one needs, preferably
without creating a lot of extra work? Some years ago I actually I asked
myself that question - and answered it too. This is one answer:
https://www.knoware.no/htm/Keywords.htm
The list shows of some 140++ keywords, most of them compatible across all
systems, that accomplish a variety of tasks not readily available to the
basic BASIC. Many similar commands can be found in other collections, but
hear this: This is one of the largest and simultaneously one of the
smallest non-system QL keyword collections in the world! Most of these
keywords can be used singly, and they can (relatively) easily be combined
into unique collections according to specific needs.
One doesnt need to know how to program in assembler to use them, only how
to wield a linker and assembler to put them together. Some rambling
instructions can be found here:
https://www.knoware.no/doc/toolkits.htm
Im currently working on a system that will do this automatically, based on
Qlib's EXT_PROC/EXT_FN keyword list. Simply add the name of some command
you wish to use to the list, and when ready, press a key and the toolkit
containing those commands will be built for you. It will take some time to
complete the project as it requires some reorganisation of the collection,
but as of now it works for me..
Enough! I better get on with the project!