demo_calculator Program

Variables

Type Attributes Name Initial
integer, parameter :: dp = kind(0.0d0)
character(len=iclen_calc) :: event
integer :: ierr
character(len=iclen_calc) :: line
character(len=iclen_calc) :: outlin
real(kind=dp) :: rvalue

Source Code

program demo_calculator
!compute(1f): line mode calculator program (that calls calculator(3f))
use M_calculator, only: calculator,iclen_calc
! iclen_calc : max length of expression or variable value as a string
implicit none
integer,parameter         :: dp=kind(0.0d0)
character(len=iclen_calc) :: line
character(len=iclen_calc) :: outlin
character(len=iclen_calc) :: event
real(kind=dp)             :: rvalue
integer                   :: ierr
   ierr=0
   write(*,*)'Enter expressions or "funcs" or "dump"'
   call calculator('ownmode(1)',outlin,event,rvalue,ierr)
   ! activate user-defined function interface
   INFINITE: do
      read(*,'(a)',end=999)line
      if(line.eq.'.')stop
      call calculator(line,outlin,event,rvalue,ierr)
      select case (ierr)
         ! several different meanings to the error flag returned by calculator
       case(0)
         ! a numeric value was returned without error
         write(*,'(a,a,a)')trim(outlin),' = ',trim(line)
       case(2)
         ! a string value was returned without error
         write(*,'(a)')trim(event(:int(rvalue)))
       case(1)
         ! a request for a message has been returned (from DUMP or FUNC)
         write(*,'(a,a)')'message===>',trim(event(:len_trim(event)))
       case(-1)
         ! an error has occurred
         write(*,'(a,a)')'error===>',trim(event(:len_trim(event)))
       case default
         ! this should not occur
         WRITE(6,'(A,i10)')'*CALCULATOR* UNEXPECTED IERR VALUE ',IERR
      end select
   enddo INFINITE
999 continue
end program demo_calculator