LoginSignup
0
0

【MSX0】TREE.PAS【Turbo Pascal】

Last updated at Posted at 2023-12-22

はじめに

『MSX0 Stack』付属の IoT BASIC サンプルを『Turbo Pascal』へ移植してみます。

TREE.BAS

◆ノードリスト表示

項目 説明
概要 ノードを再帰的にスキャンしてリスト表示します。
ファイル名 TREE.BAS
対応デバイス
コメント CALL IOTFIND を利用すると、ノードが持つアイテムの個数や名前のリストを取得できます。
リストの内容が動的に変化するものに対してはアイテムの個数を取得したときにリストの更新が行われます。

See also:

MSX0 Stack での挙動

TREE.BAS をロードして、

image.png

実行してみました。

image.png

IoT ノードリストが表示されます。

プログラムは〔Ctrl〕+〔Stop〕(リモートコントロールパネルからは〔Ctrl〕+〔F12〕) で中断できます。

Turbo Pascal へ移植

別途、MDL-LIB と SYSUTILS.LIBIOT.LIB が必要です。

TREE.PAS
program TREE;
{$A-}
type
  LibStr = string[255];
{$I SYSUTILS.LIB}
{$I IOT.LIB}
var
  Flg: Boolean;
  procedure GetNodes(Node: LibStr);
  var
    List, Last, p: PItem;
    CC: Integer;
  begin
    if Flg then
      Exit;
    Writeln(Node);
    List := nil;
    CC := IotFindCount(Node);
    IoTFind(Node, List, Last);
    p := List;
    while (p <> nil) and (not Flg) do
    begin
      GetNodes(Node + '/' + p^.Data);
      p := p^.Next;
      Flg := Flg or KeyPressed;
    end;
    ClearListItem(List);
  end;
begin
  Flg := False;
  GetNodes('host');
  GetNodes('device');
  GetNodes('msx');
  GetNodes('conf');
end.

実行してみました。

image.png

IoT ノードリストが表示されます。

任意のキーで中断できます。

解説

再帰

こういうのは再帰で書くのが簡単です。CP/M-80 版『Turbo Pascal』で再帰プログラムを書く時には {$A-} コンパイル指令を指定します。

See also:

IotFindCount()

最初、BASIC プログラムの 120 行目が何を意味しているか解りませんでした。ノードのアイテム数を変数 CC に入れているのですが、この CC という変数は他で参照されていないからです。

120 _IOTFIND(N$,CC)

ドキュメントを読んで意味が解りました。

リストの内容が動的に変化するものに対してはアイテムの個数を取得したときにリストの更新が行われます。

リストが可変のノードに対しては個数を空読みしてリストを更新する必要があるのですね。

おわりに

今回の移植に関して難しい所は特にありませんでした。

記事に関連しますが、以前 MSX-DOS で Wi-Fi の AP リストを登録するトランジェントコマンド M0SETAP を作った事があります。

image.png

同様に、I2C デバイスを検索するトランジェントコマンド M0I2CSCN も作った事があります。

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0