Lispと一緒(37) uLisp用、Teraterm Proマクロでらくちん?

Joseph Halfmoon

uLisp公式」ではuLispをビルドするのに使ったArduino IDEのシリアル・モニタを開発環境に使うことを推奨しているみたいです。uLispに欠けている行編集機能を補える上に何となれば処理系の再生成も可能。しかし当方Teraterm Proで作業中。lispのソースを編集、アップロードするのに便利なので。

※Lispと一緒 投稿順 index はこちら

※実機確認は Raspberry Pi Pico2で行ってます。

※使用させていただいとります uLisp のバージョンは 4.6b (Arm用)です。

uLispに欠けている行編集機能とシリアル・モニタ

uLispのREPLを仮想シリアル端末から操作していて不便に感じるのは、REPLに行編集機能が欠けていることです。「おっと1文字打ち間違えたぜ」と思ってBSキーなどつい触ってしまうと、BSという未知のキャラクタのためにエラーが発生。最初から打ち直しっと。

その点、Arduino IDEのシリアル・モニタは1行ごとに編集してからuLisp側へ送信できるので、そのような不便はありません。ただしシリアル・モニタを介してuLispのソースをアップロードしたり、結果LOGを残したりという場合には「手動」コピペを駆使するしかありませぬ。またシンプルなシリアル・モニタなのでオートパイロット的なことはできないと思います。

Tera Term ProにuLisp用のマクロを一枚かぶせてみた

Lisp素人老人は uLisp の「開発環境」としては伝統のTera Term Proを使わせていただいております。マイコン開発でシリアルターミナルを使う場合よく使われているのではないかと思います。老人も長年お世話になっております。TeratermPro

Tera Term自体は、ネットワーク経由でSSH接続するときのターミナルソフト的な使われ方が現在の主力かとも思いますが、元々はシリアル通信用でなかったかと思います。そのためオートパイロットとかファイルのアップロード、ダウンロード、ログの記録など各種機能が充実してます。

そこでuLisp用にTera Termマクロを一枚「被せて」みましたぞ。まずメニュー用のマクロ(menu.ttl)が以下に。

; menu
editor = 'notepad'
strdim msg 6
msg[0] = 'Exit Menu'
msg[1] = 'REPL(Line Editor)'
msg[2] = 'Edit uLisp source'
msg[3] = 'Upload uLisp source'
msg[4] = 'Creat Log and start'
msg[5] = 'Close Log'
menu=1
while menu
  listbox 'Select Command' 'Menu' msg
  if result = 0 then
    menu = 0
    goto nxt
  elseif result = 1 then
    include 'repl_loop.ttl'
    goto nxt
  elseif result = 2 then
    filenamebox 'File to edit' 0
    if result<>0 then
      editorcmd = ''
      strconcat editorcmd editor
      strconcat editorcmd ' '
      strconcat editorcmd inputstr
      exec editorcmd 'show' 0
    endif
    goto nxt
  elseif result = 3 then
    filenamebox 'File to upload' 0
    if result<>0 then
      sendfile inputstr 0
      messagebox inputstr 'Upload' 0
    endif
    goto nxt
  elseif result = 4 then
    gettime timestr "%Y%m%d-%H%M%S"
    sprintf2 logfilename 'LOG_%s.log' timestr
    messagebox logfilename 'Create LOG file' 0
    logopen logfilename 0 0
    goto nxt
  elseif result = 5 then
    messagebox 'Close LOG file' 0
    logclose
    goto nxt
  endif
:nxt
endwhile
exit

なお、老人は冒頭のeditor変数のところをこれまた伝統的で30年以上もお世話になりっている秀丸エディタに向けてあるのですが、上記では notepad にしてみましたぜ。

そして上記のメニュー用マクロから呼び出す、REPL用の行編集用マクロ(repl_loop.ttl)が以下に。

; repl loop with line editor
repl=1
while repl
  inputbox 'ZZ for Exit> ' 'Line Editor for uLisp REPL'
  strcompare inputstr 'ZZ'
  if result = 0 then
    repl = 0
  else
    send inputstr
  endif
endwhile
exit
マクロの使用
    • マクロの設置

上記の menu.ttl と repl_loop.ttl の2つを同じフォルダ(読み書きできるフォルダが良いです)においておくと、以降の操作はそのフォルダをカレントにして起こるので便利じゃないかと思います。

    • MENUマクロの起動

以下のように コントロール >> マクロ からマクロの指定用ウインドウが開くのでそれを使って menu.ttl を起動します。初回は設置したフォルダの在処を認識していないので、多分Tera Termのインストールディレクトリを向いてますが、一度起動すれば覚えるのでお楽。startMacro

    • メニュー画面

マクロが表示するメニュー画面が以下に。menu

上記のようなウインドウが現れるので、該当項目をクリックして青地に変えてから「はい」キーを押すと該当機能が発動します。なお上記のExit Menuで「はい」を押すとメニューを終了し、マクロから抜けます。

    • 1行編集可能なREPL入力

REPL(Line Editor)を選ぶと、以下のような1行入力用のウインドウが現れ、その入力行の中で uLispへ送信する内容を行編集(BSキーや左右矢印キーなど利用可)できます。OKを押すとuLispへ送信され、結果は通常どおり表示されます。Repl

    • 外部エディタの起動機能

Edit uLisp sourceを選ぶとファイル選択画面(メニューと同じフォルダがデフォルト)が表示され、選択したファイルを対象に外部エディタを起動できます。老人は秀丸エディタを愛用。こんな感じ。editor

お好みのエディタを使って uLisp のソースを編集できます。お好み設定でお楽。

    • uLispソースのアップロード機能

Upload uLisp source を選ぶと以下のようなファイル選択画面が表示され、選択したファイルをuLispにアップロードすることができます。upload

 

    • 実行ログの取得

Create Log and startを選択すると、日時を使ったキメウチのファイル名でLOGが生成されます。CreateLOG

それ以降の通信が全てロクファイルに落ちて記録されるのでお楽。

実際に記録されたログはこんな感じ。

(read-trng)
(-1279700978 -1945128058 -855103044 1855706206 251828877 -357254905)

22816> (read-trng)
(2119829074 -119850903 460671810 -287110249 -320690878 389110549)

22816>
    • ログファイルのクローズ

Close Log を選択するとLOGファイルは閉じられます。

マクロで多少はお楽になった?

Lispと一緒(36) ラズパイPico2でもuLisp、TRNG、真性乱数の生成 へ戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です