Télécharger ooodrd.eso

Retour à la liste

Numérotation des lignes :

ooodrd
  1. C OOODRD SOURCE PV090527 26/04/24 08:23:06 12524
  2. SUBROUTINE OOODRD (PTRK,ITRK,BUFFET,NBMOTS)
  3. C--------------------------------------------------------------------
  4. C
  5. C LECTURE DE : (BUFFET(I),I=1,NBMOTS)
  6. C
  7. C PTRK DESIGNE LE SEGMENT DE GESTION : ESPACE FICHIER
  8. C ITRK NUMERO DU PREMIER BLOC DU CHAINAGE DE BLOC A LIRE
  9. C ->BUFFET LES NBMOTS MOTS LUS
  10. C NBMOTS NOMBRE DE MOTS A LIRE
  11. C
  12. C PROGRAMMEUR : MOUGIN
  13. C MODIF : 02/01/89 SUPPRIMER : L'ARGUMENT LRET
  14. C MODIF : 04/02/89 REGROUPER AVEC OOODWD ET OOODLB
  15. C MODIF : 03/04/89 SUPPRIMER LE MESSAGE FICHIER PLEIN
  16. C
  17. C--------------------------------------------------------------------
  18. C
  19. C%IF WIN32
  20. C Include fait pour l'interfaçage FORTRAN - C avec Microsoft Visual C
  21. C INCLUDE 'esope.fi'
  22. C%ENDIF
  23. %INC IOOADR
  24. %INC IOOPTRK
  25. %INC IOOWCOM
  26. %INC IOOUNIT
  27. C
  28. INTEGER BUFFET(*)
  29. C
  30. save itrb
  31. LTRK = PTRK.LLTRK
  32. ITRC = ITRK
  33. IF (TESOOO) PRINT * ,' OOODRD : LIRE LE BLOC : ',ITRC
  34. 1 ,' NBMOTS = ',NBMOTS
  35. DO KA = 1,NBMOTS,LTRK
  36. IF (TESOOO) THEN
  37. IF (KA.GT.1) THEN
  38. PRINT * ,' : ',ITRC
  39. ENDIF
  40. ENDIF
  41. if (itrc.ne.0) then
  42. C if (itrc.eq.itrb)write (JLST,*) ' lecture en sequence ',ka
  43. C if (itrc.ne.itrb)write (JLST,*) ' lecture hors sequence ',ka
  44. endif
  45. CALL OOOZRD (LRET,ITRC,BUFFET(KA),MIN(LTRK,NBMOTS+1-KA))
  46. IF (LRET.EQ.1) STOP 16
  47. itrb=itrc+1
  48. ITRC=PTRK.JTRK(ITRC)
  49. ENDDO
  50. MZJSS(LUS) = MZJSS(LUS)+(NBMOTS+LTRK-1)/LTRK
  51. MZJSM(LUS) = MZJSM(LUS)+ NBMOTS
  52. RETURN
  53. C--------------------------------------------------------------------
  54. C
  55. C ECRITURE DE : (BUFFET(I),I=1,NBMOTS)
  56. C
  57. C PTRK DESIGNE LE SEGMENT DE GESTION : ESPACE FICHIER
  58. C ->ITRK NUMERO DU PREMIER BLOC UTILISE
  59. C BUFFET CONTIENT LES NBMOTS MOTS A ECRIRE
  60. C NBMOTS NOMBRE DE MOTS A ECRIRE
  61. C
  62. ENTRY OOODWD (PTRK,ITRK,BUFFET,NBMOTS)
  63. C
  64. C ->ITR1 LE DERNIER BLOC UTILISE
  65. C ->ITR2 LE PROCHAIN BLOC UTILISE
  66. C
  67. C on alloue des blocs consecutifs pour l'enregistrement
  68. C
  69. LTRK = PTRK.LLTRK
  70. ITR1 = -777777
  71. ITR2 = PTRK.NTRL
  72. IF (TESOOO) PRINT * ,' OOODWD : ECRIRE LE BLOC : ',ITR2
  73. 1 ,' NBMOTS = ',NBMOTS
  74. DO KA=1,NBMOTS,LTRK
  75. IF (TESOOO) THEN
  76. IF (KA.GT.1) THEN
  77. PRINT * ,' : ',ITR2
  78. ENDIF
  79. ENDIF
  80. IF (ITR2.EQ.0) THEN
  81. ITRK = 0
  82. RETURN
  83. ENDIF
  84. C Modif PV pour ecrire juste la bonne longueur
  85. C CALL OOOZWD (LRET,ITR2,BUFFET(KA),LTRK)
  86. CALL OOOZWD (LRET,ITR2,BUFFET(KA),MIN(LTRK,NBMOTS+1-KA))
  87. C fin modif
  88. IF (LRET.EQ.1) STOP 16
  89. ITR1 = ITR2
  90. ITR2 = PTRK.JTRK(ITR1)
  91. C if (itr2.eq.itr1+1)write (JLST,*) ' ecriture en sequence ',ka
  92. C if (itr2.ne.itr1+1)write (JLST,*) ' ecriture hors sequence ',ka
  93. ENDDO
  94. C* nbloc=(nbmots-1)/ltrk+1
  95. C recherche d'un trou de taille suffisante
  96. C* itr1=ptrk.ntrl
  97. C* itr2=itr1
  98. C*10 continue
  99. C* itrp=itr2
  100. C* itr0=itr1
  101. C* do j=2,nbloc
  102. C* itr2=itr1
  103. C* itr1=ptrk.jtrk(itr1)
  104. C* if (itr1.ne.itr2+1) goto 10
  105. C* if (itr1.eq.0) then
  106. C* itrk=0
  107. C* return
  108. C* endif
  109. C* enddo
  110. C ecriture longue
  111. C write (JLST,*) ' ecriture position longueur ',itr0,nbmots
  112. C* call ooozwd(lret,itr0,buffet(1),nbmots)
  113. C* itrk=itr0
  114. C mise a jour des chainages
  115. C* if (itr0.ne.ptrk.ntrl) then
  116. C* ptrk.jtrk(itrp)=ptrk.jtrk(itr1)
  117. C* else
  118. C* ptrk.ntrl=ptrk.jtrk(itr1)
  119. C* endif
  120. C* ptrk.jtrk(itr1)=0
  121. C
  122. C****** FIN DE CHAINAGE ET STATISTIQUE
  123. C
  124. ITRK = PTRK.NTRL
  125. PTRK.NTRL = PTRK.JTRK(ITR1)
  126. PTRK.JTRK(ITR1) = 0
  127. MZJSS(ECRIS) = MZJSS(ECRIS)+(NBMOTS+LTRK-1)/LTRK
  128. MZJSM(ECRIS) = MZJSM(ECRIS)+ NBMOTS
  129. RETURN
  130. C--------------------------------------------------------------------
  131. C
  132. C LIBERATION D'ESPACE SUR FICHIER
  133. C
  134. C PTRK DESIGNE LE SEGMENT DE GESTION : ESPACE FICHIER
  135. C ITRK NUMERO DU PREMIER BLOC DU CHAINAGE DE BLOCS A LIBERER
  136. C
  137. C
  138. C
  139. C on suppose que la chaine des blocs libres est ordonnee et on
  140. C la maintient ordonnee
  141. ENTRY OOODLB (PTRK,ITRK)
  142. C
  143. IF (TESOOO) PRINT * ,' OOODLB : LIBERER LE BLOC : ',ITRK
  144. IF (ITRK.NE.0) THEN
  145. ITRC=ITRK
  146. DO WHILE (ITRC.NE.0)
  147. ITRCN =PTRK.JTRK(ITRC)
  148. IF (TESOOO) PRINT * ,' : ',ITRC
  149. itrbp=0
  150. itrb=ptrk.ntrl
  151. do while (itrb.le.itrc)
  152. itrbp=itrb
  153. itrb=ptrk.jtrk(itrb)
  154. enddo
  155. if (itrbp.ne.0) then
  156. ptrk.jtrk(itrbp)=itrc
  157. else
  158. ptrk.ntrl=itrc
  159. endif
  160. ptrk.jtrk(itrc)=itrb
  161. ITRC=ITRCN
  162. ENDDO
  163. ENDIF
  164.  
  165. END
  166.  
  167.  

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