Télécharger acquer.eso

Retour à la liste

Numérotation des lignes :

acquer
  1. C ACQUER SOURCE PV 22/12/12 21:15:01 11523
  2.  
  3. SUBROUTINE ACQUER(IBRUT)
  4. * SG
  5. * IBRUT est un entier valant 1 si l'option 'BRUT' a été lue et 0 sinon
  6. * Si IBRUT vaut 1, un traitement particulier est effectué dans
  7. * pilot pour ne pas interpréter la ligne lue (comme avec CHAI et MOT)
  8. *
  9. IMPLICIT INTEGER(I-N)
  10. IMPLICIT REAL*8 (A-H,O-Z)
  11.  
  12. -INC PPARAM
  13. -INC CCNOYAU
  14. -INC CCOPTIO
  15. -INC CCASSIS
  16. -INC CCREDLE
  17.  
  18. -INC SMLENTI
  19. -INC SMLREEL
  20.  
  21. EXTERNAL LONG
  22. LOGICAL LOGI
  23. REAL*8 XPO
  24. CHARACTER*8 CHAR
  25. CHARACTER*(LONOM) CHARB
  26. CHARACTER*26 MINU,MAJU
  27. CHARACTER*4 MOAST(1)
  28. CHARACTER*4 MOBRUT(1)
  29.  
  30. C TAILLE D'UN ENREGISTREMENT DU FICHIER IOACQ : NCARMAX CARACTERES
  31. C La taille est limitee a LOCHAI (dimension de TEXT dans SREDLE : voir PPARAM.INC).
  32. PARAMETER (NCARMAX = 256 , NCARFIN = NCARMAX+1)
  33. * PARAMETER (NCARMAX = 72 , NCARFIN = NCARMAX+1)
  34. C MOT pouvant etre lu dans un enregistrement
  35. CHARACTER*(NCARMAX) CHARMO
  36. C Moins de limitation dans l'option 'BRUT'
  37. CHARACTER*(LOCHAI) CHARM2
  38.  
  39. DATA MINU / 'abcdefghijklmnopqrstuvwxyz' /
  40. DATA MAJU / 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' /
  41. DATA MOAST / '* ' /
  42. DATA MOBRUT/ 'BRUT' /
  43. C FORMAT DE LECTURE D'UN ENREGISTREMENT DU FICHIER IOACQ
  44. 3000 FORMAT(A256)
  45. *3000 FORMAT(A72)
  46. C FORMAT pour l'option BRUT
  47. 3002 FORMAT(A512)
  48. * sauver lmnnom maintenant au cas ou on soit en erreur
  49. LMNSAU=LMNNOM
  50. *
  51. CALL LIRMOT(MOBRUT,1,IBRUT,0)
  52. * Cas : chaine = ACQU 'BRUT' ;
  53. IF (IBRUT.EQ.1) THEN
  54. * Initialise SREDLE a 0 pour garder le traitement d'erreur normal au
  55. * label 21
  56. SREDLE=0
  57. READ(IOACQ,FMT=3002,END=21,ERR=21) CHARM2
  58. LONCHA=LONG(CHARM2)
  59. CALL ECRCHA(CHARM2(1:LONCHA))
  60. RETURN
  61. ENDIF
  62. *
  63. CALL POSCHA('NON',IPONON)
  64. IF (IERR.NE.0) RETURN
  65.  
  66. IPASS=1
  67.  
  68. SREDLE=0
  69. CALL INIRED(SREDLE)
  70. IPREC =1
  71. NRAN =0
  72. ICOUR =NCARMAX
  73. IFINAN=NCARFIN
  74.  
  75. * sauver lmnnom car prenom va l'augmenter
  76. LMNSAU=LMNNOM
  77.  
  78. 1 CONTINUE
  79. CALL QUETYP(CHAR,0,IRETOU)
  80. IF (IRETOU.EQ.0) GOTO 200
  81. C Lecture du NOM Gibiane (CHARB) de l'objet a acquerir
  82. CALL LIROBJ(CHAR,IPO,0,IRETOU)
  83. CALL QUENOM(CHARB)
  84. IF (IIMPI.EQ.1754) THEN
  85. WRITE(IOIMP,FMT='('' TYPE LU : '',A8)') CHAR
  86. WRITE(IOIMP,FMT='('' NOM LU : '',A24)') CHARB
  87. ENDIF
  88. C On veut savoir si l'objet a acquerir doit avoir un TYPE ('*....')
  89. CALL QUETYP(CHAR,0,iretou)
  90. IVAL=0
  91. IF (CHAR.EQ.'MOT ') CALL LIRMOT(MOAST,1,IVAL,0)
  92. IF (IIMPI.EQ.1754) THEN
  93. IF (IVAL.EQ.0) THEN
  94. WRITE(IOIMP,FMT='('' PAS D ASTERISQUE TOUVEE '')')
  95. ELSE
  96. WRITE(IOIMP,FMT='('' ASTERISQUE TOUVEE '')')
  97. ENDIF
  98. ENDIF
  99. C CHAR contient le type demande de l'objet (=' 'si aucun + IVAL=0)
  100. CHAR=' '
  101. IF (IVAL.NE.0) THEN
  102. C Lecture du TYPE de l'objet a acquerir demande par l'utilisateur
  103. CALL LIRCHA(CHAR,1,IRETOU)
  104. IF (IERR.NE.0) GOTO 200
  105. IF (IIMPI.EQ.1754)WRITE(IOIMP,FMT='('' TYPE ATTENDU '',A8)')CHAR
  106. C
  107. C CAS DES LISTENTI ET DES LISTREEL
  108. C
  109. IF (CHAR.EQ.'LISTENTI'.OR.CHAR.EQ.'LISTREEL') THEN
  110. CALL LIRENT(JG,1,IRETOU)
  111. IF (IERR.NE.0) GOTO 200
  112. IOP = 0
  113. IF (CHAR.EQ.'LISTENTI') THEN
  114. SEGINI MLENTI
  115. IF (IPASS.EQ.0) GOTO 202
  116. SEPARA=.FALSE.
  117. 201 CONTINUE
  118. NRAN=0
  119. ICOUR =NCARMAX
  120. IFINAN=NCARFIN
  121. READ(IOACQ,FMT=3000,END=21,ERR=21) TEXT
  122. 202 CONTINUE
  123. CALL REDLEC(sredle)
  124. IF (IRE.EQ.0) GOTO 201
  125. IOP=IOP+1
  126. IF (IRE.NE.1) THEN
  127. CALL ERREUR(8)
  128. GOTO 200
  129. ENDIF
  130. LECT(IOP)=NFIX
  131. IF (IOP.LT.JG) GOTO 202
  132. SEGDES,MLENTI
  133. CALL NOMOBJ('LISTENTI',CHARB,MLENTI)
  134. C* ELSE IF (CHAR.EQ.'LISTREEL') THEN
  135. ELSE
  136. SEGINI,MLREEL
  137. IF (IPASS.EQ.0) GOTO 302
  138. SEPARA=.FALSE.
  139. 301 CONTINUE
  140. NRAN=0
  141. ICOUR =NCARMAX
  142. IFINAN=NCARFIN
  143. READ(IOACQ,FMT=3000,END=21,ERR=21) TEXT
  144. 302 CALL REDLEC(sredle)
  145. IF (IRE.EQ.0) GOTO 301
  146. IOP=IOP+1
  147. IF (IRE.EQ.1) THEN
  148. PROG(IOP)=NFIX
  149. ELSE IF (IRE.EQ.2) THEN
  150. PROG(IOP)=FLOT
  151. ELSE
  152. CALL ERREUR(15)
  153. GOTO 200
  154. ENDIF
  155. IF (IOP.LT.JG) GOTO 302
  156. SEGDES,MLREEL
  157. CALL NOMOBJ('LISTREEL',CHARB,MLREEL)
  158. ENDIF
  159. IPASS=0
  160. GOTO 1
  161. ENDIF
  162. ENDIF
  163. C
  164. C AUTRES CAS ENTIER FLOTTANT MOT LOGIQUE
  165. C
  166. IF (IPASS.EQ.0) GOTO 25
  167. SEPARA=.FALSE.
  168. 20 CONTINUE
  169. NRAN=0
  170. ICOUR =NCARMAX
  171. IFINAN=NCARFIN
  172. READ(IOACQ,FMT=3000,END=21,ERR=21) TEXT
  173. 25 CONTINUE
  174. CALL REDLEC(sredle)
  175. IF (IRE.EQ.0) GOTO 20
  176. * PASSAGE EN MAJUSCULE SI UN MOT EST LU
  177. IF (IRE.EQ.3) THEN
  178. DO 123 IAUX=1, NCAR
  179. IRAL=INDEX(MINU,MOT(IAUX:IAUX))
  180. IF (IRAL.NE.0) MOT(IAUX:IAUX)=MAJU(IRAL:IRAL)
  181. 123 CONTINUE
  182. ENDIF
  183. IAVA=0
  184. CALL PRENOM(IPLAMO,IAVA,SREDLE)
  185. IF (IIMPI.EQ.1754) THEN
  186. WRITE(IOIMP,654) INOOB1(IPLAMO),INOOB2(IPLAMO)
  187. WRITE(IOIMP,657) CHAR
  188. ENDIF
  189. 654 FORMAT(' DANS ACQUER ) ',A8,2X,A8,2X,A4)
  190. 657 FORMAT(' DANS ACQUER TYPE ATTENDU ',A8)
  191. C
  192. C **** DECODAGE DE LA LECTURE ET VERIF DU TYPE
  193. C
  194. IF (INOOB1(IPLAMO).EQ.IPONON) THEN
  195. CHAR='NON'
  196. CALL NOMCHA(CHARB,CHAR)
  197. GOTO 200
  198. ENDIF
  199. IF (CHAR.EQ.' ') CHAR=INOOB2(IPLAMO)
  200. IOO=IOUEP2(IPLAMO)
  201. IF (CHAR.EQ.'FLOTTANT'.AND.INOOB2(IPLAMO).EQ.'ENTIER ') THEN
  202. XPO=IOO
  203. CALL NOMREE(CHARB,XPO)
  204. GO TO 465
  205. ENDIF
  206. IF (CHAR.NE.INOOB2(IPLAMO)) THEN
  207. C- ERREUR : donnee lue pas du TYPE demande
  208. MOTERR(1:8)=INOOB2(IPLAMO)
  209. CALL ERREUR(39)
  210. GOTO 200
  211. ENDIF
  212. if (nbesc.ne.0) segact ipiloc
  213. IF (CHAR.EQ.'ENTIER ') THEN
  214. IVAL=IOO
  215. CALL NOMENT(CHARB,IVAL)
  216. ELSE IF (CHAR.EQ.'FLOTTANT') THEN
  217. XPO=XIFLOT(IOO)
  218. CALL NOMREE(CHARB,XPO)
  219. ELSE IF (CHAR.EQ.'MOT ') THEN
  220. ID=IPCHAR(IOO)
  221. IFI=IPCHAR(IOO+1)
  222. IF1=IFI-ID
  223. IF1=MIN(IF1,NCARMAX)
  224. CHARMO(1:IF1)=ICHARA(ID:IFI-1)
  225. CALL NOMCHA(CHARB,CHARMO(1:IF1))
  226. ELSE IF (CHAR.EQ.'LOGIQUE ') THEN
  227. LOGI=IPLOGI(IOO)
  228. CALL NOMLOG(CHARB,LOGI)
  229. ELSE
  230. CALL NOMOBJ(CHAR,CHARB,IOO)
  231. ENDIF
  232. if (nbesc.ne.0) SEGDES,IPILOC
  233. 465 CONTINUE
  234. IPASS=0
  235. GOTO 1
  236.  
  237. C- ERREUR : Fin du fichier atteinte pendant la lecture d'une donnee
  238. 21 CONTINUE
  239. CALL ERREUR(4)
  240. GOTO 200
  241.  
  242. C- FIN de l'acquisition (normale ou avec erreur)
  243. 200 CONTINUE
  244. * On peut avoir SREDLE=0 (option brut par exemple)
  245. IF (SREDLE.NE.0) SEGSUP,SREDLE
  246. * srestaurer lmnnom
  247. LMNNOM=LMNSAU
  248.  
  249. RETURN
  250. END
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  

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