レベルアップを目指して
 Mingに物足りなさを感じたり、うまく動かなかったりしとき、
なにをしていますか。私の場合、何もできないので、次期バージョン
を待ち望んでいます。
 でも本当はMingに手を加えれるようでないといけません。
Mingはソースが公開されていますし、win32の環境でmakeすることもできるのです。
 そこで、遠い未来、Mingを改造できるようになるために、
ソースを読んで見ることにしました
実態を探す
 src以下にある、名前を見れば、私たちがPHPで使っている機能がどこにあるかは一目瞭然だおといます。
今日は movie.c の
SWFMovie_toOutput(SWFMovie movie, int level)に注目してもました。
なかでも。
SWFBlockList_writeBlocksToMethod(movie->blockList, SWFOutputMethod, buffer);
をのぞいて見ましょう。
そしてblocklist.cを見てみましょう。
名前のとおりblocklistはblockのlistです。
SWFBlockList_writeBlocksToMethod(SWFBlockList list,SWFByteOutputMethod method, void *data)
のなかの
writeSWFBlockToMethod(SWFBlock block, SWFByteOutputMethod method, void *data)
はblock.cのwriteSWFBlockToMethod(SWFBlock block, SWFByteOutputMethod method, void *data)
のことです。
さらに、実態(データーをbufferに加えている部分)となるものは
writeSWFBlockToMethodの中の
	block->writeBlock(block, method, data);
です。
 このwriteBlockが、ファイルに書き込む前に
bufferにデーターを加えている場所と思われます。(もちろんmovieてせもoutput.c
をもちいてデーターをbufferに蓄えています。)
 
 C言語でこんな風にプログラムできる?なんて私以前Mingのソースで知りました。入門書には
あまり紹介されていない方法ですね。
 text.c  text.h や sprite.c  sprite.hを を見てみると、
SWFCharacterを必ず保持しています SWFChracterの先頭はがSWFBlockであります。
関数ポインタ
 SWFMovieはSWFBlockListさえあつかっていれば、よいつくりになっているのですね。
あとはtextだとかspriteだとか bitmapだとかは 
blockを拡張してあげればよいと。
というとで、関数ポインターを使い方。
本当は、animalとか作って お決まりのパターン dogになったりするとワンワンとほえるものとか
がよいと思いましたが、なぜか nuronです。
./nuron.h
typedef struct nuron_s *Nuron;
typedef void (*inputNuron)(void);
typedef void (*outputNuron)(void);
struct nuron_s{
  inputNuron input;
  outputNuron output;
        };
Nuron  newNuro();
 
./nuron.c
#include"nuron.h"
static int _inputNuron()
{
  printf("exe input \n");
}
static int _outputNuron()
{
  printf("exe output\n");
}
Nuron  newNuro()
{
  Nuron nuro;
  nuro = (Nuron)malloc(sizeof(struct nuron_s));
  nuro->input = (inputNuron)_inputNuron;
  nuro->output = (outputNuron)_inputNuron;
  return nuro;
}
./exe.h
#include"nuron.h"
./exe.c
#include"exe.h"
int main()
{
 
  Nuron nuro;
  nuro= newNuro();
  nuro->input();
   
}