Télécharger ooodes.eso

Retour à la liste

Numérotation des lignes :

ooodes
  1. C OOODES SOURCE PV090527 26/04/24 08:23:03 12524
  2. SUBROUTINE OOODES (LRET,PSEG,KOD)
  3. C-----------------------------------------------------------------------
  4. C
  5. C SEGDES , PSEG*(XMOD,XRU)
  6. C
  7. C ->LRET 1 PLUS DE PLACE MEMOIRE
  8. C 2 OK
  9. C
  10. C PSEG POINTEUR DESIGNANT LE SEGMENT A DESACTIVER
  11. C
  12. C KOD PARAMETRE DE DESACTIVATION
  13. C 0 NOMOD+LRU
  14. C 1 MOD+LRU
  15. C 2 NOMOD+MRU
  16. C 3 MOD+MRU
  17. C 4 RECORD
  18. C
  19. C PROGRAMMEUR : MOUGIN
  20. C MODIF : 17/01/89 UTILISER LE OOODLB SIMPLIFIE
  21. C
  22. C-----------------------------------------------------------------------
  23. C
  24. %INC IOOADR
  25. %INC IOOADZ
  26. %INC IOODES
  27. %INC IOOSGM
  28. %INC IOOWCOM
  29. POINTEUR PSEG.PSEG , PSMARK.PSMARK
  30. C
  31. LRET=2
  32. ITYP = MDTYP(PSEG)
  33. IETAT1 = MDETAT (ITYP)
  34. C PV SI DEJA INACTIF ON NE FAIT RIEN
  35. IF (IETAT1.EQ.MDINACT) RETURN
  36.  
  37. nth=0
  38. if (thread) nth=oothrd
  39. IF (thread.and.(nth.lt.64.and.ibits(mdro1(pseg),nth,1).eq.0).or.
  40. > (nth.ge.64.and.ibits(mdro2(pseg),(nth-64),1).eq.0))
  41. > return
  42. C PV
  43. ibro=0
  44. if (thread) then
  45. nth=oothrd
  46. mdrw(pseg)=ibits(mdrw(pseg),0,18)
  47. if (mdrw(pseg).eq.nth+1) then
  48. mdrw(pseg)=0
  49. ibro=1
  50. endif
  51. if (nth.lt.64) mdro1(pseg)=ibclr(mdro1(pseg),nth)
  52. if (nth.ge.64) mdro2(pseg)=ibclr(mdro2(pseg),nth-64)
  53.  
  54. C segdes*record
  55. if (kod/4.ne.0)
  56. > mdrw(pseg)=ibits(mdrw(pseg),0,18)+ishft((nth+1),18)
  57. if ((mdro1(pseg).eq.0.and.mdro2(pseg).eq.0).or.kod/4.ne.0)
  58. > ibro=1
  59. call oootdl(pseg,iflag)
  60. if(iflag.eq.0) ibro=0
  61.  
  62. if((mdro1(pseg).ne.0.or.mdro2(pseg).ne.0).and.(.not.ooofor))then
  63. if(mdco(pseg).ne.0) then
  64. if(ibro.eq.1) call ooosig(mdco(pseg))
  65. call ooosdl(pseg)
  66. endif
  67. return
  68. endif
  69.  
  70. if (ooofor.and.nth.eq.0) then
  71. mdro1(pseg)=0
  72. mdro2(pseg)=0
  73. mdrw(pseg)=0
  74. endif
  75.  
  76. else
  77. mdro1(pseg)=0
  78. mdro2(pseg)=0
  79. mdrw(pseg)=0
  80. endif
  81. METTRE CE SEGMENT EN READ ONLY (PSEG) = PSEG
  82. NN = KOD+1
  83. IF (MDDISK(ITYP).EQ.MDDISQUE) GOTO 1000
  84. ISTAT1 = MSMKISS(ITYP)
  85. ICAT = MDCAT (ITYP)
  86. C
  87. C
  88. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  89. C
  90. IF (MZPBUF.NE.0) THEN
  91. C
  92. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  93. IF (ICAT.EQ.MDISOLE) THEN
  94. ITRK = MDTRK(PSEG)
  95. ELSE
  96. PSMARK = MDMK (PSEG)
  97. IF (PSMARK.LT.MZIDEX) GO TO 904
  98. IF (PSMARK.GT.MZIDEY) GO TO 904
  99. IF (MOD(PSMARK-MZIDE1,MDLDE).NE.0) GO TO 904
  100. ITYPMK = MDTYP(PSMARK)
  101. IF (MDCAT(ITYPMK).NE.MDMARK) GO TO 904
  102. C
  103. ISMARK = MDISG(PSMARK)
  104. ITRK = MDTRK(PSMARK)
  105. ENDIF
  106. C
  107. C****** DESACTIVATION LRU D'UN COMPOSANT DE SUPER SEGMENT ? :
  108. C ON TRANSFERT LE MARQUEUR DANS LA CHAINE LRU :
  109. C -SI LE MARQUEUR ETAIT MRU
  110. C -SI LE SUPER SEGMENT ETAIT ACTIF
  111. C
  112. IF (ICAT.EQ.MDBLOCK) THEN
  113. IF( (S S ACTIF(ISMARK)) .OR.
  114. * ((NN.EQ.LNOMOD .OR. NN.EQ.LMOD).AND.
  115. * (MDQUEU(ITYPMK).EQ.MDMRU)) ) THEN
  116. IDEA = MDACHN(LRU)
  117. MDCHN , IDEA(PSMARK)
  118. MDQUEU(ITYPMK) = MDLRU
  119. MDETAT(ITYPMK) = MDINACT
  120. MDTYP (PSMARK) = ITYPMK
  121. ENDIF
  122. IF(S S ACTIF(ISMARK)) THEN
  123. MZJSS(ACTACTIF)=MZJSS(ACTACTIF)-1
  124. MZJSM(ACTACTIF)=MZJSM(ACTACTIF)-(MSLMARK)
  125. ENDIF
  126. ENDIF
  127. C
  128. C****** SI LE SEGMENT EST MODIFIE,ON LIBERE LA PLACE DISQUE
  129. C
  130. C IF ((ITRK.NE.0) .AND. (NN.EQ.LMOD .OR. NN.EQ.MMOD)) THEN
  131. C CALL OOODLB (MZPTRK,ITRK)
  132. C IF (ICAT.EQ.MDISOLE) THEN
  133. C MDTRK(PSEG) = 0
  134. C ELSE
  135. C MDTRK(PSMARK) = 0
  136. C ENDIF
  137. C ENDIF
  138. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  139. C
  140. ENDIF
  141. C
  142. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  143. C
  144. C****** PREPARATION DU NOUVEAU TYPE
  145. C
  146. C IF (NN.EQ.LNOMOD .OR. NN.EQ.MNOMOD) THEN
  147. C IF (ITRK.NE.0 ) THEN
  148. IF (.FALSE. ) THEN
  149. MDETAT(ITYP)=MDNOMOD
  150. ELSE
  151. MDETAT(ITYP)=MDMOD
  152. ENDIF
  153. C
  154. IF ((NN.EQ.MNOMOD .OR. NN.EQ.MMOD)
  155. * .AND. (MDOPCHN(MRU).EQ.MDOPOCHN) ) THEN
  156. MDQUEU(ITYP) = MDMRU
  157. ELSE
  158. MDQUEU(ITYP) = MDLRU
  159. ENDIF
  160. MDIO(ITYP) = MDNBUF
  161. C
  162. C****** CHANGEMENT DE CHAINE
  163. C
  164. C CHARGEMENT DANS LA CHAINE LRU OU MRU
  165. C CHARGEMENT DU NOUVEAU TYPE SEGMENT
  166. C
  167. C SI COMPOSANT D'UN SUPER SEGMENT :
  168. C
  169. C MISE A JOUR DE L 'ETAT DU SUPER SEGMENT
  170. C REMISE EN TETE DE CHAINE DU MARQUEUR SI COMPOSANT INACTIF
  171. C D'UN SUPER SEGMENT
  172. C
  173. IF (ICAT.EQ.MDISOLE) THEN
  174. IF (MDQUEU(ITYP).EQ.MDLRU) THEN
  175. IDEA = MDACHN(LRU)
  176. ELSE
  177. IDEA = MSIDS(MDISG(MDACHN(MRU)))
  178. ENDIF
  179. C
  180. ELSE
  181. C
  182. ISTAT2 = MSMKISS(ITYP)
  183. MSMKSTAT(ISMARK,ISTAT1) = MSMKSTAT(ISMARK,ISTAT1) - 1
  184. MSMKSTAT(ISMARK,ISTAT2) = MSMKSTAT(ISMARK,ISTAT2) + 1
  185. IF (IETAT1.EQ.MDINACT) THEN
  186. IDEA = MDACHN(LRU)
  187. MDCHN , IDEA(PSMARK)
  188. ENDIF
  189. IF (MDQUEU(ITYP).EQ.MDLRU) THEN
  190. IDEA = MDACHN(CLRU)
  191. ELSE
  192. IDEA = MSIDS(MDISG(MDACHN(CMRU)))
  193. ENDIF
  194. ENDIF
  195. C
  196. IF (IDEA.NE.PSEG) THEN
  197. MDCHN ,IDEA(PSEG)
  198. ENDIF
  199. MDTYP(PSEG) = ITYP
  200. C
  201. C****** MISE A JOUR DES STATISTIQUES
  202. C
  203. ISEG = MDISG(PSEG)
  204. LSEG = MSLS1(ISEG)
  205. IF (IETAT1.EQ.MDACT) THEN
  206. MZJSS(ACTACTIF) = MZJSS(ACTACTIF)-1
  207. MZJSM(ACTACTIF) = MZJSM(ACTACTIF)-LSEG
  208. ENDIF
  209. C
  210. C****** CONTROLE DE VRAISEMBLANCE DES ZONES GEREES PAR GEMAUX
  211. C A L'INTERIEUR DU SGM ET DUMP SEGMENT
  212. CALL OOODMS (PSEG,1)
  213. IDG = 0
  214. IF (MSIDE(ISEG).NE.PSEG) IDG=IDG+1
  215. IF (MSLS2(ISEG).NE.LSEG) IDG=IDG+2
  216. IF (IDG.NE.0) GO TO 905
  217. IF (VERACT) ADRESSE NEGATIVE DANS LE DESCRIPTEUR (PSEG) = ISEG
  218. GOTO 1000
  219. 1000 continue
  220. C signaler qu'on libere le segment
  221. if (thread.and.mdco(pseg).ne.0) then
  222. if (ibro.eq.1) call ooosig(mdco(pseg))
  223. call ooosdl(pseg)
  224. endif
  225. return
  226. C-----------------------------------------------------------------------
  227. C
  228. C MESSAGES D'ERREUR
  229. C
  230. C
  231. 904 CALL OOOERR (PSMARK,-1,'SUPER SEGMENT INCOHERENT')
  232. GO TO 950
  233. 905 CALL OOOERR (IDG , 1,'DESTRUCTION MEMOIRE')
  234.  
  235. 950 STOP 16
  236. C
  237. END
  238.  
  239.  

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