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 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