示例#1
0
/*
 * XpGetContentOrientation determines the content-orientation as
 * determined by the passed context. The page and document pools are
 * queried in turn for a specified content-orientation attribute. If none
 * is found the first content-orientation in the
 * content-orientations-supported printer attribute is taken as the
 * default. 
 *
 * Note: This routine assumes the values found in the passed context's
 *       attributes pools have been validated.
 */
XpOid
XpGetContentOrientation(
			XpContextPtr pContext)
{
    XpOid orientation;

    orientation = XpGetOidAttr(pContext, XPPageAttr,
			       xpoid_att_content_orientation,
			       (XpOidList*)NULL);
    if(xpoid_none == orientation)
	orientation = XpGetOidAttr(pContext, XPDocAttr,
				   xpoid_att_content_orientation,
				   (XpOidList*)NULL);
    if(xpoid_none == orientation)
    {
	XpOidList* content_orientations_supported;

	content_orientations_supported =
	    XpGetListAttr(pContext, XPPrinterAttr,
			  xpoid_att_content_orientations_supported,
			  (XpOidList*)NULL);
	orientation = XpOidListGetOid(content_orientations_supported, 0);
	XpOidListDelete(content_orientations_supported);
    }
    return orientation;
}
示例#2
0
/*
 * XpGetAvailableCompression determines the available-compression as
 * determined by the passed context. The page and document pools are
 * queried in turn for a specified content-orientation attribute. If none
 * is found the first available-compression in the
 * avaiable-compressions-supported printer attribute is taken as the
 * default.
 *
 * Note: This routine assumes the values found in the passed context's
 *       attributes pools have been validated.
 */
XpOid
XpGetAvailableCompression(
			XpContextPtr pContext)
{
    XpOid compression;

    compression = XpGetOidAttr(pContext, XPPageAttr,
			       xpoid_att_available_compression,
			       (XpOidList*)NULL);
    if(xpoid_none == compression)
	compression = XpGetOidAttr(pContext, XPDocAttr,
				   xpoid_att_available_compression,
				   (XpOidList*)NULL);
    if(xpoid_none == compression)
    {
	XpOidList* available_compressions_supported;

	available_compressions_supported =
	    XpGetListAttr(pContext, XPPrinterAttr,
			  xpoid_att_available_compressions_supported,
			  (XpOidList*)NULL);
	compression = XpOidListGetOid(available_compressions_supported, 0);
	XpOidListDelete(available_compressions_supported);
    }
    return compression;
}
示例#3
0
void
XpValidateJobPool(XpContextPtr pContext,
		  const XpValidatePoolsRec* vpr)
{
    /*
     * Note: the 'vpr' argument is unused in this
     *       implementation; it is reserved for future use
     */
    XpOidList* job_attrs_supported;
    /*
     * only validate attributes found in job-attributes-supported
     */
    job_attrs_supported = XpGetListAttr(pContext, XPPrinterAttr,
					xpoid_att_job_attributes_supported,
					(const XpOidList*)NULL);
    /*
     * notification-profile
     */
    if(XpOidListHasOid(job_attrs_supported, xpoid_att_notification_profile))
    {
	XpValidateNotificationProfile(pContext);
    }
    /*
     * clean up
     */
    XpOidListDelete(job_attrs_supported);
}
示例#4
0
void
XpValidateListAttr(XpContextPtr pContext,
		   XPAttributes pool,
		   XpOid oid,
		   const XpOidList* valid_oids,
		   const XpOidList* default_oids)
{
    XpOidList* list = XpGetListAttr(pContext, pool, oid, valid_oids);
    if(XpOidListCount(list) == 0)
	XpPutListAttr(pContext, pool, oid, default_oids);
    else
	XpPutListAttr(pContext, pool, oid, list);
    XpOidListDelete(list);
}
示例#5
0
void
XpValidatePagePool(XpContextPtr pContext,
		   const XpValidatePoolsRec* vpr)
{
    XpOidList* page_attrs_supported;
    /*
     * only validate attributes found in xp-page-attributes-supported
     */
    page_attrs_supported =
	XpGetListAttr(pContext, XPPrinterAttr,
		      xpoid_att_xp_page_attributes_supported,
		      (const XpOidList*)NULL);
    /*
     * validate
     */
    XpValidateDocOrPagePool(pContext, XPPageAttr,
			    page_attrs_supported, vpr);
    /*
     * clean up
     */
    XpOidListDelete(page_attrs_supported);
}
示例#6
0
void
XpValidateDocumentPool(XpContextPtr pContext,
		       const XpValidatePoolsRec* vpr)
{
    XpOidList* document_attrs_supported;
    /*
     * only validate attributes found in document-attributes-supported
     */
    document_attrs_supported =
	XpGetListAttr(pContext, XPPrinterAttr,
		      xpoid_att_document_attributes_supported,
		      (const XpOidList*)NULL);
    /*
     * validate
     */
    XpValidateDocOrPagePool(pContext, XPDocAttr,
			    document_attrs_supported, vpr);
    /*
     * clean up
     */
    XpOidListDelete(document_attrs_supported);
}
示例#7
0
/*
 * XpGetPlex determines the plex as determined by the passed context. The page
 * and document pools are queried in turn for a specified plex attribute. If
 * none is found the first plex in the plexes-supported printer attribute is
 * taken as the default.
 *
 * Note: This routine assumes the values found in the passed context's
 *       attributes pools have been validated.
 */
XpOid
XpGetPlex(
	  XpContextPtr pContext)
{
    XpOid plex;

    plex = XpGetOidAttr(pContext, XPPageAttr, xpoid_att_plex,
			(XpOidList*)NULL);
    if(xpoid_none == plex)
	plex = XpGetOidAttr(pContext, XPDocAttr, xpoid_att_plex,
			    (XpOidList*)NULL);
    if(xpoid_none == plex)
    {
	XpOidList* plexes_supported;

	plexes_supported =
	    XpGetListAttr(pContext, XPPrinterAttr,
			  xpoid_att_plexes_supported,
			  (XpOidList*)NULL);
	plex = XpOidListGetOid(plexes_supported, 0);
	XpOidListDelete(plexes_supported);
    }
    return plex;
}
示例#8
0
static void
XpValidateDocOrPagePool(XpContextPtr pContext,
			XPAttributes pool, /* XPDocAttr or XPPageAttr */
			const XpOidList* attrs_supported,
			const XpValidatePoolsRec* vpr)
{
    /*
     * content-orientation
     */
    if(XpOidListHasOid(attrs_supported, xpoid_att_content_orientation))
    {
	XpOidList* content_orientations_supported;
	content_orientations_supported =
	    XpGetListAttr(pContext, XPPrinterAttr,
			  xpoid_att_content_orientations_supported,
			  vpr->valid_content_orientations_supported);
	XpValidateOidAttr(pContext, pool, xpoid_att_content_orientation,
			  content_orientations_supported, xpoid_none);
	XpOidListDelete(content_orientations_supported);
    }
    /*
     * copy-count
     */
    if(XpOidListHasOid(attrs_supported, xpoid_att_copy_count))
	XpValidateCardAttr(pContext, pool, xpoid_att_copy_count,
			   (const XpOidCardList*)NULL, 0);
    /*
     * default-printer-resolution
     */
    if(XpOidListHasOid(attrs_supported, xpoid_att_default_printer_resolution))
    {
	XpOidCardList* printer_resolutions_supported;
	printer_resolutions_supported =
	    XpGetCardListAttr(pContext, XPPrinterAttr,
			      xpoid_att_printer_resolutions_supported,
			      vpr->valid_printer_resolutions_supported);
	XpValidateCardAttr(pContext, pool,
			   xpoid_att_default_printer_resolution,
			   printer_resolutions_supported, 0);
	XpOidCardListDelete(printer_resolutions_supported);
    }
    /*
     * default-input-tray
     */
    if(XpOidListHasOid(attrs_supported, xpoid_att_default_input_tray))
    {
	XpOidTrayMediumList* input_trays_medium;
	const char* value_in;
	XpOid value_tray;
	
	input_trays_medium =
	    XpGetTrayMediumListAttr(pContext, XPPrinterAttr,
				    xpoid_att_input_trays_medium,
				    (const XpOidList*)NULL,
				    (const XpOidMediumSS*)NULL);
	value_in =
	    XpGetStringAttr(pContext, pool, xpoid_att_default_input_tray);
	value_tray = XpOidFromString(value_in);
	if(!XpOidTrayMediumListHasTray(input_trays_medium, value_tray))
	    value_tray = xpoid_none;
	XpPutOidAttr(pContext, pool, xpoid_att_default_input_tray, value_tray);
	XpOidTrayMediumListDelete(input_trays_medium);
    }
    /*
     * default-medium
     */
    if(XpOidListHasOid(attrs_supported, xpoid_att_default_medium))
    {
	XpOidMediumSS* msss;
	const char* value_in;
	XpOid value_size;
	
	msss = XpGetMediumSSAttr(pContext, XPPrinterAttr,
				 xpoid_att_medium_source_sizes_supported,
				 (const XpOidList*)NULL,
				 (const XpOidList*)NULL);
	value_in = XpGetStringAttr(pContext, pool, xpoid_att_default_medium);
	value_size = XpOidFromString(value_in);
	if(!XpOidMediumSSHasSize(msss, value_size))
	    value_size = xpoid_none;
	XpPutOidAttr(pContext, pool, xpoid_att_default_medium, value_size);
	XpOidMediumSSDelete(msss);
    }
    /*
     * document-format
     */
    if(XpOidListHasOid(attrs_supported, xpoid_att_document_format))
    {
	XpOidDocFmtList* document_formats_supported;
	const char* value_in;
	XpOidDocFmt* document_format;
	const char* value_out;
	
	document_formats_supported =
	    XpGetDocFmtListAttr(pContext, XPPrinterAttr,
				xpoid_att_document_formats_supported,
				vpr->valid_document_formats_supported);
	value_in = XpGetStringAttr(pContext, pool, xpoid_att_document_format);
	document_format = XpOidDocFmtNew(value_in);
	if(XpOidDocFmtListHasFmt(document_formats_supported, document_format))
	    value_out = XpOidDocFmtString(document_format);
	else
	    value_out = XpOidDocFmtString(vpr->default_document_format);
	XpOidDocFmtListDelete(document_formats_supported);
	XpOidDocFmtDelete(document_format);
	XpPutStringAttr(pContext, pool, xpoid_att_document_format, value_out);
	XpOidFree(value_out);
    }
    /*
     * plex
     */
    if(XpOidListHasOid(attrs_supported, xpoid_att_plex))
    {
	XpOidList* plexes_supported;
	plexes_supported =
	    XpGetListAttr(pContext, XPPrinterAttr, xpoid_att_plexes_supported,
			  vpr->valid_plexes_supported);
	XpValidateOidAttr(pContext, pool, xpoid_att_plex,
			  plexes_supported, xpoid_none);
	XpOidListDelete(plexes_supported);
    }
    /*
     * xp-listfonts-modes
     */
    if(XpOidListHasOid(attrs_supported, xpoid_att_xp_listfonts_modes))
    {
	XpOidList* xp_listfonts_modes_supported;
	xp_listfonts_modes_supported =
	    XpGetListAttr(pContext, XPPrinterAttr,
			  xpoid_att_xp_listfonts_modes_supported,
			  vpr->valid_xp_listfonts_modes_supported);
	XpValidateListAttr(pContext, pool, xpoid_att_xp_listfonts_modes,
			   xp_listfonts_modes_supported,
			   (const XpOidList*)NULL);
	XpOidListDelete(xp_listfonts_modes_supported);
    }
}