Télécharger destra.procedur

Retour à la liste

Numérotation des lignes :

  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 '&lt;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.  
  435.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales