Home GEMDOSGEMDOS DateifunktionenDateifunktionen ProzessfunktionenProzessfunktionen

5.10 Datum und Uhrzeit

Tadjtime   Zeit synchronisieren.
Talarm     Weckfunktion.
Tgetdate   Datum ermitteln.
Tgettime   Uhrzeit ermitteln.
Tgettimeofday interrogates the state of the internal, high resolution system clock.
Tmalarm    reads/sets a process alarm for the current process.
Tsetdate   Datum einstellen.
Tsetitimer Steuerung eines periodischen Timers.
Tsettime   Uhrzeit einstellen.
Tsettimeofday sets the state of the internal, high resolution system clock.

Querverweis: Datum und Zeit im XBIOS

5.10.1 Tadjtime

Name: »Adjust time« - correct the time to synchronize the system clock.
 
Opcode: 343 (0x157)
 
Syntax: int Tadjtime ( const struct timeval *delta, struct timeval *olddelta );
 
Description: The Tadjtime() function gradually adjusts the system clock (as returned by Tgettimeofday). The amount of time by which the clock is to be adjusted is specified in the structure pointed to by delta.
 
If the adjustment in delta is positive, then the system clock is speeded up by some small percentage (i.e., by adding a small amount of time to the clock value in each second) until the adjustment has been completed. If the adjustment in delta is negative, then the clock is slowed down in a similar fashion.
 
If a clock adjustment from an earlier Tadjtime() call is already in progress at the time of a later Tadjtime() call, and delta is not NULL for the later call, then the earlier adjustment is stopped, but any already completed part of that adjustment is not undone.
 
If olddelta is not NULL, then the buffer that it points to is used to return the amount of time remaining from any previous adjustment that has not yet been completed.
 
Return value: A return value 0 if the setting was successful, otherwise a negative error code is returned.
 
Notes: The adjustment that Tadjtime() makes to the clock is carried out in such a manner that the clock is always monotonically increasing. Using Tadjtime() to adjust the time prevents the problems that can be caused for certain applications (e.g., make(1)) by abrupt positive or negative jumps in the system time.
 
Availability: This function is available as of FreeMiNT 1.16.
 
Group: Date and Time
 
See also: Binding   Tsetdate   Tsettime
 

5.10.1.1 Bindings for Tadjtime

C: int Tadjtime ( const struct timeval *delta, struct timeval *olddelta );
 
Assembler:
 
move.l    olddelta,-(sp)   ; Offset 6
move.l    delta,-(sp)  ; Offset 2
move.w    #343,-(sp)   ; Offset 0
trap      #1           ; GEMDOS
lea       10(sp),sp    ; Correct stack

5.10.2 Talarm

Name: »Talarm« - Lesen/setzen eines Alarms für den aktuellen Prozess.
 
Gemdosnummer: 288 (0x0120)
 
Deklaration: int32_t Talarm ( int32_t time );
 
Beschreibung: Die Funktion sendet dem aufrufenden Prozess nach time Sekunden ein SIGALRM-Signal.
 
Falls für dieses Signal kein Signal-Handler per Psignal installiert wurde, wird der Prozess sofort (d.h. beim Eintreffen des Signals) terminiert.
 
Durch einen Wert von time = 0, kann ein früher gesetzter Alarm storniert werden. Ist time negativ, so hat die Funktion keine Auswirkungen und lediglich der Rückgabewert wird geliefert.
 
Ergebnis: Die Funktion liefert die Zeit bis zum Eintreffen des SIGALRM-Signals (wenn ein Alarm aktiviert wurde) in Sekunden zurück, und anderenfalls den Wert 0.
 
Verfügbar: Seit der ersten in MultiTOS integrierten MiNT Version 1.04.
 
Diese Funktion wurde mit MiNT Version 0.8pl8 eingeführt, aber für Versionen vor 1.12 enthält der Code einen Fehler, der die Funktionalität beeinträchtigt.
 
Gruppe: Datum und Uhrzeit
 
Querverweis: Binding   Tmalarm   Pause   Psignal   Signale
 

5.10.2.1 Bindings für Talarm

C: int32_t Talarm ( int32_t time );
 
Assembler:
 
move.l    time,-(sp)   ; Offset 2
move.w    #288,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #6,sp        ; Stack korrigieren

5.10.3 Tgetdate

Name: »get date« - Tagesdatum ermitteln.
 
Gemdosnummer: 42
 
Deklaration: uint32_t Tgetdate ( void );
 
Beschreibung: Die GEMDOS-Routine Tgetdate ermittelt das aktuelle Tagesdatum.
 
Ergebnis: Die Funktion liefert als Ergebnis eine uint32_t-Zahl mit dem Tagesdatum. Das Datum ist wie folgt codiert:
 
Bits Bedeutung
   
0-4 Tag (1-31)
5-8 Monat (1-12)
9-15 Jahr (0-119, 0= 1980)
Verfügbar: Alle GEMDOS Versionen.
 
Gruppe: Datum und Uhrzeit
 
Querverweis: Binding   Tsetdate
 

5.10.3.1 Bindings für Tgetdate

C: uint16_t Tgetdate ( void );
 
Assembler:
 
move.w    #42,-(sp)    ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #2,sp        ; Stack korrigieren

5.10.4 Tgettime

Name: »get time« - ermittelt die Uhrzeit.
 
Gemdosnummer: 44
 
Deklaration: uint16_t Tgettime ( void );
 
Beschreibung: Die GEMDOS-Routine Tgettime ermittelt die Uhrzeit.
 
Ergebnis: Die Funktion liefert als Ergebnis die Uhrzeit. Sie ist wie folgt codiert:
 
Bits Bedeutung
   
0-4 Sekunden im Zweierschritt (0-29)
5-10 Minuten (0-59)
11-15 Stunden (0-23)
Verfügbar: Alle GEMDOS Versionen.
 
Gruppe: Datum und Uhrzeit
 
Querverweis: Binding   Tsettime
 

5.10.4.1 Bindings für Tgettime

C: uint16_t Tgettime ( void );
 
Assembler:
 
move.w    #44,-(sp)    ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #2,sp        ; Stack korrigieren

5.10.5 Tgettimeofday

Name: »Tgettimeofday« - erfragt den Status der internen, hochauflösenden Systemzeit.
 
Gemdosnummer: 341 (0x0155)
 
Deklaration: int32_t Tgettimeofday ( timeval *tv, timezone *tzp );
 
Beschreibung: Diese Funktion erfragt den Status der internen, hochauflösenden Systemzeit.
 
Das Argument tv ist ein Zeiger auf eine timeval Struktur.
 
Das Argument tzp ist ein Zeiger auf eine timezone Struktur.
 
Es kann für jeden der beiden Argumente NULL übergeben werden. Dies wird nicht als Fehler angesehen.
 
Entwickler von Bibliotheken sollten beachten, daß die Definition der Struktur timezone nicht konform zu der anderer Strukturen ist. Die Member sind vom Datentyp int und nicht long (Dies trifft nur für die Struktur timezone zu, die Member der Struktur timeval sind vom Datentyp long). 16-Bit Bibliotheken müssen den Inhalt der Struktur, auf die tzp zeigt, kopieren.
 
Der Ssystem() Aufruf hat ein Kommando S_CLOCKMODE. Dieses Kommando erlaubt es, den Modus des Kernel Zeitgebers zu setzen oder anzufragen. Z.B. festzulegen, ob die Hardware Uhr UTC oder die local time anzeigt.
Es ist geplant, MiNT kompatibel zu dem kernel time keeping model aus der RFC1305 zu machen. Dieses Modell wurde erfolgreich in Betriebssystemen wie SunOS, Ultrix, OSF/1, HP-UX und Linux umgesetzt. Es ist zu erwarten, daß sich die interen Realsierung in Zukunft ändert.
 
Ergebnis: Der Aufruf kann nicht fehlschlagen, es wird immer E_OK zurückgeliefert.
 
Verfügbar: Verfügbar, wenn ein MiNT Kernel mit einer Versionsnummer von mindestens 1.15.0 erkannt wird.
 
Gruppe: Datum und Uhrzeit
 
Querverweis: Binding   Ssystem   Tsettimeofday
 

5.10.5.1 Bindings für Tgettimeofday

C: int32_t Tgettimeofday ( timeval *tv, timezone *tzp );
 
Assembler:
 
pea       tzp          ; Offset 6
pea       tv           ; Offset 2
move.w    #341,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
lea       $0a(sp),sp   ; Stack korrigieren

5.10.6 Tmalarm

Name: »Tmalarm« - interrogates the state of the internal, high resolution system clock.
 
Gemdosnummer: 317 (0x013d)
 
Deklaration: int32_t Tmalarm( int32_t time );
 
Beschreibung: This function reads/sets a process alarm for the current process.
 
time specifies the length of time (in milliseconds) to wait before a SIGALRM signal is delivered. If time is 0 then any previously set alarm is cancelled. If time is negative the function does not modify any alarm currently set.
 
If no SIGALRM signal handler has been set up when the alarm is triggered, the process will be killed.
 
Ergebnis: Returns 0 if no alarm was scheduled prior to this call or the amount of time remaining (in milliseconds) before the alarm is triggered.
 
Verfügbar: Available when a 'MiNT' cookie with a version of at least 1.10 exists.
 
Gruppe: Datum und Uhrzeit
 
Querverweis: Binding   Talarm   Pause   Psignal
 

5.10.6.1 Bindings für Tmalarm

C: int32_t Tmalarm( int32_t time );
 
Assembler:
 
move.l    time,-(sp)   ; Offset 2
move.w    #341,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #6,sp        ; Stack korrigieren

5.10.7 Tsetdate

Name: »set date« - Tagesdatum setzen.
 
Gemdosnummer: 43
 
Deklaration: int16_t Tsetdate ( uint16_t date );
 
Beschreibung: Die GEMDOS-Routine Tsetdate setzt das aktuelle Tagesdatum. Der Parameter date ist wie folgt codiert:
 
Bits Bedeutung
   
0-4 Tag (1-31)
5-8 Monat (1-12)
9-15 Jahr (0-119, 0= 1980)

Hinweis: Ab dem Blitter-TOS wird das Datum auch in der jeweils vorhandenen Hardware-Uhr gesetzt.
 
Ergebnis: Ein Rückgabewert von -1 kennzeichnet ein ungültiges Format des Datums.
 
Verfügbar: Alle GEMDOS Versionen.
 
Gruppe: Datum und Uhrzeit
 
Querverweis: Binding   Tgetdate   Tadjtime
 

5.10.7.1 Bindings für Tsetdate

C: int32_t Tsetdate ( uint16_t date );
 
Assembler:
 
move.w    date,-(sp)   ; Offset 2
move.w    #43,-(sp)    ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #4,sp        ; Stack korrigieren

5.10.8 Tsetitimer

Name: »Tsetitimer« - steuert einen periodischen Timer.
 
Gemdosnummer: 329 (0x0149)
 
Deklaration: int32_t Tsetitimer ( int16_t which, int32_t *interval, int32_t *value, int32_t *ointerval, int32_t *ovalue );
 
Beschreibung: Die GEMDOS-Routine Tsetitimer steuert einen von insgesamt drei möglichen periodischen Timern. Es gilt:
 
Parameter Bedeutung
   
which gewünschter Timer
0 = Dieser Timer arbeitet in Echtzeit, und sendet nach Ablauf das Signal SIGALRM.
1 = Dieser Timer arbeitet in 'virtueller Prozess-Zeit', und sendet nach Ablauf das Signal SIGVTALRM. Der Timer läuft in diesem Fall nur, wenn der Prozess, welcher den Timer steuert, aktuell die CPU besitzt.
2 = Dieser Timer arbeitet sowohl in 'virtueller Prozess-Zeit' als auch dann, wenn das Betriebssystem selbst aktiv ist. Nach Ablauf des Timers wird das Signal SIGPROF gesendet.
interval Adresse eines Long-Wertes, welcher den Wert enthält, auf den der Timer nach Ablauf gesetzt werden soll. Ein NULL-Zeiger bedeutet, daß der entsprechende alte Wert nicht verändert werden soll. Falls der int32_t-Wert den Wert 0 besitzt, wird der Timer nach seinem Ablauf deaktiviert.
value Adresse eines Long-Wertes, welcher den Initialwert des Timers in Millisekunden beschreibt. Ein NULL-Zeiger läßt den aktuellen Timer unangetastet. Falls der int32_t-Wert den Wert 0 besitzt, wird der Timer deaktiviert.
ointerval Adresse eines Long-Wertes, welcher das aktuelle Intervall des Timers aufnimmt, bzw. NULL, wenn dieser Wert nicht von Interesse ist.
ovalue Adresse eines Long-Wertes, welcher den aktuellen Wert des Timers aufnimmt oder NULL, wenn dieser Wert nicht von Interesse ist.

Da alle internen Berechnungen in Millisekunden gemessen werden, ist es nicht möglich einen Timer auf beliebige (sehr große, zukünftige) Werte zu setzen.
 
Ergebnis: Die Funktion liefert bei korrekter Ausführung 0, und im Fehlerfall einen negativen Wert zurück.
 
Verfügbar: Diese Funktion ist optional, daher darf ein Aufruf mit EINVFN beantwortet werden. Sie ist verfügbar, wenn 'MiNT' Cookie mit einer Versionsnummer von mindestens 1.11 existiert.
 
Gruppe: Datum und Uhrzeit
 
Querverweis: Binding   Pause   Psignal   Talarm
 

5.10.8.1 Bindings für Tsetitimer

C: int32_t Tsetitimer ( int16_t which, int32_t *interval, int32_t *value, int32_t *ointerval, int32_t *ovalue );
 
Assembler:
 
move.l    ovalue,-(sp)    ; Offset 16
move.l    ointerval,-(sp) ; Offset 12
move.l    value,-(sp)     ; Offset  8
move.l    interval,-(sp)  ; Offset  4
move.w    which,-(sp)     ; Offset  2
move.w    #329,-(sp)      ; Offset  0
trap      #1              ; GEMDOS aufrufen
lea       20(sp),sp       ; Stack korrigieren

5.10.9 Tsettime

Name: »set time« - setzt die Uhrzeit.
 
Gemdosnummer: 45
 
Deklaration: int16_t Tsettime ( uint16_t time );
 
Beschreibung: Die GEMDOS-Routine Tsettime setzt die Uhrzeit. Der Parameter time muß wie folgt codiert werden:
 
Bits Bedeutung
   
0-4 Sekunden im Zweierschritt (0-29)
5-10 Minuten (0-59)
11-15 Stunden (0-23)

Hinweis: Ab dem Blitter-TOS 1.02 wird die Zeit auch in der jeweils vorhandenen Hardware-Uhr gesetzt.
 
Ergebnis: Ein Rückgabewert von -1 kennzeichnet ein ungültiges Zeitformat.
 
Verfügbar: Alle GEMDOS Versionen.
 
Gruppe: Datum und Uhrzeit
 
Querverweis: Binding   Tgettime
 

5.10.9.1 Bindings für Tsettime

C: int32_t Tsettime ( uint16_t time );
 
Assembler:
 
move.w    time,-(sp)   ; Offset 2
move.w    #45,-(sp)    ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #4,sp        ; Stack korrigieren

5.10.10 Tsettimeofday

Name: »Tsettimeofday« - sets the state of the internal, high resolution system clock.
 
Gemdosnummer: 342 (0x0156)
 
Deklaration: int32_t Tsettimeofday ( timeval *tv, timezone *tzp );
 
Beschreibung: This function sets the state of the internal, high resolution system clock.
 
The argument tv is a pointer to the timeval structure.
 
The argument tzp is a pointer to the timezone structure.
 
You may safely pass NULL for either argument. This isn't considered an error.
 
Implementors of library bindings should be aware that the definition of struct timezone is non-standard. The members are actually int and not long int (this applies only to struct timezone; the members of struct timeval are always long). 16-bit libraries will have to copy the contents of the structure that tzp points to.
 
The tz_dsttime member of timezone is stored, but not evaluated within the kernel. Beware not to misunderstand its meaning: if non-zero it simply signifies that daylight savings time apply during some part of the year, not necessarily now. In other words: if it is non-zero someday, it should be non-zero during the entire year. The Ssystem() call has a command S_CLOCKMODE. This command allows to retrieve or set the kernel clock mode, i.e. to specify whether the hardware clock is meant to run in UTC or in local time.
It is planned to make MiNT compliant with the kernel time keeping model described in RFC1305. This model is already successfully implemented in operating systems such as SunOS, Ultrix, OSF/1, HP-UX and Linux. Please expect the internal realization to change in the future.
 
Ergebnis: The following error conditions are defined:
 
EPERM - an attempt was made by a user without super-user privileges to change the system time or system time zone information.
 
EBADARG - one of the arguments is out of range. Note that the kernel time cannot be set to dates before Jan 1 1980 00:00:00 and after some day in 2038 (yep, MAX_LONG seconds since the epoch). Timezone offsets must be in the range of +/- 720 minutes.
 
Verfügbar: Available when a MiNT kernel of a version at least 1.15.0 release is detected.
 
Gruppe: Datum und Uhrzeit
 
Querverweis: Binding   Ssystem   Tgettimeofday
 

5.10.10.1 Bindings für Tsettimeofday

C: int32_t Tsettimeofday ( timeval *tv, timezone *tzp );
 
Assembler:
 
pea       tzp          ; Offset 6
pea       tv           ; Offset 2
move.w    #342,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
lea       $0a(sp),sp   ; Stack korrigieren

Home GEMDOSGEMDOS DateifunktionenDateifunktionen ProzessfunktionenProzessfunktionen