CDIO.mesa
Copyright © 1983, 1985 by Xerox Corporation. All rights reserved.
by Christian Jacobi, August 24, 1983 3:10 pm
last edited by Christian Jacobi, April 11, 1985 2:39:27 pm PST
DIRECTORY
CD, Rope, TokenIO;
CDIO: CEDAR DEFINITIONS
IMPORTS TokenIO =
BEGIN
-- IO based on TokenIO
-- High level procedures ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ReadDesign: PROC [from: REFNIL, check: PROC [CD.Design] RETURNS [BOOL] ← NIL] RETURNS [CD.Design];
--from is either a IO.STREAM, a Rope.ROPE, or NIL
--check: (called if non NIL), is called after technology and design-name is initialized
--  read proceeds only if check returns TRUE
--returns NIL if design not read in successfully
--viewer is not opened
WriteDesign: PROC [design: CD.Design, to: REFNIL, quiet: BOOLFALSE, emergency: BOOL FALSE] RETURNS [done: BOOL];
--to is either a IO.STREAM, a Rope.ROPE, or NIL
--if emergency, some locks are ignored, interactive input is skipped; you better
--roll back after an emergency write is done
-- Working directories and filenames ~~~~~~~~~~~~~~~~~~~~~~~
SetWorkingDirectory: PROC [design: REF, wDir: Rope.ROPE];
--design: Design, Technology or global; does not overwrite value given by user profile
GetWorkingDirectory: PROC [design: REF←NIL] RETURNS [wDir: Rope.ROPE];
--design: Design, Technology or global
UseWorkingDirectory: PROC [design: REF←NIL] RETURNS [wDir: Rope.ROPE];
--set (and returns) working directory for the running process
--design: Design, Technology or global
MakeName: PROC [base: Rope.ROPE, ext: Rope.ROPENIL, wDir: Rope.ROPENIL, modifier: Rope.ROPENIL] RETURNS [Rope.ROPE];
--makes a filename: adds extension ext if base does not have an extension;
--adds working directory wDir if base is not a full path name
--adds modifier if not NIL
MakeShortName: PROC [design: CD.Design] RETURNS [name: Rope.ROPE];
--tries to guess a good base part of filename for the design
-- Object implementors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- The following routines serves for calls from implementations of
-- CD.InternalWriteProc's or CD.InternalReadProc';
-- they must not be called inside arbitrary computations where the appropriate
-- initializations and finalizations are not done.
DesignInReadOperation: PROC [] RETURNS [CD.Design] = INLINE {
RETURN [designInReadOperation]
};
designInReadOperation: PRIVATE READONLY CD.Design;
VersionKey: PROC [] RETURNS [INT] = INLINE {
-- returns version key of current read operation
RETURN [versionKey]
};
versionKey: PRIVATE READONLY INT;
ReadOrientation: PROC [] RETURNS [orientation: CD.Orientation];
WriteOrientation: PROC [orientation: CD.Orientation] = INLINE {
TokenIO.WriteInt[orientation];
};
ReadLayer: PROC [] RETURNS [CD.Layer];
WriteLayer: PROC [l: CD.Layer];
ReadObject: PROC [] RETURNS [CD.Object];
WriteObject: PROC [ob: CD.Object];
--all its children must have been written before
ReadInstance: PROC [] RETURNS [CD.Instance];
WriteInstance: PROC [ap: CD.Instance];
ReadInstanceList: PROC [] RETURNS [list: CD.InstanceList];
WriteInstanceList: PROC [list: CD.InstanceList];
ReadProperties: PROC [] RETURNS [props: CD.Properties];
WriteProperties: PROC [props: CD.Properties];
-- Rules for IO:
-- Any Object is either bracketed with a TokenIO.PushFlag and a PopFlag, or it is represented
-- by a single INT, which references another object
-- Any Property starts with $Property followed by information bracketed with a PushFlag
-- and a PopFlag
END.