DENICOMP SYSTEMS                                 Winsock RSHD/NT
Copyright 1995  Denicomp Systems
All Rights Reserved


INTRODUCTION

Winsock RSHD/NT (Remote Shell Daemon) is a service for Windows
NT that accepts requests for command execution and file
transfers from other hosts on the network via TCP/IP and
executes them on the PC running Winsock RSHD/NT.  It runs under
Microsoft Windows NT 3.5 or higher.

Winsock RSHD/NT is similar to the Unix server of the same name,
but provides some special functionality for the Windows
environment, such as:

    o Ability to send keystrokes to the command running under Windows NT
    o Support for the rcp command to allow copying to and from the PC
    o Security mechanism to allow/deny access for hosts and users
    o Capture of standard output/standard error output of NT Console and
      MS-DOS programs

Command requests can come from hosts running other operating
systems such as Unix or from other PC's running Windows NT or
Windows 3.1 using the standard rsh utility that comes with your
TCP/IP package or Winsock RSH, also available from Denicomp
Systems.

Files can be copied to the PC or from the PC running Winsock
RSHD/NT using the standard TCP/IP rcp command.  This includes
the rcp command available with Unix or Windows NT or a PC-based
rcp command such as Winsock RCP, also available from Denicomp
Systems.


REQUIREMENTS

Winsock RSHD/NT requires a Intel x86-based PC running Windows
NT 3.5 or higher and a network.


WINSOCK RSHD/NT INSTALLATION

To install Winsock RSHD/NT,  insert the Winsock RSHD/NT
diskette into your diskette drive.  Then, from the Windows NT
Program Manager menu, select File, then Run.  Then type the
name of your diskette drive followed by "SETUP".  For example,
if the diskette is in the A: drive, type "A:SETUP".  Then press
the Enter key.  (This can also be done from a Command Prompt if
you prefer).

The Winsock RSHD/NT Installation window will then appear.
Verify that the drive letter shown in the Source field is
correct.  If it is not, specify the proper drive.

Specify the directory in which you would like Winsock RSHD/NT
to be installed in the Destination field.  This will default to
the \WRSHDNT directory on the drive where Windows NT is
installed.  You may change it if you wish.

If you do not want Winsock RSHD/NT to be installed as a Windows
NT Service, uncheck the Install as Service option and it will
not be added to the list of Windows NT Services.  Winsock
RSHD/NT can be run as a program instead of a service if you
wish (explained later).  This is also useful when installing
under Windows 95, which does not support services.

Press the Install button to begin the installation.  Press
Cancel if you wish to exit.

Files will be copied from the diskette onto your hard drive.
When all files have been copied, the installation will ask you
whether or not you want Windows NT to start the Winsock RSHD/NT
service each time Windows NT starts.  Click Yes to start it
automatically each time Windows NT starts or No if you want to
start it manually.

The Winsock RSHD/NT service will then be installed in Windows
NT's list of services and it will be started.

See the section on Winsock RSHD/NT Utilities for instructions
on how to manually start and stop the Winsock RSHD/NT service.

Important:  If you are using Windows NT 3.50, due to a
limitation of version 3.50, you must run Winsock RSHD/NT
through the System Account if you wish to have the ability to
send keystrokes to programs run via the rsh command.  You can
run the Winsock RSHD/NT service in the context of another
user's account, but you will not be able to send keystrokes to
programs (the program will execute, however; it just will not
receive the keystrokes).  All other functions will operate
properly.  This problem does not occur in Windows NT 3.51; you
can run Winsock RSHD/NT in the security context of a user.


REMOVING WINSOCK RSHD/NT

To remove Winsock RSHD/NT, you must first stop the Winsock
RSHD/NT service, then remove the service from Windows NT's list
of services.  From the Windows NT Program Manager menu, choose
File, then Run.  Enter the directory in which you installed
Winsock RSHD/NT followed by "wrshdctl".  For example,
"c:\wrshdnt\wrshdctl".  Press Enter.

From the Winsock RSHD/NT Control menu, first select "Stop the
Winsock RSHD/NT Service".  Then select "Remove the Winsock
RSHD/NT Service".

Note: You may also use the Windows NT Control Panel "Services"
icon to do this.

You can then delete the Winsock RSHD/NT directory.  You should
also delete the file WRSHDNT.CPL in the Windows System
directory (\WINNT35\SYSTEM32 for example).  This is the Control
Panel applet for Winsock RSHD/NT.


RUNNING WINSOCK RSHD/NT AS A PROGRAM

You can optionally run Winsock RSHD/NT as a Windows NT program
instead of a service.  This requires that somone log in to
Windows NT so that Winsock RSHD/NT starts.

To start Winsock RSHD/NT as a program, execute the following
command:

          wrshdnt  /s

If you are executing this command from the Windows NT Command
Prompt, you should use the command:

          start wrshdnt  /s

If you do not use the start command, you will not have access
to that Command Prompt window until Winsock RSHD/NT is stopped.
Be sure that you do not already have Winsock RSHD/NT running as
a service.

When Winsock RSHD/NT is started, it will display a window where
messages about the status of Winsock RSHD/NT will display.  The
number and type of messages that display depends on the Message
Level option in the Winsock RSHD/NT Configuration.

To stop Winsock RSHD/NT, simply close the window.

Important Note:  The ability to send keystrokes via the rsh
command through Winsock RSHD/NT does not work when it is
running as a program.


WINSOCK RSHD/NT CONFIGURATION

Winsock RSHD/NT will work properly using its default
configuration.  You only need to configure Winsock RSHD/NT if
you wish to change any of the available options, enable
security, or use the logging capabilities.  By default, no
security is enforced and no logging is done

You configure Winsock RSHD/NT by using the Windows NT Control
Panel.  In the Control Panel, you should see an icon labeled
RSHD.  Double-clock on that icon to configure Winsock RSHD/NT.

Important Note:  After changing a Winsock RSHD/NT Configuration
option, you do not need to stop and restart Winsock RSHD/NT.
It will recognize the change, unless you disable the monitoring
of the registry (see below).


BASIC CONFIGURATION OPTIONS


Security File:                     (Default: None)

     Specify the full path name of the Security File used by
     Winsock RSHD/NT to enforce security (allow and deny users
     and hosts).  The format of this file is explained in more
     detail later.  If you do not specify a Security File, all
     users and hosts will be granted access to execute commands
     and transfer files to and from your PC, unless you enable
     the option that requires remote user names to exist as
     Windows NT users (see below).
     
     If you do specify a Security File and it does not exist,
     no users or hosts will be granted access.

     If you do not wish to enforce any security, do not specify
     a filename.
     
Must Remote Users be Valid Users on this System?  (Default: Unchecked)

     If this option is unchecked, user login names sent to
     Winsock RSHD/NT by rcp and rsh do not need to be valid
     users on this system.  Security is enforced soley through
     the Security File.
     
     If this option is checked, user login names from rcp and
     rsh must be valid users on the this system.  If the user
     is not valid, access will be denied.  This is the standard
     behavior of a rshd daemon.  However, if the rcp and rsh
     commands are being executed from another operating system
     such as Unix, the user login names may not be the same
     between systems.  If user logins are the same, you can
     then enable this option for security.  If they are
     different, you should not enable this option.

Message Log:                       (Default: None)

     Specify the full path name of a file where any messages
     from Winsock RSHD/NT should be stored.  The message file
     is optional.  You should only enable the message log when
     you are trying to find the source of a problem, since the
     message log can become quite large on an active system.
     
     This option is used in conjunction with the Message Level
     option.  If Message Level is set to a value greater than
     zero (0), Winsock RSHD/NT will output messages that
     provide information about its operation.  These messages
     are mostly useful for problem determination.
     
     The message file created is a text file that you can
     examine at any time using utilities such as TYPE or MORE,
     or editors such as Notepad.  You can clear the message log
     at any time by simply deleting it.
     
Message Level:                (Default: 0)

     Specifies the level of detail of the messages stored in
     the file specified in the Message Log option.  The default
     level is 0, which will not write any messages to the
     message log file.  Levels 1 through 4 will product
     increasing amounts of detail (level 1 provides the least
     detail, level 4 provides the most).

Request Log:                       (Default: None)

     This option allows you to log all requests (commands to be
     executed) in a file you specify.  Each time someone
     attempts to execute a command through Winsock RSHD/NT, the
     date and time, the user name, the host name, and the
     command will be written to this file.

Deny Log:                          (Default: None)

     This option allows you to log all permission violations in
     a file you specify.  Each time someone is denied
     permission to execute a command through Winsock RSHD/NT,
     the date and time, the user name, the host name, and the
     command will be written to this file.
     
Error Log:                         (Default: None)

     This option allows you to log all command execution errors
     in a file you specify.  Each time someone receives an
     error trying to execute a command through Winsock
     
     RSHD/NT, the date and time, the user name, the host name,
     the command, and error message will be written to this
     file.  These are errors that occur after the user has been
     granted permission to execute the command.  For example,
     an error would be logged if a program was to be run that
     did not exist.
     

NOTE: Each of the log files may refer to the same file name if
you wish. They will not overwrite each other.  Each message is
appended to the end of the file.  You should be sure to
periodically delete the log file(s) because they can get large
over time on an active system.


ADVANCED CONFIGURATION OPTIONS

These configuration options are for advanced users and do not
normally require deviations from their default values.  Full
understanding of some of them require an understanding of
TCP/IP and Windows Sockets operation and programming.

Some options refer to TCP/IP option set on sockets used by
Winsock RSHD/NT.  Sockets are connections over the network.
Winsock RSHD/NT uses three sockets:

     Listen:    Listens for connections.

     Connect:   Connection made to receive parameters from the rsh or
                rcp command.

     Stderr:    Socket created to send error messages back to the
                remote host.


The advanced options are:


Attempt Redirection on Every Command:   (Default: Unchecked)

     When you execute a command through Winsock RSHD/NT, it
     assumes that the command is a Windows program (not a
     Console or MS-DOS program) and that there is no
     redirection of standard output/standard error back to the
     remote system, unless you use the special "<[CON]>",
     "<[CON2]>", "<[DOS]>", or "<[DOS2]>" indicators in the rsh
     command.  (This is explained in more detail later.)
     
     If you mostly execute Windows NT Console programs and/or
     MS-DOS programs via rsh through Winsock RSHD/NT, you can
     check this option and Winsock RSHD/NT will assume that
     each command is a Console/MS-DOS program and attempt to
     send its standard output/standard error back to the remote
     system.  It treats every rsh request
     as if the "<[CON]>" option was specified.  You do not need
     to specify the "<[CON]>" indicator; it is assumed.
     
     If you check this option, you still may execute Windows
     programs via rsh and they will operate properly.  However,
     unless you specify the special "<[WIN]>" indicator for
     Windows programs in the rsh command, there are a few
     downsides:  First, there will be slightly more overhead
     when executing Windows programs because Winsock RSHD/NT
     will attempt to capture the standard output/standard
     error.  Second, you will not be able to send keystrokes to
     the Windows program.  Third, Winsock RSHD/NT will wait for
     the Windows program to complete before closing the
     connection.  Again, these downsides can be overcome by
     specifying the "<[WIN]>" indicator.
     
Preserve Case in Multi-File Copies:     (Default: Unchecked)

     Specifies whether Winsock RSHD/NT should preserve the case
     of filenames when files are copied from this system by rcp
     using wildcards or recursive copies.  By default, when the
     remote system uses a wildcard or recursive copy to get
     files from this PC, Winsock RSHD/NT will convert all
     directory and filenames to lowercase letters before
     sending them to the remote system.
     
     Although the Windows NT filesystem is not case sensitive
     (ABC and abc are the same file), it can store the case of
     the filename.  When copying files via rcp to operating
     systems that are case sensitive, such as Unix, it is
     usually most useful to convert all of the names to
     lowercase letters.
     
     If you do not wish to have all of the names converted to
     lowercase letters, check this option.  The rcp command
     will then create files in exactly the same case as the
     names appear in the directory under Windows NT.
     
     Note that this affects only wildcard and recursive copies.
     When copying individual files, the files will be created
     in the case you specify in the rcp command.

Disable Multithreading in RSHD/NT:      (Default: Unchecked)

     Multithreading allows Winsock RSHD/NT to process multiple
     requests simultaneously.  When multithreading is disabled
     by checking this option, Winsock RSHD/NT will accept and
     complete only one request at a time.  Other requests
     received during this time will be queued and executed in
     the order in which they were received.   Normally, you
     will want multithreading enabled, but you can disable it,
     for example, to ensure that the system will not become
     bogged down with requests.
     

Disable Monitoring of Registry for Changes:  (Default: Unchecked)

     Normally, Winsock RSHD/NT starts a thread that monitors
     the Windows Registry for changes to the Winsock RSHD/NT
     configuration options and if any options are changed, re-
     reads the registry so that the new options take effect.

     If this option is check to disable the monitoring of the
     Registry, you must stop and start Winsock RSHD/NT manually
     (or by rebooting the system) for the Registry changes to
     take effect.
     
     You may want the Registry monitoring disabled for security
     purposes so that no Winsock RHSD/NT options are changed
     while the system is in operation.

RCP Block Size:                    (Default: 512)

     Specifies the number of bytes in a block of data that the
     Remote Copy (rcp) service of Winsock RSHD/NT processes at
     one time.  When files are copied to the PC, it reads from
     the network and writes to the disk in blocks of this size.
     When files are copied from the PC, it reads from the disk
     and writes to the network in blocks of this size.  Note
     that this is an internal block size only; it does not
     change any TCP/IP parameters.
     
RCP Spoofing Prefix:               (Default: <blank>)

     Specifies the first characters of the rcp command send by
     the remote host that Winsock RSHD/NT should use when
     "spoofing" the RCP protocol.  With its roots in Unix, the
     rcp command actually internally executes an rsh command to
     start rcp on the remote host before transferring files.
     Winsock RSHD/NT "spoofs" or looks for rcp commands
     executed through rsh by the remote host and services the
     RCP transfer.
     
     By default, Winsock RSHD/NT looks for the command prefixes
     of "rcp -" and "/usr/bin/rcp -".  Some rcp commands
     (especially those on non-Unix and non-Windows systems) may
     send other commands to initiate the RCP protocol.  If
     yours does, you should enter the command prefix (up to and
     including the first hyphen) here.  For example, rcp on one
     VAX VMS implementation requires the prefix "set vms_rcp =
     1 ; rcp -" as the spoofing prefix.
     
     Regardless of the spoofing prefix entered, Winsock RSHD/NT
     will continue to look for the standard "rcp -" and
     "/usr/bin/rcp -" prefixes.
     
Listen Port:                       (Default: 514)

     Specifies the port number that Winsock RSHD/NT listens to
     for connections.  The standard port for the Remote Shell
     daemon is 514.


Listen Backlog:                    (Default: 5)

     The number of requests that can be backlogged when Winsock
     RSHD/NT is listening for connections.  The minimum is 1;
     the maximum is usually 5.

Listen Shutdown:                   (Default: 2)

     Specifies how the "Listen" socket is to be shutdown before
     it is closed.  A value of zero (0) means that it is not
     shutdown.  A value of 1 halts all receiving before
     shutting down.  A value of 2 halts all sending and
     receiving before shutting down.

Listen Linger:                (Default: -1)

     If this option is set to zero (0), the TCP/IP linger
     option will be turned off for the "Listen" socket.  If
     this option is set to a value greater than zero, the
     linger option will be turned on and the timeout value will
     be set to the value you assign this option.  If this
     option is set to -1 or does not appear in the
     configuration file, no linger options will be set; the
     default linger option will be in effect.

Listen KeepAlive:                  (Default: -1)

     If this option is set to zero (0), the TCP/IP keepalive
     option will be turned off for the "Listen" socket.  If
     this option is set to 1, the keepalive option will be
     turned on.  If this option is set to -1 or does not appear
     in the configuration file, no keepalive option will be
     set; the default keepalive option will be in effect.

Listen ReuseAddr:                  (Default: 1)

     If this option is set to zero (0), the TCP/IP reuseaddr
     option (Reuse Address) will be turned off for the "Listen"
     socket.  If this option is set to 1, the reuseaddr option
     will be turned on.  If this option is set to "-1" or does
     not appear in the configuration file, no reuseaddr option
     will be set; the default reuseaddr option will be in
     effect.

Connection Shutdown:               (Default: 2)

     Sets the shutdown option for the connection socket.  See
     the Listen Shutdown option for an explanation of the valid
     values.

Connection Linger:                 (Default: -1)

     Sets the linger option for the connection socket.  See the
     Listen Linger option for an explanation of the valid
     values.

Connection KeepAlive:              (Default: -1)

     Sets the keepalive option for the connection socket.  See
     the Listen KeepAlive option for an explanation of the
     valid values.

Connection ReuseAddr:              (Default: 1)

     Sets the reuseaddr option for the connection socket.  See
     the Listen ReuseAddr option for an explanation of the
     valid values.

Stderr Linger:                     (Default: -1)

     Sets the linger option for the standard error socket.  See
     the Listen Linger option for an explanation of the valid
     values.

Stderr KeepAlive:                  (Default: -1)

     Sets the keepalive option for the standard error socket.
     See the Listen KeepAlive option for an explanation of the
     valid values.

Stderr ReuseAddr:                  (Default: 1)

     Sets the reuseaddr option for the standard error socket.
     See the Listen ReuseAddr option for an explanation of the
     valid values.

Stderr Shutdown:                   (Default: 2)

     Sets the shutdown option for the standard error socket.
     See the Listen Shutdown option for an explanation of the
     valid values.
     
     


WINSOCK RSHD/NT SECURITY FILE

With Unix, security is enforced on remote command execution
using a combination of the password file (/etc/passwd), the
hosts file (/etc/hosts),and the host equivalency files
(/etc/hosts.equiv and $HOME/.rhosts).

Winsock RSHD/NT enforces security through the Security File.
The name of this file is specified in the Winsock RSHD/NT
Configuration in the Security File entry.

If you specify a Security File name and the file does not exist
or the file is completely empty, all hosts and users are denied
access.

Conversely, if you do not specify a Security File, all hosts
and users are granted access.  So if you do not wish to enforce
any security, do not specify a Security File name in the
configuration file.

Additionally, you can configure Winsock RSHD/NT to ensure that
user names on remote hosts are valid on this system.  You
should only enable this security option if you use consistent
user names across all of the systems on your network.

You create the Security File using a text editor.  If you are
using the Winsock RSHD/NT Control Panel applet, you can click
on the Edit Security button to run the Windows Notepad editor
to edit the security file specified in the Security File
configuration option.

The Security File consists of lines that specify who may or may
not access the PC using Winsock RSHD/NT.  The following are the
options available in:

   #
      Any line beginning with # is treated as a comment and is
     ignored.

   +
     A plus sign (+) on a line by itself specifies that ALL
     hosts and users are granted permission.  This is useful if
     you wish to allow many hosts and users, but deny only a
     few.  Use the deny options on subsequent lines.

   host

     You can specify a host that is granted permission by
     entering the name of the host on a line by itself.  All
     users on that host are granted permission, unless you
     specifically deny those users on subsequent lines.
     
     
     You may also use the IP address of the host instead (the
     dotted-decimal representation).  If you specify the name
     of the host, that name must appear in the hosts file used
     by your TCP/IP package.

   !host

     You can specify a host that is denied permission by
     entering an exclamation point (!) followed by the name of
     the host name of the host on a line.  All users on that
     host are denied permission, regardless of subsequent
     lines.

     You may also use the IP address of the host instead (the
     dotted-decimal representation).  If you specify the name
     of the host, that name must appear in the hosts file used
     by your TCP/IP package.

   +user
     
     You can specify a user name that is granted permission by
     entering a plus sign (+) followed by the user name on a
     line.  Do not put any spaces between the plus sign and the
     user name.  That user will be granted permission
     regardless of the host (as long as the host is not
     specifically denied).

     See below for an explanation of the source of the user
     name and how it is validated.

   -user

     You can specify a user name that is to be denied
     permission by entering a minus sign (-) followed by the
     user name on a line.  Do not put any spaces between the
     plus sign and the user name. That user will be denied
     permission on all hosts.

     See below for an explanation of the source of the user
     name and how it is validated.

  +user@host

     You can specify a user name and a host that is granted
     permission by entering a plus sign (+) followed by the
     user name, an at-sign (@), followed by the host name on a
     line.  Do not put any spaces between the plus sign and the
     user name or before or after the at-sign.  That user on
     the specified host will be granted permission, but only
     from that host.

     You may also use the IP address of the host instead (the
     dotted-decimal representation).  If you specify the name
     of the host, that name must appear in the hosts file used
     by your TCP/IP package.

  -user@host

     You can specify a user name and a host that is denied
     permission by entering a minus sign (-) followed by the
     user name, an at-sign (@), followed by the host name on a
     line.  Do not put any spaces between the minus sign and
     the user name or before or after the
     at-sign.  That user on the specified host will be denied
     permission, but only when coming from that host.

     You may also use the IP address of the host instead (the
     dotted-decimal representation).  If you specify the name
     of the host, that name must appear in the hosts on the
     Windows NT system.


If the request is coming from a Unix system, the user name is
the login name of the user.  If the request is coming from
another Windows PC, the method of specifying the user name is
determined by the implementation of the rsh or rcp command you
are using.

Note that the standard Unix rsh command (and the Winsock RSH
command available from Denicomp Systems) allows a "-l" option
to specify an alternate user name.  The "-l" option has meaning
on a Unix system, but is not especially useful with Winsock
RSHD/NT.  However, if you do use the "-l" option to specify an
alternate user, as with Unix, that user must be granted
permission through the Security File in addition to the login
name (Unix) or the name specified in your particular TCP/IP
implementation (Windows/DOS).


USING THE SECURITY FILE

To effectively use the Security File, you must first understand
how it is viewed by Winsock RSHD/NT.

When Winsock RSHD/NT receives a request, it sequentially
processes the lines in the Security File to determine whether
or not the host and user are granted or denied access.  It
looks at each line in the Security File until it determines
that either the host or the user is specifically denied
permission.

Winsock RSHD/NT begins by assuming that permission is denied
for the request.  It then examines the lines in the Security
File to see if any of the lines pertain to this request.

Once Winsock RSHD/NT finds a line that denies access to either
the user or the host, it stops looking and denies permission.

If it finds a line that grants permission to the user and/or
host, permission is tentatively granted, but it continues to
process the lines in the Security File.


If it processes the entire Security File and does not find a
line that grants permission to the user and/or the host,
permission is denied.   If security was tentatively granted at
some point and not denied subsequently, permission is granted.

For example, let's say that the following is the contents of
the Security File:

      jetty
      booey
      eib
      192.56.42.3
      rs6000
      +fred@mars
      -gary@booey
      -jackie
      +robin

In this example, if any user on the host "jetty" makes a
request, permission will be granted, unless the user is
"jackie", since "jackie" is denied access from all hosts (-
jackie).

If "jackie@jetty" makes a request, Winsock RSHD/NT reads
through the Security File and finds the host name "jetty", and
tentatively grants permission.  However, it continues and finds
that the user "jackie" is denied from all hosts, so permission
is denied.

Also, if any user on the host "booey" makes a request, they are
granted permission unless the user is "gary", since
"gary@booey" is specifically denied permission (-gary@booey).
All other users on the host "booey" are granted permission
except "jackie" (-jackie).

The user "fred" on the host "mars" is granted permission
because of the line "+fred@mars".  However, since the host
"mars" does not appear on a line by itself, no other users on
the host "mars" are granted permission except the user "robin",
who is granted permission from any host (+robin).


EXECUTING COMMANDS

With Unix, the rsh utility executes the specified command on a
remote host and returns the standard output and the standard
error output to the requesting host.

With Windows, there is no such thing as "standard output" and
"standard error".  Programs execute in graphical windows, so
there is no way to return any output using rsh.

Therefore, when using rsh from Unix or another PC to initiate
commands on a Windows PC, you will not see any output of the
command on your screen.  It will display on the PC that
received the request.

For example, if you used the following command:

          rsh winpc3 excel

This would start Excel on the PC named "winpc3".  You would see
nothing on your screen as a result of starting Excel.  Excel
would be running on the screen of the PC named "winpc3".

The rsh command will NOT wait for the specified command to
complete.  The system issuing the request will regain control
immediately after the command begins.

If you attempt to execute a command that does not exist or
Windows returns an error trying to load the program, you will
receive a descriptive error message on your screen from Winsock
RSHD/NT to tell you that the command was not successfully
executed.

Important Note:  Winsock RSHD/NT uses the PATH and other
environment variables specified in the Control Panel for the
entire system, not for a specific user.  If you are trying to
execute a command that Winsock RSHD/NT cannot find, check the
System environment variables.


SENDING KEYSTROKES

Winsock RSHD/NT provides the ability for you to send keystrokes
to the Windows application you initiate using the rsh command.
It also allows you to specify how the window is to be displayed
(i.e., normal, minimized, maximized, or hidden).  This provides
you with some "remote control" over what the program you run
does once it starts.

For those of you who program in Microsoft Visual Basic or the
Visual Basic for Applications macro language, this is very
similar to the SendKeys capability of those programming
languages.


The standard syntax of the rsh command is:

             rsh hostname command

This will execute "command" on the host "hostname".  Winsock
RSHD/NT allows a slight modification of the rsh syntax to send
keystrokes.  This is compatible with all rsh commands.  The
alternative syntax for sending keystrokes is:

             rsh hostname "<keystrokes>" command

If the first parameter after the host name begins with a less-
than sign (<), that parameter is interpreted as keystrokes to
be sent to the command specified in the next parameter.  The
keystrokes must end with a greater-than sign (>).  You must
also enclose the entire parameter in quotes so special
characters and spaces are not interpreted by the operating
system.

For example, if you wanted to run the Windows Notepad on the PC
named "winpc3" and type "This is a test" on the first line, the
command would be:

             rsh winpc3 "<This is a test>" notepad

If you looked at the winpc3's screen, you would see the Windows
Notepad with "This is a test" on the first line.

You cannot send keystrokes to an application that is not
designed to run in Microsoft Windows (i.e., MS-DOS programs).

Important Note:  Due to a limitation in Windows NT, you cannot
send keystrokes to an application started through Winsock
RSHD/NT if there is no one logged in to Windows NT.  The
program will be executed, but it will not receive the
keystrokes.


SENDING SPECIAL KEYSTROKES

Winsock RSHD/NT also allows you to specify special keys in the
keystrokes parameter that cannot normally be typed on a command
line, such as embedded Enter keys, function keys, ALT keys,
etc.

Keystrokes are sent sequentially as the appear between the "<"
and ">".  To send a single character, use the character itself.
For example, to send the letter "X", use the letter "X".  To
send the word "hello", just specify those letters.

To specify keys combined with any combination of Shift, Ctrl,
and Alt keys, prefix the regular key code to one or more of the
following codes:

          Shift     +
          Control   ^
          Alt       %

For example, to send the Alt-F keystroke, specify "%F".  To
send Ctrl-Alt-D, specify "^%D".

To send the Enter key, use the tilde (~).

To specify that the Shift, Ctrl, and/or Alt keys should be held
down while several other keys are pressed, enclose the key
codes in parentheses ( ).  For example, to have the Alt key
held down while X and D are pressed, use "%(XD)".  You could
also use "%X%D", but if the Shift, Ctrl, and/or Alt keys need
to be held down for a number of keystrokes, the parentheses can
make the string shorter.  Also, you would want to use the
parentheses if the application
detects the release of the Shift, Ctrl, and/or Alt keys and
that is not desired.

The following characters have special meaning in the keystroke
parameter, so they must be enclosed inside braces ({ }).  Some
of these special characters have not been explained yet.

            Special Character          Example

          +  (plus)                      {+}
          ^  (caret)                     {^}
          %  (percent)                   {%}
          ~  (tilde)                     {~}
          <  (less than)                 {<}
          >  (greater than)              {>}
          [  (left sq. bracket)          {[}
          ]  (right sq. bracket)         {]}
          (  (left paren)                {(}
          )  (right paren)               {)}
          @  (at-sign)                   {@}
          {  (left brace)                {{}
          }  (right brace)               {}}



To send characters that are not normally displayed when you
press a key (such as Enter or Tab) and keys that represent
actions rather than characters, use the following special
codes:

       Key            Code                 Key            Code

     Backspace    {BACKSPACE} or {BS}     Break          {BREAK}
     Caps Lock    {CAPSLOCK}              Clear          {CLEAR}
     Del          {DELETE} or {DEL}       Down Arrow     {DOWN}
     Home         {HOME}                  Ins            {INSERT}
     Left Arrow   {LEFT}                  Num Lock       {NUMLOCK}
     Page Down    {PGDN}                  Page Up        {PGUP}
     Print Screen {PRTSC}                 Right Arrow    {RIGHT}
     Scroll Lock  {SCROLLLOCK}            Tab            {TAB}
     Up Arrow     {UP}                    F1             {F1}
     F2           {F2}                    F3             {F3}
     F4           {F4}                    F5             {F5}
     F6           {F6}                    F7             {F7}
     F8           {F8}                    F9             {F9}
     F10          {F10}                   F11            {F11}
     F12          {F12}                   F13            {F13}
     F14          {F14}                   F15            {F15}
     F16          {F16}

You can also specify that a key is to repeat itself a certain
number of times, without repeating the key itself in the
string.  To repeat a keystroke, use the format:

                    {keystroke number}

Where "keystroke" is the key to repeat, followed by a single
space, then the number of times to repeat the key.

For example, to press the down arrow key eight times, use
"{DOWN 8}".

To type thirty *'s, use "{* 30}".



PAUSING WITHIN KEYSTROKES

Under some circumstances, it may be necessary to pause for a
specific time before sending keystrokes to allow a program
operation to complete.  This is usually necessary when a
program ignores keystrokes that have been queued while a
lengthly operation takes place.

Within the keystroke list, you can specify pauses by using the
special {PAUSE #} keystroke.

This is not actually a keystroke, in that it does not press any
key, but it can be included anywhere within the keystroke list.
It will pause the specified number of seconds.

For example, the following keystroke list will press Alt-F, P,
wait 10 seconds, then press Alt-F, X:

     <%FP{PAUSE 10}%FX>

You can specify multiple pauses in the keystroke list if
necessary.


KEYSTROKE EXAMPLE

The following example, will start Microsoft Word, load a file,
print it, then exit.

    rsh winpc3 "<%FO\docs\invoice.doc~%FP~%FX>" word


The keystrokes are:

                 %F  - Alt-F  (Drops down the file menu)
                  O  - O      (Selects Open)
   \docs\invoice.doc - Types the filename.
                 ~   - Enter  (Loads the File)
                 %F  - Alt-F  (Drops down the file menu)
                  P  - P      (Selects Print)
                  ~  - Enter  (Accepts the defaults on the Print dialog box)
                 %F  - Alt-F  (Drops down the file menu)
                  X  - X      (Selects eXit and Word exits)


Note that if this example were being run from a Unix system,
you would have to use two backslashes (\\) for every one
desired backslash because the Unix shells interpret the
backslashes as special characters.  The command would then be:

           rsh winpc3 "<%FO\\docs\\invoice.doc~%FP~%FX>" word


KEYSTROKE MACRO FILES

If your keystroke strings get rather long or complex, you can
store them in a keystroke macro file so you do not have to
specify all of them each time you use the rsh command.

To create a keystroke macro file, you must use a text editor
(or a word processor, but be sure to save as an ASCII file).
Enter the keystrokes as you would on the rsh command line, with
the following exceptions/reminders:

  o  Do not enter "<" as the first character in the file or
     ">" as the last character.  All of the characters you
     enter in the file will be sent.

  o  You may press Enter in the file to enter the keystrokes
     on multiple lines.  The line breaks have no effect on the
     keystrokes.  They will be treated as if they were entered
     all on the same line.  That is, you must remember to still
     use "~" or "{ENTER}" to "press" the Enter key.  Pressing
     Enter in the file will not send the Enter key.

  o  You cannot nest keystroke macros.  Your macro file cannot
     contain references to other keystroke macro files.

  o  The keystroke macro file must reside on the PC running
     Winsock RSHD/NT. You can create the file on that PC or use
     rcp to copy it to that PC before executing the command.

To use a keystroke macro file, enter the at-sign (@) followed
by the filename in braces ({ }) where you would normally
specify keystrokes on the rsh command line.

You will most likely need to specify a full pathname of the
keystroke file on the PC running Winsock RSHD/NT, unless you
know the working directory of Winsock RSHD/NT on the system
running it and the keystroke macro resides in that directory.
You may use forward slashes (/) instead of backslashes if you
wish; this makes life easier for Unix users because the shell
interprets the backslash characters.

For example, if you had a macro in the directory
\kbmac\printss.mac on the PC running Winsock RSHD/NT, you could
use it with this command:

      rsh winpc2 "<@{/kbmac/printss.mac}>" excel

This would run "excel" on winpc2 and send the keystrokes stored
in the file \kbmac\printss.mac to it.

You can intermix command line keystrokes and macro file
keystrokes.  That is, you can specify some of the keystrokes on
the command line and use some from a macro file.   You can also
use multiple macro files.

For example, let's say we want to print a file using rsh
through a Windows application called "wintiff".  We want to
store the keystrokes in a macro file, but do not want to store
the filename in the macro file because it can change.

To do this you can store the first set of keystrokes in one
macro file, specify the filename on the rsh command line, then
store the remaining keystrokes in a second file.

For example, let's say the file is "mypic.tif":

rcp mypic.tif winpc2:/tmp
rsh winpc2 "<@{/kb/tif1.mac}\tmp\mypic.tif~@{/kb/tif2.mac}"
wintiff

This example copies the file "mypic.tif" to the \tmp directory
on winpc2.  Then it runs "wintiff" and first sends the
keystrokes from the file \kb\tif1.mac.  That macro ends when
"wintiff" requires a filename.  The keystrokes to "type" the
filename come from the rsh
command line since the tif1.mac has ended.  Then it continues
by sending the keystrokes in the file \kb\tif2.mac.  That is:

    @{/kb/tif1.mac}      -  Send keystrokes from \kb\tif1.mac
       \tmp\mypic.tif~   -  Type \tmp\mypic.tif and press Enter
    @{/kb/tif2.mac}      -  Send keystrokes from \kb\tif2.mac


SPECIFYING THE WINDOW TYPE

Winsock RSHD/NT also allows you to specify the window type of
the application being run.  By default, the application is run
"normally", as if you ran it by double-clicking on its icon
(assuming you did not set up the icon to run it minimized).

If you want to specify a different method of displaying the
application's window, you can specify this inside the keystroke
parameter by enclosing the method in square brackets ([ ]).


There are two methods of setting the window type.  You can use
one of the words shown below or you can use a number.  The
options are:

     Window Option                  Displays

      NORMAL             Normal Display as defined by the application
      MINIMIZE           Shows the application as a minimized icon
      MAXIMIZE           Maximizes the application on startup
      HIDE               Hides the application (no icon appears)
      0                  Same as HIDE
      1                  Same as NORMAL
      2                  Same as MINIMIZE
      3                  Same as MAXIMIZE

Other numeric values may be used - they correspond to the
Windows' ShowWindow function (for all you programmers).

For example, if you want to run the Windows Notepad maximized,
viewing the file "heyyou.txt", you would type:

    rsh winpc3 "<[MAXIMIZE]>%FOheyyou.txt~" notepad

This runs the Notepad maximized, then "presses" Alt-F-O (File
Open) and types the filename "heyyou.txt" and presses Enter to
load it.

If you wanted to run some application that does some task and
exits, you could run it minimized using:

    rsh winpc3 "<[MINIMIZE]>" bkgprint

Note that Windows does not allow you to send keystrokes to a
minimized or hidden application.  Therefore, "[MINIMIZE]",
"[HIDE]", "[0]", or "[2]" should always appear alone between
the "<" and ">".  If you specify other keystrokes, the
application will not receive them (Windows will beep at you for
each keystroke).


WAITING FOR COMMANDS TO COMPLETE

By default, Winsock RSHD/NT returns control back to the system
issuing the command via rsh immediately after the command is
started and any keystrokes are sent.  It does not wait for the
command to complete.

If you want the rsh command to wait until the command finishes
executing, you can use the "[WAIT]" option.  This is specified
like the Window Type, as explained in the previous section.

For example, to execute the command "bkgprint" and wait for it
to finish, use:

     rsh winpc3 "<[WAIT]>" bkgprint

As with the Window Type, you can combine options and
keystrokes.  This runs the above command, but minimizes it and
waits:

     rsh winpc3 "<[MINIMIZE][WAIT]>" bkgprint

Note that Winsock RSHD/NT cannot process other command requests
when you instruct it to wait for a command to complete.  If
other users issue commands to the PC while it is waiting, they
will be queued until Winsock RSHD/NT can process them.  The
number of requests that can be queued depends on the Listen
Backlog parameter explained in the Winsock RSHD/NT
Configuration section.


EXECUTING WINDOWS NT "INTERNAL" COMMANDS

Some commands that you can execute at Windows NT's Command
Prompt are not actually programs; they are internally
recognized by the command interpreter CMD.EXE.  One example of
this is the DIR command.  If you look in the directory where
Windows NT is installed (usually \WINNT35\SYSTEM32), there will be
no DIR.EXE.  It is part of CMD.EXE.

Normally, when executing internal commands with rsh, you must specify
the command in the following format:

     rsh winpc3 cmd /c dir

You prefix the internal command with "cmd /c".  This tells Winsock
RSHD/NT to run the command through the Command Prompt CMD.EXE.
Be sure to include a space between "cmd" and "/c".  It will not
work properly without it.

Winsock RSHD/NT recognizes many of the Command Prompt's internal
commands and supplies the "cmd /c" prefix for you if you do not.
The following is a list of those commands recognized:

 
   COPY              REPLACE
   DATE              RMDIR
   DIR               SET
   DEL (DELETE)      START
   ECHO              TIME
   ERASE             TYPE
   MKDIR             VER
   MOVE              VOL
   REN (RENAME)


If you need to execute any of these commands via rsh through Winsock RSHD/NT,
you do NOT need to specify the "cmd /c" prefix, although they would still
execute properly if you did.



CAPTURING STANDARD OUTPUT AND STANDARD ERROR

You can optionally capture the standard output and standard
error output of Windows NT Console or MS-DOS commands through
Winsock RSHD/NT with the rsh command.  This allows you to
display the output of these programs that output to the
standard output or standard error on another screen or capture
it to a file on another system.

To do this, you must tell Winsock RSHD/NT that you are
executing a Console or MS-DOS command.  Winsock RSHD/NT cannot
tell whether the command you issue is a Windows program or a
Console/MS-DOS program until it starts executing it (and by
then, it's too late!).

To capture the standard output/standard error of a command, use
the "[CON]" option in the rsh command.  For example:

    rsh winpc3 "<[CON]>" net view

This will run the "net view" command on "winpc3" and display
the output on the your screen.  The "net view" command displays
information on the standard output.  Note that if your command
requires any command line switches, place a space between the
command name and the switch.  For example, use "mem /c", not
"mem/c".

Note:  There is a configuration option that tells Winsock
RSHD/NT to assume the "<[CON]>" option on every command and
capture the standard output and standard error.  If this option
is enabled, you do not need to specify the "<[CON]>" option.

If you are on a Unix system and you want to store the output of
the "net view" command in a file, you can use the following
command:

    rsh winpc3 "<[CON]>" net view > net.out

In this example, the file "net.out" will be created on the Unix
system, the system where the rsh command originated.  The ">
net.out" part of the command is not passed to "winpc3" because
the Unix shell interprets it first.

If you are using a Windows system and you want to do the same
thing, you must refer to the instructions for the
implementation of the rsh command you are using.  Windows does
not support redirection, but MS-DOS does.  If your rsh command
is MS-DOS based, the above
command may work from a DOS prompt.  If you are using Denicomp
Systems's Winsock RSH, you could do the above within Windows
with the following command:

    rsh winpc -r net.out "<[CON]>" net view

Note that some MS-DOS programs do not write to the standard
output; instead they directly write to video memory.  Output
from these programs cannot be captured.

Also note that the output of the command is not returned in
"real time" as it is output from the program.  All output is
stored in a file on the PC running Winsock RSHD/NT, then is
sent over the network when the program finishes.  So programs
that display "progress reports" to the standard output will
display their messages all at once when run through Winsock
RSHD/NT.

When a program outputs to both the standard output and standard
error, first the standard output is sent over the network, then
the standard error.  The output may not be sent in the order
that it would normally display if it were actually running on
the PC.

A good example of this is the Microsoft C/C++ compiler.  It
outputs its "banner" (copyright message) to the standard error
and displays progress reports and error messages to the
standard output.  Therefore, if you run the C compiler with an
rsh command, you will actually see the banner last since the
standard output is sent first and the standard error is sent
last.

You can reverse the order of the sending of the standard output
and standard error by using the "[CON2]" option.  The acts just
like the "[CON]" option, but sends the standard error first.

The "[CON]" and "[CON2]" options imply the "[WAIT]" option, so
there is no need to specify it also.  Winsock RSHD/NT must wait
for the command to complete to capture its output.

To maintain compatibility with the Windows 3.1 version of
Winsock RSHD/NT, you may also use "[DOS]" or "[DOS2]" in place
of "[CON]" and "[CON2]".


DISABLING THE CAPTURE OF STANDARD OUTPUT AND STANDARD ERROR

There is a configuration option that tells Winsock RSHD/NT to
assume the "<[CON]>" option on every rsh command and attempt to
capture the standard output and standard error.  This is useful
if you mostly execute Windows NT Console and MS-DOS programs.

Howver, this can cause problems when you need to execute a
Windows program.  If this option is enabled, you cannot send
keystrokes to the program and Winsock RSHD/NT will

automatically wait for the command to complete.  There is also
some additional overhead involved in running the program.

If you have enable this option to assume the "<[CON]>" option
and you need to run a Windows program and send keystrokes to it
or you do not want rsh to wait for it to complete, specif the
"<[WIN]>" option in the rsh command line.  This option
overrides the assumed "<[CON]>" option for the command.  For
example:

          rsh winpc "<[WIN]%FP~%FX>" excel abc.xls

This will run the command "excel abc.xls" on winpc as a Windows
program and send the specified keystrokes to it, overriding the
assumed "<[CON]>" option.


EXECUTING WINSOCK RSHD/NT "INTERNAL"  COMMANDS

Winsock RSHD/NT has a special option that allows you to execute
commands that are recognized, interpreted, and executed
internally by Winsock RSHD/NT.

These should not be confused with the MS-DOS and Windows NT
"internal" commands (executed through COMMAND.COM or CMD.EXE)
mentioned earlier.

Currently there is only one Winsock RSHD/NT internal command
available: CD (change directory).

While CD is a valid command in CMD.EXE, it only changes the
current working directory for the instance of CMD.EXE that is
started.  For example, the command:

     rsh winpc3 cmd /c cd \users\default

Will change the current working directory for the instance of
CMD.EXE that is started by the "cmd /c" command, but does not
remain in effect for Winsock RSHD/NT.  Winsock RSHD/NT's
initial directory is always the Windows System directory
(%SystemRoot%\SYSTEM32).

If you want to change Winsock RSHD/NT's current working
directory so that subsequent commands and rcp requests are
executed in a different directory, you use the special
"<INTERNAL>" or "<INT>" option in the rsh command.  For
example:

     rsh winpc3 "<[INTERNAL]>" cd \users\default

This will cause Winsock RSHD/NT to internally change to the
\users\default directory.  Subsequent commands and remote
copies will be executed from that directory.  For example, if
you issue a rcp command that references a file on the system
running Winsock RSHD/NT without a full path name, it will look
in the current working directory (\users\default in this
example) for the file.  If you issue a "dir" command through
rsh, it will return the directory contents of this directory.


COPYING FILES USING RCP

Winsock RSHD/NT also provides Remote Copy (RCP) Server
capability.  This allows you to copy files to and from a PC
running Winsock RSHD/NT using the rcp command.

The rcp command is commonly found on Unix systems, Windows NT
systems, and in some TCP/IP packages for Windows and DOS.  If
your TCP/IP package does not provide the rcp command, you can
use Winsock RCP from Denicomp Systems.

The rcp command is described in more detail in your TCP/IP
package manual or with the manual that comes with Winsock RCP.
However, here are a few examples of its use.

Important Note:  Unlike the standard Unix rcp command and
Denicomp Systems' rcp command (found in the Winsock RCP/RSH
package), the Windows NT rcp command copies all files with
ASCII conversion by default.  Binary files must be copied using
the -b option of NT's rcp command.  If you do not use the -b
option on binary files, the contents of the file will be
altered on the destination system.

To copy a file from the host named "srvpc" to your PC or Unix
system, use:

      rcp srvpc:yourfile myfile

The file "yourfile" is copied from the host named "srvpc" to
the file on your PC named "myfile".  The host "srvpc" could be
running either Windows and Winsock RSHD/NT or Unix.

To copy a file from your PC or Unix system to the PC named
"srvpc", use:

      rcp \lists\xmas.doc srvpc:\word\lists

The file \lists\xmas.doc is copied from your system to the file
xmas.doc in the directory \word\lists on the PC named "srvpc".

To send the entire directory tree from your PC or Unix system
to "srvpc", use:

      rcp -b -r \share srvpc:\

All of the files and subdirectories in the directory \share are
copied to the PC named "srvpc".  It will create a \share
directory in the root directory (\) of srvpc.

If the \share directory contained any subdirectories, they
would be created on the other PC and all the files in them
would also be copied.

To copy all of the files ending with ".xls" from "srvpc" to
your PC, use:

      rcp -b srvpc:\sheets\*.xls .

This copies all of the files ending with ".xls" in the
directory \sheets on "srvpc" to the current directory (.) on
your PC.

You can use drive letters if necessary.  For example, to copy a
file from the A: drive on the "srvpc" to your PC:

      rcp srvpc:a:file.txt file.txt

This will copy "file.txt" from the A: drive on "srvpc" to the
file "file.txt" on your system.


NOTE: Winsock RSHD/NT allows you to use both slashes (/) and
backslashes (\) for directory separators.  It will adjust
appropriately.  This is especially important for Unix users,
since backslashes are interpreted by the shell and must be
escaped by using two backslashes for every one backslash.  Use
slashes instead.



WINSOCK RSHD/NT UTILITIES

Winsock RSHD/NT includes two utilities that allow you to
control the operation of the Winsock RSHD/NT service.

The first utility is wrshdctl.  This can be found in the
directory in which you installed Winsock RSHD/NT.  It is a
Windows NT program that allows you to install, start, stop, and
remove the Winsock RSHD/NT service.

To use it, get to a Windows NT Command Prompt (in the Main
program group).  Change to the directory where Winsock RSHD/NT
is installed using the CD command (for example, CD \WRSHDNT).
Then type "wrshdctl".

You can run wrshdctl from the Windows NT Program Manager also,
as long as you are not going to use it to re-install Winsock
RSHD/NT.  You must be in the Winsock RSHD/NT directory to re-
install the Winsock RSHD/NT Service if it has been removed.

You can then do the following:

Install the Winsock RSHD/NT Service
     
     This installs the Winsock RSHD/NT Service in Windows NT's
     list of services.  It does not install the files from the
     Winsock RSHD/NT diskette.  It only adds Winsock RSHD/NT to
     the list of services that Windows NT can execute.
     
Start the Winsock RSHD/NT Service

     This starts the Winsock RSHD/NT Service if it is not
     currently running.
     
Stop the Winsock RSHD/NT Service

     This stops the Winsock RSHD/NT Service if it is currently
     running.  This is useful when you have changed the Winsock
     RSHD/NT configuration.  Stopping and restarting Winsock
     RSHD/NT will cause it to re-read the configuration
     options.
     
Remove the Winsock RSHD/NT Service
     
     This removes the Winsock RSHD/NT Service from Windows NT's
     list of services.  It does not delete any files.  It only
     removes it from the list of services.  Use the Install
     option to add it to the list again.
     

There is another utility included with Winsock RSHD/NT that
performs the same operations as wrshdctl, but is a command line
oriented utility.  It is called ctrlrshd.

This command can be executed from the Windows NT Command Prompt
while you are in the Winsock RSHD/NT directory (\WRSHDNT),
unless you have included that directory in your path.  Its
syntax is:

     ctrlrshd install [auto | manual [directory]]

     ctrlrshd start

     ctrlrshd stop

     ctrlrshd remove


The install option installs the Winsock RSHD/NT service in
Windows NT's list of services.  It does not start Winsock
RSHD/NT.  You can optionally specify whether you want Winsock
RSHD/NT to start automatically each time Windows NT is booted
(auto) or if you want to start Winsock RSHD/NT manually when
necessary (manual).  If you do not specify either, auto is
assumed.  The directory option is used when you are using the
install option and Winsock RSHD/NT is not installed in the
current working directory.  If it is not, specify the directory
name as the third parameter.  Note that if you specify a
directory, then you must also specify auto or manual.

The start option starts the Winsock RSHD/NT service.  Winsock
RSHD/NT will begin accepting requests.

The stop option stops the Winsock RSHD/NT service.  It will no
longer accept requests.  This does not remove it from Windows
NT's list of services; it only stops it until you decide to
restart it using the start option.

The remove option removes Winsock RSHD/NT from Windows NT's
list of services.  It will no longer accept requests and will
no longer be available to start or stop.  Note that  you must
first use the stop option if Winsock RSHD/NT is running before
removing it.

The remove option does not delete any files; it only removes
Winsock RSHD/NT from the list of available services.  You can
later add it back to the list using the install option.


SUPPORT

Support is available via U.S. Mail and Compuserve/Internet.

Denicomp Systems
P.O. Box 731
Exton, PA  19341

Compuserve: 71612,2333
Internet:   71612.2333@compuserve.com

