Télécharger enleve.eso

Retour à la liste

Numérotation des lignes :

enleve
  1. C ENLEVE SOURCE SP204843 24/09/05 21:15:02 12005
  2. SUBROUTINE ENLEVE
  3.  
  4. IMPLICIT INTEGER(I-N)
  5. IMPLICIT REAL*8 (A-H,O-Z)
  6. C***********************************************************************
  7. C
  8. C E N L E V E
  9. C -----------
  10. C
  11. C SOUS-PROGRAMME ASSOCIE A L'OPERATEUR "ENLEVER"
  12. C
  13. C FONCTION:
  14. C ---------
  15. C
  16. C ENLEVER UN ELEMENT D'UN OBJET (QUAND CELA A UN SENS).
  17. C
  18. C
  19. C PHRASE D'APPEL (EN GIBIANE):
  20. C ----------------------------
  21. C
  22. C OBJET2 = ENLEVER OBJET1 (MOT_CLE) INDIC1 ;
  23. C
  24. C
  25. C OPERANDES ET RESULTATS:
  26. C -----------------------
  27. C
  28. C +----------------+----------------+----------------+----------------+
  29. C | OBJET1 | MOT_CLE | INDIC1 | OBJET2 |
  30. C +================+================+================+================+
  31. C | LISTREEL | AUCUN | ENTIER | LISTREEL |
  32. C | LISTREEL | AUCUN | LISTENTI | LISTREEL |
  33. C +----------------+----------------+----------------+----------------+
  34. C | LISTENTI | AUCUN | ENTIER | LISTENTI |
  35. C | LISTENTI | AUCUN | LISTENTI | LISTENTI |
  36. C +----------------+----------------+----------------+----------------+
  37. C | LISTMOTS | AUCUN | ENTIER | LISTMOTS |
  38. C | LISTMOTS | AUCUN | LISTENTI | LISTMOTS |
  39. C +----------------+----------------+----------------+----------------+
  40. C | LISTCHPO | AUCUN | ENTIER | LISTCHPO |
  41. C | LISTCHPO | AUCUN | LISTENTI | LISTCHPO |
  42. C +----------------+----------------+----------------+----------------+
  43. C | CHPOINT | AUCUN | MOT | CHPOINT |
  44. C | CHPOINT | AUCUN | LISTMOTS | CHPOINT |
  45. C +----------------+----------------+----------------+----------------+
  46. C | TABLE | AUCUN | (quelconque) | TABLE |
  47. C +----------------+----------------+----------------+----------------+
  48. C | CHARGEME | AUCUN | MOT | CHARGEMENT |
  49. C +----------------+----------------+----------------+----------------+
  50. C | MMODEL | 'FORM' | MOT | MMODEL |
  51. C | MMODEL | 'COMP' | MOT | MMODEL |
  52. C +----------------+----------------+----------------+----------------+
  53. C | LISTOBJE | AUCUN | ENTIER | LISTOBJE |
  54. C | LISTOBJE | AUCUN | LISTENTI | LISTOBJE |
  55. C +----------------+----------------+----------------+----------------+
  56. C
  57. C Fonction non acceptee
  58. C +----------------+----------------+----------------+----------------+
  59. C | MCHAML | AUCUN | MOT | MCHAML |
  60. C | MCHAML | AUCUN | LISTMOTS | MCHAML |
  61. C +----------------+----------------+----------------+----------------+
  62. C
  63. C
  64. C MODE DE FONCTIONNEMENT:
  65. C -----------------------
  66. C
  67. C APPEL D'UN SOUS-PROGRAMME DISTINCT SELON LE TYPE OBJET1 :
  68. C LISTREEL => ENLEV1
  69. C LISTENTI => ENLEV2
  70. C LISTMOTS => ENLEV3
  71. C LISTCHPO => ENLEV4
  72. C CHPOINT => ENLEV5
  73. C TABLE => ENLEV6
  74. C CHARGEMENT => traite en interne dans cette subroutine
  75. C MMODEL => ENLEV7
  76. C MCHAML => ENLEV8
  77. C LISTOBJE => ENLEV9
  78. C
  79. C
  80. C AUTEUR, DATE DE CREATION:
  81. C -------------------------
  82. C
  83. C PASCAL MANIGOT 5 DECEMBRE 1984
  84. C DATE DE MODIFICATION 22 JANVIER 88
  85. C P.M. 21/06/88 : REINTRODUCTION DES TABLES
  86. C JCARDO 9/12/14 : INDIC1 type LISTENTI pour OBJET1 type LISTxxxx
  87. C M.B. xx/06/16 : INDIC1 type MOT pour OBJET1 type MMODEL
  88. C C.B. 30/05/17 : Prise en compte des MCHAML
  89. C S.P. 05/09/2024 Prise en compte des LISTOBJE
  90. C
  91. C
  92. C LANGAGE:
  93. C --------
  94. C
  95. C FORTRAN77
  96. C
  97. C***********************************************************************
  98. C
  99.  
  100. -INC PPARAM
  101. -INC CCOPTIO
  102. -INC SMLENTI
  103. -INC SMLMOTS
  104. -INC SMCHARG
  105. C
  106. CHARACTER*(4) CMOMOT
  107. CHARACTER*8 CTYP
  108.  
  109. PARAMETER (NBTYP=9)
  110. CHARACTER*8 TYPOK(NBTYP)
  111.  
  112. DATA TYPOK /'TABLE ','MMODEL ','CHARGEME','CHPOINT ',
  113. & 'LISTREEL','LISTENTI','LISTMOTS','LISTCHPO',
  114. & 'LISTOBJE'/
  115.  
  116. CALL QUETYP(CTYP,0,IRETOU)
  117. IF (IRETOU.EQ.0) THEN
  118. CALL ERREUR(533)
  119. RETURN
  120. ENDIF
  121.  
  122. C Recherche de la position dans le DATA
  123. CALL PLACE(TYPOK,NBTYP,IPLACE,CTYP)
  124. IF (IERR .NE. 0) RETURN
  125.  
  126. IF (IPLACE .EQ. 0) THEN
  127. CALL ERREUR(34)
  128. RETURN
  129. ENDIF
  130.  
  131. GOTO(100,200,300,400,500,500,500,500,500),IPLACE
  132.  
  133.  
  134. C +---------------------------------------------------------------+
  135. C | O B J E T 1 D E T Y P E T A B L E |
  136. C +---------------------------------------------------------------+
  137. C (A LAISSER EN PREMIERE POSITION DANS CE SOUS-PROGRAMME)
  138.  
  139. 100 CONTINUE
  140. CALL LIROBJ ('TABLE',IPTABL,1,IRETOU)
  141. IF (IERR .NE. 0) RETURN
  142. CALL ENLEV6 (IPTABL,IPTAB2)
  143. IF (IERR .NE. 0) RETURN
  144. CALL ECROBJ ('TABLE',IPTAB2)
  145. RETURN
  146.  
  147.  
  148. C +---------------------------------------------------------------+
  149. C | O B J E T 1 D E T Y P E M M O D E L |
  150. C +---------------------------------------------------------------+
  151. 200 CONTINUE
  152. CALL LIROBJ ('MMODEL ',IPMOD1,1,IRETOU)
  153. IF (IERR .NE. 0) RETURN
  154. CALL ACTOBJ ('MMODEL ',IPMOD1,1)
  155. CALL ENLEV7 (IPMOD1,IPMOD2)
  156. IF (IERR .NE. 0) RETURN
  157. CALL ACTOBJ ('MMODEL ',IPMOD2,1)
  158. CALL ECROBJ ('MMODEL ',IPMOD2)
  159. RETURN
  160.  
  161.  
  162. C +---------------------------------------------------------------+
  163. C | O B J E T 1 D E T Y P E C H A R G E M E N T |
  164. C +---------------------------------------------------------------+
  165. 300 CONTINUE
  166. CALL LIROBJ('CHARGEME',MCHARG,1,IRETOU)
  167. IF (IERR .NE. 0) RETURN
  168. CALL ACTOBJ('CHARGEME',MCHARG,1)
  169. CALL LIRCHA(CMOMOT,1,IRETOU)
  170. IF (IERR .NE. 0) RETURN
  171. segini,MCHAR1=MCHARG
  172. N=0
  173. segact mcharg
  174. do IU=1,KCHARG(/1)
  175. if(CHANOM(iu).ne.CMOMOT) then
  176. n=n+1
  177. mchar1.kcharg(n)=kcharg(iu)
  178. mchar1.chanat(n)=chanat(iu)
  179. mchar1.chanom(n)=chanom(iu)
  180. mchar1.chamob(n)=chamob(iu)
  181. mchar1.chalie(n)=chalie(iu)
  182. endif
  183. enddo
  184. segadj mchar1
  185. call actobj('CHARGEME',mchar1,1)
  186. call ecrobj('CHARGEME',mchar1)
  187. return
  188.  
  189.  
  190. C +---------------------------------------------------------------+
  191. C | O B J E T 1 D E T Y P E C H P O I N T |
  192. C +---------------------------------------------------------------+
  193. 400 CONTINUE
  194. CALL LIROBJ('CHPOINT ',IPCHP,1,IRETOU)
  195. IF (IERR .NE. 0) RETURN
  196. CALL ACTOBJ('CHPOINT ',IPCHP,1)
  197. CALL LIROBJ('LISTMOTS',MLMOTS,0,IRETOU)
  198. IF (IERR .NE. 0) RETURN
  199.  
  200. IF(IRETOU.NE.0) THEN
  201. CALL ACTOBJ('LISTMOTS',MLMOTS,1)
  202. CALL ENLEV5(IPCHP,MLMOTS,IPOIN2)
  203. IF (IERR .NE. 0) RETURN
  204.  
  205. ELSE
  206. JGN = 4
  207. JGM = 10
  208. INCJGM = 10
  209. SEGINI,MLMOTS
  210. IB = 0
  211. 401 CALL LIRCHA(CMOMOT,0,IRETOU)
  212. IF(IRETOU.EQ.0) GOTO 402
  213. IB=IB+1
  214. IF (IB .GT. JGM) THEN
  215. JGM = JGM + INCJGM
  216. INCJGM = INCJGM * 2
  217. SEGADJ,MLMOTS
  218. ENDIF
  219. MLMOTS.MOTS(IB)=CMOMOT
  220. GOTO 401
  221.  
  222. 402 CONTINUE
  223. IF(IB .EQ. 0) THEN
  224. CALL ERREUR(6)
  225. RETURN
  226.  
  227. ELSEIF(IB .NE. JGM)THEN
  228. JGM = IB
  229. SEGADJ,MLMOTS
  230. ENDIF
  231.  
  232. CALL ENLEV5(IPCHP,MLMOTS,IPOIN2)
  233. IF (IERR .NE. 0) RETURN
  234. SEGSUP MLMOTS
  235. ENDIF
  236.  
  237. CALL ACTOBJ ('CHPOINT ',IPOIN2,1)
  238. CALL ECROBJ ('CHPOINT ',IPOIN2)
  239. RETURN
  240.  
  241.  
  242. C +---------------------------------------------------------------+
  243. C | O B J E T 1 D E T Y P E L I S T x x x x |
  244. C +---------------------------------------------------------------+
  245. 500 CONTINUE
  246. C IPOS<>0 => on autorise IPOIN2 à contenir un LISTENTI
  247. IPOS=1
  248. CALL LIRE01 (IPOIN1,IPOS,IPOIN2)
  249. IF (IERR.NE.0) RETURN
  250. C
  251. C Si plusieurs indices sont donnes, on trie par ordre croissant
  252. C et on supprime les eventuels doublons
  253. IF (IPOS.LT.0) THEN
  254. MLENT2=IPOIN2
  255. SEGACT,MLENT2
  256. JG = MLENT2.LECT(/1)
  257. IF (JG.NE.0) THEN
  258. SEGINI,MLENT1=MLENT2
  259. IORDRE=0
  260. CALL ORDON2(MLENT1,.TRUE.,.FALSE.,IORDRE)
  261. SEGACT,MLENT1
  262. SEGINI,MLENTI
  263. LECT(1) = MLENT1.LECT(1)
  264. LL = 1
  265. IF (JG.GT.1) THEN
  266. M1 = LECT(1)
  267. DO JJ = 2, JG
  268. M2 = MLENT1.LECT(JJ)
  269. IF (M1.NE.M2) THEN
  270. LL = LL+1
  271. LECT(LL) = M2
  272. M1 = M2
  273. ENDIF
  274. ENDDO
  275. ENDIF
  276. JG = LL
  277. SEGADJ,MLENTI
  278. IPOIN2=MLENTI
  279. SEGSUP,MLENT1
  280. ELSE
  281. MLENTI = 0
  282. ENDIF
  283. ENDIF
  284.  
  285. C ENLEVER DES INDICES D'UN LISTREEL
  286. IF (ABS(IPOS).EQ.1) THEN
  287. CALL ENLEV1 (IPOIN1,IPOIN2,IPOIN3,IPOS)
  288. IF (IERR .NE. 0) RETURN
  289. CALL ACTOBJ ('LISTREEL',IPOIN3,1)
  290. CALL ECROBJ ('LISTREEL',IPOIN3)
  291.  
  292. C ENLEVER DES INDICES D'UN LISTENTI
  293. ELSEIF (ABS(IPOS).EQ.2) THEN
  294. CALL ENLEV2 (IPOIN1,IPOIN2,IPOIN3,IPOS)
  295. IF (IERR .NE. 0) RETURN
  296. CALL ACTOBJ ('LISTENTI',IPOIN3,1)
  297. CALL ECROBJ ('LISTENTI',IPOIN3)
  298.  
  299. C ENLEVER DES INDICES D'UN LISTMOTS
  300. ELSEIF (ABS(IPOS).EQ.3) THEN
  301. CALL ENLEV3 (IPOIN1,IPOIN2,IPOIN3,IPOS)
  302. IF (IERR .NE. 0) RETURN
  303. CALL ACTOBJ ('LISTMOTS',IPOIN3,1)
  304. CALL ECROBJ ('LISTMOTS',IPOIN3)
  305.  
  306. C ENLEVER DES INDICES D'UN LISTCHPO
  307. ELSEIF (ABS(IPOS).EQ.4) THEN
  308. CALL ENLEV4 (IPOIN1,IPOIN2,IPOIN3,IPOS)
  309. IF (IERR .NE. 0) RETURN
  310. CALL ACTOBJ ('LISTCHPO',IPOIN3,1)
  311. CALL ECROBJ ('LISTCHPO',IPOIN3)
  312.  
  313. C ENLEVER DES INDICES D'UN LISTOBJE
  314. ELSEIF (ABS(IPOS).EQ.5) THEN
  315. CALL ENLEV9 (IPOIN1,IPOIN2,IPOIN3,IPOS)
  316. IF (IERR .NE. 0) RETURN
  317. CALL ACTOBJ ('LISTOBJE',IPOIN3,1)
  318. CALL ECROBJ ('LISTOBJE',IPOIN3)
  319.  
  320. ELSE
  321. MOTERR(1:8) = 'ENLEVER '
  322. CALL ERREUR(196)
  323. RETURN
  324. ENDIF
  325. IF (IPOS.LT.0 .AND. MLENTI.NE.0) SEGSUP,MLENTI
  326. RETURN
  327.  
  328.  
  329. C +---------------------------------------------------------------+
  330. C | O B J E T 1 D E T Y P E MCHAML |
  331. C +---------------------------------------------------------------+
  332. C 600 CONTINUE
  333. C CALL LIROBJ('MCHAML',IPMCH,1,IRETOU)
  334. C IF (IERR .NE. 0) RETURN
  335. C CALL LIROBJ('LISTMOTS',MLMOTS,0,IRETOU)
  336. C IF (IERR .NE. 0) RETURN
  337. C
  338. C IF(IRETOU.NE.0) THEN
  339. C CALL ENLEV8(IPMCH,MLMOTS,IPOIN2)
  340. C IF (IERR .NE. 0) RETURN
  341. C
  342. C ELSE
  343. C JGN = 4
  344. C JGM = 10
  345. C INCJGM = 10
  346. C SEGINI,MLMOTS
  347. C IB = 0
  348. C 601 CALL LIRCHA(CMOMOT,0,IRETOU)
  349. C IF(IRETOU.EQ.0) GOTO 602
  350. C IB=IB+1
  351. C IF (IB .GT. JGM) THEN
  352. C JGM = JGM + INCJGM
  353. C INCJGM = INCJGM * 2
  354. C SEGADJ,MLMOTS
  355. C ENDIF
  356. C MLMOTS.MOTS(IB)=CMOMOT
  357. C GOTO 601
  358. C
  359. C 602 CONTINUE
  360. C IF(IB .EQ. 0) THEN
  361. C CALL ERREUR(6)
  362. C RETURN
  363. C
  364. C ELSEIF(IB .NE. JGM)THEN
  365. C JGM = IB
  366. C SEGADJ,MLMOTS
  367. C ENDIF
  368. C
  369. C CALL ENLEV8(IPMCH,MLMOTS,IPOIN2)
  370. C IF (IERR .NE. 0) RETURN
  371. C SEGSUP MLMOTS
  372. C ENDIF
  373. C
  374. C CALL ECROBJ ('MCHAML',IPOIN2)
  375. C RETURN
  376. END
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  

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