* Fichier : Petit_Exemple.dgibi (petit exemple d'utilisation de 'EXTERN') ************************************************************************ * Section : Entree-Sortie Entree-Sortie ************************************************************************ ************************************************************************ * NOM : EXTE * DESCRIPTION : Teste l'operateur EXTE (Non portable...) * * * * LANGAGE : GIBIANE-CAST3M ************************************************************************ 'OPTION' 'ECHO' 0 ; 'MESS' ; 'MESS' 'Le present exemple est a but purement illustratif !' ; 'MESS' 'Les differents resultats obtenus ne sont pas garantis.' ; 'MESS' ; 'MESS' 'Les elements fournis ici sont a adapter en fonction ' ; 'MESS' 'du(des) programme(s) externe(s) utilise(s) et du systeme' ; 'MESS' ; * Determination de la version de Cast3M (annuelle ou du jour=DEV) : str_ver = 'VENV' 'CASTEM_VERSION' ; * Cette variable d'environnement existe pour les versions annuelles pas trop anciennes 'SI' ('EGA' str_ver ' ') ; str_ver = 'MOT' 'DEV' ; 'FINSI' ; * Determination du systeme : str_os = 'VENV' 'CASTEM_PLATEFORME' ; * Cette variable d'environnement existe pour les versions annuelles pas trop anciennes 'SI' ('NEG' str_os ' ') ; 'SI' ('EGA' ('EXTRAIRE' str_os 1 3) 'WIN') ; str_os = 'MOT' 'Windows' ; 'SINON' ; str_os = 'MOT' 'Linux' ; 'FINSI' ; 'SINON' ; * On cherche une variable definie uniquement sous Windows : str_z = 'VENV' 'OS' ; 'SI' ('EGA' str_z 'Windows_NT') ; str_os = 'MOT' 'Windows' ; 'SINON' ; str_os = 'MOT' 'Linux' ; tab_z = 'EXTERN' 'uname' ; 'SI' ('NEG' tab_z.1 str_os) ; str_os = 'MOT' 'Autre' ; 'FINSI' ; 'FINSI' ; 'FINSI' ; 'MESS' ; 'MESS' 'TEST sur SYSTEME' ' ' str_os ' avec Cast3M version' ' ' str_ver ; b_err = FAUX ; ** 1ER TEST : 'MESS' ; * Choix de la commande selon le systeme (ici c'est la meme) 'SI' ('EGA' str_os 'Windows') ; cmd_z = 'MOT' 'ECHO' ; 'SINON' ; cmd_z = 'MOT' 'echo' ; 'FINSI' ; * Attention l_z ne doit pas commencer par un chiffre sinon le resultat de echo * sera interprete comme un flottant, ce que l'on ne veut pas ici ! l_z = 'MOT' 'Z2345678901234567890123456789012345678901234567890123456789012345678901@345678901234567890123456789C' ; lg_z = 'DIME' l_z ; list l_z ; list lg_z ; cmd_z = 'CHAINE' cmd_z ' ' l_z ; list cmd_z ; tab_z = 'EXTERN' cmd_z ; 'MESS' ; 'SI' ('NEG' ('TYPE' tab_z) 'TABLE') ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'On n a pas de TABLE de resultat' ; b_err = VRAI ; 'FINSI' ; list tab_z ; 'MESS' ; 'SI' ('NEG' ('DIME' tab_z) 1) ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'On attendait un seul retour' ; b_err = VRAI ; 'FINSI' ; obj_z = tab_z. 1 ; 'SI' ('NEG' ('TYPE' obj_z) 'MOT') ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'On attendait un MOT dans la table pour l indice 1' ; b_err = VRAI ; 'FINSI' ; list obj_z ; 'SI' ('NEG' ('DIME' obj_z) lg_z) ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'On attendait a un MOT de longueur' ' ' lg_z ; b_err = VRAI ; 'FINSI' ; ** 2e TEST : 'MESS' ; * Choix de la commande selon le systeme : 'SI' ('EGA' str_os 'Windows') ; cmd_z = 'MOT' 'DIR /B' ; 'SINON' ; cmd_z = 'MOT' 'ls' ; 'FINSI' ; list cmd_z ; tab_z = 'EXTERN' cmd_z ; 'SI' ('NEG' ('TYPE' tab_z) 'TABLE') ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'On n a pas de TABLE de resultat' ; b_err = VRAI ; 'FINSI' ; list tab_z ; ** 3e TEST : * Test purement Linux a ce jour : 'SI' (('EGA' str_os 'Linux') 'OU' ('EGA' str_os 'Autre')) ; 'MESS' ; arg_z = 'TABLE' ; * une addition entre entiers : arg_z. 1 = 1 ; arg_z. 2 = 'MOT' '+' ; arg_z. 3 = 2 ; arg_z. 4 = 'MOT' 'RC' ; * une multiplication entre entiers : arg_z. 5 = 3 ; arg_z. 6 = 'MOT' '*' ; arg_z. 7 = 6 ; arg_z. 8 = 'MOT' 'RC' ; * une addition avec un flottant mais * Le resultat donne par 'bc' sera faux, car il interprete le FLOTTANT .532E+03 envoye par Cast3M comme 0.532+3 ! * Ici on s'assure que le FLOTTANT (532.) est bien transmis. arg_z. 9 = 532. ; arg_z. 10 = 'MOT' '+' ; arg_z. 11 = 0 ; arg_z. 12 = 'MOT' 'RC' ; * Pour avoir un resultat correct avec 'bc' et des FLOTTANTS, on les envoie sous forme de CHAINE avec un FORMAT Fx.y sans EXPOSANT ! arg_z. 13 = 'CHAINE' 'FORMAT' '(F10.4)' 532. ; arg_z. 14 = 'MOT' '+' ; arg_z. 15 = 0 ; arg_z. 16 = 'MOT' 'RC' ; str_z = 'CHAINE' 'FORMAT' '(1PE12.5)' 532. ; 'COMM' 'Pour remettre le format des flottants par defaut dans CHAINE' ; * Une petite division (entiere car scale=0 par defaut) arg_z. 17 = 1 ; arg_z. 18 = 'MOT' '/' ; arg_z. 19 = 6 ; arg_z. 20 = 'MOT' 'RC' ; ** arg_z. 17 = 1 ; arg_z. 18 = 'MOT' '/' ; arg_z. 19 = 'MOT' 'RC' ; arg_z. 20 = 'MOT' 'RC' ; * Une petite division : arg_z. 21 = 'MOT' 'scale = 7' ; arg_z. 22 = 'MOT' 'RC' ; arg_z. 23 = 1 ; arg_z. 24 = 'MOT' '/' ; arg_z. 25 = 6 ; arg_z. 26 = 'MOT' 'RC' ; * Une petite operation complexe arg_z. 27 = 'MOT' '1. + 2 + 53.2' ; arg_z. 28 = 'MOT' 'RC' ; arg_z. 29 = 'MOT' 'quit' ; arg_z. 30 = 'MOT' 'RC' ; cmd_z = 'MOT' 'bc' ; list cmd_z ; list arg_z ; tab_z = 'EXTERN' cmd_z arg_z ; 'SI' ('NEG' ('TYPE' tab_z) 'TABLE') ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'On n a pas de TABLE de resultat' ; b_err = VRAI ; 'FINSI' ; list tab_z ; 'MESS' ; res_z = 7 ; dim_z = 'DIME' tab_z; 'SI' ('NEG' ('DIME' tab_z) res_z) ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'On attendait' ' ' res_z ' retours' ; b_err = VRAI ; 'SINON'; i_z = 1 ; typ_z = 'MOT' 'ENTIER' ; res_z = 3 ; obj_z = tab_z. i_z ; 'SI' ('EGA' ('TYPE' obj_z) typ_z) ; 'SI' ('EGA' obj_z res_z) ; 'MESS' 'Retour' ' ' i_z ' : VALIDE :' ' ' typ_z ' - valeur' ' ' res_z ; 'SINON' ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'Resultat de type correct mais de valeur incorrecte' ' ' res_z ; b_err = VRAI ; 'FINSI' ; 'SINON' ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'On attendait un' ' ' typ_z ' dans la table pour l indice' ' ' i_z ; b_err = VRAI ; 'FINSI' ; i_z = 2 ; typ_z = 'MOT' 'ENTIER' ; res_z = 18 ; obj_z = tab_z. i_z ; 'SI' ('EGA' ('TYPE' obj_z) typ_z) ; 'SI' ('EGA' obj_z res_z) ; 'MESS' 'Retour' ' ' i_z ' : VALIDE :' ' ' typ_z ' - valeur' ' ' res_z ; 'SINON' ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'Resultat de type correct mais de valeur incorrecte' ' ' res_z ; b_err = VRAI ; 'FINSI' ; 'SINON' ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'On attendait un' ' ' typ_z ' dans la table pour l indice' ' ' i_z ; b_err = VRAI ; 'FINSI' ; i_z = 3 ; typ_z = 'MOT' 'FLOTTANT' ; res_z = 3.532 ; obj_z = tab_z. i_z ; 'SI' ('EGA' ('TYPE' obj_z) typ_z) ; 'SI' ('EGA' obj_z res_z 1.E-12) ; 'MESS' 'Retour' ' ' i_z ' : VALIDE :' ' ' typ_z ' - valeur' ' ' res_z ; 'SINON' ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'Resultat de type correct mais de valeur incorrecte' ' ' res_z ; b_err = VRAI ; 'FINSI' ; 'SINON' ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'On attendait un' ' ' typ_z ' dans la table pour l indice' ' ' i_z ; b_err = VRAI ; 'FINSI' ; i_z = 4 ; typ_z = 'MOT' 'FLOTTANT' ; res_z = 532. ; obj_z = tab_z. i_z ; 'SI' ('EGA' ('TYPE' obj_z) typ_z) ; 'SI' ('EGA' obj_z res_z 1.E-12) ; 'MESS' 'Retour' ' ' i_z ' : VALIDE :' ' ' typ_z ' - valeur' ' ' res_z ; 'SINON' ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'Resultat de type correct mais de valeur incorrecte' ' ' res_z ; b_err = VRAI ; 'FINSI' ; 'SINON' ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'On attendait un' ' ' typ_z ' dans la table pour l indice' ' ' i_z ; b_err = VRAI ; 'FINSI' ; i_z = 5 ; typ_z = 'MOT' 'ENTIER' ; res_z = 0 ; obj_z = tab_z. i_z ; 'SI' ('EGA' ('TYPE' obj_z) typ_z) ; 'SI' ('EGA' obj_z res_z) ; 'MESS' 'Retour' ' ' i_z ' : VALIDE :' ' ' typ_z ' - valeur' ' ' res_z ; 'SINON' ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'Resultat de type correct mais de valeur incorrecte' ' ' res_z ; b_err = VRAI ; 'FINSI' ; 'SINON' ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'On attendait un' ' ' typ_z ' dans la table pour l indice' ' ' i_z ; b_err = VRAI ; 'FINSI' ; i_z = 6 ; typ_z = 'MOT' 'FLOTTANT' ; res_z = 0.16666660 ; obj_z = tab_z. i_z ; 'SI' ('EGA' ('TYPE' obj_z) typ_z) ; 'SI' ('EGA' obj_z res_z 1.E-12) ; 'MESS' 'Retour' ' ' i_z ' : VALIDE :' ' ' typ_z ' - valeur' ' ' res_z ; 'SINON' ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'Resultat de type correct mais de valeur incorrecte' ' ' res_z ; b_err = VRAI ; 'FINSI' ; 'SINON' ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'On attendait un' ' ' typ_z ' dans la table pour l indice' ' ' i_z ; b_err = VRAI ; 'FINSI' ; i_z = 7 ; typ_z = 'MOT' 'FLOTTANT' ; res_z = 56.2 ; obj_z = tab_z. i_z ; 'SI' ('EGA' ('TYPE' obj_z) typ_z) ; 'SI' ('EGA' obj_z res_z 1.E-12) ; 'MESS' 'Retour' ' ' i_z ' : VALIDE :' ' ' typ_z ' - valeur' ' ' res_z ; 'SINON' ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'Resultat de type correct mais de valeur incorrecte' ' ' res_z ; b_err = VRAI ; 'FINSI' ; 'SINON' ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'On attendait un' ' ' typ_z ' dans la table pour l indice' ' ' i_z ; b_err = VRAI ; 'FINSI' ; 'FINSI' ; 'FINSI' ; * test PV du bug 11850 'SI' ('EGA' str_os 'Windows'); cmd_z = 'MOT' 'echo 0 && echo 1'; 'SINO'; cmd_z = 'MOT' 'echo 0 ; echo 1'; 'FINS'; tab_z = 'EXTERN' cmd_z ; 'SI' ('NEG' ('TYPE' tab_z) 'TABLE') ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'On n a pas de TABLE de resultat' ; b_err = VRAI ; 'FINSI' ; list tab_z ; 'MESS' ; res_z = 2 ; dim_z = 'DIME' tab_z; 'SI' ('NEG' ('DIME' tab_z) res_z) ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'On attendait' ' ' res_z ' retours' ; b_err = VRAI ; 'SINON'; i_z = 1 ; typ_z = 'MOT' 'ENTIER' ; res_z = 0 ; obj_z = tab_z. i_z ; 'SI' ('EGA' ('TYPE' obj_z) typ_z) ; 'SI' ('EGA' obj_z res_z) ; 'MESS' 'Retour' ' ' i_z ' : VALIDE :' ' ' typ_z ' - valeur' ' ' res_z ; 'SINON' ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'Resultat de type correct mais de valeur incorrecte' ' ' res_z ; b_err = VRAI ; 'FINSI' ; 'SINON' ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'On attendait un' ' ' typ_z ' dans la table pour l indice' ' ' i_z ; b_err = VRAI ; 'FINSI' ; i_z = 2 ; typ_z = 'MOT' 'ENTIER' ; res_z = 1 ; obj_z = tab_z. i_z ; 'SI' ('EGA' ('TYPE' obj_z) typ_z) ; 'SI' ('EGA' obj_z res_z) ; 'MESS' 'Retour' ' ' i_z ' : VALIDE :' ' ' typ_z ' - valeur' ' ' res_z ; 'SINON' ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'Resultat de type correct mais de valeur incorrecte' ' ' res_z ; b_err = VRAI ; 'FINSI' ; 'SINON' ; 'MESS' 'Erreur lors de l execution de la commande' ; 'MESS' 'On attendait un' ' ' typ_z ' dans la table pour l indice' ' ' i_z ; b_err = VRAI ; 'FINSI' ; 'FINSI' ; 'SI' b_err ; 'ERREUR' 5 ; 'FINSI' ; 'FIN' ;