'**************************************************************************** ' ' Directory-Eintrge ermitteln in PowerBASIC 3.2 ' ' entwickelt von / developed by : Thomas Gohel ' Fido : Thomas Gohel@2:2410/330.1 ' InterNet: author@pbsound.snafu.de ' Homepage: http://www.snafu.de/~pbsound/ ' '**************************************************************************** TYPE DTA_Struktur Reserviert AS STRING * 21 Attribut AS BYTE Uhrzeit AS WORD Datum AS WORD FileLaenge AS DWORD FileName AS STRING * 13 END TYPE DIM DTA AS SHARED DTA_Struktur PTR DIM FindNotNext AS SHARED INTEGER CLS FindFirst("*.*") DO WHILE FindNotNext% = 0 FindNext LOOP END SUB FindFirst(Datei$) ! mov ax, &h2f00 ; DTA-Adresse holen ! int &h21 ! mov DTA[02], es ; DTA_Struktur zur MS-DOS Struktur ! mov DTA[00], bx ; verschieben Attribut? = &b00000000 ' Attribut definieren ' |||||| - Schreibschutz ' ||||| - Versteckt ' |||| - Systemdatei ' ||| - Label ' || - Verzeichnis ' | - Archiv Datei$ = Datei$ + CHR$(0) ' Filenamen vorbereiten Datei_Pointer& = STRPTR32(Datei$) ' 32bit-Adresse holen ! push ds ! mov ah, &h4e ; ersten Directory-Eintrag holen ! mov cx, Attribut? ! mov dx, Datei_Pointer&[00] ! mov ds, Datei_Pointer&[02] ! int &h21 ! pop ds ! jnc DTA_First_Lesen ! mov Fehler%, ax PRINT "Datei not found: ";Fehler% EXIT SUB DTA_First_Lesen: FindNotNext% = 0 GetDTA END SUB SUB FindNext ! mov ah, &h4f ; naechsten Directory-Eintrag holen ! int &h21 ! jnc DTA_Next_Lesen ! mov FindNotNext%, ax PRINT "keine Datei(en) mehr gefunden: ";FindNotNext%; "DOS-Code" EXIT SUB DTA_Next_Lesen: FindNotNext% = 0 GetDTA END SUB SUB GetDTA public Filename$ = @DTA.FileName @DTA.FileName = " " ' lschen fr die nchste Routine ' Laenge des File eintragen FileGross$ = USING$("###,###,###", @DTA.FileLaenge) ' Uhrzeit der letzten Modifikation FileStunde?? = INT(@DTA.Uhrzeit / 2048) FileMinute?? = INT(@DTA.Uhrzeit / 32) AND 63 FileZeit$ = "00:00:1980" FileZeit$ = RIGHT$((STR$(FileStunde??)), 2) + ":" + RIGHT$((STR$(FileMinute??)), 2) ' Datum der letzten Modifikation FileDatum$ = USING$("##",@DTA.Datum AND 31) + "." FileDatum$ = FileDatum$ + USING$("##" , INT(@DTA.Datum/32) AND 15) + "." FileDatum$ = FileDatum$ + USING$("####",INT(@DTA.Datum/512) + 1980) REPLACE " " WITH "0" IN FileZeit$ REPLACE " " WITH "0" IN FileDatum$ ' Attribute holen FileAttribut? = @DTA.Attribut FileAttribut$ = "......" IF BIT(FileAttribut?,0) = 1 THEN MID$(FileAttribut$,1,1) = "r" IF BIT(FileAttribut?,1) = 1 THEN MID$(FileAttribut$,2,1) = "h" IF BIT(FileAttribut?,2) = 1 THEN MID$(FileAttribut$,3,1) = "s" IF BIT(FileAttribut?,3) = 1 THEN MID$(FileAttribut$,4,1) = "v" IF BIT(FileAttribut?,4) = 1 THEN MID$(FileAttribut$,5,1) = "d" IF BIT(FileAttribut?,5) = 1 THEN MID$(FileAttribut$,6,1) = "a" PRINT USING$("\ \",Filename$);" "; PRINT FileGross$ ;" ";FileDatum$;" "; FileZeit$;" "; FileAttribut$ END SUB