ooowde
C OOOWDE SOURCE PV090527 26/04/24 08:23:29 12524 cMODE 89/09/29 15:24:48 ESOP SUBROUTINE OOOWDE (LRET,IRET,HARG,PSEG,KOD) C-------------------------------------------------------------------- C C SEGXXX /ERR=100/ PSEG C C ->LRET 1 PLUS DE PLACE MEMOIRE ET : IRET = 1 C 2 OK C C IRET ACTION SI PLUS DE PLACE MEMOIRE C 0 STOP 16 C 1 RETURN AVEC LRET = 1 C C HARG 'NOM_SUBROUTINE NUMERO_LIGNE NOM_SEGMENT ' C C PSEG POINTEUR DESIGNANT LE SEGMENT C C KOD PARAMETRE DE DESACTIVATION C 0 NOMOD+LRU C 1 MOD+LRU C 2 NOMOD+MRU C 3 MOD+MRU C 4 RECORD C C PROGRAMMEUR : MOUGIN C CREE : 15/12/88 OOOY.. => OOOW.. (ARGUMENT HARG EN PLUS) C MODIF : 02/05/89 SEPARE D'AVEC L'ENTRY OOOWAD C C-------------------------------------------------------------------- C %INC IOOADR %INC IOOADZ %INC IOODES %INC IOOSGM %INC IOOWCOM %INC IOOUNIT %INC IOOSAF CHARACTER*(*) HARG POINTEUR PSEG.PSEG INTEGER ITTIME(4) LOGICAL LGLL,LWAIT CHARACTER*(6) HDUREE C Pour le message affiche HDIA = HARG LDIA = LEN(HARG) C On saute l'ENTRY OOOYDE GOTO 100 ENTRY OOOYDE (LRET,IRET,PSEG,KOD) LDIA = 0 100 CONTINUE KASINS = INSTRUCTION_SEGDES if(pseg.eq.abs(MZSURV)) CALL OOOMES(pseg,'GEMAT SURVEILLE ') C Logique pour chronométrer l'attente C LWAIT=.TRUE. duree dans ooowait seulement C LGLL =.TRUE. duree dans ooogll seulement LGLL =MZATTE .LT. 0 .AND. thread LWAIT =MZATTE .GT. 0 nth=0 if (thread) nth=oothrd * si deja inactif if (thread.and.nth.lt.64.and.ibits(mdro1(pseg),nth,1).eq.0) return if (thread.and.nth.ge.64.and.ibits(mdro2(pseg),nth-64,1).eq.0) > return * en mode force on est dans menage. Pas de segdes si surveillance pourquoi? ** if(ooofor.and.mzsurv.ne.0) return C SEGMENT mis en queue de desactivation SAUF C - RECORD if (kod/4 .eq. 0) then IDESQ(nth) =IDESQ(nth)+1 DESQ(nth,IDESQ(nth))=PSEG endif C DESACTIVATION des elements de la queue lorsque : C - queue pleine C - mode FORCE (menage) C - mode RECORD pareil a cause de gibiane C - mode SURVEILLANCE (DEBUG) C - mode VERACT (ESOPE_PARAM) IF(IDESQ(nth).EQ.NDESQ .or. ooofor .or. & kod/4 .ne. 0 .or. MZSURV.GT.0 .or. VERACT)then C Debut du Chronometre if (LGLL) CALL oootps(ITTIME,nth) if (thread) then lnsf(nth)=1 call ooogll(1) lnsf(nth)=0 endif if (LGLL) then C Fin du Chronometre : Mesure du temps ITPS0=ITTIME(1)+ITTIME(2) CALL oootps(ITTIME,nth) IELAPS=ITTIME(1)+ITTIME(2)-ITPS0 IF(IELAPS .ge. ABS(MZATTE))THEN WRITE(HDUREE,'(i6)') IELAPS CALL OOOMES(PSEG,'GEMAT ATTEND'//HDUREE) ENDIF endif C Vidange de la queue de desactivation call ooodeq(nth) if (kod/4.ne.0) then CALL OOOVPN(PSEG) CALL OOODES (LRET,PSEG,KOD) IF(LRET.EQ.1) THEN IF(IRET.EQ.0) GO TO 901 ENDIF endif if (thread) call ooogll(0) C en force on supprime eventuellement la condition if (thread.and.ooofor.and.nth.eq.0.and.mdco(pseg).ne.0) then call ooocdt(mdco(pseg)) mdco(pseg)=0 endif endif RETURN C----------------------------------------------------------------------- C MESSAGES D'ERREUR C----------------------------------------------------------------------- 901 CALL OOOERR (0,0,'PAS ASSEZ DE PLACE EN MEMOIRE') STOP 16 END
© Cast3M 2003 - Tous droits réservés.
Mentions légales