Télécharger ooomsu.eso

Retour à la liste

Numérotation des lignes :

ooomsu
  1. C OOOMSU SOURCE PV090527 26/04/24 08:23:16 12524
  2. SUBROUTINE OOOMSU (IZ,IS,LS)
  3. C-------------------------------------------------------------------
  4. C
  5. C LIBERER UN BLOC DANS UNE ZONE MEMOIRE
  6. C
  7. C IZ INDICE DE LA ZONE MEMOIRE ( DONNEE )
  8. C =>IS INDICE DU BLOC A LIBERER ( DONNEE ET RESULTAT )
  9. C =>LS NOMBRE DE MOTS DU BLOC ( DONNEE ET RESULTAT )
  10. C
  11. C AU RETOUR LS ET IS DESIGNENT LE TROU RESULTAT DE CETTE
  12. C LIBERATION , ILS PEUVENT DIFFERER DES DONNEES SI IL Y A EU
  13. C RECOLLAGE AVEC DES TROUS CONTIGUS
  14. C
  15. C PROGRAMMEUR : MOUGIN
  16. C MODIF : 10/12/89 SUPPRIMER L'ARGUMENT LRET QUI NE SERT A RIEN
  17. C MODIF : 31/01/89 INTRODUIRE LA MODIF DE PV
  18. C
  19. C-------------------------------------------------------------------
  20. C
  21. %INC IOOADR
  22. %INC IOOADZ
  23. %INC IOOTRO
  24. %INC IOOTF1
  25. %INC IOOTF2
  26. %INC IOOSGM
  27. C
  28. LS0=LS
  29. C SITUATION DU BLOC A LIBERER
  30. IF (IS.LT.MZDLIM(IZ)) THEN
  31. KZ=ZMEMDYN
  32. ELSE
  33. KZ=ZMEMFIX
  34. ENDIF
  35. C
  36. C****** RAZ DU BLOC ET MISE A JOUR DU COMPTEUR DE PLACE LIBRE
  37. C
  38. CALL OOOZMR (JSG(IS+1),LS)
  39.  
  40. C****** RECOLLER AVEC UN TROU A GAUCHE EVENTUEL
  41. C
  42. IF (MTROUG(IS)) THEN
  43. LT = -MTLTP(IS)
  44. IT = IS-LT
  45. MTLTP(IS) = 0
  46.  
  47. C RECOLLER AVEC UN TROU A DROITE EVENTUEL
  48. C QU'ON RETIRE ALORS DE LA CHAINE DES TROUS
  49.  
  50. IF (MTROU(IS+LS)) THEN
  51. ITD = IS+LS
  52. LTD = -MTLT1(ITD)
  53. ITDS = INDICE_TROU_SUIVANT(ITD)
  54. MTF1 , IZ(ITD,LTD)
  55. ELSE
  56. LTD = 0
  57. ENDIF
  58. IS = IT
  59. LS = LT+LS+LTD
  60. C
  61. IF (IS.LT.MZDLIM(IZ) .AND. IS+LS.GT.MZDLIM(IZ)) THEN
  62. MZDLIM(IZ)=IS+LS
  63. MZLTROU(IZ,ZMEMFIX)=MZLTROU(IZ,ZMEMFIX)-LTD
  64. MZLTROU(IZ,ZMEMDYN)=MZLTROU(IZ,ZMEMDYN)+LS0+LTD
  65. IF (MZITS0(IZ,ZMEMFIX).EQ.ITD) THEN
  66. MZITS0(IZ,ZMEMFIX)=ITDS
  67. ENDIF
  68. KZ=ZMEMDYN
  69. ELSE
  70. MZLTROU(IZ,KZ)=MZLTROU(IZ,KZ)+LS0
  71. ENDIF
  72. C
  73. C****** RECOLLER AVEC UN TROU A DROITE EVENTUEL
  74. C MISE A JOUR DES CHAINAGES DES TROUS ADJACENTS DE LA CHAINE
  75. C ET TRANSPORT DU CHAINAGE DANS LE NOUVEAU TROU
  76.  
  77. ELSEIF (MTROU(IS+LS)) THEN
  78. IT = IS+LS
  79. LT = -MTLT1(IT)
  80. ITP = INDICE_TROU_PRECEDENT(IT)
  81. ITS = INDICE_TROU_SUIVANT (IT)
  82. INDICE_TROU_PRECEDENT(ITS) = IS
  83. INDICE_TROU_SUIVANT (ITP) = IS
  84. LS=LS+LT
  85. INDICE_TROU_PRECEDENT(IS) = ITP
  86. INDICE_TROU_SUIVANT (IS) = ITS
  87. MTZERO(IT) = 0
  88. C
  89. IF (IS.EQ.MZDLIM(IZ)) THEN
  90. IF (MZITS0(IZ,ZMEMFIX).EQ.IT) THEN
  91. MZITS0(IZ,ZMEMFIX)=ITS
  92. ENDIF
  93. MTF1 , IZ(IS,LS)
  94. MZLTROU(IZ,ZMEMFIX)=MZLTROU(IZ,ZMEMFIX)-LT
  95. MTF2 , IZ(ZMEMDYN,IS,LS)
  96. MZLTROU(IZ,ZMEMDYN)=MZLTROU(IZ,ZMEMDYN)+LS
  97. MZDLIM(IZ)=IS+LS
  98. KZ=ZMEMDYN
  99. ELSE
  100. MZLTROU(IZ,KZ)=MZLTROU(IZ,KZ)+LS0
  101. ENDIF
  102. C
  103. C****** PAS DE RECOLLAGE : ON INSERT UN NOUVEAU TROU
  104. C
  105. ELSE
  106. IF (IS.EQ.MZDLIM(IZ)) THEN
  107. MZLTROU(IZ,ZMEMDYN)=MZLTROU(IZ,ZMEMDYN)+LS
  108. MTF2 , IZ(ZMEMDYN,IS,LS)
  109. MZDLIM(IZ)=IS+LS
  110. ELSE
  111. MTF2 , IZ(KZ,IS,LS)
  112. MZLTROU(IZ,KZ)=MZLTROU(IZ,KZ)+LS
  113. ENDIF
  114. ENDIF
  115. C
  116. C****** LONGUEUR DU TROU ET COMPTEUR DE PROCHAINE ATTRIBUTION :
  117. C
  118. MTLT1(IS)=-LS
  119. MTLT2(IS)=-LS
  120. C PV POINTEUR SUR PROCHAINE ATTRIBUTION MIS A JOUR SI INTERESSANT
  121. IT=MZITS0(IZ,KZ)
  122. IF (-MTLT1(IT).LT.LS) MZITS0(IZ,KZ)=IS
  123. IF (MSLS1(MZPRTR).EQ.0.OR.MZPRTR.EQ.IS) MZPRTR=IS+LS
  124. RETURN
  125. END
  126.  
  127.  

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