
「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を使わせていただいております。マイコン開発でシリアルターミナルを使う場合よく使われているのではないかと思います。老人も長年お世話になっております。
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のインストールディレクトリを向いてますが、一度起動すれば覚えるのでお楽。
-
- メニュー画面
上記のようなウインドウが現れるので、該当項目をクリックして青地に変えてから「はい」キーを押すと該当機能が発動します。なお上記のExit Menuで「はい」を押すとメニューを終了し、マクロから抜けます。
-
- 1行編集可能なREPL入力
REPL(Line Editor)を選ぶと、以下のような1行入力用のウインドウが現れ、その入力行の中で uLispへ送信する内容を行編集(BSキーや左右矢印キーなど利用可)できます。OKを押すとuLispへ送信され、結果は通常どおり表示されます。
-
- 外部エディタの起動機能
Edit uLisp sourceを選ぶとファイル選択画面(メニューと同じフォルダがデフォルト)が表示され、選択したファイルを対象に外部エディタを起動できます。老人は秀丸エディタを愛用。こんな感じ。
お好みのエディタを使って uLisp のソースを編集できます。お好み設定でお楽。
-
- uLispソースのアップロード機能
Upload uLisp source を選ぶと以下のようなファイル選択画面が表示され、選択したファイルをuLispにアップロードすることができます。
-
- 実行ログの取得
Create Log and startを選択すると、日時を使ったキメウチのファイル名でLOGが生成されます。
それ以降の通信が全てロクファイルに落ちて記録されるのでお楽。
実際に記録されたログはこんな感じ。
(read-trng) (-1279700978 -1945128058 -855103044 1855706206 251828877 -357254905) 22816> (read-trng) (2119829074 -119850903 460671810 -287110249 -320690878 389110549) 22816>
-
- ログファイルのクローズ
Close Log を選択するとLOGファイルは閉じられます。
マクロで多少はお楽になった?
