Pacal再入門:Unitを2つに分ける

 引数として与えられたファイル名の妥当性の検証の為のコードと、未実装のID3TAG解析の為のコードを分ける為に、Unitを分割した。呼び出される側のUnitと本体のProgramを毎回コンパイルしなければならないのは面倒臭いが、これは仕方がない。

program sim4;
uses myApp, id3tag;
var st : string;
begin
   if argchk(argc) then begin
      st := argv[1];
      if existchk(st) then begin
         main(st);
	 readfile(st);
      end;
   end;
end.
unit myApp;
interface
function argchk(c : integer) :boolean;
function existchk(s : string):boolean;
procedure main(st   : string);
implementation
uses
sysutils;
function argchk(c : integer) :boolean;
var
   result : boolean;
begin
   if c=2 then result := true else begin
      result:=false;
      if c<2 then writeln('Missing arg') else writeln('Too much args');
   end;
   argchk:=result;
end;
function existchk(s : string):boolean;
var
   result : boolean;
begin
   if FileExists(s) then
   begin
      result := true;
      writeln(s, ' is Exists.')
   end
   else begin
      result := false;
      writeln(s, ' is not Exists.')
   end;
   existchk := result;
end;   
procedure main(st   : string);
begin
   writeln('finded arg is', ' "', st, '"');
end;
end.
unit id3tag;
interface
procedure readfile(s : string);
implementation
procedure readfile(s : string);
begin
   writeln('dummy3');
end;
end.

 きちんと再コンパイルしたつもりだが、unit myApp中のprocedure readfileの呼び出しはprogram sim4で呼び出す事にして、myAppの方は//でコメントアウトしたのだが、ダブって呼び出された。原因は不明。

 コマンドラインで使うコンパイラオプションも良く判らないので、オプションなしで使っている。ソース中で使うべきデレクティブも無視。

 Free Pascal - Advanced open source Pascal compiler for Pascal and Object Pascal - Home Pageにドキュメント類は整備されているのだが、なかなか読む気になれない。本棚に紙のマニュアルも発見しているのだが、分厚過ぎて背表紙を見ただけで、持ち出したくなくなる。

  fpでCUIベースのIDEが起動するらしいのだが、FreePascalではなくLazarusuをインストールした為か、fp.exeは見当たらない。このインストールではC:\lazarus\fpc\3.0.4\bin\x86_64-win64\配下にバイナリーがある。あまり環境を汚したくないので、パスは通さずに、C:\lazarus\fpc\3.0.4\bin\x86_64-win64\fpc <ターゲットのソース>でコンパイルしている。また、ソースコードもdesktop/doc/fpc配下に置いている。最終的には生成される単一のexeファイルのみで実行できるので、後腐れがなくていい。