Télécharger oooext.eso

Retour à la liste

Numérotation des lignes :

oooext
  1. C OOOEXT SOURCE PV090527 26/04/24 08:23:08 12524
  2. SUBROUTINE OOOEXT (LRET,PSEG,LSEG)
  3. C----------------------------------------------------------------------
  4. C
  5. C PSEG.X(**) = ...
  6. C
  7. C ->LRET 1 PLUS DE PLACE MEMOIRE
  8. C 2 OK
  9. C
  10. C PSEG DESIGNE LE SEGMENT A EXTENDRE
  11. C LSEG NOMBRE DE MOTS DE DONNEES DEMANDEES
  12. C
  13. C NOTE : SI NECESSAIRE ON DEPLACE LE SEGMENT MEME SI IL EST FIXE
  14. C
  15. C PROGRAMMEUR : MOUGIN
  16. C MODIF : 03/01/89 SUPPRIMER L'ARGUMENT LRET DU CALL OOOSUS
  17. C MODIF : 23/01/89 INTEGRER DANS LA FAMILLE OOOW...
  18. C
  19. C----------------------------------------------------------------------
  20. C
  21. C extension minimale
  22. %INC IOOADR
  23. %INC IOOADZ
  24. %INC IOODES
  25. %INC IOOSGM
  26. %INC IOOTRO
  27. %INC IOOWCOM
  28. C
  29. POINTEUR PSEG.PSEG
  30. C
  31. LRET = 2
  32. ITYP = MDTYP(PSEG)
  33. IF (MDETAT(ITYP).NE.MDACT) GO TO 901
  34.  
  35. C ->LSG1 LONGUEUR ACTUELLE DU SEGMENT
  36. C ->LSG2 LONGUEUR DEMANDEE DU SEGMENT
  37.  
  38. ISEG = MDISG(PSEG)
  39. LSG1 = MSLS1(ISEG)
  40. LSG2 = (((LSEG+MSLCZ)+(MSLSM-1))/MSLSM)*MSLSM
  41. IF (LSG2.LE.LSG1) GOTO 1000
  42. C
  43. ICAT = MDCAT(ITYP)
  44. IF(ICAT.EQ.MDBLOCK) CALL OOOSUS (MDMK(PSEG))
  45.  
  46. IF (ICAT.EQ.MDFIXE) THEN
  47. KZ=ZMEMFIX
  48. ELSE
  49. KZ=ZMEMDYN
  50. ENDIF
  51. C
  52. C****** EXTENSION NECESSAIRE
  53. C
  54. C LG DU TROU A RECHERCHER
  55.  
  56. LSE = LSG2-LSG1
  57. LSX = LSE
  58. 10 IT0 = ISEG+LSG1
  59. C
  60. C si pas de place suffisante avec trou droit + gauche on duplique le segment
  61. C
  62. ltg=0
  63. ltd=0
  64. if (mtroug(iseg)) ltg=-mtltp(iseg)
  65. if (mtrou(it0)) ltd=-mtlt1(it0)
  66. if (lsx.gt.ltd+ltg) goto 110
  67.  
  68. C
  69. C****** TROU A GAUCHE (sauf si trou a droite suffisant)
  70. C
  71. IF (MTROUG(ISEG).and.lsx.gt.ltd) THEN
  72. LT = -MTLTP(ISEG)
  73. C SI TROU INSUFFISANT ON PREFERE DUPLIQUER LE SGM
  74. C
  75. C SAUVEGARDE LES POINTEURS DU TROU POUR LE RECONSTRUIRE APRES
  76. C LE SEGMENT ET EFFACEMENT DU MOT DE CONTROLE FIN DU TROU
  77. IT0 = ISEG-LT
  78. ITS = MTITS(IT0)
  79. ITP = MTITP(IT0)
  80. JTR(IT0+LT)=0
  81. C
  82. C DEPLACEMENT DU SGM,REMISE A ZERO DE LA PORTION MEMOIRE NON
  83. C RECOUVERTE PAR LA NOUVELLE VERSION DU SEGMENT
  84. C
  85. CALL OOOZMV (JSG(ISEG+1),JSG(IT0+1),LSG1)
  86. MZJSS(DEPLACES)=MZJSS(DEPLACES)+1
  87. MZJSM(DEPLACES)=MZJSM(DEPLACES)+LSG1
  88. ITT = MAX(ISEG,IT0 +LSG1)
  89. LTT = MIN(LSG1,ISEG+LSG1-ITT)
  90. CALL OOOZMR (JSG(ITT+1),LTT)
  91. MZJMM(NXFNG) = MZJMM(NXFNG)+1
  92. MZJMM(QXFNRAZ) = MZJMM(QXFNRAZ)+LTT
  93. C MAJ DESCRIPTEUR
  94. ISEG = IT0
  95. MDISG(PSEG) = ISEG
  96. IF (MZPRTR.EQ.IT0+LT) MZPRTR=ISEG
  97. C
  98. C RECONSTRUIT LE TROU DERRIERE LE SGM
  99. C
  100. IT = ISEG+LSG1
  101. MTITP(ITS) = IT
  102. MTITS(ITP) = IT
  103. MTITP(IT ) = ITP
  104. MTITS(IT ) = ITS
  105. MTLT1(IT ) = -LT
  106. MTLT2(IT ) = -LT
  107. IF (IT0.EQ.MZITS0(IZA,KZ)) MZITS0(IZA,KZ)=IT
  108. ENDIF
  109. C
  110. C****** TROU A DROITE
  111. C
  112. IF (MTROU(IT0)) THEN
  113. C
  114. MZJMM(NXFND)=MZJMM(NXFND)+1
  115. C
  116. LT0 =-MTLT1(IT0)
  117. ITP = MTITP(IT0)
  118. ITS = MTITS(IT0)
  119.  
  120. C SI EXTENSION INSUFFISANTE:ON PREND QUAND MEME
  121.  
  122. LEXT = MIN(LSG2-LSG1,LT0)
  123. IF (MZPRTR.EQ.IT0) MZPRTR=ISEG
  124.  
  125. C SI LE TROU DISPARAIT , ON LE RETIRE DE LA CHAINE DES TROUS
  126.  
  127. IF (LT0.EQ.LEXT) THEN
  128. MTITS(ITP) = ITS
  129. MTITP(ITS) = ITP
  130. IF (IT0.EQ.MZITS0(IZA,KZ)) MZITS0(IZA,KZ)=ITS
  131. C SINON MISE A JOUR DU CHAINAGE DES TROUS
  132.  
  133. ELSE
  134. IT = IT0+LEXT
  135. LT = LT0-LEXT
  136. MTITP(ITS) = IT
  137. MTITS(ITP) = IT
  138. MTITP(IT ) = ITP
  139. MTITS(IT ) = ITS
  140. MTLT1(IT ) = -LT
  141. MTLT2(IT ) = -LT
  142. IF (IT0.EQ.MZITS0(IZA,KZ)) MZITS0(IZA,KZ)=IT
  143. ENDIF
  144. C
  145. C ON EFFACE LA FRONTIERE ENTRE ANCIEN/NOUVEAU BLOC EN SAUVEGARDANT
  146. C IDE DU SGM (SI CDC)
  147. MTLTP (IT0) = 0
  148. MTZERO(IT0) = 0
  149.  
  150. C MAJ COMPTEUR EXTENSION ET PLACE LIBRE
  151.  
  152. MZLTROU(IZA,KZ)=MZLTROU(IZA,KZ)-LEXT
  153.  
  154. C INDICE ET LG DU BLOC ETENDU
  155.  
  156. LSX = LSX -LEXT
  157. LSG1 = LSG1+LEXT
  158. MSLS1(ISEG) = LSG1
  159. MSLS2(ISEG) = LSG1
  160. MSIDE(ISEG) = PSEG
  161. C
  162. C SI EXTENSION INCOMPLETE ON CONTINUE
  163. C
  164. IF (LSG1.LT.LSG2) GO TO 10
  165. GO TO 100
  166. C
  167. ENDIF
  168. C
  169. C****** EXTENSION AVEC DUPLICATION SEGMENT
  170. C
  171. C INITIALISATION DU SEGMENT REMPLACANT AVEC REGLE D'ATTRIBUTION
  172. C A GAUCHE ,ECHANGE DES POINTEURS ET SUPPRESSION DE L'ANCIEN
  173. C SEGMENT
  174. C
  175. 110 CONTINUE
  176. LATGD = MZATGD(IZA,KZ)
  177. MZATGD(IZA,KZ) = 0
  178. MZJMM(NXFNINI) = MZJMM(NXFNINI)+1
  179. IF (KZ.EQ.ZMEMDYN) THEN
  180. JPS=0
  181. CALL OOOINI (LRET,JPS,LSEG)
  182. ELSE
  183. CALL OOOYNF (LRET,JPS,LSEG)
  184. ENDIF
  185. MZATGD(IZA,KZ) = LATGD
  186. IF (LRET.NE.1) THEN
  187. C
  188. ID2=JPS
  189. IS1=MDISG(PSEG)
  190. IS2=MDISG(ID2)
  191. C TRANSFERT DONNEES-MOTS DE CONTROLE DE TETE
  192. CALL OOOZMV (JSG(IS1+MSLZ1+1),JSG(IS2+MSLZ1+1),LSG1-(MSLCZ))
  193. MZJSS(DEPLACES)=MZJSS(DEPLACES)+1
  194. MZJSM(DEPLACES)=MZJSM(DEPLACES)+LSG1-(MSLCZ)
  195. C ECHANGE DES DESCRIPTEURS
  196. MSECH , PSEG(ID2)
  197. C SUPPRESSION DE L'ANCIEN SEGMENT
  198. CALL OOOSUP (LRET,JPS,0)
  199. C MAJ DES STATISTIQUES SI EXTENSION PARTIELLE (TROU A DROITE)
  200. ENDIF
  201. LSE=LSE-LSX
  202. C
  203. C****** FIN D'EXTENSION
  204. C
  205. 100 MZJSM(ACTUEL) =MZJSM(ACTUEL)+LSE
  206. MZJSM(DEF) =MAX(MZJSM(DEF),MZJSM(ACTUEL))
  207. MZJSM(ACTACTIF)=MZJSM(ACTACTIF)+LSE
  208. MZJSM(MAXACTIF)=MAX(MZJSM(MAXACTIF),MZJSM(ACTACTIF))
  209. IF (ICAT.EQ.MDFIXE) THEN
  210. MZQCHN(FIXE) =MZQCHN(FIXE) +LSE
  211. ELSE
  212. MZQCHN(ACTIF)=MZQCHN(ACTIF)+LSE
  213. ENDIF
  214. 1000 continue
  215. RETURN
  216. C-----------------------------------------------------------------------
  217. C
  218. C MESSAGES D'ERREUR
  219. C
  220. 901 CALL OOOERR (PSEG ,-1,'SEGMENT NON ACTIF ')
  221. STOP 16
  222. END
  223.  
  224.  

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