はじめですから、まずは基本的なところからはじめてみたいと思います。自分が理解でき自由にアレンジできる最小構成からはじめること、これは鉄則です。
もっと大きなプログラムを作りたい、という欲求も出てくるでしょうが、まだまだ辛抱が必要です。(長い辛抱になりますので、厳しそうであればマイクロスクリプトのほうを極めるのも一つの手だと思います。)
今回のプログラム全体を固めたものはこちらです: lecture1.tar.gz
それではまず、開発環境側で以下のような作業をしてください。ここでは、標準的なディレクトリ(/usr/local/brightv/)にインストールされているものとして話を進めます。そうでない場合は、各自読み替える必要があります。
$ cd /usr/local/brightv/appl/
$ mkdir lecture1
$ mkdir lecture1/pcat
$ mkdir lecture1/src
そこまでいったら、このMakefileを/usr/local/brightv/appl/lecture1/src/の中に保存してください。続いて、
$ cd lecture1/pcat/
$ ln -s ../src/Makefile
としましょう。ここまで行けば下ごしらえは出来たといえます。
※ ここで使っているMakefileは、〜.out
という名前の実行形式ファイルを出力するように作ってあります。bzアーカイブは生成しません。練習段階では*.bzアーカイブを作る手間は時間的にもったいないのでそのような形をとります。小物・原紙などのアプリケーションを作る際には別のMakefileが必要です。
それでは、やっとプログラムが書ける下地が整いました。早速簡単なものを書いてみましょう。名前はmain.CC
としてください。テキストエディタでeuc-jp/lf
な文字コードで保存する必要があることにも注意しましょう。(例えばXEmacsなら以下のようにします。)
xemacs ../src/main.CC &
打ち込むべきコードは以下の通りです。ダウンロードも出来るようにはしますが、自分で打ち込んでみることを強くおすすめします。
#include <basic.h>
#include <btron/proctask.h>
#include <btron/hmi.h>
extern "C" W main(W argc, TC* argv[])
{
TC text[] = {L"Hello, World!"};
pdsp_msg(text);
ext_prc(0);
}
ここではいじる必要がないのですが、今後のために知っておいた方が良いMakefileのいじり方を書いておきます。知っている方は結構ですが、飛ばさずに読んでください。
ここで取り上げるのは2箇所だけです。本当は$(MKBTF)
の行とかも説明すべきですが、それは*.bzアーカイブを作る時になったら追々説明します。
# 作成対象
TARGET = lecture1
この行はプログラム名です。lecture1となっていますから、実行ファイルはlecture1.outという名前になります。
# ソースファイル
SRC = main.CC
この行はソースファイルの名前を指定するためのものです。複数ある場合は、
SRC = foo.CC bar.CC baz.CC
のように、間にスペースを挟みつつ、単純に並べて書いてください。
第2回以降は、第1回のMakefileをコピーして、以上の部分を修正しながら使っていけばOKです。自分でオリジナルのプログラムを作るときも同じようにしてください。
あとはコンパイル・実行するだけです。コンパイルは/usr/local/brightv/appl/lecture1/pcatの中で、
$ make
とするだけです。何やら長いコマンドが出力されますが、エラーメッセージが表示されていなければコンパイルに成功しています。
実行ですが、作った第1回で用意したrunをインストールしている方は、デバッグコンソールかシステムコンソールで、
% cd /SYS/WORK
% run lecture1
としてください。runはファイルの転送・実行の両方を一度に行うためのものです。
ここで、run lecture1
の実行の際に、システムメッセージパネルを見てください。システムメッセージパネルに"Hello, World!"が表示されましたか? 表示されていれば、ここまでの手順で正しくBTRONプログラムが書けて実行できている、といえます。
どのようにして、"Hello, World!"という文字列が表示されたのか、プログラムを見てみましょう。
プログラムの実行に関係しているのは、main()
関数の内部、つまりたったの3行です。
まず、一行目の、
TC text[] = {L"Hello, World!"};
です。これは、textというTC型の配列変数に"Hello, World!"という文字列を代入しています。TC型はTRONコード文字一文字分を表す変数だと考えてください。それの配列だから文字列になります。
L"..."
となっているのは、wch2hexというプログラムにより、EUCで書かれたL"..."内部をTRONコードに変換するよう指示するためです。
ASCIIコード(つまり普通の文字)とTC文字列には、本質的には仕組み上の違いはありません。以下に比較のための表を書いておきます。(現段階で完璧に理解している必要はありません。)
文字列の終端 | 一文字分のサイズ | 多文字の表現 | |
---|---|---|---|
ASCII文字列 | '\0' (=0, 1バイト, NULL文字) | sizeof(char) = 1バイト マルチバイト文字は例外的 |
ISO-2022, EUC-JPなど様々な方式 |
TC文字列 | TNULL (=0, 2バイト) | sizeof(TC) = 2バイト | 文字コード切り替え方式(ISO-2022に類似) |
従って、要はASCII文字の時に char text[] = "Hello, World!";
としている事のTCバージョンだと考えれば大丈夫です。
pdsp_msg(text);
次に、2行目のpdsp_msg
です。これは、与えられたTC文字列をシステムメッセージパネルに表示する、というそのままな命令です。1行目でtextにはTC文字列の"Hello, World!"を代入していますから、2行目に来た時点でそのようにシステムメッセージパネルに表示されるわけです。
ext_prc(0);
3行目のext_prc
は自プロセスを終了する、という命令です。プロセスはプログラムという意味で解釈してもらって大丈夫です。cre_prc
(別のプロセスを起動する)などをしていない場合は、単にext_prc
で自プロセス(=プログラム自身)を終了できます。引数には返り値を与えます。正常終了の場合には0
を返すのが一般的な習慣です。
…いかがでしたか? 3行分の短いプログラムでしたが、しっかり理解できましたでしょうか?
オプショナルですが、ぜひ試してみてください。これらが分かれば次に進んで大丈夫です。
$ make clean
を実行してから、main.CCをfoo.CCと名前変更してください。(Unix系OSではmv
コマンドを使用します。) これをコンパイルできるようにMakefileを書き換えてください。sig_buz
命令を使用します。仕様書で調べる技術も重要です! )[ 戻る ]