<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="index" title="Text File" newcontext="true">
<p>
:READ  GOPHER23 README   A1 GOPHER 10/15/92 10:09:53
</p>
<p>I guess I&#x27;m at least as bad as anyone else about documentation.
There are comments in the sample files.   Work is progressing
on  &quot;real&quot;  documentation.
</p>
<p>This package,  including both client (GOPHERC) and server (GOPHERD)
is available in several forms,  any one of which contains all you need:
</p>
<p>        GOPHER23 CARDDUMP  --  Cornell &#x27;CARD&#x27; format
        GOPHER23 TAR       --  Rice CMS TAR format (UNIX &#x27;tar&#x27; compatible)
        GOPHER23 READCARD  --  punch it to yourself and run READCARD
        GOPHER23 PACKAGE   --  available via LISTSERV
</p>
<p>Except!  that the READCARD deck does not contain executable MODULEs.
</p>
<p> ------  ------  ------  ------  ------  ------  ------  ------  ------
</p>
<p>Setting up the client  (user end):
</p>
<p>Really there&#x27;s not much to it.  Just have GOPHER EXEC on an ACCESSed
disk and the rest of the package on some other,  or the same,  disk.
GOPHER EXEC is site-tailorable and calls GOPHERC EXEC,  the real code.
Here at Rice,  we put most applications on their own minidisk  (makes
maintenance easier,  for us anyway),  and our GOPHER EXEC checks for
the existence of GOPHERC EXEC and does a LINK and ACCESS of the right
product disk(s) iff needed.
</p>
<p>Setting up the server:
</p>
<p>CMS Gopher server &quot;directories&quot; are defined by FILELIST files.
FILELISTs within FILELISTs define sub-directories.  The &quot;root&quot;
is typically &lt;userid&gt; FILELIST,  where &lt;userid&gt; is the VM userid
of the server virtual machine,  usually GOPHERD.
</p>
<p>Everything after the filemode  (third word, presently ignored, BTW)
is considered a &quot;relative path&quot; and concatenated onto the end of the
path to the directory (FILELIST) which lists the file.   This path is
the &quot;name&quot; that the client displays,  unless the name is overridden in
a NAMES file  (or if the file is a GOPHER (link) file).   The filename
(first word) must be preceeded by at least one blank space in the
FILELIST.   An asterisk in column one defines a comment in the FILELIST.
(just like a standard CMS FILELIST,  so you can in fact use a Gopher
FILELIST as input to CMS&#x27; FILELIST EXEC)
</p>
<p>A GOPHER file (filetype GOPHER) is a &quot;link&quot; to another Gopher server.
The contents of a GOPHER (link) file are the same as for a UNIX
Gopher link file,  of the form:
</p>
<p>        name=Rice University CMS Gopher server
        host=RICEVM1.RICE.EDU
        port=70
        path=1/
        type=1
</p>
<p>A NAMES file may accompany any FILELIST file,  providing overrides
to the default &quot;type&quot; and &quot;name&quot; values sent to the client(s).
The NAMES file is also where pipeline specifications are defined,
if any,  for each file.
</p>
<p> ------  ------  ------  ------  ------  ------  ------  ------  ------
</p>
<p>There is a discussion list,  VMGOPHER@PUCC.Princeton.EDU.
</p>
<p>There is another CMS Gopher (both server and client),  sometimes called
&quot;the Vienna Gopher&quot;,  available from Gerhard Gonter &lt;GONTER@AWIWUW11&gt;.
</p>
<p>From:    WTS@MAINE.MAINE.EDU (Wayne Smith)
</p>
<p>        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).
</p>
<p>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 try some
        &quot;links&quot;  (filetype GOPHER) and sub-menus  (filetype FILELIST).
        Then try some overrides  (with a NAMES file for the FILELIST
        to be overridden).
</p>
<p>        It has been suggested that the whole thing be consolidated:
        from FILELIST/GOPHER/NAMES,  just have NAMES files.   In the
        long run,  this will probably work.   It&#x27;s almost possible now,
        but still,  many may find FILELISTs easier to understand.
</p>
<p>Q:      How to I point to another server/menu?
A:      The easiest way is with a &quot;link&quot; file  (filetype GOPHER).
        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.
</p>
<p>Q:      How does a GOPHER file differ from a &quot;link&quot; in a NAMES file?
A:      The NAMES file is far more extensive.   With CMS GopherD,
        you don&#x27;t use &quot;link&quot; files to override the characteristics
        of other files in the menu  (as you would with a UNIX server).
        With CMS GopherD,  GOPHER (link) files are exclusively used to
        reference other network (usually non-local) resources,  while
        the NAMES file may apply to files which reside on your system
        and/or &quot;links&quot; or remote services which are mearly listed locally.
</p>
<p>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 &quot;receive&quot; an item,  press PF5.   The receive function
        will not overwrite an existing file  (though you can still
        view &amp; SAVE from XEDIT).
</p>
<p>Q:      GOPHERD should document DISKWRIT in the prolog.
A:      GOPHERD uses DISKWRIT to perform the same &quot;reaccess&quot; trick
        GONE EXEC does when you reconnect.   If disks appear to have
        changed,  they are reACCESSed so that GopherD has the latest
        revision of any files on said minidisks.
</p>
<p>Q:      Why are the &quot;STANDARD&quot; translate-table files provided?
        Are these for use with the server?
A:      The default ASCII&lt;---&gt;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 &quot;network EBCDIC&quot;
        (codepage 1047)  and  &quot;extended ASCII&quot;  (ISO 8859-1).
</p>
<p>Q:      If PhoneBk and Search are available, how do we use them?
A:      Presently,  CMS GopherD does not support PhoneBk and Search engines.
        The client (GOPHERC) is happy to utilize such servers on other hosts.
</p>
<p>Q:      Some GOPHERs restrict access or output to some clients;  how?
A:      Specify an &quot;auth&quot; value in the NAMES file.   The tag :auth.
        allows for control over any object in a menu  (defined by a
        FILELIST and/or NAMES file),  even the menu itself.
</p>
<p>Q:      Is there anything different about your RXSOCKET?
A:      RXSOCKET was created by Arty Ecock.   He maintains it.
        Rice doesn&#x27;t have any mods to RXSOCKET,  and Gopher doesn&#x27;t
        need any special treatment from RXSOCKET.   If you find an
        RXSOCKET packaged with CMS Gopher to be out-of-date,  by all
        means,  use the current one or get the latest from Arty.
</p>
<p>        If you pick-up RXSOCKET MODULE from a UNIX FTP host,  you must
        &quot;deblock&quot; it back into its CMS form (record oriented) with:
</p>
<p>        PIPE DISK RXSOCKET U-MODULE | DEBLOCK CMS | DISK RXSOCKET MODULE
</p>
<p> ------  ------  ------  ------  ------  ------  ------  ------  ------
</p>
<p>Thanks to:
</p>
<p>Yossie Silverman,  Jim Gerland,  Arty Ecock,  Serge Goldstein,
Chuck Boeheim,  Wayne Smith,  Jim Colten,  Nick LaFlamme,  ...
</p>
<p>(this list continues to grow,  and some have surely been left out)
</p>
<p> ------  ------  ------  ------  ------  ------  ------  ------  ------
</p>
<p>Files associated with CMS Gopher 2.3:
</p>
<p>      GOPHER23 FILELIST
      GOPHER23 NAMES
      GOPHER23 README      (this file)
</p>
<p>client:
      GOPHER   EXEC
      GOPHERC  EXEC
      GOPHERC  REXX
      GVM      EXEC
      GVM      DIRECT
</p>
<p>server:
      GOPHERD  EXEC
      GOPHERD  REXX
      GOPHERDM REXX
      GOPHERDS REXX
      GOPHERD  DIRECT
</p>
<p>support:
      EXPAND   REXX        (expands tabs in plain text files)
      DROPDOTS REXX        (removes trailing . lines from plain text)
      PRINT    REXX        (works kinda like regular CMS PRINT)
      A2E      REXX        (ASCII to EBCDIC translation)
      E2A      REXX        (EBCDIC to ASCII translation)
      TCPA2E   REXX        (ASCII to EBCDIC translation)
      TCPE2A   REXX        (EBCDIC to ASCII translation)
      STANDARD TCPXLATE    (translate table in source form)
      STANDARD TCPXLBIN    (translate table in object form)
</p>
<p>support modules:
      RXSOCKET MODULE      (TCP/IP socket interface to REXX EXECs)
      DISKWRIT MODULE      (tells if a R/O minidisk has been changed)
      _REFRESH EXEC        (reACCESSes changed R/O minidisks)
</p>
<p>a tool for browsing Gopher FILELISTs directly:
      GL       EXEC
</p>
<p>help files:
      GOPHER   HELPCMS
      BROWSER  HELPGOPHER
      VIEW     HELPGOPHER
      FIND     HELPGOPHER
      LOOKUP   HELPGOPHER
      SEARCH   HELPGOPHER
      BOOKMARK HELPGOPHER
      BOOKLIST HELPGOPHER
</p>
<p>serving CMS HELP via Gopher:
      GOPHERDH REXX
      GOPHERDI REXX
      HELP     NAMES
      NEWS     NAMES
</p>
<p>general information:
      GOPHER   PROTOCOL
      GOPHERT  GIF         &quot;Surfin&#x27; the InterNet&quot;
      GOPHER   COPYRIGHT
</p>
<p>:READ  GOPHER23 FILELIST A1 GOPHER 10/15/92 09:36:01
*
* This is CMS Gopher 2.3 (v2r3), client and server.
* If you have any questions,  send e-mail to TROTH@RICEVM1.RICE.EDU.
*
</p>
<p>*
*       Copyright 1992 Richard M. Troth.   This software was developed
*       with resources provided by Rice University and is intended
*       to serve Rice&#x27;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.
*
</p>
<p>*
* You will need RXSOCKET and CMS Pipelines.     (5785-RAC)
* You will need VM TCP/IP, V2 or later.         (5735-FAL)
*
* This file is in CMS TAR compatible format.
* (in fact it was used to create gopher23.tar)
*
*     filename filetype fm relative_path (may be verbose)
      GOPHER23 FILELIST *  gopher23.filelist
      GOPHER23 NAMES    *
      GOPHER23 README   *
*
* client:
      GOPHER   EXEC     *
      GOPHERC  EXEC     *
      GOPHERC  REXX     *
      GVM      EXEC     *
      GVM      DIRECT   *
*
* server:
      GOPHERD  EXEC     *
      GOPHERD  REXX     *
      GOPHERDM REXX     *
      GOPHERDS REXX     *
      GOPHERD  DIRECT   *
*
* support:
      EXPAND   REXX     *
      DROPDOTS REXX     *
      PRINT    REXX     *
      A2E      REXX     *
      E2A      REXX     *
      TCPA2E   REXX     *
      TCPE2A   REXX     *
      STANDARD TCPXLATE *
      STANDARD TCPXLBIN *
*
* support modules:
      RXSOCKET MODULE   *
      DISKWRIT MODULE   *
      _REFRESH EXEC     *
*
* a tool for browsing Gopher FILELISTs directly:
      GL       EXEC     *
*
* help files:
      GOPHER   HELPCMS  *
      BROWSER  HELPGOPHER *
      VIEW     HELPGOPHER *
      FIND     HELPGOPHER *
      LOOKUP   HELPGOPHER *
      SEARCH   HELPGOPHER *
      BOOKMARK HELPGOPHER *
      BOOKLIST HELPGOPHER *
*
* serving CMS HELP via Gopher:
      GOPHERDH REXX     *
      GOPHERDI REXX     *
      HELP     NAMES    *
      NEWS     NAMES    *
*
* general information:
      GOPHER   PROTOCOL *
      GOPHERT  GIF      *  mascot
      GOPHER  COPYRIGHT *
*
* If you pick-up RXSOCKET or DISKWRIT from a UNIX FTP host,  you must
* &quot;de-block&quot; them back into their CMS form (record oriented) with:
*
*   PIPE DISK RXSOCKET U-MODULE | DEBLOCK CMS | DISK RXSOCKET MODULE
*   PIPE DISK DISKWRIT U-MODULE | DEBLOCK CMS | DISK DISKWRIT MODULE
*
:READ  GOPHER23 NAMES    A1 GOPHER 07/24/92 13:07:15
*
* This is CMS Gopher 2.3 (v2r3), client and server.
* If you have any questions,  send e-mail to TROTH@RICEVM1.RICE.EDU.
*
* You will need RXSOCKET and CMS Pipelines.     (5785-RAC)
* You will need VM TCP/IP, V2 or later.         (5735-FAL)
*
*
* An override, so that users can eyeball the filelist via Gopher:
*
:nick.GOPHER23  :fn.GOPHER23  :ft.FILELIST  :type.0
*
*      ...  where changing the type to 0 makes it *not* a sub-directory.
*
:nick.SAMPLE    :fn.SAMPLE    :ft.GOPHER    :type.0
                                            :name.sample.gopher
:nick.SAMPLE    :fn.SAMPLE    :ft.FILELIST  :type.0
                                            :name.sample.filelist
*
:READ  GOPHER   EXEC     A1 GOPHER 10/15/92 09:37:45
/*
 *        Name: GOPHER EXEC
 *     Purpose: VM InterNet Gopher client &quot;wrapper&quot; EXEC
 *      Author: Rick Troth, Rice University, I/S VM Systems Support
 *        Date: 1992-Mar-25, Jun-02
 *
 *        Note: Tailor this locally to your own OBTAIN/DROP conventions
 */
</p>
<p>Parse Arg argstring
</p>
<p>&#x27;STATE GOPHERC EXEC *&#x27;                  /*  this is how we access     */
If rc ^= 0 Then &#x27;EXEC OBTAIN GOPHER&#x27;    /*  applications on RICEVM1   */
</p>
<p>If argstring = &quot;&quot; Then argstring = &quot;is.rice.edu&quot;
&#x27;EXEC GOPHERC&#x27; argstring
</p>
<p>/*  &#x27;EXEC DROP GOPHER&#x27;  */
</p>
<p>Exit rc
</p>
<p>:READ  GOPHERC  EXEC     A1 GOPHER 10/14/92 14:40:51
/*
 *        Name: GOPHERC EXEC
 *              VM TCP/IP Network GOPHER Client command
 *      Author: Rick Troth, Rice University, I/S VM Systems Support
 *              Major thanks to Arty Ecock for the wonderful RXSOCKET.
 *              Thanks to Serge Goldstein for help with many things.
 *        Date: 1992-May-29
 */
</p>
<p>/*
 *      Copyright 1992 Richard M. Troth.   This software was developed
 *      with resources provided by Rice University and is intended
 *      to serve Rice&#x27;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.
 */
</p>
<p>/*
 *       Calls:
 *              RXSOCKET MODULE   -- for TCP/IP network services
 *              PIPE     MODULE   -- for various I/O functions
 *
 *              VM TCP/IP, V2 or later (through RXSOCKET)
 *
 *              GOPHERC  REXX     -- pipeline stages
 *              PRINT    REXX
 *              EXPAND   REXX
 *              DROPDOTS REXX
 *              TCPA2E   REXX
 *              TCPE2A   REXX
 *
 *   Variables:
 *        host  -  the InterNet name of the machine hosting Gopher
 *        port  -  the TCP &quot;port&quot; number where the server listens
 *        path  -  something the Gopher server can key on for retrieval
 *        name  -  a &quot;topic&quot; in displayable (layman&#x27;s) form
 *        char  -  an indicator as to what type of record we&#x27;re seeing
 *        mark  -  a symbolic representation of the record descriptor
 *
 *              All of the above may be &quot;stemmed&quot;.
 *
 *           i  -  a counter
 *          ki  -  the number of items in a &quot;menu&quot;
 *          ko  -  the number of the current item (ie: an offset)
 *          kl  -  lines available for viewing (always = rows - 6)
 *      errmsg  -  current error or informative message (if any)
 *
 *    GlobalVs:
 *        HOST  -  the host to connect to for the root menu
 *        PORT  -  the port on that host for Gopher service
 *        PATH  -  the path to the initial menu
 *        NAME  -  the name of the initial menu
 *      TELNET  -  the name of the CMS TELNET command  (user preference)
 *      TN3270  -  the name of the command TN3270 telnet connections
 *      VIEWER  -  the CMS command (XEDIT or BROWSE) used to view a file
 *   BOOKMARK.  -  prefix for all bookmark variables,  where what
 *                 follows the dot is the name of the bookmark
 */
</p>
<p>gopher = &quot;Gopher&quot;
</p>
<p>progid = &quot;CMS Gopher 2.3.3&quot;
</p>
<p>Address &quot;COMMAND&quot;
</p>
<p>Parse Source . . . . . arg0 .
</p>
<p>&#x27;STATE RXSOCKET MODULE *&#x27;
If rc ^= 0 Then Do
    Say arg0 || &quot;: You must have RXSOCKET to run&quot; progid
    Exit rc
    End  /*  If  ..  Do  */
</p>
<p>&#x27;STATE TCPIP DATA *&#x27;
If rc ^= 0 Then Do
    Say arg0 || &quot;: You must have VM TCP/IP V2 to run&quot; progid
    Exit rc
    End  /*  If  ..  Do  */
</p>
<p>&#x27;STATE PIPE MODULE *&#x27;
If rc ^= 0 Then Do
    Say arg0 || &quot;: You must have CMS Pipelines to run&quot; progid
    Exit rc
    End  /*  If  ..  Do  */
</p>
<p>Parse Arg host port path &quot;(&quot; options
</p>
<p>If host = &quot;&quot; &amp; options = &quot;&quot; Then &#x27;GLOBALV SELECT GOPHER GET PATH NAME&#x27;
                            Else name = &quot;&quot;
</p>
<p>If port = &quot;&quot; Then &#x27;GLOBALV SELECT GOPHER GET PORT&#x27;
If port = &quot;&quot; Then port = 70
</p>
<p>If host = &quot;&quot; Then &#x27;GLOBALV SELECT GOPHER GET HOST&#x27;
If host = &quot;&quot; Then host = &quot;gopher.micro.umn.edu&quot;
</p>
<p>/* Save current host/port in case GLOBALV fails */
ohost = host; oport = port; opath = path; oname = name
</p>
<p>/* Initialize some variables */
type = &#x27;&#x27;; bookmark = &#x27;&#x27;; first  = &#x27;FIRST&#x27;; searchterm = &#x27;&#x27;
bkl  = 0 ; tube     = &#x27;&#x27;; errmsg = &#x27;&#x27;;      quit = 0
</p>
<p>/* process options, if any */
Do While options ^= &quot;&quot;
    Parse Var options op options
    Upper op
    Select  /*  op  */
        When    Abbrev(&quot;TOPIC&quot;,op,2)    | ,
                Abbrev(&quot;PATH&quot;,op,1)     Then Do
                    path = options
                    options = &quot;&quot;
                    End  /*  When  ..  Do  */
        When    Abbrev(&quot;TUBE&quot;,op,2)     Then
                    Parse Var options tube options
        When    Abbrev(&quot;BOOKMARK&quot;,op,1) | ,
                Abbrev(&quot;BKMARK&quot;,op,3)   Then
                    Parse Var options bookmark options
        When    Abbrev(&quot;BOOKLIST&quot;,op,5) | ,
                Abbrev(&quot;BKLIST&quot;,op,3)   Then Do
                    bkl = 1
                    first = &#x27;&#x27;
                    End  /*  When  ..  Do  */
        Otherwise errmsg = &quot;Unrecognized option:&quot; op
        End  /*  Select  op  */
    End  /*  Do  While  */
opath = path
</p>
<p>/* Lookup initial bookmark, if any */
If bookmark&lt;&gt;&#x27;&#x27; Then Do
    obk = bookmark
    bookmark=Translate(Translate(bookmark,&#x27;.&#x27;,&#x27; &#x27;))
    &#x27;GLOBALV SELECT GOPHMARK GET&#x27; bookmark
    If (rc&lt;&gt;0 | bookmark = &#x27;&#x27;) Then Do
        Say arg0 || &quot;: Bookmark&quot; obk &quot;not found&quot;
        bookmark = &#x27;&#x27;
        &#x27;CP SLEEP 2 SEC&#x27;
        bkl = 1
        first = &#x27;&#x27;
        End
    Else Do                                          /* david@ufl.edu */
        tbookmark = value(bookmark)
        Parse Var tbookmark ,
            . &#x27;05&#x27;x host &#x27;05&#x27;x port &#x27;05&#x27;x path &#x27;05&#x27;x ,
                    name &#x27;05&#x27;x type &#x27;05&#x27;x searchterm &#x27;05&#x27;x .
        End  /* Else  Do  */                         /* david@ufl.edu */
   If host=&#x27;&#x27; Then Do
      Say arg0 || &quot;: Bookmark&quot; obk &quot;not found&quot;
      bookmark = &#x27;&#x27;
      &#x27;CP SLEEP 1 SEC&#x27;
      bkl = 1
      first = &#x27;&#x27;
      host = ohost; port = oport; path = opath; name = oname
   End
   Else first = &#x27;&#x27;
End
</p>
<p>If name = &quot;&quot; Then Do
    Parse Value Reverse(path) With name &quot;/&quot; .
    name = Reverse(name)
    End  /*  If  ..  Do  */
If name = &quot;&quot; Then name = &quot;(root menu)&quot;
</p>
<p>/* Initialize screen variables */
Call FSINIT tube
</p>
<p></p>
<p>/* Now go display first menu or file or bookmark list */
Select
    When bkl Then
        Call BKLIST
    When type = &#x27;file&#x27; Then
        Call SHOW_FILE host, port, path, name, searchterm
    When path = &quot;&quot; Then
        Call SHOW_MENU host, port, path, name, first, searchterm
    When Left(path,1) = &#x27;1&#x27; Then
        Call SHOW_MENU host, port, path, name, first, searchterm
    When Left(path,1) = &#x27;/&#x27; Then
        Call SHOW_MENU host, port, path, name, first, searchterm
    Otherwise
        Call SHOW_FILE host, port, path, name, searchterm
    End  /*  Select  */
</p>
<p>/* On return, type out any final errmsg */
If errmsg ^= &quot;&quot; Then Say arg0 || &#x27;:&#x27; errmsg
</p>
<p></p>
<p>Exit
</p>
<p></p>
<p></p>
<p>/* ----------------------------------------------------------- SHOW_MENU
 */
SHOW_MENU:          Procedure Expose fs. quit progid errmsg
</p>
<p>Parse Arg host,port,path,name,first,searchterm
</p>
<p>&#x27;PIPE (END ?) VAR PATH&#x27; ,
    &#x27;| TCPE2A&#x27; gopher &#x27;| APPEND LITERAL &quot;&#x27; || &#x27;0D0A&#x27;x || &#x27;&quot; | JOIN *&#x27; ,
    &#x27;| E: GOPHERC&#x27; host port,
    &#x27;| DEBLOCK LINEND 0A | DROP LAST 1&#x27; ,
    &#x27;| CHANGE /&#x27; || &#x27;0D&#x27;x || &#x27;/&#x27; || &#x27;09&#x27;x || &#x27;/&#x27; ,
    &#x27;| TCPA2E&#x27; gopher &#x27;| DROPDOTS | STEM STEM.&#x27; ,
    &#x27;? E: | PAD&#x27; fs.scrcols-13 &#x27;| CHOP&#x27; fs.scrcols-13,
    &#x27;| SPEC &quot;&#x27; || &#x27;00C3&#x27;x || sba(1,12) || &#x27;&quot; 1 1-67 NEXT&#x27;,
    &#x27;| FULLSCR&#x27; fs.tube &#x27;NOREAD | HOLE&#x27;
</p>
<p>/* Ooopppsss...   empty directory */
If stem.0 = 0 Then Do
    errmsg = &quot;No files selected or no files available.&quot;
    Return
    End  /*  If  ..  Do  */
</p>
<p>/* is it a server error? */
If stem.0 = 1 &amp; Left(stem.1,1) = &#x27;-&#x27; Then Do
    Parse Var stem.1 . &quot;-&quot; errmsg &#x27;05&#x27;x .
    Return
    End  /*  If  ..  Do  */
</p>
<p>/* process data from the server into a stemmed &quot;menu&quot; */
ki = stem.0
Do i = 1 to ki
    Parse Var stem.i 1 char.i 2 name.i &#x27;05&#x27;x path.i &#x27;05&#x27;x,
                                host.i &#x27;05&#x27;x port.i &#x27;05&#x27;x .
    Select  /*  char.i  */
        When char.i = &quot;0&quot; Then mark.i = &quot;&lt;document&gt;&quot;
        When char.i = &quot;1&quot; Then mark.i = &quot;&lt;menu&gt;&quot;
        When char.i = &quot;2&quot; Then mark.i = &quot;&lt;phonebk&gt;&quot;
        When char.i = &quot;3&quot; Then mark.i = &quot;&lt;error&gt;&quot;
        When char.i = &quot;4&quot; Then mark.i = &quot;&lt;MAC&gt;&quot;
        When char.i = &quot;5&quot; Then mark.i = &quot;&lt;DOS&gt;&quot;
        When char.i = &quot;6&quot; Then mark.i = &quot;&lt;UUE&gt;&quot;
        When char.i = &quot;7&quot; Then mark.i = &quot;&lt;search&gt;&quot;
        When char.i = &quot;8&quot; Then mark.i = &quot;&lt;telnet&gt;&quot;
        When char.i = &quot;9&quot; Then mark.i = &quot;&lt;binary&gt;&quot;
        When char.i = &quot;s&quot; Then mark.i = &quot;&lt;sound&gt;&quot;
        When char.i = &quot;p&quot; Then mark.i = &quot;&lt;PScript&gt;&quot;
        When char.i = &quot;r&quot; Then mark.i = &quot;&lt;r-file&gt;&quot;
        When char.i = &quot;i&quot; Then mark.i = &quot;&lt;info&gt;&quot;
        When char.i = &quot;M&quot; Then mark.i = &quot;&lt;MIME&gt;&quot;
        When char.i = &quot;T&quot; Then mark.i = &quot;&lt;tn3270&gt;&quot;
        When char.i = &quot;-&quot; Then mark.i = &quot;&lt;error&gt;&quot;
        When char.i = &quot;+&quot; Then mark.i = &quot;&lt;dup&gt;&quot;
        Otherwise              mark.i = &quot;type =&quot; char.i
        End  /*  Select  char.i  */
    name.i = Strip(name.i)      /* for cosmetics */
    name.i = clean(name.i)      /* for robustness */
    host.i = Strip(host.i)      /* for robustness */
    port.i = Strip(port.i)      /* for robustness */
    End  /*  Do  While  ..  */
char.0 = stem.0; mark.0 = stem.0; name.0 = stem.0
path.0 = stem.0; host.0 = stem.0; port.0 = stem.0
</p>
<p>/* display the &quot;menu&quot; and process user&#x27;s response */
row = 4; col = 12; kl = fs.scrrows - 6; ko = 1
needle = &quot;&quot;     /* may be re-used within this context */
</p>
<p>Do Forever
</p>
<p>    wscreen = sba(0,-1) || field(&quot;BLUE&quot;,&quot;PROT&quot;) || sba(0,0) || progid ,
                        || sba(0,fs.scrcols-Length(host)) ,
                        || host || ko || &quot;/&quot; || ki ,
                        || sba(1,11) || field(&quot;WHITE&quot;,&quot;PROT&quot;,&quot;HIGH&quot;) ,
                        || sba(2,(fs.scrcols-Length(name))/2) ,
                        || field(&quot;RED&quot;,&quot;HIGH&quot;,&quot;PROT&quot;) || name
</p>
<p>    wscreen = wscreen   || sba(fs.scrrows-2,-1) ,
                        || field(&quot;WHITE&quot;,&quot;HIGH&quot;,&quot;PROT&quot;) ,
                        || Left(errmsg,fs.scrcols-1) ,
                        || sba(fs.scrrows-1,-1) ,
                        || field(&quot;BLUE&quot;,&quot;PROT&quot;) ,
                        || &quot;F1=Help F2=View F3=Back F6=Find&quot; ,
                           &quot;F7=Up F8=Down F9=BKset F10=BKlst F12=Quit&quot;
</p>
<p>    i = 1; j = ko
    Do While i &lt;= kl &amp; j &lt;= ki
        wscreen = wscreen || sba(i+3,-1) ,
                          || field(&quot;BLUE&quot;,&quot;PROT&quot;,&quot;HIGH&quot;)
        If char.i = &#x27;i&#x27; Then
        wscreen = wscreen || Left(name.j,fs.scrcols-1)
                        Else
        wscreen = wscreen || Left(mark.j,11) ,
                          || field(&quot;GREEN&quot;) ,
                          || Left(name.j,fs.scrcols-13)
        i = i + 1;  j = j + 1
        End
</p>
<p>    If j &lt; ki Then wscreen = wscreen || sba(1,12) || &quot;More&quot;
</p>
<p></p>
<p>    rscreen = write_read(wscreen || sba(row,col) || &#x27;13&#x27;x)
    Parse Var rscreen 1 aid 2 offset . &#x27;11&#x27;x rscreen
    offset = fix(offset)
    row = offset % fs.scrcols; col = offset // fs.scrcols
</p>
<p></p>
<p>    /* keep the row/col values within bounds */
    If  row      &lt;   4       Then row = 4
    If  row      &gt;   kl + 3  Then row = kl + 3
    If  row + ko &gt;   ki + 4  Then row = ki + 4 - ko
    col = 12    /* just reset it */
</p>
<p>    i = row + ko - 4
    errmsg = &quot;&quot;
</p>
<p>    Select /* aid */
        When  aid = &#x27;7D&#x27;x   /* enter */ | ,
              aid = &#x27;F2&#x27;x   /*  PF2  */ | ,
              aid = &#x27;C2&#x27;x   /*  PF14 */ | ,
              aid = &#x27;7B&#x27;x   /*  PF11 */ | ,
              aid = &#x27;4B&#x27;x   /*  PF23 */ Then Do
            Select /* char.i */
                When char.i = &quot;0&quot; Then
                   Call SHOW_FILE host.i,port.i,path.i,name.i,searchterm
                When char.i = &quot;1&quot; Then
                    Call SHOW_MENU host.i,port.i,path.i,name.i,&#x27;&#x27;
                When char.i = &quot;2&quot; Then
                    Call LOOKUP host.i,port.i,path.i,name.i
                When char.i = &quot;4&quot; Then  /* MAC */
                   Call SHOW_FILE host.i,port.i,path.i,name.i,searchterm
                When char.i = &quot;5&quot; Then  /* DOS */
                   Call SHOW_FILE host.i,port.i,path.i,name.i,searchterm
                When char.i = &quot;6&quot; Then  /* UUE */
                   Call SHOW_FILE host.i,port.i,path.i,name.i,searchterm
                When char.i = &quot;7&quot; Then
                    Call SEARCH host.i,port.i,path.i,name.i
                When char.i = &quot;8&quot; Then
                    Call TELNET host.i,port.i,path.i,name.i
                When char.i = &quot;T&quot; Then
                    Call TN3270 host.i,port.i,path.i,name.i
                Otherwise errmsg = &quot;Can&#x27;t display this type of file.&quot;
                End /* Select char.i */
            End  /*  When ..  Do  */
        When  aid = &#x27;F4&#x27;x   /*  PF4  */ | ,
              aid = &#x27;C4&#x27;x   /*  PF16 */ Then Call PRINT_MENU path
        When  aid = &#x27;F5&#x27;x   /*  PF5  */ | ,
              aid = &#x27;C5&#x27;x   /*  PF17 */ Then Do
            Select /* char.i */
                When char.i = &quot;1&quot; Then
                    Call SHOW_MENU host.i,port.i,path.i,name.i
                When char.i = &quot;2&quot; Then
                    Call LOOKUP host.i,port.i,path.i,name.i
                When char.i = &quot;7&quot; Then
                    Call SEARCH host.i,port.i,path.i,name.i
                When char.i = &quot;8&quot; Then
                    Call TELNET host.i,port.i,path.i,name.i
                When char.i = &quot;T&quot; Then
                    Call TN3270 host.i,port.i,path.i,name.i
                Otherwise
                    Call LOAD_FILE host.i,port.i,path.i,name.i,char.i
                End /* Select char.i */
            End  /*  When ..  Do  */
        When  aid = &#x27;F6&#x27;x   /*  PF6  */ | ,
              aid = &#x27;C6&#x27;x   /*  PF18 */ Then Call FIND_IN_MENU
        When  aid = &#x27;F7&#x27;x   /*  PF7  */ | ,
              aid = &#x27;C7&#x27;x   /*  PF19 */ Then Do
            ko = Max(ko-kl+1,1)
            row = 4
            End  /*  When  ..  Do  */
        When  aid = &#x27;F8&#x27;x   /*  PF8  */ | ,
              aid = &#x27;C8&#x27;x   /*  PF20 */ Then Do
            ko = Min(ko+kl-1,ki)
            row = 4
            End  /*  When  ..  Do  */
        When  aid = &#x27;F9&#x27;x   /*  PF9  */ | ,
              aid = &#x27;C9&#x27;x Then Call BKSET host,port,path,name,&#x27;menu&#x27;,
                                          ,searchterm
        When  aid = &#x27;7A&#x27;x   /*  PF10 */ | ,
              aid = &#x27;4A&#x27;x   /*  PF22 */ Then Call BKLIST
        When  aid = &#x27;6D&#x27;x   /* clear */ | ,
              aid = &#x27;6E&#x27;x   /*  PA2  */ Then Do
            row = 4; col = 12
            End  /*  When ..  Do  */
        When  aid = &#x27;F3&#x27;x   /*  PF3  */ | ,
              aid = &#x27;C3&#x27;x   /*  PF15 */ Then Leave
        When  aid = &#x27;7C&#x27;x   /*  PF12 */ | ,
              aid = &#x27;4C&#x27;x   /*  PF24 */ | ,
              aid = &#x27;F0&#x27;x   /* sysrq */ | ,
              aid = &#x27;6C&#x27;x   /*  PA1  */ Then quit = 1
        When  aid = &#x27;F1&#x27;x   /*  PF1  */ | ,
              aid = &#x27;C1&#x27;x   /*  PF13 */ Then Call HELP &quot;BROWSER&quot;
        When  aid = &#x27;00&#x27;x               Then
              errmsg = &quot;Error reading from the terminal&quot;
        Otherwise errmsg = &quot;Unassigned function key&quot; c2x(aid)
        End /* Select aid */
</p>
<p>    If quit Then Leave
</p>
<p>    End  /*  Do  Forever  */
</p>
<p>Return
</p>
<p></p>
<p></p>
<p>/* -------------------------------------------------------------- TELNET
 */
TELNET:   Procedure Expose fs. errmsg progid
</p>
<p>If fs.tube ^= &quot;&quot; Then Do
    errmsg = &quot;Can&#x27;t TELNET from this screen&quot;
    Return
    End /* If .. Do */
</p>
<p>Parse Arg host,port,path,name
&#x27;VMFCLEAR&#x27;
Say progid &quot;TELNET&quot; host port
Say name
If path ^= &quot;&quot; Then Do
    Say &quot;login with:&quot; path
/*  &#x27;BEEP&#x27;
    Say &quot;Press CLEAR to continue ... &quot;  */
    Say &quot;Press ENTER to continue ... &quot;
    Parse External
    End  /*  If  ..  Do  */
</p>
<p>If port = &quot;0&quot; Then port = &quot;&quot;
&#x27;GLOBALV SELECT GOPHER GET TELNET&#x27;
If telnet = &quot;&quot; Then telnet = &quot;TELNET&quot;
Address &quot;CMS&quot; telnet host port
&#x27;VMFCLEAR&#x27;
</p>
<p>Return
</p>
<p></p>
<p></p>
<p>/* -------------------------------------------------------------- TN3270
 *  This is almost exactly the same as the  TELNET  routine,  but we
 *  let the user run a different program,  specified in global var
 *  TN3270,  if they wish.
 */
TN3270:   Procedure Expose fs. errmsg progid
</p>
<p>If fs.tube ^= &quot;&quot; Then Do
    errmsg = &quot;Can&#x27;t TELNET from this screen&quot;
    Return
    End /* If .. Do */
</p>
<p>Parse Arg host,port,path,name
&#x27;VMFCLEAR&#x27;
Say progid &quot;TN3270&quot; host port
Say name
If path ^= &quot;&quot; Then Do
    Say &quot;login with:&quot; path
    Say &quot;Press ENTER to continue ... &quot;
    Parse External
    End  /*  If  ..  Do  */
</p>
<p>If port = &quot;0&quot; Then port = &quot;&quot;
&#x27;GLOBALV SELECT GOPHER GET TN3270&#x27;
If tn3270 = &quot;&quot; Then Do
    &#x27;GLOBALV SELECT GOPHER GET TELNET&#x27;
    If telnet = &quot;&quot; Then telnet = &quot;TELNET&quot;
    tn3270 = telnet
    End  /*  If  ..  Do  */
Address &quot;CMS&quot; tn3270 host port
&#x27;VMFCLEAR&#x27;
</p>
<p>Return
</p>
<p></p>
<p></p>
<p>/* -------------------------------------------------------- FIND_IN_MENU
 * Find a particular string within the current menu.
 * This is only called from SHOW_MENU and retains that context.
 * (ie: no &quot;procedure&quot; statement)
 */
FIND_IN_MENU:
</p>
<p>    prompt = prompt(fs.scrrows-2,22,&quot;Enter&quot; ,
        &quot;search string: &quot;,needle|| ,
        Copies(&#x27;00&#x27;x,fs.scrcols-23-Length(needle))) || ,
        sba(fs.scrrows-2,22) || &#x27;13&#x27;x
</p>
<p>    /* this should be WRITE instead of ERASE/WRITE */
    Parse Value write_read(wscreen||prompt) With 1 aid 2 . &#x27;11&#x27;x rscreen
    /*
    Parse Value write_read(prompt,,&#x27;00&#x27;x) With 1 aid 2 . &#x27;11&#x27;x rscreen
     */
</p>
<p>    Select /* aid */
        When  aid = &#x27;7D&#x27;x   /* enter */ Then Do
            Parse Var rscreen . 3 rscreen
            If rscreen ^= &quot;&quot; Then needle = Translate(Strip(rscreen))
            If needle = &quot;&quot; Then Return
            errmsg = &quot;String not found in menu.&quot;
            If ko &gt;= ki Then Return
            Do i = ko + 1 to ki
                If Index(Translate(name.i),needle) &gt; 0 Then Do
                    ko = i
                    errmsg = &quot;&quot;
                    Return
                    End  /*  If  ..  Do  */
                End  /*  Do  For  */
                Return
            End  /*  When  ..  Do  */
        When  aid = &#x27;7C&#x27;x   /*  PF12 */ | ,
              aid = &#x27;4C&#x27;x   /*  PF24 */ | ,
              aid = &#x27;F0&#x27;x   /* sysrq */ | ,
              aid = &#x27;6C&#x27;x   /*  PA1  */ Then quit = 1
        When  aid = &#x27;F1&#x27;x   /*  PF1  */ | ,
              aid = &#x27;C1&#x27;x   /*  PF13 */ Then Call HELP &quot;FIND&quot;
        Otherwise nop
        End  /*  Select  aid  */
</p>
<p>Return
</p>
<p></p>
<p></p>
<p>/* -------------------------------------------------------------- SEARCH
 * Issue a keyword search request to the specified server.
 * This is only called from SHOW_MENU and retains that context.
 * (ie: no &quot;procedure&quot; statement)
 */
SEARCH:
</p>
<p>Do Forever
</p>
<p>    prompt = prompt(fs.scrrows-2,20,&quot;Enter&quot; ,
            &quot;KEY word(s): &quot;,Copies(&#x27;00&#x27;x,fs.scrcols-21)) || ,
        sba(fs.scrrows-2,20) || &#x27;13&#x27;x
</p>
<p>    /* this should be WRITE instead of ERASE/WRITE */
    Parse Value write_read(wscreen||prompt) With 1 aid 2 . &#x27;11&#x27;x rscreen
    /*
    Parse Value write_read(prompt,,&#x27;00&#x27;x) With 1 aid 2 . &#x27;11&#x27;x rscreen
     */
</p>
<p>    Select /* aid */
        When  aid = &#x27;7D&#x27;x   /* enter */ Then Do
            Parse Var rscreen . 3 rscreen
/*          keywords = Translate(Strip(rscreen))                      */
            keywords = Strip(rscreen)
            If keywords = &quot;&quot; Then Leave
            /*  prepend a  path&lt;TAB&gt;  for WAIS servers  */
            keywords = path.i || &#x27;05&#x27;x || keywords
            Call SHOW_MENU host.i,port.i,keywords,name.i,&#x27;&#x27;,keywords
            Leave
            End  /*  When  ..  Do  */
        When  aid = &#x27;F3&#x27;x   /*  PF3  */ | ,
              aid = &#x27;C3&#x27;x   /*  PF15 */ Then Leave
        When  aid = &#x27;7C&#x27;x   /*  PF12 */ | ,
              aid = &#x27;4C&#x27;x   /*  PF24 */ | ,
              aid = &#x27;F0&#x27;x   /* sysrq */ | ,
              aid = &#x27;6C&#x27;x   /*  PA1  */ Then quit = 1
        When  aid = &#x27;F1&#x27;x   /*  PF1  */ | ,
              aid = &#x27;C1&#x27;x   /*  PF13 */ Then Call HELP &quot;SEARCH&quot;
        When  aid = &#x27;00&#x27;x               Then Do
              errmsg = &quot;Error reading from the terminal&quot;
              Leave
              End  /*  When  ..  Do  */
        Otherwise nop
        End  /*  Select  aid  */
</p>
<p>    If quit Then Leave
</p>
<p>    End  /*  Do  Forever  */                         /* david@ufl.edu */
</p>
<p>Return
</p>
<p></p>
<p></p>
<p>/* -------------------------------------------------------------- LOOKUP
 * Issue a phonebook search request to the specified server.
 */
LOOKUP:             Procedure Expose fs. quit progid errmsg
</p>
<p>If fs.tube ^= &quot;&quot; Then Do
    errmsg = &quot;Can&#x27;t do phonebook lookups from this terminal.&quot;
    Return
    End  /*  If ..  Do  */
</p>
<p>Parse Arg host,port,,name,.
</p>
<p>Do Forever
</p>
<p>    wscreen = sba(0,-1) || field(&quot;BLUE&quot;,&quot;PROT&quot;) || sba(0,0) || progid ,
                        || sba(0,fs.scrcols-Length(host)) || host ,
                        || sba(1,11) || field(&quot;WHITE&quot;,&quot;PROT&quot;,&quot;HIGH&quot;) ,
                        || sba(2,(fs.scrcols-Length(name))/2) ,
                        || field(&quot;RED&quot;,&quot;HIGH&quot;,&quot;PROT&quot;) || name
</p>
<p>    If errmsg = &quot;&quot; Then
        wscreen = wscreen || sba(fs.scrrows-2,-1) ,
                  || field(&quot;BLUE&quot;,&quot;PROT&quot;) || ,
         &quot;Fill-in search field(s), use TAB to skip to the next field.&quot; ,
                       sba(fs.scrrows-1,-1) || field(&quot;BLUE&quot;,&quot;PROT&quot;) || ,
       &quot;Press ENTER to lookup this person,    F3=Go back,    F12=Quit&quot;
                   Else wscreen = wscreen || sba(fs.scrrows-1,-1) || ,
                        field(&quot;WHITE&quot;,&quot;HIGH&quot;,&quot;PROT&quot;) || errmsg
</p>
<p>    wscreen = wscreen ||,
        prompt(4,24,&quot;Name:&quot;,Copies(&#x27;00&#x27;x,fs.scrcols-25)) || ,
        prompt(5,24,&quot;Phone Number:&quot;,Copies(&#x27;00&#x27;x,fs.scrcols-25)) || ,
        prompt(6,24,&quot;E-Mail Address:&quot;,Copies(&#x27;00&#x27;x,fs.scrcols-25)) || ,
        prompt(7,24,&quot;Earth Address:&quot;,Copies(&#x27;00&#x27;x,fs.scrcols-25))
</p>
<p>    rscreen = write_read(wscreen || sba(4,24) || &#x27;13&#x27;x)
    Parse Var rscreen 1 aid 2 offset . &#x27;11&#x27;x rscreen
    offset = fix(offset)
    row = offset % fs.scrcols; col = offset // fs.scrcols
</p>
<p>    errmsg = &quot;&quot;
    Select /* aid */
        When  aid = &#x27;7D&#x27;x   /* enter */ Then Do
</p>
<p>            query = &quot;&quot;
            Do While rscreen ^= &quot;&quot;
                Parse Var rscreen 1 offset 3 data &#x27;11&#x27;x rscreen
                offset = fix(offset)
                row = offset % fs.scrcols; col = offset // fs.scrcols
                Select  /*  row  */
                    When row = 4 Then
                        query = query &quot;name=&quot; || data
                    When row = 5 Then
                        query = query &quot;phone=&quot; || data
                    When row = 6 Then
                        query = query &quot;email=&quot; || data
                    When row = 7 Then
                        query = query &quot;address=&quot; || data
                    Otherwise nop
                    End  /*  Select  row  */
                End  /*  Do  While  */
            If query ^= &quot;&quot; Then Do
/*              query = &quot;query&quot;||query||&#x27;0D25&#x27;x||&quot;quit&quot;               */
/* jrg 5/13/92 modified to return all info from query command */
                query = &quot;query&quot;||query||&quot; return all&quot;||&#x27;0D25&#x27;x||&quot;quit&quot;
                Call EDIT_CSO_RESPONSE host,port,query,name
                /* need to deal with errors from this &quot;child&quot; */
                End  /*  If  ..  Do  */
</p>
<p>            End  /*  When  ..  Do  */
        When  aid = &#x27;6D&#x27;x   /* clear */ | ,
              aid = &#x27;6E&#x27;x   /*  PA2  */ Then nop
        When  aid = &#x27;F3&#x27;x   /*  PF3  */ | ,
              aid = &#x27;C3&#x27;x   /*  PF15 */ Then Leave
        When  aid = &#x27;7C&#x27;x   /*  PF12 */ | ,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
</p>
</card>
</wml>
