Télécharger lhhopn.eso

Retour à la liste

Numérotation des lignes :

lhhopn
  1. C LHHOPN SOURCE PV090527 24/06/24 21:15:01 896
  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. PARAMETER (NBOS = 3)
  17.  
  18. EXTERNAL long
  19.  
  20. CHARACTER*(LOCHAJ) cvarenv,dirb
  21. CHARACTER*(2) separ(NBOS)
  22. CHARACTER*(6) sextl(NBOS)
  23.  
  24. EQUIVALENCE(cvarenv,ivarenv)
  25. EQUIVALENCE(entr ,ientr )
  26.  
  27. INTEGER logdbg
  28. LOGICAL b_z
  29.  
  30. iret = 0
  31. HHO_MaxLib = 0
  32. HHO_NomLib = ' '
  33.  
  34. * 0 - Option cachee de debogage :
  35. logdbg = 0
  36. cvarenv = 'CASTEM_HHO_DEBUG'//CHAR(0)
  37. l = LOCHAJ
  38. CALL OOOZEN(ivarenv,l)
  39. if (l.GE.1) logdbg = 1
  40. if (logdbg.gt.0) write(ioimp,*) 'HHO_LIB : Mode debogage actif'
  41.  
  42. * 1 - Definition pour chaque OS (LINUX, WIN, MAC) :
  43. * - du separateur de recherche
  44. * - du(des) separateur(s) de repertoire
  45. * - de l'extension de la bibliotheque
  46. sextl(1) = '.so '
  47. separ(1) = ':/'
  48. sextl(2) = '.dll '
  49. separ(2) = ';'//char(92)
  50. sextl(3) = '.dylib'
  51. separ(3) = ':/'
  52. %IF WIN32,WIN64
  53. iextl = 2
  54. %ELSE
  55. iextl = 1
  56. * Cas particulier du MACOS
  57. cvarenv = 'CASTEM_PLATEFORME'//CHAR(0)
  58. l = LOCHAI
  59. CALL OOOZEN(ivarenv,l)
  60. IF (l.GE.1) THEN
  61. IF (cvarenv(1:l).EQ.'MAC') iextl = 3
  62. END IF
  63. %ENDIF
  64. nextl = LONG(sextl(iextl))
  65. if (logdbg.gt.0) then
  66. if (iextl.eq.1) write(ioimp,*) 'HHO_LIB : OS = LINUX (default)'
  67. if (iextl.eq.2) write(ioimp,*) 'HHO_LIB : OS = WIN32/WIN64'
  68. if (iextl.eq.3) write(ioimp,*) 'HHO_LIB : OS = MACOS64'
  69. endif
  70.  
  71. * 2 - Recherche du repertoire de la bibliotheque HHO
  72. dirb = ' '
  73. cvarenv = 'CASTEM_HHO_ROOT'//CHAR(0)
  74. l = LOCHAJ
  75. CALL OOOZEN(ivarenv,l)
  76. IF (l.GE.1) THEN
  77. dirb(1:l) = cvarenv(1:l)
  78. l = l+1
  79. * Cas tres particulier :
  80. if (l.gt.LOCHAJ) then
  81. iret = 1
  82. goto 900
  83. endif
  84. dirb(l:l) = separ(iextl)(1:1)
  85. do ib = 1, l-1
  86. b_z = .FALSE.
  87. do i = 1, NBOS
  88. if ( dirb(ib:ib).eq.separ(i)(1:1) ) b_z = .TRUE.
  89. enddo
  90. if (b_z) dirb(ib:ib) = separ(iextl)(1:1)
  91. b_z = .FALSE.
  92. do i = 1, NBOS
  93. if ( dirb(ib:ib).eq.separ(i)(2:2) ) b_z = .TRUE.
  94. enddo
  95. if (b_z) dirb(ib:ib) = separ(iextl)(2:2)
  96. enddo
  97. ind = INDEX(dirb(1:l),separ(iextl)(1:1))
  98. l = ind-1
  99. if (logdbg.gt.0) then
  100. write(ioimp,*) 'HHO_LIB : CASTEM_HHO_ROOT found'
  101. write(ioimp,*) ' =>'//dirb(1:l)//'<='
  102. endif
  103. b_z = .TRUE.
  104. do ib = l, 1, -1
  105. if (dirb(ib:ib).eq.separ(iextl)(2:2)) then
  106. if (b_z) l = ib-1
  107. else
  108. b_z = .FALSE.
  109. endif
  110. enddo
  111. if (l.lt.1) then
  112. iret = 2
  113. goto 900
  114. endif
  115. dirb(l+1:LOCHAJ) = ' '
  116. ELSE
  117. dirb = '.'
  118. END IF
  119. l = LONG(dirb)
  120. C*// nll = l + (1 + 3 + 1 + 26) + nextl
  121. nll = l + (1 + 26) + nextl
  122. IF (nll .lt. 1 .OR. nll .gt. LOCHAI) THEN
  123. iret = 3
  124. goto 900
  125. ENDIF
  126. C*// dirb = dirb(1:l)//separ(iextl)(2:2)//"lib"//separ(iextl)(2:2)//
  127. C*// & "libmechhcanoCast3MElements"//sextl(iextl)(1:nextl)
  128. dirb = dirb(1:l)//separ(iextl)(2:2)//
  129. & "libmechhcanoCast3MElements"//sextl(iextl)(1:nextl)
  130. nll = LONG(dirb)
  131.  
  132. if (logdbg.gt.0)
  133. & write(ioimp,*) 'HHO_LIB : =>'//dirb(1:nll)//'<='
  134.  
  135. lmeptr = 0
  136. CALL PTRLIB(dirb(1:nll)//CHAR(0),nll, lmeptr)
  137.  
  138. IF (lmeptr.LE.0) THEN
  139. iret = ABS(lmeptr)
  140. goto 900
  141. ENDIF
  142. if (logdbg.gt.0) then
  143. moterr = 'HHO_LIB : dlopen(lmelib) -> '
  144. write(moterr(29:38),FMT='(I10)') lmeptr
  145. call erreur(-385)
  146. endif
  147.  
  148. HHO_MaxLib = nll
  149. HHO_NomLib = dirb(1:nll)
  150.  
  151. 900 continue
  152. if (logdbg.gt.0) then
  153. if (iret.eq.1) then
  154. moterr = '(Warning 1) CASTEM_HHO_ROOT too long'
  155. call erreur(-385)
  156. else if (iret.eq.2) then
  157. moterr = '(Warning 2) CASTEM_HHO_ROOT is empty'
  158. call erreur(-385)
  159. else if (iret.eq.3) then
  160. moterr = '(Warning 3) (castem_hho_root) CHARLIB too long'
  161. call erreur(-385)
  162. else if (iret.eq.10) then
  163. moterr = '(Error 4) len(lmelib) & lmelgb inconsistent'
  164. call erreur(-385)
  165. else if (iret.eq.11) then
  166. moterr = '(Warning 4) HHO LIB not found or not opened'
  167. call erreur(-385)
  168. endif
  169. moterr = ' '
  170. call erreur(-385)
  171. if (iret.eq.0) then
  172. moterr = '=> HHO available in Cast3M'
  173. else
  174. moterr = '=> HHO NOT available in Cast3M'
  175. endif
  176. call erreur(-385)
  177. moterr = ' '
  178. call erreur(-385)
  179. endif
  180.  
  181. RETURN
  182. END
  183.  
  184.  
  185.  
  186.  

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