INTERFACE---------------------------------------------------------------------------PkgBase ; IMPORT TextList, TextTextTbl; IMPORT Rd, Pathname; IMPORT PkgError, FileInfo, MsgIF;
TYPE Kind = TEXT; (* the symbolic name of package kinds *) Name = TEXT; (* the names of packages *) Action = TEXT; (* symbolic names for actions associated with packages *) CmdSeq = TEXT; T <: Public; (* A PkgBase.T is a configuration object that contains information about kinds of packages and associated actions. There may be any number of package kinds, and for each package kind any number of mappings from symbolic action names to command sequences. A PkgBase.T object is always created empty and then initialized from a stream which must conform to the following syntax: | <stream> ::= <pkgtypedef>* | <pkgtypedef> ::= pkgkind <pkgkind> has <idpred> <pkgactiondef>* | <pkgkind> ::= <token> | <idpred> ::= <expr1> | | <expr1> and <idpred> | <expr1> ::= dir <token> | | file <token> | | match <token> | | hosttype <token> | | ostype <token> | | platform <token> | | notdir <token> | | notfile <token> | | nomatch <token> | <pkgactiondef> ::= action <actionname> <commands> | <actionname> ::= <token> | <commands> ::= <stringortoken> Every character after a `#' that is not contained in a string up to the end of line is considered to be a comment and discarded. Environment variables may be referenced with $NAME within commands, they are expanded at initialization time. *) Public = OBJECT METHODS (*-----------------------------------------------------------------------*) oldInit(hosttype, ostype : TEXT; fc : FileInfo.T := NIL; msgif : MsgIF.T := NIL) : T; (* Return an empty object. If `fc' is non-NIL, it will be used to speed up disk lookup operations. *** DEPRECATED *** This is an old constructor and will vanish in future versions. *) (*-----------------------------------------------------------------------*) init(env : TextTextTbl.T; fc : FileInfo.T := NIL; msgif : MsgIF.T := NIL) : T; (* Return an empty object. If `fc' is non-NIL, it will be used to speed up disk lookup operations. The table `env' will be used to lookup definitions of tpc-hosttype, tpc-ostype, and platform-suffix. *) (*-----------------------------------------------------------------------*) setCache(fc : FileInfo.T); (* Use the cache `fc' for all following disk lookup operations. *) (*-----------------------------------------------------------------------*) addDefs(rd : Rd.T) : BOOLEAN; (* Add definitions from stream `rd'. Return TRUE if no syntax errors were found, else FALSE. *) (*-----------------------------------------------------------------------*) kindDefined(k : Kind) : BOOLEAN; (* <=> There is a definition for `k'. *) (*-----------------------------------------------------------------------*) kindList() : TextList.T; (* Return the sorted list of all defined kinds. *) (*-----------------------------------------------------------------------*) getAction(k : Kind; a : Action) : CmdSeq; (* Return the command sequence for package kind `k' and action `a'. *) (*-----------------------------------------------------------------------*) isKind(p : Pathname.T; k : Kind) : BOOLEAN; (* <=> The package located at `p' is of kind `k' according to the known identification predicates. *) (*-----------------------------------------------------------------------*) kindFound(p : Pathname.T; VAR k : Kind) : BOOLEAN; (* This function procedure tries to identify a package at path `p' according to all known identification predicates. If `k' is not NIL, its value is treated as the `preferred package kind' and is tested first. *) (*-----------------------------------------------------------------------*) createEmptyPkg(p : Pathname.T; k : Kind) RAISES {PkgError.E}; (* Create an empty package of kind `k'; that is, all directories and files that are necessary to make it look like kind `k' at path `p'. *) (*-----------------------------------------------------------------------*) ensurePkgExists(p : Pathname.T; k : Kind) RAISES {PkgError.E}; (* Ensure that a package structure of kind `k', that is, all directories and files that are necessary to make it look like kind `k', exists at path `p'. *) END; END PkgBase.