# rc shell and new gopher server

I had been dipping in and out of the Plan9 rabbit hole, without
going too deep.

If you had been following along recently, then you know I had also
been experimenting with ed and sam which lead me to install vis,
which shares sam's command language.

In the process my OpenBSD system has become a bit of a Franken-9,
with rc as the shell on my local system and installed on my server.


## rc shell

After using perl for many years I find POSIX shell quite limiting,
especially the lack of lists/arrays. So when I discovered the rc
shell has lists, much cleaner syntax and had dispatched a number
of bourne keywords determined to be redundant. I decided to give
it a try.

There were three options in the OpenBSD repos, ordinary, and with
editline or readline:

>        1: rc-1.7.4p1
>        2: rc-1.7.4p1-editline
>        3: rc-1.7.4p1-readline

As I like modal commandline editing I gave both of the later a try.
I settled on the readline variety as it seemed more compatible
with what I had become used to with ksh's vi-mode.

I started by creating an .rcrc file and converting my existing
kshrc to rc.

This was a very helpful learning experience to start to familiarize
myself with the syntax, as was reading Tom Duff's paper on the rc
shell[1].

I modified my prompt to include the directory path using the examples
from the paper. Then in short order I converted my aliases to
functions and ported the remainder of my ksh functionality.

By comparison the resulting file looks a lot neater.


## gopher server (gophrc)

Encouraged by what I had learned so far, I wanted to continue
familiarizing myself with the language.

The best way for me to do that is be creating some small project.
I am of the type that learns through doing and a small project is
usually how I go about learning.

I remembered I had started writing a gopher server in shell that
ran from inetd but had run into some issues and mostly given up on
the idea after discovering Katolaz had already created one called
gosher[2].

So, for the past couple of days I have been chipping away at making
*gophrc*[3] a gopher server that runs from inetd and that can work
with my existing geomyidae formated menus and cgi programs.

You are reading this file from that experimental server.


## Summary

It has been a great learning experience and I am a great fan of
home brew software.

I feel that rc shell has a lot of potential, but that I am still
missing a lot regarding nuances of the language.

If you know of any more documentation than that I've linked below,
then please drop me a line.

If you spot anything that doesn't work or things I could have done
better in rc shell, then likewise please let me know.


## References

[1]( http://9p.io/sys/doc/rc.html )
[2]( gopher://katolaz.net/1/software/gosher )
[3]( gopher://gopher.icu/0/files/gophrc )