2007年11月26日月曜日

D言語で自作のプロンプトをつくりたい

 D言語でプロンプトを使い易くするためのツールを自作しています。なんでD言語かっていうと、それはなんとなくで。なんかD言語ってインディーズな雰囲気がして好きなのです。あと、プログラム歴は何気にVBが一番長いので、ガーベージコレクションがないと不安なのです。(freeとかmallocってなに?)
 フリーのコンパイラだと、gccとかbccとかありますが、gccはwindowsだと使いずらそうだし、bccはダウンロード時に登録が必要なのがあまり好きじゃない。

 コマンドプロンプトだと標準入力で手軽にツールを作成できるのもいいところです。だいたいプログラムを勉強すると始めにやるのは"Hello! world!!"だと思うのですが、普通にプログラムしてる人ってprintf(標準出力)なんてほとんど使わないのでは?

 最終的には migemoが利用できるプロンプトを自作したいな、なんて考えているのですが、地道にちまちまやっていこうと思っています。とりあえず第一歩として、プロンプトの骨格を以下にメモメモ。

import std.stdio;
import std.process;
import std.c.stdio;

void main(){

char c;
string com;
bool loop = true;

writef(">");

while(loop){

c = getc(stdin);

switch(c){
case 0x0a: // ret
if(com == "exit"){
// loop exit
loop = false;
} else {
// cmd execute
system(com);
}
com.length = 0;
writef(">");
break;

default:
com ~= c;
}
}
}

 D言語だとデフォルトがutf8で、Shift-JISが使えないので、標準ライブラリの readln とかが使えません。んで色々試行錯誤した結果上記な感じになりました。getcの仕組みとか、あんまりよく調べてはないけど、 たぶんそんなに的外れでもないと思ってます。switch文の中をいじれば、Ctrl+P,Nで履歴表示や、TABでのキーワード補完とかも作れそう。
 (でもホントは GNU readline が使いたい~。けどwindowsでの使い方がわからない~)

0 件のコメント: