home *** CD-ROM | disk | FTP | other *** search
- ; ----------------------------
- ; DATETIME.DEM - Demoprogramm für die Routinen aus DATETIME.LIB
- ; (für den A86)
- ;
- ; (c) Bernd Schemmer 1990 - 1992
- ; Letzter Update: 15.02.1992
- ;
- ; Übersetzen:
- ; A86 DATETIME.DEM DEMOS.INC TO DATETIME.COM
- ;
- ; Hinweis: Die Environment-Variable 'A86' muß den Dateinamen 'MACROS.MAC'
- ; enthalten und die .LIB-Dateien müssen über die Datei A86.LIB
- ; erreichbar sein.
- ;
- ; ---------------------------
-
- jmp start ; Daten überspringen
-
- logo db CR,LF
- db 'DATETIME.DEM - Demoprogramm für die Routinen aus DATETIME.LIB'
- db CR,LF
- db '--------------------------------------------------------------'
- db CR,LF
- db CR,LF
- GETLENGTH logo
-
- ; --------
- ; Daten
- ;
- TimeTable db 12 dup (0) ; Definition der Zeit-Tabelle für die Stopuhr-
- ; routinen
-
- start:
- call ShowLogo ; Logo ausgeben und Speicherblock verkleinern
-
- call Starte_StopUhr ; Stopuhr starten ...
-
- call Ermittle_Datum ; akt. Datum ermitteln
-
- call Ermittle_Zeit ; akt. Zeit ermitteln
-
- call Setze_Datum ; neues Datum setzen
-
- call Setze_Zeit ; neue Zeit setzen
-
- Ende:
- call Stoppe_StopUhr ; Stopuhr stoppen
-
- EndProcess 0
-
- ; ----------------------------
- ; Setze_Datum
- ;
- ; Funktion: Setzen des Datums
- ;
- msg5 db CR,LF
- db 'Bitte geben Sie das neue Datum ein (Form: TT.MM.JJ{JJ})'
- db CR,LF
- db '(<RETURN> -> nicht ändern): '
- GETLENGTH msg5
-
- error2 db 'Fehler: Eingegebenes Datum hat falsches Format!'
- db CR,LF
- db 'Nochmal versuchen?'
- GETLENGTH error2
-
- puffer2 db 255,256 dup 0 ; Puffer für das neue Datum
-
- Setze_Datum:
- WRITE_STRING msg5
- ; Neues Datum lesen
- mov dx,offset puffer2
- mov ah,0AH
- int 021h
- call ShowCR_LF
-
- mov al,b puffer2+1 ; AL = Anzahl eingegebener Zeichen
- or al,al
- je >l1 ; nur RETURN gedrückt
-
- ; neues Datum setzen
- mov si,offset puffer2+1
- ; DS:SI zeigt auf das eingegebene Datum
- ; als String!
-
- call SetDate
- jnc >l0
- ; Format-Fehler!
- WRITE_STRING error2
- mov ah,08
- int 021h
- call ShowCR_LF
- ; Neuer Versuch ?
- cmp al,'J'
- IF e jmp Setze_Datum
-
- cmp al,'j'
- if e jmp Setze_Datum
- cmp al,CR
- if e jmp Setze_Datum
- l0:
- call Ermittle_Datum ; und akt. Datum nochmal ausgeben
- l1:
- ret
-
- ; ----------------------------
- ; Setze_Zeit
- ;
- ; Funktion: Setzen der Zeit
- ;
- msg4 db CR,LF
- db 'Bitte geben Sie die neue Zeit ein (Form: HH.MM.SS{:HH})'
- db CR,LF
- db '(<RETURN> -> nicht ändern): '
- GETLENGTH msg4
-
- error1 db 'Fehler: Eingegebene Zeit hat falsches Format!'
- db CR,LF
- db 'Nochmal versuchen?'
- GETLENGTH error1
-
- puffer1 db 255,256 dup 0 ; Puffer für die neue Zeit
-
- Setze_Zeit:
- WRITE_STRING msg4
- ; Neue Zeit lesen
- mov dx,offset puffer1
- mov ah,0AH
- int 021h
- call ShowCR_LF
-
- mov al,b puffer1+1 ; AL = Anzahl eingegebener Zeichen
- or al,al
- je >l1 ; nur RETURN gedrückt
-
- ; neue Zeit setzen
- mov si,offset puffer1+1
- ; DS:SI zeigt auf die eingegebene Zeit
- ; als String!
- call SetTime
- jnc >l0
- ; Format-Fehler!
- WRITE_STRING error1
- mov ah,08
- int 021h
- call ShowCR_LF
- ; Neuer Versuch ?
- cmp al,'J'
- IF e jmp Setze_Zeit
- cmp al,'j'
- if e jmp Setze_Zeit
- cmp al,CR
- if e jmp Setze_Zeit
- l0:
- call Ermittle_Zeit ; und akt. Zeit nochmal ausgeben
- l1:
- ret
-
- ; ----------------------------
- ; Ermittle_Datum
- ;
- ; Funktion: Ermittelt das akt. Datum
- ;
- msg2 db CR,LF
- db 'Das aktuelle Datum ist'
- _date1 db ' '
- db CR,LF
- db 'oder in anderer Form: '
- _date2 db ' '
- db CR,LF
- db 'oder in anderer Form: '
- _date3 db ' '
- db CR,LF
- db 'oder in anderer Form: '
- _date4 db ' '
- db CR,LF
- GETLENGTH msg2
-
- Ermittle_Datum:
- mov ax,2020h ; Zuerst altes Datum in den Meldungen ausblanken
- mov cx,23xD
- mov di,offset _date1
- push cx
- rep stosw
- pop cx
- mov di,offset _date2
- push cx
- rep stosw
- pop cx
- mov di,offset _date3
- push cx
- rep stosw
- pop cx
- mov di,offset _date4
- push cx
- rep stosw
- pop cx
-
- ; Datum ermitteln in allen 4 Formen
- mov al,_date1
- push ax ; Byte für Längenzähler sichern
- mov di,offset _date1
- mov ax,0
- call GetDate
- pop ax
- mov _date1,al ; Längenzähler überschreiben
-
- mov al,_date2
- push ax ; Byte für Längenzähler sichern
- mov di,offset _date2
- mov ax,1
- call GetDate
- pop ax
- mov _date2,al ; Längenzähler überschreiben
-
- mov al,_date3
- push ax ; Byte für Längenzähler sichern
- mov di,offset _date3
- mov ax,2
- call GetDate
- pop ax
- mov _date3,al ; Längenzähler überschreiben
-
- mov al,_date4
- push ax ; Byte für Längenzähler sichern
- mov di,offset _date4
- mov ax,3
- call GetDate
- pop ax
- mov _date4,al ; Längenzähler überschreiben
- ; und Maske ausgeben
- WRITE_STRING msg2
- ret
-
- ; ----------------------------
- ; Ermittle_Zeit
- ;
- ; Funktion: Ermittelt die akt. Zeit
- ;
- msg3 db CR,LF
- db 'Die aktuelle Zeit ist'
- _time4 db ' '
- db CR,LF
- db 'oder in anderer Form: '
- _time5 db ' '
- db CR,LF
- db 'oder in anderer Form: '
- _time6 db ' '
- db CR,LF
- GETLENGTH msg3
-
- Ermittle_Zeit: ; Zuerst alte Zeit in den Meldungen ausblanken
- mov ax,2020h
- mov cx,23xD
- mov di,offset _time4
- push cx
- rep stosw
- pop cx
- mov di,offset _time5
- push cx
- rep stosw
- pop cx
- mov di,offset _time6
- push cx
- rep stosw
- pop cx
- ; Zeit ermitteln in allen 3 Formen
- mov al,_time4
- push ax ; Byte für Längenzähler sichern
- mov di,offset _time4
- mov ax,0
- call GetTime
- pop ax
- mov _time4,al ; Längenzähler überschreiben
-
- mov al,_time5
- push ax ; Byte für Längenzähler sichern
- mov di,offset _time5
- mov ax,1
- call GetTime
- pop ax
- mov _time5,al ; Längenzähler überschreiben
-
- mov al,_time6
- push ax ; Byte für Längenzähler sichern
- mov di,offset _time6
- mov ax,2
- call GetTime
- pop ax
- mov _time6,al ; Längenzähler überschreiben
- ; und Maske ausgeben
- WRITE_STRING msg3
- ret
-
- ; ----------------------------
- ; Starte_StopUhr
- ;
- ; Funktion: Startet die Stopuhr und gibt die Startzeit aus
- ;
- msg0 db CR,LF
- db 'Zuerst die Stopuhr starten ... '
- db CR,LF
- GETLENGTH msg0
-
- msg00 db 'Stopuhr gestartet um'
- _time0 db ' __:__:__:__'
- db CR,LF
- GETLENGTH msg00
-
- Starte_StopUhr:
- WRITE_STRING msg0
- ; Stopuhr starten
- ; Routine soll die Startzeit bei ES:DI
- ; im Stringformat speichern
- mov al,_time0 ; Byte sichern, da der Längenzähler nicht
- ; benötigt wird!
- push ax
-
- mov bx,offset timetable
- mov di,offset _time0
- xor ax,ax
- call StartTimer
-
- pop ax
- mov _time0,al ; Längenzähler wieder überschreiben
-
- ; Startzeit anzeigen
- WRITE_STRING msg00
- ret
-
- ; ----------------------------
- ; Stoppe_StopUhr
- ;
- ; Funktion: Stopt die Stopuhr und gibt die Stop- und Laufzeit aus
- ;
- msg1 db CR,LF
- db 'Zum Schluß die Stopuhr stoppen ... '
- db CR,LF
- GETLENGTH msg1
-
- msg10 db 'Stopuhr gestopt um '
- _time1 db ' __:__:__:__'
- db CR,LF
- GETLENGTH msg10
-
- msg11 db '-----------------------------------'
- db CR,LF
- db 'Die Laufzeit beträgt'
- _time2 db ' __:__:__:__'
- db CR,LF
- GETLENGTH msg11
-
- msg12 db 'Die Laufzeit konnte nicht berechnet werden!'
- db CR,LF
- db 'Sehr wahrscheinlich haben Sie die Zeit verändert!'
- db CR,LF
- GETLENGTH msg12
-
-
- Stoppe_StopUhr:
- WRITE_STRING msg1
- ; Stopuhr stoppen
- ; Routine soll die Stoppzeit bei ES:DI
- ; im Stringformat speichern
-
- mov al,_time1 ; Byte sichern, da der Längenzähler nicht
- ; benötigt wird!
- push ax
-
- mov bx,offset timetable
- mov di,offset _time1
- xor ax,ax
- call StopTimer
-
- pop ax
- mov _time1,al ; Längenzähler wieder überschreiben
-
- ; nun die Laufzeit konvertieren
- mov al,_time2 ; Byte sichern, da der Längenzähler nicht
- ; benötigt wird!
- push ax
-
- mov bx,offset TimeTable
- mov di,offset _time2
- xor ax,ax
- call Berechne_Laufzeit
-
- pop ax
- mov _time2,al ; Längenzähler wieder überschreiben
-
- pushf ; Ergebnis von Berechne_Laufzeit sichern
- WRITE_STRING msg10 ; Stoppzeit ausgeben
- WRITE_STRING msg00 ; Startzeit nochmal ausgeben
- popf ; Laufzeit korrekt ermittelt?
- jnc >l1
-
- WRITE_STRING msg12 ; Laufzeit konnte nicht ermittelt werden
- ret
- l1:
- ; Laufzeit anzeigen
- WRITE_STRING msg11
- ret
-
-