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 ENDThe command line buffer LINE must be passed by argument, never in a Module, to allow modularity and multi-language use.