ソフトな忘却力(63) FreeDOS、Free Pascal、自前Unitの作成

Joseph Halfmoon

前回は、Turbo Pascalを現代によみがえらせるFreePascalコンパイラで外部ライブラリを呼びだして使うところを練習してみました。その際、不完全なインストールが発覚。修正対応したので、各種の外部ライブラリ(かなり大量)が使えるようになったハズ。今回は、自前のライブラリ作成方法を確認しておきたいと思います。

※「 ソフトな忘却力」投稿順 Index はこちら

※実機動作確認には以下を使用しております。

Turbo Pascal式の分割コンパイル

原初の純粋なPascalは教育用であったせいか、分割コンパイルなど対応していなかった記憶。しかし、実用のコンパイラとしては分割コンパイルなしにはやり切れないので、当然 Free Pascal も分割コンパイルのサポートがあり。Turbo Pascalに「可能な限り寄せている」処理系なので、当然 Turbo Pascal 式です。まあ、事実上の業界標準(誰が言った?)Turbo Pascal式なら安心?

さてライブラリの実体ファイルは2つです

    • ライブラリ名.O
    • ライブラリ名.PPU

.Oの方が実体コードを収めたオブジェクトファイルで、PPUの方がライブラリの各種情報を収めたファイルのようです。Cであれば、.H なるヘッダファイルにライブラリ内のプロトタイプなど定義されとりますが、内容テキストファイルで、人間が記述するのが普通です。 しかし、PPUの方はバイナリファイルで、ライブラリソースをコンパイルしたときにコンパイラが吐き出してくれるものです。ダンプするとこんな感じ。dumpPPU
ライブラリの中身を確認しようとするとヘッダではなく、ソースそのものを見ることになるかもです。ちょっとCとは違うね。でもま、その辺をカッコよくするツールも控えておるみたい。

ライブラリ(unit)記述ファイル

ライブラリ(unit)の記述はざっくり書くと以下のようなスタイルです。

    1. unit ユニット名
    2. interface
      • 外部から参照できる関数、手続き等を列挙
    3. implementation
      • 関数、手続き等の実体

今回、サンプルとして作成したMyunit0.pas が以下に。「つまらない計算」をする関数1個だけ定義しとります。myUnit

上記をコンパイルしたところが以下に。ソースファイルのヘッダそのものが通常のプログラムと異なる unit から始まっているので分割コンパイルの片割れであることは一目瞭然。何もオプションスイッチなどつけず、フツーにコンパイルしているだけですが、この時点ではリンカは呼び出されず、.oと.ppuが自動生成されます。compileMyUnit0

自前ライブラリを呼びだして使ってみる

自前のライブラリ(unit)の、.o と .ppu は、その在処をfpc.cfgファイル内にライブラリパスとして記述しておいてもよいみたいです。しかし、本体プログラムソースと同じディレクトリに配置しておけば、何も指定せずとも見つけてくれるみたい、お楽。

既に前回、外部ライブラリを参照ということで uses してますが、自前の場合も書式は一緒。こんな感じ。testMyUnit0

これをコンパイルして走らせると以下の如し。compile_Go_TestMyUnit0

ちゃんと分割コンパイルのされた関数が呼び出されて実行されているみたいです。よかった。Turbo Pascalどおりよな。

ソフトな忘却力(62) FreeDOS、Free Pascal、Unitどもの在処 へ戻る

ソフトな忘却力(64) FreeDOS、Free Pascal、inline ASMの使用 へ進む