⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xprint.c

📁 远程桌面连接工具
💻 C
📖 第 1 页 / 共 5 页
字号:
    {	case X_PrintQueryVersion:            return ProcXpQueryVersion(client);	case X_PrintGetPrinterList:	    return ProcXpGetPrinterList(client);	case X_PrintCreateContext:	    return ProcXpCreateContext(client);	case X_PrintSetContext:	    return ProcXpSetContext(client);	case X_PrintGetContext:	    return ProcXpGetContext(client);	case X_PrintDestroyContext:	    return ProcXpDestroyContext(client);	case X_PrintGetContextScreen:	    return ProcXpGetContextScreen(client);	case X_PrintStartJob:            return ProcXpStartJob(client);	case X_PrintEndJob:            return ProcXpEndJob(client);	case X_PrintStartDoc:            return ProcXpStartDoc(client);	case X_PrintEndDoc:            return ProcXpEndDoc(client);	case X_PrintStartPage:            return ProcXpStartPage(client);	case X_PrintEndPage:            return ProcXpEndPage(client);	case X_PrintSelectInput:            return ProcXpSelectInput(client);	case X_PrintInputSelected:            return ProcXpInputSelected(client);	case X_PrintPutDocumentData:            return ProcXpPutDocumentData(client);	case X_PrintGetDocumentData:            return ProcXpGetDocumentData(client);	case X_PrintSetAttributes:	    return ProcXpSetAttributes(client);	case X_PrintGetAttributes:	    return ProcXpGetAttributes(client);	case X_PrintGetOneAttribute:	    return ProcXpGetOneAttribute(client);	case X_PrintRehashPrinterList:	    return ProcXpRehashPrinterList(client);	case X_PrintQueryScreens:            return ProcXpQueryScreens(client);	case X_PrintGetPageDimensions:            return ProcXpGetPageDimensions(client);	case X_PrintSetImageResolution:            return ProcXpSetImageResolution(client);	case X_PrintGetImageResolution:            return ProcXpGetImageResolution(client);	default:	    return BadRequest;    }}static int ProcXpSwappedDispatch(client)    ClientPtr client;{    int temp;    REQUEST(xReq);    switch(stuff->data)    {	case X_PrintQueryVersion:	    swaps(&stuff->length, temp);            return ProcXpQueryVersion(client);	case X_PrintGetPrinterList:	    return SProcXpGetPrinterList(client);	case X_PrintCreateContext:	    return SProcXpCreateContext(client);	case X_PrintSetContext:	    return SProcXpSetContext(client);	case X_PrintGetContext:	    return SProcXpGetContext(client);	case X_PrintDestroyContext:	    return SProcXpDestroyContext(client);	case X_PrintGetContextScreen:	    return SProcXpGetContextScreen(client);	case X_PrintStartJob:            return SProcXpStartJob(client);	case X_PrintEndJob:            return SProcXpEndJob(client);	case X_PrintStartDoc:            return SProcXpStartDoc(client);	case X_PrintEndDoc:            return SProcXpEndDoc(client);	case X_PrintStartPage:            return SProcXpStartPage(client);	case X_PrintEndPage:            return SProcXpEndPage(client);	case X_PrintSelectInput:	    return SProcXpSelectInput(client);	case X_PrintInputSelected:	    return SProcXpInputSelected(client);	case X_PrintPutDocumentData:            return SProcXpPutDocumentData(client);	case X_PrintGetDocumentData:            return SProcXpGetDocumentData(client);	case X_PrintSetAttributes:	    return SProcXpSetAttributes(client);	case X_PrintGetAttributes:	    return SProcXpGetAttributes(client);	case X_PrintGetOneAttribute:	    return SProcXpGetOneAttribute(client);	case X_PrintRehashPrinterList:	    return SProcXpRehashPrinterList(client);	case X_PrintQueryScreens:	    swaps(&stuff->length, temp);            return ProcXpQueryScreens(client);	case X_PrintGetPageDimensions:            return SProcXpGetPageDimensions(client);	case X_PrintSetImageResolution:            return SProcXpSetImageResolution(client);	case X_PrintGetImageResolution:            return SProcXpGetImageResolution(client);	default:	    return BadRequest;    }}static intProcXpQueryVersion(client)    ClientPtr client;{    REQUEST(xPrintQueryVersionReq);    xPrintQueryVersionReply rep;    register int n;    long l;    REQUEST_SIZE_MATCH(xPrintQueryVersionReq);    rep.type = X_Reply;    rep.length = 0;    rep.sequenceNumber = client->sequence;    rep.majorVersion = XP_MAJOR_VERSION;    rep.minorVersion = XP_MINOR_VERSION;    if (client->swapped) {        swaps(&rep.sequenceNumber, n);        swapl(&rep.length, l);        swaps(&rep.majorVersion, n);        swaps(&rep.minorVersion, n);    }    WriteToClient(client, sz_xPrintQueryVersionReply, (char *)&rep);    return client->noClientException;}/******************************************************************************* * * GetPrinterList : Return a list of all printers associated with this *                  server.  Calls XpDiGetPrinterList, which is defined in *		    the device-independent code in Xserver/Xprint. * ******************************************************************************/static intProcXpGetPrinterList(client)    ClientPtr client;{    REQUEST(xPrintGetPrinterListReq);    int totalSize, numEntries;    XpDiListEntry **pList, *pEntry;    xPrintGetPrinterListReply *rep;    int n, i, totalBytes;    long l;    char *curByte;    REQUEST_AT_LEAST_SIZE(xPrintGetPrinterListReq);    totalSize = ((sz_xPrintGetPrinterListReq) >> 2) +                ((stuff->printerNameLen + 3) >> 2) +                ((stuff->localeLen + 3) >> 2);    if(totalSize != client->req_len)	 return BadLength;    pList = XpDiGetPrinterList(stuff->printerNameLen, (char *)(stuff + 1), 			       stuff->localeLen, (char *)((stuff + 1) + 			       QUADPAD(stuff->printerNameLen)));    for(numEntries = 0, totalBytes = sz_xPrintGetPrinterListReply;	pList[numEntries] != (XpDiListEntry *)NULL;	numEntries++)    {	totalBytes += 2 * sizeof(CARD32); 	totalBytes += QUADPAD(strlen(pList[numEntries]->name));	totalBytes += QUADPAD(strlen(pList[numEntries]->description));    }    if((rep = (xPrintGetPrinterListReply *)xalloc(totalBytes)) ==        (xPrintGetPrinterListReply *)NULL)	return BadAlloc;    rep->type = X_Reply;    rep->length = (totalBytes - sz_xPrintGetPrinterListReply) >> 2;    rep->sequenceNumber = client->sequence;    rep->listCount = numEntries;    if (client->swapped) {        swaps(&rep->sequenceNumber, n);        swapl(&rep->length, l);        swapl(&rep->listCount, l);    }    for(i = 0, curByte = (char *)(rep + 1); i < numEntries; i++)    {	CARD32 *pCrd;	int len;	pCrd = (CARD32 *)curByte;	len = strlen(pList[i]->name);	*pCrd = len;        if (client->swapped)            swapl((long *)curByte, l);	curByte += sizeof(CARD32);	strncpy(curByte, pList[i]->name, len);	curByte += QUADPAD(len);	pCrd = (CARD32 *)curByte;	len = strlen(pList[i]->description);	*pCrd = len;        if (client->swapped)            swapl((long *)curByte, l);	curByte += sizeof(CARD32);	strncpy(curByte, pList[i]->description, len);	curByte += QUADPAD(len);    }    XpDiFreePrinterList(pList);    WriteToClient(client, totalBytes, (char *)rep);    xfree(rep);    return client->noClientException;}/******************************************************************************* * * QueryScreens: Returns the list of screens which are associated with *               print drivers. * ******************************************************************************/static intProcXpQueryScreens(client)    ClientPtr client;{    REQUEST(xPrintQueryScreensReq);    int i, numPrintScreens, totalSize;    WINDOW *pWinId;    xPrintQueryScreensReply *rep;    long l;    REQUEST_SIZE_MATCH(xPrintQueryScreensReq);    rep = (xPrintQueryScreensReply *)xalloc(sz_xPrintQueryScreensReply);    pWinId = (WINDOW *)(rep + 1);    for(i = 0, numPrintScreens = 0, totalSize = sz_xPrintQueryScreensReply; 	i < MAXSCREENS; i++)    {	/*	 * If a screen has registered with our extension, then it's	 * a printer screen.	 */	if(XpScreens[i] != (XpScreenPtr)NULL)	{	    numPrintScreens++;	    totalSize += sizeof(WINDOW);	    rep = (xPrintQueryScreensReply *)xrealloc(rep, totalSize);	    *pWinId = WindowTable[i]->drawable.id;            if (client->swapped)                swapl((long *)pWinId, l);	    pWinId++;	}    }    rep->type = X_Reply;    rep->sequenceNumber = client->sequence;    rep->length = (totalSize - sz_xPrintQueryScreensReply) >> 2;    rep->listCount = numPrintScreens;    if (client->swapped)    {	int n;        swaps(&rep->sequenceNumber, n);        swapl(&rep->length, l);        swapl(&rep->listCount, l);    }    WriteToClient(client, totalSize, (char *)rep);    xfree(rep);    return client->noClientException;}static int ProcXpGetPageDimensions(client)    ClientPtr client;{    REQUEST(xPrintGetPageDimensionsReq);    CARD16 width, height;    xRectangle rect;    xPrintGetPageDimensionsReply rep;    XpContextPtr pContext;    int result;    REQUEST_SIZE_MATCH(xPrintGetPageDimensionsReq);    if((pContext =(XpContextPtr)SecurityLookupIDByType(client,						       stuff->printContext,						       RTcontext,						       SecurityReadAccess))       == (XpContextPtr)NULL)    {	client->errorValue = stuff->printContext;        return XpErrorBase+XPBadContext;    }    if(pContext->funcs.GetMediumDimensions != (int (*)())NULL)        result = pContext->funcs.GetMediumDimensions(pContext, &width, &height);    else        return BadImplementation;    if(pContext->funcs.GetReproducibleArea != (int (*)())NULL)        result = pContext->funcs.GetReproducibleArea(pContext, &rect);    else        return BadImplementation;    rep.type = X_Reply;    rep.sequenceNumber = client->sequence;    rep.length = 0;    rep.width = width;    rep.height = height;    rep.rx = rect.x;    rep.ry = rect.y;    rep.rwidth = rect.width;    rep.rheight = rect.height;    if(client->swapped)    {	int n;	long l;        swaps(&rep.sequenceNumber, n);        swapl(&rep.length, l);        swaps(&rep.width, n);        swaps(&rep.height, n);        swaps(&rep.rx, n);        swaps(&rep.ry, n);        swaps(&rep.rwidth, n);        swaps(&rep.rheight, n);    }    WriteToClient(client, sz_xPrintGetPageDimensionsReply, (char *)&rep);    return client->noClientException;}static int ProcXpSetImageResolution(client)    ClientPtr client;{    REQUEST(xPrintSetImageResolutionReq);    xPrintSetImageResolutionReply rep;    XpContextPtr pContext;    Bool status;    int result;    REQUEST_SIZE_MATCH(xPrintSetImageResolutionReq);    if((pContext =(XpContextPtr)SecurityLookupIDByType(client,						       stuff->printContext,						       RTcontext,						       SecurityWriteAccess))       == (XpContextPtr)NULL)    {	client->errorValue = stuff->printContext;        return XpErrorBase+XPBadContext;    }    rep.prevRes = pContext->imageRes;    if(pContext->funcs.SetImageResolution != (int (*)())NULL)        result = pContext->funcs.SetImageResolution(pContext,						    (int)stuff->imageRes,						    &status);    else        status = FALSE;    rep.type = X_Reply;    rep.sequenceNumber = client->sequence;    rep.length = 0;    rep.status = status;    if(client->swapped)    {	int n;	long l;        swaps(&rep.sequenceNumber, n);        swapl(&rep.length, l);        swaps(&rep.prevRes, n);    }    WriteToClient(client, sz_xPrintSetImageResolutionReply, (char *)&rep);    return client->noClientException;}static int ProcXpGetImageResolution(client)    ClientPtr client;{    REQUEST(xPrintGetImageResolutionReq);    xPrintGetImageResolutionReply rep;    XpContextPtr pContext;    Bool status;    int result;    REQUEST_SIZE_MATCH(xPrintGetImageResolutionReq);    if((pContext =(XpContextPtr)SecurityLookupIDByType(client,						       stuff->printContext,						       RTcontext,						       SecurityReadAccess))       == (XpContextPtr)NULL)    {	client->errorValue = stuff->printContext;        return XpErrorBase+XPBadContext;    }    rep.type = X_Reply;    rep.sequenceNumber = client->sequence;    rep.length = 0;    rep.imageRes = pContext->imageRes;    if(client->swapped)    {	int n;	long l;        swaps(&rep.sequenceNumber, n);        swapl(&rep.length, l);        swaps(&rep.imageRes, n);    }    WriteToClient(client, sz_xPrintGetImageResolutionReply, (char *)&rep);    return client->noClientException;}/******************************************************************************* * * RehashPrinterList : Cause the server's list of printers to be rebuilt. *                     This allows new printers to be added, or old ones *		       deleted without needing to restart the server. * ******************************************************************************/static intProcXpRehashPrinterList(client)    ClientPtr client;{    REQUEST(xPrintRehashPrinterListReq);    REQUEST_SIZE_MATCH(xPrintRehashPrinterListReq);    return XpRehashPrinterList();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -