DIRECTORY Commander USING [Handle], Icons USING [IconFlavor], IO USING [Value], MakeDo, SymTab; MakeDoPrivate: CEDAR DEFINITIONS = BEGIN OPEN MakeDo; NodeList: TYPE = LIST OF Node; Node: TYPE = REF NodeRep; NodeRep: TYPE = RECORD [ given, name: ROPE, class: NodeClass, memberships: RefTable--of NodeSet--, producer: Edge _ NIL, props: PropList _ NIL, to: ARRAY ActionDep OF EdgeRingHead _ ALL[emptyHead], modifiability: Modifiability _ uninitialized, created: Time _ unknownTime, length: INT _ FIRST[INT], current: ExpensiveBool _ notComputed, broken: BOOL _ FALSE, consistencyAsked: BOOL _ FALSE, consistent: BOOL _ FALSE, consistencyReason: ROPE _ NIL, someoneWhoCares: Job _ NIL, state: NodeState _ inactive, waitCount: INTEGER _ 0, waitingOnCurrent: NodeList _ NIL ]; NodeState: TYPE = {inactive, ready, working, waiting}; Action: TYPE = REF ActionRep; ActionRep: TYPE = RECORD [ class: ActionClass, foundData: REF ANY, cmd: ROPE, makes: EdgeRingHead _ emptyHead, from: ARRAY ActionDep OF EdgeRingHead _ ALL[emptyHead], waitingForPermission: NodeList _ NIL, permissionGranted: BOOL _ FALSE, derivedFromCurrentDeterminers: BOOL _ TRUE, queuedFailsInvalidation: BOOL _ FALSE, fails: ExpensiveBool _ notComputed, timesTried: INTEGER _ 0, reasonWhyLastDone: ROPE _ NIL ]; ExpensiveBool: TYPE = {notComputed, false, true} _ notComputed; Expensify: ARRAY BOOL OF ExpensiveBool = [false, true]; EdgeRingHead: TYPE = RECORD [first, last: Edge]; emptyHead: EdgeRingHead = [NIL, NIL]; Edge: TYPE = REF EdgeRep; EdgeRep: TYPE = RECORD [ optional: BOOL, n: Node, a: Action, nNext, nPrev: Edge, aNext, aPrev: Edge ]; Job: TYPE = REF JobRep; JobRep: TYPE = RECORD [ wDir: ROPE, goals, processes: RefTable, otherModifiable: ModifiabilitySpec, nSteps: NAT _ 0, failedSteps: ActionList _ NIL ]; NodeSet: TYPE = REF NodeSetPrivate; NodeSetPrivate: TYPE = RECORD [ nodes: RefTable, currents, nonCurrents: INT _ 0, broken, ok: INT _ 0 ]; NodeClass: TYPE = REF NodeClassRep; NodeClassRep: TYPE = RECORD [ name: ROPE, CanonizeName: PROC [ROPE] RETURNS [ROPE], GetInfo: GetInfoProc ]; debugging: BOOL; leaf: Action; Log: PROC [fmt: ROPE, v1, v2, v3, v4, v5: IO.Value _ [null[]]]; Confirm: PROC [action: ROPE]; GetCommanderHandle: PROC RETURNS [Commander.Handle]; MDInstall: PROC [dir, packageName: ROPE] RETURNS [foundFile, failed: BOOL]; EnumerateFinders: PROC [to: PROC [Finder] RETURNS [stop: BOOL]]; IncrementStepCount: PROC [Job]; AddFailedCmd: PROC [Job, Action]; EnglishList: PROC [NodeList] RETURNS [el: ROPE, ec: CARDINAL]; NodeInRefTable: PROC [n: Node, t: RefTable] RETURNS [BOOL]; IsRootGoal: PROC [job: Job, n: Node] RETURNS [BOOL]; IsLeaf: PROC [job: Job, n: Node] RETURNS [BOOL]; StartTime: PROC [n: Node]; EnumerateAndDestroy: PROC [to: PROC [Node], andDestroy--table when done--: BOOL]; IconSeq: TYPE = REF IconSeqPrivate; IconSeqPrivate: TYPE = RECORD [icons: SEQUENCE length: NAT OF Icons.IconFlavor]; icons: IconSeq; EmptyCmdUtils: PROC; END. ’MakeDoPrivate.Mesa Last tweaked by Mike Spreitzer on October 5, 1992 12:03 pm PDT Carl Hauser, April 11, 1985 3:34:27 pm PST Eduardo Pelegri-Llopart March 17, 1989 8:32:14 am PST Definitions: iba = i is a determiner of a i_a = i is an input of a iga = i is a mandatory input of a Current[n] = if Leaf[n] then true else let a = n.producer in CorrectlyDerived[a] & (A i_a: Current[i]) & (a.Consistent[{i:i_a}, n] V Eiga: ~i.Exists[] V Ei_a: Broken[i] V a.Fails[{i:i_a}]) CorrectlyDerived[a] = A iba: Current[i] & DerivedFrom[a, i] V Eiba: Broken[i] Leaf[n] = CertainlyNotModifiable[n] V n has no producer Current[n] g Broken[n] = CertainlyModifiable[n] & ~n.Exists[] V ~CertainlyNotModifiable[n] & Ea_n: ( Ei_a: Broken[i] V Eiba: Broken[i] V CertainlyModifiable[n] & Eiga: ~i.Exists[] V E i_a: (i.Exists & ~a.Consistent[i, n]) & (E iga: ~i.Exists[] V a.Fails[{i:i_a}]) ) Basic Monitor Invariant: (eb: ExpensiveBool S b: BOOL W eb=notComputed g b=eb) ~RawLeaf[node] g node.consistencyAsked g node.consistent = node.producer.Consistent[{i:i_a}, node] node.current S Current[n] node.created dates contents used herein node.current=true g node.broken = Broken[n] NodeSets agree with nodes act.correctlyDerived g CorrectlyDerived[a] act.fails=notComputed g act.timesTried=0 if act.permissionGranted & act.queuedFailsInvalidation then a.Fails[..] unknown else act.fails S a.Fails[..] currents counts nodes with current=true; nonCurrent counts others. Only current nodes are counted broken or ok. In Basic monitor: In node table monitor: Clears data cached by the command utilities. Eduardo Pelegri-Llopart October 20, 1988 5:07:28 pm PDT cleaned up DIRECTORY and removed GetTerminal Κ*– "cedar" style˜code™K™>K™*K™5—K˜šΟk ˜ Kšœ œ ˜Kšœœ˜Kšœœ ˜Kšœ˜Kšœ˜—K˜KšΠbx œœ œ˜"K˜Kšœœ˜K˜head™ KšœΟmœ™KšœŸœ™KšœŸœ™!šœ™Kšœ ™ šœ™K™KšŸœŸœŸœ™šŸœŸœ™KšŸœŸœŸœ™KšŸœŸœŸœ ™KšŸœ Ÿœ™———Kš œŸœŸœŸœŸœŸœŸœ ™MKšœ$Ÿœ™7šœ Ÿœ ™KšœŸœ ™$šŸœŸœŸœŸœ™&Kš ŸœŸœ ŸœŸœŸœ ™!KšŸœŸœŸœŸœ™,šŸœŸœŸœ Ÿœ™)Kš ŸœŸœŸœŸœ Ÿœ™+————K˜™Kš œŸœ ŸœŸœ Ÿœ™5šœŸœŸ™(Kšœ/Ÿœ ™9—Kšœ Ÿœ ™Kšœ'™'KšœŸœ™+K™KšœŸœ™*KšœŸœ™(™KšœŸœ5™LKšœŸœ ™——K˜Kšœ œœœ˜Kšœœœ ˜šœ œœ˜Kšœ œ˜K˜KšœΟcœ˜$Kšœœ˜Kšœœ˜Kšœœ œœ ˜5Kšœ-˜-Kšœ˜Kšœœœœ˜K˜%Kšœœœ˜Kšœœœ˜Kšœ œœ˜Kšœœœ˜Kšœœ˜K˜Kšœ œ˜Kšœ˜ K˜—K˜Kšœ œ'˜6K˜Kšœœœ ˜šœ œœ˜K˜Kšœ œœ˜Kšœœ˜ Kšœ ˜ Kšœœ œœ ˜7Kšœ!œ˜%Kšœœœ˜ Kšœœœ˜+Kšœœœ˜&K˜#Kšœ œ˜Kšœœ˜Kšœ˜—K˜Kšœœ,˜?Kšœ œœœ˜7K˜Kšœœœ˜0Kšœœœ˜%K˜Kšœœœ ˜šœ œœ˜Kšœ œ˜K˜K˜ Kšœ˜Kšœ˜K˜—K˜Kšœœœ˜šœœœ˜Kšœœ˜ Kšœ˜Kšœ#˜#Kšœœ˜Kšœ˜K˜—K˜Kšœ œœ˜#šœœœ˜K˜šœœ˜K™B—šœ œ˜K™,—K˜—K˜Kšœ œœ˜#šœœœ˜Kšœœ˜ Kš Οn œœœœœ˜)Kš‘œ ˜K˜—K˜Kšœ œ˜K˜ K˜Kš‘œœœœ˜?Kš‘œœ œ˜Kš‘œœœ˜4K˜Kš ‘ œœœœœ˜KK˜Kš ‘œœœ œœ˜@K˜Kš‘œœ˜Kš‘ œœ˜!K˜Kš ‘ œœ œœœ˜>Kš‘œœœœ˜;Kš‘ œœœœ˜4Kš‘œœœœ˜0K˜™Kš‘ œœ ˜—K˜™Kš ‘œœœ œœ˜Q—K˜Kšœ œœ˜#Kš œœœ œ œœ˜PK˜K˜K˜š‘ œœ˜K™,—K˜Kšœ˜™7K™,—K™—…— œX