home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* READDIR.PAS *)
- (* *)
- (* Aufruf : READDIR <StartDir> <BufferFile> *)
- (* *)
- (* StartDir : Laufwerk (z.B. 'A:') *)
- (* BufferFile : Dateiname (z.B. 'Alldirs.asc') *)
- (* *)
- (* das Bufferfile ist im aktuellen Verzeichnis *)
- (* und wird auf jeden Fall überschrieben. *)
- (* *)
- (* (c) 1991 W.Rinke & DMV-Verlag *)
- (* ------------------------------------------------------ *)
- PROGRAM ReadDir;
-
- USES Dos;
-
- VAR
- StartDir : PathStr;
- Volume : STRING [12];
- SR : SearchRec;
- FName : PathStr;
- f : TEXT;
-
- FUNCTION Spaces(L : INTEGER) : STRING;
- VAR
- i : INTEGER;
- s : STRING;
- BEGIN
- s := ''; FOR i := 1 TO L DO s := s + ' '; Spaces := s;
- END;
-
- PROCEDURE Emit(Path : PathStr; SR : SearchRec);
- VAR
- DT : DateTime;
- Dir : DirStr;
- Name : NameStr;
- Ext : ExtStr;
- Date : STRING [10];
- Time : STRING [ 8];
- Attr : STRING [ 4];
- y : STRING [ 4];
- mo, d, h, m, s : STRING [ 2];
- BEGIN
- FSplit(Path, Dir, Name, Ext);
- Dir := Dir + Spaces(67 - Length(Dir));
- Name := Name + Spaces( 8 - Length(Name));
- Ext := Ext + Spaces( 4 - Length(Ext));
-
- UnpackTime(SR.Time, DT);
- Str(DT.Year, y);
- Str(DT.Month, mo);
- IF Length(mo) = 1 THEN mo := '0' + mo;
- Str(DT.Day, d);
- IF Length(d) = 1 THEN d := '0' + d;
- Str(DT.Hour, h);
- IF Length(h) = 1 THEN h := '0' + h;
- Str(DT.Min, m);
- IF Length(m) = 1 THEN m := '0' + m;
- Str(DT.Sec, s);
- IF Length(s) = 1 THEN s := '0' + s;
- Date := d + '.' + mo + '.' + y;
- Time := h + ':' + m + ':' + s;
-
- Attr := ' '; (* 4 Spaces *)
- IF (SR.Attr AND ReadOnly) <> 0 THEN Attr[1] := 'R';
- IF (SR.Attr AND Hidden) <> 0 THEN Attr[2] := 'H';
- IF (SR.Attr AND SysFile) <> 0 THEN Attr[3] := 'S';
- IF (SR.Attr AND Archive) <> 0 THEN Attr[4] := 'A';
-
- WriteLn(f, Dir, Name, Ext, SR.Size:8, Date, Time, Attr,' ',Volume);
- END;
-
- PROCEDURE GetDirs(Path : PathStr);
- VAR
- P : PathStr;
- Dir : DirStr;
- Name : NameStr;
- Ext : ExtStr;
- SR : SearchRec;
- BEGIN
- FindFirst(Path + '*.*', VolumeID, SR);
- IF DosError = 0 THEN
- Volume := SR.Name
- ELSE
- Volume := '';
- FindFirst(Path + '*.*', AnyFile, SR);
- WHILE DosError = 0 DO BEGIN
- IF (SR.Attr AND Directory) <> 0 THEN BEGIN
- IF SR.Name[1] <> '.' THEN BEGIN
- P := Path + SR.Name;
- GetDirs(P + '\');
- END;
- END ELSE Emit(Path + SR.Name, SR);
- FindNext(SR);
- END;
- END;
-
- BEGIN
- IF ParamCount = 2 THEN BEGIN
- StartDir := ParamStr(1);
- FName := ParamStr(2);
- END ELSE
- Halt(1);
- (* Errorlevel = 1, wenn falsche Parameter *)
-
- FindFirst(StartDir + '\' + '*.*', AnyFile, SR);
- IF DosError <> 0 THEN Halt(2);
- (* Errorlevel = 2, wenn DOS Error *)
-
- Assign(f, FName);
- {$I-} Rewrite(f); {$I+}
- IF IOResult <> 0 THEN Halt(2);
- (* Errorlevel = 2, wenn DOS Error *)
-
- GetDirs(StartDir + '\');
-
- Close(f);
- END.
- (* ------------------------------------------------------ *)
- (* Ende von READDIR.PAS *)
-
-