Index: freexp/touch.inc
===================================================================
RCS file: /server/cvs/freexp/touch.inc,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- freexp/touch.inc 6 Nov 2004 21:56:42 -0000 1.1
+++ freexp/touch.inc 18 Nov 2004 16:04:11 -0000 1.2
@@ -14,26 +14,47 @@
{ finden Sie in der Datei TOUCH.TXT oder auf }
{ http://www.martinwodrich.de/Software/Touch/nutzung.htm }
{ --------------------------------------------------------------- }
-{ $Id: touch.inc,v 1.1 2004/11/06 21:56:42 mw Exp $ }
+{ $Id: touch.inc,v 1.2 2004/11/18 16:04:11 mw Exp $ }
{ Erstmal einiges definieren }
{ Borland Pascal 7.0 oder 8.0 }
{$IFDEF VER70 }
{$DEFINE BP}
- {$DEFINE BPLFN}
-{$ENDIF }
-{$IFDEF VER80 }
- {$DEFINE BP}
- {$DEFINE BPLFN}
+ {$IFNDEF WINDOWS}
+ {$IFNDEF DPMI}
+ {$IFNDEF OS2}
+ {$DEFINE BPLFN}
+ {$ENDIF}
+ {$ENDIF}
+ {$ENDIF}
+{$ELSE}
+ {$IFDEF VER80 }
+ {$DEFINE BP}
+ {$IFNDEF WINDOWS}
+ {$IFNDEF DPMI}
+ {$IFNDEF OS2}
+ {$DEFINE BPLFN}
+ {$ENDIF}
+ {$ENDIF}
+ {$ENDIF}
+ {$ELSE}
+ { FreePascal }
+ {$IFDEF DPMI}
+ {$UNDEF DPMI}
+ {$DEFINE DOS32}
+ {$ENDIF}
+ {$ENDIF }
{$ENDIF }
{ Andere Compiler brauchen momentan keine Extras }
{
$Log: touch.inc,v $
+ Revision 1.2 2004/11/18 16:04:11 mw
+ MW: - Update auf Touch 1.2
+
Revision 1.1 2004/11/06 21:56:42 mw
MW: - �bernahme von TOUCH 1.1b:
- Interne �nderung, um NON-LFN-Versionen leichter zu realisieren.
-
}
\ No newline at end of file
Index: freexp/touch.pas
===================================================================
RCS file: /server/cvs/freexp/touch.pas,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- freexp/touch.pas 9 Nov 2004 10:56:11 -0000 1.18
+++ freexp/touch.pas 18 Nov 2004 16:04:11 -0000 1.19
@@ -14,13 +14,13 @@
{ finden Sie in der Datei TOUCH.TXT oder auf }
{ http://www.martinwodrich.de/Software/Touch/nutzung.htm }
{ --------------------------------------------------------------- }
-{ $Id: touch.pas,v 1.18 2004/11/09 10:56:11 mw Exp $ }
+{ $Id: touch.pas,v 1.19 2004/11/18 16:04:11 mw Exp $ }
program touch;
{$I TOUCH.INC }
{ Betriebsystemabhaeniges }
{$IFNDEF WINDOWS }
-{$IFDEF OS2 }
+{$IFDEF VPOS2}
uses use32,dos,crt;
{$ELSE }
uses dos,crt{$IFDEF BPLFN},touchlfn{$ENDIF};
@@ -29,6 +29,63 @@
uses windos,wincrt,strings;
{$ENDIF }
+const anyfile=$21;
+ {$IFNDEF DPMI}
+ {$IFNDEF unix}
+ beta='.1'; {Patchlevel 1}
+ {$ELSE}
+ !!! Touch 1.2 l�uft nicht auf unixartigen Betriebsystemen !!
+ beta=' Alpha 5';
+ {$ENDIF}
+ {$ELSE}
+ beta=' Alpha 5';
+ {$ENDIF}
+ version='1.2'+beta;
+ touchname='Touch '+version;
+ copyright=' (c) 2003-2004 by Martin Wodrich';
+
+ { Betriebsystemstrings }
+ {$IFDEF MSDOS}
+ {$IFDEF BPLFN}
+ pform = ' (DOS16,LFN)';
+ {$ELSE}
+ pform = ' (DOS16,NON LFN)';
+ {$ENDIF}
+ {$ENDIF}
+ {$IFDEF DPMI}
+ pform = ' (DPMI16)';
+ {$ENDIF}
+ {$IFDEF WINDOWS}
+ pform = ' (WIN16)';
+ {$ENDIF}
+ {$IFDEF Dos32}
+ pform = ' (DOS32)';
+ {$ENDIF}
+ {$IFDEF Win32}
+ pform = ' (WIN32)';
+ {$ENDIF}
+ {$IFDEF Linux}
+ pform = ' (Linux)';
+ {$ENDIF}
+ {$IFDEF OS2}
+ {$IFDEF BP}
+ pform = ' (OS2,16 Bit)';
+ {$ELSE}
+ pform = ' (OS2,EMX)';
+ {$ENDIF}
+ {$ENDIF}
+
+ { Betriebsystemabh�ngiges }
+ {$IFNDEF unix}
+ OSDirSeparator = '\';
+ Paramark = '/';
+ CR='';
+ {$ELSE}
+ OSDirSeparator = '/';
+ Paramark = '-';
+ CR=#13;
+ {$ENDIF}
+
type
macrop = ^macro;
macro = record
@@ -36,21 +93,19 @@
next : macrop;
end;
-const anyfile=$21;
- version='1.1d';
-
var f:file;
g:text;
{$IFDEF WINDOWS }
dt : TDateTime;
DirInfo : TSearchRec;
- FName : String[79];
+ FName,own : String[79];
FNamep : Array[0..79] of Char;
Dir : Array[0..67] of Char;
Name : Array[0..8] of Char;
Ext : Array[0..4] of Char;
sp : Array[0..255] of Char;
reffile : String[79];
+ nc : boolean;
{$ELSE }
dt : DateTime;
DirInfo : SearchRec;
@@ -66,16 +121,20 @@
ftime : Longint;
ref : boolean;
s,u : string[100];
- sim : boolean;
+ sim,zcout : boolean;
files : byte;
st,n : macrop;
dateSet,timeSet : boolean;
findone,uc,nt : boolean;
+{$IFNDEF WINDOWS}
function ownfile:Pathstr;
+{$ELSE}
+function ownfile:String;
+{$ENDIF}
begin
FName:=paramstr(0);
- {$IFDEF WINDOWS }
+ {$IFDEF WINDOWS }
StrPCopy(fnamep,fname);
FileExpand(Dir,fnamep);
StrCopy(Dir,fnamep);
@@ -88,67 +147,99 @@
procedure logo;
begin
- writeln ('Touch '+version+' (c) 2003-2004 by Martin Wodrich');
- writeln ('');
+ {$IFNDEF WINDOWS}
+ writeln (touchname+pform+copyright+CR);
+ writeln (''+CR);
+ {$ELSE}
+ StrCopy(WindowTitle,touchname+pform+copyright);
+ {$ENDIF}
own:=ownfile;
end;
procedure StandardIO;
-BEGIN
- ASSIGN( Input, '' );
- RESET( Input );
- ASSIGN( Output, '' );
- REWRITE( Output );
-END;
+begin
+ assign( Input, '' );
+ reset( Input );
+ assign( Output, '' );
+ rewrite( Output );
+end;
procedure hilfe;
+var i:char;
begin
- writeln ('Parameter fehlt');
- writeln ('');
- writeln ('touch file1 file2 ... /t=hh:mm:ss /d=tt.mm.[yy]yy /r=refdatei /H
/S /V /G /K');
+ writeln ('Parameter fehlt'+CR);
+ writeln (''+CR);
+ writeln ('touch file1 file2 ... '+Paramark+'T=hh:mm:ss
'+Paramark+'D=tt.mm.[yy]yy '+
+ Paramark+'R=refdatei '+Paramark+'H '+Paramark+'S '+Paramark+'V '+
+ Paramark+'G '+Paramark+'K'+CR);
write (' ');
{$IFDEF BPLFN}
- write('/LFN ');
- {$ENDIF}
- writeln ('');
- writeln ('');
- writeln ('Macros:');
+ write(Paramark+'LFN ');
+ {$ENDIF}
+ {$IFDEF WINDOWS}
+ write(Paramark+'NC ');
+ {$ENDIF}
+ writeln (Paramark+'J=Jobfile '+Paramark+'ZC '+Paramark+'I '+CR);
+ writeln (''+CR);
+ writeln ('Macros:'+CR);
{$IFDEF BP}
- writeln (' #: jedes Laufwerk');
+ writeln (' #: jedes Laufwerk'+CR);
{$ENDIF}
- writeln (' \#\ jeder Verzeichnis einschliesslich gar keins');
- writeln (' \##\ und das ganze nochmals rekursiv');
- writeln (' # Das aktuelle Verzeichnis und alle alle Dateien in
direkten');
- writeln (' Unterverzeichnissen touchen');
- writeln (' ## Alle Dateien die im aktuellen Verzeichnis und rekursiv
in');
- writeln (' allen Unterverzeichnissen');
+ writeln (' '+OSDirSeparator+'#'+OSDirSeparator+
+ ' jeder Verzeichnis einschliesslich gar keins'+CR);
+ writeln (' '+OSDirSeparator+'##'+OSDirSeparator+
+ ' und das ganze nochmals rekursiv'+CR);
+ writeln (' # Das aktuelle Verzeichnis und alle alle Dateien
in direkten'+CR);
+ writeln (' Unterverzeichnissen touchen'+CR);
+ writeln (' ## Alle Dateien die im aktuellen Verzeichnis und
rekursiv in'+CR);
+ writeln (' allen Unterverzeichnissen'+CR);
{$IFDEF BP}
- writeln (' ### alle verfuegbaren Dateien (Vorsicht: Auf eigene
Gefahr!!!)');
+ writeln (' ### alle verfuegbaren Dateien (Vorsicht: Auf eigene
Gefahr!!!)'+CR);
{$ENDIF}
- writeln ('');
- writeln (' /t=Zeitangabe /d=Datum das gesetzt werden soll');
- writeln (' /H auch versteckte Dateien');
- writeln (' /S auch Systemdateien');
- writeln (' /V Vortaeuschmodus (Simulationslauf)');
- writeln (' /G Dateien in Grossbuchstaben wandeln');
- writeln (' /K (nur bei /G wirksam) Dateidatum und Uhrzeit beibehalten');
+ writeln (''+CR);
+ writeln (' '+Paramark+'T=Zeitangabe Zeit, auf das die Dateizeit gesetzt
werden soll.'+CR);
+ writeln (' '+Paramark+'D=Datum Datum, auf das das Dateidatum gesetzt
werden soll.'+CR);
+ writeln (' '+Paramark+'R=reffile Referenzdatei verwenden'+CR);
+ writeln (' '+Paramark+'H auch versteckte Dateien'+CR);
+ writeln (' '+Paramark+'S auch Systemdateien'+CR);
+ writeln (' '+Paramark+'V Vortaeuschmodus
(Simulationslauf)'+CR);
+ writeln (' '+Paramark+'G Dateien in Grossbuchstaben
wandeln'+CR);
+ writeln (' '+Paramark+'K (nur bei '+Paramark+'G wirksam)
Dateidatum und Uhrzeit beibehalten'+CR);
+ writeln ('Weiter mit beliebiger Taste'+CR);
+ i:=Readkey;
{$IFDEF BPLFN}
- writeln (' /LFN lange Dateinamen benutzen (Vorsicht: Nur einschalten wenn
unterstuetzt');
+ writeln (' '+Paramark+'LFN lange Dateinamen benutzen (Vorsicht:
Nur bei Verwendung'+CR);
+ writeln (' eines Betriebsystems benutzen, das in seiner
DOS-Emulation'+CR);
+ writeln (' lange Dateinamen unterstuetzt z.B. Windows ab
95'+CR);
+ {$ENDIF}
+ {$IFDEF WINDOWS}
+ writeln (' '+Paramark+'NC Konsolenfenster nicht schliessen'+CR);
{$ENDIF}
+ writeln (' '+Paramark+'J=Jobfile Dateiliste verwenden, statt lange
Argumentliste'+CR);
+ writeln (' '+Paramark+'ZC Neue Dateien als ZConnect-PUFFER
erstellen'+CR);
+ writeln (' '+Paramark+'I Interaktiver Modus (Lesen der
Dateiinfos von Standard-Input)'+CR);
end;
procedure isok(meldung:integer);
begin
if t<>0 then begin
case meldung of
- 1: Writeln('Datumsangabe ungueltig');
- 2: Writeln('Zeitangabe ungueltig');
+ 1: Writeln('Datumsangabe ungueltig'+CR);
+ 2: Writeln('Zeitangabe ungueltig'+CR);
end;
halt(1);
end;
end;
-{$IFNDEF WINDOWS }
+procedure newmacro;
+begin
+ {Dateien und Macros speichern}
+ NEW(n);
+ n^.text:=s;
+ n^.next:=st;
+ st:=n;
+end;
+
function ismacro:boolean;
var re :boolean;
begin
@@ -156,9 +247,9 @@
{Alle Laufwerke touchen}
if (copy(s,1,2)='#:') then re:=true;
{\#\ = keines oder beliebiges Verzeichnis}
- if pos('\#\',s)<>0 then re:=true;
+ if pos(OSDirSeparator+'#'+OSDirSeparator,s)<>0 then re:=true;
{\##\ Rekursives Verzeichnisladen}
- if pos('\##\',s)<>0 then re:=true;
+ if pos(OSDirSeparator+'##'+OSDirSeparator,s)<>0 then re:=true;
{# entspricht .\#\*.*}
if s='#' then re:=true;
{## entspricht .\##\*.*}
@@ -168,15 +259,6 @@
ismacro:=re;
end;
-procedure newmacro;
-begin
- {Dateien und Macros speichern}
- NEW(n);
- n^.text:=s;
- n^.next:=st;
- st:=n;
-end;
-
procedure exmacro;
const test='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var x,y : string[79];
@@ -192,14 +274,14 @@
begin
y:=test;
-writeln('Expandiere Makro: '+s);
+writeln('Expandiere Makro: '+s+CR);
if (copy(s,1,2)='#:') then begin
{$IFDEF BP}
if s<>'#:' then begin
for i:=1 to 26 do begin
{Alle Laufwerke touchen}
{$I-}
- assign(f,y[i]+':\touch.$$$');
+ assign(f,y[i]+':'+OSDirSeparator+'touch.$$$');
rewrite(f);
{$I+}
if ioresult=0 then begin
@@ -208,16 +290,17 @@
close(f);
erase(f);
end;
- end;
- end;
+ end;
+ end;
{$ENDIF}
end
- else if pos('\#\',s)<>0 then begin
+ else if pos(OSDirSeparator+'#'+OSDirSeparator,s)<>0 then begin
{# = keines oder beliebiges Verzeichnis}
- x:=copy(s,1,pos('\#\',s))+copy(s,pos('\#\',s)+3,255);
+ x:=copy(s,1,pos(OSDirSeparator+'#'+OSDirSeparator,s))+
+ copy(s,pos(OSDirSeparator+'#'+OSDirSeparator,s)+3,255);
NewEntry;
- y:=copy(s,1,pos('\#\',s));
- x:=copy(s,1,pos('\#\',s))+'*.*';
+ y:=copy(s,1,pos(OSDirSeparator+'#'+OSDirSeparator,s));
+ x:=copy(s,1,pos(OSDirSeparator+'#'+OSDirSeparator,s))+'*.*';
{$IFDEF WINDOWS }
StrPCopy(sp,x);
Findfirst(sp,$10,DirInfo);
@@ -229,10 +312,11 @@
{$ENDIF}
{$ENDIF}
while DosError=0 do
- begin
+ begin
z:=(DirInfo.Attr and $10);
if ((DirInfo.Name[1]<>'.') and (z=$10)) then begin
- x:=y+DirInfo.Name+'\'+copy(s,pos('\#\',s)+3,255);
+ x:=y+DirInfo.Name+OSDirSeparator+copy(s,pos(OSDirSeparator+'#'+
+ OSDirSeparator,s)+3,255);
NewEntry;
end;
{$IFNDEF BPLFN}
@@ -242,16 +326,17 @@
{$ENDIF}
end;
end
- else if pos('\##\',s)<>0 then begin
+ else if pos(OSDirSeparator+'##'+OSDirSeparator,s)<>0 then begin
{## = keines oder beliebiges Verzeichnis recursiv}
- x:=copy(s,1,pos('\##\',s))+copy(s,pos('\##\',s)+4,255);
+ x:=copy(s,1,pos(OSDirSeparator+'##'+OSDirSeparator,s))+
+ copy(s,pos(OSDirSeparator+'##'+OSDirSeparator,s)+4,255);
NewEntry;
- y:=copy(s,1,pos('\##\',s));
- x:=copy(s,1,pos('\##\',s))+'*.*';
+ y:=copy(s,1,pos(OSDirSeparator+'##'+OSDirSeparator,s));
+ x:=copy(s,1,pos(OSDirSeparator+'##'+OSDirSeparator,s))+'*.*';
{$IFDEF WINDOWS }
StrPCopy(sp,x);
Findfirst(sp,$10,DirInfo);
- {$ELSE }
+ {$ELSE }
{$IFNDEF BPLFN}
Findfirst(x,$10,DirInfo);
{$ELSE}
@@ -262,7 +347,8 @@
begin
z:=(DirInfo.Attr and $10);
if ((DirInfo.Name[1]<>'.') and (z=$10)) then begin
- x:=y+DirInfo.Name+'\##\'+copy(s,pos('\##\',s)+4,255);
+ x:=y+DirInfo.Name+OSDirSeparator+'##'+OSDirSeparator+
+ copy(s,pos(OSDirSeparator+'##'+OSDirSeparator,s)+4,255);
NewEntry;
end;
{$IFNDEF BPLFN}
@@ -273,21 +359,20 @@
end;
end
else if s='#' then begin
- x:='.\#\*.*';
+ x:='.'+OSDirSeparator+'#'+OSDirSeparator+'*.*';
NewEntry;
end
else if s='##' then begin
- x:='.\##\*.*';
- NewEntry;
+ x:='.'+OSDirSeparator+'##'+OSDirSeparator+'*.*';
+ NewEntry;
end
else if s='###' then begin
{$IFDEF BP}
- x:='#:\##\*.*';
+ x:='#:'+OSDirSeparator+'##'+OSDirSeparator+'*.*';
NewEntry;
{$ENDIF}
end;
end;
-{$ENDIF}
function Testtime(ftime:longint;dateset,timeset:boolean):longint;
var foldtime:longint;
@@ -332,7 +417,7 @@
if fname[i]='*' then t:=false;
if fname[i]='?' then t:=false;
end;
- if (fname[length(fname)]='\') then t:=false;
+ if (fname[length(fname)]=OSDirSeparator) then t:=false;
{weitere Wildcards?}
isnoWild:=t;
end;
@@ -357,8 +442,14 @@
sim:=false;
uc:=false;
nt:=false;
+ zcout:=false;
+ randomize;
+ {$IFDEF WINDOWS}
+ nc:=false;
+ {$ENDIF}
end;
+{$IFDEF BPLFN}
function LFNuseage:boolean;
var t:boolean;
i:integer;
@@ -376,29 +467,84 @@
s:='';
u:=ParamStr(i);
for j:=1 to 4 do s:=s+upcase(u[j]);
- if s='/LFN' then t:=true;
+ if s=Paramark+'LFN' then t:=true;
end;
LFNuseage:=t;
end;
end;
+{$ENDIF}
+function strs(v:integer):string;
+var s:string;
begin
- {$IFNDEF BP }
- {$IFDEF WINDOWS }
- {$M 65520,65520}
+ str(v,s);
+ strs:=s;
+end;
+
+procedure ZC;
+begin
+ writeln(g,'EMP: /TEST'+CR);
+ writeln(g,'ABS: [EMAIL PROTECTED]'+CR);
+ writeln(g,'BET: Testnachricht '+touchname+pform+CR);
+ writeln(g,'EDA: '+strs(dt.Year)+strs(dt.Month)+strs(dt.Day)+
+ strs(dt.Hour)+strs(dt.Min)+strs(dt.Sec)+
+ 'W+0'+CR);
+ writeln(g,'MID: '+strs(dt.Year)+strs(dt.Month)+strs(dt.Day)+
+ strs(dt.Hour)+strs(dt.Min)+strs(dt.Sec)+
+
'.'+strs(random(10))+strs(random(10))+strs(random(10))+strs(random(10))+
+
strs(random(10))+strs(random(10))+strs(random(10))+strs(random(10))+'@touch.invalid'+CR);
+ writeln(g,'ROT: touch.invalid!test'+CR);
+ writeln(g,'MAILER: '+touchname+pform+CR);
+ writeln(g,'LEN: 30'+CR);
+ writeln(g,''+CR);
+ writeln(g,'Dies ist eine Testnachricht.'+CR);
+end;
+
+function validparm:boolean;
+begin
+ {$IFDEF WINDOWS}
+ if ((ParamCount = 1) and ((ParamStr(1)=Paramark+'NC') or
(ParamStr(1)=Paramark+'nc'))) then begin
+ validparm:=false;
+ nc:=true;
+ end
+ else validparm:=true;
{$ELSE}
- {$M 65520}
- {$ENDIF }
+ validparm:=true;
+ {$ENDIF}
+end;
+
+begin
+ {$IFNDEF BP }
+ { FreePascal }
+ {$IFDEF WINDOWS }
+ {$M 65520,655360}
+ {$ELSE}
+ {$M 65520}
+ {$ENDIF }
{$ELSE }
- {$M 65520,0,655360}
+ { Borland Pascal }
+ {$IFDEF MSDOS}
+ {$M 65520,0,655360}
+ {$ENDIF}
+ {$IFDEF DPMI}
+ {$M 65520}
+ {$ENDIF}
+ {$IFDEF WINDOWS}
+ {.$M 65520,655360}
+ {$ENDIF}
{$ENDIF }
{$IFDEF BPLFN}
if LFNuseage then EnableLFN;
{$ENDIF}
+ {$IFDEF WINDOWS}
+ logo;
+ InitWinCrt;
+ {$ELSE}
StandardIO;
logo;
+ {$ENDIF}
init_touch;
- if ParamCount = 0 then hilfe
+ if ((ParamCount = 0) or (validparm=false)) then hilfe
else
begin
{Aktuelle Uhrzeit ermitteln}
@@ -409,8 +555,9 @@
for i:=1 to paramcount do
begin
s:=ParamStr(i);
- if (copy(s,1,1)='/') then begin
+ if (copy(s,1,1)=Paramark) then begin
s[2]:=UpCase(s[2]);
+ s[3]:=UpCase(s[3]);
{Parameter gefunden}
if (copy(s,2,2)='T=') then begin
{Uhrzeit lesen}
@@ -426,7 +573,7 @@
val(s,se,t);
isok(2);
if (((h<0) or (h>23)) or ((mi<0) or (mi>59)) or ((se<0) or (se>59)))
then begin
- writeln('Zeitangabe ungueltig');
+ writeln('Zeitangabe ungueltig'+CR);
halt(1);
end;
timeSet:=true;
@@ -445,7 +592,7 @@
val(s,y,t);
isok(1);
if (((d<1) or (d>31)) or ((mo<1) or (mo>12)) or ((y<0) or ((y>99) and
((y<1980) or (y>2107))))) then begin
- Writeln('Datumsangabe ungueltig');
+ Writeln('Datumsangabe ungueltig'+CR);
halt(1);
end;
dateSet:=true;
@@ -457,10 +604,17 @@
{Simulationslauf}
if (copy(s,2,1)='V') then begin
sim:=true;
- writeln ('Simulationslauf - keine Veraenderungen werden getaetigt');
+ writeln ('Simulationslauf - keine Veraenderungen werden
getaetigt'+CR);
+ end;
+ if (copy(s,2,2)='ZC') then begin
+ zcout:=true;
+ Writeln ('Neue Dateien werden als ZConnect-PUFFER erstellt.'+CR);
end;
if (copy(s,2,1)='G') then uc:=true;
if (copy(s,2,1)='K') then nt:=true;
+ {$IFDEF WINDOWS}
+ if (copy(s,2,2)='NC') then nc:=true;
+ {$ENDIF}
if ((copy(s,2,2)='R=') or (copy(s,2,2)='F=')) then begin
{Referenzdatei}
s:=copy(s,4,255);
@@ -470,26 +624,53 @@
Reset(f,1);
{$I+}
If Ioresult<>0 then begin
- Writeln('Referenzdatei nicht gefunden');
+ Writeln('Referenzdatei nicht gefunden'+CR);
halt(1);
end;
GetFTime(f,Ftime);
ref:=true;
Close(f);
end;
+ if (copy(s,2,2)='J=') then begin
+ {Jobfile}
+ s:=copy(s,4,255);
+ Assign(g,s);
+ {$I-}
+ Reset(g);
+ {$I+}
+ If Ioresult<>0 then begin
+ Writeln('Jobdatei nicht gefunden'+CR);
+ halt(1);
+ end;
+ while not EOF(g) do
+ begin
+ Readln(g,s);
+ newmacro;
+ end;
+ Close(g);
+ end;
+ if (copy(s,2,1)='I') then begin
+ {Interaktiver Modus}
+ Readln(s);
+ while not (s='') do
+ begin
+ newmacro;
+ Readln(s);
+ end;
+ end;
end
else newmacro;
end;
if ((ref and dateset) or (ref and timeset)) then begin
- Writeln('Entweder Datum/Uhrzeit oder Referenzdatei');
+ Writeln('Entweder Datum/Uhrzeit oder Referenzdatei'+CR);
halt(1);
end;
if not (nt and uc) then begin
- if dateset then writeln('Datei-Datum wird gesetzt');
- if timeset then writeln('Datei-Zeit wird gesetzt');
- if not (dateset or timeset) then writeln ('Datei-Datum und Datei-Zeit
werden aktualisiert');
+ if dateset then writeln('Datei-Datum wird gesetzt'+CR);
+ if timeset then writeln('Datei-Zeit wird gesetzt'+CR);
+ if not (dateset or timeset) then writeln ('Datei-Datum und Datei-Zeit
werden aktualisiert'+CR);
end;
- if uc then writeln('Dateinamen grossschreiben');
+ if uc then writeln('Dateinamen grossschreiben'+CR);
{Datetime packen}
if not ref then begin
dt.Year:=y;
@@ -502,7 +683,7 @@
end;
{Dateien verarbeiten}
if st=nil then begin
- writeln('Dateiangabe fehlt');
+ writeln('Dateiangabe fehlt'+CR);
halt(1);
end;
n:=st;
@@ -511,12 +692,10 @@
st:=n^.next;
dispose(n);
n:=st;
- {$IFNDEF WINDOWS }
if ismacro then exmacro else
- {$ENDIF }
begin
{kein Sonderparameter also Dateiname}
- if (s[length(s)]='\') then s:=s else begin
+ if (s[length(s)]=OSDirSeparator) then s:=s else begin
findone:=false;
{$IFDEF WINDOWS }
StrPCopy(sp,s);
@@ -551,7 +730,7 @@
if fname<>own then begin
write(fname);
{Refdatei nicht touchen}
- if ref and testname(reffile,fname) then writeln(' Referenz')
+ if ref and testname(reffile,fname) then writeln(' Referenz'+CR)
else begin
if (sim=false) then begin
Assign(f,fname);
@@ -559,23 +738,28 @@
{$I-}
if uc then begin
rename(f,'temp.$$$');
- if IOResult <> 0 then writeln(' Umbenennen der Datei
fehlgeschlagen');
+ if IOResult <> 0 then writeln(' Umbenennen der Datei
fehlgeschlagen'+CR);
for i:=1 to length(fname) do fname[i]:=upcase(fname[i]);
rename(f,fname);
if IOResult <> 0 then begin
- writeln(' Umbenennen der Datei kritisch
fehlgeschlagen');
+ writeln(' Umbenennen der Datei kritisch
fehlgeschlagen'+CR);
halt(1);
end;
end;
Reset(f,1);
{$I+}
- if IOResult <> 0 then writeln(' Oeffnen der Datei
fehlgeschlagen');
+ if IOResult <> 0 then writeln(' Oeffnen der Datei
fehlgeschlagen'+CR);
if not (nt and uc) then
ftime:=Testtime(ftime,dateset,timeset);
+ {$IFNDEF unix}
SetFtime(f,Ftime);
- if Doserror<>0 then writeln('!') else writeln('');
+ if Doserror<>0 then writeln('!'+CR) else writeln(''+CR);
+ close(f);
+ {$ELSE}
close(f);
+ if unixsetftime(s,ftime2epoch(ftime)) then writeln(''+CR)
else writeln('!'+CR);
+ {$ENDIF}
end
- else writeln('');
+ else writeln(''+CR);
end;
end;
{$IFNDEF BPLFN}
@@ -587,25 +771,32 @@
{Keine Datei gefunden ? Dann neu anlegen!!}
if findone=false then begin
if isnoWild(fname) then begin
- writeln(s);
- if (sim=false) then begin
- Assign(f,s);
- {$I-}
- Rewrite(f);
- {$I+}
- if IOResult <> 0 then writeln(' Anlegen der neuen Datei
fehlgeschlagen');
- {$I-}
- Reset(f);
- {$I+}
- if IOResult <> 0 then writeln(' Anlegen der neuen Datei
fehlgeschlagen');
- {$I-}
- SetFtime(f,Ftime);
- {$I+}
- if IOResult <> 0 then writeln (' Touchen der neuen Datei
fehlgeschlagen');
- {$I-}
- close(f);
- {$I+}
- if ioresult <> 0 then writeln (' Schliessen der neuen Datei
fehlgeschlagen');
+ writeln(s+CR);
+ if (sim=false) then begin
+ Assign(g,s);
+ {$I-}
+ Rewrite(g);
+ {$I+}
+ if IOResult <> 0 then writeln(' Anlegen der neuen Datei
fehlgeschlagen'+CR)
+ else if zcout=true then ZC;
+ {$IFNDEF unix}
+ {$I-}
+ Reset(g);
+ {$I+}
+ if IOResult <> 0 then writeln(' Anlegen der neuen Datei
fehlgeschlagen'+CR);
+ {$I-}
+ SetFtime(g,Ftime);
+ {$I+}
+ if IOResult <> 0 then writeln (' Touchen der neuen Datei
fehlgeschlagen'+CR);
+ {$ENDIF}
+ {$I-}
+ close(g);
+ {$I+}
+ if ioresult <> 0 then writeln (' Schliessen der neuen Datei
fehlgeschlagen'+CR);
+ {$IFDEF unix}
+ if unixsetftime(s,ftime2epoch(ftime)) then write('')
+ else writeln(' Touchen der neuen Datei fehlgeschlagen'+CR);
+ {$ENDIF}
end;
end;
end;
@@ -617,9 +808,16 @@
end;
until n=nil;
end;
+ {$IFDEF WINDOWS}
+ if nc then Readln;
+ DoneWinCrt;
+ {$ENDIF}
end.
{
$Log: touch.pas,v $
+ Revision 1.19 2004/11/18 16:04:11 mw
+ MW: - Update auf Touch 1.2
+
Revision 1.18 2004/11/09 10:56:11 mw
MW: - Fehlerbereinigung
Index: freexp/doc/touch.txt
===================================================================
RCS file: /server/cvs/freexp/doc/touch.txt,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- freexp/doc/touch.txt 12 Aug 2004 11:18:02 -0000 1.5
+++ freexp/doc/touch.txt 18 Nov 2004 16:00:34 -0000 1.6
@@ -1,21 +1,31 @@
-Versuch einer Dokumentation zu Touch (c) 2003 by Martin Wodrich
----------------------------------------------------------------
+Dokumentation zu Touch (c) 2003-2004 by Martin Wodrich
+------------------------------------------------------
Inhaltsverzeichnis
------------------
1. Einleitung
-2. Dateiparameter
-2.1 Eindeutige Dateien
-2.2 Wildcards
-3. Referenzdatei
-4. Datum/Uhrzeit festlegen
-5. Verzeichnismakros
-6. Spezielle Dateien
-7. Simulationslauf
-8. Automatische Gro�schreibung
-9. Lizenz- und Nutzungsbedingungen
-10. Erweiterungen
-11. Systemvoraussetzungen
+2. Systemvoraussetzungen
+3. Dateiparameter
+3.1 Eindeutige Dateien
+3.2 Wildcards
+3.3 Verzeichnismakros
+3.4 Spezielle Dateien
+4. Dateiparameter mit besonderer Funktion
+4.1 Referenzdatei
+4.2 Jobdatei
+5. Datum/Uhrzeit festlegen
+6. Besondere Funktionen
+6.1 Simulationslauf
+6.2 Automatische Gro�schreibung
+6.3 ZConnect-PUFFER erstellen
+6.4 Interaktiver Modus
+7. Betriebsystemabh�ngigkeiten
+7.1 Lange Dateinamen
+7.2 Beenden von Touch
+A. Erweiterungen
+B. Lizenz- und Nutzungsbedingungen
+C. Versionsgeschichte
+
1. Einleitung
@@ -25,9 +35,32 @@
spezielle Kniffe, die andere Implementierungen oft nicht haben.
Alle bearbeiteten Dateien werden mit vollst�ndigem Pfad ausgegeben.
-2. Dateiparameter
+
+2. Systemvoraussetzungen
+-------------------------
+Touch ist portabel geschrieben. Es kann daher f�r fast jedes
+Betriebsystem compiliert werden.
+
+Derzeit sind folgende Versionen verf�gbar:
+- DOS16 (mit einschaltbarer LFN-Unterst�tzung)
+- DOS16 (ohne LFN-Unterst�tzung)
+- DPMI (ohne LFN-Unterst�tzung)
+- OS2 (ohne LFN-Unterst�tzung)
+- WIN16 (ohne LFN-Unterst�tzung)
+
+- DOS32 (mit automatischer LFN-Unterst�tzung)
+- WIN32 (mit LFN-Unterst�tzung)
+- OS2-EMX
+- Linux
+(weitere Betriebssysteme sind m�glich)
+
+Win64(AMD64) und Win64(IA64) sollte compilierbar sein, kann von mir aber
+mangels 64Bit-Windows weder erstellt noch getestet werden.
+
+
+3. Dateiparameter
-----------------
-2.1 Eindeutige Dateien
+3.1 Eindeutige Dateien
----------------------
Touch kann mit fast beliebig vielen Dateien als Parameter aufgerufen
werden. Diese Dateien k�nnen mit und auch ohne vollst�ndigen Pfad
@@ -44,7 +77,7 @@
existiert, so wird die Datei neu angelegt.
-2.2 Wildcards
+3.2 Wildcards
-------------
Als Dateiparameter sind ebenfalls sogenannte Wildcards erlaubt.
Diese allerdings ausschlie�lich im Dateinamen, nicht aber in
@@ -56,49 +89,9 @@
Bei der Verwendung von Wildcards werden keine Dateien neu angelegt
wie das u.U. bei eindeutigen Dateien geschehen kann.
-3. Referenzdatei
-----------------
-Touch unterst�tzt die Verwendung einer Referenzdatei. Dies ist eine
-Datei, deren Dateidatum und Uhrzeit auf alle anderen angegebenen
-Dateien kopiert wird. Es ist dabei egal, an welcher Stelle der
-Parameter-Liste die Referenzdatei angegeben wird. Sie bezieht sich
-immer auf alle angegebenen Dateien. Die Referenzdatei wird durch ein
-vorgestelltes /R= als solche kenntlich gemacht.
-
-(Als alias f�r /R= kann ebenso auch /F= f�r die Angabe der
-Referenzdatei genommen werden).
-
-Beispiel:
-touch datei1 /R=datei2 datei3
-(Kopiert das Dateidatum und die Uhrzeit von Datei2 auf Datei1 und
-Datei3)
-
-
-4. Datum/Uhrzeit festlegen
---------------------------
-Mit /t=Uhrzeit kann eine Uhrzeit �bergeben werden, welche dann bei
-allen als Parameter �bergebenen Dateien gesetzt wird.
-Die Angabe einer Uhrzeit geschieht im Format hh:mm:ss, also Stunde,
-Minute und Sekunde jeweils durch Doppelpunkt getrennt.
-
-Mit /d=Datum kann entsprechend ein Datum �bergeben werden.
-Dieses wird dabei im Format tt.mm.yy oder tt.mm.yyyy eingegeben.
-Das hei�t Tag, Monat und Jahr werden durch einen Punkt getrennt.
-Das Jahr kann zweistellig, aber auch 4-stellig eingegeben werden.
-
-Bei diesen Angaben wird ein Plausibilit�tstest gemacht, bevor sie auf
-irgentwelche Dateien angewendet werden. Sind diese Angaben nicht
-plausibel, so bricht Touch ab. Ebenso wenn Referenzdatei und
-Datum/Uhrzeit gesetzt wird.
-
-Wird nur Datum oder nur Uhrzeit vorgegeben, so wird die fehlende
-Angabe an den Dateien nicht ver�ndert. Fehlt jegliche Angabe von
-Datum und Uhrzeit so wird das aktuelle Datum und die aktuelle
-Zeit bei Programmstart benutzt. L�uft Touch also mehrere Sekunden
-so haben dennoch alle Dateien die gleiche Uhrzeit und Datumsangabe.
-5. Verzeichnismakros
---------------------
+3.3 Verzeichnismakros
+---------------------
Touch besitzt eine sehr umfassende M�glichkeit, um Verzeichnisangaben
in Kurzform anzugeben.
@@ -151,8 +144,8 @@
angelegt werden, solange die Dateiangabe eindeutig ist und keine
Wildcards enth�lt.
-6. Spezielle Dateien
---------------------
+3.4 Spezielle Dateien
+---------------------
Touch ver�ndert normalerweise versteckte Dateien sowie Systemdateien
nicht, sondern nur durch direkte Angabe des Parameters.
@@ -161,8 +154,65 @@
Diese Angaben k�nnen auch beide zusammen benutzt werden.
-7. Simulationslauf
+
+4. Dateiparameter mit besonderer Funktion
+-----------------------------------------
+4.1. Referenzdatei
------------------
+Touch unterst�tzt die Verwendung einer Referenzdatei. Dies ist eine
+Datei, deren Dateidatum und Uhrzeit auf alle anderen angegebenen
+Dateien kopiert wird. Es ist dabei egal, an welcher Stelle der
+Parameter-Liste die Referenzdatei angegeben wird. Sie bezieht sich
+immer auf alle angegebenen Dateien. Die Referenzdatei wird durch ein
+vorgestelltes /R= als solche kenntlich gemacht.
+
+(Als alias f�r /R= kann ebenso auch /F= f�r die Angabe der
+Referenzdatei genommen werden).
+
+Beispiel:
+touch datei1 /R=datei2 datei3
+(Kopiert das Dateidatum und die Uhrzeit von Datei2 auf Datei1 und
+Datei3)
+
+4.2 Jobdatei
+------------
+Die zu touchenden Dateien m�ssen nicht unbedingt als Parameter an Touch
+�bergeben werden. Sie k�nnen auch als Liste in einer Datei geschrieben
+sein. Diese Datei wird Touch dann mit vor dem Dateinamen gestelltem
+/J= als solche kenntlich gemacht.
+Es existieren die gleichen M�glichkeiten bez�glich Makros und Wildcards
+wie bei der �bergabe als Parameter.
+Auch die Jobdatei kann an beliebiger Stelle in der Parameterliste stehen.
+
+
+5. Datum/Uhrzeit festlegen
+--------------------------
+Mit /t=Uhrzeit kann eine Uhrzeit �bergeben werden, welche dann bei
+allen als Parameter �bergebenen Dateien gesetzt wird.
+Die Angabe einer Uhrzeit geschieht im Format hh:mm:ss, also Stunde,
+Minute und Sekunde jeweils durch Doppelpunkt getrennt.
+
+Mit /d=Datum kann entsprechend ein Datum �bergeben werden.
+Dieses wird dabei im Format tt.mm.yy oder tt.mm.yyyy eingegeben.
+Das hei�t Tag, Monat und Jahr werden durch einen Punkt getrennt.
+Das Jahr kann zweistellig, aber auch 4-stellig eingegeben werden.
+
+Bei diesen Angaben wird ein Plausibilit�tstest gemacht, bevor sie auf
+irgentwelche Dateien angewendet werden. Sind diese Angaben nicht
+plausibel, so bricht Touch ab. Ebenso wenn Referenzdatei und
+Datum/Uhrzeit gesetzt wird.
+
+Wird nur Datum oder nur Uhrzeit vorgegeben, so wird die fehlende
+Angabe an den Dateien nicht ver�ndert. Fehlt jegliche Angabe von
+Datum und Uhrzeit so wird das aktuelle Datum und die aktuelle
+Zeit bei Programmstart benutzt. L�uft Touch also mehrere Sekunden
+so haben dennoch alle Dateien die gleiche Uhrzeit und Datumsangabe.
+
+
+6. Besondere Funktionen
+-----------------------
+6.1 Simulationslauf
+-------------------
Wird der Parameter /V (Vort�uschmodus) benutzt, so wird Touch alles
ausgeben, was es bei einem regul�ren Lauf ausgeben w�rde, allerdings
keine Ver�nderungen an Dateidatum/Uhrzeit hinterlassen.
@@ -170,8 +220,8 @@
allerdings, dass der Seek auf allen Diskettenlaufwerken ebenfalls
durchgef�hrt wird!!!
-8. Automatische Gro�schreibung
-------------------------------
+6.2 Automatische Gro�schreibung
+-------------------------------
Mit dem optionalen Parameter /G kann erreicht werden, dass alle Dateien
nach dem Touchlauf in Gro�buchstaben im Verzeichnis stehen.
@@ -179,7 +229,53 @@
nicht ver�ndert wird. Dieser Parameter ist nur bei Verwendung des
Parameters /G wirksam, sonst wird er ignoriert.
-9. Lizenz- und Nutzungsbedingungen
+6.3 ZConnect-PUFFER erstellen
+-----------------------------
+Normalerweise erstellt Touch Dateien mit 0 Bytes Gr��e. Wird das
+Argument /ZC angegeben, so erstellt Touch stattdessen ZConnect-PUFFER
+mit einer Testnachricht. Dabei enth�lt jede Datei exakt eine Nachricht,
+mit eindeutiger Message-ID.
+
+6.4 Interaktiver Modus
+----------------------
+Wird der Parameter /I angegeben so liest Touch Informationen �ber
+zu bearbeitende Dateien �ber Standard-Input.
+
+
+7. Betriebsystemabh�ngigkeiten
+------------------------------
+7.1 Lange Dateinamen
+--------------------
+Touch unterst�tzt lange Dateinamen (LFNs) sofern das Betriebsystem
+diese anbietet.
+F�r DOS-Realmode (DOS16) mu� diese Unterst�tzung derzeit per Argument
+(/LFN) eingeschaltet werden. Es existiert mit TOUCHNLF.ZIP aber auch
+eine Version ganz ohne LFN-Unterst�tzung.
+F�r 16 Bit DOS-Protected-Mode (DPMI) und Win16 ist die Unterst�tzung nicht
+verf�gbar, da Windows 16 Bit dies nicht bietet und die Unterst�tzung
+f�r 16 Bit DOS-Protected-Mode nicht sicher ist.
+Alle 32 Bit Compilate (DOS32 und WIN32) k�nnen automatisch lange
+Dateinamen nutzen.
+
+7.2 Beenden von Touch
+---------------------
+Normalerweise beendet sich Touch sobald es mit seiner Aufgabe
+fertig ist. Unter WIN16 kann mit dem Argument /nc dies verhindert
+werden, da unter dieser Platform Touch in einem eignen Fenster
+l�uft und sich dieses unter Umst�nden zu schnell schlie�t.
+Dieser Parameter existiert nur f�r WIN16.
+
+
+A. Erweiterungen
+----------------
+Wer Verbesserungsvorschl�ge oder Portierungsvorschl�ge hat, darf sie
+mir gerne mitteilen. Meine E-Mail-Adresse ist
+ [EMAIL PROTECTED] .
+F�r eingebrachte Codebausteine w�rde ich mich durch eine Danksagung in
+diesem Text und/oder in der Touch.pas erkenntlich zeigen.
+
+
+B. Lizenz- und Nutzungsbedingungen
----------------------------------
Touch ist Nodeware. Dies bedeutet, dass ich benachrichtigt werden
m�chte, wenn Touch innerhalb der Zusammenstellung eines
@@ -193,27 +289,32 @@
Freeware verwendbar, da ich bereits wei�, dass es dort eingesetzt wird
und FreeXP selbst Freeware ist.
-Grunds�tzlich gilt: Die datei Touch.exe bzw. Touch.pas darf nur
+Grunds�tzlich gilt: Die Datei Touch.exe bzw. Touch.pas darf nur
zusammen mit diesem Text verbreitet werden.
-10. Erweiterungen
-----------------
-Wer Verbesserungsvorschl�ge oder Portierungsvorschl�ge hat, darf sie
-mir gerne mitteilen. Meine E-Mail-Adresse ist
- [EMAIL PROTECTED] .
-F�r eingebrachte Codebausteine w�rde ich mich durch eine Danksagung in
-diesem Text und/oder in der Touch.pas erkenntlich zeigen.
-11. Systemvoraussetzungen
--------------------------
-Touch l�sst sich derzeit f�r jedes Betriebsystem mit DOS-artiger
-Verzeichnisstruktur einsetzen.
-Von mir selbst kann allerdings nur eine 16- und 32-Bit DOS-Version
-sowie eine Win32-Version erzeugt werden. Eine OS/2-Version sollte ohne
-weitere Anpassungen gelingen (Danke an Thomas Seiffert). Win64(AMD64)
-und Win64(IA64) sollte compilierbar sein, kann von mir aber mangels
-64Bit-Windows weder erstellt noch getestet werden.
+C. Versionsgeschichte
+---------------------
+- 1.0 (09.08.2003):
+ -----------------------
+ - Erste stabile Fassung von Touch.
+ - Compilate f�r DOS16,DOS32 und WIN32 verf�gbar.
+
+- 1.1 (09.11.2004):
+ -----------------
+ - Die Ausgabe von Touch kann nun in eine Datei
+ umgeleitet werden.
+ - Abfangen des Versuchs Touch selbst zu touchen.
+ - Einf�hrung einer Spezialversion ohne LFN-Unterst�tzung.
+
+- 1.2 (18.11.2004):
+ ------------------------
+ - Neues Feature Jobfile.
+ - Neues Feature ZC-PUFFER-Erstellung.
+ - Neue Platformen Win16 und OS2 verf�gbar.
+ - Hilfe �berarbeitet.
+ - Dokumentation �berarbeitet.
-Waltrop, 06.08.2003
+Waltrop, 18.11.2004
Martin Wodrich
------------------------------------------------------------------------
FreeXP CVS-Mailingliste
[EMAIL PROTECTED]
http://www.freexp.de/cgi-bin/mailman/listinfo/cvs-list