PRESENTATION DE L'EMULATEUR VM POUR REXX - V2.21




EVMPR tourne en production 24H/24 7J/7 depuis janvier 2000 chez un de nos clients. Ce qui a permis au client de se débarasser de son VM/CMS.
Les traitements sont plus rapides sous EVMPR (sur pentium II 400Mhz - Windows NT4) que sous VM/CMS (un "VM sous VM" en Facily Management ...) :
Ils durent 3 heures alors qu'ils duraient plus de 10 heures sous VM !
Le client fait une économie de 61 K€/mois (coût mensuel de son VM)
SOMMAIRE
- GENERALITES SUR EVMPR
- MATERIEL RECOMMANDE
- LOGICIELS PRE-REQUIS
- COMMANDES VM/CMS TRAITEES PAR EVMPR
Commande GLOBALV Commande EXEC Généralités Commande ERASE Commande RENAME Commande COPY Commande STATE Commande LISTFILE Commande EXECIO Pipes et stages de pipe (filtres)
Généralités Commande ADDSTREAM Commande ADDPIPE Commande ENDPIPE Commande SELECT Commande OUTPUT Commande READTO Stage DROP Stage TAKE Stage CHANGE Stage LITERAL Stage FANIN - TRAITEMENT DES FICHIERS BINAIRES DANS LES PIPES
- INTEGRATION DES PROCEDURES VM/CMS DANS EVMPR
Intégration du moteur dans les procédures
Retouches générales des programmes REXX
Retouches concernant le système de fichiers
Retouches concernant les pipes
Retouches concernant les appels au systèmes
Encapsulation dans un script - INCIDENTS
1 - Généralités sur EVMPR
EVMPR est un moteur ou "Runtime" destiné à faire fonctionner des procédures REXX VM/CMS sur plateformes Windows-NT ou UNIX
Il est constitué :
- d'un 'environnement de commande' matérialisé par une librairie partagée,
- d'un jeu de commandes simulant certaines fonctionnalités de VM/CMS, matérialisées par des programmes ou des scripts.
- Pour la plate-forme NT, des programmes gzip et gunzip, (portés et distribués par HHNS sous licence GPL et Zlib)
2 - Matériels Recommandés
Pour Plateformes Windows/NT et LINUX
- CPU Pentium III > 400 Mhz
- Disques de capacité adaptée à la volumétrie des fichiers
Pour Plateformes AIX
- CPU 53P et au delà.
- Disques de capacité adaptée à la volumétrie des fichiers
3 - Logiciels Pré-requis
Sur Plate-forme Windows/NT :
- Windows/NT4 Server US, Service Pack 4 ou 5
- Ressource Kit NT4
- Object Rexx IBM for Windows V1.03
- Services FTP et RSH pour l'automatisation des travaux
Sur Plate-forme AIX
- AIX V4.3
- Object Rexx IBM for AIX V6
Sur Plate-forme LINUX
- LINUX 6.x
- Run time libc5
- Object Rexx IBM for LINUX
4 - Commandes VM/CMS traitées par EVMPR
- syntaxe :
"GLOBALV SELECT env SETP variable value" "GLOBALV SELECT env GET variable" - limitations : dans cette version, l'environnement n'est ni sauvegardé, ni traité.
Il est simplement simulé pour la durée de la procédure. - exemple :
"GLOBALV SELECT MYAPPL SETP RETRC" retrc "GLOBALV SELECT MYAPPL GET RETRC"
- syntaxe : "EXEC commande arguments"
- implémentation :
Recherche pour chaque élément de la variable système 'PATH' de : - commande.EXEC - commande.REXX - puis par défaut, transmission de la commande au système - limitations : celles du système d'exploitation.
Entrées/Sorties
Le système de fichier VM/CMS est simulé au mieux :
la notation 'fn ft fm' est acceptée telle quelle dans les commandes directement implémentées, le 'path' traditionnel Windows/Unix tenant lieu de 'filemode' (par defaut : ./ ou .\).
exemples : 'nom extens /path/data'(VM) = '/path/data/nom.extens' (Unix)
'nom extens' (VM) = './nom.extens' (Unix)
Les limitations sont celles du celles du système d'exploitation (métasymboles % ou $, &, ...)
La désignation générique ('*') est acceptée, sauf pour le filemode.
- syntaxe : "ERASE fn ft fm"
- limitations : celles du système d'exploitation.
- exemples :
"ERASE AB* *CD* /path/data " (Unix)
"ERASE AB* *CD* U:\path\data" (Windows)
- syntaxe : "RENAME fn1 ft1 fm fn2 ft2 fm"
- abbrev. : "REN"
- limitations : celles du systŠme d'exploitation.
- exemples :
"REN ABC DEF /path/data UVW = =" (Unix)
"REN ABC DEF /path/data = -DEF =" (Unix)
"REN ABC DEF U:\path\data XYZ = =" (Windows)
"REN ABC DEF U:\path\data = DEF2 =" (Windows)
- syntaxe : "COPY fn1 ft1 fm1 fn2 ft2 fm2"
- limitations : celles du systŠme d'exploitation.
- exemples :
"COPY ABC DEF /path/data UVW = =" (Unix)
"COPY ABC DEF /path/data = = /tmp" (Unix)
"COPY ABC DEF U:\path\data XYZ = = " (Windows)
"COPY ABC DEF U:\path\data = = V:\tmp" (Windows)
- syntaxe : "STATE fn ft fm"
- limitations : pas de caractères génériques dans le filemode
- exemples :
"STATE ABC DEF /path/data" (Unix)
"STATE *ABC* * /path/data" (Unix)
"STATE ABC DEF U:\path\data" (Windows)
"STATE *ABC* * U:\path\data" (Windows)
if rc = 28 then ... /* n'existe pas */
- syntaxe : "LISTFILE fn ft fm [( ALL/DATE/LABEL STACK/LIFO ]"
- abbrev. : "LISTF"
- limitations : celles du système d'exploitation.
- exemples :
"LISTF ABC DEF /path/data ( ALL STACK" (Unix)
"LISTF ABC DEF U:\path\data (DATE LIFO" (Windows)
- syntaxe pour fonction DISKR :
"EXECIO n|* DISKR fn ft fm" "EXECIO n|* DISKR fn ft fm [( LIFO ]" "EXECIO n|* DISKR fn ft fm ( STEM stname]" "EXECIO 1 DISKR fn ft fm ( VAR varname]" - syntaxe pour fonction DISKW :
"EXECIO n|* DISKW fn ft fm" "EXECIO n|* DISKW fn ft fm ( STEM stname]" "EXECIO 1 DISKW fn ft fm ( VAR varname]" "EXECIO 1 DISKW fn ft fm ( CONST xxxxxx" - syntaxe pour fonction CP :
"EXECIO n|* CP ( [STACK | LIFO | FIFO ] CONST xxxxxx ..." - limitations :
Pour cette version, les fichiers sont des textes ascii, le binaire n'est pas traité La simulation des commandes CP se fait par transmission de la commande telle quelle au système, puis par insertion du résultat (standard output) dans la stack. - exemples :
EXECIO 5 DISKR fn1 ft1 fm1 ( STEM S1." EXECIO 1 DISKR fn1 ft1 fm1 ( VAR VVV" EXECIO * DISKR fn1 ft1 fm1 EXECIO * DISKW fn2 ft2 fm2 EXECIO * DISKW fn2 ft2 fm2 ( STEM S1. EXECIO 1 DISKW fn2 ft2 fm2 ( VAR vvv EXECIO 1 DISKW fn3 ft3 fm3 ( CONST ceci est un literal EXECIO * CP ( CONST dir /o EXECIO * CP ( LIFO CONST grep aaa /tmp/ffff.eeeee EXECIO * CP ( CONST df -v
Pipes et stages de pipe (filtres)
Le 'PIPE' VM/CMS est implémenté dans EVMPR par l'équivalent sur les systèmes Unix et Windows :
chaque stage du pipe est un filtre qui lit ses données sur l'entrée standard (stdin), et les écrit sur la sortie standard (stdout).
D'où la possibilité de remplacer un stage VM/CMS manquant par son équivalent sous Unix ou Windows, en général présent dans le système, ou facilement réalisable.
Lorsque ces stages sont des procédure REXX, on les invoque par :
"rexx stage.REXX [arguments ...".
Commande PIPE
- syntaxe:
"PIPE < fn1 ft1 fm1 | stage1 | stage2 ... | > fn2 ft2 fm2" "PIPE | STEM XXX. | ...." "PIPE | VAR VVV | ...." "PIPE < fn1 ft1 fm1 | stage1 | stage2 ... | STEM XXX." "PIPE < fn1 ft1 fm1 | stage1 | stage2 ... | VAR VVV"
- limitations : les syntaxes ci-dessus sont les seules accept‚es.
- voir la liste des stages fournis avec EVMPR ci-aprés.
- exemples :
"PIPE < ABCDE DATA | take 1 | VAR abcde_data"
"PIPE <" fn ft fm "| drop 1 | STEM abc."
"PIPE < ABC DATA | rexx prog1.rex ( opt1 | > ABC LOGFILE"
- syntaxe : "ADDSTREAM OUTPUT alias"
- limitations : le sens INPUT n'est pas impl‚ment‚ dans cette version.
- exemple : voir la commande SELECT ci-dessous.
- syntaxe : "ADDPIPE *.OUTPUT.alias: | > fn ft fm"
- limitations :
le sens INPUT n'est pas implémenté dans cette version.
Le fichier ('fn ft fm') est associé à l'alias et ouvert en sortie.
- exemple : voir la commande SELECT ci-dessous.
- syntaxe : "ENDPIPE alias"
- limitations : fermeture immédiate et définitive du fichier associé à l'alias.
- syntaxe : "SELECT OUTPUT alias"
- limitations : le sens INPUT n'est pas implémenté dans cette version.
- Le fichier associé à 'alias' devient le fichier courant en sortie pour la commande OUTPUT.
- exemple :
"ADDSTREAM OUTPUT sortie"
"ADDPIPE *.OUTPUT.sortie : | > F123456 RESULT ."
"SELECT OUTPUT sortie"
"OUTPUT 1ere ligne du fichier F123456.RESULT"
...
"ENDPIPE sortie"
Commande OUTPUT
- syntaxe : "OUTPUT" expression
- limitations :
Par défaut (pas de 'SELECT' préalable), l'écriture se fait sur la sortie standard;
Un 'newline' est ajouté à l'expression à écrire.
Possibilité de binaire (voir la commande 'SET MODE' ci-après)
- exemple : voir la commande SELECT ci-dessus.
- syntaxe : "READTO variable"
- limitations :
Dans cette version, la lecture se fait toujours sur l'entrée standard, par ligne de texte;
Possibilité de binaire (voir la commande 'SET MODE' ci-après)
- exemple :
do forever
"READTO ligne"
if rc <> 0 then leave /* fin de fichier sur stdin */
...
end
- syntaxe : "PIPE < ... | DROP n | ..."
- limitations : ce stage n'a de sens que piur les entrees standard en mode texte.
- exemple : voir 'Exemple complet de Pipe" ci-apr‚s
- syntaxe : "PIPE < ... | TAKE n | ..."
- limitations : ce stage n'a de sens que pour les entrées standard en mode texte.
- exemple : voir 'Exemple complet de Pipe" ci-après
- syntaxe 1 : "PIPE < ... | CHANGE -x hh-hh | ..."
- limitations : La notation hh-hh indique 2 caractères en hexadécimal
- syntaxe 2 : "PIPE < ... | CHANGE [(col1-col2) /scr1/tgt1/ [/src2/tgt2/ ...]"
- limitations : La notation /src/tgt/ n'accepte que des chaines ASCII
- exemples :
"PIPE <" filein "| change -x 00-20 | >" fileout /* Zero Bin. en espaces */ "PIPE <" filein "| change /ALBERT/ANATOLE/ | >" fileout "PIPE <" filein "| change (28-30) /A1/B4/ /A2/B5/ | >" fileout
- syntaxe :
'PIPE < ... | LITERAL "'expression'" | ...' 'PIPE | LITERAL -n "'expression'" | ...' - limitations :
Le flag -n indique qu'il n'y a rien en entrée de pipe RESPECTER SCRUPULEUSEMENT LES APOSTROPHES ET LES GUILLEMETS - exemples :
'PIPE <' filein '| literal "constante en tête de résultat" | >' fileout 'PIPE | literal -n " constante en tête de résultat " | >' fileout 'PIPE | literal -n "'right('Etat n.' n, 72)'" | >' fileout
- Ce stage simule 'au mieux' la fusion des pipes multiples de VM/CMS Il fusionne un ou plusieurs fichiers avec l'entrée standard
- syntaxe :
'PIPE < ... | FANIN fn1 ft1 fm1 fn2 ft2 fm2 ... | ...' 'PIPE < ... | FANIN -r fn1 ft1 fm1 fn2 ft2 fm2 ... | ...' - limitations : Le flag -r indique que le ou les fichiers passés en paramètres sont écrits AVANT le flot en entrée standard.
- exemples :
'PIPE <' filein '| fanin' wfile '| >' fileout /* filein, puis wfile */ 'PIPE <' filein '| fanin -r wfile '| >' fileout /* wfile, puis filein */
Commandes reconnues et ignorées :
- SET (sauf SET SYSIN/SYSOUT)
- MAKEBUF
- DESBUF
- DROPBUF
5 - Traitement des fichiers Binaires dans les Pipes
Il est possible de traiter les entrées/sorties d'un stage sous forme de fichiers binaires (pas de newline).
Pour cela, on les considère comme des données de type 'VARIABLE NON BLOQUE' (RECFM V), au format IBM Standard.
Les commandes 'SET SYSIN' et 'SET SYSOUT', pseudo-commandes VM/CMS traitées par EVMPR, permettent de traiter ce type de données.
Commandes SET SYSIN et SET SYSOUT
- syntaxe : 'SET SYSIN/SYSOUT RECFM=ff' [LRECL=nnn si F ou FB]
- limitations : Les RECFM suivants sont reconnus dans cette version :
- RECFM=V pour le variable non bloqué "EBCDIC"
- RECFM=VB pour le variable bloqué "EBCDIC"
- RECFM=F pour le fixe non bloqué "EBCDIC"
- RECFM=FB pour le fixe bloqué "EBCDIC" (= F)
- RECFM=T pour les fichiers "ASCII" (valeur par défaut)"
- exemple :
"SET SYSIN RECFM=V"
do forever
"READTO Z" /* lecture en variable non bloqué, sans newline */
if rc <> = 0 then leave
"OUTPUT Z" /* ecriture en mode texte, avec newline */
end
6 - Intégration des procedures VM/CMS dans EVMPR
Intégration du moteur dans les procédures
On intègre le moteur dans chaque procédure EXEC ou REXX par les 2 commandes suivantes, en tête de procédure :*
"rxsubcom register CMS orxcms orxcms"
address CMS
Retouches générales des programmes REXX
1) changer l'opérateur "^=" par "<>" ('non égal')
2) changer les 'say ...' des stages REXX par "EXEC NENU ..." (sinon, ils se mélangent au flot de sortie).
3) éliminer les 'trace ?i' dans les stages REXX (sinon , ils se mélangent au flot de sortie).
Retouches concernant le système de fichiers
4) éliminer ou changer le symbole '$' dans les noms de fichiers (Unix)
5) éliminer ou changer le symbole '%' dans les noms de fichiers (Windows)
6) Changer la valeur des 'FileMode' par un chemin valide dans les noms de fichiers VM/CMS
Retouches concernant les pipes
7) revoir les stages des pipes, les remplacer par un équivalent selon la plate-forme.
8) revoir les pipes multiples (x:fanin), les diviser en 2 pipes distincts, l'un produisant un workfile, l'autre intégrant le workfile par 'fanin'.
9) ne pas oublier de remplacer les stages REXX par 'rexx nom_du_stage.REXX'
Retouches concernant les appels au systèmes
10) préfixer les commandes au système par ADDRESS CMD (Windows) ou ADDRESS bash (LINUX) ou ADDRESS ksh (AIX)
11) Veiller à 'escaper' les caractères magique et métasymboles dans ces commandes (UNIX)
12) Les scripts (.cmd ou .sh) permettent de lancer facilement la procédure principale (en général un .EXEC) d'une application.
Ils construisent quelques variables d'environnement ( fn ft fm ) et invoquent la procédure principale par 'rexx Nom_Procedure.EXEC arguments'
7 - Incidents Fréquents
1) Syntaxe : l'opérateur '^=' … remplacer par <>
2) fichiers non traités : filename/filetype > 8 car., filemode = 'A' ou 'B' ...
4) Syntaxe au niveau des commande système :
- vérifier les transformations 'fn ft fm' -> 'fm/fn.ft'
- 'escaper' les métasymboles UNIX par un \ : $,[],*,?,() ...
Pour plus d'information, contactez-nous.