static void GrGetNextEventWrapper(void *r) { #if 1 /* tell main loop to call Finish routine on event*/ curclient->waiting_for_event = TRUE; #else GR_EVENT evt; /* first check if any event ready*/ GrCheckNextEvent(&evt); if(evt.type == GR_EVENT_TYPE_NONE) { /* tell main loop to call Finish routine on event*/ curclient->waiting_for_event = TRUE; return; } GsWriteType(current_fd, GrNumGetNextEvent); GsWrite(current_fd, &evt, sizeof(evt)); if(evt.type == GR_EVENT_TYPE_CLIENT_DATA) { GsWrite(fd, evt.data, evt.datalen); free(evt.data); } #endif }
static void GrPeekEventWrapper(void *r) { GR_EVENT evt; GR_CHAR ret; GR_EVENT_CLIENT_DATA *cde; ret = GrPeekEvent(&evt); GsWriteType(current_fd,GrNumPeekEvent); GsWrite(current_fd, &evt, sizeof(evt)); if(evt.type == GR_EVENT_TYPE_CLIENT_DATA) { cde = (GR_EVENT_CLIENT_DATA *)&evt; if(cde->data) { GsWrite(current_fd, cde->data, cde->datalen); free(cde->data); } cde->datalen = 0; } GsWrite(current_fd, &ret, sizeof(GR_CHAR)); /* EXPERIMENTAL CODE for GTK+ select wait*/ if (ret == 0) { /* tell main loop to call Finish routine on event*/ curclient->waiting_for_event = TRUE; } }
static void GrGetFontListWrapper(void *r) { MWFONTLIST **list; int num; int i, ttlen, mwlen; GrGetFontList(&list, &num); GsWriteType(current_fd, GrNumGetFontList); /* the number of strings comming in */ GsWrite(current_fd, &num, sizeof(int)); if(num != -1) { for(i = 0; i < num; i++) { ttlen = strlen(list[i]->ttname) + 1; mwlen = strlen(list[i]->mwname) + 1; GsWrite(current_fd, &ttlen, sizeof(int)); GsWrite(current_fd, list[i]->ttname, ttlen * sizeof(char)); GsWrite(current_fd, &mwlen, sizeof(int)); GsWrite(current_fd, list[i]->mwname, mwlen * sizeof(char)); } GrFreeFontList(&list, num); } }
static void GrGetGCTextSizeWrapper(void *r) { nxGetGCTextSizeReq *req = r; GR_SIZE retwidth, retheight, retbase; GrGetGCTextSize(req->gcid, GetReqData(req), req->charcount, 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)); }
static void GrGetRegionBoxWrapper(void *r) { nxRectInRegionReq *req = r; GR_BOOL ret_value; GR_RECT ret_rect; ret_value = GrGetRegionBox(req->regionid, &ret_rect); GsWriteType(current_fd, GrNumGetRegionBox); GsWrite(current_fd, &ret_rect, sizeof(ret_rect)); GsWriteType(current_fd, GrNumGetRegionBox); GsWrite(current_fd, &ret_value, sizeof(ret_value)); }
static void GrQueryPointerWrapper(void *r) { GR_WINDOW_ID mwin; GR_COORD x, y; GR_BUTTON bmask; GrQueryPointer(&mwin, &x, &y, &bmask); GsWriteType(current_fd, GrNumQueryPointer); GsWrite(current_fd, &mwin, sizeof(mwin)); GsWrite(current_fd, &x, sizeof(x)); GsWrite(current_fd, &y, sizeof(y)); GsWrite(current_fd, &bmask, sizeof(bmask)); }
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 GrNewGCWrapper(void *r) { GR_GC_ID gc = GrNewGC(); GsWriteType(current_fd,GrNumNewGC); GsWrite(current_fd, &gc, sizeof(gc)); }
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((const char *)typelist) + 1; GsWrite(current_fd, &len, sizeof(len)); GsWrite(current_fd, typelist, len); } }
void GrShmCmdsFlushWrapper(void *r) { nxShmCmdsFlushReq *req = r; unsigned char reply; #if HAVE_SHAREDMEM_SUPPORT nxReq *pr; int length; unsigned char *do_req, *do_req_last; if ( current_shm_cmds == 0 || current_shm_cmds_size < req->size ) { /* No or short shm present serverside, bug or mischief */ EPRINTF("nano-X: Ill behaved client assumes shm ok\n"); if ( req->reply ) { reply = 0; GsWrite(current_fd, &reply, 1); } return; } do_req = current_shm_cmds; do_req_last = current_shm_cmds + req->size; while ( do_req < do_req_last ) { pr = (nxReq *)do_req; length = GetReqAlignedLen(pr); if ( pr->reqType < GrTotalNumCalls ) { GrFunctions[pr->reqType].func(pr); } else { EPRINTF("nano-X: Error bad shm function!\n"); } do_req += length; } if ( req->reply ) { reply = 1; GsWrite(current_fd, &reply, 1); } #else /* no shared memory support*/ if ( req->reply ) { reply = 0; GsWrite(current_fd, &reply, 1); } #endif /* HAVE_SHAREDMEM_SUPPORT*/ }
static void GrNewRegionWrapper(void *r) { GR_REGION_ID region = GrNewRegion(); GsWriteType(current_fd, GrNumNewRegion); GsWrite(current_fd, ®ion, sizeof(region)); }
static void GrGetFocusWrapper(void *r) { GR_WINDOW_ID wid = GrGetFocus(); GsWriteType(current_fd, GrNumGetFocus); GsWrite(current_fd, &wid, sizeof(wid)); }
static void GrGetSysColorWrapper(void *r) { nxGetSysColorReq *req = r; GR_COLOR color = GrGetSysColor(req->index); GsWriteType(current_fd, GrNumGetSysColor); GsWrite(current_fd, &color, sizeof(color)); }
static void GrGetScreenInfoWrapper(void *r) { GR_SCREEN_INFO si; GrGetScreenInfo(&si); GsWriteType(current_fd,GrNumGetScreenInfo); GsWrite(current_fd, &si, sizeof(si)); }
static void GrCheckNextEventWrapper(void *r) { GR_EVENT evt; GR_EVENT_CLIENT_DATA *cde; GrCheckNextEvent(&evt); GsWriteType(current_fd,GrNumGetNextEvent); GsWrite(current_fd, &evt, sizeof(evt)); if(evt.type == GR_EVENT_TYPE_CLIENT_DATA) { cde = (GR_EVENT_CLIENT_DATA *)&evt; if(cde->data) { GsWrite(current_fd, cde->data, cde->datalen); free(cde->data); } cde->datalen = 0; } }
static void GrGetSystemPaletteWrapper(void *r) { GR_PALETTE pal; GrGetSystemPalette(&pal); GsWriteType(current_fd,GrNumGetSystemPalette); GsWrite(current_fd, &pal, sizeof(pal)); }
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 GrPointInRegionWrapper(void *r) { nxPointInRegionReq *req = r; GR_BOOL ret_value = GrPointInRegion(req->regionid, req->x, req->y); GsWriteType(current_fd, GrNumPointInRegion); GsWrite(current_fd, &ret_value, sizeof(ret_value)); }
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 GrGetFontInfoWrapper(void *r) { nxGetFontInfoReq *req = r; GR_FONT_INFO fi; GrGetFontInfo(req->fontid, &fi); GsWriteType(current_fd,GrNumGetFontInfo); GsWrite(current_fd, &fi, sizeof(fi)); }
static void GrGetWindowInfoWrapper(void *r) { nxGetWindowInfoReq *req = r; GR_WINDOW_INFO wi; GrGetWindowInfo(req->windowid, &wi); GsWriteType(current_fd,GrNumGetWindowInfo); GsWrite(current_fd, &wi, sizeof(wi)); }
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 GrEqualRegionWrapper(void *r) { nxEqualRegionReq *req = r; GR_BOOL ret_value; ret_value = GrEqualRegion(req->region1, req->region2); GsWriteType(current_fd, GrNumEqualRegion); GsWrite(current_fd, &ret_value, sizeof(ret_value)); }
static void GrCopyGCWrapper(void *r) { nxCopyGCReq *req = r; GR_GC_ID gcnew; gcnew = GrCopyGC(req->gcid); GsWriteType(current_fd,GrNumCopyGC); GsWrite(current_fd, &gcnew, sizeof(gcnew)); }
static void GrGetGCInfoWrapper(void *r) { nxGetGCInfoReq *req = r; GR_GC_INFO gcinfo; GrGetGCInfo(req->gcid, &gcinfo); GsWriteType(current_fd,GrNumGetGCInfo); GsWrite(current_fd, &gcinfo, sizeof(gcinfo)); }
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 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 GrCreateFontExWrapper(void *r) { nxCreateFontExReq *req = r; GR_FONT_ID fontid; fontid = GrCreateFontEx(GetReqData(req), req->height, req->width, NULL); GsWriteType(current_fd, GrNumCreateFontEx); GsWrite(current_fd, &fontid, sizeof(fontid)); }
/* Complete the GrGetNextEvent call from client. * The client is still waiting on a read at this point. */ void GrGetNextEventWrapperFinish(int fd) { GR_EVENT evt; GR_EVENT_CLIENT_DATA *cde; /* get the event and pass it to client*/ /* this will never be GR_EVENT_TYPE_NONE*/ GrCheckNextEvent(&evt); GsWriteType(fd,GrNumGetNextEvent); GsWrite(fd, &evt, sizeof(evt)); if(evt.type == GR_EVENT_TYPE_CLIENT_DATA) { cde = (GR_EVENT_CLIENT_DATA *)&evt; if(cde->data) { GsWrite(fd, cde->data, cde->datalen); free(cde->data); } cde->datalen = 0; } }
static void GrCreateLogFontWrapper(void *r) { nxCreateLogFontReq *req = r; GR_FONT_ID fontid; fontid = GrCreateFontEx(NULL, 0, 0, &req->lf); GsWriteType(current_fd, GrNumCreateLogFont); GsWrite(current_fd, &fontid, sizeof(fontid)); }