[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()は不要になるのでなくせます。
ほかにも数バイト単位の些細なことはありますが、そんなのは重箱の隅をつつ
くみたいで面白くないので、これでおしまいです。