1 : * DESTRA PROCEDUR MAUGIS 07/10/26 21:15:30 5840 2 : ********************************************************************** 3 : 'DEBPROC' DESTRA TBR*'TABLE' TBDES0/'TABLE' 4 : EVOL2/'EVOLUTIO' TBDES2/'TABLE' ; 5 : * MT1/'MOT' LT1/'MOT' MT2/'MOT' LT2/'MOT' MT3/'MOT' 6 : * LT3/'MOT' MT4/'MOT' XBOR1/'FLOTTANT' XBOR2/'FLOTTANT' MT5/'MOT' 7 : * YBOR1/'FLOTTANT' YBOR2/'FLOTTANT' MT6/'MOT' 8 : * MT7 N1/'ENTIER' (N2/'ENTIER' ...) LENTI1/'LISTENTI' MT7/'MOT' 9 : * MOT#/'MOT' ; 10 : 11 : ************************************************************************ 12 : * 13 : * Trace les évolutions contenues dans la table TBR 14 : * construites par TRACHIS ou TRACHIT 15 : * 16 : ************************************************************************ 17 : * 18 : * Entrée : 19 : * -------- 20 : * 21 : * TBR : table des évolutions (Cf. TRACHIS ou TRACHIT) 22 : * indicée par des entiers, puis par VALEUR, LEGEND1, LEGEND2 23 : * 24 : * TBDES0 : table de spécifications de tracer (optionnelle, Cf. DESS) 25 : * Ses indices compléteront (titre) ou remplaceront (chaîne 26 : * de tracer) le remplissage automatique. 27 : * Elle est indicée par les mêmes indices que la table, 28 : * ce qui permet de gérer tranquillou les évolutions complexes. 29 : * 30 : * EVOL2 : évolution supplémentaire éventuelle à superposer, avec 31 : * 32 : * TBDES2 : sa table de spécifications de tracer (optionnelle, Cf. DESS) 33 : * indicée de façon standard (suivant les sous-évolutions) 34 : * 35 : * MOT# : mot, option simple de dessin : 36 : * 'LOGX' 'LOGY' 'GRIL' 'MIMA' 'DATE' 'LOGO' 'SEPA' 37 : * 'AXES' 'NCLK' 38 : * les options 'CARR', 'LEGE' étant choisie par défaut 39 : * 40 : * MT1 MT2 MT3 : mots-clefs 'TITR' 'TITX' 'TITY' suivis de 41 : * LT1 LT2 LT3 : chaînes de caractères correspondantes 42 : * 43 : * MT4 MT5 : mots-clefs 'XBOR' 'YBOR' suivis respectivement de 44 : * XBOR1 XBOR2 45 : * YBOR1 YBOR2 : FLOTTANTS valant les bornes d'abscisse et 46 : * d'ordonnée respectivement 47 : * 48 : * MT6 : mot-clef 'TABMIMA' pour afficher en tablature les extrema 49 : * des évolutions. 50 : * 51 : * MT7 : mot-clef 'CHOI' (ou 'CHOIX') pour sélectionner les 52 : * entrées de TBR à tracer (défaut = toutes), suivi de 53 : * N1 N2...: indice de TBR à tracer OU 54 : * LENTI1 : LISTENTI des indices de TBR 55 : * 56 : ************************************************************************ 57 : * 58 : * Remarques 59 : * --------- 60 : * 61 : * La table doit être donnée en premier ; 62 : * les autres options avec mot clef viennent ensuite dans un ordre 63 : * quelconque. 64 : * 65 : ************************************************************************ 66 : * 67 : * NEVL : nombre de courbes à tracer 68 : * 69 : ************************************************************************ 70 : * 71 : * Auteur : Françoise Auriol (TTMF) 1998 72 : * 73 : * ----------------------- 74 : * 75 : * Modifié : P. Maugis (LSCE) le 07/08/2007 : 76 : * - introduction de TBDES0 77 : * - prise en compte d'évolutions complexes 78 : * 79 : ************************************************************************ 80 : 81 : * Récupération des options de dessin 82 : * ---------------------------------- 83 : * et construction de la table des options 84 : 85 : *--Valeurs par défaut : 86 : LNTAB = FAUX ; 87 : TTR = 'GIBI FECIT' ; 88 : LREGU = FAUX ; 89 : 90 : * table des options LOP 91 : LOP = 'TABLE' ; 92 : 93 : * On va afficher les légendes 94 : LOP.1 = 'MOT' 'LEGE' ; 95 : IOP = 2 ; 96 : 97 : * On lit une par une les données précisées par des mots-clefs 98 : 'REPETER' bcl ; 99 : 'ARGUMENT' mot1/'MOT' ; 100 : 'SI' ('NON' ('EXISTE' MOT1)) ; 101 : 'QUITTER' bcl ; 102 : 'FINSI' ; 103 : 104 : * options simples de DESSIN 105 : 'SI' ( ('EGA' MOT1 'LOGX') 'OU' ('EGA' MOT1 'LOGY') 106 : 'OU' ('EGA' MOT1 'GRIL') 'OU' ('EGA' MOT1 'MIMA') 107 : 'OU' ('EGA' MOT1 'DATE') 'OU' ('EGA' MOT1 'LOGO') 108 : 'OU' ('EGA' MOT1 'SEPA') 'OU' ('EGA' MOT1 'AXES') 109 : 'OU' ('EGA' MOT1 'NCLK') ) ; 110 : LOP.IOP = 'MOT' MOT1 ; 111 : IOP = IOP + 1 ; 112 : 'ITERER' bcl ; 113 : 'FINSI' ; 114 : 115 : * options avec arguments ou spécifiques 116 : 'SI' (('EGA' MOT1 'TITR') 'OU' ('EGA' MOT1 'TITRE')) ; 117 : 'ARGUMENT' TTR*'MOT' ; 118 : LOP.IOP = 'MOT' 'TITR' ; 119 : LOP.(IOP+1) = 'MOT' TTR ; 120 : IOP = IOP + 2 ; 121 : 'ITERER' bcl ; 122 : 'FINSI' ; 123 : 'SI' ('EGA' MOT1 'TITX') ; 124 : 'ARGUMENT' TTX*'MOT' ; 125 : LOP.IOP = 'MOT' 'TITX' ; 126 : LOP.(IOP+1) = 'MOT' TTX ; 127 : IOP = IOP + 2 ; 128 : 'ITERER' bcl ; 129 : 'FINSI' ; 130 : 'SI' ('EGA' MOT1 'TITY') ; 131 : 'ARGUMENT' TTY*'MOT' ; 132 : LOP.IOP = 'MOT' 'TITY' ; 133 : LOP.(IOP+1) = 'MOT' TTY ; 134 : IOP = IOP + 2 ; 135 : 'ITERER' bcl ; 136 : 'FINSI' ; 137 : 'SI' ('EGA' MOT1 'XBOR') ; 138 : 'ARGUMENT' XBOR1*'FLOTTANT' XBOR2*'FLOTTANT' ; 139 : LOP.IOP = 'MOT' 'XBOR' ; 140 : LOP.(IOP+1) = 'MINIMUM' ('PROG' XBOR1 XBOR2) ; 141 : LOP.(IOP+2) = 'MAXIMUM' ('PROG' XBOR1 XBOR2) ; 142 : IOP = IOP + 3 ; 143 : 'ITERER' bcl ; 144 : 'FINSI' ; 145 : 'SI' ('EGA' MOT1 'YBOR') ; 146 : 'ARGUMENT' YBOR1*'FLOTTANT' YBOR2*'FLOTTANT' ; 147 : LOP.IOP = 'MOT' 'YBOR' ; 148 : LOP.(IOP+1) = 'MINIMUM' ('PROG' YBOR1 YBOR2) ; 149 : LOP.(IOP+2) = 'MAXIMUM' ('PROG' YBOR1 YBOR2) ; 150 : IOP = IOP + 3 ; 151 : 'ITERER' bcl ; 152 : 'FINSI' ; 153 : 'SI' ('EGA' MOT1 'TABMIMA') ; 154 : LNTAB = vrai ; 155 : 'ITERER' bcl ; 156 : 'FINSI' ; 157 : 'SI' (('EGA' MOT1 'CHOI') 'OU' ('EGA' MOT1 'CHOIX')) ; 158 : * cette lecture suppose qu'aucun autre mot-clef ne demande 159 : * d'entier ni de LISTENTI en entrée 160 : * cette option n'est pas transmise à DESSIN car il y aura 161 : * restriction aux sous-évolutions concernées. 162 : 'ARGUMENT' I/'ENTIER' LIEVL/'LISTENTI' ; 163 : 'SI' (( ('EXISTE' I) 'ET' ('EXISTE' lievl)) 'OU' 164 : (('NON' ('EXISTE' I)) 'ET' ('NON' ('EXISTE' lievl)))) ; 165 : 'ERREUR' 'Fournir des entiers ou une liste d entiers' ; 166 : 'FINSI' ; 167 : 'SI' ('EXISTE' lievl) ; 168 : * donnée d'une liste. Rien à faire 169 : 'FINSI' ; 170 : 'SI' ('EXISTE' I) ; 171 : * donnée d'un entier, boucle sur les suivants éventuels 172 : LIEVL = 'LECT' I ; 173 : 'REPETER' bcl1 ; 174 : 'ARGUMENT' I/'ENTIER' ; 175 : 'SI' ('NON' ('EXISTE' I)) ; 176 : 'QUITTER' bcl1 ; 177 : 'SINON' ; 178 : LIEVL = LIEVL 'ET' ('LECT' I) ; 179 : 'FINSI' ; 180 : 'FIN' bcl1 ; 181 : 'FINSI' ; 182 : NEVL = 'DIME' LIEVL ; 183 : 'ITERER' bcl ; 184 : 'FINSI' ; 185 : 'SI' ('EGA' MOT1 'REGU') ; 186 : LREGU = vrai ; 187 : 'ITERER' bcl ; 188 : 'FINSI' ; 189 : 190 : * donnée non identifiée 191 : 'ERREUR' ('CHAINE' 'Dans les donnees de DESTRA, mot-clef ' 192 : mot1 ' inconnu.'); 193 : 'FIN' bcl ; 194 : 195 : * on complète les d'options jusqu'au nb maximal par des LEGE 196 : NOP = IOP - 1 ; 197 : NOPMAX = 40 ; 198 : 'SI' (NOP < NOPMAX) ; 199 : NB2 = NOPMAX - NOP ; 200 : 'REPETER' BLOC4 NB2 ; 201 : LOP.IOP = 'MOT' 'LEGE' ; 202 : IOP = IOP + 1 ; 203 : 'FIN' BLOC4 ; 204 : 'FINSI' ; 205 : 206 : * on prend toutes les sous-évolutions si pas de contre-ordre 207 : 'SI' ('NEG' ('TYPE' LIEVL) 'LISTENTI') ; 208 : NEVL = 'DIME' TBR ; 209 : LIEVL = 'LECT' 1 'PAS' 1 NEVL ; 210 : 'FINSI' ; 211 : 212 : * liste des types de tirets : 213 : * --------------------------- 214 : litir = 'MOTS' ' ' 'TIRL' 'TIRR' 'TIRC' 'TIRM' ; 215 : ntir = 'DIME' litir ; 216 : 217 : * liste des types de marqueurs : 218 : * ------------------------------ 219 : limarq = 'MOTS' 'CROI' 'ETOI' 'PLUS' 'CARR' 'LOSA' 'TRIU' 'TRID' 220 : 'TRIL' 'TRIR' 'ROND' 'MOIN' 'BARR' ; 221 : nmarq = 'DIME' limarq ; 222 : 223 : * Constructions préliminaires : 224 : * ----------------------------- 225 : * TBDES : table décrivant la nature des traits et marqueurs 226 : * K : indice dans TBDES des informations concernant la sous-évolution K, 227 : * permet de gérer les évolutions complexes 228 : * LIMIN : liste des valeurs mini de chaque évolution 229 : * LIMAX : liste des valeurs maxi de chaque évolution 230 : 231 : TBDES = 'TABLE' ; 232 : TBDES.'TITRE' = 'TABLE' ; 233 : LIMIN = 'PROG' ; 234 : LIMAX = 'PROG' ; 235 : K = 0 ; 236 : 'REPETER' BLOC1 NEVL ; 237 : * on boucle sur chaque entrée sélectionnée de la table 238 : J = &BLOC1 ; 239 : I = 'EXTR' LIEVL J ; 240 : EV2 = TBR.I.'VALEUR' ; 241 : 242 : *-- grosse évolution finale à envoyer à DESSIN 243 : 'SI' ('EGA' J 1) ; 244 : evtot = ev2 ; 245 : 'SINON' ; 246 : evtot = EVTOT 'ET' EV2 ; 247 : 'FINSI' ; 248 : 249 : VV = 'EXTR' EV2 'ORDO' ; 250 : * minimum 251 : LIMIN = LIMIN 'ET' ('PROG' ('MINI' VV)) ; 252 : * maximum 253 : LIMAX = LIMAX 'ET' ('PROG' ('MAXI' VV)) ; 254 : 255 : * type de trait 256 : ITIR = (@MOD ((I - 1) / nmarq) ntir) + 1 ; 257 : * marque 258 : IMAR = (@MOD (I - 1) nmarq) + 1 ; 259 : 260 : *-- remplissage table de dessin 261 : NK = 'DIME' ev2 ; 262 : K = K + 1 ; 263 : K0 = K ; 264 : 265 : motdes = 'CHAINE' ('EXTR' litir ITIR) 266 : ' MARQ ' ('EXTR' limarq IMAR) ; 267 : 'SI' (LREGU) ; 268 : motdes = 'CHAINE' motdes ' REGU' ; 269 : 'FINSI' ; 270 : TBDES.K0 = 'MOT' motdes ; 271 : 272 : * On n'écrit la légende qu'une fois. Pour cela, on inhibe 273 : * l'affichage d'une légende pour les sous-évolutions suivantes 274 : * Il faut en revanche spécifier les propriétés de tracer pour chaque sous-évolution 275 : TBDES.'TITRE'.K0 = 'CHAINE' TBR.I.'LEGEND1' ' ' TBR.I.'LEGEND2' ; 276 : 'SI' (NK > 1) ; 277 : 'REPETER' bclk (nk - 1) ; 278 : K = K + 1 ; 279 : TBDES.K = 'MOT' motdes ; 280 : TBDES.'TITRE'.K = 'MOT' 'PAS DE LEGENDE' ; 281 : 'FIN' bclk ; 282 : 'FINSI' ; 283 : 284 : * substitution avec les indices éventuellement existants de TBDES0 285 : 'SI' ('EXISTE' tbdes0) ; 286 : 'SI' ('EXISTE' tbdes0 'TITRE') ; 287 : 'SI' ('EXISTE' tbdes0.'TITRE' J) ; 288 : * ici aussi, on ne traite la légende qu'une seule fois 289 : TBDES.'TITRE'.K0 = 'CHAINE' TBDES0.'TITRE'.J 290 : TBDES .'TITRE'.K0 ; 291 : 'FINSI' ; 292 : 'FINSI' ; 293 : 'SI' ('EXISTE' tbdes0 J) ; 294 : 'REPETER' bclk nk ; 295 : * traitement de chaque sous-évolution 296 : i = k0 + &bclk - 1 ; 297 : TBDES.i = 'CHAINE' TBDES0.J ; 298 : 'FIN' bclk ; 299 : 'FINSI' ; 300 : 'FINSI' ; 301 : 'FIN' BLOC1 ; 302 : 303 : * Prise en compte de l'évolution supplémentaire éventuelle 304 : * -------------------------------------------------------- 305 : 'SI' ('EXISTE' EVOL2) ; 306 : * on concatène l'évolution 307 : i0 = 'DIME' evtot ; 308 : evtot = evtot 'ET' evol2 ; 309 : 'SI' ('EXISTE' TBDES2) ; 310 : * de même pour la table de spécifs. 311 : n = 'DIME' tbdes2 ; 312 : 'SI' ('NEG' n 0) ; 313 : * les indices de TBDES2 ne sont pas nécessairement consécutifs 314 : tind2 = 'INDEX' tbdes2 ; 315 : 'REPETER' bcl5 n ; 316 : * comme le mot-clef 'TITRE' est aussi un opérateur, on 317 : * prend quelques précautions 318 : 'SI' ('EGA' ('TYPE' tind2 . &bcl5) 'MOT') ; 319 : ind = 'CHAINE' tind2 . &bcl5 ; 320 : 'SINON' ; 321 : ind = tind2 . &bcl5 ; 322 : 'FINSI' ; 323 : 'SI' ('EGA' ind 'TITRE') ; 324 : * gestion des titres 325 : nt = 'DIME' (tbdes2.'TITRE') ; 326 : 'SI' ('NEG' nt 0) ; 327 : * les indices de TBDES2.'TITRE' ne sont pas nécessairement consécutifs 328 : tind2t = 'INDEX' (tbdes2.'TITRE') ; 329 : 'REPETER' bcl6 nt ; 330 : indt = tind2t . &bcl6 ; 331 : 'SI' ('NEG' ('TYPE' indt) 'ENTIER') ; 332 : 'ERREUR' 'Les indices de la table' 333 : 'doivent etre ENTIERS.'; 334 : 'FINSI' ; 335 : l = i0 + indt ; 336 : tbdes.'TITRE'.l = tbdes2.'TITRE'.indt ; 337 : 'FIN' bcl6 ; 338 : 'FINSI' ; 339 : 'ITERER' bcl5 ; 340 : 'FINSI' ; 341 : 'SI' ('NEG' ('TYPE' ind) 'ENTIER') ; 342 : 'ERREUR' 343 : 'Les indices de la table doivent etre ENTIERS.'; 344 : 'FINSI' ; 345 : j = i0 + ind ; 346 : tbdes.j = tbdes2.ind ; 347 : 'FIN' bcl5 ; 348 : 'FINSI' ; 349 : 'FINSI' ; 350 : 'FINSI' ; 351 : 352 : * Dessin : 353 : * -------- 354 : * construction de la commande 355 : 'DESSIN' EVTOT TBDES 356 : LOP.1 LOP.2 LOP.3 LOP.4 LOP.5 LOP.6 LOP.7 LOP.8 357 : LOP.9 LOP.10 LOP.11 LOP.12 LOP.13 LOP.14 LOP.15 LOP.16 358 : LOP.17 LOP.18 LOP.19 LOP.20 LOP.21 LOP.22 LOP.23 LOP.24 359 : LOP.25 LOP.26 LOP.27 LOP.28 LOP.29 LOP.30 LOP.31 LOP.32 360 : LOP.33 LOP.34 LOP.35 LOP.36 LOP.37 LOP.38 LOP.39 LOP.40 ; 361 : 362 : * Affichage d'un tableau avec les maxima et minima 363 : * ------------------------------------------------ 364 : * de toutes les évolutions concernées 365 : 'SI' LNTAB ; 366 : STTR = 'MOT' TBR. 1 .'LEGEND1' ; 367 : 368 : * 26 lignes par tableau (cause limitation espace de dessin). 369 : * Nombre de tableaux nécessaires : 370 : NBOUT = (NEVL + 25) / 26 ; 371 : 372 : I2 = 0 ; 373 : TL = 'TABLE' ; 374 : KL = 'TABLE' ; 375 : 'REPETER' BOUT NBOUT ; 376 : * on affiche les valeurs pour les courbes d'indice I1 à I2=I1+26 377 : * TL : table des noms d'évolution 378 : * KL : table 379 : I1 = I2 + 1 ; 380 : I2 = 'MINIMUM' ('LECT' (I1 + 25) NEVL) ; 381 : * nommation de chaque ligne du tableau 382 : 'REPETER' BOUL 26 ; 383 : L = &BOUL ; 384 : J = I1 + L - 1 ; 385 : 'SI' (J '<EG' NEVL) ; 386 : I = 'EXTR' LIEVL J ; 387 : KL.L = I ; 388 : TL.L = 'MOT' TBR.I.'LEGEND2' ; 389 : 'SINON' ; 390 : * entrées bidons car la ligne de commande réclame 26 entrées 391 : KL.L = 1 ; 392 : TL.L = 'MOT' 'PIPO' ; 393 : 'FINSI' ; 394 : 'FIN' BOUL ; 395 : 396 : * évolution des valeurs à afficher (indice, mini, maxi) 397 : 'SI' (I2 > I1) ; 398 : LI1 = 'LECT' I1 'PAS' 1 I2 ; 399 : 'SINON' ; 400 : LI1 = 'LECT' I1 ; 401 : 'FINSI' ; 402 : LLIIND = LI1 * 1. ; 403 : LLIMIN = 'EXTR' LIMIN LI1 ; 404 : LLIMAX = 'EXTR' LIMAX LI1 ; 405 : 406 : * On dessine le tableau, avec les valeurs mises en évolution 407 : * ainsi que le nombre de pages 408 : EVM1 = 'EVOL' 'MANU' 'ABS' LLIIND LLIMIN ; 409 : EVM2 = 'EVOL' 'MANU' 'ABS' LLIIND LLIMAX ; 410 : 411 : * sous-titre avec éventuel numéro de page 412 : TTR2 = 'MOT' STTR ; 413 : 'SI' (NBOUT > 1) ; 414 : TTR2 = 'CHAINE' STTR ' page ' &BOUT ' / ' NBOUT ; 415 : 'FINSI' ; 416 : 417 : ML = 'MOT' 'TLIG' ; 418 : 'NTAB' (EVM1 'ET' EVM2)'NOPAGE' 'LIGCOU' 5 'TITCOU' 4 'COLCOU' 6 419 : 'NODATE' 'TCOL' 2 'MINI' 'TCOL' 3 'MAXI' 'TITR' TTR 'STITR' TTR2 420 : 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 421 : TL.7 ML 9 TL.8 ML 10 TL.9 ML 11 TL.10 ML 12 TL.11 ML 13 TL.12 422 : ML 14 TL.13 ML 15 TL.14 ML 16 TL.15 ML 17 TL.16 ML 18 TL.17 ML 423 : 19 TL.18 ML 20 TL.19 ML 21 TL.20 ML 22 TL.21 ML 23 TL.22 ML 24 424 : TL.23 ML 25 TL.24 ML 26 TL.25 ML 27 TL.26 ; 425 : 426 : 427 : 'FIN' BOUT ; 428 : 'FINSI' ; 429 : 430 : 'FINP'; 431 : 432 : 433 : 434 :
© Cast3M 2003 - All rights reserved.
Disclaimer