/*===============================*/
/*== 大字典 Ptt ==*/
/*===============================*/
#include "bbs.h"
#define REFER "etc/dicts"
char dict[41],database[41];
int addword(char word[])
{
char buf[150],temp[150],a[3];
FILE *fp = fopen(database,"r+");
fgets(buf,130,fp);
fseek(fp,0,2);
if(HAVE_PERM(PERM_LOGINOK))
{
clear();
move(4,0);
outs(" 警告:若蓄意填寫假資料將砍id處份\n");
sprintf(temp,"\n輸入範利\n:%s",buf);
outs(temp);
outs("\n請依上列範例輸入一行資料(直接enter放棄)\n");
getdata(10, 0,":",buf,65,DOECHO);
if(buf[0])
{
getdata(13,0,"確定新增?(Y/n)",a,2,LCECHO);
if(a[0]!='n')
fprintf(fp,"%-65s[%s]\n",buf,cuser.userid);
}
}
fclose(fp);
clear();
}
int choose_dict()
{
int c;
FILE *fp;
char buf[10][21],data[10][21],cho[130];
move(12,0);
clrtobot();
outs(" ● 字典唷 ◇ 要查哪一本? ●");
if (fp = fopen(REFER, "r"))
{
for (c=0;fscanf(fp,"%s %s",buf[c],data[c])!=EOF ; c++ )
{
sprintf(cho,"\n (%d) %-20s大字典",c+1,buf[c]);
outs(cho);
}
getdata(22 , 14, " ★ 請選擇,[Enter]離開:", 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[cho[0]]);
strcpy(database,data[cho[0]]);
return 1;
}
else
{
return 0;
}
}
}
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 x_dict()
{
if(choose_dict())
use_dict();
}
int
use_dict()
{
FILE *fp;
char lang[150],word[80]="",j,f,buf[120],sys[]="|e:編籍字典";
int i;
setutmpmode(DICT);
if(!HAS_PERM(PERM_SYSOP)) sys[0]=0;
clear();
sprintf(buf," ● %-14s ● ",dict);
strcpy(&buf[100],"\n");
for(;1;)
{
move(0,0);
sprintf(lang," 請輸入關鍵字串(%s) 或指令(h,t,a)\n",dict);
outs(lang);
sprintf(lang,"[<關鍵字>|h:help|t:所有資料|a:新增資料%s]\n:",sys);
outs(lang);
getdata(2, 0,":",word,18, DOECHO);
outs("資料搜尋中請稍候....");
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);clear();continue;}
else
{outs("字串太短,請輸入多一點關鍵字");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(" 任意鍵繼續 Q:離開 ");
j=igetch();
if(j=='q')
{
break;
}
else
{
clear(); move(4,0);outs(buf);
}
}
}
}
}
fclose(fp);
if (i==0)
{
getdata(5, 0, "沒這個資料耶,新增嗎?(y/N)",lang,3,LCECHO);
if(lang[0]=='y')
{
clear();move(4,0);outs(buf);addword(word);
}
}
}
}