1 subroutine dmcpch ( chain1, long1, chain2, long2 )
2 c ______________________________________________________________________
6 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
8 c Version originale enregistree le 18 juin 1996 sous le numero 96036
9 c aupres des huissiers de justice Simart et Lavoir a Clamart
10 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
11 c aupres des huissiers de justice
12 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
14 c HOMARD est une marque deposee d'Electricite de France
20 c ______________________________________________________________________
21 c Dependance Machine : CoPie de CHaine de caracteres
23 c ______________________________________________________________________
26 c but : copie "prudente" de la chaine 1 dans la chaine 2
28 c . les eventuels caracteres non imprimables sont remplaces .
29 c par des blancs ... sauf ceux en debut et fin de chaine, .
30 c qui sont elimines. .
32 c dependance machine : code ASCII
34 c non imprimable <==> code < 32 ...
35 c ... sauf que les TAB (code 9) sont remplaces
36 c par un blanc chacun )
37 c ______________________________________________________________________
39 c . nom . e/s . taille . description .
40 c .____________________________________________________________________.
41 c . chain1 . e . char * . chaine "source" .
42 c . long1 . e . 1 . longueur utile de la chaine "source" .
43 c . chain2 . s . char * . chaine "cible" .
44 c . long2 . s . 1 . longueur utile de la chaine "cible" .
45 c ______________________________________________________________________
48 c 0. declarations et dimensionnement
51 c 0.1. ==> generalites
61 character*(*) chain1, chain2
63 c 0.4. ==> variables locales
65 integer long, iaux, deb, fin, dern0, deb1, p0
67 c 0.5. ==> initialisations
68 c ______________________________________________________________________
80 do 1 iaux = 1, min( len(chain1), long1 )
81 if ( ichar(chain1(iaux:iaux)).gt.32 ) then
87 if ( long.lt.len(chain2) ) then
92 chain2(long:long) = chain1(iaux:iaux)
94 else if ( ichar(chain1(iaux:iaux)).eq.32 .or.
95 > ichar(chain1(iaux:iaux)).eq.9 ) then
99 if ( long.lt.len(chain2) ) then
101 chain2(long:long) = ' '
107 if ( deb.gt.0 .and. long.lt.len(chain2) ) then
109 chain2(long:long) = ' '
118 c On complete eventuellement avec des blancs :
119 c (mais qui ne seront pas comptes dans long2)
121 do 10 iaux = long+1, len(chain2)
122 chain2(iaux:iaux) = ' '
127 if ( deb1.gt.0 ) then
129 c Il y a au moins un caractere imprimable et non blanc, qui a pu
130 c etre copie de la chaine source chain1 vers la cible chain2 :
131 c (deb1 est le premier de ceux-ci dans chain1)
133 if ( dern0.lt.fin ) then
137 c Apres le dernier caractere imprimable et non blanc de chain1 (fin),
138 c on a trouve : des blancs eventuels, puis un premier caractere non
139 c imprimable (p0), puis eventuellement des blancs ou non impr.
140 c puis enfin un dernier caractere non impr. (dern0, >= p0),
141 c puis des blancs eventuels.
143 c deb pointe sur le premier caractere "utile" (blanc ou imprimable)
144 c de chaine1 (deb<=deb1<=fin)
145 c p0-1 serait le dernier caractere "utile" de chaine1 (fin<=p0-1)
147 long2 = min( max(0,len(chain2)) , p0-deb )
153 c chaine "source" vide, ou entierement blanche(+caracteres non impr.) :