Télécharger lhhopn.eso

Retour à la liste

Numérotation des lignes :

lhhopn
  1. C LHHOPN SOURCE OF166741 26/02/23 21:15:23 12480
  2.  
  3. *----------------------------------------------------------------------*
  4. SUBROUTINE LHHOPN (iret)
  5.  
  6. IMPLICIT INTEGER(I-N)
  7. IMPLICIT REAL*8(A-H,O-Z)
  8.  
  9. -INC PPARAM
  10. -INC CCOPTIO
  11.  
  12. -INC CCHHOPA
  13. -INC CCHHOPR
  14.  
  15. PARAMETER (LOCHAJ = 10 * LOCHAI)
  16.  
  17. CHARACTER*(LOCHAJ) cvarenv
  18. CHARACTER*(LOCHAI) dirb
  19. CHARACTER*(6) sextl
  20. CHARACTER*(2) separ
  21.  
  22. EXTERNAL LONG
  23.  
  24. EQUIVALENCE(cvarenv,ivarenv)
  25. EQUIVALENCE(entr ,ientr )
  26.  
  27. LOGICAL logdbg
  28.  
  29. iret = 0
  30. HHO_MaxLib = 0
  31. HHO_NomLib = ' '
  32.  
  33. * 0 - Option cachee de debogage :
  34. cvarenv = 'CASTEM_HHO_DEBUG'//CHAR(0)
  35. l = LOCHAJ
  36. CALL OOOZEN(ivarenv,l)
  37. logdbg = (l.GE.1)
  38. if (logdbg) write(ioimp,*) 'HHO_LIB : Mode debogage actif'
  39.  
  40. * 1 - Definition pour l'OS en cours (LINUX, WIN, MAC) :
  41. * - du separateur de recherche
  42. * - du(des) separateur(s) de repertoire
  43. * - de l'extension de la bibliotheque
  44. %IF WIN32,WIN64
  45. sextl = '.dll '
  46. separ = ';'//CHAR(92)
  47. if (logdbg) write(ioimp,*) 'HHO_LIB : OS = WIN32/WIN64'
  48. %ELSE
  49. %IF OSX
  50. sextl = '.dylib'
  51. separ = ':/'
  52. if (logdbg) write(ioimp,*) 'HHO_LIB : OS = MACOS64/OSX'
  53. %ELSE
  54. sextl = '.so '
  55. separ = ':/'
  56. if (logdbg) write(ioimp,*) 'HHO_LIB : OS = LINUX'
  57. %ENDIF
  58. %ENDIF
  59. nextl = LONG(sextl)
  60.  
  61. * 2 - Recherche du repertoire de la bibliotheque HHO
  62. * Hyp. : La variable d'environnement CASTEM_HHO_ROOT est definie
  63. * correctement pour l'OS utilise.
  64. cvarenv = 'CASTEM_HHO_ROOT'//CHAR(0)
  65. l = LOCHAJ
  66. CALL OOOZEN(ivarenv,l)
  67. * On prend le premier repertoire defini dans "CASTEM_HHO_ROOT"
  68. IF (l.GE.1) THEN
  69. DO i = l, 1, -1
  70. IF (cvarenv(i:i).NE.' ') GOTO 2
  71. l = l - 1
  72. END DO
  73. 2 CONTINUE
  74. IF (l.LE.0) THEN
  75. iret = 1
  76. goto 900
  77. ENDIF
  78. lgrep = l
  79. idrep = 1
  80. ifrep = lgrep
  81. 20 CONTINUE
  82. ifrep = lgrep
  83. * Recherche debut fin du repertoire
  84. ind = INDEX(cvarenv(idrep:ifrep),separ(1:1))
  85. IF (ind.NE.0) ifrep = idrep + ind - 2
  86. * Cas particulier ou 2 separateurs se suivent
  87. IF (ind.EQ.1) GOTO 21
  88. * Cas particulier ou il n'y a que des espaces entre 2 separateurs
  89. lgd = ifrep - idrep + 1
  90. DO i = ifrep, idrep, -1
  91. IF (cvarenv(i:i).NE.' ') GOTO 200
  92. lgd = lgd - 1
  93. END DO
  94. 200 CONTINUE
  95. IF (lgd.EQ.0) GOTO 21
  96. * Premier repertoire trouve :
  97. ifrep = idrep + lgd - 1
  98. GOTO 22
  99. 21 CONTINUE
  100. idrep = ifrep + 2
  101. * Fin de la chaine atteinte sans trouver de repertoire
  102. IF (idrep.GT.lgrep) THEN
  103. iret = 1
  104. goto 900
  105. ENDIF
  106. GOTO 20
  107. 22 CONTINUE
  108. * Pas de traitement en cas de melange de separateurs
  109. * Suppression des separateurs en fin de chaine
  110. l = lgd
  111. DO i = ifrep, idrep, -1
  112. IF (cvarenv(i:i).NE.separ(2:2)) GOTO 25
  113. l = l - 1
  114. END DO
  115. 25 CONTINUE
  116. lgrep = l
  117. if (logdbg) then
  118. write(ioimp,*) 'HHO_LIB : CASTEM_HHO_ROOT found'
  119. endif
  120. ELSE
  121. * "CASTEM_HHO_ROOT" non definie
  122. cvarenv = '.'
  123. idrep = 1
  124. lgrep = 1
  125. END IF
  126.  
  127. nll = lgrep + 1 + 26 + nextl
  128. IF (nll .gt. LOCHAI) THEN
  129. iret = 2
  130. goto 900
  131. ENDIF
  132.  
  133. dirb = ' '
  134. IF (lgrep.GT.0) THEN
  135. ifrep = idrep + lgrep - 1
  136. dirb(1:lgrep) = cvarenv(idrep:ifrep)
  137. ENDIF
  138. dirb(lgrep+1:nll) = separ(2:2)//
  139. & "libmechhcanoCast3MElements"//
  140. & sextl(1:nextl)
  141.  
  142. if (logdbg) then
  143. write(ioimp,*) 'HHO_LIB : =>'//dirb(1:nll)//'<='
  144. endif
  145.  
  146. lmeptr = 0
  147. CALL PTRLIB(dirb(1:nll)//CHAR(0),nll, lmeptr)
  148.  
  149. IF (lmeptr.LE.0) THEN
  150. iret = ABS(lmeptr)
  151. goto 900
  152. ENDIF
  153. if (logdbg) then
  154. moterr = 'HHO_LIB : dlopen(lmelib) -> '
  155. write(moterr(29:38),FMT='(I10)') lmeptr
  156. call erreur(-385)
  157. endif
  158.  
  159. HHO_MaxLib = nll
  160. HHO_NomLib = dirb(1:nll)
  161.  
  162. 900 continue
  163. if (logdbg) then
  164. if (iret.eq.1) then
  165. moterr = '(Warning HHO.1) CASTEM_HHO_ROOT is empty'
  166. call erreur(-385)
  167. else if (iret.eq.2) then
  168. moterr = '(Warning HHO.2) HHO_LIB directory name too long'
  169. call erreur(-385)
  170. else if (iret.eq.10) then
  171. moterr = '(Error HHO.3) len(lmelib) & lmelgb inconsistent'
  172. call erreur(-385)
  173. else if (iret.eq.11) then
  174. moterr = '(Warning HHO.4) HHO_LIB not found or not opened'
  175. call erreur(-385)
  176. endif
  177. moterr = ' '
  178. call erreur(-385)
  179. if (iret.eq.0) then
  180. moterr = '=> HHO available in Cast3M'
  181. else
  182. moterr = '=> HHO NOT available in Cast3M'
  183. endif
  184. call erreur(-385)
  185. moterr = ' '
  186. call erreur(-385)
  187. endif
  188.  
  189. RETURN
  190. END
  191.  
  192.  
  193.  

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