<> <> <> <<(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)>> <<>> DIRECTORY BasicTime USING [GMT], IO USING[STREAM], 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 = {login, logout}; 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[props: LIST OF PropPair]; <> SetMachineProps: PROC[props: LIST OF PropPair]; <> GetUserProps: PROC[user: Rope.ROPE] RETURNS[props: LIST OF PropPair]; <> GetMachineProps: PROC[machineName: Rope.ROPE] RETURNS[props: 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]; <> <> <<>> GetMachineData: PROC [name: Rope.ROPE] RETURNS[actualName: Rope.ROPE, lastChange: StateChange, time: BasicTime.GMT, user: Rope.ROPE]; <> GetUserData: PROC [name: Rope.ROPE] RETURNS[machineList: LIST OF Rope.ROPE]; <> <<>> <> <<>> ReadMachineMap: PROC [file: Rope.ROPE, startPos: INT _ 0, msgStream: IO.STREAM _ NIL]; <> WriteMachineMap: PROC [file: Rope.ROPE]; <> END.