home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / EFFO / forum8.lzh / PROGRAMME / MODULA / WINDOW / dateio.def < prev    next >
Text File  |  1989-01-19  |  15KB  |  200 lines

  1. (*
  2. -------------------------------------------------------------------------------
  3. @@@@@@@@@@@@@@@@@@@@*)  DEFINITION  MODULE  DateIO;  (*@@@@@@@@@@@@@@@@@@@@@@@@
  4. -------------------------------------------------------------------------------
  5. -------------------------------------------------------------------------------
  6. | Kurzbeschreibung   | formatierte Ausgabe von Datum und Zeit                 |
  7. |                    | formatfreie Eingabe von Datum und Zeit                 |
  8. ---------------------+---------------------------------------------------------
  9. | Programm - Version |  1.0   |   Text - Version        |   V#001             |
  10. ---------------------+--------+-------------------------+----------------------
  11. | Modulholder        |  WS    |   Urversion     |  WS   |   Januar 89         |
  12. ---------------------+---------------------------------------------------------
  13. | System - Version   | OS-9, Miele-Modula-2 3.5                               |
  14. ---------------------+---------------------------------------------------------
  15. | Copyright          | Freigegeben fuer nichtkommerzielle Nutzung             |
  16. |                    |  durch Teilnehmer am EFFO                              |
  17. ---------------------+---------------------------------------------------------
  18. | Hardware           | GEPARD 68010, 1 MByte RAM, 80Zeichen-Textkarte         |
  19. ---------------------+---------------------------------------------------------
  20. | besondere Importe  |                                                        |
  21. ---------------------+---------------------------------------------------------
  22. | Autoren            |  WS    | Werner Stehling, Seilerwis 3,                 |
  23. |                    |        | CH-8606 Greifensee, Tel. 01/256 42 21         |
  24. ---------------------+---------------------------------------------------------
  25. |   U P D A T E S    |                                                        |
  26. ----------------------                                                        |
  27. |   Datum   Version  Autor  Bemerkungen                                       |
  28. | --------  -------  -----  -----------                                       |
  29. |                                                                             |
  30. -------------------------------------------------------------------------------
  31. | Modul-Beschreibung |                                                        |
  32. ----------------------                                                        |
  33. |  form ist ein String, der das Ausgabeformat festlegt. Er wird               |
  34. |  als Geruest fuer die Ausgabe verwendet, wobei alle Zeichen bis auf         |
  35. |  einige Kombinationen unveraendert uebernommen werden. Die speziellen       |
  36. |  Zeichenfolgen werden dabei durch die angegebeben Datums- oder Zeit-        |
  37. |  informationen ersetzt. Folgende Moeglichkeiten sind fuer das Datum         |
  38. |  vorgesehen:                                                                |
  39. |                                                                             |
  40. |  y2       : zweistellige Jahreszahl                                         |
  41. |  y4       : vierstellige Jahreszahl                                         |
  42. |                                                                             |
  43. |  m2       : zweistellige Monatszahl                                         |
  44. |  m3       : dreistelliger Monatsname                                        |
  45. |  mv       : voller Monatsname                                               |
  46. |                                                                             |
  47. |  d2       : zweistellige Tageszahl                                          |
  48. |  w3       : dreistelliger Wochentag                                         |
  49. |  wv       : voller Wochentag                                                |
  50. |                                                                             |
  51. |  Beispiel: der Formatstring 'Zuerich, wv den d2. mv y2' ergibt              |
  52. |    Zuerich, Freitag den 13. Januar 89                                       |
  53. |  (das ist so etwas wie 'Print Using' in der Sprache, die wir alle kennen)   |
  54. |                                                                             |
  55. |  Fuer die Zeitinformation sind folgende Formate zulaessig:                  |
  56. |                                                                             |
  57. |  h12      : Stunde im 12-Stunden Format                                     |
  58. |  h24      : Stunde im 24-Stunden Format                                     |
  59. |  apm      : am/pm beim 12-Stunden Format, wird bei h24 ignoriert            |
  60. |                                                                             |
  61. |  min      : Minuten                                                         |
  62. |  sec      : Sekunden                                                        |
  63. |                                                                             |
  64. |  Die Kodierung von date und time ist im Gregorianischen Format von OS-9     |
  65. |  (siehe F$Time):                                                            |
  66. |                                                                             |
  67. |     Byte        date            time                                        |
  68. |    ---------------------------------------------                            |
  69. |      3         (year             00                                         |
  70. |      2         (year CARDINAL   hour (0..23)                                |
  71. |      1          month (1..12)   minute (0..59)                              |
  72. |      0          day (1..31)     second (0..59)                              |
  73. |                                                                             |
  74. |  Wochentage und Monatsnamen koennen in 4 verschiedenen Sprachen ausgegeben  |
  75. |  werden. Dabei besteht die Wahl zwischen dem ganzen Wort (Format mv / wv),  |
  76. |  oder einer dreistelligen Abkuerzung (m3 / w3).                             |
  77. |                                                                             |
  78. |                 language        weekday                                     |
  79. |    ---------------------------------------------                            |
  80. |      0          Deutsch         Sonntag                                     |
  81. |      1          Englisch        Montag                                      |
  82. |      2          Franzoesisch    Dienstag                                    |
  83. |      3          Italienisch     Mittwoch                                    |
  84. |      4                          Donnerstag                                  |
  85. |      5                          Freitag                                     |
  86. |      6                          Samstag                                     |
  87. |                                                                             |
  88. |  Der Parameter space wird in der gleichen Bedeutung verwendet, wie bei den  |
  89. |  Prozeduren des Moduls AreaIO (tatsaechlich wird die Prozedur WriteStr von  |
  90. |  dort benutzt).                                                             |
  91. |                                                                             |
  92. |  Bei den Read-Prozeduren dient der Parameter form zwei Zwecken: er gibt     |
  93. |  analog zu den Write-Prozeduren das Format fuer den Vorschlagswert an,      |
  94. |  andererseits legen die reservierten Begriffe fuer die Datums- und Zeit-    |
  95. |  informationen aber auch Zahl und Reihenfolge der Parameter fest. Die       |
  96. |  eigentliche Eingabe kann dann in nahezu beliebigem freien Format erfolgen. |
  97. |  Beispiel:                                                                  |
  98. |     der Formatstring   'heute ist der d2.m2.y4'   schlaegt z.B. vor:        |
  99. |     heute ist der 13. 1.1989           Folgende Strings werden dann bei der |
  100. |                                        Eingabe akzeptiert:                  |
  101. |     24 Februar 88                                                           |
  102. |     nein, 11.ter okt 1643                                                   |
  103. |                                                                             |
  104. |  Die Eingabe wird erst verlassen, wenn alle Parameter richtig eingegeben    |
  105. |  wurden. Der Monat kann als Zahl, dreistellige Abkuerzung oder mit vollem   |
  106. |  Namen angegeben werden. Allerdings wird nur die angegebene Sprache         |
  107. |  akzeptiert. Gross- oder Kleinschreibung wird nicht unterschieden.          |
  108. |  Falls im Formatstring z.B. keine Tagesangabe vorgesehen war, wird der      |
  109. |  Tag des Vorschlagsdatums beibehalten. Wurde z.B. der 31.1. auf Februar     |
  110. |  geaendert, wird der letzte Tag des Februar zurueckgegeben. Schaltjahre     |
  111. |  werden beruecksichtigt.                                                    |
  112. |                                                                             |
  113. |  Die Jahreszahl kann entweder vollstaendig oder mit ihren letzten zwei      |
  114. |  Stellen eingegeben werden. Die Konstante shortyear entscheidet ueber das   |
  115. |  zugehoerige Jahrhundert: 0..shortyear: 2000; shortyear..99: 1900. Deshalb  |
  116. |  sind diese Prozeduren fuer Jahreszahlen 0..99 nicht ohne weiteres geeignet.|
  117. |  Negative Jahreszahlen werden nicht unterstuetzt.                           |
  118. |                                                                             |
  119. |  Wie bei den Prozeduren aus AreaIO geben die Read-Prozeduren als Funktions- |
  120. |  wert das Zeichen zurueck, mit dem die Routine verlassen wurde. Es stehen   |
  121. |  die Editiermoeglichkeiten aus AreaIO zur Verfuegung.                       |
  122. |                                                                             |
  123. |  Die maximale Laenge des Outputs ist als maxstr im Implementation Teil      |
  124. |  festgelegt.                                                                |
  125. |                                                                             |
  126. |                                                                             |
  127. | W A R N U N G :                                                             |
  128. | ===============                                                             |
  129. | Die Ein- und Ausgabeprozeduren dieses Moduls und darauf aufbauender Module  |
  130. | duerfen nur gemeinsam mit den I/O-Prozeduren aus Area und AreaIO verwendet  |
  131. | werden, da ueber den Bildschirm-Inhalt und die Cursorpositionen separat     |
  132. | Buch gefuehrt wird.                                                         |
  133. -------------------------------------------------------------------------------
  134. *)
  135.  
  136. FROM  SYSTEM    IMPORT  ADDRESS;
  137.  
  138. EXPORT  QUALIFIED       JulToGreg, DateStr, TimeStr, Weekday,
  139.                         WriteDate, WriteToday, WriteTime, WriteNow,
  140.                         ReadDate, ReadToday, ReadTime, ReadNow;
  141.  
  142. (*==========================================================================*)
  143. (****   Konversions-Prozeduren                                           ****)
  144. (*==========================================================================*)
  145. (*--------------------------------------------------------------------------*)
  146.    PROCEDURE  JulToGreg (VAR time, date : ADDRESS; sec, juldate : ADDRESS);
  147.  
  148. (*                  die in OS-9 fehlende Umwandlung vom Julianischen ins    *)
  149. (*                  Gregorianische Datum                                    *) 
  150. (* Achtung: die OS-9 Prozedur F$Julian geht um einen Tag nach.              *)
  151. (*          JulToGreg verwendet ebenfalls dieses falsche Julianische Datum. *)
  152. (*--------------------------------------------------------------------------*)
  153.    PROCEDURE  DateStr (VAR form, s : ARRAY OF CHAR; date : ADDRESS;
  154.                                                 language : CARDINAL);
  155.  
  156. (*                  wandelt date mit Hilfe von form in s                    *)
  157. (*--------------------------------------------------------------------------*)
  158.    PROCEDURE  TimeStr (VAR form, s : ARRAY OF CHAR; time : ADDRESS);
  159.  
  160. (*                  wandelt time mit Hilfe von form in s                    *)
  161. (*--------------------------------------------------------------------------*)
  162.    PROCEDURE  Weekday (date : ADDRESS) : CARDINAL;
  163. (*                  berechnet den Wochentag fuer date, 0 = Sonntag          *)
  164.  
  165. (*==========================================================================*)
  166. (****   Ausgabe-Prozeduren                                               ****)
  167. (*==========================================================================*)
  168. (*--------------------------------------------------------------------------*)
  169.    PROCEDURE  WriteDate (VAR form : ARRAY OF CHAR; date : ADDRESS;
  170.                              language : CARDINAL; space : INTEGER);
  171. (*--------------------------------------------------------------------------*)
  172.    PROCEDURE  WriteToday (VAR form : ARRAY OF CHAR; 
  173.                               language : CARDINAL; space : INTEGER);
  174.  
  175. (*                   wie WriteDate, das gegenwaertige Datum wird ausgegeben *)
  176. (*--------------------------------------------------------------------------*)
  177.    PROCEDURE  WriteTime (VAR form : ARRAY OF CHAR; time : ADDRESS;
  178.                                                        space : INTEGER);
  179. (*--------------------------------------------------------------------------*)
  180.    PROCEDURE  WriteNow (VAR form : ARRAY OF CHAR; space : INTEGER);
  181.  
  182. (*              wie WriteTime, die gegenwaertige Systemzeit wird ausgegeben *)
  183. (*==========================================================================*)
  184. (****   Eingabe-Prozeduren                                               ****)
  185. (*==========================================================================*)
  186.    PROCEDURE  ReadDate (VAR form : ARRAY OF CHAR; VAR date : ADDRESS;
  187.                                 language : CARDINAL; space : INTEGER) : CHAR;
  188. (*--------------------------------------------------------------------------*)
  189.    PROCEDURE  ReadToday (VAR form : ARRAY OF CHAR; VAR date : ADDRESS;
  190.                                  language : CARDINAL; space : INTEGER) : CHAR;
  191. (*--------------------------------------------------------------------------*)
  192.    PROCEDURE  ReadTime (VAR form : ARRAY OF CHAR; VAR time : ADDRESS;
  193.                                                      space : INTEGER) : CHAR;
  194. (*--------------------------------------------------------------------------*)
  195.    PROCEDURE  ReadNow (VAR form : ARRAY OF CHAR; VAR time : ADDRESS;
  196.                                                     space : INTEGER) : CHAR;
  197. (*--------------------------------------------------------------------------*)
  198.  
  199. END  DateIO.
  200.