/************************************************************************/
/**     Documentation about                                            **/
/**                          GCd V2.3                                  **/
/**                                                                    **/
/**     a Shareware program              written by Giulio Ceriola     **/
/**                                                                    **/
/**                                  ( Version finished on 15-Dec-94 ) **/
/************************************************************************/

This program was written by Giulio Ceriola and it is freely distributable
with the only restriction of distribuite all the relative documentation;
it consists of:

                GCd                Executable file that can run on O.S.
                                   2.x and superior (included 2.0). It
                                   supports two language: italian and english
                GCD_1.3            Executable file compatible with the O.S
                                   1.2 and 1.3 (see the readme)
                GCd.doc            Italian documentation about the program,
                                   for each version.
                GCd.doc.eng        English documentation (this file)
                GCd_1.3.leggimi    Short italian readme for 1.2 and 1.3 users
                GCd_1.3.readme     As the precedent, but in english
          libs20/reqtools.library  The required reqtools.library for SO 2.x
                                   to be copied in the libs: directory if not
                                   already present.
          libs20/reqtools.library  As above, but for SO 1.x.
             libs13/arp.library    The required arp.library for the version
                                   for O.S. 1.x

Due to the time and the efforts spent to write this program, I decided to make
Gcd a Shareware program. It means that, if you like this program and use it
regularly, you has the moral duty to sent a contribute to the author (me).
For any other inrfomation, pleas read the Shareware section of this file.

The idea of writing Gcd was born from the need of well manageing, through
AmigaShell, the great number of directory that my system has, after the
adding of an HD. It was necessary a command, "cd" like, that was able
to find, and enter, a directory; giving it only a partial name independently
from its path !
The first hint was given me by a similar programm which tried to solve the
same problem; it was DC written by Peter Struijk that I thanks. ;-)


**********
FEATURES *
**********

GCd can enter a directory in four different ways.
Tha first is the same of the Shell command cd; with same syntax and symbolism.
The second is to enter a directory which is directly "visible" from the
shell's actual directory, specificating a part of its name, too.
For example, if the current directory is Ram: and here there are the
T,ENV,TOOL,WORK directory; you can enter in one of them specifying only
a part of their name (i.e.: 'to' let you to enter in TOOL, 'o' let you
to choose to enter in wOrk or in ToOl; but if you specify 't' you
will directly enter in T ("cd" mode)).
The third way is to enter in ANY directory which is present in ALL the
"fisical" device of the system, using only a part of its name.
That's possible thanks the use of a file, that must be located in the
s: directory (or in gcd:, if the user has assigned it), named Lista.gcd which
contains all the complete path and names of the directory that the user want
to be 'visible' from Gcd.
This file is an ASCII file and can be edited with a normal text editor;
but the program itself can efficently manage it.
To refer to this file in the next chapter, I will use the expressions
'LIST' or the full name Lista.gcd.
The last way is by file requester.


***********************
LINE COMMAND's SYNTAX *
***********************

Gcd can be used only from Shell or CLI !
Its syntax is:

            Gcd [argument] [options] [number]

 POSSIBLE USES

Gcd, as the command "cd", can be used in various manners:

- To Show a brief help                                          (1)
  Syntax: Gcd ?

- To Show the actual directory                                  (2)
  Syntax: Gcd

- To enter in the parent directory(ies) of the actual           (3)
  Syntax: Gcd / (// ...)

- To enter in a directory which name is ENTIRELY specified      (4)
  Syntax: Gcd <full path of the new directory>

- To enter a directory searching it in the stored 'LIST' and    (5)
  between the "visible" ones                                     
  Syntax: Gcd <partial name> [options] [number]

- To enter a directory and to search another between the        (5a)
  "visible" ones, specifying, in the argument, the WHOLE path
  of the first one (first level directory) and else a part of
  the name of the second one
  Syntax: Gcd <path.1st level + partial name>

- To enter a directory by choosing it with a file-requester.    (6)
  The requester let the multi-selection, but only the first
  selection will be considered.
  Syntax: Gcd !

- Modify the stored file Lista.gcd                              (7)
  Syntax: Gcd <device name> options
  (options necessary !)


  OPTIONS

All the options must be togheter and preceded from the symbol "-", and
them must be put always after an argument.
Them modify (or let) the precedent action numer (5) and (7).


Option logically linked to the searching function  (5)

 Character option      Effect

      p            The searching between the path stored in Lista.gcd
                   will not be done.
      e            It asks the program of searching a directory whose
                   name is EQUAL to the argument specified in the
                   argument line (if present)
      f            The program will choose always the first directory 
                   found.


Options logically linked to the functions of manageing the tile Lista.gcd
(7) Whithout them the manageing function will not work

 Character options     Effect

      s            The program will delete the actual LIST and will create
                   a new which contains all the path of the device specified
                   as argument in the command line.
      a            As the previous, but the LIST will not be deleted; and the
                   path will be only added to it.
      u            The program will update the LIST. All the old path of the
                   device specified as argument will be first removed then
                   the new ones will be added.
      n            The program will not check if the argument specified is a
                   "real" (ok) device or an "assigned" one (wrong).
                   (really I never use that features, but someone could like
                   it)
      o            All the previous operations are done serching for the
                   file Lista.gcd in the device Gcd:

P.S.
When I write about a "real" devices, I refer to a "Fisical device".
I often exchanng the word "directory" and "path", becouse I means the
same thing: a directory with its full path.

 NUMBER

When a partial name is specified as 'argument' and the funtion (5) works
successfully, you can choose directly which of the founded directory,
will be entered, by specifying the correspondent number of the directory
that you want (only between the directory present in the LIST).
Where is the usefulness if you don't know or remember the right number ?
You can always choose a number a bit inferior than the right one, so
at the next search the program will start from it instead of the first one.
For good understand that, please read the next chapter and so reread this
passage.

**********************************
WORKING OF THE VARIOUS FUNCTIONS *
**********************************

About the function numbered (1) (2) (3) (4):
the use and syntaz are exactly the same of the AmigaDOS Cd command's one.


About the functions (5):
The program, IN EACH CASE tries to execute the function (4), and ONLY if it
fails, the program will do the searching.
In this case, Gcd compare the 'argument' with all the NAME (without the path)
of the stored directory in Lista.gcd.

At the end of the comparaison there are three possible case:

-Searching successfull ... only a path was found.
 The program will show its name with the full path, and will enter it.

-Searching successfull ... more than one path found.
 The program will enter one of the found directory.
 In this case the program will store in a file in the ENV: directory, the
 partial name specified as 'argument', the number of found path and
 the number of the one actually selected (and entered).
 For shifting between the various directory found, it is enough to repeat
 the command with the SAME 'argument'; so the program will enter the next
 directory found. When the last found directory is enter, the program will
 re-start from the first one.
 In each case, the program will show the name of the directory entered,
 its number and the number of the all ones found.
 If the ENV: device is not assigned, this last features will not work
 (but the number option will yet work).

-Searching failed ... no path found.
(or when the 'p' option is specified)
 In this case the program will compare all the directory visible from
 the actual one with the 'argument' specified. At the end of the
 comparaison the program's behaviour will be similar the precedent:

     -Searching successfull ... only a path found.
      The program will show tha path's name, and will enter it.

     -Searching successfull ... more than one path found.
      The program will show the name of the first found and will wait a
      key. If the <space bar> is pressed the program will show the next and
      so on; otherwise the program will enter the actually showed path.

     -Searching failed ... no path found
      An error message will be showed, stating 'directory not found' and
      the program will end.


About the function (5a)
The program splits the arguments passed in the command line and gets the
path of the first level directory (by finding the last modifier: the ':'
or '/' characters). After that it enters this and, if all is right, makes
its search between the "visible" paths and the program acts as described
in (5).
If the program can enter the first level directory it will be displayed
the relative error message.


About the function (7)
The program creates/updates the small database LIST, inserting the paths of
the selected device
It must be noticed that this function will be activated ONLY IF the
corresponding options 'a','u' or 's' are specified.


For working corretly the program store some preferences in the s: directory
in a file named "gcd.cfg". At now it is not modifyable from the user ...
but the future versions will let it.

**************************
RUN TIME ERRORS - ADVISE *
**************************

The run time errors and relative behaviour of Gcd are the following:

- Failure ot all the (1-5) operation <-> Directory not found
- Failure or problems in writing/reading the archive Lista.gcd
  (not recoverable, unless all the Lista.gcd is rebuild)
- Failure in reading/writing the file Gcd.ENV in th logic device ENV:
  (the prg goes on, but is no more possible to manage (or choose) all
   the directory found)
- Failure in allocating the resources
  (not recoverable)
- Error in command line syntax
  (the program not starts)

Not recoverable = the program shows the kind of the error and ends.

ATTENTION in using the 'n' options. It is not logically compatible with
the filosofy of Gcd (becouse often it happens that the SAME path is stored
under different device, so is repeated more times); but it was added to
satisfy the more malizious users !

****ATTENTION****
Iff you want to "manually" (with an editor) edit the file Lista.gcd instead
of doing it by Gcd, you MUST REMEMBER of ADDING AT THE END of the file,
a 'LF' line feed (or another character, but LF is preferred by me) after
the last path ... otherwise a GURU will visit you !!

***************
COMPATIBILITY *
***************

The GCd package includes two versions.

One of them is compatible with O.S. 2.0, 2.x and superior is localized
and can use two language, italian and english. It not uses any catalogs,
but open the locale for detecting the system language.
It locale is not supported, the language selected is the english.

The other version is compatible with O.S. 1.2 and 1.3. The only language
suported is the english one, but the italian can be forced by using the
special option -i present only on this version.

GCd needs the reqtools.library (must be stored in the libs: directory)
for performing the entering of a directory by requester (6).
Also the 1.x version need the arp.library for manageing the wildcards.

*************************
SHAREWARE's INFORMATION *
*************************

Becouse the time and efforts spent for writing and testing this program
I make GCd a shareware program. It means that if you like it and use it
regularly it is your moral due to send me a contribute.

The not registeres program has now some limitation in working and no limit
in using during time.
The disabled feature are the choosing by requester and use of wildcards.

The requested contribute is 10000 Lit for users who lives in Italy or
9$ (USD) for all others (because of the different postal cost).

Possible way of payment:

        - Postal Money Order (it is the best for me)
        - Cash

or other forms that you prefer, sending it to:

           Giulio Ceriola
           v. C.Rosalba 38/a
           70124 BARI ITALY
if you are interested my phone number is (intern. prefix)-80-513311

You should write me a letter, too.
You have to specify your full address, your system (incluse version of O.S.),
if you use HD or not and if you can access to some E-mail net, please state
it in the letter.
After register, I will send you the last version of the program and a key.


*****************
HISTORY VERSION *
*****************

1.0     First version released
1.1     Changed the program structure
        Corrected some small bug in recognaising the options
        Speeded up the managing of the file Lista.gcd
        Optimized the program's dimension (not released)
1.6     Modified the layout of the operation of choosing the path
        between the ones found between the visible ones.
        Now the -e option work correctly
        Added the number feature.
        Added the support of the LIST in the Gcd: device.
        Added the possibilty of making the "search between visible paths"
        starting from another directory (instead of the actual one).
2.0     Added the possibility of enter a directory by selecting it from
        a requester; for that the program structure has been changed a lot.
        The program will work only for 30 days.
        Version for the 1.x O.S developed, too.
2.2     Added the use of wildcards in the 2.x version, only for registered
        users.
        Now the wildcards work in the 1.3 version of the program, too,
        thanks to the Arp.library.
2.3     Changed the shareware's limitations. Now limits are about not use
        of option ! and of wildcards.


****************************************
FUTURE PLANNING - EXTERNAL SUGGESTIONS *
****************************************

For the next version I thik to abandon the 1.3 version; unless some
registration for that version will arrive.

Now I am working on these new features:

- Option for excluding the searching using the Lista.gcd database.
- Selecting a dir specifying some other "clues" other than entire path
- Possibility of manageing the path found using Lista.gcd, in the same
  manner of the other one, using a particolar option.

Every suggestion, critics or request is well accepted.
To contact me you can write a letter at the addres above specified or via
E-Mail at the following addresses:

              Fidonet   2:335/704.4@fidonet.org
              Amiganet 39:102/602.4@amiganet.ftn
              RPGNet   96:390/1.4@rpgnet.ftn
              VNet     46:1390/11.4@vnet.ftn

o connecting to the BBS:

              Prometheus      tel. ++39-80-5515278
                              on Modem USR HST 21600.

and sending a message to me (the Cosysop :-) ).
