home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 03 / tricks / sft.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-11-29  |  3.6 KB  |  109 lines

  1. (* ------------------------------------------------------ *)
  2. (*                   SFT.PAS                              *)
  3. (*       Ändert Zeit/Datum-Einträge wie TOUCH,            *)
  4. (*       aber bei freier Wahl von Zeit/Datum              *)
  5. (*          (c) 1989 Curt Andre Welling                   *)
  6. (* ------------------------------------------------------ *)
  7. PROGRAM SFT;
  8.  
  9. USES Dos;
  10.  
  11. VAR
  12.   f              : FILE;
  13.   t              : DateTime;
  14.   l              : LONGINT;
  15.   s              : SearchRec;
  16.   h, m, y, mo, d : WORD;
  17.   p              : PathStr;
  18.   i              : BYTE;
  19.   date           : BOOLEAN;
  20.  
  21.   FUNCTION NewTime(s : STRING; VAR h, m : WORD) : BOOLEAN;
  22.   VAR
  23.     i    : BYTE;
  24.     code : INTEGER;
  25.   BEGIN
  26.     NewTime := FALSE;
  27.     i       := Length(s);
  28.     IF i IN [4..5] THEN BEGIN
  29.       Val(Copy(s, i-1, 2), m, code);        { Minute holen }
  30.       IF (code = 0) AND (m IN [0..59]) THEN BEGIN
  31.         Val(Copy(s, 1, i-3), h, code);      { Stunde holen }
  32.         IF (code = 0) AND (h IN [0..23]) THEN
  33.           NewTime := TRUE;
  34.       END;
  35.     END;
  36.   END;
  37.  
  38.   FUNCTION NewDate(s : STRING; VAR y, m, d : WORD): BOOLEAN;
  39.   VAR
  40.     i    : BYTE;
  41.     code : INTEGER;
  42.   BEGIN
  43.     NewDate := FALSE;
  44.     i       := Length(s);
  45.     IF i IN [9..10] THEN BEGIN
  46.       Val(Copy(s, i-3, 4), y, code);          { Jahr holen }
  47.       IF (code=0) AND ((y>1979) AND (y<2100)) THEN BEGIN
  48.         Dec(i, 5);       { Gültige DOS-Einträge 1980..2099 }
  49.         Val(Copy(s, i-1, 2), m, code);       { Monat holen }
  50.         IF (code=0) AND (m IN [1..12]) THEN BEGIN
  51.           Val(Copy(s, 1, i-3), d, code);       { Tag holen }
  52.           IF (code=0) AND (d IN [1..31]) THEN
  53.             NewDate := TRUE;
  54.         END;
  55.       END;
  56.     END;
  57.   END;
  58.  
  59. BEGIN
  60.   IF NOT (ParamCount IN [2..3]) THEN
  61.     WriteLn('Aufruf: SFT datei(en) ss:mm [tt:mm:jjjj]')
  62.   ELSE BEGIN
  63.     IF NOT NewTime(ParamStr(2), h, m) THEN BEGIN
  64.       WriteLn('Falsche Zeit, korrekt: ss:mm');
  65.       Halt;
  66.     END;
  67.     date := (ParamCount = 3);
  68.     IF date THEN BEGIN
  69.       IF NOT NewDate(ParamStr(3), y, mo, d) THEN BEGIN
  70.         WriteLn('Falsches Datum, korrekt: tt:mm:jjjj');
  71.         Halt;
  72.       END;
  73.       t.year := y; t.month := mo; t.day := d;
  74.       t.hour := h; t.min   := m;  t.sec := 0;
  75.       PackTime(t,l)              { if date: l immer gleich }
  76.     END;
  77.     p := ParamStr(1);
  78.     i := Length(p);
  79.     REPEAT Dec(i) UNTIL (p[i] IN [':','\']) OR (i=0);
  80.     IF i=0 THEN p := ''
  81.            ELSE p := Copy(p, 1, i);       { Pfad abtrennen }
  82.     FindFirst(ParamStr(1), anyfile, s);
  83.     IF DosError <> 0 THEN
  84.       WriteLn('Falscher Dateiname !')
  85.     ELSE BEGIN
  86.       WriteLn('SFT ändert Eintrag:');
  87.       REPEAT
  88.         IF NOT date THEN BEGIN
  89.           l := s.time;                { Dateizeit holen um }
  90.           UnpackTime(l, t);        { altes Datum zu halten }
  91.           t.hour := h; t.min := m; t.sec := 0;       { neu }
  92.           PackTime(t, l)        { if not date: l stets neu }
  93.         END;
  94.         Assign(f, p + s.name);
  95.         {$I-} Reset(f); {$I+}        { Öffnen für SetFTime }
  96.         IF IOResult = 0 THEN BEGIN
  97.           SetFTime(f, l);           { Neuen Eintrag setzen }
  98.           Close(f);
  99.           WriteLn(p, s.name)         { Dateinamen anzeigen }
  100.         END ELSE
  101.           WriteLn('Kein Zugriff auf: ', p, s.name);
  102.         FindNext(s)        { nächste Datei: falls Wildcard }
  103.       UNTIL DosError=18;                   { no more files }
  104.     END;
  105.   END;
  106. END.
  107. (* ------------------------------------------------------ *)
  108. (*                  Ende von SFT.PAS                      *)
  109.