3: 2009-01-12 (月) 21:08:55 |
現: 2024-01-08 (月) 12:58:42 k-tan |
- | * ぐいぐい01に関するメモ-25 | + | TITLE:x |
| + | * ぐいぐい01に関するメモ-25 [#d736c69f] |
| -(by [[K]], 2009.01.12) | | -(by [[K]], 2009.01.12) |
| -メモのうち重要な部分をそのうちまとめてまともなページを作る | | -メモのうち重要な部分をそのうちまとめてまともなページを作る |
- | *** (37) GOで「ぐいぐい01」アプリを作る(3) | + | *** (37) GOで「ぐいぐい01」アプリを作る(3) [#i7a3cf03] |
| -[[GUIGUI01/memo24]]の続きです。仕様変更ももうそんなにはないと思うので、書いても問題はないかなと。 | | -[[GUIGUI01/memo24]]の続きです。仕様変更ももうそんなにはないと思うので、書いても問題はないかなと。 |
| ---- | | ---- |
| -ex0011では、0から100までの和をやりました。でも、これを1000までの和に変えようとしたら、そのたびにソースを変更してmakeしなおさなければいけません。これはかっこよくないです。そうじゃなくて、コマンドラインから指定したいですよね。ということで、このページはコマンドライン特集です。ちなみにこのページまでの知識だけで、calendarは作れます。つまりアイデア次第で、この程度のAPIだけでも、役立つものは作れるのです。ということでex0012.cを。 | | -ex0011では、0から100までの和をやりました。でも、これを1000までの和に変えようとしたら、そのたびにソースを変更してmakeしなおさなければいけません。これはかっこよくないです。そうじゃなくて、コマンドラインから指定したいですよね。ということで、このページはコマンドライン特集です。ちなみにこのページまでの知識だけで、calendarは作れます。つまりアイデア次第で、この程度のAPIだけでも、役立つものは作れるのです。ということでex0012.cを。 |
| #include <guigui01.h> | | #include <guigui01.h> |
| + | |
| /* これは関数の外で宣言するのが望ましい */ | | /* これは関数の外で宣言するのが望ましい */ |
| unsigned char cmdusage[] = { | | unsigned char cmdusage[] = { |
| 0x40 /* 最後のこれも決まり文句なので変更しない */ | | 0x40 /* 最後のこれも決まり文句なので変更しない */ |
| }; | | }; |
| + | |
| void setdec(char *s, int i, int n) | | void setdec(char *s, int i, int n) |
| { | | { |
| (ex0010.cと同じ内容) | | (ex0010.cと同じ内容) |
| } | | } |
| + | |
| char *skip_space(char *s) | | char *skip_space(char *s) |
| { | | { |
| (ex0010.cと同じ内容) | | (ex0010.cと同じ内容) |
| } | | } |
| + | |
| void G01Main() | | void G01Main() |
| { | | { |
| return; | | return; |
| } | | } |
- | -詳しい説明は後でします。とにかくまずはこれをmakeします。229バイトになります。 | + | -詳しい説明は後でします。とにかくまずはこれをmakeします。220バイトになります。 |
| -まず試しにこれを引数なしで実行してみます。 | | -まず試しにこれを引数なしで実行してみます。 |
| >efg01 ex0012.g01 | | >efg01 ex0012.g01 |
| >efg01 ex0012.g01 n:100 | | >efg01 ex0012.g01 n:100 |
| 5050 | | 5050 |
| + | |
| >efg01 ex0012.g01 n:1000 | | >efg01 ex0012.g01 n:1000 |
| 500500 | | 500500 |
| -じゃあ次は引数を二つ使いましょうかね。ex0013.cです。 | | -じゃあ次は引数を二つ使いましょうかね。ex0013.cです。 |
| #include <guigui01.h> | | #include <guigui01.h> |
| + | |
| unsigned char cmdusage[] = { | | unsigned char cmdusage[] = { |
| 0x86, 0x55, | | 0x86, 0x55, |
| 0x40 | | 0x40 |
| }; | | }; |
| + | |
| void setdec(char *s, int i, int n) | | void setdec(char *s, int i, int n) |
| { | | { |
| (ex0010.cと同じ内容) | | (ex0010.cと同じ内容) |
| } | | } |
| + | |
| char *skip_space(char *s) | | char *skip_space(char *s) |
| { | | { |
| (ex0010.cと同じ内容) | | (ex0010.cと同じ内容) |
| } | | } |
| + | |
| void G01Main() | | void G01Main() |
| { | | { |
| return; | | return; |
| } | | } |
- | -これをmakeすると245バイトになります。プログラムは今までの知識から推測すれば分かると思いますが、iからnまでの和を計算しています。引数が2個になることで、引数名を指定する意味が出てきます。というのは、 | + | -これをmakeすると230バイトになります。プログラムは今までの知識から推測すれば分かると思いますが、iからnまでの和を計算しています。引数が2個になることで、引数名を指定する意味が出てきます。というのは、 |
| >efg01 ex0013.g01 i:3 n:5 | | >efg01 ex0013.g01 i:3 n:5 |
| 12 | | 12 |
| -ということで省略可能な引数の説明です。ex0014.cです。 | | -ということで省略可能な引数の説明です。ex0014.cです。 |
| #include <guigui01.h> | | #include <guigui01.h> |
| + | |
| unsigned char cmdusage[] = { | | unsigned char cmdusage[] = { |
| 0x86, 0x55, | | 0x86, 0x55, |
| 0x40 | | 0x40 |
| }; | | }; |
| + | |
| void setdec(char *s, int i, int n) | | void setdec(char *s, int i, int n) |
| { | | { |
| (ex0010.cと同じ内容) | | (ex0010.cと同じ内容) |
| } | | } |
| + | |
| char *skip_space(char *s) | | char *skip_space(char *s) |
| { | | { |
| (ex0010.cと同じ内容) | | (ex0010.cと同じ内容) |
| } | | } |
| + | |
| void G01Main() | | void G01Main() |
| { | | { |
| return; | | return; |
| } | | } |
- | -これをmakeすると260バイトになります。変わったところは、cmdusage[ ]と引数の取得がg01_getcmdlin_int_o()になったことです。oはオプショナル型という意味で、つまり省略可能な引数を受け取るときに使います。省略した場合は、2番目の引数の値が指定されたと見なされます。今回はどちらも省略可能になったので、引数なしで実行してもusageは出ません。 | + | -これをmakeすると245バイトになります。変わったところは、cmdusage[ ]と引数の取得がg01_getcmdlin_int_o()になったことです。oはオプショナル型という意味で、つまり省略可能な引数を受け取るときに使います。省略した場合は、2番目の引数の値が指定されたと見なされます。今回はどちらも省略可能になったので、引数なしで実行してもusageは出ません。 |
| >efg01 ex0014.g01 | | >efg01 ex0014.g01 |
| 5050 | | 5050 |
| + | |
| >efg01 ex0014.g01 n:1000 | | >efg01 ex0014.g01 n:1000 |
| 500500 | | 500500 |
| + | |
| >efg01 ex0014.g01 i:98 | | >efg01 ex0014.g01 i:98 |
| 297 | | 297 |
| -さてそろそろ足し算にも飽きたので、別のことをやろうと思います。ex0015.cですね。 | | -さてそろそろ足し算にも飽きたので、別のことをやろうと思います。ex0015.cですね。 |
| #include <guigui01.h> | | #include <guigui01.h> |
| + | |
| unsigned char cmdusage[] = { | | unsigned char cmdusage[] = { |
| 0x86, 0x55, | | 0x86, 0x55, |
| 0x40 | | 0x40 |
| }; | | }; |
| + | |
| void G01Main() | | void G01Main() |
| { | | { |
| return; | | return; |
| } | | } |
- | -これをmakeすると143バイトになります。これは何をやっているかというと、文字列sと回数nを受け取って、sをn回表示するという、ただそれだけのものです。まずはusageを。 | + | -これをmakeすると132バイトになります。これは何をやっているかというと、文字列sと回数nを受け取って、sをn回表示するという、ただそれだけのものです。まずはusageを。 |
| >efg01 ex0015.g01 | | >efg01 ex0015.g01 |
| usage>ex0015.g01 s:str [n:#] | | usage>ex0015.g01 s:str [n:#] |
| >efg01 ex0015.g01 s:abc | | >efg01 ex0015.g01 s:abc |
| abcabcabcabcabcabcabcabcabcabc | | abcabcabcabcabcabcabcabcabcabc |
| + | |
| >efg01 ex0015.g01 s:12 n:3 | | >efg01 ex0015.g01 s:12 n:3 |
| 121212 | | 121212 |
| + | |
| >efg01 ex0015.g01 s:1+2 n:1+2 | | >efg01 ex0015.g01 s:1+2 n:1+2 |
| 1+21+21+2 | | 1+21+21+2 |
| ---- | | ---- |
| -このページもすっかり長くなったので最後です。ex0016.cです。 | | -このページもすっかり長くなったので最後です。ex0016.cです。 |
| + | #include <guigui01.h> |
| + | |
| unsigned char cmdusage[] = { | | unsigned char cmdusage[] = { |
| 0x86, 0x5c, 0, /* ここが変わった! */ | | 0x86, 0x5c, 0, /* ここが変わった! */ |
| 0x40 | | 0x40 |
| }; | | }; |
| + | |
| void G01Main() | | void G01Main() |
| { | | { |
| (ex0015.cと同じ内容) | | (ex0015.cと同じ内容) |
| } | | } |
- | -これをmakeすると144バイトになります。今回はusageを改造しただけなので、usageが変わります。まず見てみましょう。 | + | -これをmakeすると133バイトになります。今回はusageを改造しただけなので、usageが変わります。まず見てみましょう。 |
| >efg01 ex0016.g01 | | >efg01 ex0016.g01 |
| usage>ex0016.g01 [s:]str [[n:]#] | | usage>ex0016.g01 [s:]str [[n:]#] |
| -システムは、コロンを含まない引数を見つけると、まだ指定されていない引数に当てはめようとします。しかし 0x55, を指定しているときは、その機能があえて無効になっていました。 0x5c, ?, を指定すると、?で指定した引数から、当てはめようとするようになります。これにより、引数の順序を覚えている場合は、いちいちs:やn:を書かなくてよくなるわけです(もちろんいちいち書いてもいい)。 | | -システムは、コロンを含まない引数を見つけると、まだ指定されていない引数に当てはめようとします。しかし 0x55, を指定しているときは、その機能があえて無効になっていました。 0x5c, ?, を指定すると、?で指定した引数から、当てはめようとするようになります。これにより、引数の順序を覚えている場合は、いちいちs:やn:を書かなくてよくなるわけです(もちろんいちいち書いてもいい)。 |
| | | |
- | * こめんと欄 | + | * こめんと欄 [#oab3e935] |
| - これくらい分かっていればcalendarを作ることもできるので、誰かが僕以外の作者では初の「ぐいぐい01」アプリを作ってくれるかなあ?まあ問題はアイデアですよね。これだけのAPIで何をやるかって言うのは、なかなかハードルが高いでしょう。 -- [[K]] &new{2009-01-12 (月) 15:22:44}; | | - これくらい分かっていればcalendarを作ることもできるので、誰かが僕以外の作者では初の「ぐいぐい01」アプリを作ってくれるかなあ?まあ問題はアイデアですよね。これだけのAPIで何をやるかって言うのは、なかなかハードルが高いでしょう。 -- [[K]] &new{2009-01-12 (月) 15:22:44}; |
| - ちなみに[[K]]作のカレンダーは[[GUIGUI01/memo22]]の2009.01.11のところにあります。 -- ''K'' &new{2009-01-12 (月) 21:08:55}; | | - ちなみに[[K]]作のカレンダーは[[GUIGUI01/memo22]]の2009.01.11のところにあります。 -- ''K'' &new{2009-01-12 (月) 21:08:55}; |
| + | - 次回は多分コマンドライン周りの続き。そしてその次がファイル関係の予定です。 -- ''K'' &new{2009-01-12 (月) 23:18:10}; |
| + | - abcdw014向けの記述に修正。 -- ''K'' &new{2009-01-16 (金) 20:08:52}; |
| | | |
| #comment | | #comment |