精華區beta SetupBBS 關於我們 聯絡資訊
/*===============================*/ /*== 大字典 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); } } } }