Console Mode Pascal/ru

From Free Pascal wiki
Revision as of 11:31, 5 October 2009 by Kavomsk (talk | contribs) (→‎Examples)
Jump to navigationJump to search

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

Программирование консольного режима в Pascal

by User:Kirkpatc

Многие программы написаны на Pascal задолго до появления графических интерфейсов пользователя (GUI) и интегрированных оболочек разработки (IDE), ныне ставших модными. Однако начинающим программировать на Pascal желательно попробовать основные инструментальные средства языка. Часто бывает необходимо писать консольные или текстовые приложения для выполнения сложных системных управляющих задач.

Lazarus является идеальной средой для изучения Pascal и разработки программ текстового режима. Может использоваться вся функциональность интегрированной оболочки разработчика, включая редактор исходных текстов с подцветкой синтаксиса, доступ к библиотекам, инструменты сложного поиска и кодов завершения, проверку синтаксиса. Если форма с визуальными компонентами не нужна, редактор исходных текстов Lazarus – хорошая среда для разработки программы. В процессе разработки можно компилировать и выполнять программу, не покидая редактор.

Для запуска программы консольного режима необходимо в основном меню выбрать Проект -> Создать Проект, затем выбрать Программа, Консольное приложение или Программа пользователя. IDE не будет генерировать дополнительных файлов для полного графического приложения, и не откроет окно Инспектора Объектов, но откроет редактор исходного текста со скелетом структуры программы и будет ожидать ввода текста программы.

Программа пользователя

Очень маленькая программа на pascal. Выбирается, если нужно сделать все самостоятельно, или выполнить быструю проверку, а затем удалить файлы.

Программа

Похоже на "Программа пользователя", но IDE задействован чуть больше. Например, если добавить другой модуль, IDE автоматически добавит его имя в секцию uses. Это действие определяется в опциях проекта. Можно перемещаться в любое время между режимами 'Программа' и 'Программа пользователя'.

Пример для начинающих:

program Project1;
{$mode objfpc}{$H+}
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };
begin
  writeln('Hello World!');
  readln;
end.

Консольное приложение

Здесь создается программа с новым классом, производным от TCustomApplication. TCustomApplication обеспечивает хорошую основу и делает программирование утилит командной строки довольно простым. Например, проверку опций командной строки, написание справки, проверку переменных окружения и обработку исключений. Все программы LCL автоматически это используют.

Компиляция

По завершении написания программы (или ее фрагмента), ее можно откомпилировать и выполнить, выбрав Запуск -> Запуск из основного меню, или нажав зеленый треугольник (Запуск) на кнопочной панели. Все сообщения компилятора (предупреждения, промежуточные отчеты и сообщения об ошибках) будут появляться в окне сообщений, а в конечном итоге должно появиться сообщение

'Project "Project1" successfully built.:)'.

Запуск

Но где находится программа??!!

Если Вы ее еще не сохраняли, то IDE поместил ее во временную папку (т.е. /tmp под linux, C:\temp под windows, см. Настройки среды / Files / Directory, чтобы проверить настройки проектов).

Если проект был сохранен, то созданная программа находится в той же папке, где и файл project1.lpi.

Выполнять программу можно из окна консоли (терминала), применив cd для перехода в нужную папку, и напечатав имя программы (в Unix/Linux, в текущей папке нужно напечатать

./Project1 ,

если эта папка не находится в стандартном PATH). Однако довольно неудобно постоянно прыгать из редактора Lazarus в окно терминала и обратно. К счастью, имеется механизм, позволяющий открывать окно терминала из среды Lazarus.

Запуск из IDE

Из оснвного меню нужно выбрать Запуск -> Параметры запуска, затем пометить флажок "Использовать приложение для запуска". Сделав это, попробуйте запустить последовательность Компиляция/Запуск, но возможно, появится нехорошее сообщение

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

В этом случае необходимо изменить разрешения для соответствующего файла (например, chmod +x filename, или при помощи утилиты Windows, изменяющей разрешения); для этого необходимы права администратора. После этого при запуске программы появится окно консоли и тексты ввода/вывода в нем.

По завершении выполнения программы на экране появится сообщение "Press enter". Таким образом диалоги созданной программы останутся на экране, чтобы можно было их прочитать; по нажатии 'enter' окно консоли закроется.

Примеры

Можно испытать работу редактора Lasarus, попробовав все примеры из обычной книги по языку Pascal, или написав собственный. Наиболее полезные - те, что выполняют системные команды или запускают другие программы (написанные на Pascal, C или Perl, или сценарии оболочки).

Выполнение команд оболочки

Приведен пример для Custom Program или Program:

Program TryShell;
uses classes, unix;
var S: longint;
begin
  S := fpsystem ('/bin/ls -la *.p*'); //lists .pp, .pas, .php, .png etc in current directory
  writeln ('Program exited with status : ', S)
end.

Пример: корректировка fpc и lazarus

Rather more complex commands can be executed. For example, if you have already checked out the SVN repositories for FPC and Lazarus (see 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:

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.

Note that issuing the command

fpsystem ('cd /somedirectory')

followed by

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 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 

Name it updatelaz.sh, and then call it from a Pascal program thus:

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

Параметры командной строки

См. Command line parameters and environment variables.