home *** CD-ROM | disk | FTP | other *** search
/ ST-Computer Leser-CD 2000 January / LCD_01_2000.iso / tools / clock237 / auto / dtcookie.txt < prev   
Encoding:
Text File  |  1994-01-26  |  8.0 KB  |  166 lines

  1. DTCOOKIE Version 1.2 - Date/Time-Cookies setzen
  2. ===============================================
  3.  
  4. Sinn und Zweck von DTCOOKIE
  5. ---------------------------
  6. Das Programm DTCOOKIE.PRG dient lediglich dazu, die Cookies
  7. "DATE", "TIME", "_IDT" und "_AKP" auf sinnvolle Werte zu setzen.
  8. Falls einer dieser Cookies bereits gesetzt ist, wird er von
  9. DTCOOKIE nicht verändert. Sinnvollerweise startet man DTCOOKIE.PRG
  10. aus dem AUTO-Ordner, vor den Programmen, die diese Cookies
  11. auswerten.
  12.  
  13. Die Cookies "_AKP" und "_IDT"
  14. -----------------------------
  15. Dies sind mehr oder weniger offizielle Cookies von Atari. Sie
  16. enthalten Informationen über nationale Besonderheiten, die von
  17. Anwenderprogrammen und vom Desktop berücksichtigt werden sollten.
  18. Die Cookies werden unter anderem vom MultiTOS-Desktop ausgewertet,
  19. allerdings von älteren TOS-Versionen nicht gesetzt. Falls Multi-
  20. TOS unter einer älteren TOS-Version gestartet wird, sollte man
  21. diese Cookies z.B. mit DTCOOKIE selber setzen. Die Werte für die
  22. Cookies entnimmt DTCOOKIE, wenn möglich, dem nichtflüchtigen
  23. Speicher (NVM), und sonst der Länderkennung im System-Header.
  24.  
  25. Der "_AKP"-Cookie im Detail:
  26. ----------------------------
  27. Bit 0..7:   Ländercode für Tastaturlayout
  28. Bit 8..15:  Ländercode für Landessprache
  29. Bit 16..31: reserviert
  30.  
  31. Der "_IDT"-Cookie im Detail:
  32. ----------------------------
  33. Bit 0..7:   Trennzeichen für Datumsangaben
  34.             (Null steht als Default für '/').
  35. Bit 8..11:  Datumsformat,
  36.             (0: MM-TT-JJ, 1: TT-MM-JJ,
  37.              2: JJ-MM-TT, 3: JJ-TT-MM.)
  38. Bit 12..15: Zeitformat
  39.             (0: am/pm, 1: 24 Stunden)
  40. Bit 16..31: reserviert
  41.  
  42. Die Cookies "DATE" und "TIME"
  43. -----------------------------
  44. Dies sind infoffizielle Cookies, welche das Abfragen von Datum
  45. und Uhrzeit aus dem Interrupt erleichtern sollen:
  46.  
  47. Der "DATE"-Cookie enthält einen Zeiger auf eine word-gro₧e
  48. Variable mit dem aktuellen Datum im Tgetdate()-Format.
  49. Der "TIME"-Cookie enthält einen Zeiger auf eine word-gro₧e
  50. Variable mit der aktuellen Uhrzeit im Tgettime()-Format.
  51.  
  52. DTCOOKIE besetzt die Cookies mit Zeigern auf die GEMDOS-internen
  53. Variablen für Datum und Uhrzeit. Es ermittelt die Adressen dieser
  54. Variablen über die GEMDOS-Funktion Sconfig() (die bisher nur von
  55. "KAOS" und "MagiX" angeboten wird) und wenn dies nicht möglich
  56. ist, durch Tracing von Tgetdate()/Tgettime()-Aufrufen. Diese
  57. Methode ist zwar nicht ganz "sauber", funktioniert aber unter
  58. allen TOS-Versionen und auch mit MiNT (MiNT hat übrigens seine
  59. eigenen internen Variablen. Wird DTCOOKIE vor MiNT gestartet,
  60. zeigen die Cookies auf die GEMDOS-internen Variablen, wird
  61. DTCOOKIE nach MiNT gestartet, zeigen sie auf die MiNT-internen
  62. Variablen).
  63.  
  64. Tips zur Abfrage von Datum und Uhrzeit aus dem Interrupt
  65. --------------------------------------------------------
  66. Die aktuelle Uhrzeit und das aktuelle Datum sollten eigentlich
  67. grundsätzlich mit den GEMDOS-Funktionen Tgetdate() und Tgettime()
  68. ermittelt werden. Diese Routinen benutzen zur Bestimmung der Zeit
  69. die Systemtimer-Routine etv_timer(), die Zeit wird dabei beim
  70. Start von GEMDOS und bei jeder Beendigung eines GEMDOS-Prozesses
  71. mit Hilfe der Hardware-Uhr aktualisiert, was einen Kompromi₧ aus
  72. Geschwindigkeit und Genauigkeit darstellt. Das Problem stellt sich
  73. dann, wenn die Zeit von einem residenten Programm im Interrupt
  74. benötigt wird (etwa von einer Bildschirmuhr oder einem Programm,
  75. das im Hintergrund zeitabhängig Me₧werte aufzeichnet oder irgend-
  76. welche Prozesse oder Geräte steuert). Weil das Standard-GEMDOS
  77. nicht re-entrant ist, dürfen Tgetdate() und Tgettime() hier nicht
  78. aufgerufen werden. Unter MiNT ist zwar das GEMDOS re-entrant, darf
  79. aber trotzdem nicht aus einem Interrupt aufgerufen werden. Man
  80. könnte statt der GEMDOS-Funktionen Tgetdate() und Tgettime() zwar
  81. die XBIOS-Funktion Gettime() aufrufen, aber auch dies ist nicht zu
  82. empfehlen, denn Gettime() liest die Hardware-Uhr, was eventuell
  83. einige Zeit in Anspruch nehmen könnte. Au₧erdem ist auch das XBIOS
  84. nur bedingt re-entrant (der Rekursionsstapel ist zu klein und der
  85. Dispatcher sperrt während des Rettens der Register nicht die
  86. Interrupts) und darf unter MiNT ebenfalls nicht im Interrupt
  87. aufgerufen werden.
  88.  
  89. Im Multitasking-Zeitalter sollte man sich zunächst einmal überlegen,
  90. ob ein solches residentes Programm (TSR) nicht besser durch eine ganz
  91. "normale" im Hintergrund laufende Applikation ersetzt werden kann.
  92. Man kann dann völlig problemlos Tgettime() und Tgetdate() aufrufen.
  93.  
  94. Ist wirklich ein TSR erforderlich, wird vorgeschlagen, da₧ es das
  95. aktuelle Datum und die Uhrzeit wie folgt ermittelt:
  96.  
  97. 1. Es testet, ob der Cookie "MagX" gesetzt ist. In diesem Fall ist
  98. "MagiX" installiert, und es kann Tgettime() und Tgetdate() auch im
  99. Interrupt aufrufen. Die Routinen sind unter MagiX ausreichend
  100. schnell und re-entrant.
  101.  
  102. 2. Es testet, ob die Cookies "DATE" und "TIME" gesetzt sind. In
  103. diesem Fall kann es Datum und Uhrzeit über die Variablen
  104. bestimmen, deren Zeiger in den Cookies stehen (Zugriff auf die
  105. Variablen nur im Supervisor-Modus und nur lesend).
  106.  
  107. 3. Ansonsten bleiben dem TSR im wesentlichen die folgenden zwei
  108. Möglichkeiten: Erstens, zu versuchen, die Adressen der GEMDOS-
  109. Variablen für Datum und Uhrzeit selbst zu ermitteln, und dann
  110. diese Variablen zu benutzen (eine "unsaubere" Methode!) oder
  111. zweitens, bei der Initialisierung des Programms mit Tgetdate() und
  112. Tgettime() Datum und Uhrzeit zu bestimmen sowie die Systemvariable
  113. _hz_200 ($4ba) auszulesen und im Interrupt dann Datum und Uhrzeit
  114. aus der Änderung von _hz_200 zu bestimmen. Wenn es Blockierungen
  115. oder Ungenauigkeiten von _hz_200 Rechnung tragen will, sollte es
  116. sich noch in den GEMDOS-Trap hängen und dort die Uhrzeit gelegent-
  117. lich korrigieren (z.B. bei jedem Pexec()- oder Pterm()- oder
  118. Pterm0()-Aufruf mit einem zusätzlichen Tgettime()-Aufruf).
  119.  
  120. Wie gesagt, ist die Methode, mit der DTCOOKIES die GEMDOS-internen
  121. Variablen findet und die Benutzung dieser Variablen durch andere
  122. Programme (au₧er unter KAOS und MagiX) nicht "offiziell erlaubt"
  123. und daher als "unsauber" zu bezeichnen, obwohl sie in allen
  124. bekannten Fällen funktioniert und elegant, schnell und einfach
  125. ist. Da in Deutschland "Sauberkeit" gro₧geschrieben wird, seien
  126. hier noch zwei Möglichkeiten genannt, wie man die Cookies auch
  127. "sauber" setzen könnte. Allerdings sind diese Lösungen weder
  128. elegant, noch schnell, noch einfach. Welche Lösung man bevorzugt,
  129. hängt wohl hauptsächlich davon ab, ob man mehr pragmatisch oder
  130. mehr dogmatisch denkt.
  131.  
  132. 1. Ein residentes Programm legt zwei Variablen für Datum und
  133. Uhrzeit an, lä₧t die Cookies "DATE" und "TIME" darauf zeigen,
  134. klinkt sich in etv_timer() oder irgendeinen anderen Timer ein,
  135. initialisiert die Variablen mit Tgetdate()/Tgettime() und
  136. aktualisiert sie dann im Timer-Interrupt, ähnlich, wie es das
  137. GEMDOS in etv_timer() mit seinen Variablen auch macht.
  138.  
  139. 2. Das TSR, das die Cookies benutzen möchte, legt die Cookies
  140. "DATE" und "TIME" an und lä₧t sie auf zwei Variablen im TSR
  141. zeigen (falls die Cookies bereits existieren, hat ein anderes
  142. TSR dies bereits getan, in diesem Fall benutzt es einfach die
  143. Zeiger in den Cookies). Das TSR initialisiert die Variablen
  144. danach mit den GEMDOS-Funktionen Tgetdate() und Tgettime().
  145. Ein zusätzliches Accessory-Programm aktualisiert die Variablen
  146. dann regelmä₧ig (etwa einmal pro Sekunde) in einer evnt_timer()-
  147. Schleife mit Tgetdate() und Tgettime().
  148.  
  149. Schlie₧lich besteht theoretisch noch die Möglichkeit, da₧ die
  150. Variablen unter GEMDOS oder MiNT einmal offiziell zugänglich
  151. gemacht werden, aber diese Lösung wäre ja viel zu einfach.
  152.  
  153. Wahrscheinlich wird sich das ganze Problem in Zukunft aber auch
  154. von selbst lösen - entweder weil Atari schnellere Rechner mit
  155. Multitasking-Betriebssystem ausliefert oder weil Atari pleite
  156. geht. Beides würde die Notwendigkeit von TSR-Programmen auf dem
  157. Atari erheblich vermindern.
  158.  
  159. Zum Schlu₧
  160. ----------
  161. DTCOOKIE ist ein Freeware-Programm von Christoph Zwerschke. Die
  162. Benutzung geschieht auf eigene Gefahr. Alle Aussagen in obigem
  163. Text ohne Gewehr und Pistole.
  164.  
  165.                                          Heidelberg, den 26.1.1994
  166.