コード例 #1
0
ファイル: edit.c プロジェクト: long5313828/ythtbbs
static void
editMsgLine(struct edit *edit)
{
	static int ck, havenewmail;
	if (!edit) {
		ck = 0;
		havenewmail = chkmail();
		return;
	}
	if (talkrequest) {
		talkreply();
		clear();
		edit->redrawall = 1;
	}
	if (++ck >= 10) {
		havenewmail = chkmail();
		ck = 0;
	}
	move(t_lines - 1, 0);
	prints("\033[1;33;44m【%s】",
	       havenewmail ? "\033[5;32m信\033[m\033[1;33;44m" : "  ");
	prints("【%s】",
	       have_msg_unread ? "\033[5;32mMSG\033[m\033[1;33;44m" : "   ");
	prints(" \033[31mCtrl-Q\033[33m 求救 ");
	prints
	    ("状态 [\033[32m%s\033[33m][\033[32m%d\033[33m,\033[32m%d\033[33m][\033[32m%s\033[33m][\033[32m%s\033[33m] ",
	     edit->overwrite ? "Rep" : "Ins", edit->line + 1,
	     edit->col + 1, "X", editview ? " " : "~");
	prints("时间\033[1;33;44m【\033[1;32m%16s\033[33m】     \033[m",
	       Ctime(now_t));
}
コード例 #2
0
ファイル: formosa.c プロジェクト: PichuChen/formosa
void
talk_request(int s)
{
	signal(SIGUSR1, talk_request);

	talkreply();
}
コード例 #3
0
ファイル: mbbsd.c プロジェクト: YanlongLai/Program
static void talk_request() {
    bell();
    bell();
    if(currutmp->msgcount) {
	char buf[200];
	time_t now = time(0);
	
	sprintf(buf, "\033[33;41m★%s\033[34;47m [%s] %s \033[0m",
		utmpshm->uinfo[currutmp->destuip].userid, my_ctime(&now),
		(currutmp->sig == 2) ? "重要消息廣播!(請Ctrl-U,l查看熱訊記錄)"
		: "呼叫、呼叫,聽到請回答");
	move(0, 0);
	clrtoeol();
	outs(buf);
	refresh();
    } else {
	unsigned char mode0 = currutmp->mode;
	char c0 = currutmp->chatid[0];
	screenline_t *screen0 = calloc(t_lines, sizeof(screenline_t));
	extern screenline_t *big_picture;
	
	currutmp->mode = 0;
	currutmp->chatid[0] = 1;
	memcpy(screen0, big_picture, t_lines * sizeof(screenline_t));
 	talkreply();
	currutmp->mode = mode0;
	currutmp->chatid[0] = c0;
	memcpy(big_picture, screen0, t_lines * sizeof(screenline_t));
	free(screen0);
	redoscr();
    }
}
コード例 #4
0
ファイル: edit.c プロジェクト: phoenixgao/fdubbs
void msgline() {
	char buf[256], buf2[STRLEN * 2];
	void display_buffer();
	extern int talkrequest;
	int tmpshow;
	time_t now;

	if (ismsgline <= 0)
		return;
	now = time(0);
	tmpshow = showansi;
	showansi = 1;
	if (talkrequest) {
		talkreply();
		clear();
		showansi = 0;
		display_buffer();
		showansi = 1;
	}
	strcpy(buf, "");
	if (chkmail())
		strcat(buf, "¡¾ÐÅ¡¿");
	else
		strcat(buf, "¡¾  ¡¿");
	strcat(buf, "ÐÅÏä [°´Ctrl-QÇó¾È] ");
	sprintf(
			buf2,
			"[%s][%4.4d,%3.3d][%d] [%2s]",
			insert_character ? "²åÈë" : "¸Äд", currln + 1, currpnt + 1,
			linelen-1, enabledbchar ? "Ë«" : "µ¥");
	strcat(buf, buf2);
	sprintf(buf2, "\033[1;33m¡¾\033[1;32m%.23s\033[33m¡¿\033[m",
			getdatestring(now, DATE_ZH) + 6);
	strcat(buf, buf2);
	move(t_lines - 1, 0);
	clrtoeol();
	prints("%s", buf);
	showansi = tmpshow;
}
コード例 #5
0
ファイル: mbbsd.c プロジェクト: yrchen/Athena
static void 
talk_request()
{
#ifdef  LINUX
	/*
	 * Linux 下連續 page 對方兩次就可以把對方踢出去: 這是由於某些系統一
	 * nal 進來就會將 signal handler 設定為內定的 handler, 不幸的是
	 * default 是將程 erminate. 解決方法是每次 signal 進來就重設 signal
	 * handler
	 */

	signal(SIGUSR1, talk_request);
#endif
	bell();
	if (currutmp->msgcount) {
		char		buf       [200];
		time_t		now = time(0);

		sprintf(buf, "[%s] [%s] %s ",
			(currutmp->destuip)->userid, my_ctime(&now),
			(currutmp->sig == 2) ? "重要消息廣播!(請Ctrl-U,l查看熱訊記錄)" : "呼叫、呼叫,聽到請回答");
		move(0, 0);
		clrtoeol();
		outs(buf);
		refresh();
	} else {
		uschar		mode0 = currutmp->mode;
		char		c0 = currutmp->chatid[0];
		screenline     *screen = (screenline *) calloc(t_lines, sizeof(screenline));
		currutmp->mode = 0;
		currutmp->chatid[0] = 1;
		vs_save(screen);
		talkreply();
		vs_restore(screen);
		currutmp->mode = mode0;
		currutmp->chatid[0] = c0;
	}
}
コード例 #6
0
ファイル: newio.c プロジェクト: zhouqt/kbs
int igetkey()
{
    int mode;
    int ch, last, llast;
    int ret=0;

    if (keybuffer_count) {
        ret = *keybuffer;
        keybuffer++;
        keybuffer_count--;
        return ret;
    }
    mode = last = llast = 0;
//    if (ibufsize == icurrchar)
//        refresh();
    while (1) {
        ch = igetch();
        if (kicked) return KEY_TIMEOUT;

        if (check_calltime()) {
            mode = 0;
            continue;
        }

#if defined(SMTH) || defined(FREE)
        if (scrint&&ch==Ctrl('V')) {
            if (getCurrentUser()&&HAS_PERM(getCurrentUser(),PERM_BASIC)&&!HAS_PERM(getCurrentUser(),PERM_DENYRELAX)&&uinfo.mode!=LOCKSCREEN&&!dicting) {
                dicting=1;
                exec_mbem("@mod:service/libdict.so#dict_main");
                dicting=0;
            }
            continue;
        }
#endif
        if (scrint&&(ch == KEY_TALK) && talkrequest) {
            if (uinfo.mode != CHAT1 && uinfo.mode != CHAT2 && uinfo.mode != CHAT3 && uinfo.mode != CHAT4 && uinfo.mode != TALK && uinfo.mode != PAGE) {
                talkreply();
                return KEY_REFRESH;
            } else
                return KEY_TALK;
        }
        if (mode == 0) {
            if (ch == KEY_ESC) {
                if (ibufsize==icurrchar) {
                    switch (uinfo.mode) {
                        case POSTING:
                        case SMAIL:
                        case EDITUFILE:
                        case EDITSFILE:
                        case NOTEPAD:
                        case EDIT:
                        case EDITANN:
                        case RMAIL:
                        case CALENEDIT:
                        case CSIE_ANNOUNCE:
                        case POSTCROSS:
                            break;
                        default:
                            return KEY_ESC;
                    }
                }
                mode = 1;
            } else {
                ret = ch;
                break;      /* Normal Key */
            }
        } else if (mode == 1) { /* Escape sequence */
            if (ch == '[' || ch == 'O')
                mode = 2;
            else if (ch == '1' || ch == '4')
                mode = 3;
            else {
                KEY_ESC_arg = ch;
                return KEY_ESC;
            }
        } else if (mode == 2) { /* Cursor key */
            if (ch >= 'A' && ch <= 'D') {
                ret = KEY_UP + (ch - 'A');
                break;
            } else if (ch >= 'P' && ch <= 'S') {
                ret = KEY_F1+ch-'P';
                break;
            } else if (ch >= '1' && ch <= '6')
                mode = 3;
            else {
                ret = ch;
                break;
            }
        } else if (mode == 3) { /* Ins Del Home End PgUp PgDn */
            if (ch == '~') {
                ret = KEY_HOME + (last - '1');
                break;
            } else if (ch >= '0' && ch <= '9')
                mode = 4;
            else {
                ret = ch;
                break;
            }
        } else if (mode == 4) {
            if (ch == '~') {
                int k=(llast-'1')*10+(last-'1');
                if (k<=3) ret = KEY_F1+k;
                else ret = KEY_F1+k-1;
                if (scrint&&ret==KEY_F10&&!incalendar) {
                    mode=0;
                    if (getCurrentUser()&&!HAS_PERM(getCurrentUser(),PERM_DENYRELAX)&&uinfo.mode!=LOCKSCREEN)
                        exec_mbem("@mod:service/libcalendar.so#calendar_main");
                    continue;
                } else if (scrint&&ret==KEY_F6) {
                    mode=0;
                    auto_chinese();
                    continue;
                } else if (scrint&&ret==KEY_F9) {
                    mode=0;
                    if (getCurrentUser()&& (check_mail_perm(getCurrentUser(),NULL) == 0))
                        mailscr();
                    continue;
                }

                break;
            } else {
                ret = ch;
                break;
            }
        }
        llast = last;
        last = ch;
    }

#ifdef NEW_HELP
    if (scrint && ret == KEY_F1 && uinfo.mode != LOCKSCREEN && !f1ing) {
        int oldmode = uinfo.mode;

        modify_user_mode(HELP);
        f1ing=1;
        newhelp(helpmode);
        f1ing=0;
        modify_user_mode(oldmode);

        return igetkey();
    }
#endif

    if (scrint&&keymem_total&&!skip_key&&!ingetdata) {
        int i,j,p;
        for (i=0; i<keymem_total; i++) {
            p=!keymem[i].status[0];
            if (keymem[i].status[0]==-1) continue;
            j=0;
            while (keymem[i].status[j]&&j<10) {
                if (keymem[i].status[j]==uinfo.mode) p=1;
                j++;
            }
            if (p&&ret==keymem[i].key) {
                j=0;
                while (keymem[i].mapped[j]&&j<10) j++;
                if (j==0) continue;
                ret = keymem[i].mapped[0];
                keybuffer_count = j-1;
                keybuffer = keymem[i].mapped+1;
                break;
            }
        }
    }

    return ret;
}
コード例 #7
0
ファイル: edit.c プロジェクト: PichuChen/formosa
int vedit(const char *filename, const char *saveheader, char *bname)
{
	int ch, foo;
	int lastcharindent = -1;
	BOOL firstkey = TRUE;
	char bakfile[PATHLEN];
	int old_rows = t_lines, old_columns = t_columns;

	sethomefile(bakfile, curuser.userid, UFNAME_EDIT);

	if ((saveheader || uinfo.mode == EDITPLAN || uinfo.mode == EDITBMWEL)
	    && isfile(bakfile)	/* lthuang */
#ifdef GUEST
	 && strcmp(curuser.userid, GUEST)
#endif
	 )
	{
		clear();
		outs(_msg_edit_8);
		if (getkey() != '2')
			mycp(bakfile, filename);
	}
	if (!isfile(filename))
		unlink(bakfile);
	if (saveheader)
		do_article_sig(filename);

	read_file(filename);

	top_of_win = firstline;
	currline = firstline;
	curr_window_line = 0;
	currpnt = 0;

	ansi_mode = FALSE;

	clear();
	display_buffer();

	move(curr_window_line, currpnt);
	while ((ch = getkey()) != EOF)
	{
		if (firstkey)
		{
			firstkey = FALSE;
			show_help_msg();
		}
		if (talkrequest)	/* lthuang */
		{
			backup_file(bakfile);
			talkreply();
			pressreturn();
			ch = CTRL('G');		/* redraw screen */
		}
		else if (msqrequest)	/* lthuang */
		{
			msqrequest = FALSE;
			msq_reply();
#if 0
			ch = CTRL('G');
#endif
		}
		if (old_rows != t_lines || old_columns != t_columns)
		{
			static const char *msg_resized = "螢幕大小已改變, 按(Ctrl-G)回到頁首!";

			old_rows = t_lines;
			old_columns = t_columns;

			top_of_win = firstline;
			currline = top_of_win;
			curr_window_line = 0;
			currpnt = 0;
			shift = 0;
			redraw_everything = TRUE;
			move(t_lines / 2, (t_columns - strlen(msg_resized)) / 2);
			outs(msg_resized);
			while (getkey() != CTRL('G'));
		}
		else if (ch < 0x100 && isprint2(ch))
		{
			insert_char(ch);
			lastcharindent = -1;
		}
		else
			switch (ch)
			{
			case KEY_UP:
				if (lastcharindent == -1)
					lastcharindent = currpnt;
				if (!currline->prev)
				{
					bell();
					break;
				}
				curr_window_line--;
				currline = currline->prev;
				currpnt = (currline->len > lastcharindent) ? lastcharindent : currline->len;
				break;
			case KEY_DOWN:
				if (lastcharindent == -1)
					lastcharindent = currpnt;
				if (!currline->next)
				{
					bell();
					break;
				}
				curr_window_line++;
				currline = currline->next;
				currpnt = (currline->len > lastcharindent) ? lastcharindent : currline->len;
				break;
			default:
				lastcharindent = -1;
				switch (ch)
				{
				case CTRL('T'):
					top_of_win = back_line(lastline, b_lines - 2);
					currline = lastline;
					curr_window_line = getlineno();
					currpnt = 0;
					redraw_everything = TRUE;
					break;
				case CTRL('S'):
					top_of_win = firstline;
					currline = top_of_win;
					curr_window_line = 0;
					currpnt = 0;
					redraw_everything = TRUE;
					break;
				case '\t':
					do
					{
						insert_char(' ');
					}
					while (currpnt & 0x7);
					break;
				case CTRL('U'):
				case CTRL('V'):
					insert_char(0x1b);
					break;
				case CTRL('C'):
					insert_char(0x1b);
					insert_char('[');
					insert_char('m');
					break;
				case KEY_RIGHT:
				case CTRL('F'):
					if (currline->len == currpnt)
					{
						if (!currline->next)
							bell();
						else
						{
							currpnt = 0;
							curr_window_line++;
							currline = currline->next;
						}
					}
					else
						currpnt++;
					break;
				case KEY_LEFT:
				case CTRL('B'):
					if (currpnt == 0)
					{
						if (!currline->prev)
							bell();
						else
						{
							currline = currline->prev;
							currpnt = currline->len;
							curr_window_line--;
						}
					}
					else
						currpnt--;
					break;
				case CTRL('G'):
					clear();
					redraw_everything = TRUE;
					break;
				case CTRL('Z'):
					vedit_help();
					break;
				case KEY_PGUP:
				case CTRL('P'):
					top_of_win = back_line(top_of_win, b_lines - 2);
					currline = top_of_win;
					currpnt = 0;
					curr_window_line = 0;
					redraw_everything = TRUE;
					break;
				case KEY_PGDN:
				case CTRL('N'):
					top_of_win = forward_line(top_of_win, b_lines - 2);
					currline = top_of_win;
					currpnt = 0;
					curr_window_line = 0;
					redraw_everything = TRUE;
					break;
				case KEY_HOME:
				case CTRL('A'):
					currpnt = 0;
					break;
				case KEY_END:
				case CTRL('E'):
					currpnt = currline->len;
					break;
				case CTRL('R'):
#if 0
					backup_file(bakfile);
#endif
					msq_reply();
#if 0
					redraw_everything = TRUE;	/* lthuang */
#endif
					break;
				case CTRL('Q'):
					ansi_mode = TRUE;
					display_buffer();
					pressreturn();
					ansi_mode = FALSE;
					display_buffer();
					break;
				case CTRL('X'):
				case CTRL('W'):
					backup_file(bakfile);
					clear();
					foo = write_file(filename, saveheader, bname);
					if (foo == BACKUP_EDITING)
						return foo;
					else if (foo != KEEP_EDITING)
					{
						unlink(bakfile);
						return foo;
					}
					redraw_everything = TRUE;	/* lthuang */
					break;
				case '\r':
				case '\n':
					split(currline, currpnt);
					/* lthuang: reduce the times of backup */
					if (total_num_of_line % 7 == 0)
						backup_file(bakfile);
					break;
				case '\177':
				case CTRL('H'):
					if (currpnt == 0)
					{
						if (!currline->prev)
						{
							bell();
							break;
						}
						curr_window_line--;
						currline = currline->prev;
						currpnt = currline->len;
						if (*killsp(currline->next->data) == '\0') {
							delete_line(currline->next);
							redraw_everything = TRUE;
						} else {
							join_currline();
						}
						if (curr_window_line == -1) {
							curr_window_line = 0;
							top_of_win = currline;
							rscroll();
						}
						break;
					}
					currpnt--;
					delete_char();
					break;
				case CTRL('D'):
					if (currline->len == currpnt)
						join_currline();
					else
						delete_char();
					break;
				case CTRL('Y'):
					currpnt = 0;
					currline->len = 0;
					delete_currline();
					break;
				case CTRL('K'):
					if (currline->len == 0)
						delete_currline();
					else if (currline->len == currpnt)
						join_currline();
					else
					{
						currline->len = currpnt;
						currline->data[currpnt] = '\0';
					}
					break;
				default:
					break;
				}
				break;
			}
		if (curr_window_line == -1)
		{
			curr_window_line = 0;
			if (!top_of_win->prev)
			{
				indigestion(6);
				bell();
			}
			else
			{
				top_of_win = top_of_win->prev;
				rscroll();
			}
		}
		if (curr_window_line == t_lines - 1)
		{
			curr_window_line = t_lines - 2;
			if (!top_of_win->next)
			{
				indigestion(7);
				bell();
			}
			else
			{
				top_of_win = top_of_win->next;
				scroll();
			}
		}

		/* lthuang: 99/07 */
		if (currpnt - shift >= t_columns - 1)
		{
			shift = (currpnt / (t_columns - 1)) * (t_columns - 1) - 1;
			redraw_everything = TRUE;
		}
		else if (currpnt - shift < 0)
		{
			shift = 0;
			redraw_everything = TRUE;
		}

		if (redraw_everything)
		{
			display_buffer();
			redraw_everything = FALSE;
		}
		else
		{
			move(curr_window_line, 0);
			clrtoeol();	/* lthuang */
			vedit_outs(currline->data);
		}

		move(curr_window_line, currpnt - shift);	/* lthuang: 99/07 */
	}
	if (uinfo.mode == POSTING || uinfo.mode == SMAIL)
		unlink(filename);
	return ABORT_EDITING;
}