              ***** Global Conference Control Host v3.3 *****
              *** Autore: Davide Massarenti (2:332/505.3) ***

                              - MANUALE -

Nota di Copyright:

       A partire dalla versione 2.00 questo programma e' SHAREWARE.
Se  hai  piacere che l' autore continui a svilupparne nuove versioni non
devi fare altro che spedire una donazione ( di almeno 20000 lire ):

                           Davide  Massarenti
                           Via Mascherella 11
                              41100 Modena
                                 Italia

Grazie.


Premessa:

Nello  scrivere questo manuale abbiamo cercato di evitare i tecnicismi e
uno  stile oscuro.  Nonostante i nostri sforzi questo documento potrebbe
contenere  degli  errori  di  cui  ci  scusiamo.  Non ci assumiamo pero'
alcuna   responsabilita'  per  gli  inconvenienti  che  essi  potrebbero
malauguratamente procurarvi.

------------------------------------------------------------------------

                     - Come lanciare il programma -

GCChost  gira  come  un  processo  ARexx  ossia  apre una porta ARexx ed
aspetta  di  ricevere  da essa i comandi.  Si rende quindi necessaria la
presenza  del  RexxMaster  (  le versioni precedenti la 1.10 non possono
essere  usate  ).  Per lanciare il programma potreste quindi impartire i
seguenti comandi da una finestra CLI:

   RexxMast
   Run GCCHOST


                          - Uso del programma -

Per  far  eseguire  un  comando a GCChost e' necessario usare uno script
file.   La  sua porta ARexx si chiama 'GCC_host' e ad essa devono essere
indirizzati i comandi.  Ad esempio potreste fare cosi':

   Rx <nome dello script> argomenti

Per  impartire  un comando generico si usa lo script Rexx/GCC che prende
gli argomenti e li passa a GCChost senza modificarli.

Nota:

Nel caso il comando <nome comando> non fosse riconosciuto da GCChost, il
programma cercherebbe di eseguire lo script <nome comando>.GCC

Evitate  che  due  script diversi accedano contemporaneamente a GCChost.
In  tal  caso potrebbe nascere un conflitto in grado di produrre effetti
assai gravi.

GCChost  legge in memoria gli headers dei messaggi ad ogni primo accesso
ad   un'  area.   Se  un  programma  esterno  modifica  l'  area  stessa
aggiungendo,  togliendo o modificando anche un solo messaggio non appena
GCChost  cerchera'  di  accedere all' area utilizzando dei dati non piu'
aggiornati  si  creeranno  le  condizioni  per un FAILURE del programma.
Quindi  se  volete servirvi di un programma esterno impartite prima o il
comando  'FreeCaches'  o  il  comando  'InvalidCaches'  che  liberano la
memoria associata a quei dati.

Nel  corso  del  manuale  dire  $VAR significa riferirsi al valore della
variabile VAR.


                       - File di configurazione 1 -

Questa  versione  di GCChost non legge alcun file alla partenza.  Quindi
non  esiste piu' la necessita' di un file chiamato 'MAIL:GCC.cfg'.  Piu'
avanti,   nella  descrizione  dei  comandi,  troverete  delle  ulteriori
informazioni  a questo proposito.  E' ugualmente necessaria la creazione
di un file di configurazione, le cui linee possono essere di due tipi:

 1 - <nome della variabile> = <valore della variabile>

     Nel  file  di  configurazione,  come  dice  il  nome,  si pongono i
     parametri  che  caratterizzano il sistema.  Questa operazione viene
     compiuta  tramite  l'  assegnazione di variabili.  Bisogna inserire
     almeno  uno  spazio  prima  e  dopo il segno '=', inoltre il valore
     della  variabile  deve  essere  formato  da  un'unica parola; se il
     valore  risulta  composto  da  piu'  parole, si deve racchiudere il
     tutto  entro  doppi  apici  (").   Nel caso si debba utilizzare una
     parola  contenente  uno  o  piu' doppi apici, si deve far uso della
     sequenza \" che equivale a " .
 	
	Es.:  "dir \"test\"" equivale a:  dir "test"

     E'  possibile assegnare qualsiasi variabile.  Tale potenzialita' e'
     sfruttata  per  configurare  gli script files.  Tutto quello che si
     deve  fare per configurarli e' modificare le variabili SCRIPT_* con
     i proprio settaggi.

 2 - <switch di controllo>

     Oltre  al  settaggio  dei  parametri  caratteristici  del  sistema,
     attraverso   l'uso   degli   switches,  e'  possibile  decidere  il
     comportamento  del  programma,  come  ad  esempio nel caso di short
     packets.


Per  la  descrizione particolareggiata degli switches e delle variabili,
vedere i files 'Switches.doc' e 'Variables.doc'.

Vedere i files 'Point/*' per un esempio di configurazione per Point.
Vedere i files 'BBS/*' per un esempio di configurazione per BBS.


                               - Comandi -

1 - per il controllo del programma

  - InitGCC [<.CFG file>]

     Questo comando legge il file di configurazione e l'$AREAS.
     Se  non  ci sono argomenti si usa il file di default 'MAIL:GCC.cfg'
     ma  si  puo' specificare il nome di un altro file lanciando GCChost
     con:

     'run GCChost <.CFG file>'

     Nota:

     Invocando  InitGCC  piu' volte non si sortisce nessun effetto.  Nel
     caso  si  apportino  dei  cambiamenti  dall' esterno sulle aree dei
     messaggi o sui files di configurazione bisogna aver l'avvertenza di
     dare  il  comando 'FreeCaches' o 'InvalidCaches' o 'CleanGCC' prima
     di effettuare tali cambiamenti, pena un probabile malfunzionamento.

  - CleanGCC (non e' possibile eseguirlo dall'editor)

     Questo  comando  chiude  tutti  i  log files, riscrive le caches su
     disco,  libera  tutta  la  memoria occupata.  In pratica riporta il
     comando alla situazione immediatamente successiva al lancio.

  - Quit (non e' possibile eseguirlo dall'editor)

     Fa' le stesse cose di CLEANGCC e in piu' chiude GCChost.

  - Help [<command name> ...]

     Se non si specifica alcun argomento viene fornito un aiuto su tutti
     i  comandi  disponibili.  Si puo' richiedere l' aiuto su uno o piu'
     comandi soltanto specificandone i nomi come argomenti.

  - CloseLogs

     Chiude  i  log  files  aperti al momento, permettendo cosi' la loro
     cancellazione.

  - SetLogLevel <log level>

     Potete  scegliere  il tipo di log file generato dal programma, cosa
     che incide anche sulle prestazioni globali dello stesso.  Minore il
     livello minore la velocita'.  I livelli accettati sono i seguenti:

     log level = 0: esteso
     log level = 1: esteso ma senza messaggi temporanei
     log level = 2: corto, con indicazione dell' ora
     log level = 3: corto
     log level = 4: corto,   con   indicazione  dell'ora.   Non  vengono
                    mostrate  informazioni  del  tipo  IMPORT MSG ...  o
                    EXPORT MSG ...

     Nota: i messaggi temporanei sono quelli del tipo: Deleting XYZ ecc

  - UpDateDialog [<area name> ...]

     Gli  argomenti  sono  dei  patterns  ARP.   Il comando si occupa di
     aggiornare  i  files  di  controllo  di  Dialog:   'Pointers.Msg' e
     'User.Msg'.   Tali  files  risiedono  nella  directory di ogni area
     messaggi  gestita  da  Dialog.   Il  primo  viene sempre riscritto,
     mentre  il  secondo  solo se e' gia' presente e se l' area e' stata
     rinumerata.   Questo  comando  fa  le stesse cose dell' equivalente
     programma  di  Dialog,  ma,  essendo  interno  a  GCChost, evita la
     necessita' di liberare le caches dei dati presenti in memoria.

  - UpDateAreas

     Chiude  i  log  files  e copia le caches su disco senza liberare la
     memoria  allocata  dalle stesse cosicche' un successivo comando non
     debba  rileggere  i dati dal disco.  E' necessario impartire questo
     comando  alla  fine  di  ogni  script  dal momento che non tutte le
     modifiche apportate da GCChost ai messaggi vengono riscritte subito
     su disco.  Esso fa' in modo che vi sia coerenza tra dati scritti su
     disco  e dati contenuti in memoria.  Consultare la nota del comando
     InitGCC.

  - FreeCaches [<area name> ...]

     Riscrive le caches su disco e libera la memoria ad esse associata.

  - InvalidCaches [<area name> ...]

     Libera la memoria associata alle caches senza aggiornarle su disco.

  - SetSwitch <switch name> [<switch name> ...]

     Setta gli switches passati come argomenti.

  - PrintLOG <string> [<string> ...]

     Stampa gli argomenti sia sulla window console che sul $LOG_NAME.


2 - per il controllo della posta

  - Import

     Questo  comando  legge la posta nella $FILES e la smista nelle aree
     di  destinazione.   Nella  versione  registrata  avviene  anche  lo
     smistamento dei messaggi verso i nodi di destinazione e la gestione
     dei messaggi per AreaFix.


  - MoveSpecial [<ARP pattern> ...]

     Gli  argomenti  sono  dei  patterns  ARP.   Il  comando viene usato
     assieme  al  comando  Import.   Se un campo del messaggio importato
     soddisfa  almeno  un  pattern questo messaggio verra' copiato anche
     nell'  area  $SPECIAL_AREA Nessun argomento disabilita la funzione.
     Per decidere su quali campi effettuare la ricerca ci si serve degli
     switches SPECIAL_ON_*.

  - Export [<area name> ...]

     Questo  comando  controlla  tutte  le  aree in cerca di messaggi da
     spedire  ed  invia  al proprio Boss quelli trovati.  Nella versione
     registrata, come per l' Import, i messaggi vengono instradati verso
     i nodi di destinazione

     Gli argomenti sono dei patterns ARP.  Specificandone si fa' in modo
     che  solo  i messaggi contenuti nelle aree che soddisfano almeno un
     pattern vengano esportati.

  - Rescue

     Questo  comando  controlla  l'  area  BAD_MSGS  e  se  vi trova dei
     messaggi destinati ad altre aree cerca di spostarveli.

  - HiMark

     Setta  l'  HighWaterMark  di  tutte  le  aree  in  modo  che nessun
     messaggio possa essere esportato.

  - RenumAll

     Esegue  il  renumber  dei  messaggi  contenuti  in  tutte  le  aree
     servendosi  dell'  ordinamento  specificato  tramite  gli  switches
     appositi.

  - Renum <area name> [<area name> ...]

     Gli  argomenti  sono  dei  patterns  ARP.   Esegue  il renumber dei
     messaggi  contenuti  nelle  aree  che  soddisfano  almeno  uno  dei
     patterns.

  - Link <area name> [<area name> ...]

     Gli  argomenti  sono  dei  patterns  ARP.   In  tutte  le  aree che
     soddisfano   almeno   uno   dei   patterns   viene  ristabilita  la
     sequenzialita' delle domande e delle risposte.

  - SetMark <new highwatermark> <area name> [<area name> ...]

     Gli  argomenti  del  tipo  <area  name>  sono dei patterns ARP.  Il
     comando  setta al valore <new highwatermark> l' HighWaterMark delle
     aree che soddisfano almeno uno dei patterns.

  - DeleteDay <how many days back> <area name> [<area name> ...]

     Gli  argomenti  del  tipo  <area  name>  sono dei patterns ARP.  Il
     comando  cancella  tutti  i  messaggi piu' vecchi di <how many days
     back>  giorni  presenti  nelle  aree  che soddisfano almeno uno dei
     patterns.

  - DeleteNum <max number of messages> <area name> [<area name> ...]

     Gli  argomenti  del  tipo  <area  name>  sono dei patterns ARP.  Il
     comando  lascia  al massimo <max number of messages> messaggi nelle
     aree che soddisfano almeno uno dei patterns.

  - DeleteName <area name> <ARP pattern> [<ARP pattern> ...]

     L'  argomento  <area  name> e' un pattern ARP.  Il comando cancella
     dalle aree che soddisfano questo pattern tutti i messaggi che hanno
     almeno un campo che soddisfi uno degli <ARP pattern>.  Per decidere
     su  quali  campi  effettuare  la ricerca ci si serve degli switches
     SPECIAL_ON_*.

  - DisableArea <area name> [<area name> ...]

     Gli  argomenti  del  tipo  <area  name>  sono dei patterns ARP.  Il
     comando disabilita le aree che soddisfano almeno uno dei patterns.

  - EnableArea <area name> [<area name> ...]

     Gli  argomenti  del  tipo  <area  name>  sono dei patterns ARP.  Il
     comando abilita le aree che soddisfano almeno uno dei patterns.

  - AreaInfo <area name> [<area name> ...]

     Gli  argomenti  del  tipo  <area  name>  sono dei patterns ARP.  Il
     comando  stampa  un elenco dei soggetti dei messaggi presenti nelle
     aree che soddisfano almeno uno dei patterns.


3 - per lo scambio di informazioni con ARexx

    La novita' maggiore introdotta in questa versione e' la possibilita'
    di  leggere  e  modificare  dati  interni del programma.  Si possono
    scambiare  dati passando il nome di una variabile entro cui scrivere
    o leggere gli stessi.

    Nota: bisogna passare il nome delle variabili, non il valore.

  - GetVersion <version var name> [<date var name>]

     Questo  comando  serve  a  sapere la versione del programma.  Se si
     fornisce anche un secondo nome di variabile, si ha anche la data di
     creazione.

  - GetAreas <stem name>

     Questo  comando  passa  il nome di un array e riceve nell' array l'
     elenco delle aree messaggi riconosciute da GCChost.

     Esempio: GetAreas 'a'

              a.0 conterra' il numero <x> delle aree.

              a.1 ... a.<x> conterranno i TAG_NAMES delle aree.

  - GetAreasImported <stem name>

     Questo  comando  passa  il nome di un array e riceve nell' array l'
     elenco  delle  aree messaggi in cui GCChost ha immesso dei messaggi
     durante l' ultimo Import.

  - Search <area name> <stem name> <ARP pattern> [<ARP pattern> ...]

     Questo  comando  cerca  nell' area <area name> tutti i messaggi che
     soddisfano  almeno  uno  degli <ARP pattern> e crea un elenco con i
     numeri dei messaggi trovati inserendolo nell' array <stem name>.

     Esempio: Search 'IAMIGA' 'a' '*pippo*'

              a.0 conterra' il numero <x> dei messaggi che soddisfano il
                  pattern *pippo*.
              a.1 ... a.<x> conterranno i numeri dei suddetti messaggi.

     Applicazione:

      L'  unione  di  Import,  GetAreasImported  e  Search permettete di
      ottenere  una  lista delle aree importate con anche l' indicazione
      di  messaggi  indirizzati  a  se  stessi.   Vedere anche lo script
      Rexx/Import.

  - GetIntVar <int var name> <var name>

     Questo  comando  pone  nella  variabile  ARexx <var name> il valore
     della variabile interna <int var name>.

     Esempio: GetIntVar 'SYSOP_NAME' 'Sysop'

             pone nella variabile 'Sysop' il nome del Sysop del sistema.

  - SetIntVar <int var name> <var name>

     Questo  comando  pone  il  valore  della variabile ARexx <var name>
     nella variabile interna <int var name>.

     Esempio: SetIntVar 'SYSOP_NAME' 'Sysop'

            cambia il nome del Sysop con il valore contenuto in 'Sysop'.

  - NewMsg <msg name> <area name>

     Questo  comando crea un nuovo messaggio identificandolo con il nome
     <msg name>.  Esso inizialmente non contiene alcuna linea di testo e
     i campi dell' header sono vuoti.

  - ReadMsg <msg name> <area name> <msg num>

     Legge  nell'  area  <area  name>  il  messaggio  numero  <msg  num>
     identificandolo  con  il  nome  <msg  name>.  Vengono lette solo le
     linee  di  testo, cioe' vengono escluse tutte le linee che iniziano
     con CTRL-A e tutte le linee dopo l' Origin.

  - WriteNewMsg <msg name> [<area name>]

     Considera  il messaggio <msg name> un nuovo messaggio da esportare.
     Specificando  un  <area  name> il messaggio non viene scritto nell'
     area in cui e' stato letto bensi' in quella specificata.

  - WriteMsg <msg name>

     Scrive  il messaggio <msg name> come un normale messaggio.  Se <msg
     name>  era  stato  creato  con  ReadMsg esso sara' riscritto con lo
     stesso  numero  altrimenti  sara' un messaggio nuovo, con un numero
     superiore  all'  HighWaterMark.   Viene  inoltre  resettato il falg
     SENT.

  - FreeMsg <msg name>

     Libera il messaggio identificato dal nome <msg name>.

  - ReadMsgLine <msg name> <line num> <var name>

     Questo comando pone nella variabile ARexx <var name> il testo della
     <line num>-esima linea del messaggio <msg name>.

  - ChangeMsgLine <msg name> <line num> <var name>

     Inserisce  il  contenuto  della  variabile  ARexx  <var  name>  nel
     messaggio <msg name> alla linea <line num>.

  - AddMsgLine <msg name> <line num> <var name>

     Questo   comando  inserisce  la  linea  di  testo  contenuta  nella
     variabile  ARexx  <var  name>  nel  testo  del messaggio <msg name>
     subito dopo la <line num>-esima linea.

     Esempio: AddMsgLines 'test' 0 'testa'

             aggiunge in cima al messaggio la linea contenuta in 'testa'

  - SubMsgLine <msg name> <line num>

     Questo  comando  cancella  dal  testo  del  messaggio <msg name> la
     <line num>-esima linea.

  - ReadMsgLines <msg name> <stem name>

     Questo  comando inserisce nell' array <stem name> tutte le linee di
     testo del messaggio <msg name>.

     Esempio: ReadMsgLines 'test' 'a'

              a.0 conterra' il numero <x> delle linee di testo.
              a.1 ... a.<x> conterranno il testo.

  - WriteMsgLines <msg name> <stem name>

     Questo  comando cancella le linee di testo del messaggio <msg name>
     e  le  sostituisce  con  le  linee  dell' array <stem name>.  Se il
     numero  delle  linee  dell'  array  e'  negativo,  le linee vengono
     aggiunte in fondo al testo.

     Esempio: a.0 = 2
              a.1 = "Questa e' una prova."
              a.2 = "il messaggio e' tutto qui."

              WriteMsgLines 'test' 'a'

  - FormatText <stem name> <max num of columns>

     Questo  comando  prende le linee inserite nell' array <stem name> e
     le   formatta   in  modo  che  nessuna  linea  sia  piu'  lunga  di
     <max num of columns>  caratteri.   Inoltre  gestisce  il quoting in
     modo intelligente.


  - PutFileToMsg <msg name> <file name>

     Prende  le  linee  del  file <file name> e le immette nel messaggio
     <msg name>, cancellando tutte le vecchie linee.

  - AppendFileToMsg <msg name> <file name>

     Prende  le  linee  del  file <file name> e le immette nel messaggio
     <msg name>, aggiungendole in coda alle altre.

  - PutMsgToFile <msg name> <file name>

     Inverte il processo del comando PutFileToMsg, cioe' prende tutte le
     linee del messaggio e le scrive nel file.

  - AppendMsgToFile <msg name> <file name>

     Stessa cosa di PutMsgToFile, solo che il file non viene cancellato,
     ma gli vengono aggiunte in coda le linee nuove.

  - GetMsgHeader <msg name> <stem name>

     Copia nell' array <stem name> l' header del messaggio <msg name>.

     Esempio: GetMsgHeader 'test' 'a'

              a.0  : Mittente del messaggio
              a.1  : Destinatario del messaggio
              a.2  : Soggetto del messaggio
              a.3  : Data di creazione del messaggio
              a.4  : Origin
              a.5  : TearLine
              a.6  : Zone  \
              a.7  : Net    \ Indirizzo del mittente del messaggio
              a.8  : Node   /
              a.9  : Point /
              a.10 : Zone  \
              a.11 : Net    \ Indirizzo del destinatario del messaggio
              a.12 : Node   /
              a.13 : Point /
              a.14 : Private Flag \
              a.15 : Kill Flag     \
              a.16 : Hold Flag      \ 'ON' o 'OFF' a seconda dello stato
              a.17 : Crash Flag     / dei flags ( settati o meno )
              a.18 : FillAtt Flag  /
              a.19 : FillReq Flag /
              a.20 : Data attuale
              a.21 : 'ECHO' o 'MATRIX' per specificare di che tipo di mes-
                     saggio si tratta

  - SetMsgHeader <msg name> <stem name>

     Copia  il  contenuto  dell'  array  <stem  name>  nell'  header del
     messaggio <msg name>.

     Esempio: SetMsgHeader 'test' 'a'

              a.0  : Mittente del messaggio
              a.1  : Destinatario del messaggio
              a.2  : Soggetto del messaggio
              a.3  : Data di creazione del messaggio
              a.4  : Origin
              a.5  : TearLine
              a.6  : Zone  \
              a.7  : Net    \ Indirizzo del mittente del messaggio
              a.8  : Node   /
              a.9  : Point /
              a.10 : Zone  \
              a.11 : Net    \ Indirizzo del destinatario del messaggio
              a.12 : Node   /
              a.13 : Point /
              a.14 : Private Flag \
              a.15 : Kill Flag     \
              a.16 : Hold Flag      \ 'ON' o 'OFF' a seconda dello stato
              a.17 : Crash Flag     / dei flags ( settati o meno )
              a.18 : FileAtt Flag  /
              a.19 : FileReq Flag /

  - GetOwnAddress <var name>

     Registra nella variabile ARexx <var name> il proprio indirizzo.  L'
     indirizzo  e'  quello del -BOSSNET con il numero del Point derivato
     dal numero di nodo del -POINTNET.

  Nota: un  uso  accorto  dei  comandi ReadMsg, ReadMsgLines e GetIntVar
        permette   di  stampare  come  si  preferisce  il  testo  di  un
        messaggio.  Vedere anche lo script Rexx/Print.

  Nota: usando   assieme   i  comandi  ReadMsg,  WriteMsg,  AddMsgLines,
        SetIntVar  e  GetIntVar  si  puo'  eseguire  il  forward  di  un
        messaggio  da  un' area ad un' altra come si preferisce.  Vedere
        anche lo script Rexx/Forward.

  Nota: usando   assieme   i   comandi   ReadMsg,  WriteMsg,  GetIntVar,
        SetIntVar,  WriteMsgLines,  ReadMsgLines e GetOwnAddress si puo'
        eseguire  il  reply  di un messaggio come si preferisce.  Vedere
        anche lo script Rexx/Reply.


4 - per la visione della posta

  - Editor [LACE] [VERTBAR] [NOBAR] [FONT=<font name>] [SIZE=<font size>]
           [AREA=<tag name>] [<script file name> [<arg> ...]]

     Entra in modo EDITOR.
     Se  si  specifica <script file name> vengono eseguiti i comandi che
     si  trovano  in  quel  file  script  non  appena  e'  terminato  il
     caricamento dell' editor.

     LACE             : l' editor viene lanciato in uno screen interlace.

     VERTBAR          : la scroll bar e' sistemata verticalmente, sulla destra.
                        Di default essa e' orizzontale, in basso.

     NOBAR            : non viene rappresentata la scroll bar.

     HIDEKLUDGE       : non vengono mostrate le linee di controllo
                        presenti nel testo dei messaggi.

     FONT=<font name> : usa il font <font name> per editare i testi.
                        Di default usa il font di sistema.

     SIZE=<font size> : usa un font alto <font size> pixels.
                        Di default usa un font alto 8 pixels.

     AREA=<tag name>  : permette di aprire l' editor su un' area diversa
                        dalla prima.

     Nota:

     Tutte le opzioni con '=' e' necessario porle fra apici.

     Es.       Editor 'font=pearl.font'

  - SetColor <color 0> <color 1> <color 2> <color 3>

     Cambia  i  colori dello screen dell' editor.  Ogni colore <color X>
     e'  rappresentato da tre numeri esadecimali ( 0,.,.,.,9,A,.,.,.,F )
     che corrispondono all' intensita' dei colori Rosso, Verde e Blu.

  - GetScreenName <var name>

     Pone  nella  variabile  Arexx  <var  name> il titolo corrente dello
     schermo dell' editor.  Funziona solo da editor.

  - AddExternal <text var name> <command var name> <type>

     Aggiunge o modifica un External Menu.

     <text  var  name>  e' il nome della variabile che contiene il testo
     che deve essere inserito nel menu come item.

     <command  var  name>  e'  il  nome  della variabile che contiene il
     comando  associato  al  menu.   E'  possibile  rendere variabile un
     comando usando i modificatori del testo:

        %% viene sostituito da %.
        %a viene sostituito dal nome dell' area messaggi corrente.
        %p viene sostituito dal path dell' area messaggi corrente.
        %# viene sostituito dal numero del messaggio corrente.
        %q viene  sostituito  dal testo che verra' immesso nel requester
           che  questo  modificatore  apre.   Se si aggiunge la sequenza
           [<titolo>] il requester avra' come titolo <titolo>.

     <type> e' un campo composto da tre caratteri:  due sono obbligatori
     e  uno  opzionale.   Il  carattere  opzionale  sara' la command-key
     sequence,  ossia  quel  carattere che premuto contemporaneamente al
     tasto Amiga permettera' di selezionare da tastiera questo menu.

     Il  primo  dei caratteri obbligatori puo' essere 's' o 'c' dove 's'
     indica  che  il comando e' uno script ARexx e come tale deve essere
     eseguito e 'c' indica che e' un normale comando DOS.

     Il secondo carattere obbligatorio puo' essere 'f', 'b' o 'l'.

     'f' specifica che lo screen dell' editor deve essere mandato dietro
     agli altri screen aperti prima di eseguire il comando.

     'b'  specifica  che  lo  screen  dell' editor deve rimanere dove si
     trova.

     'l' ha la stessa funzione di 'f' ma in piu' fa' ritornare lo screen
     dell' editor davanti agli altri ad esecuzione terminata.

  - DelExternal <text var name>

     Toglie l' external menu che ha come testo il valore contenuto nella
     variabile <text var name>.

  - EditMsgHeader <header name> <title name> <result name> <editor> <arg>

     Apre un requester per editare i dati relativi ad un messaggio.

     <header name> e' il nome di un array dello stesso tipo ritornato da
     GetMsgHeader.

     <title  name> e' il nome della variabile che contiene il titolo del
     requester.

     <result  name> e' il nome della variabile dove il comando inserisce
     il  valore  'SAVE',  ad  indicare  che  l' utente vuole scrivere il
     messaggio,  o  il  valore 'CANCEL', ad indicare che l' utente vuole
     rinunciare.

     <editor>  e'  il  nome  della  variabile che contiene il nome dell'
     editor, completo di path.

     <arg>  e'  il  nome  della  variabile che contiene gli argomenti da
     passare all' editor.

     Quando  si  edita un messaggio Matrix se il nome inserito nel campo
     ToUser  viene  trovato  nel  file  $USER_LIST_NAME  o anche una sua
     porzione,   automaticamente   i  campi  ToUser  e  Address  vengono
     completati.   La  ricerca  viene  effettuata  sia  sul nome che sul
     cognome che sull' eventuale pseudonimo.

     Short-Cuts:

     tasto S : stesso effetto che premere gadget 'SAVE'.
     tasto E : stesso effetto che premere gadget 'EDIT'.
     tasto C : stesso effetto che premere gadget 'CANCEL'.

     tasto shift+P : cambia lo stato del gadget 'Private'.
     tasto shift+K : cambia lo stato del gadget 'Kill'.
     tasto shift+H : cambia lo stato del gadget 'Hold'.
     tasto shift+C : cambia lo stato del gadget 'Crash'.
     tasto shift+A : cambia lo stato del gadget 'File Att.'.
     tasto shift+R : cambia lo stato del gadget 'File Req.'.

     Clickando  sul  gadget  'File  Att.'  si apre un file requester che
     consente di scegliere un file da inviare.

     Clickando  sul  gadget  'File  Req.'  si apre un requester entro il
     quale si puo' scrivere il nome di un file da prelevare.

     Clickando sul gadget 'SAVE' quando uno di questi e' ancora attivato
     si richiede la creazione automatica dei files di controllo.

     Esempio:

              title_name = 'Write A New Message'
              editor_name = 'C:ed'
              editor_args = 'T:GCC.temp -sticky'

              EditMsgHeader 'header' 'title_name' 'ret_code' 'editor_name'
              'editor_args'

              Viene aperto un requester dal titolo 'Write A New Message'
              che si serve dell' editor 'c:ed' per editare il file
              'T:GCC.temp'. Il risultato viene immesso nella variabile
              'ret_code'.


                         - Lista degli errori -

Ora GCChost ritorna codici di errore coerenti con l' errore occorso:

Errore 60:  non c' e' abbastanza memoria.
Errore 61:  errore di Input/Output.
Errore 62:  non e' possibile aprire un file.
Errore 63:  nel file $AREAS non c' e' nemmeno un' area.
Errore 64:  nel leggere una riga di testo ( import ed export di messaggi,
            lettura di files di configurazione, ecc ) si e' incontrata una
            linea piu' lunga di 1000 caratteri.
Errore 65:  e' sbagliata la descrizione di un' area nel file $AREAS.
Errore 66:  e' sbagliato il campo Nodes nel file $AREAS.
Errore 67:  e' sbagliato l' indirizzo del sistema nel file $AREAS.
Errore 68:  non c' e' l' indirizzo del Boss nel file $AREAS.
Errore 69:  non c' e' il nome del Sysop nel file $AREAS.
Errore 70:  non c' e' l' Origin nel file $AREAS.
Errore 71:  non esiste un file.
Errore 72:  un path non e' una directory.
Errore 73:  non e' possibile cancellare un file.
Errore 74:  non e' possibile riscrivere un file.
Errore 75:  non e' possibile chiudere un file.
Errore 76:  si cerca di usare un' area che non esiste.
Errore 77:  gli argomenti passati ad un comando sono sbagliati.
Errore 78:  non e' possibile fare il caching di un' area.
Errore 79:  switch sconosciuto.
Errore 80:  variabile interna sconosciuta.
Errore 81:  non e' possibile settare il valore di una variabile ARexx.
Errore 82:  non e' possibile leggere il valore di una variabile ARexx.
Errore 83:  non e' possibile leggere un file di configurazione.
Errore 84:  non e' possibile fare il caching di un' area perche' non esiste.
Errore 85:  non e' possibile compattare la posta.
Errore 86:  un messaggio di una certa area e' un messaggio corto.
Errore 87:  non e' possibile create il file .FLO
Errore 88:  non e' possibile aggiungere in coda al file .FLO dei dati.
Errore 89:  non e' possibile trovare alcun' area per un certo messaggio.
Errore 90:  non e' possibile scompattare la posta.
Errore 91:  il pacchetto non e' del tipo supportato.
Errore 92:  un messaggio senza origin e' stato trovato in un' area ECHO.
Errore 93:  un messaggio nell' area BAD_MSGS e' un messaggio corto.
Errore 94:  un messaggio di una certa area e' un messaggio corto.
Errore 95:  si cerca di accedere a un messaggio letto con ReadMsg, ma che in
            realta' non risulta identificato dal nome passato.
Errore 96:  non e' possibile settare il valore di una variabile interna.
Errore 97:  non e' possibile leggere il valore di una variabile interna.
Errore 98:  la UserList ha un formato errato.
Errore 99:  non e' possibile aprire due editor insieme.
Errore 100: questo comando funziona solo sotto editor.
Errore 101: non e' possibile eseguire un comando associato agli external menus.
Errore 102: errore di sintassi.
Errore 103: errore nel formato di un indirizzo.
Errore 104: keyword sconosciuta.

---------------------------------------------------------------------------

Considerazioni finali:

Si  dice  che  un  solo  esempio valga piu' di mille parole.  Quindi per
poter  capire  a  fondo  il  funzionamento  di questo programma e' utile
consultare  i  files  script contenuti nella directory Rexx.  Se hai dei
dubbi  riguardo al funzionamento di questo programma o se vuoi segnalare
dei bugs scrivi un messaggio all' autore al seguente indirizzo:

Davide Massarenti 2:332/505.3

Se  scrivi uno o piu' script files di notevole interesse per GCChost sei
pregato  di  inviarli; verranno inclusi nell' archivio originale con una
nota di ringraziamento.

                                       Saluti *8) Davide *8)

---------------------------------------------------------------------------

Nota del redattore:

Scrivere questo programma e' stato un bell' impegno anche per un talento
come  il  Doc  (  questo e' il soprannome di Davide, da me coniato ).  E
scrivere  questo  manuale decifrando le note del Doc e' stato un impegno
ancora piu' arduo.  Inviatemi le vostre lamentele al seguente indirizzo:

Andrea Salati 2:332/505.6

---------------------------------------------------------------------------
