<> <> <> <<>> DIRECTORY BasicTime USING [GMT], Rope USING [ROPE]; <<>> FingerOps: CEDAR DEFINITIONS = BEGIN FingerList: TYPE = LIST OF FingerObject; <> FingerObject: TYPE = RECORD[name: Rope.ROPE, type: FingerObjectType]; FingerObjectType: TYPE = {person, machine}; Reason: TYPE = {Error, Aborted, Failure}; <> FingerError: ERROR[reason: Reason]; <> <<>> <<>> machineNameRope: Rope.ROPE; StateChange: TYPE = ATOM; <> PutStateChange: PROC [change: StateChange, time: BasicTime.GMT]; <> SaveNewProps: PROC[object: FingerObject, actualName, plan, pictureFile: Rope.ROPE _ NIL]; <> GetMatchingObjects: PROC [pattern: Rope.ROPE] RETURNS [result: FingerList]; <> LoginLogout: TYPE = {login, logout}; ObjectData: TYPE = REF ObjectRecord; ObjectRecord: TYPE = RECORD[ data: SELECT type: FingerObjectType FROM person => [ mailRead: BasicTime.GMT, used: LIST OF MachineData ], machine => [lastUser: Rope.ROPE, operation: LoginLogout, time: BasicTime.GMT] ENDCASE ]; MachineData: TYPE = RECORD[machine: Rope.ROPE, operation: LoginLogout, time: BasicTime.GMT]; GetProps: PROC[object: FingerObject] RETURNS[actualName, plan, pictureFile: Rope.ROPE _ NIL, data: ObjectData]; <> END.