5: 2009-01-17 (土) 12:25:04 [6] | 現: 2024-01-08 (月) 12:58:42 k-tan[7] [8] | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | * ぐいぐい01に関するメモ-27 | + | TITLE:x |
+ | * ぐいぐい01に関するメモ-27 [#ud59caf8] | ||
-(by [[K]], 2009.01.13) | -(by [[K]], 2009.01.13) | ||
-メモのうち重要な部分をそのうちまとめてまともなページを作る | -メモのうち重要な部分をそのうちまとめてまともなページを作る | ||
- | *** (39) GOで「ぐいぐい01」アプリを作る(5) | + | *** (39) GOで「ぐいぐい01」アプリを作る(5) [#t6b647e1] |
-[[GUIGUI01/memo26]]の続きです。 | -[[GUIGUI01/memo26]]の続きです。 | ||
---- | ---- | ||
-今回の最初のプログラムは、いわゆるファイルダンプです。ファイルをオープンして、それを16進数でだだーっと書きます。ex0021.cです。 | -今回の最初のプログラムは、いわゆるファイルダンプです。ファイルをオープンして、それを16進数でだだーっと書きます。ex0021.cです。 | ||
#include <guigui01.h> | #include <guigui01.h> | ||
+ | |||
unsigned char cmdusage[] = { | unsigned char cmdusage[] = { | ||
0x86, 0x50, | 0x86, 0x50, | ||
Line 13: | Line 14: | ||
0x40 | 0x40 | ||
}; | }; | ||
+ | |||
void sethex(char *s, int i, int n) | void sethex(char *s, int i, int n) | ||
{ | { | ||
Line 26: | Line 27: | ||
return; | return; | ||
} | } | ||
+ | |||
void G01Main() | void G01Main() | ||
{ | { | ||
Line 68: | Line 69: | ||
>efg01 ex0021.g01 | >efg01 ex0021.g01 | ||
usage>ex0021.g01 [in:]input-file | usage>ex0021.g01 [in:]input-file | ||
+ | |||
>efg01 ex0021.g01 make.bat | >efg01 ex0021.g01 make.bat | ||
offset +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789ABCDEF | offset +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789ABCDEF | ||
Line 82: | Line 83: | ||
|0x3c|文字列型引数| | |0x3c|文字列型引数| | ||
-関数sethex()はsetdecを16進数用に改造しただけのものです。 | -関数sethex()はsetdecを16進数用に改造しただけのものです。 | ||
- | -それでG01Main()の g01_getcmdlin_fopen_s_0_4(0); で、引数番号0に書かれたファイルをリードモードでオープンさせ、スロット番号4に割り当てています。これは本来は、 g01_getcmdlin_fopen_s(0, 4, 0); と書くべきところなのです。しかしこの関数をguigui01.hに書いておくのをすっかり忘れていました。それで、 g01_getcmdlin_fopen_s_0_4() というのは、スロット番号4にリードモードでオープンするのがあまりよくあるケースなので、関数の引数で指定しなくてもいいことにしたいわば省略形です。 | + | -それでG01Main()の g01_getcmdlin_fopen_s_0_4(0); で、引数番号0に書かれたファイルをリードモードでオープンさせ、スロット番号4に割り当てています。これは本来は、 g01_getcmdlin_fopen_s(0, 4, 0); と書くべきところなのです。しかしこの関数をguigui01.hに書いておくのをすっかり忘れていました。それで、 g01_getcmdlin_fopen_s_0_4() というのは、スロット番号4にリードモードでオープンするのがあまりによくあるケースなので、関数の引数で指定しなくてもいいことにしたいわば省略形です。 |
-スロット番号というのはファイルハンドルの入れ物みたいなもので、ファイルのオープンに使う場合は4番から31番のどれかを使います。しかしまあ、たいていリードは4番で、ライトは5番でやります。どうしてかというと、 g01_getcmdlin_fopen_s_0_4() などの関数を使いたいからですね(サイズが節約できます)。 | -スロット番号というのはファイルハンドルの入れ物みたいなもので、ファイルのオープンに使う場合は4番から31番のどれかを使います。しかしまあ、たいていリードは4番で、ライトは5番でやります。どうしてかというと、 g01_getcmdlin_fopen_s_0_4() などの関数を使いたいからですね(サイズが節約できます)。 | ||
- j = jg01_fread1(4, 16, buf); というのは、スロット番号4のファイルから最大16バイトまで読み込んでbufにしまいます。そして読み込めたバイト数がjに入ります。これが0ならファイル終端です。 | - j = jg01_fread1(4, 16, buf); というのは、スロット番号4のファイルから最大16バイトまで読み込んでbufにしまいます。そして読み込めたバイト数がjに入ります。これが0ならファイル終端です。 | ||
Line 145: | Line 146: | ||
-ASCIIのみのテキストファイルしか絶対にin:に指定しないとして、しかも常に2MB未満のサイズだと仮定して問題ないのなら、ここまで単純化できます。ex0023.cです。 | -ASCIIのみのテキストファイルしか絶対にin:に指定しないとして、しかも常に2MB未満のサイズだと仮定して問題ないのなら、ここまで単純化できます。ex0023.cです。 | ||
#include <guigui01.h> | #include <guigui01.h> | ||
+ | |||
unsigned char cmdusage[] = { | unsigned char cmdusage[] = { | ||
0x86, 0x50, | 0x86, 0x50, | ||
Line 151: | Line 152: | ||
0x40 | 0x40 | ||
}; | }; | ||
+ | |||
void G01Main() | void G01Main() | ||
{ | { | ||
Line 164: | Line 165: | ||
>e ex0023 | >e ex0023 | ||
usage>ex0023 [in:]input-file | usage>ex0023 [in:]input-file | ||
+ | |||
>e ex0023 make.bat | >e ex0023 make.bat | ||
..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 | ..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 | ||
+ | |||
>e ex0023 Makefile | >e ex0023 Makefile | ||
TARGET = ex0023 | TARGET = ex0023 | ||
MODE = g01 | MODE = g01 | ||
OBJS = ex0023.obj | OBJS = ex0023.obj | ||
+ | |||
INCPATH = ../z_tools/guigui01/ | INCPATH = ../z_tools/guigui01/ | ||
include ../z_tools/com_mak.txt | include ../z_tools/com_mak.txt | ||
Line 179: | Line 180: | ||
-ということで作ってみたex0024.cです。 | -ということで作ってみたex0024.cです。 | ||
#include <guigui01.h> | #include <guigui01.h> | ||
+ | |||
unsigned char cmdusage[] = { | unsigned char cmdusage[] = { | ||
0x86, 0x51, | 0x86, 0x51, | ||
Line 186: | Line 187: | ||
0x40 | 0x40 | ||
}; | }; | ||
+ | |||
void G01Main() | void G01Main() | ||
{ | { | ||
Line 213: | Line 214: | ||
} | } | ||
-これをmakeすると181バイトになります。これならちゃんと表示できます。 | -これをmakeすると181バイトになります。これならちゃんと表示できます。 | ||
- | -このプログラムで注意しておくべきところは、bで受け取った中身を書きえているということです。旧OSASKではこのような行為はファイルの書き換えを意味していました(メモリマップトファイルだったので)。しかしjg01_fread系はファイルの内容を「メモリに読み込む」APIなので、書き換えても元のファイルの内容が変更されることはありません。変わるのはメモリの内容だけです(旧OSASKのmapmoduleはファイルにアクセスするために「メモリ空間に割り当てて」いた)。 | + | -このプログラムで注意しておくべきところは、bで受け取った中身を書き換えているということです。旧OSASKではこのような行為はファイルの書き換えを意味していました(メモリマップトファイルだったので)。しかしjg01_fread系はファイルの内容を「メモリに読み込む」APIなので、書き換えても元のファイルの内容が変更されることはありません。変わるのはメモリの内容だけです(旧OSASKのmapmoduleはファイルにアクセスするために「メモリ空間に割り当てて」いた)。 |
- | * こめんと欄 | + | * こめんと欄 [#laba58b6] |
- ex0022が351バイトになって我ながら感動したので、後日ASKAかnaskで全部書いてみようと思いました(註:abcdw012での話です)。半分くらいにならないかなあ? -- [[K]] &new{2009-01-13 (火) 23:51:38}; | - ex0022が351バイトになって我ながら感動したので、後日ASKAかnaskで全部書いてみようと思いました(註:abcdw012での話です)。半分くらいにならないかなあ? -- [[K]] &new{2009-01-13 (火) 23:51:38}; | ||
- とりあえず200バイトを切ることは確認。 -- ''K'' &new{2009-01-14 (水) 00:53:13}; | - とりあえず200バイトを切ることは確認。 -- ''K'' &new{2009-01-14 (水) 00:53:13}; |
(This host) = http://osask.net