Universität Ulm, Fakultät für Mathematik und Wirtschaftswissenschaften, SAI

SS 99 || Ferienprojekt zu Allgemeine Informatik II || Puzzle Library

DEFINITION ChessClocks


DEFINITION ChessClocks;

   IMPORT Clocks, Objects, Services, Shards, Times;

   TYPE
      ChessClock = POINTER TO ChessClockRec;
      ChessClockRec = RECORD (Services.ObjectRec) END;
      Player = SHORTINT; (* player number, starting from 0 *)

   TYPE
      StartProc = PROCEDURE (chessclock: ChessClock;
                             auth: Shards.Lid) : BOOLEAN;
      StopProc = PROCEDURE (chessclock: ChessClock;
                            auth: Shards.Lid) : BOOLEAN;
      SwitchProc = PROCEDURE (chessclock: ChessClock;
	                      auth: Shards.Lid; player: Player) : BOOLEAN;

      RunningProc = PROCEDURE (chessclock: ChessClock) : BOOLEAN;
      CurrentPlayerProc = PROCEDURE (chessclock: ChessClock) : Player;
      GetClockProc = PROCEDURE (chessclock: ChessClock; player: Player;
	                        VAR clock: Clocks.Clock);

      Interface = POINTER TO InterfaceRec;
      InterfaceRec =
	 RECORD
	    (Objects.ObjectRec)
	    start: StartProc;
	    stop: StopProc;
	    switch: SwitchProc;
	    running: RunningProc;
	    currentPlayer: CurrentPlayerProc;
	    getClock: GetClockProc;
	 END;

   PROCEDURE Init(chessclock: ChessClock; if: Interface;
                  numberOfPlayers: SHORTINT;
		  timelimit: Times.Time);

   PROCEDURE Start(chessclock: ChessClock; auth: Shards.Lid) : BOOLEAN;
   PROCEDURE Stop(chessclock: ChessClock; auth: Shards.Lid) : BOOLEAN;
   PROCEDURE Switch(chessclock: ChessClock;
                    auth: Shards.Lid; player: Player) : BOOLEAN;

   PROCEDURE Running(chessclock: ChessClock) : BOOLEAN;
   PROCEDURE CurrentPlayer(chessclock: ChessClock) : Player;
   PROCEDURE GetClock(chessclock: ChessClock; player: Player;
                      VAR clock: Clocks.Clock);

   PROCEDURE NumberOfPlayers(chessclock: ChessClock) : SHORTINT;
   PROCEDURE GetTimeLimit(chessclock: ChessClock;
                          VAR timelimit: Times.Time);
   PROCEDURE TimeLeft(chessclock: ChessClock; player: Player;
                      VAR time: Times.Time);

END ChessClocks.

SS 99 || Ferienprojekt zu Allgemeine Informatik II || Puzzle Library

Andreas Borchert, 26. Juli 1999