2 (c) Copyright 1996 Hewlett-Packard Company
3 (c) Copyright 1996 International Business Machines Corp.
4 (c) Copyright 1996 Sun Microsystems, Inc.
5 (c) Copyright 1996 Novell, Inc.
6 (c) Copyright 1996 Digital Equipment Corp.
7 (c) Copyright 1996 Fujitsu Limited
8 (c) Copyright 1996 Hitachi, Ltd.
10 Permission is hereby granted, free of charge, to any person obtaining a copy
11 of this software and associated documentation files (the "Software"), to deal
12 in the Software without restriction, including without limitation the rights
13 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 copies of the Software, and to permit persons to whom the Software is
15 furnished to do so, subject to the following conditions:
17 The above copyright notice and this permission notice shall be included in
18 all copies or substantial portions of the Software.
20 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
24 IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
25 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 Except as contained in this notice, the names of the copyright holders shall
28 not be used in advertising or otherwise to promote the sale, use or other
29 dealings in this Software without prior written authorization from said
32 #ifdef HAVE_DIX_CONFIG_H
33 #include <dix-config.h>
36 #include <scrnintstr.h>
38 #include "attributes.h"
41 * default medium-source-sizes supported = na-letter w/.25" margins
43 static XpOidMediumDiscreteSize DefaultMediumSize
= {
44 xpoid_val_medium_size_na_letter
, xFalse
, {6.35, 209.55, 6.35, 273.05}
46 static XpOidMediumDiscreteSizeList DefaultMediumSizeList
= {
49 static XpOidMediumSourceSize DefaultMediumSourceSize
= {
50 xpoid_unspecified
, XpOidMediumSS_DISCRETE
, { &DefaultMediumSizeList
}
52 static XpOidMediumSS DefaultMediumSS
= {
53 &DefaultMediumSourceSize
, 1
57 * if 'valid_oid_list' is NULL any oid found is considered valid
60 XpGetOidAttr(XpContextPtr pContext
,
63 const XpOidList
* valid_oid_list
)
67 value_oid
= XpOidFromString(XpGetStringAttr(pContext
, pool
, oid
));
68 if((const XpOidList
*)NULL
== valid_oid_list
70 XpOidListHasOid(valid_oid_list
, value_oid
))
81 XpPutOidAttr(XpContextPtr pContext
,
86 XpPutStringAttr(pContext
, pool
, oid
, XpOidString(value_oid
));
90 XpValidateOidAttr(XpContextPtr pContext
,
93 const XpOidList
* valid_oids
,
97 value_oid
= XpGetOidAttr(pContext
, pool
, oid
, valid_oids
);
98 XpPutOidAttr(pContext
, pool
, oid
,
99 value_oid
== xpoid_none
? default_oid
: value_oid
);
103 * if 'valid_card_list' is NULL any cardinal found is considered valid
106 XpGetCardAttr(XpContextPtr pContext
,
109 const XpOidCardList
* valid_card_list
)
111 unsigned long value_card
;
113 if(XpOidParseUnsignedValue(XpGetStringAttr(pContext
, pool
, oid
),
117 if((const XpOidCardList
*)NULL
== valid_card_list
119 XpOidCardListHasCard(valid_card_list
, value_card
))
128 XpPutCardAttr(XpContextPtr pContext
,
131 unsigned long value_card
)
136 sprintf(value_out
, "%lu", value_card
);
137 XpPutStringAttr(pContext
, pool
, oid
, value_out
);
140 XpPutStringAttr(pContext
, pool
, oid
, (const char*)NULL
);
144 XpValidateCardAttr(XpContextPtr pContext
,
147 const XpOidCardList
* valid_cards
,
148 unsigned long default_card
)
150 unsigned long value_card
;
151 value_card
= XpGetCardAttr(pContext
, pool
, oid
, valid_cards
);
152 XpPutCardAttr(pContext
, pool
, oid
,
153 value_card
== 0 ? default_card
: value_card
);
157 XpGetListAttr(XpContextPtr pContext
,
160 const XpOidList
* valid_oid_list
)
162 return XpOidListNew(XpGetStringAttr(pContext
, pool
, oid
), valid_oid_list
);
166 XpPutListAttr(XpContextPtr pContext
,
169 const XpOidList
* list
)
173 value_out
= XpOidListString(list
);
174 XpPutStringAttr(pContext
, pool
, oid
, value_out
);
175 XpOidFree(value_out
);
179 XpValidateListAttr(XpContextPtr pContext
,
182 const XpOidList
* valid_oids
,
183 const XpOidList
* default_oids
)
185 XpOidList
* list
= XpGetListAttr(pContext
, pool
, oid
, valid_oids
);
186 if(XpOidListCount(list
) == 0)
187 XpPutListAttr(pContext
, pool
, oid
, default_oids
);
189 XpPutListAttr(pContext
, pool
, oid
, list
);
190 XpOidListDelete(list
);
194 XpGetCardListAttr(XpContextPtr pContext
,
197 const XpOidCardList
* valid_card_list
)
199 return XpOidCardListNew(XpGetStringAttr(pContext
, pool
, oid
),
204 XpPutCardListAttr(XpContextPtr pContext
,
207 const XpOidCardList
* list
)
211 value_out
= XpOidCardListString(list
);
212 XpPutStringAttr(pContext
, pool
, oid
, value_out
);
213 XpOidFree(value_out
);
217 XpValidateCardListAttr(XpContextPtr pContext
,
220 const XpOidCardList
* valid_cards
,
221 const XpOidCardList
* default_cards
)
223 XpOidCardList
* list
= XpGetCardListAttr(pContext
, pool
, oid
, valid_cards
);
224 if(XpOidCardListCount(list
) == 0 && (XpOidCardList
*)NULL
!= default_cards
)
225 XpPutCardListAttr(pContext
, pool
, oid
, default_cards
);
227 XpPutCardListAttr(pContext
, pool
, oid
, list
);
228 XpOidCardListDelete(list
);
232 XpGetDocFmtListAttr(XpContextPtr pContext
,
235 const XpOidDocFmtList
* valid_fmt_list
)
237 return XpOidDocFmtListNew(XpGetStringAttr(pContext
, pool
, oid
),
242 XpPutDocFmtListAttr(XpContextPtr pContext
,
245 const XpOidDocFmtList
* list
)
249 value_out
= XpOidDocFmtListString(list
);
250 XpPutStringAttr(pContext
, pool
, oid
, value_out
);
251 XpOidFree(value_out
);
255 XpValidateDocFmtListAttr(XpContextPtr pContext
,
258 const XpOidDocFmtList
* valid_fmts
,
259 const XpOidDocFmtList
* default_fmts
)
261 XpOidDocFmtList
* list
;
263 list
= XpGetDocFmtListAttr(pContext
, pool
, oid
, valid_fmts
);
264 if(XpOidDocFmtListCount(list
) == 0
266 (XpOidDocFmtList
*)NULL
!= default_fmts
)
268 XpPutDocFmtListAttr(pContext
, pool
, oid
, default_fmts
);
272 XpPutDocFmtListAttr(pContext
, pool
, oid
, list
);
274 XpOidDocFmtListDelete(list
);
278 XpGetMediumSSAttr(XpContextPtr pContext
,
281 const XpOidList
* valid_trays
,
282 const XpOidList
* valid_sizes
)
284 return XpOidMediumSSNew(XpGetStringAttr(pContext
, pool
, oid
),
285 valid_trays
, valid_sizes
);
289 XpPutMediumSSAttr(XpContextPtr pContext
,
292 const XpOidMediumSS
* msss
)
296 value_out
= XpOidMediumSSString(msss
);
297 XpPutStringAttr(pContext
, pool
, oid
, value_out
);
298 XpOidFree(value_out
);
302 XpGetDefaultMediumSS()
304 return &DefaultMediumSS
;
308 XpGetTrayMediumListAttr(XpContextPtr pContext
,
311 const XpOidList
* valid_trays
,
312 const XpOidMediumSS
* msss
)
314 return XpOidTrayMediumListNew(XpGetStringAttr(pContext
, pool
, oid
),
319 XpPutTrayMediumListAttr(XpContextPtr pContext
,
322 const XpOidTrayMediumList
* tm
)
326 value_out
= XpOidTrayMediumListString(tm
);
327 XpPutStringAttr(pContext
, pool
, oid
, value_out
);
328 XpOidFree(value_out
);
332 XpValidatePrinterMediaAttrs(XpContextPtr pContext
,
333 const XpOidList
* valid_trays
,
334 const XpOidList
* valid_sizes
)
336 const XpOidMediumSS
* msss
;
337 XpOidMediumSS
* pool_msss
;
338 XpOidTrayMediumList
* tm
;
340 pool_msss
= XpGetMediumSSAttr(pContext
, XPPrinterAttr
,
341 xpoid_att_medium_source_sizes_supported
,
342 valid_trays
, valid_sizes
);
343 if(0 == XpOidMediumSSCount(pool_msss
))
344 msss
= XpGetDefaultMediumSS();
347 XpPutMediumSSAttr(pContext
, XPPrinterAttr
,
348 xpoid_att_medium_source_sizes_supported
, msss
);
350 tm
= XpGetTrayMediumListAttr(pContext
, XPPrinterAttr
,
351 xpoid_att_input_trays_medium
,
353 XpPutTrayMediumListAttr(pContext
, XPPrinterAttr
,
354 xpoid_att_input_trays_medium
, tm
);
356 XpOidMediumSSDelete(pool_msss
);
357 XpOidTrayMediumListDelete(tm
);
362 XpValidatePrinterPool(XpContextPtr pContext
,
363 const XpValidatePoolsRec
* vpr
)
366 * content-orientations-supported
368 XpValidateListAttr(pContext
, XPPrinterAttr
,
369 xpoid_att_content_orientations_supported
,
370 vpr
->valid_content_orientations_supported
,
371 vpr
->default_content_orientations_supported
);
373 * document-formats-supported
375 XpValidateDocFmtListAttr(pContext
, XPPrinterAttr
,
376 xpoid_att_document_formats_supported
,
377 vpr
->valid_document_formats_supported
,
378 vpr
->default_document_formats_supported
);
382 XpValidateListAttr(pContext
, XPPrinterAttr
, xpoid_att_plexes_supported
,
383 vpr
->valid_plexes_supported
,
384 vpr
->default_plexes_supported
);
386 * printer-resolutions-supported
388 XpValidateCardListAttr(pContext
, XPPrinterAttr
,
389 xpoid_att_printer_resolutions_supported
,
390 vpr
->valid_printer_resolutions_supported
,
391 vpr
->default_printer_resolutions_supported
);
393 * xp-embedded-formats-supported
395 XpValidateDocFmtListAttr(pContext
, XPPrinterAttr
,
396 xpoid_att_xp_embedded_formats_supported
,
397 vpr
->valid_xp_embedded_formats_supported
,
398 vpr
->default_xp_embedded_formats_supported
);
400 * xp-listfonts-modes-supported
402 XpValidateListAttr(pContext
, XPPrinterAttr
,
403 xpoid_att_xp_listfonts_modes_supported
,
404 vpr
->valid_xp_listfonts_modes_supported
,
405 vpr
->default_xp_listfonts_modes_supported
);
407 * xp-raw-formats-supported
409 XpValidateDocFmtListAttr(pContext
, XPPrinterAttr
,
410 xpoid_att_xp_raw_formats_supported
,
411 vpr
->valid_xp_raw_formats_supported
,
412 vpr
->default_xp_raw_formats_supported
);
416 XpValidateOidAttr(pContext
, XPPrinterAttr
, xpoid_att_xp_setup_proviso
,
417 vpr
->valid_xp_setup_proviso
, xpoid_none
);
419 * medium-source-sizes-supported
422 XpValidatePrinterMediaAttrs(pContext
,
423 vpr
->valid_input_trays
,
424 vpr
->valid_medium_sizes
);
426 * available-compressions-supported
428 XpValidateListAttr(pContext
, XPPrinterAttr
,
429 xpoid_att_available_compressions_supported
,
430 vpr
->valid_available_compressions_supported
,
431 vpr
->default_available_compressions_supported
);
436 XpValidateNotificationProfile(XpContextPtr pContext
)
438 const char* value_in
;
439 const char* value_out
;
441 value_in
= XpGetStringAttr(pContext
, XPJobAttr
,
442 xpoid_att_notification_profile
);
443 value_out
= XpOidNotifyString(XpOidNotifyParse(value_in
));
444 XpPutStringAttr(pContext
, XPJobAttr
,
445 xpoid_att_notification_profile
, value_out
);
449 XpValidateJobPool(XpContextPtr pContext
,
450 const XpValidatePoolsRec
* vpr
)
453 * Note: the 'vpr' argument is unused in this
454 * implementation; it is reserved for future use
456 XpOidList
* job_attrs_supported
;
458 * only validate attributes found in job-attributes-supported
460 job_attrs_supported
= XpGetListAttr(pContext
, XPPrinterAttr
,
461 xpoid_att_job_attributes_supported
,
462 (const XpOidList
*)NULL
);
464 * notification-profile
466 if(XpOidListHasOid(job_attrs_supported
, xpoid_att_notification_profile
))
468 XpValidateNotificationProfile(pContext
);
473 XpOidListDelete(job_attrs_supported
);
478 XpValidateDocOrPagePool(XpContextPtr pContext
,
479 XPAttributes pool
, /* XPDocAttr or XPPageAttr */
480 const XpOidList
* attrs_supported
,
481 const XpValidatePoolsRec
* vpr
)
484 * content-orientation
486 if(XpOidListHasOid(attrs_supported
, xpoid_att_content_orientation
))
488 XpOidList
* content_orientations_supported
;
489 content_orientations_supported
=
490 XpGetListAttr(pContext
, XPPrinterAttr
,
491 xpoid_att_content_orientations_supported
,
492 vpr
->valid_content_orientations_supported
);
493 XpValidateOidAttr(pContext
, pool
, xpoid_att_content_orientation
,
494 content_orientations_supported
, xpoid_none
);
495 XpOidListDelete(content_orientations_supported
);
500 if(XpOidListHasOid(attrs_supported
, xpoid_att_copy_count
))
501 XpValidateCardAttr(pContext
, pool
, xpoid_att_copy_count
,
502 (const XpOidCardList
*)NULL
, 0);
504 * default-printer-resolution
506 if(XpOidListHasOid(attrs_supported
, xpoid_att_default_printer_resolution
))
508 XpOidCardList
* printer_resolutions_supported
;
509 printer_resolutions_supported
=
510 XpGetCardListAttr(pContext
, XPPrinterAttr
,
511 xpoid_att_printer_resolutions_supported
,
512 vpr
->valid_printer_resolutions_supported
);
513 XpValidateCardAttr(pContext
, pool
,
514 xpoid_att_default_printer_resolution
,
515 printer_resolutions_supported
, 0);
516 XpOidCardListDelete(printer_resolutions_supported
);
521 if(XpOidListHasOid(attrs_supported
, xpoid_att_default_input_tray
))
523 XpOidTrayMediumList
* input_trays_medium
;
524 const char* value_in
;
528 XpGetTrayMediumListAttr(pContext
, XPPrinterAttr
,
529 xpoid_att_input_trays_medium
,
530 (const XpOidList
*)NULL
,
531 (const XpOidMediumSS
*)NULL
);
533 XpGetStringAttr(pContext
, pool
, xpoid_att_default_input_tray
);
534 value_tray
= XpOidFromString(value_in
);
535 if(!XpOidTrayMediumListHasTray(input_trays_medium
, value_tray
))
536 value_tray
= xpoid_none
;
537 XpPutOidAttr(pContext
, pool
, xpoid_att_default_input_tray
, value_tray
);
538 XpOidTrayMediumListDelete(input_trays_medium
);
543 if(XpOidListHasOid(attrs_supported
, xpoid_att_default_medium
))
546 const char* value_in
;
549 msss
= XpGetMediumSSAttr(pContext
, XPPrinterAttr
,
550 xpoid_att_medium_source_sizes_supported
,
551 (const XpOidList
*)NULL
,
552 (const XpOidList
*)NULL
);
553 value_in
= XpGetStringAttr(pContext
, pool
, xpoid_att_default_medium
);
554 value_size
= XpOidFromString(value_in
);
555 if(!XpOidMediumSSHasSize(msss
, value_size
))
556 value_size
= xpoid_none
;
557 XpPutOidAttr(pContext
, pool
, xpoid_att_default_medium
, value_size
);
558 XpOidMediumSSDelete(msss
);
563 if(XpOidListHasOid(attrs_supported
, xpoid_att_document_format
))
565 XpOidDocFmtList
* document_formats_supported
;
566 const char* value_in
;
567 XpOidDocFmt
* document_format
;
568 const char* value_out
;
570 document_formats_supported
=
571 XpGetDocFmtListAttr(pContext
, XPPrinterAttr
,
572 xpoid_att_document_formats_supported
,
573 vpr
->valid_document_formats_supported
);
574 value_in
= XpGetStringAttr(pContext
, pool
, xpoid_att_document_format
);
575 document_format
= XpOidDocFmtNew(value_in
);
576 if(XpOidDocFmtListHasFmt(document_formats_supported
, document_format
))
577 value_out
= XpOidDocFmtString(document_format
);
579 value_out
= XpOidDocFmtString(vpr
->default_document_format
);
580 XpOidDocFmtListDelete(document_formats_supported
);
581 XpOidDocFmtDelete(document_format
);
582 XpPutStringAttr(pContext
, pool
, xpoid_att_document_format
, value_out
);
583 XpOidFree(value_out
);
588 if(XpOidListHasOid(attrs_supported
, xpoid_att_plex
))
590 XpOidList
* plexes_supported
;
592 XpGetListAttr(pContext
, XPPrinterAttr
, xpoid_att_plexes_supported
,
593 vpr
->valid_plexes_supported
);
594 XpValidateOidAttr(pContext
, pool
, xpoid_att_plex
,
595 plexes_supported
, xpoid_none
);
596 XpOidListDelete(plexes_supported
);
601 if(XpOidListHasOid(attrs_supported
, xpoid_att_xp_listfonts_modes
))
603 XpOidList
* xp_listfonts_modes_supported
;
604 xp_listfonts_modes_supported
=
605 XpGetListAttr(pContext
, XPPrinterAttr
,
606 xpoid_att_xp_listfonts_modes_supported
,
607 vpr
->valid_xp_listfonts_modes_supported
);
608 XpValidateListAttr(pContext
, pool
, xpoid_att_xp_listfonts_modes
,
609 xp_listfonts_modes_supported
,
610 (const XpOidList
*)NULL
);
611 XpOidListDelete(xp_listfonts_modes_supported
);
614 * available-compressions
616 if(XpOidListHasOid(attrs_supported
, xpoid_att_available_compression
))
618 XpOidList
* available_compressions_supported
;
619 available_compressions_supported
=
620 XpGetListAttr(pContext
, XPPrinterAttr
,
621 xpoid_att_available_compressions_supported
,
622 vpr
->valid_available_compressions_supported
);
623 XpValidateOidAttr(pContext
, pool
, xpoid_att_available_compression
,
624 available_compressions_supported
, xpoid_none
);
625 XpOidListDelete(available_compressions_supported
);
630 XpValidateDocumentPool(XpContextPtr pContext
,
631 const XpValidatePoolsRec
* vpr
)
633 XpOidList
* document_attrs_supported
;
635 * only validate attributes found in document-attributes-supported
637 document_attrs_supported
=
638 XpGetListAttr(pContext
, XPPrinterAttr
,
639 xpoid_att_document_attributes_supported
,
640 (const XpOidList
*)NULL
);
644 XpValidateDocOrPagePool(pContext
, XPDocAttr
,
645 document_attrs_supported
, vpr
);
649 XpOidListDelete(document_attrs_supported
);
653 XpValidatePagePool(XpContextPtr pContext
,
654 const XpValidatePoolsRec
* vpr
)
656 XpOidList
* page_attrs_supported
;
658 * only validate attributes found in xp-page-attributes-supported
660 page_attrs_supported
=
661 XpGetListAttr(pContext
, XPPrinterAttr
,
662 xpoid_att_xp_page_attributes_supported
,
663 (const XpOidList
*)NULL
);
667 XpValidateDocOrPagePool(pContext
, XPPageAttr
,
668 page_attrs_supported
, vpr
);
672 XpOidListDelete(page_attrs_supported
);
676 XpValidateAttributePool(XpContextPtr pContext
,
678 const XpValidatePoolsRec
* vpr
)
683 XpValidatePrinterPool(pContext
, vpr
);
687 XpValidateDocumentPool(pContext
, vpr
);
691 XpValidateJobPool(pContext
, vpr
);
695 XpValidatePagePool(pContext
, vpr
);