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

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

?? clipboard.c

?? 這是針對 Linux (i386)平臺的 minigui 3.6.2 開發(fā)包(MiniGUI-Processes 運(yùn)行模式)。
?? C
字號:
/*** $Id: clipboard.c,v 1.14 2005/01/31 10:54:09 clear Exp $**** clipboard.c: The implementation of Clipboard.**** Copyright (C) 2003 Feynman Software.**** Create date: 2003/12/xx*//*** 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*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include "common.h"#ifdef _CLIPBOARD_SUPPORT#include "minigui.h"#include "clipboard.h"#ifndef _LITE_VERSION#include <semaphore.h>#elif !defined (_STAND_ALONE)#include "client.h"#endiftypedef struct _CLIPBOARD{    char name [LEN_CLIPBOARD_NAME + 1];    unsigned char *buff;    size_t buff_len;    size_t data_len;} CLIPBOARD;#ifndef _LITE_VERSIONstatic sem_t cb_lock;#endifstatic CLIPBOARD cbs [NR_CLIPBOARDS];static int create_clip_board (const char* cb_name, size_t size){    int i;    int empty = -1;    if (size <= 0)        return -1;    for (i = 0; i < NR_CLIPBOARDS; i++) {        if (strncmp (cb_name, cbs [i].name, LEN_CLIPBOARD_NAME) == 0) {            fprintf (stderr, "create clip board error: already existed name.\n");            return CBERR_BADNAME;        }        if (empty < 0 && cbs [i].name [0] == '\0') {            empty = i;        }    }    if (empty >= 0) {        if ((cbs [empty].buff = malloc (size)) == NULL) {            return CBERR_NOMEM;        }        strncpy (cbs [empty].name, cb_name, LEN_CLIPBOARD_NAME);        cbs[empty].name[LEN_CLIPBOARD_NAME] = 0;        cbs [empty].buff_len = size;        cbs [empty].data_len = 0;    }    return CBERR_OK;}#ifdef _LITE_VERSION#ifdef _STAND_ALONEint GUIAPI CreateClipBoard (const char* cb_name, size_t size){    return create_clip_board (cb_name, size);}#elseint GUIAPI CreateClipBoard (const char* cb_name, size_t size){    if (mgIsServer) {        return create_clip_board (cb_name, size);    }    else {        REQ_CLIPBOARD req_data;        REQUEST request = {REQID_CLIPBOARD, &req_data, sizeof (REQ_CLIPBOARD)};        int ret;        req_data.id = CBREQ_CREATE;        strncpy (req_data.name, cb_name, LEN_CLIPBOARD_NAME);        req_data.name[LEN_CLIPBOARD_NAME] = '\0';        req_data.len_data = size;        cli_request (&request, &ret, sizeof(ret));        return ret;    }}#endif#elseint GUIAPI CreateClipBoard (const char* cb_name, size_t size){    int ret;    sem_wait (&cb_lock);    ret = create_clip_board (cb_name, size);    sem_post (&cb_lock);    return ret;}#endifint GUIAPI destroy_clip_board (const char* cb_name){    int i;    for (i = 0; i < NR_CLIPBOARDS; i++) {        if (strcmp (cb_name, cbs [i].name) == 0) {            free (cbs [i].buff);            cbs [i].name [0] = '\0';            cbs [i].buff = NULL;            cbs [i].buff_len = 0;            cbs [i].data_len = 0;            return CBERR_OK;        }    }    return CBERR_BADNAME;}#ifdef _LITE_VERSION#ifdef _STAND_ALONEint GUIAPI DestroyClipBoard (const char* cb_name){    return destroy_clip_board (cb_name);}#elseint GUIAPI DestroyClipBoard (const char* cb_name){    if (mgIsServer) {        return destroy_clip_board (cb_name);    }    else {        REQ_CLIPBOARD req_data;        REQUEST request = {REQID_CLIPBOARD, &req_data, sizeof (REQ_CLIPBOARD)};        int ret;        req_data.id = CBREQ_DESTROY;        strncpy (req_data.name, cb_name, LEN_CLIPBOARD_NAME);        req_data.name[LEN_CLIPBOARD_NAME] = '\0';        cli_request (&request, &ret, sizeof (ret));        return ret;    }}#endif#elseint GUIAPI DestroyClipBoard (const char* cb_name){    int ret;    sem_wait (&cb_lock);    ret = destroy_clip_board (cb_name);    sem_post (&cb_lock);    return ret;}#endifstatic int set_clip_board_data (const char* cb_name, void* data, size_t n, int cbop){    int i;    CLIPBOARD* cb = NULL;    int dataLen;    for (i = 0; i < NR_CLIPBOARDS; i++) {        if (strncmp (cb_name, cbs [i].name, LEN_CLIPBOARD_NAME) == 0) {            cb = cbs + i;            break;        }    }    if (cb == NULL)        return CBERR_BADNAME;    if (cbop == CBOP_APPEND) {        dataLen = MIN (n, cb->buff_len - cb->data_len);        memcpy (cb->buff + cb->data_len, data, dataLen);        cb->data_len += dataLen;    }    else {        cb->data_len = MIN (n, cb->buff_len);        if (data && cb->data_len > 0)            memcpy (cb->buff, data, cb->data_len);    }    return CBERR_OK;}#ifdef _LITE_VERSION#ifdef _STAND_ALONEint GUIAPI SetClipBoardData (const char* cb_name, void* data, size_t n, int cbop){    return set_clip_board_data (cb_name, data, n, cbop);}#elseint GUIAPI SetClipBoardData (const char* cb_name, void* data, size_t n, int cbop){    if (mgIsServer) {        return set_clip_board_data (cb_name, data, n, cbop);    }    else {        REQ_CLIPBOARD* req_data;        REQUEST request;         int ret;        req_data = ALLOCATE_LOCAL (sizeof (REQ_CLIPBOARD) + n);        if (req_data == NULL)            return CBERR_NOMEM;        req_data->id = CBREQ_SETDATA;        strncpy (req_data->name, cb_name, LEN_CLIPBOARD_NAME);        req_data->name[LEN_CLIPBOARD_NAME] = '\0';        req_data->len_data = n;        memcpy ((char*)(req_data+1), data, n);        req_data->cbop = cbop;        request.id = REQID_CLIPBOARD;        request.data = req_data;        request.len_data = sizeof (REQ_CLIPBOARD) + n;        cli_request (&request, &ret, sizeof (ret));        DEALLOCATE_LOCAL (req_data);        return ret;    }}#endif#elseint GUIAPI SetClipBoardData (const char* cb_name, void* data, size_t n, int cbop){    int ret;    sem_wait (&cb_lock);    ret = set_clip_board_data (cb_name, data, n, cbop);    sem_post (&cb_lock);    return ret;}#endifstatic size_t get_clip_board_data_len (const char* cb_name){    int i;    CLIPBOARD* cb = NULL;    for (i = 0; i < NR_CLIPBOARDS; i++) {        if (strncmp (cb_name, cbs [i].name, LEN_CLIPBOARD_NAME) == 0) {            cb = cbs + i;            break;        }    }    if (cb)        return cb->data_len;    return 0;}#ifdef _LITE_VERSION#ifdef _STAND_ALONEsize_t GUIAPI GetClipBoardDataLen (const char* cb_name){    return get_clip_board_data_len (cb_name);}#elsesize_t GUIAPI GetClipBoardDataLen (const char* cb_name){    if (mgIsServer) {        return get_clip_board_data_len (cb_name);    }    else {        REQ_CLIPBOARD req_data;        REQUEST request = {REQID_CLIPBOARD, &req_data, sizeof (REQ_CLIPBOARD)};        int reply[2];        req_data.id = CBREQ_GETDATALEN;        strncpy (req_data.name, cb_name, LEN_CLIPBOARD_NAME);        req_data.name[LEN_CLIPBOARD_NAME] = '\0';        req_data.len_data = 0;        cli_request (&request, &reply, sizeof (reply));        if (reply[0] == CBERR_OK)            return reply[1];        else            return reply[0];    }}#endif#elsesize_t GUIAPI GetClipBoardDataLen (const char* cb_name){    int ret;    sem_wait (&cb_lock);    ret = get_clip_board_data_len (cb_name);    sem_post (&cb_lock);    return ret;}#endif#if defined(_LITE_VERSION) && !defined(_STAND_ALONE)static CLIPBOARD* get_clipboard (const char *cb_name){    int i;    for (i = 0; i < NR_CLIPBOARDS; i++) {        if (strncmp (cb_name, cbs [i].name, LEN_CLIPBOARD_NAME) == 0) {            return (cbs + i);        }    }    return NULL;}#endifstatic size_t get_clip_board_data (const char* cb_name, void* data, size_t n){    int i;    CLIPBOARD* cb = NULL;    int copied_len = 0;    if (!data || n <= 0)        return -1;    for (i = 0; i < NR_CLIPBOARDS; i++) {        if (strncmp (cb_name, cbs [i].name, LEN_CLIPBOARD_NAME) == 0) {            cb = cbs + i;            break;        }    }    if (cb) {        copied_len = MIN (n, cb->data_len);        if (copied_len > 0) {            memcpy (data, cb->buff, copied_len);        }    }    return copied_len;}#ifdef _LITE_VERSION#ifdef _STAND_ALONEsize_t GUIAPI GetClipBoardData (const char* cb_name, void* data, size_t n){    return get_clip_board_data (cb_name, data, n);}#elsesize_t GUIAPI GetClipBoardData (const char* cb_name, void* data, size_t n){    if (mgIsServer) {        return get_clip_board_data (cb_name, data, n);    }    else {        REQ_CLIPBOARD req_data;        REQUEST request = {REQID_CLIPBOARD, &req_data, sizeof (REQ_CLIPBOARD)};        int* reply;        reply = (int*)ALLOCATE_LOCAL (2*sizeof(int) + n);        req_data.id = CBREQ_GETDATA;        strncpy (req_data.name, cb_name, LEN_CLIPBOARD_NAME);        req_data.name[LEN_CLIPBOARD_NAME] = '\0';        //FIXME        req_data.len_data = n;        cli_request (&request, (void*)reply, 2*sizeof(int) + n);        if (*reply == CBERR_OK) {            memcpy (data, (void*)(reply+2), *(reply+1));        }        DEALLOCATE_LOCAL (reply);        return *(reply+1);    }}#endif#elsesize_t GUIAPI GetClipBoardData (const char* cb_name, void* data, size_t n){    int ret;    sem_wait (&cb_lock);    ret = get_clip_board_data (cb_name, data, n);    sem_post (&cb_lock);    return ret;}#endifstatic int get_clip_board_byte (const char* cb_name, int index, unsigned char* byte){    int i;    CLIPBOARD* cb = NULL;    for (i = 0; i < NR_CLIPBOARDS; i++) {        if (strncmp (cb_name, cbs [i].name, LEN_CLIPBOARD_NAME) == 0) {            cb = cbs + i;            break;        }    }    if (cb) {        if (index >= cb->data_len)            return CBERR_NOMEM;        *byte = cb->buff [index];    }    else        return CBERR_BADNAME;    return CBERR_OK;}#ifdef _LITE_VERSION#ifdef _STAND_ALONEint GUIAPI GetClipBoardByte (const char* cb_name, int index, unsigned char* byte){    return get_clip_board_byte (cb_name, index, byte);}#elseint GUIAPI GetClipBoardByte (const char* cb_name, int index, unsigned char* byte){    if (mgIsServer) {        return get_clip_board_byte (cb_name, index, byte);    }    else {        REQ_CLIPBOARD req_data;        REQUEST request = {REQID_CLIPBOARD, &req_data, sizeof (REQ_CLIPBOARD)};        int reply[2];        req_data.id = CBREQ_GETBYTE;        strncpy (req_data.name, cb_name, LEN_CLIPBOARD_NAME);        req_data.name[LEN_CLIPBOARD_NAME] = '\0';        req_data.len_data = index;        cli_request (&request, &reply, sizeof (reply));        if (reply[0] == CBERR_OK)            *byte = (unsigned char) reply[1];        return reply[0];    }}#endif#elseint GUIAPI GetClipBoardByte (const char* cb_name, int index, unsigned char* byte){    int ret;    sem_wait (&cb_lock);    ret = get_clip_board_byte (cb_name, index, byte);    sem_post (&cb_lock);    return ret;}#endif#if defined(_LITE_VERSION) && !defined(_STAND_ALONE)int send_reply (int clifd, const void* reply, int len);int clipboard_op (int cli, int clifd, void* buff, size_t len){    REQ_CLIPBOARD* request = (REQ_CLIPBOARD*) buff;    int ret;    switch (request->id) {        case CBREQ_CREATE:            ret = create_clip_board (request->name, request->len_data);            break;        case CBREQ_DESTROY:            ret = destroy_clip_board (request->name);            break;        case CBREQ_SETDATA:            ret = set_clip_board_data (request->name, (char*)buff + sizeof(REQ_CLIPBOARD),                                        request->len_data, request->cbop);            break;        case CBREQ_GETDATALEN:        {            int attlen;            attlen = get_clip_board_data_len (request->name);            ret = CBERR_OK;            send_reply (clifd, &ret, sizeof (ret));            sock_write (clifd, &attlen, sizeof(int));            return SOCKERR_OK;        }        case CBREQ_GETDATA:        {            CLIPBOARD *cb = get_clipboard (request->name);            int dlen;            if (!cb) {                ret = -1;                send_reply (clifd, &ret, sizeof (ret));                return SOCKERR_OK;            }            ret = CBERR_OK;            send_reply (clifd, &ret, sizeof (ret));            dlen =  MIN(request->len_data, cb->data_len);            sock_write (clifd, &dlen, sizeof (dlen));            sock_write (clifd, cb->buff, dlen);            return SOCKERR_OK;        }        case CBREQ_GETBYTE:        {            unsigned char ch;            get_clip_board_byte (request->name, request->len_data, &ch);            ret = CBERR_OK;            send_reply (clifd, &ret, sizeof (ret));            sock_write (clifd, &ch, sizeof(ch));            return SOCKERR_OK;        }    }    ret = CBERR_OK;    send_reply (clifd, &ret, sizeof (ret));    return SOCKERR_OK;}#endifvoid InitClipBoard (void){#ifndef _LITE_VERSION    sem_init (&cb_lock, 0, 1);#endif#if defined(_LITE_VERSION) && !defined(_STAND_ALONE)    if (mgIsServer)#endif        create_clip_board (CBNAME_TEXT, 1024);}void TerminateClipBoard (void){#if defined(_LITE_VERSION) && !defined(_STAND_ALONE)    if (mgIsServer)#endif    {        int i;        for (i = 0; i < NR_CLIPBOARDS; i++) {            if (cbs [i].name [0])                free (cbs [i].buff);        }    }#ifndef _LITE_VERSION    sem_destroy (&cb_lock);#endif}#endif /* _CLIPBOARD_SUPPORT */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产露脸91国语对白| 99久久久精品免费观看国产蜜| 久久蜜桃av一区精品变态类天堂 | 午夜精品免费在线| 精品电影一区二区| 在线亚洲一区二区| 国产精品一区二区在线观看网站| 亚洲一区二区三区免费视频| 欧美国产日产图区| 欧美日本国产一区| 91色视频在线| 国产一区二区三区美女| 亚洲午夜免费福利视频| 国产精品入口麻豆原神| 日韩欧美一级在线播放| 欧美亚洲另类激情小说| 成人aa视频在线观看| 国产一区二区在线观看免费| 五月开心婷婷久久| 亚洲日本护士毛茸茸| 国产亚洲一区二区三区| 91精品国产全国免费观看| 色网站国产精品| 成人性生交大片免费| 国产在线播放一区三区四| 天天综合天天做天天综合| 亚洲美女在线一区| 国产精品国产三级国产| 久久久av毛片精品| 精品国产一二三| 欧美一级二级三级乱码| 欧美三级中文字幕在线观看| 成人va在线观看| 国产高清亚洲一区| 国产麻豆成人传媒免费观看| 日本不卡视频在线观看| 午夜精品久久一牛影视| 亚洲午夜久久久久久久久久久| 亚洲乱码国产乱码精品精可以看| 中文字幕不卡在线| 国产精品私房写真福利视频| 国产三级三级三级精品8ⅰ区| 精品国产乱码久久久久久闺蜜| 91精品国产入口| 日韩一区二区高清| 日韩一级黄色片| 日韩欧美中文字幕一区| 日韩欧美国产wwwww| 欧美一区二区三区免费观看视频| 欧美日韩国产成人在线91| 欧美专区日韩专区| 欧美日本一道本| 在线综合+亚洲+欧美中文字幕| 91精品久久久久久久久99蜜臂| 91精品婷婷国产综合久久性色| 制服视频三区第一页精品| 日韩免费在线观看| 亚洲精品在线观看视频| 国产视频一区在线观看| 久久精品亚洲麻豆av一区二区| 国产亚洲一区二区三区| 国产精品国产自产拍在线| 亚洲激情综合网| 日韩制服丝袜先锋影音| 黄色小说综合网站| 不卡免费追剧大全电视剧网站| 91视频在线看| 欧美老肥妇做.爰bbww视频| 日韩免费视频线观看| 久久久久久久久97黄色工厂| 亚洲同性同志一二三专区| 夜夜精品视频一区二区| 日韩国产一二三区| 国产不卡在线播放| 91国产免费看| 精品美女被调教视频大全网站| 中文在线免费一区三区高中清不卡| 亚洲图片欧美激情| 日本中文一区二区三区| 国产成人99久久亚洲综合精品| eeuss影院一区二区三区| 欧美日韩久久一区| 久久久久久免费网| 亚洲一区二区五区| 国产一区久久久| 91久久精品国产91性色tv| 欧美一级理论片| 国产精品视频yy9299一区| 亚洲国产精品一区二区久久 | 久久se精品一区精品二区| 成人久久视频在线观看| 欧美区一区二区三区| 国产精品色呦呦| 亚洲.国产.中文慕字在线| 国产成人精品1024| 欧美一区二区黄色| 亚洲精品成人天堂一二三| 久草中文综合在线| 91成人看片片| 国产精品水嫩水嫩| 日韩av网站免费在线| 99re热视频精品| 精品成人一区二区三区| 亚洲成人精品一区| 99国产精品一区| 精品国产制服丝袜高跟| 午夜视频在线观看一区| 成人精品高清在线| 2021国产精品久久精品| 亚洲bt欧美bt精品| 91美女在线观看| 国产精品私人影院| 国产在线观看一区二区| 在线播放欧美女士性生活| 成人免费在线观看入口| 国产a区久久久| 精品国产一区二区在线观看| 偷拍与自拍一区| 欧美影院一区二区三区| 国产精品理论片| 国产a精品视频| 亚洲精品欧美激情| 国产成人高清视频| 精品国产髙清在线看国产毛片 | 国产精品久久午夜夜伦鲁鲁| 精品一区二区三区视频| 欧美久久婷婷综合色| 亚洲一区二区三区四区五区黄| 成人不卡免费av| 欧美国产一区视频在线观看| 韩国av一区二区三区在线观看| 91精品国产乱码| 丝袜诱惑亚洲看片| 欧美美女一区二区三区| 亚洲狠狠爱一区二区三区| 欧美性videosxxxxx| 一区二区三区国产精品| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 精品一区二区在线免费观看| 51久久夜色精品国产麻豆| 日韩精品乱码av一区二区| 欧美日韩国产综合草草| 五月天亚洲精品| 欧美日韩一区国产| 亚欧色一区w666天堂| 51精品国自产在线| 久久综合综合久久综合| 精品久久久久久久久久久久久久久 | 综合色天天鬼久久鬼色| 99久久久精品免费观看国产蜜| 中文字幕欧美一| 日本精品一区二区三区四区的功能| 自拍偷拍国产亚洲| 欧美熟乱第一页| 日日摸夜夜添夜夜添国产精品| 欧美一区二区三区免费大片| 久久99精品久久久久久国产越南| 久久综合久久综合久久| 大胆亚洲人体视频| 专区另类欧美日韩| 欧美日韩一区在线观看| 美女精品一区二区| 国产亚洲成av人在线观看导航| 成人国产免费视频| 一级精品视频在线观看宜春院 | 亚洲一区二区精品久久av| 欧美精品 日韩| 国产一区免费电影| 亚洲人妖av一区二区| 欧美日韩一区二区电影| 久久99国产精品尤物| 中文字幕成人在线观看| 在线观看视频一区二区| 久久精品国产一区二区三| 久久久久99精品一区| 91成人网在线| 久久国产欧美日韩精品| 中文字幕一区免费在线观看| 欧美午夜寂寞影院| 国内精品久久久久影院一蜜桃| 亚洲欧美综合另类在线卡通| 欧美日韩国产美| 成人在线综合网站| 亚洲成人在线免费| 欧美激情在线一区二区三区| 国产亚洲欧洲997久久综合 | 精品免费一区二区三区| 91美女精品福利| 青青青爽久久午夜综合久久午夜 | 亚洲成a人在线观看| 精品噜噜噜噜久久久久久久久试看| 成人一级片在线观看| 五月激情丁香一区二区三区| 国产精品网站在线观看| 欧美一级黄色片| 91国偷自产一区二区三区观看 | 中文字幕在线不卡国产视频| 7777精品伊人久久久大香线蕉完整版 | 亚洲情趣在线观看| 欧美xxxxxxxx|