荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: hace.bbs@hace.dhs.org (半边海), 信区: InstallBBS
标 题: [转载]实现 `个人文章阅读' v0.2 [3]
发信站: 半边海BBS (Mon Apr 7 18:36:02 2003)
转信站: SZU!news.tiaozhan.com!news.bjsing.net!SCUT-x12
【 以下文字转载自 sysop 讨论区 】
【 原文由 hace 所发表 】
实现 `个人文章阅读' v0.2 [1]
$$ 2003.04.07 hace $ BBS 版本: firebird2000 v1106 $$
i.3 继续修改 announce.c
i.3.1 修改函数 a_menu()
void a_menu(maintitle, path, lastlevel, lastbmonly)
char *maintitle, *path;
int lastlevel, lastbmonly;
{
MENU me;
char fname[PATHLEN], tmp[STRLEN];
int ch;
char *bmstr;
char buf[STRLEN];
++ char h_buf[STRLEN]; //add by hace
++ char h_tmp[STRLEN]; //add by hace
int bmonly;
int number = 0;
int savemode;
++ int h_lastbmonly=lastbmonly; //add by hace
++ int i;
++ lastbmonly=0;
++ memset(h_buf,0,sizeof(h_buf)); // add by hace
++ memset(h_tmp,0,sizeof(h_tmp)); //add by hace
++ if(h_lastbmonly!=-2003){ //add by hace
char something[PATHLEN + 20]; //add by wujian
modify_user_mode(DIGEST);
strcpy(something, path);
strcat(something, "/welcome");
show_help(something);
++ }else{
++ modify_user_mode(PERSONALREAD);
++ }
strcpy(me.mtitle, maintitle);
me.path = path;
bmonly = lastbmonly;
me.level = lastlevel;
a_loadnames(&me);
memset(buf, 0, STRLEN);
strncpy(buf, me.mtitle, STRLEN);
bmstr = strstr(buf + 38, "(BM:");
if (bmstr != NULL) {
if (chk_currBM(bmstr + 4))
me.level |= PERM_BOARDS;
else if (bmonly == 1 && !HAS_PERM(PERM_BOARDS))
return;
}
if (strstr(me.mtitle, "(BM: BMS)") || strstr(me.mtitle, "(BM: SECRET)")
|| strstr(me.mtitle, "(BM: SYSOPS)"))
bmonly = 1;
strcpy(buf, me.mtitle);
bmstr = strstr(buf, "(BM:");
me.page = 9999;
me.now = 0;
while (1) {
if (me.now >= me.num && me.num > 0) {
me.now = me.num - 1;
} else if (me.now < 0) {
me.now = 0;
}
if (me.now < me.page || me.now >= me.page + A_PAGESIZE) {
me.page = me.now - (me.now % A_PAGESIZE);
++ if(h_lastbmonly!=-2003) //add by hace
++ a_showmenu(&me);
++ else {
++ me.level=-2003;
a_showmenu(&me);
++ }
}
move(3 + me.now - me.page, 0);
prints("->");
ch = egetch();
move(3 + me.now - me.page, 0);
prints(" ");
if (ch == 'Q' || ch == 'q' || ch == KEY_LEFT || ch == EOF)
break;
EXPRESS: /* Leeward 98.09.13 */
switch (ch) {
case KEY_UP:
case 'K':
case 'k':
if (--me.now < 0)
me.now = me.num - 1;
break;
case KEY_DOWN:
case 'J':
case 'j':
if (++me.now >= me.num)
me.now = 0;
break;
case KEY_PGUP:
case Ctrl('B'):
if (me.now >= A_PAGESIZE)
me.now -= A_PAGESIZE;
else if (me.now > 0)
me.now = 0;
else
me.now = me.num - 1;
break;
case KEY_PGDN:
case Ctrl('F'):
case ' ':
if (me.now < me.num - A_PAGESIZE)
me.now += A_PAGESIZE;
else if (me.now < me.num - 1)
me.now = me.num - 1;
else
me.now = 0;
break;
case Ctrl('C'):
++ if(h_lastbmonly==-2003)break; //取消在`个人文章'里转载
if (me.num == 0)
break;
set_safe_record();
if (!HAS_PERM(PERM_POST))
break;
sprintf(fname, "%s/%s", path, me.item[me.now]->fname);
if (!dashf(fname))
break;
if (me.now < me.num) {
char bname[30];
clear();
if (get_a_boardname(bname, "请输入要转贴的讨论区名称: ")) {
move(1, 0);
if (deny_me(bname)) {
prints("\n\n您尚无权限在 %s 发表文章.", bname);
pressreturn();
me.page = 9999;
break;
}
sprintf(tmp, "你确定要转贴到 %s 板吗", bname);
if (askyn(tmp, NA, NA) == 1) {
Postfile(fname, bname, me.item[me.now]->title, 0);
move(3, 0);
sprintf(tmp, "^[[1m已经帮你转贴至 %s 板了^[[m", bname);
prints(tmp);
refresh();
sleep(1);
}
}
me.page = 9999;
}
show_message(NULL);
break;
case 'h':
++ if(h_lastbmonly==-2003)break; //在`个人文章区'里取消显示精华区帮助
show_help("help/announcereadhelp");
me.page = 9999;
break;
case 'M':
savemode = uinfo.mode;
m_new();
modify_user_mode(savemode);
me.page = 9999;
break;
#if 0
case 'L':
savemode = uinfo.mode;
m_read();
modify_user_mode(savemode);
me.page = 9999;
break;
#endif
case '\n':
case '\r':
if (number > 0) {
me.now = number - 1;
number = 0;
continue;
}
case 'R':
case 'r':
case KEY_RIGHT:
if (me.now < me.num) {
if (me.item[me.now]->host != NULL) {
if (me.item[me.now]->fname[0] == '0') {
if (get_con(me.item[me.now]->host,
me.item[me.now]->port) != -1) {
char tmpfile[30];
GOPHER tmp;
extern GOPHER *tmpitem;
tmpitem = &tmp;
strcpy(tmp.server, me.item[me.now]->host);
strcpy(tmp.file, me.item[me.now]->fname);
sprintf(tmp.title, "0%s", me.item[me.now]->title);
tmp.port = me.item[me.now]->port;
enterdir(me.item[me.now]->fname);
setuserfile(tmpfile, "gopher.tmp");
savetmpfile(tmpfile);
ansimore(tmpfile, YEA);
unlink(tmpfile);
}
} else {
gopher(me.item[me.now]->host, me.item[me.now]->fname,
me.item[me.now]->port, me.item[me.now]->title);
}
me.page = 9999;
break;
} else
sprintf(fname, "%s/%s", path, me.item[me.now]->fname);
if (dashf(fname)) {
/* Leeward 98.09:在精华区阅读文章到末尾时,用上/下箭头直接跳转到前/后一项 */
if (ansimore(fname, NA) == KEY_UP) {
if (--me.now < 0)
me.now = me.num - 1;
ch = KEY_RIGHT;
goto EXPRESS;
}
++ if(h_lastbmonly!=-2003){ //add by hace
prints("^[[1m^[[44m^[[31m
^[[1m^[[44m^[[31m[阅读精华区资料] ^[[33m结束Q,
│ 上一项资料 U,↑│ 下一项资料 <Enter>,
<Space>,↓ ^[[m");
++ }else{
++ prints("^[[1m^[[44m^[[31m[个人文章阅读] ^[[33m结束
++ Q,麪│ 上一项资料 U,↑│ 下一项资料
++ <Enter>,<Space>,↓ ^[[m");
++ }
switch (ch = egetch()) {
case KEY_DOWN:
case ' ':
case '\n':
if (++me.now >= me.num)
me.now = 0;
ch = KEY_RIGHT;
goto EXPRESS;
case KEY_UP:
case 'u':
case 'U':
if (--me.now < 0)
me.now = me.num - 1;
ch = KEY_RIGHT;
goto EXPRESS;
case 'h':
goto EXPRESS;
default:
break;
}
} else if (dashd(fname)) {
a_menu(me.item[me.now]->title, fname, me.level, bmonly);
}
me.page = 9999;
}
break;
++ case '/': //在精华区或个人文章区里可以按 / 和 ? 查找标题
++ case '?': // `/' 为向后查找, `?' 为向前查找
++ strcpy(h_buf,h_tmp);
++ if(ch=='/')
++ sprintf(tmp,"向后查找字符 [%s]:",h_buf);
++ else
++ sprintf(tmp,"向前查找字符 [%s]:",h_buf);
++ a_prompt(-2,tmp,h_tmp,20);
++ if(h_tmp[0]==0)strcpy(h_tmp,h_buf);
++ if(h_tmp[0]==0)break;
++ h_tmp[strlen(h_tmp)]=0;
++ if(ch=='/'){
++ for(i=me.now+1;i<me.num;i++)
++ if(strstr(me.item[i]->title,h_tmp)!=NULL){
++ me.now=i;
++ break;
++ }
++ }else{
++ for(i=me.now-1;i>=0;i--)
++ if(strstr(me.item[i]->title,h_tmp)!=NULL){
++ me.now=i;
++ break;
++ }
++ }
++ break;
-- case '/': // 原来的 `/' 已被用于查找标题,见上,故改为 `w'
++ case 'w': //add by hace
++ // 按 `w' 时可跳转精华区或个人文章区
++ if(h_lastbmonly!=-2003){
char found[256];
if (a_menusearch(path, NULL, found)) {
a_menu("", found, ((HAS_PERM(PERM_ANNOUNCE) ||
HAS_PERM(PERM_SYSOP)
|| HAS_PERM(PERM_OBOARDS)) ? PERM_BOARDS : 0), 0);
me.page = 9999;
}
++ }else{
++ char h_path[512],lookid[IDLEN+6];
++ move(t_lines-1,0);
++ a_prompt(-2,"您想看谁的文章: ",lookid,20);
++ if(!getuser(lookid) || lookid[0]==0){
++ presskeyfor("经查实,无此ID...",t_lines-2);
++ }else{
++ sprintf(h_path,"%s/%c/%s",PerPostPath,toupper(lookid[0]),
++ lookid);
++ a_menu("", h_path,0,-2003);
++ me.page = 9999;
++ }
++ }
break;
#ifdef INTERNET_EMAIL
case 'F':
case 'U':
if (me.now < me.num && HAS_PERM(PERM_BASIC)) {
a_forward(path, me.item[me.now], ch == 'U');
me.page = 9999;
}
break;
#endif
case '!':
if (!Q_Goodbye())
break; /* youzi leave */
}
if (ch >= '0' && ch <= '9') {
number = number * 10 + (ch - '0');
ch = '\0';
} else {
number = 0;
}
++ if(h_lastbmonly!=-2003){ //add by hace , 取消在个人文章区里管理
if (me.level & PERM_BOARDS)
a_manager(&me, ch);
++ }
}
for (ch = 0; ch < me.num; ch++)
free(me.item[ch]);
}
--
/
/__ __ __ __
/ / / ) / /__)
/ / \_/\ \__ \__
※ 来源:·半边海BBS hace.dhs.org·[FROM: 深海] --
※ 转载:·半边海BBS hace.dhs.org·[FROM: hace]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店