home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / lib4a86 / doc / datetime.doc < prev    next >
Text File  |  1992-02-02  |  11KB  |  295 lines

  1.   ─────────────────────────────────────────────────────────────────────────────
  2.   Dokumentation zur Datei: DATETIME.INC
  3.  
  4.   ─────────────────────────────────────────────────────────────────────────────
  5.    
  6.     DATETIME.INC - Routinen zur Zeit- und Datumbehandlung
  7.                    (für den Assembler A86)
  8.    
  9.                    (c) Bernd Schemmer 1990 - 1992
  10.                    Letzter Update: 02.02.1992
  11.    
  12.     ■ Beschreibung:
  13.     ---------------
  14.     Alle Routinen ermitteln die Uhrzeit und das Datum über die
  15.     Funktionen des DOS-Interrupts 21h.
  16.     Die Routinen benutzen das Register AX als Arbeitsregister.
  17.    
  18.    
  19.     ■ Variablen:
  20.     ------------
  21.     DATETIME stellt folgende Variablen zur Verfügung:
  22.    
  23.        Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag
  24.     und
  25.        Januar, Februar, Maerz, April, Mai, Juni, Juli,
  26.        August, September, Oktober, November, Dezember
  27.    
  28.     Alle genannten Variablen sind vom Typ String und enthalten den ent-
  29.     sprechenden Wochentags- bzw. Monatsnamen in Stringform.
  30.     ALLE Variablen sind READ-ONLY !!!
  31.    
  32.    
  33.     ■ Routinen:
  34.     -----------
  35.     StartTimer            - Startet die Stopuhr und speichert die Startzeit
  36.     StopTimer             - Beendet die Stopuhr und speichert die Stopzeit
  37.     Berechne_Laufzeit     - Berechnet die Laufzeit der Stopuhr und speichert
  38.                             die ermittelte Laufzeit
  39.     SetTime               - Setzt die Systemzeit
  40.     SetDate               - Setzt das Systemdatum
  41.     GetTime               - Ermittelt die Systemzeit
  42.     GetDate               - Ermittelt das Systemdatum
  43.     KonvertTime           - Konvertiert eine Zeitangabe in ein Stringformat
  44.     KonvertDate           - Konvertiert eine Datumsangabe in ein Stringformat
  45.    
  46.    
  47.     ■ Aufbau der Zeit-Tabelle
  48.    
  49.     Die Routinen StartTimer, StopTimer und Berechne_Laufzeit erwarten
  50.     in DS:BX einen Zeiger auf eine Tabelle mit folgendem Aufbau
  51.     (Länge = 12xD Byte):
  52.    
  53.                Offset |  Länge   | Inhalt
  54.               --------+----------+-----------------------
  55.                 0     |  1 Byte  |  Minuten der Startzeit
  56.                 1     |  1 Byte  |  Stunden der Startzeit
  57.                 2     |  1 Byte  |  Hundertstel der Startzeit
  58.                 3     |  1 Byte  |  Sekunden der Startzeit
  59.                       |          |
  60.                 4     |  1 Byte  |  Minuten der Endzeit
  61.                 5     |  1 Byte  |  Stunden der Endzeit
  62.                 6     |  1 Byte  |  Hundertstel der Endzeit
  63.                 7     |  1 Byte  |  Sekunden der Endzeit
  64.                       |          |
  65.                 8     |  1 Byte  |  Minuten der Laufzeit
  66.                 9     |  1 Byte  |  Stunden der Laufzeit
  67.                10     |  1 Byte  |  Hundertstel der Laufzeit
  68.                11     |  1 Byte  |  Sekunden der Laufzeit
  69.    
  70.     Die Tabelle wird von den Routinen StartTimer, StopTimer und
  71.     Berechne_Laufzeit gefüllt (d.h. die aufrufende Routine muß
  72.     nur den Speicherplatz bereitstellen.)
  73.    
  74.    
  75.     Definition der Tabelle
  76.    
  77.      ZeitTabelle STRUC [BX]
  78.        zeit1_s    DW               ; Puffer für die Startzeit (als Byte)
  79.        minuten_s  DB 0
  80.        stunden_s  DB 0
  81.        zeit2_s    DW
  82.        hunderts_s DB 0
  83.        sekunden_s DB 0
  84.  
  85.        zeit1_e    DW               ; Puffer für die Endzeit (als Byte)
  86.        minuten_e  DB 0
  87.        stunden_e  DB 0
  88.        zeit2_e    DW
  89.        hunderts_e DB 0
  90.        sekunden_e DB 0
  91.  
  92.        zeit1_l    DW               ; Puffer für die Laufzeit (als Byte)
  93.        minuten_l  DB 0                                       
  94.        stunden_l  DB 0
  95.        zeit2_l    DW
  96.        hunderts_l DB 0
  97.        sekunden_l DB 0
  98.                   ENDS
  99.    
  100.     ----------------------------
  101.     StartTimer
  102.    
  103.     Funktion:  Ermitteln der System-Zeit und speichern dieser in
  104.                der Zeit-Tabelle (->> Starten der Stopuhr)
  105.    
  106.     Eingabe:   DS:BX zeigt auf einen Puffer für die Zeit-Tabelle
  107.    
  108.                AL =  0FF ->> Keine String-Konvertierung der Startzeit
  109.                AL <> 0FF ->> String-Konvertierung der Startzeit
  110.                              ES:DI -> String-Puffer
  111.                              AL = 0 ->> String-Aufbau: HH:MM:SS:HH
  112.                              AL = 1 ->> String-Aufbau: HH:MM:SS
  113.                              AL = 2 ->> String-Aufbau: HH Uhr MM
  114.    
  115.                              AH <> 0 ->> Unterdrücke führende Nullen
  116.                              AH =  0 ->> Führende Nullen mit ausgeben
  117.    
  118.     ----------------------------
  119.     StopTimer
  120.    
  121.     Funktion:  Ermitteln der System-Zeit und speichern dieser in
  122.                der Zeit-Tabelle (->> Stoppen der Stopuhr)
  123.    
  124.     Eingabe:   DS:BX zeigt auf eine Zeit-Tabelle
  125.    
  126.                AL =  0FF ->> Keine String-Konvertierung der Stopzeit
  127.                AL <> 0FF ->> String-Konvertierung der Stopzeit
  128.                              ES:DI -> String-Puffer
  129.                              AL = 0 ->> String-Aufbau: HH:MM:SS:HH
  130.                              AL = 1 ->> String-Aufbau: HH:MM:SS
  131.                              AL = 2 ->> String-Aufbau: HH Uhr MM
  132.    
  133.                              AH <> 0 ->> Unterdrücke führende Nullen
  134.                              AH =  0 ->> Führende Nullen mit ausgeben
  135.    
  136.     ----------------------------
  137.     Berechne_Laufzeit
  138.    
  139.     Funktion:  Ermitteln der Laufzeit der Stopuhr und speichern
  140.                dieser in der Zeit-Tabelle
  141.    
  142.     Eingabe:   DS:BX -> von StartTimer und StopTimer gefüllte Zeit-Tabelle
  143.    
  144.                AL =  0FF ->> Keine String-Konvertierung der Laufzeit
  145.                AL <> 0FF ->> String-Konvertierung der Laufzeit
  146.                              ES:DI -> String-Puffer
  147.                              AL = 0 ->> String-Aufbau: HH:MM:SS:HH
  148.                              AL = 1 ->> String-Aufbau: HH:MM:SS
  149.                              AL = 2 ->> String-Aufbau: HH Uhr MM
  150.    
  151.                              AH <> 0 ->> Unterdrücke führende Nullen
  152.                              AH =  0 ->> Führende Nullen mit ausgeben
  153.    
  154.     Ausgabe:   CF = 0 ->> okay
  155.                           Laufzeit in der Tabelle berechnet
  156.                CF = 1 ->> Fehler
  157.                           Endzeit ist größer als die Startzeit
  158.                           Der Inhalt der Felder für die Laufzeit
  159.                           in der Tabelle ist undefiniert!
  160.    
  161.     Bes.:      Berücksichtigt keinen Tagesüberlauf
  162.                Falls die Felder für die Start- und die Endzeit in der
  163.                Zeit-Tabelle manuell gefüllt werden (also NICHT durch
  164.                einen Aufruf von Starttimer und Stoptimer), kann mit
  165.                dieser Routine auch die Differenz zwischen zwei Zeiten
  166.                berechnet werden.
  167.    
  168.     ----------------------------
  169.     SetTime
  170.    
  171.     Funktion:  Setzen der Systemzeit
  172.    
  173.     Eingabe:   DS:SI -> String mit der Zeit
  174.                         Format: HH:MM{:SS{:HH}}
  175.                                 jeweils mit führenden Nullen und beliebigen
  176.                                 Trennzeichen, die Voreinstellung für die
  177.                                 Sekunden und Hundertstel Sekunden ist 0
  178.    
  179.     Ausgabe:   CF = 1  ->> Fehler aufgetreten
  180.                CF = 0  ->> okay
  181.    
  182.     Bes.:      Überprüft wird nur, ob die Stunden, Minuten, Sekunden und
  183.                Hundertstel Sekunden im korrektem Intervall liegen
  184.                Die Routine prüft anhand der Länge des Strings, ob die
  185.                Sekunden und Hundertstel Sekunden angegeben sind oder nicht.
  186.    
  187.     ----------------------------
  188.     SetDate
  189.    
  190.     Funktion:  Setzen des Systemdatums
  191.    
  192.     Eingabe:   DS:SI -> String mit dem Datum
  193.    
  194.                          String-Aufbau: TT.MM.JJJJ
  195.                          oder:            TT.MM.JJ
  196.                          Jeweils mit führenden Nullen und beliebigen Trenn-
  197.                          zeichen. Die Voreinstellung für das Jahrhundert ist
  198.                          1900.
  199.    
  200.     Ausgabe:   CF = 1  ->> Fehler aufgetreten
  201.                CF = 0  ->> okay
  202.    
  203.     Bes.:      Überprüft wird nur, ob der Tag im Bereich 0..31, der
  204.                Monat im Bereich 0..12 und das Jahr größer als
  205.                1980 ist. Die Routine überprüft anhand der Länge des
  206.                Strings, ob das Jahr als 19JJ oder JJ angegeben ist.
  207.    
  208.     ----------------------------
  209.     KonvertDate
  210.    
  211.     Funktion:  Konvertiert ein Datum zu einen String
  212.    
  213.     Eingabe:   ES:DI -> String-Puffer für das Datum
  214.                DL = Tag
  215.                DH = Monat
  216.                CX = Jahr
  217.    
  218.                AL =  0 ->> String-Aufbau: TT.MM.JJ
  219.                AL <> 0 ->> String-Aufbau: TT.MM.JJJJ
  220.    
  221.                AH <> 0 ->> Unterdrücke führende Nullen
  222.                AH =  0 ->> Führende Nullen mit ausgeben
  223.    
  224.     Bes.:      Das Datum wird nicht überprüft.
  225.    
  226.     ----------------------------
  227.     GetDate
  228.    
  229.     Funktion:  Ermittelt das Systemdatum und legt es als String ab
  230.    
  231.     Eingabe:   ES:DI -> String-Puffer für das Datum
  232.    
  233.                AL = 0 ->> String-Aufbau: TT.MM.JJ
  234.                AL = 1 ->> String-Aufbau: TT.MM.JJJJ
  235.                AL = 2 ->> String-Aufbau: tag_name, der TT.MM.JJJJ
  236.                AL = 3 ->> String-Aufbau: tag_name, der TT. monat_name JJJJ
  237.    
  238.                AH <> 0 ->> Unterdrücke führende Nullen
  239.                AH =  0 ->> Führende Nullen mit ausgeben
  240.    
  241.     Sonntag    DB 7xD, 'Sonntag'          ; Wochentage
  242.     Montag     DB 6xD, 'Montag'
  243.     Dienstag   DB 8xD, 'Dienstag'
  244.     Mittwoch   DB 8xD, 'Mittwoch'
  245.     Donnerstag DB 10xD,'Donnerstag'
  246.     Freitag    DB 7xD, 'Freitag'
  247.     Samstag    DB 7xD, 'Samstag'
  248.    
  249.     Januar     DB 6xD,'Januar'            ; Monatsnamen
  250.     Februar    DB 7xD,'Februar'
  251.     Maerz      DB 4xD,'März'
  252.     April      DB 5xD,'April'
  253.     Mai        DB 3xD,'Mai'
  254.     Juni       DB 4xD,'Juni'
  255.     Juli       DB 4xD,'Juli'
  256.     August     DB 6xD,'August'
  257.     September  DB 9xD,'September'
  258.     Oktober    DB 7xD,'Oktober'
  259.     November   DB 8xD,'November'
  260.     Dezember   DB 8xD,'Dezember'
  261.    
  262.     ----------------------------
  263.     KonvertTime
  264.    
  265.     Funktion:  Konvertiert eine Zeitangabe in ein Stringformat
  266.    
  267.     Eingabe:   ES:DI -> String-Puffer für die Zeit
  268.                CH = Stunden
  269.                CL = Minuten
  270.                DH = Sekunden
  271.                DL = Hundertstel Sekunden
  272.                AL = 0 ->> String-Aufbau: HH:MM:SS:HH
  273.                AL = 1 ->> String-Aufbau: HH:MM:SS
  274.                AL = 2 ->> String-Aufbau: HH Uhr MM
  275.    
  276.                AH <> 0 ->> Unterdrücke führende Nullen
  277.                AH =  0 ->> Führende Nullen mit ausgeben
  278.    
  279.     Bes.:      Die Zeitangabe wird nicht überprüft.
  280.    
  281.     ----------------------------
  282.     GetTime
  283.    
  284.     Funktion:  Ermittelt das Systemdatum und legt es als String ab
  285.    
  286.     Eingabe:   ES:DI -> String-Puffer für die Zeit
  287.    
  288.                AL = 0 ->> String-Aufbau: HH:MM:SS:HH
  289.                AL = 1 ->> String-Aufbau: HH:MM:SS
  290.                AL = 2 ->> String-Aufbau: HH Uhr MM
  291.    
  292.                AH <> 0 ->> Unterdrücke führende Nullen
  293.                AH =  0 ->> Führende Nullen mit ausgeben
  294.    
  295.