program f90_CALDAT implicit none integer::hmax,hmin,smax,smin,vmax,vmin integer::hh1(1:12),ss1(1:12),vv1(1:12) integer::hh2(1:12),ss2(1:12),vv2(1:12) character(len=7)::HEX1(1:12),HEX2(1:12) real(4)::Te(1:12)=(/3.3,3.6,6.9,12.9,17.7,21.2,24.7,26.1,21.9,16.1,10.5,5.8/) real::Temax,Temin integer::i integer::R,G,B character(len=3)::dum1,dum2,dum3,dum4,dum5,dum6 Temax=26.1 Temin=3.3 ! Input data call getarg(1,dum1) call getarg(2,dum2) call getarg(3,dum3) call getarg(4,dum4) call getarg(5,dum5) call getarg(6,dum6) read(dum1,*) hmax read(dum2,*) hmin read(dum3,*) smax read(dum4,*) smin read(dum5,*) vmax read(dum6,*) vmin ! Define colors (HSV->RGB->Hex) do i=1,12 hh2(i)=nint(hmax-(hmax-hmin)/(Temax-Temin)*(Te(i)-Temin)) ss2(i)=nint(smin+(smax-smin)/(Temax-Temin)*(Te(i)-Temin)) vv2(i)=nint(vmin+(vmax-vmin)/(Temax-Temin)*(Te(i)-Temin)) call HSVtoRGB(hh2(i),ss2(i),vv2(i),R,G,B) HEX2(i)='#'//C10to16(R)//C10to16(G)//C10to16(B) write(6,'(a7,3(i4))') HEX2(i),hh2(i),ss2(i),vv2(i) end do do i=1,12 hh1(i)=nint(hmax-(hmax-hmin)/(Temax-Temin)*(Te(i)-Temin)) ss1(i)=255 vv1(i)=255 call HSVtoRGB(hh1(i),ss1(i),vv1(i),R,G,B) HEX1(i)='#'//C10to16(R)//C10to16(G)//C10to16(B) write(6,'(a7,3(i4))') HEX1(i),hh1(i),ss1(i),vv1(i) end do call HTMLMAIN(hh1,ss1,vv1,HEX1,hh1,ss2,vv2,HEX2) call CSCALMAIN() call CSSUBCOL(HEX1,HEX2) call BATIMK(HEX2) ! Execute a batch file for ImagiMagick call system("bat_img_cal.bat") stop contains !------------------------------------------------- subroutine HSVtoRGB(hh,ss,vv,R,G,B) !------------------------------------------------- integer,intent(in)::hh,ss,vv integer,intent(out)::R,G,B real(4)::ff integer::ii,pp,qq,tt ii = mod(real(hh)/60.0,6.0) ff = real(hh)/60.0-real(int(real(hh)/60.0)) pp = nint(vv*(1.0-(ss/255.0))) qq = nint(vv*(1.0-(ss/255.0)*ff)) tt = nint(vv*(1.0-(ss/255.0)*(1.0-ff))) R=0; G=0; B=0 select case (ii) case(0) R=vv; G=tt; B=pp case(1) R=qq; G=vv; B=pp case(2) R=pp; G=vv; B=tt case(3) R=pp; G=qq; B=vv case(4) R=tt; G=pp; B=vv case(5) R=vv; G=pp; B=qq end select end subroutine HSVtoRGB !------------------------------------------------- character(len=2) function C10to16(num) !------------------------------------------------- integer,intent(in)::num integer,parameter::n=10 integer::r(1:n) integer::i,m integer::numd=16 character(len=1)::snum(1:n) character(len=200)::ans integer::num0,qq num0=num do i=1,n qq=num0/numd r(i)=num0-numd*qq if(qq==0)exit num0=qq end do m=i do i=m,1,-1 if(r(i)==10)snum(i)='A' if(r(i)==11)snum(i)='B' if(r(i)==12)snum(i)='C' if(r(i)==13)snum(i)='D' if(r(i)==14)snum(i)='E' if(r(i)==15)snum(i)='F' if(r(i)<=9)then write(snum(i),'(i1.1)') r(i) end if end do ans='' do i=m,1,-1 ans=trim(adjustl(ans))//snum(i) end do if(len_trim(ans)==1)ans='0'//trim(ans) C10to16=ans end function C10to16 !------------------------------------------------- subroutine HTMLMAIN(hh1,ss1,vv1,HEX1,hh2,ss2,vv2,HEX2) !------------------------------------------------- ! Create html file for top page of calenders named 'cal_main.html' integer,intent(in)::hh1(1:12),ss1(1:12),vv1(1:12) integer,intent(in)::hh2(1:12),ss2(1:12),vv2(1:12) character(len=7),intent(in)::HEX1(1:12),HEX2(1:12) character(len=2)::dum character(len=3)::dum1,dum2,dum3,dum4,dum5,dum6 character(len=9)::dum0 character(len=8)::dumw1,dumw2,dumw3 character(len=500)::str open(12, file='cal_main.html', status='replace') write(12,'(a)') '' write(12,'(a)') '' write(12,'(a)') '' write(12,'(a)') '' write(12,'(a)') '' write(12,'(a)') '' write(12,'(a)') '' write(12,'(a)') '' write(12,'(a)') 'WANtaroHP (Calender)' write(12,'(a)') '' write(12,'(a)') '' write(12,'(a)') '' write(12,'(a)') '

Create calender

' write(12,'()') write(12,'(a)') '' write(12,'()') write(12,'(a)') '
' write(12,'()') write(12,'(a)') '

Calender (2011-2014)

' write(12,'(a)') '
' write(12,'(a)') '' write(12,'(a)') '' write(12,'(a)') '' write(12,'(a)') '' write(12,'(a)') '' write(12,'(a)') '' write(12,'(a)') '' write(12,'(a)') '
2011201220132014
' write(12,'(a)') '
' write(12,'(a)') '

Calender & Schedule (2013)

' write(12,'(a)') '
' write(12,'(a)') '

Color image for each month

' write(12,'(a)') '' write(12,'(a)') ' & & ' write(12,'(a)') '' do i=1,12 if(i== 1)str='' if(i== 2)str='' if(i== 3)str='' if(i== 4)str='' if(i== 5)str='' if(i== 6)str='' if(i== 7)str='' if(i== 8)str='' if(i== 9)str='' if(i==10)str='' if(i==11)str='' if(i==12)str='' write (dum,'(i2.2)') i dum0(1:9)='' write(dum0,'(f4.1)') Te(i) if(len_trim(adjustl(dum0))==3)dum0=' '//trim(adjustl(dum0)) str=trim(adjustl(str))//' & & ' dumw1(1:8)='' dumw2(1:8)='' dumw3(1:8)='' write(dumw1,'(i3)') hh2(i) write(dumw2,'(i3)') ss2(i) write(dumw3,'(i3)') vv2(i) if(len_trim(adjustl(dumw1))==2)dumw1=' '//adjustl(dumw1) if(len_trim(adjustl(dumw2))==2)dumw2=' '//adjustl(dumw2) if(len_trim(adjustl(dumw3))==2)dumw3=' '//adjustl(dumw3) str=trim(adjustl(str))// & & '' str=trim(adjustl(str))//'' dumw1(1:8)='' dumw2(1:8)='' dumw3(1:8)='' write(dumw1,'(i3)') hh1(i) write(dumw2,'(i3)') ss1(i) write(dumw3,'(i3)') vv1(i) if(len_trim(adjustl(dumw1))==2)dumw1=' '//adjustl(dumw1) if(len_trim(adjustl(dumw2))==2)dumw2=' '//adjustl(dumw2) if(len_trim(adjustl(dumw3))==2)dumw3=' '//adjustl(dumw3) str=trim(adjustl(str))// & & '' write(12,'(a)') trim(adjustl(str)) end do write(12,'(a)') '' write(12,'(a)') '
MonthT (°C)SelectedReference
ColorHSVColorHSV
January
February
March
April
May
June
July
August
September
October
Nobemver
December '//trim(adjustl(dum0))//''//HEX2(i)//''//trim(adjustl(dumw1))//' '//trim(adjustl(dumw2))//' '//trim(adjustl(dumw3))//''//HEX1(i)//''//trim(adjustl(dumw1))//' '//trim(adjustl(dumw2))//' '//trim(adjustl(dumw3))//'
T (°C) is average temperature of each month in Maebashi, Japan.
' write(12,'(a)') '
' write(12,'()') write(12,'(a)') '
' write(12,'(a)') '' write(12,'(a)') '' close(12) end subroutine HTMLMAIN !------------------------------------------------- subroutine CSCALMAIN() !------------------------------------------------- open(12, file='cscalmain.css', status='replace') write(12,'(a)') '*{margin:0;padding:0;}' write(12,'(a)') '/******************************************/' write(12,'(a)') '/* Format for body */' write(12,'(a)') '/******************************************/' write(12,'(a)') 'body{' write(12,'(a)') 'line-height:150%;' write(12,'(a)') 'color:#000000;' write(12,'(a)') 'background-color:#ffffff;' write(12,'(a)') 'font-size:0.9em;' write(12,'(a)') 'font-family:arial;' write(12,'(a)') '}' write(12,'(a)') '/******************************************/' write(12,'(a)') '/* header */' write(12,'(a)') '/******************************************/' write(12,'(a)') '#top{' write(12,'(a)') 'padding:20px;' write(12,'(a)') 'background-color:#000000;' write(12,'(a)') 'color:#ffffff;' write(12,'(a)') 'font-weight:bold;' write(12,'(a)') 'text-align:center;' write(12,'(a)') '}' write(12,'(a)') '/******************************************/' write(12,'(a)') '/* Footer */' write(12,'(a)') '/******************************************/' write(12,'(a)') '#bottom{' write(12,'(a)') 'padding:10px;' write(12,'(a)') 'background-color:#000000;' write(12,'(a)') 'color:#ffffff;' write(12,'(a)') 'text-align:center;' write(12,'(a)') '}' write(12,'(a)') '/******************************************/' write(12,'(a)') '/* Main contents */' write(12,'(a)') '/******************************************/' write(12,'(a)') '#main{' write(12,'(a)') 'margin-top:20px;' write(12,'(a)') 'margin-left:200px;' write(12,'(a)') 'padding:10px;' write(12,'(a)') 'background-color:#ffffff;' write(12,'(a)') '}' write(12,'(a)') '/******************************************/' write(12,'(a)') '/* Format for h1-h5 */' write(12,'(a)') '/******************************************/' write(12,'(a)') 'h1{' write(12,'(a)') 'font-size:2.0em;' write(12,'(a)') '}' write(12,'(a)') 'h2{' write(12,'(a)') 'margin-top:30px;' write(12,'(a)') 'margin-bottom:10px;' write(12,'(a)') 'padding-top:10px;' write(12,'(a)') 'padding-bottom:10px;' write(12,'(a)') 'padding-left:10px;' write(12,'(a)') 'background-color:#00ffff;' write(12,'(a)') 'font-size:1.5em;' write(12,'(a)') '}' write(12,'(a)') 'h3{' write(12,'(a)') 'margin-top:20px;' write(12,'(a)') 'margin-bottom:10px;' write(12,'(a)') 'padding-left:10px;' write(12,'(a)') 'border-left:solid 20px #00008b;' write(12,'(a)') 'border-bottom:solid 1px #00008b;' write(12,'(a)') 'font-size:1.25em;' write(12,'(a)') '}' write(12,'(a)') 'h4{' write(12,'(a)') 'margin-top:20px;' write(12,'(a)') 'margin-bottom:10px;' write(12,'(a)') 'padding-left:10px;' write(12,'(a)') 'border-left:solid 10px #00008b;' write(12,'(a)') 'font-size:1.0em;' write(12,'(a)') '}' write(12,'(a)') 'h5{' write(12,'(a)') 'font-size:1.0em;' write(12,'(a)') '}' write(12,'(a)') '/******************************************/' write(12,'(a)') '/* Left Menu */' write(12,'(a)') '/******************************************/' write(12,'(a)') '#navi{' write(12,'(a)') 'margin-top:20px;' write(12,'(a)') 'padding:10px;' write(12,'(a)') 'width:180px;' write(12,'(a)') 'position:absolute;' write(12,'(a)') 'left:0;' write(12,'(a)') 'font-size:0.85em;' write(12,'(a)') 'line-height:120%;' write(12,'(a)') 'background-color:#ffffff;' write(12,'(a)') 'color:#555555;' write(12,'(a)') '}' write(12,'(a)') '/******************************************/' write(12,'(a)') '/* Table */' write(12,'(a)') '/******************************************/' write(12,'(a)') 'table{' write(12,'(a)') 'margin-left:auto;' write(12,'(a)') 'margin-right:auto;' write(12,'(a)') 'margin-top:10px;' write(12,'(a)') 'margin-bottom:10px;' write(12,'(a)') 'font-size:1.2em;' write(12,'(a)') 'line-height:110%;' write(12,'(a)') '}' write(12,'(a)') 'th{' write(12,'(a)') 'width:100px;' write(12,'(a)') 'text-align:center;' write(12,'(a)') 'vertical-align:middle;' write(12,'(a)') 'padding-top:3px;' write(12,'(a)') 'padding-right:10px;' write(12,'(a)') 'padding-bottom:3px;' write(12,'(a)') 'padding-left:10px;' write(12,'(a)') '}' write(12,'(a)') 'td{' write(12,'(a)') 'width:100px;' write(12,'(a)') 'height:30px;' write(12,'(a)') 'text-align:left;' write(12,'(a)') 'vertical-align:middle;' write(12,'(a)') 'padding-top:3px;' write(12,'(a)') 'padding-right:10px;' write(12,'(a)') 'padding-bottom:3px;' write(12,'(a)') 'padding-left:10px;' write(12,'(a)') '}' write(12,'(a)') '/******************************************/' write(12,'(a)') '/* Table title */' write(12,'(a)') '/******************************************/' write(12,'(a)') 'p.title{' write(12,'(a)') 'text-align:center;' write(12,'(a)') 'margin-top:10px;' write(12,'(a)') 'margin-bottom:10px;' write(12,'(a)') 'font-size:2em;' write(12,'(a)') 'font-weight:bold;' write(12,'(a)') 'font-style:italic;' write(12,'(a)') '}' close(12) end subroutine CSCALMAIN !------------------------------------------------- subroutine CSSUBCOL(HEX1,HEX2) !------------------------------------------------- ! Create css-file named 'cssubcol.css' for top page of calender character(len=7),intent(in)::HEX1(1:12),HEX2(1:12) character(len=2)::dum character(len=500)::str open(12, file='cssubcol.css', status='replace') do i=1,12 write (dum,'(i2.2)') i str='td.col2'//dum//'{background-color:'//HEX2(i)//';color:#000000;}' write(12,'(a)') trim(adjustl(str)) end do write(12,'()') do i=1,12 write (dum,'(i2.2)') i str='td.col1'//dum//'{background-color:'//HEX1(i)//';color:#000000;}' write(12,'(a)') trim(adjustl(str)) end do close(12) end subroutine CSSUBCOL !------------------------------------------------- subroutine BATIMK(HEX2) !------------------------------------------------- ! Create batch file for control commands for ImageMagick named 'bat_img_cal.bat' character(len=7),intent(in)::HEX2(1:12) character(len=2)::dum character(len=500)::str open(12, file='bat_img_cal.bat', status='replace') do i=1,12 write (dum,'(i2.2)') i str='set col1='//HEX2(i) ; write(12,'(a)') trim(adjustl(str)) str='set col2=#ffffff' ; write(12,'(a)') trim(adjustl(str)) str='set image=img_cal_'//dum//'.png'; write(12,'(a)') trim(adjustl(str)) str='set csdat=cscal'//dum//'.css' ; write(12,'(a)') trim(adjustl(str)) str='call bat_imk_exe' ; write(12,'(a)') trim(adjustl(str)) write(12,'()') end do close(12) ! Create batch file for execution commandsfor ImageMagick named 'bat_imk_exe.bat' ! (included 2 lines for css file for each html file for calender: echo commands are used) open(12, file='bat_imk_exe.bat', status='replace') write(12,'(a)') 'convert -size 200x40 gradient:%col1%-%col2% temp1.png' write(12,'(a)') 'convert -size 200x80 gradient:%col2%-%col2% tempi.png' write(12,'(a)') 'convert -size 200x40 gradient:%col2%-%col1% temp2.png' write(12,'(a)') 'convert -append temp1.png tempi.png imgm.png' write(12,'(a)') 'convert -append imgm.png temp2.png img1.png' write(12,'(a)') 'convert -size 160x40 gradient:%col1%-%col2% -rotate -90 temp1.png' write(12,'(a)') 'convert -size 160x120 gradient:%col2%-%col2% -rotate -90 tempi.png' write(12,'(a)') 'convert -size 160x40 gradient:%col2%-%col1% -rotate -90 temp2.png' write(12,'(a)') 'convert +append temp1.png tempi.png imgm.png' write(12,'(a)') 'convert +append imgm.png temp2.png img2.png' write(12,'(a)') 'composite -gravity center -dissolve 50%x50% img2.png img1.png temp1.png' write(12,'(a)') 'convert -resize 120x80! -unsharp 2x1.4+0.5+0 -quality 100 temp1.png %image%' write(12,'(a)') 'echo th.col{background-color:%col1%;color:#000000;} > %csdat%' write(12,'(a)') 'echo td.col{background-image:url("%image%");} >> %csdat%' close(12) end subroutine BATIMK !------------------------------------------------- end program f90_CALDAT