Télécharger oooseg.eso

Retour à la liste

Numérotation des lignes :

oooseg
  1. C OOOSEG SOURCE PV090527 26/04/24 08:23:20 12524
  2. SUBROUTINE OOOSEG(imod)
  3. C---------------------------------------------------------------------
  4. C
  5. C INITIALISER G E M A T
  6. C
  7. C UN PGM ESOPE DEBUTE PAR CALL OOOSSG ET SE TERMINE PAR CALL OOOSTP
  8. C
  9. C PROGRAMMEUR : MOUGIN
  10. C MODIF : 09/01/89 UTILISER LE OOOMIN SIMPLIFIE
  11. C MODIF : 26/01/89 OOV(1:8) = 0
  12. C MODIF : 20/02/89 PRISE EN COMPTE DU PARAMETRE VERACT
  13. C MODIF : 17/04/89 FORCER LE CHARGEMENT DE OOOWAD
  14. C MODIF : 02/05/89 NE PLUS FORCER LE CHARGEMENT DE OOOWAD
  15. C
  16. C---------------------------------------------------------------------
  17. C
  18. C%IF WIN32
  19. C Include fait pour l'interfaçage FORTRAN - C avec Microsoft Visual C
  20. C INCLUDE 'esope.fi'
  21. C%ENDIF
  22. %INC IOOADR
  23. %INC IOOADZ
  24. %INC IOOSGM
  25. %INC IOODES
  26. %INC IOOUNIT
  27. %INC IOOWCOM
  28. %INC IOOSAF
  29. C
  30. CHARACTER*8 HPRM
  31. INTEGER ISB(13)
  32. C
  33. C TABLES DE CORRESPONDANCE DES CHAINES
  34. C
  35. C (POUR LA NUMEROTATION DE CHAINE VOIR LA MACRO CORRESPONDANTE )
  36. C DANS IOODES
  37. C
  38. PARAMETER ( NBCHN=64 , NBBIT=8 )
  39. INTEGER NCHAIN(NBCHN) , NMKSS(NBBIT) , NCBUF(NBBIT)
  40. INTEGER NCMRU(12)
  41. C
  42. C
  43. C NUMERO DE CHAINE EN FONCTION DE CATEGORIE(ICAT)
  44. C ETAT(IETAT)
  45. C NATURE DE DESACTIVATION(IQUEU)
  46. C ENTREE/SORTIE (IBUF)
  47. C
  48. C |--VALEUR DE L'INDICE TABLE
  49. C | +1
  50. C ISOLE
  51. C ------
  52. C *ICAT --> 00 ISOLE
  53. C 01 FIXE 16 1 ACTIF
  54. C 10 COMPOSANT 32 5 LRU
  55. C 11 MARQUEUR 48 6 OLIN
  56. C 9 LRU
  57. C *IETAT --> 00 ACTIF 10 OLNOMOD
  58. C 01 INACTIF 4 11 MRU
  59. C 10 NOMOD 8 12 OMNOMOD
  60. C 11 MOD 12 13 LRU
  61. C 14 OLMOD
  62. C *IQUEU --> 0 LRU 15 MRU
  63. C 1 MRU 2 16 OMMOD
  64. C 17 FIXE
  65. C COMPOSANTS
  66. C ----------
  67. C *IBUF --> 0 MEMOIRE 33 CACTIF
  68. C 1 BUFFER 1 37 CLRU
  69. C 41 CLRU
  70. C 43 CMRU
  71. C 45 CLRU
  72. C 47 CMRU
  73. C MARQUEUR
  74. C --------
  75. C 49 ACTIF
  76. C 53 LRU
  77. C 55 MRU
  78. C 57 LRU
  79. C 59 MRU
  80. C 61 LRU
  81. C 63 MRU
  82. C
  83. DATA NCHAIN /1 , 0 , 0 , 0 , 3 , 8 , 0 , 0 ,
  84. * 3 , 9 , 4 ,11 , 3 ,10 , 4 ,12 ,
  85. * 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
  86. * 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
  87. * 5 , 0 , 0 , 0 , 6 , 0 , 0 , 0 ,
  88. * 6 , 0 , 7 , 0 , 6 , 0 , 7 , 0 ,
  89. * 1 , 0 , 0 , 0 , 3 , 0 , 4 , 0 ,
  90. * 3 , 0 , 4 , 0 , 3 , 0 , 4 , 0 /
  91. C
  92. C
  93. C NUMERO DE COMPTEUR STATISTIQUE EN FONCTION DE :
  94. C ETAT(IETAT)
  95. C (SUPER SEGMENT) NATURE DE DESACTIVATION(IQUEU)
  96. C
  97. C
  98. C |--VALEUR DE L'INDICE TABLE
  99. C | +1
  100. C
  101. C *IETAT --> 00 ACTIF 1 STACTIF
  102. C 01 INACTIF 2 3 STINACT
  103. C 10 NOMOD 4 5 STLNOMOD
  104. C 11 MOD 6 6 STMNOMOD
  105. C 7 STLMOD
  106. C *IQUEU --> 0 LRU 8 STMMOD
  107. C 1 MRU 1
  108. C
  109. DATA NMKSS /1 , 0 , 2 , 0 , 3 , 5 , 4 , 6 /
  110. C
  111. C
  112. C
  113. C NUMERO DE FILE BUFFER EN FONCTION DE :
  114. C ETAT(IETAT)
  115. C NATURE DE DESACTIVATION(IQUEU)
  116. C
  117. C
  118. C |--VALEUR DE L'INDICE TABLE
  119. C | +1
  120. C
  121. C *IETAT --> 00 ACTIF 3 OLIN
  122. C 01 INACTIF 2 5 OLNOMOD
  123. C 10 NOMOD 4 6 OMNOMOD
  124. C 11 MOD 6 7 OLMOD
  125. C 8 OMMOD
  126. C *IQUEU --> 0 LRU
  127. C 1 MRU 1
  128. C
  129. DATA NCBUF / 0 , 0 , 8 , 0 , 9 ,11 ,10 ,12 /
  130. C
  131. C CHAINE LRU CORRESPONDANTE A MRU LORS DE LA FERMETURE MRU
  132. C
  133. C
  134. DATA NCMRU / 0 , 0 , 0 , 3 , 0 , 0 , 6 , 0 , 0 , 0 , 3 , 3/
  135. C
  136. C-----------------------------------------------------------------------
  137. C
  138. C
  139. C*
  140. C* INIT GESTION MEMOIRE ACTIVE
  141. C*
  142. C-----------------------------------------------------------------------
  143. C Branchement des unites de sortie
  144. C-----------------------------------------------------------------------
  145. %IF UNIX32,UNIX64,WIN32,WIN64
  146. CALL OOOUNI(imod)
  147. %ELSE
  148. JLST=6
  149. JERR=6
  150. JOUT=98
  151. JDEB=20
  152. %ENDIF
  153. C
  154. C****** INITIALISATIONS
  155. C
  156. thread=.false.
  157. ooofor=.false.
  158. do ith=0,128
  159. horo(ith)=0
  160. lnsf(ith)=0
  161. enddo
  162. do ith=0,128
  163. isupq(ith)=0
  164. lsupq(ith)=0
  165. idesq(ith)=0
  166. enddo
  167. lnsf(0)=1
  168. oothrd=0
  169. oow(1)=0
  170. call oooidl
  171. MZPRTR=MZIS0(IZA)
  172. CALL OOOPRM (LRET,'OOO' ,HPRM,LPRM,IPRM)
  173. TESOOO = LRET.EQ.2
  174. CALL OOOPRM (LRET,'VERACT',HPRM,LPRM,IPRM)
  175. VERACT = LRET.EQ.4
  176. IF (VERACT) THEN
  177. VERACT = HPRM.NE.'NON'
  178. ELSE
  179. VERACT = .TRUE.
  180. ENDIF
  181.  
  182. DO I=1,MDNNCHN
  183. MZQCHN(I)=0
  184. MZCMRU(I)=NCMRU(I)
  185. ENDDO
  186. C
  187. DO I=1,NBCHN
  188. MZCHN(I)=NCHAIN(I)
  189. ENDDO
  190. C
  191. DO I=1,NBBIT
  192. MZMKSS(I)=NMKSS(I)
  193. MZCBUF(I)=NCBUF(I)
  194. ENDDO
  195. C
  196. C****** INIT MEMOIRE ACTIVE + RESERVE BUFFERS
  197. C
  198. CALL OOOMOP (LRET)
  199. IF (LRET.EQ.1) GO TO 950
  200. C
  201. C**********************************************************************
  202. C*
  203. C* RESERVER MDNNCHN SEGMENTS OCCULTES(REPRESENTENT LA CLASSE VIDE)
  204. C* DE TAILLE MINIMUM QUI
  205. C* SERVIRONT DE BASES AUX CHAINAGES DES SEGMENTS
  206. C*
  207. C***********************************************************************
  208. C
  209. C****** ATTRIB PLACE MEMOIRE(ON STOCKE DS ISB(I) L'INDICE DEBUT SEGM
  210. C
  211. C ON POSITIONNE LA REGLE D'ATTRIBUTION MEMOIRE A GAUCHE
  212. C
  213. MZATGD(IZA,ZMEMDYN)=0
  214. C
  215. GESMEM = GESMEM_SORTIE_DISQUE
  216. DO I=1,MDNNCHN
  217. IIIIII=MSLSM
  218. CALL OOOMIN (LRET,ZMEMDYN,ISB(I),IIIIII)
  219. IF (LRET.EQ.1) GO TO 901
  220. ENDDO
  221. C
  222. C***********************************************************************
  223. C*
  224. C* INIT SEGMENT DES DESCRIPTEURS
  225. C* INITIALISER LA PARTIE RESERVEE AU SYSTEME DU SEGMENT DES
  226. C* DESCRIPTEURS DE SEGMENT UTILISES PAR LE SYSTEME .
  227. C* CONTIENT MDNDX0 DESCRIPTEURS , SUCCESSIVEMENT :
  228. C*
  229. C* UNE ZONE INITIALISEE AVEC LA VALEUR MZOC4 TQ
  230. C* OOA(OOT+P) AVEC P=0 --> ADRESSE INVALIDE
  231. C*
  232. C* 1 DESCRIPTEUR BASE DE LA CHAINE DES DESCRIPTEURS LIBRES
  233. C* MDNNCHN DESCRIPTEURS DES SEGMENTS OCCULTES
  234. C* 1 DESCRIPTEUR DU SEGMENT DES DESCRIPTEURS
  235. C*
  236. C* CE SEGMENT SERA PROLONGE PAR LA SUITE AU FUR ET A MESURE
  237. C* DES BESOINS
  238. C* A L'INITIALISATION :
  239. C*
  240. C* 1 DESCRIPTEUR DU SEGMENT CLIENTS
  241. C* 1 DESCRIPTEUR DU SEGMENT ACCES
  242. C* 1 DESCRIPTEUR DU SEGMENT COPIES
  243. C* 1 DESCRIPTEUR DU SEGMENT CLIENTM
  244. C* 1 DESCRIPTEUR DU SEGMENT SEGM
  245. C* 1 DESCRIPTEUR DU SEGMENT BUFFER
  246. C* 1 DESCRIPTEUR DE LA MAP DE GESTION DISQUE
  247. C*
  248. C* CALCULER MZIDE1 INDICE DU DESCRIPTEUR BASE DE LA CHAINE DES
  249. C* DESCRIPTEURS LIBRES .
  250. C*
  251. C***********************************************************************
  252. C
  253. C****** INITIALISATION DU SEGMENT DES DESCRIPTEURS
  254. C
  255. LSD=MDIDX0+MSLCZ
  256. CALL OOOMIN (LRET,ZMEMDYN,ISB(MDNNCHN+1),LSD)
  257. IF (LRET.EQ.1) GO TO 901
  258. C EVALUATION DE OOT TEL QUE OOA(OOT) ADRESSE
  259. C LE PREMIER MOT DE DONNEE DU SEGMENT DES DESCRIPTEURS :
  260. C INDICE DU SEGMENT DESCRIPTEUR (BASE JZZ(1))
  261. C +MOTS DE CONTROLE DE TETE
  262. C +DISTANCE OOA-->JZZ
  263. OOT=ISB(MDNNCHN+1)+MSLZ1+2+1
  264. OOU=OOT
  265. C
  266. C EVALUATION DE OOG DEPLACEMENT SUPLEMENTAIRE POUR ADRESSER
  267. C LES VARIABLES CARACTERES DANS UN SEGMENT A PARTIR DE LA BASE
  268. C D'ADRESSAGE OOH TEL QUE :
  269. C OOV( OOA(OOT+S) ) == OOH( OOA(OOT+S) +OOG)
  270. CALL OOOZZ3
  271. C
  272. C DEPLACEMENT DU DESCRIPT. SERVANT DE BASE A LA CHAINE DES
  273. C DESCRIPTEURS LIBRES
  274. MZIDE1=MDIDX0-(MDNDX0)*MDLDE
  275. C
  276. CALL OOOZZ4 (MZOC4)
  277. DO I=1,MZIDE1
  278. JZZ(ISB(MDNNCHN+1)+MSLZ1+I)=MZOC4
  279. ENDDO
  280. C
  281. C******INITIALISER DANS LES MDNNCHN+1 SEGMENTS PRECEDENTS :
  282. C IDE,IDSP,IDSS(CHAINAGE DES DESCRIPT.)
  283. C INITIALISER LES DESCRIPTEURS DES SEGMENTS PRECEDENTS
  284. C
  285. DO I=1,MDNNCHN
  286. C CHAINAGE DU SEGM OCCULTE SUR LUI-MEME
  287. IDE=MDACHN(I)
  288. MSIDE(ISB(I)) = IDE
  289. MSIDP(ISB(I)) = IDE
  290. MSIDS(ISB(I)) = IDE
  291. MDISG(IDE) = ISB(I)
  292. MDOPCHN(I) = MDOPOCHN
  293. CASE , I
  294. WHEN ,ACTIF
  295. MDTYP(IDE)=MDLTYP(MDISOLE,MDMEM,MDACT,0,0)
  296. WHEN ,FIXE
  297. MDTYP(IDE)=MDLTYP(MDFIXE,MDMEM,MDACT,0,0)
  298. WHEN ,LRU
  299. MDTYP(IDE)=MDLTYP(MDISOLE,MDMEM,MDMOD,MDLRU,0)
  300. WHEN ,MRU
  301. MDTYP(IDE)=MDLTYP(MDISOLE,MDMEM,MDMOD,MDMRU,0)
  302. MDOPCHN(MRU)=MDOPFCHN
  303. WHEN ,CACTIF
  304. MDTYP(IDE)=MDLTYP(MDBLOCK,MDMEM,MDACT,0,0)
  305. WHEN ,CLRU
  306. MDTYP(IDE)=MDLTYP(MDBLOCK,MDMEM,MDMOD,MDLRU,0)
  307. WHEN ,CMRU
  308. MDTYP(IDE)=MDLTYP(MDBLOCK,MDMEM,MDMOD,MDMRU,0)
  309. MDOPCHN(CMRU)=MDOPFCHN
  310. WHEN ,OLIN
  311. MDTYP(IDE)=MDLTYP(MDISOLE,MDMEM,MDINACT,MDLRU,MDBUF)
  312. WHEN ,OLMOD
  313. MDTYP(IDE)=MDLTYP(MDISOLE,MDMEM,MDMOD,MDLRU,MDBUF)
  314. WHEN ,OLNOMOD
  315. MDTYP(IDE)=MDLTYP(MDISOLE,MDMEM,MDNOMOD,MDLRU,MDBUF)
  316. WHEN ,OMMOD
  317. MDTYP(IDE)=MDLTYP(MDISOLE,MDMEM,MDMOD,MDMRU,MDBUF)
  318. MDOPCHN(OMMOD)=MDOPFCHN
  319. WHEN ,OMNOMOD
  320. MDTYP(IDE)=MDLTYP(MDISOLE,MDMEM,MDNOMOD,MDMRU,MDBUF)
  321. MDOPCHN(OMNOMOD)=MDOPFCHN
  322. ENDCASE
  323. ENDDO
  324. C
  325. MZIDDX=MZIDE1+(MDNNCHN+1)*MDLDE
  326. MSIDE(ISB(MDNNCHN+1)) = MZIDDX
  327. MSIDP(ISB(MDNNCHN+1)) = MZIDDX
  328. MSIDS(ISB(MDNNCHN+1)) = MZIDDX
  329. MDISG(MZIDDX) = ISB(MDNNCHN+1)
  330. MDTYP(MZIDDX) = MDLTYP(MDISOLE,MDMEM,MDACT,0,0)
  331. C
  332. C****** FIN DE L'INITIALISATION DU SEGMENT DES DESCRIPTEURS
  333. C
  334. C INDIQUER QUE LA CHAINE DES DESCRIPTEURS LIBRES EST VIDE
  335. C ON PROCEDERA A UNE EXTENSION DU SEGM AU PREMIER SEGINI
  336. C MZIDEX INDICE DU FUTUR PREMIER DESCRIPTEUR
  337. C MZIDEY INDICE DU DERNIER DESCRIPTEUR
  338. C
  339. MDZERO(MZIDE1)=0
  340. MDIDS(MZIDE1)=-MZIDE1
  341. MDIDP(MZIDE1)=-MZIDE1
  342. C****** MZIDEY<MZIDEX--->PLUS DE DESCRIP LIBRE
  343. MZIDEX=MZIDE1+MDLDE*MDNDX0
  344. MZIDEY=MZIDEX-MDLDE
  345. C VALEUR PAR DEFAUT DE L'INCREMENT DESCRIPTEUR
  346. MZNDEX=MDNDEX
  347. C
  348. C***********************************************************************
  349. C
  350. C REGLE D'ATTRIBUTION GENERALE = A DROITE DANS UN TROU
  351. C DONC EN FIN DE MEMOIRE
  352. C
  353. MZATGD(IZA,ZMEMDYN)=1
  354. MZATGD(IZA,ZMEMFIX)=1
  355. C
  356. C
  357. C***********************************************************************
  358. C*
  359. C* REMISE A ZERO DES BLOCS STATISTIQUES ...
  360. C
  361. DO I=1,MZNSTATS
  362. MZJSS(I)=0
  363. MZJSM(I)=0
  364. ENDDO
  365. C
  366. DO I=1,MZNMM
  367. MZJMM(I)=0
  368. ENDDO
  369. C
  370. DO I = 1,8
  371. OOV(I) = 0
  372. ENDDO
  373. C
  374. C***********************************************************************
  375. C*
  376. C* INITIALISATION DU DEBORDEMENT DISQUE
  377. C*
  378. C* ->MZPTRK LE SEGMENT GESTION : ESPACE FICHIER
  379. C* ->MZPBUF LE SEGMENT BUFFER : BLOCAGE DES PETITS SEGMENTS
  380. C*
  381. C* ACTIF MAIS CHAINES SUR EUX MEMES
  382. C* POUR EVITER LEUR DESACTIVATION LORS DE LA SVGDE(OOOSAV)
  383. C* ET TEL QUE IDE< MZIDEX
  384. C*
  385. C* LES SEGM SERONT INIT A GAUCHE DS LA ZONE ACTIVE,DEPLACES A DROITE
  386. C* A LA PREMIERE EXTENSION DU SEGM DES DESCRIPTEURS(ATTRIB. A DRTE
  387. C* DS LE TROU INITIAL)
  388. C* MAIS CE SONT DES SGM DE DONNEE STD CONSIDERES COMME TELS PAR LE
  389. C* SYSTEME (POSITION MEMOIRE NON FIXE)
  390. C
  391. C
  392. C****** INIT GESTION ESPACE DISQUE
  393. C
  394. C LE SEGMENT BUFFER EST IMPLANTE EN FOND DE MEMOIRE,CE QUI
  395. C ASSURE DE NE PAS DEBORDER DU BLOC MEMOIRE LORSQU'ON
  396. C TRANSFERT SUR DISQUE UN GROS SEGMENT (VOIR OOODWD EN
  397. C FORMATTAGE)
  398. C
  399. C
  400. C****** OUVERTURE FICHIER DE DEBORDEMENT (S'IL Y A LIEU)
  401. C
  402. CALL OOODOP (LRET,MZPTRK,MZPBUF)
  403. IF (LRET.EQ.1) GO TO 901
  404. IF (TESOOO) THEN
  405. WRITE(JLST,*)'--- TESOOO = ',TESOOO ,' , VERACT = ',VERACT
  406. 1 ,' , GESMEM = ',GESMEM
  407. WRITE(JERR,*)'--- TESOOO = ',TESOOO ,' , VERACT = ',VERACT
  408. 1 ,' , GESMEM = ',GESMEM
  409. CALL OOOWER ('DANS OOOSSG')
  410. ENDIF
  411. RETURN
  412. C-----------------------------------------------------------------------
  413. C
  414. C FERMETURE GEMAT
  415. C
  416. C FERMER LE FICHIER DE DEBORDEMENT SI NECESSAIRE
  417. C LIBERER LA MEMOIRE
  418. C
  419. ENTRY OOOSTP
  420. C
  421. C
  422. C*** CALL OOOTHS
  423. IF (TESOOO) CALL OOOWER ('DANS OOOSTP')
  424. IF (MZPTRK.NE.0) THEN
  425. CALL OOOZCL (LRET)
  426. IF (LRET.EQ.1) GO TO 950
  427. ENDIF
  428.  
  429. IESO=MZIZA(IZA)
  430. LESO=MZLZA(IZA)
  431. LRET=2
  432. C*** CALL OOOZZC (LRET,IESO,LESO)
  433. IF (LRET.EQ.1) GO TO 950
  434. RETURN
  435. C-----------------------------------------------------------------------
  436. C
  437. C MESSAGES D'ERREUR
  438. C
  439. 901 CALL OOOERR (0,0,'OOOSEG : ALLOCATION MEMOIRE INSUFFISANTE ')
  440.  
  441. C950 IF (LRET.EQ.999) SEGADJ , PPPP
  442. 950 STOP 16
  443. END
  444.  
  445.  

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