/* $Id: indict.c,v 1.4 2002/07/02 13:01:43 in2 Exp $ */
#include "bbs.h"

#define REFER "etc/dicts"

static void addword(char word[])
{
    char buf[150],temp[150],a[3];
    FILE *fp = fopen(database,"r+");

    if( fp == NULL ){
	vmsg("database error");
	return ;
    }
    fgets(buf,130,fp);
    fseek(fp,0,2);
    if(HAVE_PERM(PERM_LOGINOK)) {
	clear();
	move(4,0);
	outs(" \033[31mĵ�i\033[m:�Y�W�N��g����ƱN\033[36m��id\033[m�B��\n");
	sprintf(temp, "\n��J�d�Q\n:\033[33m%s\033[m", buf);
	outs(temp);
	outs("\n�Ш̤W�C�d�ҿ�J�@����(����enter���)\n");
	getdata(10, 0, ":", buf, 65, DOECHO);
	if(buf[0]) {
	    getdata(13, 0, "�T�w�s�W?(Y/n)", a, sizeof(a), LCECHO);
	    if(a[0] != 'n')
		fprintf(fp, "%-65s[%s]\n", buf, cuser.userid);
	}
    }
    fclose(fp);
    clear();
}

static int choose_dict(void) {
    int c;
    FILE *fp;
    char buf[10][21], data[10][21], cho[130];

    move(12, 0);
    clrtobot();
    outs("                        "
	 "�� \033[45;33m�r��� �� �n�d���@���H\033[m ��");

    if((fp = fopen(REFER, "r"))) {
	for(c = 0; fscanf(fp, "%s %s", buf[c], data[c]) != EOF; c++ ) {
            sprintf(cho,"\n                     "
		    "(\033[36m%d\033[m) %-20s�j�r��",c+1,buf[c]);
            outs(cho);
	}
	
	getdata(22, 14, "          �� �п�ܡA[Enter]���}�G", cho, 3, LCECHO);
	cho[0] -= '1';
	if(cho[1])
	    cho[0] = (cho[0] + 1) * 10 + (cho[1] - '1');
	
	if(cho[0] >= 0 && cho[0] < c) {
	    strcpy(dict, buf[(int)cho[0]]);
	    strcpy(database, data[(int)cho[0]]);
	    return 1;
	} else
	    return 0;
    }
    return 0;
}

static char *lower(char str[]) {
    int c;
    static char temp[200];

    strcpy(temp,str);
    for(c = 0; temp[c] !=0; c++)
	if(temp[c] >= 'A' && temp[c] <= 'Z')
	    temp[c] += 'a' - 'A';
    return temp;
}

int use_dict() {
    FILE *fp;
    char lang[150], word[80] = "";
    char j, f, buf[120], sys[] = "|\033[31me\033[m:�s�y�r��";
    int i = 0;
    
    setutmpmode(DICT);
    if(!HAS_PERM(PERM_SYSOP))
	sys[0]=0;
    
    clear();
    
    sprintf(buf,"\033[45m                           ��\033[1;44;33m"
	    "  %-14s\033[3;45m ��                              ", dict);
    strcpy(&buf[100],"\033[m\n");
    for(;;) {
	move(0, 0);
	sprintf(lang, "  �п�J����r��(%s) �Ϋ��O(h,t,a)\n", dict);
	outs(lang);
	sprintf(lang, "[\033[32m<����r>\033[m|\033[32mh\033[m:help|\033[32m"
		"t\033[m:�Ҧ����|\033[32ma\033[m:�s�W���%s]\n:", sys);
	outs(lang);
	getdata(2, 0, ":", word, 18, DOECHO);
	outs("��Ʒj�M���еy��....");
	strcpy(word,lower(word));
	if(word[0] == 0)
	    return 0;
	clear();
	move(4, 0);
	outs(buf);
	if(strlen(word) == 1) {
	    if(word[0] == 'a') {
		clear();
		move(4,0);
		outs(buf);
		addword(word);
		continue;
	    } else if(word[0] == 't')
		word[0] = 0;
	    else if(word[0] == 'h') {
		more("etc/dict.hlp",YEA);
		clear();
		continue;
	    } else if(word[0]=='e') {
		vedit(database,NA, NULL);
		clear();
		continue;
	    } else {
		outs("�r��ӵu,�п�J�h�@�I����r");
		continue;
	    }
	}

	if((fp = fopen(database,"r"))) {
	    i = 0;
	    while(fgets(lang,150,fp) != NULL) {
		if(lang[65] == '[') {
		    lang[65] = 0;
		    f = 1;
		} else
		    f = 0;
		if(strstr(lower(lang),word)) {
		    if(f == 1)
			lang[65] = '[';
		    outs(lang);
		    i++;
		    if(!((i+1)%17)) {
			move(23, 0);
			outs("\033[45m                               "
			     "���N���~��  Q:���}                             "
			     "\033[m ");
			j = igetch();
                        if(j == 'q')
			    break;
                        else {
			    clear();
			    move(4,0);
			    outs(buf);
                        }
		    }
		}
	    }
	}
	fclose(fp);
	if(i == 0) {
	    getdata(5, 0, "�S�o�Ӹ�ƭC,�s�W��?(y/N)", lang, 3, LCECHO);
	    if(lang[0] == 'y') {
		clear();
		move(4,0);
		outs(buf);
		addword(word);
	    }
	}
    }
}

int x_dict() {
    if(choose_dict())
	use_dict();
    return 0;
}