﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	severity	resolution	keywords	cc
1118	System function returning the answer	Pedro Gea	Pedro Gea	"Se solicita la implementación de una alternativa a las funciones {{{System}}} o {{{WinSystem}}} que permita hacer llamadas al sistema operativo y que canalice las respuestas de la llamada.

De las dos funciones actuales sólo {{{System}}} es capaz de ejecutar comandos del sistema operativo como {{{dir}}} o {{{copy}}}. Sería deseable que esto fuese siempre así.

El siguiente código funciona con {{{System}}} pero no con {{{WinSystem}}}:
{{{
Real System(""dir c:\\ > c:\\temp\\dir.txt"");
Real System(""del c:\\temp\\dir.txt"");
}}}

Sin embargo ninguna es capaz de devolver la respuesta de la llamada, ni siquiera del error de la llamada devolviendo siempre:
 * System:
 {{{
ERROR: [] 
[2]=No such file or directory
No se pudo ejecutar el mandato: 
<...>
}}}
 * WinSystem:
 {{{
ERROR: [] Error del Sistema Operativo 
Creando el proceso 
<...>
El sistema no puede encontrar el archivo especificado.
}}}

A continuación se adjunta una implementación en código TOL de la función buscada que se apoya en la construcción de archivos temporales:

{{{
Text AnsSystem(Text cmd) {
  Text batFile = TmpDir<<""ans.bat"";
  Text ansFile = TmpDir<<""ans.txt"";
  Text errFile = TmpDir<<""ans.err.txt"";
  Real FileDelete(batFile);
  Real FileDelete(ansFile);
  Real FileDelete(errFile);
  Text WriteFile(batFile, cmd<<"" > ""<<Qt(ansFile)<<"" 2> ""<<Qt(errFile));
  Real WinSystem(batFile, False, True);
  Text ans = ReadFile(ansFile);
  Text err = ReadFile(errFile);
  If(TextLength(err), Write(""[AnsSystem] ""<<err,""E""));
  Real FileDelete(batFile);
  Real FileDelete(ansFile);
  Real FileDelete(errFile);
  ans
};
}}}

Entiendo que sobre el modo de encaminar la respuesta y los errores hay distintas formas y quizá podría implementarse una variedad de la función que no mostrase el error sino que lo devolviese, algo semejante a {{{Tcl_Eval}}} devolviendo un conjunto con un real que indique el éxito de la llamada y un texto con la respuesta o el mensaje de error de la llamada.
Esta función podría implementarse como {{{System_Eval}}} o algo así. "	enhancement	accepted	high	Mantainance	System	head	critical			
