[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-devel:11680] Re: kernel-image-2.2.14-compact(was Re:jfbterm)



佐野@浜松です。

 at Fri, 18 Feb 2000 21:13:35 +0900,
  Hatta Shuzo <hattas@xxxxxxxxxxxxxxxxxxxxxx> さん writes:

> はったです。Moin,moin.

作業、御苦労さまです。

> BTS に投げた直後に #debian-boot で tausq に patch を当ててくれませんか、
> とお願いしたんですが、そのときは compact じゃなくなるからイヤかも、と
> 返事されました。で、結構立ったわけですが、今日
> kernel-image-2.2.14-compact が更新されてたんで、changelog 見たら
> 
> >   * FBDev support (closes: #56617)
> 
> とありました。まだテストしてないんでこちらの期待どおり動くのかどうかわ
> かりませんが、ちゃんと動いてくれるなら、Official なパッケージで日本語
> インストーラができるようになりましたね! (vanilla な image は vga16fb
> は未サポートのままか?)今、これ使って b-f make中です。

  ar -p kernel-image-2.2.14-compact_2.2.14-4.deb data.tar.gz|\ 
  tar -O -xzf - ./boot/config-2.2.14-compact|less

で眺めてみると

CONFIG_VGA_CONSOLE=y
CONFIG_VIDEO_SELECT=y
# CONFIG_MDA_CONSOLE is not set
CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_PM2 is not set
CONFIG_FB_VESA=y
CONFIG_FB_VGA16=y
CONFIG_VIDEO_SELECT=y
# CONFIG_FB_MATROX is not set
# CONFIG_FB_ATY is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FBCON_ADVANCED is not set
CONFIG_FBCON_CFB8=y
CONFIG_FBCON_CFB16=y
CONFIG_FBCON_CFB24=y
CONFIG_FBCON_CFB32=y
CONFIG_FBCON_VGA_PLANES=y
# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
# CONFIG_FBCON_FONTS is not set
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y

なので、八田さんのパッチを使ったのではなく、単純に VGA16fb を
有効にした、ということなんじゃないかな。

まあいずれにしろ、jfbterm が動くようにはなったわけで、
その意味ではメデタイ (Randorph に感謝 !) ですね。

> そう言えば、tausq も「ビール好きなペンギンロゴを赤渦巻きにしたら
> カッコええかね、しかもフルスクリーンで」、などと #debian-boot で
>  Adam や joeyh たちと話してたみたいなんで、そのあたりのカラミで
> 入れてくれたのかもしれません。

それはそれで面白そうですよね。 include/linux/linux_logo.h ですか。

# フルスクリーンは難しそうな気がするけど。

また後日八田さん作の b-f-ja をテストさせてもらいますので、
よろしくお願いします。

あと主要な残件としては、やっぱり文字化け対策でしょうか。
ところどころ文字列の長さが Box のフレームに合っていなくて
改行するところで化けてるみたいでした。

ほんとうは dbootstrap/boxes.c のいろいろな関数の中で使われている

    int newtCenteredWindow(int width, int height, const char * title);
    int newtOpenWindow(int left, int top, int width, int height, 
                       const char * title);

や

    newtComponent newtTextbox(int left, int top, int width, int height, int flag

などの "int width" を与えられた文字列の長さに合わせて調整できると
いいんでしょうね。たしか以前他の言語 (ヨーロッパ系) への翻訳者からも、
言語によって単語 (文字列) の長さが違うので、 truncate されないように
苦労して言葉を選んでるという話が出ていたような (-boot)。

 newtTexBot の flag には

NEWT_FLAG_WRAP
    All  text  in  the  textbox  should  be wrapped to fit the width of the
    textbox. If this flag is not specified, each newline delimited line in
    the text is trunctated if it is too long to fit.
   
    When  newt  wraps  text, it tries not to break lines on spaces or tabs.
    Literal newline characters are respected, and may be used to force line
    breaks.

というのがありますが、これは newt のソースでは textbox.c の

static void doReflow(const char * text, char ** resultPtr, int width, 
                     int * badness, int * heightPtr) {

に関係しているみたいですね。

でも locales をインストールしてあるシステムならこのへんを wide char 対応に
すると恩恵がありそうですが、現状の boot-floppies では gettext も使えない
 (pointerize で代用している) 状態なので、ここをいじってもあまり意味が無い
でしょうね。やっぱり地道に .po を合わせていくしかないだろうな。

 boxes.c の中の関数と、それぞれで指定している文字列の幅を
書いておくと .po 修正の参考になるかな ?

int pleaseWaitBox(const char *text) {
        t1 = newtTextbox (1, 1, 59, 4, NEWT_FLAG_WRAP);
	(59 bytes)

int problemBox(const char *text, const char *title) {
    t1 = newtTextbox(1, 1, 60, 10, NEWT_FLAG_WRAP);
    (60 bytes)

wideMessageBox (const char *text, const char *title)
  newtGetScreenSize (&cols, &rows);
   text_width = strlen (title);
  text_width  += 5;
  win_width  = (text_width  > cols) ? cols : text_width;
  t1 = newtTextbox (1, 0, win_width - 4, win_height - 4, NEWT_FLAG_WRAP | NEWT_F
LAG_SCROLL);
  (cols or strlen(title)+5 bytes)

int perrorBox(const char *text) {
    problemBox(buf,_("Error"));
    (60 bytes)

int twoButtonBox(const char *text, const char *title, const char *button1, const char* button2) {
    t1 = newtTextbox (1, 1, 60, 10, NEWT_FLAG_WRAP);
    (60bytes)

int yesNoBox(const char *text, const char *title) {
    return twoButtonBox(text, title, _("Yes"), _("No"));
    (60bytes)
    
char *inputBox(const char *text, const char *title, const char *proto) { 
    t1 = newtTextbox (1, 1, 60, 10, NEWT_FLAG_WRAP);
    (60bytes)

int menuBox (const char* text, const char* title,
         struct d_choices* choices, int nchoices, int cancel) {
  for (ix=0;ix<nchoices;ix++) {
      if (choices[ix].tag)
        tag=strlen(choices[ix].tag);
      else
        tag=0;
      if(tag>mtag)
        mtag=tag;
      if (choices[ix].string)
        string=strlen(choices[ix].string);
      else
        string=0;
      if (tag) {
        if (string > mstring2)
          mstring2=string;
        if (lwidth < mstring2+mtag+3)
          lwidth=mstring2+mtag+3;
      } else {
        if (string > mstring1)
          mstring1=string;
        if (lwidth < mstring1+1)
          lwidth=mstring1+1;
      }
  }
  lwidth+=7;
  width=((lwidth>_MIN_WIDTH) ? 
                  ((lwidth<_MAX_WIDTH) ? lwidth : _MAX_WIDTH ) : 
                  _MIN_WIDTH);

  textbox = newtTextbox (1, 1, width, 5, NEWT_FLAG_WRAP);
  (ややこしくてよくわからん)

scaleBox(const char *text, const char *title, long long value, int action)
      tx= newtTextbox(1, 1, 49, 2, NEWT_FLAG_WRAP);
      (49 bytes)

int checkBox(const char* text, const char* title, int height, int width,
             char** choices, char** values, int nchoices)
  tbox=newtTextbox(1, 0, width-2, 10, NEWT_FLAG_WRAP);
  (width-2 bytes)

とりあえず max 60bytes, 最低 49 bytes なんで、2 byte 文字なら
およそ 24文字を目安に改行するといいのかもしれません。

--
     # (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
    <kgh12351@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)