<> <> <> <> <> DIRECTORY BasicTime USING [GMT, nullGMT], Commander USING [Handle], IO USING [STREAM], List USING [AList], RefTab USING [Ref], Rope USING [ROPE]; MakeDo: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; RopeList: TYPE = LIST OF ROPE; RefTable: TYPE = RefTab.Ref; PropList: TYPE = List.AList; Time: TYPE = BasicTime.GMT; notExistTime: Time = BasicTime.nullGMT; unknownTime: Time = LOOPHOLE[FIRST[LONG CARDINAL]]; <> NodeList: TYPE = LIST OF Node; Node: TYPE = REF NodeRep; NodeRep: TYPE; ActionList: TYPE = LIST OF Action; Action: TYPE = REF ActionRep; ActionRep: TYPE; Warning: SIGNAL [message: ROPE]; IsNode: PROC [REF ANY] RETURNS [BOOL]; NarrowToNode: PROC [REF ANY] RETURNS [Node]; IsAction: PROC [REF ANY] RETURNS [BOOL]; NarrowToAction: PROC [REF ANY] RETURNS [Action]; existsFSWatch: READONLY BOOL; <> Ensure: PROC [goals: RefTable, modifiabilitySpec: ModifiabilitySpec, supportFiles: RefTable, PerMissedSupportFile: PROC [Node], parent: Commander.Handle] RETURNS [okGoalCount, nonOKGoalCount, nSteps: NAT, failedSteps: ActionList, nonOKGoalList: NodeList]; <> <> ModifiabilitySpec: TYPE = RefTable; <> Modifiability: TYPE = {yes, guess, no, uninitialized}; Explain: PROC [ch: Commander.Handle, nodes: RefTable]; <> GetActions: PROC [goals: RefTable, modifiabilitySpec: ModifiabilitySpec, report: ReportSpec, neededLeaves, optionalLeaves, determiningLeaves, brokenGoals: RefTable _ NIL] RETURNS [actions: ActionList]; <> <> <> ReportSpec: TYPE = {none, toBeDone, all}; DestructivelyReverseActionList: PROC [ActionList] RETURNS [ActionList]; Verify: PROC [pkgList: LIST OF ROPE]; <> SuspectNodeChange: PROC [n: Node]; SuspectNodesChange: PROC [RefTable]; UncurrentNode: PROC [n: Node]; UncurrentNodes: PROC [RefTable]; UncurrentProducer: PROC [n: Node]; UncurrentProducers: PROC [RefTable]; ForAll: PROC [suspectChange, uncurrent: BOOL]; DestroyGraph: PROC; RetryToProduce: PROC [Node]; <> MakeRefTable: PROC RETURNS [table: RefTable]; AddToRefTable: PROC [ra: REF ANY, t: RefTable]; EnsureRefInTable: PROC [ra: REF ANY, t: RefTable]; DeleteFromRefTable: PROC [ra: REF ANY, t: RefTable] RETURNS [found: BOOL]; RefInTable: PROC [ra: REF ANY, t: RefTable] RETURNS [BOOL]; ScanRefTable: PROC [table: RefTable, EachNode: PROC [REF ANY] RETURNS [stop: BOOL _ FALSE]]; EnumerateNodes: PROC[table: RefTable, EachNode: PROC [Node]]; AnalyzeDFFile: PROC [dfName: ROPE, goals, supportFiles: RefTable, modifiable: ModifiabilitySpec, doToVerifyGoals, doToOtherOwns, doToImports: DoToFile]; DoToFile: TYPE = {ignore, makeGoal, makeModifiable, makeSupport}; FindNode: PROC [someName: ROPE, class: NodeClass] RETURNS [node: Node]; <> LookupNodeClass: PROC [className: ROPE] RETURNS [class: NodeClass]; <> ForkParms: TYPE ~ REF ForkParmsRep; ForkParmsRep: TYPE; ForkParmsFromStream: PROC [in: IO.STREAM] RETURNS [ForkParms]; GetForkParms: PROC RETURNS [ForkParms]; SetForkParms: PROC [ForkParms]; ForkParmsFromProfile: PROC RETURNS [ForkParms]; <> <> AddFinder: PROC [finder: Finder, end: End]; End: TYPE = {front, back}; Finder: TYPE = RECORD [name: ROPE, finderProc: FinderProc, finderData: REF ANY _ NIL]; FinderProc: TYPE = PROC [resultName: ROPE, finderData: REF ANY] RETURNS [found: BOOLEAN, sought: Node, makes, cmdFrom: NodeList, from: From, cmd: ROPE, class: ActionClass, foundData: REF ANY]; From: TYPE = RECORD [mustHave, optional: NodeList]; ActionClass: TYPE = REF ActionClassRep; ActionClassRep: TYPE = RECORD [ CheckConsistency: ConsistencyChecker, Rederive: RederiveProc, EnumHiddenDeps: HiddenDependencyEnumerator _ NIL, ClearCaches: ClearCachesProc _ NIL, classData: REF ANY _ NIL]; ConsistencyChecker: TYPE = PROC [a: Action, result: Node] RETURNS [consistent: BOOL, reason: ROPE]; <> RederiveProc: TYPE = PROC [a: Action] RETURNS [from: From, cmd: ROPE]; <> HiddenDependencyEnumerator: TYPE ~ PROC [a: Action, Consume: PROC [Node]]; ClearCachesProc: TYPE ~ PROC [ac: ActionClass]; <> GetNode: PROC [someName: ROPE, class: NodeClass, mayAdd: BOOL _ TRUE] RETURNS [node: Node]; <> <> NodeClass: TYPE = REF NodeClassRep; NodeClassRep: TYPE; IsNodeClass: PROC [REF ANY] RETURNS [BOOL]; NarrowToNodeClass: PROC [REF ANY] RETURNS [NodeClass]; DeclareNodeClass: PROC [ name: ROPE, CanonizeName: PROC [ROPE] RETURNS [ROPE], GetInfo: GetInfoProc ] RETURNS [nodeClass: NodeClass]; GetInfoProc: TYPE = PROC [n: Node] RETURNS [created: Time, length: INT]; fileClass: NodeClass; PublicPartsOfNode: PROC [n: Node] RETURNS [name: ROPE, class: NodeClass]; PublicPartsOfNodeClass: PROC [nc: NodeClass] RETURNS [name: ROPE, CanonizeName: PROC [ROPE] RETURNS [ROPE], GetInfo: GetInfoProc]; DescribeNode: PROC [n: Node] RETURNS [ROPE]; GetProp: PROC [n: Node, prop: REF ANY] RETURNS [val: REF ANY]; SetProp: PROC [n: Node, prop, val: REF ANY]; GetProducer: PROC [n: Node] RETURNS [producer: Action]; InnerGetInfo: GetInfoProc; InnerGetCreated: PROC [n: Node] RETURNS [t: Time]; InnerExists: PROC [n: Node, zeroLenExists: BOOL _ TRUE] RETURNS [exists: BOOL]; <<= {exists _ (created # notExistTime) AND (zeroLenExists OR length#0)}>> PublicPartsOfAction: PROC [a: Action] RETURNS [cmd: ROPE, foundData: REF ANY, class: ActionClass]; InnerEnumerateSources: PROC [a: Action, which: ActionDep, to: PROC [n: Node, which: ActionDep, optional: BOOL]]; <> ActionDep: TYPE = {cmd, data}; FmtTime: PROC [Time] RETURNS [ROPE]; <> GetCreated: PROC [n: Node] RETURNS [t: Time]; GetInfo: GetInfoProc; Exists: PROC [n: Node, zeroLenExists: BOOL _ TRUE] RETURNS [exists: BOOL]; <<= {exists _ (created # notExistTime) AND (zeroLenExists OR length#0)}>> EnumerateConsumers: PROC [n: Node, which: ActionDep, to: PROC [Action, ActionDep]]; EnumerateResults: PROC [a: Action, to: PROC [Node]]; EnumerateSources: PROC [a: Action, which: ActionDep, to: PROC [n: Node, which: ActionDep, optional: BOOL]]; END.