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 >
Wrap
Text File
|
1989-01-19
|
15KB
|
200 lines
(*
-------------------------------------------------------------------------------
@@@@@@@@@@@@@@@@@@@@*) DEFINITION MODULE DateIO; (*@@@@@@@@@@@@@@@@@@@@@@@@
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
| Kurzbeschreibung | formatierte Ausgabe von Datum und Zeit |
| | formatfreie Eingabe von Datum und Zeit |
---------------------+---------------------------------------------------------
| Programm - Version | 1.0 | Text - Version | V#001 |
---------------------+--------+-------------------------+----------------------
| Modulholder | WS | Urversion | WS | Januar 89 |
---------------------+---------------------------------------------------------
| System - Version | OS-9, Miele-Modula-2 3.5 |
---------------------+---------------------------------------------------------
| Copyright | Freigegeben fuer nichtkommerzielle Nutzung |
| | durch Teilnehmer am EFFO |
---------------------+---------------------------------------------------------
| Hardware | GEPARD 68010, 1 MByte RAM, 80Zeichen-Textkarte |
---------------------+---------------------------------------------------------
| besondere Importe | |
---------------------+---------------------------------------------------------
| Autoren | WS | Werner Stehling, Seilerwis 3, |
| | | CH-8606 Greifensee, Tel. 01/256 42 21 |
---------------------+---------------------------------------------------------
| U P D A T E S | |
---------------------- |
| Datum Version Autor Bemerkungen |
| -------- ------- ----- ----------- |
| |
-------------------------------------------------------------------------------
| Modul-Beschreibung | |
---------------------- |
| form ist ein String, der das Ausgabeformat festlegt. Er wird |
| als Geruest fuer die Ausgabe verwendet, wobei alle Zeichen bis auf |
| einige Kombinationen unveraendert uebernommen werden. Die speziellen |
| Zeichenfolgen werden dabei durch die angegebeben Datums- oder Zeit- |
| informationen ersetzt. Folgende Moeglichkeiten sind fuer das Datum |
| vorgesehen: |
| |
| y2 : zweistellige Jahreszahl |
| y4 : vierstellige Jahreszahl |
| |
| m2 : zweistellige Monatszahl |
| m3 : dreistelliger Monatsname |
| mv : voller Monatsname |
| |
| d2 : zweistellige Tageszahl |
| w3 : dreistelliger Wochentag |
| wv : voller Wochentag |
| |
| Beispiel: der Formatstring 'Zuerich, wv den d2. mv y2' ergibt |
| Zuerich, Freitag den 13. Januar 89 |
| (das ist so etwas wie 'Print Using' in der Sprache, die wir alle kennen) |
| |
| Fuer die Zeitinformation sind folgende Formate zulaessig: |
| |
| h12 : Stunde im 12-Stunden Format |
| h24 : Stunde im 24-Stunden Format |
| apm : am/pm beim 12-Stunden Format, wird bei h24 ignoriert |
| |
| min : Minuten |
| sec : Sekunden |
| |
| Die Kodierung von date und time ist im Gregorianischen Format von OS-9 |
| (siehe F$Time): |
| |
| Byte date time |
| --------------------------------------------- |
| 3 (year 00 |
| 2 (year CARDINAL hour (0..23) |
| 1 month (1..12) minute (0..59) |
| 0 day (1..31) second (0..59) |
| |
| Wochentage und Monatsnamen koennen in 4 verschiedenen Sprachen ausgegeben |
| werden. Dabei besteht die Wahl zwischen dem ganzen Wort (Format mv / wv), |
| oder einer dreistelligen Abkuerzung (m3 / w3). |
| |
| language weekday |
| --------------------------------------------- |
| 0 Deutsch Sonntag |
| 1 Englisch Montag |
| 2 Franzoesisch Dienstag |
| 3 Italienisch Mittwoch |
| 4 Donnerstag |
| 5 Freitag |
| 6 Samstag |
| |
| Der Parameter space wird in der gleichen Bedeutung verwendet, wie bei den |
| Prozeduren des Moduls AreaIO (tatsaechlich wird die Prozedur WriteStr von |
| dort benutzt). |
| |
| Bei den Read-Prozeduren dient der Parameter form zwei Zwecken: er gibt |
| analog zu den Write-Prozeduren das Format fuer den Vorschlagswert an, |
| andererseits legen die reservierten Begriffe fuer die Datums- und Zeit- |
| informationen aber auch Zahl und Reihenfolge der Parameter fest. Die |
| eigentliche Eingabe kann dann in nahezu beliebigem freien Format erfolgen. |
| Beispiel: |
| der Formatstring 'heute ist der d2.m2.y4' schlaegt z.B. vor: |
| heute ist der 13. 1.1989 Folgende Strings werden dann bei der |
| Eingabe akzeptiert: |
| 24 Februar 88 |
| nein, 11.ter okt 1643 |
| |
| Die Eingabe wird erst verlassen, wenn alle Parameter richtig eingegeben |
| wurden. Der Monat kann als Zahl, dreistellige Abkuerzung oder mit vollem |
| Namen angegeben werden. Allerdings wird nur die angegebene Sprache |
| akzeptiert. Gross- oder Kleinschreibung wird nicht unterschieden. |
| Falls im Formatstring z.B. keine Tagesangabe vorgesehen war, wird der |
| Tag des Vorschlagsdatums beibehalten. Wurde z.B. der 31.1. auf Februar |
| geaendert, wird der letzte Tag des Februar zurueckgegeben. Schaltjahre |
| werden beruecksichtigt. |
| |
| Die Jahreszahl kann entweder vollstaendig oder mit ihren letzten zwei |
| Stellen eingegeben werden. Die Konstante shortyear entscheidet ueber das |
| zugehoerige Jahrhundert: 0..shortyear: 2000; shortyear..99: 1900. Deshalb |
| sind diese Prozeduren fuer Jahreszahlen 0..99 nicht ohne weiteres geeignet.|
| Negative Jahreszahlen werden nicht unterstuetzt. |
| |
| Wie bei den Prozeduren aus AreaIO geben die Read-Prozeduren als Funktions- |
| wert das Zeichen zurueck, mit dem die Routine verlassen wurde. Es stehen |
| die Editiermoeglichkeiten aus AreaIO zur Verfuegung. |
| |
| Die maximale Laenge des Outputs ist als maxstr im Implementation Teil |
| festgelegt. |
| |
| |
| W A R N U N G : |
| =============== |
| Die Ein- und Ausgabeprozeduren dieses Moduls und darauf aufbauender Module |
| duerfen nur gemeinsam mit den I/O-Prozeduren aus Area und AreaIO verwendet |
| werden, da ueber den Bildschirm-Inhalt und die Cursorpositionen separat |
| Buch gefuehrt wird. |
-------------------------------------------------------------------------------
*)
FROM SYSTEM IMPORT ADDRESS;
EXPORT QUALIFIED JulToGreg, DateStr, TimeStr, Weekday,
WriteDate, WriteToday, WriteTime, WriteNow,
ReadDate, ReadToday, ReadTime, ReadNow;
(*==========================================================================*)
(**** Konversions-Prozeduren ****)
(*==========================================================================*)
(*--------------------------------------------------------------------------*)
PROCEDURE JulToGreg (VAR time, date : ADDRESS; sec, juldate : ADDRESS);
(* die in OS-9 fehlende Umwandlung vom Julianischen ins *)
(* Gregorianische Datum *)
(* Achtung: die OS-9 Prozedur F$Julian geht um einen Tag nach. *)
(* JulToGreg verwendet ebenfalls dieses falsche Julianische Datum. *)
(*--------------------------------------------------------------------------*)
PROCEDURE DateStr (VAR form, s : ARRAY OF CHAR; date : ADDRESS;
language : CARDINAL);
(* wandelt date mit Hilfe von form in s *)
(*--------------------------------------------------------------------------*)
PROCEDURE TimeStr (VAR form, s : ARRAY OF CHAR; time : ADDRESS);
(* wandelt time mit Hilfe von form in s *)
(*--------------------------------------------------------------------------*)
PROCEDURE Weekday (date : ADDRESS) : CARDINAL;
(* berechnet den Wochentag fuer date, 0 = Sonntag *)
(*==========================================================================*)
(**** Ausgabe-Prozeduren ****)
(*==========================================================================*)
(*--------------------------------------------------------------------------*)
PROCEDURE WriteDate (VAR form : ARRAY OF CHAR; date : ADDRESS;
language : CARDINAL; space : INTEGER);
(*--------------------------------------------------------------------------*)
PROCEDURE WriteToday (VAR form : ARRAY OF CHAR;
language : CARDINAL; space : INTEGER);
(* wie WriteDate, das gegenwaertige Datum wird ausgegeben *)
(*--------------------------------------------------------------------------*)
PROCEDURE WriteTime (VAR form : ARRAY OF CHAR; time : ADDRESS;
space : INTEGER);
(*--------------------------------------------------------------------------*)
PROCEDURE WriteNow (VAR form : ARRAY OF CHAR; space : INTEGER);
(* wie WriteTime, die gegenwaertige Systemzeit wird ausgegeben *)
(*==========================================================================*)
(**** Eingabe-Prozeduren ****)
(*==========================================================================*)
PROCEDURE ReadDate (VAR form : ARRAY OF CHAR; VAR date : ADDRESS;
language : CARDINAL; space : INTEGER) : CHAR;
(*--------------------------------------------------------------------------*)
PROCEDURE ReadToday (VAR form : ARRAY OF CHAR; VAR date : ADDRESS;
language : CARDINAL; space : INTEGER) : CHAR;
(*--------------------------------------------------------------------------*)
PROCEDURE ReadTime (VAR form : ARRAY OF CHAR; VAR time : ADDRESS;
space : INTEGER) : CHAR;
(*--------------------------------------------------------------------------*)
PROCEDURE ReadNow (VAR form : ARRAY OF CHAR; VAR time : ADDRESS;
space : INTEGER) : CHAR;
(*--------------------------------------------------------------------------*)
END DateIO.