Difference between revisions of "Console Mode Pascal/es"

From Lazarus wiki
Jump to navigationJump to search
m (Fixed syntax highlighting; deleted category already in page template)
 
(28 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
{{Console Mode Pascal}}
 
{{Console Mode Pascal}}
[[category:Castellano|P]][[category:Español|P]]
+
 
== Programación con Pascal en modo consola ==
+
= Programación con Pascal en modo consola =
 
por [[User:Kirkpatc]]
 
por [[User:Kirkpatc]]
=== Iniciando el trabajo ===
+
== Iniciando el trabajo ==
 
   Muchos de nosotros escribíamos programas en Pascal mucho antes de que los interfaces gráficos de usuario (GUIs) y los entornos de desarrollo integrados (IDEs) se pusieran de moda. Muchos otros son principiantes en programación en Pascal y necesitan poder probar las herramientas básicas del lenguaje. Otros necesitan escribir aplicaciones de consola o en modo de texto para realizar tareas complejas de control del sistema.
 
   Muchos de nosotros escribíamos programas en Pascal mucho antes de que los interfaces gráficos de usuario (GUIs) y los entornos de desarrollo integrados (IDEs) se pusieran de moda. Muchos otros son principiantes en programación en Pascal y necesitan poder probar las herramientas básicas del lenguaje. Otros necesitan escribir aplicaciones de consola o en modo de texto para realizar tareas complejas de control del sistema.
  
 +
=== Programar en modo consola sin Lazarus ===
 +
   A pesar de que muchos prefieren usar el IDE de Lazarus para escribir programas en modo consola, también podemos escribirlos con cualquier editor de texto y compilarlos llamando nosotros al compilador FPC, por ejemplo para el programa ejemplo.pas:
 +
<syntaxhighlight lang="bash"> fpc ejemplo.pas</syntaxhighlight>
 +
 +
&nbsp;&nbsp;&nbsp;Además disponemos del IDE en modo de texto' 'fp'' (que se parece bastante al viejo IDE de Turbo Pascal).
 +
&nbsp;&nbsp;&nbsp;En las secciones siguientes nos centraremos en la programación con Lazarus.
 +
 +
=== Programar en modo consola con Lazarus ===
 
&nbsp;&nbsp;&nbsp;Lazarus dispone de un entorno ideal para aprender Pascal, y para desarrollar programas en modo texto. Todas las funcionalidades del IDE se pueden utilizar, incluyendo el editor de código con su resaltado de sintaxis, acceso a las librerías, búsquedas complejas y herramientas de completado de código y comprobación de sintaxis. Si no se quiere un formulario con componentes visuales no es necesario tenerlo, pero el editor de Lazarus es un gran entorno para desarrollar programas. Puedes compilar y ejecutar programas durante el desarrollo, sin abandonar el Editor.
 
&nbsp;&nbsp;&nbsp;Lazarus dispone de un entorno ideal para aprender Pascal, y para desarrollar programas en modo texto. Todas las funcionalidades del IDE se pueden utilizar, incluyendo el editor de código con su resaltado de sintaxis, acceso a las librerías, búsquedas complejas y herramientas de completado de código y comprobación de sintaxis. Si no se quiere un formulario con componentes visuales no es necesario tenerlo, pero el editor de Lazarus es un gran entorno para desarrollar programas. Puedes compilar y ejecutar programas durante el desarrollo, sin abandonar el Editor.
  
&nbsp;&nbsp;&nbsp;Para dar inicio a un programa en modo consola, hay que ir al Menú principal y en la opción Proyecto seleccionar Nuevo Proyecto ... y en la ventana que aparece seleccionar '''Programa''', '''Aplicación de consola''' o '''Programa personalizado'''. El IDE no generará todos los ficheros que están asociados con una aplicación gráfica completa y no abrirá la ventana del Inspector de objetos y si abrirá el Editor de código con el esqueleto del programa, esperando que introduzcamos nuestro código.
+
&nbsp;&nbsp;&nbsp;Para dar inicio a un programa en modo consola, hay que ir al Menú principal y en la opción Proyecto seleccionar Nuevo Proyecto ... y en la ventana que aparece seleccionar '''Programa''', '''Aplicación de consola''' o '''Programa personalizado'''. El IDE no generará todos los ficheros que están asociados con una aplicación gráfica completa, tampoco abrirá la ventana del Inspector de objetos y abrirá el Editor de código con el esqueleto del programa, a a la espera de que introduzcamos nuestro código.
  
==== Programa personalizado ====
+
  '''Nota''': En windows una aplicación gŕafica no dispone de consola y por tanto no podemos utilizar '''writeln''' ni '''readln''', ya que obtendremos el error ''File not open''. Desmarca en ''Proyecto / Opciones de Proyecto... / Opciones del Compilador / Enlazado / Opciones específicas del SO objetivo /Aplicación gráfica Win32 (-WG)'' para crear una aplicación de consola.
 +
 
 +
=== &nbsp;&nbsp;&nbsp;Programa personalizado ===
  
 
&nbsp;&nbsp;&nbsp;Un programa Pascal muy sencillo. Seleccionaremos esta opción si queremos hacerlo todo nosotros o para realizar algunas pruebas rápidas y eliminar los ficheros a continuación.
 
&nbsp;&nbsp;&nbsp;Un programa Pascal muy sencillo. Seleccionaremos esta opción si queremos hacerlo todo nosotros o para realizar algunas pruebas rápidas y eliminar los ficheros a continuación.
  
==== Programa ====
+
=== &nbsp;&nbsp;&nbsp;Programa ===
  
&nbsp;&nbsp;&nbsp;Parecido al anterior, pero el IDE nos ayudará más. Por ejemplo cuándo añadimos un unidad el IDE automáticamente añade el nombre de la unidad en la sección uses. Este comportamiento está definido en las opciones de proyecto. Así podemos alternar entre los tipos ''Progrma'' y ''Programa personalizado'' en cualquier momento.
+
&nbsp;&nbsp;&nbsp;Parecido al anterior, pero el IDE nos ayudará más. Por ejemplo cuándo añadimos un unidad el IDE automáticamente añade el nombre de la unidad en la sección uses. Este comportamiento está definido en las opciones de proyecto. Así podemos alternar entre los tipos ''Programa'' y ''Programa personalizado'' en cualquier momento.
  
 
&nbsp;&nbsp;&nbsp;Un ejemplo para principiantes:
 
&nbsp;&nbsp;&nbsp;Un ejemplo para principiantes:
<delphi> program Proyecto1;
+
 
 +
<syntaxhighlight lang=pascal>
 +
program Proyecto1;
 
  {$mode objfpc}{$H+}
 
  {$mode objfpc}{$H+}
 
  uses
 
  uses
Line 30: Line 42:
 
   writeln('¡Hola Mundo!');
 
   writeln('¡Hola Mundo!');
 
   readln;
 
   readln;
  end. </delphi>
+
  end. </syntaxhighlight>
 +
 
 +
=== &nbsp;&nbsp;&nbsp;Aplicación de consola ===
  
=== Console Application ===
+
&nbsp;&nbsp;&nbsp;Esta opción creará un programa con una nueva clase derivada de TCustomApplication, la cual proporciona gran parte de la funcionalidad común y convierte la programación en línea de comando en algo muy fácil. Por ejemplo comprobando los parámetros pasados en la línea de comando, escribiendo ayudas, comprobando las variables de entorno y gestionado las excepciones. Todos los programas de la LCL utilizan esta funcionalidad automáticamente.
  
This creates a program with a new class derived from TCustomApplication. TCustomApplication provides a lot of the common things and makes programming command line utilities easy. For example checking command line options, writing help, checking environment variables and exception handling. All LCL programs use this automatically.
+
== Compilar ==
  
== Compile ==
+
&nbsp;&nbsp;&nbsp;Una vez finalizado el programa (o una parte del mismo) lo podemos compilar y ejecutar con la opción Ejecutar > Ejecutar del menú principal, pulsando sobre el triangulo verde del panel de botones o con la tecla F9. Todos los mensajes de compilación ( avisos, informes de progreso o errores) aparecerán en la ventana de Mensajes, y con suerte eventualmente veremos un único mensaje que diga:
  
When you have finished your program (or program fragment) you can compile and run it by selecting Run -> Run from the Main Menu or clicking on the Green (Run) triangle symbol in the Button Bar. Any compiler messages (warnings, progress reports or error messages) will appear in the Message Box, and hopefully there will eventually be a message to say
+
  El proyecto "project1" se ha construido correctamente. :)
  
'Project "Project1" successfully built.:)'. 
+
== Ejecutar ==
  
== Run ==
+
&nbsp;&nbsp;&nbsp;¡Pero! ¿dónde está el programa?
  
But where is the program??!!
+
&nbsp;&nbsp;&nbsp;Si '''no''' hemos guardado el proyecto, el IDE lo pone el el directorio temporal del sistema (/tmp en linux, C:\temp en windows, ver Entorno > Opciones del Entorno > Directorio para construir proyectos de prueba).
  
If you have ''not'' yet saved the program, then the IDE put it into the ''temporary'' directory (e.g. /tmp under linux, C:\temp under windows, see Environment Options / Files / Directory for building test projects).
+
&nbsp;&nbsp;&nbsp;Si hemos guardado el proyecto, el programa se creará en el mismo directorio donde hayamos guardado el archivo ''lpi'' del proyecto.
  
If you already saved the project, then the program was created in the same directory, where you saved the project1.lpi file.
+
&nbsp;&nbsp;&nbsp;Podemos ejecutar el programa desde una consola (terminal), utilizando un '''cd''' para cambiar al directorio deseado y escribir el nombre del programa. En *nix probablemente tengamos que escribir ''./Nombredelprograma'', ya que no se encuentra en la ruta por defecto (PATH).
  
You can execute the program by going to a console (terminal) window, use '''cd''' to change to the directory and typing the name of the program (in Unix/Linux, if it is in the current directory you will probably have to type
+
&nbsp;&nbsp;&nbsp;Ir de la consola al IDE y viceversa puede ser un poco tedioso. Por suerte hay una forma de abrir la ventana del terminal directamente desde el IDE de Lazarus.
  
./Project1
+
== Ejecutar desde el IDE ==
  
as it won't be found in the standard PATH). However, it can be very inconvenient to keep skipping out of the Lazarus Editor and into a terminal window and back again. Fortunately, there is a mechanism that allows a terminal window to be opened from within the Lazarus environment.
+
&nbsp;&nbsp;&nbsp;Desde el menú principal seleccionar Ejecutar > Parámetros de ejecución ..., y en el cuadro de diálogo, marcar "Usar al lanzar la aplicación". La primera vez que se lanza un programa, con la secuencia compilar/ejecutar, es probable que obtengamos este mensaje
  
== Run in IDE ==
+
  "xterm: Can't execvp /usr/share/lazarus//tools/runwait.sh: Permission denied". 
  
From the Main Menu, select Run -> Run Parameters, then check the box for "Use launching application". The first time you do this and try the Compile/Run sequence, you will probably get a rude message to say
+
&nbsp;&nbsp;&nbsp;Si sucede esto, necesitaremos cambiar los permisos en el archivo apropiado (por ejemplo usando chmod +x nombredelejecutable, o usar la utilidad de Windows para cambiar los permisos); es probable que tengamos que hacer esta operación como administrador. Tras esto cada vez que lancemos nuestro programa aparecerá una ventana de consola y toda la entrada/salida de programa se mostrará en ella
  
"xterm: Can't execvp /usr/share/lazarus//tools/runwait.sh: Permission denied".   
+
&nbsp;&nbsp;&nbsp;Una vez terminada la ejecución de nuestro programa, aparecerá un mensaje de "Press enter" en la consola. Así toda la salida generada por el programa permanecerá en la pantalla para tener la posibilidad de leerla; la ventana de la consola se cerrará tras pulsar 'enter'.
  
If this happens, you need to change the permissions on the appropriate file (for example using chmod +x filename, or using the Windows utility for changing permissions); you might have to do this as root. After this, each time you launch your program, a console box will appear and all your text i/o (readln, writeln etc) will appear in it.
+
&nbsp;&nbsp;&nbsp;Desafortunadamente,este método no nos permite utilizar el depurador integrado.
   
 
After your program has finished execution, a message "Press enter" appears on the screen. Thus any output your program generated will remain on the screen until you have had a chance to read it; after you press 'enter' the console window closes.
 
  
== Examples ==
+
==== Ejecutar en el IDE con redirección de la salida ====
  
You can use the Lazarus editor to try out all the examples in the standard Pascal text-books, or you can write your own. Some of the most useful procedures are those for executing system commands or for running other programs (which may have been written in Pascal, C or Perl, or may be shell or Batch scripts).
+
&nbsp;&nbsp;&nbsp;Si quieres ver lo que se escribe en la salida estándar y deseas utilizar el depurador integrado, ''stdout'' se puede redirigir a un archivo con el siguiente código:
  
=== Execute shell command ===
+
<syntaxhighlight lang=pascal>
 +
uses
 +
baseunix;
  
Here is an example for a ''Custom Program'' or ''Program'':
+
var
 +
ArchivoSalida: text;
 +
Resultado : integer;
  
<pre>
+
begin  
Program TryShell;
+
   Assign(ArchivoSalida, 'ArchivoSalida.txt');
uses classes, unix;
+
   if FileExists('ArchivoSalida.txt') then
var S: longint;
+
  begin
begin
+
    Append(ArchivoSalida);
   S := fpsystem ('/bin/ls -la *.p*'); //lists .pp, .pas, .php, .png etc in current directory
+
  end
   writeln ('Program exited with status : ', S)
+
  else
end.
+
  begin
</pre>
+
    Rewrite(ArchivoSalida); { abrir archivo para escritura, destruir contenido, en su caso }
 +
  end;
  
=== Example: update fpc and lazarus ===
+
Resultado := fpdup(ArchivoSalida, output);
  
Rather more complex commands can be executed. For example, if you have already checked out the SVN repositories for FPC and Lazarus (see [http://www.stack.nl/~marcov/buildfaq.pdf fpc buildfaq]) you could keep your FPC and Lazarus source files up-to-date by retrieval from the SVN repository with the following sequence of calls:
+
if Resultado < 0 then
 +
  begin
 +
  raise Exception.CreateFmt('duplicación fallida: %s', [Resultado]);
 +
  end;
 +
 +
Close( ArchivoSalida );</syntaxhighlight>
  
<pre>
+
&nbsp;&nbsp;&nbsp;ArchivoSalida.txt se puede ver con 'tail -f ArchivoSalida.txt" o con un editor si 'tail' no está disponible en tu SO.
Program LazUpdate;
 
uses classes, unix;
 
var s : longint;
 
begin
 
  S := fpsystem ('cd /usr/local/src/fpc/devel/fpc ; make clean');
 
  S := fpsystem ('cd /usr/local/src/fpc/devel/lazarus ; make clean');
 
  S := fpsystem ('cd /usr/local/src/fpc/devel ; svn update fpc >& ~/cvscheckout.log');
 
  S := fpsystem ('cd /usr/local/src/fpc/devel ; svn update lazarus >& ~/cvslaz.log');
 
end.
 
</pre>
 
  
Note that issuing the command
+
&nbsp;&nbsp;&nbsp;Por otra parte, utilizando Lazarus 0.9.31 o superior (sólo en Linux): En el menú "Ver", en "Debug Windows" hay una entrada para "Salida de la consola" para ver la salida ''stdout''.
  
fpsystem ('cd /somedirectory')
+
== Salida en Unicode (UTF8) ==
followed by
+
&nbsp;&nbsp;&nbsp;Si quieres que tu programa en modo consola muestre la salida en Unicode (UTF-8) en Windows Vista y superior (y tal vez en las versiones anteriores), puedes utilizar el comando '''SetConsoleOutputCP''' para activar en la consola el juego de caracteres UTF-8.
fpsystem ('do something in that subdirectory')
 
doesn't work, because after each fpsystem function call the execution of the program returns to the directory it started in; so we need to include multiple statements per line within our calls to shell.
 
  
Of course, you don't have to enter every command as a separate line of Pascal; you could create a script file like this (from [http://www.stack.nl/~marcov/buildfaq.pdf fpc buildfaq]):
+
{{Nota| Trás la ejcución del programa, la consola se comporta extrañamente en mi sistema: la introducción de comandos y la escritura no muestran resultados: ningún comando ejecutado, ningún error, nada. ¿Tal vez la consola necesita ser cambiada de nuevo? Lo he intentado también, pero parecía dar el mismo resultado.  
<pre>
+
--[[User:BigChimp|BigChimp]] 17:15, 28 June 2012 (UTC) }}
#!/bin/sh
 
cd /usr/local/src/fpc/devel
 
cd fpc
 
make clean
 
cd ..
 
cd lazarus
 
make clean
 
cd ..
 
svn up fpc >& ~/cvscheckout.log
 
svn up lazarus >& ~/cvslaz.log
 
</pre>
 
  
Name it updatelaz.sh, and then call it from a Pascal program thus:
+
{{Nota| tendrás que asegurarte de que la fuente de la consola puede mostrar las letras que desea en la salida (por ejemplo, griego, cirílico, coreano)..}}
  
<pre>
+
{{Nota| necesitas incluir la unidad Windows.}}
Program LazUpdate1;
+
 
uses classes, unix;
+
 
var S : longint;  
+
&nbsp;&nbsp;&nbsp;Ver [[LCL Unicode Support/es|Soporte Unicode en la LCL]] para más detalles sobre soporte Unicode en Lazarus y FPC.
begin
+
 
  S := fpsystem ('updatelaz.sh')
+
Programa de ejemplo:
end.
+
<syntaxhighlight lang=pascal>
</pre>
+
program uniconsole;
 +
 
 +
{$mode objfpc}{$H+}
 +
{$APPTYPE CONSOLE}
 +
 
 +
uses
 +
  {$IFDEF UNIX}
 +
    {$IFDEF UseCThreads}
 +
    cthreads,
 +
    {$ENDIF}
 +
  {Widestring manager needed for widestring support}
 +
  cwstring,
 +
  {$ENDIF}
 +
  {$IFDEF WINDOWS}
 +
  Windows, {for setconsoleoutputcp}
 +
  {$ENDIF}
 +
  Classes
 +
  ;
 +
 
 +
var
 +
UTF8TestString: string;
 +
 
 +
begin
 +
{$IFDEF WINDOWS}
 +
SetConsoleOutputCP(CP_UTF8);
 +
{$ENDIF}
 +
UTF8TestString:= 'rosé, водка and ούζο';
 +
writeln ('plain: ' + UTF8TestString);
 +
{Apparently we don't need UTF8ToConsole for this
 +
UTF8ToConsole did not do anything for me in fact.}
 +
end.</syntaxhighlight>
 +
 
 +
== Ejemplos ==
 +
 
 +
&nbsp;&nbsp;&nbsp;Podemos utilizar Lazarus para probar todos los ejemplos que encontremos en libros de Pascal estándar, o podemos escribirlos de nuestra cosecha. Muchos de los procedimientos más útiles son aquellos que nos permiten ejecutar ordenes del sistema o lanzar la ejecución de otros programas, que pueden estar escritos en Pascal, C o Perl , o incluso pueden ser ''shell'' o rutinas de proceso por lotes  (''batch scripts'')
 +
 
 +
=== Ejecutando ordenes del ''shell'' ===
 +
 
 +
&nbsp;&nbsp;&nbsp;Este es un ejemplo para un ''programa'' o un ''programa personalizado'':
 +
 
 +
<syntaxhighlight lang=pascal>
 +
Program ProbarShell;
 +
uses classes, unix;
 +
var S: longint;
 +
begin
 +
  S := fpsystem ('/bin/ls -la *.p*'); //lista los archivos .pp, .pas, .php, .png,  etc. en el directorio actual
 +
  writeln ('Programa terminado con estado:  ', S)
 +
end. </syntaxhighlight>
 +
 
 +
=== Ejemplo: actualizar FPC y Lazarus ===
 +
 
 +
&nbsp;&nbsp;&nbsp;Podemos ejecutar ordenes algo más complejas. Por ejemplo, si usted ha comprobado los repositorios de SVN para FPC y Lazarus (ver [http://www.stack.nl/~marcov/buildfaq.pdf construyendo FPC]) podemos mantener los archivos fuente de FPC y de Lazarus actualizados mediante la recuperación desde el repositorio de SVN con la siguiente secuencia de ordenes:
 +
 
 +
<syntaxhighlight lang=pascal>
 +
Program LazUpdate;
 +
uses classes, unix;
 +
var S : longint;
 +
begin
 +
  S := fpsystem ('cd /usr/local/src/fpc/devel/fpc ; make clean');
 +
  S := fpsystem ('cd /usr/local/src/fpc/devel/lazarus ; make clean');
 +
  S := fpsystem ('cd /usr/local/src/fpc/devel ; svn update fpc >& ~/cvscheckout.log');
 +
  S := fpsystem ('cd /usr/local/src/fpc/devel ; svn update lazarus >& ~/cvslaz.log');
 +
end.</syntaxhighlight>
 +
 
 +
&nbsp;&nbsp;&nbsp;Nota: la ejecución de la orden
 +
 
 +
<syntaxhighlight lang=pascal> fpsystem ('cd /un_direcorio')</syntaxhighlight>
 +
 
 +
&nbsp;&nbsp;&nbsp;seguida de
 +
 
 +
<syntaxhighlight lang=pascal> fpsystem ('hacer algo en ese directorio')</syntaxhighlight>
 +
 
 +
&nbsp;&nbsp;&nbsp;no funcionará según queremos, ya que tras la llamada a la función ''fpsystem'' el programa sigue en el directorio en que se encontraba previamente a la misma; será necesario incluir múltiples órdenes en cada línea de llamada al sistema.
 +
 
 +
&nbsp;&nbsp;&nbsp;Por supuesto, no hay que poner cada orden como una línea separada, podemos crear un archivo de proceso por loets como este (de [http://www.stack.nl/~marcov/buildfaq.pdf fpc ''buildfaq'']):
 +
 
 +
<syntaxhighlight lang="bash"> #!/bin/sh
 +
cd /usr/local/src/fpc/devel
 +
cd fpc
 +
make clean
 +
cd ..
 +
cd lazarus
 +
make clean
 +
cd ..
 +
svn up fpc >& ~/cvscheckout.log
 +
svn up lazarus >& ~/cvslaz.log </syntaxhighlight>
 +
 
 +
&nbsp;&nbsp;&nbsp;Lo llamaremos ''actualizarlaz.sh'', y lo llamaremos desde el programa Pascal así:
 +
 
 +
<syntaxhighlight lang=pascal>
 +
Program LazUpdate1;
 +
uses classes, unix;
 +
var S : longint;  
 +
begin
 +
  S := fpsystem ('updatelaz.sh')
 +
end. </syntaxhighlight>
  
== Command line parameters ==
+
== Parámetros de la línea de órdenes ==
  
See [[Command line parameters and environment variables]].
+
&nbsp;&nbsp;&nbsp;Ver [[Command line parameters and environment variables/es|Parámetros de la línea de órdenes y variables de entorno]].
  
==Orginal contributors==
 
Esta página se ha convertido desde la [http://lazarus-ccr.sourceforge.net/index.php?wiki=ConsoleModePascal versión epikwiki]. Original de [[User:Kirkpatc]].
 
Traducción de [[User:Iskraelectrica]]. Enero de 2009.
 
 
----
 
----
 
[[Executing External Programs|Ejecutando programas externos]]
 
[[Executing External Programs|Ejecutando programas externos]]

Latest revision as of 00:09, 12 February 2020

Deutsch (de) English (en) español (es) suomi (fi) magyar (hu) 日本語 (ja) русский (ru) slovenčina (sk)

Programación con Pascal en modo consola

por User:Kirkpatc

Iniciando el trabajo

   Muchos de nosotros escribíamos programas en Pascal mucho antes de que los interfaces gráficos de usuario (GUIs) y los entornos de desarrollo integrados (IDEs) se pusieran de moda. Muchos otros son principiantes en programación en Pascal y necesitan poder probar las herramientas básicas del lenguaje. Otros necesitan escribir aplicaciones de consola o en modo de texto para realizar tareas complejas de control del sistema.

Programar en modo consola sin Lazarus

   A pesar de que muchos prefieren usar el IDE de Lazarus para escribir programas en modo consola, también podemos escribirlos con cualquier editor de texto y compilarlos llamando nosotros al compilador FPC, por ejemplo para el programa ejemplo.pas:

 fpc ejemplo.pas

   Además disponemos del IDE en modo de texto' 'fp (que se parece bastante al viejo IDE de Turbo Pascal).    En las secciones siguientes nos centraremos en la programación con Lazarus.

Programar en modo consola con Lazarus

   Lazarus dispone de un entorno ideal para aprender Pascal, y para desarrollar programas en modo texto. Todas las funcionalidades del IDE se pueden utilizar, incluyendo el editor de código con su resaltado de sintaxis, acceso a las librerías, búsquedas complejas y herramientas de completado de código y comprobación de sintaxis. Si no se quiere un formulario con componentes visuales no es necesario tenerlo, pero el editor de Lazarus es un gran entorno para desarrollar programas. Puedes compilar y ejecutar programas durante el desarrollo, sin abandonar el Editor.

   Para dar inicio a un programa en modo consola, hay que ir al Menú principal y en la opción Proyecto seleccionar Nuevo Proyecto ... y en la ventana que aparece seleccionar Programa, Aplicación de consola o Programa personalizado. El IDE no generará todos los ficheros que están asociados con una aplicación gráfica completa, tampoco abrirá la ventana del Inspector de objetos y sí abrirá el Editor de código con el esqueleto del programa, a a la espera de que introduzcamos nuestro código.

 Nota: En windows una aplicación gŕafica no dispone de consola y por tanto no podemos utilizar writeln ni readln, ya que obtendremos el error File not open. Desmarca en Proyecto / Opciones de Proyecto... / Opciones del Compilador / Enlazado / Opciones específicas del SO objetivo /Aplicación gráfica Win32 (-WG) para crear una aplicación de consola.

   Programa personalizado

   Un programa Pascal muy sencillo. Seleccionaremos esta opción si queremos hacerlo todo nosotros o para realizar algunas pruebas rápidas y eliminar los ficheros a continuación.

   Programa

   Parecido al anterior, pero el IDE nos ayudará más. Por ejemplo cuándo añadimos un unidad el IDE automáticamente añade el nombre de la unidad en la sección uses. Este comportamiento está definido en las opciones de proyecto. Así podemos alternar entre los tipos Programa y Programa personalizado en cualquier momento.

   Un ejemplo para principiantes:

 program Proyecto1;
 {$mode objfpc}{$H+}
 uses
   {$IFDEF UNIX}{$IFDEF UseCThreads}
   cthreads,
   {$ENDIF}{$ENDIF}
   Classes
   { puedes añadir unidades trás esto};
 begin
   writeln('¡Hola Mundo!');
   readln;
 end.

   Aplicación de consola

   Esta opción creará un programa con una nueva clase derivada de TCustomApplication, la cual proporciona gran parte de la funcionalidad común y convierte la programación en línea de comando en algo muy fácil. Por ejemplo comprobando los parámetros pasados en la línea de comando, escribiendo ayudas, comprobando las variables de entorno y gestionado las excepciones. Todos los programas de la LCL utilizan esta funcionalidad automáticamente.

Compilar

   Una vez finalizado el programa (o una parte del mismo) lo podemos compilar y ejecutar con la opción Ejecutar > Ejecutar del menú principal, pulsando sobre el triangulo verde del panel de botones o con la tecla F9. Todos los mensajes de compilación ( avisos, informes de progreso o errores) aparecerán en la ventana de Mensajes, y con suerte eventualmente veremos un único mensaje que diga:

 El proyecto "project1" se ha construido correctamente. :)

Ejecutar

   ¡Pero! ¿dónde está el programa?

   Si no hemos guardado el proyecto, el IDE lo pone el el directorio temporal del sistema (/tmp en linux, C:\temp en windows, ver Entorno > Opciones del Entorno > Directorio para construir proyectos de prueba).

   Si hemos guardado el proyecto, el programa se creará en el mismo directorio donde hayamos guardado el archivo lpi del proyecto.

   Podemos ejecutar el programa desde una consola (terminal), utilizando un cd para cambiar al directorio deseado y escribir el nombre del programa. En *nix probablemente tengamos que escribir ./Nombredelprograma, ya que no se encuentra en la ruta por defecto (PATH).

   Ir de la consola al IDE y viceversa puede ser un poco tedioso. Por suerte hay una forma de abrir la ventana del terminal directamente desde el IDE de Lazarus.

Ejecutar desde el IDE

   Desde el menú principal seleccionar Ejecutar > Parámetros de ejecución ..., y en el cuadro de diálogo, marcar "Usar al lanzar la aplicación". La primera vez que se lanza un programa, con la secuencia compilar/ejecutar, es probable que obtengamos este mensaje

 "xterm: Can't execvp /usr/share/lazarus//tools/runwait.sh: Permission denied".  

   Si sucede esto, necesitaremos cambiar los permisos en el archivo apropiado (por ejemplo usando chmod +x nombredelejecutable, o usar la utilidad de Windows para cambiar los permisos); es probable que tengamos que hacer esta operación como administrador. Tras esto cada vez que lancemos nuestro programa aparecerá una ventana de consola y toda la entrada/salida de programa se mostrará en ella

   Una vez terminada la ejecución de nuestro programa, aparecerá un mensaje de "Press enter" en la consola. Así toda la salida generada por el programa permanecerá en la pantalla para tener la posibilidad de leerla; la ventana de la consola se cerrará tras pulsar 'enter'.

   Desafortunadamente,este método no nos permite utilizar el depurador integrado.

Ejecutar en el IDE con redirección de la salida

   Si quieres ver lo que se escribe en la salida estándar y deseas utilizar el depurador integrado, stdout se puede redirigir a un archivo con el siguiente código:

 uses
 baseunix; 

 var
 ArchivoSalida: text;
 Resultado : integer;

 begin 
  Assign(ArchivoSalida, 'ArchivoSalida.txt');
  if FileExists('ArchivoSalida.txt') then
   begin
    Append(ArchivoSalida);
   end
  else
   begin
    Rewrite(ArchivoSalida); { abrir archivo para escritura, destruir contenido, en su caso }
   end;

 Resultado := fpdup(ArchivoSalida, output);

 if Resultado < 0 then
  begin
   raise Exception.CreateFmt('duplicación fallida: %s', [Resultado]);
  end;
 
 Close( ArchivoSalida );

   ArchivoSalida.txt se puede ver con 'tail -f ArchivoSalida.txt" o con un editor si 'tail' no está disponible en tu SO.

   Por otra parte, utilizando Lazarus 0.9.31 o superior (sólo en Linux): En el menú "Ver", en "Debug Windows" hay una entrada para "Salida de la consola" para ver la salida stdout.

Salida en Unicode (UTF8)

   Si quieres que tu programa en modo consola muestre la salida en Unicode (UTF-8) en Windows Vista y superior (y tal vez en las versiones anteriores), puedes utilizar el comando SetConsoleOutputCP para activar en la consola el juego de caracteres UTF-8.

Note-icon.png

Nota: Trás la ejcución del programa, la consola se comporta extrañamente en mi sistema: la introducción de comandos y la escritura no muestran resultados: ningún comando ejecutado, ningún error, nada. ¿Tal vez la consola necesita ser cambiada de nuevo? Lo he intentado también, pero parecía dar el mismo resultado. --BigChimp 17:15, 28 June 2012 (UTC)

Note-icon.png

Nota: tendrás que asegurarte de que la fuente de la consola puede mostrar las letras que desea en la salida (por ejemplo, griego, cirílico, coreano)..

Note-icon.png

Nota: necesitas incluir la unidad Windows.


   Ver Soporte Unicode en la LCL para más detalles sobre soporte Unicode en Lazarus y FPC.

Programa de ejemplo:

 program uniconsole;

 {$mode objfpc}{$H+}
 {$APPTYPE CONSOLE}

 uses
   {$IFDEF UNIX}
     {$IFDEF UseCThreads}
     cthreads,
     {$ENDIF}
   {Widestring manager needed for widestring support}
   cwstring,
   {$ENDIF}
   {$IFDEF WINDOWS}
   Windows, {for setconsoleoutputcp}
   {$ENDIF}
   Classes
   ;

 var
 UTF8TestString: string;

 begin
 {$IFDEF WINDOWS}
 SetConsoleOutputCP(CP_UTF8);
 {$ENDIF}
 UTF8TestString:= 'rosé, водка and ούζο';
 writeln ('plain: ' + UTF8TestString);
 {Apparently we don't need UTF8ToConsole for this
 UTF8ToConsole did not do anything for me in fact.}
 end.

Ejemplos

   Podemos utilizar Lazarus para probar todos los ejemplos que encontremos en libros de Pascal estándar, o podemos escribirlos de nuestra cosecha. Muchos de los procedimientos más útiles son aquellos que nos permiten ejecutar ordenes del sistema o lanzar la ejecución de otros programas, que pueden estar escritos en Pascal, C o Perl , o incluso pueden ser shell o rutinas de proceso por lotes (batch scripts)

Ejecutando ordenes del shell

   Este es un ejemplo para un programa o un programa personalizado:

 Program ProbarShell;
 uses classes, unix;
 var S: longint;
 begin
   S := fpsystem ('/bin/ls -la *.p*'); //lista los archivos .pp, .pas, .php, .png,  etc. en el directorio actual
   writeln ('Programa terminado con estado:  ', S)
 end.

Ejemplo: actualizar FPC y Lazarus

   Podemos ejecutar ordenes algo más complejas. Por ejemplo, si usted ha comprobado los repositorios de SVN para FPC y Lazarus (ver construyendo FPC) podemos mantener los archivos fuente de FPC y de Lazarus actualizados mediante la recuperación desde el repositorio de SVN con la siguiente secuencia de ordenes:

 Program LazUpdate;
 uses classes, unix;
 var S : longint;
 begin 
   S := fpsystem ('cd /usr/local/src/fpc/devel/fpc ; make clean');
   S := fpsystem ('cd /usr/local/src/fpc/devel/lazarus ; make clean');
   S := fpsystem ('cd /usr/local/src/fpc/devel ; svn update fpc >& ~/cvscheckout.log');
   S := fpsystem ('cd /usr/local/src/fpc/devel ; svn update lazarus >& ~/cvslaz.log');
 end.

   Nota: la ejecución de la orden

 fpsystem ('cd /un_direcorio')

   seguida de

 fpsystem ('hacer algo en ese directorio')

   no funcionará según queremos, ya que tras la llamada a la función fpsystem el programa sigue en el directorio en que se encontraba previamente a la misma; será necesario incluir múltiples órdenes en cada línea de llamada al sistema.

   Por supuesto, no hay que poner cada orden como una línea separada, podemos crear un archivo de proceso por loets como este (de fpc buildfaq):

 #!/bin/sh
 cd /usr/local/src/fpc/devel
 cd fpc
 make clean
 cd ..
 cd lazarus
 make clean
 cd ..
 svn up fpc >& ~/cvscheckout.log
 svn up lazarus >& ~/cvslaz.log

   Lo llamaremos actualizarlaz.sh, y lo llamaremos desde el programa Pascal así:

 Program LazUpdate1;
 uses classes, unix;
 var S : longint; 
 begin
   S := fpsystem ('updatelaz.sh')
 end.

Parámetros de la línea de órdenes

   Ver Parámetros de la línea de órdenes y variables de entorno.


Ejecutando programas externos