ウィキのコピーミラー

これは pascal.chat のウィキのミラーです。編集、履歴、ログインはそちらで行います。

Console Mode Pascal/ja

Deutsch · English · Español · Magyar · Slovenčina · Suomi · Русский · 日本語

コンソールモードPascalプログラミング

User:Kirkpatcによる

今日、多くのPascalプログラマにとって、統合環境(IDE)でGUIプログラミングをするのが当たり前になっています。 IDEを使っていても、Pascal言語でシンプルなツールをコンソールモードで書きたい、というビギナーの方も多いでしょう。 また、複雑なシステム制御のために、コンソールやテキストモードでアプリケーションを書きたいと思っているかもしれません。

LazarusはPascalを勉強するための理想的な環境であり、テキストモードプログラムを開発することができます。 ソースハイライト付きのエディタ、ライブラリアクセス、複雑な検索や、コード補完、文法チェックなど、全てのIDEの機能が使えます。ビジュアルコンポーネントのフォームが必要ないものでも、Lazarusのエディタは偉大なプログラム開発環境です。 コンパイルやデバッグ実行などの開発サイクルの間、エディタを離れる必要はありません。

コンソールモードのプログラムを開始するには、メインメニューで Project -> New Projectを選択します。それから、**Program'',Console Applicationまたは**Custom Program'''を選択します。 IDEはGUIアプリケーションのときに必要な余分なファイルを生成せず、Object Inspectorも表示しませんが、ソースエディタには、プログラムのスケルトンがすでに開かれていて、あなたの入力を待っています。

カスタムプログラム

とても短い最小のpascalプログラムを作る時に選択します。 もし、自分自身ですべてコーディングしたいとき、簡単なテストを行ってすぐファイルを消しそうな、そういう時に利用できます。

プログラム

だいたいカスタムプログラムと同じですが、IDEがほんの少しだけ補助をします。たとえば、他のユニットを追加したときに、IDEは自動的にユニット名をプログラムのusesセクションに追加します。 この動作はプロジェクトオプションで定義されていますので、いつでも'プログラム'と'カスタムプログラム'の動作を切り替えることができます。

まったくのビギナーへの例:

pascal
program Project1;
{$mode objfpc}{$H+}
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { このあとにユニットを追加できます。 };
begin
  writeln('Hello World!');
  readln;
end.

コンソールアプリケーション

新しいクラスをTCustomApplicationから派生させて、コンソールプログラムを作る方法を紹介しましょう。TCustomApplicationは多くの共通の機能、コマンドラインのユーティリティなどの製作を補助する機能を提供しています。 たとえば、コマンドラインオプションをチェックしたり、ヘルプを書いたり、環境変数を調べたり、例外ハンドラを扱えるようにしたりします。すべてのLCLプログラムはこのクラスを自動的に使います。

コンパイル

プログラムの編集が終わったら、メインメニューでRun->Runを選択するか、ボタンバーの緑色の三角のシンボル(実行)をクリックすることで、コンパイルして実行することができます。 すべてのコンパイラメッセージはメッセージボックスに現れます。深刻なエラーがなければ、最終的には、次のように表示されるでしょう。

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

実行

コンパイルしたプログラムはどこにあるのでしょうか?

まだソースコードを保存してなければ、IDEは一時ディレクトリに保存しています。

Linuxでは /tmp, Windowsでは C:\temp です。詳しくはテストプロジェクトをビルドしたときの Enviroment Options/ Files /Directoryを見てください。

もし、すでのプロジェクトを保存していれば、プログラムはproject1.lpiといったプロジェクトファイルと同じディレクトリに作成されています。

プログラムはコンソールウインドウ、もしくは端末画面から、cdコマンドで上記のディレクトリに移り、プログラムの名前をタイプします。 (UnixやLinuxでは次のように入力してください。

text
./Project1

) しかし、Lazarusエディタと端末画面を行き来することはあまり便利の良いものではありません。幸い、LazarusにはLazarus環境の下で端末画面を開くメカニズムがあります。

IDEで実行する

メインメニューから、Run->Run Parametersを選択し、"Use launching application"にチェックをつけます。 初回これを実行して、コンパイル/実行の手順をふむと、次のようなメッセージが表示されるかもしれません。

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

このようになったら、ファイルに適切なパーミッションを付加します。(たとえば、chmod +x ファイル名 などとします)。 これらの作業はルートとして実行しなくてはなりません。この後でプログラムを実行する度に、コンソールウインドウが表示されて、readln,writelnのようなテキスト入出力が実行されます。

プログラムの実行終了後、"Press enter"メッセージが画面上にあらわれます。これは、プログラムの最後の出力メッセージを読める機会をあたえてくれます。enterキーを押すと、コンソールウインドウが閉じます。

よくある使い方

コンソールモードは、標準パスカル教科書の全ての例題を実行するために、あるいは、自分自身で書いたプログラムを実行するために、Lazarusエディタを使うことが出来ます。もっともよく使う方法は、OS環境下にあるコマンドを実行したり、他のプログラムを実行したりすることです。(他のプログラムというのは、Pascalのほか、C,Perl,シェル、バッチスクリプトなど、何で書かれていてもかまいません)

シェルコマンドの実行

下記にCustom Program や Program の例を示します。:

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

Example: fpcとlazarusを最新にする

複雑なコマンドよりも、さらに複雑なことを実行することができます。たとえば、すでにFPCやLazarusのSVNリポジトリをチェックアウトしているのであれば、次のコードで最新のファイルをSVNリポジトリから取得することができます。

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.

コマンドの使い方に注意してみてください。

text
fpsystem ('cd /somedirectory')
fpsystem ('do something in that subdirectory')

これは上手く働きません。なぜなら、個々のfpsystem関数呼び出しは、プログラムの開始ディレクトリから開始されるからです。ですから、シェルに、1行に複数行を区切って入れるようにして関数を呼び出しします。

もちろん、Pascalのように個々のコマンドを分割する必要はありません。次のようにスクリプトファイルを生成しておこなう方法もあります。(fpc buildfaqより):

pascal
#!/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

これをupdatelaz.shで保存して、次のPascalプログラムから呼び出します。

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

コマンドラインパラメータ

Command line parameters and environment variablesをみてください。

Orginal contributors

This page has been converted from the epikwiki version. Original content by User:Kirkpatc.


From the Free Pascal wiki, page "Console Mode Pascal/ja", as it stood on 2009-01-17 after a change by Saeka-jp, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

第2版、最終更新:WikiArchive 。