The gophfilt program is a oneshot command line driven version of a
gopher client, suitable for use in shell- or awk-scripts.
The Internet Gopher is a distributed document delivery service. It
allows a neophyte user to access various types of data residing on
multiple hosts in a seamless fashion. This is accomplished by
presenting the user a hierarchical arrangement of documents and by
using a client-server communications model. The Internet Gopher
Server accepts simple queries, and responds by sending the client a
Gophfilt can operate in either of two modes. The first one is in the
spirit of unix filters, in that it accepts requests on stdin and writes
results to stdout. The request is in the form of a tab-delimited .cache
item. For example:
1Master Gopher at UMN 1/ gopher.tc.umn.edu 70
(Or in string notation)
"1Master Gopher at UMN\t1/\tgopher.tc.umn.edu\t70\n"
This example would result in the retrieval of the root directory from
the Master Gopher.
Gophfilts other mode permits the construction of a gopher request from
arguments provided on the command line. In this "manual" mode, at least
the path and type items must be provided. The default host and port are
taken from the file conf.h at module build time.
-p specifies the path to the requested data. From our "filter" example
above, the field "1/" is the path.
-t specifies the type of the requested data. From our example above, the
leading "1" character is the type (directory, in this case).
-h specifies the name of the host where the server is to be found. The
default host (CLIENT1_HOST from file conf.h) is used if not provided.
-s specifies the service (port) that the server is monitoring. The
default port (CLIENT1_PORT from file conf.h) is used if not provided.
-i specifies a search item. This field immediately follows the path
field in the transmitted request.
-T specifies a receiver timeout in seconds. This is the maximum time
that gophfilt will wait for more data. If the "timeout" return value
is noticed by the calling program, any data received to that point
should be considered suspect.
To recreate using manual operation the request from our example, one
would execute the following command.
gophfilt -t 1 -p 1/ -h gopher.tc.umn.edu -s 70
Here is an example that demonstrates the usefulness of the gophfilt.
This specific example only works on the Rutgers campus, but illustrates
gophfilt -t 0 -p "webster default SPELL" -i flatulence
-h hangout.rutgers.edu -s 770 | gophfilt
This example requests a selector item from the Websters Dictionary, and then
pipes that item to gophfilt for subsequent retrieval of the actual definition.
The result is available on stdout for use.
Gophfilt returns the following completion codes on exit:
0 Successful completion.
-1 Error in parsing command line arguments.
-2 Manual operation and insufficient parameters were provided.
-3 Piped operation and unable to read selector from stdin.
-4 Unsupported item type requested.
-5 Unable to connect to specified host and port combination.
-6 Error encountered writing to stdout.
-7 Timeout occurred while waiting for more data.