program demo_anyscalar_to_string
use M_anything, only : anyscalar_to_string
implicit none
character(len=:),allocatable :: pr
character(len=:),allocatable :: frmt
integer :: biggest
pr=anyscalar_to_string('HUGE(3f) integers',huge(0),&
&'and real',huge(0.0),'and double',huge(0.0d0))
write(*,'(a)')pr
pr=anyscalar_to_string('real :',huge(0.0),0.0,12345.6789,tiny(0.0) )
write(*,'(a)')pr
pr=anyscalar_to_string('doubleprecision :',huge(0.0d0),0.0d0,12345.6789d0,tiny(0.0d0) )
write(*,'(a)')pr
pr=anyscalar_to_string('complex :',cmplx(huge(0.0),tiny(0.0)) )
write(*,'(a)')pr
! create a format on the fly
biggest=huge(0)
frmt=anyscalar_to_string('(*(i',int(log10(real(biggest))),':,1x))',sep='')
write(*,*)'format=',frmt
! although it will often work, using anyscalar_to_string(3f)
! in an I/O statement is not recommended
! because if an error occurs anyscalar_to_string(3f) will try
! to write while part of an I/O statement
! which not all compilers can handle and is currently non-standard
write(*,*)anyscalar_to_string('program will now stop')
end program demo_anyscalar_to_string