The TELEMAC-MASCARET system  trunk
aidelu.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE aidelu
3 ! *****************
4 !
5  &( icol , ligne, doc )
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 !+ AIDELU 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 !| DOC |-->| LOGIQUE DE DOCUMENTATION DE LA SORTIE
45 !| | | = VRAI : IMPRIME L'AIDE (FICHIER RESULTAT)
46 !| | | = FAUX : N'IMPRIME PAS L'AIDE
47 !| ICOL |<->| INDICE DU CARACTERE COURANT DANS LA LIGNE
48 !| LIGNE |<->| LIGNE EN COURS DE DECODAGE.
49 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
50 !
53  IMPLICIT NONE
54 !
55 !
56  INTEGER ICOL
57  LOGICAL DOC
58  CHARACTER(LEN=*) LIGNE
59 !
60  INTEGER NEXT,PRECAR
61  EXTERNAL next,precar
62 !
63 !-----------------------------------------------------------------------
64 !
65  INTEGER IDEB,IFIN,JCOL
66  CHARACTER(LEN=1) QUOTE,TABUL,PTVIRG
67 !
68 !-----------------------------------------------------------------------
69 !
70  INTRINSIC char
71 !
72 !***********************************************************************
73 ! MARKS RCS AND SCCS
74 !
75 !***********************************************************************
76 !
77  quote = ''''
78  ptvirg = ';'
79  tabul =char(9)
80 9 icol = next( icol+1 , ligne )
81 !
82 ! //// FINDS THE ENDS OF THE STRING ////
83 !
84 ! NOTE: THE STRING CAN BE BETWEEN QUOTES OR NOT.
85 ! IF NOT, IT CANNOT CONTAIN WHITE CHARACTERS.
86 !
87 !
88 !
89  IF ( ligne(icol:icol).NE.quote ) THEN
90  ideb = icol
91 ! PRECAR: SAME FUNCTION AS PREVAL, BUT DOES NOT JUMP
92 ! OVER COMMENTED LINES
93  icol = precar(icol+1,ligne,' ',ptvirg,tabul) - 1
94  ifin = icol
95  IF (doc) WRITE(lu,10) ligne(ideb:ifin)
96 10 FORMAT(1x,a)
97  ELSE
98 !
99 ! IF THE STRING IS BETWEEN QUOTES
100 !
101  ideb = icol + 1
102 !
103 ! WHILE THERE IS NO QUOTE ON THE LINE
104 !
105 100 icol = precar(icol+1,ligne,quote,quote,quote)
106  IF (icol.GT.longli) THEN
107 ! NO QUOTE ON THE LINE, IT'S WRITTEN OUT AND GOES TO NEXT
108  IF (doc) WRITE(lu,10) ligne(ideb:longli)
109 ! READS NEXT LINE
110  READ(nfic,end=900,err=998,fmt='(A)') ligne
111  nlign = nlign + 1
112  icol = 1
113  ideb = 1
114  GO TO 100
115  ELSEIF(icol.EQ.longli) THEN
116 ! QUOTE AT THE END OF THE LINE, THE LINE IS WRITTEN OUT (EXCEPT
117 ! THE QUOTE) AND THAT'S IT
118  IF (doc) WRITE(lu,10) ligne(ideb:icol-1)
119  ELSE
120 ! NEXT QUOTE
121  jcol = precar(icol+1,ligne,quote,quote,quote)
122 ! IF THERE IS A DOUBLE QUOTE, IT IS DELETED
123  IF ((jcol-icol).EQ.1) THEN
124  icol=jcol
125  ligne(jcol:longli)=ligne(jcol+1:longli) // ' '
126  GO TO 100
127  ELSE
128 ! PRINTS OUT THE 'HELP' WHEN DELETING THE LAST QUOTE
129  IF (doc) WRITE(lu,10) ligne(ideb:icol-1)
130  ENDIF
131  ENDIF
132  ENDIF
133  icol = next(icol+1,ligne)
134  IF(icol.LE.longli) THEN
135  IF(ligne(icol:icol).EQ.ptvirg(1:1)) GO TO 9
136  ENDIF
137  GO TO 1000
138 !
139 ! WRITES OUT ERRORS
140 !
141 998 CONTINUE
142  WRITE(lu,1999) nfic, nlign
143 1999 FORMAT(1x,'LOGICAL UNIT ',1i2,' ERROR ON LINE ',1i6)
144 900 CONTINUE
145  retour = .true.
146 !
147 ! END OF THE WRITING OF ERRORS
148 !
149 1000 CONTINUE
150 !
151 ! TWO EMPTY LINES FOR THE PAGE LAYOUT
152 !
153  IF (doc) WRITE(lu,*) ' '
154  IF (doc) WRITE(lu,*) ' '
155 !
156 !-----------------------------------------------------------------------
157 !
158  RETURN
159  END
subroutine aidelu(ICOL, LIGNE, DOC)
Definition: aidelu.f:7