//JOBNAME JOB ACCOUNT,'NAME'
//*------------------------------------------------------------------*/
//*                                                                  */
//* Copyright (c) The Charles Stark Draper Laboratory, Inc., 1993    */
//*                                                                  */
//* This software is provided on an "AS IS" basis. All warranties,   */
//* including the implied warranties of merchantability and fitness, */
//* are expressly denied.                                            */
//*                                                                  */
//* Provided this copyright notice is included, this software may    */
//* be freely distributed and not offered for sale.                  */
//*                                                                  */
//* Changes or modifications may be made and used only by the maker  */
//* of same, and not further distributed. Such modifications should  */
//* be mailed to the author for consideration for addition to the    */
//* software and incorporation in subsequent releases.               */
//*                                                                  */
//*------------------------------------------------------------------*/
//*
//*    GOPHER - MVS Gopher Client and Server
//*
//*  Version: 2  Release: 2
//*
//* Author: Steve Bacher <[email protected]>
//*
//* Date: 7 Aug 1993
//*
//*-------------------------------------------------------------------
//*
//* This job creates the distribution libraries (PDS's).
//*
//* Run this JCL to create the PDS's, after customizing to suit.
//* (Obviously, put in a good JOB statement first.)
//* To customize the JCL, change the defaults on the //MDLOAD PROC
//* statement to your liking, particularly the PREFIX default.
//* You might also want to change the final qualifiers of the PDS's
//* created - to do this, find the // EXEC MDLOAD statements and
//* change the value of the TO parameter.
//*
//* See the $$README file (of the CNTL PDS, first in this stream)
//* for the rest of the installation instructions.
//*
//MDLOAD PROC CLS='*',BS='6160',U='3380',V='',
//      TRK1='60',TRK2='10',DIR='35',RLSE='RLSE',
//      PREFIX='GOPHER.INSTALL.'
//*
//IEBUPDTE EXEC PGM=IEBUPDTE,PARM=NEW
//SYSPRINT DD SYSOUT=&CLS
//SYSUT2 DD DISP=(NEW,CATLG,DELETE),DSN=&PREFIX.&TO,
//  DCB=(RECFM=FB,LRECL=80,BLKSIZE=&BS),
//  SPACE=(TRK,(&TRK1,&TRK2,&DIR),&RLSE),UNIT=&U,VOL=SER=&V
//*
//  PEND
//*
//CNTL     EXEC MDLOAD,BS='6160',TRK1='10',TRK2='1',TO='CNTL'
//SYSIN    DD   DATA,DLM='?!'
/ ADD NAME=$$README

------------------------------------------------------------------------

Copyright (c) The Charles Stark Draper Laboratory, Inc., 1992, 1993

MVS Gopher Server originally by Shawn Hart (Univ. of Delaware).

This software is provided on an "AS IS" basis.  All warranties,
including the implied warranties of merchantability and fitness,
are expressly denied.

Provided this copyright notice is included, this software may
be freely distributed and not offered for sale.

Changes or modifications may be made and used only by the maker
of same, and not further distributed.  Such modifications should
be mailed to the author for consideration for addition to the
software and incorporation in subsequent releases.

------------------------------------------------------------------------

MVS Gopher Client

Original Author:          Steve Bacher  <[email protected]>

MVS Gopher Server

Original Author:          Shawn Hart    <[email protected]>

Various enhancements and customizations to both the client and the
server have been contributed by:

   Steve Bacher   <[email protected]>
   Lou Joseph     <[email protected]>
   Denis DeLaRoca <[email protected]>
   Dwight Cook    <[email protected]>
   Rachna Agrawal <[email protected]>

------------------------------------------------------------------------

Contents of PDS's belonging to Gopher distribution:

Member     PDS Type    Description

$$README   CNTL        This file
$CHANGES   CNTL        Changes since the last release
ACCESS     CNTL        Sample server access file
ALLOAD     CNTL        JCL to allocate GOPHER load and object libraries
COMPILE    CNTL        JCL to compile C sources for client and server
GOPHERD    CNTL        JCL to run the GOPHER server in batch (No TSO)
GOPHERT    CNTL        JCL to run the GOPHER server in batch (w. TSO)
HELP       CNTL        TSO Help for Gopher client
INSTALLC   CNTL        How to install the GOPHER MVS client
INSTALLS   CNTL        How to install the GOPHER MVS server
LINKC      CNTL        JCL to linkedit object into client load module
LINKS      CNTL        JCL to linkedit object into server load modules
MENU       CNTL        Initial Gopher server menu
PARMS      CNTL        Sample Gopher startup parameters
GOPHER     CLIST       Exec by which users invoke the Gopher client
NNMFIUCV   CLIST       Exec to check for multiple socket applications
HOSTNAME   CLIST       Sample "hostname" command for REXX feature
TSOHELP    CLIST       Sample REXX exec for Gopher TSO HELP menu hole
GGM...     PANEL       ISPF regular panels
GG...      H           C headers for compilation
GG...      C           C source for compilation
ABOUT...   ABOUT       "About This Gopher" text

--------------------------------------------------------------------

Where to Go from Here:

To install the GOPHER MVS client, read member INSTALLC.

To install the GOPHER MVS server, read member INSTALLS.

Note:

You may install only the client, only the server, or both the
client and the server.  It is purely up to what your needs are.

--------------------------------------------------------------------

Questions?  Comments?  Suggestions?  Gripes?  Please email to...

Steve Bacher      <[email protected]>

/ ADD NAME=$CHANGES
Changes:

10 Jul 93 - Version 2 Release 2

            Remote FTP Gateway
            Configurable GOPHERRC: domain and telnet may be specified
            Object-code-only distribution for those without C compilers
            Improvements to TSO GOPHER exec for users without XPROC
             or without C runtime in linklist
            DD:ddname(member) works now for nested PDS member
             references, making installing the ABOUT PDS simpler

20 Mar 93 - Version 2 Release 1

            Improved browse function
            Printing support
            Bookmark support
            New commands: PRT, INFO, MENU, BOOKMARK
            Configurable startup parameter file
            Ability to run multiple servers on same MVS

07 Dec 92 - Customizations to support SNS/TCPAccess

19 Oct 92 - Improvements in initial startup and GOPHERRC customization

/ ADD NAME=ACCESS
!
! Format of entries:
!
! filename (fully qualified, all uppercase, no quotes)
! can be "DD:DDNAME" or "EXEC:EXECNAME"
!
! followed by names of hosts which are authorized to access the data.
! If no host name list is present, all hosts are authorized
!
! You may specify the same file name more than once, if you need
! more lines to put host names on.
!
! Individual PDS members must be specified separately.  A PDS without
! a member name establishes access only to the PDS directory.
!
! Note that the default directory MUST be in this table.
!
! Also note that in the case of EXECs, the EXEC must live in the
! library allocated to GGEXEC in the Gopher server JCL.
!
! *** ANY DATA SET REFERENCED BY ANY EXEC IN THAT LIBRARY IS FULLY
! *** ACCESSIBLE TO GOPHER REGARDLESS OF THIS TABLE!  USE THIS TABLE
! *** TO GOVERN CONTROL TO THE EXEC ITSELF!!!

!
! below is default directory spec, which MUST be in this table
!
DD:GGGOPHER

!
! Use the following for "About This Gopher".
! Free free to specify the name of your MVS client host(s)
! for information pertinent to MVS only.  mvs1 and mvs2 are examples.
!
DD:GGABOUT
DD:GGABOUT(ABOUT)
DD:GGABOUT(ABOUTC)                                mvs1 mvs2
DD:GGABOUT(ABOUTCD)                               mvs1 mvs2
DD:GGABOUT(ABOUTCF)                               mvs1 mvs2
DD:GGABOUT(ABOUTCO)                               mvs1 mvs2
DD:GGABOUT(ABOUTCQ)                               mvs1 mvs2
DD:GGABOUT(ABOUTCS)                               mvs1 mvs2
DD:GGABOUT(ABOUTCSC)                              mvs1 mvs2
DD:GGABOUT(ABOUTCSL)                              mvs1 mvs2
DD:GGABOUT(ABOUTCSM)                              mvs1 mvs2
DD:GGABOUT(ABOUTCSR)                              mvs1 mvs2
DD:GGABOUT(ABOUTCSW)                              mvs1 mvs2
DD:GGABOUT(ABOUTCSX)                              mvs1 mvs2
DD:GGABOUT(ABOUTCX)                               mvs1 mvs2
DD:GGABOUT(ABOUTS)                                mvs1 mvs2
DD:GGABOUT(ABOUTSA)                               mvs1 mvs2
DD:GGABOUT(ABOUTSP)                               mvs1 mvs2
DD:GGABOUT(ABOUTW)
DD:GGABOUT(FAQ)

!
! Here's how to do REXX execs.  Note - no arguments, only exec names
!
EXEC:CHECKLST                     client1 client2 mvs
EXEC:WAISDIR
EXEC:WAISLIST
EXEC:WAISSRCH

ANY.PUBLIC.SEQ.DS
ANY.SEMI.PUBLIC.SEQ.DS            goodclient1 goodclient2
ANY.SEMI.PUBLIC.SEQ.DS            goodclient3 goodclient4

! PDS without member name provides access to directory only
! All member names must be explicitly listed to be accessible.

ANY.PUBLIC.PDS
ANY.PUBLIC.PDS(MEMBER1)
ANY.PUBLIC.PDS(MEMBER2)
ANY.PUBLIC.PDS(MEMBER3)
ANY.PUBLIC.PDS(MEMBER4)


ANY.SEMI.PUBLIC.PDS               goodclient1 goodclient2
ANY.SEMI.PUBLIC.PDS               goodclient3 goodclient4
ANY.SEMI.PUBLIC.PDS(MEMBER1)      goodclient1
ANY.SEMI.PUBLIC.PDS(MEMBER2)      goodclient2
ANY.SEMI.PUBLIC.PDS(MEMBER3)      goodclient3
ANY.SEMI.PUBLIC.PDS(MEMBER4)      goodclient4

/ ADD NAME=ALLOAD
//JOBNAME  JOB ACCOUNT,'NAME'
//*                                                                  */
//* Copyright (c) The Charles Stark Draper Laboratory, Inc., 1992    */
//*                                                                  */
//* This software is provided on an "AS IS" basis.  All warranties,  */
//* including the implied warranties of merchantability and fitness, */
//* are expressly denied.                                            */
//*                                                                  */
//* Provided this copyright notice is included, this software may    */
//* be freely distributed and not offered for sale.                  */
//*                                                                  */
//* Changes or modifications may be made and used only by the maker  */
//* of same, and not further distributed.  Such modifications should */
//* be mailed to the author for consideration for addition to the    */
//* software and incorporation in subsequent releases.               */
//*                                                                  */
//*
//* Allocate GOPHER load and object libraries before install
//*
//GGALLOC PROC U='3380',V=''
//*
//IEFBR14  EXEC PGM=IEFBR14
//ALLOCDD  DD   DISP=(NEW,CATLG,DELETE),DSN=&LIB,
//         DCB=(RECFM=&RF,LRECL=&LR,BLKSIZE=&BS),
//         SPACE=(&BS,(&PRI,&SEC,&DIR)),UNIT=&U,VOL=SER=&V
//*
//         PEND
//*
//* The ALLOCL step allocates the load library from which the
//* executable program will be run.  If you intend to place the
//* executable into an existing library, you can skip this step.
//* Otherwise, the name must match the name used on the LOADLIB
//* parameter of the GGLINK procedure in the COMPILE JCL.
//*
//* If you want separate libraries for the client and the server,
//* just duplicate this step and give the LIB's different names.
//*
//* The ALLOCO step allocates the object library into which the
//* source modules will be compiled.  This library is required
//* for the compile and link steps, but is not required for run
//* time execution.  However, you may wish to keep the object
//* library around in case there are fixes for which you will be
//* recompiling individual Gopher source modules.
//*
//ALLOCL   EXEC GGALLOC,PRI=50,SEC=50,DIR=35,RF=U,LR=,BS=6233,
//         LIB='GOPHER.LOAD'
//ALLOCO   EXEC GGALLOC,PRI=50,SEC=50,DIR=35,RF=FB,LR=80,BS=2960,
//         LIB='GOPHER.INSTALL.OBJ'
//*
/ ADD NAME=COMPILE
//JOBNAME  JOB ACCOUNT,'NAME'
//*                                                                  */
//* Copyright (c) The Charles Stark Draper Laboratory, Inc., 1992    */
//*                                                                  */
//* This software is provided on an "AS IS" basis.  All warranties,  */
//* including the implied warranties of merchantability and fitness, */
//* are expressly denied.                                            */
//*                                                                  */
//* Provided this copyright notice is included, this software may    */
//* be freely distributed and not offered for sale.                  */
//*                                                                  */
//* Changes or modifications may be made and used only by the maker  */
//* of same, and not further distributed.  Such modifications should */
//* be mailed to the author for consideration for addition to the    */
//* software and incorporation in subsequent releases.               */
//*                                                                  */
//*********************************************************************
//*
//* Compile some or all GOPHER C/370 sources to make the SYSLIN input
//* to the linkedit of the executable Gopher load module(s).
//*
//GGCC   PROC MEMBER=,
//            SRCLIB='GOPHER.INSTALL.C',         GOPHER C source PDS
//            HDRLIB='GOPHER.INSTALL.H',         GOPHER C headers PDS
//            OBJLIB='GOPHER.INSTALL.OBJ',       GOPHER object library
//            COMMHDR='TCPIP.COMMMAC',           C/370 TCP/IP headers
//            C370HDR='SYS1.EDCHDRS',            C/370 standard headers
//            SYSMSGS='SYS1.EDCMSGS',            C/370 messages file
//            SYSMSGM='EDCMSGE',                 C/370 message member
//            VIOUNIT=VIO,                       Temporary disk unit
//            OUTCLAS='*',                          SYSOUT class
//            CPARMS='SOURCE EXPMAC NOAGGR NOXREF', Compile parameters
//            TEST=TEST                             TEST or NOTEST
//*
//CCOMP     EXEC PGM=EDCCOMP,PARM='MARGINS(1,72) &TEST &CPARMS'
//SYSMSGS   DD DISP=SHR,DSN=&SYSMSGS(&SYSMSGM)
//SYSIN     DD DISP=SHR,DSN=&SRCLIB(&MEMBER)
//SYSLIN    DD DISP=OLD,DSN=&OBJLIB(&MEMBER)
//SYSLIB    DD DISP=SHR,DSN=&COMMHDR
//          DD DISP=SHR,DSN=&C370HDR
//USERLIB   DD DISP=SHR,DSN=&HDRLIB
//SYSPRINT  DD SYSOUT=&OUTCLAS
//SYSCPRT   DD SYSOUT=&OUTCLAS
//SYSUT1    DD DSN=&&SYSUT1,UNIT=&VIOUNIT,DISP=(NEW,DELETE),
//   SPACE=(32000,(30,30)),DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200)
//SYSUT4    DD DSN=&&SYSUT4,UNIT=&VIOUNIT,DISP=(NEW,DELETE),
//   SPACE=(32000,(30,30)),DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200)
//SYSUT6    DD DSN=&&SYSUT6,UNIT=&VIOUNIT,DISP=(NEW,DELETE),
//   SPACE=(32000,(30,30)),DCB=(RECFM=FB,LRECL=3200,BLKSIZE=12800)
//SYSUT7    DD DSN=&&SYSUT7,UNIT=&VIOUNIT,DISP=(NEW,DELETE),
//   SPACE=(32000,(30,30)),DCB=(RECFM=FB,LRECL=3200,BLKSIZE=12800)
//SYSUT8    DD DSN=&&SYSUT8,UNIT=&VIOUNIT,DISP=(NEW,DELETE),
//   SPACE=(32000,(30,30)),DCB=(RECFM=FB,LRECL=3200,BLKSIZE=12800)
//SYSUT9    DD DSN=&&SYSUT9,UNIT=&VIOUNIT,DISP=(NEW,DELETE),
//   SPACE=(32000,(30,30)),DCB=(RECFM=VB,LRECL=137,BLKSIZE=882)
//SYSUT10   DD SYSOUT=&OUTCLAS
//*
//         PEND
//*
//GGCLIENT EXEC GGCC,MEMBER=GGCLIENT
//GGMALLOC EXEC GGCC,MEMBER=GGMALLOC
//GGMCLRTX EXEC GGCC,MEMBER=GGMCLRTX
//GGMCONN  EXEC GGCC,MEMBER=GGMCONN
//GGMCSO   EXEC GGCC,MEMBER=GGMCSO
//GGMDBM   EXEC GGCC,MEMBER=GGMDBM
//GGMDFAIL EXEC GGCC,MEMBER=GGMDFAIL
//GGMDIR   EXEC GGCC,MEMBER=GGMDIR
//GGMDISC  EXEC GGCC,MEMBER=GGMDISC
//GGMDISPL EXEC GGCC,MEMBER=GGMDISPL
//GGMDSOPT EXEC GGCC,MEMBER=GGMDSOPT
//GGMDUMP  EXEC GGCC,MEMBER=GGMDUMP
//GGMESRVR EXEC GGCC,MEMBER=GGMESRVR
//GGMFREEM EXEC GGCC,MEMBER=GGMFREEM
//GGMFTP   EXEC GGCC,MEMBER=GGMFTP
//GGMGETDS EXEC GGCC,MEMBER=GGMGETDS
//GGMGETM  EXEC GGCC,MEMBER=GGMGETM
//GGMGOFOR EXEC GGCC,MEMBER=GGMGOFOR
//GGMGSRVL EXEC GGCC,MEMBER=GGMGSRVL
//GGMIERR  EXEC GGCC,MEMBER=GGMIERR
//GGMIGET  EXEC GGCC,MEMBER=GGMIGET
//GGMINFO  EXEC GGCC,MEMBER=GGMINFO
//GGMISPF  EXEC GGCC,MEMBER=GGMISPF
//GGMIVGET EXEC GGCC,MEMBER=GGMIVGET
//GGMIVPUT EXEC GGCC,MEMBER=GGMIVPUT
//GGMMENU  EXEC GGCC,MEMBER=GGMMENU
//GGMMTFER EXEC GGCC,MEMBER=GGMMTFER
//GGMOUTS  EXEC GGCC,MEMBER=GGMOUTS
//GGMOUTTX EXEC GGCC,MEMBER=GGMOUTTX
//GGMPMSG  EXEC GGCC,MEMBER=GGMPMSG
//GGMPROC  EXEC GGCC,MEMBER=GGMPROC
//GGMSOCKT EXEC GGCC,MEMBER=GGMSOCKT
//GGMSOPT  EXEC GGCC,MEMBER=GGMSOPT
//GGMTNET  EXEC GGCC,MEMBER=GGMTNET
//GGMTSO   EXEC GGCC,MEMBER=GGMTSO
//GGMTYPE  EXEC GGCC,MEMBER=GGMTYPE
//GGMUNALC EXEC GGCC,MEMBER=GGMUNALC
//GGMVIEW  EXEC GGCC,MEMBER=GGMVIEW
//GGMVTX   EXEC GGCC,MEMBER=GGMVTX
//GGMWAIS  EXEC GGCC,MEMBER=GGMWAIS
//GGMWHOIS EXEC GGCC,MEMBER=GGMWHOIS
//GGMXTX   EXEC GGCC,MEMBER=GGMXTX
//GGSERVER EXEC GGCC,MEMBER=GGSERVER
//GGSTASK  EXEC GGCC,MEMBER=GGSTASK
//*
/ ADD NAME=GOPHERD
//GOPHERD  PROC MODULE=GGSERVER,
//         STEPLIB='GOPHER.LOAD',
//         EXECLIB='GOPHER.EXEC',
//         ACCESS='GOPHER.ACCESS',
//         ABOUT='GOPHER.ABOUT',
//         MENU='GOPHER.MENU',
//         PARMS='GOPHER.PARMS',
//         VIO=SYSVIO,
//         STDERR='*',
//         STDOUT='*',
//         GPARM=
//*
//*********************************************************************
//*                                                                   *
//* GOPHER daemon, by Shawn Hart (U.Del.) and Steve Bacher (D.Lab.)   *
//*                                                                   *
//* Straight batch (no TSO access)                                    *
//*                                                                   *
//*********************************************************************
//*
//GOPHERD  EXEC PGM=&MODULE,PARM='&GPARM'
//STEPLIB  DD   DISP=SHR,DSN=&STEPLIB
//GGEXEC   DD   DISP=SHR,DSN=&EXECLIB
//SYSTSPRT DD   UNIT=&VIO,SPACE=(TRK,(100,100)),RECFM=VBA,LRECL=255
//SYSERR   DD   SYSOUT=&STDERR
//SYSPRINT DD   SYSOUT=&STDOUT
//SYSTSIN  DD   DUMMY
//SYSIN    DD   DUMMY
//GGDEBUG  DD   SYSOUT=*
//GGABOUT  DD   DISP=SHR,DSN=&ABOUT
//GGACCESS DD   DISP=SHR,DSN=&ACCESS
//GGGOPHER DD   DISP=SHR,DSN=&MENU
//GGPARMS  DD   DISP=SHR,DSN=&PARMS
/ ADD NAME=GOPHERT
//GOPHERD  PROC MODULE=GGSERVER,
//         STEPLIB='GOPHER.LOAD',
//         EXECLIB='GOPHER.EXEC',
//         ACCESS='GOPHER.ACCESS',
//         ABOUT='GOPHER.ABOUT',
//         MENU='GOPHER.MENU',
//         PARMS='GOPHER.PARMS',
//         VIO=SYSVIO,
//         STDERR='*',
//         STDOUT='*',
//         GPARM=
//*
//*********************************************************************
//*                                                                   *
//* GOPHER daemon, by Shawn Hart (U.Del.) and Steve Bacher (D.Lab.)   *
//*                                                                   *
//*********************************************************************
//*
//GOPHERD  EXEC PGM=IKJEFT01,DYNAMNBR=128,REGION=8M,
//         PARM='&MODULE &GPARM'
//STEPLIB  DD   DISP=SHR,DSN=&STEPLIB
//GGEXEC   DD   DISP=SHR,DSN=&EXECLIB
//SYSTSPRT DD   UNIT=&VIO,SPACE=(TRK,(100,100)),RECFM=VBA,LRECL=255
//SYSERR   DD   SYSOUT=&STDERR
//SYSPRINT DD   SYSOUT=&STDOUT
//SYSTSIN  DD   DUMMY
//SYSIN    DD   DUMMY
//GGDEBUG  DD   SYSOUT=*
//GGABOUT  DD   DISP=SHR,DSN=&ABOUT
//GGACCESS DD   DISP=SHR,DSN=&ACCESS
//GGGOPHER DD   DISP=SHR,DSN=&MENU
//GGPARMS  DD   DISP=SHR,DSN=&PARMS
/ ADD NAME=HELP
)F Function -

GOPHER is a distributed document delivery service, or, more generally,
a networked information retrieval service.  It allows you to access
numerous types of data on various hosts in a transparent fashion.
GOPHER presents you with a hierarchical display of information sources
which are accessed via a client/server communications link.

There are GOPHER clients for all common hardware platforms.  The MVS
version runs as an ISPF dialog application.

When you use the GOPHER client, information about your use of GOPHER
is stored in a data set called GOPHERRC.  If you don't have one,
GOPHER will create it for you.

You can save Gopher information in bookmark files.  See the
help for operand BOOKMARK for details.

For more information on customizing your GOPHER environment, get
into Gopher and select "About This GOPHER".

)I GOPHLOC          - local GOPHER help goes in member GOPHLOC

)X Syntax -

  %GOPHER
             LOCAL
             BOOKMARK(datasetname)
             SERVER(hostname)
             PATH(pathname)
             PORT(portnumber)
             DESCRIPTION(text)
             FORCE
             DEBUG
             TEST

  Required:  none

)O Operands -

))LOCAL

             Specify LOCAL if you want to enter GOPHER in "serverless"
             mode - i.e. start up with your private GOPHER menu.
             Specifying LOCAL accomplishes two things:

              (1) It sets the server to "-", meaning local access.
                  Therefore, you must also provide a path, either
                  via the PATH operand or via a "localmenu:" spec
                  in your GOPHERRC file.

              (2) It allows you to use GOPHER even if there are
                  other TCP/IP socket applications active elsewhere
                  in your TSO session.  However, it will not allow
                  you to connect to any GOPHER servers, even if you
                  have a local menu item that points to one.

             For information on how to set up GOPHER menus, get into
             GOPHER and select "About This Gopher".

))BOOKMARK(datasetname)

             The name of a data set containing Gopher bookmarks,
             using normal TSO data set naming conventions.

             You can create bookmarks in GOPHER by using the "B"
             selection code next to a menu item, or by using the
             BOOKMARK command while browsing an entry.  GOPHER will
             append an entry for the selected item to the end of
             the data set that you specify when asked.

             To access this bookmark in a Gopher session, you can use
             the MENU command from any Gopher menu display, or you can
             start Gopher with a specific bookmark file.

))SERVER(hostname)

             The host name (or IP address) of a Gopher server.
             If this is not given, GOPHER looks in your GOPHERRC
             to find what server to connect to.  If it can't find
             an appropriate specification, you will have to enter
             a server name on the startup panel.

             A server name of a single minus sign (-) is a special
             case, signifying local (serverless) access to your
             own private GOPHER data.  In this case, you must tell
             GOPHER where your menu is, either via the PATH operand
             or in the GOPHERRC file.

))PATH(pathname)

             The path name to be passed to the Gopher server, or
             used in local access as your initial menu.  Although
             the exact interpretation of the pathname string varies
             depending on the server, both the MVS server and the
             local GOPHER access feature interpret the pathname
             as the FULLY QUALIFIED WITHOUT QUOTES name of an MVS
             data set containing a gopher menu.  For information
             about the format of a gopher menu, see operand MENU.

))PORT(portnumber)

             You should never need to specify this field unless
             someone has set up a special kind of Gopher server that
             requires a unique port number.  In such a case, you
             would generally use this along with the SERVER operand.

))DESCRIPTION(text)

             A text string giving the heading to be displayed for
             the initial directory of Gopher goodies.  Normally
             either the Gopher server or the Gopher client will
             have a default value for this, or you can specify
             a description of your liking in your GOPHERRC file.
             You can also use this to override the description
             generated when you use the BOOKMARK operand to start up.

))FORCE

             GOPHER tries to determine if there is a TCP/IP socket
             application active elsewhere in your TSO environment
             before starting up, to prevent TCP/IP errors.  If it
             tells you that there is another client active but in
             truth there is none and you know it, you can use the
             FORCE keyword to make GOPHER proceed whether it finds
             this to be the case or not.

             Using the LOCAL operand is one way to avoid this entire
             scenario.  However, that won't allow you to access any
             Gopher servers on the network.

))DEBUG

             Set debugging mode on.  You must preallocate a file to
             ddname GGDEBUG for this to work.  This can be allocated
             to the terminal or a log file.  When debug mode is on,
             messages describing memory allocation and deallocation
             and GOPHER queries sent are dumped to the debug file.

))TEST

             Activate C/370 interactive test (INSPECT).  GOPHER must
             have been compiled with the TEST option for this to be
             effective.  Note that you can also issue the TEST command
             inside GOPHER to get to INSPECT, again provided that
             GOPHER was compiled with the TEST option.

/ ADD NAME=INSTALLC

Directions for Installing the GOPHER MVS Client

Assuming the PDS's have been created:

1. Customize the ALLOAD, COMPILE and LINKC JCL members to reflect your
local conventions.  Note:  If you intend to place the executable into
an existing library, you can suppress that part of the ALLOAD JCL.
The name of the data set created must match across both members.

2. Customize the GGUSER header file as shown by the comments therein.
Note in particular the defines for your TCP/IP and your C compiler.
There are changes to the linkedit JCL that are related to these.

3. If you are running ISPF Version 2 or earlier, edit the GOPHER panels
whose names begin "GGMP...".  These are popups, and will not work
under ISPF Version 2 unless you change the )BODY line.  Remove the
WINDOW(...) parameter from the )BODY line of each panel so that the
line just says )BODY or )BODY EXPAND(``), as the case may be.

4. Customize the GOPHER exec to define the names of the MVS libraries
to contain the panel and load library members.  The load library must
be the one specified in the ALLOAD JCL, if you are creating it anew.
Observe the comments relating to the use of LIBDEF and ISPF APPLIDs.

It is in the GOPHER exec that you will also customize the name of the
default Gopher server.  Note that the user's GOPHERRC file gets built
from the contents of this exec.

You may configure the GOPHER exec to use XPROC to parse the operands
given to it by the TSO user.  If you don't have XPROC, you should get
it, because the user can take advantage of all the power of TSO CLIST
style parsing if you do.  The GOPHER exec contains some code that
emulates full TSO parsing, but it isn't as robust or flexible as true
XPROC parsing.  You can get XPROC via USC's "MVS network server" code
distribution service.  For more information about this, send an email
message to [email protected] - or SERVICE@USCMVSA, which will
normally give better results if you have a BITNET (NJE) return address.

Note that if you install one of the REXX execs, you must also install
the NNMFIUCV exec in the same library.  This exec implements a rude
check for an existing TCP/IP socket application (e.g. another GOPHER)
in a different PIE MultiTSO session.  It prevents your users from
crashing TCP/IP, so it is highly recommended that you make use of it.

If the C/370 runtime library is not in the link list or otherwise
available to ISPF at execution time, you may arrange for it to be
allocated via LIBDEF in the GOPHER exec by setting "crunlibs".

Now, to install:

5. Submit the ALLOAD JCL to allocate the load library from which the
executable program will be run, as well as the object library in which
the compiled object modules will be stored.

6. Submit the COMPILE JCL to compile all the C sources and create the
required object modules in the object library built in the above step.
Note that this compiles all the modules for both the client and the
server.  If you are installing both, you need not repeat this step.

7. Submit the LINKC JCL to create the executable Gopher load module
from the object modules created in the above step.  This will create
or replace the load module GGCLIENT.

Note:  The linkedit must complete with a return code of zero.  If not,
don't use the resultant load module.  Check the libraries you specified
on the link step to see what went wrong.

In the future, if you have to recompile individual modules, you can use
the same JCL to compile only those modules, and the link will include
the new modules in the existing executable load module.  To do this,
you must retain the object library built above.

*********************************************************************

IMPORTANT:  If you are running TCP/IP V2R2 or higher on MVS, you must
change the following library names in the compile and link JCL:

  TCPIP.COMMMAC   should be changed to  TCPIP.SEZACMAC
  TCPIP.COMMTXT   should be changed to  TCPIP.SEZACMTX

If you are using SNS/TCPAccess, use these library names, or
whatever names are defined at your installation:

  TCPIP.COMMMAC   should be changed to  SNSTCP.V110.H
  TCPIP.COMMTXT   should be changed to  SNSTCP.V110.CILIB

If you are using SAS/C, change CEESTART to MAIN in the linkedit
ENTRY control statement.

*********************************************************************

Note:  If you have defined C370V1 in the GGUSER header file, you must
also include the system linklist load library or libraries containing
ISPLINK, ISPEXEC and IKJEFF18 when linking.  Otherwise you may delete
the lines from the linkedit JCL that reference them.

Note:  You need not include the PASCAL libraries or the AMPZMVSB
module if you are using TCP/IP Version 2 or higher, in which case
you must also define TCPIPV2 in the GGUSER headerfile.

8. Copy all the members of the panel PDS into the ISPF panel library
specified in the GOPHER exec.

9. Copy the help member (HELP) from the CNTL PDS into your local TSO
HELP library under the name GOPHER.  You may also create an additional
HELP member called GOPHLOC containing information local to your site,
if you wish.

10. Create the "About This Gopher" PDS from the ABOUT PDS.  This has
all the text users should see when they select the "About This Gopher"
item from the MVS client.  It also contains all the documentation you
need about setting up the client and the server, as well as creating
menus and REXX execs for use with MVS Gopher.  You may have already
done this as part of the server install, but it should also be
available from the client in "local" (serverless) mode, so that is
why I mention it here.

--------------------------------------------------------------------

Note:  Make sure that the C/370 run time library is available,
either in the system link list or in the ISPLLIB concatenation,
before attempting to run GOPHER.  See above under customization
of the GOPHER exec.

/ ADD NAME=INSTALLS

Directions for Installing the GOPHER MVS Server

Assuming the PDS's have been created:

1. Customize the ALLOAD, COMPILE and LINKS JCL members to reflect your
local conventions.  Note:  If you intend to place the executable into
an existing library, you can suppress that part of the ALLOAD JCL.
The name of the data set created must match across both members.

2. Customize the GGUSER header file as shown by the comments therein.
Note in particular the defines for your TCP/IP and your C compiler.
There are changes to the linkedit JCL that are related to these.

Now, to install:

3. Submit the ALLOAD JCL to allocate the load library from which the
executable program will be run, as well as the object library in which
the compiled object modules will be stored.

6. Submit the COMPILE JCL to compile all the C sources and create the
required object modules in the object library built in the above step.
Note that this compiles all the modules for both the client and the
server.  If you are installing both, you need not repeat this step.

5. Submit the LINKS JCL to create the executable Gopher load modules
from the object modules created in the above step.  This will create
or replace the load modules GGSERVER and GGSTASK.

Note:  The linkedit must complete with a return code of zero.  If not,
don't use the resultant load module.  Check the libraries you specified
on the link step to see what went wrong.

In the future, if you have to recompile individual modules, you can use
the same JCL to compile only those modules, and the link will include
the new modules in the existing executable load module.  To do this,
you must retain the object library built above.


*********************************************************************

IMPORTANT:  If you are running TCP/IP V2R2 or higher on MVS, you must
change the following library names in the compile and link JCL:

  TCPIP.COMMMAC   should be changed to  TCPIP.SEZACMAC
  TCPIP.COMMTXT   should be changed to  TCPIP.SEZACMTX

If you are using SNS/TCPAccess, use these library names, or
whatever names are defined at your installation:

  TCPIP.COMMMAC   should be changed to  SNSTCP.V110.H
  TCPIP.COMMTXT   should be changed to  SNSTCP.V110.CILIB

If you are using SAS/C, change CEESTART to MAIN in the linkedit
ENTRY control statement.

*********************************************************************

Note:  If you have defined C370V1 in the GGUSER header file, you must
also include the system linklist load library containing IKJEFF18
when linking.  Otherwise you may delete the line from the linkedit
JCL that references it.

Note:  You need not include the PASCAL libraries or the AMPZMVSB
module if you are using TCP/IP Version 2 or higher, in which case
you must also define TCPIPV2 in the GGUSER headerfile.

6. Create the "About This Gopher" PDS from the ABOUT PDS.  This has
all the text users should see when they select the "About This Gopher"
item from the MVS client.  It also contains all the documentation you
need about setting up the client and the server, as well as creating
menus and REXX execs for use with MVS Gopher.  You may have already
done this as part of the client install.

Note that member MENU contains the line PATH=DD:GGABOUT(ABOUT).  This
works now (it didn't use to), so there is no need to change it as long
as you have the GGABOUT DD statement in your server JCL pointing to
your ABOUT PDS (see below).

7. Create your Gopher access file.  See the instructions in the
"About This Gopher" PDS, member ABOUTSA, for a description of the
format.  A sample member is in member ACCESS of this CNTL PDS.

8. Create your Gopher startup parameter file.  This is not required,
but may be used to change compiled-in defaults.  See the PARMS member
for a default.

9. Allocate a PDS to hold Gopher REXX execs.  This is not required.
See the TSOHELP exec in the clist library of the distribution for a
sample application.

10. Create the MVS Gopher started task JCL from either of the samples
given in GOPHERD and GOPHERT.  The GOPHERT is recommended so that you
can use REXX execs that issue TSO commands, but you may not want to
use this for security reasons.  Either way, customize liberally.

Started task parameters:

MODULE=GGSERVER            the Gopher server load module in STEPLIB
STEPLIB='GOPHER.LOAD'      the load library containing the above
EXECLIB='GOPHER.EXEC'      the PDS containing server REXX execs
ACCESS='GOPHER.ACCESS'     the installation access file (sequential)
ABOUT='GOPHER.ABOUT'       the PDS containing "About This Gopher" info
MENU='GOPHER.MENU'         the initial gopher menu (sequential)
PARMS='GOPHER.PARMS'       the server startup file (sequential)
GPARM=                     the server EXEC parms (e.g. -d for debug)

Note: if you specify GPARM='-D', a GGDEBUG DD must be included.

You are strongly recommended to create 2 started tasks:  one for
non-REXX requests with MTFTASKS set to 8, and one for REXX requests
with MTFTASKS set to 1 (because of TSO/E multitasking bugs).
Give each a different port number in the GGPARMS configuration file
allocated to it.  See sample below.

11. Add the name of the Gopher server started task (the name as it
appears in SYS1.PROCLIB, not necessarily "GOPHER") to the MVS TCPIP
profile data set (or have your MVS TCP/IP system programmer do it).
In the examples below, let's say you've called it GOPHSRV.  Add this
in 2 places:

  (a) under AUTOLOG, so that TCP/IP will start the Gopher server
      automatically (a la inetd for unix) when a client connects.
      Just add the name to the list (e.g. GOPHSRV).

  (b) under PORT, so nobody can spoof the Gopher port.  The format
      here is:   70 TCP GOPHSRV

Repeat both for whatever number of Gopher server started tasks you
create (with different port numbers).

--------------------------------------------------------------------

Note:  Make sure that the C/370 run time library is available,
either in the system link list or in the STEPLIB concatenation,
before attempting to run GOPHER.

--------------------------------------------------------------------

Following is an example of how to define two Gopher servers.

'SYS1.PROCLIB(GOPHSRV)' - the primary gopher server (port 70)
                         will not run any REXX execs

//GOPHERD  PROC MODULE=GGSERVER,
//         STEPLIB='GOPHER.LOAD',
//         ACCESS='GOPHER.ACCESS(ACCESS)',
//         PARMS='GOPHER.ACCESS(PARMS)',
//         MENU='GOPHER.ACCESS(MENU)',
//         STDERR='*',
//         STDOUT='*',
//         GPARM=
//*
//GOPHERD  EXEC PGM=&MODULE,PARM='&GPARM'
//STEPLIB  DD   DISP=SHR,DSN=&STEPLIB
//SYSERR   DD   SYSOUT=&STDERR
//SYSPRINT DD   SYSOUT=&STDOUT
//SYSIN    DD   DUMMY
//GGDEBUG  DD   SYSOUT=*
//GGACCESS DD   DISP=SHR,DSN=&ACCESS
//GGPARMS  DD   DISP=SHR,DSN=&PARMS
//GGGOPHER DD   DISP=SHR,DSN=&MENU

'SYS1.PROCLIB(GOPHSRV2)' - the secondary gopher server (port 1570)
                          will run REXX execs

//GOPHERD2 PROC MODULE=GGSERVER,
//         STEPLIB='GOPHER.LOAD',
//         EXECLIB='GOPHER.EXEC',
//         ACCESS='GOPHER.ACCESS(ACCESS2)',
//         PARMS='GOPHER.ACCESS(PARMS2)',
//         MENU='GOPHER.ACCESS(MENU2)',
//         VIO=VIO,
//         STDERR='*',
//         STDOUT='*',
//         GPARM=
//*
//GOPHERD2 EXEC PGM=IKJEFT01,DYNAMNBR=128, PARM='&MODULE &GPARM'
//STEPLIB  DD   DISP=SHR,DSN=&STEPLIB
//SYSEXEC  DD   DISP=SHR,DSN=&EXECLIB  /* needed for %-invoked execs */
//GGEXEC   DD   DISP=SHR,DSN=&EXECLIB
//SYSTSPRT DD   UNIT=&VIO,SPACE=(TRK,(100,100)),RECFM=VBA,LRECL=255
//SYSERR   DD   SYSOUT=&STDERR
//SYSPRINT DD   SYSOUT=&STDOUT
//SYSTSIN  DD   DUMMY
//SYSIN    DD   DUMMY
//GGDEBUG  DD   SYSOUT=*
//GGACCESS DD   DISP=SHR,DSN=&ACCESS
//GGPARMS  DD   DISP=SHR,DSN=&PARMS
//GGGOPHER DD   DISP=SHR,DSN=&MENU

'GOPHER.ACCESS(PARMS)' - startup parameters used by the primary server

mtftasks  8    (this is the default)
port      70   (this is the default too)

'GOPHER.ACCESS(PARMS2)'- startup parameters used by the secondary server

mtftasks  1       Force single threading to prevent TSO burpages
port      1570    Must be different from primary server's port

-----------------------------------------------------------------------

I have not included members ACCESS, ACCESS2, MENU and MENU2, but you
will find samples elsewhere in this distribution.  ACCESS and ACCESS2
can be the same, except that you don't need the REXX execs to be in
ACCESS since ACCESS can't run REXX execs.  MENU and MENU2 should be
the same, since you may want to configure various Gopher clients
on other machines to try both MVS servers, but it's up to you.

/ ADD NAME=LINKC
//JOBNAME  JOB ACCOUNT,'NAME'
//*                                                                  */
//* Copyright (c) The Charles Stark Draper Laboratory, Inc., 1992    */
//*                                                                  */
//* This software is provided on an "AS IS" basis.  All warranties,  */
//* including the implied warranties of merchantability and fitness, */
//* are expressly denied.                                            */
//*                                                                  */
//* Provided this copyright notice is included, this software may    */
//* be freely distributed and not offered for sale.                  */
//*                                                                  */
//* Changes or modifications may be made and used only by the maker  */
//* of same, and not further distributed.  Such modifications should */
//* be mailed to the author for consideration for addition to the    */
//* software and incorporation in subsequent releases.               */
//*                                                                  */
//*********************************************************************
//*
//* Linkedit an executable Gopher load module.
//*
//GGLINK PROC LOADLIB='GOPHER.LOAD',             Executable load library
//            OBJLIB='GOPHER.INSTALL.OBJ',       Input object PDS
//            PLIBASE='SYS1.PLIBASE',            PL/1   link library
//            EDCBASE='SYS1.SEDCBASE',           C/370  link library
//            IBMBASE='SYS1.SIBMBASE',           PL/1+C common library
//            COMMTXT='TCPIP.COMMTXT',           TCP/IP link library
//            VIOUNIT=VIO,                       Temporary disk unit
//            OUTCLAS='*',                          SYSOUT class
//            LPARMS='LIST,LET,MAP',                Linkedit parameters
//            TEST=TEST                             TEST or NOTEST
//*
//LKED      EXEC PGM=IEWL,PARM='AMODE(31),&TEST,&LPARMS'
//SYSPRINT  DD SYSOUT=&OUTCLAS
//SYSLIB    DD DISP=SHR,DSN=&PLIBASE
//          DD DISP=SHR,DSN=&EDCBASE
//          DD DISP=SHR,DSN=&IBMBASE
//          DD DISP=SHR,DSN=&COMMTXT
//SYSLMOD   DD DISP=SHR,DSN=&LOADLIB
//SYSUT1    DD DSN=&&SYSUT1,UNIT=&VIOUNIT,DISP=(NEW,DELETE),
//          SPACE=(32000,(30,30))
//*
//         PEND
//*
//*
//* Link GOPHER load module. Like SMP/E, expect return code 8 when
//* doing this from scratch.  Additional one-or-two-module links
//* will just replace the corresponding parts of the load module.
//*
//GGLINK EXEC GGLINK
//LKED.SYSLIN DD DISP=SHR,DSN=&OBJLIB(GGCLIENT)
//            DD DISP=SHR,DSN=&OBJLIB(GGMALLOC)
//            DD DISP=SHR,DSN=&OBJLIB(GGMCLRTX)
//            DD DISP=SHR,DSN=&OBJLIB(GGMCONN)
//            DD DISP=SHR,DSN=&OBJLIB(GGMCSO)
//            DD DISP=SHR,DSN=&OBJLIB(GGMDBM)
//            DD DISP=SHR,DSN=&OBJLIB(GGMDFAIL)
//            DD DISP=SHR,DSN=&OBJLIB(GGMDIR)
//            DD DISP=SHR,DSN=&OBJLIB(GGMDISC)
//            DD DISP=SHR,DSN=&OBJLIB(GGMDISPL)
//            DD DISP=SHR,DSN=&OBJLIB(GGMDSOPT)
//            DD DISP=SHR,DSN=&OBJLIB(GGMDUMP)
//            DD DISP=SHR,DSN=&OBJLIB(GGMESRVR)
//            DD DISP=SHR,DSN=&OBJLIB(GGMFREEM)
//            DD DISP=SHR,DSN=&OBJLIB(GGMFTP)
//            DD DISP=SHR,DSN=&OBJLIB(GGMGETDS)
//            DD DISP=SHR,DSN=&OBJLIB(GGMGETM)
//            DD DISP=SHR,DSN=&OBJLIB(GGMGOFOR)
//            DD DISP=SHR,DSN=&OBJLIB(GGMGSRVL)
//            DD DISP=SHR,DSN=&OBJLIB(GGMIERR)
//            DD DISP=SHR,DSN=&OBJLIB(GGMIGET)
//            DD DISP=SHR,DSN=&OBJLIB(GGMINFO)
//            DD DISP=SHR,DSN=&OBJLIB(GGMISPF)
//            DD DISP=SHR,DSN=&OBJLIB(GGMIVGET)
//            DD DISP=SHR,DSN=&OBJLIB(GGMIVPUT)
//            DD DISP=SHR,DSN=&OBJLIB(GGMMENU)
//            DD DISP=SHR,DSN=&OBJLIB(GGMMTFER)
//            DD DISP=SHR,DSN=&OBJLIB(GGMOUTS)
//            DD DISP=SHR,DSN=&OBJLIB(GGMOUTTX)
//            DD DISP=SHR,DSN=&OBJLIB(GGMPMSG)
//            DD DISP=SHR,DSN=&OBJLIB(GGMPROC)
//            DD DISP=SHR,DSN=&OBJLIB(GGMSOCKT)
//            DD DISP=SHR,DSN=&OBJLIB(GGMSOPT)
//            DD DISP=SHR,DSN=&OBJLIB(GGMTNET)
//            DD DISP=SHR,DSN=&OBJLIB(GGMTSO)
//            DD DISP=SHR,DSN=&OBJLIB(GGMTYPE)
//            DD DISP=SHR,DSN=&OBJLIB(GGMUNALC)
//            DD DISP=SHR,DSN=&OBJLIB(GGMVIEW)
//            DD DISP=SHR,DSN=&OBJLIB(GGMVTX)
//            DD DISP=SHR,DSN=&OBJLIB(GGMWAIS)
//            DD DISP=SHR,DSN=&OBJLIB(GGMWHOIS)
//            DD DISP=SHR,DSN=&OBJLIB(GGMXTX)
//            DD *
ENTRY   CEESTART
NAME    GGCLIENT(R)
/*
/ ADD NAME=LINKS
//JOBNAME  JOB ACCOUNT,'NAME'
//*                                                                  */
//* Copyright (c) The Charles Stark Draper Laboratory, Inc., 1992    */
//*                                                                  */
//* This software is provided on an "AS IS" basis.  All warranties,  */
//* including the implied warranties of merchantability and fitness, */
//* are expressly denied.                                            */
//*                                                                  */
//* Provided this copyright notice is included, this software may    */
//* be freely distributed and not offered for sale.                  */
//*                                                                  */
//* Changes or modifications may be made and used only by the maker  */
//* of same, and not further distributed.  Such modifications should */
//* be mailed to the author for consideration for addition to the    */
//* software and incorporation in subsequent releases.               */
//*                                                                  */
//*********************************************************************
//*
//* Linkedit an executable Gopher load module.
//*
//GGLINK PROC LOADLIB='GOPHER.LOAD',             Executable load library
//            OBJLIB='GOPHER.INSTALL.OBJ',       Input object PDS
//            PLIBASE='SYS1.PLIBASE',            PL/1   link library
//            EDCBASE='SYS1.SEDCBASE',           C/370  link library
//            IBMBASE='SYS1.SIBMBASE',           PL/1+C common library
//            COMMTXT='TCPIP.COMMTXT',           TCP/IP link library
//            VIOUNIT=VIO,                       Temporary disk unit
//            OUTCLAS='*',                          SYSOUT class
//            LPARMS='LIST,LET,MAP',                Linkedit parameters
//            TEST=TEST                             TEST or NOTEST
//*
//LKED      EXEC PGM=IEWL,PARM='AMODE(31),&TEST,&LPARMS'
//SYSPRINT  DD SYSOUT=&OUTCLAS
//SYSLIB    DD DISP=SHR,DSN=&PLIBASE
//          DD DISP=SHR,DSN=&EDCBASE
//          DD DISP=SHR,DSN=&IBMBASE
//          DD DISP=SHR,DSN=&COMMTXT
//SYSLMOD   DD DISP=SHR,DSN=&LOADLIB
//SYSUT1    DD DSN=&&SYSUT1,UNIT=&VIOUNIT,DISP=(NEW,DELETE),
//          SPACE=(32000,(30,30))
//*
//         PEND
//*
//* Link GOPHER server subtask module.
//*
//GGLINK EXEC GGLINK
//LKED.SYSLIN DD DISP=SHR,DSN=&OBJLIB(GGSTASK)
//            DD DISP=SHR,DSN=&OBJLIB(GGMALLOC)
//            DD DISP=SHR,DSN=&OBJLIB(GGMDFAIL)
//            DD DISP=SHR,DSN=&OBJLIB(GGMDUMP)
//            DD DISP=SHR,DSN=&OBJLIB(GGMFTP)
//            DD DISP=SHR,DSN=&OBJLIB(GGMGSRVL)
//            DD DISP=SHR,DSN=&OBJLIB(GGMIERR)
//            DD DISP=SHR,DSN=&OBJLIB(GGMISPF)
//            DD DISP=SHR,DSN=&OBJLIB(GGMIVPUT)
//            DD DISP=SHR,DSN=&OBJLIB(GGMOUTS)
//            DD DISP=SHR,DSN=&OBJLIB(GGMPMSG)
//            DD DISP=SHR,DSN=&OBJLIB(GGMPROC)
//            DD DISP=SHR,DSN=&OBJLIB(GGMSOCKT)
//            DD DISP=SHR,DSN=&OBJLIB(GGMTSO)
//            DD DISP=SHR,DSN=&OBJLIB(GGMUNALC)
//            DD *
INCLUDE SYSLIB(IUCVFORC)
INCLUDE SYSLIB(EDCMTFS)
ENTRY   CEESTART
NAME    GGSTASK(R)
/*
//*
//* Link GOPHER server main module.
//*
//GGLINKS EXEC GGLINK
//LKED.SYSLIN DD DISP=SHR,DSN=&OBJLIB(GGMMTFER)
//            DD DISP=SHR,DSN=&OBJLIB(GGSERVER)
//            DD *
ENTRY   CEESTART
NAME    GGSERVER(R)
/*
/ ADD NAME=MENU
gopher_menu

TYPE=FILE
NAME=About This Gopher
PATH=DD:GGABOUT(ABOUT)
HOST=+
END

TYPE=FILE
NAME=TSO HELP (Sample Illustrating the REXX Interface)
PATH=EXEC:TSOHELP
HOST=+
END

TYPE=DIRECTORY
NAME=Library/Information Services
PATH=SYS0008.GOPHER.LIBRARY(LIBRS)
HOST=MVS.UDEL.EDU
END

TYPE=TELNET
NAME=UDINFO - University of Delaware Information
HOST=UDINFO.UDEL.EDU
END

TYPE=DIRECTORY
NAME=Network and System Services Computer Systems
PATH=SYS0008.GOPHER.DIR(UDTELNET)
HOST=MVS.UDEL.EDU
END

TYPE=DIRECTORY
NAME=Weather Across the Country
PATH=1/Weather
HOST=mermaid.micro.umn.edu
PORT=150
END

TYPE=DIRECTORY
NAME=Other Gopher and Information Servers
PATH=1/Other Gopher and Information Servers
HOST=gopher.micro.umn.edu
END

TYPE=DIRECTORY
NAME=How to use BITNET LISTSERV Servers
PATH=SYS0008.GOPHER.DIR(LISTSERV)
HOST=MVS.UDEL.EDU
END

TYPE=DIRECTORY
NAME=University of Delaware Newspapers
PATH=SYS0008.GOPHER.DIR(PAPERS)
HOST=MVS.UDEL.EDU
END

/*
/ ADD NAME=PARMS
!
! MVS Gopher Sample Startup Parameter File
!
! All entries in this file have the format:   variable value comments
!
! These are the possible values and their default settings:
!
! mtftasks 1    Number of concurrent subtasks to handle client requests
! port     70   The TCP port number by which clients connect
! qlength  20   Queue length for TCP server listen function
! timeout  60   Connection timeout specified when socket is closed
! domain   .DRAPER.COM     The suffix to be appende to bald host names

mtftasks 1    Number of concurrent subtasks to handle client requests
port     70   The TCP port number by which clients connect
qlength  20   Queue length for TCP subtask creation
timeout  60   Connection timeout specified when socket is closed

/ ENDUP
?!
//ABOUT    EXEC MDLOAD,BS='6160',TRK1='5',TRK2='1',TO='ABOUT'
//SYSIN    DD   DATA,DLM='?!'
/ ADD NAME=ABOUT
gopher_menu

TYPE=FILE
NAME=What Is Gopher?
PATH=(ABOUTW)
HOST=+
END

TYPE=FILE
NAME=Gopher FAQ (Frequently Asked Questions) List
PATH=(FAQ)
HOST=+
END

TYPE=DIRECTORY
NAME=Using The Gopher MVS Client
PATH=(ABOUTC)
HOST=+
END

TYPE=DIRECTORY
NAME=Administering the Gopher MVS Server
PATH=(ABOUTS)
HOST=+
END


/ ADD NAME=ABOUTC
gopher_menu

TYPE=FILE
NAME=Overview - Using Gopher on MVS
PATH=(ABOUTCO)
HOST=+
END

TYPE=FILE
NAME=Directory Mode - Viewing a Gopher Directory
PATH=(ABOUTCD)
HOST=+
END

TYPE=FILE
NAME=File Mode - Browsing a Gopher File
PATH=(ABOUTCF)
HOST=+
END

TYPE=FILE
NAME=Index Mode - Executing a Gopher Query
PATH=(ABOUTCQ)
HOST=+
END

TYPE=DIRECTORY
NAME=Customizing Your Gopher Startup
PATH=(ABOUTCS)
HOST=+
END


/ ADD NAME=ABOUTCD
Directory Mode - Viewing a Gopher Directory

When you are viewing a Gopher directory, you may perform any of the
following actions:

* Scroll up and down via the normal ISPF UP and DOWN commands or PFK's

* Type one of the following letters to the left of a menu item:

  S - Select the item for viewing or processing
  E - Extract the contents of the item to a file
  P - Print the contents of the item to a system printer
  B - Save the entry as a bookmark (in a bookmark file)
  D - Delete this entry from the bookmark file *** not yet supported **
  Q - Display the item as a file, even if it isn't ("Query")
  I - Display the internal Information of the menu item

* Enter one of the following commands on the command line:

  MENU - load a data set containing Gopher menu entries (e.g. bookmark)
  OPTions - set client processing options
  QUIT - exit Gopher entirely

  or any standard ISPF command.

Note:  Currently, in order to use the E or P selection code, you must
      choose the item via S or Q first.

When you select an item, what happens next depends on the type of the
item you have selected.

For a File type, you are placed in browse mode on the data.

For a Directory type, you get another Gopher directory.

For an Index type, you see a panel asking you to enter a search string
of some kind, after which a Gopher directory of results appears.

For a TELNET type, a telnet session is started, for which you must
enter a login name at the appropriate time.

For a TN3270 type, a tn3270 session is started, for which you must
enter a login name at the appropriate time.

For a CSO type, you are placed in a phonebook lookup session.

/ ADD NAME=ABOUTCF
Browse Mode - Viewing a File in Gopher

When you are viewing a Gopher file, you are placed in "browse mode".
This is very similar to normal ISPF data set browse, except that:

* In addition to most browse commands, you may issue any of the
  following commands:

  EXT or EXTRACT   - copy the current contents to a file
  PRT or PRNT      - print the current data to SYSOUT.
  BOOK or BOOKMARK - Save the entry as a bookmark (in a bookmark file).
  INFO             - Display the internal Information for this item
  OPTions          - Set Gopher client processing options
  QUIT - terminates Gopher entirely.

  Note that PRT is different from PRINT, which is a built-in ISPF
  command that prints the current physical screen image.

* The following ISPF browse commands are the only ones that are
  ***not*** supported under GOPHER:

 HEX
 BROWSE
 SUBMIT
 LOCATE .label
 .<string> (to assign a label)
 FIND P'generic-string'
 DISPLAY CC/NOCC

/ ADD NAME=ABOUTCO
The following is modified from Allan Tuchman's XGOPHER help.

Gopher on MVS is an ISPF dialog interface to the Gopher
information delivery system from the University of Minnesota.

The initial panel asks you to specify the name of the Gopher server
host.  Normally you leave the other input fields alone.

You may also specify a hostname of "-", which means that you want
to use your own private Gopher data without going through a server.
When you do this, you must provide the path name to your private
top-level menu (data set name, FULLY QUALIFIED, WITHOUT QUOTES).

Assuming that the top-level path points to a valid Gopher menu,
the initial display will show the top level directory of
gopher information available.  Selecting an item from this
list will fetch the contents of a file, subdirectory, or
other information.  The directory display may be updated to
show the new subdirectory.

To select an item, type "S" in front of it and press ENTER.
This puts you into ISPF BROWSE mode on the text of the item.
You may also type "Q" in front of an item to see it in text format
even if it is a directory.  If you have retrieved an item, you may
type "E" in front of it to extract it into a file - but you may
do this more easily via the EXTract command from within BROWSE.

Type "I" in front of the item to view the internal menu information.
This is sometimes helpful if you are not sure why you are having
trouble accessing an item.

Type "B" in front of the item to save it in a bookmark file.  You will
be prompted to supply the name of a bookmark data set; the default is
GOPHER.BOOKMARK under your TSO prefix.  You may retrieve bookmarks at a
later date by typing "MENU GOPHER.BOOKMARK" - or whatever data set name
you used - or you can put a pointer to the bookmark data set in your
private Gopher menu (for which you need to learn how to hack your
GOPHERRC file).

Some gopher file types are not supported by the current client.
These will not appear on your menus.  Furthermore, you may not
be permitted to access some items, depending upon the server
and the host from which you are trying to access them.  These
restrictions do not apply to local mode, where y