📄 srvnet.c
字号:
{
nxArcAngleReq *req = r;
GrArcAngle(req->drawid, req->gcid, req->x, req->y, req->rx, req->ry,
req->angle1, req->angle2, req->type);
}
static void
GrSetGCForegroundWrapper(void *r)
{
nxSetGCForegroundReq *req = r;
GrSetGCForeground(req->gcid, req->color);
}
static void
GrSetGCBackgroundWrapper(void *r)
{
nxSetGCBackgroundReq *req = r;
GrSetGCBackground(req->gcid, req->color);
}
static void
GrSetGCUseBackgroundWrapper(void *r)
{
nxSetGCUseBackgroundReq *req = r;
GrSetGCUseBackground(req->gcid, req->flag);
}
static void
GrSetGCModeWrapper(void *r)
{
nxSetGCModeReq *req = r;
GrSetGCMode(req->gcid, req->mode);
}
static void
GrCreateFontWrapper(void *r)
{
nxCreateFontReq *req = r;
GR_FONT_ID fontid;
if(req->lf_used)
fontid = GrCreateFont(NULL, 0, &req->lf);
else
fontid = GrCreateFont(req->lf.lfFaceName, req->height, NULL);
GsWriteType(current_fd,GrNumCreateFont);
GsWrite(current_fd, &fontid, sizeof(fontid));
}
static void
GrSetFontSizeWrapper(void *r)
{
nxSetFontSizeReq *req = r;
GrSetFontSize(req->fontid, req->fontsize);
}
static void
GrSetFontRotationWrapper(void *r)
{
nxSetFontRotationReq *req = r;
GrSetFontRotation(req->fontid, req->tenthdegrees);
}
static void
GrSetFontAttrWrapper(void *r)
{
nxSetFontAttrReq *req = r;
GrSetFontAttr(req->fontid, req->setflags, req->clrflags);
}
static void
GrDestroyFontWrapper(void *r)
{
nxDestroyFontReq *req = r;
GrDestroyFont(req->fontid);
}
static void
GrSetGCFontWrapper(void *r)
{
nxSetGCFontReq *req = r;
GrSetGCFont(req->gcid, req->fontid);
}
static void
GrGetGCTextSizeWrapper(void *r)
{
nxGetGCTextSizeReq *req = r;
GR_SIZE retwidth, retheight, retbase;
GrGetGCTextSize(req->gcid, GetReqData(req), GetReqVarLen(req),
req->flags, &retwidth, &retheight, &retbase);
GsWriteType(current_fd,GrNumGetGCTextSize);
GsWrite(current_fd, &retwidth, sizeof(retwidth));
GsWrite(current_fd, &retheight, sizeof(retheight));
GsWrite(current_fd, &retbase, sizeof(retbase));
}
/* FIXME: fails with size > 64k if sizeof(int) == 2*/
static void
GsReadAreaWrapper(void *r)
{
nxReadAreaReq *req = r;
int size;
GR_PIXELVAL * area;
/* FIXME: optimize for smaller pixelvals*/
size = req->width * req->height * sizeof(GR_PIXELVAL);
if(!(area = malloc(size))) {
/*GsPutCh(current_fd, GrRetENoMem);*/ /* FIXME*/
/*return;*/
}
GrReadArea(req->drawid, req->x, req->y, req->width, req->height, area);
GsWriteType(current_fd,GrNumReadArea);
GsWrite(current_fd, area, size);
free(area);
}
/* FIXME: fails with size > 64k if sizeof(int) == 2*/
static void
GrAreaWrapper(void *r)
{
nxAreaReq *req = r;
GrArea(req->drawid, req->gcid, req->x, req->y, req->width, req->height,
GetReqData(req), req->pixtype);
}
/* FIXME: fails with bitmapsize > 64k if sizeof(int) == 2*/
static void
GrBitmapWrapper(void *r)
{
nxBitmapReq *req = r;
GrBitmap(req->drawid, req->gcid, req->x, req->y, req->width,
req->height, GetReqData(req));
}
static void
GrDrawImageBitsWrapper(void *r)
{
nxDrawImageBitsReq *req = r;
char * addr;
int imagesize;
GR_IMAGE_HDR hdr;
hdr.width = req->width;
hdr.height = req->height;
hdr.planes = req->planes;
hdr.bpp = req->bpp;
hdr.pitch = req->pitch;
hdr.bytesperpixel = req->bytesperpixel;
hdr.compression = req->compression;
hdr.palsize = req->palsize;
hdr.transcolor = req->transcolor;
addr = GetReqData(req);
hdr.imagebits = (MWUCHAR *)addr;
imagesize = hdr.pitch * hdr.height;
hdr.palette = (MWPALENTRY *)(addr + imagesize);
GrDrawImageBits(req->drawid, req->gcid, req->x, req->y, &hdr);
}
static void
GrCopyAreaWrapper(void *r)
{
nxCopyAreaReq *req = r;
GrCopyArea(req->drawid, req->gcid, req->x, req->y, req->width, req->height,
req->srcid, req->srcx, req->srcy, req->op);
}
static void
GrTextWrapper(void *r)
{
nxTextReq *req = r;
GrText(req->drawid, req->gcid, req->x, req->y, GetReqData(req),
req->count, req->flags);
}
static void
GrNewCursorWrapper(void *r)
{
nxNewCursorReq *req = r;
int varlen;
char * bitmap;
GR_CURSOR_ID cursorid;
varlen = GetReqVarLen(req);
bitmap = GetReqData(req);
cursorid = GrNewCursor(req->width, req->height,
req->hotx, req->hoty, req->fgcolor, req->bgcolor,
(GR_BITMAP *)bitmap, (GR_BITMAP *)(bitmap+varlen/2));
GsWriteType(current_fd, GrNumNewCursor);
GsWrite(current_fd, &cursorid, sizeof(cursorid));
}
static void
GrMoveCursorWrapper(void *r)
{
nxMoveCursorReq *req = r;
GrMoveCursor(req->x, req->y);
}
static void
GrGetSystemPaletteWrapper(void *r)
{
GR_PALETTE pal;
GrGetSystemPalette(&pal);
GsWriteType(current_fd,GrNumGetSystemPalette);
GsWrite(current_fd, &pal, sizeof(pal));
}
static void
GrSetSystemPaletteWrapper(void *r)
{
nxSetSystemPaletteReq *req = r;
GR_PALETTE pal;
pal.count = req->count;
memcpy(pal.palette, req->palette, sizeof(pal.palette));
GrSetSystemPalette(req->first, &pal);
}
static void
GrFindColorWrapper(void *r)
{
nxFindColorReq *req = r;
GR_PIXELVAL pixel;
GrFindColor(req->color, &pixel);
GsWriteType(current_fd,GrNumFindColor);
GsWrite(current_fd, &pixel, sizeof(pixel));
}
static void
GrInjectEventWrapper(void *r)
{
nxInjectEventReq *req = r;
switch(req->event_type) {
case GR_INJECT_EVENT_POINTER:
GrInjectPointerEvent(req->event.pointer.x,
req->event.pointer.y,
req->event.pointer.button,
req->event.pointer.visible);
break;
case GR_INJECT_EVENT_KEYBOARD:
GrInjectKeyboardEvent(req->event.keyboard.wid,
req->event.keyboard.keyvalue,
req->event.keyboard.modifier,
req->event.keyboard.scancode,
req->event.keyboard.pressed);
break;
}
}
static void
GrSetWMPropertiesWrapper(void *r)
{
nxSetWMPropertiesReq *req = r;
GR_WM_PROPERTIES *props = GetReqData(req);
if(GetReqVarLen(req) - sizeof(GR_WM_PROPERTIES))
props->title = (char *)props + sizeof(GR_WM_PROPERTIES);
else
props->title = NULL;
GrSetWMProperties(req->windowid, props);
}
static void
GrGetWMPropertiesWrapper(void *r)
{
nxGetWMPropertiesReq *req = r;
UINT16 textlen;
GR_WM_PROPERTIES props;
GrGetWMProperties(req->windowid, &props);
if(props.title)
textlen = strlen(props.title) + 1;
else textlen = 0;
GsWriteType(current_fd,GrNumGetWMProperties);
GsWrite(current_fd, &props, sizeof(props));
GsWrite(current_fd, &textlen, sizeof(textlen));
if(textlen)
GsWrite(current_fd, props.title, textlen);
}
static void
GrCloseWindowWrapper(void *r)
{
nxCloseWindowReq *req = r;
GrCloseWindow(req->windowid);
}
static void
GrKillWindowWrapper(void *r)
{
nxKillWindowReq *req = r;
GrKillWindow(req->windowid);
}
static void
GrDrawImageFromFileWrapper(void *r)
{
nxDrawImageFromFileReq *req = r;
GrDrawImageFromFile(req->drawid, req->gcid, req->x, req->y, req->width,
req->height, GetReqData(req), req->flags);
}
static void
GrLoadImageFromFileWrapper(void *r)
{
nxLoadImageFromFileReq *req = r;
GR_IMAGE_ID id;
id = GrLoadImageFromFile(GetReqData(req), req->flags);
GsWriteType(current_fd, GrNumLoadImageFromFile);
GsWrite(current_fd, &id, sizeof(id));
}
static void
GrDrawImageToFitWrapper(void *r)
{
nxDrawImageToFitReq *req = r;
GrDrawImageToFit(req->drawid, req->gcid, req->x, req->y, req->width,
req->height, req->imageid);
}
static void
GrFreeImageWrapper(void *r)
{
nxFreeImageReq *req = r;
GrFreeImage(req->id);
}
static void
GrGetImageInfoWrapper(void *r)
{
nxGetImageInfoReq *req = r;
GR_IMAGE_INFO info;
GrGetImageInfo(req->id, &info);
GsWriteType(current_fd, GrNumGetImageInfo);
GsWrite(current_fd, &info, sizeof(info));
}
static void
GrSetScreenSaverTimeoutWrapper(void *r)
{
nxSetScreenSaverTimeoutReq *req = r;
GrSetScreenSaverTimeout(req->timeout);
}
static void
GrSetSelectionOwnerWrapper(void *r)
{
nxSetSelectionOwnerReq *req = r;
GrSetSelectionOwner(req->wid, GetReqData(req));
}
static void
GrGetSelectionOwnerWrapper(void *r)
{
GR_CHAR *typelist;
GR_WINDOW_ID wid;
unsigned short len;
wid = GrGetSelectionOwner(&typelist);
GsWriteType(current_fd, GrNumGetSelectionOwner);
GsWrite(current_fd, &wid, sizeof(wid));
if(wid) {
len = strlen(typelist) + 1;
GsWrite(current_fd, &len, sizeof(len));
GsWrite(current_fd, typelist, len);
}
}
static void
GrRequestClientDataWrapper(void *r)
{
nxRequestClientDataReq *req = r;
GrRequestClientData(req->wid, req->rid, req->serial, req->mimetype);
}
static void
GrSendClientDataWrapper(void *r)
{
nxSendClientDataReq *req = r;
GrSendClientData(req->wid, req->did, req->serial, req->len,
GetReqVarLen(req), GetReqData(req));
}
static void
GrBellWrapper(void *r)
{
GrBell();
}
static void
GrSetBackgroundPixmapWrapper(void *r)
{
nxSetBackgroundPixmapReq *req = r;
GrSetBackgroundPixmap(req->wid, req->pixmap, req->flags);
}
static void
GrDestroyCursorWrapper(void *r)
{
nxDestroyCursorReq *req = r;
GrDestroyCursor(req->cursorid);
}
static void
GrQueryTreeWrapper(void *r)
{
nxQueryTreeReq *req = r;
GR_WINDOW_ID parentid;
GR_WINDOW_ID * children;
GR_COUNT nchildren;
GrQueryTree(req->windowid, &parentid, &children, &nchildren);
GsWriteType(current_fd, GrNumQueryTree);
GsWrite(current_fd, &parentid, sizeof(parentid));
GsWrite(current_fd, &nchildren, sizeof(nchildren));
if (nchildren) {
GsWrite(current_fd, children, nchildren * sizeof(GR_WINDOW_ID));
free(children);
}
}
static void
GrCreateTimerWrapper(void *r)
{
nxCreateTimerReq *req = r;
GR_TIMER_ID timerid;
timerid = GrCreateTimer(req->wid, req->period);
GsWriteType(current_fd, GrNumCreateTimer);
GsWrite(current_fd, &timerid, sizeof (timerid));
}
typedef struct image_list {
void *data;
int id;
int size;
int offset;
struct image_list *next;
} imagelist_t;
static imagelist_t *imageListHead = 0;
static imagelist_t *imageListTail = 0;
static int imageListId = 0;
static void freeImageBuffer(imagelist_t *buffer) {
imagelist_t *prev = 0;
imagelist_t *ptr = imageListHead;
while(ptr) {
if (ptr == buffer) {
if (prev)
prev->next = buffer->next;
else
imageListHead = buffer->next;
if (!imageListHead) imageListTail = 0;
free(buffer->data);
free(buffer);
return;
}
prev = ptr;
ptr = ptr->next;
}
}
static void GrImageBufferAllocWrapper(void *r) {
nxImageBufferAllocReq *req = r;
/* Add a new buffer to the end of the list */
if (!imageListTail) {
imageListHead = imageListTail = (imagelist_t *) malloc(sizeof(imagelist_t));
}
else {
imageListTail->next = (imagelist_t *) malloc(sizeof(imagelist_t));
imageListTail = imageListTail->next;
}
imageListTail->id = ++imageListId;
imageListTail->data = (void *) malloc(req->size);
imageListTail->size = req->size;
imageListTail->offset = 0;
imageListTail->next = 0;
GsWriteType(current_fd,GrNumImageBufferAlloc);
GsWrite(current_fd, &imageListTail->id, sizeof(int));
}
static void GrImageBufferSendWrapper(void *r) {
int csize = 0;
imagelist_t *buffer = 0;
nxImageBufferSendReq *req = r;
for(buffer = imageListHead; buffer; buffer = buffer->next)
if (buffer->id == req->buffer_id) break;
if (!buffer) return;
if (buffer->offset + req->size >= buffer->size)
csize = buffer->size - buffer->offset;
else
csize = req->size;
if (!csize) return;
memcpy((void *) (buffer->data + buffer->offset),
GetReqData(req), csize);
buffer->offset += csize;
}
void GrLoadImageFromBufferWrapper(void *r) {
GR_IMAGE_ID id;
imagelist_t *buffer = 0;
nxLoadImageFromBufferReq *req = r;
for(buffer = imageListHead; buffer; buffer = buffer->next)
if (buffer->id == req->buffer) break;
if (!buffer) return;
id = GrLoadImageFromBuffer(buffer->data, buffer->size, req->flags);
GsWriteType(current_fd, GrNumLoadImageFromBuffer);
GsWrite(current_fd, &id, sizeof(id));
freeImageBuffer(buffer);
}
void GrDrawImageFromBufferWrapper(void *r) {
imagelist_t *buffer = 0;
nxDrawImageFromBufferReq *req = r;
for(buffer = imageListHead; buffer; buffer = buffer->next)
if (buffer->id == req->buffer) break;
if (!buffer) return;
GrDrawImageFromBuffer(req->drawid, req->gcid, req->x, req->y, req->width,
req->height, buffer->data, buffer->size,
req->flags);
freeImageBuffer(buffer);
}
static void
GrDestroyTimerWrapper(void *r)
{
nxDestroyTimerReq *req = r;
GrDestroyTimer(req->timerid);
}
static void
GrSetPortraitModeWrapper(void *r)
{
nxSetPortraitModeReq *req = r;
GrSetPortraitMode(req->portraitmode);
}
/*
* This function makes the Nano-X server set up a shared memory segment
* that the client can use when feeding the Nano-X server with requests.
* There is a corresponding GrShmCmdsFlush function that will make the
* server execute the batched commands.
*/
#define SHMKEY_BASE 1000000
#define SHMKEY_MAX 256
void
GrReqShmCmdsWrapper(void *r)
{
#if HAVE_SHAREDMEM_SUPPORT
nxReqShmCmdsReq *req = r;
int key, shmid;
char *tmp;
if ( curclient->shm_cmds != 0 )
goto bad;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -