subroutine run_clean (line,comm,error)
use gbl_message
!----------------------------------------------------------------------
! CLEAN Main routine
! Call appropriate subroutine according to COMM
!----------------------------------------------------------------------
character(len=*), intent(inout) :: line ! Command line
character(len=*), intent(in) :: comm ! Command name
logical, intent(out) :: error ! Logical error flag
!
call map_message(seve%c,'CLEAN',line)
!
! Analyze command
select case (comm)
case ('LOAD')
call load_buffer(line,error)
case ('READ')
call read_image(line,error)
case ('CLARK')
call clark_clean(line,error)
case ('FIT')
... etc...
case default
call map_message(seve%i,'CLEAN',comm//' not yet implemented')
end select
!
end subroutine run_clean
A handling routine for the a command looks like
SUBROUTINE COM1(LINE,ERROR)
CHARACTER*(*) LINE
LOGICAL ERROR
LOGICAL SIC_PRESENT
INTEGER IARG1_OPT1
REAL ARG1
!
! Test presence of option 1, and if so
! Decode Argument 1 of this option with a default value
IF (SIC_PRESENT(1,0)) THEN
IARG1_OPT1 = 10
CALL SIC_I4 (LINE,1,1,IARG1_OPT1,.FALSE.,ERROR)
IF (ERROR) RETURN
WRITE (6,*) 'Option 1 Set With Argument',IARG1_OPT1
ENDIF
!
! Retrieves and decode first argument of the command
CALL SIC_R4 (LINE,0,1,ARG1,.TRUE.,ERROR)
IF (ERROR) RETURN
WRITE (6,*) 'Command COM1 activated. ARG1',ARG1
! End of interface analysis, call a standard FORTRAN routine with
! all parameters now defined
CALL SUB1(ARG1,ARG2,...,IARG1,...,ERROR)
RETURN
END
The command line buffer LINE must be passed by argument, never in a
Module, to allow modularity and multi-language use.