亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? window.c

?? 遠(yuǎn)程登陸工具軟件源碼 用于遠(yuǎn)程登陸unix
?? C
?? 第 1 頁 / 共 5 頁
字號(hào):
		   str, MB_OK | MB_ICONEXCLAMATION);
	sfree(str);
	cleanup_exit(1);
    }

    if (!prev) {
	wndclass.style = 0;
	wndclass.lpfnWndProc = WndProc;
	wndclass.cbClsExtra = 0;
	wndclass.cbWndExtra = 0;
	wndclass.hInstance = inst;
	wndclass.hIcon = LoadIcon(inst, MAKEINTRESOURCE(IDI_MAINICON));
	wndclass.hCursor = LoadCursor(NULL, IDC_IBEAM);
	wndclass.hbrBackground = NULL;
	wndclass.lpszMenuName = NULL;
	wndclass.lpszClassName = appname;

	RegisterClass(&wndclass);
    }

    hwnd = NULL;

    memset(&ucsdata, 0, sizeof(ucsdata));

    term = term_init(&cfg, &ucsdata, NULL);
    logctx = log_init(NULL, &cfg);
    term_provide_logctx(term, logctx);

    cfgtopalette();

    /*
     * Guess some defaults for the window size. This all gets
     * updated later, so we don't really care too much. However, we
     * do want the font width/height guesses to correspond to a
     * large font rather than a small one...
     */

    font_width = 10;
    font_height = 20;
    extra_width = 25;
    extra_height = 28;
    term_size(term, cfg.height, cfg.width, cfg.savelines);
    guess_width = extra_width + font_width * term->cols;
    guess_height = extra_height + font_height * term->rows;
    {
	RECT r;
		get_fullscreen_rect(&r);
	if (guess_width > r.right - r.left)
	    guess_width = r.right - r.left;
	if (guess_height > r.bottom - r.top)
	    guess_height = r.bottom - r.top;
    }

    {
	int winmode = WS_OVERLAPPEDWINDOW | WS_VSCROLL;
	int exwinmode = 0;
	if (!cfg.scrollbar)
	    winmode &= ~(WS_VSCROLL);
	if (cfg.resize_action == RESIZE_DISABLED)
	    winmode &= ~(WS_THICKFRAME | WS_MAXIMIZEBOX);
	if (cfg.alwaysontop)
	    exwinmode |= WS_EX_TOPMOST;
	if (cfg.sunken_edge)
	    exwinmode |= WS_EX_CLIENTEDGE;
	hwnd = CreateWindowEx(exwinmode, appname, appname,
			      winmode, CW_USEDEFAULT, CW_USEDEFAULT,
			      guess_width, guess_height,
			      NULL, NULL, inst, NULL);
    }

    /*
     * Initialise the fonts, simultaneously correcting the guesses
     * for font_{width,height}.
     */
    init_fonts(0,0);

    /*
     * Correct the guesses for extra_{width,height}.
     */
    {
	RECT cr, wr;
	GetWindowRect(hwnd, &wr);
	GetClientRect(hwnd, &cr);
	offset_width = offset_height = cfg.window_border;
	extra_width = wr.right - wr.left - cr.right + cr.left + offset_width*2;
	extra_height = wr.bottom - wr.top - cr.bottom + cr.top +offset_height*2;
    }

    /*
     * Resize the window, now we know what size we _really_ want it
     * to be.
     */
    guess_width = extra_width + font_width * term->cols;
    guess_height = extra_height + font_height * term->rows;
    SetWindowPos(hwnd, NULL, 0, 0, guess_width, guess_height,
		 SWP_NOMOVE | SWP_NOREDRAW | SWP_NOZORDER);

    /*
     * Set up a caret bitmap, with no content.
     */
    {
	char *bits;
	int size = (font_width + 15) / 16 * 2 * font_height;
	bits = snewn(size, char);
	memset(bits, 0, size);
	caretbm = CreateBitmap(font_width, font_height, 1, 1, bits);
	sfree(bits);
    }
    CreateCaret(hwnd, caretbm, font_width, font_height);

    /*
     * Initialise the scroll bar.
     */
    {
	SCROLLINFO si;

	si.cbSize = sizeof(si);
	si.fMask = SIF_ALL | SIF_DISABLENOSCROLL;
	si.nMin = 0;
	si.nMax = term->rows - 1;
	si.nPage = term->rows;
	si.nPos = 0;
	SetScrollInfo(hwnd, SB_VERT, &si, FALSE);
    }

    /*
     * Start up the telnet connection.
     */
    {
	const char *error;
	char msg[1024], *title;
	char *realhost;

	error = back->init(NULL, &backhandle, &cfg,
			   cfg.host, cfg.port, &realhost, cfg.tcp_nodelay,
			   cfg.tcp_keepalives);
	back->provide_logctx(backhandle, logctx);
	if (error) {
	    char *str = dupprintf("%s Error", appname);
	    sprintf(msg, "Unable to open connection to\n"
		    "%.800s\n" "%s", cfg.host, error);
	    MessageBox(NULL, msg, str, MB_ICONERROR | MB_OK);
	    sfree(str);
	    return 0;
	}
	window_name = icon_name = NULL;
	if (*cfg.wintitle) {
	    title = cfg.wintitle;
	} else {
	    sprintf(msg, "%s - %s", realhost, appname);
	    title = msg;
	}
	sfree(realhost);
	set_title(NULL, title);
	set_icon(NULL, title);
    }

    /*
     * Connect the terminal to the backend for resize purposes.
     */
    term_provide_resize_fn(term, back->size, backhandle);

    /*
     * Set up a line discipline.
     */
    ldisc = ldisc_create(&cfg, term, back, backhandle, NULL);

    session_closed = FALSE;

    /*
     * Prepare the mouse handler.
     */
    lastact = MA_NOTHING;
    lastbtn = MBT_NOTHING;
    dbltime = GetDoubleClickTime();

    /*
     * Set up the session-control options on the system menu.
     */
    {
	HMENU s, m;
	int i, j;
	char *str;

	popup_menus[SYSMENU].menu = GetSystemMenu(hwnd, FALSE);
	popup_menus[CTXMENU].menu = CreatePopupMenu();
	AppendMenu(popup_menus[CTXMENU].menu, MF_ENABLED, IDM_PASTE, "&Paste");

	s = CreateMenu();
	get_sesslist(&sesslist, TRUE);
	for (i = 1;
	     i < ((sesslist.nsessions < 256) ? sesslist.nsessions : 256);
	     i++)
	    AppendMenu(s, MF_ENABLED, IDM_SAVED_MIN + (16 * i),
		       sesslist.sessions[i]);

	for (j = 0; j < lenof(popup_menus); j++) {
	    m = popup_menus[j].menu;

	    AppendMenu(m, MF_SEPARATOR, 0, 0);
	    popup_menus[j].specials_submenu_pos = GetMenuItemCount(m);
	    AppendMenu(m, MF_ENABLED, IDM_SHOWLOG, "&Event Log");
	    AppendMenu(m, MF_SEPARATOR, 0, 0);
	    AppendMenu(m, MF_ENABLED, IDM_NEWSESS, "Ne&w Session...");
	    AppendMenu(m, MF_ENABLED, IDM_DUPSESS, "&Duplicate Session");
	    AppendMenu(m, MF_POPUP | MF_ENABLED, (UINT) s, "Sa&ved Sessions");
	    AppendMenu(m, MF_ENABLED, IDM_RECONF, "Chan&ge Settings...");
	    AppendMenu(m, MF_SEPARATOR, 0, 0);
	    AppendMenu(m, MF_ENABLED, IDM_COPYALL, "C&opy All to Clipboard");
	    AppendMenu(m, MF_ENABLED, IDM_CLRSB, "C&lear Scrollback");
	    AppendMenu(m, MF_ENABLED, IDM_RESET, "Rese&t Terminal");
	    AppendMenu(m, MF_SEPARATOR, 0, 0);
	    AppendMenu(m, (cfg.resize_action == RESIZE_DISABLED) ?
		       MF_GRAYED : MF_ENABLED, IDM_FULLSCREEN, "&Full Screen");
	    AppendMenu(m, MF_SEPARATOR, 0, 0);
	    if (help_path)
		AppendMenu(m, MF_ENABLED, IDM_HELP, "&Help");
	    str = dupprintf("&About %s", appname);
	    AppendMenu(m, MF_ENABLED, IDM_ABOUT, str);
	    sfree(str);
	}
    }

    update_specials_menu(NULL);

    /*
     * Set up the initial input locale.
     */
    set_input_locale(GetKeyboardLayout(0));

    /*
     * Open the initial log file if there is one.
     */
    logfopen(logctx);

    /*
     * Finally show the window!
     */
    ShowWindow(hwnd, show);
    SetForegroundWindow(hwnd);

    /*
     * Set the palette up.
     */
    pal = NULL;
    logpal = NULL;
    init_palette();

    term->has_focus = (GetForegroundWindow() == hwnd);
    UpdateWindow(hwnd);

    if (GetMessage(&msg, NULL, 0, 0) == 1) {
	int timer_id = 0, long_timer = 0;

	while (msg.message != WM_QUIT) {
	    /* Sometimes DispatchMessage calls routines that use their own
	     * GetMessage loop, setup this timer so we get some control back.
	     *
	     * Also call term_update() from the timer so that if the host
	     * is sending data flat out we still do redraws.
	     */
	    if (timer_id && long_timer) {
		KillTimer(hwnd, timer_id);
		long_timer = timer_id = 0;
	    }
	    if (!timer_id)
		timer_id = SetTimer(hwnd, 1, 20, NULL);
	    if (!(IsWindow(logbox) && IsDialogMessage(logbox, &msg)))
		DispatchMessage(&msg);

	    /* Make sure we blink everything that needs it. */
	    term_blink(term, 0);

	    /* Send the paste buffer if there's anything to send */
	    term_paste(term);

	    /* If there's nothing new in the queue then we can do everything
	     * we've delayed, reading the socket, writing, and repainting
	     * the window.
	     */
	    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
		continue;

	    if (pending_netevent) {
		enact_pending_netevent();

		if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
		    continue;
	    }

	    /* Okay there is now nothing to do so we make sure the screen is
	     * completely up to date then tell windows to call us in a little 
	     * while.
	     */
	    if (timer_id) {
		KillTimer(hwnd, timer_id);
		timer_id = 0;
	    }
	    HideCaret(hwnd);
	    if (GetCapture() != hwnd || 
		(send_raw_mouse &&
		 !(cfg.mouse_override && is_shift_pressed())))
		term_out(term);
	    term_update(term);
	    ShowCaret(hwnd);

	    flash_window(1);	       /* maintain */

	    /* The messages seem unreliable; especially if we're being tricky */
	    term->has_focus = (GetForegroundWindow() == hwnd);

	    if (term->in_vbell)
		/* Hmm, term_update didn't want to do an update too soon ... */
		timer_id = SetTimer(hwnd, 1, 50, NULL);
	    else if (!term->has_focus)
		timer_id = SetTimer(hwnd, 1, 500, NULL);
	    else
		timer_id = SetTimer(hwnd, 1, 100, NULL);
	    long_timer = 1;

	    /* There's no point rescanning everything in the message queue
	     * so we do an apparently unnecessary wait here
	     */
	    WaitMessage();
	    if (GetMessage(&msg, NULL, 0, 0) != 1)
		break;
	}
    }

    cleanup_exit(msg.wParam);	       /* this doesn't return... */
    return msg.wParam;		       /* ... but optimiser doesn't know */
}

/*
 * Clean up and exit.
 */
void cleanup_exit(int code)
{
    /*
     * Clean up.
     */
    deinit_fonts();
    sfree(logpal);
    if (pal)
	DeleteObject(pal);
    sk_cleanup();

    if (cfg.protocol == PROT_SSH) {
	random_save_seed();
#ifdef MSCRYPTOAPI
	crypto_wrapup();
#endif
    }

    exit(code);
}

/*
 * Set up, or shut down, an AsyncSelect. Called from winnet.c.
 */
char *do_select(SOCKET skt, int startup)
{
    int msg, events;
    if (startup) {
	msg = WM_NETEVENT;
	events = (FD_CONNECT | FD_READ | FD_WRITE |
		  FD_OOB | FD_CLOSE | FD_ACCEPT);
    } else {
	msg = events = 0;
    }
    if (!hwnd)
	return "do_select(): internal error (hwnd==NULL)";
    if (p_WSAAsyncSelect(skt, hwnd, msg, events) == SOCKET_ERROR) {
	switch (p_WSAGetLastError()) {
	  case WSAENETDOWN:
	    return "Network is down";
	  default:
	    return "WSAAsyncSelect(): unknown error";
	}
    }
    return NULL;
}

/*
 * Update the Special Commands submenu.
 */
void update_specials_menu(void *frontend)
{
    HMENU m = GetSystemMenu(hwnd, FALSE);
    int menu_already_exists = (specials != NULL);
    int i, j;

    specials = back->get_specials(backhandle);
    if (specials) {
	HMENU p = CreateMenu();
	for (i = 0; specials[i].name; i++) {
	    assert(IDM_SPECIAL_MIN + 0x10 * i < IDM_SPECIAL_MAX);
	    if (*specials[i].name)
		AppendMenu(p, MF_ENABLED, IDM_SPECIAL_MIN + 0x10 * i,
			   specials[i].name);
	    else
		AppendMenu(p, MF_SEPARATOR, 0, 0);
	}
	for (j = 0; j < lenof(popup_menus); j++) {
	    if (menu_already_exists)
		DeleteMenu(popup_menus[j].menu,
			   popup_menus[j].specials_submenu_pos,
			   MF_BYPOSITION);
	    else
		InsertMenu(popup_menus[j].menu,
			   popup_menus[j].specials_submenu_pos,
			   MF_BYPOSITION | MF_SEPARATOR, 0, 0);
	    InsertMenu(popup_menus[j].menu,
		       popup_menus[j].specials_submenu_pos,
		       MF_BYPOSITION | MF_POPUP | MF_ENABLED,
		       (UINT) p, "Special Command");
	}
    }
}

/*
 * set or clear the "raw mouse message" mode
 */
void set_raw_mouse_mode(void *frontend, int activate)
{
    activate = activate && !cfg.no_mouse_rep;
    send_raw_mouse = activate;
    SetCursor(LoadCursor(NULL, activate ? IDC_ARROW : IDC_IBEAM));
}

/*
 * Print a message box and close the connection.
 */
void connection_fatal(void *frontend, char *fmt, ...)
{
    va_list ap;
    char *stuff, morestuff[100];

    va_start(ap, fmt);
    stuff = dupvprintf(fmt, ap);
    va_end(ap);
    sprintf(morestuff, "%.70s Fatal Error", appname);
    MessageBox(hwnd, stuff, morestuff, MB_ICONERROR | MB_OK);
    sfree(stuff);

    if (cfg.close_on_exit == FORCE_ON)
	PostQuitMessage(1);
    else {
	session_closed = TRUE;
	sprintf(morestuff, "%.70s (inactive)", appname);
	set_icon(NULL, morestuff);
	set_title(NULL, morestuff);
    }
}

/*
 * Report an error at the command-line parsing stage.
 */
void cmdline_error(char *fmt, ...)
{
    va_list ap;
    char *stuff, morestuff[100];

    va_start(ap, fmt);
    stuff = dupvprintf(fmt, ap);
    va_end(ap);
    sprintf(morestuff, "%.70s Command Line Error", appname);
    MessageBox(hwnd, stuff, morestuff, MB_ICONERROR | MB_OK);
    sfree(stuff);
    exit(1);
}

/*
 * Actually do the job requested by a WM_NETEVENT
 */
static void enact_pending_netevent(void)
{
    static int reentering = 0;
    extern int select_result(WPARAM, LPARAM);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩午夜在线影院| 精品国产露脸精彩对白| 精品一区二区三区免费视频| 中文字幕在线不卡一区二区三区| 欧美美女直播网站| www.久久精品| 国产成人自拍高清视频在线免费播放| 亚洲国产精品久久艾草纯爱| 国产精品久久毛片a| 精品国产髙清在线看国产毛片| 欧美中文字幕一区二区三区亚洲| 国产精品99久久久久久久女警| 日本亚洲视频在线| 亚洲一区二区三区视频在线播放| 国产精品免费av| 久久精品男人的天堂| 欧美一区2区视频在线观看| 91黄色免费看| 91美女在线观看| 成人一区二区视频| 久久99久国产精品黄毛片色诱| 午夜精品久久久久| 亚洲影院在线观看| 亚洲一二三四在线| 一区二区三区视频在线观看| 亚洲欧美日韩国产一区二区三区| 中文字幕va一区二区三区| 国产欧美一区二区精品性| 精品国产一区久久| 精品久久久久久久久久久院品网| 日韩欧美中文字幕精品| 欧美一区二区久久久| 欧美日韩精品高清| 欧美日韩激情一区二区三区| 在线观看免费成人| 欧美日韩激情一区| 6080国产精品一区二区| 欧美一区二区三区四区视频| 91精品欧美久久久久久动漫| 91精品视频网| 精品久久国产老人久久综合| 精品乱码亚洲一区二区不卡| 久久网站最新地址| 国产欧美一区二区三区沐欲 | 欧美在线观看视频在线| 一本大道av伊人久久综合| 一本色道亚洲精品aⅴ| 99精品视频在线观看| 91福利在线导航| 欧美日韩二区三区| 日韩免费性生活视频播放| 精品播放一区二区| 中文字幕第一页久久| 亚洲精品免费一二三区| 偷窥少妇高潮呻吟av久久免费| 免费观看日韩av| 狠狠色狠狠色综合| 9l国产精品久久久久麻豆| 欧美日韩你懂的| 精品国产第一区二区三区观看体验| 久久久777精品电影网影网| 中文字幕一区二区不卡| 亚洲午夜精品在线| 久久精品国产网站| 波多野结衣中文字幕一区 | 成人av动漫在线| 91福利视频在线| 欧美成人午夜电影| 中文字幕一区av| 日本不卡一二三| 成人免费av在线| 91精品在线观看入口| 亚洲国产精品ⅴa在线观看| 亚洲一区二区三区四区在线观看 | 欧美日韩国产三级| 久久久美女毛片| 亚洲永久免费视频| 国产精品一区二区x88av| 色综合天天综合狠狠| 欧美男人的天堂一二区| 国产亚洲欧美一区在线观看| 亚洲精品欧美二区三区中文字幕| 美日韩一级片在线观看| 91视频在线看| 欧美电视剧免费观看| 18涩涩午夜精品.www| 免费不卡在线视频| 91网上在线视频| 2020国产精品久久精品美国| 亚洲乱码国产乱码精品精的特点| 久久超级碰视频| 欧美伊人久久大香线蕉综合69| 久久久久久久国产精品影院| 亚洲aⅴ怡春院| 99re8在线精品视频免费播放| 精品日产卡一卡二卡麻豆| 亚洲一级电影视频| 99热国产精品| 国产欧美一区二区精品忘忧草| 亚洲成av人片| 99久久精品国产导航| 久久久精品tv| 黄色成人免费在线| 91精品黄色片免费大全| 一区二区三区日韩精品| 大白屁股一区二区视频| 欧美tickling挠脚心丨vk| 亚洲二区在线观看| 91一区二区三区在线播放| 国产夜色精品一区二区av| 久久99热99| 日韩亚洲国产中文字幕欧美| 亚洲成人三级小说| 在线一区二区三区四区| 国产精品每日更新| 国产不卡一区视频| 国产三区在线成人av| 激情综合色综合久久综合| 日韩午夜小视频| 蜜臀a∨国产成人精品| 91精品国产麻豆国产自产在线| 亚洲一区二区不卡免费| 91搞黄在线观看| 亚洲一区二区高清| 欧美午夜精品久久久久久超碰| 亚洲欧美日韩中文字幕一区二区三区| 成人18视频日本| 国产精品久久毛片a| 99国产精品国产精品毛片| 欧美国产精品一区二区三区| 国产精品一区二区不卡| 国产人成亚洲第一网站在线播放| 国产一区二区三区四区五区美女| 精品粉嫩超白一线天av| 久久99国产精品久久99| 久久丝袜美腿综合| 国产成人精品影视| 中文字幕一区三区| 色菇凉天天综合网| 五月婷婷激情综合| 欧美成人艳星乳罩| 国产成人精品aa毛片| |精品福利一区二区三区| 91免费视频网址| 视频在线在亚洲| 久久综合色鬼综合色| 成人一区在线看| 一区二区在线免费| 欧美精品久久久久久久多人混战 | 欧美系列日韩一区| 五月婷婷久久综合| 日韩精品一区二区三区蜜臀| 国产精品一区二区在线播放| 国产精品毛片无遮挡高清| 欧美最猛黑人xxxxx猛交| 日产欧产美韩系列久久99| 久久亚洲精华国产精华液| av高清久久久| 天天色天天操综合| 国产色爱av资源综合区| 一本大道久久a久久精二百| 日韩国产欧美在线视频| 国产视频一区二区三区在线观看| 91网站最新网址| 人人精品人人爱| 亚洲国产精品二十页| 精品视频免费看| 国产乱人伦精品一区二区在线观看 | 欧美日韩aaa| 国产剧情一区在线| 亚洲精品国产a| 精品99一区二区| 色www精品视频在线观看| 久久国产乱子精品免费女| 亚洲天堂av老司机| 欧美成人一级视频| 91国内精品野花午夜精品| 国内久久婷婷综合| 洋洋成人永久网站入口| 久久久不卡网国产精品一区| 日本久久电影网| 国产一区欧美二区| 亚洲成人精品一区二区| 亚洲国产高清不卡| 欧美一区2区视频在线观看| 97精品电影院| 国产一区二区中文字幕| 亚洲一本大道在线| 中文字幕国产一区| 日韩欧美国产电影| 欧美视频第二页| 不卡电影免费在线播放一区| 美女视频黄久久| 亚洲一区二区不卡免费| 亚洲欧洲日韩综合一区二区| 久久综合99re88久久爱| 宅男噜噜噜66一区二区66| 色先锋久久av资源部| 成人午夜视频网站| 加勒比av一区二区|