「ぐいぐい01」のコマンドライン
(0)
- cpyをnaskで書いてみたら一体どのくらい小さくなるのか興味があって、さっそくやってみたくなったけど、現在のコマンドラインAPIはjunk中のjnukで本仕様ではないことが確実だから、そんな段階でアセンブラ化するというのもばかばかしい。
- と考えているうちにいろいろ本仕様についてアイデアが浮かんだのでメモ。
(1)
- アイデアリスト:
- コマンドライン取得APIの中にサブパケットを入れる。
- サブパケット0:NOP
- サブパケット1:サブパケット終端
- サブパケット2:usage表示。コマンド名以降から、というかオプション説明だけでいい。このサブパケットがコマンドライン取得APIの最初に来るように期待されている。ラベル番号の定義にもなっている。これは複雑なフォーマットを取る。.textの中か、.dataの中の定数でなければいけない。
- 将来シェルがこの情報をタグに登録する場合、一度カラ実行してこのサブパケットが来た時点でポインタをとりexitさせればいい。.dataの範囲内であれば、ベースを引けばいいだけ。
- 理解できないラベルをいくつ許容するかどうかも指定(0でも無限(= !5)でもいい)。省略しうるタグかどうかも指定。
- サブパケット3:ラベル番号を指定してフラグ。これはコロンがなくてもいい。
- サブパケット4,5:ラベル番号を指定してfopenを実施。optとslotが後続。
- サブパケット6,7:ラベル番号を指定して整数値を取得。マイナスもOK。
- サブパケット8,9:ラベル番号を指定して文字列を取得。
- ラベル番号2はレガシーコマンドライン(しかしマッチしたものやシングルコロン部分は除外される)。ラベル番号2は、タグ無視のargv[]。ラベル番号3はミスマッチラベル群。ラベル番号16以降がユーザ定義。4はin:、5はout:。
- レガシーなコマンドラインの渡し方:
- シングルコロンを全く含まずに書く。そういうものついてもこのコマンドは使える。
- ダブルコロンはシングルコロンへエスケープ。トリプルコロンはダブルコロンにエスケープ。どちらもレガシーで扱える。
- echo abc::def -> "echo abc:def"
- calcはこれを使っていいのなら、サブパケット6でラベル番号3を使えば、もはや計算の必要がない。
- in:abc in:def in:ghi と書いてもいいし、in[0]:abc in[2]:ghi in[1]:def と書いてもいい。
こめんと欄