owl
a programming language

You can find a reference for owl in the GNU directory. See here!
The Wikipedia reference for owl 0.7.2. (now gone) is available here in pdf format...
A small hook is still present at 
esoteric.voxelperfect.net, and precisely here.
I'm very pleased that in the
Russian Wikipedia there's a page for FALSE, in which also owl is explained

For any subject, write to tbin@libero.it
Last version: 0.7.6

Intro: what is owl?
Documentation
Download

Well, I don't ask money for the programs I create.
But if you want to support my work, feel free to donate whichever amount, using the PayPal button down below. In any case, happy surfing!

owl

Intro: what is owl?

owl means Obfuscated Weird Language, and it's my main project regarding obfuscated programming languages. It was born from the ashes of bogusforth (another older language of mine, not longer maintained), but it's a different thing. Its foundations are simplicity, strength and power. You can download it here.
Let's see some of its features.
Hello world!

Let's write the clause that any language must support:
"Hello, world!"
It's the simplest way (that belongs to false too): a string prints itself. owl recognizes most of C escape characters, so:
"\tWritten on a sunny \'morning\', listening to America\'s \"A Horse With No Name\"\n"
prints
        Written on a sunny 'morning', listening to America's "A Horse With No Name"

(notice the starting tab, the single and double quotes and the New Line).

The Fibonacci numbers series

Let's see something more intriguing: a program to calculate all the Fibonacci numbers available on the environment running owl:
["\n"]c,"Fibonacci numbers\n"1.c@1 1[%0>][%.c@%2'2'+]!;;"Done!\n"
Let's see in detail what happens:
- the ["\n"]c, group stores (,) in c a function whose only scope is emitting a new line ("\n")
- after the title (which is printed), the loop begins (in forth it would be a BEGIN WHILE REPEAT cycle) with two values on TOS (a couple of ones)
- the two functions that manage this cycle are [%0>] (the control syntax would sound "until the number on top of stack is positive") and [%.c@%2'2'+] (this is the actual algorithm for calculating Fibonacci numbers)
- the cycle is executed by the ! command
- the c@ sequence executes the function in c (new line)
- the 2' sequence is a ROT (namely a 2 ROLL in forth style)
- the symbol % is the DUP command
- the dot . prints top of stack (TOS) consuming it
- the cycle stops when the number on TOS is negative (see the control function [%0>])
- the ; drops value on TOS

This program (actually a program line) works on all systems that resolve an integer overflow as a negative number (e.g., for what about 64 bits numbers managed by owl 9223372036854775807 + 1 = -9223372036854775808, which is treated as a negative number [but there'd be something to say, here! Read the pdf manual!]).

The output (on my emac) is:

Fibonacci numbers
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155
165580141
267914296
433494437
701408733
1134903170
1836311903
2971215073
4807526976
7778742049
12586269025
20365011074
32951280099
53316291173
86267571272
139583862445
225851433717
365435296162
591286729879
956722026041
1548008755920
2504730781961
4052739537881
6557470319842
10610209857723
17167680177565
27777890035288
44945570212853
72723460248141
117669030460994
190392490709135
308061521170129
498454011879264
806515533049393
1304969544928657
2111485077978050
3416454622906707
5527939700884757
8944394323791464
14472334024676221
23416728348467685
37889062373143906
61305790721611591
99194853094755497
160500643816367088
259695496911122585
420196140727489673
679891637638612258
1100087778366101931
1779979416004714189
2880067194370816120
4660046610375530309
7540113804746346429
Done!


If you want to get amused, see the 99bottles.owl source example, in which the 99 bottles algorithm can be achieved in owl in no more than 4 lines of code, three of which are strings storing:

[" bottles of beer"]a,[" bottle of beer"]b,[" on the wall, "]c,
[".n"]d,[".nn"]e,["Take one down and pass it around, "]w,
["no more bottles of beer"]z,[%1>[a@][b@]?]y,
99[%][%.y@c@%.y@d@w@1-%%%0>[.]?1>[a@][%[b@][z@]?]?e@]!;;

This program returns the following (excerpt):

99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer.

98 bottles of beer on the wall, 98 bottles of beer.
Take one down and pass it around, 97 bottles of beer.

97 bottles of beer on the wall, 97 bottles of beer.
Take one down and pass it around, 96 bottles of beer.
...
...
3 bottles of beer on the wall, 3 bottles of beer.
Take one down and pass it around, 2 bottles of beer.

2 bottles of beer on the wall, 2 bottles of beer.
Take one down and pass it around, 1 bottle of beer.

1 bottle of beer on the wall, 1 bottle of beer.
Take one down and pass it around, no more bottles of beer.

An even more compact version of this algorithm (by Marinus Oosters) may be found here.

Documentation

Documentation for owl consists of these documents:

Download

owl may be downloaded here.

SEND ME YOUR owl SOURCES!
I'll enclose them in the examples packages!
(Specify owl version in the listing)
It's GPL! Enjoy!