flash4u
Goto Top

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

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.

Content-Key: 118729

Url: https://administrator.de/contentid/118729

Printed on: May 5, 2024 at 06:05 o'clock

Member: JoachimHD
JoachimHD Jun 22, 2009 at 09:53:23 (UTC)
Goto Top
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
Member: flash4u
flash4u Jun 22, 2009 at 10:03:37 (UTC)
Goto Top
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.
Mitglied: 77559
77559 Jun 22, 2009 at 11:16:32 (UTC)
Goto Top
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
Member: JoachimHD
JoachimHD Jun 22, 2009 at 11:20:39 (UTC)
Goto Top
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 face-sad

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
Member: flash4u
flash4u Jun 22, 2009 at 14:25:15 (UTC)
Goto Top
uihh!
herzlichen Dank für den Hinweis.
Genau das, was ich gesucht habe. Es läuft wie geschmiert.
Gruß.
Member: JoachimHD
JoachimHD Jun 22, 2009 at 15:49:14 (UTC)
Goto Top
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
Mitglied: 76109
76109 Jul 07, 2009 at 12:11:11 (UTC)
Goto Top
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:
@echo off

datetime > Nul

echo.
echo Wochentag: %$wt%
echo       Tag: %$dd%
echo     Monat: %$dm%
echo      Jahr: %$dy%
echo     Datum: %$da%
echo.
echo   Stunden: %$th%
echo   Minuten: %$tm%
echo  Sekunden: %$ts%
echo      Zeit: %$ti%
echo.

datetime del > Nul

Und wenn's interessiert, hier der Assembler-Quellcode (enthält externe Definitionen):
; **************************************************************************
; * Funktionsbeschreibung:                                                 *
; *                                                                        *
; * Dieses Programm setzt die Umgebungsvariablen Datum und Zeit und ist    *
; * in den MSDOS-Versionen 5.00 bis 7.10 (Win98) lauffähig.                *
; *                                                                        *
; * Das Programm kann auf der Kommandozeile oder aus einer Batch-Datei     *
; * heraus gestartet werden. Auch das starten einer neuen Instanz des      *
; * Befehlsinterpreters mit COMMAND, hat keinen Einfluss auf die Verfüg-   *
; * barkeit der Umgebungsvariablen, da diese ohne Dos-Funktion direkt in   *
; * das Master-Environment geschrieben werden.                             *
; *                                                                        *
; * Nach Aufruf des Programms, sind folgende Variablen verfügbar:          *
; *                                                                        *
; *               Set   Format                                             *
; *   Wochen-Tag  $WT - Mo, Di, Mi, Do, Fr, Sa, So                         *
; *   Tag_______  $DD - 00                                                 *
; *   Monat_____  $DM - 00                                                 *
; *   Jahr______  $DY - 0000                                               *
; *   Datum_____  $DA - 00.00.0000                                         *
; *   Stunden___  $TH - 00                                                 *
; *   Minuten___  $TM - 00                                                 *
; *   Sekunden__  $TS - 00                                                 *
; *   Zeit______  $TI - 00:00:00                                           *
; *                                                                        *
; * Rückgabe:                                                              *
; *                                                                        *
; *    Exit - 0 = Kein Fehler, 1 = Fehler                                  *
; *    Msg  - Fehlermeldung                                                *
; **************************************************************************

 INCLUDE   SETUP.ASI                      ; Allgemeine Definitionen

_OPEN_COM_SEG

    jmp near ptr __INIT@                  ; Goto

; **************************************************************************
; *  Definitionen und Daten                                                *
; **************************************************************************
    MCB_COM  EQU   8                      ; Mcb-Ofs Str Command
    MCB_LEN  EQU   3                      ; Mcb-Ofs Len Environ
    PSP_COM  EQU  16h                     ; Psp-Ofs Seg Command
    PSP_ENV  EQU  2Ch                     ; Psp-Ofs Seg Environ
    PSP_CMD  EQU  80h                     ; Psp-Ofs Ofs Cmdline Param 'del'  

    @msg0    DB  'DateTime [del] - Set Environ Date/Time Version 1.0 Dieter K. 2009', $NL, '$'  
    @msg1    DB  'Falsche DOS-Version!', $NL, '$'  
    @msg2    DB  'Zu wenig Environ-Speicher!', $NL, '$'  

    @comm    DB  'COMMAND', 0             ; Compare Command  

    @set     DB  '$WT=$DD=$DM=$DY=$DA='   ; Compare Set Variablen Date  
             DB  '$TH=$TM=$TS=$TI='       ; Compare Set Variablen Time  

    @weekD   DB  'SoMoDiMiDoFrSa'         ; Set Date/Time Variablen  

    @date    DB  '$WT='  
    @dw      DB  'WT', 0  
             DB  '$DD='  
    @dd      DB  '00', 0  
             DB  '$DM='  
    @dm      DB  '00', 0  
             DB  '$DY='  
    @dy      DB  '0000', 0  
             DB  '$DA='  
    @d1      DB  '00.'  
    @d2      DB  '00.'  
    @d3      DB  '0000', 0  
             DB  '$TH='  
    @th      DB  '00', 0  
             DB  '$TM='  
    @tm      DB  '00', 0  
             DB  '$TS='  
    @ts      DB  '00', 0  
             DB  '$TI='  
    @t1      DB  '00:'  
    @t2      DB  '00:'  
    @t3      DB  '00', 0, 0  

    @Date_Size = $ - @date

; **************************************************************************
; *  Funktion:  INIT - Umgebung prüfen und Programm initialisieren.        *
; *                                                                        *
; *  Diese Funktion prüft ob eine gültige DOS-Version vorliegt und ob ein  *
; *  COMMAND-Environment vorhanden ist. Ausserdem wird der Speicherplatz   *
; *  für das Programm auf die tatsächliche Größe angepasst.                *
; *                                                                        *
; *  Eingabe:   Keine                                                      *
; *                                                                        *
; *  Ausgabe:   Bei Fehler eine Meldung ausgeben und Programm beenden.     *
; *                                                                        *
; **************************************************************************

   LocSym@    __INIT, < PROC NEAR >

    _STACK_   EQU 512 + 15 + 1             ; Stack + Runden Para/Code Word

   @@test_OsVersion:
      mov     ax, 3306h                    ; AX = Func Get Dos-Version
      int     21h                          ; Get Dos-Version
      cmp     al, 0FFh                     ; Test Fehler
      je      short @@error                ; Wenn ja Goto
      cmp     bl, 5                        ; Test Version < 5
      jb      short @@error                ; Wenn ja Goto
      cmp     bx, 3205h                    ; Test Version WinXP
      je      short @@error                ; Wenn ja Goto

   @@init_stack:
      mov     bx, ofs @Stack_Begin         ; BX = Ofs Stack Begin
      add     bx, _STACK_                  ; BX + Len Stack
      and     bx, 0FFF0h                   ; BX = Runden Para
      cli                                  ; Interrupts Aus
      mov     sp, bx                       ; SP = Ofs Stack Ende
      mov     bp, bx                       ; BP = Ofs Stack Ende
      sti                                  ; Interrupts Ein

   @@set_mem_free:
      mov     ah, 49h                      ; AH = Func Free Memory
      int     21h                          ; Free Prog-Size

   @@set_new_mem:
      mov     ah, 48h                      ; AH = Func Set Memory
      shr     bx, 4                        ; BX = Prog-Size Para
      int     21h                          ; Set  Prog-Size

   @@test_command:
      cld                                  ; Set Vorw„rts
      mov     ax, w_ptr ds:[PSP_COM]       ; AX = Seg Psp-Command
      dec     ax                           ; AX = Seg Mcb-Command
      mov     es, ax                       ; ES = Seg Mcb-Command
      mov     di, MCB_COM                  ; DI = Ofs Str-Command
      mov     si, ofs @comm                ; SI = Ofs Cmp-Command
      mov     cx, 2                        ; CX = Len Str-Command
      rep     cmpsd                        ; Test Command
      je      short @@ende                 ; Wenn ja Goto

   @@error:
      mov     ah, 09h                      ; AH = Funktion Ausgabe
      mov     dx, ofs @msg1                ; DX = Ofs Msg
      int     21h                          ; Meldung ausgeben

   @@exit1:
      mov     ax, 4C01h                    ; AX = Func Prog Terminate Exit 1
      int     21h                          ; Prog beenden

   @@ende:

   EndSym@    __INIT,  < ENDP >

; **************************************************************************
; *  Funktion:  SETENV - Master-Environ initialisieren.                    *
; *                                                                        *
; *  Eingabe:   Keine                                                      *
; *                                                                        *
; *  Ausgabe:   Date/Time Variablen löschen und setzen                     *
; *                                                                        *
; *  Hinweis:   Die Date/Time-Variablen werden aus Sicherheitsgründen      *
; *             einzeln gelöscht, weil durchaus die Möglichkeit besteht,   *
; *             dass Variablen bereits vom User gelöscht wurden.           *
; **************************************************************************

   LocSym@    __SETENV, < PROC PASCAL NEAR >

      LOCAL   envp:Word, size:Word, elen:Word

   @@load_env:
      cld                                  ; Set Vorwärts
      mov     es, w_ptr ds:[PSP_COM]       ; AX = Seg Psp-Cmd
      mov     ax, w_ptr es:[PSP_ENV]       ; AX = Seg Cmd-Env
      mov     es, ax                       ; ES = Seg Cmd-Env
      xor     di, di                       ; DI = Ofs Cmd-Env

   @@save_env_size:
      dec     ax                           ; AX = Seg Mcb-Env
      mov     fs, ax                       ; FS = Seg Mcb-Env
      mov     ax, w_ptr fs:[MCB_LEN]       ; AX = Len Env Para
      shl     ax, 4                        ; AX = Len Env Byte
      mov     w_ptr [size], ax             ; Save Len Env Byte

   @@init_find_env_end:
      mov     cx, ax                       ; CX = Len Env
      xor     ax, ax                       ; AX = EndOfVar (0)

   @@find_env_end:
      repne   scasb                        ; Find EndOfVar
      cmp     b_ptr es:[di], 0             ; Test EndOfAllVar
      jne     short @@find_env_end         ; Wenn nein Goto
      inc     di                           ; DI + EndOfAllVar (0)
      mov     w_ptr [elen], di             ; Save Len EndOfAllVar
      xor     di, di                       ; DI = Ofs 0

   @@init_date_char:
      mov     al,'$'                       ; AL = Char '$'  
      mov     si, ofs @set                 ; BX = Ofs Comp Set Date/Time
      mov     cx, w_ptr [elen]             ; CX = Len EndOfAllVar
      sub     cx, di                       ; CX = Len Rest Var

   @@find_date_char:
      repne   scasb                        ; Find Char '$'  
      jcxz    short @@test_delete          ; Wenn EndOfAllVar Goto

   @@init_date_str:
      mov     dl, 9                        ; DL = Zähler Date-Var
      dec     di                           ; DI = Ofs 0 Env-Var
      mov     w_ptr [envp], di             ; Save Ofs 0 Env-Var

   @@find_date_str:
      dec     dl                           ; DL = Zähler - 1
      js      short @@init_date_char       ; Wenn Zähler < 0 Goto
      mov     di, w_ptr [envp]             ; DI = Ofs Next-Var 0
      cmpsd                                ; Test Date-Var
      jne     short @@find_date_str        ; Wenn nein Goto

   @@find_date_eos:
      xor     ax, ax                       ; AX = EndOfVar (0)
      mov     di, w_ptr [envp]             ; DI = Ofs Next-Var 0
      mov     cx, w_ptr [elen]             ; CX = Len EndOfAllVar
      sub     cx, di                       ; CX = Len Rest Env
      mov     dx, cx                       ; DX = Len Rest Env
      repne   scasb                        ; Find EndOfVar (0)

   @@del_date_str:
      push    ds                           ; Save
      mov     bx, es                       ; DX = Seg Env
      mov     ds, bx                       ; DS = Seg Env
      mov     si, di                       ; SI = Ofs Next-Var 0
      mov     di, w_ptr [envp]             ; DI = Ofs Date-Var 0
      sub     dx, cx                       ; DX = Len Rest Env - Len Var
      sub     w_ptr [elen], dx             ; Save Len Rest Env
      shr     cx, 1                        ; CX = Len Word
      rep     movsw                        ; Kopieren Word
      adc     cx, 0                        ; CX = Len Byte
      rep     movsb                        ; Kopieren Byte
      mov     di, w_ptr [envp]             ; DI = Ofs Next-Var 0
      pop     ds                           ; Load
      jmp     short @@init_date_char       ; Goto

   @@test_delete:
      mov     ax, w_ptr ds:[PSP_CMD+1]     ; AX = Cmdline Parameter
      and     ah, 5Fh                      ; AH = Char Upper
      cmp     ax, 'D '                     ; Test ' D'  
      je      short @@send_msg0            ; Wenn ja Goto

   @@test_env_size:
      dec     di                           ; DI = Ofs New-Date-Var 0
      mov     ax, di                       ; AX = Len EndOfAllVar
      add     ax, @Date_Size               ; AX = Len Date-Var
      cmp     ax, w_ptr [size]             ; Test Len EndOfAllVar < Len Env
      jb      short @@copy_date            ; Wenn ja Goto

   @@send_msg2:
      mov     ah, 09h                      ; AH = Funktion Ausgabe
      mov     dx, ofs @msg2                ; DS:DX = Adresse Msg
      int     21h                          ; Meldung ausgeben

   @@terminate_exit1:
      mov     ax, 4C01h                    ; AX = Func Prog Terminate Exit 1
      int     21h                          ; Prog beenden

   @@copy_date:
      Push    es  di                       ; Adresse New Date/Time-Var
      call    __SETDATE@                   ; Set Date/Time

   @@send_msg0:
      mov     ah, 09h                      ; AH = Funktion Ausgabe
      mov     dx, ofs @msg0                ; DS:DX = Adresse Msg
      int     21h                          ; Meldung ausgeben

   @@terminate_exit0:
      mov     ax, 4C00h                    ; AX = Func Prog Terminate Exit 0
      int     21h                          ; Prog beenden

   EndSym@    __SETENV,  < ENDP >

; **************************************************************************
; *  Funktion:  SETDATE - Set Date/Time-Variablen im Master-Environ        *
; *                                                                        *
; *  Eingabe:   ARG - Adresse Master-Environ                               *
; *                                                                        *
; *  Ausgabe:   Date/Time Variablen im Environ setzen                      *
; **************************************************************************

   LocSym@    __SETDATE, < PROC PASCAL NEAR >

      ARG     dest:DWORD

   @@get_date:
      mov     ah, 2Ah                      ; Func 2Ah Date
      int     21h                          ; Get Date

   @@init_week_day:
      movzx   bx, al                       ; BX = Wochentag Zahl
      shl     bl, 1                        ; BX = Ofs Wochentag
      mov     ax, w_ptr [bx.@weekD]        ; AX = Wochentag String
      mov     w_ptr [@dw], ax              ; Save Wochentag

   @@init_day:
      mov     al, dl                       ; AL = TT Zahl
      push    ofs @d1 ofs @dd              ; Push Arg
      call    @@conv_and_save              ; Save TT Ascii-Zahl

   @@init_month:
      mov     al, dh                       ; AL = MM Zahl
      push    ofs @d2 ofs @dm              ; Push Arg
      call    @@conv_and_save              ; Save MM Ascii-Zahl

   @@init_year:
      xor     dx, dx                       ; DX = 0
      mov     ax, 100                      ; AX = 100
      xchg    ax, cx                       ; AX = JJJJ Zahl, CX 100
      div     cx                           ; AL = JJ.. Zahl > 100
      push    ofs @d3 ofs @dy              ; Push Arg
      call    @@conv_and_save              ; Save JJ.. Ascii-Zahl
      mov     al, dl                       ; AL = ..JJ Zahl < 100
      push    ofs @d3+2 ofs @dy+2          ; Push Arg
      call    @@conv_and_save              ; Save ..JJ Ascii-Zahl

   @@get_time:
      mov     ah, 2Ch                      ; Func 2Ch Time
      int     21h                          ; Get Time

   @@init_secounds:
      mov     al, dh                       ; AL = SS Zahl
      push    ofs @t3 ofs @ts              ; Push Arg
      call    @@conv_and_save              ; Save SS Ascii-Zahl

   @@init_minits:
      mov     al, cl                       ; AL = MM Zahl
      push    ofs @t2 ofs @tm              ; Push Arg
      call    @@conv_and_save              ; Save MM Ascii-Zahl

   @@init_hourers:
      mov     al, ch                       ; AL = HH Zahl
      push    ofs @t1 ofs @th              ; Push Arg
      call    @@conv_and_save              ; Save HH Ascii-Zahl

   @@copy_cmd:
      cld                                  ; Flag Vorwärts
      les     di, d_ptr [dest]             ; ES:DI = Adresse Env
      mov     si, ofs @date                ; SI = Ofs Date/Time-Var
      mov     cx, @Date_Size               ; CX = Len Date/Time-Var
      shr     cx, 1                        ; CX = Len Word
      rep     movsw                        ; Kopieren Word
      adc     cx, 0                        ; CX = Len Byte
      rep     movsb                        ; Kopieren Byte

   @@ende:
      ret

; **************************************************************************
; *  Teil-Funktion:  Zahlen in das Ascii-Format konvertieren und in die    *
; *                  entsprechenden Variablen speichern.                   *
; *                                                                        *
; *  Eingabe:   ARG - AL   = Zahl                                          *
; *                 - Arg1 = Offset Variable 1                             *
; *                 - Arg2 = Offset Variable 2                             *
; *                                                                        *
; *  Ausgabe:   Werte in Variablen speichern                               *
; **************************************************************************

      OFS1    EQU 6                        ; Stack-Ofs Argument 1
      OFS2    EQU 4                        ; Stack-Ofs Argument 2

   @@conv_and_save:
      push    bp                           ; Sichern
      mov     bp, sp                       ; BP = SP
      aam                                  ; AH = Zahl > 9, AL = Zahl < 10
      xchg    al, ah                       ; AX = Umkehren
      add     ax, 3030h                    ; AX = Ascii-Zahl
      mov     bx, w_ptr [bp+OFS1]          ; BX = Ofs 1
      mov     w_ptr [bx], ax               ; Save Ascii-Zahl
      mov     bx, w_ptr [bp+OFS2]          ; BX = Ofs 2
      mov     w_ptr [bx], ax               ; Save Ascii-Zahl
      pop     bp                           ; Restaurieren
      ret     4                            ; Return

   EndSym@    __SETDATE,  < ENDP >

   @Stack_Begin:

_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]

;TASM.CFG  = -c -r -ml -t -q -zi -iC:\bc\rtl\inc -iC:\bc\blc\inc
;TLINK.CFG = -3 -A=16 -c -C -d -n -m -P -v -LC:\bc\rtl

; Syntax  TASM:  tasm datetime
; Syntax TLINK:  tlink /Tdc datetime    Warnmeldung Debug-Info ignorieren

   LOCALS

   LocSym@  MACRO  Name, Type, Dummy
	           Name     Type
                   Name&@   EQU   Name
            ENDM

   EndSym@  MACRO  Name:Rest
                   ENDP
            ENDM

   $BE    EQU   07h                     ; Bell
   $BS    EQU   08h                     ; Backspace
   $HT    EQU   09h                     ; Horizontal-Tab
   $LF    EQU   0Ah                     ; Zeilenvorschub
   $VT    EQU   0Bh                     ; Vertikal-Tab
   $CR    EQU   0Dh                     ; Zeilenanfang
   $NL    EQU   0Ah, 0Dh                ; $LF, $CR

   ofs     EQU    offset

   b_ptr   EQU     byte  ptr
   t_ptr   EQU    tbyte  ptr

   w_ptr   EQU     word  ptr
   d_ptr   EQU    dword  ptr
   f_ptr   EQU    fword  ptr
   p_ptr   EQU    pword  ptr
   q_ptr   EQU    qword  ptr

   __USE32__ = 0

   _OPEN_COM_SEG  MACRO

      IF __USE32__
           P486
      ENDIF

        _TEXT  SEGMENT BYTE  'CODE'  
         ENDS

      IFE __USE32__
            P486
      ENDIF

         ASSUME  CS:_TEXT, DS:_TEXT, ES:_TEXT, SS:_TEXT

        _TEXT   SEGMENT
         org    100h
         Programm_Code:
    ENDM

   _CLOSE_COM_SEG  MACRO

        _TEXT   ENDS
         END    Programm_Code
    ENDM
Mitglied: 80220
80220 Jul 07, 2009 at 12:30:31 (UTC)
Goto Top
Nicht schlecht, sollte übrigens bis DOS 8.0 (ME) laufen. face-wink

Welchen Assembler/Linker hast du verwendet?

Hochladen könntest du über einen Freehoster und dann nur den Link posten.
Mitglied: 76109
76109 Jul 07, 2009 at 12:51:38 (UTC)
Goto Top
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.face-smile

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ärenface-smile

Gruß Dieter
Mitglied: 80220
80220 Jul 07, 2009 at 13:02:26 (UTC)
Goto Top
Hallo, didi1954,

den habe ich ja auch noch. face-smile

Gruß
dumdideldum
.
Mitglied: 80220
80220 Jul 07, 2009 at 13:38:58 (UTC)
Goto Top
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)
Mitglied: 76109
76109 Jul 07, 2009 at 14:17:55 (UTC)
Goto Top
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