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

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

?? request.c

?? 這是針對 Linux (i386)平臺的 minigui 3.6.2 開發(fā)包(MiniGUI-Processes 運(yùn)行模式)。
?? C
字號:
/*** $Id: request.c,v 1.20 2004/06/26 07:49:32 weiym Exp $** ** request.c: handle request of clients.** ** Copyright (C) 2003 Feynman Software** Copyright (C) 2000 ~ 2002 Wei Yongming.**** Current maintainer: Wei Yongming.**** Create date: 2000/12/21**** NOTE: The idea comes from sample code in APUE.*//*** This program is free software; you can redistribute it and/or modify** it under the terms of the GNU General Public License as published by** the Free Software Foundation; either version 2 of the License, or** (at your option) any later version.**** This program is distributed in the hope that it will be useful,** but WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the** GNU General Public License for more details.**** You should have received a copy of the GNU General Public License** along with this program; if not, write to the Free Software** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*//*** TODO:*/#include <signal.h>#include "common.h"#include "minigui.h"#include "gdi.h"#include "window.h"#include "cliprect.h"#include "internals.h"#include "cursor.h"#include "gal.h"#include "ourhdr.h"#include "sockio.h"#include "client.h"#include "server.h"#include "sharedres.h"typedef void (* ReleaseProc) (void* );struct GlobalRes{    struct GlobalRes* next;    struct GlobalRes* prev;    void* key;    void* res;    ReleaseProc release_proc;};static void add_global_res (int cli, void* key, void* res, ReleaseProc release_proc){    MG_Client* client = mgClients + cli;    struct GlobalRes *global_res = malloc (sizeof (struct GlobalRes));    if (global_res) {	global_res->key = key;	global_res->res = res;	global_res->release_proc = release_proc;	if (client->global_res == NULL) {            global_res->next = NULL;	    global_res->prev = NULL;            client->global_res = global_res;	}	else {            global_res->next = client->global_res;	    global_res->prev = NULL;	    global_res->next->prev = global_res;            client->global_res = global_res;	}    }}static void del_global_res (int cli, void* key){    MG_Client* client = mgClients + cli;    struct GlobalRes *global_res = client->global_res, *next;    while (global_res) {	next = global_res->next;        if (global_res->key == key) {            global_res->release_proc (global_res->res);            if (global_res->prev)                global_res->prev->next = global_res->next;            if (global_res->next)                global_res->next->prev = global_res->prev;            if (global_res == client->global_res) {                client->global_res = global_res->next;            }	    free (global_res);	}	global_res = next;    }}void release_global_res (int cli){    MG_Client* client = mgClients + cli;    struct GlobalRes *global_res = client->global_res, *next;    while (global_res) {        next = global_res->next;        global_res->release_proc (global_res->res);        free (global_res);        global_res = next;    }}int send_reply (int clifd, const void* reply, int len){    MSG reply_msg = {HWND_INVALID, 0};    /* send a reply message to indicate this is a reply of request */    if (sock_write (clifd, &reply_msg, sizeof (MSG)) < 0)        return SOCKERR_IO;    if (sock_write (clifd, reply, len) < 0)        return SOCKERR_IO;    return SOCKERR_OK;}static int load_cursor (int cli, int clifd, void* buff, size_t len){    HCURSOR hcsr;    hcsr = LoadCursorFromFile (buff);#ifdef _CURSOR_SUPPORT    if (hcsr) {        add_global_res (cli, (void*) hcsr, (void*)hcsr, (ReleaseProc)DestroyCursor);    }#endif    return send_reply (clifd, &hcsr, sizeof (HCURSOR));}static int create_cursor (int cli, int clifd, void* buff, size_t len){    HCURSOR hcsr;    int* tmp;    BYTE* and_bits, *xor_bits;    tmp = (int*)buff;    and_bits = (BYTE*)(tmp + 6);    xor_bits = and_bits + tmp [5];    hcsr = CreateCursor (tmp [0], tmp [1], tmp [2], tmp [3],                     and_bits, xor_bits, tmp [4]);#ifdef _CURSOR_SUPPORT    if (hcsr) {        add_global_res (cli, (void*) hcsr, (void*)hcsr, (ReleaseProc)DestroyCursor);    }#endif    return send_reply (clifd, &hcsr, sizeof (HCURSOR));}static int destroy_cursor (int cli, int clifd, void* buff, size_t len){    BOOL ret_value;    HCURSOR hcsr;    hcsr = *((HCURSOR*)buff);    ret_value = DestroyCursor (hcsr);    del_global_res (cli, (void*)hcsr);    return send_reply (clifd, &ret_value, sizeof (BOOL));}static int clip_cursor (int cli, int clifd, void* buff, size_t len){    RECT cliprc;    memcpy (&cliprc, buff, sizeof (RECT));    ClipCursor (&cliprc);    return SOCKERR_OK;}static int get_clip_cursor (int cli, int clifd, void* buff, size_t len){    RECT cliprc;    GetClipCursor (&cliprc);    return send_reply (clifd, &cliprc, sizeof (RECT));}static int set_cursor (int cli, int clifd, void* buff, size_t len){    HCURSOR hcsr;    HCURSOR old;    memcpy (&hcsr, buff, sizeof (HCURSOR));    old = SetCursorEx (hcsr, FALSE);    return send_reply (clifd, &old, sizeof (HCURSOR));}static int get_current_cursor (int cli, int clifd, void* buff, size_t len){    HCURSOR hcsr;    hcsr = GetCurrentCursor ();    return send_reply (clifd, &hcsr, sizeof (HCURSOR));}#if 0static int show_cursor_for_gdi (int cli, int clifd, void* buff, size_t len){    RECT rc;    BOOL show_hide;    BOOL ret_value = TRUE;    memcpy (&show_hide, buff, sizeof (BOOL));    memcpy (&rc, buff + sizeof (BOOL), sizeof (RECT));    ShowCursorForClientGDI (show_hide, &rc);    return send_reply (clifd, &ret_value, sizeof (BOOL));}#endifstatic int show_cursor (int cli, int clifd, void* buff, size_t len){    BOOL show_hide;    int ret_value;    memcpy (&show_hide, buff, sizeof (BOOL));    ret_value = ShowCursor (show_hide);    return send_reply (clifd, &ret_value, sizeof (BOOL));}static int set_cursor_pos (int cli, int clifd, void* buff, size_t len){    POINT pt;    memcpy (&pt, buff, sizeof (POINT));    SetCursorPos (pt.x, pt.y);    return SOCKERR_OK;}static int layer_info (int cli, int clifd, void* buff, size_t len){    LAYERINFO info;    get_layer_info (cli, (const char*) buff, &info);    return send_reply (clifd, &info, sizeof (LAYERINFO));}static int join_layer (int cli, int clifd, void* buff, size_t len){    static int nr_layers = 0, nr_clients = 0;    JOINLAYERINFO* info;    JOINEDCLIENTINFO joined_info = {INV_LAYER_HANDLE};    MG_Layer* layer;    info = (JOINLAYERINFO*) buff;        if (info->layer_name [0] == '\0') {        sprintf (info->layer_name, "Layer-%d", nr_layers);        nr_layers ++;    }    if (info->client_name [0] == '\0') {        sprintf (info->client_name, "Client-%d", nr_clients);        nr_clients ++;    }    if (!(layer = get_layer (info->layer_name, TRUE))) {        return send_reply (clifd, &joined_info, sizeof (JOINEDCLIENTINFO));    }    joined_info.layer_handle = (GHANDLE)layer;    client_join_layer (cli, info, &joined_info);    return send_reply (clifd, &joined_info, sizeof (JOINEDCLIENTINFO));}static int topmost_layer (int cli, int clifd, void* buff, size_t len){    BOOL ret_value = FALSE;    MG_Layer* layer = *((MG_Layer**)buff);    if (is_valid_layer (layer) && layer->cli_head) {        SetTopMostLayer (layer);        ret_value = TRUE;    }    return send_reply (clifd, &ret_value, sizeof (BOOL));}static int active_client (int cli, int clifd, void* buff, size_t len){    BOOL ret_value = FALSE;    int active = *((int*)buff);    if (active >= 0 && active < mgClientSize && mgClients [active].fd != -1) {        set_active_client (mgClients + active);        ret_value = TRUE;    }    return send_reply (clifd, &ret_value, sizeof (BOOL));}static int im_live (int cli, int clifd, void* buff, size_t len){    unsigned int time;    memcpy (&time, buff, sizeof (unsigned int));    mgClients [cli].last_live_time = time;    return SOCKERR_OK;}extern HWND __mg_ime_wnd;static int open_ime_wnd (int cli, int clifd, void* buff, size_t len){    BOOL open;    memcpy (&open, buff, sizeof (BOOL));    if (__mg_ime_wnd) {        if (open)            SendNotifyMessage (__mg_ime_wnd, MSG_IME_OPEN, 0, 0);        else            SendNotifyMessage (__mg_ime_wnd, MSG_IME_CLOSE, 0, 0);    }    return SOCKERR_OK;}#ifdef _USE_NEWGALvoid release_HWS (REQ_HWSURFACE* allocated){    REP_HWSURFACE reply;    GAL_RequestHWSurface (allocated, &reply);    free (allocated);}static int req_hw_surface (int cli, int clifd, void* buff, size_t len){    REQ_HWSURFACE* request = (REQ_HWSURFACE*) buff;    REP_HWSURFACE reply;    GAL_RequestHWSurface (request, &reply);    if (request->bucket == NULL) {        REQ_HWSURFACE* allocated;        allocated = malloc (sizeof (REQ_HWSURFACE));        if (allocated) {            allocated->w = request->w;            allocated->h = request->h;            allocated->pitch = reply.pitch;            allocated->offset = reply.offset;            allocated->bucket = reply.bucket;            add_global_res (cli, allocated->bucket, allocated, (ReleaseProc)release_HWS);        }    }    else {       del_global_res (cli, request->bucket);    }    return send_reply (clifd, &reply, sizeof (REP_HWSURFACE));}#endif#ifdef _CLIPBOARD_SUPPORTextern int clipboard_op (int cli, int clifd, void* buff, size_t len);#endifstatic REQ_HANDLER handlers [MAX_REQID] ={    load_cursor,    create_cursor,    destroy_cursor,    clip_cursor,    get_clip_cursor,    set_cursor,    get_current_cursor,#if 0    show_cursor_for_gdi,#endif    show_cursor,    set_cursor_pos,    layer_info,    join_layer,    topmost_layer,    active_client,    im_live,    open_ime_wnd,#ifdef _USE_NEWGAL    req_hw_surface,#else    NULL,#endif#ifdef _CLIPBOARD_SUPPORT    clipboard_op,#else    NULL,#endif};BOOL GUIAPI RegisterRequestHandler (int req_id, REQ_HANDLER your_handler){    if (req_id <= MAX_SYS_REQID || req_id > MAX_REQID)        return FALSE;    handlers [req_id - 1] = your_handler;    return TRUE;}REQ_HANDLER GUIAPI GetRequestHandler (int req_id){    if (req_id <= 0 || req_id > MAX_REQID)        return NULL;    return handlers [req_id - 1];}static char _request_data_buff [1024];int handle_request (int clifd, int req_id, int cli){    int n;    char* buff;    size_t len_data;    if ((n = sock_read (clifd, &len_data, sizeof (size_t))) == SOCKERR_IO)        return SOCKERR_IO;    else if (n == SOCKERR_CLOSED) {        goto error;    }    if (len_data <= sizeof (_request_data_buff)) {        buff = _request_data_buff;    }    else {        buff = malloc (len_data);        if (buff == NULL)            return SOCKERR_INVARG;    }    if ((n = sock_read (clifd, buff, len_data)) == SOCKERR_IO)        return SOCKERR_IO;    else if (n == SOCKERR_CLOSED) {        goto error;    }    if (req_id > MAX_REQID || req_id <= 0 || handlers [req_id - 1] == NULL)        return SOCKERR_INVARG;    n = handlers [req_id - 1] (cli, clifd, buff, len_data);    if (len_data > sizeof (_request_data_buff))        free (buff);    if (n == SOCKERR_IO)        goto error;    return n;error:    remove_client (cli, clifd);    return SOCKERR_CLOSED;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区成人在线视频| 天天亚洲美女在线视频| 欧美三区在线视频| 国产成人一区二区精品非洲| 亚洲综合偷拍欧美一区色| 亚洲精品一区二区三区香蕉| 色婷婷av一区| 国产精品一区二区不卡| 日本欧美久久久久免费播放网| 中文字幕在线不卡一区| 精品久久久久久久久久久久包黑料 | 免费在线观看一区| 亚洲精品成人天堂一二三| 久久久99精品免费观看| 日韩丝袜情趣美女图片| 欧美性大战xxxxx久久久| 成人免费视频视频在线观看免费 | 一区二区三区成人在线视频| 国产欧美日韩不卡免费| 欧美成人乱码一区二区三区| 欧美日免费三级在线| 99精品在线免费| 国产99精品在线观看| 人妖欧美一区二区| 丝袜美腿亚洲一区| 亚洲一区二区欧美日韩| 一区二区三区在线看| 自拍偷自拍亚洲精品播放| 久久久99精品免费观看不卡| 亚洲精品一区二区三区99| 日韩女优毛片在线| 日韩视频在线你懂得| 欧美疯狂做受xxxx富婆| 91麻豆精品国产91久久久资源速度 | 国产999精品久久| 精品一区二区免费在线观看| 免费高清在线一区| 青青青伊人色综合久久| 天天综合网 天天综合色| 亚洲国产cao| 日韩在线观看一区二区| 日韩电影免费一区| 日韩精品一级中文字幕精品视频免费观看 | 成人av电影在线| 粉嫩高潮美女一区二区三区| 国产成人精品一区二| 成人一区二区三区| 成人午夜激情片| 99精品热视频| 欧美亚洲国产一区二区三区va| 欧美性视频一区二区三区| 欧美日韩国产综合一区二区三区| 欧美精品在线观看播放| 欧美一区二区三区白人| 欧美电影免费观看高清完整版在线观看| 日韩精品一区二区三区视频| 久久综合av免费| 国产欧美综合在线| 亚洲欧美日韩在线| 亚洲图片欧美色图| 麻豆精品在线看| 丁香激情综合五月| 91国偷自产一区二区使用方法| 欧美日韩高清一区二区不卡| 欧美变态凌虐bdsm| 中文在线资源观看网站视频免费不卡 | 国产成人综合在线| 99国产麻豆精品| 欧美日韩精品一二三区| 2020日本不卡一区二区视频| 国产精品久久久久久久岛一牛影视| 亚洲免费成人av| 麻豆91免费看| 99久久久久久99| 欧美一区二区三级| 国产精品高潮久久久久无| 一区二区三区四区视频精品免费| 日韩专区在线视频| 成人国产一区二区三区精品| 欧美亚日韩国产aⅴ精品中极品| 日韩视频免费观看高清完整版在线观看 | 69成人精品免费视频| 久久久影视传媒| 亚洲电影一级黄| 国产精品一二三区| 欧美亚洲免费在线一区| 久久久久综合网| 亚洲成人av资源| 国产高清不卡一区二区| 欧美日韩精品电影| 中文字幕成人网| 麻豆国产欧美日韩综合精品二区| 91蝌蚪porny九色| 精品久久久久久久久久久院品网| 一区二区三区.www| 国内成人自拍视频| 欧美福利电影网| 亚洲欧美日本在线| 国产乱人伦偷精品视频不卡| 欧美日韩精品综合在线| 中文字幕一区二区视频| 美女视频网站久久| 欧美羞羞免费网站| 国产精品国产自产拍高清av王其| 奇米综合一区二区三区精品视频| 91网站最新网址| 久久久国产一区二区三区四区小说| 亚洲成av人片观看| 99国产精品一区| 日本一区二区三区在线观看| 美女高潮久久久| 91麻豆精品国产综合久久久久久| 亚洲男人的天堂av| 波多野结衣在线一区| 久久青草国产手机看片福利盒子| 日韩影院在线观看| 欧美日韩夫妻久久| 亚洲小少妇裸体bbw| 91香蕉视频mp4| 亚洲日穴在线视频| 成人免费观看视频| 久久精品亚洲麻豆av一区二区| 久久国内精品自在自线400部| 欧美巨大另类极品videosbest | 日本在线不卡一区| 在线视频一区二区三| 中文字幕一区二区三区蜜月| 丰满亚洲少妇av| 久久久久久久久久久久久女国产乱| 日韩精品一级中文字幕精品视频免费观看 | 亚洲综合一区二区三区| 91麻豆精品视频| 亚洲乱码日产精品bd| 波多野结衣中文一区| 国产精品久久影院| www.日韩av| 亚洲美女免费在线| 欧美在线观看一二区| 一区二区日韩av| 欧美福利视频一区| 老司机免费视频一区二区| 日韩午夜激情视频| 精品综合免费视频观看| www国产精品av| 国产99精品在线观看| 日本一区二区三区四区在线视频| 成人免费黄色大片| 亚洲精品乱码久久久久久日本蜜臀| 色综合av在线| 日韩精品一二三区| 精品久久五月天| 成人爱爱电影网址| 亚洲精品国产品国语在线app| 欧美主播一区二区三区美女| 亚洲h动漫在线| 精品理论电影在线| 成人美女视频在线看| 亚洲美女精品一区| 欧美精品在欧美一区二区少妇| 蜜桃精品在线观看| 中文无字幕一区二区三区| av在线这里只有精品| 亚洲午夜精品久久久久久久久| 欧美一级淫片007| 黄色精品一二区| 亚洲日本成人在线观看| 337p亚洲精品色噜噜| 国产麻豆精品在线| 一区二区三区四区亚洲| 欧美成人女星排名| 色综合久久综合中文综合网| 奇米综合一区二区三区精品视频 | 久久久久久久久一| 色欧美88888久久久久久影院| 亚洲国产日韩一级| 国产日产欧美一区二区三区| 日本久久一区二区三区| 久久国产尿小便嘘嘘尿| 亚洲美女屁股眼交| 精品国产乱码久久久久久浪潮| 99热国产精品| 久久精品久久久精品美女| 一区二区中文字幕在线| 日韩三级视频在线观看| 99国产精品久久久| 麻豆精品久久久| 一区二区三区精品| 中文字幕av一区二区三区高| 正在播放亚洲一区| 一本久道久久综合中文字幕| 麻豆91精品91久久久的内涵| 亚洲啪啪综合av一区二区三区| 欧美电影免费观看高清完整版在线 | av不卡免费电影| 美国十次综合导航| 亚洲精品第一国产综合野| 久久久噜噜噜久久人人看| 欧美人动与zoxxxx乱| 成人精品国产福利| 国产原创一区二区三区|