/*****  名前ジェネレータ namegen    *****/
/*****  genname.c                   *****/



#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "namegen.h"
#include "put.h"


#define     Rnd()       ( (float)rand() / (float)RAND_MAX )


void generate_name(Ptrbuf   *ptrbuf_base[], /* 各フィールドのptrbufベース   */
                   int      wordix_max[],   /* 各ワードのワードix最大       */
                   int      gen_prob[],     /* 各フィールドの出現確率       */
                   int      field_max,      /* フィールド数                 */
                   int      gen_num         /* 生成個数                     */
                   ){

    int             rnd;                    /* 生成するワード番号           */
    int             i, j;
    int             field;                  /* フィールド番号               */
    Ptrbuf          *ptrbuf_top;            /* ptrbufリスト検索用           */
    time_t          nowtime;
    int             prob;                   /* フィールド生成確率           */


    time(&nowtime);                         /* 乱数系列初期化               */
    srand((unsigned int)nowtime);

    for (i = 0 ; i < gen_num ; i ++){
        for (field = 1 ; field <= field_max ; field ++){
            if (wordix_max[field] > 0){     /* ワードが定義されたfieldなら  */
                prob = (int)( Rnd() * (float)100 );
                if (prob < gen_prob[field]){    /* そのfieldが生成されたなら*/
                    rnd = (int)( Rnd() * (float)wordix_max[field] );
                    ptrbuf_top = ptrbuf_base[field];
                                            /* 該当ワードへのポインタを含む */
                                            /* ptrbufを見つける             */
                    for (j = 0 ; j < rnd/PTRBUF_MAX ; j++){
                        ptrbuf_top = ptrbuf_top->next_p;
                    }
                    putstr(ptrbuf_top->ptr[rnd % PTRBUF_MAX], stdout);
                }
            }
        }
        putc('\n', stdout);
    }          
}


