Tenne-C programming language
from Good Ol' Boy Systems.
NOTE: The following is rated PG; programmer's guidance should be exercised.
For all those unfamiliar with Tenne-C, the comment delimiter is WHISPER.
The computer stores all WHISPERed comments in memory, but the instruction
execution unit can never quite decode them, so they are ignored. Some beta
site users have reported an occasional problem with IBM clone machines.
These machines may get slightly confused or mildly paranoid due to the
WHISPERed remarks in the background, but the effects are usually limited to
an occasional mutterance printed on the display. Note that the optional
extended obscenity instruction set should not be installed in clone
machines. Should such a machine crash, you could be arrested for making an
obscene clone fall.
General Idiosyncrasies of Tenne-C
Data is referred to as Ciphers; the start of a data section should be so
labeled. Data which is external to a given file is denoted by the term
YONDER, similar to the EXTERNAL directive.
Single arguments are not passed to functions individually; rather, multiple
passes are made simultaneously to all functions. Thus, in Tenne-C, we speak
of feuds rather than arguments. This is an extremely powerful, albeit
somewhat destructive feature of Tenne-C.
Relational operators work similarly to those in other languages, but in
Tenne-C these are called kinfolk operators. It will be noted that some of
these interrelate better than others. Kinfolk operators include:
Bettern (mines) bettern (yourn)
Boutlack (mines) boutlack (yourn)
Nearlyboutlack (mines) nearlyboutlack (yourn)
Worsern (yourns) worsern (mine)
Nearlyboutsgoods (yourns) nearlyboutsgoods (mine)
Lack (mines) lack (yourn)
Sortalack (mines) sortalack (yourn)
Differrtn (yourns) differrtn (mine)
The Boolean operators are somewhat different than most. Note the lack of
AND and OR operators:
Variable assignments must be explicitly declared with the AHDODECLARE
directive, although one declaration can serve a block of variables.
Variable assignments can be quite interesting and flexible, as can be seen
in the following examples:
ahdodeclare: a's nearlybout 3
b's zacktly 4
c's bout 2
d's morerless TWEV
e's 2, an imeanit WHISPER a constant
Certain constants are implicit, such as SCOSHE, LIBBIT, FAV, SEM, NAN, LEM,
TWEV, THUTTY, etc. Such obvious values need not be declared, as they reside
in the liberry books.
Arrays must be declared with the AHDODECLARE statement, and are referred to
as messa, as in:
Ahdodeclare(dinner) messa(fish) TWEV
Note that until you get the hang of array declarations, you may encounter a
SYNTEXT ERROR; this is a syntax error which has been taken out of context.
The program section is referred to as CHORES and is labeled as such.
Several loop and conditional constructs are available. These include the
* Hauloff and do
* Fer, til loop
* Whol, longasyerattit
* Iffen, theyen
* Yehbut, nowait
Code is grouped into hopefully functional units with the standard,  and
() operators, although they are given slightly different names. They are
still called braces, but the  are called kibbuls and the () are called
bits. Thus, you can have braces and bits or kibbuls and bits. Braces and
kibbuls are, of course, meaningless.
If a KIBBITZ ERROR is encountered at compile time, that is a single kib [
with a pair of bits (). The ommision of a single ] can also result in a NO
BULL! error. Very serious compiler errors will be preceeded by the SELF
message. That's right, brace yourself. We're talking about such errors as
SOURCE FILE TURNED TO TRASH, SOURCE FILE CONVERTED TO RUN FILE, HEX PUT ON
SOURCE FILE, that sort of thing. Errors of this type will be followed by
the message "START ALL OVER FROM SCRATCH," and the offending source file
will, of course, be deleted.
Error messages can be quite strong indeed. We have one of the most arrogant
compilers in the business, a source of great pride for us. Typical error
* WELL, IF THAT AIN'T ABOUT THE DUMBEST DANG THANG I EVER SEEN!
* WHADJA DO THAT FER?
* ERROR TWENNY SEM, DUMB AICE!
* DAMMIT, BOY, HOW MANY TIMES I GOT TO TELL YOU?!
The compiler is referred to as the THRASHER and is invoked with the simple
THRASH directive. BE SURE NOT TO OMIT THE "H" FROM THIS COMMAND!!! If you
are unsure whether you want to compile the entire program, you may use the
more general THRASH AROUND command.
Good Ol' Boy Systems still clings tenaciously to the notion that
single-sided diskettes are better than double-sided diskettes. We maintain
that a single-sided diskette is in opposition to the laws of physics as we
know them today. However, we further maintain that, at some time in the
future, Good Ol' Boy Systems will be the first to discover the unlimited
storage of the heretofore undiscovered "nether side" of single-sided
diskettes. Now THAT, folks, is virtual disk space.
A software linker is not yet available. Until the virtual disk space is
truly solved, we strongly recommend double sided disk drives. You can then
purchase our hardware linker, which allows you to superglue two
single-sided diskettes together.
We're working on other things, too. For instance, there's our new operating
system, MS-HOSS, with the 'Mater Vine file structure. And for 'Mater Vine
support, there's 'Mater Stakes. And if you thought SideKick was good, wait
til you see our new ButtKick utility. Expected to be widely available by
the end of next month, regardless of what month this be, it is being
developed using our powerful new Four Barrel Tenne-C. While we aren't yet
ready to develop a Turbo Tenne-C, we feel that the high data compression
ratio of Four Barrel Tenne-C will suffice.
Here is a sample of our work. This is part of our new floating point
package, written in LOWLIFE, our low-level programming language.
UNSTACKUMDOTNUMBER WHISPER rip number off the stack
JIP DOTREMOVER WHISPER jump if punctuated
DONTDONOTHING WHISPER no op
JUMPEM2DGITBACK WHISPER return
GUMDROPS4EARPLUGS WHISPER sweet things in my ear
RDLDOTNUMBER WHISPER Rikki, don't lose that
ASRDOTNUMBER WHISPER shift the number right
JISPDOTREMOVER WHISPER jump if still punctuated
ABSOLUTELYNOT WHISPER negate and take ABS
BZZBZZBZZ WHISPER WHISPER WHISPER EM2DGITBACK:
RTS WHISPER return to stack
RETURNS WHISPER return estimated truncated
WHISPER unary radix numerix stuff