Télécharger oooact.eso

Retour à la liste

Numérotation des lignes :

oooact
  1. C OOOACT SOURCE PV090527 26/04/24 08:22:58 12524
  2. SUBROUTINE OOOACT (LRET,PSEG,KOD)
  3. C--------------------------------------------------------------------
  4. C
  5. C SEGACT /ERR=100/ PSEG
  6. C
  7. C ->LRET 1 PLUS DE PLACE MEMOIRE
  8. C 2 OK
  9. C
  10. C PSEG POINTEUR DESIGNANT LE SEGMENT A ACTIVER
  11. C KOD 1 => SEGACT EN *NOMOD
  12. C 0 => SEGACT EN *MOD
  13. C
  14. C PROGRAMMEUR : MOUGIN
  15. C CREE : 15/12/88 POUR LA FAMILLE OOOW..
  16. C MODIF : 17/01/89 UTILISER LE OOOMRD SIMPLIFIE
  17. C
  18. C--------------------------------------------------------------------
  19. C
  20. %INC IOOADR
  21. %INC IOOADZ
  22. %INC IOODES
  23. %INC IOOSGM
  24. %INC IOOWCOM
  25. %INC IOOUNIT
  26. character*4 hval
  27. save imod
  28. data imod/0/
  29. POINTEUR PSEG.PSEG
  30. if (imod.eq.0) then
  31. call oooprm(LRET1,'MOD',HVAL,LVAL,IVAL)
  32. if (lret1.eq.4.AND.LVAL.EQ.4) then
  33. if (hval(1:4).eq.'FAUX') imod=-1
  34. endif
  35. if (imod.eq.0) imod=1
  36. endif
  37. nth=0
  38. if (thread) nth=oothrd
  39. ** si segment deja en lecture on ne fait rien
  40. if((mdro1(pseg).ne.0.or.mdro2(pseg).ne.0).and.mdrw(pseg).eq.0
  41. > .and.ibits(kod,0,18).eq.1.and.imod.eq.1) goto 100
  42.  
  43. C verif queue de desactivation
  44. call ooodeq(nth)
  45. C verif queue de suppression
  46. call ooosuq(nth)
  47. C
  48. C****** SEGMENT EN ZONE DE DEBORDEMENT ? :ON LE RAPPELLE EN MEMOIRE
  49. C
  50. ITYP = MDTYP(PSEG)
  51. IF (MDDISK(ITYP).EQ.MDDISQUE) THEN
  52. IF (TESOOO) CALL OOOWER ('OOOACT => OOOMRD')
  53. CALL OOOMRD (LRET,PSEG)
  54. IF (TESOOO) CALL OOOWER ('OOOACT <= OOOMRD')
  55. IF (LRET.EQ.1) RETURN
  56. ENDIF
  57. C
  58. C****** SEGMENT EN MEMOIRE :
  59. C
  60. C CHANGEMENT DE CHAINE DU SEGMENT
  61. C CHARGEMENT DU NOUVEAU TYPE SEGMENT
  62. C
  63. C SI COMPOSANT D'UN SUPER SEGMENT :
  64. C
  65. C MISE A JOUR DE L'ETAT DU SUPER SEGMENT
  66. C CHANGEMENT DE CHAINE DU MARQUEUR :
  67. C - SI COMPOSANT INACTIF D'UN SUPER SEGMENT
  68. C - SI SUPER SEGMENT DEVIENT ACTIF
  69. C
  70. ITYP = MDTYP(PSEG)
  71. IETAT = MDETAT(ITYP)
  72. ICAT = MDCAT(ITYP)
  73. C
  74. IF (ICAT.EQ.MDISOLE) THEN
  75. IDEA = MDACHN(ACTIF)
  76. ELSE
  77. IDMK = MDMK(PSEG)
  78. IF (IDMK.LT.MZIDEX) GO TO 901
  79. IF (IDMK.GT.MZIDEY) GO TO 901
  80. IF (MOD(IDMK-MZIDE1,MDLDE).NE.0) GO TO 901
  81. IF (MDCAT(MDTYP(IDMK)).NE.MDMARK) GO TO 901
  82. ISMK = MDISG(IDMK)
  83. ITYPMK = MDTYP(IDMK)
  84. C
  85. ISTAT=MSMKISS(ITYP)
  86. MSMKSTAT(ISMK,ISTAT) = MSMKSTAT(ISMK,ISTAT)-1
  87. MSMKSTAT(ISMK,STACTIF) = MSMKSTAT(ISMK,STACTIF)+1
  88. C
  89. IF (S S ACTIF(ISMK)) THEN
  90. IDEA=MDACHN(ACTIF)
  91. MDCHN , IDEA(IDMK)
  92. MDETAT(ITYPMK)=MDACT
  93. MDQUEU(ITYPMK)=0
  94. MDTYP(IDMK)=ITYPMK
  95. MZJSS(ACTACTIF)=MZJSS(ACTACTIF)+1
  96. MZJSS(MAXACTIF)=MAX0(MZJSS(MAXACTIF),MZJSS(ACTACTIF))
  97. MZJSM(ACTACTIF)=MZJSM(ACTACTIF)+(MSLMARK)
  98. MZJSM(MAXACTIF)=MAX0(MZJSM(MAXACTIF),MZJSM(ACTACTIF))
  99. ELSE IF (IETAT.EQ.MDINACT) THEN
  100. IDEA = MDACHN(LRU)
  101. MDCHN , IDEA(IDMK)
  102. ENDIF
  103.  
  104. IDEA = MDACHN(CACTIF)
  105.  
  106. ENDIF
  107. C
  108. MDCHN , IDEA(PSEG)
  109. MDTYP(PSEG)=MDLTYP(ICAT,MDMEM,MDACT,0,MDNBUF)
  110. C
  111. C****** MISE A JOUR DES STATISTIQUES
  112. C
  113. ISEG = MDISG(PSEG)
  114. LSEG = MSLS1(ISEG)
  115. IF (IETAT.EQ.MDINACT) THEN
  116. MZJSS(LUACT) = MZJSS(LUACT)+1
  117. MZJSM(LUACT) = MZJSM(LUACT)+LSEG
  118. ENDIF
  119. IF (IETAT.NE.MDACT) THEN
  120. MZJSS(ACTACTIF) = MZJSS(ACTACTIF)+1
  121. MZJSS(MAXACTIF) = MAX(MZJSS(ACTACTIF),MZJSS(MAXACTIF))
  122. MZJSM(ACTACTIF) = MZJSM(ACTACTIF)+LSEG
  123. MZJSM(MAXACTIF) = MAX(MZJSM(ACTACTIF),MZJSM(MAXACTIF))
  124. ENDIF
  125. C
  126. C****** CONTROLE DE VRAISEMBLANCE DES ZONES GEREES PAR GEMAUX
  127. C A L'INTERIEUR DU SGM ET DUMP SEGMENT
  128. CALL OOODMS (PSEG,1)
  129. IDG=0
  130. IF (MSIDE(ISEG).NE.PSEG) IDG=IDG+1
  131. IF (MSLS2(ISEG).NE.LSEG) IDG=IDG+2
  132. IF (IDG.NE.0) GO TO 902
  133. MDISG(PSEG) = ISEG
  134. IF (ibits(KOD,0,18).EQ.1) THEN
  135. if (imod.eq.1) then
  136. METTRE CE SEGMENT EN READ ONLY (PSEG) = PSEG
  137. endif
  138. ELSE
  139. if (pseg.eq.0) then
  140. write (JLST,*) ' 2 pseg 0 dans oooact '
  141. C write (JERR,*) ' 2 pseg 0 dans oooact '
  142. stop 16
  143. endif
  144.  
  145.  
  146. IF (ICAT.EQ.MDISOLE) THEN
  147. ITRK = MDTRK(PSEG)
  148. if (itrk.ne.0) CALL OOODLB (MZPTRK,ITRK)
  149. MDTRK(PSEG) = 0
  150. ELSE
  151. ITRK = MDTRK(IDMK)
  152. IF (ITRK.GT.0) CALL OOODLB (MZPTRK,ITRK)
  153. MDTRK(IDMK) = 0
  154. ENDIF
  155. ENDIF
  156. 100 continue
  157. LRET = 2
  158. C notre numero de thread dans mdrw
  159. if (ibits(KOD,0,18).ne.1.or.imod.ne.1) mdrw(pseg)=nth+1
  160. if(nth.lt.64) mdro1(pseg)=ibset(mdro1(pseg),nth)
  161. if(nth.ge.64) mdro2(pseg)=ibset(mdro2(pseg),nth-64)
  162. RETURN
  163. C-----------------------------------------------------------------------
  164. C
  165. C MESSAGES D'ERREUR
  166. C
  167. 901 CALL OOOERR (IDMK,-1,'SUPER SEGMENT INCOHERENT')
  168. GO TO 950
  169. 902 CALL OOOERR (IDG , 1,'DESTRUCTION MEMOIRE')
  170. GO TO 950
  171. 950 STOP 16
  172. END
  173.  
  174.  

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