⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ng.c

📁 早期freebsd实现
💻 C
📖 第 1 页 / 共 3 页
字号:
#ifdef VERIFY	printcmd();#endif	putchar('\n') FLUSH;	if (*buf == 'h') {#ifdef VERBOSE	    IF(verbose)	    {		fputs("\Type + to enter select thread mode using all the unread articles.\n\(The selected threads will be marked as unread and displayed as usual.)\n\",stdout) FLUSH;		fputs(u_help_thread,stdout);		fputs("\Type a to mark all articles in this group as unread.\n\Type n to change nothing.\n\",stdout) FLUSH;	    }	    ELSE#endif#ifdef TERSE	    {		fputs("\+ to select threads from the unread.\n\",stdout) FLUSH;		fputs(u_help_thread,stdout);		fputs("\a to mark all articles unread.\n\n to change nothing.\n\",stdout) FLUSH;	    }#endif	    goto reask_unread;	}	else if (*buf == 'n' || *buf == 'q')	    return AS_ASK;	else if (*buf == 't' && u_help_thread != nullstr) {	    unkill_thread(artp->subj->thread);	    if ((artp = first_art(artp->subj)) != Nullart)		art = article_num(artp);	} else if (*buf == 's' && u_help_thread != nullstr)	    unkill_subthread(artp);	else if (*buf == 'a') {	    register ARTICLE *ap;	    check_first(absfirst);	    ap = article_ptr(absfirst);	    for (i = absfirst; i <= lastart; i++, ap++)		if ((ap->flags & (AF_READ|AF_MISSING)) == AF_READ) {		    ap->flags &= ~AF_READ;		/* mark as unread */		    toread[ng]++;		}	    count_subjects(CS_NORM);	}	else if (*buf == '+') {	    *buf = 'U';	    goto run_the_selector;	}	else {	    fputs(hforhelp,stdout) FLUSH;	    settle_down();	    goto reask_unread;	}	return AS_NORM;    }    case '[':			/* goto parent article */    case '{':			/* goto thread's root article */	if (artp) {	    if (!find_parent(*buf == '{')) {		register char *cp = (*buf=='['?"parent":"root");#ifdef VERBOSE		IF(verbose)		    printf("\nThere is no %s article prior to this one.\n",			cp) FLUSH;		ELSE#endif#ifdef TERSE		    printf("\nNo prior %s.\n",cp) FLUSH;#endif		return AS_ASK;	    }	    reread = TRUE;	    return AS_NORM;	}not_threaded:	if (ThreadedGroup) {#ifdef VERBOSE	    IF(verbose)		fputs("\nThis article is not threaded.\n",stdout) FLUSH;	    ELSE#endif#ifdef TERSE		fputs("\nUnthreaded article.\n",stdout) FLUSH;#endif	    return AS_ASK;	}#ifdef VERBOSE	IF(verbose)	    fputs("\nThis group is not threaded.\n",stdout) FLUSH;	ELSE#endif#ifdef TERSE	    fputs("\nUnthreaded group.\n",stdout) FLUSH;#endif	return AS_ASK;    case ']':			/* goto child article */    case '}':			/* goto thread's leaf article */	if (artp) {	    if (!find_leaf(*buf == '}')) {#ifdef VERBOSE		IF(verbose)		    fputs("\n\This is the last leaf in this tree.\n",stdout) FLUSH;		ELSE#endif#ifdef TERSE		    fputs("\nLast leaf.\n",stdout) FLUSH;#endif		return AS_ASK;	    }	    reread = TRUE;	    return AS_NORM;	}	goto not_threaded;    case '(':			/* goto previous sibling */    case ')':			/* goto next sibling */	if (artp) {	    if (!(*buf == '(' ? find_prev_sib() : find_next_sib())) {		register char *cp = (*buf == '(' ? "previous" : "next");#ifdef VERBOSE		IF(verbose)		    printf("\nThis article has no %s sibling.\n",cp) FLUSH;		ELSE#endif#ifdef TERSE		    printf("\nNo %s sibling.\n",cp) FLUSH;#endif		return AS_ASK;	    }	    reread = TRUE;	    return AS_NORM;	}	goto not_threaded;    case 'T':	if (!ThreadedGroup)	    goto not_threaded;	/* FALL THROUGH */    case 'A':	if (!artp) {	    printf("You're not at an article.\n");	    return AS_ASK;	}	switch (ask_memorize(*buf)) {	case ',':  case 'j':	    return AS_NORM;	}	return AS_ASK;    case 'K':	if (!artp) {	    printf("You're not at an article.\n");	    return AS_ASK;	}	/* first, write kill-subject command */	(void)art_search(buf, (sizeof buf), TRUE);	art = curr_art;	artp = curr_artp;	kill_subject(artp->subj,KF_ALL);/* take care of any prior subjects */	return AS_NORM;    case ',':		/* kill this node and all descendants */	if (ThreadedGroup)	    kill_subthread(artp,KF_ALL);	else if (art >= absfirst && art <= lastart)	    mark_as_read();	return AS_NORM;    case 'J':		/* Junk all nodes in this thread */	if (ThreadedGroup) {	    kill_thread(artp->subj->thread,KF_ALL);	    return AS_NORM;	}	/* FALL THROUGH */    case 'k':		/* kill current subject */	kill_subject(artp->subj,KF_ALL);	if (last_cached < lastart) {	    *buf = 'k';	    goto normal_search;	}	return AS_NORM;    case 't':	carriage_return();#ifndef CLEAREOL	erase_eol();		/* erase the prompt */#else	if (erase_screen && can_home_clear)	    clear_rest();	else	    erase_eol();	/* erase the prompt */#endif /* CLEAREOL */	fflush(stdout);	page_line = 1;	entire_tree(curr_artp);	return AS_ASK;    case ':':			/* execute command on selected articles */	page_line = 1;	if (!use_selected())	    return AS_INP;	putchar('\n');	art = curr_art;	artp = curr_artp;	return AS_ASK;    case 'p':			/* find previous unread article */	do {	    dec_art(selected_only,FALSE);	} while (art >= firstart && (was_read(art) || !parseheader(art)));#ifdef ARTSEARCH	srchahead = 0;#endif	if (art >= firstart)	    return AS_NORM;	art = absfirst;		/* FALL THROUGH */    case 'P':		/* goto previous article */	dec_art(FALSE,TRUE);      check_dec_art:	if (art < absfirst) {#ifdef VERBOSE	    IF(verbose)		printf("\nThere are no%s%s articles prior to this one.\n",			*buf=='P'?nullstr:" unread",			selected_only?" selected":nullstr) FLUSH;	    ELSE#endif#ifdef TERSE		printf("\nNo previous%s%s articles\n",			*buf=='P'?nullstr:" unread",			selected_only?" selected":nullstr) FLUSH;#endif	    art = curr_art;	    artp = curr_artp;	    return AS_ASK;	}	reread = TRUE;#ifdef ARTSEARCH	srchahead = 0;#endif	return AS_NORM;    case '-':	if (recent_art >= 0) {	    art = recent_art;	    artp = recent_artp;	    reread = TRUE;	    forcelast = TRUE;#ifdef ARTSEARCH	    srchahead = -(srchahead != 0);#endif	    return AS_NORM;	}	else {	    exit_code = NG_MINUS;	    return AS_CLEAN;	}    case 'n':		/* find next unread article? */	if (art > lastart) {	    if (!toread[ng])		return AS_CLEAN;	    top_article();	}#ifdef ARTSEARCH	else if (scanon && !ThreadedGroup && srchahead) {	    *buf = Ctl('n');	    if (!next_art_with_subj())		goto normal_search;	    return AS_NORM;	}#endif	else	    inc_art(selected_only,FALSE);#ifdef ARTSEARCH	srchahead = 0;#endif	return AS_NORM;    case 'N':			/* goto next article */	if (art > lastart)	    if (!first_subject) {		art = absfirst;		artp = article_ptr(art);	    } else {		artp = first_subject->articles;		if (artp->flags & AF_MISSING)		    inc_art(FALSE,TRUE);		else		    art = article_num(artp);	    }	else	    inc_art(FALSE,TRUE);	if (art <= lastart)	    reread = TRUE;#ifdef ARTSEARCH	srchahead = 0;#endif	return AS_NORM;    case '$':	art = lastart+1;	artp = Nullart;	forcelast = TRUE;#ifdef ARTSEARCH	srchahead = 0;#endif	return AS_NORM;    case '1': case '2': case '3':	/* goto specified article */    case '4': case '5': case '6':	/* or do something with a range */    case '7': case '8': case '9': case '.':	forcelast = TRUE;	switch (numnum()) {	case NN_INP:	    return AS_INP;	case NN_ASK:	    return AS_ASK;	case NN_REREAD:	    reread = TRUE;#ifdef ARTSEARCH	    if (srchahead)		srchahead = -1;#endif	    break;	case NN_NORM:	    if (was_read(art)) {		top_article();		pad(just_a_sec/3);	    }	    else {		putchar('\n');		return AS_ASK;	    }	    break;	}	return AS_NORM;    case Ctl('k'):	edit_kfile();	return AS_ASK;    case Ctl('n'):	/* search for next article with same subject */    case Ctl('p'):	/* search for previous article with same subject */	if (*buf == Ctl('n')? next_art_with_subj() : prev_art_with_subj())	    return AS_NORM;    case '/': case '?':normal_search:#ifdef ARTSEARCH    {		/* search for article by pattern */	char cmd = *buf;		reread = TRUE;		/* assume this */	page_line = 1;	switch (art_search(buf, (sizeof buf), TRUE)) {	case SRCH_ERROR:	    art = curr_art;	    return AS_ASK;	case SRCH_ABORT:	    art = curr_art;	    return AS_INP;	case SRCH_INTR:#ifdef VERBOSE	    IF(verbose)		printf("\n(Interrupted at article %ld)\n",(long)art) FLUSH;	    ELSE#endif#ifdef TERSE		printf("\n(Intr at %ld)\n",(long)art) FLUSH;#endif	    art = curr_art;	    /* restore to current article */	    return AS_ASK;	case SRCH_DONE:	    fputs("done\n",stdout) FLUSH;	    pad(just_a_sec/3);	/* 1/3 second */	    if (!srchahead) {		art = curr_art;		return AS_ASK;	    }	    top_article();	    reread = FALSE;	    return AS_NORM;	case SRCH_SUBJDONE:#ifdef UNDEF	    fputs("\n\n\n\nSubject not found.\n",stdout) FLUSH;	    pad(just_a_sec/3);	/* 1/3 second */#endif	    top_article();	    reread = FALSE;	    return AS_NORM;	case SRCH_NOTFOUND:	    fputs("\n\n\n\nNot found.\n",stdout) FLUSH;	    art = curr_art;  /* restore to current article */	    return AS_ASK;	case SRCH_FOUND:	    if (cmd == Ctl('n') || cmd == Ctl('p')) {		oldsubject = TRUE;		reread = FALSE;	    }	    break;	}	return AS_NORM;    }#else    buf[1] = '\0';    notincl(buf);    return AS_ASK;#endif    case 'u':			/* unsubscribe from this newsgroup? */	rcchar[ng] = NEGCHAR;	return AS_CLEAN;    case 'M':	if (art <= lastart) {	    delay_unmark(artp);	    oneless(artp);	    printf("\nArticle %ld will return.\n",(long)art) FLUSH;	}	return AS_ASK;    case 'm':	if (art >= absfirst && art <= lastart) {	    unmark_as_read();	    printf("\nArticle %ld marked as still unread.\n",(long)art) FLUSH;	}	return AS_ASK;    case 'c':			/* catch up */	switch (ask_catchup()) {	case 'n':	    return AS_ASK;	case 'u':	    return AS_CLEAN;	}	art = lastart+1;	artp = Nullart;	forcelast = FALSE;	return AS_NORM;    case 'Q':	exit_code = NG_ASK;	/* FALL THROUGH */    case 'q':			/* go back up to newsgroup level? */	return AS_CLEAN;    case 'j':	putchar('\n') FLUSH;	if (art >= absfirst && art <= lastart)	    mark_as_read();	return AS_ASK;    case 'h': {			/* help? */	int cmd;	if ((cmd = help_art()) > 0)	    pushchar(cmd);	return AS_ASK;    }    case '&':	if (switcheroo()) /* get rest of command */	    return AS_INP;	/* if rubbed out, try something else */	return AS_ASK;    case '#':#ifdef VERBOSE	IF(verbose)	    printf("\nThe last article is %ld.\n",(long)lastart) FLUSH;	ELSE#endif#ifdef TERSE	    printf("\n%ld\n",(long)lastart) FLUSH;#endif	return AS_ASK;    case '+':			/* enter selection mode */run_the_selector:	*buf = do_selector(*buf);	switch (*buf) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -