[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 3010] from OSASK BOARD



このメールは、OSASK伝言板に書き込まれた内容です。
この書き込みに返事を書く場合は、下のURLから書き込みを行なって下さい。


http://www.imasy.or.jp/~mone/osask/index.cgi?REFER=3c4b8c68_e5f6

From: 川合秀実
Message-ID: 3c4b8c68_e5f6
Date: 2002/01/21 12:35
Subject: Re: OSASKアプリ作りました。

[OSASK 3006]へのレスです。

>ありがとうございます。というわけで,"calm2"を作りました。
>http://home.catv.ne.jp/ff/karin/osask/calm2.lzh

 おお、いいですねえ。

>ようにしました。その結果,2KBは超えてしまいました。

 まあしょうがないかなと思ったんですが、うーん、あとちょっとですからねえ
、やっぱり惜しくなってきました(笑)。ということでアドバイスです。そもそも
2KBというだけでも十分にコンパクトなのであまり気にしないで、まあ、別に直
さなくていいですから、単なる読み物として読んでください。

1.配列の初期値は、static変数で!

 94〜95行目には、

  char ss[12][4] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
            "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};

という記述がありますが、初期化についてはstatic変数か外部変数であると、効
率が良くなります。ということでstatic変数にしてあげましょう。具体的には、

  static char ss[12][4] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
            "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};

と"static"を頭に書き足すだけです。

 これと同様なことが、134行目にも言えます。

 たったこれだけで、おお、プログラムは少しコンパクトになります(笑)。

2.配列変数を活用しよう!

 172〜176行目を以下の1行に差し替えると、プログラムはすっきりして、かつ
コンパクトになります。

   lib_putstring_ASCII(0x0000, dow * 4, y_pos, textbox, col[dow], 0, s); 

ええとこの変更の場合は、148行目に

  static int col[7] = { 9, 0, 0, 0, 0, 0, 12 };

を入れてあげてください。

 ついでに、/* 曜日を表示 */の部分も、やりたければこんな風にできます。

  y_pos += 2;
  for (i = 0; i < 7; i++) {
    static char wday[7][4] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
    lib_putstring_ASCII(0x0000, x_pos + i * 4, y_pos, textbox, col[i], 0, wday[i]);
  }

 また月の表示部分も、配列ssの宣言をcalendar_m()の中に引越しさせて、

  lib_putstring_ASCII(0x0000, x_pos +  9, y_pos, textbox, 0, 0, ss[month]);

とやれます。こうなると、関数setmonth()は不要になるのでなくせます。

 ほかにも数バイト単位の些細なことはありますが、そんなのは重箱の隅をつつ
くみたいで面白くないので、これでおしまいです。