Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

MSDOS 6.x Datum auslesen und in 3 variablen tag, monat, Jahr zuweisen

Frage Entwicklung Batch & Shell

Mitglied: flash4u

flash4u (Level 1) - Jetzt verbinden

22.06.2009, aktualisiert 11:39 Uhr, 8469 Aufrufe, 12 Kommentare

Hallo Gemeinde,
Konnte bisher leider mein alten msdos 6.2 überreden folgendes zu tun:
Dies habe ich aus diesem Forum:

set datum=%Date%
set tag=%Datum:~0,2%
set mon=%Datum:~3,2%
set jahr=%Datum:~8,2%
echo %tag%.%mon%.%jahr%

Im Dosbox vom XP geht es tadellos. Im reinen Dos 6.x geht es leider nicht.
Das aktuelle Datum konnte ich bereits in eine Datei mit folgenden Anweisung speichern:

ver | date >temp.txt

Wie kann ich nun aus der temp.txt die einzelnen Komponenten tag, monat, jahr auslesen und in entsprechenden variablen zuweisen ?
Diese Anweisung
set tag=%datum:~0,2%
geht auch nicht im MSDOS 6.x (im Dosbox XP : ja)

Hat jemand Tips für mich ?
Vielen herzlichen Dank für Euere Hilfe.
Mitglied: JoachimHD
22.06.2009 um 11:53 Uhr
Schreib dir doch ein kleines Tool was die die Daten zurück gibt !
Ich denke mit Bordmitteln geht das nicht !
Das war damals noch nicht implementiert denke ich !

Grüße Joachim
Bitte warten ..
Mitglied: flash4u
22.06.2009 um 12:03 Uhr
Danke für die schnelle Antwort.
Nun ja, so fit in Sachen Tool schreiben bin ich leider nicht.
Könntest Du bitte näher erläutern ?
herzlichen Dank.
Bitte warten ..
Mitglied: LotPings
22.06.2009 um 13:16 Uhr
Hallo flash4you,

Herbert Kleebauer hat das für Dos mit Hilfe von Ascii Assembler schon vor langer Zeit gelöst.
http://groups.google.de/group/alt.msdos.batch.nt/msg/8b9408bb301e6bc4?h ...

Gruß
LotPings
Bitte warten ..
Mitglied: JoachimHD
22.06.2009 um 13:20 Uhr
Na ich würde weil ich es gut kann in Delphi schreiben aber
sonst schau mal VB oder so .. Wobei es läuft nur auf DOS kein Windows oder ...
Dann geht script und VB nicht

kannst du nicht etwas Turbo Pascal oder so da gibt es freie Compiler und dann geht das schon


ALS Param übergibst du DD oder mm oder jj oder jjjj

do case als Auswahl

Result := Substr(datetostr(date)),ab,lang) ;

und als Result gibst du dann den richtigen Teil aus

Schau mal unter Pascal und so nach sollte einfach gehen

Hilft dir das was ?

Google mal OK !
Grüße Joachim
Bitte warten ..
Mitglied: flash4u
22.06.2009 um 16:25 Uhr
uihh!
herzlichen Dank für den Hinweis.
Genau das, was ich gesucht habe. Es läuft wie geschmiert.
Gruß.
Bitte warten ..
Mitglied: JoachimHD
22.06.2009 um 17:49 Uhr
ASCHii Assembler kannte ich auch noch nicht
Nicht schlecht ich hätte eine kleine Pascal Proz geschrieben aber gut zu wissen nicht schlecht !

Grüße Joachim
Bitte warten ..
Mitglied: 76109
07.07.2009 um 14:11 Uhr
Hallo zusammen!

Die ASCII-Assembler-Methode war mir auch neu und ich weiß ehrlich gesagt nicht so recht, was ich davon halten soll, zumal nur ein einziges falsches Byte verheerende Auswirkungen zur Folge haben kann?

Es ist schon ein paar Tage her, aber ich habe mir nach langer Zeit den Spass erlaubt, mal wieder ein Assembler-Programm (DateTime.Com 666 Byte groß) zu schreiben.

Dabei ging es mir darum, einen Code zu erstellen, der es nicht erforderlich macht, erst eine externe Batch aufrufen zu müssen, damit die Variablen verfügbar sind.

Meine erste Idee war daher, ein TSR-Programm zu schreiben, dass die Eingabe-Befehle abfängt (Inplementierung Dos-Befehlserweiterungen), um einen selbstdefinierten Befehl dazu zu verwenden, die entsprechenden Variablen per Set-Anweisungen über den Dos-Internen Command-Aufruf (INT 2Eh) zu setzen. Das hat leider nicht so funktioniert, wie ich mir das vorgestellt hatte.

Also habe ich eine normales COM-Programm geschrieben, dass ohne Dos-Funktion die Variablen direkt im Master-Environment bearbeitet.

Das Programm wurde unter der Dos-Version 7.10 (Win98-Dos) erstellt und getestet. Es funktioniert und dabei ist es egal, ob das Programm von der Console aus oder aus einer Batch-Datei heraus oder über eine neue Instanz des Befehlsinterpreters Command aufgerufen wird. Die Variablen sind immer sofort verfügbar.

Durch einen Dos-Versions-Test, läuft das Programm ab der Dos-Version 5.x und allen anderen Dos-Versionen, deren Master-Environ explizit den Namen COMMAND im zugewiesenen Speicherblock (MCB) aufweisen. Win-XP verwendet einen anderen Namen und wurde bewusst nicht mit einbezogen. Das würde auch wenig Sinn machen.

Leider habe ich keine Ahnung, wie man das Programm auf Admin.de hochladen kann, falls das überhaupt geht. Aber mich würde natürlich schon interessieren, ob das Programm unter Dos 5.x und Dos 6.x auch seinen Zweck erfüllt und fände es besonders nett, wenn jemand von euch den Test durchführen könnte. Ich dachte dabei an die Hinterlegung einer Pseudo-E-Mail-Adresse in meinem Postfach, an die ich die Datei als DateTime.Zip versenden könnte.

Der Aufruf in einer Batch-Datei würde dann in etwa so aussehen:
01.
@echo off 
02.
 
03.
datetime > Nul 
04.
 
05.
echo. 
06.
echo Wochentag: %$wt% 
07.
echo       Tag: %$dd% 
08.
echo     Monat: %$dm% 
09.
echo      Jahr: %$dy% 
10.
echo     Datum: %$da% 
11.
echo. 
12.
echo   Stunden: %$th% 
13.
echo   Minuten: %$tm% 
14.
echo  Sekunden: %$ts% 
15.
echo      Zeit: %$ti% 
16.
echo. 
17.
 
18.
datetime del > Nul
Und wenn's interessiert, hier der Assembler-Quellcode (enthält externe Definitionen):
01.
; ************************************************************************** 
02.
; * Funktionsbeschreibung:                                                 * 
03.
; *                                                                        * 
04.
; * Dieses Programm setzt die Umgebungsvariablen Datum und Zeit und ist    * 
05.
; * in den MSDOS-Versionen 5.00 bis 7.10 (Win98) lauffähig.                * 
06.
; *                                                                        * 
07.
; * Das Programm kann auf der Kommandozeile oder aus einer Batch-Datei     * 
08.
; * heraus gestartet werden. Auch das starten einer neuen Instanz des      * 
09.
; * Befehlsinterpreters mit COMMAND, hat keinen Einfluss auf die Verfüg-   * 
10.
; * barkeit der Umgebungsvariablen, da diese ohne Dos-Funktion direkt in   * 
11.
; * das Master-Environment geschrieben werden.                             * 
12.
; *                                                                        * 
13.
; * Nach Aufruf des Programms, sind folgende Variablen verfügbar:          * 
14.
; *                                                                        * 
15.
; *               Set   Format                                             * 
16.
; *   Wochen-Tag  $WT - Mo, Di, Mi, Do, Fr, Sa, So                         * 
17.
; *   Tag_______  $DD - 00                                                 * 
18.
; *   Monat_____  $DM - 00                                                 * 
19.
; *   Jahr______  $DY - 0000                                               * 
20.
; *   Datum_____  $DA - 00.00.0000                                         * 
21.
; *   Stunden___  $TH - 00                                                 * 
22.
; *   Minuten___  $TM - 00                                                 * 
23.
; *   Sekunden__  $TS - 00                                                 * 
24.
; *   Zeit______  $TI - 00:00:00                                           * 
25.
; *                                                                        * 
26.
; * Rückgabe:                                                              * 
27.
; *                                                                        * 
28.
; *    Exit - 0 = Kein Fehler, 1 = Fehler                                  * 
29.
; *    Msg  - Fehlermeldung                                                * 
30.
; ************************************************************************** 
31.
 
32.
 INCLUDE   SETUP.ASI                      ; Allgemeine Definitionen 
33.
 
34.
_OPEN_COM_SEG 
35.
 
36.
    jmp near ptr __INIT@                  ; Goto 
37.
 
38.
; ************************************************************************** 
39.
; *  Definitionen und Daten                                                * 
40.
; ************************************************************************** 
41.
    MCB_COM  EQU   8                      ; Mcb-Ofs Str Command 
42.
    MCB_LEN  EQU   3                      ; Mcb-Ofs Len Environ 
43.
    PSP_COM  EQU  16h                     ; Psp-Ofs Seg Command 
44.
    PSP_ENV  EQU  2Ch                     ; Psp-Ofs Seg Environ 
45.
    PSP_CMD  EQU  80h                     ; Psp-Ofs Ofs Cmdline Param 'del' 
46.
 
47.
    @msg0    DB  'DateTime [del] - Set Environ Date/Time Version 1.0 Dieter K. 2009', $NL, '$' 
48.
    @msg1    DB  'Falsche DOS-Version!', $NL, '$' 
49.
    @msg2    DB  'Zu wenig Environ-Speicher!', $NL, '$' 
50.
 
51.
    @comm    DB  'COMMAND', 0             ; Compare Command 
52.
 
53.
    @set     DB  '$WT=$DD=$DM=$DY=$DA='   ; Compare Set Variablen Date 
54.
             DB  '$TH=$TM=$TS=$TI='       ; Compare Set Variablen Time 
55.
 
56.
    @weekD   DB  'SoMoDiMiDoFrSa'         ; Set Date/Time Variablen 
57.
 
58.
    @date    DB  '$WT=' 
59.
    @dw      DB  'WT', 0 
60.
             DB  '$DD=' 
61.
    @dd      DB  '00', 0 
62.
             DB  '$DM=' 
63.
    @dm      DB  '00', 0 
64.
             DB  '$DY=' 
65.
    @dy      DB  '0000', 0 
66.
             DB  '$DA=' 
67.
    @d1      DB  '00.' 
68.
    @d2      DB  '00.' 
69.
    @d3      DB  '0000', 0 
70.
             DB  '$TH=' 
71.
    @th      DB  '00', 0 
72.
             DB  '$TM=' 
73.
    @tm      DB  '00', 0 
74.
             DB  '$TS=' 
75.
    @ts      DB  '00', 0 
76.
             DB  '$TI=' 
77.
    @t1      DB  '00:' 
78.
    @t2      DB  '00:' 
79.
    @t3      DB  '00', 0, 0 
80.
 
81.
    @Date_Size = $ - @date 
82.
 
83.
; ************************************************************************** 
84.
; *  Funktion:  INIT - Umgebung prüfen und Programm initialisieren.        * 
85.
; *                                                                        * 
86.
; *  Diese Funktion prüft ob eine gültige DOS-Version vorliegt und ob ein  * 
87.
; *  COMMAND-Environment vorhanden ist. Ausserdem wird der Speicherplatz   * 
88.
; *  für das Programm auf die tatsächliche Größe angepasst.                * 
89.
; *                                                                        * 
90.
; *  Eingabe:   Keine                                                      * 
91.
; *                                                                        * 
92.
; *  Ausgabe:   Bei Fehler eine Meldung ausgeben und Programm beenden.     * 
93.
; *                                                                        * 
94.
; ************************************************************************** 
95.
 
96.
   LocSym@    __INIT, < PROC NEAR > 
97.
 
98.
    _STACK_   EQU 512 + 15 + 1             ; Stack + Runden Para/Code Word 
99.
 
100.
   @@test_OsVersion: 
101.
      mov     ax, 3306h                    ; AX = Func Get Dos-Version 
102.
      int     21h                          ; Get Dos-Version 
103.
      cmp     al, 0FFh                     ; Test Fehler 
104.
      je      short @@error                ; Wenn ja Goto 
105.
      cmp     bl, 5                        ; Test Version < 5 
106.
      jb      short @@error                ; Wenn ja Goto 
107.
      cmp     bx, 3205h                    ; Test Version WinXP 
108.
      je      short @@error                ; Wenn ja Goto 
109.
 
110.
   @@init_stack: 
111.
      mov     bx, ofs @Stack_Begin         ; BX = Ofs Stack Begin 
112.
      add     bx, _STACK_                  ; BX + Len Stack 
113.
      and     bx, 0FFF0h                   ; BX = Runden Para 
114.
      cli                                  ; Interrupts Aus 
115.
      mov     sp, bx                       ; SP = Ofs Stack Ende 
116.
      mov     bp, bx                       ; BP = Ofs Stack Ende 
117.
      sti                                  ; Interrupts Ein 
118.
 
119.
   @@set_mem_free: 
120.
      mov     ah, 49h                      ; AH = Func Free Memory 
121.
      int     21h                          ; Free Prog-Size 
122.
 
123.
   @@set_new_mem: 
124.
      mov     ah, 48h                      ; AH = Func Set Memory 
125.
      shr     bx, 4                        ; BX = Prog-Size Para 
126.
      int     21h                          ; Set  Prog-Size 
127.
 
128.
   @@test_command: 
129.
      cld                                  ; Set Vorw„rts 
130.
      mov     ax, w_ptr ds:[PSP_COM]       ; AX = Seg Psp-Command 
131.
      dec     ax                           ; AX = Seg Mcb-Command 
132.
      mov     es, ax                       ; ES = Seg Mcb-Command 
133.
      mov     di, MCB_COM                  ; DI = Ofs Str-Command 
134.
      mov     si, ofs @comm                ; SI = Ofs Cmp-Command 
135.
      mov     cx, 2                        ; CX = Len Str-Command 
136.
      rep     cmpsd                        ; Test Command 
137.
      je      short @@ende                 ; Wenn ja Goto 
138.
 
139.
   @@error: 
140.
      mov     ah, 09h                      ; AH = Funktion Ausgabe 
141.
      mov     dx, ofs @msg1                ; DX = Ofs Msg 
142.
      int     21h                          ; Meldung ausgeben 
143.
 
144.
   @@exit1: 
145.
      mov     ax, 4C01h                    ; AX = Func Prog Terminate Exit 1 
146.
      int     21h                          ; Prog beenden 
147.
 
148.
   @@ende: 
149.
 
150.
   EndSym@    __INIT,  < ENDP > 
151.
 
152.
; ************************************************************************** 
153.
; *  Funktion:  SETENV - Master-Environ initialisieren.                    * 
154.
; *                                                                        * 
155.
; *  Eingabe:   Keine                                                      * 
156.
; *                                                                        * 
157.
; *  Ausgabe:   Date/Time Variablen löschen und setzen                     * 
158.
; *                                                                        * 
159.
; *  Hinweis:   Die Date/Time-Variablen werden aus Sicherheitsgründen      * 
160.
; *             einzeln gelöscht, weil durchaus die Möglichkeit besteht,   * 
161.
; *             dass Variablen bereits vom User gelöscht wurden.           * 
162.
; ************************************************************************** 
163.
 
164.
   LocSym@    __SETENV, < PROC PASCAL NEAR > 
165.
 
166.
      LOCAL   envp:Word, size:Word, elen:Word 
167.
 
168.
   @@load_env: 
169.
      cld                                  ; Set Vorwärts 
170.
      mov     es, w_ptr ds:[PSP_COM]       ; AX = Seg Psp-Cmd 
171.
      mov     ax, w_ptr es:[PSP_ENV]       ; AX = Seg Cmd-Env 
172.
      mov     es, ax                       ; ES = Seg Cmd-Env 
173.
      xor     di, di                       ; DI = Ofs Cmd-Env 
174.
 
175.
   @@save_env_size: 
176.
      dec     ax                           ; AX = Seg Mcb-Env 
177.
      mov     fs, ax                       ; FS = Seg Mcb-Env 
178.
      mov     ax, w_ptr fs:[MCB_LEN]       ; AX = Len Env Para 
179.
      shl     ax, 4                        ; AX = Len Env Byte 
180.
      mov     w_ptr [size], ax             ; Save Len Env Byte 
181.
 
182.
   @@init_find_env_end: 
183.
      mov     cx, ax                       ; CX = Len Env 
184.
      xor     ax, ax                       ; AX = EndOfVar (0) 
185.
 
186.
   @@find_env_end: 
187.
      repne   scasb                        ; Find EndOfVar 
188.
      cmp     b_ptr es:[di], 0             ; Test EndOfAllVar 
189.
      jne     short @@find_env_end         ; Wenn nein Goto 
190.
      inc     di                           ; DI + EndOfAllVar (0) 
191.
      mov     w_ptr [elen], di             ; Save Len EndOfAllVar 
192.
      xor     di, di                       ; DI = Ofs 0 
193.
 
194.
   @@init_date_char: 
195.
      mov     al,'$'                       ; AL = Char '$' 
196.
      mov     si, ofs @set                 ; BX = Ofs Comp Set Date/Time 
197.
      mov     cx, w_ptr [elen]             ; CX = Len EndOfAllVar 
198.
      sub     cx, di                       ; CX = Len Rest Var 
199.
 
200.
   @@find_date_char: 
201.
      repne   scasb                        ; Find Char '$' 
202.
      jcxz    short @@test_delete          ; Wenn EndOfAllVar Goto 
203.
 
204.
   @@init_date_str: 
205.
      mov     dl, 9                        ; DL = Zähler Date-Var 
206.
      dec     di                           ; DI = Ofs 0 Env-Var 
207.
      mov     w_ptr [envp], di             ; Save Ofs 0 Env-Var 
208.
 
209.
   @@find_date_str: 
210.
      dec     dl                           ; DL = Zähler - 1 
211.
      js      short @@init_date_char       ; Wenn Zähler < 0 Goto 
212.
      mov     di, w_ptr [envp]             ; DI = Ofs Next-Var 0 
213.
      cmpsd                                ; Test Date-Var 
214.
      jne     short @@find_date_str        ; Wenn nein Goto 
215.
 
216.
   @@find_date_eos: 
217.
      xor     ax, ax                       ; AX = EndOfVar (0) 
218.
      mov     di, w_ptr [envp]             ; DI = Ofs Next-Var 0 
219.
      mov     cx, w_ptr [elen]             ; CX = Len EndOfAllVar 
220.
      sub     cx, di                       ; CX = Len Rest Env 
221.
      mov     dx, cx                       ; DX = Len Rest Env 
222.
      repne   scasb                        ; Find EndOfVar (0) 
223.
 
224.
   @@del_date_str: 
225.
      push    ds                           ; Save 
226.
      mov     bx, es                       ; DX = Seg Env 
227.
      mov     ds, bx                       ; DS = Seg Env 
228.
      mov     si, di                       ; SI = Ofs Next-Var 0 
229.
      mov     di, w_ptr [envp]             ; DI = Ofs Date-Var 0 
230.
      sub     dx, cx                       ; DX = Len Rest Env - Len Var 
231.
      sub     w_ptr [elen], dx             ; Save Len Rest Env 
232.
      shr     cx, 1                        ; CX = Len Word 
233.
      rep     movsw                        ; Kopieren Word 
234.
      adc     cx, 0                        ; CX = Len Byte 
235.
      rep     movsb                        ; Kopieren Byte 
236.
      mov     di, w_ptr [envp]             ; DI = Ofs Next-Var 0 
237.
      pop     ds                           ; Load 
238.
      jmp     short @@init_date_char       ; Goto 
239.
 
240.
   @@test_delete: 
241.
      mov     ax, w_ptr ds:[PSP_CMD+1]     ; AX = Cmdline Parameter 
242.
      and     ah, 5Fh                      ; AH = Char Upper 
243.
      cmp     ax, 'D '                     ; Test ' D' 
244.
      je      short @@send_msg0            ; Wenn ja Goto 
245.
 
246.
   @@test_env_size: 
247.
      dec     di                           ; DI = Ofs New-Date-Var 0 
248.
      mov     ax, di                       ; AX = Len EndOfAllVar 
249.
      add     ax, @Date_Size               ; AX = Len Date-Var 
250.
      cmp     ax, w_ptr [size]             ; Test Len EndOfAllVar < Len Env 
251.
      jb      short @@copy_date            ; Wenn ja Goto 
252.
 
253.
   @@send_msg2: 
254.
      mov     ah, 09h                      ; AH = Funktion Ausgabe 
255.
      mov     dx, ofs @msg2                ; DS:DX = Adresse Msg 
256.
      int     21h                          ; Meldung ausgeben 
257.
 
258.
   @@terminate_exit1: 
259.
      mov     ax, 4C01h                    ; AX = Func Prog Terminate Exit 1 
260.
      int     21h                          ; Prog beenden 
261.
 
262.
   @@copy_date: 
263.
      Push    es  di                       ; Adresse New Date/Time-Var 
264.
      call    __SETDATE@                   ; Set Date/Time 
265.
 
266.
   @@send_msg0: 
267.
      mov     ah, 09h                      ; AH = Funktion Ausgabe 
268.
      mov     dx, ofs @msg0                ; DS:DX = Adresse Msg 
269.
      int     21h                          ; Meldung ausgeben 
270.
 
271.
   @@terminate_exit0: 
272.
      mov     ax, 4C00h                    ; AX = Func Prog Terminate Exit 0 
273.
      int     21h                          ; Prog beenden 
274.
 
275.
   EndSym@    __SETENV,  < ENDP > 
276.
 
277.
; ************************************************************************** 
278.
; *  Funktion:  SETDATE - Set Date/Time-Variablen im Master-Environ        * 
279.
; *                                                                        * 
280.
; *  Eingabe:   ARG - Adresse Master-Environ                               * 
281.
; *                                                                        * 
282.
; *  Ausgabe:   Date/Time Variablen im Environ setzen                      * 
283.
; ************************************************************************** 
284.
 
285.
   LocSym@    __SETDATE, < PROC PASCAL NEAR > 
286.
 
287.
      ARG     dest:DWORD 
288.
 
289.
   @@get_date: 
290.
      mov     ah, 2Ah                      ; Func 2Ah Date 
291.
      int     21h                          ; Get Date 
292.
 
293.
   @@init_week_day: 
294.
      movzx   bx, al                       ; BX = Wochentag Zahl 
295.
      shl     bl, 1                        ; BX = Ofs Wochentag 
296.
      mov     ax, w_ptr [bx.@weekD]        ; AX = Wochentag String 
297.
      mov     w_ptr [@dw], ax              ; Save Wochentag 
298.
 
299.
   @@init_day: 
300.
      mov     al, dl                       ; AL = TT Zahl 
301.
      push    ofs @d1 ofs @dd              ; Push Arg 
302.
      call    @@conv_and_save              ; Save TT Ascii-Zahl 
303.
 
304.
   @@init_month: 
305.
      mov     al, dh                       ; AL = MM Zahl 
306.
      push    ofs @d2 ofs @dm              ; Push Arg 
307.
      call    @@conv_and_save              ; Save MM Ascii-Zahl 
308.
 
309.
   @@init_year: 
310.
      xor     dx, dx                       ; DX = 0 
311.
      mov     ax, 100                      ; AX = 100 
312.
      xchg    ax, cx                       ; AX = JJJJ Zahl, CX 100 
313.
      div     cx                           ; AL = JJ.. Zahl > 100 
314.
      push    ofs @d3 ofs @dy              ; Push Arg 
315.
      call    @@conv_and_save              ; Save JJ.. Ascii-Zahl 
316.
      mov     al, dl                       ; AL = ..JJ Zahl < 100 
317.
      push    ofs @d3+2 ofs @dy+2          ; Push Arg 
318.
      call    @@conv_and_save              ; Save ..JJ Ascii-Zahl 
319.
 
320.
   @@get_time: 
321.
      mov     ah, 2Ch                      ; Func 2Ch Time 
322.
      int     21h                          ; Get Time 
323.
 
324.
   @@init_secounds: 
325.
      mov     al, dh                       ; AL = SS Zahl 
326.
      push    ofs @t3 ofs @ts              ; Push Arg 
327.
      call    @@conv_and_save              ; Save SS Ascii-Zahl 
328.
 
329.
   @@init_minits: 
330.
      mov     al, cl                       ; AL = MM Zahl 
331.
      push    ofs @t2 ofs @tm              ; Push Arg 
332.
      call    @@conv_and_save              ; Save MM Ascii-Zahl 
333.
 
334.
   @@init_hourers: 
335.
      mov     al, ch                       ; AL = HH Zahl 
336.
      push    ofs @t1 ofs @th              ; Push Arg 
337.
      call    @@conv_and_save              ; Save HH Ascii-Zahl 
338.
 
339.
   @@copy_cmd: 
340.
      cld                                  ; Flag Vorwärts 
341.
      les     di, d_ptr [dest]             ; ES:DI = Adresse Env 
342.
      mov     si, ofs @date                ; SI = Ofs Date/Time-Var 
343.
      mov     cx, @Date_Size               ; CX = Len Date/Time-Var 
344.
      shr     cx, 1                        ; CX = Len Word 
345.
      rep     movsw                        ; Kopieren Word 
346.
      adc     cx, 0                        ; CX = Len Byte 
347.
      rep     movsb                        ; Kopieren Byte 
348.
 
349.
   @@ende: 
350.
      ret 
351.
 
352.
; ************************************************************************** 
353.
; *  Teil-Funktion:  Zahlen in das Ascii-Format konvertieren und in die    * 
354.
; *                  entsprechenden Variablen speichern.                   * 
355.
; *                                                                        * 
356.
; *  Eingabe:   ARG - AL   = Zahl                                          * 
357.
; *                 - Arg1 = Offset Variable 1                             * 
358.
; *                 - Arg2 = Offset Variable 2                             * 
359.
; *                                                                        * 
360.
; *  Ausgabe:   Werte in Variablen speichern                               * 
361.
; ************************************************************************** 
362.
 
363.
      OFS1    EQU 6                        ; Stack-Ofs Argument 1 
364.
      OFS2    EQU 4                        ; Stack-Ofs Argument 2 
365.
 
366.
   @@conv_and_save: 
367.
      push    bp                           ; Sichern 
368.
      mov     bp, sp                       ; BP = SP 
369.
      aam                                  ; AH = Zahl > 9, AL = Zahl < 10 
370.
      xchg    al, ah                       ; AX = Umkehren 
371.
      add     ax, 3030h                    ; AX = Ascii-Zahl 
372.
      mov     bx, w_ptr [bp+OFS1]          ; BX = Ofs 1 
373.
      mov     w_ptr [bx], ax               ; Save Ascii-Zahl 
374.
      mov     bx, w_ptr [bp+OFS2]          ; BX = Ofs 2 
375.
      mov     w_ptr [bx], ax               ; Save Ascii-Zahl 
376.
      pop     bp                           ; Restaurieren 
377.
      ret     4                            ; Return 
378.
 
379.
   EndSym@    __SETDATE,  < ENDP > 
380.
 
381.
   @Stack_Begin: 
382.
 
383.
_CLOSE_COM_SEG
Gruß Dieter

[edit] INIT-Proc geändert [/edit]
[edit] Auf Wunsch von "dumdideldum" ein Include-Geschnipsel mit den notwendigen Definitionen zum assemblieren [/edit]

01.
;TASM.CFG  = -c -r -ml -t -q -zi -iC:\bc\rtl\inc -iC:\bc\blc\inc 
02.
;TLINK.CFG = -3 -A=16 -c -C -d -n -m -P -v -LC:\bc\rtl 
03.
 
04.
; Syntax  TASM:  tasm datetime 
05.
; Syntax TLINK:  tlink /Tdc datetime    Warnmeldung Debug-Info ignorieren 
06.
 
07.
   LOCALS 
08.
 
09.
   LocSym@  MACRO  Name, Type, Dummy 
10.
	           Name     Type 
11.
                   Name&@   EQU   Name 
12.
            ENDM 
13.
 
14.
   EndSym@  MACRO  Name:Rest 
15.
                   ENDP 
16.
            ENDM 
17.
 
18.
   $BE    EQU   07h                     ; Bell 
19.
   $BS    EQU   08h                     ; Backspace 
20.
   $HT    EQU   09h                     ; Horizontal-Tab 
21.
   $LF    EQU   0Ah                     ; Zeilenvorschub 
22.
   $VT    EQU   0Bh                     ; Vertikal-Tab 
23.
   $CR    EQU   0Dh                     ; Zeilenanfang 
24.
   $NL    EQU   0Ah, 0Dh                ; $LF, $CR 
25.
 
26.
   ofs     EQU    offset 
27.
 
28.
   b_ptr   EQU     byte  ptr 
29.
   t_ptr   EQU    tbyte  ptr 
30.
 
31.
   w_ptr   EQU     word  ptr 
32.
   d_ptr   EQU    dword  ptr 
33.
   f_ptr   EQU    fword  ptr 
34.
   p_ptr   EQU    pword  ptr 
35.
   q_ptr   EQU    qword  ptr 
36.
 
37.
   __USE32__ = 0 
38.
 
39.
   _OPEN_COM_SEG  MACRO 
40.
 
41.
      IF __USE32__ 
42.
           P486 
43.
      ENDIF 
44.
 
45.
        _TEXT  SEGMENT BYTE  'CODE' 
46.
         ENDS 
47.
 
48.
      IFE __USE32__ 
49.
            P486 
50.
      ENDIF 
51.
 
52.
         ASSUME  CS:_TEXT, DS:_TEXT, ES:_TEXT, SS:_TEXT 
53.
 
54.
        _TEXT   SEGMENT 
55.
         org    100h 
56.
         Programm_Code: 
57.
    ENDM 
58.
 
59.
   _CLOSE_COM_SEG  MACRO 
60.
 
61.
        _TEXT   ENDS 
62.
         END    Programm_Code 
63.
    ENDM
Bitte warten ..
Mitglied: 80220
07.07.2009 um 14:30 Uhr
Nicht schlecht, sollte übrigens bis DOS 8.0 (ME) laufen.

Welchen Assembler/Linker hast du verwendet?

Hochladen könntest du über einen Freehoster und dann nur den Link posten.
Bitte warten ..
Mitglied: 76109
07.07.2009 um 14:51 Uhr
Hallo dumdideldum!

Den uralten TASM 3.1 von Borland. Habe seit über 10 Jahren nix mehr mit Assembler gemacht. Das hatte mich aber interessiert und habe daher eine alte Borland-CD ausgegraben und auf meine seperate Win98-Dos-Partition installiert.

Wichtig ist nur, dass der Assembler 32 Bit-Codes, also ab 386er Befehlssatz assemblieren kann. Der Code enthält aber Makro-Defs, die in einer externen DEFS.ASI definiert sind.

Kannst Du mir das mit dem Freehoster bitte etwas genauer erklären

Gruß Dieter
Bitte warten ..
Mitglied: 80220
07.07.2009 um 15:02 Uhr
Hallo, didi1954,

den habe ich ja auch noch.

Gruß
dumdideldum
.
Bitte warten ..
Mitglied: 80220
07.07.2009 um 15:38 Uhr
Nach PM-Kontakt mit didi1954 habe ich die Datei mal hochgeladen auf einen selten und just for fun genutzen Account, sie bleibt ca. 1/2 Jahr dort zur Verfügung.

Die http://zackzick.za.funpic.de/div/datetime.zip ist 702 Byte groß und enthält die von Dieter oben gepostete .com-Datei mit 666 Byte.

Damit hat sich das mit dem Freehoster wohl erledigt. ;)

Ausprobiert wurde hier die einwandfreie Funktion unter Win98SE (DOS 7.1) und Windows ME (DOS 8.0)
Bitte warten ..
Mitglied: 76109
07.07.2009 um 16:17 Uhr
Hallo dumdideldum!

Perfekt, .danke!

Noch ein Hinweis: Beim debuggen ist an Offset 16h (PSP_COM) nicht das Command-PSP-Segment zu sehen. Das funktioniert nur ohne Debugger.

Gruß Dieter
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Datenbanken
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Batch & Shell
gelöst Appx aus Image auslesen und entfernen (9)

Frage von Markus2016 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...