source: palm/trunk/UTIL/interpret_config.f90 @ 69

Last change on this file since 69 was 69, checked in by raasch, 15 years ago

scripts are running under pdksh

File size: 20.6 KB
Line 
1 PROGRAM interpret_config
2
3!-------------------------------------------------------------------------------!
4! 21/07/97 - Siggi - Erste Fassung
5! 18/11/97 - Siggi - Komma in 2010-FORMAT hinzugefuegt
6! 29/04/05 - Siggi - extin wird auch fuer Input-Dateien ausgegeben
7! 29/06/05 - Siggi - Fehlermeldung ins englische uebertragen und ergaenzt
8! 01/11/05 - Siggi - s2b-Feld erlaubt den Wert locopt
9! 28/02/07 - Siggi - empty lines in configuration file are accepted
10!
11! Letzte Aenderungen:
12! -------------------
13!
14! Beschreibung:
15! -------------
16! Interpretation der MRUN-Konfigurationsdatei. Ausgegeben werden ksh-Kommandos,
17! die anschliessend von MRUN ausgefuehrt werden muessen.
18!-------------------------------------------------------------------------------!
19
20    IMPLICIT NONE
21
22    CHARACTER (LEN=1)   ::  bs = ACHAR( 92 )   ! backslash (auf vpp sonst n. druckbar)
23    CHARACTER (LEN=20)  ::  do_remote, do_trace, host, localhost
24    CHARACTER (LEN=100) ::  config_file, icf
25    CHARACTER (LEN=300) ::  cond1, cond2, empty = REPEAT( ' ', 240 ), &
26                            for_cond1, for_cond2, for_host, input_list, &
27                            iolist, output_list, s1, s2, s2a, s2b, s2c, s3, &
28                            s3cond, s4, s5, s6, value, value_mrun,&
29                            var, zeile
30
31    INTEGER ::  dummy, i, icomment = 0, icond1, icond2, idatver = 0, iec = 0, &
32                ienvvar = 0, ifor_cond1, ifor_cond2, ifor_host, ihost, &
33                iic = 0, iicf, iin = 0, iinput_list, il, ilocalhost,  ioc = 0, &
34                ios, iout = 0, ioutput_list, is1, is2, is2a, is2b, is2c, &
35                is3, is3cond, is4, is5, is6, ivalue, ivalue_mrun, ivar, izeile
36
37    LOGICAL ::  found
38
39    NAMELIST /mrun_environment/  cond1, cond2, config_file, do_remote, do_trace, &
40                                 host, input_list, icf, localhost, output_list
41
42
43    OPEN ( 1, FILE='.mrun_environment', FORM='FORMATTED' )
44    READ ( 1, mrun_environment )
45
46    icond1       = LEN_TRIM( cond1 )
47    icond2       = LEN_TRIM( cond2 )
48    il           = LEN_TRIM( config_file )
49    ihost        = LEN_TRIM( host )
50    iinput_list  = LEN_TRIM( input_list )
51    iicf         = LEN_TRIM( icf )
52    ilocalhost   = LEN_TRIM( localhost )
53    ioutput_list = LEN_TRIM( output_list )
54
55!    CALL local_getenv( 'cond1', 5, cond1, icond1 )
56!    CALL local_getenv( 'cond2', 5, cond2, icond2 )
57!    CALL local_getenv( 'config_file', 11, config_file, il )
58!    CALL local_getenv( 'do_remote', 9, do_remote, dummy )
59!    CALL local_getenv( 'do_trace', 8, do_trace, dummy )
60!    CALL local_getenv( 'host', 4, host, ihost )
61!    CALL local_getenv( 'input_list', 10, input_list, iinput_list )
62!    CALL local_getenv( 'interpreted_config_file', 23, icf, iicf )
63!    CALL local_getenv( 'localhost', 9, localhost, ilocalhost )
64!    CALL local_getenv( 'output_list', 11, output_list, ioutput_list )
65    iolist = input_list(1:iinput_list) // output_list(1:ioutput_list)
66
67    IF ( do_trace(1:4) == 'true' )  THEN
68       PRINT*,'*** cond1="',cond1(1:icond1),'"'
69       PRINT*,'*** cond2="',cond2(1:icond2),'"'
70       PRINT*,'*** config_file="',config_file(1:il),'"'
71       PRINT*,'*** do_remote="',do_remote,'"'
72       PRINT*,'*** do_trace="',do_trace,'"'
73       PRINT*,'*** host="',host(1:ihost),'"'
74       PRINT*,'*** input_list="',input_list(1:iinput_list),'"'
75       PRINT*,'*** interpreted_config_file="',icf(1:iicf),'"'
76       PRINT*,'*** localhost="',localhost(1:ilocalhost),'"'
77       PRINT*,'*** output_list="',output_list(1:ioutput_list),'"'
78    ENDIF
79
80    OPEN ( 1, FILE=config_file(1:il), FORM='formatted' )
81    OPEN ( 2, FILE=icf(1:iicf), FORM='formatted' )
82
83    READ ( 1, '(A)', IOSTAT=ios )  zeile
84
85
86    DO WHILE ( ios == 0 )
87
88       izeile = LEN_TRIM( zeile )
89
90       IF ( LEN_TRIM( zeile ) == 0 )  THEN
91          CONTINUE
92       ELSEIF ( zeile(1:1) == '#' )  THEN
93          icomment = icomment + 1
94       ELSEIF ( zeile(1:1) == '%' )  THEN
95          ienvvar = ienvvar + 1
96          i = INDEX( zeile, ' ' )
97          var = zeile(2:i-1)
98          ivar = i - 2
99
100!
101!--       Achtung: Auf hpmuk und vpp sind nur die Variablen bekannt, die
102!--       von MRUN exportiert wurden!
103!          CALL local_getenv( var, ivar, value_mrun, ivalue_mrun )
104          value_mrun = ''
105          ivalue_mrun = 1
106
107!
108!--       Variable bekommt nur dann neuen Wert, wenn ihr per Shellscript-
109!--       Option noch keiner zugewiesen wurde
110          IF ( value_mrun(1:ivalue_mrun) == ''  .OR. &
111               value_mrun(1:ivalue_mrun) == '0' )  THEN
112
113             zeile(1:i) = empty(1:i)
114             zeile = ADJUSTL( zeile )
115             i = INDEX( zeile, ' ' )
116             value = zeile(1:i-1)
117             ivalue = i - 1
118
119             zeile(1:i) = empty(1:i)
120             zeile = ADJUSTL( zeile )
121             i = INDEX( zeile, ' ' )
122
123             IF ( i /= 1 )  THEN
124                for_host = zeile(1:i-1)
125                ifor_host = i - 1
126
127                zeile(1:i) = empty(1:i)
128                zeile = ADJUSTL( zeile )
129                i = INDEX( zeile, ' ' )
130
131                IF ( i /= 1 )  THEN
132                   for_cond1 = zeile(1:i-1)
133                   ifor_cond1 = i - 1
134
135                   zeile(1:i) = empty(1:i)
136                   zeile = ADJUSTL( zeile )
137                   i = INDEX( zeile, ' ' )
138
139                   IF ( i /= 1 )  THEN
140                      for_cond2 = zeile(1:i-1)
141                      ifor_cond2 = i - 1
142                   ELSE
143                      for_cond2 = ''
144                      ifor_cond2 = 0
145                   ENDIF
146                ELSE
147                   for_cond1 = ''
148                   ifor_cond1 = 0
149                   for_cond2 = ''
150                   ifor_cond2 = 0
151                ENDIF
152             ELSE
153                for_host = ' '
154                ifor_host = 1
155                for_cond1 = ''
156                ifor_cond1 = 0
157                for_cond2 = ''
158                ifor_cond2 = 0
159             ENDIF
160             IF ( do_trace(1:4) == 'true' )  THEN
161                PRINT*,'var="',var(1:ivar),'"'
162                PRINT*,'value="',value(1:ivalue),'"'
163                PRINT*,'for_host="',for_host(1:ifor_host),'"'
164                PRINT*,'for_cond1="',for_cond1(1:ifor_cond1),'"'
165                PRINT*,'for_cond2="',for_cond2(1:ifor_cond2),'"'
166             ENDIF
167!
168!--          Geltungsbereich pruefen und evtl. Variable ausgeben
169             IF ( for_host == ' '  .OR.  ( &
170                  for_host(1:ifor_host) == host(1:ihost)  .AND. &
171                  for_cond1(1:ifor_cond1) == cond1(1:icond1)  .AND. &
172                  for_cond2(1:ifor_cond2) == cond2(1:icond2) &
173                                         )  .OR. ( &
174                  INDEX( iolist, for_host(1:ifor_host) ) /= 0 &
175                                                 ) )  THEN
176
177!
178!--             Zuerst Doppelpunkte durch Blanks ersetzen (aber doppelt
179!--             auftretende Doppelpunkte durch einen Doppelpunkt)
180                i = 0
181                DO
182                   i = i + 1
183                   IF ( i > ivalue )  EXIT
184                   IF ( value(i:i) == ':' )  THEN
185                      IF ( value(i+1:i+1) == ':' )  THEN
186                         value = value(1:i) // value(i+2:ivalue)
187                         ivalue = ivalue - 1
188                      ELSE
189                         value(i:i) = ' '
190                      ENDIF
191                   ENDIF
192                ENDDO
193
194!
195!--             Variable ausgeben
196                WRITE (2,2200)  var(1:ivar), bs, value(1:ivalue), bs, &
197                                var(1:ivar)
198 2200           FORMAT ('eval ',A,'=',A,'"',A,A,'"'/'export ',A)
199
200                IF ( do_trace(1:4) == 'true' )  THEN
201                   WRITE (2,2201)  bs, var(1:ivar), value(1:ivalue)
202 2201              FORMAT ('printf "',A,'n*** ENVIRONMENT-VARIABLE ',A,' = ',A)
203                ENDIF
204
205             ENDIF
206
207!
208!--          Variable "host" muss gleich ausgewertet werden, da mit ihr ein
209!--          neuer Geltungsbereich festgelegt wird
210             IF ( var(1:ivar) == 'host' )  THEN
211
212                host  = value(1:ivalue)
213                ihost = ivalue
214
215!                IF ( host(1:ihost) /= localhost(1:ilocalhost) )  THEN
216!
217!                   SELECT CASE ( value(1:ivalue) )
218!
219!                      CASE ( 'cray','hpcs','t3d','t3eb','t3eh','unics','vpp' )
220!
221!                         dummy = 1
222!
223!                      CASE DEFAULT
224!
225!                         WRITE (2,2202)  bs, bs, value(1:ivalue), bs, bs
226! 2202                    FORMAT ('printf "',A,'n +++ Auf Zielrechner ',A,'"',A,A,'" ist kein NQS-System vorhanden"'/ &
227!                                 'printf "',A,'n     Programmlauf kann deshalb nicht gestartet werden"'/ &
228!                                 'locat=nqs; exit')
229!                         STOP
230!
231!                   END SELECT
232!
233!                ENDIF
234
235             ENDIF
236
237          ENDIF
238
239       ELSEIF ( zeile(1:3) == 'EC:' )  THEN
240!
241!--       Error-Kommandos
242          iec = iec + 1
243          IF ( iec < 10 )  THEN
244             WRITE (2,'(''err_command['',I1,'']="'',A,''"'')')  iec, &
245                                                                zeile(4:izeile)
246          ELSEIF ( iec < 100 )  THEN
247             WRITE (2,'(''err_command['',I2,'']="'',A,''"'')')  iec, &
248                                                                zeile(4:izeile)
249          ELSE
250             WRITE (2,'(''err_command['',I3,'']="'',A,''"'')')  iec, &
251                                                                zeile(4:izeile)
252          ENDIF
253
254       ELSEIF ( zeile(1:3) == 'IC:' )  THEN
255!
256!--       Input-Kommandos
257          iic = iic + 1
258          IF ( iic < 10 )  THEN
259             WRITE (2,'(''in_command['',I1,'']="'',A,''"'')')  iic, &
260                                                               zeile(4:izeile)
261          ELSEIF ( iic < 100 )  THEN
262             WRITE (2,'(''in_command['',I2,'']="'',A,''"'')')  iic, &
263                                                               zeile(4:izeile)
264          ELSE
265             WRITE (2,'(''in_command['',I3,'']="'',A,''"'')')  iic, &
266                                                               zeile(4:izeile)
267          ENDIF
268
269       ELSEIF ( zeile(1:3) == 'OC:' )  THEN
270!
271!--       Output-Kommandos
272          ioc = ioc + 1
273          IF ( ioc < 10 )  THEN
274             WRITE (2,'(''out_command['',I1,'']="'',A,''"'')')  ioc, &
275                                                                zeile(4:izeile)
276          ELSEIF ( ioc < 100 )  THEN
277             WRITE (2,'(''out_command['',I2,'']="'',A,''"'')')  ioc, &
278                                                                zeile(4:izeile)
279          ELSE
280             WRITE (2,'(''out_command['',I3,'']="'',A,''"'')')  ioc, &
281                                                                zeile(4:izeile)
282          ENDIF
283
284       ELSE
285!
286!--       Dateiverbindungen
287          idatver = idatver + 1
288!
289!--       Lokaler Name
290          i   = INDEX( zeile , ' ' )
291          s1  = zeile(1:i-1)
292          is1 = i-1
293!
294!--       Dateieigenschaften
295          zeile = ADJUSTL( zeile(i:izeile) )
296          i   = INDEX( zeile , ' ' )
297          s2  = zeile(1:i-1)
298          is2 = i-1
299!
300!--       Geltungsbereich
301          zeile = ADJUSTL( zeile(i:izeile) )
302          i   = INDEX( zeile , ' ' )
303          s3  = zeile(1:i-1)
304          is3 = i-1
305!
306!--       Pfadname
307          zeile = ADJUSTL( zeile(i:izeile) )
308          i   = INDEX( zeile , ' ' )
309          s4  = zeile(1:i-1)
310          is4 = i-1
311!
312!--       evtl. Extension
313          zeile = ADJUSTL( zeile(i:izeile) )
314          i = INDEX( zeile , ' ' )
315          IF ( i == 1 )  THEN
316             s5  = ' '
317             is5 = 1
318             s6  = ' '
319             is6 = 1
320          ELSE
321             s5  = zeile(1:i-1)
322             is5 = i-1
323!
324!--          evtl. 2. Extension
325             zeile = ADJUSTL( zeile(i:izeile) )
326             i = INDEX( zeile , ' ' )
327             IF ( i == 1 )  THEN
328                s6  = ' '
329                is6 = 1
330             ELSE
331                s6  = zeile(1:i-1)
332                is6 = i-1
333             ENDIF
334          ENDIF
335
336!
337!--       Dateieigenschaften aufspalten
338          i = INDEX( s2 , ':' )
339          IF ( i == 0 )  THEN
340             s2a  = s2
341             is2a = is2
342             s2b  = ''
343             is2b = 0
344             s2c  = ''
345             is2c = 0
346          ELSE
347             s2a  = s2(1:i-1)
348             is2a = i-1
349             s2   = s2(i+1:is2)
350
351             i = INDEX( s2 , ':' )
352             IF ( i == 0 )  THEN
353                s2b  = s2
354                is2b = LEN_TRIM( s2 )
355                s2c  = ''
356                is2c = 0
357             ELSE
358                s2b  = s2(1:i-1)
359                is2b = i-1
360                s2c  = s2(i+1:)
361                is2c = LEN_TRIM( s2c )
362             ENDIF
363          ENDIF
364!
365!--       Pruefung, ob Eingabedateiverbindung abgespeichert werden soll
366          IF ( s2a(1:is2a) == 'in'  .AND.  .NOT. (                     &
367               do_remote(1:4) == 'true'  .AND.                         &
368               ( s2b(1:is2b) == 'loc'  .OR.  s2b(1:is2b) == 'locopt' ) &
369                                                 ) )  THEN
370             found = .FALSE.
371             i = INDEX( s3 , ':' )
372             IF ( i == 0 )  THEN
373                s3cond  = s3
374                is3cond = LEN_TRIM( s3cond )
375             ELSE
376                s3cond  = s3(1:i-1)
377                is3cond = i-1
378                s3      = s3(i+1:)
379             ENDIF
380
381             DO WHILE ( s3cond(1:1) /= ' ' )
382
383                IF ( INDEX( input_list(1:iinput_list) , s3cond(1:is3cond) ) /= 0 &
384                     .OR.  s3cond(1:is3cond) == '-' )  THEN
385                   found = .TRUE.
386                ENDIF
387
388                IF ( s3(1:1) == ' ' )  THEN
389                   s3cond = ' '
390                ELSE
391                   i = INDEX( s3 , ':' )
392                   IF ( i == 0 )  THEN
393                      s3cond  = s3
394                      is3cond = LEN_TRIM( s3cond )
395                      s3      = ' '
396                   ELSE
397                      s3cond  = s3(1:i-1)
398                      is3cond = i-1
399                      s3      = s3(i+1:)
400                   ENDIF
401                ENDIF
402
403             ENDDO
404
405!
406!--          Wenn Geltungsbereich erfuellt, dann Dateiverbindung abspeichern
407             IF ( found )  THEN
408
409                iin = iin + 1
410                IF ( iin < 10 )  THEN
411                   WRITE (2,2000)  iin, s1(1:is1), iin, s2b(1:is2b), &
412                                   iin, s2c(1:is2c), &
413                                   iin, s3(1:is3), iin, s4(1:is4), &
414                                   iin, s5(1:is5), iin, s6(1:is6)
4152000               FORMAT ('localin[',I1,']="',A,'"; transin[',I1,']="',A, &
416                           '"; actionin[',I1,']="',A, &
417                           '"; typein[',I1,']="',A,'"'/'pathin[',I1,']="',A, &
418                           '"; endin[',I1,']="',A,'"; extin[',I1,']="',A,'"')
419                ELSEIF ( iin < 100 )  THEN
420                   WRITE (2,2001)  iin, s1(1:is1), iin, s2b(1:is2b), &
421                                   iin, s2c(1:is2c), &
422                                   iin, s3(1:is3), iin, s4(1:is4), &
423                                   iin, s5(1:is5), iin, s6(1:is6)
4242001               FORMAT ('localin[',I2,']="',A,'"; transin[',I2,']="',A, &
425                           '"; actionin[',I2,']="',A, &
426                           '"; typein[',I2,']="',A,'"'/'pathin[',I2,']="',A, &
427                           '"; endin[',I2,']="',A,'"; extin[',I2,']="',A,'"')
428                ELSE
429                   WRITE (2,2002)  iin, s1(1:is1), iin, s2b(1:is2b), &
430                                   iin, s2c(1:is2c), &
431                                   iin, s3(1:is3), iin, s4(1:is4), &
432                                   iin, s5(1:is5), iin, s6(1:is6)
4332002               FORMAT ('localin[',I3,']="',A,'"; transin[',I3,']="',A, &
434                           '"; actionin[',I3,']="',A, &
435                           '"; typein[',I3,']="',A,'"'/'pathin[',I3,']="',A, &
436                           '"; endin[',I3,']="',A,'"; extin[',I3,']="',A,'"')
437                ENDIF
438             ENDIF
439
440          ELSEIF ( s2a(1:is2a) == 'out'  .AND.  .NOT. ( &
441                   do_remote(1:4) == 'true'  .AND.  s2b(1:is2b) == 'loc' &
442                                                      ) )  THEN
443!
444!--          Pruefung, ob Ausgabedateiverbindung abgespeichert werden soll
445             found = .FALSE.
446             i = INDEX( s3 , ':' )
447             IF ( i == 0 )  THEN
448                s3cond  = s3
449                is3cond = LEN_TRIM( s3cond )
450             ELSE
451                s3cond  = s3(1:i-1)
452                is3cond = i-1
453                s3      = s3(i+1:)
454             ENDIF
455
456             DO WHILE ( s3cond(1:1) /= ' ' )
457
458                IF ( INDEX( output_list(1:ioutput_list) , s3cond(1:is3cond) ) /= 0 &
459                     .OR.  s3cond(1:is3cond) == '-' )  THEN
460                   found = .TRUE.
461                ENDIF
462
463                IF ( s3(1:1) == ' ' )  THEN
464                   s3cond = ' '
465                ELSE
466                   i = INDEX( s3 , ':' )
467                   IF ( i == 0 )  THEN
468                      s3cond  = s3
469                      is3cond = LEN_TRIM( s3cond )
470                      s3      = ' '
471                   ELSE
472                      s3cond  = s3(1:i-1)
473                      is3cond = i-1
474                      s3      = s3(i+1:)
475                   ENDIF
476                ENDIF
477
478             ENDDO
479!
480!--          Wenn Geltungsbereich erfuellt, dann Dateiverbindung abspeichern
481             IF ( found )  THEN
482
483                iout = iout + 1
484                IF ( iout < 10 )  THEN
485                   WRITE (2,2003)  iout, s1(1:is1), iout, s2c(1:is2c), &
486                                   iout, s3(1:is3), iout, s4(1:is4), &
487                                   iout, s5(1:is5), iout, s6(1:is6)
488 2003              FORMAT ('localout[',I1,']="',A,'"; actionout[',I1,']="',A, &
489                           '"; typeout[',I1,']="',A,'"'/'pathout[',I1,']="',A, &
490                           '"; endout[',I1,']="',A,'"; extout[',I1,']="',A,'"')
491                ELSEIF ( iin < 100 )  THEN
492                      WRITE (2,2004)  iout, s1(1:is1), iout, s2c(1:is2c), &
493                                      iout, s3(1:is3), iout, s4(1:is4), &
494                                      iout, s5(1:is5), iout, s6(1:is6)
495 2004              FORMAT ('localout[',I2,']="',A,'"; actionout[',I2,']="',A, &
496                           '"; typeout[',I2,']="',A,'"'/'pathout[',I2,']="',A, &
497                           '"; endout[',I2,']="',A,'"; extout[',I2,']="',A,'"')
498                ELSE
499                      WRITE (2,2005)  iout, s1(1:is1), iout, s2c(1:is2c), &
500                                      iout, s3(1:is3), iout, s4(1:is4), &
501                                      iout, s5(1:is5), iout, s6(1:is6)
502 2005              FORMAT ('localout[',I3,']="',A,'"; actionout[',I3,']="',A, &
503                           '"; typeout[',I3,']="',A,'"'/'pathout[',I3,']="',A, &
504                           '"; endout[',I3,']="',A,'"; extout[',I3,']="',A,'"')
505                ENDIF
506             ENDIF
507
508          ELSEIF ( s2a(1:is2a) /= 'in'  .AND.  s2a(1:is2a) /= 'out' )  THEN
509!
510!--          Kein gueltiger Wert fuer I/O-Feld
511             WRITE (2,2010)  bs, bs, config_file(1:il), bs, bs, s2a(1:is2a), &
512                             bs, bs, bs, bs, bs, bs, bs
513 2010        FORMAT ('printf "',A,'n',A,'n +++ I/O-field in configuration ', &
514                     'file ',A, ' has the illegal"'/                         &
515                     'printf "',A,'n     value ',A,'"',A,A,'". Only ',       &
516                     A,'"in',A,'" or ',A,'"out',A,'" are allowed!"'          &
517                    )
518             WRITE (2,'(''locat=connect; exit'')')
519             STOP
520          ENDIF
521         
522       ENDIF
523
524       READ( 1, '(A)', IOSTAT=ios )  zeile
525
526    ENDDO
527
528!
529!-- Ausgabe der Anzahl von gefundenen Zeilen
530    IF ( iec > 0 )  WRITE (2,'(''(( iec = '',I3,'' ))'')')  iec
531    IF ( iic > 0 )  WRITE (2,'(''(( iic = '',I3,'' ))'')')  iic
532    IF ( ioc > 0 )  WRITE (2,'(''(( ioc = '',I3,'' ))'')')  ioc
533    IF ( iin > 0 )  WRITE (2,'(''(( iin = '',I3,'' ))'')')  iin
534    IF ( iout > 0 )  WRITE (2,'(''(( iout = '',I3,'' ))'')')  iout
535
536    IF ( do_trace(1:4) == 'true' )  THEN
537       PRINT*,' '
538       PRINT*,'*** Inhalt von: ',config_file(1:il)
539       PRINT*,icomment,' Kommentarzeilen'
540       PRINT*,ienvvar,' Environment-Variablen-Vereinbarungen'
541       PRINT*,iec,' Error-Kommandos'
542       PRINT*,iic,' Input-Kommandos'
543       PRINT*,ioc,' Output-Kommandos'
544       PRINT*,idatver,' Dateiverbindungs-Anweisungen'
545       PRINT*,'Davon interpretiert:'
546       PRINT*,iin,' Eingabedateien'
547       PRINT*,iout,' Ausgabedateien'
548    ENDIF
549
550 END PROGRAM interpret_config
551
552
553
554 SUBROUTINE local_getenv( var, ivar, value, ivalue )
555
556    CHARACTER (LEN=*) ::  var, value
557    INTEGER           ::  ivalue, ivar
558
559    CALL GETENV( var(1:ivar), value )
560    ivalue = LEN_TRIM( value )
561
562 END SUBROUTINE local_getenv   
Note: See TracBrowser for help on using the repository browser.