亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲美女一区二区三区| 国产精品视频一二三| 97成人超碰视| 97se狠狠狠综合亚洲狠狠| 成人高清av在线| 色婷婷av一区二区三区之一色屋| 丰满岳乱妇一区二区三区 | 精品播放一区二区| 精品国产网站在线观看| 精品国免费一区二区三区| 欧美成人三级电影在线| 久久久久久久久99精品| 亚洲国产精品99久久久久久久久| 亚洲国产成人自拍| 亚洲综合在线视频| 五月天精品一区二区三区| 免费欧美在线视频| 国产成人精品亚洲777人妖| 91丨国产丨九色丨pron| 欧美日韩在线三级| 久久综合色综合88| 亚洲天堂精品视频| 婷婷亚洲久悠悠色悠在线播放 | 青青草成人在线观看| 久久99久久99精品免视看婷婷| 韩日av一区二区| av在线免费不卡| 欧美巨大另类极品videosbest| 日韩欧美不卡一区| 国产精品国产a级| 午夜伊人狠狠久久| 国产99久久久精品| 欧美精品精品一区| 中文字幕日本乱码精品影院| 亚洲大片精品永久免费| 国产一区二区三区黄视频 | 成人网在线免费视频| 欧美丝袜丝交足nylons| 国产亚洲精品aa| 丝袜脚交一区二区| jiyouzz国产精品久久| 欧美一区二区三区视频在线| 亚洲日本电影在线| 麻豆精品一区二区| 日本高清无吗v一区| 国产亚洲成aⅴ人片在线观看| 亚洲国产人成综合网站| 国产91精品一区二区| 51精品国自产在线| 亚洲视频一区二区在线| 久久国产尿小便嘘嘘尿| 9191久久久久久久久久久| 国产精品无圣光一区二区| 激情综合网最新| 欧美丰满高潮xxxx喷水动漫| 最新高清无码专区| 国产成人综合自拍| 日韩精品一区二区三区在线| 视频一区二区中文字幕| 97久久精品人人爽人人爽蜜臀| 日韩欧美国产综合| 日韩和欧美的一区| 在线观看成人免费视频| 欧美激情一区三区| 国产麻豆精品在线观看| 精品国产乱码久久久久久蜜臀 | 国产成人高清视频| 精品国产免费视频| 久久草av在线| 欧美电影免费观看高清完整版在 | 国产亚洲一区二区三区四区 | 亚洲一区免费观看| 欧美性猛片aaaaaaa做受| 依依成人综合视频| 色狠狠综合天天综合综合| 亚洲女人的天堂| 一本一本大道香蕉久在线精品| 国产女主播在线一区二区| 国产成人在线色| 国产精品国产精品国产专区不片| 国产v日产∨综合v精品视频| 久久久99精品久久| jvid福利写真一区二区三区| 亚洲视频图片小说| 欧美在线一二三四区| 五月天激情综合| 欧美大片拔萝卜| 国产综合色视频| 国产精品久久久久一区| 99久久精品99国产精品| 亚洲尤物在线视频观看| 欧美一区二区三区视频在线| 久久99国产精品免费网站| 久久综合久久综合久久| aaa亚洲精品一二三区| 一区二区三区在线视频免费观看| 欧美日韩午夜在线视频| 开心九九激情九九欧美日韩精美视频电影| 日韩欧美视频在线| 不卡一区二区三区四区| 亚洲国产精品影院| 亚洲精品一区在线观看| heyzo一本久久综合| 日韩经典一区二区| 国产女主播视频一区二区| 日本乱人伦aⅴ精品| 免费黄网站欧美| 亚洲欧洲一区二区三区| 欧美一区二区免费| 成人天堂资源www在线| 亚洲h精品动漫在线观看| 国产日韩视频一区二区三区| 欧美亚洲丝袜传媒另类| 国产精品一区二区在线观看不卡 | 精品夜夜嗨av一区二区三区| 18涩涩午夜精品.www| 91麻豆精品国产91久久久久久| 国产一区二区三区精品欧美日韩一区二区三区 | 日韩成人免费看| 国产精品视频一区二区三区不卡| 欧美日韩国产一二三| 国产v日产∨综合v精品视频| 日韩中文字幕一区二区三区| 中文字幕免费不卡| 日韩精品综合一本久道在线视频| 99久久精品国产精品久久| 久久国产麻豆精品| 亚洲一区二区三区四区五区黄| 国产精品午夜电影| 2欧美一区二区三区在线观看视频| 一本色道a无线码一区v| 丁香啪啪综合成人亚洲小说 | 欧美日韩国产首页在线观看| 国产91高潮流白浆在线麻豆| 秋霞午夜鲁丝一区二区老狼| 依依成人综合视频| 亚洲欧美一区二区不卡| 国产精品欧美一区喷水| 国产午夜精品久久久久久免费视| 欧美三级视频在线观看| 一本大道久久a久久综合| 国产超碰在线一区| 国产乱码精品一区二区三区五月婷| 日本一区中文字幕| 亚洲chinese男男1069| 一区二区三区不卡视频在线观看 | 中文字幕一区二区三区色视频| 精品国产伦一区二区三区观看体验| 欧美精品乱人伦久久久久久| 在线影视一区二区三区| 91成人国产精品| 欧美亚洲综合一区| 欧美日韩成人综合天天影院| 欧美日韩亚洲不卡| 91精品国产91久久久久久一区二区| 欧美男同性恋视频网站| 3atv一区二区三区| 日韩一区二区精品葵司在线| 欧美精品日日鲁夜夜添| 欧美另类变人与禽xxxxx| 欧美一区二区免费观在线| 91精品国产综合久久久久久久久久| 欧美一区二区三区免费观看视频 | 欧美专区亚洲专区| 欧美日韩视频在线观看一区二区三区| 欧美色区777第一页| 欧美日韩视频在线第一区| 欧美一级片在线观看| 日韩网站在线看片你懂的| 久久精品人人做人人综合| 欧美国产日韩精品免费观看| 成人欧美一区二区三区白人 | 国产在线精品一区二区 | 亚洲精品v日韩精品| 亚洲高清中文字幕| 久久精品99国产精品| 不卡的av中国片| 欧美人xxxx| 中文字幕精品—区二区四季| 一区二区三区鲁丝不卡| 免费成人在线影院| 99久久综合国产精品| 8v天堂国产在线一区二区| 国产欧美精品国产国产专区| 亚洲综合在线视频| 国产一区二区三区美女| 欧美性色黄大片| 久久精品男人天堂av| 亚洲图片欧美视频| 懂色av一区二区夜夜嗨| 欧美精品777| 国产精品伦理一区二区| 日日夜夜一区二区| 99久久婷婷国产综合精品| 欧美日韩aaaaaa| 国产精品久久二区二区| 免费高清成人在线| 欧美在线色视频| 中文字幕日韩欧美一区二区三区| 日韩高清国产一区在线|