Télécharger ega.eso

Retour à la liste

Numérotation des lignes :

ega
  1. C EGA SOURCE CB215821 25/04/22 21:15:04 12245
  2. SUBROUTINE EGA
  3.  
  4. IMPLICIT INTEGER(I-N)
  5. IMPLICIT REAL*8(A-H,O-Z)
  6.  
  7. -INC PPARAM
  8. -INC CCOPTIO
  9. -INC CCREEL
  10.  
  11. -INC SMLENTI
  12. -INC SMTEXTE
  13.  
  14. EXTERNAL LONG
  15. CHARACTER*(8) ITTEMP,ITTEM2
  16. CHARACTER*(LOCHAI) CHAR1,CHAR2
  17. LOGICAL IRET,BOOL,BOOL1
  18. INTEGER I1,I2
  19. REAL*8 EPS1,X1,X2,XVAL
  20. C
  21. C TEST SUR LES TEXTES
  22. C
  23. CALL QUETYP(ITTEMP,0,IRETOU)
  24. MOTERR(1:8)=ITTEMP
  25. IF(IRETOU.EQ.0) THEN
  26. CALL ERREUR( 533)
  27. RETURN
  28. ENDIF
  29. IF(ITTEMP.EQ.'TEXTE ') GOTO 300
  30. IF(ITTEMP.EQ.'LOGIQUE ') GOTO 310
  31. IF(ITTEMP.EQ.'LISTENTI') GOTO 330
  32. IF(ITTEMP.EQ.'ENTIER ') GOTO 340
  33. IF(ITTEMP.EQ.'MOT ') GOTO 350
  34. IF(ITTEMP.EQ.'FLOTTANT') GOTO 360
  35.  
  36. * Comparaison des 2 pointeurs des objets
  37. iret=.true.
  38. ittemp=' '
  39. ittem2=' '
  40. call lirobj(ittemp,iv1,1,iretou)
  41. call lirobj(ittem2,iv2,1,iretou)
  42. IF(ierr.ne.0) return
  43.  
  44. C Le test des TYPES semble inutile... (plus Comparaison de chaines un poil lent)
  45. C IF(ittemp.ne.ittem2) then
  46. C iret=.false.
  47. C goto 100
  48. C ENDIF
  49.  
  50. IF(iv1 .ne. iv2) then
  51. C Cas des POINTEURS differents
  52. iret=.false.
  53. goto 100
  54.  
  55. else
  56. C Cas des POINTEURS egaux : teste l'horodatage (ENTRY dans GEMAT)
  57. call oooho1(iv1,ih_1)
  58. call oooho1(iv2,ih_2)
  59. IF(ih_1 .ne. ih_2) then
  60. iret=.false.
  61. goto 100
  62. endif
  63. endif
  64. GOTO 100
  65.  
  66. 300 CONTINUE
  67. C TEST SUR TEXTE
  68. IRET=.FALSE.
  69. CALL LIROBJ(ITTEMP,ITEX1,0,IRETOU)
  70. CALL LIROBJ(ITTEMP,ITEX2,0,IRETOU)
  71. IF(IERR.NE.0) RETURN
  72. IF(IRETOU.EQ.1) THEN
  73. MTEXTE=ITEX1
  74. MTEXT1=ITEX2
  75. SEGACT MTEXTE,MTEXT1
  76. NCA1=NCART
  77. NCA2=MTEXT1.NCART
  78. IF(NCA1.NE.NCA2) GOTO 221
  79. DO I=1,NCA1
  80. IF(MTEXT(I:I).NE.MTEXT1.MTEXT(I:I)) GOTO 221
  81. ENDDO
  82. IRET=.TRUE.
  83. 221 SEGDES MTEXTE,MTEXT1
  84. ELSE
  85. ITTEMP=' '
  86. CALL LIROBJ(ITTEMP,KIKI,0,IRETOU)
  87. IF(IRETOU.EQ.0) GOTO 5000
  88. ENDIF
  89. GOTO 100
  90.  
  91. 310 CONTINUE
  92. C TEST SUR BOOLEENS
  93. IRET=.FALSE.
  94. CALL LIRLOG(BOOL ,1,IRETOU)
  95. CALL LIRLOG(BOOL1,0,IRETOU)
  96. IF(IERR.NE.0) RETURN
  97. IF(IRETOU.EQ.1) THEN
  98. IRET= BOOL.EQV.BOOL1
  99. ELSE
  100. ITTEMP=' '
  101. CALL LIROBJ( ITTEMP,KIKI,0,IRETOU)
  102. IF(IRETOU.EQ.0) GOTO 5000
  103. ENDIF
  104. GOTO 100
  105.  
  106. 330 CONTINUE
  107. C TEST SUR LISTENTI
  108. IRET=.FALSE.
  109. CALL LIROBJ(ITTEMP,MLENTI,1,IRETOU)
  110. CALL LIROBJ(ITTEMP,MLENT1,0,IRETOU)
  111. IF(IERR.NE.0) RETURN
  112. IF(IRETOU.EQ.1) THEN
  113. SEGACT MLENTI,MLENT1
  114. IF(LECT(/1).NE.MLENT1.LECT(/1)) GOTO 102
  115. DO I=1,LECT(/1)
  116. IF(LECT(I).NE.MLENT1.LECT(I)) GOTO 102
  117. ENDDO
  118. IRET=.TRUE.
  119. 102 CONTINUE
  120. ELSE
  121. ITTEMP=' '
  122. CALL LIROBJ(ITTEMP,KIKI,0,IRETOU)
  123. IF(IRETOU.EQ.0) GOTO 5000
  124. ENDIF
  125. GOTO 100
  126.  
  127. 340 CONTINUE
  128. C TEST SUR ENTIERS
  129. IRET=.FALSE.
  130. CALL LIRENT(I1,1,IRETOU)
  131. CALL LIRENT(I2,0,IRETOU)
  132. IF(IERR.NE.0) RETURN
  133. IF(IRETOU.EQ.1) THEN
  134. IRET= I1.EQ.I2
  135. ELSE
  136. ITTEMP=' '
  137. CALL LIROBJ( ITTEMP,KIKI,0,IRETOU)
  138. IF(IRETOU.EQ.0) GOTO 5000
  139. ENDIF
  140. GOTO 100
  141.  
  142. 350 CONTINUE
  143. C TEST SUR MOT
  144. IRET=.FALSE.
  145. CALL LIRCHA(CHAR1,1,IRET1)
  146. CALL LIRCHA(CHAR2,0,IRET2)
  147. IF(IERR.NE.0) RETURN
  148. IF(IRET2.NE.0) THEN
  149. CALL LIRENT(LL0,0,IRET3)
  150. IF(IRET3.NE.0) THEN
  151. IF(LL0.GT.LOCHAI) THEN
  152. INTERR(1) = LL0
  153. CALL ERREUR(36)
  154. RETURN
  155. ENDIF
  156. IRET= CHAR1(1:LL0).EQ.CHAR2(1:LL0)
  157. ELSE
  158. IF( CHAR1.EQ.CHAR2) THEN
  159. IRET=.TRUE.
  160. ELSE
  161. LL1=LONG(CHAR1)
  162. LL2=LONG(CHAR2)
  163. IRET= CHAR1(1:LL1).EQ.CHAR2(1:LL2)
  164. ENDIF
  165. ENDIF
  166. ELSE
  167. ITTEMP=' '
  168. CALL LIROBJ( ITTEMP,KIKI,0,IRETOU)
  169. IF(IRETOU.EQ.0) GOTO 5000
  170. ENDIF
  171. GOTO 100
  172.  
  173. 360 CONTINUE
  174. C TEST SUR FLOTTANTS
  175. IRET=.FALSE.
  176. CALL LIRREE(X1,1,IRETOU)
  177. CALL LIRREE(X2,0,IRETOU)
  178. IF(IERR.NE.0) RETURN
  179. IF(IRETOU.EQ.1) THEN
  180. CALL LIRREE(EPS1,0,IRETO3)
  181. IF(IRETO3.EQ.1) THEN
  182. *
  183. * MILL 9/1/91 TEST EN VALEUR ABSOLUE
  184. *
  185. XVAL = ABS (X2 - X1)
  186. IRET= XVAL.LE.EPS1
  187. ELSE
  188. IRET= A_EGALE_B(X1,X2)
  189. ENDIF
  190. ELSE
  191. ITTEMP=' '
  192. CALL LIROBJ( ITTEMP,KIKI,0,IRETOU)
  193. IF(IRETOU.EQ.0) GOTO 5000
  194. ENDIF
  195. GOTO 100
  196.  
  197. C Sortie du resultat sur la pile
  198. 100 CONTINUE
  199. CALL ECRLOG (IRET)
  200. RETURN
  201.  
  202. C Sortie en erreur
  203. 5000 CONTINUE
  204. CALL ERREUR(533)
  205. RETURN
  206. END
  207.  
  208.  

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