home *** CD-ROM | disk | FTP | other *** search
- PROGRAM DirDemo3;
- CONST
- (*$I DIRCONST.PAS *)
- TYPE
- (*$I DIRMTTYP.PAS *) (* bzw. DIRCPTYP.PAS fuer CP/M 3.0 *)
- VAR
- (*$I DIRVAR.PAS *)
- ch : CHAR;
- path, oldpth : Dir_Str;
- drive, olddrv : INTEGER;
-
- (*$I DIRMT.TUR *) (* bzw. DIRMT.PSP fuer Atari, DIRCP.TUR fuer CP/M 3.0 *)
- (*$I DIRMTDTA.PAS *) (* bzw. DIRCPDTA.PAS fuer CP/M 3.0 *)
- (*$I DIRLIB.PAS *)
- (* ----------------------------------------------------------------------- *)
- PROCEDURE error;
- BEGIN
- WriteLn; Write('**** ');
- CASE DirResult OF
- DOSfnok : Write('OK');
- DOSinvfn : Write('ungueltige Funktionsnummer');
- DOSfilnf : Write('Datei nicht gefunden');
- DOSpthnf : Write('Pfad nicht gefunden');
- DOSaccdn : Write('Zugriff abgelehnt');
- DOSnsmem : Write('ungenuegend Speicher');
- DOSedriv : Write('ungueltiges Laufwerk');
- DOSrmcur : Write('aktuelles Verzeichnis kann nicht geloescht werden');
- DOSnsdev : Write('nicht die selbe Einheit');
- DOSnmfil : Write('keine weiteren Dateien');
- ELSE Write('unbekannter Fehler: ',DirResult);
- END;
- Write(' ****'); WriteLn;
- END;
- (* ----------------------------------------------------------------------- *)
- PROCEDURE ShowAttr (attr: INTEGER);
- BEGIN
- Write('Attribute:');
- IF AndInt(attr,DirRO) <> 0 THEN Write(' Read only');
- IF AndInt(attr,DirHid) <> 0 THEN Write(' Hidden');
- IF AndInt(attr,DirSys) <> 0 THEN Write(' System');
- IF AndInt(attr,DirDir) <> 0 THEN Write(' Directory');
- WriteLn;
- END;
- (* ----------------------------------------------------------------------- *)
- PROCEDURE DoDir;
- VAR fname: Dir_Str; i: INTEGER;
- BEGIN
- Write('Suchbegriff: '); ReadLn(fname); WriteLn;
- Dir(fname,DirRO+DirHid+DirSys+DirDir,Directory);
- Write('Sortiere...'); SortDir(DirName,Directory); WriteLn; WriteLn;
- WITH Directory DO
- FOR i := 1 TO num DO BEGIN
- WITH items[i] DO Write(' ',name,'.',ext);
- IF i MOD 4 = 0 THEN WriteLn;
- END;
- WriteLn; WriteLn(Directory.num,' Dateien gefunden'); WriteLn;
- END;
- (* ----------------------------------------------------------------------- *)
- FUNCTION answer (prompt: Dir_Str): CHAR;
- BEGIN
- Write(' ',prompt,' (j/n) ? '); ReadLn(ch); answer := UpCase(ch);
- END;
- (* ----------------------------------------------------------------------- *)
- PROCEDURE DotheRest (command: CHAR);
- VAR dirpath, fname: Dir_Str; i, nextch, result: INTEGER; ch: CHAR;
- entry: Dir_Rec;
-
- PROCEDURE DoRename;
- VAR newname: Dir_Str;
- BEGIN
- Write('neuer Name: '); ReadLn(newname); RenameFile(fname,newname);
- END;
-
- PROCEDURE DoAttribut;
- VAR AttrStr: Dir_Str; newattr, i: INTEGER;
- BEGIN
- Write('alte '); ShowAttr(GetFileAttribut(fname));
- Write('neue Attribute (WRHS): '); ReadLn(AttrStr);
- newattr := DirRW; i := 1;
- WHILE i <= Length(AttrStr) DO BEGIN
- CASE UpCase(AttrStr[i]) OF
- 'R': newattr := OrInt(newattr,DirRO);
- 'H': newattr := OrInt(newattr,DirHid);
- 'S': newattr := OrInt(newattr,DirSys);
- ELSE;
- END;
- i := Succ(i);
- END;
- Write('neue '); ShowAttr(SetFileAttribut(fname,newattr));
- END;
-
- BEGIN
- Write('Welche Datei: '); ReadLn(path);
- FilePath(path,dirpath,nextch); (* Pfadspezifikation abspalten *)
- Dir(path,DirRO+DirHid+DirSys,Directory); i := 1;
- WHILE i <= Directory.num DO BEGIN
- DirResult := DOSfnok; MakeDirFileName(i,Directory,fname);
- fname := Concat(dirpath,fname);
- Write(fname,' (',FileSize(fname):0:0,' Bytes)');
- CASE command OF
- 'E': IF answer('loeschen') = 'J' THEN EraseFile(fname);
- 'R': IF answer('umbenennen') = 'J' THEN DoRename;
- 'A': IF answer('Attribute aendern') = 'J' THEN DoAttribut;
- END;
- IF DirResult <> DOSfnok THEN i := Directory.num;
- i := Succ(i);
- END;
- END;
- (* ----------------------------------------------------------------------- *)
- PROCEDURE DoChDir;
- BEGIN Write('neuer Pfad: '); ReadLn(path); ChDir(path); END;
- (* ----------------------------------------------------------------------- *)
- PROCEDURE DoChDrive;
- BEGIN Write('neues Laufwerk: '); ReadLn(ch); ChDrive(DriveNum(ch)); END;
- (* ----------------------------------------------------------------------- *)
- BEGIN
- NewDirDTA; (* DTA fuer Directory-Funktionen anlegen *)
- olddrv := GetDrive; GetDir(0, oldpth);
- REPEAT
- GetDir(0, path);
- WriteLn; WriteLn('Laufwerk: ', DriveChar(GetDrive));
- WriteLn('Pfad : ',path);
- WriteLn('Frei : ',DiskFree(0):0:0,' Bytes'); WriteLn;
- Write('D)ir C)hDir CH)Drive E)raseFile R)ename ',
- 'A)ttribute Q)uit ? ');
- ReadLn(ch); ch := UpCase(ch);
- CASE ch OF
- 'D' : DoDir; 'C' : DoChDir; 'H' : DoChDrive;
- 'E','R','A': DotheRest(ch);
- ELSE;
- END;
- IF ch <> 'Q' THEN error;
- UNTIL ch = 'Q';
- ChDrive(olddrv); ChDir(oldpth);
- DispDirDTA; (* eigene DTA wird nicht mehr gebraucht, kann *)
- END. (* entfallen, da sowieso Programm zu ende! *)