/*
 * $Id: cmdline.txt,v 1.2 2002/10/01 05:24:16 ckedem Exp $
 */

/*
 * Las siguientes partes son derechos adquiridos de sus autores individuales.
 * www - http://www.harbour-project.org
 *
 * Copyright 2001
 *   Documentación en Inglés de: cmdline.txt
 *
 * Copyright 2002 Alejandro de Gárate <alex_degarate@hotmail.com>
 *   Documentación en Español de: cmdline.txt
 *
 * Vea doc/license.txt por los términos de la licencia.
 *
 */

/*  $DOC$
 *  $FUNCNAME$
 *      Utilidad Linea de Comandos
 *  $CATEGORY$
 *      Document
 *  $ONELINER$
 *      Opciones del Compilador
 *  $DESCRIPTION$
 *      Esta especificación sirve para CLIPPERCMD, HARBOURCMD, el compilador
 *      Harbour y las directivas #pragma en el código fuente.
 *
 *      La línea de comando siempre predomina sobre las variables de entorno.
 *
 *      Note que algunos switches no son aceptados en variables de entorno,
 *      y algunos otros en #pragmas.
 *
 *      Primero el analizador (parser) debería comenzar saltando a través de
 *      todos los tokens en la cadena separadas por espacios en blanco.
 *      (ó solo ir a través de todos los argv[])
 *
 *      1.) Si el token comienza con "-", este debe ser tratado como un
 *          un nuevo estilo de switch .
 *
 *      Uno ó más caracteres switch pueden seguir a éste. El signo "-"
 *      dentro del token apaga el switch.
 *
 *      Si el switch tiene un argumento, todos los caracteres siguientes son
 *      tratados como parte del argumento:
 *
 *      El signo "/" n tiene significado especial aqui.
 *
 *        <table>
 *        Switch                  Opción resultante
 *
 *        -wn                     ( W N )
 *        -w-n                    ( !W N )
 *        -wi/harbour/include/    ( W I=/harbour/include/ )
 *        -wi/harbour/include/n   ( W I=/harbour/include/n )
 *        -wes0n                  ( W ES=0 N )
 *        -wen                    ( W [invalid switch: e] N )
 *        -wesn                   ( W ES=default(0) N )
 *        -wses                   ( W S ES=default(0) )
 *        -wess                   ( W ES=default(0) S )
 *        -                       ( [invalid switch] )
 *        -w-n-p                  ( !W !N P )
 *        -w-n-p-                 ( !W !N !P )
 *        -w- -w -w-              ( finally: !W )
 *          </table>
 *
 *
 *      2.) Si el token comienza con "/", este debe ser tratado como un
 *          switch de compatibilidad.
 *
 *      El analizador revisa el token por el próximo signo "/", o EOS
 *      (End Of String = fin de linea) y  trata la cadena resultante
 *      como un sólo switch.
 *
 *      Esto significa que si un switch con un argumento conteniendo el
 *      signo "/" tiene algunas limitaciones.
 *      Esto puede ser resuelto permitiendo el uso de caracteres comillas.
 *      Esto es mayormente un problema en sistemas que usan "/" como un
 *      separador de path.
 *
 *
 *      El signo "-" n tiene significado especial aquí, éste no puede ser
 *      usado para deshabilitar un switch.
 *
 *         <table>
 *        Switch               Opción resultante
 *
 *        /w/n                 ( W N )
 *        /wo/n                ( [invalid switch: wo] N )
 *        /ihello/world/       ( I=hello [invalid switch: world]
 *                                       [invalid switch: /] )
 *        /i"hello/world/"/w   ( I=hello/world/ W )
 *        /ihello\world\       ( I=hello\world\ )
 *      </table>
 *
 *
 *      3.) Si el token comienza con otra cosa, éste debería ser saltado.
 *
 *      Los switches de Harbour son siempre insensibles a las mayúsculas.
 *
 *      En la línea de comandos de Harbour los dos estilos pueden ser usados
 *      conjuntamente:   </par>
 *      HARBOUR -wnes2 /gc0/q0 -ic:\hello
 *
 *      Excepciones:
 *
 *      - El manejo del switch indocumentado /CREDIT en la línea de comandos
 *      de Harbour es inusual, revise el código actual por esto.
 *
 *      - El analisis de los parámetros en la línea de comandos de CLIPPER,
 *        HARBOUR y aplicaciones de Harbour, son cosas distintas, vea
 *        cmdarg.c por una nota.
 *
 *      Notas:
 *
 *      - En toda ocurrencia donde el path es aceptado, Harbour debería
 *        manejar el caracter doble comillas (") para especificar un path
 *        conteniendo espacios, signo negativo, barras u otros caracteres
 *        con un significado especial.
 *
 *        /i"c:/hello/"   </par>
 *        -i"c:/hello-n"  </par>
 *        /i"c:/program files/" </par>
 *        -i"c:/program files/" </par>
 *
 *      <fixed>
 *        Sólo algunos ejemplos para las varias formas aceptadas:
 *        //F20 == /F20 == F20 == F:20 == F20X
 *        //TMPPATH:C:\HELLO
 *        F20//TMPPATH:/TEMP///F:30000000 NOIDLE
 *        F0NOIDLEX10
 *        SQUAWKNOIDLE
 *         </fixed>
 *        "//" siempre deberían ser usados en la línea de comandos.
 *  $SEEALSO$
 *      Opciones del Compilador
 *  $END$
 */
