ccccccc	Programa a per a passar una matriu a format E16.6
	real*8 matriui
	integer i,j,k
	integer iarx
	integer n_arxiu,n_ubicacio
	integer numarxius,dimx,dimy
	character*80 arxius
	character*200 ubicacio
	dimension matriui(300,300),matriuf(300,300),arxius(100)
	
ccccccccccccccc	Variables
c	matriui: Matriu inicial
c	matriuf: Matriu final
c	numarxius: Nombre d'arxius a transformar
c	arxius: vector amb els arxius a transformar
c	ubicacio: Subdirectori dels arxius

ccccccccccccccc	Subroutines
c	llegir_config: Per a llegir la configuracio del programa
c	dimensions: per a llegir les dades i buscar-ne la seva dimensio
c	llargada_String: per a determinar la llargada d'un String

	call llegir_config(ubicacio,numarxius,arxius)

	call dimensions(arxius(1),ubicacio,dimx,dimy)

	write(6,*)'Dimensions arxius a transformar...',dimx,char(44),dimy

	call llargada_String(ubicacio,200,n_ubicacio)

	do iarx=1,numarxius
	
	call llargada_String(arxius(iarx),80,n_arxiu)
	
	open(unit=1,file=ubicacio(1:n_ubicacio)//char(47)//
     &arxius(iarx)(1:n_arxiu),status='old')

	do i=1,dimx
	read(1,*)(matriui(i,j),j=1,dimy)
	enddo

	close(unit=1)
	open(unit=2,file=ubicacio(1:n_ubicacio)//char(47)//
     &arxius(iarx)(1:n_arxiu)//'.Vis5d',status='unknown')

	do i=1,dimx
	write(2,10)(matriui(i,j),j=1,dimy)
	enddo

ccc Aqui s'acaben els arxius
	enddo

  10	format(300(E16.6))

	end

ccccccc	SUBROUTINA per a determinar la llargada d'un String
	subroutine llargada_String(String,num_caracters,llargada)
	integer num_caracters,llargada
	character*1000 String
	
	llargada=0
	do i=1,num_caracters
 	if ((ichar(String(i:i))-48).ne.(-16)) llargada=llargada+1
	enddo

c	write(6,*)'*****',String(1:llargada),'****'
	end

ccccccc	SUBROUTINA per a llegir les dades i buscar-ne la seva dimensio
	subroutine dimensions(ar,ubic,dx,dy)
	integer i,j
	integer dx,dy,n_ar,n_u,ll,charlin
	character*50 lin
	character*80 ar
	character*200 ubic
	character*5000 linia 
	dimension charlin(50)
	
	n_ar=0
	do i=1,80
	if ((ichar(ar(i:i))-48).ne.(-16)) n_ar=n_ar+1
	enddo
	
	n_u=0
	do i=1,200
	if ((ichar(ubic(i:i))-48).ne.(-16)) n_u=n_u+1
	enddo

	dx=0
	dy=0
	open(unit=3,file=ubic(1:n_u) // char(47) // ar(1:n_ar)
     &,status='old')
	do i=1,1000
	read(3,5,end=100)lin
	dx=dx+1
	enddo
  100	continue
  	close(unit=3)
	
	open(unit=3,file=ubic(1:n_u) // char(47) // ar(1:n_ar)
     &,status='old')
	
	read(3,70)linia
  70 	format(5000a)

	close(unit=3)

	do i=1,50
	charlin(i)=ichar(linia(i:i))-48
	enddo

	ll=0
	do i=2,49
	if ((charlin(i).eq.-16).and.(charlin(i-1).ne.(-16))) then
	ll=i-1
	goto 150
	endif
	enddo
  150	continue

	dy=0
	do i=1,1000
	ilin=ll-1+(i-1)*ll
	if ((ichar(linia(ilin:ilin))-48).ne.(-16)) dy=dy+1
	if ((ichar(linia(ilin:ilin))-48).eq.(-16)) goto 200
	enddo
  200	continue

c 	write(6,*)'La dimensio de la matriu ',dx,' x ',dy

   5	format(a50)
	end
	
ccccccc	SUBROUTINA de carrega de la configuracio del programa
	subroutine llegir_config(ubic,narxs,arxs)
	integer i
	integer narxs
	character*14 linia
	character*80 arxs
	character*200 ubic
	dimension arxs(100)
	
	open(unit=1,file='inf_passar_matriu-Vis5d.txt',status='old')
	read(1,10)linia
	read(1,10)linia
	read(1,20)ubic
	read(1,10)linia
	read(1,10)linia
	read(1,*)narxs
	read(1,10)linia
	read(1,10)linia
	do i=1,narxs
	read(1,80)arxs(i)
	enddo

  80	format(a80)
  40	format(a4)	
  20	format(a200)
  10	format(a14)
	
	close(unit=1)
	
	write(6,*)'Tenim :'
	write(6,*)'Ubicacio arxius: ',ubic
	write(6,*)'Nombre arxius: ',narxs
	do i=1,narxs
	write(6,*)arxs(i)
	enddo
	end
