home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / utils / datestmp / ds-util1.lbr / TOUCH.PZS / TOUCH.PAS
Pascal/Delphi Source File  |  1988-04-04  |  3KB  |  79 lines

  1. PROGRAM touch;                {set matching files date/time}
  2.  
  3. VAR
  4.   search_name, path : STRING[127];
  5.   regs : RECORD AX, BX, CX, DX, BP, SI, DI, DS, ES, FLAGS : Integer; END;
  6.   dta : RECORD
  7.           dosuse : ARRAY[1..21] OF Byte;
  8.           attribute : Byte;
  9.           time, date, lowsiz, highsiz : Integer;
  10.           namext : ARRAY[1..13] OF Char; {terminated by a 0}
  11.           restofdta : ARRAY[0..255] OF Byte;
  12.         END;
  13.   current_date, current_time, set_count : Integer;
  14.   p : Byte;
  15.  
  16. BEGIN
  17.   IF ParamCount = 1 THEN
  18.     BEGIN
  19.       search_name := ParamStr(1)+#0;
  20.       WITH regs DO
  21.         BEGIN
  22.           AX := $1A00; DS := DSeg; DX := Ofs(dta); MsDos(regs); {set dta}
  23.           AX := $4E00; DS := DSeg; DX := Ofs(search_name[1]); {find first}
  24.           CX := 7;            {hidden file search}
  25.           MsDos(regs);
  26.           IF NOT Odd(flags) {test carry flag} THEN
  27.             BEGIN
  28.               AX := $2A00;
  29.               MsDos(regs);
  30.               current_date := (CX-1980) SHL 9 OR DX AND $F00 SHR 3 OR DX AND $1F;
  31.  
  32.               AX := $2C00;
  33.               MsDos(regs);
  34.               current_time := CX AND $1F00 SHL 3 OR CX AND $3F SHL 5 OR DX SHR 9;
  35.  
  36.               path := search_name;
  37.               p := Length(path);
  38.               WHILE (p > 0) AND NOT(path[p] IN [':', '\']) DO
  39.                 BEGIN Delete(path, p, 1); p := p-1; END;
  40.  
  41.               set_count := 0;
  42.               REPEAT
  43.                 WITH dta DO
  44.                   BEGIN       {touch file}
  45.                     AX := $3D00; {open file}
  46.                     DS := DSeg;
  47.                     search_name := path;
  48.                     p := 0;
  49.                     REPEAT
  50.                       p := p+1;
  51.                       search_name := search_name+namext[p];
  52.                     UNTIL namext[p] = #0;
  53.                     DX := Ofs(search_name[1]);
  54.                     MsDos(regs);
  55.  
  56.                     BX := AX; {handle}
  57.                     AX := $5701; {set files date/time}
  58.                     DX := (current_date);
  59.                     CX := (current_time);
  60.                     MsDos(regs);
  61.                     IF Odd(flags) THEN WriteLn('Unable to set file')
  62.                     ELSE set_count := set_count+1;
  63.  
  64.                     AX := $3E00; {close handle}
  65.                     MsDos(regs);
  66.                   END;
  67.                 AX := $4F00;  {find next file}
  68.                 MsDos(regs);
  69.               UNTIL AX = 18;
  70.               WriteLn(set_count, ' file(s) set to current date and time');
  71.             END
  72.           ELSE WriteLn('No files found');
  73.         END;
  74.   END ELSE BEGIN
  75.     WriteLn('Sets date and time stamp of all matching files to present:');
  76.     WriteLn('   e.g.   touch c:\turbo\t*.pas');
  77.   END;
  78. END.