git @ Cat's Eye Technologies Chrysoberyl / master article / Tools.md
master

Tree @master (Download .tar.gz)

Tools.md @masterview rendered · raw · history · blame

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
Tools
=====

*   image_url: https://static.catseye.tc/images/illustrations/Allen_wrench_and_screw_(PSF).jpg

Note that the precise distinctions between a Tool, a Platform, and a Library are debatable,
and entries may be categorized somewhat arbitrarily.

Tools for Retrocomputing platforms might be found in the [Retrocomputing][] article instead.

[Formats][] often have tools for processing them, and those are listed along with the format
instead of here.

Note that Cat's Eye Technologies also maintains some [forks](Forks.md) of some tools.

_Note also that there are several novel generators in here, and possibly other kinds of_
_generators, that should probably be in their own "Generators" article rather than here in "Tools"._

### Chainscape

*   inception-date: Nov 2023
*   reference-distribution: [Chainscape distribution](https://catseye.tc/distribution/Chainscape_distribution)

Chainscape is the name of a project, undertaken during
[NaNoGenMo 2023][], to explore the algebraic properties
of Markov chains.  In particular, it can be used to find
the intersection of two or more Markov chains (which is
itself a Markov chain and can be walked randomly to
produce a sequence.)  It was used to generate the novel
[The Other and the Same][].

### DAM

*   summary: You've tried the Document Object Model, now try the Document *Awesome* Model
*   inception-date: ca 2019
*   development-stage: not fully complete
*   reference-distribution: [DAM distribution](https://catseye.tc/distribution/DAM_distribution)

`DAM` is a little Javascript library for creating trees of [HTML5][] elements
in the DOM.  It supercedes the `element-factory` module from [yoob.js][],
and Cat's Eye Technologies' newer [gewgaws](article/Gewgaws.md) use it
instead of yoob.js for creating their control panels.  It's rather a lot like
[hyperscript](https://github.com/hyperhype/hyperscript) except more minimal
and, of course, awesomer.

#### Implementation: DAM (Javascript)

*   reference: true
*   license: Public Domain
*   host-language: [Javascript][]
*   host-platform: [HTML5][]

### DiskSumo

![DiskSumo main menu](https://static.catseye.tc/images/screenshots/DiskSumo.png)
![DiskSumo during transfer](https://static.catseye.tc/images/screenshots/DiskSumo%20%28transfer%29.png)

*   inception-date: ca 2005
*   reference-distribution: [DiskSumo distribution](https://catseye.tc/distribution/DiskSumo_distribution)
*   online @ [archive.org](https://archive.org/details/disksumo)

DiskSumo is a program to transfer disk images off a Commodore 64 over
the RS-232 port via the XMODEM protocol at 300 baud.

#### Implementation: DiskSumo (BASIC)

*   reference: true
*   license: Public Domain
*   host-language: [Commodore BASIC 2.0][]
*   host-platform: [Commodore 64][]

### Dissociated Parse

*   inception-date: Nov 2021
*   reference-distribution: [Dissociated Parse distribution](https://catseye.tc/distribution/Dissociated_Parse_distribution)

Dissociated Parse is not really a tool, rather, it is an algorithm;
specifically it is an adaptation of the [Dissociated Press](https://en.wikipedia.org/wiki/Dissociated_press)
algorithm to work on parse trees (rather than the sequential list of
words it conventionally works on).  It was developed during
[NaNoGenMo 2021][] and was used to generate the novel
[The Lion, the Witches, and the Weird Road][].

#### Implementation: Dissociated Parse (Python)

*   reference: true
*   license: MIT License
*   host-language: [Python][]

### define-opaque

*   inception-date: Jan 2023
*   reference-distribution: [define-opaque distribution](https://catseye.tc/distribution/define-opaque_distribution)

`define-opaque` is a library for R5RS Scheme that adds a facility for
creating opaque data types in a simplistic fashion.  It was written
based on some of the ideas in [Information Hiding in Scheme][].

It exists partly because I actually wanted to implement some of those
ideas in Scheme, to support building things such as
[LCF-style theorem provers](https://codeberg.org/catseye/The-Dossier/src/branch/master/article/LCF-style-Natural-Deduction)
in Scheme, and abstract data types are otherwise difficult to
implement in Scheme.

#### Implementation: define-opaque.scm

*   reference: true
*   license: Public Domain
*   host-language: [Scheme][]

### ellsync

*   inception-date: 2018
*   development-stage: work in progress
*   reference-distribution: [ellsync distribution](https://catseye.tc/distribution/ellsync_distribution)

**ellsync** is an opinionated [poka-yoke][] for [rsync][].  "Opinionated" because
it was designed for a particular use case for rsync (offline backups).  "Poka-yoke"
because it exposes a restricted interface to rsync, which prevents using it in dangerous ways.

#### Implementation: ellsync (Python)

*   reference: true
*   license: Public Domain
*   host-language: [Python][]

### Funicular

*   summary: Scripts to set up dev environments on various OS'es on sundry architectures
*   inception-date: Jun 17 2014
*   development-stage: not fully complete
*   reference-distribution: [Funicular distribution](https://catseye.tc/distribution/Funicular_distribution)

**Funicular** is a system that semi-automates the creation of development
environments on eclectic architectures. "Semi-automate" means it automates
what it can, and provides repeatable instructions for you to follow for
what it can't.

"Eclectic architectures" is not terribly-well defined, but it includes
retrocomputing and esoteric architectures.  Basically, if you've got an
emulator for it and install images for it, you might be able
to outfit and run a system for it, using Funicular.

It replaces [Amiga Gondola][].  It can handle such OS/emulator combinations
as [NetBSD][] under [QEMU][], [FreeDOS][] under [QEMU][],
[AmigaDOS 1.3][] on an [Amiga 500][] under [E-UAE][],
[Applesoft BASIC][] on an [Apple II][] under [linapple][],
and [Commodore BASIC 2.0][] on a [Commodore 64][] under [VICE][].

#### Implementation: funicular

*   reference: true
*   license: Public Domain
*   host-language: [Bourne shell][]

### hatoucan

*   summary: Tokenizer for Commodore BASIC 2.0 programs
*   inception-date: 2015
*   development-stage: not fully complete
*   reference-distribution: [hatoucan distribution](https://catseye.tc/distribution/hatoucan_distribution)

`hatoucan` is a tokenizer for [Commodore BASIC 2.0][] programs.
It is compatible with a subset of `petcat`, but is written in
Python and is in the public domain.

#### Implementation: hatoucan (Python)

*   reference: true
*   license: Public Domain
*   host-language: [Python][]

### kinoje

*   inception-date: 2017
*   development-stage: work in progress
*   reference-distribution: [kinoje distribution](https://catseye.tc/distribution/kinoje_distribution)

**kinoje** is a templating-based animation tool.  A provided template is filled out once for each
frame of the animation; the result of the template expansion is used to create a still image; and
the resulting sequence of images is compiled into the finished movie.

#### Implementation: kinoje (Python)

*   reference: true
*   license: Public Domain
*   host-language: [Python][]

### Lariat

*   inception-date: 2021
*   development-stage: work in progress
*   reference-distribution: [Lariat distribution](https://catseye.tc/distribution/Lariat_distribution)

Lariat is an abstract data type for proper lambda terms, consisting of four operations:
`app`, `abs`, `var`, and `destruct`.  Each of the operations produces a proper lambda
term as its result, i.e. bound terms are never exposed to the user of the ADT.  Lariat is
a total data type in the sense that all of the operations are defined on all
properly-typed input values.  It is a higher-order data type in the sense that `destruct`
takes function values as parameters.

#### Implementation: Data.Lariat

*   reference: false
*   license: Unknown license
*   host-language: [Haskell][]

### MARYSUE

*   summary: An engine for generating non-interactive fiction
*   inception-date: Nov 2015
*   development-stage: not fully complete
*   reference-distribution: [MARYSUE distribution](https://catseye.tc/distribution/MARYSUE_distribution)

MARYSUE is the story generator used to generate the novel
[A Time for Destiny][] for [NaNoGenMo 2015][].

#### Implementation: MARYSUE (Python)

*   reference: true
*   license: Public Domain
*   host-language: [Python][]

### Parc

*   summary: The simplest parser combinator library that could possibly work
*   inception-date: Dec 2022
*   development-stage: not fully complete
*   reference-distribution: [Parc distribution](https://catseye.tc/distribution/Parc_distribution)

Parc is a particularly simple parser combinator library, and a series of
experimental variations on this theme, written in Haskell.

#### Implementation: Parc.hs

*   reference: true
*   license: MIT License
*   host-language: [Haskell][]

### Philomath

*   summary: An LCF-style theorem prover written in ANSI C
*   inception-date: Feb 2022
*   development-stage: not fully complete
*   reference-distribution: [Philomath distribution](https://catseye.tc/distribution/Philomath_distribution)

Philomath is an LCF-style theorem prover written in ANSI C.  It supports classical propositional
logic in a Natural Deduction system with labelled assumptions.

#### Implementation: Philomath (ANSI C)

*   reference: true
*   license: Public Domain
*   host-language: [ANSI C][]

### relwrite

*   summary: relates strings to strings via a grammar in the Chomsky hierarchy
*   inception-date: Nov 2022
*   development-stage: not fully complete
*   reference-distribution: [relwrite distribution](https://catseye.tc/distribution/relwrite_distribution)

relwrite relates strings to strings via a grammar in the Chomsky hierarchy.

#### Implementation: relwrite

*   reference: true
*   license: MIT License
*   host-language: [Python][]

### shelf

*   summary: A "package manager" that doesn't actually install anything
*   inception-date: 2016
*   development-stage: work in progress
*   reference-distribution: [shelf distribution](https://catseye.tc/distribution/shelf_distribution)

`shelf` is a "package manager" which doesn't actually install any files.
Instead, it stores the source trees of sundry packages in a single directory,
creates link farms to the interesting files within those trees,
and manages your search paths to include those link farms.
those trees. The source trees are typically the working directories of
local git or Mercurial clones, or they can be source distributions from tarballs.
`shelf`, written in Bourne shell, is a replacement for [toolshelf][], which was
written in Python.

#### Implementation: shelf.sh

*   reference: true
*   license: Public Domain
*   host-language: [Bourne shell][]

### SITU-MON

![SITU-MON](https://git.catseye.tc/SITU-SOL/blob/master/doc/bootstrap-zero/images/tumblr_inline_nrdcglfU4p1tvda25_540.png?raw=true)

*   inception-date: Jul 2015
*   development-stage: mature
*   reference-distribution: [SITU-SOL distribution](https://catseye.tc/distribution/SITU-SOL_distribution)
*   online @ [archive.org](https://archive.org/details/situ-mon-c64)

SITU-MON is a machine language monitor for [6502][]-based
systems, written (by hand!) during RetroChallenge 2015/07 and entered into
an emulated [Commodore 64][] using [SITU-PAN][].  It was in turn used to
enter [SITU-SOL][].

#### Implementation: SITU-MON (Commodore 64)

*   reference: true
*   license: Unknown license
*   host-language: [6502 machine code][]
*   host-platform: [Commodore 64][]

### SITU-PAN

![SITU-PAN](https://git.catseye.tc/SITU-SOL/blob/master/doc/bootstrap-zero/images/tumblr_inline_nr19fai3D41tvda25_540.jpg?raw=true)

*   inception-date: Jul 2015
*   development-stage: mature
*   reference-distribution: [SITU-SOL distribution](https://catseye.tc/distribution/SITU-SOL_distribution)
*   online @ [archive.org](https://archive.org/details/situ-pan-c64)

SITU-PAN is a *front-panel switches simulator* for the [Commodore 64][].
It displays 8 virtual LEDs and 8 virtual dip switches on the screen.
The LEDs display the bit pattern at the current address in memory.
Via the keyboard, the switches may be toggled, a new bit pattern
written into memory, and the address advanced. In this way, machine
code programs may be entered into memory, and then run.
SITU-PAN was written during RetroChallenge 2015/07 for the purposes
of entering [SITU-MON][] into an emulated C64.

#### Implementation: frontpanel.bas

*   reference: true
*   license: Unknown license
*   host-language: [Commodore BASIC 2.0][]
*   host-platform: [Commodore 64][]

### tagfarm

*   inception-date: Apr 2020
*   development-stage: not fully complete
*   reference-distribution: [tagfarm distribution](https://catseye.tc/distribution/tagfarm_distribution)

`tagfarm` is an ultra-lightweight, filesystem-based categorization system for arbitrary
files.  Each tag is implemented as a directory full of symbolic links to files with that tag.

#### Implementation: tagfarm (Python)

*   reference: true
*   license: Public Domain
*   host-language: [Python][]

### The Swallows Engine

*   summary: An engine for generating non-interactive fiction
*   inception-date: Nov 2013
*   development-stage: not fully complete
*   reference-distribution: [The Swallows distribution](https://catseye.tc/distribution/The_Swallows_distribution)

The Swallows Engine is the engine used to generate _The Swallows_
series of generated novels for [NaNoGenMo 2013][].

#### Implementation: The Swallows Engine (Python)

*   reference: true
*   license: Public Domain
*   host-language: [Python][]

### tree

*   inception-date: 2014
*   development-stage: mature
*   reference-distribution: [tree distribution](https://catseye.tc/distribution/tree_distribution)

Cat's Eye Technologies' `tree` is a command-line tool that displays an
indented directory tree, similar to "The Tree Command for Linux" except
simpler.

#### Implementation: tree (Python)

*   reference: true
*   license: Public Domain
*   host-language: [Python][]

### T-Rext

*   summary: Tidier-upper for generated text
*   inception-date: Nov 2014
*   development-stage: mature
*   reference-distribution: [T-Rext distribution](https://catseye.tc/distribution/T-Rext_distribution)

T-Rext is a command-line filter that attempts to clean up spaces and
punctuation in a text file.  Its purpose is so that, when you are writing
a text generator, such as a Markov processor, you need not worry too much
about its output format; just toss its output through T-Rext when you're
done to make it more presentable.

#### Implementation: t-rext (Python)

*   reference: true
*   license: Public Domain
*   host-language: [Python][]

### yastasoti

*   inception-date: 2018
*   development-stage: work in progress
*   reference-distribution: [yastasoti distribution](https://catseye.tc/distribution/yastasoti_distribution)

**yastasoti** is yet another script for archiving stuff off teh internets.
It supports consulting an _archive router_ to determine where each stuff
is archived to.

#### Implementation: yastasoti (Python)

*   reference: true
*   license: Public Domain
*   host-language: [Python][]

### yucca

*   summary: Static analyzer for 8-bit BASIC programs
*   inception-date: 2012
*   reference-distribution: [yucca distribution](https://catseye.tc/distribution/yucca_distribution)

`yucca` is a dialect-agnostic static analyzer for 8-bit BASIC
programs.  It can find `GOTO`'s and `GOSUB`'s
which refer to non-existent line numbers, or line numbers which contain
only a `REM`, among a few other modest features.

#### Implementation: yucca (Python)

*   reference: true
*   license: MIT License
*   host-language: [Python][]

Archival Tools
--------------

### TPiS

*   subtitle: **Total Procedures in Scheme**
*   summary: Totality-checker for Scheme procedures
*   inception-date: ca 2006
*   development-stage: archival
*   reference-distribution: [TPiS distribution](https://catseye.tc/distribution/TPiS_distribution)

This is a static analyzer, written in Scheme, which can check if
given Scheme procedures are total (always terminate, on any input) by
checking that they are specified primitive-recursively.  What's more, it
is written almost entirely in a primitive-recursive style, so it can
check itself!

#### Implementation: TPiS (Scheme)

*   reference: true
*   license: BSD license
*   host-language: [Scheme][]

### yoob.js

*   summary: A framework for interactive esolang implementation
*   inception-date: Oct 4 2012
*   development-stage: not fully complete
*   reference-distribution: [yoob.js distribution](https://catseye.tc/distribution/yoob.js_distribution)

`yoob.js` is a framework for implementing esoteric programming languages
in Javascript/HTML5.  It has some differences from the earlier [yoob][]
framework, which is in Java.

#### Implementation: yoob.js (Javascript)

*   reference: true
*   implementation-type: framework
*   license: Public Domain
*   host-language: [Javascript][]

[AmigaDOS 1.3]: ../article/Project%20Dependencies.md#amiga-500
[Amiga 500]: ../article/Project%20Dependencies.md#amiga-500
[E-UAE]: ../article/Project%20Dependencies.md#amiga-500
[FreeBSD]: https://www.freebsd.org/
[Amiga Gondola]: ../article/Archived.md#amiga-gondola
[NetBSD]: https://netbsd.org/
[FreeDOS]: ../article/Project%20Dependencies.md#ms-dos
[Commodore BASIC 2.0]: ../article/Project%20Dependencies.md#commodore-basic-20
[Commodore 64]: ../article/Project%20Dependencies.md#commodore-64
[A Time for Destiny]: ../article/Texts.md#a-time-for-destiny
[NaNoGenMo 2013]: ../article/Events.md#nanogenmo-2013
[NaNoGenMo 2015]: ../article/Events.md#nanogenmo-2015
[NaNoGenMo 2021]: ../article/Events.md#nanogenmo-2021
[NaNoGenMo 2023]: ../article/Events.md#nanogenmo-2023
[6502]: ../article/Project%20Dependencies.md#6502
[6502 machine code]: ../article/Project%20Dependencies.md#6502
[SITU-PAN]: ../article/Tools.md#situ-pan
[SITU-MON]: ../article/Tools.md#situ-mon
[SITU-SOL]: ../article/Languages.md#situ-sol
[Retrocomputing]: https://catseye.tc/article/Retrocomputing
[Formats]: ../article/Formats.md
[The Platform]: ../article/Platforms.md#the-cats-eye-technologies-platform
[yoob]: ../article/Archived.md#yoob
[QEMU]: ../article/Project%20Dependencies.md#ibm-pc-compatible
[VICE]: https://vice-emu.sourceforge.io/
[Bourne shell]: ../article/Project%20Dependencies.md#bourne-shell
[Apple II]: ../article/Project%20Dependencies.md#apple-ii
[Applesoft BASIC]: ../article/Project%20Dependencies.md#applesoft-basic
[toolshelf]: ../article/Archived.md#toolshelf
[Python]: ../article/Project%20Dependencies.md#python
[Javascript]: ../article/Project%20Dependencies.md#javascript
[Lua]: ../article/Project%20Dependencies.md#lua
[Perl]: ../article/Project%20Dependencies.md#perl
[Haskell]: ../article/Project%20Dependencies.md#haskell
[Scheme]: ../article/Project%20Dependencies.md#scheme
[ANSI C]: ../article/Project%20Dependencies.md#ansi-c
[rsync]: https://rsync.samba.org/
[poka-yoke]: https://en.wikipedia.org/wiki/Poka-yoke
[linapple]: https://github.com/linappleii/linapple
[HTML5]: https://www.w3.org/TR/html5/
[yoob.js]: ../article/Tools.md#yoobjs
[The Lion, the Witches, and the Weird Road]: ../article/Texts.md#the-lion-the-witches-and-the-weird-road
[Information Hiding in Scheme]: https://codeberg.org/catseye/The-Dossier/src/branch/master/article/Information-Hiding-in-Scheme/
[The Other and the Same]: ../article/Texts.md#the-other-and-the-same