# LR-87: A Gemini Client LR-87 is a simple implementation of a client for launching into the world of the Gemini protocol, a fun place somewhere between Gopher and the World Wide Web. The client is implemented entirely in Fortran.
LR-87 can be launched with an initial address, or it will default to [gemini://gemini.circumlunar.space/](gemini://gemini.circumlunar.space/). The default interface assumes you are at a dumb terminal, so you'll be presented with a nice Fortran-esque input prompt after the first page of a site is displayed. The prompt supports paging, entering link numbers, going back, or quitting, and it is somewhat self-explanatory. The user should be aware that the command, such as "B" for back must be followed by the ENTER/RETURN key. Links are displayed in LR-87's default renderer as: `[ 1][ Gemini documentation]` The link is numbered, and it can be followed by entering the link number at the input prompt. Note that the link numbering *will change when page up or page down is performed*. If you page down, for example, the new link number 1 is the new first visible link, not the link labeled number 1 prior to page down. This insane behavior is merely the product of the default renderer, not the underlying code itself. ## What's Not Supported LR-87 works, but it does _not_ remember certificates, store history or bookmarks, or support sending user certificates. It will also complain if you attempt to download a non-text file or try to access a non-Gemini address. These features might be added in the future, but don't hold your breath. ## Compiling LR-87 requires a substantial number of Fortran 2003/2008 features. The software compiles fine with relatively modern versions of GNU Fortran (tested with versions 8 and 9). [Simply Fortran](https://simplyfortran.com) projects are included for both Windows and UNIX-y operating systems. On Windows, users will need an OpenSSL implementation for linking. I suggest, but do not endorse, [this distribution](https://bintray.com/vszakats/generic/openssl), which seems to work fine. ## Extending All drawing, status reporting, and user interaction is handled by derived types extended from the abstract "renderer" type, which handles parsing links and wrapping regular text internally. A new renderer would be relatively easy to generate if it implemented the abstract interfaces in the "renderer" type. The code currently contains one implementation, "dumb_renderer," that assumes the user is at a dumb terminal. It assumes a fixed 80x24 terminal without any escape sequences. ## License LR-87 is Copyright (c) 2020 Jeffrey Armstrong