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 fr fast jedes
+Betriebsystem compiliert werden.
+
+Derzeit sind folgende Versionen verfgbar:
+- DOS16 (mit einschaltbarer LFN-Untersttzung)
+- DOS16 (ohne LFN-Untersttzung)
+- DPMI  (ohne LFN-Untersttzung)
+- OS2   (ohne LFN-Untersttzung)
+- WIN16 (ohne LFN-Untersttzung)
+
+- DOS32 (mit automatischer LFN-Untersttzung)
+- WIN32 (mit LFN-Untersttzung)
+- 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 untersttzt 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 fr /R= kann ebenso auch /F= fr 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 untersttzt 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 fr /R= kann ebenso auch /F= fr 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 mssen 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 bezglich 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 wrde, allerdings
 keine Ver„nderungen an Dateidatum/Uhrzeit hinterlassen.
@@ -170,8 +220,8 @@
 allerdings, dass der Seek auf allen Diskettenlaufwerken ebenfalls
 durchgefhrt 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 untersttzt lange Dateinamen (LFNs) sofern das Betriebsystem
+diese anbietet.
+Fr DOS-Realmode (DOS16) muá diese Untersttzung derzeit per Argument
+(/LFN) eingeschaltet werden. Es existiert mit TOUCHNLF.ZIP aber auch
+eine Version ganz ohne LFN-Untersttzung.
+Fr 16 Bit DOS-Protected-Mode (DPMI) und Win16 ist die Untersttzung nicht
+verfgbar, da Windows 16 Bit dies nicht bietet und die Untersttzung
+fr 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 fr WIN16.
+
+
+A. Erweiterungen
+----------------
+Wer Verbesserungsvorschl„ge oder Portierungsvorschl„ge hat, darf sie
+mir gerne mitteilen. Meine E-Mail-Adresse ist
+  [EMAIL PROTECTED] .
+Fr eingebrachte Codebausteine wrde 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] .
-Fr eingebrachte Codebausteine wrde ich mich durch eine Danksagung in
-diesem Text und/oder in der Touch.pas erkenntlich zeigen.
 
-11. Systemvoraussetzungen
--------------------------
-Touch l„sst sich derzeit fr 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 fr DOS16,DOS32 und WIN32 verfgbar.
+
+- 1.1 (09.11.2004):
+  -----------------
+  - Die Ausgabe von Touch kann nun in eine Datei
+    umgeleitet werden.
+  - Abfangen des Versuchs Touch selbst zu touchen.
+  - Einfhrung einer Spezialversion ohne LFN-Untersttzung.
+
+- 1.2 (18.11.2004):
+  ------------------------
+  - Neues Feature Jobfile.
+  - Neues Feature ZC-PUFFER-Erstellung.
+  - Neue Platformen Win16 und OS2 verfgbar.
+  - 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

Antwort per Email an