Index: tol/stdlib/general/TolPackage/TolPackage.tol
===================================================================
--- tol/stdlib/general/TolPackage/TolPackage.tol	(revision 2eafda0418e993d8e7f1e1588f255a29ad8bbd85)
+++ tol/stdlib/general/TolPackage/TolPackage.tol	(revision 4e8c2a9be08debd5e1dc09cc6726299ac1251a5d)
@@ -25,5 +25,6 @@
 
 #Embed "repository.tol";
-#Embed "tools.tol"
+#Embed "client.tol";
+#Embed "server.tol"
 
 ]];
Index: tol/stdlib/general/TolPackage/client.tol
===================================================================
--- tol/stdlib/general/TolPackage/client.tol	(revision 4e8c2a9be08debd5e1dc09cc6726299ac1251a5d)
+++ tol/stdlib/general/TolPackage/client.tol	(revision 4e8c2a9be08debd5e1dc09cc6726299ac1251a5d)
@@ -0,0 +1,152 @@
+/* -*- mode: C++ -*- */
+//////////////////////////////////////////////////////////////////////////////
+// FILE   : tools.tol
+// PURPOSE: TolPackage tools
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+Text _.autodoc.member.Exist = 
+"Devuelve cierto si existe el paquete especificado";
+Real Exist(Text package.version)
+//////////////////////////////////////////////////////////////////////////////
+{
+  @Repository r = @Repository::Get(remote.repository);
+  r::Exist(package.version)
+};
+
+//////////////////////////////////////////////////////////////////////////////
+Text _.autodoc.member.Install = 
+"Instala desde el repositorio remoto al local un paquete determinado "
+"para que esté disponible llamando a #Require. \n"
+"Un repositorio remoto puede ser en realidad un directorio local para "
+"facilitar proceso de instalación cerrada. Para ello la URL comenzará por "
+"file:// seguido del path local donde se ubica el repositorio.\n"
+"Si la URL empieza por http:// https:// ftp:// o cualquier otro protocolo"
+"reconocible por el sistema operativo se realizará la correspondiente "
+"descarga remota. \n"
+"En un mismo repositorio local puede haber distintas veriones de un mismo "
+"paquete que se distinguirán unas de otras por el texto posterior al "
+"primer punto. Antes del punto el nombre del paquete ha de seguir la "
+"nomenclatura tipo WIKI AaaBbb \n"
+"Si no se especifica ninguna versión se instalará la última disponible "
+"con una copia que especifique el nombre con versión y otra sin versión, "
+"sólo con el nombre del paquete, de forma que el #Require funcione igual "
+"tanto si se especifica la última versión como si no se especifica "
+"ninguna. \n"
+"Si ya existía una copia en el repositorio local será substituida sin "
+"mayores contemplaciones por lo que el usuario debe saber lo que pide. \n"
+"Sólo es necesario instalar una vez un paquete y todas las sesiones TOL "
+"que se lancen desde ese momento podrán usarlos.";
+//////////////////////////////////////////////////////////////////////////////
+Real Install(Text remote.repository, Text package.version, Real showError)
+//////////////////////////////////////////////////////////////////////////////
+{
+  @Repository r = @Repository::Get(remote.repository);
+  r::Install(package.version,showError)
+};
+
+//////////////////////////////////////////////////////////////////////////////
+Text _.autodoc.member.Install.All = 
+"Instala la última versión de todos los paquetes disponibles en un "
+"repositorio remoto.";
+Real Install.All(Text remote.repository)
+//////////////////////////////////////////////////////////////////////////////
+{
+  @Repository r = @Repository::Get(remote.repository);
+  r::Install.All(0)
+};
+
+//////////////////////////////////////////////////////////////////////////////
+Text _.autodoc.member.LastDate = 
+"Devuelve la fecha de la última actualización de un paquete en un "
+"repositorio";
+Date LastDate(Text remote.repository, Text package)
+//////////////////////////////////////////////////////////////////////////////
+{
+  @Repository r = @Repository::Get(remote.repository);
+  r::LastDate(package)
+};
+
+//////////////////////////////////////////////////////////////////////////////
+Text _.autodoc.member.Upgrade = 
+"Actualiza automáticamente un paquete si ha caducado caduca la copia local "
+"llamando a Install.";
+Real Upgrade(Text remote.repository, Text package, Real caducityInDays)
+//////////////////////////////////////////////////////////////////////////////
+{
+  @Repository r = @Repository::Get(remote.repository);
+  r::Upgrade(package, caducityInDays)
+};
+
+//////////////////////////////////////////////////////////////////////////////
+Text _.autodoc.member.Upgrade.All = 
+"Actualiza automáticamente todos los paquetes disponibles en un repositorio "
+"remoto para los que la copia local haya caducado.";
+Real Upgrade.All(Text remote.repository, Real caducityInDays)
+//////////////////////////////////////////////////////////////////////////////
+{
+  @Repository r = @Repository::Get(remote.repository);
+  r::Upgrade.All(caducityInDays)
+};
+
+//////////////////////////////////////////////////////////////////////////////
+Text _.autodoc.member.Upgrade.AllInAll = 
+"Actualiza automáticamente todos los paquetes disponibles en todos los "
+"repositorios remotos consultados para los que la copia local haya caducado.";
+Real Upgrade.AllInAll(Real caducityInDays)
+//////////////////////////////////////////////////////////////////////////////
+{
+  @Repository::Upgrade.AllInAll(caducityInDays)
+};
+
+//////////////////////////////////////////////////////////////////////////////
+Text _.autodoc.member.DoRequirements= 
+"Llama a #Require para una lista de paquetes";
+Real DoRequirements(Set packages)
+//////////////////////////////////////////////////////////////////////////////
+{
+  Set EvalSet(packages,Real(Text required)
+  {
+    Set IncludeText("#Require "+required+";\nReal True;");
+    True
+  });
+  True
+};
+
+//////////////////////////////////////////////////////////////////////////////
+Text _.autodoc.member.ForceExactRequirements = 
+"Permite usar una versión de un paquete distinta de la última con #Require "
+"asegurando la compatibilidad con el estado exacto de los paquetes de los "
+"que depende el requerido y recursivamente los que dependen de ellos. \n"
+"Lee en el repositorio remoto la lista de requerimientos para el paquete y " 
+"hace los requires de las versiones exactas. \n"
+"Hay que llamar a este método siempre antes de hacer ningún #Require de "
+"cualquiera de los paquetes requeridos directa o indirectamente por lo que " 
+"lo más aconsejable es hacerlo justo después de cargar la StdLib ";
+Real ForceExactRequirements(Text remote.repository, Text package.version)
+//////////////////////////////////////////////////////////////////////////////
+{
+  @Repository r = @Repository::Get(remote.repository);
+  r::ForceExactRequirements(package.version)
+};
+
+//////////////////////////////////////////////////////////////////////////////
+Text _.autodoc.member.Remove = 
+"Borra un paquete del directorio local.";
+Real Remove(Text package.version)
+//////////////////////////////////////////////////////////////////////////////
+{
+  OSFilRemove(_.localRoot+package.version)
+};
+
+//////////////////////////////////////////////////////////////////////////////
+Text _.autodoc.member.Remove.All = 
+"Borra todos los paquetes del directorio local.";
+Real Remove.All(Real void)
+//////////////////////////////////////////////////////////////////////////////
+{
+  OSDirRemove(_.localRoot);
+  OSDirMake(_.localRoot)
+};
+
+
Index: tol/stdlib/general/TolPackage/server.tol
===================================================================
--- tol/stdlib/general/TolPackage/server.tol	(revision 4e8c2a9be08debd5e1dc09cc6726299ac1251a5d)
+++ tol/stdlib/general/TolPackage/server.tol	(revision 4e8c2a9be08debd5e1dc09cc6726299ac1251a5d)
@@ -0,0 +1,55 @@
+/* -*- mode: C++ -*- */
+//////////////////////////////////////////////////////////////////////////////
+// FILE   : server.tol
+// PURPOSE: TolPackage server side tools
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+Text ScapeField(Text field)
+//////////////////////////////////////////////////////////////////////////////
+{
+  ReplaceTable(field,[[
+    [["\n","[[BR]]"]],
+    [[";",","]] ]])
+};
+
+//////////////////////////////////////////////////////////////////////////////
+Real ResetPackageInfo(Text file, NameBlock pkg)
+//////////////////////////////////////////////////////////////////////////////
+{
+  Text AppendFile(file, info);
+  True
+};
+
+//////////////////////////////////////////////////////////////////////////////
+Real AddPackageInfo.Version(Text file, NameBlock pkg, Real specificVersion)
+//////////////////////////////////////////////////////////////////////////////
+{
+  Set dependencies = pkg::_.autodoc.dependencies = Copy(Empty);
+  Text name = Name(pkg);
+  Text name.version = If(!specificVersion,name,
+    name+"."<<_.autodoc.version.high+"."<<_.autodoc.version.low);
+  Text info =
+    pkg:: _.autodoc.url + ";"
+  <<name + ";"
+  <<name.version+ ";"
+  <<If(!specificVersion,?,pkg::_.autodoc.version.high) + ";"
+  <<If(!specificVersion,?,pkg::_.autodoc.version.low) + ";"
+  <<pkg::ScapeField(_.autodoc.description) + ";"
+  <<pkg::ScapeField(_.autodoc.keys) + ";"
+  <<pkg::ScapeField(_.autodoc.authors) + ";"
+  <<pkg::_.autodoc.minTolVersion + ";"
+  <<Now + ";"
+  <<dependencies+ "\n";
+  Text AppendFile(file, info);
+  True
+};
+
+//////////////////////////////////////////////////////////////////////////////
+Real AddPackageInfo(Text file, NameBlock pkg)
+//////////////////////////////////////////////////////////////////////////////
+{
+  Real AddPackageInfo.Version(file,pkg,True);
+  Real AddPackageInfo.Version(file,pkg,False)
+};
+
Index: l/stdlib/general/TolPackage/tools.tol
===================================================================
--- tol/stdlib/general/TolPackage/tools.tol	(revision 2eafda0418e993d8e7f1e1588f255a29ad8bbd85)
+++ 	(revision )
@@ -1,152 +1,0 @@
-/* -*- mode: C++ -*- */
-//////////////////////////////////////////////////////////////////////////////
-// FILE   : tools.tol
-// PURPOSE: TolPackage tools
-//////////////////////////////////////////////////////////////////////////////
-
-//////////////////////////////////////////////////////////////////////////////
-Text _.autodoc.member.Exist = 
-"Devuelve cierto si existe el paquete especificado";
-Real Exist(Text package.version)
-//////////////////////////////////////////////////////////////////////////////
-{
-  @Repository r = @Repository::Get(remote.repository);
-  r::Exist(package.version)
-};
-
-//////////////////////////////////////////////////////////////////////////////
-Text _.autodoc.member.Install = 
-"Instala desde el repositorio remoto al local un paquete determinado "
-"para que esté disponible llamando a #Require. \n"
-"Un repositorio remoto puede ser en realidad un directorio local para "
-"facilitar proceso de instalación cerrada. Para ello la URL comenzará por "
-"file:// seguido del path local donde se ubica el repositorio.\n"
-"Si la URL empieza por http:// https:// ftp:// o cualquier otro protocolo"
-"reconocible por el sistema operativo se realizará la correspondiente "
-"descarga remota. \n"
-"En un mismo repositorio local puede haber distintas veriones de un mismo "
-"paquete que se distinguirán unas de otras por el texto posterior al "
-"primer punto. Antes del punto el nombre del paquete ha de seguir la "
-"nomenclatura tipo WIKI AaaBbb \n"
-"Si no se especifica ninguna versión se instalará la última disponible "
-"con una copia que especifique el nombre con versión y otra sin versión, "
-"sólo con el nombre del paquete, de forma que el #Require funcione igual "
-"tanto si se especifica la última versión como si no se especifica "
-"ninguna. \n"
-"Si ya existía una copia en el repositorio local será substituida sin "
-"mayores contemplaciones por lo que el usuario debe saber lo que pide. \n"
-"Sólo es necesario instalar una vez un paquete y todas las sesiones TOL "
-"que se lancen desde ese momento podrán usarlos.";
-//////////////////////////////////////////////////////////////////////////////
-Real Install(Text remote.repository, Text package.version, Real showError)
-//////////////////////////////////////////////////////////////////////////////
-{
-  @Repository r = @Repository::Get(remote.repository);
-  r::Install(package.version,showError)
-};
-
-//////////////////////////////////////////////////////////////////////////////
-Text _.autodoc.member.Install.All = 
-"Instala la última versión de todos los paquetes disponibles en un "
-"repositorio remoto.";
-Real Install.All(Text remote.repository)
-//////////////////////////////////////////////////////////////////////////////
-{
-  @Repository r = @Repository::Get(remote.repository);
-  r::Install.All(0)
-};
-
-//////////////////////////////////////////////////////////////////////////////
-Text _.autodoc.member.LastDate = 
-"Devuelve la fecha de la última actualización de un paquete en un "
-"repositorio";
-Date LastDate(Text remote.repository, Text package)
-//////////////////////////////////////////////////////////////////////////////
-{
-  @Repository r = @Repository::Get(remote.repository);
-  r::LastDate(package)
-};
-
-//////////////////////////////////////////////////////////////////////////////
-Text _.autodoc.member.Upgrade = 
-"Actualiza automáticamente un paquete si ha caducado caduca la copia local "
-"llamando a Install.";
-Real Upgrade(Text remote.repository, Text package, Real caducityInDays)
-//////////////////////////////////////////////////////////////////////////////
-{
-  @Repository r = @Repository::Get(remote.repository);
-  r::Upgrade(package, caducityInDays)
-};
-
-//////////////////////////////////////////////////////////////////////////////
-Text _.autodoc.member.Upgrade.All = 
-"Actualiza automáticamente todos los paquetes disponibles en un repositorio "
-"remoto para los que la copia local haya caducado.";
-Real Upgrade.All(Text remote.repository, Real caducityInDays)
-//////////////////////////////////////////////////////////////////////////////
-{
-  @Repository r = @Repository::Get(remote.repository);
-  r::Upgrade.All(caducityInDays)
-};
-
-//////////////////////////////////////////////////////////////////////////////
-Text _.autodoc.member.Upgrade.AllInAll = 
-"Actualiza automáticamente todos los paquetes disponibles en todos los "
-"repositorios remotos consultados para los que la copia local haya caducado.";
-Real Upgrade.AllInAll(Real caducityInDays)
-//////////////////////////////////////////////////////////////////////////////
-{
-  @Repository::Upgrade.AllInAll(caducityInDays)
-};
-
-//////////////////////////////////////////////////////////////////////////////
-Text _.autodoc.member.DoRequirements= 
-"Llama a #Require para una lista de paquetes";
-Real DoRequirements(Set packages)
-//////////////////////////////////////////////////////////////////////////////
-{
-  Set EvalSet(packages,Real(Text required)
-  {
-    Set IncludeText("#Require "+required+";\nReal True;");
-    True
-  });
-  True
-};
-
-//////////////////////////////////////////////////////////////////////////////
-Text _.autodoc.member.ForceExactRequirements = 
-"Permite usar una versión de un paquete distinta de la última con #Require "
-"asegurando la compatibilidad con el estado exacto de los paquetes de los "
-"que depende el requerido y recursivamente los que dependen de ellos. \n"
-"Lee en el repositorio remoto la lista de requerimientos para el paquete y " 
-"hace los requires de las versiones exactas. \n"
-"Hay que llamar a este método siempre antes de hacer ningún #Require de "
-"cualquiera de los paquetes requeridos directa o indirectamente por lo que " 
-"lo más aconsejable es hacerlo justo después de cargar la StdLib ";
-Real ForceExactRequirements(Text remote.repository, Text package.version)
-//////////////////////////////////////////////////////////////////////////////
-{
-  @Repository r = @Repository::Get(remote.repository);
-  r::ForceExactRequirements(package.version)
-};
-
-//////////////////////////////////////////////////////////////////////////////
-Text _.autodoc.member.Remove = 
-"Borra un paquete del directorio local.";
-Real Remove(Text package.version)
-//////////////////////////////////////////////////////////////////////////////
-{
-  OSFilRemove(_.localRoot+package.version)
-};
-
-//////////////////////////////////////////////////////////////////////////////
-Text _.autodoc.member.Remove.All = 
-"Borra todos los paquetes del directorio local.";
-Real Remove.All(Real void)
-//////////////////////////////////////////////////////////////////////////////
-{
-  OSDirRemove(_.localRoot);
-  OSDirMake(_.localRoot)
-};
-
-
