#include <string.h>
#include <stdio.h>
#include <glib.h>

#include "../include/globals.h"
#include "../include/loaddic.h"
#include "../include/pdictype.h"
#include "../include/endictype.h"
#include "../include/index.h"
#include "../include/header.h"

///////////////////////////////////////////////////////////////////////////
//
GList* LoadIniFile(gchar *inifile,GList *dlist)
{
	int out=0;
	gsize leng;
	diclistitem *item;
	gchar *line,**lines,**load;
	GIOChannel *gioc=NULL;
	
	//ファイルディスクリプタの作成
	gioc=g_io_channel_unix_new(out);
	gioc=g_io_channel_new_file(inifile,"r",NULL);

	//不正な場合の処理
	if(gioc==NULL) return NULL;
	
	while(1){	
		//辞書情報の読み込み	
		if(g_io_channel_read_line(
														gioc,
														&line,
														&leng,
														NULL,NULL)
			!=G_IO_STATUS_NORMAL){
				//不正処理
				break;
		}
		//トリミング
		g_strstrip(line);

		if(line[0]=='#'){
			g_free(line);
			continue;//コメント処理
		}
		//値の抽出
		//
		//コマンド=値
		//
		lines=g_strsplit(line,"=",2);																		
		//読み込み用に使ったline変数を解放
		g_free(line);
		//前後の空白を削除
		g_strstrip(lines[0]);
		g_strstrip(lines[1]);

		//
		//開くファイルを指定
		//
		if(!strcmp(lines[0],"load")){
			//辞書情報を読み込み
			item=g_new(diclistitem,1);
			load=g_strsplit(lines[1],":",2);
			//辞書名を取得
			item->dicname=g_strdup(load[0]);
			//ファイルパスを取得
			item->path=g_strdup(load[1]);
			item->h=g_new(newdic3,1);
			LoadDictionary(item->path,item->h,&(item->fp));
			dlist=g_list_append(dlist,item);
			g_strfreev(load);
		}
		//エントリーのみ
		else if(!strcmp(lines[0],"entry")){
			//辞書情報を読み込み
			item=g_new(diclistitem,1);
			load=g_strsplit(lines[1],":",2);
			//辞書名を取得
			item->dicname=g_strdup(load[0]);
			//ファイルパスを取得
			item->path=g_strdup(load[1]);
			item->h=NULL;
			item->fp=0;
			dlist=g_list_append(dlist,item);
			g_strfreev(load);
		}
		g_strfreev(lines);
	}
	//ファイルを閉じる
	g_io_channel_shutdown(gioc,TRUE,NULL);

	dlist=g_list_first(dlist);
	return (GList*)dlist;
}
///////////////////////////////////////////////////////////////////////////
//辞書の読み込み
int LoadDictionary(gchar *dicfile,newdic3 *h,FILE **filep)
{
	//
	//ファイルディスクリプタはオープンしたままにする。
	//ここでオープンしたファイルのディスクリプタは
	//dicList に格納される構造体、diclistitemの引数に引き継がれる。
	//
	FILE *fp;

	if((fp=fopen(dicfile,"rb"))==NULL){
		return -1;
	}
	pdicHeaderLoad(fp,h);
	indList=pdicMakeIndexList(h,fp,indList);

	*filep=fp;

	return g_list_length(indList);
}
///////////////////////////////////////////////////////////////////////////
//辞書構造体のクリア
void ClearDictionary(newdic3 **h)
{
	//ヘッダのクリア
	g_free(*h);
	*h=NULL;
	//インデックスリストのクリア
	pdicClearIndexList(&indList);
}
