Télécharger ooowsu.eso

Retour à la liste

Numérotation des lignes :

ooowsu
  1. C OOOWSU SOURCE PV090527 26/04/24 08:23:33 12524
  2. CMODE 89/09/29 15:24:48 ESOP
  3. SUBROUTINE OOOWSU (LRET,IRET,HARG,PSEG,KOD)
  4. C--------------------------------------------------------------------
  5. C
  6. C SEGXXX /ERR=100/ PSEG
  7. C
  8. C ->LRET 1 PLUS DE PLACE MEMOIRE ET : IRET = 1
  9. C 2 OK
  10. C
  11. C IRET ACTION SI PLUS DE PLACE MEMOIRE
  12. C 0 STOP 16
  13. C 1 RETURN AVEC LRET = 1
  14. C
  15. C HARG 'NOM_SUBROUTINE NUMERO_LIGNE NOM_SEGMENT '
  16. C
  17. C PSEG POINTEUR DESIGNANT LE SEGMENT
  18. C LSEG LONGUEUR DES DONNEES DU SEGMENT EN MOTS
  19. C
  20. C PROGRAMMEUR : MOUGIN
  21. C CREE : 15/12/88 OOOY.. => OOOW.. (ARGUMENT HARG EN PLUS)
  22. C MODIF : 02/05/89 SEPARE D'AVEC L'ENTRY OOOWAD
  23. C
  24. C--------------------------------------------------------------------
  25. C
  26. %INC IOOADR
  27. %INC IOOADZ
  28. %INC IOODES
  29. %INC IOOSGM
  30. %INC IOOWCOM
  31. %INC IOOUNIT
  32. %INC IOOSAF
  33.  
  34. CHARACTER*(*) HARG
  35. POINTEUR PSEG.PSEG
  36. integer ooolen
  37.  
  38. INTEGER ITTIME(4)
  39. LOGICAL LGLL,LWAIT
  40. CHARACTER*(6) HDUREE
  41.  
  42.  
  43. HDIA = HARG
  44. LDIA = LEN(HARG)
  45.  
  46. C On saute l'ENTRY OOOYSU
  47. GOTO 100
  48.  
  49. ENTRY OOOYSU (LRET,IRET,PSEG,KOD)
  50. HDIA =' '
  51. LDIA = 0
  52.  
  53. 100 CONTINUE
  54.  
  55. IF (PSEG.EQ.0) RETURN
  56. KASINS = INSTRUCTION_SEGSUP
  57.  
  58. if(pseg.eq.abs(MZSURV)) CALL OOOMES(pseg,'GEMAT SURVEILLE ')
  59.  
  60. C Logique pour chronométrer l'attente
  61. C LWAIT=.TRUE. duree dans ooowait seulement
  62. C LGLL =.TRUE. duree dans ooogll seulement
  63. LGLL =MZATTE .LT. 0 .AND. thread
  64. LWAIT =MZATTE .GT. 0
  65.  
  66. nth=0
  67. if (thread) nth=oothrd
  68.  
  69. C Si horodatage SEGMENT plus ancien que horodatage COURANT ==> RETURN
  70. C On n'autorise pas la suppression d'un SEGMENT cree dans un operateur plus ancien
  71. if (.not.ooofor .and. MDHOR(PSEG).LT.HORO(NTH))then
  72. C En mode VERACT je chasse les SEGSUP de SEGMENTS ANTI-HORODATE ==> GEMAT ERROR
  73. if (VERACT) GOTO 902
  74.  
  75. LRET=2
  76. return
  77. endif
  78.  
  79. C SEGMENT mis en queue de suppression
  80. ISUPQ(nth)=ISUPQ(nth)+1
  81. SUPQ(nth,ISUPQ(nth))=PSEG
  82. LSUPQ(nth)=LSUPQ(nth)+ooolen(pseg)
  83.  
  84. C Retrait des SEGEMENT a supprimer de la queue de DESACTIVATION (Voir ooowde --> SEGDES)
  85. do i=1,idesq(nth)
  86. if (abs(desq(nth,i)).eq.pseg) desq(nth,i)=0
  87. enddo
  88.  
  89. C SUPPRESSION des elements de la queue lorsque :
  90. C - queue pleine
  91. C - mode FORCE (menage)
  92. C - mode SURVEILLANCE (DEBUG)
  93. C - La taille occupee par les elements de la queue de suppression depasse une taille limite
  94. C - mode VERACT (ESOPE_PARAM)
  95. IF (ISUPQ(nth) .EQ. NSUPQ .or. ooofor .OR. MZSURV .GT. 0 .or.
  96. & LSUPQ(nth) .ge. 1048576 .OR. VERACT) then
  97. C Debut du Chronometre
  98. if (LGLL) CALL oootps(ITTIME,nth)
  99.  
  100. if (thread) then
  101. lnsf(nth)=0
  102. call ooogll(1)
  103. lnsf(nth)=1
  104. endif
  105.  
  106. if (LGLL) then
  107. C Fin du Chronometre : Mesure du temps
  108. ITPS0=ITTIME(1)+ITTIME(2)
  109. CALL oootps(ITTIME,nth)
  110. IELAPS=ITTIME(1)+ITTIME(2)-ITPS0
  111. IF(IELAPS .ge. ABS(MZATTE))THEN
  112. WRITE(HDUREE,'(i6)') IELAPS
  113. CALL OOOMES(PSEG,'GEMAT ATTEND'//HDUREE)
  114. ENDIF
  115. endif
  116.  
  117. C Vidange de la queue de suppression
  118. CALL OOOSUQ(nth)
  119. if (thread) call ooogll(0)
  120. endif
  121. PSEG=0
  122. LRET=2
  123. RETURN
  124.  
  125. C Debut du Chronometre
  126. if (LGLL) CALL oootps(ITTIME,nth)
  127.  
  128. if (thread) call ooogll(1)
  129.  
  130. if (LGLL) then
  131. C Fin du Chronometre : Mesure du temps
  132. ITPS0=ITTIME(1)+ITTIME(2)
  133. CALL oootps(ITTIME,nth)
  134. IELAPS=ITTIME(1)+ITTIME(2)-ITPS0
  135. IF(IELAPS .ge. ABS(MZATTE))THEN
  136. WRITE(HDUREE,'(i6)') IELAPS
  137. CALL OOOMES(PSEG,'GEMAT ATTEND'//HDUREE)
  138. ENDIF
  139. endif
  140.  
  141. C Hors MENAGE (force), et dans les ASSISTANTS : il faut attendre que le segment soit libre
  142. if (.not.ooofor .or. nth.ne.0) then
  143. 10 if ((ibits(mdrw(pseg),0,18) .ne. 0 .and.
  144. & ibits(mdrw(pseg),0,18) .ne. nth+1).or.
  145. & (nth.lt.64.and.mdro1(pseg) .ne. 0 .and.
  146. & mdro1(pseg) .ne. ibset(0,nth)).or.
  147. & (nth.ge.64.and.mdro2(pseg) .ne. 0 .and.
  148. & mdro2(pseg) .ne. ibset(0,nth-64))) then
  149. C on doit attendre.
  150. C si necessaire on cree une condition
  151. if (mdco(pseg).eq.0) then
  152. call ooocon(mdco(pseg))
  153. endif
  154. call oooddl(pseg,HDIA)
  155.  
  156. C Debut du Chronometre
  157. if (LWAIT) CALL oootps(ITTIME,nth)
  158.  
  159. lnsf(nth)=0
  160. call ooowait(mdco(pseg))
  161. lnsf(nth)=1
  162.  
  163. if (LWAIT) then
  164. C Fin du Chronometre : Mesure du temps
  165. ITPS0=ITTIME(1)+ITTIME(2)
  166. CALL oootps(ITTIME,nth)
  167. IELAPS=ITTIME(1)+ITTIME(2)-ITPS0
  168. C I1 = INDEX(HDIA( 1:LDIA),' ')
  169. IF(IELAPS .ge. ABS(MZATTE))THEN
  170. WRITE(HDUREE,'(i6)') IELAPS
  171. CALL OOOMES(PSEG,'GEMAT ATTEND'//HDUREE)
  172. ENDIF
  173. endif
  174. call oooudl
  175.  
  176. goto 10
  177. endif
  178. endif
  179.  
  180. CALL OOOVPN (PSEG)
  181. CALL OOOSUP (LRET,PSEG,KOD)
  182. IF (LRET.EQ.1) THEN
  183. IF (IRET.EQ.0) GO TO 901
  184. C Remise a ZERO de PSEG deja faite dans OOOSUP en sortie
  185. C ELSE
  186. C PSEG = 0
  187. ENDIF
  188. if (thread) call ooogll(0)
  189. RETURN
  190. C-----------------------------------------------------------------------
  191. C MESSAGES D'ERREUR
  192. C-----------------------------------------------------------------------
  193. 901 CALL OOOERR (0,0,'PAS ASSEZ DE PLACE EN MEMOIRE')
  194. STOP 16
  195. 902 CALL OOOERR (PSEG,-1,'POINTEUR ANTI-HORODATE')
  196. STOP 16
  197. END
  198.  
  199.  

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