ソフトな忘却力(61) FreeDOS、Free Pascal、コマンドラインから整数入力

Joseph Halfmoon

FreeDOS上にインストールしたFreePascalコンパイラ、約40年ぶりのPascalは忘却の彼方。とりあえずコマンドラインからパラメータを取り込むところを書こうとして止まりました。どうしたら良かったんだっけ。FreePascalはTurbo Pascalに可能な限り合わせてあると。確かにそのつもりでOK。

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

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

    •  Windows 11 PC (i5-1235U)
    •  Ubuntu 24.04 LTS on WSL2
    •  QEMU 8.2.2
    •  FreeDOS 1.3
ParamCountとParamStrは業界標準?

大昔のPascalは入出力関係は規定が無く?各処理系でよきに計らえ的な立ち位置であったような、ホントか? コマンドライン引数の処理などはそういう範疇でないかと。しかし、一時とは言えTurbo Pascalが一世を風靡したおかげで現状「使える」Pascal 処理系はTurbo Pascal方式がそのまま使えるものが多いみたいです。Turbo Pascal、事実上の業界標準ってやつだな。

Turbo Pascalに「寄せている」ことを公言?しているFree Pascalは勿論、Gnu様のPascalコンパイラもそうみたい。よって以下が使えますな。

    • ParamCount、コマンドライン引数の数を返す「関数」
    • ParamStr()、引数の番号を与えると引数の文字列を返す「関数」

なおFreePascalのドキュメントを調べていると Linux式の getopt などもサポートされているみたいなので、そっち系が良い場合には使えるみたい。知らんけど。

さて、上記で文字列を貰った後に数字に変えるにはどしたらよいの?

    • Val(文字列変数、整数戻り変数、エラー戻り変数)

上記が使えるみたい。これは昔のPascalからあったものなのかな?まあ、Turbo Pascalでは使えるみたいなので、これでやってみます。

テスト用のプログラムはこんな感じ。

(* test program for ParamCount, ParamStr *)
program parami;
var
  argc : integer;
  iv   : integer;
  ecode: integer;
begin
  for argc:=1 to ParamCount do
    begin
      Val(ParamStr(argc), iv, ecode);
      writeln('Param(',argc,')=',iv,' ecode=', ecode)
    end
end.
コンパイルして実行

コンパイルというかビルドはこんな感じ。赤枠内がソースね。paramiCompile

実行したところが以下に。paramiRun

引数は3つ。 123と456はちゃんと数字に変換できたみたい。でもabcは数字に変換できなくて エラーコードが返されているみたい。

予定通りね。

ソフトな忘却力(60) FreeDOS、FreePASCAL、GDBでデバッグ へ戻る

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