Ubuntu 18.04.1 LTSでやる 30日OS本 〜18日目〜

Ubuntu 18.04.1 LTSでやる 30日OS本、18日目です。 他の章へのリンクはここにあります。

1.〜2. カーソル点滅制御

はい

3. Enterキーに対応

ウィンドウサイズを決め打ちするのは気持ち悪いので、ここでも書き換えをしました。以下同様です。 make_window8を読んで枠の太さを調べるか、大きめの値を指定してはみ出した部分を数えるかすれば良いです。

4. スクロールにも対応

塗りつぶしなどの処理がウィンドウサイズのキリが悪い場合でも動くか一応確かめました(上のような書き換えの影響があるので)。 また、ここでは改行の処理をベタで書いていますが次の節でに関数として分離することになります。

5. memコマンド

コマンドラインのところの文字列比較がとても気持ち悪いですが、次の節でstrcmpを使うようになるのでひとまず見逃すか、ここからstrcmpを使うかしましょう。

6. clsコマンド

ここでstrcmpを使うようになるのですが、なんとsprintf同様使えないことが発覚しました。 仕方ないので自分で書きました。ただし、これは非常に簡単で

int strcmp(const char *s1, const char *s2){
    for(int i=0;;i++){
        if(s1[i] > s2[i]) return 1;
        if(s1[i] < s2[i]) return -1;
        if(s1[i] == 0 && s2[i] == 0) return 0;
    }
}

で良いはずです。

7. dirコマンド

ディスクイメージへの書き込みは、haribote.sysと同様に

mcopy [ファイル名] -i haribote.img ::

で行います。適当なファイルを書き込むコマンドを、Makefileharibote.imgのところに追加しておきましょう。