* DESTRA PROCEDUR PV 18/06/11 21:15:01 9842 ********************************************************************** EVOL2/'EVOLUTIO' TBDES2/'TABLE' ; * MT1/'MOT' LT1/'MOT' MT2/'MOT' LT2/'MOT' MT3/'MOT' * LT3/'MOT' MT4/'MOT' XBOR1/'FLOTTANT' XBOR2/'FLOTTANT' MT5/'MOT' * YBOR1/'FLOTTANT' YBOR2/'FLOTTANT' MT6/'MOT' * MT7 N1/'ENTIER' (N2/'ENTIER' ...) LENTI1/'LISTENTI' MT7/'MOT' * MOT#/'MOT' ; ************************************************************************ * * Trace les évolutions contenues dans la table TBR * construites par TRACHIS ou TRACHIT * ************************************************************************ * * Entrée : * -------- * * TBR : table des évolutions (Cf. TRACHIS ou TRACHIT) * indicée par des entiers, puis par VALEUR, LEGEND1, LEGEND2 * * TBDES0 : table de spécifications de tracer (optionnelle, Cf. DESS) * Ses indices compléteront (titre) ou remplaceront (chaîne * de tracer) le remplissage automatique. * Elle est indicée par les mêmes indices que la table, * ce qui permet de gérer tranquillou les évolutions complexes. * * EVOL2 : évolution supplémentaire éventuelle à superposer, avec * * TBDES2 : sa table de spécifications de tracer (optionnelle, Cf. DESS) * indicée de façon standard (suivant les sous-évolutions) * * MOT# : mot, option simple de dessin : * 'LOGX' 'LOGY' 'GRIL' 'MIMA' 'DATE' 'LOGO' 'SEPA' * 'AXES' 'NCLK' * les options 'CARR', 'LEGE' étant choisie par défaut * * MT1 MT2 MT3 : mots-clefs 'TITR' 'TITX' 'TITY' suivis de * LT1 LT2 LT3 : chaînes de caractères correspondantes * * MT4 MT5 : mots-clefs 'XBOR' 'YBOR' suivis respectivement de * XBOR1 XBOR2 * YBOR1 YBOR2 : FLOTTANTS valant les bornes d'abscisse et * d'ordonnée respectivement * * MT6 : mot-clef 'TABMIMA' pour afficher en tablature les extrema * des évolutions. * * MT7 : mot-clef 'CHOI' (ou 'CHOIX') pour sélectionner les * entrées de TBR à tracer (défaut = toutes), suivi de * N1 N2...: indice de TBR à tracer OU * LENTI1 : LISTENTI des indices de TBR * ************************************************************************ * * Remarques * --------- * * La table doit être donnée en premier ; * les autres options avec mot clef viennent ensuite dans un ordre * quelconque. * ************************************************************************ * * NEVL : nombre de courbes à tracer * ************************************************************************ * * Auteur : Françoise Auriol (TTMF) 1998 * * ----------------------- * * Modifié : P. Maugis (LSCE) le 07/08/2007 : * - introduction de TBDES0 * - prise en compte d'évolutions complexes * ************************************************************************ * Récupération des options de dessin * ---------------------------------- * et construction de la table des options *--Valeurs par défaut : LNTAB = FAUX ; TTR = 'GIBI FECIT' ; LREGU = FAUX ; * table des options LOP LOP = 'TABLE' ; * On va afficher les légendes IOP = 2 ; * On lit une par une les données précisées par des mots-clefs 'REPETER' bcl ; 'SI' ('NON' ('EXISTE' MOT1)) ; 'QUITTER' bcl ; 'FINSI' ; * options simples de DESSIN 'SI' ( ('EGA' MOT1 'LOGX') 'OU' ('EGA' MOT1 'LOGY') 'OU' ('EGA' MOT1 'GRIL') 'OU' ('EGA' MOT1 'MIMA') 'OU' ('EGA' MOT1 'SEPA') 'OU' ('EGA' MOT1 'AXES') 'OU' ('EGA' MOT1 'NCLK') ) ; IOP = IOP + 1 ; 'ITERER' bcl ; 'FINSI' ; * options avec arguments ou spécifiques IOP = IOP + 2 ; 'ITERER' bcl ; 'FINSI' ; 'SI' ('EGA' MOT1 'TITX') ; IOP = IOP + 2 ; 'ITERER' bcl ; 'FINSI' ; 'SI' ('EGA' MOT1 'TITY') ; IOP = IOP + 2 ; 'ITERER' bcl ; 'FINSI' ; 'SI' ('EGA' MOT1 'XBOR') ; 'ARGUMENT' XBOR1*'FLOTTANT' XBOR2*'FLOTTANT' ; IOP = IOP + 3 ; 'ITERER' bcl ; 'FINSI' ; 'SI' ('EGA' MOT1 'YBOR') ; 'ARGUMENT' YBOR1*'FLOTTANT' YBOR2*'FLOTTANT' ; IOP = IOP + 3 ; 'ITERER' bcl ; 'FINSI' ; 'SI' ('EGA' MOT1 'TABMIMA') ; LNTAB = vrai ; 'ITERER' bcl ; 'FINSI' ; * cette lecture suppose qu'aucun autre mot-clef ne demande * d'entier ni de LISTENTI en entrée * cette option n'est pas transmise à DESSIN car il y aura * restriction aux sous-évolutions concernées. 'ARGUMENT' I/'ENTIER' LIEVL/'LISTENTI' ; 'SI' (( ('EXISTE' I) 'ET' ('EXISTE' lievl)) 'OU' (('NON' ('EXISTE' I)) 'ET' ('NON' ('EXISTE' lievl)))) ; 'ERREUR' 'Fournir des entiers ou une liste d entiers' ; 'FINSI' ; 'SI' ('EXISTE' lievl) ; * donnée d'une liste. Rien à faire 'FINSI' ; 'SI' ('EXISTE' I) ; * donnée d'un entier, boucle sur les suivants éventuels 'REPETER' bcl1 ; 'ARGUMENT' I/'ENTIER' ; 'SI' ('NON' ('EXISTE' I)) ; 'QUITTER' bcl1 ; 'SINON' ; 'FINSI' ; 'FIN' bcl1 ; 'FINSI' ; 'ITERER' bcl ; 'FINSI' ; 'SI' ('EGA' MOT1 'REGU') ; LREGU = vrai ; 'ITERER' bcl ; 'FINSI' ; * donnée non identifiée mot1 ' inconnu.'); 'FIN' bcl ; * on complète les d'options jusqu'au nb maximal par des LEGE NOP = IOP - 1 ; NOPMAX = 40 ; 'SI' (NOP < NOPMAX) ; NB2 = NOPMAX - NOP ; 'REPETER' BLOC4 NB2 ; IOP = IOP + 1 ; 'FIN' BLOC4 ; 'FINSI' ; * on prend toutes les sous-évolutions si pas de contre-ordre 'FINSI' ; * liste des types de tirets : * --------------------------- * liste des types de marqueurs : * ------------------------------ 'TRIL' 'TRIR' 'ROND' 'MOIN' 'BARR' ; * Constructions préliminaires : * ----------------------------- * TBDES : table décrivant la nature des traits et marqueurs * K : indice dans TBDES des informations concernant la sous-évolution K, * permet de gérer les évolutions complexes * LIMIN : liste des valeurs mini de chaque évolution * LIMAX : liste des valeurs maxi de chaque évolution TBDES = 'TABLE' ; TBDES.'TITRE' = 'TABLE' ; K = 0 ; 'REPETER' BLOC1 NEVL ; * on boucle sur chaque entrée sélectionnée de la table J = &BLOC1 ; EV2 = TBR.I.'VALEUR' ; *-- grosse évolution finale à envoyer à DESSIN 'SI' ('EGA' J 1) ; evtot = ev2 ; 'SINON' ; evtot = EVTOT 'ET' EV2 ; 'FINSI' ; * minimum * maximum * type de trait * marque *-- remplissage table de dessin K = K + 1 ; K0 = K ; 'SI' (LREGU) ; motdes = 'CHAINE' motdes ' REGU' ; 'FINSI' ; * On n'écrit la légende qu'une fois. Pour cela, on inhibe * l'affichage d'une légende pour les sous-évolutions suivantes * Il faut en revanche spécifier les propriétés de tracer pour chaque sous-évolution TBDES.'TITRE'.K0 = 'CHAINE' TBR.I.'LEGEND1' ' ' TBR.I.'LEGEND2' ; 'SI' (NK > 1) ; 'REPETER' bclk (nk - 1) ; K = K + 1 ; 'FIN' bclk ; 'FINSI' ; * substitution avec les indices éventuellement existants de TBDES0 'SI' ('EXISTE' tbdes0) ; 'SI' ('EXISTE' tbdes0 'TITRE') ; 'SI' ('EXISTE' tbdes0.'TITRE' J) ; * ici aussi, on ne traite la légende qu'une seule fois TBDES.'TITRE'.K0 = 'CHAINE' TBDES0.'TITRE'.J TBDES .'TITRE'.K0 ; 'FINSI' ; 'FINSI' ; 'SI' ('EXISTE' tbdes0 J) ; 'REPETER' bclk nk ; * traitement de chaque sous-évolution i = k0 + &bclk - 1 ; TBDES.i = 'CHAINE' TBDES0.J ; 'FIN' bclk ; 'FINSI' ; 'FINSI' ; 'FIN' BLOC1 ; * Prise en compte de l'évolution supplémentaire éventuelle * -------------------------------------------------------- 'SI' ('EXISTE' EVOL2) ; * on concatène l'évolution evtot = evtot 'ET' evol2 ; 'SI' ('EXISTE' TBDES2) ; * de même pour la table de spécifs. 'SI' ('NEG' n 0) ; * les indices de TBDES2 ne sont pas nécessairement consécutifs tind2 = 'INDEX' tbdes2 ; 'REPETER' bcl5 n ; * comme le mot-clef 'TITRE' est aussi un opérateur, on * prend quelques précautions ind = 'CHAINE' tind2 . &bcl5 ; 'SINON' ; ind = tind2 . &bcl5 ; 'FINSI' ; 'SI' ('EGA' ind 'TITRE') ; * gestion des titres 'SI' ('NEG' nt 0) ; * les indices de TBDES2.'TITRE' ne sont pas nécessairement consécutifs tind2t = 'INDEX' (tbdes2.'TITRE') ; 'REPETER' bcl6 nt ; indt = tind2t . &bcl6 ; 'ERREUR' 'Les indices de la table' 'doivent etre ENTIERS.'; 'FINSI' ; l = i0 + indt ; tbdes.'TITRE'.l = tbdes2.'TITRE'.indt ; 'FIN' bcl6 ; 'FINSI' ; 'ITERER' bcl5 ; 'FINSI' ; 'ERREUR' 'Les indices de la table doivent etre ENTIERS.'; 'FINSI' ; j = i0 + ind ; tbdes.j = tbdes2.ind ; 'FIN' bcl5 ; 'FINSI' ; 'FINSI' ; 'FINSI' ; * Dessin : * -------- * construction de la commande 'DESSIN' EVTOT TBDES LOP.1 LOP.2 LOP.3 LOP.4 LOP.5 LOP.6 LOP.7 LOP.8 LOP.9 LOP.10 LOP.11 LOP.12 LOP.13 LOP.14 LOP.15 LOP.16 LOP.17 LOP.18 LOP.19 LOP.20 LOP.21 LOP.22 LOP.23 LOP.24 LOP.25 LOP.26 LOP.27 LOP.28 LOP.29 LOP.30 LOP.31 LOP.32 LOP.33 LOP.34 LOP.35 LOP.36 LOP.37 LOP.38 LOP.39 LOP.40 ; * Affichage d'un tableau avec les maxima et minima * ------------------------------------------------ * de toutes les évolutions concernées 'SI' LNTAB ; * 26 lignes par tableau (cause limitation espace de dessin). * Nombre de tableaux nécessaires : NBOUT = (NEVL + 25) / 26 ; I2 = 0 ; TL = 'TABLE' ; KL = 'TABLE' ; 'REPETER' BOUT NBOUT ; * on affiche les valeurs pour les courbes d'indice I1 à I2=I1+26 * TL : table des noms d'évolution * KL : table I1 = I2 + 1 ; * nommation de chaque ligne du tableau 'REPETER' BOUL 26 ; L = &BOUL ; J = I1 + L - 1 ; 'SI' (J '<EG' NEVL) ; KL.L = I ; 'SINON' ; * entrées bidons car la ligne de commande réclame 26 entrées KL.L = 1 ; 'FINSI' ; 'FIN' BOUL ; * évolution des valeurs à afficher (indice, mini, maxi) 'SI' (I2 > I1) ; 'SINON' ; 'FINSI' ; LLIIND = LI1 * 1. ; * On dessine le tableau, avec les valeurs mises en évolution * ainsi que le nombre de pages * sous-titre avec éventuel numéro de page 'SI' (NBOUT > 1) ; TTR2 = 'CHAINE' STTR ' ' ' ' 'page' ' ' ' ' &BOUT ' / ' NBOUT ; 'FINSI' ; ML 2 TL.1 ML 3 TL.2 ML 4 TL.3 ML 5 TL.4 ML 6 TL.5 ML 7 TL.6 ML 8 TL.7 ML 9 TL.8 ML 10 TL.9 ML 11 TL.10 ML 12 TL.11 ML 13 TL.12 ML 14 TL.13 ML 15 TL.14 ML 16 TL.15 ML 17 TL.16 ML 18 TL.17 ML 19 TL.18 ML 20 TL.19 ML 21 TL.20 ML 22 TL.21 ML 23 TL.22 ML 24 TL.23 ML 25 TL.24 ML 26 TL.25 ML 27 TL.26 ; 'FIN' BOUT ; 'FINSI' ; 'FINP';
© Cast3M 2003 - Tous droits réservés.
Mentions légales