------------------------------

GCOM versin 0.85
 
 Roberto Gordo Saez
 <rogs@iname.com>
 <kernel9000@yahoo.com>

------------------------------

QU ES GCOM?

La respuesta corta es:
GCOM es un intrprete de comandos para DOS. Puede usarse como un sustituto
para el command.com de MSDOS u otros sistemas DOS compatibles.

Y sta es la historia:
El proyecto se inici hace varios meses, cuando me propuse hacer un
intrprete de comandos pequeo, sencillo y eficiente para FreeDOS (FreeDOS es
un proyecto para crear un sistema DOS completo, compatible con MSDOS:
http://www.freedos.org/).

FreeDOS estaba usando entonces (y todava usa) FreeCOM: otro intrprete de
comandos con muchas caractersticas, que es mucho ms grande y cargado de
problemas y bugs. Por eso comenc a hacer mi propio intrprete de comandos
teniendo en mente unos objetivos distintos. [Tal vez alguien an recuerde mis
comentarios en la lista de correo del FreeDOS...]


QU OCURRI DESPUS?

Bueno, aparecieron otros muchos proyectos y cada vez dispona de menos tiempo
libre para GCOM, el cual acab por quedar casi abandonado en mi disco duro
con la esperanza de que alguna vez volviera a tener tiempo para terminarlo.
Pero el tiempo pasa y cada vez tengo ms ocupaciones; actualmente tengo un
trabajo (remunerado) y cada vez es menos probable que lo termine.

Por esa razn he decidido rescatar la mayor parte del trabajo que llevaba
completado y liberarlo con la esperanza de que a alguien le sea til.


CUL ES EL ESTADO ACTUAL?

GCOM no est terminado, pero es bastante usable. Hay caractersticas que no
estn realizadas, pero las que estn funcionan bastante bien sin fallos
(conocidos).

Las caractersticas son:

 - GCOM es pequeo, solamente son internos los mandatos que deben que ser
   internos, o los que son ms simples.
 - GCOM es fcil de mantener.
 - Soporta redireccin de entrada y salida con "<" y ">".
 - Soporta redireccin en el flujo de datos con "|".
 - Puede ejecutar ficheros BAT.
 - La redireccin funciona perfectamente dentro de un fichero BAT (al
   contrario que en el command.com de MSDOS).

Los mandatos internos que funcionan son:

 BEEP
 BREAK [ON|OFF]
 CALL fichero
 CD [dir]
 CHDIR [dir]
 ECHO [ON|OFF]
 ECHO texto
 ECHO.[texto]
 EXIT [nmero]
 PATH [texto]
 PAUSE [texto]
 PROMPT [texto]
 REM [texto]
 SET [variable[=[texto]]]
 SHIFT
 UNSET variable
 VER [/X]
 VERIFY [ON|OFF]

El resto de los mandatos deben ser externos, a excepcin de GOTO, IF y FOR,
que no estn realizados (es probablemente la mayor falta de GCOM).

Las cosas que faltan:

 - Los mandatos GOTO, IF y FOR.
 - Los dispositivos "AUX", "CON", etc. Esto debera ser bastante fcil de
   realizar.
 - Probarlo intensivamente en busca de algn fallo escondido.
 - Estara bien crear los programas externos con los mandatos. (En realidad
   ya comenc a hacerlos, escrbeme un mensaje de correo electrnico si ests
   interesado en el cdigo fuente).
 - Mejorar los manejadores de error y de interrupcin (break).

Si quieres utilizar GCOM te resultar bastante til obtener e instalar una
coleccin de programas externos tales como DIR, DEL, ATTRIB, CLS, TYPE...
Los puedes descargar de:

http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/dos/
http://www.simtel.net/pub/simtelnet/gnu/gnuish/dos_only/
http://www.simtel.net/pub/simtelnet/gnu/gnuish/dos_only/fut312bx.zip


LA NOTA DE AUTOR.

Yo, Roberto Gordo Saez, soy el autor de GCOM. Sin embargo, he tomado ideas y
algo de cdigo de los fuentes liberados en DOSC por Pasquale J. Villani, por
tanto, el copyright pertenece a ambos.

GCOM se distribuye bajo la licencia "GNU General Public License", versin 2 o
posterior.

A pesar de que el desarrollo de GCOM est detenido por ahora, an puedes
enviarme parches y cambios si quieres. Algn da sacar una nueva versin si
hay suficientes modificaciones. Lee la seccin siguiente para comprender
mejor qu es lo que hace falta y lo que no hace falta terminar.

Si lo que quieres es hacer un programa grande con muchas opciones, comandos
internos y caractersticas, tal vez deberas unirte al proyecto FreeCOM
(http://freedos.sourceforge.net). He creado GCOM pequeo de forma
intencionada... aunque estar encantado de ver cualquier proyecto que salga
de GCOM.


NOTAS Y EJEMPLOS.

GCOM siempre devuelve error en el manejador de errores crticos. He observado
que FreeCOM realiza al usuario las conocidas preguntas
"Abortar, Reintentar, Ignorar?" o similares, pero el uso de interrupciones
para mostrar ese mensaje dentro del manejador no es una buena idea. Debido a
que la salida estndar de errores no est disponible dentro del manejador de
interrupcin, si la salida est redirigida el mensaje de error se redirigir
tambin, de manera que el usuario nunca sabr lo que ha pasado. Por ejemplo:

DIR A:\ > LISTADO.TXT

Si no hay disco en la unidad A, el sistema nunca volver a su estado normal
con FreeCOM. Yo he preferido la solucin de "siempre devuelve error": el
mandato anterior devolvera un mensaje de error y finalizara; el usuario
puede ejecutarlo de nuevo cuando la unidad A tenga un disco vlido. Otra
solucin podra ser usar la BIOS para emitir la pregunta al usuario; eso es
probablemente lo que se hace en el command.com de MSDOS.
----

La redireccin dentro de los ficheros BAT funciona perfectamente.
Personalmente considero que es un fallo del command.com de MSDOS, y no quiero
emular los errores. Por ejemplo: tenemos un fichero con el nombre SACO.BAT
que tiene el contenido:

@ECHO HOLA > MENSAJE.TXT
@ECHO ADIOS

Ahora tecleamos:

SACO > SALIDA.TXT

Se crear el fichero MENSAJE.TXT con la cadena de caracteres "HOLA" y el
fichero SALIDA.TXT contendr "ADIOS". Tambin funciona cuando se llama a un
fichero BAT desde otro fichero BAT y se combinan las redirecciones de todas
las maneras ms extraas.
----

GCOM detecta todos (supongo) los errores de sintaxis producidos en las lneas
de entrada, especialmente en la redireccin, por ejemplo:

TYPE TEXTO.TXT > < FCH
TYPE TEXTO.TXT > FCH |
TYPE TEXTO.TXT |> FCH
| TYPE TEXTO.TXT
TYPE TEXTO.TXT > FCH1 > FCH2
DIR | | SORT
DIR | >CWD.TXT | SORT
< ENTRADA.TXT | SORT

Adems de otros muchos.
----

Los mandatos "ECHO" y "ECHO." conservan los espacios entre las palabras y al
principio del texto, exactamente como ocurre con el intrprete de comandos de
MSDOS. Por ejemplo:

C:\> ECHO Esta   es  una  frase con  espacios aleatorios
Esta   es  una  frase con  espacios aleatorios

C:\> ECHO.TEXTO
TEXTO

C:\> ECHO.     TEXTO
     TEXTO
----

Los mandatos internos del command.com de MSDOS pueden separarse por medio de
un carcter que no puede formar parte del propio mandato. No debera ser muy
complicado programarlo, pero es una caracterstica retorcida del intrprete
de comandos de MSDOS que a mi personalmente no me gusta, y como consecuencia
no lo he realizado. Por ejemplo, los mandatos:

CD\TEMP
CD..
ECHO;HOLA
ECHO=
ECHO,X

Funcionarn con el command.com de MSDOS, y no funcionarn con GCOM porque
pienso que ese tipo de cosas son una chapuza enorme. A mi personalmente me
parece que las primeras versiones de MSDOS tenan un bug que luego dejaron
para mantener la compatibilidad...

Sin embargo, el mandato "ECHO." funciona en GCOM porque lo he creado
especialmente con ese nombre, el cual es til para visualizar una lnea vaca
o los valores reservados ON y OFF (que de otra manera se interpretaran como
parmetros de ECHO).
----

Se detecta y se informa de todos los errores de longitud de la lnea de
comandos despus de la expansin de variables en un fichero BAT. Lo mismo
para otros errores; mi objetivo es que todos los casos de problemticos se
detecten siempre.

Los programas externos se pueden ejecutar con su ruta de acceso relativa o
absoluta, o se busca en la variable PATH cuando no se especifica, como en el
command.com de MSDOS. Por ejemplo:

EDIT LEEME.TXT
..\JUEGOS\DOOM\DOOM
\DOS\EDIT NOTA.TXT
A:\UNZIP SRC.ZIP
----

El mandato ECHO se puede establecer con el valor ON u OFF, pero al contrario
que en el intrprete de comandos de MSDOS se trata de una variable global.
Si escribes ECHO OFF desde la lnea de comandos, todos los ficheros BAT
ejecutados a partir de ese momento utilizarn esa configuracin para ECHO, a
no ser que se cambie desde dentro de uno de ellos.
----

A pesar de sus caractersticas GCOM no es perfecto porque no est terminado;
falta la fase de optimizacin y pueden existir algunos errores ocultos, pero
a pesar de eso creo que el resultado es aceptable y puede usarse sin
problemas.

Hay MUCHAS otras caractersticas particulares que ahora no recuerdo...
intenta encontrarlas t mismo. Al menos espero que GCOM te resulte til.
