Index: tol/stdlib/general/system/_system.tol
===================================================================
--- tol/stdlib/general/system/_system.tol	(revision 8958dab3b88847918d4f50fc407822b6acb1b3c8)
+++ tol/stdlib/general/system/_system.tol	(revision 231d0387bfa43ee68575d1d2cb1b301027acaae4)
@@ -16,4 +16,5 @@
 // OSFilCopy:   Copies a file to other directory or with a different name.
 // OSFilMove:   Moves a file to other directory or with a different name.
+// OSFilCat:    Cats a set of files into a new one.
 // OSDirExist:  Cheks if a folder exists
 // OSDirMake:   Creates a directory and all its non existent parents
@@ -364,5 +365,4 @@
     OSPathQt(oldFil)+" "+OSPathQt(newFil));
   OSShowErr(ok,call)
-
 };
 //////////////////////////////////////////////////////////////////////////////
@@ -396,4 +396,34 @@
 En caso de error devuelve FALSO y si no CIERTO"),
 OSFilMove);
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+Real OSFilCat(Set oldFiles, Text newFil)
+//////////////////////////////////////////////////////////////////////////////
+{
+  Text call = "OSFilCat("<<oldFiles+","+newFil+")";
+  Text OSTrace(3,call);
+  Real ok = OSCmdWait(If(OSUnix,
+  {
+    "cat"+SetSum(For(1,Card(oldFiles),Text(Real k)
+    {
+      " "+OSPathQt(oldFiles[k])
+    }))+" > "+OSPathQt(newFil)
+  }, 
+  {
+    "copy "+SetSum(For(1,Card(oldFiles),Text(Real k)
+    {
+      If(k==1,"","+")+OSPathQt(oldFiles[k])
+    }))+" "+OSPathQt(newFil)
+  }));
+  OSShowErr(ok,call)
+};
+//////////////////////////////////////////////////////////////////////////////
+PutDescription(I2(
+"Copies a set of files to a new one.
+Returns TRUE if success or FALSE if an error happens",
+"Copia un conjunto ficheros en uno nuevo.
+En caso de error devuelve FALSO y si no CIERTO"),
+OSFilCat);
 //////////////////////////////////////////////////////////////////////////////
 
