++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                                                        +
+                    StringServer v1.0 Public Beta                       +
+                     ConfigSS v1.07 Public Beta                         +
+                         Released 31.10.1998                            +
+                                                                        +
+                                 by                                     +
+                                                                        +
+                        Assem-Soft Productions                          +
+                                                                        +
+                   Programmed in 100% Assembly by                       +
+                             Odd Skancke                                +
+                                                                        +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

                           ==================
                           === Disclaimer ===
                           ------------------

The author takes no responsibility whatsoever for any effects using this 
software might have on your hardware, girlfriend, coffemachine, bike or 
other stuff you happen to own.! If you don't like these terms, DON'T USE 
IT!!

                           ===================
                           === What is it? ===
                           -------------------

                         ~~~ A bit of history ~~~

 Some two years ago, I was reading newsgroups/my mail using NEWsie. The 
Internet was a new experience for me, and I was very curious. I wanted to 
look at all all the interesting Atari sites, get in touch with people and 
so on. After a while, I got really sick with having to load cab and/or 
typing in the URL too look at. Same with ftp-sites and email addresses. 
This is GEM, I thought, it should not be necessary to do that much 
typing. Then the idea for the StringServer started to crawl into my mind. 
And now, I don't have to type anything anymore. It's even simplified my 
everyday GEM use, as I don't have to drag files all over the place. I 
program in ASM under MiNT/Thing/n.aes, and now I can click any *.s files 
and view them in my TextView!! textviewer. If I hold shift down, the 
StringServer sends the *.s file to QED. When I click the *.s file with 
ctrl held down, the StingServer fires up GenST.ttp, and it's immediately 
assembled. I think this is great!. Well, I hope you will like it too... :)


                          ~~~ StringServer ~~~ 

 The StringServer is the program that receives strings from other 
applications, checks this string and starts the relevant application 
according to the configuration. The StringServer is either loaded as a 
application at bootup or installed as an Accessory.

                            ~~~ ConfigSS ~~~ 

 ConfigSS is the application you use to configure the StringServer. It 
let's you edit the configuration, send/receive configuration to/from the 
StringServer.



++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                                                        +
+                             Installation                               +
+                                                                        +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


                    =================================
                    === Non-multitasking systems ====
                    ---------------------------------

                         ~~~ The StringServer ~~~

 IMPORTANT: The StringServer really needs a multitasking environment!! 
            You can, however, use it under SingleTOS too, but in a 
            limited way. This is because it cannot start any programs 
            under SingleTOS! The only usable way I can think of is to use 
            its logging-feature with AtarIRC. I'm having a few ideas on 
            how to make it more usable under SingleTOS too.

 Rename STRNGSRV.PRG to STRNGSRV.ACC and copy it to wherever you run your 
accessories from. Refer to "The Configuration File" for a description 
about where the StringServer expects it's configuration file to be found.


                             ~~~ ConfigSS ~~~

 To effectively use ConfigSS, a Y resolution of at least 260 lines is 
required. It will work with lower resolutions, but then parts of it's 
dialogs will not be visible/accessible.

 This application is used to configure the StringServer. You can just run 
it from the desktop, or, if you want to be able to access it from other 
applications, you can rename it to CONF_SS.ACC and run as accessory. If 
you are thinking about running this application as an ACC, know that it 
uses around 190Kb, and that ACC's don't get an environment table, so you 
can't use the Environment Selector. I don't know if that is entirely 
true, but that's the impression I have, and I have not done any 
investigation on it yet. But, if people say they want it, I'll look into 
it.

 ConfigSS takes the same approach as the StringServer when 
locating/saving your configurations, refer to "The Configuration File.


      ============================================================
      === Multitasking systems...(for which is was intended..) ===
      ------------------------------------------------------------ 


 If you install under a multitasking operating system like MiNT, MagiC or 
similar, you get the full use of this package! If you still run plain 
SingleTOS, I strongly suggest taking a look at either MiNT (which is 
free) or MagiC.

 There are several ways to start the StringServer under a multitasking 
system, and they are;


 1. Staring it as an Accessory by remaining it to STRNGSRV.ACC and put in 
    the directory from which you run your other accessories. (Most 
    commonly, the root on the boot drive, C:/ )

 2. Starting it from the AES's configuration file (GEM.SYS, N_AES.CNF ..)

    To start it from from the AES's config file (which is what I do), you 
    should add this to your GEM.SYS or N_AES.CNF (for Atari's AES 4.0/4.1 
    or N.AES);

run x:\path\to\stringserver\strngsrv.prg

    If you use MagiC, you should put the StringServer in MagiC's START 
    folder.


 3. Configure the Desktop to autostart it when it starts. (I know Thing 
    can do this!)

 4. Simply start it by clicking  on it from the Desktop.


 If you want to use the StringServer as a partial/full replacement 
"installing applications", you need a Desktop supporting the AV_PROTOCOL. 
I guess most Desktops supports it now, but I would recommend having a 
look at Thing which I think is the best. If you decide to try out MiNT, 
Thing is a must!!

 If you use Thing, you should install the StringServer in Thing, and 
under "Files", in the "is used to view" file masks, enter "*". Then, 
under the "Options", you should select "full paths", so that the full 
pathname of the files are passed. This will cause all files that is not 
installed elsewhere to be sent to the StringServer, which then check the 
filename (to StringServer, filenames are just strings), and starts and/or 
passes the filename on to the installed application (or destination to 
StringServer). If you want the StringServer to handle all files, you can 
remove the filemasks from Thing, and reinstall them in the StringServer, 
using ConfigSS. More about this below, under the "Configuring the 
StringServer... Using ConfigSS.." part.


========================================================================
========================= The configuration file =======================
========================================================================

 The StringServer's configuration file, named "strngsrv.cnf", contains 
your settings. This file is a binary file, which means that one 
should NOT attempt to edit the file manually! The reason for 
keeping the configuration file this way, is to make the 
StringServer itself as small as possible. And with this approach, it 
needn't contain a "config file parser". ConfigSS loads/stores your config 
to this file, which is then used by the StringServer when it starts. Both 
applications look for this file using the following scheme;

1.  Environment variable $HOME.

  If $HOME is defined, the configuration file is searched for in the path 
  specified by it.


2.  Environment variable $STRNGSRV_PATH.

  If $HOME is not defined, or the configuration file is not found there, 
  it searches the path specified by this variable.

3. Start Directory

 If none of the above is defined, or if the configuration file is not 
found in either, the start-directory, i.e., where the StringServer is 
start from, is checked. If the configuration file is not here either, the 
StringServer start up with no configuration.


 IMPORTANT!! If you don't have any of the above environment variables 
             set, you must put and start ConfigSS in the same directory 
             as the StringServer. This is because ConfigSS takes the same 
             approach in locating the config file, and in this case this 
             will be the start directory.




++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                                                        +
+                 Notes about Environment Variables                      +
+                                                                        +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


 Environment variables can be looked at as System configuration 
variables, in a way. They are really useful, and can simplify things a 
lot. One example is the variable $RSMASTER, which points to the 
application that changes resolutions for you under MagiC or MiNT. Many 
applications can call this application at the request by the user, and 
when this variable is set, doesn't need to ask the user where it is. 
Similarly, the environment variable $BROWSER is very handy. I don't know 
if this is a "standard" variable yet, but it should be. This variable 
contains the path to the selected browser, and other applications like 
email-clients, Irc clients or others that need to be able to start it, 
can call the browser specified. The real usefulness of environment 
variables appears when you suddenly get a new browser, or want to move 
the browser to another place. You don't want to reconfigure all the 
applications referencing the browser, right?. You can then just change 
the variable to point to the new place/new browser, and reconfiguration 
is done. This is the purpose of the $HOME environment variable too, all 
applications wondering where to store their configuration files and such, 
can look up this variable. Very useful in a multi-user environment, or 
with different OS'es on the same computer. For example, when running 
MiNT, the $HOME could point to the directory to hold config files for 
MiNT, and another directory to hold config files for MagiC. That way, you 
wont have to reconfigure the applications depending on what you use. Of 
course, this would need the applications to actually support this way of 
behavior, but more and more do.


 So, if you haven't already set up a $HOME variable, add this to your 
n_aes.cnf file, if you use N.AES;

export HOME=X:\YOUR\HOME\PATH

 If you use MiNT with Atari's GEM.SYS, the line to add to GEM.CNF looks 
 like;

setenv HOME=X:\YOUR\HOME\PATH

 And with MagiC you should add;

#_ENV HOME=X:\YOUR\HOME\PATH


 The StringServer can use environment variables to look for destination 
applications. So, while you are in the systems configuration file, you 
might as well set up some environment variables to your favorite 
programs. This package was initially developed for use with GEM Internet 
clients, although it can be used for anything.
 
 I use it with NEWsie to read mail/news, Airc when IRC'ing and certain 
other things. I have the following environment variables set, examples 
from my n_aes.cnf. Remember that you can define those variables as you 
wish (I hope someone will propose "standard" names soon).

<snip>
export  BROWSER=e:\kommunik\www\cab2d\cab.app
export  FTP_CLIENT=e:\kommunik\aftp13b1\aftp.prg
export  MAIL_CLIENT=e:\kommunik\stik\newsie\newsie.prg
export  NEWS_CLIENT=e:\mommunik\stik\newsie\newsie.prg
export  IRC_CLIENT=e:\kommunik\stik\atariirc\atarirc.app
<snip>

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                                                        +
+            Configuring the StringServer .. Using ConfigSS              +
+                                                                        +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

              ===============================================
                         === Starting ConfigSS ===
              -----------------------------------------------

 When ConfigSS is started, it automatically checks to see if the 
StringServer is active. If StringServer is there, ConfigSS asks for it's 
configuration and opens up the main dialog, "Configure StringServer", and 
the status-line will say "success!". If StringServer is not running, or 
if an error occurs during this process, the status-line will indicate 
this when the "Configure StringServer" dialog appears.

 If you are running ConfigSS under a Multitasking OS, it will not use a 
menu. Instead it uses a popup which is accessed by clicking on the status-
line in the main dialog.

 If you are running it under a Singletasking OS, it will use a simple 
menu, with only one menu title, so that you can access the accessories.

 If you should accidendally close the main dialog, you can open it again 
by pressing ctrl+m when ConfigSS is the active program.


              ===============================================
              === The Configure StringServer Main dialog. ===
              -----------------------------------------------

                             ~~~ Editing ~~~

 The main dialog in ConfigSS, "Configure StringServer", has four fields 
called "String Mask", "Precedence", "Filter" and "Destination". These 
fields are what I call "textframes". Textframes are like having areas in 
dialog-boxes with full text-viewing capabilities, like a window in 
TextView!!. These textframes can be edited when used with my text-editing 
module, making each textframe act like a full editor. When editing in 
these textframes, the following rules apply;

- RETURN -

 When hitting RETURN, a new line is opened underneath the current line at 
which the cursor is in all textframes. This is because the same line in 
each textframe belongs to the same config entry. So, in order to avoid 
"unsynchronization" of the lines, the CR is put in at the end of the 
lines in each frame.

- TAB -

 Pressing TAB causes the cursor to move to the first line in the next 
TextFrame.

- DELETE -

 DEL deletes the character under the cursor. If at the end of a line and 
DEL is attempted, nothing happends. This is again because of the line-
syncing in the different text-frames.

- BACKSPACE -

 BACKSPACE deletes the character to the left of the cursor. If at the 
start of the line, nothing happends. Again, line-syncing is the cause.

- CTRL+Y -

 Ctrl+y deletes the line at which the cursor is in all the frames, thus 
deleting a config entry.

- ARROW KEYS -

 Arrowkeys move the cursor like in a normal text-editor.

 Shift+left   = Cursor to start of line
 Shift+right  = Cursor to end of line
 Shift+up     = Page up
 Shift+down   = Page Down
 Ctrl+left    = Cursor to start of previous word
 Ctrl+right   = Cursor to start of next word
 

                      =============================
                      === The String Mask Field ===
                      -----------------------------

In this field you set the string mask for a given config entry. The 
following rules apply;
 
 NOTE: The meaning of the following characters is preset at the moment, 
       cause I've not done the interface to change the characters. You 
       will be able to give the following meanings to any character in 
       future versions.

 [ = Tells the StringServer that the following is a "match list"
 | = Delimits entries in the match list
 ] = End of match list.
 * = Any string
 ? = Any Character

NOTE: As it is now, the search routines in the StringServer are case-
      sensitive. I think that is a good thing, although I will implement 
      case-insensitive search if enough people complain about this :-)


                         ~~~ "Match Lists" ~~~

 A match list is a list of strings that will be checked against the same 
area in the string sent to the StringServer. Consider the two following 
strings - "WWW.BRIGHT.NET" and "www.bright.net". You can see that if the 
string mask is "www.*", only the latter string will make a hit. This is 
where the match list comes in handy. To cover both possibilities, the 
string mask should be "[WWW|www].*". Then both strings will give a hit.

 I use a large match list to include all Atari related ftp sites I know 
of that don't start with "ftp.". To include all those in a single config 
entry I set up a match list with all of them, like;

[193.190.205.13|alice.fmi.un-*|vax.ph-ci*|pascal.math.*|ma2s2.math*|....]

 In other words, all strings that should go to the same destination can 
be included within such a match list.

 Another example of match lists is, if you install it to view all files, 
and want to cover all text files, something like this can be used;

?:[/|\]*[.txt|.TXT|.me|.ME|....... ]

NOTE: Because of the case-sensitive search, all file extenders have to be 
      given in both upper an lower case. This is not necessary if you 
      only have TOS filesystems.

                     --- The Precedence field. ---

 In this field you specify what a string sent to the StringServer should 
be preceded with. Take CAB for instance, it requires that URLs sent to it 
starts with "http://". With a string mask looking like "[WWW|www].*", the 
string "www.bright.net" will give a hit. Then the string in precedence 
and this string will be merged to form "http://www.bright.net" before 
going to whatever specified in the Destination field. FTP addresses 
should look like "ftp://ftp.funet.fi", so a mask "[ftp|FTP].*" should 
have the string "ftp://" in the precedence field.

 Also, if you, for example, install zoo.ttp for .zoo files, you can enter 
the command line here. Only remember that you need a space between the 
switches and the arguments (string or filenames), so a entry to extract 
.zoo files should look like "x ".

NOTE: The order of the configuration entries are VERY important. The 
      StringServer always starts with the first entry, going downwards 
      when searching for a hit. If you, for example, have 
      this mask, "[WWW|www].*" before this one, "[HTTP|http]://*", and 
      this URL arrives to the StringServer, "http://www.something.no", 
      it will not work. The reason for this is that, as mentioned above, 
      CAB needs it's URLs to start with "http://". So, if the "www" check 
      is made BEFORE the "http://" check, the above URL will give a hit 
      with the "www" check. And with the "www" check you have "http://" 
      as precedence for CAB to recognise it. So, in this case you will 
      end up with this going to CAB "http://http://www.something.no". And 
      ofcourse CAB can't load this URL. So, the correct order would be to 
      check for "http://" BEFORE "www", to catch URLs that already start 
      with "http://". This also applies to FTP addresses.

      CONCLUSION - if you experience that strings are sent to wrong 
      application, or if it gets the wrong "precedence", check the order 
      of your configuration.

                      =============================
                      === The String Mask Field ===
                      -----------------------------

 This field is not yet implemented, but the idea is to remove the 
string(s) in this field from the string sent to the destination. Like, 
with a mask looking like "*@*.*" to cover email addresses, Precedence 
field containing "mailto:" and the Filter field containing "[NO|SPAM]", a 
string sent to the StringServer looking like "mailNO@SPAMaddress.yes" 
would have both "NO" and "SPAM" removed. So, the resulting would be 
"mailto:mail@address.yes" going to the destination.



                      =============================
                      === The String Mask Field ===
                      -----------------------------

 This field specifies the destination of the string matching this entry. 
The destination can one of the following.

 1. A log file.

 2. A environment variable pointing to the destination application and a 
    log file.
 
 3. A path to the destination application and a log file.
 
 4. Name of the destination application and a log file.
 
 This does NOT mean that there have to be a log file. You can specify a 
log file if you wish. But it does mean that you can only specify ONE 
destination application and/or a log file to which to send the string.

 You can NOT specify a Destination like this;

 "BROWSER" CAB e:\internet\www\cab\cab.app

                     ~~~ Application as destination ~~~

 To specify an application as a destination, there are three 
possibilities. They are;

The application name in the form used by APPL_FIND().

  This is the name under which the system knows the application, and is 
  only useful if the given application is running. It's useful for doing 
  tests and temporarily send strings to a running application. Lets say 
  CAB is running, you can enter CAB as destination. This name must be 
  given in upper case letters.

 For example;
 
  String mask      Precedence  | F.| Destination
--------------------------------------------------------------------------
|[WWW|www].*      |http://     |   |CAB                                  |
--------------------------------------------------------------------------

Full path/name to the application.

 This is the full path to the destination application. When the destination 
 application is specified this way, it will get started if it is not 
 already running, or the string will be passed to it if it is.

 For example;
  String mask      Precedence  | F.| Destination
--------------------------------------------------------------------------
|[WWW|www].*      |http://     |   |%a E:\CAB\CAB.APP                    |
--------------------------------------------------------------------------

The 3rd possible destination application specification involves using 
environment variables. When a destination specification starts with '"', 
StringServer interpretates this as a environment variable, and then uses 
the path specified by it. This is the best way to configure your 
destination apps, at least when the type of application have a "standard" 
environment variable name by which it can be referenced. Like $BROWSER 
always points to the browser installed on the system.

 For example;

  String mask      Precedence  | F.| Destination
--------------------------------------------------------------------------
|[WWW|www].*      |http://     |   |%a "BROWSER"                         |
--------------------------------------------------------------------------

 You may have noticed the "%a" in front of the destination application 
specification. This is an optional switch that tells the StringServer to 
set the default directory of the application to;

 %a - Default directory = Start directory of the application (ie, same 
      directory as the application resides in)

 %d - Default directory = Directory of the files passed (only usable if 
      the passed string is indeed files, and not an URL, for example)

 %w - Default directory = Current working directory of the Desktop. This 
      does not work at all, and the StringServer defaults to %a when this 
      is found. The reason for this not working, is that I don't know how 
      to get the current working directory of the Desktop. I have mailed 
      Thomas Binder about this, hoping he can provide some info about 
      Thing. Really hope for a positive answer.

 If no switch is specified, StringServer defaults to %a. This will only 
work with either MiNT and MagiC, I think cause those are the only two 
systems I've tested it with.

                            ~~~ Log-Files ~~~

 You can specify a log file to which the strings will be written. The 
destination can specify either only a log file, or both application and a 
log file. The only restriction is that the application specification must 
come BEFORE the log file specification.

Not allowed;

  String mask      Precedence  | F.| Destination
--------------------------------------------------------------------------
|[WWW|www].*      |http://     |   |{C:\URL.LOG} "BROWSER"               |
--------------------------------------------------------------------------


Valid entries looks like;

  String mask      Precedence  | F.| Destination
--------------------------------------------------------------------------
|[WWW|www].*      |http://     |   |%a CAB {C:\URL.LOG}                  |
--------------------------------------------------------------------------

or

  String mask      Precedence  | F.| Destination
--------------------------------------------------------------------------
|[WWW|www].*      |http://     |   |%a E:\CAB\CAB.APP {C:\URL.LOG}       |
--------------------------------------------------------------------------

or

  String mask      Precedence  | F.| Destination
--------------------------------------------------------------------------
|[WWW|www].*      |http://     |   |%a "BROWSER" {C:\URL.LOG}            |
--------------------------------------------------------------------------

 To specify a log file, the character "{" is used to tell the StringServer 
that the following is the full path and filename of the log file to use.

 The character "}" tells StringServer the end of the log file specification.
 
 For example;
 
  String mask      Precedence  | F.| Destination
--------------------------------------------------------------------------
|[WWW|www].*      |http://     |   |{C:\URL.LOG}                         |
--------------------------------------------------------------------------

 Any strings matching this will be written to the file URL.LOG on the C 
partition. If the file doesn't exist, it is created. If it exist, the 
string is appended to the end of the file together with a CR/LF.

 If you want to make the file "start over", i.e., delete the contents in 
it and write the string to it, you specify this with a "!" between the "{" 
and the filename.

  For example;

  String mask      Precedence  | F.| Destination
--------------------------------------------------------------------------
|[WWW|www].*      |http://     |   |{!C:\URL.LOG}                        |
--------------------------------------------------------------------------

 Now the file will only contain the latest URL sent to the StringServer.
 
  String mask      Precedence  | F.| Destination
--------------------------------------------------------------------------
|[WWW|www].*      |http://     |   |%a CAB {!C:\URL.LOG}                 |
--------------------------------------------------------------------------
 or

  String mask      Precedence  | F.| Destination
--------------------------------------------------------------------------
|[WWW|www].*      |http://     |   |%a E:\CAB\CAB.APP {!C:\URL.LOG}      |
--------------------------------------------------------------------------

 or

  String mask      Precedence  | F.| Destination
--------------------------------------------------------------------------
|[WWW|www].*      |http://     |   |%a "BROWSER" {!C:\URL.LOG}           |
--------------------------------------------------------------------------

 are all valid samples.

NOTE: The space between the application specification and the log file 
      specification is optional.

         --- More than one Destination specification "slots" ---

 The above examples will work only if none of the status keys on the 
keyboard is pressed when the string arrives to the StringServer. This is 
because the Destination field can have one specification for each of the 
following key combinations.

keycombo             Destination "slot" number

  none                       1 (like our examples above)
  shift                      2
  ctrl                       3
  alt                        4
  ctrl+alt                   5
  shift+ctrl                 6
  shift+alt                  7
  shift+ctrl+alt             8
  
 The Destination "slots" are delimited with the character "". This 
character is printed when pressing ctrl+c. Or holding ALT while pressing 
"3" on the numeric keypad and releasing ALT again on TOS 1.4 and above.

 Now, let's say you're reading some news (with NEWsie, for example) using 
TextView!! as a external viewer. You see a URL that you would like to 
look at later. Then consider the following entry;

  String mask      Precedence  | F.| Destination
--------------------------------------------------------------------------
|[WWW|www].*      |http://     |   |%a "BROWSER"{C:\URL.LOG}            |
--------------------------------------------------------------------------

 You can see that if you click the URL without any status keys 
(shift,ctrl or alt), the string would go to whatever the env. varib. 
BROWSER points to. If, however, you hold Shift while clicking the URL, 
the second Destination "slot" will be used, which is the URL.LOG file.

 Let's say that sometimes you want to "start over" with the log file, 
deleting it's old contents, you could use the following in the 
Destination field;

.. | Destination
.. ----------------------------------------------------------------------
.. |%a "BROWSER"{C:\URL.LOG}{!C:\URL.LOG}                             |
.. ----------------------------------------------------------------------

 Now the string goes to "BROWSER" when clicked normally, appended to the 
URL.LOG if clicked with SHIFT held down, and if you click with CONTROL 
held down, it will "restart" the URL.LOG file, and save the string to it.

 And if you have two different applications for the same type of string, 
you can specify more apps this way.

 Consider the following destination slots..

"BROWSER""BROWSER"{c:\html.log}"BROWSER"{!c:\html.log}{c:\html.log}{!c:\html.log}

This would work like this;

no status keys = Send string to BROWSER
SHIFT          = Send string to BROWSER and append string to HTML.LOG
CONTROL        = Send string to BROWSER, "restart" HTML.LOG and save string.
ALTERNATE      = Append string to HTML.LOG
CONTROL+ALT    = "restart" HTML.LOG and save string.

NOTE: There can also be assigned a different "Precede" string per slot. I 
      use this with zoo.ttp, gzip.ttp and tar.ttp. My entries looks like 
      this;
      
  String mask                | Precedence   | F.| Destination
--------------------------------------------------------------------------------------------------------------------
|?:[/|\]*[.zoo|.ZOO]         |l x          |   |%d j:\toslinks\gzip.ttp%d j:\toslinks\gzip.ttp                   |
|?:[/|\]*[.tar.gz|.TAR.GZ]   |-tzvf -xzvf  |   |%d j:\toslinks\tar.ttp%dj:\toslinks\tar.ttp                      |
|?:[/|\]*[.gz|.GZ]           |-l -d        |   |%d e:\system\packers\zoo\zoo.ttp%d e:\system\packers\zoo\zoo.ttp |
--------------------------------------------------------------------------------------------------------------------

 With this setup, I can double click on any of the specified file types, 
and have the appropriate .ttp list what's in the archive. If I hold shift 
down and double click the files, they get uncompressed to the directory 
where the files are located (%d).
     
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                                                        +
+                      Configuring using the Mouse                       +
+                                                                        +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

                 ======================================
                 === The "Destination Type?" Dialog ===
                 --------------------------------------

 If you double-click or right-click on any of the config entries, a 
dialog will appear asking you what type of destination you want to 
select. If you click in the "Destination" Field (Frame), the "slot" you 
click will be the default when you enter the "Destination Slots" dialog, 
discussed below. Otherwise, slot number 1 ("NONE" in the "Destination 
slots" dialog) will be the default upon entering it.

 Anyway, when double-clicking/right-click in one of the frames, the 
"Destination Type?" dialog appears. Here you select "log file" if you 
want a log file, "Environment Variable" to select an environment variable 
or "Application" to select exactly that.

 When you select "log-file" or "Application", the Fileselector appears.

                        ~~~ Select Log File ~~~

 If you select an non-executable file, you will get an alert asking if 
you're sure it is an executable file. Selecting no here calls the 
fileselector again. Selecting Yes brings up the "Destination Slots" 
dialog.

                       ~~~ Select Application ~~~

 If you select an executable file as a log-file, an alert will warn you 
that the StringServer will overwrite and destroy this file if you go on 
using it. Selecting no brings up the fileselector again. When an 
application have been selected, the "Destination Slots" appears.

 When cancelling the Fileselector, the "Destination Type?" dialog appears 
again. Clicking "Cancel" here cancels the whole operation.

                  ~~~ Select Environment Variable ~~~

 When you select "Environment Variable" in the "Destination Type?" 
dialog, the Environment Selector appears. Here you select the variable 
you want, either by double-clicking on it, or highlight it and click 
"ok". Cancel brings up the "Destination Type?" again. If the selected 
environment variable is empty, or contains a value other than a full 
path/file specification, an alert appears telling you. In fact, there's a 
lot of alerts for for different things that can happen. I hope this is 
not too hard, as I don't want to document every one of them.

 A successful Destination selection brings you to ...........


                 ======================================
                 === The "Destination Slots" Dialog ===
                 --------------------------------------

 If you have read the "Configuring the StringServer... Using ConfigSS" 
above, this dialog should be pretty self-explanatory.

 The field "Currently Selected Destination(s)" show your current 
destination. If you selected either an application or environment 
variable, you will see the %a switch preceding it, as this is the 
default. You can now click "application", "Data" or "Window" to set the 
Default switch accordingly. If you want to add a log file, click "Add Log 
File" button to select a log file. You will then see the log file after 
the application specification.

 If you selected a log file, the "Application", "Data", "Window" and "Add 
Log File" will appear disabled.

 In the field "Precedence string for this destination" you can type in 
the Precedence string for this destination. This only have meaning if the 
destination is a application.

 The "Select Destination Slot(s)" lets you choose what keycombo that 
should activate this destination. To select more slots, hold SHIFT down 
and select the ones you want.

 When you are done, press "OK" to insert this slot.


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                                                        +
+                    Configuration done... now what?                     +
+                                                                        +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 Send config

 If you are running under a multitasking OS or have the StringServer 
running as an .ACC, you can send the configuration directly to it by 
pressing this button. The configuration will then have immediate effect. 
If the status line says "Success!!", all went fine. Otherwise an error is 
displayed.

 Get config

 If under the same conditions as with Send config, press this button and 
StringServer will send it's current configuration to ConfigSS. You will be 
able to see immediately it's current config. A "Success!!" in the Status 
Line if ok or a error message will appear in the Status line.

 Save CNF

 When you are happy with your settings, you can press the "Save CNF" 
button to save them. A description on how/where it saves the file is 
given above. The full path and filename will appear in the Status Line if 
no errors occurred.

 Load CNF

 See above for a description on where the config file is loaded from. The 
full path and filename of the loaded .CNF file will appear in the status 
line if no errors occurred.


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                                                        +
+                             Miscellaneous...                           +
+                                                                        +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

                      ~~~ Word separator filed ~~~

 The word separators field is not used for anything yet, but the idea is 
that supporting applications can send a string, and an offset from the 
start of the string to the character actually clicked. Then the 
StringServer will search from this position left and right for word 
separators. This will be useful for supporting applications, as they 
won't have to check for other separators than space.

                         ~~~ Changing Fonts ~~~ 

 If you use a font-selector that supports FONT_CHANGED protocol, you can 
drag fonts to the different TextFrames. The Frame for "String Mask", 
"Precedence", "Filters", "Destination" and the Environment Selector are 
editor Frames, and support only monospaced fonts. The Editable-field 
Frames, "Word separators" in the main dialog, "currently selected 
destinations" and "Precedence string for this entry" in the "Select 
Destination Slots" dialog supports all kinds of fonts. Try it.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                                                        +
                     The future.... is there one??                       +
+                                                                        +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 This vesion is released as a "Public Beta" version, and was 
released for evaluation only. ConfigSS and the StringServer will 
eventually be SHAREWARE. But, for now, if you use this software, you're 
required let me know what you think of this package, either by e-mail or 
snail mail. Preferrably e-mail. If I don't get enough feedback, I will 
assume that there's no need for this package, and so will not bother 
writing docs or release further versions. Writing this documentation took 
valuable coding time, and I find it downright boring, so I must know if 
there's any need.

 Also, if you have suggestions don't hesitate at all letting me know. The 
following are planned for the StringServer/ConfigSS

 *  Support for OLGA. Could be useful when using log-files. Whenever 
    something is added to a log-file, it would be instantly updated if 
    viewed by a program supporting OLGA.

 *  DHST support. You can turn this option on for an application not 
    already supporting it, and have the StringServer handle the DHST 
    server updating.

 *  StringServer/ConfigSS communication will be much better, so that it'll 
    be easier to see what's going on.


 Well.. that's it for now. I hope this software will be of use, and hope 
you like it. Remeber to give me feedback!!! :)


  Odd Skancke.


 ANY COMMENTS, SUGGESTIONS OR BUGREPORTS ARE MOST WELCOME TO THE FOLLOWING 
EMAIL ADDRESS - Use "SS Report" in the subject, please - ;

 oskancke@online.no

