更新日: 2011 年 11 月 15 日
新しくなった機能について
説明
KT.X の添付ドキュメントです。
KTNEW.DOC
────────────────────────────────────
WHAT’S NEW?
────────────────────────────────────
━< 今回の kt は… >━━━━━━━━━━━━━━━━━━━━━━━━━
ほとんどすべてを一から作り直しました。
・式評価エンジン(試作版)を搭載
・PIC 展開ルーチンも改良(工事中)
・各パーツをライブラリ化
・単独コマンドも簡単に作れる
・HUPAIR 準拠(かもしれない)
━< 式評価エンジン(試作版)を搭載 >━━━━━━━━━━━━━━━━━
今回の kt は式評価エンジン(試作版)を搭載しており、コマンド calc およ
び print で、BASIC 並みかそれ以上の式評価を行うことが可能です。式の文法
は、C の数値を扱う演算子と BASIC の文字列操作を合体したようなものです。
数学関数も多数備えています。演算子が BASIC と違うところが紛らわしいとい
う欠点がありますが、C から int をなくして代わりに文字列操作を強化したと
思えばわかりやすいかもしれません。環境変数を変数として使えるのも特徴の 1
つです。
当然のことですが、OPT.1+OPT.2 の標準電卓よりも圧倒的に強力です。
┌────────────────────────────
│> kt print 1/7
│0.14285714285714
│> kt print 1+2*3
│7
│> kt print (1+2)*(3+4)
│21
│> kt print 5&12
│4
│> kt print 5&&12
│1
│> kt print 5==12
│0
変数も使えます。
┌────────────────────────────
│> kt print x=3
│3
│> kt print x*x
│9
│> kt print exp(x)
│20.085536923188
数学関数もあります。
┌────────────────────────────
│> kt print sqr(2)
│1.4142135623731
│> kt print atan(1)*4
│3.1415926535898
C の条件演算子(〜?〜:〜)も入れてみました。
┌────────────────────────────
│> kt print 'x>10 ? "high" : "low"
│low
文字列操作もできるので何かと便利です。
┌────────────────────────────
│> kt print x=1000
│1000
│> kt print 'right$("0000000"+hex$(x),8)
│000003E8
│> kt print 'instr("abcbcbabc","ba")
│6
BASIC の文字列操作関数は、古きよき時代(?)のものも幾つか入れてみまし
た。
┌────────────────────────────
│> kt print 'ascchr$("満開")
│969E8A4A
│> kt print 'hexchr$("969E8A4A")
│満開
こんなこともできます
┌────────────────────────────
│> kt print '"*"*10
│**********
ファイル名を操作するための専用の関数は今後追加したいと思いますが、とり
あえず今でもこんなことができます。
┌────────────────────────────
│> kt print 'name="iij-ppp0.93.tar.gz"
│iij-ppp0.93.tar.gz
│> kt print "ext=mid$(name,strrchr(name,'.')+1,99)
│.gz
まだいろいろと追加したい関数があります。やはり using は必須かと。要望
も反映できるかもしれません。
べき乗の優先順位がちょっと変ですね。本来は符号よりも高くてプレインクリ
メント・プレデクリメントよりも低い位置に入るべきでした。次回の更新時に修
正します。
引数を省略できる関数も作れるようにしたいな。
━< コマンドラインの記述において注意すべき点 >━━━━━━━━━━━━
上の幾つかの例で、式の手前にクォートが付いているのが気になった人がいる
と思います。コマンドラインは BASIC のテキストのように自由に文字を書くこ
とができないため、式の記述方法にも制約があるのです。
幾つかの演算子は COMMAND.X が勝手に処理してしまうので注意が必要です。
具体的には、「<」「>」「|」を含む演算子は工夫しないと記述できません。特
に「>」は、うっかり記述すると変な名前のファイルを作ってしまうことになる
ので注意して下さい。
┌────────────────────────────
│> kt print 2<5
│入力が見つかりません
│> kt print 2>5
("5" というファイルに "2" が書き込まれる)
│> kt print 2|5
│コマンドまたはファイル名が違います
この現象を避けるためには、式全体を '〜' で囲います。なお、kt ではクォー
トが閉じていなくても構いません。
┌────────────────────────────
│> kt print '2<5
│1
│> kt print '2>5
│0
│> kt print '2|5
│7
文字列は "〜" で囲みますが、これを直接記述すると、HUPAIR 解釈のために
評価が行われる前にダブルクォートが消えてしまいます。
┌────────────────────────────
│> kt print asc("A")
│ktprint: 未定義の変数です
│asc(A)
│ ^
これも '〜' で回避できます。
┌────────────────────────────
│> kt print 'asc("A")
│65
文字を文字コードとして認識させるときは '〜' で囲って記述しますが、これ
も "〜" と同様に消えてしまうので注意が必要です。
┌────────────────────────────
│> kt print 'a'
│ktprint: 未定義の変数です
│a
│^
これは先ほどとは逆に "〜" で囲めば回避できます。
┌────────────────────────────
│> kt print "'a'
│97
━< PIC 展開ルーチンも改良(工事中)>━━━━━━━━━━━━━━━━
展開エンジンを洗い直しました(見た目はほとんど変わっていませんが)。
インタフェイスは一から作り直してあります。まだ工事中です。
メモリ不足でワイプロードが使えないときは、テキスト画面をバッファにして
無理矢理ワイプロードするようになりました。
現在、kt pic に指定できるスイッチは以下の通りです。
┌──────────────────────────────────┐
│ -c 表示前に画面をクリアする(表示範囲の外側もクリアする) │
│ -f ワイプ表示ができなければ普通に表示する │
│ (クロマキー合成は普通に表示できないのでエラーになる) │
│ -k ファイルを1つ表示する度にキー入力を待つ │
│ -lc 画面の中央に表示する │
│ -lX,Y 指定座標に表示する │
│ -m コメントメッセージを表示しない │
│ -n 表示前に画面モードやパレットを一切初期化しない │
│ -p ファイル名を表示する │
│ -r ピクセル比1:1で表示する │
│ -sN ワイプ表示の速度を指定する │
│ -t[f] 裏画面を確保できなければテキストVRAMを裏画面として使う│
│ fはテキストVRAMが使用中かどうかに関わらず強制的に使う │
│ -w ???.wl ワイプ表示を行う │
│ 裏画面にPICファイルを展開してワイプ表示する │
│ -y[R,G,B] パレットR,G,Bでクロマキー合成を行う │
│ PICファイルを展開してパレットPでない部分だけ表示する │
│ R,G,Bを省略したときは0,0,0でクロマキー合成を行う │
└──────────────────────────────────┘
━< 各パーツをライブラリ化 >━━━━━━━━━━━━━━━━━━━━━
以前の kt はすべてのパーツを .include で連結するという壮絶な構造をして
いましたが、結局ライブラリに落ち着きました。このライブラリは他のツールに
も使い回せるかもしれません。と言っても、きちんとしたマニュアルは書いてい
ませんが…。各パーツについて、バグを見つけたら報告するよーに。
━< 単独コマンドも簡単に作れる >━━━━━━━━━━━━━━━━━━━
以前の kt は構造上コマンドを分割できませんでしたが、今回は特定のコマン
ドに注目して専用の実行ファイルを作ることができます。例えば、kt print を
kp.x という実行ファイルにすれば、
┌────────────────────────────
│> kt print 1+2*3
を、
┌────────────────────────────
│> kp 1+2*3
と書けるようになります(エイリアスで展開しても構いませんが…)。
単独コマンドの作り方は Makefile に例があるのでそれを参照して下さい。
━< HUPAIR 準拠(かもしれない)>━━━━━━━━━━━━━━━━━━━
HUPAIR というのは、シェルとシェルから起動される実行ファイルについてコ
マンドラインの長さが 255 バイトまでという制約を取り払うための取り決めで
す。255 バイトを超えるコマンドラインを受け取ることができる実行ファイルは、
実行ファイル中に識別子を埋め込んでおくことで HUPAIR 準拠のシェル(FISH
など)から 255 バイトを超えるコマンドラインを受け取ることができます。な
お、標準の COMMAND.X は HUPAIR 準拠ではありません。
作者の環境が COMMAND.X なのであまり自信がありませんが、一応、HUPAIR に
準拠したつもりです。つまり、HUPAIR 準拠のシェルから kt を起動するときは
255 バイトを超えるコマンドラインを受け取ることができて、kt が HUPAIR 準
拠の実行ファイルを起動するときは 255 バイトを超えるコマンドラインを渡す
ことができる「はず」です。
(EOF)