<> <> <> <> DIRECTORY Commander, Rope, SymTab; ComputeServerServer: CEDAR DEFINITIONS = BEGIN RegisteredProcHandle: TYPE = REF RegisteredProcObject; RegisteredProcObject: TYPE = RECORD [ version: Rope.ROPE, service: Rope.ROPE, commanderProcHandle: Commander.CommandProcHandle _ NIL ]; Register: PROC [key: Rope.ROPE, version: Rope.ROPE _ NIL, proc: Commander.CommandProc, doc: Rope.ROPE _ NIL, clientData: REF ANY _ NIL]; <> EnumerateAction: TYPE = PROC [key: Rope.ROPE, procData: LIST OF RegisteredProcHandle] RETURNS [stop: BOOL _ FALSE]; Enumerate: PROC [EnumerateAction] RETURNS [key: Rope.ROPE, procData: LIST OF RegisteredProcHandle]; <<... calls the EnumerateAction with the key and registered procedure data for all registered commands. It will stop early if the EnumerateAction returns TRUE. Commands are not enumerated in any particular order.>> Lookup: PROC [key: Rope.ROPE, version: Rope.ROPE] RETURNS [procData: RegisteredProcHandle]; <<... will look up the command and return the associated CommandProcHandle (NIL if no such command is registered). Case of keys does not matter.>> <> RegisterRealRegistration: PRIVATE PROC [Register: PROC [key: Rope.ROPE, version: Rope.ROPE _ NIL, proc: Commander.CommandProc, doc: Rope.ROPE _ NIL, clientData: REF ANY _ NIL]]; Registry: PRIVATE SymTab.Ref; -- registered commands, for software that has been run and did a ComputeServer.Register, are saved here END. <> <> <<>>