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ファイルのみで実行できるので、後腐れがなくていい。