home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* STOPPUHR.PAS *)
- (* Stoppuhren in Turbo Pascal 4.0 und 5.0 *)
- (* (c) 1989 W.Schmidt & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT Stoppuhr;
-
- INTERFACE
-
- TYPE Time = RECORD
- hour : WORD;
- min : WORD;
- sec : WORD;
- hsec : WORD;
- END;
- Chronometer = RECORD
- status : BYTE;
- start : Time;
- stop : Time;
- duration : REAL;
- END;
- ChronoPtr = ^Chronometer ;
-
- PROCEDURE NewChronometer(VAR u : ChronoPtr);
- { Erzeugen einer Stoppuhr mit Reset der Uhr }
-
- PROCEDURE DisposeChronometer(VAR u : ChronoPtr);
- { Stoppuhr wird nicht mehr gebraucht }
-
- PROCEDURE ResetChronometer(u : ChronoPtr);
- { Stoppuhr zurücksetzen auf 00:00:00.00 }
-
- PROCEDURE StartChronometer(u : ChronoPtr);
- { Stoppuhr starten . Wenn die Uhr vorher nicht mit }
- { ResetChronometer zurückgesetzt wurde, so wird mit dem }
- { letzten Stand der Uhr weitergemacht. }
-
- PROCEDURE StopChronometer(u : ChronoPtr);
- { Stoppuhr anhalten ; kein automatischer Reset ! }
-
- PROCEDURE ReadChronometer(u : ChronoPtr; VAR dur : REAL);
- { Ablesen der momentanen Zeit in Sekunden . Werte der }
- { Stoppuhr werden nicht beeinflußt . Zeit dur wird in }
- { sec zurückgegeben. }
-
- FUNCTION SecToTime(dur : REAL) : STRING ;
- { Die in Sekunden abgelesene Zeit wird mit dieser }
- { Funktion in die Form hh:mm:ss.bb gebracht. }
-
- IMPLEMENTATION
-
- USES Dos;
-
- CONST inactive = 0 ; created = 1 ; active = 2 ;
- VAR Mitternacht : Time ;
-
- PROCEDURE NewChronometer(VAR u : ChronoPtr);
- BEGIN
- New(u);
- u^.status := created;
- u^.duration := 0;
- END;
-
- PROCEDURE DisposeChronometer(VAR u : ChronoPtr);
- BEGIN
- IF (u^.status=created) OR (u^.status=active) THEN BEGIN
- u^.status := inactive;
- Dispose(u);
- END ELSE Halt;
- END;
-
- PROCEDURE ResetChronometer(u : ChronoPtr);
- BEGIN
- IF (u^.status=active) OR (u^.status=created) THEN BEGIN
- u^.status := created;
- u^.duration := 0;
- GetTime(u^.start.hour, u^.start.min,
- u^.start.sec, u^.start.hsec);
- GetTime(u^.stop.hour, u^.stop.min,
- u^.stop.sec, u^.stop.hsec);
- END ELSE Halt;
- END;
-
- PROCEDURE StartChronometer(u : ChronoPtr);
- BEGIN
- IF (u^.status=active) OR (u^.status=created) THEN BEGIN
- u^.status := active;
- GetTime(u^.start.hour, u^.start.min,
- u^.start.sec, u^.start.hsec);
- END ELSE Halt;
- END;
-
- FUNCTION TimeToSec(t : Time) : REAL;
- BEGIN
- TimeToSec := (t.hsec + 100.0 * t.sec + 6000.0 * t.min +
- t.hour * 360000.0) / 100.0;
- END;
-
- PROCEDURE StopChronometer(u : ChronoPtr);
- BEGIN
- IF u^.status=active THEN BEGIN
- GetTime(u^.stop.hour, u^.stop.min,
- u^.stop.sec, u^.stop.hsec);
- u^.duration := u^.duration + TimeToSec(u^.stop) -
- TimeToSec(u^.start);
- IF u^.stop.hour < u^.start.hour THEN
- u^.duration := u^.duration + TimeToSec(Mitternacht);
- u^.status := created ;
- u^.start := u^.stop;
- END ELSE
- IF u^.status=created THEN BEGIN { nothing } END
- ELSE Halt ;
- END;
-
- PROCEDURE ReadChronometer(u : ChronoPtr; VAR dur : REAL);
- VAR t : Time ;
- dt : REAL ;
- BEGIN
- GetTime(t.hour, t.min, t.sec, t.hsec);
- IF u^.status=active THEN BEGIN
- dur := u^.duration + TimeToSec(t) - TimeToSec(u^.start);
- IF t.hour < u^.start.hour THEN
- dur := dur + TimeToSec(Mitternacht);
- END ELSE
- IF u^.status=created THEN dur := u^.duration
- ELSE Halt;
- END;
-
- FUNCTION SecToTime(dur : REAL) : STRING;
- VAR s, hs : STRING;
- i, k : INTEGER;
- BEGIN
- k := Round((dur - Int(dur)) * 100);
- Str(k:2, s);
- IF s[1] = ' ' THEN s[1] := '0';
- IF Length(s) = 3 THEN s := Copy(s, 1, 2);
- s := '.' + s;
- k := Round(Int(dur) + 0.1);
- i := k MOD 60; Str(i:2, hs);
- IF hs[1] = ' ' THEN hs[1] := '0';
- s := hs + s; k := k DIV 60; i := k MOD 60;
- Str(i:2, hs);
- IF hs[1] = ' ' THEN hs[1] := '0';
- s := hs + ':' + s; k := k DIV 60; Str(k:2,hs);
- IF hs[1] = ' ' THEN hs[1] := '0';
- s := hs + ':' + s;
- SecToTime := s;
- END;
-
- BEGIN
- WITH Mitternacht DO BEGIN
- hour := 24; min := 0; sec := 0; hsec := 0;
- END;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von STOPPUHR.PAS *)
-
-