Bonsoir,
Mais pourquoi avoir mis ZCMD dans la liste des ZVARS ?
Bonsoir,
Mais pourquoi avoir mis ZCMD dans la liste des ZVARS ?
Bonne question...
Je suis parti de l'ancien panel fait par la personne précédente...
Mais je vais probablement essayer ce que vous me conseiller au plus vite (ça risque de prendre un certain temps du coup ).
Donc je devrais essayer de déclarer ça :
Et en INIT :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 )BODY WINDOW(79,24) CMD(ZCMD) % + ColorApp (Test Fabrice) %Commande ===>+Z +Melange de couleurs : Couleur Actuelle : +*----------* %1 +Ajouter une couleur *----------------* +| &user++++| %2 +Retirer totalement une couleur | 0x&my-color | +| &system++| %3 +Modifier une couleur | &color-name | +| &time++++| %4 +Soustraire une couleur *----------------* +*----------* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - £SAREA9 £
J'espère que ça m'aidera...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 &ZCMD = ' ' .ZVARS = '(MYRED,MYGREEN,MYBLUE)'
N'y a-t-il aucun moyen de connaitre la taille de ZVARS ? (un len(ZVARS)... soyons fou et imaginatif ! )
--
Metalman !
Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
(ANSI retire quelques fonctions comme strdup...)
L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
Et s'assurer que la logique est bonne "aussi" !
Ma page Developpez.net
Si la variable ZCMD n'est plus en .ZVARS, alors je pense qu'il faut être cohérent jusqu'au bout et ne pas déclarer sa position dans le panel en Z
Voici un exemple d'utilisation de .ZVARS donné dans la doc IBM :
Là on voit bien que ZCMD est indépendant de .ZVARSFigure 78. Example of Z variable place-holders
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 )BODY ---------------------------- TITLE LINE ------------------------------------ %COMMAND===>_ZCMD % % . . . . + TYPE %===>_Z+ (A for alpha, N for numeric) + LENGTH%===>_Z + (0 to 99) + OFFSET%===>_Z + (0 to 99) . . . )INIT .ZVARS = '(TYPFLD LNGFLD OFFSET)'
Au pire si ça ne marche toujours pas on peut envisager de ne plus utiliser .ZVARS
Eh bien le problème c'était bien cela ! Merci Luc !
J'ai sorti ZCMD du ZVARS, je l'ai déclaré dans le body... et mon panel s'affiche correctement sans erreur !
Etrange... dans le programme que je dois maintenir le ZCMD est dans ZVARS, et tout fonctionne ! :s
Bref, je ferai avec...
Voici donc les 3 sections (si d'autres veulent essayer un jour sans connaitre ISPF ) :
ATTR
BODY
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 )ATTR DEFAULT(%+_) FORMAT(MIX) /* ------------------------------------------------------------------*/ /* PANEL MYAPPP01 */ /* ------------------------------------------------------------------*/ /* Panel de test */ /* ------------------------------------------------------------------*/ £ AREA(SCRL) EXTEND(ON) /* Scrollable Area */
INIT
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 /* ***************************** BODY *************************** */ )BODY WINDOW(79,24) CMD(ZCMD) % + ColorApp (Test Fabrice) %Commande ===>_ZCMD +Melange de couleurs : Couleur Actuelle : +*----------* %1 +Ajouter une couleur +*----------------* +| &user +| %2 +Retirer totalement une couleur +| 0x&my-color +| +| &system +| %3 +Modifier une couleur +| &color-name +| +| &time +| %4 +Soustraire une couleur +*----------------* +*----------* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - £SAREA9 )AREA SAREA9 /* ********************* AREA ********************** */ +Paramètres de couleur : +Rouge . . . . . :_Z + (0 à 255) +Vert . . . . . . :_Z + (0 à 255) +Bleu . . . . . . :_Z + (0 à 255)
Je vais vérifier/coder la logique qui va avec maintenant pour bien assimiler quoi fait quoi et quand....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 )INIT /* ***************************** INIT *************************** */ /* Valoriser les variables locales avec les valeurs du pool PROFILE */ /* <PROFILE <LOCALE <Conversion */ /**/ &ZCMD = ' ' VGET (MYRED MYGREEN MYBLUE) PROFILE /* Chargement des informations du cartouche: UserId, Heure, Partition */ &user = &ZUSER &time = &ZTIME &system = &ZSYSID .ZVARS = '(MYRED,MYGREEN,MYBLUE)' .CURSOR = ZCMD .HHELP = MYAPPH00 &ZHTOP = MYAPPH00
--
Metalman !
Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
(ANSI retire quelques fonctions comme strdup...)
L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
Et s'assurer que la logique est bonne "aussi" !
Ma page Developpez.net
Bloqué dans la logique (comme si c'était pas prévisible ! )...
J'essaye désespérément de mettre plusieurs OU sur la même ligne (il doit y avoir moyen...)
On m'a dit que les | ne sont pas compris comme des OU sur z/OS... mais ! oui.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 IF (&MYRED gt 255) || (&MYGREEN gt 255) || (&MYBLUE gt 255) THEN DO &msgerror = 'Valeur d'une des 3 couleurs trop grande (> 255)' END
A chaque fois j'ai un unrecognized keyword... ou un problème dans les IF keywords.... bref... c'est... "stressant" d'être bloqué par un problème de syntaxe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 IF (&MYRED > 255) ! (&MYGREEN > 255) ! (&MYBLUE > 255) THEN DO &msgerror = 'Valeur d'une des 3 couleurs trop grande (> 255)' END
--
Metalman !
Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
(ANSI retire quelques fonctions comme strdup...)
L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
Et s'assurer que la logique est bonne "aussi" !
Ma page Developpez.net
Les ! ou les |, c'est un problème de codepage dans ta session 3270. Je conseille toujours le codepage 1047 US, comme ça, on a beaucoup moins de surprise.
M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal
Mon codepage est à 1147 - (French Euro)...
Et apparemment on m'a expliqué que dans les sections INIT/REININT/PROC, les IF sont "simples"...
Donc pas d'imbrications, de &, && ou |....
Je vais travailler ainsi, mais si quelqu'un peut confirmer ça serait parfait !
--
Metalman !
Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
(ANSI retire quelques fonctions comme strdup...)
L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
Et s'assurer que la logique est bonne "aussi" !
Ma page Developpez.net
Changer le codepage de ta session est une bonne idée à maitriser. Si pas de maitrise, il vaut mieux éviter cette solution.
Si il y a changement du codepage, il faut faire très attention à ne pas provoquer des "erreurs" par ailleur.
Dans les panels, les IF peuvent être complexes ou compliqués. Ils doivent respecter des règles très strictes. La lecture de la doc est très fortement conseillée.
Ca ne vient pas du codepage...mais bel et bien du IF...
Je suis en train de lire ça (comme le conseil bernard) :
ISPF IF statement
Et en fouinant dans les codes autour je vois des :
Code : Sélectionner tout - Visualiser dans une fenêtre à part IF (&VAR1 NE '' OR &VAR2 NE '' OR &VAR3 NE '')
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 IF (&ZCMD = 1,5,6) VER(&VAR1,NB,MSG=MYAPP012)Bref, les IF ont l'air en effet assez tordus avec les VER et les opérateurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 IF POS("à",VAR4) ^= 0 THEN DO VAR4=TRANSLATE(VAR4,'@','à') END
A noter aussi, ceci est incorrect selon ISPF :
Il faut faire UNE seule addition à chaque fois. (même si le but sera de décaler à gauche)
Code : Sélectionner tout - Visualiser dans une fenêtre à part &MYCOLOR = &MYCOLOR + &MYRED + &MYGREEN + &MYBLUE
EDIT : ah bein apparemment le codepage y était "aussi" pour quelquechose :
Je pensais pourtant que le 1147 serait l'équivalent du 1047 sur la plupart des caractèresBoolean-operator
The character symbol & or characters AND (AND Boolean operator) or the character symbol | or characters OR (OR Boolean operator).
--
Metalman !
Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
(ANSI retire quelques fonctions comme strdup...)
L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
Et s'assurer que la logique est bonne "aussi" !
Ma page Developpez.net
C'est vrai, sauf pour quelques caractères de ponctuation, comme le ! en 1147 qui devient | en 1047 (code 4F).
Et comme le dit Bernard, il vaut mieux savoir ce qu'on fait avec son codepage, car il peut y avoir des problèmes lorsqu'on édite des fichiers ou qu'on fait du DB2 par exemple.
M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal
pour avoir un petit apercu des différences, regarde ICI
Je n'ai pas beaucoup travaillé dessus les denriers jours, mais je viens de m'y remettre.
Mon panel s'affiche, et j'ai mis un peu de REXX... mais il ne se passe tout simplement "rien" quand je valide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 )ATTR DEFAULT(%+_) FORMAT(MIX) /* ------------------------------------------------------------------*/ /* PANEL MYAPPP01 */ /* ------------------------------------------------------------------*/ /* Panel de test */ /* ------------------------------------------------------------------*/ £ AREA(SCRL) EXTEND(ON) /* Scrollable Area */ /* ***************************** BODY *************************** */ )BODY WINDOW(79,24) CMD(ZCMD) % + ColorApp (Test Fabrice) %Commande ===>_ZCMD +Melange de couleurs : Couleur Actuelle : +*----------* %1 +Ajouter une couleur +*----------------* +| &user +| %2 +Retirer totalement une couleur +| 0x&my-color +| +| &system +| %3 +Modifier une couleur +| &color-name +| +| &time +| %4 +Soustraire une couleur +*----------------* +*----------* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - £SAREA9 )AREA SAREA9 /* ********************* AREA ********************** */ +Paramètres de couleur : +Rouge . . . . . :_Z + (0 à 255) +Vert . . . . . . :_Z + (0 à 255) +Bleu . . . . . . :_Z + (0 à 255) )INIT /* ***************************** INIT *************************** */ /* Valoriser les variables locales avec les valeurs du pool PROFILE */ /* <PROFILE <LOCALE <Conversion */ /**/ &ZCMD = ' ' VGET (MYRED MYGREEN MYBLUE) PROFILE /* .ZVARS = '(ZCMD MYRED MYGREEN MYBLUE TESTMOI)' */ .ZVARS = '(MYRED,MYGREEN,MYBLUE)' .CURSOR = ZCMD .HHELP = MYAPPH00 &ZHTOP = MYAPPH00 /* Initialisation des variables et valeurs affichees */ &MYCOLOR = 000000 &COLORNOM = 'blanc' &MYRED = 00 &MYGREEN = 00 &MYBLUE = 00 &MSGERROR = ' ' /* Chargement des informations du cartouche: UserId, Heure, Partition */ &user = &ZUSER &time = &ZTIME &system = &ZSYSID /* ***************************** REINIT *************************** */ )REINIT &MYRED = 00 &MYBLUE = 00 &MYGREEN = 00 /* ***************************** PROC *************************** */ )PROC /* =========== VERIFICATION DES VALEURS ENTREES =================== */ /* -> VERIF <- l'option doit être comprise entre 1 et 4. */ VER (&ZCMD,RANGE,1,4) IF (&MYRED > 255) &MSGERROR = 'ROUGE > 255' IF (&MYGREEN > 255) &MSGERROR = 'VERT > 255' IF (&MYBLUE > 255) &MSGERROR = 'BLEU > 255' *REXX(&ZCMD,&MYCOLOR,&MYRED,&MYGREEN,&MYBLUE,&COLORNOM) TRACE O IF &ZCMD = 1 THEN DO &TMPRED = &MYRED * 10000 &TMPGREEN = &MYGREEN * 100 &MYCOLOR = &MYCOLOR + &TMPRED &MYCOLOR = &MYCOLOR + &TMPGREEN &MYCOLOR = &MYCOLOR + &TMPBLUE END SAY color &MYCOLOR *ENDREXX VPUT (MYRED MYGREEN MYBLUE) PROFILE )END
Dans la partie "commande" je tape 1 (donc pour "ajouter des couleurs" à ma variable &MYCOLOR), puis j'indique diverses valeurs de 2 chiffres (pour le moment) dans les champs ROUGE, VERT, BLEU.
Et je valide....
...
...
Et l'écran se rafraichit sans rien de plus.
Les variables ne sont pas résolues...
Voilà ce qui s'affiche en gros :
Avant validation (quand je rempli mes champs) :
Après validation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 MSYS ColorApp (Test Fabrice) Commande ===> 1 Melange de couleurs : Couleur Actuelle : *----------* 1 Ajouter une couleur *----------------* | METALMA | 2 Retirer totalement une couleur | 0x000000 | | MSYS | 3 Modifier une couleur | blanc | | 10:44 | 4 Soustraire une couleur *----------------* *----------* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Paramètres de couleur : Rouge . . . . . : 42 (0 à 255) Vert . . . . . . : 21 (0 à 255) Bleu . . . . . . : 10 (0 à 255)
Théoriquement, REXX devrait m'afficher un message avec la nouvelle valeur de &MYCOLOR...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 MSYS ColorApp (Test Fabrice) Commande ===> Melange de couleurs : Couleur Actuelle : *----------* 1 Ajouter une couleur *----------------* | METALMA | 2 Retirer totalement une couleur | 0x000000 | | MSYS | 3 Modifier une couleur | blanc | | 10:46 | 4 Soustraire une couleur *----------------* *----------* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Paramètres de couleur : Rouge . . . . . : 00 (0 à 255) Vert . . . . . . : 00 (0 à 255) Bleu . . . . . . : 00 (0 à 255)
Et surtout : le panel devrait mettre à jour le champs "Couleur Actuelle :" avec 0x422110
Je.... ne dois pas bien comprendre l'ordre entre )INIT, )PROC, )REINIT ?
--
Metalman !
Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
(ANSI retire quelques fonctions comme strdup...)
L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
Et s'assurer que la logique est bonne "aussi" !
Ma page Developpez.net
visiblement ton rexx ne s execute pas non? vois tu le say color ?
personnellement c est toujours le rexx que je demarre en premier, et c est lui qui affiche et gere les panels, je me contente toujours de panel relativement simple et ne fait aucun traitement dedans. tout est fait dans le rexx, c est plus facile a debugger et a lire. j'avoue que je ne connaissais pas ta maniere de faire.
Le say color ne passe pas en effet...
J'essayerai de faire un autre panel à côté avec un VGET en INIT, et un VPUT + CMD en PROC.
Mais j'aimerais bien savoir pourquoi la partie REXX n'est pas interprétée... la doc parle bien d'ajouter moins de 32k de script REXX si on souhaite en faire.
--
Metalman !
Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
(ANSI retire quelques fonctions comme strdup...)
L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
Et s'assurer que la logique est bonne "aussi" !
Ma page Developpez.net
Bonjour
je n'ai jamais utilisé de REXX dans les panels, et je n'en ai jamais eu l'utilité.
Quelques conseils malgré tout:
- )REINIT
remplace les lignes du °REINIT par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 )REINIT VGET (MYRED MYGREEN MYBLUE) PROFILE- *rexx
TMPBLUE n'est pas initialisé.
Il y a des contraintes pour utiliser (lecture/maj) des variables du PANEL.
A la place , j'essayerai un truc du genre:avec un affichage dans le panel si nécessaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part &MYCOLOR = &MYRED&MYGREEN&MYBLUE
Bon... j'ai ajouté pas mal de debug....
Ca a l'air d'être exécuté, mais pas totalement... j'ai retiré le "TRACE 0", et ajouté des "say".
Voilà le code en PROC :
A l'exécution en mettant juste un "1" en ZCMD :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 )PROC /* =========== VERIFICATION DES VALEURS ENTREES =================== */ /* -> VERIF <- l'option doit être comprise entre 1 et 4. */ VER (&ZCMD,RANGE,1,4) *REXX say Test Rouge *ENDREXX IF (&MYRED > 255) &MSGERROR = 'ROUGE > 255' *REXX say Test Rouge OK say Test Vert *ENDREXX IF (&MYGREEN > 255) &MSGERROR = 'VERT > 255' *REXX say Test Vert OK say Test Bleu *ENDREXX IF (&MYBLUE > 255) &MSGERROR = 'BLEU > 255' &MYCMD = &ZCMD *REXX say Test Bleu OK say Code principal say MYCMD : &MYCMD *ENDREXX *REXX(&MYCMD,&MYCOLOR,&MYRED,&MYGREEN,&MYBLUE,&COLORNOM) IF &MYCMD='1' THEN DO /* &TMPRED = &MYRED * 10000 */ /* &TMPGREEN = &MYGREEN * 100 */ /* &MYCOLOR = &MYCOLOR + &TMPRED */ /* &MYCOLOR = &MYCOLOR + &TMPGREEN */ /* &MYCOLOR = &MYCOLOR + &MYBLUE */ &MYCOLOR = &MYRED&MYGREEN&MYBLUE END SAY color &MYCOLOR *ENDREXX VPUT (MYCOLOR MYRED MYGREEN MYBLUE MSGERROR) PROFILE )END
Bref, donc le REXX est "correctement exécuté"... mais pas pour les variables....TEST ROUGE
TEST ROUGE OK
TEST VERT
TEST VERT OK
TEST BLEU
TEST BLEU OK
CODE PRINCIPAL
14 +++ say MYCMD : &MYCMD
6 +++ Call P_0003F010
Error running exec, line 14: Invalid expression
***
--
Metalman !
Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
(ANSI retire quelques fonctions comme strdup...)
L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
Et s'assurer que la logique est bonne "aussi" !
Ma page Developpez.net
Pfiou....
Merci cette page de doc sur le *REXX statement et son exemple à rallonge...
Maintenant, avec ce code :
J'obtiens cette sortie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 )PROC /* =========== VERIFICATION DES VALEURS ENTREES =================== */ /* -> VERIF <- l'option doit être comprise entre 1 et 4. */ VER (&ZCMD,RANGE,1,4) *REXX say Test Rouge *ENDREXX IF (&MYRED > 255) &MSGERROR = 'ROUGE > 255' *REXX say Test Rouge OK say Test Vert *ENDREXX IF (&MYGREEN > 255) &MSGERROR = 'VERT > 255' *REXX say Test Vert OK say Test Bleu *ENDREXX IF (&MYBLUE > 255) &MSGERROR = 'BLEU > 255' *REXX say Test Bleu OK *ENDREXX &MYCMD = &ZCMD *REXX(ZCMD) say Code principal say MYCMD ZCMD *ENDREXX *REXX(ZCMD,MYCOLOR,MYRED,MYGREEN,MYBLUE,COLORNOM) SAY Debut traitement IF ZCMD = '1' THEN DO SAY on est dans if TMPRED = MYRED * 10000 TMPGREEN = MYGREEN * 100 MYCOLOR = MYCOLOR + TMPRED MYCOLOR = MYCOLOR + TMPGREEN MYCOLOR = MYCOLOR + MYBLUE END SAY color MYCOLOR *ENDREXX VPUT (MYCOLOR MYRED MYGREEN MYBLUE MSGERROR) PROFILE )END
Donc en *REXX il faut :TEST ROUGE
TEST ROUGE OK
TEST VERT
TEST VERT OK
TEST BLEU
TEST BLEU OK
CODE PRINCIPAL
MYCMD 1
DEBUT TRAITEMENT
ON EST DANS IF
COLOR 403010
***
1) déclarer à l'ouverture les variables ISPF qui nous intéressent : *REXX(ZCMD) ou2) Utiliser les noms de variables SANS préfixe dans le code MYCOLOR = MYCOLOR + MYBLUE ou SAY color MYCOLOR
Code : Sélectionner tout - Visualiser dans une fenêtre à part *REXX(ZCMD,MYCOLOR,MYRED,MYGREEN,MYBLUE,COLORNOM)
Un grand pas pour moi-même vient d'être effectué, un déplacement impossible à mesurer (tellement il est petit) pour l'humanité a été fait !
--
Metalman !
Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
(ANSI retire quelques fonctions comme strdup...)
L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
Et s'assurer que la logique est bonne "aussi" !
Ma page Developpez.net
il n'en reste pas moins, mais ce n'est que mon humbre avis, que ça reste un peu "bizarre' comme manière de faire, le rexx carrément dans le )PROC du panel.
ci joint un sample qui evite deja tous les VPUT/VGET et autres trucs du genre
le rexx
choix etant une des zones de mon panel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 /*REXX*/ /*TRACE(A)*/ MENU: do forever y=msg("off") address ispexec "display panel(paba48)" if rc ^= 0 then do exit end msgerr = '' upper choix ...... end
le panel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 )ATTR DEFAULT(%+_) % TYPE(TEXT) INTENS(HIGH) COLOR(GREEN) + TYPE(TEXT) COLOR(BLUE) SKIP(ON) ù TYPE(TEXT) COLOR(GREEN) SKIP(ON) ° TYPE(TEXT) COLOR(TURQ) SKIP(ON) £ TYPE(TEXT) INTENS(HIGH) COLOR(YELLOW) SKIP(ON) § TYPE(OUTPUT) INTENS(LOW) CAPS(OFF) SKIP(ON) $ TYPE(OUTPUT) CAPS(OFF) COLOR(PINK) SKIP(ON) ¨ TYPE(OUTPUT) INTENS(HIGH) CAPS(OFF) JUST(LEFT) COLOR(GREEN) ! TYPE(INPUT) INTENS(HIGH) CAPS(ON) PADC('_') COLOR(RED) ^ TYPE(INPUT) CAPS(ON) PADC('_') COLOR(GREEN) _ TYPE(INPUT) INTENS(HIGH) CAPS(ON) PADC('_') JUST(LEFT) COLOR(TURQ) µ TYPE(INPUT) INTENS(NON) )BODY SMSG(MSGERR) LMSG(MSGERR) ùPABA48 °-------------titre -------- $MSGERR £Choix : _Z+ £Identifiant : _Z + ..... blablabla .... )INIT .ZVARS = '(CHOIX,IDENT)' .CURSOR = CHOIX )PROC .CURSOR = CHOIX )END
Bonjour,
Je partage l'avis ci-dessus à savoir un REXX dissocié du PANEL. Cela simplifie grandement la lecture. Dès lors le REXX assure l'affichage du PANEL la première fois ainsi que les appels (donc une fois que le panel est affiché) aux fonctions du PANEL.
Ainsi dans le REXX j'ai toujours un :
(On sait que c'est le premier appel par la valeur de "OPTION")
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 IF OPTION = ' ' THEN DO CALL APPEL_INIT END ELSE /* SINON ON TRAITE L'OPTION CHOISI A L'ECRAN */ CALL APPEL_OPT ; EXIT APPEL_INIT: ADDRESS ISPEXEC "SELECT PANEL(PANELNAM)" EXIT
Et ensuite en fonction des OPTIONS saisies les PROC associées (genre submit de JCL ...) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 APPEL_OPT: SELECT /* ON DISPATCH EN FONCTION DE L'OPTION CHOISI */ WHEN OPTION = '1' THEN CALL OPTION1 WHEN OPTION = '3' THEN CALL OPTION2 WHEN OPTION = '4' THEN CALL OPTION3 WHEN OPTION = '2' THEN CALL OPTION5 ...
Mais dans tous les cas il y aura des VGET/VPUT pour récupérer les "autres" champs du panel ?
Hormis l'option, si le panel doit contenir des valeurs dans tous les sens... on est bien "obligé" d'utilise VGET/VPUT, non ?
Et le REXX principal est rappelé automatiquement "tout" le temps si j'ai bien compris (et je le constate)...
Mais alors REINIT est utilisé à quel moment ? Lors d'un appel à REFRESH ?
(.CURSOR indique juste l'endroit où l'on placera le curseur lors de l'affichage du panel)
--
Metalman !
Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
(ANSI retire quelques fonctions comme strdup...)
L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
Et s'assurer que la logique est bonne "aussi" !
Ma page Developpez.net
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager