以前、GAME言語のあれこれについての中で、GAME80ICなどでZ80-MBC2とのscreenコマンドでのシリアル接続中にソーステキストのコピーペースト転送ができない事に触れていたが、単に使ってる環境に依存した所謂「おまかん」なのだが、回避したければ、素直にwindowsで使うか 若しくは linuxでもwine上でteratermを使えば済む話ではある。だが、我が家に於いては普段使いにできるwindows機など無い。棚の奥を探せばwin7の入った古PCが有るとは思うがボードマイコンとの接続の為だけに引っ張り出してきたいとまでは思わない。そこで ふと考えるにteratermにあってscreenやcu,minicomにないものはと、teratermには、テキスト転送中に行単位、文字単位でミリセカンドのディレイを挟む設定がある。対してlinux系のシリアル接続コマンドにそういった類のモノを知らない(単に自分が知らないだけの可能性もある) 。そこで、duckduckgo検索のサービスである「Duck.AI」に聞いてみた。自分の思いついた革新的なアイデアは大概は先人が既に思いついてる当たり前過ぎるモノというのはいつもの事であっさりと解決策を教えてくれた。
以下シェルスクリプト 本文---------------------------------------------------------------
#!/bin/bash
# screen -fa /dev/ttyUSB0 57600
# serial_transfer_clipboard
WAIT_TIME=0.1 # 通常の文字のウェイト時間(秒)
LONG_WAIT_TIME=0.5 # 改行コードのウェイト時間(秒)
# クリップボードの内容を取得し、大文字に変換
xclip -o -selection clipboard | tr '[:lower:]' '[:upper:]' | xclip -i -selection clipboard
# クリップボードの内容を取得し、改行コードをLFだけにする
#xclip -o -selection clipboard | tr -d '\r' | xclip -i -selection clipboard
text=$(xclip -o -selection clipboard)
# 各文字をシリアルポートに送信
for (( i=0; i<${#text}; i++ )); do
char="${text:i:1}" # 1文字を取得
echo -n "$char"
# 文字が改行の場合は長いウェイトを、それ以外は短いウェイトを挿入
if [[ "$char" == $'\n' ]]; then
sleep $LONG_WAIT_TIME # 改行の場合のウェイト
else
sleep $WAIT_TIME # 通常の文字の場合のウェイト
fi
done
シェルスクリプト 本文 終わり ---------------------------------------------------------
上記のテキストを、stc.shとか適当に名前をつけて保存して、実行権限つけて。パスの通った所に置くか作業中のフォルダにおいて、 Z80-MBC2のCPM上でGAME80ICを起動して、screenコマンドでの接続前提で[CTRL-A]の次にコロンをいれて
:exec !! ./stc.sh
と入力すると、GAME80ICに向けてクリップボード内のテキストが転送される。Xmodemでもファイル転送に比べると遅く感じるが古のカセットテープの読み込みに比べれば高速だと思う。
このやり方の利点は、xmodemなどの実装されてないボードマイコンでもスクリーンエディタのあるbasicなどが入っていれば、ソーステキストを転送できる。Z80-MBC2以外にSBC6809のBASICへの転送もできている。SBC6809はSDカードなどの外部とのデータのやり取りができないので、これを実現できるだけで効果は大きい。
コメント
コメントを投稿