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

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

1. 〜 4.

本の通りにやればできました。putfont8はビットシフトを使ってもう少し簡潔にできます。

5. フォントを増やしたい

hankaku.txtから

char hankaku[4096] = {
    (中略)
};

のようなCのファイルをつくればよいので、変換用のプログラムを書きました。Makefileに変換プログラムのコンパイル・テキストからの変換を追記して、 変換してできたファイルをbootpack.c達と一緒にコンパイルするようにしました。

6. 文字列を書きたい

はい。

7. 変数の値の表示

sprintf関数を使いたいところですが、リンクの都合?で使えなかったので自分で書くことにしました。stdarg.hva_listなどは使用できたので、 これを使って可変長引数から値を受け取って処理していく、という方針で良さそうです。

#include <stdarg.h>

int my_sprintf(char *s, const char *fmt, ...){
    va_list ap;
    int cnt = 0;  //出力した文字数
    va_start(ap, fmt);

    /* 中略
        ...にあたる部分の引数はva_arg(ap, 型)で順に取り出せる
        fmt(フォーマット文字列)を読み取り、それに応じてva_argしつつsに書き込んでいけば良い
    */

    s[cnt] = '\0';
    cnt++;
    va_end(ap);
    return cnt;
}

8.〜9.

本の通りに進めました。