Console Mode Pascal/ja: what changed
Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.
| Old | New | Line | |
|---|---|---|---|
| 1 | 1 | ## コンソールモードPascalプログラミング | |
| 2 | 2 | ||
| 3 | 3 | User:Kirkpatcによる | |
| 4 | 4 | ||
| 5 | 5 | 今日、多くのPascalプログラマにとって、統合環境(IDE)でGUIプログラミングをするのが当たり前になっています。 IDEを使っていても、Pascal言語でシンプルなツールをコンソールモードで書きたい、というビギナーの方も多いでしょう。 また、複雑なシステム制御のために、コンソールやテキストモードでアプリケーションを書きたいと思っているかもしれません。 | |
| 6 | 6 | ||
| 7 | 7 | LazarusはPascalを勉強するための理想的な環境であり、テキストモードプログラムを開発することができます。 ソースハイライト付きのエディタ、ライブラリアクセス、複雑な検索や、コード補完、文法チェックなど、全てのIDEの機能が使えます。ビジュアルコンポーネントのフォームが必要ないものでも、Lazarusのエディタは偉大なプログラム開発環境です。 コンパイルやデバッグ実行などの開発サイクルの間、エディタを離れる必要はありません。 | |
| 8 | 8 | ||
| 9 | 9 | コンソールモードのプログラムを開始するには、メインメニューで Project -\> New Projectを選択します。それから、**Program'',**Console Application**または**Custom Program'''を選択します。 IDEはGUIアプリケーションのときに必要な余分なファイルを生成せず、Object Inspectorも表示しませんが、ソースエディタには、プログラムのスケルトンがすでに開かれていて、あなたの入力を待っています。 | |
| 10 | 10 | ||
| 11 | 11 | ### カスタムプログラム | |
| 12 | 12 | ||
| 13 | 13 | とても短い最小のpascalプログラムを作る時に選択します。 もし、自分自身ですべてコーディングしたいとき、簡単なテストを行ってすぐファイルを消しそうな、そういう時に利用できます。 | |
| 14 | 14 | ||
| 15 | 15 | ### プログラム | |
| 16 | 16 | ||
| 17 | 17 | だいたいカスタムプログラムと同じですが、IDEがほんの少しだけ補助をします。たとえば、他のユニットを追加したときに、IDEは自動的にユニット名をプログラムのusesセクションに追加します。 この動作はプロジェクトオプションで定義されていますので、いつでも'プログラム'と'カスタムプログラム'の動作を切り替えることができます。 | |
| 18 | 18 | ||
| 19 | 19 | まったくのビギナーへの例: | |
| 20 | 20 | ||
| 21 | 21 | program Project1; | |
| 22 | 22 | {$mode objfpc}{$H+} | |
| 23 | 23 | uses | |
| 24 | 24 | {$IFDEF UNIX}{$IFDEF UseCThreads} | |
| 25 | 25 | cthreads, | |
| 26 | 26 | {$ENDIF}{$ENDIF} | |
| 27 | 27 | Classes | |
| 28 | 28 | { このあとにユニットを追加できます。 }; | |
| 29 | 29 | begin | |
| 30 | 30 | writeln('Hello World!'); | |
| 31 | 31 | readln; | |
| 32 | 32 | end. | |
| 33 | 33 | ||
| 34 | 34 | ### コンソールアプリケーション | |
| 35 | 35 | ||
| 36 | 36 | 新しいクラスをTCustomApplicationから派生させて、コンソールプログラムを作る方法を紹介しましょう。TCustomApplicationは多くの共通の機能、コマンドラインのユーティリティなどの製作を補助する機能を提供しています。 たとえば、コマンドラインオプションをチェックしたり、ヘルプを書いたり、環境変数を調べたり、例外ハンドラを扱えるようにしたりします。すべてのLCLプログラムはこのクラスを自動的に使います。 | |
| 37 | 37 | ||
| 38 | 38 | ## コンパイル | |
| 39 | 39 | ||
| 40 | 40 | プログラムの編集が終わったら、メインメニューでRun-\>Runを選択するか、ボタンバーの緑色の三角のシンボル(実行)をクリックすることで、コンパイルして実行することができます。 すべてのコンパイラメッセージはメッセージボックスに現れます。深刻なエラーがなければ、最終的には、次のように表示されるでしょう。 | |
| 41 | 41 | ||
| 42 | 42 | 'Project "Project1" successfully built.:)'. | |
| 43 | 43 | ||
| 44 | 44 | ## 実行 | |
| 45 | 45 | ||
| 46 | 46 | コンパイルしたプログラムはどこにあるのでしょうか? | |
| 47 | 47 | ||
| 48 | 48 | まだソースコードを保存してなければ、IDEは一時ディレクトリに保存しています。 | |
| 49 | 49 | ||
| 50 | 50 | Linuxでは /tmp, Windowsでは C:\temp です。詳しくはテストプロジェクトをビルドしたときの Enviroment Options/ Files /Directoryを見てください。 | |
| 51 | 51 | ||
| 52 | 52 | もし、すでのプロジェクトを保存していれば、プログラムはproject1.lpiといったプロジェクトファイルと同じディレクトリに作成されています。 | |
| 53 | 53 | ||
| 54 | 54 | プログラムはコンソールウインドウ、もしくは端末画面から、cdコマンドで上記のディレクトリに移り、プログラムの名前をタイプします。 (UnixやLinuxでは次のように入力してください。 | |
| 55 | 55 | ||
| 56 | - | ||
| 56 | + | ```text | |
| 57 | + | ./Project1 | |
| 58 | + | ``` | |
| 57 | 59 | ||
| 58 | 60 | ) しかし、Lazarusエディタと端末画面を行き来することはあまり便利の良いものではありません。幸い、LazarusにはLazarus環境の下で端末画面を開くメカニズムがあります。 | |
| 59 | 61 | ||
| 60 | 62 | ## IDEで実行する | |
| 61 | 63 | ||
| 62 | 64 | メインメニューから、Run-\>Run Parametersを選択し、"Use launching application"にチェックをつけます。 初回これを実行して、コンパイル/実行の手順をふむと、次のようなメッセージが表示されるかもしれません。 | |
| 63 | 65 | ||
| 64 | - | ||
| 66 | + | ```text | |
| 67 | + | "xterm: Can't execvp /usr/share/lazarus//tools/runwait.sh: Permission denied". | |
| 68 | + | ``` | |
| 65 | 69 | ||
| 66 | 70 | このようになったら、ファイルに適切なパーミッションを付加します。(たとえば、chmod +x ファイル名 などとします)。 これらの作業はルートとして実行しなくてはなりません。この後でプログラムを実行する度に、コンソールウインドウが表示されて、readln,writelnのようなテキスト入出力が実行されます。 | |
| 67 | 71 | ||
| 68 | 72 | プログラムの実行終了後、"Press enter"メッセージが画面上にあらわれます。これは、プログラムの最後の出力メッセージを読める機会をあたえてくれます。enterキーを押すと、コンソールウインドウが閉じます。 | |
| 69 | 73 | ||
| 70 | 74 | ## よくある使い方 | |
| 71 | 75 | ||
| 72 | 76 | コンソールモードは、標準パスカル教科書の全ての例題を実行するために、あるいは、自分自身で書いたプログラムを実行するために、Lazarusエディタを使うことが出来ます。もっともよく使う方法は、OS環境下にあるコマンドを実行したり、他のプログラムを実行したりすることです。(他のプログラムというのは、Pascalのほか、C,Perl,シェル、バッチスクリプトなど、何で書かれていてもかまいません) | |
| 73 | 77 | ||
| 74 | 78 | ### シェルコマンドの実行 | |
| 75 | 79 | ||
| 76 | 80 | 下記に*Custom Program* や *Program* の例を示します。: | |
| 77 | 81 | ||
| 78 | 82 | Program TryShell; | |
| 79 | 83 | uses classes, unix; | |
| 80 | 84 | var S: longint; | |
| 81 | 85 | begin | |
| 82 | 86 | S := fpsystem ('/bin/ls -la *.p*'); //lists .pp, .pas, .php, .png etc in current directory | |
| 83 | 87 | writeln ('Program exited with status : ', S) | |
| 84 | 88 | end. | |
| 85 | 89 | ||
| 86 | 90 | ### Example: fpcとlazarusを最新にする | |
| 87 | 91 | ||
| 88 | 92 | 複雑なコマンドよりも、さらに複雑なことを実行することができます。たとえば、すでにFPCやLazarusのSVNリポジトリをチェックアウトしているのであれば、次のコードで最新のファイルをSVNリポジトリから取得することができます。 | |
| 89 | 93 | ||
| 90 | 94 | Program LazUpdate; | |
| 91 | 95 | uses classes, unix; | |
| 92 | 96 | var s : longint; | |
| 93 | 97 | begin | |
| 94 | 98 | S := fpsystem ('cd /usr/local/src/fpc/devel/fpc ; make clean'); | |
| 95 | 99 | S := fpsystem ('cd /usr/local/src/fpc/devel/lazarus ; make clean'); | |
| 96 | 100 | S := fpsystem ('cd /usr/local/src/fpc/devel ; svn update fpc >& ~/cvscheckout.log'); | |
| 97 | 101 | S := fpsystem ('cd /usr/local/src/fpc/devel ; svn update lazarus >& ~/cvslaz.log'); | |
| 98 | 102 | end. | |
| 99 | 103 | ||
| 100 | 104 | コマンドの使い方に注意してみてください。 | |
| 101 | 105 | ||
| 102 | - | ||
| 103 | - | ||
| 106 | + | ```text | |
| 107 | + | fpsystem ('cd /somedirectory') | |
| 108 | + | fpsystem ('do something in that subdirectory') | |
| 109 | + | ``` | |
| 104 | 110 | ||
| 105 | 111 | これは上手く働きません。なぜなら、個々のfpsystem関数呼び出しは、プログラムの開始ディレクトリから開始されるからです。ですから、シェルに、1行に複数行を区切って入れるようにして関数を呼び出しします。 | |
| 106 | 112 | ||
| 107 | 113 | もちろん、Pascalのように個々のコマンドを分割する必要はありません。次のようにスクリプトファイルを生成しておこなう方法もあります。([fpc buildfaq](http://www.stack.nl/~marcov/buildfaq.pdf)より): | |
| 108 | 114 | ||
| 109 | 115 | #!/bin/sh | |
| 110 | 116 | cd /usr/local/src/fpc/devel | |
| 111 | 117 | cd fpc | |
| 112 | 118 | make clean | |
| 113 | 119 | cd .. | |
| 114 | 120 | cd lazarus | |
| 115 | 121 | make clean | |
| 116 | 122 | cd .. | |
| 117 | 123 | svn up fpc >& ~/cvscheckout.log | |
| 118 | 124 | svn up lazarus >& ~/cvslaz.log | |
| 119 | 125 | ||
| 120 | 126 | これをupdatelaz.shで保存して、次のPascalプログラムから呼び出します。 | |
| 121 | 127 | ||
| 122 | 128 | Program LazUpdate1; | |
| 123 | 129 | uses classes, unix; | |
| 124 | 130 | var S : longint; | |
| 125 | 131 | begin | |
| 126 | 132 | S := fpsystem ('updatelaz.sh') | |
| 127 | 133 | end. | |
| 128 | 134 | ||
| 129 | 135 | ## コマンドラインパラメータ | |
| 130 | 136 | ||
| 131 | 137 | [[Command line parameters and environment variables|Command line parameters and environment variablesをみてください]]。 | |
| 132 | 138 | ||
| 133 | 139 | ## Orginal contributors | |
| 134 | 140 | ||
| 135 | 141 | This page has been converted from the epikwiki [version](http://lazarus-ccr.sourceforge.net/index.php?wiki=ConsoleModePascal). Original content by User:Kirkpatc. | |
| 136 | 142 | ||
| 137 | 143 | --- | |
| 138 | 144 | *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](/wiki-contact).* |
