                        A la découverte de l'AmigaDos.
                        \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/


        Comprendre (et maîtriser) son environnment vous permettra de gagner
 beaucoup de temps et d'éprouver la sensation d'utiliser pleinement votre 
 AMIGA. Je vous livre ce mois-ci quelques "petits trucs" pour vous permettre 
 d'atteindre cet objectif ...

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

 1.Les redirections (suite) ">>" , PIPE: , CMD
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       
        Souvenez vous le mois dernier nous abordions les redirections I/O
 (d'entrées et de sorties). En tapant la commande :
        
        1>type sys:c/type opt h >ram:ESSAI

        le contenu hexadécimal de la propre commande "type" est envoyé
 dans le fichier ESSAI par redirection de la sortie. Pour obtenir le contenu
 de hexadécimal du fichier "type" et du fichier "dir" par exemple vous devez
 utiliser deux lignes :

        1>type sys:c/type opt h >ram:ESSAI1

        1>type sys:c/dir opt h  >ram:ESSAI2

  pour "joindre" (concaténation) les deux fichiers on peut utiliser la
  commande "join" :
        
        1>join ram:ESSAI1 ram:ESSAI2 as ram:ESSAI

        Mais il existe à notre grand bonheur une autre possibilité !
 (peut connue encore une fois...) Il s'agit d'utiliser le signe cabalistique
 ">>" qui permet d'utiliser la redirection vers un fichier qui existe
 déjà et qui sera ouvert en "APPEND". Ce terme signifie simplement que
 le contenu du 1er fichier ne sera pas perdu et que le contenu du deuxième
 fichier viendra "s'ajoutter" au 1er. (concaténation = "join") Voici le
 résultat équivalent à la dernière manipulation :

        1>type sys:c/type opt h  >ram:ESSAI

        1>type sys:c/dir opt h  >>ram:ESSAI  

 Génial non ? ...

        Il existe d'autres formes de redirections. La première est le
 "device" PIPE: qui est "mountée" automatiquement à partir du system2.0.
 Sinon vous devez taper :
        
        1>mount pipe:
        
        On peut bricoler pas mal de choses avec "pipe:" par exemple ouvrez
 un nouveau shell puis tapez dans la première fenêtre shell :

        1>copy PIPE to *:

        et dans la deuxième:
        
        2>list sys: quick to PIPE:

        Résultat des courses ? La liste de vos fichiers sera affichée ,non
 pas dans la deuxième fenêtre mais bien dans la première !

        Toujours plus fort : la redirection des ports "parallel" ou "serial".
        
        1>CMD parallel ram:Impressions.CMD
        
        Cette commande CMD permet de redirectionner toutes les sorties 
 qui initialement sont dirigées vers le port "parallel" vers le fichier
 "Impressions.CMD".
        
        En tapant :

        1>CMD serial ram:Communications.CMD

        vous aurez le loisir de tester un programme de communications qui
 enverra ses messages initialement prévus pour le port série vers le fichier
 "Communications.CMD".

       Pour clore le chapitre des I/O je signale qu'il est parfois intéressant
 d'employer la commande suivante pour lancer des programmes comme tâche
 de fond :

        1>run >NIL: <NIL: Nom_Du_Programme 
        
                   ------------------------------------

 2. Comment simuler une itérative à l'aide du SHELL ?
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Note : system 2.0 obligatoire ! 
 ------
        Une itérative est une construction logique qui permet de répéter un 
 certain nombre de fois un même corps d'instructions.

        Exemple :  
        ---------
                        I = 1

                        Répéter 
                        {
                                I = I + 1

                                écrire I
                        }
                        jusqu'à ce que I >= 10

        Le corps à répéter est marqué par { et }. La question qui nous 
 intéresse est de pouvoir concevoir une itérative de ce genre à l'aide
 des commandes CLI/SHELL.
        
 ;** SIMULATION D'UNE ITERATIVE A L'AIDE DU SHELL...

 ;** INITIALISATION DE LA VARIABLE D'ENVIRONNEMENT
 ECHO >ENV:LOOP 1

 LAB REPETER

   TYPE ENV:LOOP TO *
   EVAL <ENV:LOOP >NIL: to T:TMP value2=1 op=+ ?
   TYPE >ENV:LOOP T:TMP

 IF VAL $LOOP NOT GT 10
   SKIP REPETER BACK
 ENDIF

 ;** ON EFFACE LE FICHIER TEMPORAIRE
 DELETE >NIL: T:TMP

 Résumons : Puisque les redirections d'I/O n'a plus de secret pour vous ,
 il est aisé de comprendre la première ligne :

        ECHO >ENV:LOOP 1

 On place simplement le chiffre 1 comme contenu du fichier ENV:LOOP
 Il faut comprendre à ce stade que ce fichier est en fait une VARIABLE
 D'ENVIRONNMENT. Cela signifie qu'une variable du nom de $LOOP peut être
 référencée pour diverses opérations. EN fait il s'agira d'exploiter le
 contenu du fichier ENV:LOOP.

 LAB REPETER

 Il s'agit d'une étiquette de référence. C'est à dire que la commande SKIP 
 permet de "sauter" au label indiqué (recherche en avant / en arrière)
 Il s'agira de simuler un "GOTO" c'est à dire de permetre l'itération.

 Nous allons voir que la ligne suivante peut-être remplacée avantageusement.
 
   TYPE ENV:LOOP
 
 On imprime le contenu du fichier ENV:LOOP à l'écran.
 
   EVAL <ENV:LOOP >NIL: to T:TMP value2=1 op=+ ?

  Le permier paramètre de EVAL est recherché dans le fichier <ENV:LOOP
  , aucun message n'est affiché à l'écran >NIL: 

 le TO indique que le résultat du "calcul" (évaluation) sera directionner
 vers le fichier T:TMP (fichier temporaire) op=+ ? signifiant qu'il s'agit
 d'une opération d'addition. value2=1 est l'incrément.

 Au premier passage ENV:LOOP est chargé dans value1 puis eval lui ajoute 1
 et le résultat part dans T:TMP

   TYPE >ENV:LOOP T:TMP 

 Place le résultat qui figure dans T:TMP dans le fichier ENV:LOOP

 IF VAL $LOOP NOT GT 10
   SKIP REPETER BACK
 ENDIF
      
 Tant que la variable $LOOP (contenu du fichier ENV:LOOP) ne dépassera
 PAS (NOT) la valeur 10 alors nous nous branchons à l'étiquette REPETER
 définie plus haut. (BACK)

 Voici une version simplifiée qui vous permetra de comprendre le mécanisme de
 double emploi de ENV:LOOP et $LOOP par exemple :

 ;** SIMULATION D'UNE ITERATIVE A L'AIDE DU SHELL...

 ;** INITIALISATION DES VARIABLES D'ENVIRONNEMENT
 ECHO >ENV:LOOP 1
 ECHO >ENV:TMP  0
 LAB REPETER

  ECHO LOOP # $LOOP
  EVAL <ENV:LOOP >NIL: to ENV:TMP value2=1 op=+ ?
  ECHO >ENV:LOOP $TMP

 IF VAL $LOOP NOT GT 10
   SKIP REPETER BACK
 ENDIF

 Deux remarques:
 --------------- 
 1) pour exécuter directement ce petit script qui porte le nom (par exemple) 
 de RAM:LOOP vous pouvez utiliser la possibilité de fixer le "flag" S
 qui indique un fichier script :

        1>protect RAM:LOOP flags srwed

 Ainsi vous n'êtes plus forcé de taper :


        1>execute ram:LOOP

 mais vous pouvez encoder directement :

        1>ram:LOOP

 2) La commande SKIP cherche par défaut à partir de la ligne courante du
 fichier script en cours d'exécution. Pour FORCER une recherche qui débutera
 à partir du début du fichier script vous devez taper :

 SKIP Nom_Du_Label BACK

 Le fichier ram:LOOP -s--rwed utilise cette technique.

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

 A Suivre ...

                      ©~~~~~~~~~~~~~~~~~~~~~~~~~~~~©
                      |                            |
                      |        S.M. (P.A.I.)       |
                      |      7 rue des Archers     |
                      |         B-7000 MONS        | 
                      |          BELGIQUE          | 
                      |                            |
                      ©~~~~~~~~~~~~~~~~~~~~~~~~~~~~©
