home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* SFT.PAS *)
- (* Ändert Zeit/Datum-Einträge wie TOUCH, *)
- (* aber bei freier Wahl von Zeit/Datum *)
- (* (c) 1989 Curt Andre Welling *)
- (* ------------------------------------------------------ *)
- PROGRAM SFT;
-
- USES Dos;
-
- VAR
- f : FILE;
- t : DateTime;
- l : LONGINT;
- s : SearchRec;
- h, m, y, mo, d : WORD;
- p : PathStr;
- i : BYTE;
- date : BOOLEAN;
-
- FUNCTION NewTime(s : STRING; VAR h, m : WORD) : BOOLEAN;
- VAR
- i : BYTE;
- code : INTEGER;
- BEGIN
- NewTime := FALSE;
- i := Length(s);
- IF i IN [4..5] THEN BEGIN
- Val(Copy(s, i-1, 2), m, code); { Minute holen }
- IF (code = 0) AND (m IN [0..59]) THEN BEGIN
- Val(Copy(s, 1, i-3), h, code); { Stunde holen }
- IF (code = 0) AND (h IN [0..23]) THEN
- NewTime := TRUE;
- END;
- END;
- END;
-
- FUNCTION NewDate(s : STRING; VAR y, m, d : WORD): BOOLEAN;
- VAR
- i : BYTE;
- code : INTEGER;
- BEGIN
- NewDate := FALSE;
- i := Length(s);
- IF i IN [9..10] THEN BEGIN
- Val(Copy(s, i-3, 4), y, code); { Jahr holen }
- IF (code=0) AND ((y>1979) AND (y<2100)) THEN BEGIN
- Dec(i, 5); { Gültige DOS-Einträge 1980..2099 }
- Val(Copy(s, i-1, 2), m, code); { Monat holen }
- IF (code=0) AND (m IN [1..12]) THEN BEGIN
- Val(Copy(s, 1, i-3), d, code); { Tag holen }
- IF (code=0) AND (d IN [1..31]) THEN
- NewDate := TRUE;
- END;
- END;
- END;
- END;
-
- BEGIN
- IF NOT (ParamCount IN [2..3]) THEN
- WriteLn('Aufruf: SFT datei(en) ss:mm [tt:mm:jjjj]')
- ELSE BEGIN
- IF NOT NewTime(ParamStr(2), h, m) THEN BEGIN
- WriteLn('Falsche Zeit, korrekt: ss:mm');
- Halt;
- END;
- date := (ParamCount = 3);
- IF date THEN BEGIN
- IF NOT NewDate(ParamStr(3), y, mo, d) THEN BEGIN
- WriteLn('Falsches Datum, korrekt: tt:mm:jjjj');
- Halt;
- END;
- t.year := y; t.month := mo; t.day := d;
- t.hour := h; t.min := m; t.sec := 0;
- PackTime(t,l) { if date: l immer gleich }
- END;
- p := ParamStr(1);
- i := Length(p);
- REPEAT Dec(i) UNTIL (p[i] IN [':','\']) OR (i=0);
- IF i=0 THEN p := ''
- ELSE p := Copy(p, 1, i); { Pfad abtrennen }
- FindFirst(ParamStr(1), anyfile, s);
- IF DosError <> 0 THEN
- WriteLn('Falscher Dateiname !')
- ELSE BEGIN
- WriteLn('SFT ändert Eintrag:');
- REPEAT
- IF NOT date THEN BEGIN
- l := s.time; { Dateizeit holen um }
- UnpackTime(l, t); { altes Datum zu halten }
- t.hour := h; t.min := m; t.sec := 0; { neu }
- PackTime(t, l) { if not date: l stets neu }
- END;
- Assign(f, p + s.name);
- {$I-} Reset(f); {$I+} { Öffnen für SetFTime }
- IF IOResult = 0 THEN BEGIN
- SetFTime(f, l); { Neuen Eintrag setzen }
- Close(f);
- WriteLn(p, s.name) { Dateinamen anzeigen }
- END ELSE
- WriteLn('Kein Zugriff auf: ', p, s.name);
- FindNext(s) { nächste Datei: falls Wildcard }
- UNTIL DosError=18; { no more files }
- END;
- END;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von SFT.PAS *)