ooodex
C OOODEX SOURCE PV090527 26/04/24 08:23:04 12524 SUBROUTINE OOODEX (LRET,NDE) C------------------------------------------------------------------- C C EXTENSION DU SEGMENT DES DESCRIPTEURS C C DOIT ETRE APPELLE LORSQU'IL N Y A PLUS DE DESCRIPTEURS LIBRES C LE CHAINAGE DES NOUVEAUX DESCRIPTEURS ( AVEC MZIDE1 ) EST REALISE C C ->LRET 1 PLUS DE PLACE MEMOIRE C 2 OK C C NDE NOMBRE DE DESCRIPTEURS A AJOUTER (DIFFERENT DE 0) C C MZIDEY(DERNIER DESCRIPT. POUVANT ETRE ATTRIBUE) EST RECALCULE C LES NOUVEAUX DESCRIPTEURS LIBRES SONT C CHAINES ENTRE L ANCIEN MZIDEY ET LE NOUVEAU . C C PROGRAMMEUR : MOUGIN C MODIF : 16/11/88 PLUS DE LRET DANS CALL OOOMSU C MODIF : 09/01/89 PLUS DE LRET=3 DANS CALL OOOMIN C MODIF : 09/01/89 OOOMIN ( ... , 1 ) => OOOMEX ( ... ) C MODIF : 17/01/89 SUPPRIMER IRET DANS CALL OOOMWD C MODIF : 17/01/89 SUPPRIMER IRET DANS SUBROUTINE OOODEX C MODIF : 27/02/89 LOGIQUE SIMPLIFIEE ET OOOMEX SIMPLIFIE C C------------------------------------------------------------------- C %INC IOOADR %INC IOOADZ %INC IOODES %INC IOOSGM %INC IOOTRO %INC IOOWCOM C C****** INIT TRAITEMENT:INDICE SGM DESCRIPT,LG ACTUELLE C C ->ISDES INDICE DU SEGMENT DES DESCRIPTEURS C ->LSDE1 LONGUEUR ACTUELLE DU SEGMENT DES DESCRIPTEURS C ->LSDE2 LONGUEUR DESIREE DU SEGMENT DES DESCRIPTEURS C if (thread) call oooblo ISDES = MDISG(MZIDDX) LSDE1 = MSLS1(ISDES) MZJSM(DESCR)= ((LSDE1+NDE*MDLDE+MSLSM-1)/MSLSM) MZJSS(DESCR)= MZJSM(DESCR) LSDE2 = MZJSM(DESCR)*MSLSM ** write(6,*) 'extension ',lsde1/mslsm,lsde2/mslsm DO WHILE (MSLS1(ISDES).LT.LSDE2) IS1 = ISDES+MSLS1(ISDES) LS1 = MSLS1(IS1) IF (LS1.EQ.0) THEN LRET = 1 RETURN ELSEIF (LS1.GT.0) THEN ID1 = MSIDE(IS1) ICAT = MDCAT(MDTYP(ID1)) IF (ICAT.EQ.MDFIXE) THEN LRET = 1 RETURN ELSEIF (ICAT.EQ.MDMARK) THEN LS1 = MSMARK(IS1)+MSLMARK ENDIF C RECHERCHE D'UNE PLACE POUR LE SEGMENT A DROITE C AVEC REGLE D'ATTRIBUTION A DROITE DANS LE TROU LATGD = MZATGD(IZA,ZMEMDYN) MZATGD(IZA,ZMEMDYN) = 1 CALL OOOMIN (LRET,ZMEMDYN,IS2,LS1) MZATGD(IZA,ZMEMDYN) = LATGD C SI PAS DE PLACE EN ZONE ACTIVE : EN FAIRE C ET ON REITERE EN EXAMINANT DE NOUVEAU LA SITUATION C A DROITE DU SGM DES DESCRIPT. CAR ELLE A PU CHANGER IF (LRET.EQ.1) THEN IF (TESOOO) CALL OOOWER (' OOODEX => OOOMWD') CALL OOOMWD (LRET,LS1) IF (TESOOO) CALL OOOWER (' OOODEX <= OOOMWD') IF (LRET.EQ.1) RETURN C IL Y A DE LA PLACE:ON DEPLACE LE SGM A DROITE DANS SON TROU, C MISE A JOUR STATISTIQUES C MISE A JOUR DU OU DES DESCRIPTEURS ELSE CALL OOOZDE (JSG(IS2+1),JSG(IS1+1),LS1) ISG=IS2 DO WHILE (ISG.LT.IS2+LS1) IDE = MSIDE(ISG) MDISG(IDE) =ISG ISG = ISG+MSLS1(ISG) ENDDO CALL OOOMSU (IZA,IS1,LS1) ENDIF ELSEIF (LS1.LT.0) THEN CALL OOOMEX (ISDES,LSDE2) C FAIRE LA CHAINE DES NOUVEAUX DESCRIPTEURS LIBRES . IDEM = MZIDEY+MDLDE MZIDEY = ((MSLS1(ISDES)-MSLCZ-(MDLDE-1))/MDLDE)*MDLDE-1 MZIDEY= IDEM+(MZIDEY-IDEM)/MDLDE*MDLDE DO IDE = IDEM,MZIDEY,MDLDE MDZERO(IDE) = 0 MDIDS (IDE) = -(IDE+MDLDE) MDIDP (IDE) = -(IDE-MDLDE) ENDDO IF (IDEM.LE.MZIDEY) THEN MDIDS(MZIDEY) = MDIDS(MZIDE1) MDIDP(-MDIDS(MZIDEY)) = -MZIDEY MDIDS(MZIDE1) = -IDEM MDIDP(IDEM) = -MZIDE1 ENDIF ENDIF ENDDO LRET = 2 if (thread) call ooodbl END
© Cast3M 2003 - Tous droits réservés.
Mentions légales