DEFINITION MODULE SysIODivert;
(*******************************************************************
Module SysIODivert (ISIS_Version_1.2)
Copyright (c) 1998-2006 by Andreas Fischlin and ETH Zurich.
Purpose Divert (redirect) subsystem inputs or outputs.
Remarks A diverted input is read from a file.
A diverted output is written to a file.
This module belongs to ISIS
Integrative Systems Implementation Software.
Programming
o Design
Andreas Fischlin 20/05/1998
o Implementation
Andreas Fischlin 20/05/1998
ETH Zurich
Systems Ecology
CHN E 35.1
Universitaetstrasse 16
8092 Zurich
SWITZERLAND
URLs:
<mailto:RAMSES@env.ethz.ch>
<http://www.sysecol.ethz.ch>
<http://www.sysecol.ethz.ch/SimSoftware/RAMSES>
Last revision of definition: 29/05/1998 AF
*******************************************************************)
TYPE
Redirection;
(* Error constants: sysIODivertMsgOffset = DMLanguage.userBase + 420 .. 430-1 *)
VAR
noRedirection: Redirection; (* read only *)
(*
Redirections can coexist with data linking among subsystems as
provided by module SysModBase. In case of an output redirection, the
outpus are simply also written in parallel to the output file, in case
of inputs the data received via links are overwritten with those which
could be read from the currently open input file.
Naming conventions are the same as those used for data linking, i.e.
unqualified identifiers of outputs must match those of inputs in order
to be successful, except for redirections which are established for
individual pairs using DivertInV or DivertOutV.
Files are specified using a file name which is optionally
preceeded by a path. Path construction follows the rules of the
particular computer platform on which this module is executed.
No redirection file is actually opened or created in case there
are currently no output or input variables actually declared.
The involved file is opened the moment a redirection is
successfully declared. You may also pass the empty string as
actual argument for pfn. In this case a file dialog is offered,
which lets you choose a file interactively (see also routine
GetDivertFile). Similarily a file opening dialog is offered if
the pfn does not denote correctly an existing file or if the
file is not fully accessible according to the needs of the
redirection (e.g. already opened for writing by another
application).
*)
PROCEDURE DivertInputsForSubSys(VAR r: Redirection; subSystemDescr,pfn: ARRAY OF CHAR);
PROCEDURE DivertOutputsForSubSys(VAR r: Redirection; subSystemDescr,pfn: ARRAY OF CHAR);
PROCEDURE DivertInputsForModel(VAR r: Redirection; model,pfn: ARRAY OF CHAR);
PROCEDURE DivertOutputsForModel(VAR r: Redirection; model,pfn: ARRAY OF CHAR);
PROCEDURE DivertInV(VAR r: Redirection; outVarQualIdent,inVarQualIdent,pfn: ARRAY OF CHAR);
(*
Searches in file 'pfn' a variable with identifier outVarQualIdent
and diverts the values found in the file to the input variable
with the name inVarQualIdent. inVarQualIdent must be a currently
declared model object.
*)
PROCEDURE DivertOutV(VAR r: Redirection; outVarQualIdent,inVarQualIdent,pfn: ARRAY OF CHAR);
(*
Diverts the value of output variable outVarQualIdent to the output
file 'pfn' under the name of the potential input variable with the
identifier inVarQualIdent. outVarQualIdent must be a currently
declared model object.
*)
PROCEDURE RedirectionActive(r: Redirection): BOOLEAN;
PROCEDURE GetDivertFile(r: Redirection; VAR path,fn: ARRAY OF CHAR);
(*
Returns the path and name of the file involved in the
redirection r. Note, since it is also possible to divert by
passing as actual argument the empty string for parameter
pfn (see routines DivertInputsForSubSys,
DivertOutputsForSubSys, ... till DivertOutV) this routine
returns to the program which file the user has actually
chosen. Returns empty strings only in case the redirection
is not active.
*)
PROCEDURE GetDivertedMObjs (VAR inVQualIds, outVQualIds: ARRAY OF CHAR;
VAR noInVs,noOutVs: INTEGER);
(*
Return the identifiers and numbers of all model objects involved
in a redirection, listed separately for inputs and outputs. The
identifiers are separated by the delimiter "|" (Hint: See routine
ExtractSubString from module DMStrings to extract individual
identifiers).
*)
PROCEDURE StopRedirection(VAR r: Redirection);
PROCEDURE StopAllRedirections;
(*
Stopping a redirection does also close any possibly involved file.
*)
END SysIODivert.