/* * 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; }
/* * 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; }
void XpValidateOidAttr(XpContextPtr pContext, XPAttributes pool, XpOid oid, const XpOidList* valid_oids, XpOid default_oid) { XpOid value_oid; value_oid = XpGetOidAttr(pContext, pool, oid, valid_oids); XpPutOidAttr(pContext, pool, oid, value_oid == xpoid_none ? default_oid : value_oid); }
/* * 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; }
/* * XpGetPageSize returns the XpOid of the current page size (medium names * are page sizes in this implementation) as indicated by the passed * context. * * The relevant input-tray is returned in pTray. This parm must not be * NULL. If the input-tray is not indicated or irrelevant, xpoid_none * will be returned. * * This function optionally takes a XpOidMediumSS representation of the * medium-source-sizes-supported attribute in order to avoid parsing the * string value twice for calling functions that need to parse m-s-s-s * anyway (e.g. XpGetReproductionArea). If the caller has no other reason * to parse medium-source-sizes-supported, it is recommended that NULL be * passed. This function will obtain medium-source-sizes-supported if it * needs to. * * Note: This routine assumes the values found in the passed context's * attributes pools have been validated. */ XpOid XpGetPageSize(XpContextPtr pContext, XpOid* pTray, const XpOidMediumSS* msss) { XpOid medium; /* * check to see if default-medium is specified */ medium = XpGetOidAttr(pContext, XPPageAttr, xpoid_att_default_medium, (const XpOidList*)NULL); if(medium == xpoid_none) { /* * default-medium not in page pool; try the document pool */ medium = XpGetOidAttr(pContext, XPDocAttr, xpoid_att_default_medium, (const XpOidList*)NULL); } if(medium == xpoid_none) { /* * default-medium not specified; try default-input-tray */ *pTray = XpGetOidAttr(pContext, XPPageAttr, xpoid_att_default_input_tray, (const XpOidList*)NULL); if(*pTray == xpoid_none) { /* * default-input-tray not in page pool; try the document pool */ *pTray = XpGetOidAttr(pContext, XPDocAttr, xpoid_att_default_input_tray, (const XpOidList*)NULL); } if(*pTray != xpoid_none) { /* * default-input-tray found; get corresponding medium from * input-trays-medium */ XpOidTrayMediumList* input_trays_medium; int i; input_trays_medium = XpGetTrayMediumListAttr(pContext, XPPrinterAttr, xpoid_att_input_trays_medium, (const XpOidList*)NULL, (const XpOidMediumSS*)NULL); for(i = 0; i < XpOidTrayMediumListCount(input_trays_medium); i++) { if(*pTray == XpOidTrayMediumListTray(input_trays_medium, i)) { medium = XpOidTrayMediumListMedium(input_trays_medium, i); break; } } XpOidTrayMediumListDelete(input_trays_medium); } } else *pTray = xpoid_none; if(medium == xpoid_none) { XpOidMediumSS* local_msss = (XpOidMediumSS*)NULL; int i_mss, i_ds; XpOidMediumDiscreteSizeList* ds_list; /* * no medium specified; use 1st page size found in * medium-source-sizes-supported */ if((XpOidMediumSS*)NULL == msss) msss = local_msss = XpGetMediumSSAttr(pContext, XPPrinterAttr, xpoid_att_medium_source_sizes_supported, (const XpOidList*)NULL, (const XpOidList*)NULL); for(i_mss = 0; i_mss < XpOidMediumSSCount(msss) && xpoid_none == medium; i_mss++) { if(XpOidMediumSS_DISCRETE == (msss->mss)[i_mss].mstag && xpoid_none != (msss->mss)[i_mss].input_tray) { ds_list = (msss->mss)[i_mss].ms.discrete; for(i_ds = 0; i_ds < ds_list->count; i_ds++) { if(xpoid_none != (ds_list->list)[i_ds].page_size) { medium = (ds_list->list)[i_ds].page_size; break; } } } } XpOidMediumSSDelete(local_msss); } return medium; }