Exemplo n.º 1
0
static void writelog(FILE *file, const char *buf)
{
    static uchar ubuf[512];
    size_t len = strlen(buf), carry = 0;
    while(carry < len)
    {
        size_t numu = encodeutf8(ubuf, sizeof(ubuf)-1, &((const uchar *)buf)[carry], len - carry, &carry);
        if(carry >= len) ubuf[numu++] = '\n';
        fwrite(ubuf, 1, numu, file);
    }
}
Exemplo n.º 2
0
static void processkey(WINDISPLAY *mod, WINWINDOW *win, TUINT type, TINT code)
{
	TIMSG *imsg;
	TINT numchars = 0;
	WCHAR buff[2];

	getqualifier(mod, win);

	switch (code)
	{
		case VK_LEFT:
			code = TKEYC_CRSRLEFT;
			break;
		case VK_UP:
			code = TKEYC_CRSRUP;
			break;
		case VK_RIGHT:
			code = TKEYC_CRSRRIGHT;
			break;
		case VK_DOWN:
			code = TKEYC_CRSRDOWN;
			break;

		case VK_ESCAPE:
			code = TKEYC_ESC;
			break;
		case VK_DELETE:
			code = TKEYC_DEL;
			break;
		case VK_BACK:
			code = TKEYC_BCKSPC;
			break;
		case VK_TAB:
			code = TKEYC_TAB;
			break;
		case VK_RETURN:
			code = TKEYC_RETURN;
			break;

		case VK_HELP:
			code = TKEYC_HELP;
			break;
		case VK_INSERT:
			code = TKEYC_INSERT;
			break;
		case VK_PRIOR:
			code = TKEYC_PAGEUP;
			break;
		case VK_NEXT:
			code = TKEYC_PAGEDOWN;
			break;
		case VK_HOME:
			code = TKEYC_POSONE;
			break;
		case VK_END:
			code = TKEYC_POSEND;
			break;
		case VK_PRINT:
			code = TKEYC_PRINT;
			break;
		case VK_SCROLL:
			code = TKEYC_SCROLL;
			break;
		case VK_PAUSE:
			code = TKEYC_PAUSE;
			break;
		case VK_DECIMAL:
			code = '.';
			imsg->timsg_Qualifier |= TKEYQ_NUMBLOCK;
			break;
		case VK_ADD:
			code = '+';
			imsg->timsg_Qualifier |= TKEYQ_NUMBLOCK;
			break;
		case VK_SUBTRACT:
			code = '-';
			imsg->timsg_Qualifier |= TKEYQ_NUMBLOCK;
			break;
		case VK_MULTIPLY:
			code = '*';
			imsg->timsg_Qualifier |= TKEYQ_NUMBLOCK;
			break;
		case VK_DIVIDE:
			code = '/';
			imsg->timsg_Qualifier |= TKEYQ_NUMBLOCK;
			break;

		case VK_F1: case VK_F2: case VK_F3: case VK_F4:
		case VK_F5: case VK_F6: case VK_F7: case VK_F8:
		case VK_F9: case VK_F10: case VK_F11: case VK_F12:
			code = (TUINT) (code - VK_F1) + TKEYC_F1;
			break;
		default:
			numchars = ToUnicode(code, 0, win->fbv_KeyState,
				buff, 2, 0);
			if (numchars > 0)
				code = buff[0];
	}

	if ((win->fbv_InputMask & type) &&
		fb_getimsg(mod, win, &imsg, type))
	{
		ptrdiff_t len;
		imsg->timsg_Code = code;
		len = (ptrdiff_t)
			encodeutf8(imsg->timsg_KeyCode, imsg->timsg_Code) -
			(ptrdiff_t) imsg->timsg_KeyCode;
		imsg->timsg_KeyCode[len] = 0;
		fb_sendimsg(mod, win, imsg);
	}
}