Trucs et astuces AS400

Les quelques astuces qui suivent sont très faciles à mettre en oeuvre et peuvent vous faire gagner pas mal de temps, mais surtout évitent de se lancer dans des développements plutôt pénibles. Au menu

et des exemples un peu plus consistants

Corriger rapidement les erreurs de compilation

Je croyais la démarche de correction des erreurs de compilation connue de tous, mais je me suis rendu compte que certains développeurs même confirmés l'ignoraient. Juste un petit rappel donc, valable en RPG mais qui fonctionne à l'identique pour les autres types de source La séquence de correction ne prend que quelques minutes et améliore considérablement les choses. Pour les structures imbriquées, il est commode de disposer d'un outil qui les annote en marge. En procédant ainsi, il n'est pratiquement jamais nécessaire de consulter un état de compilation brut et encore moins de l'imprimer.

Créer, voir, sauvegarder et restaurer un spoule

Le programme exemple qui suit met en oeuvre la plupart des astuces qui facilitent la vie en conception d'un état imprimé.
     H            D
     F*===================================================================
     F* PRTIP : Trucs et astuces d'impression
     F*
     F*                      Patrick LARREYA  1990-2000
     F*===================================================================
     FQSYSPRT O   F      80     OA     PRINTER                        UC
     F                                              KINFDS INFOPR
     E                    CMD     1   7 80               Commandes
     I* Infos impression : ligne courante.
     IINFOPR      DS
     I                                    B 367 3680NBLIN
     C* Positionnement info impression
     C                     CALL 'QCMDEXC'
     C                     PARM CMD,1     CMDX   80
     C                     PARM 80        CMDLEN 155
     C*-----------------------------------------------------------------
     C                     OPEN QSYSPRT
     C*
 1<--C                     EXCPTH1                                     on
     C* Un état de test
     C                     DO   100                        Pas boucler
     C* L'impression dépend de la ligne en cours
     C                     Z-ADDNBLIN     D1LIN   40
     C                     SELEC
     C           D1LIN     WHLE 10
     C                     EXCPTD1
     C           D1LIN     WHLE 20
     C                     EXCPTD2
     C           D1LIN     WHLE 25
     C                     EXCPTD1
     C                     OTHER
     C                     EXCPTT9
     C                     LEAVE
     C                     ENDSL
     C*
     C                     ENDDO
     C*
     C                     CLOSEQSYSPRT
     C* Affichage du résultat
     C* Création du fichier de sauvegarde
     C* Copie vers fichier de sauvegarde
     C* Préparation de l'impression
     C* Reconstitution du spoule
     C* Affichage du nouveau spoule
     C           2         DO   7         I       50
     C                     CALL 'QCMDEXC'
     C                     PARM CMD,I     CMDX   80
     C                     PARM 80        CMDLEN 155
     C                     ENDDO
     C*
     C                     SETON                     LR
     C*====================================================================
     OQSYSPRT E   03           H1
     O                                   50 'Test d''impression'
     O        E 1              D1
     O                                   20 '>>>>>>>>>>>>>>>>>>>>'
     O                                   40 'après ligne'
     O                         D1LIN     45
     O                                   80 '>------------------>'
     O        E 3              D2
     O                                   40 '...... après ligne'
     O                         D1LIN     45
     O        E 2              T9
     O                                   20 '  *** Terminé ***'
** CMD Commandes
OVRPRTF QSYSPRT splfname(test) USRDTA('un Test') pagesize(66 80)
DSPSPLF  test * *LAST
CRTPF QTEMP/CPYSPL RCDLEN(81)
CPYSPLF TEST QTEMP/CPYSPL SPLNBR(*LAST) ctlchar(*FCFC)
OVRPRTF QSYSPRT splfname(testB) ctlchar('*FCFC') pagesize(66 80)
cpyf  qtemp/cpyspl qsysprt
DSPSPLF  testB * *LAST

Le source est assez simple pour ne pas demander beaucoup de commentaires. Pour une vraie application :

Si vous avez comme moi bâti des applications sans connaître CTLCHAR(*FCFC) et surtout CPYF vers QSYSPRT, certains programmes seront peut être à réécrire, ou pourront être complétés.

Afficher sur un écran non connecté (mais allumé)

Cette possibilité fait gadget, sauf quand on en a besoin.
Tout d'abord le code

Source écran TSTINFFM
     A                                      DSPSIZ(24 80 *DS3)        
     A          R F1                                                  
     A                                      INVITE                    
     A                                  1  4'TSTINF'                  
     A                                      COLOR(BLU)                
     A                                  1 20'Message instantanné pour'
     A                                      DSPATR(HI)                
     A            DEV           10   O  1 45DSPATR(HI)                
     A            MSG           30   O  8 16DSPATR(RI)                

Programme CL TSTINF
             PGM        (&dev &msg)             
             DCLF       FILE(TSTINFFM)          
             OVRDSPF    FILE(TSTINFFM) DEV(&dev)
             SNDF       RCDFMT(F1)              
             DLYJOB     5                       
             chgvar   &msg '  ça va couper. . .'  
             SNDF       RCDFMT(F1)              
             DLYJOB     3                       
             ENDPGM                             

Pour tester : CALL TSTINF ('DSP02' 'Coucou !')

Transferts FTP

FTP est une méthode très simple pour transférer des fichiers, et particulièrement des fichiers textes, d'une machine à une autre.

L'AS400 propose deux modes de transfert

Le passage en mode "standard" est automatique si la première demande de transfert utilise le système de fichiers intégré, mais un message d'erreur apparaît systématiquement si le mode courant n'est pas compatible avec votre syntaxe. Le plus simple pour tester est de passer les commandes depuis la console Windows. On travaille sur le répertoire tmp de l'AS400 situé sous Root, et le répertoire Temp du poste local.
Le dialogue qui suit suppose que vous avez quelques notions de FTP.

Exemple de dialogue sous Windows NT
Microsoft(R) Windows NT(TM)

C:\>cd \temp

C:\TEMP>ftp monAS
Connected to monAS.
220-QTCP at ASXXX.
220 Connection will close if idle more than 50 minutes.
User (monAS:(none)): user
331 Enter password.
Password:
230 USER logged on.
ftp> quote site namefmt 1
250  Now using naming format "1".
ftp> put Test.html /tmp/test1.html
200 PORT subcommand request successful.
150 Sending file to /tmp/test1.html
250 File transfer completed successfully.
218 octets envoyés dans 0.00 seconds (218000.00 Kbytes/sec)
ftp> cd tmp
501 Unknown extension in database file name.
ftp> cd /tmp
250 "/tmp" is current directory.
ftp> dir
200 PORT subcommand request successful.
125 List started.
USER           218 05/09/00 13:40:29 *STMF      test1.html
250 List completed.
ftp> get test1.html
200 PORT subcommand request successful.
150 Retrieving file /tmp/test1.html
250 File transfer completed successfully.
218 octets reçus dans 0.03 seconds (7.27 Kbytes/sec)
ftp> quit
221 QUIT subcommand received.

C:\TEMP>exit
Ce qui précède est un dialogue typique.

Petite calculette REXX

C'est sûrement une curiosité, mais l'AS400 gère REXX, langage interprété.
Si vous n'avez pas de calculette sous la main, vous pouvez en créer une en quelques instants dans un source REXX qui est exécutable directement par l'option 16.

CALC : Source REXX de la calculette

say 'Calculette REXX. Entrer une expression arithmétique à évaluer.'
signal on syntax   name err ;                                       
do forever                                                          
    pull  x                                                         
    if x = ' '  then  exit                                          
    interpret say  x                                                
end                                                                 
err:  say 'syntax  - Problème de syntaxe. Corriger.' ;              
exit

Commande de lancement CAL et aide CALH

Quelques instants supplémentaires son nécessaires pour créer une commande de lancement et éventuellement une aide.

Source CLP :
             CMD        PROMPT('Calculette REXX')

 /* Compiler avec PGM(*REXX) REXSRCFILE(Bib/Source) REXSRCMBR(CALC)  +
             HLPPNLGRP(*LIBL/CALH) HLPID(*CMD)  */ 

Source PNLGRP :
:PNLGRP.                                                                

:HELP NAME='CAL'.
:p.La commande :pk.CAL:epk. active une calculette :pk.REXX:epk.
:pc.REXX est un langage interprété disponible en standard sur l'AS400.
Pour obtenir de l'aide sur REXX, consulter l'aide générale par index
depuis n'importe quel menu système.
:p.Toute expression mathématique peut être utilisée, et toute expression
saisie ou calculée peut être rappelée. Les erreurs de syntaxe sont mal gérées.
En cas d'erreur, rappeler la calculette. Les données saisie sont conservées
:p.Compte tenu du mode de fonctionnement de REXX, le premier appel
de la calculette est plus lent que les suivants.
:EHELP.

:EPNLGRP.

Etonnant, non ?

Patrick Larreya, Septembre 2000.