object SchedulingSpec components: CommitteeName, Topic, Members, StartTime, EndTime, StartDate, EndDate, RoomId; operations: Search, Cancel; description: (* This screen is used to search for common location, time and date for a meeting.*); end SchedulingSpec; object RoomDB components: RoomInfo*; description: (* Collection of rooms that the scheduler has direct access to, which we'll refer to as ``local rooms''. If room is not on this list, then its managed by some other agency than that running the calendar system (e.g., some campus room guru). *); end RoomDB; operation Schedule inputs: ; outputs: ; description: (* Among other constraints, if a room cannot be found for a meeting, but a time can, then the location field of the outputs is left as ``call for room'', meaning the that human scheulder needs to ask for a room through some other agency. The idea is that we'll schedule a meeting if a time can be found, whether or not we can find a local room. *); end Schedule; object RoomInfo components: RoomId, MaxOccupants, UnavailabilitiyList; end RoomInfo; object UnavailabilitiyList components: DateAndTime*; description: (*List of time slots in which a room is not available*); end UnavailabilitiyList ; object RoomId = string; object MaxOccupants = number; object StartDate components: Year, Month, Day; operations: ; description: (**); end StartDate; object EndDate components: Year, Month, Day; operations: ; description: (**); end EndDate; object Priority = boolean; object SetBrowseParam components: Topic, MeetingMinutes, Decision, Miscellaneous; operations: ; description: (**); end SetBrowseParam; object Topic = string; object MeetingMinutes = string; object Decision = string; object Miscellaneous = string; object conflict components: Time, Date, Location; operations: ; description: (**); end conflict; object Date components: Year, Month, Day; operations: ; description: (**); end Date; object CommitteeName = string; object Members components: ListOfUsers; operations: ; description: (**); end Members; object ListOfUsers components: User; operations: ; description: (**); end ListOfUsers; object Attendees components: Members; operations: ; description: (**); end Attendees;