Télécharger choi.eso

Retour à la liste

Numérotation des lignes :

choi
  1. C CHOI SOURCE PV090527 24/06/14 21:15:01 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.  
  106. C Etat initial des cases a cocher :
  107. choi2 = ' '
  108. C La premiere case
  109. choi2(1:lcase) = 'Ok '
  110. C Les autres cases correspondent aux logiques
  111. DO i = 1, nbr
  112. j = i * lcase
  113. if (vale(i)) then
  114. choi2(j+1:j+lcase) = oui//' '//choix(i)(1:llong)
  115. else
  116. choi2(j+1:j+lcase) = non//' '//choix(i)(1:llong)
  117. endif
  118. ENDDO
  119.  
  120. ncou = 16
  121. CALL TRINIT(25,DIOCAD,DIOCAD,TITREE,0.15,.TRUE.,ncou)
  122. CALL TRCLIK(1)
  123.  
  124. C Boucle d'analyse des cochages/decochages de cases :
  125. 30 CONTINUE
  126. CALL MENU(choi2,ncase,lcase)
  127. CALL TRMESS(messag(1:lmes))
  128. icle = 0
  129. CALL TRAFF(icle)
  130. irep = icle+1
  131. if (irep.eq.1) GOTO 50
  132. i = irep - 1
  133. vale(i) = .NOT. vale(i)
  134. j = i * lcase
  135. if (vale(i)) then
  136. choi2(j+1:j+3) = oui
  137. else
  138. choi2(j+1:j+3) = non
  139. endif
  140. GOTO 30
  141.  
  142. 50 CONTINUE
  143.  
  144. C Recopie des valeurs :
  145. DO i = nblu, 1, -1
  146. CALL ECRLOG(vale(ipla(i)))
  147. ENDDO
  148.  
  149. C Menage des segments de travail :
  150. IF (mtable.NE.0) THEN
  151. SEGSUP,mtable,kevoll,mevoll,mlree1,mlree2
  152. ENDIF
  153.  
  154. c RETURN
  155. END
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  

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