<> <> <> <> DIRECTORY Commander USING [Handle], Icons USING [IconFlavor], IO USING [Value], MakeDo, SymTab; MakeDoPrivate: CEDAR DEFINITIONS = BEGIN OPEN MakeDo; <> <> <> <> <> <> <> <> <<>> <<>> <<>> <<>> <<>> <> <> <> <> <<>> <<>> <<>> <<>> <<>> <> <<(eb: ExpensiveBool >> <<~RawLeaf[node] >> <> <> <> <> <> <> <> <> <> <> 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. <> <> <<>>