!
module xincollafile implicit none public:: intestazione,ditestomio,pescofilemio ! ! Questa è la codifica standard di Base64 ! character(len=*),dimension(0:63),private,parameter::vale = (/ "A", & "B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R", & "S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i", & "j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",& "0","1","2","3","4","5","6","7","8","9","+","/" /) character(len=*),public,parameter::c34=char(34) character(len=*),public,parameter::c60=char(60) character(len=*),public,parameter::c62=char(62) character(len=*),private,parameter::r01=& c60//"?xml version="//c34//"1.0"//c34//" encoding="//c34//"iso-8859-1"//c34//" ?"//c62 character(len=*),private,parameter::r02=& c60//"html xmlns="//c34//"http://www.w3.org/1999/xhtml"//c34 character(len=*),private,parameter::r03=& "xmlns:s="//c34//"http://www.w3.org/2000/svg"//c34 character(len=*),private,parameter::r04=& "xmlns:l="//c34//"http://www.w3.org/1999/xlink"//c34//c62 character(len=*),private,parameter::r05=& c60//"head"//c62 character(len=*),private,parameter::r06=& c60//"title"//c62//"Titolo documento mio"//c60//"/title"//c62 character(len=*),private,parameter::r07=& c60//"style type="//c34//"text/css"//c34//c62 character(len=*),private,parameter::r08=& ".f { border-bottom :1px solid }" character(len=*),private,parameter::r09=& ".r { border-top: 1px solid }" character(len=*),private,parameter::r10=& ".v { text-decoration: overline }" character(len=*),private,parameter::r11=& ".td { font-weight: normal }" character(len=*),private,parameter::r12=& ".nuovapagina { page-break-before:always }" character(len=*),private,parameter::r13=& c60//"/style"//c62 character(len=*),private,parameter::r14=& c60//"/head"//c62 character(len=*),private,parameter::r15=& c60//"body"//c62 ! integer,dimension(0:255,3),private::testa,coda logical,private::noninizializzato=.true. ! contains ! subroutine intestazione(diagnostico) integer,intent(out)::diagnostico write(unit=16,fmt="(1a)",iostat=diagnostico) r01 if(diagnostico/=0) then return end if write(unit=16,fmt="(1a)") r02 write(unit=16,fmt="(1a)") r03 write(unit=16,fmt="(1a)") r04 write(unit=16,fmt="(1a)") r05 write(unit=16,fmt="(1a)") r06 write(unit=16,fmt="(1a)") r07 write(unit=16,fmt="(1a)") r08 write(unit=16,fmt="(1a)") r09 write(unit=16,fmt="(1a)") r10 write(unit=16,fmt="(1a)") r11 write(unit=16,fmt="(1a)") r12 write(unit=16,fmt="(1a)") r13 write(unit=16,fmt="(1a)") r14 write(unit=16,fmt="(1a)") r15 return end subroutine intestazione ! subroutine ditestomio(idsua,nim) character(len=*),intent(in)::idsua integer,intent(in)::nim character(len=256)::rigona character(len=9)::idi integer::diagnostico,nz,j write(unit=idi,fmt="(1i9)") 900000000+nim idi(1:2)="qz" write(unit=16,fmt=*) char(60),"!-- §",idi,"£ ",idsua," --",char(62) do j=1,999999999 read(unit=12,fmt="(1a)",iostat=diagnostico) rigona if(diagnostico/=0) then return end if nz=len_trim(rigona) write(unit=16,fmt="(1a)") rigona(1:nz) end do return end subroutine ditestomio ! subroutine pescofilemio(idsua,tipo,nim) ! character(len=*),intent(in)::idsua integer,intent(in)::tipo,nim character(len=1)::bit8 integer:: j,k,jj,fase,bit6,resto,nbit,diagnostico character(len=76)::riga character(len=9)::idi if(noninizializzato) then ! Fa questo solo la prima volta... do k=0,255 testa(k,1)=k/4 coda(k,1)=(k-testa(k,1)*4)*16 testa(k,2)=k/16 coda(k,2)=(k-testa(k,2)*16)*4 testa(k,3)=k/64 coda(k,3)=k-testa(k,3)*64 end do noninizializzato=.false. end if ! write(unit=idi,fmt="(1i9)") 900000000+nim idi(1:2)="qz" write(unit=16,fmt=*) char(60),"!-- §",idi,"£ --",char(62) if(tipo==0) then write(unit=*,fmt=*)"0 == Non è una immagine" write(unit=16,fmt=*) char(60),"pre id=",char(34),idsua,char(34),char(62) else if (tipo==1 ) then write(unit=*,fmt=*)"1 == Immagine tipo jpg" write(unit=16,fmt=*) char(60),"img id=",char(34),idsua,char(34)," src=",& char(34),"data:image/jpg;base64," else if (tipo==2 ) then write(unit=*,fmt=*)"2 == Immagine tipo gif" write(unit=16,fmt=*) char(60),"img id=",char(34),idsua,char(34)," src=",& char(34),"data:image/gif;base64," else if (tipo==3 ) then write(unit=*,fmt=*)"3 == Immagine tipo png" write(unit=16,fmt=*) char(60),"img id=",char(34),idsua,char(34)," src=",& char(34),"data:image/png;base64," else if (tipo==4 ) then write(unit=*,fmt=*)"4 == Immagine tipo x-bmp" write(unit=16,fmt=*) char(60),"img id=",char(34),idsua,char(34)," src=",& char(34),"data:image/x-bmp;base64," else write(unit=*,fmt=*)"5 == Immagine tipo ..." write(unit=16,fmt=*) char(60),"img id=",char(34),idsua,char(34)," src=",& char(34),"data:image/...;base64," end if ! ! Questo è il vero ciclo di conversione ! fase=0 k=0 resto=0 carico2:do j=1,999999999 read(unit=12,rec=j,iostat=diagnostico) bit8 if(diagnostico/=0) then write(unit=*,fmt=*)"Ha letto ",j," caratteri." exit carico2 else fase=fase+1 nbit=ichar(bit8) bit6=testa(nbit,fase)+resto resto=coda(nbit,fase) k=k+1 riga(k:k)=vale(bit6) if(fase==3) then k=k+1 riga(k:k)=vale(resto) resto=0 fase=0 if(k==76) then write(unit=16,fmt="(1a)") riga k=0 end if end if end if end do carico2 if (fase==1) then k=k+1 riga(k:k)=vale(resto) write(unit=16,fmt="(2a)") riga(1:k),"==" else if(fase==2) then k=k+1 riga(k:k)=vale(resto) write(unit=16,fmt="(2a)") riga(1:k),"=" else if (k> 0) then write(unit=16,fmt="(1a)") riga(1:k) end if ! ! Fine del ciclo di conversione ! if(tipo==0) then write(unit=16,fmt=*) char(60),"/pre",char(62) else write(unit=16,fmt=*) char(34),"/",char(62) end if write(unit=16,fmt=*) char(60),"!-- §£ --",char(62) return end subroutine pescofilemio ! end module xincollafile !