This is version 1.73 of !NWClient.
==================================

NWClient allows you to access a Novell NetWare (R) fileserver from
RiscOS as the file system NW.  It also provides a file system called
NWPrint, which you can use to print to NetWare printer queues.

!NWClient
=========

Normally, double-clicking the !NWClient icon (or running it in your
startup) should be enough to get you going.  !NWClient will try to
attach to the nearest file server, and present you with an icon
on the icon bar through which you can control the application.

The NWFiler application provides the taskbar icons and choices for
mounting and dismounting volumes, logging in and logging out.
When run it will put an icon on the taskbar for each of the mounted
discs and for all file servers without any mounted discs.  The
icons have context-sensitive menus, and select and adjust-clicking
on the icon will also have context-sensitive actions.

   Attach  
   ------
   Attaches you to a file server without losing connection to any
   file server you are already attached to.  If you are not
   attached to any file server, then a select button click on the
   Attach icon has the same action.  Clicking the adjust button
   on the Attach icon causes the filer to try to attach to the
   nearest file server.

   Detach
   ------
   Allows you to detach from that server.  The same function can
   be achieved by clicking the adjust button on an icon for a
   server to which you are not logged in.
   
   Dismount
   --------
   Dismounts a local disc name from the file server.  If you have no
   more discs mounted, then the iconbar will show a grey file server
   icon that you can use to mount new discs from.
   
   Info
   ----
   This will give the version numbers of the NWClient filer, as
   well as for the RiscIPX and NWClient modules.

   Logout
   ------
   Logs you out from the file server that the selected icon is
   attached to.  You remain attached to the file server.
   
   Mount
   -----
   This will show a box with the local disc name and the fileserver
   volume and path of the mounted disc.  If you change these names
   and click on OK then a new mount will be made.  You can choose to
   have a mount without an icon, and you can also decide to not use
   long file names.  If long file name space has not been added to
   the selected volume then you will not be able to use long file
   names, even if this box is left unselected.
   

NWPrint: filesystem for printing to network printers
====================================================
Anything you output to a file called NWPrint: or NWPrint:<options>
will be sent to a print queue on the file server.  The easiest way
to do this is to use !Printers to set the connection of one or more
of your printers to the file "NWPrint:".  If needed, you can specify
options in the filename.  Options may be specified separated with
commas or full stops.
The following options are recognized:
   queue=<printqueuename>     set queue
   banner=<text>              set line 1 of text on banner page
   name=<text>                set line 2 of text on banner page
   form=<text>                set form name (ignored for now)
   server=<servername>        set server name
   printer=<ndsprintername>   set NDS printer name (ignored for now)
   copies=<integer>           number of copies to make
   tabs=<integer>             tab setting (best to leave at 0)
   lines=<integer>            number of lines on page (used when tabs set)
   columns=<integer>          number of columns on page (used when tabs set)
   ff                         append form feed to job
   noff                       do not append form feed to job
   nobanner                   do not print banner
   notify                     notify after printing page
   nonotify                   do not notify
Example:
   echo hello { > NWPrint:queue=laser,notify }
For the moment, there is no way to change the default options.  I'll
put that in later.

NWClient commands
=================

The NWClient module provides the following commands that can be issued
from the commandline or obey files:

   *NW
   ---
   This makes the NWClient file system current.


   *NW:Attach [[-tree] <treename>]
   *NW:Attach -server <servernamename>
   *NW:Attach -address <ipxaddress>
   ----------------------------------------------------------
   This command attaches you to a file server, specified by name using
   -server, or by the NDS tree it belongs to using -tree.  Normally
   you don't need to use this command, as you would be connected to
   your nearest server when you run the !NWClient application.
   The IPX address if specified should be of the form network:[node][:port],
   if omitted it assumes node 000000000001 and port 0x451.


   *NW:Detach [server|-all]
   ------------------------
   This command logs you out and then detaches you from whatever file
   server you are attached to.


   *NW:Login [-user] <username> [-password] <password>
   ---------------------------------------------------
   This command logs you in into the bindery (for 3.x servers) or the
   NDS tree (for newer servers).  You only have to log in once to be
   able to connect to any of the resources on the server.  Currently,
   !NWClient does not support the full NDS, so mounting volumes on
   servers other than the one you've attached to does not work.
   

   *NW:Logout
   ----------
   This command logs you out from the server or NDS tree.  You remain
   attached to the server you were attached to.


   *NW:Mount [[-local] <localname> [-remote] <remotename> [-0] [-1] [-nolongnames|-nl]
   -----------------------------------------------------------------------------------
   This command makes a volume or a directory on a volume available for use
   under RiscOS as a disc on the NW: file system.  The remote name is the
   path (including volume name) of the directory you want to mount, and
   has to be in the format <volume>:<directory>[/<directory>...].  The
   flags -0 and -1 are user-definable flags, of which -0 is used in the
   standard front-end to make the mount invisible, i.e. no icon on the
   iconbar.  The -nl or -nolongnames flag forces !NWClient not to use
   long file names on this mount, but instead to fall back on DOS-style
   filenames.  This also means that RiscOS file types are not available.
   When not given any parameters, the mount command displays a list of the
   current mounts, including the internal flags and mount count (in hex).


   *NW:Dismount [-local=-disc] <localname>
   ---------------------------------------
   This command dismounts the file server directory from the local disc name.
   If the local disc had been mounted more than once, then you need the
   same number of dismounts before the mount actually disappears.  This
   facilitates the use of Mount and Dismount in obey files.


   *NW:Whoami
   ----------
   Displays some information about your connection to the file server.


   *NW:Setpass oldpass newpass
   ---------------------------
   Change the password for the currently logged-in user.  The old
   password must be specified -- this makes it not very usable for
   the network administrator (sorry).


   *NW:Extensions [file]
   ---------------------
   Set, clear or display list of extensions that are automatically converted
   to RiscOS file types.  The command displays the current list of extensions
   when no parameter is given, and otherwise takes a filename of the same
   format with entries containing file type number, file type description
   and one or more extensions that map onto this file type.  Any name that
   begins with the RiscOS directory separator '.' is assumed to be a full
   filename, which can be used to force file types for RiscOS file names
   !Boot, !Run, !Sprites, etc.
   The command takes two file names as special: 'none' clears the extension
   mapping table (no mapping, identical to !NWClient versions before 1.52)
   and 'default' reverts to the built-in table.
   

RiscIPX commands
================

The RiscIPX module provides the following commands that can be issued
from the commandline or obey files:

   IPXstatus
   ---------
   Displays some internal state information about RiscIPX, the network
   driver it uses and all the sockets that are open.

   IPXroute
   --------
   Displays the contents of the internal IPX routing table.


Environment variables
=====================

Several environment variables are used by !NWClient.

   RiscIPX$Frame
   -------------
   If this variable is set when RiscIPX loads, it is examined for the
   name of the frame type to use.  If the variable is not set, then
   RiscIPX will autodetect the frame type to use.
   Possible values:
      Ethernet_802.3 - used in NetWare 2.x, default in NetWare 3.x
      Ethernet_802.2 - default in NetWare 4.x and later
      Ethernet_SNAP  - rarely found, use only if your network has
                       devices that only can use this.
      Ethernet_II    - Preferred frametype for new installations,
      or Ethernet_2    small packets and excellent interoperability.
      Econet         - IPX over Econet (when implemented), which
                       requires an Econet to Ethernet IPX gateway.

   NW$User
   -------
   This variable is set to contain the user name after a successful
   login and before running the !Boot file in the Login directory.
   It can be used for user-specific mounts.  After the !Boot file
   finishes, the variable is unset.  It is also used to supply
   the default user name when the NWFiler application is first run.

   NW$Server
   ---------
   This variable is set to contain the server name after a successful
   login and before running the !Boot file in the Login directory.
   It can be used for user-specific mounts.  After the !Boot file
   finishes, the variable is unset.

   NWClient$Stream
   ---------------
   If this variable is set to 1, then NWClient will attempt to do
   fast streaming reads/writes; this is in absence of me having
   documentation about packet bursts which presumably would work
   a whole lot better.  Set only after extensive testing -- some
   Ethernet cards may hang your machine.  Works on EtherH cards
   as long as you have version 4.37 of the driver or later.

   NWClient$Version
   ----------------
   Set to version number of the NWClient module (multiplied by 100)
   while the module is loaded.

   Wimp$ScrapDir
   -------------
   Used by NWClient to store the NwMessages log file of network 
   broadcast messages in your scrap directory.

   File$Type_xxx
   -------------
   Set by the *nw:Extensions command when loading the list of
   file extension to file type mappings.  These variables are only
   set if they were not previously defined; the *nw:Extensions
   command will not overwrite previously set values in any of
   these.
   

Installation notes
==================

Prepare the file server
-----------------------

Enable bindery emulation on the server: !NWClient does not use
NDS authentication.  For NetWare 5, make sure that you have IPX
enabled on a frame type of your choice.

Make sure you have the OS2 or LONG name spaces loaded on your file
server.  If you haven't, type the following commands on the file
server console:

   LOAD LONG.NAM
   ADD NAME SPACE LONG TO SYS

If you have an older server (before 4.11), then the LONG name space
is known as OS2 name space, and the commands to execute become

   LOAD OS2.NAM
   ADD NAME SPACE OS2 TO SYS

You may want to add the name space to any other volumes you have as
well.

Note: You can run !NWClient without having the LONG name space
loaded, but that way you will not be able to change file types
on the file server.  In that case all files will come out as text
files (type FFF), except when they have pre-defined extensions
(see the NW:Extensions command) or have the Shared flag set in
combination with either Hidden or System.  Those flags are used
in our Linux client for soft links and executable files, and they
come out with a type to match.

Install RiscOS client
---------------------
Copy the !NWClient application onto a directory on your RiscOS
machine, and then run it.  It will try to attach to whatever
NetWare server answers first, and then allow you to login.
Login as Admin or as any other user with RWCEMF rights to the
SYS:LOGIN directory on the file server.

Copy software to the file server
--------------------------------
At this point you'll probably have the SYS volume mounted on your
RiscOS machine.  If not, try mounting it manually, by typing

   nw:mount SYS SYS:

You may now want to copy some shared RiscOS applications and
data onto the file server.  You can make a RiscOS.Apps directory
on a file server volume for applications.

Mount the Login directory by typing

   nw:mount Login SYS:Login -nl

The -nl option disables long file names and RiscOS file types
on that mounted disc, which is how that directory will be
auto-mounted by NWFiler.

Create a !Boot file on the file server LOGIN directory.  This
file will be run whenever a RiscOS user logs in, and should
normally contain some nw:mount commands for frequently used
directories on the file server.  It is also usually a good idea
to allow users their own private !Boot directory, e.g. by
including

   nw:mount Home SYS:Home/<NW$User>
   ifthere nw::Home.$.!Boot then filer_run nw::Home.$.!Boot

somewhere in the login sequence.

Make sure that all files you use on the nw::Login disc have
the correct file type, as the NWFiler application always mounts
Login without file types.
It may be necessary to add [RF] rights to the SYS:Login directory
on the file server to group EVERYONE (for NetWare versions before
4.00) or to the container in which the users that will be using
!NWClient are located.


Finish
------
Try if everything works by restarting your machine, running 
!NWClient and logging in as a regular user.
For all other machines on your network you only need to copy
the !NWClient directory onto their disc.  If you want, you can
use ShareFS to re-export the login directory on the file server
(use the -readonly flag!) so that users can grab !NWClient using
ShareFS.

For ease of use you'll probably want to run !NWClient in your boot
sequence.  If you set NW$User before you run !NWClient, then it
will fill in the user name automatically when you log in.

   
Changes list
============

Known problems in NWClient
--------------------------
 - !Optimizer fails when you drag a media file to a NetWare directory.
 - NetWare to RiscOS date stamp conversion fails for dates after 2038.
 - SparkFS broken again (what IS it doing???).

Changes for [1.73] (RiscIPX [1.54])
-----------------------------------
 - Now only looks for nearest response SAP packets when attaching
   to the nearest file server.
 - NWFiler now generates sensible error messages even if Messages
   file not found.
 - Changed the IPX encapsulation over Econet.
 - Now binds the RIP handler to the correct socket number.

Changes for [1.72]
------------------
 - Improved NWFiler, now has interactive help.
 - Moved most subroutines in modules into libmod.a library.

Changes for [1.71]
------------------
 - Fixed NWClient_MountList and NWClient_ServerList to not return
   an error at the end of the list.
 - Now does no longer try to use extended attributes on any mounts
   that do not support long file names.
 - Now does not dismount the auto-mounted Login mount point when
   logging out.
 - Now can invent file types from whole file names (e.g. !Run->Obey)
 - Replaced Attach and Login programs with a new NWClient Filer
   (NWFiler) module; the !Login application is now no longer used,
   but NWFiler still runs nw::Login.$.!Boot when the user logs in.

Changes for [1.70] (RiscIPX [1.53])
-----------------------------------
 - Various performance improvements in RiscIPX.  This has changed
   the programming interface slightly for receive interrupt handlers.
 - Removed code in the RiscIPX router to determine the local network
   through a SAP broadcast receive handler (which was stupid).
 - Many changes to RiscIPX so that an Econet-enabled version can
   be compiled from the same sources.
 - Now does invent file types from extensions again (broken in 1.68).
 - Now calls OS_SynchroniseCodeAreas to flush the StrongARM cache

Changes for [1.69]
------------------
 - Fixed directory cache to really return all files, not just 95%.

Changes for [1.68]
------------------
 - Now caches one directory per mount point for improved performance
   and for fixing several directory-scanning related problems.
 - Fixed handling of delete-inhibited (locked) files and directories
   when Force filer flag set.
 - Now uses the "read/write access for others" attribute to indicate a
   file has the Shared flag set.

Changes for [1.67]
------------------
 - Added mapping for characters < and > in filenames (which NetWare allows
   in use, but VREPAIR doesn't).  These are now mapped to ^ and $.
 - Now no longer returns rubbish (or data aborts) when passed an invalid
   pointer in NWClient_ServerList and NWClient_MountList.

Changes for [1.66]
------------------
 - Improved algorithm for determining NCP request timeouts
 - Improved responsiveness of icons on taskbar in !Login application

Changes for [1.65]
------------------
 - Now handles errors more gracefully when streaming read/write, and
   falls back onto non-streaming mode when in trouble.
 - Now reports current file size in directory listings while files
   are open (previously returned the old size like DOS would)
 - Now no longer returns an error from FSEntry_File 5 when the
   file or path does not exist, this fixes things for  SparkFS
   and for *COPY.

Changes for [1.64]
------------------
 - Fixed carry bug in conversion from NetWare to RiscOS time which caused
   wildly incorrect time to be returned (off by 1<<32 centiseconds).
 - Now adjusts date stamps returned from the server for RiscOS local
   time, and does the inverse adjustment when setting file stamps.

Changes for [1.63] (RiscIPX [1.51])
-----------------------------------
 - Improvements in the !Login application.
 - Fixed bug in IPX_AddRoute that left hop count uninitialized.
 - IPX_Bind now is more careful not to re-use a port number.
 - Improved handling of expired passwords with grace period.
 - Now selects correct server to print to if only one server attached
   and no server specified in nwprint: options.
 - Now does not kill lanmanfs (who needs that?) if RiscIPX$Frame is
   set to Ethernet_II (or, alternatively, Ethernet_2).

Changes for [1.62]
------------------
 - Fixed race condition in CloseFile call, now even slower than
   before (thanks to the RiscOS way of handling file date stamps).
 - Added support throughout for attaching to multiple file servers.
 - Added programming documentation (see file Programming).
 - Rewrote !Login application to support multiple file servers
   and improved error handling.

Changes for [1.61]
------------------
 - Added more documentation to !Help file.
 - Finally implemented the *setpass command (for users only, not
   yet written for administrator).  This should work both with
   encrypted and unencrypted passwords.
 - Fixed a few incorrect syntax help messages.

Changes for [1.60]
------------------
 - Finally fixed *nw:detach, which had been calling the attach
   code all this time.
 - Changed free space call to fall back on an old one which works
   with NetWare 3.x (but is limited to 536MB volume sizes).

Changes for [1.59]
------------------
 - Now returns better error messages from *nw:whoami.
 - Now returns an error when trying to attach to a second server.

Changes for [1.58]
------------------
 - Fixed bug in reading/writing extended attributes (used for
   RiscOS file types) that was introduced in 1.57.  So much for
   testing :-)

Changes for [1.57] (RiscIPX [1.50])
-----------------------------------
 - Fixed bug in RiscIPX that stopped it from sending packets to a
   node on a specified network where Hops=0, i.e. that network is
   available without going through a router.
 - Improved handling of long broadcast messages in the log file.
 - Reorganized SWIs for RiscIPX, removed IPX router interface
   (because that should be internal to RiscIPX only) and added
   IPX_AtoIPX call for converting IPX addresses in user-readable
   format to the internal format.
 - Added -address (or -a) option to attach to a machine without
   having to rely on SAP broadcasts.
 - Now seems to work OK on MARS NetWare emulator, should be OK
   for NetWare 3.x too.
 - Now logs out before replying to NetWare broadcast message
   'server is down' with a 'Not connected' message.
 - Now logs out before detaching if needed.

Changes for [1.56]
------------------
 - Fixed bug in RiscIPX that stopped it from sending packets to a
   node on a specified network where Hops=0, i.e. that network is
   available without going through a router.

Changes for [1.55]
------------------
 - Fixed setting of date and time on login to work properly with
   summertime -- this probably fixes things for people in other
   time zones as well.
 - Added comment in the Attach basic program how to enable use of
   lanmanfs.  This works if and only if you make sure that you bind
   IPX to Ethernet_II on your file server.

Changes for [1.54]
------------------
 - Fixed various things to do with connection to 3.x and 2.x servers
   (but still doesn't work quite yet).
 - Added IPXroute and IPXstatus commands to RiscIPX to show internal
   state of the module.
 - Now can collect routes to all reachable networks, rather than just
   the ones we've tried so far.
 - Added support for all IPX frametypes supported by NetWare.
 - Now can use different frame type based on which route we're trying
   to send a packet to.

Changes for [1.52]
------------------
 - Now (slightly) optimizes access to extensions lookup table.
 - Removes duplicates in extensions lookup table.
 - Now sets File$Type_XXX variables with description if not set already.
 - Added NWClient$Version variable which contains the version*100.

Changes for [1.51]
------------------
 - Implemented NW:Extensions command to set and read the list of
   extensions that are translated automatically into RiscOS file types.

Changes for [1.50]
------------------
 - Implemented NW:Whoami command.
 - Added feature to NW:Mount to display mount list if no parameters are
   given.
 - Minor tidying up of code, much improved !Help files.

Changes for [1.47]
------------------
 - Fixed problem with deleting locked files, now returns correct error.
 - Added FreeSpace64 entry point.
 - Now stores all 8 bytes of load/execute address if needed.
 - Now does not use extended attributes to store file types SoftLink
   (0xfdc) and UnixExec (0xfe6), but uses flags instead (like Linux).

Changes for [1.45]
------------------
 - Now finally supports long file names; although short file names
   can still be used (either by choice, or automatically on volumes
   that don't have long name space loaded).  You can use
      nw:mount localname remotename -nolongnames  (or -nl)
   to mount a volume that has long file name space loaded without
   the file name support.

Changes for [1.44]
------------------
 - Now can modify read-only and delete/rename-inhibit flags.
 - Added "NWClient_NCP" swi for access to NCP from user land (e.g.
   debugging or hacking)

Changes for [1.43]
------------------
 - Now checks for existence of NWClient$Stream variable on startup.
   When this variable does not exist, NWClient will not stream on
   long file reads and writes, and will be about 50% slower.  This is
   the only way to get an EtherM to work.
 - Made message from file server saying that it's shut down transient
   like all others, no longer keeps machine busy waiting in SVC mode.
 - Checked NWClient against use on an ARM710 RiscPC (works, but slow).

Changes for [1.42]
------------------
 - Improved speed of file access, now can reach read speeds of 900KB/s
   and write speeds of 975KB/s (measured using Power-tec !Speed).
 - Fixed setting of date/time during login, now works even if Sys$Date
   is set (uses Territory_ConvertStandardDate and ~Time).
 - NWClient now logs console broadcast messages to the file NWMessages
   in <Wimp$ScrapDir>.
 - Added code in front end to check for the connection being broken
   due to the file server being shut down.
 - Improved calculations of free space so that it no longer causes
   so many carry overflows (the new code breaks at the 2TB mark).

Changes for [1.38]
------------------
 - Added date stamp handling


Copyright
=========
   !NWClient and the RiscIPX and NWClient modules are Copyright
   1998-2001 by Frank A. Vorstenbosch but can be redistributed freely.
   For questions or bug reports, email nwclient@falstaff.demon.co.uk.
   Check http://www.falstaff.demon.co.uk/nwclient.html for updates.


----- EOF -----
