#include <stdio.h>
#include <glib.h>
#include <string.h>
#include "../include/pdictype.h"
#include "../include/endictype.h"



//////////////////////////////////////////////////////////////////////
//インデックスをglistに入れる
GList* pdicMakeIndexList(newdic3 *h,FILE *fp,GList *list)
{
	int c;
	long p;
	enindex *eix;
	gchar *buf,*b;
	fpos_t pos;

	//ヘッダ読み飛ばし
	fseek(fp,0x100+h->extheader,SEEK_SET);

	//見出し語最長情報からバッファを確保
	buf=g_strnfill(h->lword,0);

  while(1){
		//データ位置情報の取得
    c=getc(fp)+(getc(fp)<<8);
    if(c==0){
      //終端か？
      fgetpos(fp,&pos);
      p=getc(fp)+(getc(fp)<<8);
      if(p==0)break;
      //終端で無いなら元の位置に戻す
      fsetpos(fp,&pos);
    }
		//構造体のメモリ確保
		eix=g_new(enindex,1);
		//データ位置情報を代入
		eix->pos=c;
		eix->h=h;

		for(b=buf;(c=fgetc(fp))!=0;b++){ *b=c; }
		*b=0;
		eix->fp=fp;
		//utf-8に変換して代入
		//eix->word=g_convert(buf,strlen(buf),"utf-8","shift_jis",NULL,NULL,NULL);
		eix->word=g_strdup(buf);
		list=g_list_append(list,eix);
  }
	g_free(buf);
	list=g_list_first(list);
	return list;
}
//////////////////////////////////////////////////////////////////////
//インデックスクリア
void pdicClearIndexList(GList **list)
{
	//インデックス構造体
	enindex *eix;

	//巻戻し
	*list=g_list_first(*list);
	while(*list){
		eix=(enindex*)(*list)->data;
		g_free(eix->word);
		g_free(eix);
		*list=g_list_next(*list);
	}
	g_list_free(*list);
	*list=NULL;
}
//////////////////////////////////////////////////////////////////////
//インデックス一覧をプリント
int pdicIndexPrint(FILE *fp,newdic3 *h)
{
	fpos_t pos;
	int p,c,co=0;
	gchar *buf,*b,*b2;

	fseek(fp,sizeof(newdic3)+h->extheader,SEEK_SET);

	//見出し語最長情報からバッファを確保
	buf=g_strnfill(h->lword,0);

	printf("---------- index print --------------\n");

  while(1){
    p=getc(fp)+(getc(fp)<<8);
    if(p==0){
      //終端か？
      fgetpos(fp,&pos);
      c=getc(fp)+(getc(fp)<<8);
      if(c==0)break;
      //終端で無いなら元の位置に戻す
      fsetpos(fp,&pos);
    }
		for(b=buf;(c=fgetc(fp))!=0;b++){ *b=c; }
		*b=0;
		b2=g_convert(buf,strlen(buf),"euc-jp","shift_jis",NULL,NULL,NULL);
		printf("%.4d:[%x]\t%s\n", co,p, b2);
		g_free(b2);
    
  }
	printf("---------- index print --------------\n");

	g_free(buf);

	return 0;
}
//////////////////////////////////////////////////////////////////////
//
