4: 2009-01-12 (月) 23:18:10 [6] | 現: 2024-01-08 (月) 12:58:42 k-tan[7] [8] | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | * ぐいぐい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[] = { | ||
Line 14: | Line 15: | ||
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() | ||
{ | { | ||
Line 39: | Line 40: | ||
return; | return; | ||
} | } | ||
- | -詳しい説明は後でします。とにかくまずはこれをmakeします。229バイトになります。 | + | -詳しい説明は後でします。とにかくまずはこれをmakeします。220バイトになります。 |
-まず試しにこれを引数なしで実行してみます。 | -まず試しにこれを引数なしで実行してみます。 | ||
>efg01 ex0012.g01 | >efg01 ex0012.g01 | ||
Line 48: | Line 49: | ||
>efg01 ex0012.g01 n:100 | >efg01 ex0012.g01 n:100 | ||
5050 | 5050 | ||
+ | |||
>efg01 ex0012.g01 n:1000 | >efg01 ex0012.g01 n:1000 | ||
500500 | 500500 | ||
Line 67: | Line 68: | ||
-じゃあ次は引数を二つ使いましょうかね。ex0013.cです。 | -じゃあ次は引数を二つ使いましょうかね。ex0013.cです。 | ||
#include <guigui01.h> | #include <guigui01.h> | ||
+ | |||
unsigned char cmdusage[] = { | unsigned char cmdusage[] = { | ||
0x86, 0x55, | 0x86, 0x55, | ||
Line 74: | Line 75: | ||
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() | ||
{ | { | ||
Line 99: | Line 100: | ||
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 | ||
Line 109: | Line 110: | ||
-ということで省略可能な引数の説明です。ex0014.cです。 | -ということで省略可能な引数の説明です。ex0014.cです。 | ||
#include <guigui01.h> | #include <guigui01.h> | ||
+ | |||
unsigned char cmdusage[] = { | unsigned char cmdusage[] = { | ||
0x86, 0x55, | 0x86, 0x55, | ||
Line 116: | Line 117: | ||
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() | ||
{ | { | ||
Line 141: | Line 142: | ||
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 | ||
Line 153: | Line 154: | ||
-さてそろそろ足し算にも飽きたので、別のことをやろうと思います。ex0015.cですね。 | -さてそろそろ足し算にも飽きたので、別のことをやろうと思います。ex0015.cですね。 | ||
#include <guigui01.h> | #include <guigui01.h> | ||
+ | |||
unsigned char cmdusage[] = { | unsigned char cmdusage[] = { | ||
0x86, 0x55, | 0x86, 0x55, | ||
Line 160: | Line 161: | ||
0x40 | 0x40 | ||
}; | }; | ||
+ | |||
void G01Main() | void G01Main() | ||
{ | { | ||
Line 173: | Line 174: | ||
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:#] | ||
Line 179: | Line 180: | ||
>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 | ||
Line 192: | Line 193: | ||
-このページもすっかり長くなったので最後です。ex0016.cです。 | -このページもすっかり長くなったので最後です。ex0016.cです。 | ||
#include <guigui01.h> | #include <guigui01.h> | ||
+ | |||
unsigned char cmdusage[] = { | unsigned char cmdusage[] = { | ||
0x86, 0x5c, 0, /* ここが変わった! */ | 0x86, 0x5c, 0, /* ここが変わった! */ | ||
Line 199: | Line 200: | ||
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:]#] | ||
Line 212: | Line 213: | ||
-システムは、コロンを含まない引数を見つけると、まだ指定されていない引数に当てはめようとします。しかし 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}; | - 次回は多分コマンドライン周りの続き。そしてその次がファイル関係の予定です。 -- ''K'' &new{2009-01-12 (月) 23:18:10}; | ||
+ | - abcdw014向けの記述に修正。 -- ''K'' &new{2009-01-16 (金) 20:08:52}; | ||
#comment | #comment |
(This host) = http://osask.net