gophfilt(1) oneshot connection to gopher document server


gophfilt [-t type] [-p path] [-h host] [-s port] [-i item]


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 document.

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/       70

(Or in string notation)

"1Master Gopher at UMN\t1/\\t70\n"

This example would result in the retrieval of the root directory from the Master Gopher.

Gophfilt's 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 -s 70


Here is an example that demonstrates the usefulness of the gophfilt. This specific example only works on the Rutgers campus, but illustrates the point

gophfilt -t 0 -p "webster default SPELL" -i flatulence

-h -s 770 | gophfilt

This example requests a selector item from the Webster's 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.