The TELEMAC-MASCARET system  trunk
myaidelu.f
Go to the documentation of this file.
1 ! **********************************
2  FUNCTION myaidelu
3 ! **********************************
4 !
5  &( icol , ligne )
6 !
7 !***********************************************************************
8 ! DAMOCLES V6P0 21/08/2010
9 !***********************************************************************
10 !
11 !brief DECODES A CHARACTER STRING FROM COLUMN ICOL+1
12 !+ OF A LINE (80 CHARACTERS MAXIMUM PER LINE).
13 !+ THIS STRING CAN RUN OVER SEVERAL LINES.
14 !+ myaidelu IS USED TO DECODE THE HELP SECTION OF THE
15 !+ DICTIONARY ONLY, AND THE WORDS IGNORED FOR EDAMOX.
16 !
17 !note PORTABILITY : IBM,CRAY,HP,SUN
18 !
19 !warning FOLLOWS THE FORTRAN CONVENTION : '' IS READ AS
20 !+ ' WHEN WITHIN A CHARACTER STRING IF THE STRING
21 !+ IS WRITTEN BETWEEN QUOTES
22 !+
23 !warning QUOTES AT THE BEGINNING AND END OF LINES ARE POSSIBLE
24 !+ SOURCES OF ERRORS
25 !
26 !history J.M. HERVOUET (LNH); A. YESSAYAN; L. LEGUE
27 !+ 14/01/2008
28 !+ V5P8
29 !+ BETTER CONTROL OF 'LONG' LINES
30 !
31 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
32 !+ 13/07/2010
33 !+ V6P0
34 !+ Translation of French comments within the FORTRAN sources into
35 !+ English comments
36 !
37 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
38 !+ 21/08/2010
39 !+ V6P0
40 !+ Creation of DOXYGEN tags for automated documentation and
41 !+ cross-referencing of the FORTRAN sources
42 !
43 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
44 !| ICOL |<->| INDICE DU CARACTERE COURANT DANS LA LIGNE
45 !| LIGNE |<->| LIGNE EN COURS DE DECODAGE.
46 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
47 !
50  IMPLICIT NONE
51 !
52  CHARACTER(LEN=*) :: MYAIDELU
53 !
54  INTEGER ICOL
55  CHARACTER(LEN=*) LIGNE
56 !
57  INTEGER NEXT,PRECAR
58  EXTERNAL next,precar
59 !
60  INTEGER AIDELEN
61 !
62 !-----------------------------------------------------------------------
63 !
64  INTEGER IDEB,IFIN,JCOL
65  CHARACTER(LEN=1) QUOTE,TABUL,PTVIRG
66 !
67 !-----------------------------------------------------------------------
68 !
69  INTRINSIC char
70 !
71 !***********************************************************************
72 ! MARKS RCS AND SCCS
73 !
74 !***********************************************************************
75 !
76  lng = 1
77  quote = ''''
78  myaidelu = ''
79  ptvirg = ';'
80  tabul =char(9)
81  aidelen = 0
82 9 icol = next( icol+1 , ligne )
83 !
84 ! //// FINDS THE ENDS OF THE STRING ////
85 !
86 ! NOTE: THE STRING CAN BE BETWEEN QUOTES OR NOT.
87 ! IF NOT, IT CANNOT CONTAIN WHITE CHARACTERS.
88 !
89 !
90 !
91  IF ( ligne(icol:icol).NE.quote ) THEN
92  ideb = icol
93 ! PRECAR: SAME FUNCTION AS PREVAL, BUT DOES NOT JUMP
94 ! OVER COMMENTED LINES
95  icol = precar(icol+1,ligne,' ',ptvirg,tabul) - 1
96  ifin = icol
97  IF(aidelen.EQ.0) THEN
98  myaidelu = trim(ligne(ideb:ifin))
99  aidelen = aidelen + len(trim(ligne(ideb:ifin)))
100  ELSE
101  myaidelu = myaidelu(1:aidelen) // char(10)
102  & // trim(ligne(ideb:ifin))
103  aidelen = aidelen + len(trim(ligne(ideb:ifin))) + 1
104  ENDIF
105  ELSE
106 !
107 ! IF THE STRING IS BETWEEN QUOTES
108 !
109  ideb = icol + 1
110 !
111 ! WHILE THERE IS NO QUOTE ON THE LINE
112 !
113 100 icol = precar(icol+1,ligne,quote,quote,quote)
114  IF (icol.GT.longli) THEN
115 ! NO QUOTE ON THE LINE, IT'S WRITTEN OUT AND GOES TO NEXT
116  IF(aidelen.EQ.0) THEN
117  myaidelu = trim(ligne(ideb:longli))
118  aidelen = aidelen + len(trim(ligne(ideb:longli)))
119  ELSE
120  myaidelu = myaidelu(1:aidelen)//char(10)
121  & //trim(ligne(ideb:longli))
122  aidelen = aidelen + len(trim(ligne(ideb:longli))) +1
123  ENDIF
124 
125 ! READS NEXT LINE
126  READ(nfic,end=900,err=998,fmt='(A)') ligne
127  nlign = nlign + 1
128  icol = 1
129  ideb = 1
130  GO TO 100
131  ELSEIF(icol.EQ.longli) THEN
132 ! QUOTE AT THE END OF THE LINE, THE LINE IS WRITTEN OUT (EXCEPT
133 ! THE QUOTE) AND THAT'S IT
134  IF(aidelen.EQ.0) THEN
135  myaidelu = trim(ligne(ideb:icol-1))
136  aidelen = aidelen + len(trim(ligne(ideb:icol-1)))
137  ELSE
138  myaidelu = myaidelu(1:aidelen)//char(10)
139  & //trim(ligne(ideb:icol-1))
140  aidelen = aidelen + len(trim(ligne(ideb:icol-1))) +1
141  ENDIF
142  ELSE
143 ! NEXT QUOTE
144  jcol = precar(icol+1,ligne,quote,quote,quote)
145 ! IF THERE IS A DOUBLE QUOTE, IT IS DELETED
146  IF ((jcol-icol).EQ.1) THEN
147  icol=jcol
148  !LIGNE(JCOL:LONGLI)=LIGNE(JCOL+1:LONGLI) // " "
149  GO TO 100
150  ELSE
151 ! PRINTS OUT THE 'HELP' WHEN DELETING THE LAST QUOTE
152  IF(aidelen.EQ.0) THEN
153  myaidelu = trim(ligne(ideb:icol-1))
154  aidelen = aidelen + len(trim(ligne(ideb:icol-1)))
155  ELSE
156  myaidelu = myaidelu(1:aidelen)//char(10)
157  & //trim(ligne(ideb:icol-1))
158  aidelen = aidelen + len(trim(ligne(ideb:icol-1))) +1
159  ENDIF
160  ENDIF
161  ENDIF
162  ENDIF
163  icol = next(icol+1,ligne)
164  IF(icol.LE.longli) THEN
165  IF(ligne(icol:icol).EQ.ptvirg(1:1)) GO TO 9
166  ENDIF
167  GO TO 1000
168 !
169 ! WRITES OUT ERRORS
170 !
171 998 CONTINUE
172  WRITE(lu,1999) nfic, nlign
173 1999 FORMAT(1x,'LOGICAL UNIT ',1i2,' ERROR ON LINE ',1i6)
174 900 CONTINUE
175  retour = .true.
176 !
177 ! END OF THE WRITING OF ERRORS
178 !
179 1000 CONTINUE
180 !
181 ! TWO EMPTY LINES FOR THE PAGE LAYOUT
182 !
183 !
184 !-----------------------------------------------------------------------
185 !
186  RETURN
187  END
character(len= *) function myaidelu(ICOL, LIGNE)
Definition: myaidelu.f:7