casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Static Public Member Functions | Static Protected Member Functions | Static Private Member Functions | Static Private Attributes
casa::Aipsrc Class Reference

Class to read the casa general resource files. More...

#include <Aipsrc.h>

Inheritance diagram for casa::Aipsrc:
casa::AipsrcValue< T > casa::AipsrcValue_Bool< Bool > casa::AipsrcVector< T > casa::AipsrcVector_Bool< Bool > casa::AipsrcVector_String< String >

List of all members.

Static Public Member Functions

static Bool find (String &value, const String &keyword)
 
 

static Bool findNoHome (String &value, const String &keyword)
static Bool find (uInt &value, const String &keyword, Int Nname, const String tname[])
 These finds check a (possible) value of the keyword against a list of coded values provided, and return an index into the list (N if not found).
static Bool find (uInt &value, const String &keyword, const Vector< String > &tname)
static Bool find (String &value, const String &keyword, const String &deflt)
 This find usually saves you some lines of code, since you can supply the default you want to use when no such keyword is defined.
static Bool findNoHome (String &value, const String &keyword, const String &deflt)
static Bool find (uInt &value, const String &keyword, Int Nname, const String tname[], const String &deflt)
static Bool find (uInt &value, const String &keyword, const Vector< String > &tname, const String &deflt)
static Bool findDir (String &foundDir, const String &lastPart="", const Vector< String > &prepends=Vector< String >(), const Vector< String > &appends=Vector< String >(), Bool useStds=True)
 Sets foundDir to the first /firstPart/lastPart path that it finds present on the system, where /firstPart comes from, in order, this list: contents of prepends.
static uInt registerRC (const String &keyword, const String &deflt)
 Functions to register keywords for later use in get() and set().
static uInt registerRC (const String &keyword, Int Nname, const String tname[], const String &deflt)
static uInt registerRC (const String &keyword, const Vector< String > &tname, const String &deflt)
static const Stringget (uInt keyword)
 Gets are like find, but using registered integers rather than names.
static const uIntget (uInt &code, uInt keyword)
 get for code
static void set (uInt keyword, const String &deflt)
 Sets allow registered values to be set.
static void set (uInt keyword, Int Nname, const String tname[], const String &deflt)
static void set (uInt keyword, const Vector< String > &tname, const String &deflt)
static void save (uInt keyword)
 Save a registered keyword value to $HOME/.aipsrc
static void save (uInt keyword, const String tname[])
static void save (uInt keyword, const Vector< String > &tname)
static void setAipsPath (const String &path=String())
 Set an AIPSPATH that should be used in stead of a global AIPSPATH.
static const StringaipsRoot ()
 Returns the appropriate AIPS++ or system variable values.
static const StringaipsArch ()
static const StringaipsSite ()
static const StringaipsHost ()
static const StringaipsHome ()
 Returns: ~/aips++
static void reRead ()
 The reRead() function, will reinitialise the static maps and read the aipsrc files again.
static Double lastRead ()
static const Block< String > & values ()
 The following functions return the full lists of available data.
static const Block< String > & patterns ()
static void show (ostream &oStream)
 The following show() function, useful for debugging, outputs all keyword/value pairs found.
static void show ()
 Prints all info on cout.
static uInt genRestore (Vector< String > &namlst, Vector< String > &vallst, const String &fileList)
 The following set is a general set of functions.
static void genSave (Vector< String > &namlst, Vector< String > &vallst, const String &fnam)
 Save the names/values in file.
static void genSet (Vector< String > &namlst, Vector< String > &vallst, const String &nam, const String &val)
 Set (new or overwrite) keyword/value pair.
static Bool genUnSet (Vector< String > &namlst, Vector< String > &vallst, const String &nam)
 Remove a keyword from list (False if not in list)
static Bool genGet (String &val, Vector< String > &namlst, Vector< String > &vallst, const String &nam)
 Get the value of a keyword.

Static Protected Member Functions

static Bool find (String &value, const String &keyword, uInt start)
 
   

static uInt registerRC (const String &keyword, Block< String > &nlst)
 The registration function.
static void save (const String keyword, const String val)
 Actual saving.

Static Private Member Functions

static void parse (Bool force=False)
 Read in the aipsrc files, returning the number of lines found.
static void doParse (String &fileList)
static uInt genParse (Block< String > &keywordPattern, Block< String > &keywordValue, uInt &fileEnd, const String &fileList)
 The following parse function can be used for any list of files.
static Bool matchKeyword (uInt &where, const String &keyword, uInt start)
 Locate the right keyword in the static maps.
static const StringfillAips (const String &nam)
 Fill in root, arch, site, host and home, and return requested nam.

Static Private Attributes

static Mutex theirMutex
static volatile Bool doInit
 Indicate files read.
static Double lastParse
 Last time data was (re)read.
static Block< StringkeywordValue
 List of values belonging to keywords found.
static Block< StringkeywordPattern
 List of patterns deducted from names.
static uInt fileEnd
 The start of the non-home values.
static String extAipsPath
 The possibly set external AIPSPATH.
static String root
 AIPSROOT.
static String arch
 AIPSARCH.
static String site
 AIPSSITE.
static String host
 AIPSHOST.
static String home
 AIPSHOME.
static String uhome
 HOME.
static Bool filled
 Indicate above filled.
static Block< Stringstrlst
 String register list.
static Block< Stringnstrlst
static Block< uIntcodlst
static Block< Stringncodlst

Detailed Description

Class to read the casa general resource files.

Intended use:

Public interface

 <h3>Review Status</h3><dl><dt>Reviewed By:<dd>wyoung<dt>Date Reviewed:<dd>1996/11/25<dt>Test programs:<dd>tAipsrc</dl> 

Prerequisite

Etymology

A class for getting values from the casa resource files

Synopsis

The static Aipsrc class can get information from the casa resource files. It has the same functionality as getrc (c program used for aips++ installation scripts).
In addition it acts as a central clearing house between system and software by providing functionality to obtain aips++ system parameters (like AIPSPATH elements), and the possibility of storing system wide information provided by a class for reference by other classes.
The format of a line in a resource file is:

        # Line starting with an # in column 1 is a comment (as is an empty line)
        keyword:   value
        keyword:   value

The keyword (starting at first non-blank) consists in general of keyword fields separated by periods:

        printer.ps.page
        measures.precession.d_interval
        measures.nutation.d_interval

and, by preference, in lower case (but search is case sensitive) with an _ as word-parts separator.
The keyword and value are separated by a :. The value is the string from the first non-whitespace character after the separator to the end of the line. Interpretation of the string is in general the program's responsibility, but special find() calls (see below) exist to aid.
Any part of the keyword string can be replaced by a wildcard * to indicate all values with that structure (e.g. *.d_interval would indicate in the example above both the precession and the nutation d_interval.
A match between a keyword to be found and a keyword in the resource files will be the first match (taking wildcards into account) encountered in the search through the resource files. The resource files to be looked at can be defined in the environment variable CASARCFILES. If undefined, the resource files searched are (in the given order):

      ~/.casarc
      ~/.casa/rc
      ~/.aipsrc
      $AIPSROOT/.aipsrc
      $AIPSHOST/aipsrc
      $AIPSSITE/aipsrc
      $AIPSARCH/aipsrc

It is not an error for any of the aipsrc files to be absent or empty. However, it is an error if HOME has not been set: an exception will occur. AIPSPATH will in general be read from the global environment variables, but can, before any other Aipsrc related call, be set with the setAipsPath() call.
If AIPSPATH is not set in either way, it is set to the home directory.

The basic interaction with the class is with the static keyword match function

 Bool Aipsrc::find(String &result, const String &keyword)

A set of

 Bool AipsrcValue::find(Type &result, const String &keyword, ...)

are available to interpret the string value found. (see AipsrcValue ).
All the find functions have the ability to set a default if there is no match, while also unit conversion is possible.
The Bool return indicates if the keyword was found, and, in the case of the interpretative finds, if an 'important' format error was found (e.g. '+12a' will be accepted as a Double, with a result of '12', since the standard double conversion in >> will produce this result.)
Caution: The search keyword (unlike the file keyword) has no wildcards; The real name should, of course, be looked for;
To aid in other places, the following (static) methods are available to get the requested information (derived from HOME and AIPSPATH, computer system information and/or aipsrc keywords):

Other, numeric, system information can be found in AipsrcValue .

Given an AIPSPATH of

 /epp/aips++ sun4sol_gnu epping norma 

aipsSite will return

 /epp/aips++/sun4sol_gnu/epping 

.

The basic find above reacts with the aipsrc files available. If regular access is necessary (e.g. a lot of routines have to check independently a certain integration time limit), keywords can be registered to enable:


Tip: The registered value is never equal to zero, hence a zero value can be used to check if registration is done; Also, registering the same keyword twice is safe, and will produce the same value;
When saving a keyword/value pair in $HOME/.aipsrc, the old version is saved in $HOME/.aipsrc.old, before the keyword/value pair is prepended to the file. A limited number of edits of the same keyword is preserved only (default 5, changeable with the user.aipsrc.edit.keep keyword.

Example

     String printerPage;                // result of keyword find
     if(!Aipsrc::find(printerPage, "printer.ps.page")) {        // look for keyword match
       printerPage = "notSet";
     };

A more convenient way of accomplishing the same result is:

       Aipsrc::find(printerPage, "printer.ps.page", "notSet");

Here the final argument is the default to use if the keyword is not found at all.
If you often want to know, dynamically, the current 'printer.ps.page' value, you could do something like:

        static uInt pp = Aipsrc::registerRC("printer.ps.page", "noSet");
        String printerPage = Aipsrc::get(pp);
    // Processing, and maybe somewhere else:
        Aipsrc::set(pp, "nowSet");
    // ..\.
        printerPage = Aipsrc::get(pp);
    // and save it to the <tt>$HOME/.aipsrc</tt> list
        Aipsrc::save(pp);

Motivation

Programs need a way to interact with the aipsrc files.

Thrown Exceptions

Definition at line 218 of file Aipsrc.h.


Member Function Documentation

static const String& casa::Aipsrc::aipsArch ( ) [static]
static const String& casa::Aipsrc::aipsHome ( ) [static]

Returns: ~/aips++

static const String& casa::Aipsrc::aipsHost ( ) [static]
static const String& casa::Aipsrc::aipsRoot ( ) [static]

Returns the appropriate AIPS++ or system variable values.

static const String& casa::Aipsrc::aipsSite ( ) [static]
static void casa::Aipsrc::doParse ( String fileList) [static, private]
static const String& casa::Aipsrc::fillAips ( const String nam) [static, private]

Fill in root, arch, site, host and home, and return requested nam.

static Bool casa::Aipsrc::find ( String value,
const String keyword 
) [static]

 

Thrown Exceptions

  • AipsError if HOME environment variable not set

The find() functions will, given a keyword, return the value with a matched keyword found in the files. If no match found the function will be False. The findNoHome() emulates the -i switch of getrc by bypassing the ~/.aipsrc file.

static Bool casa::Aipsrc::find ( uInt value,
const String keyword,
Int  Nname,
const String  tname[] 
) [static]

These finds check a (possible) value of the keyword against a list of coded values provided, and return an index into the list (N if not found).

Matching is minimax, case insensitive. Always better to use the one with default. return is False if no keyword or no match.

static Bool casa::Aipsrc::find ( uInt value,
const String keyword,
const Vector< String > &  tname 
) [static]
static Bool casa::Aipsrc::find ( String value,
const String keyword,
const String deflt 
) [static]

This find usually saves you some lines of code, since you can supply the default you want to use when no such keyword is defined.

If the return value is False, the keyword was not found and the default was used.

static Bool casa::Aipsrc::find ( uInt value,
const String keyword,
Int  Nname,
const String  tname[],
const String deflt 
) [static]
static Bool casa::Aipsrc::find ( uInt value,
const String keyword,
const Vector< String > &  tname,
const String deflt 
) [static]
static Bool casa::Aipsrc::find ( String value,
const String keyword,
uInt  start 
) [static, protected]

   

Actual find function

static Bool casa::Aipsrc::findDir ( String foundDir,
const String lastPart = "",
const Vector< String > &  prepends = VectorString >(),
const Vector< String > &  appends = VectorString >(),
Bool  useStds = True 
) [static]

Sets foundDir to the first /firstPart/lastPart path that it finds present on the system, where /firstPart comes from, in order, this list: contents of prepends.

static Bool casa::Aipsrc::findNoHome ( String value,
const String keyword 
) [static]
static Bool casa::Aipsrc::findNoHome ( String value,
const String keyword,
const String deflt 
) [static]
static Bool casa::Aipsrc::genGet ( String val,
Vector< String > &  namlst,
Vector< String > &  vallst,
const String nam 
) [static]

Get the value of a keyword.

static uInt casa::Aipsrc::genParse ( Block< String > &  keywordPattern,
Block< String > &  keywordValue,
uInt fileEnd,
const String fileList 
) [static, private]

The following parse function can be used for any list of files.

It will return the list of Patterns and values found, and the last keyword number of first file in list.

static uInt casa::Aipsrc::genRestore ( Vector< String > &  namlst,
Vector< String > &  vallst,
const String fileList 
) [static]

The following set is a general set of functions.

Read aipsrc type files (without wildcards), and return the unique names and values in the Vector arguments. The return value is number of names.

static void casa::Aipsrc::genSave ( Vector< String > &  namlst,
Vector< String > &  vallst,
const String fnam 
) [static]

Save the names/values in file.

static void casa::Aipsrc::genSet ( Vector< String > &  namlst,
Vector< String > &  vallst,
const String nam,
const String val 
) [static]

Set (new or overwrite) keyword/value pair.

static Bool casa::Aipsrc::genUnSet ( Vector< String > &  namlst,
Vector< String > &  vallst,
const String nam 
) [static]

Remove a keyword from list (False if not in list)

static const String& casa::Aipsrc::get ( uInt  keyword) [static]

Gets are like find, but using registered integers rather than names.

Reimplemented in casa::AipsrcValue_Bool< Bool >, casa::AipsrcVector_Bool< Bool >, casa::AipsrcValue< T >, casa::AipsrcVector_String< String >, and casa::AipsrcVector< T >.

static const uInt& casa::Aipsrc::get ( uInt code,
uInt  keyword 
) [static]

get for code

static Double casa::Aipsrc::lastRead ( ) [static]
static Bool casa::Aipsrc::matchKeyword ( uInt where,
const String keyword,
uInt  start 
) [static, private]

Locate the right keyword in the static maps.

static void casa::Aipsrc::parse ( Bool  force = False) [static, private]

Read in the aipsrc files, returning the number of lines found.

static const Block<String>& casa::Aipsrc::patterns ( ) [static]
static uInt casa::Aipsrc::registerRC ( const String keyword,
const String deflt 
) [static]

Functions to register keywords for later use in get() and set().

The returned value is the index for get() and set().

static uInt casa::Aipsrc::registerRC ( const String keyword,
Int  Nname,
const String  tname[],
const String deflt 
) [static]
static uInt casa::Aipsrc::registerRC ( const String keyword,
const Vector< String > &  tname,
const String deflt 
) [static]
static uInt casa::Aipsrc::registerRC ( const String keyword,
Block< String > &  nlst 
) [static, protected]

The registration function.

static void casa::Aipsrc::reRead ( ) [static]

The reRead() function, will reinitialise the static maps and read the aipsrc files again.

It could be useful in some interactive or multi-processor circumstances. lastRead() returns the time last reRead.

static void casa::Aipsrc::save ( uInt  keyword) [static]
static void casa::Aipsrc::save ( uInt  keyword,
const String  tname[] 
) [static]
static void casa::Aipsrc::save ( uInt  keyword,
const Vector< String > &  tname 
) [static]
static void casa::Aipsrc::save ( const String  keyword,
const String  val 
) [static, protected]

Actual saving.

static void casa::Aipsrc::set ( uInt  keyword,
const String deflt 
) [static]

Sets allow registered values to be set.

static void casa::Aipsrc::set ( uInt  keyword,
Int  Nname,
const String  tname[],
const String deflt 
) [static]
static void casa::Aipsrc::set ( uInt  keyword,
const Vector< String > &  tname,
const String deflt 
) [static]
static void casa::Aipsrc::setAipsPath ( const String path = String()) [static]

Set an AIPSPATH that should be used in stead of a global AIPSPATH.

This call should be made before any Aipsrc related call. The AIPSPATH will have up to 4 fields (which can all be empty) giving the root, host, site and arch directory that will be searched for possible [.]aipsrc files.

static void casa::Aipsrc::show ( ostream &  oStream) [static]

The following show() function, useful for debugging, outputs all keyword/value pairs found.

static void casa::Aipsrc::show ( ) [static]

Prints all info on cout.

static const Block<String>& casa::Aipsrc::values ( ) [static]

The following functions return the full lists of available data.

They could be useful for debugging purposes.


Member Data Documentation

String casa::Aipsrc::arch [static, private]

AIPSARCH.

Definition at line 395 of file Aipsrc.h.

Block<uInt> casa::Aipsrc::codlst [static, private]

Definition at line 410 of file Aipsrc.h.

volatile Bool casa::Aipsrc::doInit [static, private]

Indicate files read.

Definition at line 381 of file Aipsrc.h.

String casa::Aipsrc::extAipsPath [static, private]

The possibly set external AIPSPATH.

Definition at line 391 of file Aipsrc.h.

uInt casa::Aipsrc::fileEnd [static, private]

The start of the non-home values.

Definition at line 389 of file Aipsrc.h.

Bool casa::Aipsrc::filled [static, private]

Indicate above filled.

Definition at line 405 of file Aipsrc.h.

String casa::Aipsrc::home [static, private]

AIPSHOME.

Definition at line 401 of file Aipsrc.h.

String casa::Aipsrc::host [static, private]

AIPSHOST.

Definition at line 399 of file Aipsrc.h.

List of patterns deducted from names.

Definition at line 387 of file Aipsrc.h.

List of values belonging to keywords found.

Definition at line 385 of file Aipsrc.h.

Double casa::Aipsrc::lastParse [static, private]

Last time data was (re)read.

Definition at line 383 of file Aipsrc.h.

Block<String> casa::Aipsrc::ncodlst [static, private]

Definition at line 411 of file Aipsrc.h.

Block<String> casa::Aipsrc::nstrlst [static, private]

Definition at line 409 of file Aipsrc.h.

String casa::Aipsrc::root [static, private]

AIPSROOT.

Definition at line 393 of file Aipsrc.h.

String casa::Aipsrc::site [static, private]

AIPSSITE.

Definition at line 397 of file Aipsrc.h.

Block<String> casa::Aipsrc::strlst [static, private]

String register list.

Definition at line 408 of file Aipsrc.h.

Mutex casa::Aipsrc::theirMutex [static, private]
String casa::Aipsrc::uhome [static, private]

HOME.

Definition at line 403 of file Aipsrc.h.


The documentation for this class was generated from the following file: