Télécharger oooprm.eso

Retour à la liste

Numérotation des lignes :

oooprm
  1. C OOOPRM SOURCE PV090527 26/04/24 08:23:19 12524
  2. SUBROUTINE OOOPRM (LRET,HKEY,HVAL,LVAL,IVAL)
  3. C----------------------------------------------------------------------
  4. C
  5. C RECHERCHE D'UN PARAMETRE A L'AIDE D'UN MOT CLE DANS UNE CHAINE
  6. C
  7. C ->LRET 1 HKEY ABSENT OU SYNTAXE ERRONNEE (IVAL=-1)
  8. C 2 HKEY PRESENT ET PAS DE VALEUR : ,KEY,
  9. C 3 HKEY PRESENT ET VALEUR NUMERIQUE : ,KEY=17,CLE(17)
  10. C 4 HKEY PRESENT ET VALEUR ALPHANUM : ,KEY=MOT,CLE(MOT)
  11. C
  12. C HKEY CONTIENT LE MOT CLE A RECHERCHER
  13. C
  14. C ->HVAL RECOIT LA VALEUR ALPHA QUI SUIT LE MOT-CLE HKEY
  15. C ->LVAL NOMBRE DE CARACTERES DE CETTE VALEUR ALPHA
  16. C
  17. C ->IVAL RECOIT LA VALEUR NUMERIQUE ENTIERE QUI SUIT HKEY
  18. C
  19. C PROGRAMMEUR : MOUGIN
  20. C MODIF : 01/02/89 ACCEPTER UN NOMBRE NEGATIF : PARAM=-7
  21. C
  22. C-----------------------------------------------------------------------
  23. C
  24. CHARACTER *(*) HKEY,HVAL
  25. CHARACTER *1 H1
  26. C
  27. CHARACTER *256 HPARM
  28. CHARACTER * 1 HPAR1(256)
  29. CHARACTER *26 VALMIN,VALMAX
  30.  
  31. EQUIVALENCE (HPAR1(1),HPARM)
  32. DATA VALMIN /'abcdefghijklmnopqrstuvwxyz'/
  33. DATA VALMAX /'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
  34. C
  35. SAVE INIT , HPARM ,LPARM
  36. DATA INIT /0/
  37. C
  38. LRET=2
  39. IVAL=0
  40. LVAL=0
  41. LKEY=LEN(HKEY)
  42. C
  43. C CHERCHER LE PARM.GO ET LE CHARGER DS HPARM SI BESOIN
  44. C
  45. IF (INIT.EQ.0) THEN
  46. INIT=1
  47. CALL OOOZZ7 (LPARM,HPARM)
  48. DO I=1,LEN(HPARM)
  49. IRANG=INDEX(VALMIN,HPARM(I:I))
  50. IF (IRANG.GE.1.AND.IRANG.LE.26)
  51. * HPARM(I:I)=VALMAX(IRANG:IRANG)
  52. ENDDO
  53. HPAR1(LPARM+1)=','
  54. ENDIF
  55. IF (LPARM.EQ.0) GO TO 950
  56. C
  57. C-----------------------------------------------------------------------
  58. C
  59. C CHERCHER LE MOT CLE HKEY DANS LA CHAINE HPARM
  60. C
  61. C ->I1 INDICE DE LA VIRGULE PRECEDANT UN MOT-CLE
  62. C ->I2 INDICE DU CARACTERE PRECEDANT LA VIRGULE SUIVANTE
  63. C
  64. I2=0
  65. 10 I1=I2
  66. 11 IF (HPAR1(I2+1).NE.',') THEN
  67. I2=I2+1
  68. GO TO 11
  69. ENDIF
  70.  
  71. 15 IF (HPARM(I1+1:I1+LKEY).EQ.HKEY) GO TO 50
  72. C CE N'EST PAS LE BON PARM-->2 EME PARTIE DU PARM SI PARM=?
  73. C RECHERCHE 2 EME PARTIE DU PARM SI PARM = OU (
  74. 25 I1=I1+1
  75. H1=HPAR1(I1)
  76. IF (H1.EQ.'=' .OR. H1.EQ.'(') GO TO 15
  77. IF (I1.LT.I2) GO TO 25
  78. C ARRET SI FIN DU CHAMP PARM
  79. 30 I2=I2+1
  80. IF (I2.NE.LPARM+1) GO TO 10
  81. GO TO 950
  82.  
  83. C-----------------------------------------------------------------------
  84. C
  85. C LE MOT-CLE HKEY EST TROUVE
  86. C
  87. C ->I1 INDICE DU CARACTERE QUI SUIT LE MOT-CLE RECONNU
  88. C ->H1 VALEUR DE CE CARACTERE
  89. C
  90. 50 I1=I1+LKEY+1
  91. H1=HPAR1(I1)
  92. IF (H1.EQ.',') RETURN
  93. IF (H1.NE.'=') THEN
  94. IF (H1.NE.'(') GO TO 30
  95. I2=I2-1
  96. ENDIF
  97. C
  98. C VALEUR DU PARAMETRE
  99. C
  100. LVAL=I2-I1
  101. IF (LVAL.EQ.0) RETURN
  102. HVAL=HPARM(I1+1:I1+LVAL)
  103. H1 =HPAR1(I1+1)
  104. N1 =ICHAR(H1)-ICHAR('0')
  105. IF ((N1.GE.0 .AND. N1.LE.9) .OR. H1.EQ.'-') THEN
  106. IF (H1.EQ.'-') THEN
  107. ISIGNE = -1
  108. I1 = I1+1
  109. ELSE
  110. ISIGNE = +1
  111. ENDIF
  112. DO K=I1+1,I2
  113. H1 =HPAR1(K)
  114. N1=ICHAR(H1)-ICHAR('0')
  115. IF (N1.GE.0 .AND. N1.LE.9) THEN
  116. IVAL=IVAL*10+N1
  117. ELSE
  118. GO TO 901
  119. ENDIF
  120. ENDDO
  121. IVAL = ISIGNE*IVAL
  122. LRET = 3
  123. ELSE
  124. LRET = 4
  125. ENDIF
  126. RETURN
  127. C
  128. C****** ANOMALIE
  129. C
  130. 901 IVAL = -1
  131. 950 LRET = 1
  132.  
  133. END
  134.  
  135.  

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