Konilo, second pass

2024-03-13 (Previous article: “First experiences with Konilo”)

This time I'm starting with the Nightly Snapshot tarball from (http://konilo.org/), because it's been quite a while since 2023.10 and I'm expecting a number of rough edges have been sorted out.

Less is Better

Unpacking the tarball results in a significantly cleaner and smaller set of files, and a QUICK-START.txt that points you directly to starting the system easily.

The Konilo Welcome page now only lists three commands, and some of the TUI is using colour-coding, which looks quite effective.

How is ilo.blocks built?

The snapshot doesn't contain much, besides a working ilo with several alternative VMs.

The source available via fossil has a load more, but still the blocks file comes basically “from above”. I'm getting the impression that this is because Konilo is self-hosting, and the author is dogfooding this environment; there is no “source” for the blocks, only the “current state” chosen for release.

This seems to be very consistent with the ambition of Konilo; but I'm not entirely sure it's the best way to encourage contribution from outside.

How to determine the source of a word?

This might be a generic question about Retro Forth itself (I'm not sure there's a handy way to decompile words), but seeing as the blocks store the text source for many of the words in use, finding out how to at least see the definition is good.

The catalogue viewer is handy – although it doesn't actually seem to tell you which block is currently being displayed, so you have to keep a good track of things yourself, or constantly re-assert a known state.

You can look through the list of blocks, and hope that the title texts displayed help you decide where to look next :-

a | Welcome to Konilo                                                | 0
b | (startup) (set_blocks,_load_extensions)                          | 1
c | (startup) (local_configuration)                                  | 2
d |                                                                  | 3
e |                                                                  | 4
f | (std) (constants)                                                | 5
g | (std) (s:) (constants)                                           | 6
h | (std) (c:) (classification)                                      | 7
i | (std) (c:) (conversions)                                         | 8
j | (std) (n:) (even,odd,sign,square,sqrt)                           | 9
k | (std) (v:)                                                       | 10
l | (std) (buffer:)                                                  | 11
m | (std) (s:) (begins-with,ends-with)                               | 12
n | (std) (s:) (contains/s?) (index/s)                               | 13
o | (std) (bit:) (bit-access)                                        | 14
p | (std) (b:) (byte-addressing)                                     | 15
---------------------------------------------------------------------------
1 Previous     2 Next         3 Display      4 Jump         5              
6              7              8 Rename       9 Leap         0 Quit         

But you could be a while paging through this list! Instead, use the “Leap” command to get to your destination.

In this case, I'd like to see where the manual command is getting its data from (because I want to chase down a simple typo I'd spotted). So, I think I'm supposed to Leap to the definition with the Catalogue request “9manual” ... but that doesn't seem to give me any meaningful results at all. “9catalogue” on the other hand does provide me with a bunch of related blocks :-

a | (tools:catalogue) (variables,_actions)                           | 80
b | (tools:catalogue) (actions,_continued)                           | 81
c | (tools:catalogue) (key-bindings)                                 | 82
d | (tools:catalogue) (key-bindings)                                 | 83
e | (tools:catalogue) (key-bindings)                                 | 84
f | (tools:catalogue) (hints)                                        | 85
g | (tools:catalogue) (display)                                      | 86
h | (tools:catalogue) (top-level)                                    | 87
i |                                                                  | 88
j |                                                                  | 89
k |                                                                  | 90
l |                                                                  | 91
m |                                                                  | 92
n |                                                                  | 93
o |                                                                  | 94
p | catalogue shortcuts ============================================ | 95
---------------------------------------------------------------------------
1 Previous     2 Next         3 Display      4 Jump         5              
6              7              8 Rename       9 Leap         0 Quit         

Looking at page h does indeed result in some useful source :-

a | (tools:catalogue) (top-level)                                    |
b |                                                                  |
c | :catalogue (-)                                                   |
d |   [ &catalogue:actions &catalogue:hints &catalogue:display ]     |
e |   ti:application ;                                               |
f |                                                                  |
g | &catalogue \catalog                                              |
h |                                                                  |
i |                                                                  |
j |                                                                  |
k |                                                                  |
l |                                                                  |
m |                                                                  |
n |                                                                  |
o |                                                                  |
p |                                                                  |
---------------------------------------------------------------------------
1 Previous     2 Next         3              4 Jump         5 Run          
6 Save         7 Load         8              9 Leap         0 Quit         

So now I know a little more, including that there's an alias for the catalogue command allowing me to type a little less ... catalog!

That's probably enough for now, there's a lot more hacking to do here and I'll probably have to ask the author some questions to make sure I'm getting the terminology correct for the current names of commands and concepts before writing much more :–)