subroutine dmcpch ( chain1, long1, chain2, long2 ) c ______________________________________________________________________ c c H O M A R D c c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D c c Version originale enregistree le 18 juin 1996 sous le numero 96036 c aupres des huissiers de justice Simart et Lavoir a Clamart c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014 c aupres des huissiers de justice c Lavoir, Silinski & Cherqui-Abrahmi a Clamart c c HOMARD est une marque deposee d'Electricite de France c c Copyright EDF 1996 c Copyright EDF 1998 c Copyright EDF 2002 c Copyright EDF 2020 c ______________________________________________________________________ c Dependance Machine : CoPie de CHaine de caracteres c - - - - -- c ______________________________________________________________________ c c c but : copie "prudente" de la chaine 1 dans la chaine 2 c c . les eventuels caracteres non imprimables sont remplaces . c par des blancs ... sauf ceux en debut et fin de chaine, . c qui sont elimines. . c c dependance machine : code ASCII c ( blanc = 32, et c non imprimable <==> code < 32 ... c ... sauf que les TAB (code 9) sont remplaces c par un blanc chacun ) c ______________________________________________________________________ c . . . . . c . nom . e/s . taille . description . c .____________________________________________________________________. c . chain1 . e . char * . chaine "source" . c . long1 . e . 1 . longueur utile de la chaine "source" . c . chain2 . s . char * . chaine "cible" . c . long2 . s . 1 . longueur utile de la chaine "cible" . c ______________________________________________________________________ c c==== c 0. declarations et dimensionnement c==== c c 0.1. ==> generalites c implicit none save c c 0.2. ==> communs c c 0.3. ==> arguments c integer long1, long2 character*(*) chain1, chain2 c c 0.4. ==> variables locales c integer long, iaux, deb, fin, dern0, deb1, p0 c c 0.5. ==> initialisations c ______________________________________________________________________ c c==== c 1. c==== c long = 0 deb = 0 deb1 = 0 dern0 = 0 p0 = -1 c do 1 iaux = 1, min( len(chain1), long1 ) if ( ichar(chain1(iaux:iaux)).gt.32 ) then if ( deb.eq.0 ) then deb = iaux endif fin = iaux p0 = 0 if ( long.lt.len(chain2) ) then if ( deb1.eq.0 ) then deb1 = iaux endif long = long + 1 chain2(long:long) = chain1(iaux:iaux) endif else if ( ichar(chain1(iaux:iaux)).eq.32 .or. > ichar(chain1(iaux:iaux)).eq.9 ) then if ( deb.eq.0 ) then deb = iaux endif if ( long.lt.len(chain2) ) then long = long + 1 chain2(long:long) = ' ' endif else c c non imprimables: c if ( deb.gt.0 .and. long.lt.len(chain2) ) then long = long + 1 chain2(long:long) = ' ' endif dern0 = iaux if ( p0.eq.0 ) then p0 = iaux endif endif 1 continue c c On complete eventuellement avec des blancs : c (mais qui ne seront pas comptes dans long2) c do 10 iaux = long+1, len(chain2) chain2(iaux:iaux) = ' ' 10 continue c c Bilan : c if ( deb1.gt.0 ) then c c Il y a au moins un caractere imprimable et non blanc, qui a pu c etre copie de la chaine source chain1 vers la cible chain2 : c (deb1 est le premier de ceux-ci dans chain1) c if ( dern0.lt.fin ) then long2 = long else c c Apres le dernier caractere imprimable et non blanc de chain1 (fin), c on a trouve : des blancs eventuels, puis un premier caractere non c imprimable (p0), puis eventuellement des blancs ou non impr. c puis enfin un dernier caractere non impr. (dern0, >= p0), c puis des blancs eventuels. c c deb pointe sur le premier caractere "utile" (blanc ou imprimable) c de chaine1 (deb<=deb1<=fin) c p0-1 serait le dernier caractere "utile" de chaine1 (fin<=p0-1) c long2 = min( max(0,len(chain2)) , p0-deb ) c endif c else c c chaine "source" vide, ou entierement blanche(+caracteres non impr.) : c long2 = 0 c endif c end