Télécharger poscha.eso

Retour à la liste

Numérotation des lignes :

poscha
  1. C POSCHA SOURCE PV 20/03/07 07:39:05 10546
  2. SUBROUTINE POSCHA(NAM,IPOSCH)
  3. IMPLICIT INTEGER(I-N)
  4.  
  5. -INC PPARAM
  6. -INC CCOPTIO
  7. -INC CCNOYAU
  8. -INC CCASSIS
  9. * ithash tableau des segments de hash
  10. * ihash segments des positions dans ipchar des chaines du hash associe
  11. * lthash nombre de termes utiles dans ihash
  12. parameter (nbhash=64)
  13. INTEGER ITHASH(nbhash),LTHASH(nbhash),hmod
  14. SEGMENT IHASH(NH)
  15. DATA ITHASH/nbhash*0/
  16. DATA LTHASH/nbhash*0/
  17. external long
  18. CHARACTER*(*)NAM
  19. * initialisation des segment de hash au premier appel
  20. * comme ca a lieu avant l'initialisation du menage, les segments sont automatiquement proteges.
  21. if (ithash(1).eq.0) then
  22. do hmod=1,nbhash
  23. nh=16
  24. segini ihash
  25. ithash(hmod)=ihash
  26. lthash(hmod)=0
  27. segdes ihash
  28. enddo
  29. endif
  30. segact ipiloc
  31. IL=LONG(NAM)
  32. IO=IPCHAR(/1)
  33. IA=0
  34. DO 56 I=1,IL
  35. IA = IA + ICHAR(NAM(I:I))
  36. 56 CONTINUE
  37. * write(6,fmt='(''nam io lmncha ia'',a8,3i6)')nam,io,LMNCHA,ia
  38. hmod=mod(ia,nbhash)+1
  39. ihash=ithash(hmod)
  40. segact ihash
  41. LH=lthash(hmod)
  42. do 1 ih=1,lh
  43. ii=ihash(ih)
  44. IF( IPHCOD(II).NE.IA) GO TO 1
  45. ID=IPCHAR(II)
  46. IFI=IPCHAR(II+1)
  47. IF(IFI-ID.NE.IL) GO TO 1
  48. IF(NAM.NE.ICHARA(ID:IFI-1)) GO TO 1
  49. GO TO 2
  50. 1 CONTINUE
  51. 10 CONTINUE
  52. segdes ihash
  53. segact ipiloc*mod
  54. LMNCHA=LMNCHA+1
  55. M1=IPCHAR(LMNCHA)
  56. M=M1+IL
  57. * write(6,*) ' lmncha ' , lmncha , ' ipchar(/1))' , ipchar(/1)
  58. IF(LMNCHA+1.GT.IPCHAR(/1) .or. M.GT.ICHARA(/1)) THEN
  59. lmxx=xiflot(/1)
  60. lmll=iplogi(/1)
  61. lmmm=ichara(/1)
  62. if(M.gt.ichara(/1)) lmmm= m+1000
  63. lmcc= ipchar(/1)
  64. if(LMNCHA+1.GT.lmcc) LMcc=LMNCHA+200
  65. * write(6,*) ' lmxx,lmcc,lmmm,lmll',lmxx,lmcc,lmmm,lmll
  66. SEGADJ IPILOC
  67. * write(6,*) ' lmncha ' , lmncha,' m ',m
  68. endif
  69. IPCHAR(LMNCHA+1)=M
  70. ICHARA(M1:M1+IL-1)=NAM
  71. IPHCOD(LMNCHA)=IA
  72. II=LMNCHA
  73. if(nbesc.ne.0) segdes ipiloc
  74. * remplir le tableau de hash
  75. segact ihash*mod
  76. lthash(hmod)=lthash(hmod)+1
  77. if (lthash(hmod).gt.ihash(/1)) then
  78. nh=lthash(hmod)+16
  79. segadj ihash
  80. endif
  81. ihash(lthash(hmod))=ii
  82. 2 CONTINUE
  83. IPOSCH=II
  84. segdes ihash
  85. * write(6,fmt='('' sortie poscha '',i8)') iposch
  86. RETURN
  87. END
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  

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