ENVSTR() is a Fortran wrapper calling the C envstrc()
SUBROUTINE ENVSTR( LNAME, DESCRIP, DEFAULT, EVALUE, STATUS ) CHARACTER*(*) LNAME ! logical name to evaluate CHARACTER*(*) DESCRIP ! description of the value CHARACTER*(*) DEFAULT ! default value (if LNAME not set, or empty) CHARACTER*(*) EVALUE ! result INTEGER STATUS ! for error/default-case detection
void envstrc( const char * lname , /* logical name */ const char * description , /* description */ const char * defaultval , /* default value */ char * evalue , /* result buffer */ int * status , /* error/default-case */ int elen /* length of the "evalue" buffer */ )
For Fortran-90 declarations and interface checking:
USE M3UTILIO
NOTE: envstrc() null-terminates the returned value iff its length is at most elen. Otherwise, it padds from the end of the value up to elen with ASCII NULLs (i.e., its behavior is the same as strncpy() ).
See also
ENVDBLE,
ENVINT,
ENVREAL,
ENVYN,
NAMEVAL, and
SETENVVAR.
#include "iodecl3.h"
if called from C.
LNAME, DESCRIP, and EQNAME have length at most 256. (NOTE: POSIX says that environment variables may have lengths this long.)
... setenv FOO /work/qux/data ... /mydirectory/myprogram ...
... CHARACTER*256 FOO INTEGER STATUS ... CALL ENVSTR( 'FOO', & 'Some control parameter or other, called FOO', & '/tmp/bar/whatever' , & FOO , & STATUS ) IF ( STATUS .GT. 0 ) THEN ... bad value for FOO; do something. END IF ...
#include "iodecl3.h" ... int status ; char value[ 257 ] ; ... envstrc( "FOO", "Here is where I put a description", "some_default", value, & status ) ) if ( status > 0 ) { ... stuff for bad (non-string?) value of environment variable FOO } else if ( status == -1 ) { ... stuff for empty-but-defined FOO } else if ( status == -2 ) { ... stuff for not-defined-at-all FOO } ... use value...
To: Models-3/EDSS I/O API: The Help Pages