This is the README file for CMS Gopher 2.4.2 (ver 2 rel 4 mod 2).
If you have any questions, send e-mail to
[email protected].
You can acquire updates and refreshes via Gopher from the
Gopher server at ricevm1.rice.edu. This is VRM 2.4.2.
Copyright 1993 Richard M. Troth. This software was developed
with resources provided by Rice University and is intended
to serve Rice's user community. Rice has benefitted greatly
from the free distribution of software, therefore distribution
of unmodified copies of this material is not restricted.
You may change your own copy as needed. Neither Rice
University nor any of its employees or students shall be held
liable for damages resulting from the use of this software.
You will need CMS Pipelines. (5785-RAC)
You will need VM TCP/IP, V2 or later. (5735-FAL)
You will need REXX/Sockets (supplied), a part of VM TCP/IP.
------ ------ ------ ------ ------ ------ ------ ------ ------
PLEASE NOTE: when fetching MODULEs and VMARC files from some hosts,
the record structure must be restored. If you pick-up a MODULE from
a UNIX FTP host, you must "deblock" it back into its CMS form with:
PIPE < program MODRAW | DEBLOCK CMS | > program MODULE A
For VMARC files, reblock to Fixed 80 with:
PIPE < package VMARCRAW | FBLOCK 80 00 | > package VMARC A
and then "vmarc unpk" the package.
CMS TAR files are true binary and need not be re-blocked.
MODULEs and other record oriented files archived into a CMS TAR
file or tape will be correctly re-blocked by CMS TAR.
------ ------ ------ ------ ------ ------ ------ ------ ------
See GOPHER24 FILELIST for a complete list of files.
Experimental Forms Oriented Feedback support is included.
To display GIFs with CMS Gopher, get the VMGIF package from
LISTSERV at BLEKUL11, or via Anonymous FTP to cc1.kuleuven.ac.be.
To process MIME type objects with CMS Gopher, get the MIME package.
(should be found wherever you acquired this Gopher package)
The gem EXPAND REXX (expand TABs) has been replaced by
the gem UNTAB REXX, which should soon be replaced by a
CMS Pipelines built-in function (probably CMS 10).
Dieter Gobbers and Alan Flavell graciously created and supplied a
German message repository. Other languages would be most welcome.
Rice's CMS Gopher client is the only one I know of that is mult-lingual.
You can (and should) get the full PH PACKAGE from
LISTSERV at IRISHVMA or from Nick LaFlamme, NLAFLAMM at IRISHVMA.
After a year and half, Gopher's HELP files are still crummy.
------ ------ ------ ------ ------ ------ ------ ------ ------
Client Features:
o displays GIFs via the VMGIF package from BLEKUL11 (not supplied)
o processes MIME objects via optional MIME package (not supplied)
o handles WAIS searched menus
o interacts with CSO/qi phonebook servers via PH EXEC
o can use any file viewer you desire
o "next item" key
o bookmarks
o multi-lingual (German and American English supplied)
Server Features:
o hierarchical menus with or without SFS
o both static and dynamic files (latter created by pipes)
o offers WAIS-like searched menus internally with WISHLP tool
------ ------ ------ ------ ------ ------ ------ ------ ------
WELCOME
Welcome to GopherSpace! I hope you enjoy your trek.
If you have any questions about the Rice CMS Gopher client or server
or if you have trouble setting them up, send e-mail to Rick Troth,
[email protected], or call me at (713) 285-5148. There's also a dis-
cussion list to which you may subscribe:
[email protected].
Subscribe with a note to
[email protected] with the following:
subscribe vmgopher first-name last-name
The InterNet Gopher (or just "gopher" for short) is a simple
information dispersal tool based on TCP/IP. It is an example
of the kind of seemless interoperability that is possible
when we (programmers) actually try to do things right.
The Gopher protocol doesn't care about host operating systems,
their file storage formats, character sets, or command suite
(or lack thereof).
CMS Gopher is based on three very strong tools: the REXX language,
Arty Ecock's REXX/Sockets, and CMS Pipelines. As a programmer,
I literally went to tears over how well these three work together.
More warm fuzzies later. You need to unpack this thing.
------ ------ ------ ------ ------ ------ ------ ------ ------
SETTING UP THE CLIENT
Don't access an old version of Gopher in front of a new version.
You may have some special method of giving users access to your
CMS applications. At Rice, we keep most applications on their own
minidisk, and leave a "wrapper" EXEC on a public, always accessed
minidisk (our X disk). The client is GOPCLI. Whatever wrapper you
create should STATE GOPCLI EXEC and access the right disk or SFS
directory if it's missing.
You may want to tailor a couple of environment variables. There's no
CONFIG file for the client in CMS Gopher 2.4. All configuration data
are kept in user GLOBALVs. See HELP GOPHER for a list of user-settable
Global Variables. HOST and NAME are two that many people like to predefine.
HOST is the TCP/IP host computer where your "top level" gopher server runs.
NAME is the name of that "top level" menu. (there's no way in the
Gopher protocol for a menu to name itself; all menus and plain files
are named by the menu that references them, so you need to set NAME
or you'll get "(root menu)", harmless but ugly)
Note that the client reserves the fileid VMGOPHER DOCUMENT for times
when it needs to write a file to CMS disk if it can't make sense of
the name provided by the current server. (servers may be running on
UNIX, VAX/VMS, MVS, PC/MS-DOS, or even Macintosh)
PICTURES
CMS Gopher 2.4 supports the gopher "image" (type I) files. Presently,
the only format displayable is GIF files using the VMGIF package available
from the fine folks at BLEKUL11:
tell listserv at blekul11 get vmgif package
MIME objects
CMS Gopher 2.4 supports MIME type items. All you need is for the
MIME package (found wherever you picked-up this Gopher package)
to be available on an accessed minidisk or directory.
If MIMEREAD REXX is missing, Gopher presents MIME objects as text.
------ ------ ------ ------ ------ ------ ------ ------ ------
SETTING UP THE SERVER
The server is GOPSRV. Setting it up is trickier than setting up the
client because you not only have to create a virtual machine for it to
run in, but you also have to take the time to structure your gopher data
nicely. See GOPHERD DIRECT for an example CP Directory entry.
You can have multiple gopher servers.
If you don't have SFS, you can create a hierarchical set of menus using
FILELISTs. Some VMers insist on using FLIST. They say it's faster
than FILELIST. Fine. But FILELIST lets you save and load FILELISTs
such that you can easily bundle files together almost as easily as with
true directories. If you do have SFS, you can let it do the work of
maintaining your menu hierarchy.
Gopher FILELISTs are made up of lines of the form:
fn ft fm path "name" type
where fn/ft/fm are the filename, filetype, and filemode
of the file being referenced. The path is really only the last part of
the gopher "selector string" pointing to this file. The paths of all
parent menus are automatically prepended. The name (must be in quotes)
is what the user sees in the menu referencing this file. The type is a
one-digit type indicator, any of:
0 this file is plain-text
1 this item is a menu
4 this is a Macintosh file
5 this is an MS-DOS file
6 this is a UUEncoded file
7 this item is a search on a menu
9 this is a binary file
I image (graphic; typically GIF)
s a sound file
M a MIME object
F a forms-oriented feedback item
There are other types, but these are the ones most useful in FILELISTs.
Everything except the filename is optional. Filetype, filemode, path,
name and type may all be omitted, in which case the server will choose.
The first character of each line in a Gopher FILELIST must be either
a blank or an asterisk, the latter denoting a comment. With care,
you can in fact use a Gopher FILELIST as input to CMS' FILELIST EXEC.
I mentioned the menu type, digit 1. Please note that you do NOT specify
a menu within a menu by marking some file as type 1, but rather by using
a special filetype "*". The server will automatically mark it as type 1.
The "root" menu is defined by <userid> FILELIST, where <userid>
is the name of your gopher server virtual machine, typically GOPHERD.
You can override this and other parameters in GOPHERD CONFIG.
So, making a long story longer, to setup your gopher server, define
virtual machine GOPHERD, give it access to your local gopher disk,
create GOPHERD FILELIST listing one or more files you wish to serve-out,
then CP AUTOLOG GOPHERD.
This "picture" might illustrate what I'm trying to say:
GOPHERD virtual machine
\
GOPHERD FILELIST "root menu"
\
GOPHERD README
MYFILE DOCUMENT
SUBMENU FILELIST
\
FILE1 DOCUMENT
FILE2 DOCUMENT
FILE3 DOCUMENT
There is a CONFIG file, which you can tailor as needed. With the 2.4
server, the only variables meaningful in the config file are LOGPIPE,
PORT, and ROOT. PORT defaults to 70. ROOT defaults to the virtual
machine name (server's userid). LOGPIPE defaults to CONSOLE.
You will probably want to dedicate port 70 to GOPHERD in your local
PROFILE TCPIP for you TCPIP service virtual machine. It's also good
to have GOPHERD listed as AUTOLOGged by TCPIP. Neither of these steps
are required to test GOPHERD; just run it. It's pretty harmless.
PIPES AND AUTHORIZATIONS
A nice way to degrade performance of your gopher server is to create a
NAMES file for a menu. In spite of the cost, this is useful because
you can control access to and/or define CMS Pipelines specifications for
menus and items in the NAMES file.
When the server accesses a directory, it looks for <menu> NAMES.
(this works best with FILELISTs; if you do it for SFS directories,
consider that the server may access other directories, releasing the
one that holds your NAMES file, as it resolves the selector path string)
If <menu> NAMES exists, the server uses NAMEFIND to process it.
This is best explained by an example:
:nick.myfile :fn.my :ft.file
:auth..rice.edu deny .cuny.edu .gov allow *
:pipe.CP Q NAMES | SPLIT /,/
For the file MY FILE, any host who's InterNet hostname ends in
".rice.edu" (all of the Rice campus) can read it. Any host who's
InterNet hostname ends with ".cuny.edu" or ".gov" is prohibited.
Everyone else is then permitted. If the client is permitted access,
then instead of reading the file MY FILE, the server sends the output
of the pipeline CP Q NAMES | SPLIT /,/ to the client.
This can get quite sophisticated. No, you do not have to have both
an auth and a pipe in the NAMES file entry. You can have either one
or neither. And know that CMS NAMEFIND does not provide a way to
specify the filemode of the NAMES file, so be careful about menu
name collisions.
You can also specify host, port, path, name, and type in a NAMES file.
This means that you can use NAMES files in place of GOPLINK files,
but remember that NAMEFIND is going to cost you.
Link files? They let you point to other gopher servers.
See the Q&A section below, otherwise this section will go on forever.
SEARCH ITEM
Creating a search item in a menu is easy. Set it up just like you
would any other sub-menu, but mark it as Type 7. Something like:
MYSEARCH FILELIST * whatever "My Own Search Item" 7
in the parent menu's FILELIST.
There's no reason why you can't have the menu as a whole listed
right next to the searched version, like:
MYSEARCH FILELIST * whatever "My Own Search Item" 7
MYSEARCH FILELIST * whatever "My Own Search Item (not indexed)"
You must also create an index file for this menu. The easiest way is
by using GOPGEN. GOPGEN is primarily a tool for making your own mods
to CMS Gopher, but it also performs the right incantation on WISHLG
(thank's Yossie) to create an index for you. The server then will
invoke WISHLP (thank's again, Yossie) to list the files that match
the client's search expression.
GOPGEN INDEX MYSEARCH
MYSEARCH FILELIST must exist. All of the files it lists must exist.
You must then put the index file, MYSEARCH GOPINDEX, where the server
will access it.
------ ------ ------ ------ ------ ------ ------ ------ ------
FUNCTIONS OF FILES
Here's a list of most of the files in the package and their function:
GOPHER EXEC "wrapper" EXEC; ensures product disk accessed
GOPCLI EXEC the client
GOPCLINI EXEC client initialization (called once from GOPCLI)
GOPCLISX REXX handles all TCP/IP "sockets" work for the client
GOPCLITM REXX decides what how a given item should be processed
GOPCLIST REXX displays connection status, "Reading ...", etc
GOPCLIMB REXX menu browser
GOPCLIUI REXX user input (prompting)
GOPCLITX REXX reformats plain-text
GOPCLIFV REXX file viewer; may be used stand-alone
GOPCLIGV REXX graphics viewer; presently GIFs only
GOPCLIFI EXEC returns legal CMS fileid from a gopherspace path
GVM EXEC "DIALed Gopher" client; calls GOPHER to call GOPCLI
GVM DIRECT CP Directory entry for the DIALed Gopher
GOPHERD EXEC "wrapper" EXEC for the server; write your own
GOPSRV EXEC the server
GOPSRVLS REXX lists files and menus (menus in LISTFILE format)
GOPSRVRP REXX gopher path resolution; uses GOPSRVLS output
GOPSRVMB REXX menu builder
GOPSRVGL REXX gopher "link" processor
GOPSRVAU EXEC performs authorization check
GOPSRVFM EXEC dummy filemode function for server
GOPHERD DIRECT example CP Directory entry for the server
UNTAB REXX expands TAB characters
PRINT REXX similar to CMS PRINT, but a pipe
A2E REXX translate ASCII to EBCDIC
E2A REXX translate EBCDIC to ASCII
TCPA2E REXX A2E, but follows TCP/IP translate tables
TCPE2A REXX E2A, " " " " "
STANDARD TCPXLATE suggested ASCII <---> EBCDIC translate tables
STANDARD TCPXLBIN binary object built from above TCPXLATE
GOPUME MESSAGES message repository source
GOPUME TEXT message repository object
GOPXEDPR XEDIT XEDIT profile for XEDIT used as file viewer
GOPXEDII XEDIT "item info" command for XEDIT as file viewer
GOPHMARK EXEC migrates bookmars from 2.3
RXSOCKET MODULE Arty's wonderful CMS Socket tool
DISKWRIT MODULE minidisk need reACCESSing?
WISHLP MODULE Yossie's *fast* search engine
WISHLG MODULE index builder for above
PH EXEC Nick LaFlamme's CSO/qi/ph (phonebook) client
GL EXEC primitive tool for browsing CMS Gopher FILELISTs
GOPHERCAT EXEC dumps gopherspace files right onto your console
GOPHERDH REXX a pipeline stage that interprets CMS HELP
HELP NAMES defines HELP menu to the server using above
------ ------ ------ ------ ------ ------ ------ ------ ------
There is a discussion list,
[email protected].
Please join us. We discuss development and featurs of CMS Gopher.
There is another CMS Gopher (both server and client), popularly called
"the Vienna Gopher", available from Gerhard Gonter <GONTER@AWIWUW11>.
------ ------ ------ ------ ------ ------ ------ ------ ------
Q: The basics, documents and FILELIST menus, is fairly easy to grasp,
but the relationship of a NAMES file and its entries to a FILELIST
file and its entries is not at all evident to the poor soul that
just wants to provide an information service without much time
invested (I.e., without subscribing to VMGOPHER).
A: The easiest way to start is just name some plain-text files in
GOPHERD FILELIST (which are available to your GOPHERD service
machine on an accessed disk or SFS directory). Then after you're
comfortable with that, try some "links" (filetype GOPLINK) and
sub-menus (filetype FILELIST). Then get into NAMES files.
Q: How to I point to another server/menu?
A: The easiest way is with a "link" file (filetype GOPLINK).
When a link file shows-up in any FILELIST, the contents of
that file are read and the information specified is presented
to the client for that particular menu item.
The contents of a GOPLINK file are the same as
for a UNIX server link file, of the form:
Name=Rice University CMS Gopher server
Host=ricevm1.rice.edu
Port=70
Path=1/
Type=1
As of 2.4, GOPLINK file can have more than one link in it.
(but you will probably find things easier to manage
if you have just one link per GOPLINK file)
NOTE: Gopher server link files MUST be RECFM V or you
will get trailing blanks which UNIX servers won't like.
Q: How does a GOPLINK file differ from a "link" in a NAMES file?
A: The NAMES file is far more extensive. (and exPensive)
With the CMS Gopher server, you don't use "link" files to
override the characteristics of other files in the menu (as you
would with a UNIX server). With the CMS server, GOPLINK
files are exclusively used to reference other network (usually
non-local) resources, while the NAMES file may apply to local
files, which reside on your system OR to remote services.
Q: Some folks have made it seem that their gopher server files
are free for the taking ... is there a gopher feature
to pull these in?
A: To "receive" (keep) an item, press PF5. The receive function
will not overwrite an existing file (though you can still
view & SAVE from XEDIT).
Q: GOPHERD should document DISKWRIT in the prolog.
A: GOPHERD uses DISKWRIT to perform the same "reaccess" trick that
GONE EXEC does when you reconnect. If disks appear to have
changed, they are reACCESSed so that the server has the latest
revision of any files on those minidisks.
Q: Why are the "STANDARD" translate-table files provided?
Are these for use with the server?
A: Both server and client.
The default ASCII <---> EBCDIC translation in VM TCP/IP (FAL)
is not 100% correct for the majority of the VM/UNIX/VMS/DOS/Mac
world we live in. STANDARD TCPXLATE and TCPXLBIN provide
a 1-for-1 translation between de-facto "network EBCDIC"
(codepage 1047) and "extended ASCII" (ISO 8859-1).
Q: If PhoneBk and Search are available, how do we use them?
A: Presently, CMS GopherD does not support PhoneBk engines.
Search engine is provided by Yossie Silverman's WISHLG/WISHLP.
The client (GOPCLI) is happy to utilize such servers on any