ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/nano_mpi/src/f2kcli.F90
Revision: 4
Committed: Mon Jun 10 17:18:36 2002 UTC (22 years ago) by chuckv
File size: 7821 byte(s)
Log Message:
Import Root

File Contents

# Content
1 ! F2KCLI : Fortran 200x Command Line Interface
2 ! copyright Interactive Software Services Ltd. 2001
3 ! For conditions of use see manual.txt
4 !
5 ! Platform : Unix/Linux
6 ! Compiler : Any Fortran 9x compiler supporting IARGC/GETARG
7 ! which counts the first true command line argument
8 ! after the program name as argument number one.
9 ! (Excludes compilers which require a special USE
10 ! statement to make IARGC/GETARG available).
11 ! To compile : f90 -c f2kcli.f90
12 ! (exact compiler name will vary)
13 ! Implementer : Lawson B. Wakefield, I.S.S. Ltd.
14 ! Date : February 2001
15 !
16 MODULE F2KCLI
17 USE IFLPORT!
18 CONTAINS
19 !
20 SUBROUTINE GET_COMMAND(COMMAND,LENGTH,STATUS)
21 !
22 ! Description. Returns the entire command by which the program was
23 ! invoked.
24 !
25 ! Class. Subroutine.
26 !
27 ! Arguments.
28 ! COMMAND (optional) shall be scalar and of type default character.
29 ! It is an INTENT(OUT) argument. It is assigned the entire command
30 ! by which the program was invoked. If the command cannot be
31 ! determined, COMMAND is assigned all blanks.
32 ! LENGTH (optional) shall be scalar and of type default integer. It is
33 ! an INTENT(OUT) argument. It is assigned the significant length
34 ! of the command by which the program was invoked. The significant
35 ! length may include trailing blanks if the processor allows commands
36 ! with significant trailing blanks. This length does not consider any
37 ! possible truncation or padding in assigning the command to the
38 ! COMMAND argument; in fact the COMMAND argument need not even be
39 ! present. If the command length cannot be determined, a length of
40 ! 0 is assigned.
41 ! STATUS (optional) shall be scalar and of type default integer. It is
42 ! an INTENT(OUT) argument. It is assigned the value 0 if the
43 ! command retrieval is sucessful. It is assigned a processor-dependent
44 ! non-zero value if the command retrieval fails.
45 !
46 CHARACTER(LEN=*), INTENT(OUT), OPTIONAL :: COMMAND
47 INTEGER , INTENT(OUT), OPTIONAL :: LENGTH
48 INTEGER , INTENT(OUT), OPTIONAL :: STATUS
49 !
50 INTEGER :: IARG,NARG,IPOS
51 INTEGER , SAVE :: LENARG
52 CHARACTER(LEN=2000), SAVE :: ARGSTR
53 LOGICAL , SAVE :: GETCMD = .TRUE.
54 !
55 ! Under Unix we must reconstruct the command line from its constituent
56 ! parts. This will not be the original command line. Rather it will be
57 ! the expanded command line as generated by the shell.
58 !
59 IF (GETCMD) THEN
60 NARG = IARGC()
61 IF (NARG > 0) THEN
62 IPOS = 1
63 DO IARG = 1,NARG
64 CALL GETARG(IARG,ARGSTR(IPOS:))
65 LENARG = LEN_TRIM(ARGSTR)
66 IPOS = LENARG + 2
67 IF (IPOS > LEN(ARGSTR)) EXIT
68 END DO
69 ELSE
70 ARGSTR = ' '
71 LENARG = 0
72 ENDIF
73 GETCMD = .FALSE.
74 ENDIF
75 IF (PRESENT(COMMAND)) COMMAND = ARGSTR
76 IF (PRESENT(LENGTH)) LENGTH = LENARG
77 IF (PRESENT(STATUS)) STATUS = 0
78 RETURN
79 END SUBROUTINE GET_COMMAND
80 !
81 INTEGER FUNCTION COMMAND_ARGUMENT_COUNT()
82 !
83 ! Description. Returns the number of command arguments.
84 !
85 ! Class. Inquiry function
86 !
87 ! Arguments. None.
88 !
89 ! Result Characteristics. Scalar default integer.
90 !
91 ! Result Value. The result value is equal to the number of command
92 ! arguments available. If there are no command arguments available
93 ! or if the processor does not support command arguments, then
94 ! the result value is 0. If the processor has a concept of a command
95 ! name, the command name does not count as one of the command
96 ! arguments.
97 !
98 COMMAND_ARGUMENT_COUNT = IARGC()
99 RETURN
100 END FUNCTION COMMAND_ARGUMENT_COUNT
101 !
102 SUBROUTINE GET_COMMAND_ARGUMENT(NUMBER,VALUE,LENGTH,STATUS)
103 !
104 ! Description. Returns a command argument.
105 !
106 ! Class. Subroutine.
107 !
108 ! Arguments.
109 ! NUMBER shall be scalar and of type default integer. It is an
110 ! INTENT(IN) argument. It specifies the number of the command
111 ! argument that the other arguments give information about. Useful
112 ! values of NUMBER are those between 0 and the argument count
113 ! returned by the COMMAND_ARGUMENT_COUNT intrinsic.
114 ! Other values are allowed, but will result in error status return
115 ! (see below). Command argument 0 is defined to be the command
116 ! name by which the program was invoked if the processor has such
117 ! a concept. It is allowed to call the GET_COMMAND_ARGUMENT
118 ! procedure for command argument number 0, even if the processor
119 ! does not define command names or other command arguments.
120 ! The remaining command arguments are numbered consecutively from
121 ! 1 to the argument count in an order determined by the processor.
122 ! VALUE (optional) shall be scalar and of type default character.
123 ! It is an INTENT(OUT) argument. It is assigned the value of the
124 ! command argument specified by NUMBER. If the command argument value
125 ! cannot be determined, VALUE is assigned all blanks.
126 ! LENGTH (optional) shall be scalar and of type default integer.
127 ! It is an INTENT(OUT) argument. It is assigned the significant length
128 ! of the command argument specified by NUMBER. The significant
129 ! length may include trailing blanks if the processor allows command
130 ! arguments with significant trailing blanks. This length does not
131 ! consider any possible truncation or padding in assigning the
132 ! command argument value to the VALUE argument; in fact the
133 ! VALUE argument need not even be present. If the command
134 ! argument length cannot be determined, a length of 0 is assigned.
135 ! STATUS (optional) shall be scalar and of type default integer.
136 ! It is an INTENT(OUT) argument. It is assigned the value 0 if
137 ! the argument retrieval is sucessful. It is assigned a
138 ! processor-dependent non-zero value if the argument retrieval fails.
139 !
140 ! NOTE
141 ! One possible reason for failure is that NUMBER is negative or
142 ! greater than COMMAND_ARGUMENT_COUNT().
143 !
144 INTEGER , INTENT(IN) :: NUMBER
145 CHARACTER(LEN=*), INTENT(OUT), OPTIONAL :: VALUE
146 INTEGER , INTENT(OUT), OPTIONAL :: LENGTH
147 INTEGER , INTENT(OUT), OPTIONAL :: STATUS
148 !
149 ! A temporary variable for the rare case case where LENGTH is
150 ! specified but VALUE is not. An arbitrary maximum argument length
151 ! of 1000 characters should cover virtually all situations.
152 !
153 CHARACTER(LEN=1000) :: TMPVAL
154 !
155 ! Possible error codes:
156 ! 1 = Argument number is less than minimum
157 ! 2 = Argument number exceeds maximum
158 !
159 IF (NUMBER < 0) THEN
160 IF (PRESENT(VALUE )) VALUE = ' '
161 IF (PRESENT(LENGTH)) LENGTH = 0
162 IF (PRESENT(STATUS)) STATUS = 1
163 RETURN
164 ELSE IF (NUMBER > IARGC()) THEN
165 IF (PRESENT(VALUE )) VALUE = ' '
166 IF (PRESENT(LENGTH)) LENGTH = 0
167 IF (PRESENT(STATUS)) STATUS = 2
168 RETURN
169 END IF
170 !
171 ! Get the argument if VALUE is present
172 !
173 IF (PRESENT(VALUE)) CALL GETARG(NUMBER,VALUE)
174 !
175 ! The LENGTH option is fairly pointless under Unix.
176 ! Trailing spaces can only be specified using quotes.
177 ! Since the command line has already been processed by the
178 ! shell before the application sees it, we have no way of
179 ! knowing the true length of any quoted arguments. LEN_TRIM
180 ! is used to ensure at least some sort of meaningful result.
181 !
182 IF (PRESENT(LENGTH)) THEN
183 IF (PRESENT(VALUE)) THEN
184 LENGTH = LEN_TRIM(VALUE)
185 ELSE
186 CALL GETARG(NUMBER,TMPVAL)
187 LENGTH = LEN_TRIM(TMPVAL)
188 END IF
189 END IF
190 !
191 ! Since GETARG does not return a result code, assume success
192 !
193 IF (PRESENT(STATUS)) STATUS = 0
194 RETURN
195 END SUBROUTINE GET_COMMAND_ARGUMENT
196 !
197 END MODULE F2KCLI