Télécharger choi.eso

Retour à la liste

Numérotation des lignes :

choi
  1. C CHOI SOURCE OF166741 24/01/09 21:15:05 9733
  2.  
  3. C positionnement d'un ensemble de flags
  4.  
  5. SUBROUTINE CHOI
  6.  
  7. IMPLICIT INTEGER(I-N)
  8. IMPLICIT REAL*8(A-H,O-Z)
  9. -INC PPARAM
  10. -INC CCOPTIO
  11. -INC CCNOYAU
  12.  
  13. -INC SMLREEL
  14. -INC SMEVOLL
  15. -INC SMTABLE
  16.  
  17. EXTERNAL LONG
  18.  
  19. character*(LOCHAI) choi2, messag, mesdes
  20. character*(LONOM) nomlog
  21. character*(3) oui,non
  22. character*(16) char_z
  23. character*(8) typobj
  24.  
  25. PARAMETER (nlogm = 40)
  26. integer ipla(nlogm)
  27. character*(LONOM) choix(nlogm)
  28. logical vale(nlogm)
  29. logical b_z
  30.  
  31. C Quelques initialisations :
  32. oui = '(X)'
  33. non = '( )'
  34.  
  35. DO i = 1, nlogm
  36. vale(i) = .false.
  37. choix(i) = ' '
  38. ENDDO
  39.  
  40. mtable = 0
  41. mevoll = 0
  42. kevoll = 0
  43. mlree1 = 0
  44. mlree2 = 0
  45.  
  46. C Lecture du MESSAGE (CHAINE) :
  47. CALL LIRCHA(messag,1,iretou)
  48. if (ierr.ne.0) return
  49. ldes = iretou
  50. if (iretou.eq.0) messag = 'CHOIx :'
  51. lmes = LONG(messag)
  52.  
  53. if (lmes.gt.72) then
  54. write(ioimp,*) 'Message trop long (max. 72)'
  55. call erreur(21)
  56. return
  57. endif
  58.  
  59. C Recuperation des noms a proposer (erreur en cas de doublon ?)
  60. nblu = 0
  61. nbr = 0
  62. llong = 8
  63. DO i = 1, nlogm
  64. call lirlog(b_z,0,iretou)
  65. if (ierr.ne.0) return
  66. if (iretou.eq.0) goto 11
  67. nomlog = ' '
  68. call quenom(nomlog)
  69. if (ierr.ne.0) return
  70. nblu = nblu + 1
  71. CALL PLACE(choix,nbr,irep,nomlog)
  72. IF (irep.EQ.0) THEN
  73. nbr = nbr + 1
  74. choix(nbr) = nomlog
  75. vale(nbr) = b_z
  76. ipla(nblu) = nbr
  77. ELSE
  78. c* write(ioimp,*) 'Logique "',nomlog(1:LONG(nomlog)),
  79. c* & '" deja fourni !',irep
  80. c* call erreur(21)
  81. c* return
  82. ipla(nblu) = irep
  83. ENDIF
  84. llong = MAX(llong,LONG(nomlog))
  85. ENDDO
  86. 11 continue
  87. if (nbr.eq.0) then
  88. write(ioimp,*) 'Manque des arguments logiques !'
  89. call erreur(21)
  90. return
  91. endif
  92. * lcase = Taille de la case : "(*) nomvariable_de_8_a_LONOM_caracteres"
  93. ncase = nbr + 1
  94. lcase = 4 + llong
  95. if (ncase*lcase.gt.LOCHAI) then
  96. write(ioimp,*) 'Trop de logiques/Noms trop longs'
  97. call erreur(21)
  98. return
  99. endif
  100.  
  101. C Operateur utile en trace interactif ('TRAC' 'X ' ou 'OPEN')
  102. C Pour les autres modes, on prend les valeurs telles que fournies.
  103. IF (IOGRA.NE.2 .AND. IOGRA.NE.6) GOTO 50
  104.  
  105. C Trace vide (avec messag = chaine lue par operateur CHOI) :
  106. C* ev_z = 'EVOL' 'MANU' ('PROG' 0.1) ('PROG' 0.5) ;
  107. C* tab_z = 'TABLE' ; tab_z. 1 = 'MOT' 'NOLI LABEL Operateur_CHOI_:_messag' ;
  108. C* 'DESSIN' ev_z 'XBOR' 0. 1. 'YBOR' 0. 1. 'XGRA' 1. 'YGRA' 1. 'NCLK' tab_z ;
  109. jg = 1
  110. SEGINI,mlree1,mlree2
  111. mlree1.prog(1) = 0.1
  112. mlree2.prog(1) = 0.5
  113. SEGINI,kevoll
  114. kevoll.iprogx = mlree1
  115. kevoll.iprogy = mlree2
  116. kevoll.numevx = 0
  117. kevoll.numevy = 'REEL'
  118. kevoll.typx = 'LISTREEL'
  119. kevoll.typy = 'LISTREEL'
  120. kevoll.nomevx = ' '
  121. kevoll.nomevy = ' '
  122. kevoll.kevtex = ' '
  123. n=1
  124. SEGINI,mevoll
  125. mevoll.ityevo='REEL'
  126. mevoll.ievtex=' '
  127. mevoll.ievtex(1:lmes)=messag(1:lmes)
  128. mevoll.ievoll(1)=kevoll
  129. mesdes = ' '
  130. mesdes(1:27) = 'NOLI LABEL Operateur_CHOI_:'
  131. IF (ldes.GT.0) THEN
  132. mesdes(28:28) = '_'
  133. i_z = LOCHAI-28
  134. if (ldes.gt.i_z) then
  135. mesdes(28+1:28+i_z) = messag(1:i_z)
  136. mesdes(28+1:28+i_z) = messag(1:i_z)
  137. mesdes(28+1+i_z-3:28+i_z) = '...'
  138. else
  139. mesdes(28+1:28+ldes) = messag(1:ldes)
  140. endif
  141. DO i = 28+1, 28+ldes
  142. if (mesdes(i:i).eq.' ') mesdes(i:i) = '_'
  143. ENDDO
  144. ENDIF
  145. ldes = LONG(mesdes)
  146. m=1
  147. SEGINI,mtable
  148. i_z = 0
  149. b_z = .FALSE.
  150. r_z = 0.D0
  151. char_z = 'ENTIER '
  152. typobj = 'MOT '
  153. CALL ECCTAB(mtable,char_z(1:8),m ,r_z,char_z ,b_z,i_z,
  154. & typobj ,i_z,r_z,mesdes(1:ldes),b_z,i_z)
  155. if (ierr.ne.0) return
  156. typobj = 'TABLE '
  157. CALL ECROBJ(typobj,mtable)
  158. char_z = 'NCLK '
  159. CALL ECRCHA(char_z(1:4))
  160. r_z = 1.D0
  161. CALL ECRREE(r_z)
  162. char_z = 'YGRA '
  163. call ECRCHA(char_z(1:4))
  164. r_z = 1.D0
  165. CALL ECRREE(r_z)
  166. char_z = 'XGRA '
  167. call ECRCHA(char_z(1:4))
  168. r_z = 1.D0
  169. CALL ECRREE(r_z)
  170. r_z = 0.D0
  171. CALL ECRREE(r_z)
  172. char_z = 'YBOR '
  173. call ECRCHA(char_z(1:4))
  174. r_z = 1.D0
  175. CALL ECRREE(r_z)
  176. r_z = 0.D0
  177. CALL ECRREE(r_z)
  178. char_z = 'XBOR '
  179. call ECRCHA(char_z(1:4))
  180. typobj = 'EVOLUTIO'
  181. CALL ECROBJ(typobj,mevoll)
  182. if (ierr.ne.0) return
  183. CALL DESSIN
  184. if (ierr.ne.0) return
  185.  
  186. C Etat initial des cases a cocher :
  187. choi2 = ' '
  188. C La premiere case
  189. choi2(1:lcase) = 'Ok '
  190. C Les autres cases correspondent aux logiques
  191. DO i = 1, nbr
  192. j = i * lcase
  193. if (vale(i)) then
  194. choi2(j+1:j+lcase) = oui//' '//choix(i)(1:llong)
  195. else
  196. choi2(j+1:j+lcase) = non//' '//choix(i)(1:llong)
  197. endif
  198. ENDDO
  199.  
  200. ncou = 16
  201. CALL TRINIT(25,DIOCAD,DIOCAD,TITREE,0.15,.TRUE.,ncou)
  202. CALL TRCLIK(1)
  203.  
  204. C Boucle d'analyse des cochages/decochages de cases :
  205. 30 CONTINUE
  206. CALL MENU(choi2,ncase,lcase)
  207. CALL TRMESS(messag(1:lmes))
  208. icle = 0
  209. CALL TRAFF(icle)
  210. irep = icle+1
  211. if (irep.eq.1) GOTO 50
  212. i = irep - 1
  213. vale(i) = .NOT. vale(i)
  214. j = i * lcase
  215. if (vale(i)) then
  216. choi2(j+1:j+3) = oui
  217. else
  218. choi2(j+1:j+3) = non
  219. endif
  220. GOTO 30
  221.  
  222. 50 CONTINUE
  223.  
  224. C Recopie des valeurs :
  225. DO i = nblu, 1, -1
  226. CALL ECRLOG(vale(ipla(i)))
  227. ENDDO
  228.  
  229. C Menage des segments de travail :
  230. IF (mtable.NE.0) THEN
  231. SEGSUP,mtable,kevoll,mevoll,mlree1,mlree2
  232. ENDIF
  233.  
  234. c RETURN
  235. END
  236.  
  237.  
  238.  

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