<> <> <> <<(Added notion of properties to Finger database; removed notion of "fingerable objects" and made clear separation between machines/users. Added procedures to dump and build maps of the available machines)>> <> <> <<(Removed references to Pup Net addresses of machines)>> <> <<>> DIRECTORY BasicTime USING [GMT], FingerLog USING [StateChange], Rope USING [ROPE]; <<>> FingerOps: CEDAR DEFINITIONS = BEGIN FingerList: TYPE = LIST OF Rope.ROPE; <> Reason: TYPE = {Error, Aborted, Failure}; <> FingerError: ERROR[reason: Reason]; <> <<>> PropPair: TYPE = REF PropPairObject; PropPairObject: TYPE = RECORD[prop: ATOM, val: Rope.ROPE]; <> <> StateChange: TYPE = FingerLog.StateChange; PutStateChange: PROC [change: StateChange, time: BasicTime.GMT]; <> <> <<>> ListUserProps: PROC[] RETURNS[propList: LIST OF ATOM]; <> ListMachineProps: PROC[] RETURNS[propList: LIST OF ATOM]; <> AddUserProp: PROC[name: Rope.ROPE]; <> AddMachineProp: PROC[name: Rope.ROPE]; <> DeleteUserProp: PROC[name: Rope.ROPE]; <> DeleteMachineProp: PROC[name: Rope.ROPE]; <> <> SetUserProps: PROC[user: Rope.ROPE, props: LIST OF PropPair]; <> SetMachineProps: PROC[machine: Rope.ROPE, props: LIST OF PropPair]; <> GetUserProps: PROC[userPattern: Rope.ROPE] RETURNS [propsList: LIST OF PropPair]; <> GetMachineProps: PROC[machinePattern: Rope.ROPE] RETURNS [propsList: LIST OF PropPair]; <> <> <<>> GetMatchingPersons: PROC [pattern: Rope.ROPE] RETURNS [result: LIST OF Rope.ROPE]; <> GetMatchingMachines: PROC [pattern: Rope.ROPE] RETURNS [result: LIST OF Rope.ROPE]; <> MatchUserProperty: PROC[propVal: PropPair] RETURNS[result: LIST OF Rope.ROPE]; <> MatchMachineProperty: PROC[propVal: PropPair] RETURNS[result: LIST OF Rope.ROPE]; <> CurrentUsers: PROC[] RETURNS[userList: LIST OF Rope.ROPE]; <> FreeMachines: PROC[] RETURNS[machineList: LIST OF Rope.ROPE]; <> <> <<>> PersonExists: PROC [name: Rope.ROPE] RETURNS [result: BOOLEAN]; <> MachineExists: PROC [name: Rope.ROPE] RETURNS [result: BOOLEAN]; <> <<>> <> <<>> GetMachineData: PROC [name: Rope.ROPE] RETURNS[lastChange: StateChange, time: BasicTime.GMT, user: Rope.ROPE]; <> GetUserData: PROC [name: Rope.ROPE] RETURNS[machineList: LIST OF Rope.ROPE]; <> <<>> <> <<>> ReadMachineMap: PROC [file: Rope.ROPE, resetProperties: BOOLEAN _ FALSE]; <> WriteMachineMap: PROC [file: Rope.ROPE]; <> <<>> ReadUserMap: PROC [file: Rope.ROPE, resetProperties: BOOLEAN _ FALSE]; <> <<>> WriteUserMap: PROC [file: Rope.ROPE]; <> END. <> <> <<>> <<>>